From 0c8c5ac1fee756bb02de700a660ee7b9e48a4514 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Thu, 27 Aug 2020 20:49:25 +0200 Subject: [PATCH 01/15] Handle FuncExpr columns Signed-off-by: Rohit Nayak --- go/vt/wrangler/vdiff.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/go/vt/wrangler/vdiff.go b/go/vt/wrangler/vdiff.go index 850799bc572..8055fc37535 100644 --- a/go/vt/wrangler/vdiff.go +++ b/go/vt/wrangler/vdiff.go @@ -23,6 +23,8 @@ import ( "sync" "time" + "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/vtgate/evalengine" "github.com/golang/protobuf/proto" @@ -356,12 +358,23 @@ func (df *vdiff) buildTablePlan(table *tabletmanagerdatapb.TableDefinition, quer var orderby sqlparser.OrderBy for _, pk := range table.PrimaryKeyColumns { + log.Infof("vdiff: pk %s", pk) found := false for i, selExpr := range targetSelect.SelectExprs { - colname := selExpr.(*sqlparser.AliasedExpr).Expr.(*sqlparser.ColName).Name.Lowered() - if pk == colname { + expr := selExpr.(*sqlparser.AliasedExpr).Expr + var colname string + switch ct := expr.(type) { + case *sqlparser.ColName: + colname = ct.Name.String() + case *sqlparser.FuncExpr: //eg. weight_string() + colname = ct.Name.String() + default: + log.Warningf("Unhandled type found for column in vdiff: %v(%v)", selExpr, ct) + colname = "" + } + if strings.EqualFold(pk, colname) { td.comparePKs = append(td.comparePKs, td.compareCols[i]) - // We'll be comparing pks seperately. So, remove them from compareCols. + // We'll be comparing pks separately. So, remove them from compareCols. td.compareCols[i] = -1 found = true break From a3359a1d69c7fb5a44abc88666aa4037b3976fce Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Thu, 27 Aug 2020 21:32:59 +0200 Subject: [PATCH 02/15] Add collation to e2e test to table with unicode_loose_md5 Signed-off-by: Rohit Nayak --- go/test/endtoend/vreplication/config.go | 2 +- go/vt/wrangler/vdiff.go | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/go/test/endtoend/vreplication/config.go b/go/test/endtoend/vreplication/config.go index c22a486e39c..d539252d5d0 100644 --- a/go/test/endtoend/vreplication/config.go +++ b/go/test/endtoend/vreplication/config.go @@ -4,7 +4,7 @@ var ( initialProductSchema = ` create table product(pid int, description varbinary(128), primary key(pid)); create table customer(cid int, name varbinary(128), primary key(cid)); -create table merchant(mname varchar(128), category varchar(128), primary key(mname)); +create table merchant(mname varchar(128), category varchar(128), primary key(mname)) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; create table orders(oid int, cid int, pid int, mname varchar(128), price int, primary key(oid)); create table customer_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; create table order_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; diff --git a/go/vt/wrangler/vdiff.go b/go/vt/wrangler/vdiff.go index 8055fc37535..202f1732062 100644 --- a/go/vt/wrangler/vdiff.go +++ b/go/vt/wrangler/vdiff.go @@ -358,7 +358,6 @@ func (df *vdiff) buildTablePlan(table *tabletmanagerdatapb.TableDefinition, quer var orderby sqlparser.OrderBy for _, pk := range table.PrimaryKeyColumns { - log.Infof("vdiff: pk %s", pk) found := false for i, selExpr := range targetSelect.SelectExprs { expr := selExpr.(*sqlparser.AliasedExpr).Expr From 272226ee157e5d2873ed25233b3ef75a9edca836 Mon Sep 17 00:00:00 2001 From: Rohit Nayak Date: Sun, 13 Sep 2020 15:33:54 +0200 Subject: [PATCH 03/15] Turn off schema tracker by default Signed-off-by: Rohit Nayak --- go/vt/vttablet/tabletserver/tabletenv/config.go | 2 +- go/vt/vttablet/tabletserver/tabletenv/config_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vttablet/tabletserver/tabletenv/config.go b/go/vt/vttablet/tabletserver/tabletenv/config.go index f68e8da3c0f..1e195414720 100644 --- a/go/vt/vttablet/tabletserver/tabletenv/config.go +++ b/go/vt/vttablet/tabletserver/tabletenv/config.go @@ -117,7 +117,7 @@ func init() { flag.BoolVar(¤tConfig.TerseErrors, "queryserver-config-terse-errors", defaultConfig.TerseErrors, "prevent bind vars from escaping in returned errors") flag.StringVar(&deprecatedPoolNamePrefix, "pool-name-prefix", "", "Deprecated") flag.BoolVar(¤tConfig.WatchReplication, "watch_replication_stream", false, "When enabled, vttablet will stream the MySQL replication stream from the local server, and use it to update schema when it sees a DDL.") - flag.BoolVar(¤tConfig.TrackSchemaVersions, "track_schema_versions", true, "When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position") + flag.BoolVar(¤tConfig.TrackSchemaVersions, "track_schema_versions", false, "When enabled, vttablet will store versions of schemas at each position that a DDL is applied and allow retrieval of the schema corresponding to a position") flag.BoolVar(&deprecatedAutocommit, "enable-autocommit", true, "This flag is deprecated. Autocommit is always allowed.") flag.BoolVar(¤tConfig.TwoPCEnable, "twopc_enable", defaultConfig.TwoPCEnable, "if the flag is on, 2pc is enabled. Other 2pc flags must be supplied.") flag.StringVar(¤tConfig.TwoPCCoordinatorAddress, "twopc_coordinator_address", defaultConfig.TwoPCCoordinatorAddress, "address of the (VTGate) process(es) that will be used to notify of abandoned transactions.") diff --git a/go/vt/vttablet/tabletserver/tabletenv/config_test.go b/go/vt/vttablet/tabletserver/tabletenv/config_test.go index bcb5e684a30..082c02c794f 100644 --- a/go/vt/vttablet/tabletserver/tabletenv/config_test.go +++ b/go/vt/vttablet/tabletserver/tabletenv/config_test.go @@ -190,7 +190,7 @@ func TestFlags(t *testing.T) { StreamBufferSize: 32768, QueryCacheSize: 5000, SchemaReloadIntervalSeconds: 1800, - TrackSchemaVersions: true, + TrackSchemaVersions: false, MessagePostponeParallelism: 4, CacheResultFields: true, TxThrottlerConfig: "target_replication_lag_sec: 2\nmax_replication_lag_sec: 10\ninitial_rate: 100\nmax_increase: 1\nemergency_decrease: 0.5\nmin_duration_between_increases_sec: 40\nmax_duration_between_increases_sec: 62\nmin_duration_between_decreases_sec: 20\nspread_backlog_across_sec: 20\nage_bad_rate_after_sec: 180\nbad_rate_increase: 0.1\nmax_rate_approach_threshold: 0.9\n", From 7b075b659261446fc52832127069ee7b4ae48273 Mon Sep 17 00:00:00 2001 From: Harshit Gangal Date: Sat, 19 Sep 2020 10:06:58 +0530 Subject: [PATCH 04/15] end to end test for reserved connection in autocommit mode Signed-off-by: Harshit Gangal --- .../vtgate/setstatement/sysvar_test.go | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/go/test/endtoend/vtgate/setstatement/sysvar_test.go b/go/test/endtoend/vtgate/setstatement/sysvar_test.go index 0eccc545ec6..9a7e98bafc3 100644 --- a/go/test/endtoend/vtgate/setstatement/sysvar_test.go +++ b/go/test/endtoend/vtgate/setstatement/sysvar_test.go @@ -192,6 +192,36 @@ func TestSetSystemVariableAndThenSuccessfulTx(t *testing.T) { assertMatches(t, conn, "select @@sql_safe_updates", "[[INT64(1)]]") } +func TestSetSystemVariableAndThenSuccessfulAutocommitDML(t *testing.T) { + vtParams := mysql.ConnParams{ + Host: "localhost", + Port: clusterInstance.VtgateMySQLPort, + } + + conn, err := mysql.Connect(context.Background(), &vtParams) + require.NoError(t, err) + defer conn.Close() + checkedExec(t, conn, `delete from test`) + + checkedExec(t, conn, `set sql_safe_updates = 1`) + + checkedExec(t, conn, `insert into test (id, val1) values (80, null)`) + assertMatches(t, conn, `select id, val1 from test`, `[[INT64(80) NULL]]`) + assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) + + checkedExec(t, conn, `update test set val2 = 2 where val1 is null`) + assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) NULL INT64(2)]]`) + assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) + + checkedExec(t, conn, `update test set val1 = 'text' where val1 is null`) + assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) VARCHAR("text") INT64(2)]]`) + assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) + + checkedExec(t, conn, `delete from test where val1 = 'text'`) + assertMatches(t, conn, `select id, val1, val2 from test`, `[]`) + assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) +} + func TestStartTxAndSetSystemVariableAndThenSuccessfulCommit(t *testing.T) { vtParams := mysql.ConnParams{ Host: "localhost", From 3b73b84b2d07cb190935410e70edfe6814693bc5 Mon Sep 17 00:00:00 2001 From: Harshit Gangal Date: Mon, 21 Sep 2020 21:21:27 +0530 Subject: [PATCH 05/15] handle reserved connection in autocommit enabled Signed-off-by: Harshit Gangal --- go/test/endtoend/vtgate/setstatement/sysvar_test.go | 4 ++-- go/vt/vtgate/safe_session.go | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/go/test/endtoend/vtgate/setstatement/sysvar_test.go b/go/test/endtoend/vtgate/setstatement/sysvar_test.go index 9a7e98bafc3..424e2f65e3f 100644 --- a/go/test/endtoend/vtgate/setstatement/sysvar_test.go +++ b/go/test/endtoend/vtgate/setstatement/sysvar_test.go @@ -210,11 +210,11 @@ func TestSetSystemVariableAndThenSuccessfulAutocommitDML(t *testing.T) { assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) checkedExec(t, conn, `update test set val2 = 2 where val1 is null`) - assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) NULL INT64(2)]]`) + assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) NULL INT32(2)]]`) assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) checkedExec(t, conn, `update test set val1 = 'text' where val1 is null`) - assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) VARCHAR("text") INT64(2)]]`) + assertMatches(t, conn, `select id, val1, val2 from test`, `[[INT64(80) VARCHAR("text") INT32(2)]]`) assertMatches(t, conn, `select @@sql_safe_updates`, `[[INT64(1)]]`) checkedExec(t, conn, `delete from test where val1 = 'text'`) diff --git a/go/vt/vtgate/safe_session.go b/go/vt/vtgate/safe_session.go index a4de83364ee..ea386da1fc5 100644 --- a/go/vt/vtgate/safe_session.go +++ b/go/vt/vtgate/safe_session.go @@ -214,7 +214,10 @@ func (session *SafeSession) AppendOrUpdate(shardSession *vtgatepb.Session_ShardS session.mu.Lock() defer session.mu.Unlock() - if session.autocommitState == autocommitted { + // additional check of transaction id is required + // as now in autocommit mode there can be session due to reserved connection + // that needs to be stored as shard session. + if session.autocommitState == autocommitted && shardSession.TransactionId != 0 { // Should be unreachable return vterrors.New(vtrpcpb.Code_INTERNAL, "BUG: SafeSession.AppendOrUpdate: unexpected autocommit state") } From 937dd29983a9d006c4c7089f657b77e133da8432 Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Mon, 21 Sep 2020 12:31:19 +0200 Subject: [PATCH 06/15] operator precedence must take associativity into consideration Signed-off-by: Andres Taylor --- go/vt/sqlparser/ast.go | 12 ++++----- go/vt/sqlparser/precedence_test.go | 8 ++++++ go/vt/sqlparser/tracked_buffer.go | 42 +++++++++++++++++++++++------- 3 files changed, 46 insertions(+), 16 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 60a699d993a..67dc784275f 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -1537,17 +1537,17 @@ func (node Exprs) Format(buf *TrackedBuffer) { // Format formats the node. func (node *AndExpr) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v and %v", node.Left, node.Right) + buf.astPrintf(node, "%l and %r", node.Left, node.Right) } // Format formats the node. func (node *OrExpr) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v or %v", node.Left, node.Right) + buf.astPrintf(node, "%l or %r", node.Left, node.Right) } // Format formats the node. func (node *XorExpr) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v xor %v", node.Left, node.Right) + buf.astPrintf(node, "%l xor %r", node.Left, node.Right) } // Format formats the node. @@ -1557,7 +1557,7 @@ func (node *NotExpr) Format(buf *TrackedBuffer) { // Format formats the node. func (node *ComparisonExpr) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v %s %v", node.Left, node.Operator, node.Right) + buf.astPrintf(node, "%l %s %r", node.Left, node.Operator, node.Right) if node.Escape != nil { buf.astPrintf(node, " escape %v", node.Escape) } @@ -1565,7 +1565,7 @@ func (node *ComparisonExpr) Format(buf *TrackedBuffer) { // Format formats the node. func (node *RangeCond) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v %s %v and %v", node.Left, node.Operator, node.From, node.To) + buf.astPrintf(node, "%v %s %l and %r", node.Left, node.Operator, node.From, node.To) } // Format formats the node. @@ -1635,7 +1635,7 @@ func (node ListArg) Format(buf *TrackedBuffer) { // Format formats the node. func (node *BinaryExpr) Format(buf *TrackedBuffer) { - buf.astPrintf(node, "%v %s %v", node.Left, node.Operator, node.Right) + buf.astPrintf(node, "%l %s %r", node.Left, node.Operator, node.Right) } // Format formats the node. diff --git a/go/vt/sqlparser/precedence_test.go b/go/vt/sqlparser/precedence_test.go index c0676dee9be..7f8c65032a7 100644 --- a/go/vt/sqlparser/precedence_test.go +++ b/go/vt/sqlparser/precedence_test.go @@ -142,6 +142,14 @@ func TestParens(t *testing.T) { {in: "(a | b) between (5) and (7)", expected: "a | b between 5 and 7"}, {in: "(a and b) between (5) and (7)", expected: "(a and b) between 5 and 7"}, {in: "(true is true) is null", expected: "(true is true) is null"}, + {in: "3 * (100 div 3)", expected: "3 * (100 div 3)"}, + {in: "100 div 2 div 2", expected: "100 div 2 div 2"}, + {in: "100 div (2 div 2)", expected: "100 div (2 div 2)"}, + {in: "(100 div 2) div 2", expected: "100 div 2 div 2"}, + {in: "((((((1000))))))", expected: "1000"}, + {in: "100 - (50 + 10)", expected: "100 - (50 + 10)"}, + {in: "100 - 50 + 10", expected: "100 - 50 + 10"}, + {in: "true and (true and true)", expected: "true and (true and true)"}, } for _, tc := range tests { diff --git a/go/vt/sqlparser/tracked_buffer.go b/go/vt/sqlparser/tracked_buffer.go index 8f5fef1f689..a8230360139 100644 --- a/go/vt/sqlparser/tracked_buffer.go +++ b/go/vt/sqlparser/tracked_buffer.go @@ -56,7 +56,9 @@ func (buf *TrackedBuffer) WriteNode(node SQLNode) *TrackedBuffer { // Myprintf mimics fmt.Fprintf(buf, ...), but limited to Node(%v), // Node.Value(%s) and string(%s). It also allows a %a for a value argument, in // which case it adds tracking info for future substitutions. -// It adds parens as needed to follow precedence rules when printing expressions +// It adds parens as needed to follow precedence rules when printing expressions. +// To handle parens correctly for left associative binary operators, +// use %l and %r to tell the TrackedBuffer which value is on the LHS and RHS // // The name must be something other than the usual Printf() to avoid "go vet" // warnings due to our custom format specifiers. @@ -87,7 +89,8 @@ func (buf *TrackedBuffer) astPrintf(currentNode SQLNode, format string, values . break } i++ // '%' - switch format[i] { + token := format[i] + switch token { case 'c': switch v := values[fieldnum].(type) { case byte: @@ -106,19 +109,19 @@ func (buf *TrackedBuffer) astPrintf(currentNode SQLNode, format string, values . default: panic(fmt.Sprintf("unexpected TrackedBuffer type %T", v)) } - case 'v': + case 'l', 'r', 'v': + left := token != 'r' value := values[fieldnum] expr := getExpressionForParensEval(checkParens, value) - if expr != nil { // - needParens := needParens(currentExpr, expr) + if expr == nil { + buf.formatter(value.(SQLNode)) + } else { + needParens := needParens(currentExpr, expr, left) buf.printIf(needParens, "(") buf.formatter(expr) buf.printIf(needParens, ")") - } else { - buf.formatter(value.(SQLNode)) } - case 'a': buf.WriteArg(values[fieldnum].(string)) default: @@ -153,7 +156,16 @@ func (buf *TrackedBuffer) formatter(node SQLNode) { } } -func needParens(op, val Expr) bool { +//needParens says if we need a parenthesis +// op is the operator we are printing +// val is the value we are checking if we need parens around or not +// left let's us know if the value is on the lhs or rhs of the operator +func needParens(op, val Expr, left bool) bool { + // Values are atomic and never need parens + if IsValue(val) { + return false + } + if areBothISExpr(op, val) { return true } @@ -161,7 +173,17 @@ func needParens(op, val Expr) bool { opBinding := precedenceFor(op) valBinding := precedenceFor(val) - return !(opBinding == Syntactic || valBinding == Syntactic) && valBinding > opBinding + if opBinding == Syntactic || valBinding == Syntactic { + return false + } + + if left { + // for left associative operators, if the value is to the left of the operator, + // we only need parens if the order is higher for the value expression + return valBinding > opBinding + } + + return valBinding >= opBinding } func areBothISExpr(op Expr, val Expr) bool { From 9af279d631a512de942e29b8c867285e42fa3c60 Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Mon, 21 Sep 2020 13:13:23 +0200 Subject: [PATCH 07/15] add more precedence tests Signed-off-by: Andres Taylor --- go/vt/sqlparser/precedence_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/go/vt/sqlparser/precedence_test.go b/go/vt/sqlparser/precedence_test.go index 7f8c65032a7..a74c44f4e12 100644 --- a/go/vt/sqlparser/precedence_test.go +++ b/go/vt/sqlparser/precedence_test.go @@ -150,6 +150,9 @@ func TestParens(t *testing.T) { {in: "100 - (50 + 10)", expected: "100 - (50 + 10)"}, {in: "100 - 50 + 10", expected: "100 - 50 + 10"}, {in: "true and (true and true)", expected: "true and (true and true)"}, + {in: "10 - 2 - 1", expected: "10 - 2 - 1"}, + {in: "(10 - 2) - 1", expected: "10 - 2 - 1"}, + {in: "10 - (2 - 1)", expected: "10 - (2 - 1)"}, } for _, tc := range tests { From 0ac6a3d3e81b93aac2ca5d5b9e620b24d4ad8657 Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Tue, 22 Sep 2020 09:54:11 +0200 Subject: [PATCH 08/15] sort tabledefinitions before comparing them Signed-off-by: Andres Taylor --- go/vt/mysqlctl/schema.go | 26 ++++++++++++-- go/vt/mysqlctl/tabledefinitions_test.go | 46 +++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 go/vt/mysqlctl/tabledefinitions_test.go diff --git a/go/vt/mysqlctl/schema.go b/go/vt/mysqlctl/schema.go index 7d57c5488cb..e84c3812961 100644 --- a/go/vt/mysqlctl/schema.go +++ b/go/vt/mysqlctl/schema.go @@ -19,6 +19,7 @@ package mysqlctl import ( "fmt" "regexp" + "sort" "strings" "vitess.io/vitess/go/vt/vtgate/evalengine" @@ -75,7 +76,7 @@ func (mysqld *Mysqld) GetSchema(ctx context.Context, dbName string, tables, excl return sd, nil } - sd.TableDefinitions = make([]*tabletmanagerdatapb.TableDefinition, 0, len(qr.Rows)) + tds := make(tableDefinitions, 0, len(qr.Rows)) for _, row := range qr.Rows { tableName := row[0].ToString() tableType := row[1].ToString() @@ -133,9 +134,13 @@ func (mysqld *Mysqld) GetSchema(ctx context.Context, dbName string, tables, excl td.Type = tableType td.DataLength = dataLength td.RowCount = rowCount - sd.TableDefinitions = append(sd.TableDefinitions, td) + tds = append(tds, td) } + sort.Sort(tds) + + sd.TableDefinitions = tds + sd, err = tmutils.FilterTables(sd, tables, excludeTables, includeViews) if err != nil { return nil, err @@ -374,3 +379,20 @@ func (mysqld *Mysqld) ApplySchemaChange(ctx context.Context, dbName string, chan return &tabletmanagerdatapb.SchemaChangeResult{BeforeSchema: beforeSchema, AfterSchema: afterSchema}, nil } + +//tableDefinitions is a sortable collection of table definitions +type tableDefinitions []*tabletmanagerdatapb.TableDefinition + +func (t tableDefinitions) Len() int { + return len(t) +} + +func (t tableDefinitions) Less(i, j int) bool { + return t[i].Name < t[j].Name +} + +func (t tableDefinitions) Swap(i, j int) { + t[i], t[j] = t[j], t[i] +} + +var _ sort.Interface = (tableDefinitions)(nil) diff --git a/go/vt/mysqlctl/tabledefinitions_test.go b/go/vt/mysqlctl/tabledefinitions_test.go new file mode 100644 index 00000000000..bbb448bf4b1 --- /dev/null +++ b/go/vt/mysqlctl/tabledefinitions_test.go @@ -0,0 +1,46 @@ +/* +Copyright 2020 The Vitess Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package mysqlctl + +import ( + "sort" + "testing" + + "vitess.io/vitess/go/test/utils" +) + +func TestTableDefinitionsAreSorted(t *testing.T) { + // assert that two collections of table definitions are comparable even if + // the inputs are ordered differently + tds1 := tableDefinitions{{ + Name: "table1", + Schema: "schema1", + }, { + Name: "table2", + Schema: "schema2", + }} + tds2 := tableDefinitions{{ + Name: "table2", + Schema: "schema2", + }, { + Name: "table1", + Schema: "schema1", + }} + sort.Sort(tds1) + sort.Sort(tds2) + utils.MustMatch(t, tds1, tds2, "") +} From ec88581a21089d9c4d4156bf3fe50e86bf9dac66 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 10 Sep 2020 12:04:44 -0700 Subject: [PATCH 09/15] restore: checkNoDB should not require tables to be present when the desired database is present Signed-off-by: deepthi --- go/vt/mysqlctl/backup.go | 17 +++-------------- 1 file changed, 3 insertions(+), 14 deletions(-) diff --git a/go/vt/mysqlctl/backup.go b/go/vt/mysqlctl/backup.go index aade6fc0ab2..be60d7683f6 100644 --- a/go/vt/mysqlctl/backup.go +++ b/go/vt/mysqlctl/backup.go @@ -27,7 +27,6 @@ import ( "golang.org/x/net/context" "vitess.io/vitess/go/mysql" - "vitess.io/vitess/go/sqlescape" "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/mysqlctl/backupstorage" "vitess.io/vitess/go/vt/proto/vtrpc" @@ -136,33 +135,23 @@ func Backup(ctx context.Context, params BackupParams) error { // checkNoDB makes sure there is no user data already there. // Used by Restore, as we do not want to destroy an existing DB. // The user's database name must be given since we ignore all others. -// Returns true if the specified DB either doesn't exist, or has no tables. +// Returns (true, nil) if the specified DB doesn't exist. // Returns (false, nil) if the check succeeds but the condition is not -// satisfied (there is a DB with tables). -// Returns non-nil error if one occurs while trying to perform the check. +// satisfied (there is a DB). +// Returns (false, non-nil error) if one occurs while trying to perform the check. func checkNoDB(ctx context.Context, mysqld MysqlDaemon, dbName string) (bool, error) { qr, err := mysqld.FetchSuperQuery(ctx, "SHOW DATABASES") if err != nil { return false, vterrors.Wrap(err, "checkNoDB failed") } - backtickDBName := sqlescape.EscapeID(dbName) for _, row := range qr.Rows { if row[0].ToString() == dbName { - tableQr, err := mysqld.FetchSuperQuery(ctx, "SHOW TABLES FROM "+backtickDBName) - if err != nil { - return false, vterrors.Wrap(err, "checkNoDB failed") - } - if len(tableQr.Rows) == 0 { - // no tables == empty db, all is well - continue - } // found active db log.Warningf("checkNoDB failed, found active db %v", dbName) return false, nil } } - return true, nil } From 635c0c66e996a7c7c9f8987d63b5f608ffda46e5 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 10 Sep 2020 13:09:05 -0700 Subject: [PATCH 10/15] tests: disable schema tracking in reparent tests for now, fix spare test, print command output on failure Signed-off-by: deepthi --- go/test/endtoend/reparent/main_test.go | 8 +- go/test/endtoend/reparent/reparent_test.go | 91 ++++++++++++---------- 2 files changed, 53 insertions(+), 46 deletions(-) diff --git a/go/test/endtoend/reparent/main_test.go b/go/test/endtoend/reparent/main_test.go index c3600e95ad4..e4fa644e5f2 100644 --- a/go/test/endtoend/reparent/main_test.go +++ b/go/test/endtoend/reparent/main_test.go @@ -111,6 +111,7 @@ func TestMain(m *testing.M) { clusterInstance.VtTabletExtraArgs = []string{ "-lock_tables_timeout", "5s", "-enable_semi_sync", + "-track_schema_versions=false", // remove this line once https://github.com/vitessio/vitess/issues/6474 is fixed } // Initialize Cluster @@ -124,12 +125,11 @@ func TestMain(m *testing.M) { for _, shard := range clusterInstance.Keyspaces[0].Shards { for _, tablet := range shard.Vttablets { log.Infof("Starting MySql for tablet %v", tablet.Alias) - if proc, err := tablet.MysqlctlProcess.StartProcess(); err != nil { + proc, err := tablet.MysqlctlProcess.StartProcess() + if err != nil { return 1 - } else { - // ignore golint warning, we need the else block to use proc - mysqlCtlProcessList = append(mysqlCtlProcessList, proc) } + mysqlCtlProcessList = append(mysqlCtlProcessList, proc) } } diff --git a/go/test/endtoend/reparent/reparent_test.go b/go/test/endtoend/reparent/reparent_test.go index 33d3bd8a9bb..e94960ad2c9 100644 --- a/go/test/endtoend/reparent/reparent_test.go +++ b/go/test/endtoend/reparent/reparent_test.go @@ -40,31 +40,36 @@ import ( func TestMasterToSpareStateChangeImpossible(t *testing.T) { defer cluster.PanicHandler(t) - args := []string{"InitTablet", "-hostname", hostname, - "-port", fmt.Sprintf("%d", tablet62344.HTTPPort), "-allow_update", "-parent", - "-keyspace", keyspaceName, - "-shard", shardName, - "-mysql_port", fmt.Sprintf("%d", tablet62344.MySQLPort), - "-grpc_port", fmt.Sprintf("%d", tablet62344.GrpcPort)} - args = append(args, fmt.Sprintf("%s-%010d", tablet62344.Cell, tablet62344.TabletUID), "master") - err := clusterInstance.VtctlclientProcess.ExecuteCommand(args...) - require.NoError(t, err) + // need at least one replica because of semi-sync + for _, tablet := range []cluster.Vttablet{*tablet62344, *tablet62044} { - // Start the tablet - err = tablet62344.VttabletProcess.Setup() - require.NoError(t, err) + // Start the tablet + err := tablet.VttabletProcess.Setup() + require.NoError(t, err) - // Create Database - err = tablet62344.VttabletProcess.CreateDB(keyspaceName) - require.NoError(t, err) + // Create Database + err = tablet.VttabletProcess.CreateDB(keyspaceName) + require.NoError(t, err) + } + for _, tablet := range []cluster.Vttablet{*tablet62344, *tablet62044} { + err := tablet.VttabletProcess.WaitForTabletTypes([]string{"SERVING", "NOT_SERVING"}) + require.NoError(t, err) + } + // Init Shard Master + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", + "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) + require.NoError(t, err, out) // We cannot change a master to spare - err = clusterInstance.VtctlclientProcess.ExecuteCommand("ChangeReplicaType", tablet62344.Alias, "spare") - require.Error(t, err) + out, err = clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("ChangeTabletType", tablet62344.Alias, "spare") + require.Error(t, err, out) + require.Contains(t, out, "type change MASTER -> SPARE is not an allowed transition for ChangeTabletType") - //kill Tablet + //kill Tablets err = tablet62344.VttabletProcess.TearDown() require.NoError(t, err) + err = tablet62044.VttabletProcess.TearDown() + require.NoError(t, err) } func TestReparentDownMaster(t *testing.T) { @@ -90,9 +95,9 @@ func TestReparentDownMaster(t *testing.T) { } // Init Shard Master - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -171,20 +176,20 @@ func TestReparentCrossCell(t *testing.T) { } // Force the replica to reparent assuming that all the datasets are identical. - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) checkMasterTablet(t, tablet62344) // Perform a graceful reparent operation to another cell. - err = clusterInstance.VtctlclientProcess.ExecuteCommand( + out, err = clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput( "PlannedReparentShard", "-keyspace_shard", keyspaceShard, "-new_master", tablet31981.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, false) @@ -215,9 +220,9 @@ func TestReparentGraceful(t *testing.T) { } // Force the replica to reparent assuming that all the datasets are identical. - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -292,9 +297,9 @@ func TestReparentReplicaOffline(t *testing.T) { } // Force the replica to reparent assuming that all the datasets are identical. - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", keyspaceShard, tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -305,7 +310,7 @@ func TestReparentReplicaOffline(t *testing.T) { require.NoError(t, err) // Perform a graceful reparent operation. - out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput( + out, err = clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput( "PlannedReparentShard", "-keyspace_shard", keyspaceShard, "-new_master", tablet62044.Alias, @@ -321,9 +326,11 @@ func TestReparentReplicaOffline(t *testing.T) { func TestReparentAvoid(t *testing.T) { defer cluster.PanicHandler(t) + // Remove tablet41983 from topology as that tablet is not required for this test - err := clusterInstance.VtctlclientProcess.ExecuteCommand("DeleteTablet", tablet41983.Alias) - require.NoError(t, err) + // Ignore error. Depending on previous tests this topo entry may or may not exist + // TODO: fix inter-test dependencies + _ = clusterInstance.VtctlclientProcess.ExecuteCommand("DeleteTablet", tablet41983.Alias) for _, tablet := range []cluster.Vttablet{*tablet62344, *tablet62044, *tablet31981} { // create database @@ -341,9 +348,9 @@ func TestReparentAvoid(t *testing.T) { } // Force the replica to reparent assuming that all the dataset's are identical. - err = clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", keyspaceShard, tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -438,9 +445,9 @@ func reparentFromOutside(t *testing.T, downMaster bool) { } // Reparent as a starting point - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -526,9 +533,9 @@ func TestReparentWithDownReplica(t *testing.T) { } // Init Shard Master - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -600,9 +607,9 @@ func TestChangeTypeSemiSync(t *testing.T) { } // Init Shard Master - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), master.Alias) - require.NoError(t, err) + require.NoError(t, err, out) // Updated rdonly tablet and set tablet type to rdonly // TODO: replace with ChangeTabletType once ChangeSlaveType is removed @@ -679,9 +686,9 @@ func TestReparentDoesntHangIfMasterFails(t *testing.T) { } // Init Shard Master - err := clusterInstance.VtctlclientProcess.ExecuteCommand("InitShardMaster", + out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput("InitShardMaster", "-force", fmt.Sprintf("%s/%s", keyspaceName, shardName), tablet62344.Alias) - require.NoError(t, err) + require.NoError(t, err, out) validateTopology(t, true) @@ -693,7 +700,7 @@ func TestReparentDoesntHangIfMasterFails(t *testing.T) { // Perform a planned reparent operation, the master will fail the // insert. The replicas should then abort right away. - out, err := clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput( + out, err = clusterInstance.VtctlclientProcess.ExecuteCommandWithOutput( "PlannedReparentShard", "-keyspace_shard", keyspaceShard, "-new_master", tablet62044.Alias) From 87ee0ee6f1b1d33fd5336add7594201df9941674 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Sat, 19 Sep 2020 11:16:27 -0400 Subject: [PATCH 11/15] This is a squashed rebase of am_show_filtered_tablets without the final merge commit Update parser to support `SHOW DATABASES LIKE '%nnn%' Signed-off-by: Andrew Mason Add VITESS_KEYSPACES and KEYSPACES to keyword variables Signed-off-by: Andrew Mason Use sqlparser types instead of raw strings Signed-off-by: Andrew Mason Add parser support for showing filtered tablets/shards Signed-off-by: Andrew Mason Include filters Signed-off-by: Andrew Mason Add support in the executor for `SHOW VITESS_SHARDS LIKE '...'` Signed-off-by: Andrew Mason Add support for filtering tablets by hostname Signed-off-by: Andrew Mason Add log line to avoid deadbranch check, remove unused function Signed-off-by: Andrew Mason Update formatting for SHOW, add test cases Signed-off-by: Andrew Mason Add tests cases, ensure `rows` is never nil from showTablets Signed-off-by: Andrew Mason Use `KeywordString` Signed-off-by: Andrew Mason Remove debug log lines, standardize actual log lines Signed-off-by: Andrew Mason Update tests Signed-off-by: Andrew Mason Update the rest of TestExecutorShow to use require/assert Signed-off-by: Andrew Mason --- go/vt/sqlparser/ast.go | 3 +- go/vt/sqlparser/parse_test.go | 8 + go/vt/sqlparser/sql.go | 7510 +++++++++++++++++---------------- go/vt/sqlparser/sql.y | 42 +- go/vt/sqlparser/token.go | 4 + go/vt/vtgate/executor.go | 141 +- go/vt/vtgate/executor_test.go | 325 +- 7 files changed, 4229 insertions(+), 3804 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 67dc784275f..a8896bffc8d 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -1267,7 +1267,8 @@ func (f *ForeignKeyDefinition) Format(buf *TrackedBuffer) { // Format formats the node. func (node *Show) Format(buf *TrackedBuffer) { nodeType := strings.ToLower(node.Type) - if (nodeType == "tables" || nodeType == "columns" || nodeType == "fields" || nodeType == "index" || nodeType == "keys" || nodeType == "indexes") && node.ShowTablesOpt != nil { + if (nodeType == "tables" || nodeType == "columns" || nodeType == "fields" || nodeType == "index" || nodeType == "keys" || nodeType == "indexes" || + nodeType == "databases" || nodeType == "keyspaces" || nodeType == "vitess_keyspaces" || nodeType == "vitess_shards" || nodeType == "vitess_tablets") && node.ShowTablesOpt != nil { opt := node.ShowTablesOpt if node.Extended != "" { buf.astPrintf(node, "show %s%s", node.Extended, nodeType) diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index a12b34ec796..7ef26466bbd 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1372,10 +1372,18 @@ var ( output: "show session variables", }, { input: "show vitess_keyspaces", + }, { + input: "show vitess_keyspaces like '%'", }, { input: "show vitess_shards", + }, { + input: "show vitess_shards like '%'", }, { input: "show vitess_tablets", + }, { + input: "show vitess_tablets like '%'", + }, { + input: "show vitess_tablets where hostname = 'some-tablet'", }, { input: "show vschema tables", }, { diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index dbbcc593537..83efdbe9f20 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -113,345 +113,350 @@ const LEX_ERROR = 57346 const UNION = 57347 const SELECT = 57348 const STREAM = 57349 -const INSERT = 57350 -const UPDATE = 57351 -const DELETE = 57352 -const FROM = 57353 -const WHERE = 57354 -const GROUP = 57355 -const HAVING = 57356 -const ORDER = 57357 -const BY = 57358 -const LIMIT = 57359 -const OFFSET = 57360 -const FOR = 57361 -const ALL = 57362 -const DISTINCT = 57363 -const AS = 57364 -const EXISTS = 57365 -const ASC = 57366 -const DESC = 57367 -const INTO = 57368 -const DUPLICATE = 57369 -const KEY = 57370 -const DEFAULT = 57371 -const SET = 57372 -const LOCK = 57373 -const UNLOCK = 57374 -const KEYS = 57375 -const DO = 57376 -const DISTINCTROW = 57377 -const VALUES = 57378 -const LAST_INSERT_ID = 57379 -const NEXT = 57380 -const VALUE = 57381 -const SHARE = 57382 -const MODE = 57383 -const SQL_NO_CACHE = 57384 -const SQL_CACHE = 57385 -const SQL_CALC_FOUND_ROWS = 57386 -const JOIN = 57387 -const STRAIGHT_JOIN = 57388 -const LEFT = 57389 -const RIGHT = 57390 -const INNER = 57391 -const OUTER = 57392 -const CROSS = 57393 -const NATURAL = 57394 -const USE = 57395 -const FORCE = 57396 -const ON = 57397 -const USING = 57398 -const ID = 57399 -const AT_ID = 57400 -const AT_AT_ID = 57401 -const HEX = 57402 -const STRING = 57403 -const INTEGRAL = 57404 -const FLOAT = 57405 -const HEXNUM = 57406 -const VALUE_ARG = 57407 -const LIST_ARG = 57408 -const COMMENT = 57409 -const COMMENT_KEYWORD = 57410 -const BIT_LITERAL = 57411 -const NULL = 57412 -const TRUE = 57413 -const FALSE = 57414 -const OFF = 57415 -const OR = 57416 -const XOR = 57417 -const AND = 57418 -const NOT = 57419 -const BETWEEN = 57420 -const CASE = 57421 -const WHEN = 57422 -const THEN = 57423 -const ELSE = 57424 -const END = 57425 -const LE = 57426 -const GE = 57427 -const NE = 57428 -const NULL_SAFE_EQUAL = 57429 -const IS = 57430 -const LIKE = 57431 -const REGEXP = 57432 -const IN = 57433 -const SHIFT_LEFT = 57434 -const SHIFT_RIGHT = 57435 -const DIV = 57436 -const MOD = 57437 -const UNARY = 57438 -const COLLATE = 57439 -const BINARY = 57440 -const UNDERSCORE_BINARY = 57441 -const UNDERSCORE_UTF8MB4 = 57442 -const UNDERSCORE_UTF8 = 57443 -const UNDERSCORE_LATIN1 = 57444 -const INTERVAL = 57445 -const JSON_EXTRACT_OP = 57446 -const JSON_UNQUOTE_EXTRACT_OP = 57447 -const CREATE = 57448 -const ALTER = 57449 -const DROP = 57450 -const RENAME = 57451 -const ANALYZE = 57452 -const ADD = 57453 -const FLUSH = 57454 -const SCHEMA = 57455 -const TABLE = 57456 -const INDEX = 57457 -const VIEW = 57458 -const TO = 57459 -const IGNORE = 57460 -const IF = 57461 -const UNIQUE = 57462 -const PRIMARY = 57463 -const COLUMN = 57464 -const SPATIAL = 57465 -const FULLTEXT = 57466 -const KEY_BLOCK_SIZE = 57467 -const CHECK = 57468 -const INDEXES = 57469 -const ACTION = 57470 -const CASCADE = 57471 -const CONSTRAINT = 57472 -const FOREIGN = 57473 -const NO = 57474 -const REFERENCES = 57475 -const RESTRICT = 57476 -const SHOW = 57477 -const DESCRIBE = 57478 -const EXPLAIN = 57479 -const DATE = 57480 -const ESCAPE = 57481 -const REPAIR = 57482 -const OPTIMIZE = 57483 -const TRUNCATE = 57484 -const MAXVALUE = 57485 -const PARTITION = 57486 -const REORGANIZE = 57487 -const LESS = 57488 -const THAN = 57489 -const PROCEDURE = 57490 -const TRIGGER = 57491 -const VINDEX = 57492 -const VINDEXES = 57493 -const STATUS = 57494 -const VARIABLES = 57495 -const WARNINGS = 57496 -const SEQUENCE = 57497 -const BEGIN = 57498 -const START = 57499 -const TRANSACTION = 57500 -const COMMIT = 57501 -const ROLLBACK = 57502 -const SAVEPOINT = 57503 -const RELEASE = 57504 -const WORK = 57505 -const BIT = 57506 -const TINYINT = 57507 -const SMALLINT = 57508 -const MEDIUMINT = 57509 -const INT = 57510 -const INTEGER = 57511 -const BIGINT = 57512 -const INTNUM = 57513 -const REAL = 57514 -const DOUBLE = 57515 -const FLOAT_TYPE = 57516 -const DECIMAL = 57517 -const NUMERIC = 57518 -const TIME = 57519 -const TIMESTAMP = 57520 -const DATETIME = 57521 -const YEAR = 57522 -const CHAR = 57523 -const VARCHAR = 57524 -const BOOL = 57525 -const CHARACTER = 57526 -const VARBINARY = 57527 -const NCHAR = 57528 -const TEXT = 57529 -const TINYTEXT = 57530 -const MEDIUMTEXT = 57531 -const LONGTEXT = 57532 -const BLOB = 57533 -const TINYBLOB = 57534 -const MEDIUMBLOB = 57535 -const LONGBLOB = 57536 -const JSON = 57537 -const ENUM = 57538 -const GEOMETRY = 57539 -const POINT = 57540 -const LINESTRING = 57541 -const POLYGON = 57542 -const GEOMETRYCOLLECTION = 57543 -const MULTIPOINT = 57544 -const MULTILINESTRING = 57545 -const MULTIPOLYGON = 57546 -const NULLX = 57547 -const AUTO_INCREMENT = 57548 -const APPROXNUM = 57549 -const SIGNED = 57550 -const UNSIGNED = 57551 -const ZEROFILL = 57552 -const COLLATION = 57553 -const DATABASES = 57554 -const TABLES = 57555 -const VITESS_METADATA = 57556 -const VSCHEMA = 57557 -const FULL = 57558 -const PROCESSLIST = 57559 -const COLUMNS = 57560 -const FIELDS = 57561 -const ENGINES = 57562 -const PLUGINS = 57563 -const EXTENDED = 57564 -const NAMES = 57565 -const CHARSET = 57566 -const GLOBAL = 57567 -const SESSION = 57568 -const ISOLATION = 57569 -const LEVEL = 57570 -const READ = 57571 -const WRITE = 57572 -const ONLY = 57573 -const REPEATABLE = 57574 -const COMMITTED = 57575 -const UNCOMMITTED = 57576 -const SERIALIZABLE = 57577 -const CURRENT_TIMESTAMP = 57578 -const DATABASE = 57579 -const CURRENT_DATE = 57580 -const CURRENT_TIME = 57581 -const LOCALTIME = 57582 -const LOCALTIMESTAMP = 57583 -const UTC_DATE = 57584 -const UTC_TIME = 57585 -const UTC_TIMESTAMP = 57586 -const REPLACE = 57587 -const CONVERT = 57588 -const CAST = 57589 -const SUBSTR = 57590 -const SUBSTRING = 57591 -const GROUP_CONCAT = 57592 -const SEPARATOR = 57593 -const TIMESTAMPADD = 57594 -const TIMESTAMPDIFF = 57595 -const MATCH = 57596 -const AGAINST = 57597 -const BOOLEAN = 57598 -const LANGUAGE = 57599 -const WITH = 57600 -const QUERY = 57601 -const EXPANSION = 57602 -const UNUSED = 57603 -const ARRAY = 57604 -const CUME_DIST = 57605 -const DESCRIPTION = 57606 -const DENSE_RANK = 57607 -const EMPTY = 57608 -const EXCEPT = 57609 -const FIRST_VALUE = 57610 -const GROUPING = 57611 -const GROUPS = 57612 -const JSON_TABLE = 57613 -const LAG = 57614 -const LAST_VALUE = 57615 -const LATERAL = 57616 -const LEAD = 57617 -const MEMBER = 57618 -const NTH_VALUE = 57619 -const NTILE = 57620 -const OF = 57621 -const OVER = 57622 -const PERCENT_RANK = 57623 -const RANK = 57624 -const RECURSIVE = 57625 -const ROW_NUMBER = 57626 -const SYSTEM = 57627 -const WINDOW = 57628 -const ACTIVE = 57629 -const ADMIN = 57630 -const BUCKETS = 57631 -const CLONE = 57632 -const COMPONENT = 57633 -const DEFINITION = 57634 -const ENFORCED = 57635 -const EXCLUDE = 57636 -const FOLLOWING = 57637 -const GEOMCOLLECTION = 57638 -const GET_MASTER_PUBLIC_KEY = 57639 -const HISTOGRAM = 57640 -const HISTORY = 57641 -const INACTIVE = 57642 -const INVISIBLE = 57643 -const LOCKED = 57644 -const MASTER_COMPRESSION_ALGORITHMS = 57645 -const MASTER_PUBLIC_KEY_PATH = 57646 -const MASTER_TLS_CIPHERSUITES = 57647 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57648 -const NESTED = 57649 -const NETWORK_NAMESPACE = 57650 -const NOWAIT = 57651 -const NULLS = 57652 -const OJ = 57653 -const OLD = 57654 -const OPTIONAL = 57655 -const ORDINALITY = 57656 -const ORGANIZATION = 57657 -const OTHERS = 57658 -const PATH = 57659 -const PERSIST = 57660 -const PERSIST_ONLY = 57661 -const PRECEDING = 57662 -const PRIVILEGE_CHECKS_USER = 57663 -const PROCESS = 57664 -const RANDOM = 57665 -const REFERENCE = 57666 -const REQUIRE_ROW_FORMAT = 57667 -const RESOURCE = 57668 -const RESPECT = 57669 -const RESTART = 57670 -const RETAIN = 57671 -const REUSE = 57672 -const ROLE = 57673 -const SECONDARY = 57674 -const SECONDARY_ENGINE = 57675 -const SECONDARY_LOAD = 57676 -const SECONDARY_UNLOAD = 57677 -const SKIP = 57678 -const SRID = 57679 -const THREAD_PRIORITY = 57680 -const TIES = 57681 -const UNBOUNDED = 57682 -const VCPU = 57683 -const VISIBLE = 57684 -const FORMAT = 57685 -const TREE = 57686 -const VITESS = 57687 -const TRADITIONAL = 57688 +const VSTREAM = 57350 +const INSERT = 57351 +const UPDATE = 57352 +const DELETE = 57353 +const FROM = 57354 +const WHERE = 57355 +const GROUP = 57356 +const HAVING = 57357 +const ORDER = 57358 +const BY = 57359 +const LIMIT = 57360 +const OFFSET = 57361 +const FOR = 57362 +const ALL = 57363 +const DISTINCT = 57364 +const AS = 57365 +const EXISTS = 57366 +const ASC = 57367 +const DESC = 57368 +const INTO = 57369 +const DUPLICATE = 57370 +const KEY = 57371 +const DEFAULT = 57372 +const SET = 57373 +const LOCK = 57374 +const UNLOCK = 57375 +const KEYS = 57376 +const DO = 57377 +const DISTINCTROW = 57378 +const VALUES = 57379 +const LAST_INSERT_ID = 57380 +const NEXT = 57381 +const VALUE = 57382 +const SHARE = 57383 +const MODE = 57384 +const SQL_NO_CACHE = 57385 +const SQL_CACHE = 57386 +const SQL_CALC_FOUND_ROWS = 57387 +const JOIN = 57388 +const STRAIGHT_JOIN = 57389 +const LEFT = 57390 +const RIGHT = 57391 +const INNER = 57392 +const OUTER = 57393 +const CROSS = 57394 +const NATURAL = 57395 +const USE = 57396 +const FORCE = 57397 +const ON = 57398 +const USING = 57399 +const ID = 57400 +const AT_ID = 57401 +const AT_AT_ID = 57402 +const HEX = 57403 +const STRING = 57404 +const INTEGRAL = 57405 +const FLOAT = 57406 +const HEXNUM = 57407 +const VALUE_ARG = 57408 +const LIST_ARG = 57409 +const COMMENT = 57410 +const COMMENT_KEYWORD = 57411 +const BIT_LITERAL = 57412 +const NULL = 57413 +const TRUE = 57414 +const FALSE = 57415 +const OFF = 57416 +const OR = 57417 +const XOR = 57418 +const AND = 57419 +const NOT = 57420 +const BETWEEN = 57421 +const CASE = 57422 +const WHEN = 57423 +const THEN = 57424 +const ELSE = 57425 +const END = 57426 +const LE = 57427 +const GE = 57428 +const NE = 57429 +const NULL_SAFE_EQUAL = 57430 +const IS = 57431 +const LIKE = 57432 +const REGEXP = 57433 +const IN = 57434 +const SHIFT_LEFT = 57435 +const SHIFT_RIGHT = 57436 +const DIV = 57437 +const MOD = 57438 +const UNARY = 57439 +const COLLATE = 57440 +const BINARY = 57441 +const UNDERSCORE_BINARY = 57442 +const UNDERSCORE_UTF8MB4 = 57443 +const UNDERSCORE_UTF8 = 57444 +const UNDERSCORE_LATIN1 = 57445 +const INTERVAL = 57446 +const JSON_EXTRACT_OP = 57447 +const JSON_UNQUOTE_EXTRACT_OP = 57448 +const CREATE = 57449 +const ALTER = 57450 +const DROP = 57451 +const RENAME = 57452 +const ANALYZE = 57453 +const ADD = 57454 +const FLUSH = 57455 +const SCHEMA = 57456 +const TABLE = 57457 +const INDEX = 57458 +const VIEW = 57459 +const TO = 57460 +const IGNORE = 57461 +const IF = 57462 +const UNIQUE = 57463 +const PRIMARY = 57464 +const COLUMN = 57465 +const SPATIAL = 57466 +const FULLTEXT = 57467 +const KEY_BLOCK_SIZE = 57468 +const CHECK = 57469 +const INDEXES = 57470 +const ACTION = 57471 +const CASCADE = 57472 +const CONSTRAINT = 57473 +const FOREIGN = 57474 +const NO = 57475 +const REFERENCES = 57476 +const RESTRICT = 57477 +const SHOW = 57478 +const DESCRIBE = 57479 +const EXPLAIN = 57480 +const DATE = 57481 +const ESCAPE = 57482 +const REPAIR = 57483 +const OPTIMIZE = 57484 +const TRUNCATE = 57485 +const MAXVALUE = 57486 +const PARTITION = 57487 +const REORGANIZE = 57488 +const LESS = 57489 +const THAN = 57490 +const PROCEDURE = 57491 +const TRIGGER = 57492 +const VINDEX = 57493 +const VINDEXES = 57494 +const STATUS = 57495 +const VARIABLES = 57496 +const WARNINGS = 57497 +const SEQUENCE = 57498 +const BEGIN = 57499 +const START = 57500 +const TRANSACTION = 57501 +const COMMIT = 57502 +const ROLLBACK = 57503 +const SAVEPOINT = 57504 +const RELEASE = 57505 +const WORK = 57506 +const BIT = 57507 +const TINYINT = 57508 +const SMALLINT = 57509 +const MEDIUMINT = 57510 +const INT = 57511 +const INTEGER = 57512 +const BIGINT = 57513 +const INTNUM = 57514 +const REAL = 57515 +const DOUBLE = 57516 +const FLOAT_TYPE = 57517 +const DECIMAL = 57518 +const NUMERIC = 57519 +const TIME = 57520 +const TIMESTAMP = 57521 +const DATETIME = 57522 +const YEAR = 57523 +const CHAR = 57524 +const VARCHAR = 57525 +const BOOL = 57526 +const CHARACTER = 57527 +const VARBINARY = 57528 +const NCHAR = 57529 +const TEXT = 57530 +const TINYTEXT = 57531 +const MEDIUMTEXT = 57532 +const LONGTEXT = 57533 +const BLOB = 57534 +const TINYBLOB = 57535 +const MEDIUMBLOB = 57536 +const LONGBLOB = 57537 +const JSON = 57538 +const ENUM = 57539 +const GEOMETRY = 57540 +const POINT = 57541 +const LINESTRING = 57542 +const POLYGON = 57543 +const GEOMETRYCOLLECTION = 57544 +const MULTIPOINT = 57545 +const MULTILINESTRING = 57546 +const MULTIPOLYGON = 57547 +const NULLX = 57548 +const AUTO_INCREMENT = 57549 +const APPROXNUM = 57550 +const SIGNED = 57551 +const UNSIGNED = 57552 +const ZEROFILL = 57553 +const COLLATION = 57554 +const DATABASES = 57555 +const TABLES = 57556 +const VITESS_METADATA = 57557 +const VSCHEMA = 57558 +const FULL = 57559 +const PROCESSLIST = 57560 +const COLUMNS = 57561 +const FIELDS = 57562 +const ENGINES = 57563 +const PLUGINS = 57564 +const EXTENDED = 57565 +const KEYSPACES = 57566 +const VITESS_KEYSPACES = 57567 +const VITESS_SHARDS = 57568 +const VITESS_TABLETS = 57569 +const NAMES = 57570 +const CHARSET = 57571 +const GLOBAL = 57572 +const SESSION = 57573 +const ISOLATION = 57574 +const LEVEL = 57575 +const READ = 57576 +const WRITE = 57577 +const ONLY = 57578 +const REPEATABLE = 57579 +const COMMITTED = 57580 +const UNCOMMITTED = 57581 +const SERIALIZABLE = 57582 +const CURRENT_TIMESTAMP = 57583 +const DATABASE = 57584 +const CURRENT_DATE = 57585 +const CURRENT_TIME = 57586 +const LOCALTIME = 57587 +const LOCALTIMESTAMP = 57588 +const UTC_DATE = 57589 +const UTC_TIME = 57590 +const UTC_TIMESTAMP = 57591 +const REPLACE = 57592 +const CONVERT = 57593 +const CAST = 57594 +const SUBSTR = 57595 +const SUBSTRING = 57596 +const GROUP_CONCAT = 57597 +const SEPARATOR = 57598 +const TIMESTAMPADD = 57599 +const TIMESTAMPDIFF = 57600 +const MATCH = 57601 +const AGAINST = 57602 +const BOOLEAN = 57603 +const LANGUAGE = 57604 +const WITH = 57605 +const QUERY = 57606 +const EXPANSION = 57607 +const UNUSED = 57608 +const ARRAY = 57609 +const CUME_DIST = 57610 +const DESCRIPTION = 57611 +const DENSE_RANK = 57612 +const EMPTY = 57613 +const EXCEPT = 57614 +const FIRST_VALUE = 57615 +const GROUPING = 57616 +const GROUPS = 57617 +const JSON_TABLE = 57618 +const LAG = 57619 +const LAST_VALUE = 57620 +const LATERAL = 57621 +const LEAD = 57622 +const MEMBER = 57623 +const NTH_VALUE = 57624 +const NTILE = 57625 +const OF = 57626 +const OVER = 57627 +const PERCENT_RANK = 57628 +const RANK = 57629 +const RECURSIVE = 57630 +const ROW_NUMBER = 57631 +const SYSTEM = 57632 +const WINDOW = 57633 +const ACTIVE = 57634 +const ADMIN = 57635 +const BUCKETS = 57636 +const CLONE = 57637 +const COMPONENT = 57638 +const DEFINITION = 57639 +const ENFORCED = 57640 +const EXCLUDE = 57641 +const FOLLOWING = 57642 +const GEOMCOLLECTION = 57643 +const GET_MASTER_PUBLIC_KEY = 57644 +const HISTOGRAM = 57645 +const HISTORY = 57646 +const INACTIVE = 57647 +const INVISIBLE = 57648 +const LOCKED = 57649 +const MASTER_COMPRESSION_ALGORITHMS = 57650 +const MASTER_PUBLIC_KEY_PATH = 57651 +const MASTER_TLS_CIPHERSUITES = 57652 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57653 +const NESTED = 57654 +const NETWORK_NAMESPACE = 57655 +const NOWAIT = 57656 +const NULLS = 57657 +const OJ = 57658 +const OLD = 57659 +const OPTIONAL = 57660 +const ORDINALITY = 57661 +const ORGANIZATION = 57662 +const OTHERS = 57663 +const PATH = 57664 +const PERSIST = 57665 +const PERSIST_ONLY = 57666 +const PRECEDING = 57667 +const PRIVILEGE_CHECKS_USER = 57668 +const PROCESS = 57669 +const RANDOM = 57670 +const REFERENCE = 57671 +const REQUIRE_ROW_FORMAT = 57672 +const RESOURCE = 57673 +const RESPECT = 57674 +const RESTART = 57675 +const RETAIN = 57676 +const REUSE = 57677 +const ROLE = 57678 +const SECONDARY = 57679 +const SECONDARY_ENGINE = 57680 +const SECONDARY_LOAD = 57681 +const SECONDARY_UNLOAD = 57682 +const SKIP = 57683 +const SRID = 57684 +const THREAD_PRIORITY = 57685 +const TIES = 57686 +const UNBOUNDED = 57687 +const VCPU = 57688 +const VISIBLE = 57689 +const FORMAT = 57690 +const TREE = 57691 +const VITESS = 57692 +const TRADITIONAL = 57693 var yyToknames = [...]string{ "$end", @@ -693,6 +698,10 @@ var yyToknames = [...]string{ "ENGINES", "PLUGINS", "EXTENDED", + "KEYSPACES", + "VITESS_KEYSPACES", + "VITESS_SHARDS", + "VITESS_TABLETS", "NAMES", "CHARSET", "GLOBAL", @@ -830,1479 +839,474 @@ var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 42, - 33, 305, - 132, 305, - 144, 305, - 169, 319, - 170, 319, - -2, 307, - -1, 47, - 134, 329, - -2, 327, - -1, 70, - 38, 365, - -2, 373, - -1, 388, - 120, 696, - -2, 692, - -1, 389, - 120, 697, - -2, 693, - -1, 403, - 38, 366, - -2, 378, - -1, 404, - 38, 367, - -2, 379, - -1, 427, - 88, 950, - -2, 72, - -1, 428, - 88, 866, - -2, 73, - -1, 433, - 88, 833, - -2, 658, - -1, 435, - 88, 897, - -2, 660, - -1, 755, - 56, 54, - 58, 54, - -2, 58, - -1, 932, - 120, 699, - -2, 695, - -1, 1360, - 5, 617, - 17, 617, - 19, 617, - 31, 617, - 59, 617, - -2, 404, + -1, 44, + 34, 312, + 133, 312, + 145, 312, + 170, 326, + 171, 326, + -2, 314, + -1, 49, + 135, 336, + -2, 334, + -1, 72, + 39, 372, + -2, 380, + -1, 400, + 121, 703, + -2, 699, + -1, 401, + 121, 704, + -2, 700, + -1, 415, + 39, 373, + -2, 385, + -1, 416, + 39, 374, + -2, 386, + -1, 440, + 89, 958, + -2, 74, + -1, 441, + 89, 873, + -2, 75, + -1, 446, + 89, 840, + -2, 665, + -1, 448, + 89, 905, + -2, 667, + -1, 773, + 57, 56, + 59, 56, + -2, 60, + -1, 951, + 121, 706, + -2, 702, + -1, 1381, + 5, 624, + 18, 624, + 20, 624, + 32, 624, + 60, 624, + -2, 411, } const yyPrivate = 57344 -const yyLast = 17676 +const yyLast = 17957 var yyAct = [...]int{ - 388, 1599, 1589, 1399, 1556, 1287, 332, 1192, 1472, 1505, - 1037, 1212, 1459, 1340, 347, 1373, 1193, 1010, 318, 1337, - 1060, 1080, 599, 722, 1341, 1238, 1033, 1036, 1346, 69, - 3, 683, 361, 1046, 1306, 926, 1180, 89, 432, 597, - 396, 283, 588, 303, 283, 1352, 854, 729, 1131, 89, - 919, 283, 873, 1264, 1255, 1050, 768, 1007, 1012, 996, - 405, 732, 896, 727, 952, 749, 334, 27, 748, 390, - 1076, 319, 767, 421, 322, 67, 283, 89, 557, 739, - 558, 283, 418, 283, 426, 65, 757, 330, 323, 1066, - 989, 70, 696, 882, 64, 7, 6, 5, 1592, 429, - 697, 1531, 645, 644, 654, 655, 647, 648, 649, 650, - 651, 652, 653, 646, 577, 1576, 656, 1587, 1564, 1584, - 1400, 1575, 72, 73, 74, 75, 76, 1323, 1429, 562, - 91, 92, 93, 391, 411, 373, 1367, 379, 380, 377, - 378, 376, 375, 374, 271, 1027, 1563, 269, 769, 273, - 770, 381, 382, 29, 617, 58, 32, 33, 279, 275, - 276, 277, 1226, 1368, 1369, 1225, 1028, 1029, 1227, 321, - 320, 612, 1246, 1059, 929, 613, 610, 611, 1289, 1462, - 1067, 91, 92, 93, 1420, 1418, 311, 881, 313, 843, - 309, 605, 606, 615, 1291, 842, 801, 840, 1586, 1583, - 1557, 594, 1286, 596, 57, 990, 1549, 1603, 1051, 1506, - 1607, 1213, 1215, 578, 602, 564, 616, 273, 1292, 1307, - 847, 619, 831, 1514, 1508, 1053, 1283, 1363, 1362, 1361, - 844, 841, 1285, 560, 1290, 593, 595, 567, 286, 574, - 274, 1034, 883, 884, 885, 1538, 272, 1442, 645, 644, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 1309, 1111, 656, 1222, 1110, 668, 669, 1023, 270, 656, - 283, 569, 570, 969, 1185, 283, 327, 579, 1532, 1160, - 789, 283, 278, 1139, 763, 743, 1053, 283, 586, 1150, - 681, 592, 89, 1214, 1147, 1507, 89, 1311, 89, 1315, - 584, 1310, 874, 1308, 89, 1132, 878, 571, 1313, 572, - 868, 633, 573, 601, 89, 89, 636, 1312, 91, 92, - 93, 802, 1067, 1601, 591, 603, 1602, 636, 1600, 1052, - 1314, 1316, 1515, 1513, 1547, 604, 1284, 607, 1282, 630, - 631, 646, 1523, 618, 656, 625, 1325, 815, 818, 819, - 820, 821, 822, 823, 1350, 824, 825, 826, 827, 828, - 803, 804, 805, 806, 787, 788, 816, 1562, 790, 771, - 791, 792, 793, 794, 795, 796, 797, 798, 799, 800, - 807, 808, 809, 810, 811, 812, 813, 814, 629, 875, - 1052, 953, 580, 581, 582, 833, 666, 869, 1244, 668, - 669, 1274, 590, 1552, 668, 669, 634, 635, 633, 59, - 563, 628, 626, 627, 89, 79, 283, 283, 283, 1053, - 635, 633, 720, 736, 636, 89, 91, 92, 93, 903, - 684, 89, 1567, 1270, 1271, 1272, 1468, 636, 719, 817, - 1467, 1259, 1099, 901, 902, 900, 1258, 429, 974, 975, - 1247, 91, 92, 93, 80, 1608, 1098, 649, 650, 651, - 652, 653, 646, 1569, 1548, 656, 733, 699, 701, 703, - 705, 707, 709, 710, 747, 700, 702, 1485, 706, 708, - 1386, 711, 91, 92, 93, 721, 589, 91, 92, 93, - 953, 400, 1157, 1124, 1125, 1126, 565, 566, 1097, 1609, - 756, 634, 635, 633, 1465, 1273, 761, 1256, 1056, 766, - 1278, 1275, 1266, 1276, 1269, 1057, 1265, 1121, 556, 636, - 1267, 1268, 859, 1052, 57, 891, 893, 894, 1049, 1047, - 268, 1048, 892, 1520, 1277, 1519, 899, 66, 1045, 1051, - 647, 648, 649, 650, 651, 652, 653, 646, 1511, 1585, - 656, 1094, 1091, 1092, 1349, 1090, 1382, 283, 91, 92, - 93, 829, 89, 1054, 832, 1181, 834, 283, 283, 89, - 89, 89, 634, 635, 633, 283, 1338, 731, 283, 1349, - 1327, 283, 852, 853, 68, 283, 1438, 89, 1101, 1104, - 636, 400, 89, 89, 89, 283, 89, 89, 1146, 1571, - 400, 830, 1511, 1560, 415, 416, 89, 89, 837, 838, - 839, 993, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 632, 856, 971, 1522, 857, 982, 1096, 1390, - 858, 861, 862, 863, 1288, 865, 866, 91, 92, 93, - 1145, 921, 1144, 1511, 400, 870, 871, 91, 92, 93, - 1095, 1229, 993, 634, 635, 633, 1230, 920, 1511, 1539, - 848, 634, 635, 633, 970, 1026, 922, 1511, 1510, 1457, - 1456, 636, 897, 1444, 400, 1441, 400, 1392, 1391, 636, - 89, 1388, 1389, 634, 635, 633, 1388, 1387, 982, 400, - 1100, 993, 400, 632, 400, 1163, 941, 944, 778, 777, - 759, 636, 954, 1181, 930, 1102, 898, 350, 349, 352, - 353, 354, 355, 89, 89, 992, 351, 356, 29, 1017, - 932, 758, 1162, 998, 1001, 1002, 1003, 999, 931, 1000, - 1004, 89, 936, 1353, 1354, 684, 57, 29, 283, 759, - 982, 89, 1187, 993, 983, 760, 283, 762, 1188, 1349, - 393, 962, 963, 758, 283, 283, 923, 924, 283, 283, - 966, 972, 283, 283, 283, 89, 930, 1492, 933, 57, - 976, 846, 764, 1577, 1474, 1061, 29, 1449, 89, 558, - 1081, 1378, 932, 1008, 760, 1475, 758, 429, 57, 1233, - 988, 982, 1353, 1354, 984, 1077, 1072, 1071, 1084, 1359, - 1038, 57, 856, 1594, 1590, 1380, 1356, 1338, 1062, 1063, - 1064, 1065, 1260, 879, 850, 1018, 1204, 1202, 1358, 1020, - 986, 1205, 1203, 1201, 1073, 1074, 1075, 57, 1206, 1200, - 1002, 1003, 283, 89, 1581, 89, 1021, 1103, 1025, 1574, - 1170, 283, 283, 283, 283, 283, 1016, 283, 283, 1024, - 1082, 283, 89, 1331, 730, 1579, 1179, 1041, 400, 1178, - 937, 938, 1251, 949, 943, 946, 947, 723, 283, 776, - 587, 1554, 1086, 283, 1088, 283, 283, 950, 1243, 724, - 283, 89, 1068, 1069, 1070, 1553, 1490, 1241, 1235, 961, - 1436, 1115, 964, 965, 1432, 1470, 1078, 1079, 645, 644, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 1431, 1087, 656, 849, 1006, 895, 1118, 397, 904, 905, - 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, - 916, 917, 918, 897, 1435, 645, 644, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 394, 395, 656, - 68, 645, 644, 654, 655, 647, 648, 649, 650, 651, - 652, 653, 646, 1127, 1177, 656, 398, 898, 1434, 1334, - 1181, 614, 1176, 1596, 1595, 958, 1151, 1141, 1148, 998, - 1001, 1002, 1003, 999, 283, 1000, 1004, 872, 737, 1596, - 1169, 1536, 1463, 968, 283, 283, 283, 283, 283, 1194, - 1174, 391, 393, 1140, 66, 71, 283, 63, 1, 1588, - 283, 1401, 1471, 1093, 283, 1555, 1156, 1504, 283, 1189, - 645, 644, 654, 655, 647, 648, 649, 650, 651, 652, - 653, 646, 1372, 1044, 656, 1228, 1173, 89, 1035, 1211, - 78, 1183, 555, 389, 1182, 1184, 1234, 1231, 77, 1546, - 1239, 1239, 867, 1218, 600, 1220, 406, 1221, 1043, 1038, - 1196, 1197, 1195, 1199, 1207, 1198, 1042, 1512, 1461, 1055, - 407, 1245, 1217, 1058, 1379, 1219, 1240, 734, 735, 409, - 90, 408, 1242, 1223, 284, 89, 89, 284, 1551, 784, - 782, 783, 90, 1250, 284, 1252, 1253, 1254, 781, 786, - 785, 780, 1136, 1137, 1236, 1237, 296, 406, 1263, 424, - 880, 310, 1005, 772, 1083, 89, 738, 81, 1281, 284, - 90, 407, 1280, 1154, 284, 1262, 284, 1257, 403, 404, - 409, 1089, 408, 877, 293, 957, 608, 609, 298, 664, - 89, 1175, 1224, 430, 423, 1279, 920, 1344, 973, 726, - 1433, 1333, 1248, 1249, 1293, 1155, 693, 951, 752, 333, - 890, 348, 1303, 345, 346, 1305, 977, 1186, 638, 1294, - 1295, 331, 325, 751, 1302, 744, 283, 1296, 1128, 1129, - 1130, 1318, 997, 1328, 995, 994, 89, 419, 1304, 1355, - 1351, 89, 89, 750, 1194, 1339, 1317, 981, 402, 932, - 1428, 1530, 1324, 401, 948, 399, 50, 931, 1303, 621, - 315, 31, 410, 22, 21, 20, 19, 89, 18, 24, - 17, 1342, 16, 15, 575, 35, 26, 25, 14, 1348, - 13, 89, 12, 89, 89, 11, 10, 1239, 1239, 9, - 8, 4, 624, 1371, 1357, 1364, 23, 682, 2, 0, - 0, 0, 1385, 1038, 0, 1038, 1366, 0, 1370, 0, - 0, 283, 1376, 1377, 0, 0, 1365, 0, 1375, 0, - 0, 0, 0, 0, 0, 1383, 1384, 0, 0, 0, - 0, 283, 0, 1394, 0, 0, 0, 89, 0, 1402, - 89, 89, 89, 283, 0, 0, 0, 0, 1395, 0, - 1397, 644, 654, 655, 647, 648, 649, 650, 651, 652, - 653, 646, 0, 284, 656, 0, 0, 0, 284, 0, - 0, 0, 0, 0, 284, 0, 0, 0, 1413, 1414, - 284, 1415, 0, 1416, 1417, 90, 1419, 1407, 1408, 90, - 0, 90, 0, 0, 0, 1411, 0, 90, 0, 0, - 0, 0, 0, 0, 0, 0, 1194, 90, 90, 1437, - 362, 28, 0, 0, 0, 0, 1446, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 0, 0, 0, 89, - 0, 1231, 0, 0, 0, 0, 0, 0, 0, 28, - 0, 0, 0, 1038, 89, 1458, 1445, 0, 0, 0, - 0, 89, 0, 0, 0, 0, 1455, 0, 0, 1298, - 1299, 0, 0, 0, 0, 1478, 0, 0, 0, 0, - 0, 0, 0, 1473, 1319, 1320, 392, 1321, 1322, 0, - 0, 0, 0, 1469, 0, 1476, 0, 0, 0, 1329, - 1330, 0, 89, 89, 0, 89, 0, 0, 0, 0, - 89, 0, 89, 89, 89, 283, 0, 90, 89, 284, - 284, 284, 1498, 1491, 1499, 1501, 1502, 1489, 90, 1484, - 1493, 1342, 1503, 1509, 90, 89, 283, 1464, 1516, 1466, - 0, 0, 0, 0, 0, 0, 1497, 1524, 0, 0, - 0, 1517, 0, 1518, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1477, 0, 1537, 1545, 0, 0, - 0, 0, 89, 0, 1544, 1543, 0, 0, 0, 0, - 1381, 0, 0, 89, 89, 1342, 0, 0, 0, 0, - 0, 1558, 0, 0, 1559, 0, 0, 0, 0, 89, - 0, 0, 0, 1194, 1565, 1473, 1038, 0, 0, 0, - 283, 0, 0, 0, 0, 0, 0, 0, 89, 0, - 0, 0, 0, 0, 0, 0, 1573, 0, 0, 0, - 0, 0, 0, 0, 1409, 0, 1578, 1580, 89, 0, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 1582, 1593, 656, 0, 0, 0, 0, 0, 1604, 0, - 284, 0, 0, 0, 0, 90, 0, 0, 0, 0, - 284, 284, 90, 90, 90, 0, 0, 0, 284, 0, - 0, 284, 0, 0, 284, 0, 0, 0, 284, 0, - 90, 413, 0, 0, 0, 90, 90, 90, 284, 90, - 90, 0, 0, 0, 0, 0, 0, 0, 0, 90, - 90, 0, 598, 0, 0, 0, 598, 0, 598, 0, - 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 28, 0, 1426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 324, 665, - 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1479, 1480, 1481, 1482, 1483, 0, 0, 0, 1486, 1487, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 680, 0, 0, 90, 685, 686, 687, 688, 689, 690, - 691, 692, 0, 695, 698, 698, 698, 704, 698, 698, - 704, 698, 712, 713, 714, 715, 716, 717, 718, 0, - 0, 0, 0, 28, 0, 0, 90, 90, 645, 644, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 0, 0, 656, 0, 90, 0, 0, 753, 0, 0, - 0, 284, 0, 0, 90, 0, 0, 0, 0, 284, - 0, 91, 92, 93, 0, 0, 0, 284, 284, 0, - 0, 284, 284, 0, 0, 284, 284, 284, 90, 0, - 0, 0, 359, 0, 640, 0, 643, 0, 934, 935, - 0, 90, 657, 658, 659, 660, 661, 662, 663, 0, - 641, 642, 639, 645, 644, 654, 655, 647, 648, 649, - 650, 651, 652, 653, 646, 287, 0, 656, 0, 88, - 0, 0, 0, 0, 290, 1425, 967, 0, 0, 0, - 0, 312, 297, 0, 0, 0, 0, 0, 1597, 0, - 0, 0, 0, 0, 0, 284, 90, 0, 90, 0, - 0, 0, 0, 0, 284, 284, 284, 284, 284, 431, - 284, 284, 0, 0, 284, 90, 295, 1424, 0, 0, - 0, 0, 302, 0, 0, 0, 0, 0, 0, 0, - 0, 284, 0, 0, 0, 0, 284, 0, 284, 284, - 0, 0, 598, 284, 90, 1423, 0, 0, 0, 598, - 598, 598, 288, 0, 0, 645, 644, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 598, 0, 656, - 0, 0, 598, 598, 598, 0, 598, 598, 637, 299, - 291, 0, 300, 301, 307, 0, 598, 598, 292, 294, - 304, 0, 289, 306, 305, 0, 0, 645, 644, 654, - 655, 647, 648, 649, 650, 651, 652, 653, 646, 0, - 0, 656, 0, 0, 324, 0, 0, 0, 0, 0, - 0, 0, 0, 694, 0, 645, 644, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 0, 0, 656, - 0, 0, 0, 0, 0, 0, 0, 284, 0, 725, - 728, 0, 0, 0, 0, 0, 0, 284, 284, 284, - 284, 284, 0, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 0, 284, 0, 0, 0, 284, 1134, 0, - 0, 284, 1135, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1142, 1143, 0, 0, 0, 0, 1149, - 90, 0, 1152, 1153, 0, 0, 0, 0, 0, 0, - 1159, 0, 0, 0, 1161, 0, 0, 1164, 1165, 1166, - 1167, 1168, 0, 0, 431, 0, 0, 0, 431, 0, - 431, 0, 0, 0, 1009, 0, 431, 0, 753, 0, - 0, 0, 753, 0, 0, 0, 620, 622, 90, 90, - 0, 0, 0, 0, 0, 29, 30, 58, 32, 33, - 0, 0, 0, 1209, 1210, 1297, 0, 0, 0, 0, - 0, 0, 0, 0, 62, 0, 0, 0, 90, 34, - 53, 54, 0, 56, 0, 645, 644, 654, 655, 647, - 648, 649, 650, 651, 652, 653, 646, 1133, 0, 656, - 0, 0, 43, 90, 0, 0, 57, 0, 0, 0, - 0, 0, 0, 598, 0, 598, 0, 645, 644, 654, - 655, 647, 648, 649, 650, 651, 652, 653, 646, 0, - 0, 656, 598, 0, 0, 0, 0, 0, 0, 284, - 0, 0, 860, 0, 0, 0, 741, 0, 0, 90, - 0, 0, 0, 0, 90, 90, 0, 431, 0, 0, - 0, 0, 0, 773, 0, 0, 876, 0, 0, 0, - 0, 0, 36, 37, 39, 38, 41, 0, 55, 0, - 90, 0, 0, 0, 886, 887, 888, 889, 0, 0, - 0, 0, 1300, 1301, 90, 0, 90, 90, 0, 0, - 0, 42, 61, 60, 0, 0, 51, 52, 40, 0, - 0, 1138, 0, 0, 392, 0, 0, 0, 0, 0, - 0, 0, 44, 45, 284, 46, 47, 48, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 939, - 940, 0, 0, 0, 284, 0, 0, 0, 0, 0, - 90, 0, 0, 90, 90, 90, 284, 0, 0, 0, - 0, 0, 0, 0, 753, 0, 0, 1360, 0, 0, - 1190, 1191, 0, 0, 753, 753, 753, 753, 753, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1009, 0, 1216, 0, 431, 0, 754, 0, 753, 0, - 0, 431, 431, 431, 0, 0, 0, 0, 0, 0, - 0, 59, 0, 0, 0, 0, 0, 0, 0, 431, - 0, 0, 0, 1032, 431, 431, 431, 0, 431, 431, - 0, 0, 0, 0, 90, 0, 0, 281, 431, 431, - 0, 0, 90, 0, 0, 0, 0, 314, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 90, 1410, 0, - 0, 0, 1412, 0, 90, 0, 598, 0, 0, 0, - 0, 0, 420, 1421, 1422, 0, 0, 559, 0, 561, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 598, 0, 0, 0, 1439, - 1440, 0, 1443, 0, 0, 90, 90, 0, 90, 0, - 0, 0, 925, 90, 431, 90, 90, 90, 284, 0, - 1454, 90, 0, 0, 0, 0, 0, 0, 955, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 90, 284, - 0, 0, 0, 0, 0, 959, 960, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 978, 0, 0, 0, 0, 0, 1343, - 0, 28, 0, 741, 0, 90, 431, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 90, 90, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, - 0, 0, 90, 0, 0, 1158, 0, 1500, 0, 0, - 431, 0, 0, 284, 0, 0, 0, 0, 0, 360, - 0, 90, 1171, 1172, 728, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1526, 1527, 1528, 1529, 0, - 1533, 90, 1534, 1535, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1540, 0, 1541, 1542, 0, - 282, 0, 0, 308, 0, 431, 568, 431, 0, 0, - 282, 576, 0, 0, 0, 0, 0, 583, 0, 0, - 0, 0, 0, 585, 431, 0, 1561, 0, 0, 0, - 0, 0, 414, 0, 0, 422, 0, 0, 0, 0, - 282, 0, 282, 0, 1427, 0, 0, 0, 0, 0, - 0, 1570, 0, 1123, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1451, 1452, 1453, 0, 0, 0, 0, 0, - 0, 0, 0, 1605, 1606, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 598, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1326, - 0, 0, 746, 0, 755, 0, 0, 0, 0, 1343, - 0, 28, 0, 0, 0, 955, 0, 0, 0, 0, - 0, 0, 0, 1335, 0, 0, 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, 0, 0, 0, 0, 0, 0, 431, - 0, 0, 0, 1343, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 282, - 0, 0, 0, 0, 282, 0, 0, 0, 0, 0, - 282, 0, 0, 0, 0, 0, 282, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1261, 431, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 431, 0, 0, - 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 835, 836, 0, 0, 1591, 0, 0, - 0, 845, 431, 0, 420, 0, 0, 851, 0, 1430, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 864, 0, 431, 0, 324, 0, 0, 0, 0, - 0, 0, 1447, 0, 0, 1448, 0, 0, 1450, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 431, 0, - 955, 0, 414, 1345, 1347, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 282, 282, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 431, 0, 431, 1374, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1488, 324, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1398, - 0, 0, 1403, 1404, 1405, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 985, 0, 0, 0, 0, 0, - 0, 0, 991, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1019, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 282, 0, 0, 0, - 0, 0, 955, 0, 0, 0, 282, 282, 0, 0, - 0, 0, 0, 0, 282, 0, 0, 282, 0, 0, - 282, 0, 0, 431, 855, 0, 0, 0, 0, 0, - 0, 1460, 0, 0, 282, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 431, 0, 1085, 0, - 0, 0, 0, 431, 0, 0, 0, 1105, 1106, 1107, - 1108, 1109, 0, 1112, 1113, 0, 0, 1114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1116, 0, 0, 0, 0, 1117, - 0, 0, 0, 0, 1494, 1495, 1122, 1496, 0, 0, - 0, 0, 1460, 0, 1460, 1460, 1460, 0, 0, 0, - 1374, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 414, 855, 0, 0, 0, 414, 414, 1460, 0, 414, - 414, 414, 0, 0, 0, 956, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 414, 414, 414, 414, 414, 0, - 0, 0, 0, 0, 1550, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 431, 431, 282, 0, 0, - 0, 0, 0, 855, 0, 282, 0, 0, 0, 955, - 0, 1566, 0, 282, 1014, 0, 0, 282, 282, 0, - 0, 282, 1022, 855, 0, 0, 0, 0, 0, 0, - 1572, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1460, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, - 282, 282, 282, 282, 282, 0, 282, 282, 0, 0, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 282, 0, 0, - 0, 0, 282, 0, 1119, 1120, 0, 0, 0, 282, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 400, 1620, 1610, 1420, 1577, 1307, 1232, 1057, 1212, 344, + 620, 1526, 1493, 1361, 1480, 359, 1394, 1030, 1362, 1213, + 1053, 1358, 373, 601, 1100, 746, 700, 739, 1258, 71, + 3, 1086, 1066, 1056, 330, 938, 1199, 1367, 1326, 92, + 1373, 873, 893, 290, 1150, 313, 290, 1070, 1284, 1275, + 787, 92, 1032, 290, 69, 945, 1016, 417, 445, 744, + 749, 971, 1027, 408, 767, 915, 618, 1096, 346, 786, + 570, 28, 784, 766, 1009, 402, 610, 434, 756, 290, + 92, 342, 72, 571, 290, 335, 290, 67, 775, 331, + 442, 431, 334, 713, 901, 66, 8, 7, 590, 6, + 1613, 1597, 1608, 714, 1585, 1605, 1421, 1596, 1584, 1343, + 1450, 1119, 575, 1388, 74, 75, 76, 77, 78, 79, + 94, 95, 96, 1047, 385, 1118, 391, 392, 389, 390, + 388, 387, 386, 1389, 1390, 423, 427, 1048, 1049, 403, + 393, 394, 30, 633, 333, 60, 34, 35, 286, 282, + 283, 284, 439, 788, 1327, 789, 94, 95, 96, 332, + 1266, 278, 339, 1079, 276, 1483, 280, 1117, 1552, 662, + 661, 671, 672, 664, 665, 666, 667, 668, 669, 670, + 663, 1246, 1087, 673, 1245, 1441, 1309, 1247, 94, 95, + 96, 607, 628, 609, 59, 1329, 629, 626, 627, 1439, + 323, 900, 325, 321, 862, 632, 621, 622, 631, 1311, + 861, 859, 1607, 1604, 1578, 1306, 1010, 1570, 1527, 948, + 1114, 1111, 1112, 1071, 1110, 606, 608, 1628, 1294, 1233, + 1235, 616, 1331, 1529, 1335, 591, 1330, 1624, 1328, 577, + 1073, 1535, 1310, 1333, 280, 863, 860, 902, 903, 904, + 1312, 866, 1332, 425, 636, 1073, 850, 1121, 1124, 1384, + 1290, 1291, 1292, 279, 1383, 1334, 1336, 1382, 573, 1303, + 580, 293, 94, 95, 96, 1305, 285, 290, 582, 583, + 281, 1169, 290, 1131, 592, 1559, 1130, 1166, 290, 277, + 1463, 94, 95, 96, 290, 599, 587, 1116, 605, 685, + 686, 1242, 1204, 1179, 1528, 92, 1158, 92, 781, 760, + 698, 1234, 336, 597, 92, 1080, 1054, 673, 604, 1115, + 666, 667, 668, 669, 670, 663, 92, 92, 673, 1087, + 615, 663, 1293, 1583, 673, 1043, 634, 1298, 1295, 1286, + 1296, 1289, 617, 1285, 1072, 294, 894, 1287, 1288, 1553, + 1536, 1534, 888, 1622, 297, 988, 1623, 642, 1621, 1072, + 82, 1297, 306, 1120, 584, 611, 585, 647, 648, 586, + 653, 603, 820, 623, 1568, 1544, 612, 613, 1122, 1304, + 635, 1302, 1371, 593, 594, 595, 94, 95, 96, 790, + 922, 685, 686, 650, 1165, 646, 304, 685, 686, 83, + 1345, 972, 311, 61, 920, 921, 919, 852, 1629, 653, + 683, 671, 672, 664, 665, 666, 667, 668, 669, 670, + 663, 1264, 1573, 673, 645, 643, 92, 644, 736, 290, + 290, 290, 295, 895, 737, 651, 652, 650, 92, 889, + 1407, 652, 650, 1347, 92, 972, 701, 1176, 442, 651, + 652, 650, 1630, 653, 1076, 602, 808, 753, 653, 308, + 298, 1077, 309, 310, 317, 785, 1588, 653, 301, 303, + 314, 299, 300, 319, 318, 750, 296, 316, 315, 576, + 716, 718, 720, 722, 724, 726, 727, 1489, 738, 1488, + 717, 719, 765, 723, 725, 59, 728, 821, 664, 665, + 666, 667, 668, 669, 670, 663, 1279, 918, 673, 1278, + 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, + 1267, 779, 774, 834, 837, 838, 839, 840, 841, 842, + 1590, 843, 844, 845, 846, 847, 822, 823, 824, 825, + 806, 807, 835, 275, 809, 437, 810, 811, 812, 813, + 814, 815, 816, 817, 818, 819, 826, 827, 828, 829, + 830, 831, 832, 833, 1164, 1569, 1163, 1506, 578, 579, + 290, 910, 912, 913, 848, 92, 1486, 851, 911, 853, + 290, 290, 92, 92, 92, 651, 652, 650, 290, 993, + 994, 290, 654, 990, 290, 871, 872, 1276, 290, 886, + 92, 412, 878, 653, 1541, 92, 92, 92, 290, 92, + 92, 94, 95, 96, 651, 652, 650, 1532, 1606, 836, + 428, 429, 92, 92, 877, 1073, 1592, 412, 336, 1143, + 1144, 1145, 653, 989, 748, 1532, 1581, 711, 94, 95, + 96, 849, 651, 652, 650, 1532, 412, 569, 856, 857, + 858, 777, 651, 652, 650, 1540, 875, 94, 95, 96, + 653, 1532, 1560, 742, 745, 68, 876, 1532, 1531, 1403, + 653, 880, 881, 882, 939, 884, 885, 1478, 1477, 916, + 1465, 412, 867, 941, 1462, 412, 1413, 1412, 890, 891, + 362, 361, 364, 365, 366, 367, 778, 92, 780, 363, + 368, 94, 95, 96, 777, 940, 1409, 1410, 897, 949, + 94, 95, 96, 1200, 1249, 1200, 960, 963, 1409, 1408, + 412, 1074, 973, 1001, 412, 917, 1037, 955, 776, 1072, + 92, 92, 1013, 412, 1069, 1067, 70, 1068, 30, 30, + 950, 649, 412, 1370, 1065, 1071, 797, 796, 92, 778, + 1359, 776, 1002, 1370, 1459, 290, 701, 951, 92, 1013, + 649, 1370, 290, 1207, 290, 1543, 1012, 942, 943, 1208, + 1513, 949, 290, 290, 1411, 1013, 290, 290, 1250, 1001, + 290, 290, 290, 92, 1046, 1182, 92, 952, 981, 982, + 59, 59, 59, 442, 1013, 1181, 442, 92, 571, 1001, + 985, 1028, 1007, 1001, 776, 991, 865, 1058, 1003, 782, + 995, 1598, 1495, 405, 1081, 1470, 1101, 30, 914, 951, + 1399, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 1005, 1253, 1038, 1097, + 875, 1092, 1040, 1088, 1089, 1090, 1374, 1375, 1036, 1091, + 1308, 290, 92, 1045, 92, 1044, 1123, 879, 1041, 1496, + 290, 290, 290, 290, 290, 59, 290, 290, 1061, 59, + 290, 92, 1102, 1104, 1615, 1611, 1401, 1377, 977, 1018, + 1021, 1022, 1023, 1019, 896, 1020, 1024, 1359, 290, 1374, + 1375, 1280, 898, 290, 869, 290, 290, 1224, 1380, 290, + 92, 1379, 1225, 905, 906, 907, 908, 1602, 1226, 1222, + 1022, 1023, 1098, 1099, 1223, 1221, 1220, 1138, 1106, 1595, + 1108, 412, 956, 957, 418, 1189, 962, 965, 966, 1018, + 1021, 1022, 1023, 1019, 1351, 1020, 1024, 1135, 419, 747, + 1600, 401, 916, 1198, 1197, 751, 752, 421, 1271, 420, + 795, 980, 600, 1263, 983, 984, 1575, 1574, 958, 959, + 968, 662, 661, 671, 672, 664, 665, 666, 667, 668, + 669, 670, 663, 1511, 969, 673, 418, 740, 1261, 1255, + 93, 1457, 1491, 1107, 291, 1146, 868, 291, 917, 741, + 419, 1026, 93, 409, 291, 406, 407, 415, 416, 421, + 1196, 420, 1456, 290, 410, 70, 1455, 1354, 1195, 1200, + 630, 1617, 1616, 1188, 290, 290, 290, 290, 290, 1160, + 291, 93, 1214, 1193, 403, 291, 290, 291, 1159, 1170, + 290, 1167, 1175, 892, 290, 761, 754, 1617, 290, 1209, + 1557, 1484, 987, 405, 1052, 1205, 68, 73, 65, 1, + 312, 1192, 1609, 1422, 1492, 1248, 1113, 92, 1576, 1231, + 1525, 1203, 1201, 1393, 1251, 1202, 1254, 1058, 1064, 1055, + 1259, 1259, 81, 1238, 568, 1240, 80, 1241, 1567, 1216, + 1217, 1227, 1219, 1147, 1148, 1149, 1237, 1215, 887, 614, + 1218, 1063, 1062, 1533, 1265, 1078, 1482, 1243, 1400, 1260, + 1239, 1262, 1572, 803, 801, 92, 92, 1270, 802, 1272, + 1273, 1274, 800, 805, 1268, 1269, 1256, 1257, 804, 799, + 305, 899, 1082, 1083, 1084, 1085, 322, 1317, 1025, 791, + 1103, 755, 84, 1301, 1300, 92, 1109, 1075, 1093, 1094, + 1095, 302, 1277, 624, 1283, 625, 307, 662, 661, 671, + 672, 664, 665, 666, 667, 668, 669, 670, 663, 92, + 1299, 673, 681, 1194, 1244, 939, 1155, 1156, 443, 1323, + 436, 1365, 1282, 992, 743, 1454, 1353, 1174, 710, 1314, + 1315, 970, 770, 345, 909, 1324, 360, 1173, 1325, 357, + 1348, 358, 1316, 996, 1206, 290, 655, 343, 337, 1344, + 1337, 1313, 769, 762, 1338, 92, 1017, 1015, 1014, 432, + 1376, 92, 92, 1322, 1372, 1323, 1360, 1214, 291, 768, + 1000, 950, 414, 291, 1449, 1551, 1177, 413, 967, 291, + 52, 1363, 638, 327, 33, 291, 422, 92, 951, 23, + 22, 21, 20, 1190, 1191, 745, 93, 19, 93, 1369, + 25, 92, 18, 92, 92, 93, 17, 1259, 1259, 1378, + 1392, 1058, 16, 1058, 1386, 588, 37, 93, 93, 1357, + 27, 26, 1406, 15, 1385, 14, 1387, 13, 12, 11, + 10, 290, 9, 5, 1391, 1397, 1398, 1396, 4, 1404, + 1405, 641, 976, 24, 699, 2, 0, 0, 0, 0, + 0, 290, 0, 0, 0, 0, 0, 92, 0, 1423, + 92, 92, 92, 290, 1318, 1319, 0, 0, 0, 1415, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, + 1340, 0, 1341, 1342, 1416, 0, 1418, 0, 1428, 1429, + 0, 0, 0, 0, 1349, 1350, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1437, 0, 0, 0, + 0, 0, 1453, 0, 411, 0, 0, 93, 0, 0, + 291, 291, 291, 0, 0, 0, 0, 0, 0, 93, + 1214, 0, 1458, 0, 0, 93, 0, 0, 1432, 0, + 1467, 0, 92, 0, 0, 1466, 0, 0, 0, 1251, + 92, 0, 1058, 662, 661, 671, 672, 664, 665, 666, + 667, 668, 669, 670, 663, 92, 0, 673, 0, 0, + 0, 0, 92, 0, 0, 0, 1402, 0, 0, 0, + 1346, 0, 1494, 0, 0, 0, 1499, 0, 0, 0, + 1485, 0, 1487, 0, 0, 0, 0, 0, 0, 0, + 1476, 0, 0, 0, 1355, 0, 0, 0, 0, 0, + 1497, 0, 0, 92, 92, 0, 92, 1498, 0, 0, + 0, 92, 0, 92, 92, 92, 290, 0, 1512, 92, + 1430, 1490, 1363, 1510, 0, 1519, 0, 1520, 1522, 1523, + 0, 1514, 0, 1524, 0, 1530, 92, 290, 0, 0, + 1537, 0, 0, 0, 0, 0, 1538, 0, 1539, 0, + 1545, 291, 0, 1505, 0, 0, 93, 0, 0, 0, + 0, 291, 291, 93, 93, 93, 0, 1558, 1566, 291, + 1518, 1564, 291, 92, 0, 291, 1363, 1565, 0, 291, + 0, 93, 0, 0, 92, 92, 93, 93, 93, 291, + 93, 93, 1580, 0, 1494, 1058, 1579, 0, 0, 0, + 92, 0, 0, 93, 93, 0, 1586, 1214, 0, 0, + 0, 290, 0, 0, 0, 0, 0, 0, 0, 92, + 0, 0, 0, 0, 0, 0, 0, 1594, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1599, 1601, 92, + 0, 1451, 0, 0, 0, 0, 0, 1500, 1501, 1502, + 1503, 1504, 1614, 1603, 0, 1507, 1508, 0, 336, 1625, + 0, 0, 0, 374, 29, 1468, 0, 0, 1469, 0, + 0, 1471, 1452, 0, 0, 0, 0, 0, 93, 0, + 0, 0, 0, 1434, 1435, 0, 1436, 0, 0, 1438, + 0, 1440, 0, 29, 0, 662, 661, 671, 672, 664, + 665, 666, 667, 668, 669, 670, 663, 0, 0, 673, + 0, 93, 93, 662, 661, 671, 672, 664, 665, 666, + 667, 668, 669, 670, 663, 0, 0, 673, 0, 93, + 0, 404, 0, 0, 0, 0, 291, 0, 0, 93, + 0, 0, 0, 291, 0, 291, 0, 0, 0, 1509, + 336, 1479, 1151, 291, 291, 0, 0, 291, 291, 0, + 0, 291, 291, 291, 93, 0, 0, 93, 30, 31, + 32, 60, 34, 35, 1447, 0, 0, 0, 93, 1152, + 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, + 0, 0, 0, 36, 55, 56, 0, 58, 0, 662, + 661, 671, 672, 664, 665, 666, 667, 668, 669, 670, + 663, 0, 0, 673, 0, 1618, 45, 0, 0, 0, + 59, 661, 671, 672, 664, 665, 666, 667, 668, 669, + 670, 663, 291, 93, 673, 93, 0, 0, 0, 0, + 0, 291, 291, 291, 291, 291, 0, 291, 291, 0, + 0, 291, 93, 0, 662, 661, 671, 672, 664, 665, + 666, 667, 668, 669, 670, 663, 0, 0, 673, 291, + 0, 1446, 0, 0, 291, 0, 291, 291, 0, 0, + 291, 93, 0, 0, 0, 0, 38, 39, 41, 40, + 43, 0, 57, 0, 0, 0, 0, 0, 0, 371, + 662, 661, 671, 672, 664, 665, 666, 667, 668, 669, + 670, 663, 0, 0, 673, 44, 63, 62, 0, 0, + 53, 54, 42, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 46, 47, 91, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, + 324, 662, 661, 671, 672, 664, 665, 666, 667, 668, + 669, 670, 663, 0, 0, 673, 0, 0, 619, 0, + 619, 0, 0, 0, 0, 0, 0, 619, 0, 444, + 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, + 0, 29, 0, 0, 1445, 291, 291, 291, 291, 291, + 0, 0, 0, 0, 682, 684, 0, 291, 0, 0, + 0, 291, 0, 0, 0, 291, 0, 0, 0, 291, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, + 0, 0, 953, 954, 0, 697, 0, 0, 93, 702, + 703, 704, 705, 706, 707, 708, 709, 0, 712, 715, + 715, 715, 721, 715, 715, 721, 715, 729, 730, 731, + 732, 733, 734, 735, 1444, 0, 0, 0, 29, 0, + 986, 0, 0, 0, 662, 661, 671, 672, 664, 665, + 666, 667, 668, 669, 670, 663, 93, 93, 673, 0, + 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, + 0, 657, 0, 660, 0, 0, 0, 0, 0, 674, + 675, 676, 677, 678, 679, 680, 93, 658, 659, 656, + 662, 661, 671, 672, 664, 665, 666, 667, 668, 669, + 670, 663, 0, 0, 673, 0, 772, 0, 0, 0, + 93, 0, 0, 0, 662, 661, 671, 672, 664, 665, + 666, 667, 668, 669, 670, 663, 0, 0, 673, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 291, 0, 0, 288, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 326, + 0, 0, 93, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 444, 0, 444, 0, 0, 0, + 0, 0, 0, 444, 0, 433, 0, 0, 93, 0, + 572, 0, 574, 0, 0, 637, 639, 0, 0, 0, + 0, 0, 93, 0, 93, 93, 0, 0, 619, 0, + 0, 0, 0, 0, 0, 619, 619, 619, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 619, 0, 0, 0, 0, 619, 619, + 619, 0, 619, 619, 1153, 0, 0, 0, 1154, 0, + 0, 0, 291, 0, 0, 619, 619, 0, 93, 1161, + 1162, 93, 93, 93, 291, 1168, 0, 0, 1171, 1172, + 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, + 1180, 0, 0, 1183, 1184, 1185, 1186, 1187, 0, 0, + 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, + 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1229, 1230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, + 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, + 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 581, 0, 0, 0, 0, 589, 0, + 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, + 598, 0, 0, 0, 0, 1029, 0, 0, 0, 771, + 0, 0, 0, 771, 93, 93, 0, 93, 0, 0, + 0, 0, 93, 0, 93, 93, 93, 291, 0, 0, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 444, 0, 0, 93, 291, 0, + 0, 444, 444, 444, 0, 0, 0, 0, 1320, 1321, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, + 0, 0, 0, 0, 444, 444, 444, 0, 444, 444, + 0, 0, 0, 0, 93, 619, 0, 619, 0, 0, + 0, 444, 444, 0, 0, 93, 93, 0, 0, 0, + 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, + 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 0, 1381, 764, 0, 773, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 944, 0, 444, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 974, 1157, 0, 0, 404, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 978, + 979, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, + 0, 0, 0, 0, 0, 1431, 0, 758, 0, 1433, + 444, 0, 0, 0, 0, 0, 771, 0, 0, 0, + 1442, 1443, 0, 1210, 1211, 0, 0, 771, 771, 771, + 771, 771, 444, 0, 0, 444, 0, 0, 0, 0, + 0, 0, 0, 1029, 0, 1236, 444, 1460, 1461, 0, + 1464, 771, 0, 0, 0, 0, 798, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 854, 855, 1475, 0, + 0, 0, 0, 0, 864, 0, 0, 433, 0, 0, + 870, 0, 372, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, + 0, 444, 0, 444, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, + 444, 0, 0, 0, 0, 289, 0, 0, 320, 0, + 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 619, 1142, + 0, 0, 0, 0, 0, 1521, 0, 426, 426, 0, + 0, 435, 0, 0, 0, 0, 289, 0, 289, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1547, 1548, 1549, 1550, 0, 1554, 0, + 1555, 1556, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1561, 0, 1562, 1563, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1364, 0, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1582, 0, 0, 0, 0, 0, + 0, 1004, 0, 0, 0, 0, 0, 0, 1008, 0, + 1011, 0, 0, 0, 0, 0, 0, 0, 0, 1591, + 0, 0, 974, 1039, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1626, 1627, 0, 0, 0, 444, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1105, 0, 0, + 0, 0, 0, 0, 0, 0, 1125, 1126, 1127, 1128, + 1129, 0, 1132, 1133, 1281, 444, 1134, 1448, 0, 289, + 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, + 289, 0, 0, 0, 1136, 0, 289, 0, 0, 1137, + 0, 0, 0, 0, 444, 1141, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1472, 1473, 1474, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 619, 444, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 444, 0, 0, 974, 0, 0, + 1366, 1368, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1364, 0, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1368, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, + 444, 0, 444, 1395, 0, 1542, 0, 0, 0, 0, + 0, 289, 289, 289, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 414, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, - 0, 0, 1332, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1419, 0, 0, 1424, + 1425, 1426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 414, 282, 0, 0, 0, 0, 0, 0, - 0, 0, 956, 282, 282, 282, 282, 282, 0, 0, - 0, 0, 0, 0, 0, 1208, 0, 0, 0, 282, - 0, 0, 0, 1014, 0, 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 974, 1612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 444, 0, 0, 0, 0, 0, 0, 0, 1481, + 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 289, 289, 444, 0, 0, 0, 0, 0, + 289, 444, 0, 289, 0, 0, 289, 0, 0, 0, + 874, 1352, 0, 0, 0, 0, 0, 0, 0, 0, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1515, 1516, 0, 1517, 0, 0, 0, 0, + 1481, 0, 1481, 1481, 1481, 0, 0, 0, 1395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 956, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 426, 874, 1571, 0, 0, 426, 426, 1417, 0, 426, + 426, 426, 0, 444, 444, 975, 0, 0, 0, 1427, + 0, 0, 0, 0, 0, 0, 0, 974, 0, 1587, + 0, 0, 0, 0, 426, 426, 426, 426, 426, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1593, 0, + 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, + 0, 0, 0, 874, 289, 0, 289, 0, 1481, 0, + 0, 0, 0, 0, 289, 1034, 0, 0, 289, 289, + 0, 0, 289, 1042, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1525, 0, 0, 0, 0, 0, 0, 0, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, + 0, 0, 289, 289, 289, 289, 289, 0, 289, 289, + 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 289, 0, 0, 0, 0, 289, 0, 1139, 1140, 0, + 0, 289, 0, 1546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1568, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 956, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1014, 0, 0, 0, 0, 0, - 541, 529, 0, 486, 544, 459, 476, 552, 477, 480, - 517, 444, 499, 180, 474, 282, 463, 439, 470, 440, - 461, 488, 123, 492, 458, 531, 502, 543, 152, 0, - 464, 550, 154, 508, 0, 227, 168, 0, 0, 0, - 490, 533, 497, 526, 485, 518, 449, 507, 545, 475, - 515, 546, 0, 0, 0, 91, 92, 93, 0, 1039, - 1040, 0, 0, 0, 0, 0, 113, 0, 512, 540, - 472, 514, 516, 554, 438, 509, 956, 442, 445, 551, - 536, 467, 468, 1232, 0, 0, 0, 0, 0, 282, - 489, 498, 523, 483, 0, 0, 0, 0, 0, 0, - 0, 0, 465, 0, 506, 0, 0, 0, 446, 443, - 0, 0, 0, 0, 487, 0, 0, 0, 448, 0, - 466, 524, 0, 436, 132, 528, 535, 484, 285, 539, - 482, 481, 542, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 532, 462, 471, - 117, 469, 209, 187, 248, 505, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 441, 0, - 228, 251, 267, 111, 457, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 453, 456, - 451, 452, 500, 501, 547, 548, 549, 525, 447, 0, - 454, 455, 0, 530, 537, 538, 504, 94, 103, 153, - 264, 202, 128, 252, 437, 450, 121, 460, 0, 0, - 473, 478, 479, 491, 493, 494, 495, 496, 503, 510, - 511, 513, 519, 520, 521, 522, 527, 534, 553, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 541, 529, - 0, 486, 544, 459, 476, 552, 477, 480, 517, 444, - 499, 180, 474, 0, 463, 439, 470, 440, 461, 488, - 123, 492, 458, 531, 502, 543, 152, 0, 464, 550, - 154, 508, 0, 227, 168, 0, 0, 0, 490, 533, - 497, 526, 485, 518, 449, 507, 545, 475, 515, 546, - 0, 0, 0, 91, 92, 93, 0, 1039, 1040, 0, - 0, 0, 0, 0, 113, 0, 512, 540, 472, 514, - 516, 554, 438, 509, 0, 442, 445, 551, 536, 467, - 468, 0, 0, 0, 0, 0, 0, 0, 489, 498, - 523, 483, 0, 0, 0, 0, 0, 0, 0, 0, - 465, 0, 506, 0, 0, 0, 446, 443, 0, 0, - 0, 0, 487, 0, 0, 0, 448, 0, 466, 524, - 0, 436, 132, 528, 535, 484, 285, 539, 482, 481, - 542, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 532, 462, 471, 117, 469, - 209, 187, 248, 505, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 441, 0, 228, 251, - 267, 111, 457, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 453, 456, 451, 452, - 500, 501, 547, 548, 549, 525, 447, 0, 454, 455, - 0, 530, 537, 538, 504, 94, 103, 153, 264, 202, - 128, 252, 437, 450, 121, 460, 0, 0, 473, 478, - 479, 491, 493, 494, 495, 496, 503, 510, 511, 513, - 519, 520, 521, 522, 527, 534, 553, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 541, 529, 0, 486, - 544, 459, 476, 552, 477, 480, 517, 444, 499, 180, - 474, 0, 463, 439, 470, 440, 461, 488, 123, 492, - 458, 531, 502, 543, 152, 0, 464, 550, 154, 508, - 0, 227, 168, 0, 0, 0, 490, 533, 497, 526, - 485, 518, 449, 507, 545, 475, 515, 546, 57, 0, - 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 512, 540, 472, 514, 516, 554, - 438, 509, 0, 442, 445, 551, 536, 467, 468, 0, - 0, 0, 0, 0, 0, 0, 489, 498, 523, 483, - 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, - 506, 0, 0, 0, 446, 443, 0, 0, 0, 0, - 487, 0, 0, 0, 448, 0, 466, 524, 0, 436, - 132, 528, 535, 484, 285, 539, 482, 481, 542, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 532, 462, 471, 117, 469, 209, 187, - 248, 505, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 441, 0, 228, 251, 267, 111, - 457, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 453, 456, 451, 452, 500, 501, - 547, 548, 549, 525, 447, 0, 454, 455, 0, 530, - 537, 538, 504, 94, 103, 153, 264, 202, 128, 252, - 437, 450, 121, 460, 0, 0, 473, 478, 479, 491, - 493, 494, 495, 496, 503, 510, 511, 513, 519, 520, - 521, 522, 527, 534, 553, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 541, 529, 0, 486, 544, 459, - 476, 552, 477, 480, 517, 444, 499, 180, 474, 0, - 463, 439, 470, 440, 461, 488, 123, 492, 458, 531, - 502, 543, 152, 0, 464, 550, 154, 508, 0, 227, - 168, 0, 0, 0, 490, 533, 497, 526, 485, 518, - 449, 507, 545, 475, 515, 546, 0, 0, 0, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 512, 540, 472, 514, 516, 554, 438, 509, - 0, 442, 445, 551, 536, 467, 468, 0, 0, 0, - 0, 0, 0, 0, 489, 498, 523, 483, 0, 0, - 0, 0, 0, 0, 1336, 0, 465, 0, 506, 0, - 0, 0, 446, 443, 0, 0, 0, 0, 487, 0, - 0, 0, 448, 0, 466, 524, 0, 436, 132, 528, - 535, 484, 285, 539, 482, 481, 542, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 532, 462, 471, 117, 469, 209, 187, 248, 505, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 441, 0, 228, 251, 267, 111, 457, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 453, 456, 451, 452, 500, 501, 547, 548, - 549, 525, 447, 0, 454, 455, 0, 530, 537, 538, - 504, 94, 103, 153, 264, 202, 128, 252, 437, 450, - 121, 460, 0, 0, 473, 478, 479, 491, 493, 494, - 495, 496, 503, 510, 511, 513, 519, 520, 521, 522, - 527, 534, 553, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 541, 529, 0, 486, 544, 459, 476, 552, - 477, 480, 517, 444, 499, 180, 474, 0, 463, 439, - 470, 440, 461, 488, 123, 492, 458, 531, 502, 543, - 152, 0, 464, 550, 154, 508, 0, 227, 168, 0, - 0, 0, 490, 533, 497, 526, 485, 518, 449, 507, - 545, 475, 515, 546, 0, 0, 0, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, - 512, 540, 472, 514, 516, 554, 438, 509, 0, 442, - 445, 551, 536, 467, 468, 0, 0, 0, 0, 0, - 0, 0, 489, 498, 523, 483, 0, 0, 0, 0, - 0, 0, 1023, 0, 465, 0, 506, 0, 0, 0, - 446, 443, 0, 0, 0, 0, 487, 0, 0, 0, - 448, 0, 466, 524, 0, 436, 132, 528, 535, 484, - 285, 539, 482, 481, 542, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 532, - 462, 471, 117, 469, 209, 187, 248, 505, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 441, 0, 228, 251, 267, 111, 457, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 453, 456, 451, 452, 500, 501, 547, 548, 549, 525, - 447, 0, 454, 455, 0, 530, 537, 538, 504, 94, - 103, 153, 264, 202, 128, 252, 437, 450, 121, 460, - 0, 0, 473, 478, 479, 491, 493, 494, 495, 496, - 503, 510, 511, 513, 519, 520, 521, 522, 527, 534, - 553, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 541, 529, 0, 486, 544, 459, 476, 552, 477, 480, - 517, 444, 499, 180, 474, 0, 463, 439, 470, 440, - 461, 488, 123, 492, 458, 531, 502, 543, 152, 0, - 464, 550, 154, 508, 0, 227, 168, 0, 0, 0, - 490, 533, 497, 526, 485, 518, 449, 507, 545, 475, - 515, 546, 0, 0, 0, 91, 92, 93, 0, 0, - 0, 0, 0, 0, 0, 0, 113, 0, 512, 540, - 472, 514, 516, 554, 438, 509, 0, 442, 445, 551, - 536, 467, 468, 0, 0, 0, 0, 0, 0, 0, - 489, 498, 523, 483, 0, 0, 0, 0, 0, 0, - 987, 0, 465, 0, 506, 0, 0, 0, 446, 443, - 0, 0, 0, 0, 487, 0, 0, 0, 448, 0, - 466, 524, 0, 436, 132, 528, 535, 484, 285, 539, - 482, 481, 542, 199, 0, 231, 136, 151, 109, 148, - 95, 105, 0, 134, 177, 207, 211, 532, 462, 471, - 117, 469, 209, 187, 248, 505, 189, 208, 155, 237, - 200, 247, 257, 258, 234, 255, 263, 224, 98, 233, - 245, 114, 219, 0, 0, 0, 100, 243, 230, 166, - 145, 146, 99, 0, 205, 122, 130, 119, 179, 240, - 241, 118, 266, 106, 254, 102, 107, 253, 173, 236, - 244, 167, 160, 101, 242, 165, 159, 150, 126, 138, - 197, 157, 198, 139, 170, 169, 171, 0, 441, 0, - 228, 251, 267, 111, 457, 235, 261, 262, 0, 201, - 112, 131, 125, 196, 129, 172, 108, 141, 225, 149, - 156, 204, 265, 186, 210, 115, 250, 226, 453, 456, - 451, 452, 500, 501, 547, 548, 549, 525, 447, 0, - 454, 455, 0, 530, 537, 538, 504, 94, 103, 153, - 264, 202, 128, 252, 437, 450, 121, 460, 0, 0, - 473, 478, 479, 491, 493, 494, 495, 496, 503, 510, - 511, 513, 519, 520, 521, 522, 527, 534, 553, 96, - 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, - 142, 143, 144, 147, 158, 161, 162, 163, 164, 174, - 175, 176, 178, 181, 182, 183, 184, 185, 188, 190, - 191, 192, 193, 194, 195, 203, 206, 212, 213, 214, - 215, 216, 217, 218, 220, 221, 222, 223, 229, 232, - 238, 239, 249, 256, 259, 135, 246, 260, 541, 529, - 0, 486, 544, 459, 476, 552, 477, 480, 517, 444, - 499, 180, 474, 0, 463, 439, 470, 440, 461, 488, - 123, 492, 458, 531, 502, 543, 152, 0, 464, 550, - 154, 508, 0, 227, 168, 0, 0, 0, 490, 533, - 497, 526, 485, 518, 449, 507, 545, 475, 515, 546, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 512, 540, 472, 514, - 516, 554, 438, 509, 0, 442, 445, 551, 536, 467, - 468, 0, 0, 0, 0, 0, 0, 0, 489, 498, - 523, 483, 0, 0, 0, 0, 0, 0, 0, 0, - 465, 0, 506, 0, 0, 0, 446, 443, 0, 0, - 0, 0, 487, 0, 0, 0, 448, 0, 466, 524, - 0, 436, 132, 528, 535, 484, 285, 539, 482, 481, - 542, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 532, 462, 471, 117, 469, - 209, 187, 248, 505, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 441, 0, 228, 251, - 267, 111, 457, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 453, 456, 451, 452, - 500, 501, 547, 548, 549, 525, 447, 0, 454, 455, - 0, 530, 537, 538, 504, 94, 103, 153, 264, 202, - 128, 252, 437, 450, 121, 460, 0, 0, 473, 478, - 479, 491, 493, 494, 495, 496, 503, 510, 511, 513, - 519, 520, 521, 522, 527, 534, 553, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, 541, 529, 0, 486, - 544, 459, 476, 552, 477, 480, 517, 444, 499, 180, - 474, 0, 463, 439, 470, 440, 461, 488, 123, 492, - 458, 531, 502, 543, 152, 0, 464, 550, 154, 508, - 0, 227, 168, 0, 0, 0, 490, 533, 497, 526, - 485, 518, 449, 507, 545, 475, 515, 546, 0, 0, - 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 512, 540, 472, 514, 516, 554, - 438, 509, 0, 442, 445, 551, 536, 467, 468, 0, - 0, 0, 0, 0, 0, 0, 489, 498, 523, 483, - 0, 0, 0, 0, 0, 0, 0, 0, 465, 0, - 506, 0, 0, 0, 446, 443, 0, 0, 0, 0, - 487, 0, 0, 0, 448, 0, 466, 524, 0, 436, - 132, 528, 535, 484, 285, 539, 482, 481, 542, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 532, 462, 471, 117, 469, 209, 187, - 248, 505, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 434, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 441, 0, 228, 251, 267, 111, - 457, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 435, 433, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 453, 456, 451, 452, 500, 501, - 547, 548, 549, 525, 447, 0, 454, 455, 0, 530, - 537, 538, 504, 94, 103, 153, 264, 202, 128, 252, - 437, 450, 121, 460, 0, 0, 473, 478, 479, 491, - 493, 494, 495, 496, 503, 510, 511, 513, 519, 520, - 521, 522, 527, 534, 553, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 541, 529, 0, 486, 544, 459, - 476, 552, 477, 480, 517, 444, 499, 180, 474, 0, - 463, 439, 470, 440, 461, 488, 123, 492, 458, 531, - 502, 543, 152, 0, 464, 550, 154, 508, 0, 227, - 168, 0, 0, 0, 490, 533, 497, 526, 485, 518, - 449, 507, 545, 475, 515, 546, 0, 0, 0, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 512, 540, 472, 514, 516, 554, 438, 509, - 0, 442, 445, 551, 536, 467, 468, 0, 0, 0, - 0, 0, 0, 0, 489, 498, 523, 483, 0, 0, - 0, 0, 0, 0, 0, 0, 465, 0, 506, 0, - 0, 0, 446, 443, 0, 0, 0, 0, 487, 0, - 0, 0, 448, 0, 466, 524, 0, 436, 132, 528, - 535, 484, 285, 539, 482, 481, 542, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 532, 462, 471, 117, 469, 209, 187, 248, 505, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 765, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 434, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 441, 0, 228, 251, 267, 111, 457, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 435, - 433, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 453, 456, 451, 452, 500, 501, 547, 548, - 549, 525, 447, 0, 454, 455, 0, 530, 537, 538, - 504, 94, 103, 153, 264, 202, 128, 252, 437, 450, - 121, 460, 0, 0, 473, 478, 479, 491, 493, 494, - 495, 496, 503, 510, 511, 513, 519, 520, 521, 522, - 527, 534, 553, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 541, 529, 0, 486, 544, 459, 476, 552, - 477, 480, 517, 444, 499, 180, 474, 0, 463, 439, - 470, 440, 461, 488, 123, 492, 458, 531, 502, 543, - 152, 0, 464, 550, 154, 508, 0, 227, 168, 0, - 0, 0, 490, 533, 497, 526, 485, 518, 449, 507, - 545, 475, 515, 546, 0, 0, 0, 91, 92, 93, - 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, - 512, 540, 472, 514, 516, 554, 438, 509, 0, 442, - 445, 551, 536, 467, 468, 0, 0, 0, 0, 0, - 0, 0, 489, 498, 523, 483, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 0, 506, 0, 0, 0, - 446, 443, 0, 0, 0, 0, 487, 0, 0, 0, - 448, 0, 466, 524, 0, 436, 132, 528, 535, 484, - 285, 539, 482, 481, 542, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 532, - 462, 471, 117, 469, 209, 187, 248, 505, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 425, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 434, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 441, 0, 228, 251, 267, 111, 457, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 435, 433, 428, - 427, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 453, 456, 451, 452, 500, 501, 547, 548, 549, 525, - 447, 0, 454, 455, 0, 530, 537, 538, 504, 94, - 103, 153, 264, 202, 128, 252, 437, 450, 121, 460, - 0, 0, 473, 478, 479, 491, 493, 494, 495, 496, - 503, 510, 511, 513, 519, 520, 521, 522, 527, 534, - 553, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 180, 0, 0, 927, 0, 329, 0, 0, 0, 123, - 0, 328, 0, 0, 0, 152, 0, 928, 372, 154, - 0, 0, 227, 168, 0, 0, 0, 0, 0, 363, - 364, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 91, 92, 93, 350, 349, 352, 353, 354, - 355, 0, 0, 113, 351, 356, 357, 358, 0, 0, - 0, 0, 326, 343, 0, 371, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 340, 341, 412, 0, 0, - 0, 386, 0, 342, 0, 0, 335, 336, 338, 337, - 339, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 385, 0, 0, 285, 0, 0, 383, 0, - 199, 0, 231, 136, 151, 109, 148, 95, 105, 0, - 134, 177, 207, 211, 0, 0, 0, 117, 0, 209, - 187, 248, 0, 189, 208, 155, 237, 200, 247, 257, - 258, 234, 255, 263, 224, 98, 233, 245, 114, 219, - 0, 0, 0, 100, 243, 230, 166, 145, 146, 99, - 0, 205, 122, 130, 119, 179, 240, 241, 118, 266, - 106, 254, 102, 107, 253, 173, 236, 244, 167, 160, - 101, 242, 165, 159, 150, 126, 138, 197, 157, 198, - 139, 170, 169, 171, 0, 0, 0, 228, 251, 267, - 111, 0, 235, 261, 262, 0, 201, 112, 131, 125, - 196, 129, 172, 108, 141, 225, 149, 156, 204, 265, - 186, 210, 115, 250, 226, 373, 384, 379, 380, 377, - 378, 376, 375, 374, 387, 365, 366, 367, 368, 370, - 0, 381, 382, 369, 94, 103, 153, 264, 202, 128, - 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, - 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, - 147, 158, 161, 162, 163, 164, 174, 175, 176, 178, - 181, 182, 183, 184, 185, 188, 190, 191, 192, 193, - 194, 195, 203, 206, 212, 213, 214, 215, 216, 217, - 218, 220, 221, 222, 223, 229, 232, 238, 239, 249, - 256, 259, 135, 246, 260, 180, 0, 0, 0, 0, - 329, 0, 0, 0, 123, 0, 328, 0, 0, 0, - 152, 0, 0, 372, 154, 0, 0, 227, 168, 0, - 0, 0, 0, 0, 363, 364, 0, 0, 0, 0, - 0, 0, 1030, 0, 57, 0, 0, 91, 92, 93, - 350, 349, 352, 353, 354, 355, 0, 0, 113, 351, - 356, 357, 358, 1031, 0, 0, 0, 326, 343, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 340, 341, 0, 0, 0, 0, 386, 0, 342, 0, - 0, 335, 336, 338, 337, 339, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 385, 0, 0, - 285, 0, 0, 383, 0, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 0, - 0, 0, 117, 0, 209, 187, 248, 0, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 0, 0, 228, 251, 267, 111, 0, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 373, 384, 379, 380, 377, 378, 376, 375, 374, 387, - 365, 366, 367, 368, 370, 0, 381, 382, 369, 94, - 103, 153, 264, 202, 128, 252, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 180, 0, 0, 0, 0, 329, 0, 0, 0, 123, - 0, 328, 0, 0, 0, 152, 0, 0, 372, 154, - 0, 0, 227, 168, 0, 0, 0, 0, 0, 363, - 364, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 400, 91, 92, 93, 350, 349, 352, 353, 354, - 355, 0, 0, 113, 351, 356, 357, 358, 0, 0, - 0, 0, 326, 343, 0, 371, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 340, 341, 0, 0, 0, - 0, 386, 0, 342, 0, 0, 335, 336, 338, 337, - 339, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 385, 0, 0, 285, 0, 0, 383, 0, - 199, 0, 231, 136, 151, 109, 148, 95, 105, 0, - 134, 177, 207, 211, 0, 0, 0, 117, 0, 209, - 187, 248, 0, 189, 208, 155, 237, 200, 247, 257, - 258, 234, 255, 263, 224, 98, 233, 245, 114, 219, - 0, 0, 0, 100, 243, 230, 166, 145, 146, 99, - 0, 205, 122, 130, 119, 179, 240, 241, 118, 266, - 106, 254, 102, 107, 253, 173, 236, 244, 167, 160, - 101, 242, 165, 159, 150, 126, 138, 197, 157, 198, - 139, 170, 169, 171, 0, 0, 0, 228, 251, 267, - 111, 0, 235, 261, 262, 0, 201, 112, 131, 125, - 196, 129, 172, 108, 141, 225, 149, 156, 204, 265, - 186, 210, 115, 250, 226, 373, 384, 379, 380, 377, - 378, 376, 375, 374, 387, 365, 366, 367, 368, 370, - 0, 381, 382, 369, 94, 103, 153, 264, 202, 128, - 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, - 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, - 147, 158, 161, 162, 163, 164, 174, 175, 176, 178, - 181, 182, 183, 184, 185, 188, 190, 191, 192, 193, - 194, 195, 203, 206, 212, 213, 214, 215, 216, 217, - 218, 220, 221, 222, 223, 229, 232, 238, 239, 249, - 256, 259, 135, 246, 260, 180, 0, 0, 0, 0, - 329, 0, 0, 0, 123, 0, 328, 0, 0, 0, - 152, 0, 0, 372, 154, 0, 0, 227, 168, 0, - 0, 0, 0, 0, 363, 364, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 91, 92, 93, - 350, 349, 352, 353, 354, 355, 0, 0, 113, 351, - 356, 357, 358, 0, 0, 0, 0, 326, 343, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 340, 341, 412, 0, 0, 0, 386, 0, 342, 0, - 0, 335, 336, 338, 337, 339, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 385, 0, 0, - 285, 0, 0, 383, 0, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 0, - 0, 0, 117, 0, 209, 187, 248, 0, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 0, 0, 228, 251, 267, 111, 0, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 373, 384, 379, 380, 377, 378, 376, 375, 374, 387, - 365, 366, 367, 368, 370, 0, 381, 382, 369, 94, - 103, 153, 264, 202, 128, 252, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 180, 0, 0, 0, 0, 329, 0, 0, 0, 123, - 0, 328, 0, 0, 0, 152, 0, 0, 372, 154, - 0, 0, 227, 168, 0, 0, 0, 0, 0, 363, - 364, 0, 0, 0, 0, 0, 0, 0, 0, 57, - 0, 0, 91, 92, 93, 350, 945, 352, 353, 354, - 355, 0, 0, 113, 351, 356, 357, 358, 0, 0, - 0, 0, 326, 343, 0, 371, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 340, 341, 412, 0, 0, - 0, 386, 0, 342, 0, 0, 335, 336, 338, 337, - 339, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 132, 385, 0, 0, 285, 0, 0, 383, 0, - 199, 0, 231, 136, 151, 109, 148, 95, 105, 0, - 134, 177, 207, 211, 0, 0, 0, 117, 0, 209, - 187, 248, 0, 189, 208, 155, 237, 200, 247, 257, - 258, 234, 255, 263, 224, 98, 233, 245, 114, 219, - 0, 0, 0, 100, 243, 230, 166, 145, 146, 99, - 0, 205, 122, 130, 119, 179, 240, 241, 118, 266, - 106, 254, 102, 107, 253, 173, 236, 244, 167, 160, - 101, 242, 165, 159, 150, 126, 138, 197, 157, 198, - 139, 170, 169, 171, 0, 0, 0, 228, 251, 267, - 111, 0, 235, 261, 262, 0, 201, 112, 131, 125, - 196, 129, 172, 108, 141, 225, 149, 156, 204, 265, - 186, 210, 115, 250, 226, 373, 384, 379, 380, 377, - 378, 376, 375, 374, 387, 365, 366, 367, 368, 370, - 0, 381, 382, 369, 94, 103, 153, 264, 202, 128, - 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, - 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, - 147, 158, 161, 162, 163, 164, 174, 175, 176, 178, - 181, 182, 183, 184, 185, 188, 190, 191, 192, 193, - 194, 195, 203, 206, 212, 213, 214, 215, 216, 217, - 218, 220, 221, 222, 223, 229, 232, 238, 239, 249, - 256, 259, 135, 246, 260, 180, 0, 0, 0, 0, - 329, 0, 0, 0, 123, 0, 328, 0, 0, 0, - 152, 0, 0, 372, 154, 0, 0, 227, 168, 0, - 0, 0, 0, 0, 363, 364, 0, 0, 0, 0, - 0, 0, 0, 0, 57, 0, 0, 91, 92, 93, - 350, 942, 352, 353, 354, 355, 0, 0, 113, 351, - 356, 357, 358, 0, 0, 0, 0, 326, 343, 0, - 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 340, 341, 412, 0, 0, 0, 386, 0, 342, 0, - 0, 335, 336, 338, 337, 339, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 132, 385, 0, 0, - 285, 0, 0, 383, 0, 199, 0, 231, 136, 151, - 109, 148, 95, 105, 0, 134, 177, 207, 211, 0, - 0, 0, 117, 0, 209, 187, 248, 0, 189, 208, - 155, 237, 200, 247, 257, 258, 234, 255, 263, 224, - 98, 233, 245, 114, 219, 0, 0, 0, 100, 243, - 230, 166, 145, 146, 99, 0, 205, 122, 130, 119, - 179, 240, 241, 118, 266, 106, 254, 102, 107, 253, - 173, 236, 244, 167, 160, 101, 242, 165, 159, 150, - 126, 138, 197, 157, 198, 139, 170, 169, 171, 0, - 0, 0, 228, 251, 267, 111, 0, 235, 261, 262, - 0, 201, 112, 131, 125, 196, 129, 172, 108, 141, - 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, - 373, 384, 379, 380, 377, 378, 376, 375, 374, 387, - 365, 366, 367, 368, 370, 0, 381, 382, 369, 94, - 103, 153, 264, 202, 128, 252, 0, 0, 121, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, - 137, 140, 142, 143, 144, 147, 158, 161, 162, 163, - 164, 174, 175, 176, 178, 181, 182, 183, 184, 185, - 188, 190, 191, 192, 193, 194, 195, 203, 206, 212, - 213, 214, 215, 216, 217, 218, 220, 221, 222, 223, - 229, 232, 238, 239, 249, 256, 259, 135, 246, 260, - 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 180, 0, 0, 0, 0, 329, 0, 0, - 0, 123, 0, 328, 0, 0, 0, 152, 0, 0, - 372, 154, 0, 0, 227, 168, 0, 0, 0, 0, - 0, 363, 364, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 0, 0, 91, 92, 93, 350, 349, 352, - 353, 354, 355, 0, 0, 113, 351, 356, 357, 358, - 0, 0, 0, 0, 326, 343, 0, 371, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 340, 341, 0, - 0, 0, 0, 386, 0, 342, 0, 0, 335, 336, - 338, 337, 339, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 385, 0, 0, 285, 0, 0, - 383, 0, 199, 0, 231, 136, 151, 109, 148, 95, - 105, 0, 134, 177, 207, 211, 0, 0, 0, 117, - 0, 209, 187, 248, 0, 189, 208, 155, 237, 200, - 247, 257, 258, 234, 255, 263, 224, 98, 233, 245, - 114, 219, 0, 0, 0, 100, 243, 230, 166, 145, - 146, 99, 0, 205, 122, 130, 119, 179, 240, 241, - 118, 266, 106, 254, 102, 107, 253, 173, 236, 244, - 167, 160, 101, 242, 165, 159, 150, 126, 138, 197, - 157, 198, 139, 170, 169, 171, 0, 0, 0, 228, - 251, 267, 111, 0, 235, 261, 262, 0, 201, 112, - 131, 125, 196, 129, 172, 108, 141, 225, 149, 156, - 204, 265, 186, 210, 115, 250, 226, 373, 384, 379, - 380, 377, 378, 376, 375, 374, 387, 365, 366, 367, - 368, 370, 0, 381, 382, 369, 94, 103, 153, 264, - 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, - 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, - 143, 144, 147, 158, 161, 162, 163, 164, 174, 175, - 176, 178, 181, 182, 183, 184, 185, 188, 190, 191, - 192, 193, 194, 195, 203, 206, 212, 213, 214, 215, - 216, 217, 218, 220, 221, 222, 223, 229, 232, 238, - 239, 249, 256, 259, 135, 246, 260, 180, 0, 0, - 0, 0, 329, 0, 0, 0, 123, 0, 328, 0, - 0, 0, 152, 0, 0, 372, 154, 0, 0, 227, - 168, 0, 0, 0, 0, 0, 363, 364, 0, 0, - 0, 0, 0, 0, 0, 0, 57, 0, 0, 91, - 92, 93, 350, 349, 352, 353, 354, 355, 0, 0, - 113, 351, 356, 357, 358, 0, 0, 0, 0, 326, - 343, 0, 371, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 340, 341, 0, 0, 0, 0, 386, 0, - 342, 0, 0, 335, 336, 338, 337, 339, 344, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 385, - 0, 0, 285, 0, 0, 383, 0, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 0, 0, 0, 117, 0, 209, 187, 248, 0, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 0, 0, 228, 251, 267, 111, 0, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 373, 384, 379, 380, 377, 378, 376, 375, - 374, 387, 365, 366, 367, 368, 370, 0, 381, 382, - 369, 94, 103, 153, 264, 202, 128, 252, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, - 372, 154, 0, 0, 227, 168, 0, 0, 0, 0, - 0, 363, 364, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 0, 0, 91, 92, 93, 350, 349, 352, - 353, 354, 355, 0, 0, 113, 351, 356, 357, 358, - 0, 0, 0, 0, 0, 343, 0, 371, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 340, 341, 0, - 0, 0, 0, 386, 0, 342, 0, 0, 335, 336, - 338, 337, 339, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 385, 0, 0, 285, 0, 0, - 383, 0, 199, 0, 231, 136, 151, 109, 148, 95, - 105, 0, 134, 177, 207, 211, 0, 0, 0, 117, - 0, 209, 187, 248, 1598, 189, 208, 155, 237, 200, - 247, 257, 258, 234, 255, 263, 224, 98, 233, 245, - 114, 219, 0, 0, 0, 100, 243, 230, 166, 145, - 146, 99, 0, 205, 122, 130, 119, 179, 240, 241, - 118, 266, 106, 254, 102, 107, 253, 173, 236, 244, - 167, 160, 101, 242, 165, 159, 150, 126, 138, 197, - 157, 198, 139, 170, 169, 171, 0, 0, 0, 228, - 251, 267, 111, 0, 235, 261, 262, 0, 201, 112, - 131, 125, 196, 129, 172, 108, 141, 225, 149, 156, - 204, 265, 186, 210, 115, 250, 226, 373, 384, 379, - 380, 377, 378, 376, 375, 374, 387, 365, 366, 367, - 368, 370, 0, 381, 382, 369, 94, 103, 153, 264, - 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, - 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, - 143, 144, 147, 158, 161, 162, 163, 164, 174, 175, - 176, 178, 181, 182, 183, 184, 185, 188, 190, 191, - 192, 193, 194, 195, 203, 206, 212, 213, 214, 215, - 216, 217, 218, 220, 221, 222, 223, 229, 232, 238, - 239, 249, 256, 259, 135, 246, 260, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 0, 0, 152, 0, 0, 372, 154, 0, 0, 227, - 168, 0, 0, 0, 0, 0, 363, 364, 0, 0, - 0, 0, 0, 0, 0, 0, 57, 0, 400, 91, - 92, 93, 350, 349, 352, 353, 354, 355, 0, 0, - 113, 351, 356, 357, 358, 0, 0, 0, 0, 0, - 343, 0, 371, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 340, 341, 0, 0, 0, 0, 386, 0, - 342, 0, 0, 335, 336, 338, 337, 339, 344, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 385, - 0, 0, 285, 0, 0, 383, 0, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 0, 0, 0, 117, 0, 209, 187, 248, 0, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 0, 0, 228, 251, 267, 111, 0, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 373, 384, 379, 380, 377, 378, 376, 375, - 374, 387, 365, 366, 367, 368, 370, 0, 381, 382, - 369, 94, 103, 153, 264, 202, 128, 252, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 180, 0, 0, 0, 0, 0, 0, 0, - 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, - 372, 154, 0, 0, 227, 168, 0, 0, 0, 0, - 0, 363, 364, 0, 0, 0, 0, 0, 0, 0, - 0, 57, 0, 0, 91, 92, 93, 350, 349, 352, - 353, 354, 355, 0, 0, 113, 351, 356, 357, 358, - 0, 0, 0, 0, 0, 343, 0, 371, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 340, 341, 0, - 0, 0, 0, 386, 0, 342, 0, 0, 335, 336, - 338, 337, 339, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 385, 0, 0, 285, 0, 0, - 383, 0, 199, 0, 231, 136, 151, 109, 148, 95, - 105, 0, 134, 177, 207, 211, 0, 0, 0, 117, - 0, 209, 187, 248, 0, 189, 208, 155, 237, 200, - 247, 257, 258, 234, 255, 263, 224, 98, 233, 245, - 114, 219, 0, 0, 0, 100, 243, 230, 166, 145, - 146, 99, 0, 205, 122, 130, 119, 179, 240, 241, - 118, 266, 106, 254, 102, 107, 253, 173, 236, 244, - 167, 160, 101, 242, 165, 159, 150, 126, 138, 197, - 157, 198, 139, 170, 169, 171, 0, 0, 0, 228, - 251, 267, 111, 0, 235, 261, 262, 0, 201, 112, - 131, 125, 196, 129, 172, 108, 141, 225, 149, 156, - 204, 265, 186, 210, 115, 250, 226, 373, 384, 379, - 380, 377, 378, 376, 375, 374, 387, 365, 366, 367, - 368, 370, 0, 381, 382, 369, 94, 103, 153, 264, - 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, - 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, - 143, 144, 147, 158, 161, 162, 163, 164, 174, 175, - 176, 178, 181, 182, 183, 184, 185, 188, 190, 191, - 192, 193, 194, 195, 203, 206, 212, 213, 214, 215, - 216, 217, 218, 220, 221, 222, 223, 229, 232, 238, - 239, 249, 256, 259, 135, 246, 260, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 0, 0, 152, 0, 0, 0, 154, 0, 0, 227, - 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 645, 644, - 654, 655, 647, 648, 649, 650, 651, 652, 653, 646, - 0, 0, 656, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, - 0, 0, 285, 0, 0, 0, 0, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 0, 0, 0, 117, 0, 209, 187, 248, 0, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 0, 0, 228, 251, 267, 111, 0, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 94, 103, 153, 264, 202, 128, 252, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 180, 0, 0, 0, 740, 0, 0, 0, - 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, - 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 92, 93, 0, 742, 0, - 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, - 0, 634, 635, 633, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 636, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 0, 285, 0, 0, - 0, 0, 199, 0, 231, 136, 151, 109, 148, 95, - 105, 0, 134, 177, 207, 211, 0, 0, 0, 117, - 0, 209, 187, 248, 0, 189, 208, 155, 237, 200, - 247, 257, 258, 234, 255, 263, 224, 98, 233, 245, - 114, 219, 0, 0, 0, 100, 243, 230, 166, 145, - 146, 99, 0, 205, 122, 130, 119, 179, 240, 241, - 118, 266, 106, 254, 102, 107, 253, 173, 236, 244, - 167, 160, 101, 242, 165, 159, 150, 126, 138, 197, - 157, 198, 139, 170, 169, 171, 0, 0, 0, 228, - 251, 267, 111, 0, 235, 261, 262, 0, 201, 112, - 131, 125, 196, 129, 172, 108, 141, 225, 149, 156, - 204, 265, 186, 210, 115, 250, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 94, 103, 153, 264, - 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, - 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, - 143, 144, 147, 158, 161, 162, 163, 164, 174, 175, - 176, 178, 181, 182, 183, 184, 185, 188, 190, 191, - 192, 193, 194, 195, 203, 206, 212, 213, 214, 215, - 216, 217, 218, 220, 221, 222, 223, 229, 232, 238, - 239, 249, 256, 259, 135, 246, 260, 180, 0, 0, - 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, - 0, 0, 152, 0, 0, 0, 154, 0, 0, 227, - 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, - 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 113, 0, 0, 0, 0, 0, 83, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 132, 85, - 86, 0, 82, 0, 0, 0, 87, 199, 0, 231, - 136, 151, 109, 148, 95, 105, 0, 134, 177, 207, - 211, 0, 0, 0, 117, 0, 209, 187, 248, 0, - 189, 208, 155, 237, 200, 247, 257, 258, 234, 255, - 263, 224, 98, 233, 245, 114, 219, 0, 0, 0, - 100, 243, 230, 166, 145, 146, 99, 0, 205, 122, - 130, 119, 179, 240, 241, 118, 266, 106, 254, 102, - 107, 253, 173, 236, 244, 167, 160, 101, 242, 165, - 159, 150, 126, 138, 197, 157, 198, 139, 170, 169, - 171, 0, 0, 0, 228, 251, 267, 111, 0, 235, - 261, 262, 0, 201, 112, 131, 125, 196, 129, 172, - 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, - 250, 226, 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 94, 103, 153, 264, 202, 128, 252, 0, 0, - 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, - 127, 133, 137, 140, 142, 143, 144, 147, 158, 161, - 162, 163, 164, 174, 175, 176, 178, 181, 182, 183, - 184, 185, 188, 190, 191, 192, 193, 194, 195, 203, - 206, 212, 213, 214, 215, 216, 217, 218, 220, 221, - 222, 223, 229, 232, 238, 239, 249, 256, 259, 135, - 246, 260, 180, 0, 0, 0, 1013, 0, 0, 0, - 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, - 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 91, 92, 93, 0, 1015, 0, - 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 132, 0, 0, 0, 285, 0, 0, - 0, 0, 199, 0, 231, 136, 151, 109, 148, 95, - 105, 0, 134, 177, 207, 211, 0, 0, 0, 117, - 0, 209, 187, 248, 0, 189, 208, 155, 237, 200, - 247, 257, 258, 234, 255, 263, 224, 98, 233, 245, - 114, 219, 0, 0, 0, 100, 243, 230, 166, 145, - 146, 99, 0, 205, 122, 130, 119, 179, 240, 241, - 118, 266, 106, 254, 102, 107, 253, 173, 236, 244, - 167, 160, 101, 242, 165, 159, 150, 126, 138, 197, - 157, 198, 139, 170, 169, 171, 0, 0, 0, 228, - 251, 267, 111, 0, 235, 261, 262, 0, 201, 112, - 131, 125, 196, 129, 172, 108, 141, 225, 149, 156, - 204, 265, 186, 210, 115, 250, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 94, 103, 153, 264, - 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, - 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, - 143, 144, 147, 158, 161, 162, 163, 164, 174, 175, - 176, 178, 181, 182, 183, 184, 185, 188, 190, 191, - 192, 193, 194, 195, 203, 206, 212, 213, 214, 215, - 216, 217, 218, 220, 221, 222, 223, 229, 232, 238, - 239, 249, 256, 259, 135, 246, 260, 29, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, - 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, + 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 426, 0, 0, 0, 0, 0, 0, 1589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 285, 0, 0, 0, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 426, 289, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 975, 289, 289, 289, 289, + 289, 0, 0, 0, 0, 0, 0, 0, 1228, 0, + 0, 0, 289, 0, 0, 0, 1034, 0, 0, 0, + 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 1013, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, - 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1396, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1406, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, - 1015, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 285, - 0, 0, 0, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 1011, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, + 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 92, 93, 0, 0, 979, 0, 0, 980, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 285, 0, 0, 0, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 775, 0, 0, 0, 152, - 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, - 774, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 285, - 0, 0, 0, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, + 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, @@ -2349,74 +1353,9 @@ var yyAct = [...]int{ 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 57, 0, 0, 91, 92, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 285, - 0, 0, 0, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 91, 92, 93, 0, 1015, 0, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 285, 0, 0, 0, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, - 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, + 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, 742, 0, 0, 0, 0, 0, 0, 113, 0, 0, @@ -2474,18 +1413,6 @@ var yyAct = [...]int{ 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 103, 153, 264, 202, 128, 252, - 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, - 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, - 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, 623, 0, 0, 0, 0, 0, 0, 113, 0, 0, @@ -2591,76 +1518,1398 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 113, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 280, - 0, 285, 0, 0, 0, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 0, 0, 0, 0, - 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 132, 0, 0, 0, 285, 0, 0, 0, - 0, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 135, 246, 260, + 0, 0, 0, 0, 0, 0, 0, 0, 1034, 0, + 0, 0, 0, 554, 542, 0, 0, 499, 557, 472, + 489, 565, 490, 493, 530, 457, 512, 184, 487, 289, + 476, 452, 483, 453, 474, 501, 126, 505, 471, 544, + 515, 556, 155, 0, 477, 563, 158, 521, 0, 231, + 172, 0, 0, 0, 503, 546, 510, 539, 498, 531, + 462, 520, 558, 488, 528, 559, 0, 0, 0, 94, + 95, 96, 0, 1059, 1060, 0, 0, 0, 0, 0, + 116, 0, 525, 553, 485, 527, 529, 567, 451, 522, + 975, 455, 458, 564, 549, 480, 481, 1252, 0, 0, + 0, 0, 0, 289, 502, 511, 536, 496, 0, 0, + 0, 0, 0, 0, 0, 0, 478, 0, 519, 0, + 0, 0, 459, 456, 0, 0, 0, 0, 500, 0, + 0, 0, 461, 0, 479, 537, 0, 449, 135, 541, + 548, 497, 292, 552, 495, 494, 555, 203, 0, 235, + 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, + 215, 545, 475, 484, 120, 482, 213, 191, 252, 518, + 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, + 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, + 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, + 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, + 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, + 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, + 175, 0, 454, 0, 232, 255, 274, 114, 470, 239, + 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, + 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, + 272, 190, 214, 118, 254, 230, 466, 469, 464, 465, + 513, 514, 560, 561, 562, 538, 460, 0, 467, 468, + 0, 543, 550, 551, 517, 97, 106, 157, 271, 206, + 131, 256, 450, 463, 124, 473, 0, 0, 486, 491, + 492, 504, 506, 507, 508, 509, 516, 523, 524, 526, + 532, 533, 534, 535, 540, 547, 566, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, + 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, + 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, + 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, + 253, 260, 263, 138, 250, 264, 554, 542, 0, 0, + 499, 557, 472, 489, 565, 490, 493, 530, 457, 512, + 184, 487, 0, 476, 452, 483, 453, 474, 501, 126, + 505, 471, 544, 515, 556, 155, 0, 477, 563, 158, + 521, 0, 231, 172, 0, 0, 0, 503, 546, 510, + 539, 498, 531, 462, 520, 558, 488, 528, 559, 0, + 0, 0, 94, 95, 96, 0, 1059, 1060, 0, 0, + 0, 0, 0, 116, 0, 525, 553, 485, 527, 529, + 567, 451, 522, 0, 455, 458, 564, 549, 480, 481, + 0, 0, 0, 0, 0, 0, 0, 502, 511, 536, + 496, 0, 0, 0, 0, 0, 0, 0, 0, 478, + 0, 519, 0, 0, 0, 459, 456, 0, 0, 0, + 0, 500, 0, 0, 0, 461, 0, 479, 537, 0, + 449, 135, 541, 548, 497, 292, 552, 495, 494, 555, + 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, + 137, 181, 211, 215, 545, 475, 484, 120, 482, 213, + 191, 252, 518, 193, 212, 159, 241, 204, 251, 261, + 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, + 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, + 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, + 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, + 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, + 142, 174, 173, 175, 0, 454, 0, 232, 255, 274, + 114, 470, 239, 266, 269, 0, 205, 115, 134, 128, + 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, + 152, 160, 208, 272, 190, 214, 118, 254, 230, 466, + 469, 464, 465, 513, 514, 560, 561, 562, 538, 460, + 0, 467, 468, 0, 543, 550, 551, 517, 97, 106, + 157, 271, 206, 131, 256, 450, 463, 124, 473, 0, + 0, 486, 491, 492, 504, 506, 507, 508, 509, 516, + 523, 524, 526, 532, 533, 534, 535, 540, 547, 566, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, + 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, + 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, + 236, 242, 243, 253, 260, 263, 138, 250, 264, 554, + 542, 0, 0, 499, 557, 472, 489, 565, 490, 493, + 530, 457, 512, 184, 487, 0, 476, 452, 483, 453, + 474, 501, 126, 505, 471, 544, 515, 556, 155, 0, + 477, 563, 158, 521, 0, 231, 172, 0, 0, 0, + 503, 546, 510, 539, 498, 531, 462, 520, 558, 488, + 528, 559, 59, 0, 0, 94, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 116, 0, 525, 553, + 485, 527, 529, 567, 451, 522, 0, 455, 458, 564, + 549, 480, 481, 0, 0, 0, 0, 0, 0, 0, + 502, 511, 536, 496, 0, 0, 0, 0, 0, 0, + 0, 0, 478, 0, 519, 0, 0, 0, 459, 456, + 0, 0, 0, 0, 500, 0, 0, 0, 461, 0, + 479, 537, 0, 449, 135, 541, 548, 497, 292, 552, + 495, 494, 555, 203, 0, 235, 139, 154, 112, 151, + 98, 108, 0, 137, 181, 211, 215, 545, 475, 484, + 120, 482, 213, 191, 252, 518, 193, 212, 159, 241, + 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, + 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, + 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, + 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, + 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, + 201, 161, 202, 142, 174, 173, 175, 0, 454, 0, + 232, 255, 274, 114, 470, 239, 266, 269, 0, 205, + 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, + 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, + 254, 230, 466, 469, 464, 465, 513, 514, 560, 561, + 562, 538, 460, 0, 467, 468, 0, 543, 550, 551, + 517, 97, 106, 157, 271, 206, 131, 256, 450, 463, + 124, 473, 0, 0, 486, 491, 492, 504, 506, 507, + 508, 509, 516, 523, 524, 526, 532, 533, 534, 535, + 540, 547, 566, 99, 100, 107, 113, 119, 123, 127, + 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, + 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, + 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, + 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, + 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, + 250, 264, 554, 542, 0, 0, 499, 557, 472, 489, + 565, 490, 493, 530, 457, 512, 184, 487, 0, 476, + 452, 483, 453, 474, 501, 126, 505, 471, 544, 515, + 556, 155, 0, 477, 563, 158, 521, 0, 231, 172, + 0, 0, 0, 503, 546, 510, 539, 498, 531, 462, + 520, 558, 488, 528, 559, 0, 0, 0, 94, 95, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 525, 553, 485, 527, 529, 567, 451, 522, 0, + 455, 458, 564, 549, 480, 481, 0, 0, 0, 0, + 0, 0, 0, 502, 511, 536, 496, 0, 0, 0, + 0, 0, 0, 1356, 0, 478, 0, 519, 0, 0, + 0, 459, 456, 0, 0, 0, 0, 500, 0, 0, + 0, 461, 0, 479, 537, 0, 449, 135, 541, 548, + 497, 292, 552, 495, 494, 555, 203, 0, 235, 139, + 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, + 545, 475, 484, 120, 482, 213, 191, 252, 518, 193, + 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, + 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, + 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, + 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, + 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, + 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, + 0, 454, 0, 232, 255, 274, 114, 470, 239, 266, + 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, + 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, + 190, 214, 118, 254, 230, 466, 469, 464, 465, 513, + 514, 560, 561, 562, 538, 460, 0, 467, 468, 0, + 543, 550, 551, 517, 97, 106, 157, 271, 206, 131, + 256, 450, 463, 124, 473, 0, 0, 486, 491, 492, + 504, 506, 507, 508, 509, 516, 523, 524, 526, 532, + 533, 534, 535, 540, 547, 566, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, + 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, + 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, + 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, + 260, 263, 138, 250, 264, 554, 542, 0, 0, 499, + 557, 472, 489, 565, 490, 493, 530, 457, 512, 184, + 487, 0, 476, 452, 483, 453, 474, 501, 126, 505, + 471, 544, 515, 556, 155, 0, 477, 563, 158, 521, + 0, 231, 172, 0, 0, 0, 503, 546, 510, 539, + 498, 531, 462, 520, 558, 488, 528, 559, 0, 0, + 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 0, 525, 553, 485, 527, 529, 567, + 451, 522, 0, 455, 458, 564, 549, 480, 481, 0, + 0, 0, 0, 0, 0, 0, 502, 511, 536, 496, + 0, 0, 0, 0, 0, 0, 1043, 0, 478, 0, + 519, 0, 0, 0, 459, 456, 0, 0, 0, 0, + 500, 0, 0, 0, 461, 0, 479, 537, 0, 449, + 135, 541, 548, 497, 292, 552, 495, 494, 555, 203, + 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, + 181, 211, 215, 545, 475, 484, 120, 482, 213, 191, + 252, 518, 193, 212, 159, 241, 204, 251, 261, 262, + 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, + 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, + 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, + 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, + 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, + 174, 173, 175, 0, 454, 0, 232, 255, 274, 114, + 470, 239, 266, 269, 0, 205, 115, 134, 128, 200, + 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, + 160, 208, 272, 190, 214, 118, 254, 230, 466, 469, + 464, 465, 513, 514, 560, 561, 562, 538, 460, 0, + 467, 468, 0, 543, 550, 551, 517, 97, 106, 157, + 271, 206, 131, 256, 450, 463, 124, 473, 0, 0, + 486, 491, 492, 504, 506, 507, 508, 509, 516, 523, + 524, 526, 532, 533, 534, 535, 540, 547, 566, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, + 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, + 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, + 242, 243, 253, 260, 263, 138, 250, 264, 554, 542, + 0, 0, 499, 557, 472, 489, 565, 490, 493, 530, + 457, 512, 184, 487, 0, 476, 452, 483, 453, 474, + 501, 126, 505, 471, 544, 515, 556, 155, 0, 477, + 563, 158, 521, 0, 231, 172, 0, 0, 0, 503, + 546, 510, 539, 498, 531, 462, 520, 558, 488, 528, + 559, 0, 0, 0, 94, 95, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 0, 525, 553, 485, + 527, 529, 567, 451, 522, 0, 455, 458, 564, 549, + 480, 481, 0, 0, 0, 0, 0, 0, 0, 502, + 511, 536, 496, 0, 0, 0, 0, 0, 0, 1006, + 0, 478, 0, 519, 0, 0, 0, 459, 456, 0, + 0, 0, 0, 500, 0, 0, 0, 461, 0, 479, + 537, 0, 449, 135, 541, 548, 497, 292, 552, 495, + 494, 555, 203, 0, 235, 139, 154, 112, 151, 98, + 108, 0, 137, 181, 211, 215, 545, 475, 484, 120, + 482, 213, 191, 252, 518, 193, 212, 159, 241, 204, + 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, + 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, + 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, + 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, + 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, + 161, 202, 142, 174, 173, 175, 0, 454, 0, 232, + 255, 274, 114, 470, 239, 266, 269, 0, 205, 115, + 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, + 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, + 230, 466, 469, 464, 465, 513, 514, 560, 561, 562, + 538, 460, 0, 467, 468, 0, 543, 550, 551, 517, + 97, 106, 157, 271, 206, 131, 256, 450, 463, 124, + 473, 0, 0, 486, 491, 492, 504, 506, 507, 508, + 509, 516, 523, 524, 526, 532, 533, 534, 535, 540, + 547, 566, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, + 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, + 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, + 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, + 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, + 264, 554, 542, 0, 0, 499, 557, 472, 489, 565, + 490, 493, 530, 457, 512, 184, 487, 0, 476, 452, + 483, 453, 474, 501, 126, 505, 471, 544, 515, 556, + 155, 0, 477, 563, 158, 521, 0, 231, 172, 0, + 0, 0, 503, 546, 510, 539, 498, 531, 462, 520, + 558, 488, 528, 559, 0, 0, 0, 94, 95, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, + 525, 553, 485, 527, 529, 567, 451, 522, 0, 455, + 458, 564, 549, 480, 481, 0, 0, 0, 0, 0, + 0, 0, 502, 511, 536, 496, 0, 0, 0, 0, + 0, 0, 0, 0, 478, 0, 519, 0, 0, 0, + 459, 456, 0, 0, 0, 0, 500, 0, 0, 0, + 461, 0, 479, 537, 0, 449, 135, 541, 548, 497, + 292, 552, 495, 494, 555, 203, 0, 235, 139, 154, + 112, 151, 98, 108, 0, 137, 181, 211, 215, 545, + 475, 484, 120, 482, 213, 191, 252, 518, 193, 212, + 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, + 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, + 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, + 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, + 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, + 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, + 454, 0, 232, 255, 274, 114, 470, 239, 266, 269, + 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, + 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, + 214, 118, 254, 230, 466, 469, 464, 465, 513, 514, + 560, 561, 562, 538, 460, 0, 467, 468, 0, 543, + 550, 551, 517, 97, 106, 157, 271, 206, 131, 256, + 450, 463, 124, 473, 0, 0, 486, 491, 492, 504, + 506, 507, 508, 509, 516, 523, 524, 526, 532, 533, + 534, 535, 540, 547, 566, 99, 100, 107, 113, 119, + 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, + 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, + 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, + 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, + 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, + 263, 138, 250, 264, 554, 542, 0, 0, 499, 557, + 472, 489, 565, 490, 493, 530, 457, 512, 184, 487, + 0, 476, 452, 483, 453, 474, 501, 126, 505, 471, + 544, 515, 556, 155, 0, 477, 563, 158, 521, 0, + 231, 172, 0, 0, 0, 503, 546, 510, 539, 498, + 531, 462, 520, 558, 488, 528, 559, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 525, 553, 485, 527, 529, 567, 451, + 522, 0, 455, 458, 564, 549, 480, 481, 0, 0, + 0, 0, 0, 0, 0, 502, 511, 536, 496, 0, + 0, 0, 0, 0, 0, 0, 0, 478, 0, 519, + 0, 0, 0, 459, 456, 0, 0, 0, 0, 500, + 0, 0, 0, 461, 0, 479, 537, 0, 449, 135, + 541, 548, 497, 292, 552, 495, 494, 555, 203, 0, + 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, + 211, 215, 545, 475, 484, 120, 482, 213, 191, 252, + 518, 193, 212, 159, 241, 204, 251, 261, 262, 238, + 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, + 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, + 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, + 105, 447, 257, 177, 240, 248, 171, 164, 104, 246, + 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, + 173, 175, 0, 454, 0, 232, 255, 274, 114, 470, + 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, + 156, 265, 267, 268, 448, 446, 441, 440, 152, 160, + 208, 272, 190, 214, 118, 254, 230, 466, 469, 464, + 465, 513, 514, 560, 561, 562, 538, 460, 0, 467, + 468, 0, 543, 550, 551, 517, 97, 106, 157, 271, + 206, 131, 256, 450, 463, 124, 473, 0, 0, 486, + 491, 492, 504, 506, 507, 508, 509, 516, 523, 524, + 526, 532, 533, 534, 535, 540, 547, 566, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, + 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, + 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, + 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, + 243, 253, 260, 263, 138, 250, 264, 554, 542, 0, + 0, 499, 557, 472, 489, 565, 490, 493, 530, 457, + 512, 184, 487, 0, 476, 452, 483, 453, 474, 501, + 126, 505, 471, 544, 515, 556, 155, 0, 477, 563, + 158, 521, 0, 231, 172, 0, 0, 0, 503, 546, + 510, 539, 498, 531, 462, 520, 558, 488, 528, 559, + 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 525, 553, 485, 527, + 529, 567, 451, 522, 0, 455, 458, 564, 549, 480, + 481, 0, 0, 0, 0, 0, 0, 0, 502, 511, + 536, 496, 0, 0, 0, 0, 0, 0, 0, 0, + 478, 0, 519, 0, 0, 0, 459, 456, 0, 0, + 0, 0, 500, 0, 0, 0, 461, 0, 479, 537, + 0, 449, 135, 541, 548, 497, 292, 552, 495, 494, + 555, 203, 0, 235, 139, 154, 112, 151, 98, 108, + 0, 137, 181, 211, 215, 545, 475, 484, 120, 482, + 213, 191, 252, 518, 193, 212, 159, 241, 204, 251, + 261, 262, 238, 259, 270, 228, 101, 237, 783, 117, + 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, + 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, + 273, 109, 258, 105, 447, 257, 177, 240, 248, 171, + 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, + 202, 142, 174, 173, 175, 0, 454, 0, 232, 255, + 274, 114, 470, 239, 266, 269, 0, 205, 115, 134, + 128, 200, 132, 156, 265, 267, 268, 448, 446, 441, + 440, 152, 160, 208, 272, 190, 214, 118, 254, 230, + 466, 469, 464, 465, 513, 514, 560, 561, 562, 538, + 460, 0, 467, 468, 0, 543, 550, 551, 517, 97, + 106, 157, 271, 206, 131, 256, 450, 463, 124, 473, + 0, 0, 486, 491, 492, 504, 506, 507, 508, 509, + 516, 523, 524, 526, 532, 533, 534, 535, 540, 547, + 566, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, + 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, + 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, + 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, + 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, + 554, 542, 0, 0, 499, 557, 472, 489, 565, 490, + 493, 530, 457, 512, 184, 487, 0, 476, 452, 483, + 453, 474, 501, 126, 505, 471, 544, 515, 556, 155, + 0, 477, 563, 158, 521, 0, 231, 172, 0, 0, + 0, 503, 546, 510, 539, 498, 531, 462, 520, 558, + 488, 528, 559, 0, 0, 0, 94, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 116, 0, 525, + 553, 485, 527, 529, 567, 451, 522, 0, 455, 458, + 564, 549, 480, 481, 0, 0, 0, 0, 0, 0, + 0, 502, 511, 536, 496, 0, 0, 0, 0, 0, + 0, 0, 0, 478, 0, 519, 0, 0, 0, 459, + 456, 0, 0, 0, 0, 500, 0, 0, 0, 461, + 0, 479, 537, 0, 449, 135, 541, 548, 497, 292, + 552, 495, 494, 555, 203, 0, 235, 139, 154, 112, + 151, 98, 108, 0, 137, 181, 211, 215, 545, 475, + 484, 120, 482, 213, 191, 252, 518, 193, 212, 159, + 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, + 237, 438, 117, 223, 0, 0, 0, 103, 247, 234, + 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, + 244, 245, 121, 273, 109, 258, 105, 447, 257, 177, + 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, + 141, 201, 161, 202, 142, 174, 173, 175, 0, 454, + 0, 232, 255, 274, 114, 470, 239, 266, 269, 0, + 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, + 448, 446, 441, 440, 152, 160, 208, 272, 190, 214, + 118, 254, 230, 466, 469, 464, 465, 513, 514, 560, + 561, 562, 538, 460, 0, 467, 468, 0, 543, 550, + 551, 517, 97, 106, 157, 271, 206, 131, 256, 450, + 463, 124, 473, 0, 0, 486, 491, 492, 504, 506, + 507, 508, 509, 516, 523, 524, 526, 532, 533, 534, + 535, 540, 547, 566, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, + 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, + 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, + 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, + 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, + 138, 250, 264, 184, 0, 0, 946, 0, 341, 0, + 0, 0, 126, 0, 340, 0, 0, 0, 155, 0, + 947, 384, 158, 0, 0, 231, 172, 0, 0, 0, + 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 94, 95, 96, 362, 361, + 364, 365, 366, 367, 0, 0, 116, 363, 368, 369, + 370, 0, 0, 0, 0, 338, 355, 0, 383, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 352, 353, + 424, 0, 0, 0, 398, 0, 354, 0, 0, 347, + 348, 350, 349, 351, 356, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 397, 0, 0, 292, 0, + 0, 395, 0, 203, 0, 235, 139, 154, 112, 151, + 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, + 120, 0, 213, 191, 252, 0, 193, 212, 159, 241, + 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, + 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, + 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, + 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, + 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, + 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, + 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, + 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, + 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, + 254, 230, 385, 396, 391, 392, 389, 390, 388, 387, + 386, 399, 377, 378, 379, 380, 382, 0, 393, 394, + 381, 97, 106, 157, 271, 206, 131, 256, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, + 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, + 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, + 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, + 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, + 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, + 250, 264, 184, 0, 0, 0, 0, 341, 0, 0, + 0, 126, 0, 340, 0, 0, 0, 155, 0, 0, + 384, 158, 0, 0, 231, 172, 0, 0, 0, 0, + 0, 375, 376, 0, 0, 0, 0, 0, 0, 1050, + 0, 59, 0, 0, 94, 95, 96, 362, 361, 364, + 365, 366, 367, 0, 0, 116, 363, 368, 369, 370, + 1051, 0, 0, 0, 338, 355, 0, 383, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 352, 353, 0, + 0, 0, 0, 398, 0, 354, 0, 0, 347, 348, + 350, 349, 351, 356, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 397, 0, 0, 292, 0, 0, + 395, 0, 203, 0, 235, 139, 154, 112, 151, 98, + 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, + 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, + 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, + 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, + 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, + 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, + 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, + 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, + 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, + 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, + 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, + 230, 385, 396, 391, 392, 389, 390, 388, 387, 386, + 399, 377, 378, 379, 380, 382, 0, 393, 394, 381, + 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, + 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, + 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, + 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, + 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, + 264, 184, 0, 0, 0, 0, 341, 0, 0, 0, + 126, 0, 340, 0, 0, 0, 155, 0, 0, 384, + 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, + 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, + 59, 0, 412, 94, 95, 96, 362, 361, 364, 365, + 366, 367, 0, 0, 116, 363, 368, 369, 370, 0, + 0, 0, 0, 338, 355, 0, 383, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 352, 353, 0, 0, + 0, 0, 398, 0, 354, 0, 0, 347, 348, 350, + 349, 351, 356, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 397, 0, 0, 292, 0, 0, 395, + 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, + 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, + 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, + 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, + 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, + 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, + 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, + 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, + 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, + 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, + 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, + 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, + 385, 396, 391, 392, 389, 390, 388, 387, 386, 399, + 377, 378, 379, 380, 382, 0, 393, 394, 381, 97, + 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, + 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, + 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, + 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, + 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, + 184, 0, 0, 0, 0, 341, 0, 0, 0, 126, + 0, 340, 0, 0, 0, 155, 0, 0, 384, 158, + 0, 0, 231, 172, 0, 0, 0, 0, 0, 375, + 376, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 94, 95, 96, 362, 361, 364, 365, 366, + 367, 0, 0, 116, 363, 368, 369, 370, 0, 0, + 0, 0, 338, 355, 0, 383, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 353, 424, 0, 0, + 0, 398, 0, 354, 0, 0, 347, 348, 350, 349, + 351, 356, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 397, 0, 0, 292, 0, 0, 395, 0, + 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, + 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, + 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, + 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, + 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, + 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, + 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, + 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, + 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, + 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, + 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, + 152, 160, 208, 272, 190, 214, 118, 254, 230, 385, + 396, 391, 392, 389, 390, 388, 387, 386, 399, 377, + 378, 379, 380, 382, 0, 393, 394, 381, 97, 106, + 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, + 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, + 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, + 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, + 0, 0, 0, 0, 341, 0, 0, 0, 126, 0, + 340, 0, 0, 0, 155, 0, 0, 384, 158, 0, + 0, 231, 172, 0, 0, 0, 0, 0, 375, 376, + 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, + 0, 94, 95, 96, 362, 964, 364, 365, 366, 367, + 0, 0, 116, 363, 368, 369, 370, 0, 0, 0, + 0, 338, 355, 0, 383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 352, 353, 424, 0, 0, 0, + 398, 0, 354, 0, 0, 347, 348, 350, 349, 351, + 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 397, 0, 0, 292, 0, 0, 395, 0, 203, + 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, + 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, + 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, + 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, + 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, + 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, + 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, + 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, + 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, + 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, + 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, + 160, 208, 272, 190, 214, 118, 254, 230, 385, 396, + 391, 392, 389, 390, 388, 387, 386, 399, 377, 378, + 379, 380, 382, 0, 393, 394, 381, 97, 106, 157, + 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, + 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, + 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, + 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, + 0, 0, 0, 341, 0, 0, 0, 126, 0, 340, + 0, 0, 0, 155, 0, 0, 384, 158, 0, 0, + 231, 172, 0, 0, 0, 0, 0, 375, 376, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, + 94, 95, 96, 362, 961, 364, 365, 366, 367, 0, + 0, 116, 363, 368, 369, 370, 0, 0, 0, 0, + 338, 355, 0, 383, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 352, 353, 424, 0, 0, 0, 398, + 0, 354, 0, 0, 347, 348, 350, 349, 351, 356, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 397, 0, 0, 292, 0, 0, 395, 0, 203, 0, + 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, + 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, + 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, + 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, + 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, + 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, + 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, + 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, + 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, + 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, + 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, + 208, 272, 190, 214, 118, 254, 230, 385, 396, 391, + 392, 389, 390, 388, 387, 386, 399, 377, 378, 379, + 380, 382, 0, 393, 394, 381, 97, 106, 157, 271, + 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, + 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, + 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, + 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, + 243, 253, 260, 263, 138, 250, 264, 405, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 184, 0, 0, 0, 0, 341, 0, 0, 0, 126, + 0, 340, 0, 0, 0, 155, 0, 0, 384, 158, + 0, 0, 231, 172, 0, 0, 0, 0, 0, 375, + 376, 0, 0, 0, 0, 0, 0, 0, 0, 59, + 0, 0, 94, 95, 96, 362, 361, 364, 365, 366, + 367, 0, 0, 116, 363, 368, 369, 370, 0, 0, + 0, 0, 338, 355, 0, 383, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 352, 353, 0, 0, 0, + 0, 398, 0, 354, 0, 0, 347, 348, 350, 349, + 351, 356, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 397, 0, 0, 292, 0, 0, 395, 0, + 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, + 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, + 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, + 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, + 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, + 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, + 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, + 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, + 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, + 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, + 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, + 152, 160, 208, 272, 190, 214, 118, 254, 230, 385, + 396, 391, 392, 389, 390, 388, 387, 386, 399, 377, + 378, 379, 380, 382, 0, 393, 394, 381, 97, 106, + 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, + 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, + 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, + 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, + 0, 0, 0, 0, 341, 0, 0, 0, 126, 0, + 340, 0, 0, 0, 155, 0, 0, 384, 158, 0, + 0, 231, 172, 0, 0, 0, 0, 0, 375, 376, + 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, + 0, 94, 95, 96, 362, 361, 364, 365, 366, 367, + 0, 0, 116, 363, 368, 369, 370, 0, 0, 0, + 0, 338, 355, 0, 383, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, + 398, 0, 354, 0, 0, 347, 348, 350, 349, 351, + 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 397, 0, 0, 292, 0, 0, 395, 0, 203, + 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, + 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, + 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, + 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, + 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, + 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, + 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, + 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, + 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, + 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, + 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, + 160, 208, 272, 190, 214, 118, 254, 230, 385, 396, + 391, 392, 389, 390, 388, 387, 386, 399, 377, 378, + 379, 380, 382, 0, 393, 394, 381, 97, 106, 157, + 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, + 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, + 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, + 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 384, 158, 0, 0, + 231, 172, 0, 0, 0, 0, 0, 375, 376, 0, + 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, + 94, 95, 96, 362, 361, 364, 365, 366, 367, 0, + 0, 116, 363, 368, 369, 370, 0, 0, 0, 0, + 0, 355, 0, 383, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 352, 353, 0, 0, 0, 0, 398, + 0, 354, 0, 0, 347, 348, 350, 349, 351, 356, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 397, 0, 0, 292, 0, 0, 395, 0, 203, 0, + 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, + 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, + 1619, 193, 212, 159, 241, 204, 251, 261, 262, 238, + 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, + 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, + 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, + 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, + 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, + 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, + 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, + 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, + 208, 272, 190, 214, 118, 254, 230, 385, 396, 391, + 392, 389, 390, 388, 387, 386, 399, 377, 378, 379, + 380, 382, 0, 393, 394, 381, 97, 106, 157, 271, + 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, + 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, + 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, + 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, + 243, 253, 260, 263, 138, 250, 264, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 155, 0, 0, 384, 158, 0, 0, 231, + 172, 0, 0, 0, 0, 0, 375, 376, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 0, 412, 94, + 95, 96, 362, 361, 364, 365, 366, 367, 0, 0, + 116, 363, 368, 369, 370, 0, 0, 0, 0, 0, + 355, 0, 383, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 352, 353, 0, 0, 0, 0, 398, 0, + 354, 0, 0, 347, 348, 350, 349, 351, 356, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 135, 397, + 0, 0, 292, 0, 0, 395, 0, 203, 0, 235, + 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, + 215, 0, 0, 0, 120, 0, 213, 191, 252, 0, + 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, + 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, + 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, + 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, + 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, + 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, + 175, 0, 0, 0, 232, 255, 274, 114, 0, 239, + 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, + 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, + 272, 190, 214, 118, 254, 230, 385, 396, 391, 392, + 389, 390, 388, 387, 386, 399, 377, 378, 379, 380, + 382, 0, 393, 394, 381, 97, 106, 157, 271, 206, + 131, 256, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, + 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, + 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, + 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, + 253, 260, 263, 138, 250, 264, 184, 0, 0, 0, + 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 384, 158, 0, 0, 231, 172, + 0, 0, 0, 0, 0, 375, 376, 0, 0, 0, + 0, 0, 0, 0, 0, 59, 0, 0, 94, 95, + 96, 362, 361, 364, 365, 366, 367, 0, 0, 116, + 363, 368, 369, 370, 0, 0, 0, 0, 0, 355, + 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 352, 353, 0, 0, 0, 0, 398, 0, 354, + 0, 0, 347, 348, 350, 349, 351, 356, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 397, 0, + 0, 292, 0, 0, 395, 0, 203, 0, 235, 139, + 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, + 0, 0, 0, 120, 0, 213, 191, 252, 0, 193, + 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, + 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, + 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, + 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, + 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, + 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, + 0, 0, 0, 232, 255, 274, 114, 0, 239, 266, + 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, + 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, + 190, 214, 118, 254, 230, 385, 396, 391, 392, 389, + 390, 388, 387, 386, 399, 377, 378, 379, 380, 382, + 0, 393, 394, 381, 97, 106, 157, 271, 206, 131, + 256, 0, 0, 124, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, + 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, + 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, + 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, + 260, 263, 138, 250, 264, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 155, 0, 0, 0, 158, 0, 0, 231, 172, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 95, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 662, 661, 671, 672, + 664, 665, 666, 667, 668, 669, 670, 663, 0, 0, + 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, + 292, 0, 0, 0, 0, 203, 0, 235, 139, 154, + 112, 151, 98, 108, 0, 137, 181, 211, 215, 0, + 0, 0, 120, 0, 213, 191, 252, 0, 193, 212, + 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, + 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, + 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, + 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, + 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, + 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, + 0, 0, 232, 255, 274, 114, 0, 239, 266, 269, + 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, + 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, + 214, 118, 254, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 106, 157, 271, 206, 131, 256, + 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 100, 107, 113, 119, + 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, + 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, + 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, + 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, + 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, + 263, 138, 250, 264, 184, 0, 0, 0, 757, 0, + 0, 0, 0, 126, 0, 0, 0, 0, 0, 155, + 0, 0, 0, 158, 0, 0, 231, 172, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 94, 95, 96, 0, + 759, 0, 0, 0, 0, 0, 0, 116, 0, 0, + 0, 0, 0, 651, 652, 650, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 0, 0, 292, + 0, 0, 0, 0, 203, 0, 235, 139, 154, 112, + 151, 98, 108, 0, 137, 181, 211, 215, 0, 0, + 0, 120, 0, 213, 191, 252, 0, 193, 212, 159, + 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, + 237, 249, 117, 223, 0, 0, 0, 103, 247, 234, + 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, + 244, 245, 121, 273, 109, 258, 105, 110, 257, 177, + 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, + 141, 201, 161, 202, 142, 174, 173, 175, 0, 0, + 0, 232, 255, 274, 114, 0, 239, 266, 269, 0, + 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, + 176, 111, 144, 229, 152, 160, 208, 272, 190, 214, + 118, 254, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 157, 271, 206, 131, 256, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, + 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, + 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, + 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, + 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, + 138, 250, 264, 184, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 158, 0, 0, 231, 172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 0, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 88, 89, 0, 85, 0, + 0, 0, 90, 203, 0, 235, 139, 154, 112, 151, + 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, + 120, 0, 213, 191, 252, 0, 193, 212, 159, 241, + 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, + 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, + 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, + 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, + 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, + 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, + 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, + 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, + 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, + 254, 230, 0, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 106, 157, 271, 206, 131, 256, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, + 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, + 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, + 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, + 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, + 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, + 250, 264, 184, 0, 0, 0, 1033, 0, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 155, 0, 0, + 0, 158, 0, 0, 231, 172, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 95, 96, 0, 1035, 0, + 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 0, 0, 0, 292, 0, 0, + 0, 0, 203, 0, 235, 139, 154, 112, 151, 98, + 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, + 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, + 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, + 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, + 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, + 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, + 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, + 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, + 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, + 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, + 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, + 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, + 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, + 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, + 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, + 264, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 126, 0, 0, 0, 0, 0, 155, + 0, 0, 0, 158, 0, 0, 231, 172, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59, 0, 0, 94, 95, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 0, 0, 0, 292, + 0, 0, 0, 0, 203, 0, 235, 139, 154, 112, + 151, 98, 108, 0, 137, 181, 211, 215, 0, 0, + 0, 120, 0, 213, 191, 252, 0, 193, 212, 159, + 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, + 237, 249, 117, 223, 0, 0, 0, 103, 247, 234, + 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, + 244, 245, 121, 273, 109, 258, 105, 110, 257, 177, + 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, + 141, 201, 161, 202, 142, 174, 173, 175, 0, 0, + 0, 232, 255, 274, 114, 0, 239, 266, 269, 0, + 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, + 176, 111, 144, 229, 152, 160, 208, 272, 190, 214, + 118, 254, 230, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 106, 157, 271, 206, 131, 256, 0, + 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, + 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, + 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, + 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, + 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, + 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, + 138, 250, 264, 184, 0, 0, 0, 1033, 0, 0, + 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, + 0, 0, 158, 0, 0, 231, 172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 95, 96, 0, 1035, + 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 135, 0, 0, 0, 292, 0, + 0, 0, 0, 203, 0, 235, 139, 154, 112, 151, + 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, + 120, 0, 213, 191, 252, 0, 1031, 212, 159, 241, + 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, + 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, + 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, + 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, + 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, + 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, + 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, + 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, + 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, + 254, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 106, 157, 271, 206, 131, 256, 0, 0, + 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, + 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, + 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, + 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, + 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, + 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, + 250, 264, 184, 0, 0, 0, 0, 0, 0, 0, + 0, 126, 0, 0, 0, 0, 0, 155, 0, 0, + 0, 158, 0, 0, 231, 172, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 95, 96, 0, 0, 998, + 0, 0, 999, 0, 0, 116, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 135, 0, 0, 0, 292, 0, 0, + 0, 0, 203, 0, 235, 139, 154, 112, 151, 98, + 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, + 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, + 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, + 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, + 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, + 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, + 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, + 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, + 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, + 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, + 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, + 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, + 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, + 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, + 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, + 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, + 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, + 264, 184, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 794, 0, 0, 0, 155, 0, 0, 0, + 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 95, 96, 0, 793, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 292, 0, 0, 0, + 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, + 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, + 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, + 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, + 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, + 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, + 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, + 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, + 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, + 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, + 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, + 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, + 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, + 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, + 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, + 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 0, 0, 0, 0, 0, 155, 0, 0, 0, 158, + 0, 0, 231, 172, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 412, 94, 95, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 135, 0, 0, 0, 292, 0, 0, 0, 0, + 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, + 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, + 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, + 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, + 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, + 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, + 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, + 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, + 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, + 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, + 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, + 152, 160, 208, 272, 190, 214, 118, 254, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 106, + 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, + 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, + 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, + 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, + 0, 0, 0, 0, 155, 0, 0, 0, 158, 0, + 0, 231, 172, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, + 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 0, 0, 292, 0, 0, 0, 0, 203, + 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, + 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, + 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, + 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, + 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, + 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, + 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, + 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, + 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, + 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, + 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, + 160, 208, 272, 190, 214, 118, 254, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 157, + 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, + 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, + 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, + 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 158, 0, 0, + 231, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 1035, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 292, 0, 0, 0, 0, 203, 0, + 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, + 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, + 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, + 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, + 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, + 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, + 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, + 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, + 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, + 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, + 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, + 208, 272, 190, 214, 118, 254, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 106, 157, 271, + 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, + 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, + 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, + 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, + 243, 253, 260, 263, 138, 250, 264, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, + 0, 0, 155, 0, 0, 0, 158, 0, 0, 231, + 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 95, 96, 0, 759, 0, 0, 0, 0, 0, 0, + 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, + 0, 0, 292, 0, 0, 0, 0, 203, 0, 235, + 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, + 215, 0, 0, 0, 120, 0, 213, 191, 252, 0, + 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, + 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, + 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, + 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, + 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, + 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, + 175, 0, 0, 0, 232, 255, 274, 114, 0, 239, + 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, + 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, + 272, 190, 214, 118, 254, 230, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 106, 157, 271, 206, + 131, 256, 0, 0, 124, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, + 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, + 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, + 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, + 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, + 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, + 253, 260, 263, 138, 250, 264, 184, 0, 0, 0, + 0, 0, 0, 0, 763, 126, 0, 0, 0, 0, + 0, 155, 0, 0, 0, 158, 0, 0, 231, 172, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 292, 0, 0, 0, 0, 203, 0, 235, 139, + 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, + 0, 0, 0, 120, 0, 213, 191, 252, 0, 193, + 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, + 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, + 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, + 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, + 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, + 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, + 0, 0, 0, 232, 255, 274, 114, 0, 239, 266, + 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, + 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, + 190, 214, 118, 254, 230, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 106, 157, 271, 206, 131, + 256, 0, 0, 124, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, + 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, + 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, + 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, + 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, + 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, + 260, 263, 138, 250, 264, 184, 0, 0, 0, 0, + 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, + 155, 0, 0, 0, 158, 0, 0, 231, 172, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 95, 96, + 0, 640, 0, 0, 0, 0, 0, 0, 116, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, + 292, 0, 0, 0, 0, 203, 0, 235, 139, 154, + 112, 151, 98, 108, 0, 137, 181, 211, 215, 0, + 0, 0, 120, 0, 213, 191, 252, 0, 193, 212, + 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, + 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, + 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, + 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, + 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, + 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, + 0, 0, 232, 255, 274, 114, 0, 239, 266, 269, + 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, + 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, + 214, 118, 254, 230, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 97, 106, 157, 271, 206, 131, 256, + 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 100, 107, 113, 119, + 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, + 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, + 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, + 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, + 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, + 263, 138, 250, 264, 430, 0, 0, 0, 0, 0, + 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, + 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, + 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 0, 0, 0, 292, 0, 0, 0, + 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, + 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, + 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, + 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, + 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, + 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, + 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, + 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, + 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, + 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, + 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, + 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, + 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, + 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, + 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, + 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, + 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, + 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, + 184, 0, 0, 0, 0, 0, 0, 0, 0, 126, + 0, 0, 0, 0, 0, 155, 0, 0, 0, 158, + 0, 0, 231, 172, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, + 0, 135, 0, 0, 0, 292, 0, 0, 0, 0, + 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, + 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, + 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, + 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, + 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, + 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, + 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, + 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, + 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, + 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, + 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, + 152, 160, 208, 272, 190, 214, 118, 254, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 106, + 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, + 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, + 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, + 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, + 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, + 236, 242, 243, 253, 260, 263, 328, 250, 264, 184, + 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, + 0, 0, 0, 0, 155, 0, 0, 0, 158, 0, + 0, 231, 172, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 287, 0, 292, 0, 0, 0, 0, 203, + 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, + 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, + 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, + 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, + 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, + 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, + 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, + 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, + 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, + 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, + 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, + 160, 208, 272, 190, 214, 118, 254, 230, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 106, 157, + 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, + 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, + 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, + 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, + 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, + 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, + 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, + 0, 0, 0, 155, 0, 0, 0, 158, 0, 0, + 231, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 0, 0, 0, 292, 0, 0, 0, 0, 203, 0, + 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, + 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, + 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, + 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, + 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, + 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, + 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, + 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, + 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, + 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, + 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, + 208, 272, 190, 214, 118, 254, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 106, 157, 271, + 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, + 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, + 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, + 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, + 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, + 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, + 243, 253, 260, 263, 138, 250, 264, } var yyPact = [...]int{ - 2129, -1000, -270, 999, -1000, -1000, -1000, -1000, -1000, -1000, + 1722, -1000, -274, 1041, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 989, 811, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 302, 12334, 30, + 148, 17, 17240, 139, 230, 17589, -1000, 27, -1000, 19, + 17589, 23, 16891, -1000, -1000, -72, -87, -1000, 10240, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 807, 974, 975, + 987, 660, 954, -1000, 8831, 8831, 108, 108, 16542, 7435, + -1000, -1000, 550, 17589, 135, 17589, -155, 102, 102, 102, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 935, 770, -1000, -1000, -1000, -1000, -1000, -1000, 358, 12119, 14, 109, 28, @@ -2686,24 +2935,24 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 106, 17313, - 498, 498, 184, -1000, 17313, 77, 498, 77, 77, 77, - 17313, -1000, 180, -1000, -1000, -1000, 17313, 498, 840, 390, - 70, 4771, -1000, 181, -1000, 4771, 22, 4771, -59, 959, - 23, -14, -1000, 4771, -1000, -1000, -1000, -1000, -1000, -1000, - 87, -1000, -1000, 17313, 15926, 147, 300, -1000, -1000, -1000, - -1000, -1000, -1000, 564, 329, -1000, 10049, 1734, 679, 679, - -1000, -1000, 144, -1000, -1000, 11084, 11084, 11084, 11084, 11084, - 11084, 11084, 11084, 11084, 11084, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 679, - 170, -1000, 9704, 679, 679, 679, 679, 679, 679, 679, - 679, 10049, 679, 679, 679, 679, 679, 679, 679, 679, - 679, 679, 679, 679, 679, 679, 679, 679, -1000, -1000, - 935, -1000, 770, -1000, -1000, -1000, 848, 10049, 10049, 935, - -1000, 816, 8657, -1000, -1000, 1035, -1000, -1000, -1000, -1000, - 353, 977, -1000, 11774, 165, 15581, 14546, 17313, 728, 689, - -1000, -1000, 164, 714, 6919, -96, -1000, -1000, -1000, 281, - 13856, -1000, -1000, -1000, 839, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 138, 17589, 577, 577, 240, + -1000, 17589, 98, 577, 98, 98, 98, 17589, -1000, 192, + -1000, -1000, -1000, 17589, 577, 921, 358, 59, 268, 268, + 268, -1000, 197, -1000, 4894, 36, 4894, -39, 997, 37, + -26, -1000, 358, 4894, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 119, -1000, -1000, 17589, 16186, 136, 306, -1000, + -1000, -1000, -1000, -1000, -1000, 701, 536, -1000, 10240, 1980, + 734, 734, -1000, -1000, 177, -1000, -1000, 11287, 11287, 11287, + 11287, 11287, 11287, 11287, 11287, 11287, 11287, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 734, 189, -1000, 9891, 734, 734, 734, 734, 734, + 734, 734, 734, 10240, 734, 734, 734, 734, 734, 734, + 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, + -1000, -1000, 989, -1000, 811, -1000, -1000, -1000, 957, 10240, + 10240, 989, -1000, 900, 8831, -1000, -1000, 902, -1000, -1000, + -1000, -1000, 386, 1024, -1000, 11985, 188, 1023, 15837, 14790, + 17589, 692, 639, -1000, -1000, 187, 750, 7072, -96, -1000, + -1000, -1000, 300, 14092, -1000, -1000, -1000, 919, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2715,240 +2964,244 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 640, 17313, -1000, 166, -1000, - 498, 4771, 89, 498, 315, 498, 17313, 17313, 4771, 4771, - 4771, 30, 64, 58, 17313, 713, 86, 17313, 890, 759, - 17313, 498, 498, -1000, 6203, -1000, 4771, 390, -1000, 458, - 10049, 4771, 4771, 4771, 17313, 4771, 4771, -1000, -1000, -1000, - 299, -1000, -1000, -1000, -1000, 4771, 4771, -1000, 976, 291, - -1000, -1000, -1000, -1000, 10049, 210, -1000, 758, -1000, 9, - -1000, -1000, -1000, -1000, -1000, 999, -1000, -1000, -1000, -119, - -1000, -1000, 10049, 10049, 10049, 10049, 452, 221, 11084, 467, - 347, 11084, 11084, 11084, 11084, 11084, 11084, 11084, 11084, 11084, - 11084, 11084, 11084, 11084, 11084, 11084, 577, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 498, -1000, 996, 644, 644, - 156, 156, 156, 156, 156, 156, 156, 156, 156, 11429, - 7622, 6203, 532, 635, 935, 8657, 8657, 10049, 10049, 9347, - 9002, 8657, 842, 307, 329, 17313, -1000, -1000, 10739, -1000, - -1000, -1000, -1000, -1000, 432, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 17313, 17313, 8657, 8657, 8657, 8657, 8657, 900, - 532, 1035, -1000, 984, 175, 606, 703, -1000, 424, 900, - 13511, 733, -1000, 1035, -1000, -1000, -1000, 17313, -1000, -1000, - 15236, -1000, -1000, 5845, 44, 17313, -1000, 685, 934, -1000, - -1000, -1000, 892, 12821, 13166, 44, 663, 14546, 17313, -1000, - -1000, 14546, 17313, 5487, 6561, -96, -1000, 607, -1000, -100, - -81, 7967, 128, -1000, -1000, -1000, -1000, 4413, 391, 504, - 435, -53, -1000, -1000, -1000, 718, -1000, 718, 718, 718, - 718, -21, -21, -21, -21, -1000, -1000, -1000, -1000, -1000, - 740, 739, -1000, 718, 718, 718, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 687, 17589, + -1000, 341, -1000, 577, 4894, 122, 577, 326, 577, 17589, + 17589, 4894, 4894, 4894, 43, 78, 72, 17589, 747, 116, + 17589, 962, 838, 17589, 577, 577, -1000, 6346, -1000, 4894, + 358, -1000, 537, 10240, 4894, 4894, 4894, 17589, 4894, 4894, + -1000, 534, -1000, -1000, 340, -1000, -1000, -1000, -1000, -1000, + -1000, 4894, 4894, -1000, 1021, 334, -1000, -1000, -1000, -1000, + 10240, 268, -1000, 836, -1000, -1000, 22, -1000, -1000, -1000, + -1000, -1000, 1041, -1000, -1000, -1000, -119, -1000, -1000, 10240, + 10240, 10240, 10240, 497, 274, 11287, 437, 307, 11287, 11287, + 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, + 11287, 11287, 11287, 640, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 577, -1000, 1037, 626, 626, 203, 203, 203, + 203, 203, 203, 203, 203, 203, 11636, 7784, 6346, 660, + 682, 989, 8831, 8831, 10240, 10240, 9529, 9180, 8831, 938, + 316, 536, 17589, -1000, -1000, 10938, -1000, -1000, -1000, -1000, + -1000, 541, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17589, + 17589, 8831, 8831, 8831, 8831, 8831, 975, 660, 902, -1000, + 1032, 256, 574, 746, -1000, 564, 975, 13743, 740, -1000, + 902, -1000, -1000, -1000, 17589, -1000, -1000, 15488, -1000, -1000, + 5983, 17589, 54, 17589, -1000, 735, 883, -1000, -1000, -1000, + 968, 13045, 13394, 54, 669, 14790, 17589, -1000, -1000, 14790, + 17589, 5620, 6709, -96, -1000, 6709, 725, -1000, -127, -115, + 8133, 202, -1000, -1000, -1000, -1000, 4531, 596, 661, 380, + -64, -1000, -1000, -1000, 756, -1000, 756, 756, 756, 756, + -20, -20, -20, -20, -1000, -1000, -1000, -1000, -1000, 791, + 783, -1000, 756, 756, 756, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 738, 738, 738, 723, 723, 742, - -1000, 17313, 4771, 888, 4771, -1000, 427, -1000, -1000, -1000, - 17313, 17313, 17313, 17313, 17313, 136, 17313, 17313, 695, -1000, - 17313, 4771, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 329, -1000, -1000, -1000, -1000, -1000, -1000, 17313, -1000, -1000, - -1000, -1000, 17313, 390, 17313, 17313, 329, -1000, 453, 17313, - 17313, -1000, -1000, -1000, -1000, -1000, 329, 221, 342, 232, - -1000, -1000, 420, -1000, -1000, 921, -1000, -1000, -1000, -1000, - 467, 11084, 11084, 11084, 149, 921, 2098, 1479, 1201, 156, - 352, 352, 231, 231, 231, 231, 231, 437, 437, -1000, - -1000, -1000, 432, -1000, -1000, -1000, 432, 8657, 8657, 682, - 679, 163, -1000, 744, -1000, -1000, 900, 630, 630, 584, - 576, 283, 967, 630, 278, 965, 630, 630, 8657, -1000, - -1000, 406, -1000, 10049, 432, -1000, 159, -1000, 799, 664, - 637, 630, 432, 432, 630, 630, 848, -1000, -1000, 800, - 10049, 10049, 10049, -1000, -1000, -1000, 848, 953, -1000, 823, - 820, 958, 8657, 14546, 1035, -1000, -1000, -1000, 154, 712, - 679, -1000, 17313, 14546, 14546, 14546, 14546, 14546, -1000, 784, - 778, -1000, 772, 771, 783, 17313, -1000, 633, 532, 12821, - 158, 679, -1000, 14891, -1000, -1000, 958, 14546, 553, -1000, - 553, -1000, 143, -1000, -1000, 607, -96, -84, -1000, -1000, - -1000, -1000, 329, -1000, 587, 598, 4055, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 732, 498, -1000, 860, 197, 258, - 498, 859, -1000, -1000, -1000, 849, -1000, 325, -55, -1000, - -1000, 385, -21, -21, -1000, -1000, 128, 832, 128, 128, - 128, 443, 443, -1000, -1000, -1000, -1000, 381, -1000, -1000, - -1000, 376, -1000, 757, 17313, 4771, -1000, -1000, -1000, -1000, - 373, 373, 204, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 41, 578, -1000, -1000, -1000, -1000, - 11, 27, 84, -1000, 4771, -1000, 291, 291, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 149, 921, - 2066, -1000, 11084, 11084, -1000, -1000, 630, 630, 8657, 6203, - 935, 848, -1000, -1000, 105, 577, 105, 11084, 11084, -1000, - 11084, 11084, -1000, -145, 569, 259, -1000, 10049, 495, -1000, - 6203, -1000, 11084, 11084, -1000, -1000, -1000, -1000, -1000, -1000, - 812, 329, 329, -1000, -1000, 17313, -1000, -1000, -1000, -1000, - 956, 10049, -1000, 594, -1000, 5129, 752, 17313, 679, 999, - 12821, 17313, 691, -1000, 266, 934, 737, 751, 678, -1000, - -1000, -1000, -1000, 773, -1000, 754, -1000, -1000, -1000, -1000, - -1000, 532, -1000, 97, 96, 95, 17313, -1000, 935, 553, - -1000, -1000, 162, -1000, -1000, -110, -87, -1000, -1000, -1000, - 4413, -1000, 4413, 17313, 60, -1000, 498, 498, -1000, -1000, - -1000, 724, 750, 11084, -1000, -1000, -1000, 497, 128, 128, - -1000, 366, -1000, -1000, -1000, 628, -1000, 623, 571, 619, - 17313, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 781, 781, 781, 758, 758, 816, -1000, + 17589, 4894, 959, 4894, -1000, 95, -1000, -1000, -1000, 17589, + 17589, 17589, 17589, 17589, 157, 17589, 17589, 745, -1000, 17589, + 4894, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 536, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17589, -1000, -1000, + -1000, -1000, 17589, 358, 17589, 17589, 536, -1000, 17589, 17589, + -1000, -1000, -1000, -1000, -1000, 536, 274, 362, 313, -1000, + -1000, 555, -1000, -1000, 1760, -1000, -1000, -1000, -1000, 437, + 11287, 11287, 11287, 1555, 1760, 1659, 309, 1680, 203, 214, + 214, 220, 220, 220, 220, 220, 394, 394, -1000, -1000, + -1000, 541, -1000, -1000, -1000, 541, 8831, 8831, 744, 734, + 185, -1000, 807, -1000, -1000, 975, 664, 664, 507, 371, + 275, 1019, 664, 269, 1017, 664, 664, 8831, -1000, -1000, + 360, -1000, 10240, 541, -1000, 182, -1000, 861, 736, 726, + 664, 541, 541, 664, 664, 957, -1000, -1000, 884, 10240, + 10240, 10240, -1000, -1000, -1000, 957, 988, -1000, 907, 906, + 996, 8831, 14790, 902, -1000, -1000, -1000, 181, 996, 732, + 734, -1000, 17589, 14790, 14790, 14790, 14790, 14790, -1000, 870, + 869, -1000, 863, 851, 862, 17589, -1000, 673, 660, 13045, + 175, 734, -1000, 15139, -1000, -1000, 996, 14790, 700, -1000, + 700, -1000, 180, -1000, -1000, 725, -96, -70, -1000, -1000, + -1000, -1000, 536, -1000, 649, 719, 4168, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 779, 577, -1000, 950, 226, 211, + 577, 949, -1000, -1000, -1000, 923, -1000, 347, -68, -1000, + -1000, 454, -20, -20, -1000, -1000, 202, 917, 202, 202, + 202, 532, 532, -1000, -1000, -1000, -1000, 443, -1000, -1000, + -1000, 440, -1000, 835, 17589, 4894, -1000, -1000, -1000, -1000, + 199, 199, 246, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 53, 793, -1000, -1000, -1000, -1000, + 18, 41, 115, -1000, 4894, -1000, 334, 334, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1555, 1760, 1047, + -1000, 11287, 11287, -1000, -1000, 664, 664, 8831, 6346, 989, + 957, -1000, -1000, 39, 640, 39, 11287, 11287, -1000, 11287, + 11287, -1000, -168, 720, 312, -1000, 10240, 357, -1000, 6346, + -1000, 11287, 11287, -1000, -1000, -1000, -1000, -1000, -1000, 892, + 536, 536, -1000, -1000, 17589, -1000, -1000, -1000, -1000, 993, + 10240, -1000, 716, -1000, 5257, 975, 831, 17589, 734, 1041, + 13045, 17589, 702, -1000, 293, 883, 790, 821, 833, -1000, + -1000, -1000, -1000, 855, -1000, 852, -1000, -1000, -1000, -1000, + -1000, 660, -1000, 134, 131, 126, 17589, -1000, 989, 700, + -1000, -1000, 229, -1000, -1000, -138, -122, -1000, -1000, -1000, + 4531, -1000, 4531, 17589, 74, -1000, 577, 577, -1000, -1000, + -1000, 762, 820, 11287, -1000, -1000, -1000, 609, 202, 202, + -1000, 325, -1000, -1000, -1000, 659, -1000, 647, 715, 627, + 17589, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 17313, -1000, -1000, -1000, -1000, -1000, 17313, -155, 498, 17313, - 17313, 17313, 17313, -1000, 390, 390, -1000, 11084, 921, 921, - -1000, -1000, 432, -1000, 900, -1000, 432, 718, 718, -1000, - 718, 723, -1000, 718, -1, 718, -2, 432, 432, 1906, - 1878, 1836, 1659, 679, -140, -1000, 329, 10049, -1000, 852, - 836, -1000, -1000, 954, 918, 329, -1000, -1000, 863, 521, - 528, -1000, -1000, 8312, 617, 127, 615, -1000, 935, 17313, - 10049, -1000, -1000, 10049, 720, -1000, 10049, -1000, -1000, -1000, - 935, 679, 679, 679, 615, 900, -1000, -1000, -1000, -1000, - 4055, -1000, 611, -1000, 718, -1000, -1000, -1000, 17313, -44, - 983, 921, -1000, -1000, -1000, -1000, -1000, -21, 440, -21, - 375, -1000, 371, 4771, -1000, -1000, -1000, -1000, 869, -1000, - 6203, -1000, -1000, 717, 729, -1000, -1000, -1000, -1000, 921, - -1000, 848, -1000, -1000, 121, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 11084, 11084, 11084, 11084, 11084, 900, 413, - 329, 11084, 11084, -1000, 10049, 10049, 858, -1000, 679, -1000, - 731, 17313, 17313, -1000, 17313, 900, -1000, 329, 329, 17313, - 329, 14201, 17313, 17313, 12464, -1000, 153, 17313, -1000, 609, - -1000, 195, -1000, -118, 128, -1000, 128, 476, 474, -1000, - 679, 567, -1000, 254, 17313, 17313, -1000, -1000, -1000, 799, - 799, 799, 799, 3, 432, -1000, 799, 799, 329, 564, - 982, -1000, 679, 999, 125, -1000, -1000, -1000, 600, 585, - -1000, 585, 585, 158, 153, -1000, 498, 246, 400, -1000, - 56, 17313, 332, 857, -1000, 843, -1000, -1000, -1000, -1000, - -1000, 39, 6203, 4413, 544, -1000, -1000, -1000, -1000, -1000, - 432, 94, -158, -1000, -1000, -1000, 17313, 528, 17313, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 367, -1000, -1000, 17313, - -1000, -1000, 399, -1000, -1000, 541, -1000, 17313, -1000, -1000, - 578, -1000, 798, -153, -162, 496, -1000, -1000, 716, -1000, - -1000, 39, 819, -155, -1000, 793, -1000, 17313, -1000, 36, - -1000, -156, 490, 34, -159, 749, 679, -179, 748, -1000, - 964, 10394, -1000, -1000, 980, 177, 177, 799, 432, -1000, - -1000, -1000, 65, 426, -1000, -1000, -1000, -1000, -1000, -1000, + 17589, -1000, -1000, -1000, -1000, -1000, 17589, -174, 577, 17589, + 17589, 17589, 17589, -1000, 358, 358, -1000, 11287, 1760, 1760, + -1000, -1000, 541, -1000, 975, -1000, 541, 756, 756, -1000, + 756, 758, -1000, 756, 12, 756, -2, 541, 541, 2004, + 1934, 1811, 1714, 734, -163, -1000, 536, 10240, -1000, 1573, + 1303, -1000, -1000, 991, 985, 536, -1000, -1000, -1000, 953, + 694, 695, -1000, -1000, 8482, 625, 169, 621, -1000, 989, + 17589, 10240, -1000, -1000, 10240, 757, -1000, 10240, -1000, -1000, + -1000, 989, 734, 734, 734, 621, 975, -1000, -1000, -1000, + -1000, 4168, -1000, 618, -1000, 756, -1000, -1000, -1000, 17589, + -59, 1031, 1760, -1000, -1000, -1000, -1000, -1000, -20, 511, + -20, 423, -1000, 421, 4894, -1000, -1000, -1000, -1000, 955, + -1000, 6346, -1000, -1000, 754, 802, -1000, -1000, -1000, -1000, + 1760, -1000, 957, -1000, -1000, 127, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 11287, 11287, 11287, 11287, 11287, 975, + 502, 536, 11287, 11287, -1000, 10240, 10240, 944, -1000, 734, + -1000, 733, 17589, 17589, -1000, 17589, 975, -1000, 536, 536, + 17589, 536, 14441, 17589, 17589, 12683, -1000, 161, 17589, -1000, + 608, -1000, 212, -1000, -134, 202, -1000, 202, 595, 544, + -1000, 734, 706, -1000, 286, 17589, 17589, -1000, -1000, -1000, + 861, 861, 861, 861, 69, 541, -1000, 861, 861, 536, + 701, 1030, -1000, 734, 1041, 164, -1000, -1000, -1000, 602, + 586, -1000, 586, 586, 175, 161, -1000, 577, 285, 500, + -1000, 66, 17589, 350, 928, -1000, 927, -1000, -1000, -1000, + -1000, -1000, 52, 6346, 4531, 576, -1000, -1000, -1000, -1000, + -1000, 541, 55, -177, -1000, -1000, -1000, 17589, 695, 17589, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 400, -1000, -1000, + 17589, -1000, -1000, 465, -1000, -1000, 567, -1000, 17589, -1000, + -1000, 793, -1000, 877, -172, -181, 684, -1000, -1000, 753, + -1000, -1000, 52, 903, -174, -1000, 865, -1000, 17589, -1000, + 49, -1000, -175, 558, 47, -179, 819, 734, -182, 818, + -1000, 1001, 10589, -1000, -1000, 1027, 206, 206, 861, 541, + -1000, -1000, -1000, 81, 378, -1000, -1000, -1000, -1000, -1000, + -1000, } var yyPgo = [...]int{ - 0, 1248, 1247, 29, 67, 69, 1246, 1242, 1241, 97, - 96, 95, 1240, 1239, 1236, 1235, 1232, 1230, 1228, 1227, - 1226, 1225, 1224, 1223, 1222, 1220, 1219, 1218, 1216, 1215, - 1214, 1213, 91, 1212, 85, 1211, 1210, 1209, 1206, 1204, - 1203, 1201, 1200, 48, 174, 35, 61, 1198, 60, 1631, - 1197, 57, 68, 65, 1193, 45, 1190, 1189, 82, 1187, - 1185, 59, 1184, 1182, 2376, 1175, 73, 1173, 11, 36, - 1172, 1171, 1168, 1167, 87, 276, 1166, 1164, 14, 1163, - 1161, 100, 1160, 62, 31, 13, 32, 24, 1159, 66, - 1158, 6, 1157, 64, 1156, 1155, 1151, 1150, 47, 1149, - 63, 1148, 40, 23, 1147, 12, 90, 28, 19, 7, - 1144, 1143, 16, 84, 56, 72, 1142, 1141, 530, 1139, - 1138, 52, 1137, 1136, 1134, 42, 1133, 114, 410, 1131, - 1122, 1118, 1117, 38, 1043, 1812, 22, 79, 1116, 1114, - 1113, 2599, 46, 58, 17, 1112, 1111, 1110, 18, 39, - 50, 1109, 1106, 34, 1101, 1100, 1099, 1098, 1091, 1090, - 1089, 20, 1088, 1082, 1074, 89, 26, 1073, 1071, 70, - 21, 1069, 1068, 1067, 54, 78, 1066, 1058, 55, 1054, - 1052, 25, 1049, 1048, 1042, 1040, 1038, 27, 10, 1033, - 15, 1032, 9, 1017, 33, 1015, 4, 1013, 8, 1012, - 3, 0, 1011, 5, 53, 1, 1009, 2, 1008, 1007, - 1360, 1135, 86, 1005, 92, + 0, 1295, 1294, 29, 71, 75, 1293, 1291, 1288, 1283, + 99, 97, 96, 1282, 1280, 1279, 1278, 1277, 1275, 1273, + 1271, 1270, 1266, 1265, 1262, 1256, 1252, 1250, 1247, 1242, + 1241, 1240, 1239, 82, 1236, 87, 1234, 1233, 1232, 1230, + 1228, 1227, 1225, 1224, 44, 219, 55, 60, 1222, 57, + 253, 1220, 62, 73, 64, 1219, 40, 1214, 1210, 91, + 1209, 1208, 56, 1207, 1206, 2096, 1203, 77, 1202, 6, + 36, 1198, 1197, 1196, 1194, 81, 162, 1193, 1191, 15, + 1189, 1186, 103, 1184, 65, 26, 13, 22, 18, 1183, + 68, 1182, 9, 1181, 61, 1178, 1177, 1176, 1175, 25, + 1174, 59, 1173, 63, 27, 1171, 14, 74, 37, 21, + 8, 1170, 1168, 19, 72, 50, 69, 1164, 1163, 543, + 1162, 1146, 42, 1145, 1143, 1141, 23, 76, 98, 479, + 1137, 1136, 1134, 1133, 1132, 58, 941, 1859, 10, 78, + 1131, 1130, 1129, 2692, 41, 52, 17, 1128, 1126, 1121, + 34, 66, 35, 465, 1120, 38, 1119, 1118, 1113, 1112, + 1108, 1104, 1103, 315, 1102, 1101, 1098, 31, 20, 67, + 24, 1096, 1095, 1094, 1093, 49, 70, 1092, 1091, 47, + 1089, 1088, 28, 1078, 1076, 1074, 1072, 1069, 33, 7, + 1068, 16, 1063, 11, 1060, 32, 1058, 4, 1056, 12, + 1054, 3, 0, 1053, 5, 48, 1, 1052, 2, 1050, + 1049, 1048, 1623, 1292, 88, 1047, 93, } var yyR1 = [...]int{ - 0, 208, 209, 209, 1, 1, 1, 1, 1, 1, + 0, 210, 211, 211, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 201, - 201, 201, 20, 3, 3, 3, 3, 2, 2, 8, - 4, 5, 5, 9, 9, 35, 35, 10, 11, 11, - 11, 11, 212, 212, 58, 58, 59, 59, 106, 106, - 12, 13, 13, 115, 115, 114, 114, 114, 116, 116, - 116, 116, 151, 151, 14, 14, 14, 14, 14, 14, - 14, 203, 203, 202, 200, 200, 199, 199, 198, 21, - 183, 185, 185, 184, 184, 184, 184, 175, 154, 154, - 154, 154, 157, 157, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 156, 156, 156, 156, 156, 158, 158, - 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, - 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, - 160, 160, 160, 160, 160, 160, 174, 174, 161, 161, - 169, 169, 170, 170, 170, 167, 167, 168, 168, 171, - 171, 171, 163, 163, 164, 164, 172, 172, 165, 165, - 165, 166, 166, 166, 173, 173, 173, 173, 173, 162, - 162, 176, 176, 193, 193, 192, 192, 192, 182, 182, - 189, 189, 189, 189, 189, 179, 179, 179, 180, 180, - 178, 178, 181, 181, 191, 191, 190, 177, 177, 194, - 194, 194, 194, 206, 207, 205, 205, 205, 205, 205, - 186, 186, 186, 187, 187, 187, 188, 188, 188, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 204, 204, 204, 204, - 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, - 197, 195, 195, 196, 196, 16, 22, 22, 17, 17, - 17, 17, 17, 18, 18, 23, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 122, 122, 124, 124, 120, 120, 123, - 123, 121, 121, 121, 125, 125, 125, 126, 126, 152, - 152, 152, 25, 25, 27, 27, 28, 29, 29, 146, - 146, 147, 147, 30, 31, 36, 36, 36, 36, 36, - 36, 38, 38, 38, 7, 7, 7, 7, 37, 37, - 37, 6, 6, 26, 26, 26, 26, 19, 213, 32, - 33, 33, 34, 34, 34, 40, 40, 40, 39, 39, - 39, 45, 45, 47, 47, 47, 47, 47, 48, 48, - 48, 48, 48, 48, 44, 44, 46, 46, 46, 46, - 138, 138, 138, 137, 137, 50, 50, 51, 51, 52, - 52, 53, 53, 53, 90, 67, 67, 105, 105, 107, - 107, 54, 54, 54, 54, 55, 55, 56, 56, 57, - 57, 145, 145, 144, 144, 144, 143, 143, 60, 60, - 60, 62, 61, 61, 61, 61, 63, 63, 65, 65, - 64, 64, 66, 68, 68, 68, 68, 68, 69, 69, - 49, 49, 49, 49, 49, 49, 49, 49, 119, 119, - 71, 71, 70, 70, 70, 70, 70, 70, 70, 70, - 70, 70, 82, 82, 82, 82, 82, 82, 72, 72, - 72, 72, 72, 72, 72, 43, 43, 83, 83, 83, - 89, 84, 84, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 79, 79, 79, - 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 202, 202, 202, 21, 3, 3, 3, 3, 2, 2, + 8, 9, 4, 5, 5, 10, 10, 36, 36, 11, + 12, 12, 12, 12, 214, 214, 59, 59, 60, 60, + 107, 107, 13, 14, 14, 116, 116, 115, 115, 115, + 117, 117, 117, 117, 153, 153, 15, 15, 15, 15, + 15, 15, 15, 204, 204, 203, 201, 201, 200, 200, + 199, 22, 184, 186, 186, 185, 185, 185, 185, 176, + 156, 156, 156, 156, 159, 159, 157, 157, 157, 157, + 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, + 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, + 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, + 162, 162, 162, 162, 162, 162, 162, 162, 175, 175, + 163, 163, 169, 169, 170, 170, 170, 172, 172, 173, + 173, 130, 130, 130, 165, 165, 166, 166, 171, 171, + 167, 167, 167, 168, 168, 168, 174, 174, 174, 174, + 174, 164, 164, 177, 177, 194, 194, 193, 193, 193, + 183, 183, 190, 190, 190, 190, 190, 180, 180, 180, + 181, 181, 179, 179, 182, 182, 192, 192, 191, 178, + 178, 195, 195, 195, 195, 207, 208, 206, 206, 206, + 206, 206, 187, 187, 187, 188, 188, 188, 189, 189, + 189, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 205, 205, + 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, + 205, 205, 198, 196, 196, 197, 197, 17, 23, 23, + 18, 18, 18, 18, 18, 19, 19, 24, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, + 25, 25, 25, 25, 25, 25, 25, 25, 123, 123, + 209, 209, 125, 125, 121, 121, 124, 124, 122, 122, + 122, 126, 126, 126, 127, 127, 154, 154, 154, 26, + 26, 28, 28, 29, 30, 30, 148, 148, 149, 149, + 31, 32, 37, 37, 37, 37, 37, 37, 39, 39, + 39, 7, 7, 7, 7, 38, 38, 38, 6, 6, + 27, 27, 27, 27, 20, 215, 33, 34, 34, 35, + 35, 35, 41, 41, 41, 40, 40, 40, 46, 46, + 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, + 49, 45, 45, 47, 47, 47, 47, 140, 140, 140, + 139, 139, 51, 51, 52, 52, 53, 53, 54, 54, + 54, 91, 68, 68, 106, 106, 108, 108, 55, 55, + 55, 55, 56, 56, 57, 57, 58, 58, 147, 147, + 146, 146, 146, 145, 145, 61, 61, 61, 63, 62, + 62, 62, 62, 64, 64, 66, 66, 65, 65, 67, + 69, 69, 69, 69, 69, 70, 70, 50, 50, 50, + 50, 50, 50, 50, 50, 120, 120, 72, 72, 71, + 71, 71, 71, 71, 71, 71, 71, 71, 71, 83, + 83, 83, 83, 83, 83, 73, 73, 73, 73, 73, + 73, 73, 44, 44, 84, 84, 84, 90, 85, 85, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 80, 80, 80, 80, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 214, 214, 81, 80, 80, 80, 80, 80, 80, 80, - 41, 41, 41, 41, 41, 150, 150, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, - 94, 94, 42, 42, 92, 92, 93, 95, 95, 91, - 91, 91, 74, 74, 74, 74, 74, 74, 74, 74, - 76, 76, 76, 96, 96, 97, 97, 98, 98, 99, - 99, 100, 101, 101, 101, 102, 102, 102, 102, 103, - 103, 103, 73, 73, 73, 73, 104, 104, 104, 104, - 108, 108, 85, 85, 87, 87, 86, 88, 109, 109, - 112, 110, 110, 110, 113, 113, 113, 113, 111, 111, - 111, 140, 140, 140, 117, 117, 127, 127, 128, 128, - 118, 118, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 130, 130, 130, 131, 131, 132, 132, 132, - 139, 139, 135, 135, 136, 136, 141, 141, 142, 142, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, - 133, 133, 133, 133, 133, 133, 133, 133, 133, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, - 134, 134, 134, 134, 210, 211, 148, 149, 149, 149, + 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, + 79, 79, 79, 79, 79, 79, 79, 216, 216, 82, + 81, 81, 81, 81, 81, 81, 81, 42, 42, 42, + 42, 42, 152, 152, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 155, 155, 155, 155, 95, 95, 43, + 43, 93, 93, 94, 96, 96, 92, 92, 92, 75, + 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, + 97, 97, 98, 98, 99, 99, 100, 100, 101, 102, + 102, 102, 103, 103, 103, 103, 104, 104, 104, 74, + 74, 74, 74, 105, 105, 105, 105, 109, 109, 86, + 86, 88, 88, 87, 89, 110, 110, 113, 111, 111, + 114, 114, 114, 114, 114, 112, 112, 112, 142, 142, + 142, 118, 118, 128, 128, 129, 129, 119, 119, 131, + 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, + 132, 132, 133, 133, 134, 134, 134, 141, 141, 137, + 137, 138, 138, 143, 143, 144, 144, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, + 136, 136, 136, 136, 136, 212, 213, 150, 151, 151, + 151, } var yyR2 = [...]int{ @@ -2978,50 +3231,50 @@ var yyR2 = [...]int{ 7, 7, 7, 7, 4, 5, 4, 4, 7, 5, 5, 5, 12, 7, 5, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 7, 1, 3, 8, 8, 3, 3, 5, 4, 6, - 5, 4, 4, 3, 2, 3, 4, 4, 3, 4, - 4, 4, 4, 4, 4, 3, 2, 7, 2, 3, - 4, 3, 7, 5, 4, 2, 4, 4, 3, 3, - 5, 2, 3, 1, 1, 0, 1, 0, 1, 1, - 1, 0, 2, 2, 0, 2, 2, 0, 2, 0, - 1, 1, 2, 1, 1, 2, 1, 1, 5, 0, - 1, 0, 1, 2, 3, 0, 3, 3, 3, 3, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, - 1, 3, 3, 2, 2, 3, 3, 2, 0, 2, - 0, 2, 1, 2, 2, 0, 1, 1, 0, 1, - 1, 0, 1, 0, 1, 2, 3, 4, 1, 1, - 1, 1, 1, 1, 1, 3, 1, 2, 3, 5, - 0, 1, 2, 1, 1, 0, 2, 1, 3, 1, - 1, 1, 3, 3, 3, 3, 7, 1, 3, 1, - 3, 4, 4, 4, 3, 2, 4, 0, 1, 0, - 2, 0, 1, 0, 1, 2, 1, 1, 1, 2, - 2, 1, 2, 3, 2, 3, 2, 2, 2, 1, - 1, 3, 3, 0, 5, 4, 5, 5, 0, 2, - 1, 3, 3, 3, 2, 3, 1, 2, 0, 3, - 1, 1, 3, 3, 4, 4, 5, 3, 4, 5, - 6, 2, 1, 2, 1, 2, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 0, 2, 1, 1, 1, - 3, 1, 3, 1, 1, 1, 1, 1, 3, 3, + 1, 1, 7, 1, 3, 8, 8, 3, 3, 5, + 4, 6, 5, 4, 4, 3, 2, 3, 4, 4, + 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, + 2, 7, 2, 3, 4, 3, 7, 5, 4, 2, + 4, 4, 3, 3, 5, 2, 3, 3, 1, 1, + 1, 1, 0, 1, 0, 1, 1, 1, 0, 2, + 2, 0, 2, 2, 0, 2, 0, 1, 1, 2, + 1, 1, 2, 1, 1, 5, 0, 1, 0, 1, + 2, 3, 0, 3, 3, 3, 3, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, + 2, 2, 3, 3, 2, 0, 2, 0, 2, 1, + 2, 2, 0, 1, 1, 0, 1, 1, 0, 1, + 0, 1, 2, 3, 4, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, + 1, 1, 0, 2, 1, 3, 1, 1, 1, 3, + 3, 3, 3, 7, 1, 3, 1, 3, 4, 4, + 4, 3, 2, 4, 0, 1, 0, 2, 0, 1, + 0, 1, 2, 1, 1, 1, 2, 2, 1, 2, + 3, 2, 3, 2, 2, 2, 1, 1, 3, 3, + 0, 5, 4, 5, 5, 0, 2, 1, 3, 3, + 3, 2, 3, 1, 2, 0, 3, 1, 1, 3, + 3, 4, 4, 5, 3, 4, 5, 6, 2, 1, + 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 0, 2, 1, 1, 1, 3, 1, 3, + 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 3, 1, 1, 1, 1, 4, 5, 5, - 6, 4, 4, 6, 6, 6, 8, 8, 8, 8, - 9, 8, 5, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 8, 8, - 0, 2, 3, 4, 4, 4, 4, 4, 4, 4, - 0, 3, 4, 7, 3, 1, 1, 2, 3, 3, - 1, 2, 2, 1, 2, 1, 2, 2, 1, 2, - 0, 1, 0, 2, 1, 2, 4, 0, 2, 1, - 3, 5, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 0, 3, 0, 2, 0, 3, 1, - 3, 2, 0, 1, 1, 0, 2, 4, 4, 0, - 2, 4, 2, 1, 5, 4, 1, 3, 3, 5, - 0, 5, 1, 3, 1, 2, 3, 1, 1, 3, - 3, 1, 2, 3, 3, 3, 3, 3, 1, 2, - 1, 1, 1, 1, 1, 1, 0, 2, 0, 3, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, + 1, 1, 1, 1, 4, 5, 5, 6, 4, 4, + 6, 6, 6, 8, 8, 8, 8, 9, 8, 5, + 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 8, 8, 0, 2, 3, + 4, 4, 4, 4, 4, 4, 4, 0, 3, 4, + 7, 3, 1, 1, 2, 3, 3, 1, 2, 2, + 1, 2, 1, 2, 2, 1, 2, 0, 1, 0, + 2, 1, 2, 4, 0, 2, 1, 3, 5, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 0, 3, 0, 2, 0, 3, 1, 3, 2, 0, + 1, 1, 0, 2, 4, 4, 0, 2, 4, 2, + 1, 5, 4, 1, 3, 3, 5, 0, 5, 1, + 3, 1, 2, 3, 1, 1, 3, 3, 1, 3, + 3, 3, 3, 3, 2, 1, 2, 1, 1, 1, + 1, 1, 1, 0, 2, 0, 3, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 1, 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -3051,345 +3304,353 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, + 1, } var yyChk = [...]int{ - -1000, -208, -1, -3, -8, -9, -10, -11, -12, -13, - -14, -15, -16, -17, -18, -23, -24, -25, -27, -28, - -29, -30, -31, -6, -26, -19, -20, -4, -210, 6, - 7, -35, 9, 10, 30, -21, 123, 124, 126, 125, - 159, 127, 152, 53, 173, 174, 176, 177, 178, 179, - -38, 157, 158, 31, 32, 129, 34, 57, 8, 262, - 154, 153, 25, -209, 364, -34, 5, -98, 15, -3, - -32, -213, -32, -32, -32, -32, -32, -183, -185, 57, - 96, -132, 133, 77, 254, 130, 131, 137, -135, -201, - -134, 60, 61, 62, 272, 145, 304, 305, 173, 187, - 181, 208, 200, 273, 306, 146, 198, 201, 241, 143, - 307, 228, 235, 71, 176, 250, 308, 155, 196, 192, - 309, 281, 190, 27, 310, 237, 213, 311, 277, 239, - 191, 236, 129, 312, 148, 360, 141, 313, 214, 218, - 314, 242, 315, 316, 317, 185, 186, 318, 144, 244, - 212, 142, 33, 274, 37, 163, 245, 216, 319, 211, - 207, 320, 321, 322, 323, 210, 184, 206, 41, 220, - 219, 221, 240, 203, 324, 325, 326, 149, 327, 193, - 18, 328, 329, 330, 331, 332, 248, 158, 333, 161, - 334, 335, 336, 337, 338, 339, 238, 215, 217, 138, - 165, 234, 276, 340, 246, 189, 341, 150, 162, 157, - 249, 151, 342, 343, 344, 345, 346, 347, 348, 177, - 349, 350, 351, 352, 172, 243, 252, 40, 225, 353, - 183, 140, 354, 174, 169, 230, 204, 164, 355, 356, - 194, 195, 209, 182, 205, 175, 361, 166, 159, 357, - 251, 226, 278, 202, 199, 170, 358, 167, 168, 359, - 362, 231, 232, 171, 275, 247, 197, 227, -118, 133, - 254, 130, 232, 135, 131, 131, 132, 133, 254, 130, - 131, -64, -141, -201, -134, 133, 131, 114, 201, 241, - 123, 229, 237, -124, 238, 165, -152, 131, -120, 228, - 231, 232, 171, -201, 239, 243, 242, 233, -141, 175, - -146, 180, -135, 178, -64, -36, 360, 127, -148, -148, - 230, 230, -148, -84, -49, -70, 80, -75, 29, 23, - -74, -71, -91, -88, -89, 114, 115, 117, 116, 118, - 103, 104, 111, 81, 119, -79, -77, -78, -80, 64, - 63, 72, 65, 66, 67, 68, 73, 74, 75, -135, - -141, -86, -210, 47, 48, 263, 264, 265, 266, 271, - 267, 83, 36, 253, 261, 260, 259, 257, 258, 255, - 256, 269, 270, 136, 254, 130, 109, 262, -201, -134, - -5, -4, -210, 6, 20, 21, -102, 17, 16, -211, - 59, -40, -47, 42, 43, -48, 21, 35, 46, 44, - -33, -46, 105, -49, -141, -118, -118, 11, -58, -59, - -64, -66, -141, -110, -151, 175, -113, 243, 242, -136, - -111, -135, -133, 241, 201, 240, 128, 279, 79, 22, - 24, 223, 82, 114, 16, 83, 113, 263, 123, 51, - 280, 255, 256, 253, 265, 266, 254, 229, 29, 10, - 282, 25, 153, 21, 35, 107, 125, 86, 87, 156, - 23, 154, 75, 285, 19, 54, 11, 13, 286, 287, - 14, 136, 135, 98, 132, 49, 8, 119, 26, 95, - 45, 288, 28, 289, 290, 291, 292, 47, 96, 17, - 257, 258, 31, 293, 271, 160, 109, 52, 38, 80, - 294, 295, 73, 296, 76, 55, 77, 15, 50, 297, - 298, 299, 300, 97, 126, 262, 48, 301, 130, 6, - 268, 30, 152, 46, 302, 131, 85, 269, 270, 134, - 74, 5, 137, 32, 9, 53, 56, 259, 260, 261, - 36, 84, 12, 303, 78, -184, 96, -175, -201, -64, - 132, -64, 262, -128, 136, -128, -128, 131, -64, -201, - -201, 123, 125, 128, 55, -22, -64, -127, 136, -201, - -127, -127, -127, -64, 120, -64, -201, 30, -125, 96, - 12, 254, -201, 165, 131, 166, 133, -149, -210, -136, - -179, 132, 33, 144, -149, 169, 170, -149, -123, -122, - 235, 236, 230, 234, 12, 170, 230, 168, -149, 134, - -135, -37, -135, 64, -7, -3, -10, -9, -11, 88, - -148, -148, 58, 79, 77, 78, 95, -49, -72, 98, - 80, 96, 97, 82, 100, 99, 110, 103, 104, 105, - 106, 107, 108, 109, 101, 102, 113, 88, 89, 90, - 91, 92, 93, 94, -119, -210, -89, -210, 121, 122, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, - -210, 120, -2, -84, -4, -210, -210, -210, -210, -210, - -210, -210, -210, -94, -49, -210, -214, -81, -210, -214, - -81, -214, -81, -214, -210, -214, -81, -214, -81, -214, - -214, -81, -210, -210, -210, -210, -210, -210, -210, -98, - -3, -32, -103, 19, 31, -49, -99, -100, -49, -98, - 38, -44, -46, -48, 42, 43, 70, 11, -138, -137, - 22, -135, 64, 120, -65, 26, -64, -51, -52, -53, - -54, -67, -90, -210, -64, -64, -58, -212, 58, 11, - 56, -212, 58, 120, 58, 175, -113, -115, -114, 244, - 246, 88, -140, -135, 64, 29, 30, 59, 58, -64, - -154, -157, -159, -158, -160, -155, -156, 198, 199, 114, - 202, 204, 205, 206, 207, 208, 209, 210, 211, 212, - 213, 30, 155, 194, 195, 196, 197, 214, 215, 216, - 217, 218, 219, 220, 221, 181, 200, 273, 182, 183, - 184, 185, 186, 187, 189, 190, 191, 192, 193, -201, - -149, 133, -201, 80, -201, -64, -64, -149, -149, -149, - 167, 167, 131, 131, 172, -64, 58, 134, -58, 23, - 55, -64, -201, -201, -142, -141, -133, -149, -125, 64, - -49, -149, -149, -149, -64, -149, -149, -180, 11, 98, - -149, -149, 11, -121, 11, 98, -49, -126, 96, 55, - -147, 178, 212, 361, 362, 363, -49, -49, -49, -49, - -82, 73, 80, 74, 75, -75, -83, -86, -89, 69, - 98, 96, 97, 82, -75, -75, -75, -75, -75, -75, - -75, -75, -75, -75, -75, -75, -75, -75, -75, -150, - -201, 64, -201, -74, -74, -135, -45, 21, 35, -44, - -136, -142, -133, -34, -211, -211, -98, -44, -44, -49, - -49, -91, 64, -44, -91, 64, -44, -44, -39, 21, - 35, -92, -93, 84, -91, -135, -141, -211, -75, -135, - -135, -44, -45, -45, -44, -44, -102, -211, 9, 98, - 58, 18, 58, -101, 24, 25, -102, -76, -135, 65, - 68, -50, 58, 11, -48, -64, -137, 105, -142, -106, - 161, -64, 30, 58, -60, -62, -61, -63, 45, 49, - 51, 46, 47, 48, 52, -145, 22, -51, -3, -210, - -144, 161, -143, 22, -141, 64, -106, 56, -51, -64, - -51, -66, -141, 105, -113, -115, 58, 245, 247, 248, - 55, 76, -49, -166, 113, -186, -187, -188, -136, 64, - 65, -175, -176, -177, -189, 147, -194, 138, 140, 137, - -178, 148, 132, 28, 59, -171, 73, 80, -167, 226, - -161, 57, -161, -161, -161, -161, -165, 201, -165, -165, - -165, 57, 57, -161, -161, -161, -169, 57, -169, -169, - -170, 57, -170, -139, 56, -64, -149, 23, -149, -129, - 128, 125, 126, -197, 124, 223, 201, 71, 29, 15, - 263, 161, 278, -201, 162, -64, -64, -64, -64, -64, - 128, 125, -64, -64, -64, -149, -64, -64, -125, -141, - -141, 64, -64, -135, 73, 74, 75, -83, -75, -75, - -75, -43, 156, 79, -211, -211, -44, -44, -210, 120, - -5, -102, -211, -211, 58, 56, 22, 11, 11, -211, - 11, 11, -211, -211, -44, -95, -93, 86, -49, -211, - 120, -211, 58, 58, -211, -211, -211, -211, -211, -103, - 40, -49, -49, -100, -103, -117, 19, 11, 36, 36, - -69, 12, -46, -51, -48, 120, -73, 30, 36, -3, - -210, -210, -109, -112, -91, -52, -53, -53, -52, -53, - 45, 45, 45, 50, 45, 50, 45, -61, -141, -211, - -211, -3, -68, 53, 135, 54, -210, -143, -69, -51, - -69, -69, 120, -114, -116, 249, 246, 252, -201, 64, - 58, -188, 88, 57, -201, 28, -178, -178, -181, -201, - -181, 28, -163, 29, 73, -168, 227, 65, -165, -165, - -166, 30, -166, -166, -166, -174, 64, -174, 65, 65, - 55, -135, -149, -148, -204, 143, 139, 147, 148, 141, - 60, 61, 62, 132, 28, 138, 140, 161, 137, -204, - -130, -131, 134, 22, 132, 28, 161, -203, 56, 167, - 223, 167, 134, -149, -121, -121, -43, 79, -75, -75, - -211, -211, -45, -136, -98, -103, -153, 114, 198, 155, - 196, 192, 212, 203, 225, 194, 226, -150, -153, -75, - -75, -75, -75, 272, -98, 87, -49, 85, -136, -75, - -75, 41, -64, -96, 13, -49, 105, -108, 55, -109, - -85, -87, -86, -210, -104, -135, -107, -135, -69, 58, - 88, -56, -55, 55, 56, -57, 55, -55, 45, 45, - -211, 132, 132, 132, -107, -98, -69, 246, 250, 251, - -187, -188, -191, -190, -135, -194, -181, -181, 57, -164, - 55, -75, 59, -166, -166, -201, 114, 59, 58, 59, - 58, 59, 58, -64, -148, -148, -64, -148, -135, -200, - 275, -202, -201, -135, -135, -135, -64, -125, -125, -75, - -211, -102, -211, -161, -161, -161, -170, -161, 186, -161, - 186, -211, -211, 19, 19, 19, 19, -210, -42, 268, - -49, 58, 58, -97, 14, 16, 27, -108, 58, -211, - -211, 58, 120, -211, 58, -98, -112, -49, -49, 57, - -49, -210, -210, -210, -211, -102, 59, 58, -161, -105, - -135, -172, 223, 9, -165, 64, -165, 65, 65, -149, - 26, -199, -198, -136, 57, 56, -103, -165, -201, -75, - -75, -75, -75, -75, -102, 64, -75, -75, -49, -84, - 28, -87, 36, -3, -135, -135, -135, -102, -105, -105, - -211, -105, -105, -144, -193, -192, 56, 142, 71, -190, - 59, 58, -173, 138, 28, 137, -78, -166, -166, 59, - 59, -210, 58, 88, -105, -64, -211, -211, -211, -211, - -41, 98, 275, -211, -211, -211, 9, -85, 120, 59, - -211, -211, -211, -68, -192, -201, -182, 88, 64, 150, - -135, -162, 71, 28, 28, -195, -196, 161, -198, -188, - 59, -211, 273, 52, 276, -109, -135, 65, -64, 64, - -211, 58, -135, -203, 41, 274, 277, 57, -196, 36, - -200, 41, -105, 163, 275, 59, 164, 276, -206, -207, - 55, -210, 277, -207, 55, 10, 9, -75, 160, -205, - 151, 146, 149, 30, -205, -211, -211, 145, 29, 73, + -1000, -210, -1, -3, -8, -9, -10, -11, -12, -13, + -14, -15, -16, -17, -18, -19, -24, -25, -26, -28, + -29, -30, -31, -32, -6, -27, -20, -21, -4, -212, + 6, 7, 8, -36, 10, 11, 31, -22, 124, 125, + 127, 126, 160, 128, 153, 54, 174, 175, 177, 178, + 179, 180, -39, 158, 159, 32, 33, 130, 35, 58, + 9, 267, 155, 154, 26, -211, 369, -35, 5, -99, + 16, -3, -33, -215, -33, -33, -33, -33, -33, -33, + -184, -186, 58, 97, -134, 134, 78, 259, 131, 132, + 138, -137, -202, -136, 61, 62, 63, 277, 146, 309, + 310, 174, 188, 182, 209, 201, 278, 311, 147, 199, + 202, 246, 144, 312, 229, 236, 72, 177, 255, 313, + 156, 197, 193, 314, 286, 191, 28, 315, 238, 214, + 316, 282, 240, 192, 237, 130, 317, 149, 365, 142, + 318, 215, 219, 319, 247, 320, 321, 322, 186, 187, + 323, 145, 249, 213, 143, 34, 241, 279, 38, 164, + 250, 217, 324, 212, 208, 325, 326, 327, 328, 211, + 185, 207, 42, 221, 220, 222, 245, 204, 329, 330, + 331, 150, 332, 194, 19, 333, 334, 335, 336, 337, + 253, 159, 338, 162, 339, 340, 341, 342, 343, 344, + 239, 216, 218, 139, 166, 235, 281, 345, 251, 190, + 346, 151, 163, 158, 254, 152, 347, 348, 349, 350, + 351, 352, 353, 178, 354, 355, 356, 357, 173, 248, + 257, 41, 226, 358, 184, 141, 359, 175, 170, 231, + 205, 165, 360, 361, 195, 196, 210, 183, 206, 176, + 366, 167, 160, 362, 256, 227, 283, 203, 200, 171, + 363, 168, 169, 364, 367, 242, 232, 243, 244, 233, + 172, 280, 252, 198, 228, -119, 134, 259, 131, 233, + 136, 132, 132, 133, 134, 259, 131, 132, -65, -143, + -202, -136, 134, 132, 115, 202, 246, 124, 230, 241, + 242, 238, -125, 239, 166, -154, 132, -121, 229, 232, + 233, 172, -209, -202, 240, 248, 247, 234, 244, 243, + -143, 176, -148, 181, -137, 179, -65, -37, 365, 128, + -150, -150, 231, 231, -150, -85, -50, -71, 81, -76, + 30, 24, -75, -72, -92, -89, -90, 115, 116, 118, + 117, 119, 104, 105, 112, 82, 120, -80, -78, -79, + -81, 65, 64, 73, 66, 67, 68, 69, 74, 75, + 76, -137, -143, -87, -212, 48, 49, 268, 269, 270, + 271, 276, 272, 84, 37, 258, 266, 265, 264, 262, + 263, 260, 261, 274, 275, 137, 259, 131, 110, 267, + -202, -136, -5, -4, -212, 6, 21, 22, -103, 18, + 17, -213, 60, -41, -48, 43, 44, -49, 22, 36, + 47, 45, -34, -47, 106, -50, -143, -47, -119, -119, + 12, -59, -60, -65, -67, -143, -111, -153, 176, -114, + 248, 247, -138, -112, -137, -135, 246, 202, 245, 129, + 284, 80, 23, 25, 224, 83, 115, 17, 84, 114, + 268, 124, 52, 285, 260, 261, 258, 270, 271, 259, + 230, 30, 11, 287, 26, 154, 22, 36, 108, 126, + 87, 88, 157, 24, 155, 76, 290, 20, 55, 12, + 14, 291, 292, 15, 137, 136, 99, 133, 50, 9, + 120, 27, 96, 46, 293, 29, 294, 295, 296, 297, + 48, 97, 18, 262, 263, 32, 298, 276, 161, 110, + 53, 39, 81, 299, 300, 74, 301, 77, 56, 78, + 16, 51, 302, 303, 304, 305, 98, 127, 267, 49, + 306, 131, 6, 273, 31, 153, 47, 307, 132, 86, + 274, 275, 135, 75, 5, 138, 33, 10, 54, 57, + 264, 265, 266, 37, 85, 13, 308, 79, -185, 97, + -176, -202, -65, 133, -65, 267, -129, 137, -129, -129, + 132, -65, -202, -202, 124, 126, 129, 56, -23, -65, + -128, 137, -202, -128, -128, -128, -65, 121, -65, -202, + 31, -126, 97, 13, 259, -202, 166, 132, 167, 134, + -127, 97, -127, -127, -180, 133, 34, 145, -151, -212, + -138, 170, 171, -151, -124, -123, 236, 237, 231, 235, + 13, 171, 231, 169, -126, -151, 135, -137, -38, -137, + 65, -7, -3, -11, -10, -12, 89, -150, -150, 59, + 80, 78, 79, 96, -50, -73, 99, 81, 97, 98, + 83, 101, 100, 111, 104, 105, 106, 107, 108, 109, + 110, 102, 103, 114, 89, 90, 91, 92, 93, 94, + 95, -120, -212, -90, -212, 122, 123, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -212, 121, -2, + -85, -4, -212, -212, -212, -212, -212, -212, -212, -212, + -95, -50, -212, -216, -82, -212, -216, -82, -216, -82, + -216, -212, -216, -82, -216, -82, -216, -216, -82, -212, + -212, -212, -212, -212, -212, -212, -99, -3, -33, -104, + 20, 32, -50, -100, -101, -50, -99, 39, -45, -47, + -49, 43, 44, 71, 12, -140, -139, 23, -137, 65, + 121, 12, -66, 27, -65, -52, -53, -54, -55, -68, + -91, -212, -65, -65, -59, -214, 59, 12, 57, -214, + 59, 121, 59, 176, -114, -153, -116, -115, 249, 251, + 89, -142, -137, 65, 30, 31, 60, 59, -65, -156, + -159, -161, -160, -162, -157, -158, 199, 200, 115, 203, + 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, + 31, 156, 195, 196, 197, 198, 215, 216, 217, 218, + 219, 220, 221, 222, 182, 201, 278, 183, 184, 185, + 186, 187, 188, 190, 191, 192, 193, 194, -202, -151, + 134, -202, 81, -202, -65, -65, -151, -151, -151, 168, + 168, 132, 132, 173, -65, 59, 135, -59, 24, 56, + -65, -202, -202, -144, -143, -135, -151, -126, 65, -50, + -151, -151, -151, -65, -151, -151, 65, -181, 12, 99, + -151, -151, 12, -122, 12, 99, -50, -127, 56, -149, + 179, 213, 366, 367, 368, -50, -50, -50, -50, -83, + 74, 81, 75, 76, -76, -84, -87, -90, 70, 99, + 97, 98, 83, -76, -76, -76, -76, -76, -76, -76, + -76, -76, -76, -76, -76, -76, -76, -76, -152, -202, + 65, -202, -75, -75, -137, -46, 22, 36, -45, -138, + -144, -135, -35, -213, -213, -99, -45, -45, -50, -50, + -92, 65, -45, -92, 65, -45, -45, -40, 22, 36, + -93, -94, 85, -92, -137, -143, -213, -76, -137, -137, + -45, -46, -46, -45, -45, -103, -213, 10, 99, 59, + 19, 59, -102, 25, 26, -103, -77, -137, 66, 69, + -51, 59, 12, -49, -65, -139, 106, -144, -65, -107, + 162, -65, 31, 59, -61, -63, -62, -64, 46, 50, + 52, 47, 48, 49, 53, -147, 23, -52, -3, -212, + -146, 162, -145, 23, -143, 65, -107, 57, -52, -65, + -52, -67, -143, 106, -114, -116, 59, 250, 252, 253, + 56, 77, -50, -168, 114, -187, -188, -189, -138, 65, + 66, -176, -177, -178, -190, 148, -195, 139, 141, 138, + -179, 149, 133, 29, 60, -130, 74, 81, -172, 227, + -163, 58, -163, -163, -163, -163, -167, 202, -167, -167, + -167, 58, 58, -163, -163, -163, -169, 58, -169, -169, + -170, 58, -170, -141, 57, -65, -151, 24, -151, -131, + 129, 126, 127, -198, 125, 224, 202, 72, 30, 16, + 268, 162, 283, -202, 163, -65, -65, -65, -65, -65, + 129, 126, -65, -65, -65, -151, -65, -65, -126, -143, + -143, -65, -137, 74, 75, 76, -84, -76, -76, -76, + -44, 157, 80, -213, -213, -45, -45, -212, 121, -5, + -103, -213, -213, 59, 57, 23, 12, 12, -213, 12, + 12, -213, -213, -45, -96, -94, 87, -50, -213, 121, + -213, 59, 59, -213, -213, -213, -213, -213, -104, 41, + -50, -50, -101, -104, -118, 20, 12, 37, 37, -70, + 13, -47, -52, -49, 121, -70, -74, 31, 37, -3, + -212, -212, -110, -113, -92, -53, -54, -54, -53, -54, + 46, 46, 46, 51, 46, 51, 46, -62, -143, -213, + -213, -3, -69, 54, 136, 55, -212, -145, -70, -52, + -70, -70, 121, -115, -117, 254, 251, 257, -202, 65, + 59, -189, 89, 58, -202, 29, -179, -179, -182, -202, + -182, 29, -165, 30, 74, -173, 228, 66, -167, -167, + -168, 31, -168, -168, -168, -175, 65, -175, 66, 66, + 56, -137, -151, -150, -205, 144, 140, 148, 149, 142, + 61, 62, 63, 133, 29, 139, 141, 162, 138, -205, + -132, -133, 135, 23, 133, 29, 162, -204, 57, 168, + 224, 168, 135, -151, -122, -122, -44, 80, -76, -76, + -213, -213, -46, -138, -99, -104, -155, 115, 199, 156, + 197, 193, 213, 204, 226, 195, 227, -152, -155, -76, + -76, -76, -76, 277, -99, 88, -50, 86, -138, -76, + -76, 42, -65, -97, 14, -50, 106, -103, -109, 56, + -110, -86, -88, -87, -212, -105, -137, -108, -137, -70, + 59, 89, -57, -56, 56, 57, -58, 56, -56, 46, + 46, -213, 133, 133, 133, -108, -99, -70, 251, 255, + 256, -188, -189, -192, -191, -137, -195, -182, -182, 58, + -166, 56, -76, 60, -168, -168, -202, 115, 60, 59, + 60, 59, 60, 59, -65, -150, -150, -65, -150, -137, + -201, 280, -203, -202, -137, -137, -137, -65, -126, -126, + -76, -213, -103, -213, -163, -163, -163, -170, -163, 187, + -163, 187, -213, -213, 20, 20, 20, 20, -212, -43, + 273, -50, 59, 59, -98, 15, 17, 28, -109, 59, + -213, -213, 59, 121, -213, 59, -99, -113, -50, -50, + 58, -50, -212, -212, -212, -213, -103, 60, 59, -163, + -106, -137, -171, 224, 10, -167, 65, -167, 66, 66, + -151, 27, -200, -199, -138, 58, 57, -104, -167, -202, + -76, -76, -76, -76, -76, -103, 65, -76, -76, -50, + -85, 29, -88, 37, -3, -137, -137, -137, -103, -106, + -106, -213, -106, -106, -146, -194, -193, 57, 143, 72, + -191, 60, 59, -174, 139, 29, 138, -79, -168, -168, + 60, 60, -212, 59, 89, -106, -65, -213, -213, -213, + -213, -42, 99, 280, -213, -213, -213, 10, -86, 121, + 60, -213, -213, -213, -69, -193, -202, -183, 89, 65, + 151, -137, -164, 72, 29, 29, -196, -197, 162, -199, + -189, 60, -213, 278, 53, 281, -110, -137, 66, -65, + 65, -213, 59, -137, -204, 42, 279, 282, 58, -197, + 37, -201, 42, -106, 164, 280, 60, 165, 281, -207, + -208, 56, -212, 282, -208, 56, 11, 10, -76, 161, + -206, 152, 147, 150, 31, -206, -213, -213, 146, 30, + 74, } var yyDef = [...]int{ 28, -2, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 617, 0, 358, - 358, 358, 358, 358, 358, 0, 687, 670, 0, 0, - 0, 0, -2, 323, 324, 0, 326, -2, 0, 0, - 335, 996, 996, 0, 0, 996, 0, 994, 45, 46, - 341, 342, 343, 1, 3, 0, 362, 625, 0, 0, - -2, 360, 0, 670, 670, 0, 0, 74, 75, 0, - 0, 0, 982, 0, 668, 668, 668, 688, 689, 692, - 693, 29, 30, 31, 819, 820, 821, 822, 823, 824, - 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, - 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, - 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, - 855, 856, 857, 858, 859, 860, 861, 862, 863, 864, - 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, - 875, 876, 877, 878, 879, 880, 881, 882, 883, 884, - 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, - 895, 896, 897, 898, 899, 900, 901, 902, 903, 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, 983, 984, 985, - 986, 987, 988, 989, 990, 991, 992, 993, 0, 0, - 0, 0, 0, 671, 0, 666, 0, 666, 666, 666, - 0, 274, 440, 696, 697, 982, 0, 0, 0, 314, - 0, 997, 286, 0, 288, 997, 0, 997, 0, 295, - 0, 0, 301, 997, 306, 320, 321, 308, 322, 325, - 0, 330, 333, 0, 348, 0, 860, 340, 353, 354, - 996, 996, 357, 32, 491, 450, 0, 456, 458, 0, - 493, 494, 495, 496, 497, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 523, 524, 525, 526, 602, - 603, 604, 605, 606, 607, 608, 609, 460, 461, 599, - 0, 647, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 590, 0, 560, 560, 560, 560, 560, 560, 560, - 560, 0, 0, 0, 0, 0, 0, 0, -2, -2, - 617, 41, 0, 358, 363, 364, 629, 0, 0, 617, - 995, 0, 0, -2, -2, 374, 380, 381, 382, 383, - 359, 0, 386, 390, 0, 0, 0, 0, 0, 0, - 54, 56, 440, 60, 0, 970, 651, -2, -2, 0, - 0, 694, 695, -2, 832, -2, 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, 740, 741, 742, 743, - 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, - 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, - 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, - 774, 775, 776, 777, 778, 779, 780, 781, 782, 783, - 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, - 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 0, 0, 93, 0, 91, - 0, 997, 0, 0, 0, 0, 0, 0, 997, 997, - 997, 0, 0, 0, 0, 265, 0, 0, 0, 0, - 0, 0, 0, 273, 0, 275, 997, 314, 278, 0, - 0, 997, 997, 997, 0, 997, 997, 285, 998, 999, - 0, 195, 196, 197, 289, 997, 997, 291, 0, 311, - 309, 310, 303, 304, 0, 317, 298, 299, 302, 331, - 334, 351, 349, 350, 352, 344, 345, 346, 347, 0, - 355, 356, 0, 0, 0, 0, 0, 454, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 479, 480, - 481, 482, 483, 484, 457, 0, 471, 0, 0, 0, - 513, 514, 515, 516, 517, 518, 519, 520, 521, 0, - 371, 0, 0, 0, 617, 0, 0, 0, 0, 0, - 0, 0, 368, 0, 591, 0, 544, 552, 0, 545, - 553, 546, 554, 547, 0, 548, 555, 549, 556, 550, - 551, 557, 0, 0, 0, 371, 371, 0, 0, 625, - 0, 373, 33, 0, 0, 626, 618, 619, 622, 625, - 0, 395, 384, 375, 378, 379, 361, 0, 387, 391, - 0, 393, 394, 0, 58, 0, 439, 0, 397, 399, - 400, 401, 421, 0, 423, -2, 0, 0, 0, 52, - 53, 0, 0, 0, 0, 970, 652, 62, 63, 0, - 0, 0, 171, 661, 662, 663, 659, 220, 0, 0, - 159, 155, 99, 100, 101, 148, 103, 148, 148, 148, - 148, 168, 168, 168, 168, 131, 132, 133, 134, 135, - 0, 0, 118, 148, 148, 148, 122, 138, 139, 140, - 141, 142, 143, 144, 145, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 150, 150, 150, 152, 152, 690, - 77, 0, 997, 0, 997, 89, 0, 234, 236, 237, - 0, 0, 0, 0, 0, 0, 0, 0, 268, 667, - 0, 997, 271, 272, 441, 698, 699, 276, 277, 315, - 316, 279, 280, 281, 282, 283, 284, 0, 198, 199, - 290, 294, 0, 314, 0, 0, 296, 297, 0, 0, - 0, 332, 336, 337, 338, 339, 492, 451, 452, 453, - 455, 472, 0, 474, 476, 462, 463, 487, 488, 489, - 0, 0, 0, 0, 485, 467, 0, 498, 499, 500, - 501, 502, 503, 504, 505, 506, 507, 508, 509, 512, - 575, 576, 0, 510, 511, 522, 0, 0, 0, 372, - 600, 0, -2, 0, 490, 646, 625, 0, 0, 0, - 0, 495, 602, 0, 495, 602, 0, 0, 0, 369, - 370, 597, 594, 0, 0, 599, 0, 561, 0, 0, - 0, 0, 0, 0, 0, 0, 629, 42, 630, 0, - 0, 0, 0, 621, 623, 624, 629, 0, 610, 0, - 0, 448, 0, 0, 376, 39, 392, 388, 0, 0, - 0, 438, 0, 0, 0, 0, 0, 0, 428, 0, - 0, 431, 0, 0, 0, 0, 422, 0, 0, 0, - 443, 914, 424, 0, 426, 427, 448, 0, 448, 55, - 448, 57, 0, 442, 653, 61, 0, 0, 66, 67, - 654, 655, 656, 657, 0, 90, 221, 223, 226, 227, - 228, 94, 95, 96, 0, 0, 208, 0, 0, 202, - 202, 0, 200, 201, 92, 162, 160, 0, 157, 156, - 102, 0, 168, 168, 125, 126, 171, 0, 171, 171, - 171, 0, 0, 119, 120, 121, 113, 0, 114, 115, - 116, 0, 117, 0, 0, 997, 79, 669, 80, 996, - 0, 0, 682, 235, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 0, 81, 239, 241, 240, 244, - 0, 0, 0, 266, 997, 270, 311, 311, 293, 312, - 313, 318, 300, 328, 473, 475, 477, 464, 485, 468, - 0, 465, 0, 0, 459, 527, 0, 0, 371, 0, - 617, 629, 531, 532, 0, 0, 0, 0, 0, 568, - 0, 0, 569, 0, 617, 0, 595, 0, 0, 543, - 0, 562, 0, 0, 563, 564, 565, 566, 567, 35, - 0, 627, 628, 620, 34, 0, 664, 665, 611, 612, - 613, 0, 385, 396, 377, 0, 640, 0, 0, 633, - 0, 0, 448, 648, 0, 398, 417, 419, 0, 414, - 429, 430, 432, 0, 434, 0, 436, 437, 402, 403, - 404, 0, 405, 0, 0, 0, 0, 425, 617, 448, - 50, 51, 0, 64, 65, 0, 0, 71, 172, 173, - 0, 224, 0, 0, 0, 190, 202, 202, 193, 203, - 194, 0, 164, 0, 161, 98, 158, 0, 171, 171, - 127, 0, 128, 129, 130, 0, 146, 0, 0, 0, - 0, 691, 78, 229, 996, 246, 247, 248, 249, 250, - 251, 252, 253, 254, 255, 256, 257, 258, 259, 996, - 0, 996, 683, 684, 685, 686, 0, 84, 0, 0, - 0, 0, 0, 269, 314, 314, 466, 0, 486, 469, - 528, 529, 0, 601, 625, 37, 0, 148, 148, 580, - 148, 152, 583, 148, 585, 148, 588, 0, 0, 0, - 0, 0, 0, 0, 592, 542, 598, 0, 600, 0, - 0, 631, 36, 615, 0, 449, 389, 43, 0, 640, - 632, 642, 644, 0, 0, 636, 0, 409, 617, 0, - 0, 411, 418, 0, 0, 412, 0, 413, 433, 435, - -2, 0, 0, 0, 0, 625, 49, 68, 69, 70, - 222, 225, 0, 204, 148, 207, 191, 192, 0, 166, - 0, 163, 149, 123, 124, 169, 170, 168, 0, 168, - 0, 153, 0, 997, 230, 231, 232, 233, 0, 238, - 0, 82, 83, 0, 0, 243, 267, 287, 292, 470, - 530, 629, 533, 577, 168, 581, 582, 584, 586, 587, - 589, 535, 534, 0, 0, 0, 0, 0, 625, 0, - 596, 0, 0, 40, 0, 0, 0, 44, 0, 645, - 0, 0, 0, 59, 0, 625, 649, 650, 415, 0, - 420, 0, 0, 0, 423, 48, 182, 0, 206, 0, - 407, 174, 167, 0, 171, 147, 171, 0, 0, 76, - 0, 85, 86, 0, 0, 0, 38, 578, 579, 0, - 0, 0, 0, 570, 0, 593, 0, 0, 616, 614, - 0, 643, 0, 635, 638, 637, 410, 47, 0, 0, - 445, 0, 0, 443, 181, 183, 0, 188, 0, 205, - 0, 0, 179, 0, 176, 178, 165, 136, 137, 151, - 154, 0, 0, 0, 0, 245, 536, 538, 537, 539, - 0, 0, 0, 541, 558, 559, 0, 634, 0, 416, - 444, 446, 447, 406, 184, 185, 0, 189, 187, 0, - 408, 97, 0, 175, 177, 0, 261, 0, 87, 88, - 81, 540, 0, 0, 0, 641, 639, 186, 0, 180, - 260, 0, 0, 84, 571, 0, 574, 0, 262, 0, - 242, 572, 0, 0, 0, 209, 0, 0, 210, 211, - 0, 0, 573, 212, 0, 0, 0, 0, 0, 213, - 215, 216, 0, 0, 214, 263, 264, 217, 218, 219, + 21, 22, 23, 24, 25, 26, 27, 28, 624, 0, + 365, 365, 365, 365, 365, 365, 365, 0, 694, 677, + 0, 0, 0, 0, -2, 330, 331, 0, 333, -2, + 0, 0, 342, 1007, 1007, 0, 0, 1007, 0, 1005, + 47, 48, 348, 349, 350, 1, 3, 0, 369, 632, + 0, 0, -2, 367, 0, 0, 677, 677, 0, 0, + 76, 77, 0, 0, 0, 990, 0, 675, 675, 675, + 695, 696, 699, 700, 30, 31, 32, 826, 827, 828, + 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, + 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, + 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, + 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, + 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, + 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, + 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, + 899, 900, 901, 902, 903, 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, 991, 992, 993, 994, 995, 996, 997, 998, 999, + 1000, 1001, 1002, 1003, 1004, 0, 0, 0, 0, 0, + 678, 0, 673, 0, 673, 673, 673, 0, 276, 447, + 703, 704, 990, 0, 0, 0, 321, 0, 324, 324, + 324, 290, 0, 292, 1008, 0, 1008, 0, 299, 0, + 0, 305, 321, 1008, 313, 327, 328, 315, 310, 311, + 329, 332, 0, 337, 340, 0, 355, 0, 867, 347, + 360, 361, 1007, 1007, 364, 33, 498, 457, 0, 463, + 465, 0, 500, 501, 502, 503, 504, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 530, 531, 532, + 533, 609, 610, 611, 612, 613, 614, 615, 616, 467, + 468, 606, 0, 654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 597, 0, 567, 567, 567, 567, 567, + 567, 567, 567, 0, 0, 0, 0, 0, 0, 0, + -2, -2, 624, 43, 0, 365, 370, 371, 636, 0, + 0, 624, 1006, 0, 0, -2, -2, 381, 387, 388, + 389, 390, 366, 0, 393, 397, 0, 0, 0, 0, + 0, 0, 0, 56, 58, 447, 62, 0, 978, 658, + -2, -2, 0, 0, 701, 702, -2, 839, -2, 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, 740, 741, 742, 743, 744, 745, 746, 747, + 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, + 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, + 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, + 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, + 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, + 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, + 818, 819, 820, 821, 822, 823, 824, 825, 0, 0, + 95, 0, 93, 0, 1008, 0, 0, 0, 0, 0, + 0, 1008, 1008, 1008, 0, 0, 0, 0, 267, 0, + 0, 0, 0, 0, 0, 0, 275, 0, 277, 1008, + 321, 280, 0, 0, 1008, 1008, 1008, 0, 1008, 1008, + 287, 0, 288, 289, 0, 197, 198, 199, 293, 1009, + 1010, 1008, 1008, 295, 0, 318, 316, 317, 308, 309, + 0, 324, 302, 303, 306, 307, 338, 341, 358, 356, + 357, 359, 351, 352, 353, 354, 0, 362, 363, 0, + 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 485, 486, 487, 488, 489, 490, + 491, 464, 0, 478, 0, 0, 0, 520, 521, 522, + 523, 524, 525, 526, 527, 528, 0, 378, 0, 0, + 0, 624, 0, 0, 0, 0, 0, 0, 0, 375, + 0, 598, 0, 551, 559, 0, 552, 560, 553, 561, + 554, 0, 555, 562, 556, 563, 557, 558, 564, 0, + 0, 0, 378, 378, 0, 0, 632, 0, 380, 34, + 0, 0, 633, 625, 626, 629, 632, 0, 402, 391, + 382, 385, 386, 368, 0, 394, 398, 0, 400, 401, + 0, 0, 60, 0, 446, 0, 404, 406, 407, 408, + 428, 0, 430, -2, 0, 0, 0, 54, 55, 0, + 0, 0, 0, 978, 664, 0, 64, 65, 0, 0, + 0, 173, 668, 669, 670, 666, 222, 0, 0, 161, + 157, 101, 102, 103, 150, 105, 150, 150, 150, 150, + 170, 170, 170, 170, 133, 134, 135, 136, 137, 0, + 0, 120, 150, 150, 150, 124, 140, 141, 142, 143, + 144, 145, 146, 147, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 152, 152, 152, 154, 154, 697, 79, + 0, 1008, 0, 1008, 91, 0, 236, 238, 239, 0, + 0, 0, 0, 0, 0, 0, 0, 270, 674, 0, + 1008, 273, 274, 448, 705, 706, 278, 279, 322, 323, + 281, 282, 283, 284, 285, 286, 325, 0, 200, 201, + 294, 298, 0, 321, 0, 0, 300, 301, 0, 0, + 339, 343, 344, 345, 346, 499, 458, 459, 460, 462, + 479, 0, 481, 483, 469, 470, 494, 495, 496, 0, + 0, 0, 0, 492, 474, 0, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 514, 515, 516, 519, 582, + 583, 0, 517, 518, 529, 0, 0, 0, 379, 607, + 0, -2, 0, 497, 653, 632, 0, 0, 0, 0, + 502, 609, 0, 502, 609, 0, 0, 0, 376, 377, + 604, 601, 0, 0, 606, 0, 568, 0, 0, 0, + 0, 0, 0, 0, 0, 636, 44, 637, 0, 0, + 0, 0, 628, 630, 631, 636, 0, 617, 0, 0, + 455, 0, 0, 383, 40, 399, 395, 0, 455, 0, + 0, 445, 0, 0, 0, 0, 0, 0, 435, 0, + 0, 438, 0, 0, 0, 0, 429, 0, 0, 0, + 450, 922, 431, 0, 433, 434, 455, 0, 455, 57, + 455, 59, 0, 449, 659, 63, 0, 0, 68, 69, + 660, 661, 662, 663, 0, 92, 223, 225, 228, 229, + 230, 96, 97, 98, 0, 0, 210, 0, 0, 204, + 204, 0, 202, 203, 94, 164, 162, 0, 159, 158, + 104, 0, 170, 170, 127, 128, 173, 0, 173, 173, + 173, 0, 0, 121, 122, 123, 115, 0, 116, 117, + 118, 0, 119, 0, 0, 1008, 81, 676, 82, 1007, + 0, 0, 689, 237, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 0, 83, 241, 243, 242, 246, + 0, 0, 0, 268, 1008, 272, 318, 318, 297, 319, + 320, 304, 335, 480, 482, 484, 471, 492, 475, 0, + 472, 0, 0, 466, 534, 0, 0, 378, 0, 624, + 636, 538, 539, 0, 0, 0, 0, 0, 575, 0, + 0, 576, 0, 624, 0, 602, 0, 0, 550, 0, + 569, 0, 0, 570, 571, 572, 573, 574, 36, 0, + 634, 635, 627, 35, 0, 671, 672, 618, 619, 620, + 0, 392, 403, 384, 0, 632, 647, 0, 0, 640, + 0, 0, 455, 655, 0, 405, 424, 426, 0, 421, + 436, 437, 439, 0, 441, 0, 443, 444, 409, 410, + 411, 0, 412, 0, 0, 0, 0, 432, 624, 455, + 52, 53, 0, 66, 67, 0, 0, 73, 174, 175, + 0, 226, 0, 0, 0, 192, 204, 204, 195, 205, + 196, 0, 166, 0, 163, 100, 160, 0, 173, 173, + 129, 0, 130, 131, 132, 0, 148, 0, 0, 0, + 0, 698, 80, 231, 1007, 248, 249, 250, 251, 252, + 253, 254, 255, 256, 257, 258, 259, 260, 261, 1007, + 0, 1007, 690, 691, 692, 693, 0, 86, 0, 0, + 0, 0, 0, 271, 321, 321, 473, 0, 493, 476, + 535, 536, 0, 608, 632, 38, 0, 150, 150, 587, + 150, 154, 590, 150, 592, 150, 595, 0, 0, 0, + 0, 0, 0, 0, 599, 549, 605, 0, 607, 0, + 0, 638, 37, 622, 0, 456, 396, 41, 45, 0, + 647, 639, 649, 651, 0, 0, 643, 0, 416, 624, + 0, 0, 418, 425, 0, 0, 419, 0, 420, 440, + 442, -2, 0, 0, 0, 0, 632, 51, 70, 71, + 72, 224, 227, 0, 206, 150, 209, 193, 194, 0, + 168, 0, 165, 151, 125, 126, 171, 172, 170, 0, + 170, 0, 155, 0, 1008, 232, 233, 234, 235, 0, + 240, 0, 84, 85, 0, 0, 245, 269, 291, 296, + 477, 537, 636, 540, 584, 170, 588, 589, 591, 593, + 594, 596, 542, 541, 0, 0, 0, 0, 0, 632, + 0, 603, 0, 0, 42, 0, 0, 0, 46, 0, + 652, 0, 0, 0, 61, 0, 632, 656, 657, 422, + 0, 427, 0, 0, 0, 430, 50, 184, 0, 208, + 0, 414, 176, 169, 0, 173, 149, 173, 0, 0, + 78, 0, 87, 88, 0, 0, 0, 39, 585, 586, + 0, 0, 0, 0, 577, 0, 600, 0, 0, 623, + 621, 0, 650, 0, 642, 645, 644, 417, 49, 0, + 0, 452, 0, 0, 450, 183, 185, 0, 190, 0, + 207, 0, 0, 181, 0, 178, 180, 167, 138, 139, + 153, 156, 0, 0, 0, 0, 247, 543, 545, 544, + 546, 0, 0, 0, 548, 565, 566, 0, 641, 0, + 423, 451, 453, 454, 413, 186, 187, 0, 191, 189, + 0, 415, 99, 0, 177, 179, 0, 263, 0, 89, + 90, 83, 547, 0, 0, 0, 648, 646, 188, 0, + 182, 262, 0, 0, 86, 578, 0, 581, 0, 264, + 0, 244, 579, 0, 0, 0, 211, 0, 0, 212, + 213, 0, 0, 580, 214, 0, 0, 0, 0, 0, + 215, 217, 218, 0, 0, 216, 265, 266, 219, 220, + 221, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 81, 3, 3, 3, 108, 100, 3, - 57, 59, 105, 103, 58, 104, 120, 106, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 364, - 89, 88, 90, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 82, 3, 3, 3, 109, 101, 3, + 58, 60, 106, 104, 59, 105, 121, 107, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 369, + 90, 89, 91, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 110, 3, 3, 3, 3, 3, @@ -3444,7 +3705,8 @@ var yyTok3 = [...]int{ 57670, 345, 57671, 346, 57672, 347, 57673, 348, 57674, 349, 57675, 350, 57676, 351, 57677, 352, 57678, 353, 57679, 354, 57680, 355, 57681, 356, 57682, 357, 57683, 358, 57684, 359, - 57685, 360, 57686, 361, 57687, 362, 57688, 363, 0, + 57685, 360, 57686, 361, 57687, 362, 57688, 363, 57689, 364, + 57690, 365, 57691, 366, 57692, 367, 57693, 368, 0, } var yyErrorMessages = [...]struct { @@ -3786,59 +4048,59 @@ yydefault: case 1: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:337 +//line sql.y:339 { setParseTree(yylex, yyDollar[1].statement) } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:342 +//line sql.y:344 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:343 +//line sql.y:345 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:347 +//line sql.y:349 { yyVAL.statement = yyDollar[1].selStmt } case 28: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:374 +//line sql.y:377 { setParseTree(yylex, nil) } case 29: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:380 +//line sql.y:383 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), NoAt) } case 30: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:384 +//line sql.y:387 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), SingleAt) } case 31: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:388 +//line sql.y:391 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), DoubleAt) } case 32: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:394 +//line sql.y:397 { yyVAL.statement = &OtherAdmin{} } case 33: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:400 +//line sql.y:403 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3848,25 +4110,25 @@ yydefault: } case 34: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:408 +//line sql.y:411 { yyVAL.selStmt = &Union{FirstStatement: &ParenSelect{Select: yyDollar[2].selStmt}, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } case 35: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:412 +//line sql.y:415 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } case 36: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:416 +//line sql.y:419 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), SelectExprs{Nextval{Expr: yyDollar[5].expr}}, []string{yyDollar[3].str} /*options*/, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/) } case 37: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:439 +//line sql.y:442 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3876,37 +4138,43 @@ yydefault: } case 38: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:447 +//line sql.y:450 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } case 39: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:453 +//line sql.y:456 { yyVAL.statement = &Stream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName} } - case 40: + case 41: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:462 + { + yyVAL.statement = &VStream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName, Where: NewWhere(WhereStr, yyDollar[6].expr), Limit: yyDollar[7].limit} + } + case 42: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:461 +//line sql.y:470 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), yyDollar[4].selectExprs /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].tableExprs /*from*/, NewWhere(WhereStr, yyDollar[6].expr), GroupBy(yyDollar[7].exprs), NewWhere(HavingStr, yyDollar[8].expr)) } case 41: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:467 +//line sql.y:476 { yyVAL.selStmt = yyDollar[1].selStmt } case 42: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:471 +//line sql.y:480 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 43: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:478 +//line sql.y:487 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].ins @@ -3920,7 +4188,7 @@ yydefault: } case 44: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:490 +//line sql.y:499 { cols := make(Columns, 0, len(yyDollar[7].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[8].updateExprs)) @@ -3932,186 +4200,186 @@ yydefault: } case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:502 +//line sql.y:511 { yyVAL.str = InsertStr } case 46: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:506 +//line sql.y:515 { yyVAL.str = ReplaceStr } case 47: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:512 +//line sql.y:521 { yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), Ignore: yyDollar[3].str, TableExprs: yyDollar[4].tableExprs, Exprs: yyDollar[6].updateExprs, Where: NewWhere(WhereStr, yyDollar[7].expr), OrderBy: yyDollar[8].orderBy, Limit: yyDollar[9].limit} } case 48: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:518 +//line sql.y:527 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[4].tableName}}, Partitions: yyDollar[5].partitions, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} } case 49: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:522 +//line sql.y:531 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableNames, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr)} } case 50: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:526 +//line sql.y:535 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 51: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:530 +//line sql.y:539 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 52: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:535 +//line sql.y:544 { } case 53: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:536 +//line sql.y:545 { } case 54: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:540 +//line sql.y:549 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 55: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:544 +//line sql.y:553 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } case 56: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:550 +//line sql.y:559 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 57: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:554 +//line sql.y:563 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } case 58: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:559 +//line sql.y:568 { yyVAL.partitions = nil } case 59: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:563 +//line sql.y:572 { yyVAL.partitions = yyDollar[3].partitions } case 60: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:569 +//line sql.y:578 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } case 61: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:575 +//line sql.y:584 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Characteristics: yyDollar[5].characteristics} } case 62: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:579 +//line sql.y:588 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Characteristics: yyDollar[4].characteristics} } case 63: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:585 +//line sql.y:594 { yyVAL.characteristics = []Characteristic{yyDollar[1].characteristic} } case 64: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:589 +//line sql.y:598 { yyVAL.characteristics = append(yyVAL.characteristics, yyDollar[3].characteristic) } case 65: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:595 +//line sql.y:604 { yyVAL.characteristic = &IsolationLevel{Level: string(yyDollar[3].str)} } case 66: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:599 +//line sql.y:608 { yyVAL.characteristic = &AccessMode{Mode: TxReadWrite} } case 67: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:603 +//line sql.y:612 { yyVAL.characteristic = &AccessMode{Mode: TxReadOnly} } case 68: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:609 +//line sql.y:618 { yyVAL.str = RepeatableRead } case 69: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:613 +//line sql.y:622 { yyVAL.str = ReadCommitted } case 70: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:617 +//line sql.y:626 { yyVAL.str = ReadUncommitted } case 71: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:621 +//line sql.y:630 { yyVAL.str = Serializable } case 72: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:627 +//line sql.y:636 { yyVAL.str = SessionStr } case 73: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:631 +//line sql.y:640 { yyVAL.str = GlobalStr } case 74: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:637 +//line sql.y:646 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } case 75: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:642 +//line sql.y:651 { // Create table [name] like [name] yyDollar[1].ddl.OptLike = yyDollar[2].optLike @@ -4119,139 +4387,139 @@ yydefault: } case 76: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:648 +//line sql.y:657 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName} } case 77: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:653 +//line sql.y:662 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[3].tableName.ToViewName()} } case 78: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:657 +//line sql.y:666 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[5].tableName.ToViewName()} } case 79: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:661 +//line sql.y:670 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 80: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:665 +//line sql.y:674 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 81: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:670 +//line sql.y:679 { yyVAL.colIdent = NewColIdent("") } case 82: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:674 +//line sql.y:683 { yyVAL.colIdent = yyDollar[2].colIdent } case 83: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:680 +//line sql.y:689 { yyVAL.colIdent = yyDollar[1].colIdent } case 84: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:685 +//line sql.y:694 { var v []VindexParam yyVAL.vindexParams = v } case 85: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:690 +//line sql.y:699 { yyVAL.vindexParams = yyDollar[2].vindexParams } case 86: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:696 +//line sql.y:705 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } case 87: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:701 +//line sql.y:710 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } case 88: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:707 +//line sql.y:716 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } case 89: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:713 +//line sql.y:722 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } case 90: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:720 +//line sql.y:729 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } case 91: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:727 +//line sql.y:736 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } case 92: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:731 +//line sql.y:740 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } case 93: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:737 +//line sql.y:746 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } case 94: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:742 +//line sql.y:751 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } case 95: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:746 +//line sql.y:755 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } case 96: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:750 +//line sql.y:759 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } case 97: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:756 +//line sql.y:765 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -4263,7 +4531,7 @@ yydefault: } case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:767 +//line sql.y:776 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal @@ -4271,14 +4539,14 @@ yydefault: } case 102: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:778 +//line sql.y:787 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].sqlVal } case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:783 +//line sql.y:792 { yyVAL.columnType = yyDollar[1].columnType } @@ -4296,57 +4564,57 @@ yydefault: } case 106: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:797 +//line sql.y:798 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 107: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:801 +//line sql.y:802 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 108: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:805 +//line sql.y:806 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 109: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:809 +//line sql.y:810 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 110: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:813 +//line sql.y:814 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 111: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:817 +//line sql.y:818 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 112: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:821 +//line sql.y:822 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 113: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:827 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:826 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 114: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:833 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:830 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4354,7 +4622,7 @@ yydefault: } case 115: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:839 +//line sql.y:836 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4362,7 +4630,7 @@ yydefault: } case 116: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:845 +//line sql.y:842 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4370,196 +4638,196 @@ yydefault: } case 117: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:851 +//line sql.y:848 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 118: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:859 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:854 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 119: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:863 +//line sql.y:860 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 120: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:867 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:868 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 121: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:871 +//line sql.y:872 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 122: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:875 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:876 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 123: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:881 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:880 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 124: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:885 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:884 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 125: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:889 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:890 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 126: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:893 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:894 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 127: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:897 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:898 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 128: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:901 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:902 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 129: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:905 +//line sql.y:906 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 130: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:909 +//line sql.y:910 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 131: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:913 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:914 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 132: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:917 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:918 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:921 +//line sql.y:922 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:925 +//line sql.y:926 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:929 +//line sql.y:930 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 136: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:933 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:934 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 137: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:938 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 138: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:944 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:942 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 139: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:948 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:947 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:952 +//line sql.y:953 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 141: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:956 +//line sql.y:957 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 142: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:960 +//line sql.y:961 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 143: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:964 +//line sql.y:965 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 144: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:968 +//line sql.y:969 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 145: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:972 +//line sql.y:973 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 146: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:978 +//line sql.y:977 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } case 147: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:983 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:981 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } case 148: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:988 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:987 { yyVAL.sqlVal = nil } @@ -4576,7 +4844,7 @@ yydefault: yyVAL.LengthScaleOption = LengthScaleOption{} } case 151: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1001 { yyVAL.LengthScaleOption = LengthScaleOption{ @@ -4586,21 +4854,21 @@ yydefault: } case 152: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1009 +//line sql.y:1006 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 153: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1013 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1010 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } case 154: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1019 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1018 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4608,14 +4876,14 @@ yydefault: } } case 155: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1027 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1022 { yyVAL.boolVal = BoolVal(false) } case 156: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1031 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1028 { yyVAL.boolVal = BoolVal(true) } @@ -4633,484 +4901,496 @@ yydefault: } case 159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1046 +//line sql.y:1045 { yyVAL.boolVal = BoolVal(false) } case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1050 +//line sql.y:1049 { yyVAL.boolVal = BoolVal(false) } case 161: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1055 + { + yyVAL.boolean = false + } + case 162: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1059 + { + yyVAL.boolean = false + } + case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1054 +//line sql.y:1063 { yyVAL.boolVal = BoolVal(true) } case 162: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1059 +//line sql.y:1068 { yyVAL.optVal = nil } case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1063 +//line sql.y:1072 { yyVAL.optVal = yyDollar[2].expr } case 164: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1068 +//line sql.y:1077 { yyVAL.optVal = nil } case 165: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1072 +//line sql.y:1081 { yyVAL.optVal = yyDollar[3].expr } case 166: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1077 +//line sql.y:1086 { yyVAL.boolVal = BoolVal(false) } case 167: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1081 +//line sql.y:1090 { yyVAL.boolVal = BoolVal(true) } case 168: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1086 +//line sql.y:1095 { yyVAL.str = "" } case 169: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1090 +//line sql.y:1099 { yyVAL.str = string(yyDollar[3].colIdent.String()) } case 170: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1094 +//line sql.y:1103 { yyVAL.str = string(yyDollar[3].bytes) } case 171: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1099 +//line sql.y:1108 { yyVAL.str = "" } case 172: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1103 +//line sql.y:1112 { yyVAL.str = string(yyDollar[2].colIdent.String()) } case 173: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1107 +//line sql.y:1116 { yyVAL.str = string(yyDollar[2].bytes) } case 174: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1112 +//line sql.y:1121 { yyVAL.colKeyOpt = colKeyNone } case 175: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1125 { yyVAL.colKeyOpt = colKeyPrimary } case 176: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1120 +//line sql.y:1129 { yyVAL.colKeyOpt = colKey } case 177: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1124 +//line sql.y:1133 { yyVAL.colKeyOpt = colKeyUniqueKey } case 178: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1128 +//line sql.y:1137 { yyVAL.colKeyOpt = colKeyUnique } case 179: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1133 +//line sql.y:1142 { yyVAL.sqlVal = nil } case 180: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1137 +//line sql.y:1146 { yyVAL.sqlVal = NewStrVal(yyDollar[2].bytes) } case 181: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1143 +//line sql.y:1152 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } case 182: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1147 +//line sql.y:1156 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } case 183: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1153 +//line sql.y:1162 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1157 +//line sql.y:1166 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } case 185: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1163 +//line sql.y:1172 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].colIdent.String())} } case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1167 +//line sql.y:1176 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } case 187: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1172 +//line sql.y:1181 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } case 188: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1178 +//line sql.y:1187 { yyVAL.str = "" } case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1182 +//line sql.y:1191 { yyVAL.str = string(yyDollar[1].bytes) } case 190: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1188 +//line sql.y:1197 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } case 191: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1192 +//line sql.y:1201 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } case 192: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1196 +//line sql.y:1205 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } case 193: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1200 +//line sql.y:1209 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } case 194: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1204 +//line sql.y:1213 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } case 195: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1210 +//line sql.y:1219 { yyVAL.str = string(yyDollar[1].bytes) } case 196: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1214 +//line sql.y:1223 { yyVAL.str = string(yyDollar[1].bytes) } case 197: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1218 +//line sql.y:1227 { yyVAL.str = string(yyDollar[1].bytes) } case 198: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1225 +//line sql.y:1234 { yyVAL.str = string(yyDollar[1].bytes) } case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1229 +//line sql.y:1238 { yyVAL.str = string(yyDollar[1].bytes) } case 200: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1235 +//line sql.y:1244 { yyVAL.str = string(yyDollar[1].bytes) } case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1239 +//line sql.y:1248 { yyVAL.str = string(yyDollar[1].bytes) } case 202: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1244 +//line sql.y:1253 { yyVAL.str = "" } case 203: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1248 +//line sql.y:1257 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 204: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1254 +//line sql.y:1263 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } case 205: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1258 +//line sql.y:1267 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } case 206: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1264 +//line sql.y:1273 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].sqlVal} } case 207: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1270 +//line sql.y:1279 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].colIdent.String()), Details: yyDollar[3].constraintInfo} } case 208: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1274 +//line sql.y:1283 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } case 209: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1281 +//line sql.y:1290 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } case 210: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1285 +//line sql.y:1294 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } case 211: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1289 +//line sql.y:1298 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } case 212: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1293 +//line sql.y:1302 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } case 213: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1299 +//line sql.y:1308 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 214: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1305 +//line sql.y:1314 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 215: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1311 +//line sql.y:1320 { yyVAL.ReferenceAction = Restrict } case 216: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1315 +//line sql.y:1324 { yyVAL.ReferenceAction = Cascade } case 217: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1319 +//line sql.y:1328 { yyVAL.ReferenceAction = NoAction } case 218: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1323 +//line sql.y:1332 { yyVAL.ReferenceAction = SetDefault } case 219: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1327 +//line sql.y:1336 { yyVAL.ReferenceAction = SetNull } case 220: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1332 +//line sql.y:1341 { yyVAL.str = "" } case 221: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1336 +//line sql.y:1345 { yyVAL.str = " " + string(yyDollar[1].str) } case 222: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1340 +//line sql.y:1349 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } case 223: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1348 +//line sql.y:1357 { yyVAL.str = yyDollar[1].str } case 224: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1352 +//line sql.y:1361 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } case 225: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1356 +//line sql.y:1365 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } case 226: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1362 +//line sql.y:1371 { yyVAL.str = yyDollar[1].colIdent.String() } case 227: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1366 +//line sql.y:1375 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } case 228: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1370 +//line sql.y:1379 { yyVAL.str = string(yyDollar[1].bytes) } case 229: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1376 +//line sql.y:1385 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 230: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1380 +//line sql.y:1389 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 231: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1384 +//line sql.y:1393 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 232: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1388 +//line sql.y:1397 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } case 233: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1393 +//line sql.y:1402 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 234: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1398 +//line sql.y:1407 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} } case 235: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1402 +//line sql.y:1411 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } case 236: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1406 +//line sql.y:1415 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 237: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1410 +//line sql.y:1419 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 238: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1414 +//line sql.y:1423 { yyVAL.statement = &DDL{ Action: CreateVindexStr, @@ -5124,7 +5404,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1426 +//line sql.y:1435 { yyVAL.statement = &DDL{ Action: DropVindexStr, @@ -5136,19 +5416,19 @@ yydefault: } case 240: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1436 +//line sql.y:1445 { yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} } case 241: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1440 +//line sql.y:1449 { yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} } case 242: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1444 +//line sql.y:1453 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -5163,7 +5443,7 @@ yydefault: } case 243: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1457 +//line sql.y:1466 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -5175,13 +5455,13 @@ yydefault: } case 244: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1467 +//line sql.y:1476 { yyVAL.statement = &DDL{Action: AddSequenceStr, Table: yyDollar[5].tableName} } case 245: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:1471 +//line sql.y:1480 { yyVAL.statement = &DDL{ Action: AddAutoIncStr, @@ -5194,49 +5474,49 @@ yydefault: } case 260: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1500 +//line sql.y:1509 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1506 +//line sql.y:1515 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } case 262: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1510 +//line sql.y:1519 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } case 263: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1516 +//line sql.y:1525 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } case 264: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1520 +//line sql.y:1529 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } case 265: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1526 +//line sql.y:1535 { yyVAL.statement = yyDollar[3].ddl } case 266: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1532 +//line sql.y:1541 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } case 267: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1536 +//line sql.y:1545 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) @@ -5244,7 +5524,7 @@ yydefault: } case 268: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1544 +//line sql.y:1553 { var exists bool if yyDollar[3].byt != 0 { @@ -5254,14 +5534,14 @@ yydefault: } case 269: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1552 +//line sql.y:1557 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } case 270: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1557 +//line sql.y:1562 { var exists bool if yyDollar[3].byt != 0 { @@ -5271,143 +5551,158 @@ yydefault: } case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1565 +//line sql.y:1566 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 272: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1569 +//line sql.y:1570 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 273: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1575 +//line sql.y:1576 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } case 274: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1579 +//line sql.y:1580 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } case 275: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1584 +//line sql.y:1585 { yyVAL.statement = &OtherRead{} } case 276: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1590 +//line sql.y:1591 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1595 +//line sql.y:1596 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt} } case 278: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1600 +//line sql.y:1601 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } case 279: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1605 +//line sql.y:1606 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 280: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1610 +//line sql.y:1611 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 281: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1614 +//line sql.y:1615 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 282: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1618 +//line sql.y:1619 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName} } case 283: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1622 +//line sql.y:1623 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 284: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1626 +//line sql.y:1627 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 285: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1630 +//line sql.y:1631 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} + } + case 288: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1636 + { + showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} + } + case 289: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1641 + { + showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } - case 286: + case 290: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1634 +//line sql.y:1646 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 287: + case 291: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1638 +//line sql.y:1650 { showTablesOpt := &ShowTablesOpt{DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Extended: string(yyDollar[2].str), Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } - case 288: + case 292: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1643 +//line sql.y:1655 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 289: + case 293: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1647 +//line sql.y:1659 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 290: + case 294: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1651 +//line sql.y:1663 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 291: + case 295: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1655 +//line sql.y:1667 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 292: + case 296: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1659 +//line sql.y:1671 { showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } - case 293: + case 297: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1664 +//line sql.y:1676 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -5417,845 +5712,866 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 294: + case 298: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1674 +//line sql.y:1686 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 295: + case 299: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1678 +//line sql.y:1690 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 296: + case 300: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1682 +//line sql.y:1694 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: yyDollar[4].expr} } - case 297: + case 301: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1686 +//line sql.y:1698 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Scope: string(yyDollar[2].bytes), Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt} } - case 298: + case 302: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1691 +//line sql.y:1703 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 299: + case 303: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1695 +//line sql.y:1707 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 300: + case 304: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1699 +//line sql.y:1711 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } - case 301: + case 305: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1703 +//line sql.y:1715 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 302: + case 306: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1720 + { + // This should probably be a different type (ShowVitessTopoOpt), but + // just getting the thing working for now + showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} + yyVAL.statement = &Show{Type: yyDollar[2].str, ShowTablesOpt: showTablesOpt} + } + case 307: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1717 +//line sql.y:1734 { yyVAL.statement = &Show{Type: string(yyDollar[2].colIdent.String())} } - case 303: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1723 +//line sql.y:1740 { yyVAL.str = string(yyDollar[1].bytes) } - case 304: + case 309: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1727 +//line sql.y:1744 { yyVAL.str = string(yyDollar[1].bytes) } - case 305: + case 310: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1750 + { + yyVAL.str = string(yyDollar[1].bytes) + } + case 311: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1754 + { + yyVAL.str = string(yyDollar[1].bytes) + } + case 312: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1733 +//line sql.y:1760 { yyVAL.str = "" } - case 306: + case 313: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1737 +//line sql.y:1764 { yyVAL.str = "extended " } - case 307: + case 314: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1743 +//line sql.y:1770 { yyVAL.str = "" } - case 308: + case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1747 +//line sql.y:1774 { yyVAL.str = "full " } - case 309: + case 316: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1753 +//line sql.y:1780 { yyVAL.str = string(yyDollar[1].bytes) } - case 310: + case 317: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1757 +//line sql.y:1784 { yyVAL.str = string(yyDollar[1].bytes) } - case 311: + case 318: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1763 +//line sql.y:1790 { yyVAL.str = "" } - case 312: + case 319: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1767 +//line sql.y:1794 { yyVAL.str = yyDollar[2].tableIdent.v } - case 313: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1771 +//line sql.y:1798 { yyVAL.str = yyDollar[2].tableIdent.v } - case 314: + case 321: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1777 +//line sql.y:1804 { yyVAL.showFilter = nil } - case 315: + case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1781 +//line sql.y:1808 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 316: + case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1785 +//line sql.y:1812 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 317: + case 324: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1791 +//line sql.y:1818 { yyVAL.showFilter = nil } - case 318: + case 325: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1795 +//line sql.y:1822 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 319: + case 326: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1801 +//line sql.y:1828 { yyVAL.str = "" } - case 320: + case 327: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1832 { yyVAL.str = SessionStr } - case 321: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1809 +//line sql.y:1836 { yyVAL.str = GlobalStr } - case 322: + case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1815 +//line sql.y:1842 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 323: + case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1819 +//line sql.y:1846 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 324: + case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1825 +//line sql.y:1852 { yyVAL.statement = &Begin{} } - case 325: + case 332: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1829 +//line sql.y:1856 { yyVAL.statement = &Begin{} } - case 326: + case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1835 +//line sql.y:1862 { yyVAL.statement = &Commit{} } - case 327: + case 334: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1841 +//line sql.y:1868 { yyVAL.statement = &Rollback{} } - case 328: + case 335: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1845 +//line sql.y:1872 { yyVAL.statement = &SRollback{Name: yyDollar[5].colIdent} } - case 329: + case 336: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1850 +//line sql.y:1877 { yyVAL.empty = struct{}{} } - case 330: + case 337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1852 +//line sql.y:1879 { yyVAL.empty = struct{}{} } - case 331: + case 338: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1855 +//line sql.y:1882 { yyVAL.empty = struct{}{} } - case 332: + case 339: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1857 +//line sql.y:1884 { yyVAL.empty = struct{}{} } - case 333: + case 340: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1862 +//line sql.y:1889 { yyVAL.statement = &Savepoint{Name: yyDollar[2].colIdent} } - case 334: + case 341: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1868 +//line sql.y:1895 { yyVAL.statement = &Release{Name: yyDollar[3].colIdent} } - case 335: + case 342: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1873 +//line sql.y:1900 { yyVAL.str = "" } - case 336: + case 343: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1877 +//line sql.y:1904 { yyVAL.str = JSONStr } - case 337: + case 344: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1881 +//line sql.y:1908 { yyVAL.str = TreeStr } - case 338: + case 345: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1885 +//line sql.y:1912 { yyVAL.str = VitessStr } - case 339: + case 346: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1889 +//line sql.y:1916 { yyVAL.str = TraditionalStr } - case 340: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1893 +//line sql.y:1920 { yyVAL.str = AnalyzeStr } - case 341: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1899 +//line sql.y:1926 { yyVAL.bytes = yyDollar[1].bytes } - case 342: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1903 +//line sql.y:1930 { yyVAL.bytes = yyDollar[1].bytes } - case 343: + case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1907 +//line sql.y:1934 { yyVAL.bytes = yyDollar[1].bytes } - case 344: + case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1913 +//line sql.y:1940 { yyVAL.statement = yyDollar[1].selStmt } - case 345: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1917 +//line sql.y:1944 { yyVAL.statement = yyDollar[1].statement } - case 346: + case 353: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1921 +//line sql.y:1948 { yyVAL.statement = yyDollar[1].statement } - case 347: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1925 +//line sql.y:1952 { yyVAL.statement = yyDollar[1].statement } - case 348: + case 355: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1930 +//line sql.y:1957 { yyVAL.str = "" } - case 349: + case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1934 +//line sql.y:1961 { yyVAL.str = "" } - case 350: + case 357: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1938 +//line sql.y:1965 { yyVAL.str = "" } - case 351: + case 358: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1944 +//line sql.y:1971 { yyVAL.statement = &OtherRead{} } - case 352: + case 359: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1948 +//line sql.y:1975 { yyVAL.statement = &Explain{Type: yyDollar[2].str, Statement: yyDollar[3].statement} } - case 353: + case 360: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1954 +//line sql.y:1981 { yyVAL.statement = &OtherAdmin{} } - case 354: + case 361: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1958 +//line sql.y:1985 { yyVAL.statement = &OtherAdmin{} } - case 355: + case 362: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1962 +//line sql.y:1989 { yyVAL.statement = &OtherAdmin{} } - case 356: + case 363: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1966 +//line sql.y:1993 { yyVAL.statement = &OtherAdmin{} } - case 357: + case 364: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1972 +//line sql.y:1999 { yyVAL.statement = &DDL{Action: FlushStr} } - case 358: + case 365: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1976 +//line sql.y:2003 { setAllowComments(yylex, true) } - case 359: + case 366: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1980 +//line sql.y:2007 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 360: + case 367: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1986 +//line sql.y:2013 { yyVAL.bytes2 = nil } - case 361: + case 368: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1990 +//line sql.y:2017 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 362: + case 369: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1996 +//line sql.y:2023 { yyVAL.str = UnionStr } - case 363: + case 370: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2000 +//line sql.y:2027 { yyVAL.str = UnionAllStr } - case 364: + case 371: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2004 +//line sql.y:2031 { yyVAL.str = UnionDistinctStr } - case 365: + case 372: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2009 +//line sql.y:2036 { yyVAL.str = "" } - case 366: + case 373: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2013 +//line sql.y:2040 { yyVAL.str = SQLNoCacheStr } - case 367: + case 374: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2017 +//line sql.y:2044 { yyVAL.str = SQLCacheStr } - case 368: + case 375: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2022 +//line sql.y:2049 { yyVAL.str = "" } - case 369: + case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2026 +//line sql.y:2053 { yyVAL.str = DistinctStr } - case 370: + case 377: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2030 +//line sql.y:2057 { yyVAL.str = DistinctStr } - case 371: + case 378: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2035 +//line sql.y:2062 { yyVAL.selectExprs = nil } - case 372: + case 379: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2039 +//line sql.y:2066 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 373: + case 380: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2044 +//line sql.y:2071 { yyVAL.strs = nil } - case 374: + case 381: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2048 +//line sql.y:2075 { yyVAL.strs = []string{yyDollar[1].str} } - case 375: + case 382: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2052 +//line sql.y:2079 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 376: + case 383: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2056 +//line sql.y:2083 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 377: + case 384: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2060 +//line sql.y:2087 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 378: + case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2066 +//line sql.y:2093 { yyVAL.str = SQLNoCacheStr } - case 379: + case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2070 +//line sql.y:2097 { yyVAL.str = SQLCacheStr } - case 380: + case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2074 +//line sql.y:2101 { yyVAL.str = DistinctStr } - case 381: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2078 +//line sql.y:2105 { yyVAL.str = DistinctStr } - case 382: + case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2082 +//line sql.y:2109 { yyVAL.str = StraightJoinHint } - case 383: + case 390: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2086 +//line sql.y:2113 { yyVAL.str = SQLCalcFoundRowsStr } - case 384: + case 391: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2092 +//line sql.y:2119 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 385: + case 392: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2096 +//line sql.y:2123 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 386: + case 393: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2102 +//line sql.y:2129 { yyVAL.selectExpr = &StarExpr{} } - case 387: + case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2106 +//line sql.y:2133 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 388: + case 395: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2110 +//line sql.y:2137 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 389: + case 396: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2114 +//line sql.y:2141 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 390: + case 397: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2119 +//line sql.y:2146 { yyVAL.colIdent = ColIdent{} } - case 391: + case 398: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2123 +//line sql.y:2150 { yyVAL.colIdent = yyDollar[1].colIdent } - case 392: + case 399: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2127 +//line sql.y:2154 { yyVAL.colIdent = yyDollar[2].colIdent } - case 394: + case 401: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2134 +//line sql.y:2161 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 395: + case 402: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2139 +//line sql.y:2166 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 396: + case 403: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2143 +//line sql.y:2170 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 397: + case 404: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2149 +//line sql.y:2176 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 398: + case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2153 +//line sql.y:2180 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 401: + case 408: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2163 +//line sql.y:2190 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 402: + case 409: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2167 +//line sql.y:2194 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 403: + case 410: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2171 +//line sql.y:2198 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 404: + case 411: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2177 +//line sql.y:2204 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 405: + case 412: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2183 +//line sql.y:2210 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 406: + case 413: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2187 +//line sql.y:2214 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 407: + case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2193 +//line sql.y:2220 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 408: + case 415: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2197 +//line sql.y:2224 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 409: + case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2203 +//line sql.y:2230 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 410: + case 417: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2207 +//line sql.y:2234 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 411: + case 418: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2220 +//line sql.y:2247 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 412: + case 419: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2224 +//line sql.y:2251 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 413: + case 420: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2228 +//line sql.y:2255 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 414: + case 421: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2232 +//line sql.y:2259 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 415: + case 422: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2238 +//line sql.y:2265 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 416: + case 423: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2240 +//line sql.y:2267 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 417: + case 424: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2244 +//line sql.y:2271 { yyVAL.joinCondition = JoinCondition{} } - case 418: + case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2246 +//line sql.y:2273 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 419: + case 426: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2250 +//line sql.y:2277 { yyVAL.joinCondition = JoinCondition{} } - case 420: + case 427: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2252 +//line sql.y:2279 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 421: + case 428: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2255 +//line sql.y:2282 { yyVAL.empty = struct{}{} } - case 422: + case 429: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2257 +//line sql.y:2284 { yyVAL.empty = struct{}{} } - case 423: + case 430: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2260 +//line sql.y:2287 { yyVAL.tableIdent = NewTableIdent("") } - case 424: + case 431: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2264 +//line sql.y:2291 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 425: + case 432: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2268 +//line sql.y:2295 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 427: + case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2275 +//line sql.y:2302 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 428: + case 435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2281 +//line sql.y:2308 { yyVAL.str = JoinStr } - case 429: + case 436: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2285 +//line sql.y:2312 { yyVAL.str = JoinStr } - case 430: + case 437: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2289 +//line sql.y:2316 { yyVAL.str = JoinStr } - case 431: + case 438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2295 +//line sql.y:2322 { yyVAL.str = StraightJoinStr } - case 432: + case 439: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2301 +//line sql.y:2328 { yyVAL.str = LeftJoinStr } - case 433: + case 440: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2305 +//line sql.y:2332 { yyVAL.str = LeftJoinStr } - case 434: + case 441: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2309 +//line sql.y:2336 { yyVAL.str = RightJoinStr } - case 435: + case 442: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2313 +//line sql.y:2340 { yyVAL.str = RightJoinStr } - case 436: + case 443: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2319 +//line sql.y:2346 { yyVAL.str = NaturalJoinStr } - case 437: + case 444: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2323 +//line sql.y:2350 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -6263,489 +6579,489 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 438: + case 445: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2333 +//line sql.y:2360 { yyVAL.tableName = yyDollar[2].tableName } - case 439: + case 446: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2337 +//line sql.y:2364 { yyVAL.tableName = yyDollar[1].tableName } - case 440: + case 447: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2343 +//line sql.y:2370 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 441: + case 448: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2347 +//line sql.y:2374 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 442: + case 449: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2353 +//line sql.y:2380 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 443: + case 450: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2358 +//line sql.y:2385 { yyVAL.indexHints = nil } - case 444: + case 451: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2362 +//line sql.y:2389 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 445: + case 452: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2366 +//line sql.y:2393 { yyVAL.indexHints = &IndexHints{Type: UseStr} } - case 446: + case 453: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2370 +//line sql.y:2397 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 447: + case 454: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2374 +//line sql.y:2401 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 448: + case 455: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2379 +//line sql.y:2406 { yyVAL.expr = nil } - case 449: + case 456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2383 +//line sql.y:2410 { yyVAL.expr = yyDollar[2].expr } - case 450: + case 457: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2389 +//line sql.y:2416 { yyVAL.expr = yyDollar[1].expr } - case 451: + case 458: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2393 +//line sql.y:2420 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 452: + case 459: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2397 +//line sql.y:2424 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 453: + case 460: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2401 +//line sql.y:2428 { yyVAL.expr = &XorExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 454: + case 461: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2405 +//line sql.y:2432 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 455: + case 462: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2409 +//line sql.y:2436 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 456: + case 463: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2413 +//line sql.y:2440 { yyVAL.expr = yyDollar[1].expr } - case 457: + case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2417 +//line sql.y:2444 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 458: + case 465: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2423 +//line sql.y:2450 { yyVAL.str = "" } - case 459: + case 466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2427 +//line sql.y:2454 { yyVAL.str = string(yyDollar[2].colIdent.String()) } - case 460: + case 467: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2433 +//line sql.y:2460 { yyVAL.boolVal = BoolVal(true) } - case 461: + case 468: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2437 +//line sql.y:2464 { yyVAL.boolVal = BoolVal(false) } - case 462: + case 469: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2443 +//line sql.y:2470 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 463: + case 470: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2447 +//line sql.y:2474 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 464: + case 471: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2451 +//line sql.y:2478 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 465: + case 472: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2455 +//line sql.y:2482 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 466: + case 473: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2459 +//line sql.y:2486 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 467: + case 474: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2463 +//line sql.y:2490 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 468: + case 475: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2467 +//line sql.y:2494 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 469: + case 476: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2471 +//line sql.y:2498 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 470: + case 477: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2475 +//line sql.y:2502 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 471: + case 478: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2479 +//line sql.y:2506 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 472: + case 479: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2485 +//line sql.y:2512 { yyVAL.str = IsNullStr } - case 473: + case 480: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2489 +//line sql.y:2516 { yyVAL.str = IsNotNullStr } - case 474: + case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2493 +//line sql.y:2520 { yyVAL.str = IsTrueStr } - case 475: + case 482: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2497 +//line sql.y:2524 { yyVAL.str = IsNotTrueStr } - case 476: + case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2501 +//line sql.y:2528 { yyVAL.str = IsFalseStr } - case 477: + case 484: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2505 +//line sql.y:2532 { yyVAL.str = IsNotFalseStr } - case 478: + case 485: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2511 +//line sql.y:2538 { yyVAL.str = EqualStr } - case 479: + case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2515 +//line sql.y:2542 { yyVAL.str = LessThanStr } - case 480: + case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2519 +//line sql.y:2546 { yyVAL.str = GreaterThanStr } - case 481: + case 488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2523 +//line sql.y:2550 { yyVAL.str = LessEqualStr } - case 482: + case 489: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2527 +//line sql.y:2554 { yyVAL.str = GreaterEqualStr } - case 483: + case 490: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2531 +//line sql.y:2558 { yyVAL.str = NotEqualStr } - case 484: + case 491: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2535 +//line sql.y:2562 { yyVAL.str = NullSafeEqualStr } - case 485: + case 492: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2540 +//line sql.y:2567 { yyVAL.expr = nil } - case 486: + case 493: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2544 +//line sql.y:2571 { yyVAL.expr = yyDollar[2].expr } - case 487: + case 494: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2550 +//line sql.y:2577 { yyVAL.colTuple = yyDollar[1].valTuple } - case 488: + case 495: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2554 +//line sql.y:2581 { yyVAL.colTuple = yyDollar[1].subquery } - case 489: + case 496: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2558 +//line sql.y:2585 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 490: + case 497: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2564 +//line sql.y:2591 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 491: + case 498: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2570 +//line sql.y:2597 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 492: + case 499: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2574 +//line sql.y:2601 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 493: + case 500: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2580 +//line sql.y:2607 { yyVAL.expr = yyDollar[1].expr } - case 494: + case 501: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2584 +//line sql.y:2611 { yyVAL.expr = yyDollar[1].boolVal } - case 495: + case 502: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2588 +//line sql.y:2615 { yyVAL.expr = yyDollar[1].colName } - case 496: + case 503: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2592 +//line sql.y:2619 { yyVAL.expr = yyDollar[1].expr } - case 497: + case 504: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2596 +//line sql.y:2623 { yyVAL.expr = yyDollar[1].subquery } - case 498: + case 505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2600 +//line sql.y:2627 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 499: + case 506: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2604 +//line sql.y:2631 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 500: + case 507: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2608 +//line sql.y:2635 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 501: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2612 +//line sql.y:2639 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 502: + case 509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2616 +//line sql.y:2643 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 503: + case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2620 +//line sql.y:2647 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 504: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2624 +//line sql.y:2651 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 505: + case 512: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2628 +//line sql.y:2655 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 506: + case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2632 +//line sql.y:2659 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 507: + case 514: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2636 +//line sql.y:2663 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 508: + case 515: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2640 +//line sql.y:2667 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 509: + case 516: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2644 +//line sql.y:2671 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 510: + case 517: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2648 +//line sql.y:2675 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 511: + case 518: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2652 +//line sql.y:2679 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 512: + case 519: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2656 +//line sql.y:2683 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 513: + case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2660 +//line sql.y:2687 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 514: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2664 +//line sql.y:2691 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 515: + case 522: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2668 +//line sql.y:2695 { yyVAL.expr = &UnaryExpr{Operator: Utf8Str, Expr: yyDollar[2].expr} } - case 516: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2672 +//line sql.y:2699 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } - case 517: + case 524: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2676 +//line sql.y:2703 { yyVAL.expr = &UnaryExpr{Operator: Latin1Str, Expr: yyDollar[2].expr} } - case 518: + case 525: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2680 +//line sql.y:2707 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -6753,9 +7069,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 519: + case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2688 +//line sql.y:2715 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -6769,21 +7085,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 520: + case 527: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2702 +//line sql.y:2729 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 521: + case 528: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2706 +//line sql.y:2733 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 522: + case 529: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2710 +//line sql.y:2737 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -6791,497 +7107,497 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 527: + case 534: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2728 +//line sql.y:2755 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 528: + case 535: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2732 +//line sql.y:2759 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 529: + case 536: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2736 +//line sql.y:2763 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 530: + case 537: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2740 +//line sql.y:2767 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 531: + case 538: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2750 +//line sql.y:2777 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 532: + case 539: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2754 +//line sql.y:2781 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 533: + case 540: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2758 +//line sql.y:2785 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 534: + case 541: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2762 +//line sql.y:2789 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 535: + case 542: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2766 +//line sql.y:2793 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 536: + case 543: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2770 +//line sql.y:2797 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 537: + case 544: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2774 +//line sql.y:2801 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 538: + case 545: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2778 +//line sql.y:2805 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 539: + case 546: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2782 +//line sql.y:2809 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 540: + case 547: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2786 +//line sql.y:2813 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 541: + case 548: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2790 +//line sql.y:2817 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } - case 542: + case 549: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2794 +//line sql.y:2821 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 543: + case 550: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2798 +//line sql.y:2825 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 544: + case 551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2808 +//line sql.y:2835 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 545: + case 552: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2812 +//line sql.y:2839 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 546: + case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2816 +//line sql.y:2843 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 547: + case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2821 +//line sql.y:2848 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 548: + case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2826 +//line sql.y:2853 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 549: + case 556: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2831 +//line sql.y:2858 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 550: + case 557: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2837 +//line sql.y:2864 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 551: + case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2842 +//line sql.y:2869 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 552: + case 559: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2847 +//line sql.y:2874 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } - case 553: + case 560: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2851 +//line sql.y:2878 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } - case 554: + case 561: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2855 +//line sql.y:2882 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } - case 555: + case 562: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2860 +//line sql.y:2887 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } - case 556: + case 563: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2865 +//line sql.y:2892 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } - case 557: + case 564: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2870 +//line sql.y:2897 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } - case 558: + case 565: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2874 +//line sql.y:2901 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 559: + case 566: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2878 +//line sql.y:2905 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 562: + case 569: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2888 +//line sql.y:2915 { yyVAL.expr = yyDollar[2].expr } - case 563: + case 570: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2898 +//line sql.y:2925 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 564: + case 571: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2902 +//line sql.y:2929 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 565: + case 572: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2906 +//line sql.y:2933 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } - case 566: + case 573: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2910 +//line sql.y:2937 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 567: + case 574: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2914 +//line sql.y:2941 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 568: + case 575: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2918 +//line sql.y:2945 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 569: + case 576: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2922 +//line sql.y:2949 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 570: + case 577: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2928 +//line sql.y:2955 { yyVAL.str = "" } - case 571: + case 578: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2932 +//line sql.y:2959 { yyVAL.str = BooleanModeStr } - case 572: + case 579: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2936 +//line sql.y:2963 { yyVAL.str = NaturalLanguageModeStr } - case 573: + case 580: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2940 +//line sql.y:2967 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 574: + case 581: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2944 +//line sql.y:2971 { yyVAL.str = QueryExpansionStr } - case 575: + case 582: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2950 +//line sql.y:2977 { yyVAL.str = string(yyDollar[1].colIdent.String()) } - case 576: + case 583: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2954 +//line sql.y:2981 { yyVAL.str = string(yyDollar[1].bytes) } - case 577: + case 584: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2960 +//line sql.y:2987 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 578: + case 585: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2964 +//line sql.y:2991 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 579: + case 586: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2968 +//line sql.y:2995 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: string(yyDollar[3].colIdent.String())} } - case 580: + case 587: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2972 +//line sql.y:2999 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 581: + case 588: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2976 +//line sql.y:3003 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 582: + case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2980 +//line sql.y:3007 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 583: + case 590: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2986 +//line sql.y:3013 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 584: + case 591: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2990 +//line sql.y:3017 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 585: + case 592: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2994 +//line sql.y:3021 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 586: + case 593: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2998 +//line sql.y:3025 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 587: + case 594: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3002 +//line sql.y:3029 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 588: + case 595: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3006 +//line sql.y:3033 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 589: + case 596: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3010 +//line sql.y:3037 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 590: + case 597: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3015 +//line sql.y:3042 { yyVAL.expr = nil } - case 591: + case 598: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3019 +//line sql.y:3046 { yyVAL.expr = yyDollar[1].expr } - case 592: + case 599: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3024 +//line sql.y:3051 { yyVAL.str = string("") } - case 593: + case 600: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3028 +//line sql.y:3055 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 594: + case 601: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3034 +//line sql.y:3061 { yyVAL.whens = []*When{yyDollar[1].when} } - case 595: + case 602: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3038 +//line sql.y:3065 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 596: + case 603: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3044 +//line sql.y:3071 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 597: + case 604: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3049 +//line sql.y:3076 { yyVAL.expr = nil } - case 598: + case 605: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3053 +//line sql.y:3080 { yyVAL.expr = yyDollar[2].expr } - case 599: + case 606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3059 +//line sql.y:3086 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 600: + case 607: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3063 +//line sql.y:3090 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 601: + case 608: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3067 +//line sql.y:3094 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 602: + case 609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3073 +//line sql.y:3100 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 603: + case 610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3077 +//line sql.y:3104 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 604: + case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3081 +//line sql.y:3108 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 605: + case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3085 +//line sql.y:3112 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 606: + case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3089 +//line sql.y:3116 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 607: + case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3093 +//line sql.y:3120 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 608: + case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3097 +//line sql.y:3124 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 609: + case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3101 +//line sql.y:3128 { yyVAL.expr = &NullVal{} } - case 610: + case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3107 +//line sql.y:3134 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -7290,225 +7606,225 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 611: + case 618: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3116 +//line sql.y:3143 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 612: + case 619: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3120 +//line sql.y:3147 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 613: + case 620: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3125 +//line sql.y:3152 { yyVAL.exprs = nil } - case 614: + case 621: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3129 +//line sql.y:3156 { yyVAL.exprs = yyDollar[3].exprs } - case 615: + case 622: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3134 +//line sql.y:3161 { yyVAL.expr = nil } - case 616: + case 623: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3138 +//line sql.y:3165 { yyVAL.expr = yyDollar[2].expr } - case 617: + case 624: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3143 +//line sql.y:3170 { yyVAL.orderBy = nil } - case 618: + case 625: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3147 +//line sql.y:3174 { yyVAL.orderBy = yyDollar[3].orderBy } - case 619: + case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3153 +//line sql.y:3180 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 620: + case 627: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3157 +//line sql.y:3184 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 621: + case 628: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3163 +//line sql.y:3190 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 622: + case 629: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3168 +//line sql.y:3195 { yyVAL.str = AscScr } - case 623: + case 630: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3172 +//line sql.y:3199 { yyVAL.str = AscScr } - case 624: + case 631: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3176 +//line sql.y:3203 { yyVAL.str = DescScr } - case 625: + case 632: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3181 +//line sql.y:3208 { yyVAL.limit = nil } - case 626: + case 633: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3185 +//line sql.y:3212 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 627: + case 634: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3189 +//line sql.y:3216 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 628: + case 635: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3193 +//line sql.y:3220 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 629: + case 636: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3198 +//line sql.y:3225 { yyVAL.str = "" } - case 630: + case 637: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3202 +//line sql.y:3229 { yyVAL.str = ForUpdateStr } - case 631: + case 638: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3206 +//line sql.y:3233 { yyVAL.str = ShareModeStr } - case 632: + case 639: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3219 +//line sql.y:3246 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 633: + case 640: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3223 +//line sql.y:3250 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 634: + case 641: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3227 +//line sql.y:3254 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 635: + case 642: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3231 +//line sql.y:3258 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 636: + case 643: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3237 +//line sql.y:3264 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 637: + case 644: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3241 +//line sql.y:3268 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 638: + case 645: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3245 +//line sql.y:3272 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 639: + case 646: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3249 +//line sql.y:3276 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 640: + case 647: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3254 +//line sql.y:3281 { yyVAL.updateExprs = nil } - case 641: + case 648: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3258 +//line sql.y:3285 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 642: + case 649: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3264 +//line sql.y:3291 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 643: + case 650: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3268 +//line sql.y:3295 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 644: + case 651: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3274 +//line sql.y:3301 { yyVAL.valTuple = yyDollar[1].valTuple } - case 645: + case 652: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3278 +//line sql.y:3305 { yyVAL.valTuple = ValTuple{} } - case 646: + case 653: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3284 +//line sql.y:3311 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 647: + case 654: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3290 +//line sql.y:3317 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -7516,319 +7832,319 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 648: + case 655: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3300 +//line sql.y:3327 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 649: + case 656: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3304 +//line sql.y:3331 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 650: + case 657: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3310 +//line sql.y:3337 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 651: + case 658: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3316 +//line sql.y:3343 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 652: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3320 - { - yyDollar[2].setExpr.Scope = yyDollar[1].str - yyVAL.setExprs = SetExprs{yyDollar[2].setExpr} - } - case 653: + case 659: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3325 +//line sql.y:3347 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 654: + case 660: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3331 +//line sql.y:3353 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 655: + case 661: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3335 +//line sql.y:3357 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 656: + case 662: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3339 +//line sql.y:3361 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 657: + case 663: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3343 +//line sql.y:3365 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 659: + case 664: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:3369 + { + yyDollar[2].setExpr.Scope = yyDollar[1].str + yyVAL.setExpr = yyDollar[2].setExpr + } + case 666: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3350 +//line sql.y:3377 { yyVAL.bytes = []byte("charset") } - case 661: + case 668: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3357 +//line sql.y:3384 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 662: + case 669: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3361 +//line sql.y:3388 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 663: + case 670: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3365 +//line sql.y:3392 { yyVAL.expr = &Default{} } - case 666: + case 673: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3374 +//line sql.y:3401 { - yyVAL.byt = 0 + yyVAL.empty = struct{}{} } - case 667: + case 674: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3376 +//line sql.y:3403 { - yyVAL.byt = 1 + yyVAL.empty = struct{}{} } - case 668: + case 675: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3379 +//line sql.y:3406 { - yyVAL.empty = struct{}{} + yyVAL.str = "" } - case 669: + case 676: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3381 +//line sql.y:3408 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } - case 670: + case 677: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3384 +//line sql.y:3411 { - yyVAL.str = "" + yyVAL.empty = struct{}{} } - case 671: + case 678: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3386 +//line sql.y:3413 { - yyVAL.str = IgnoreStr + yyVAL.empty = struct{}{} } - case 672: + case 679: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3390 +//line sql.y:3417 { yyVAL.empty = struct{}{} } - case 673: + case 680: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3392 +//line sql.y:3419 { yyVAL.empty = struct{}{} } - case 674: + case 681: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3394 +//line sql.y:3421 { yyVAL.empty = struct{}{} } - case 675: + case 682: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3396 +//line sql.y:3423 { yyVAL.empty = struct{}{} } - case 676: + case 683: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3398 +//line sql.y:3425 { yyVAL.empty = struct{}{} } - case 677: + case 684: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3400 +//line sql.y:3427 { yyVAL.empty = struct{}{} } - case 678: + case 685: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3402 +//line sql.y:3429 { yyVAL.empty = struct{}{} } - case 679: + case 686: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3404 +//line sql.y:3431 { yyVAL.empty = struct{}{} } - case 680: + case 687: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3406 +//line sql.y:3433 { yyVAL.empty = struct{}{} } - case 681: + case 688: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3408 +//line sql.y:3435 { yyVAL.empty = struct{}{} } - case 682: + case 689: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3411 +//line sql.y:3438 { yyVAL.empty = struct{}{} } - case 683: + case 690: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3413 +//line sql.y:3440 { yyVAL.empty = struct{}{} } - case 684: + case 691: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3415 +//line sql.y:3442 { yyVAL.empty = struct{}{} } - case 685: + case 692: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3419 +//line sql.y:3446 { yyVAL.empty = struct{}{} } - case 686: + case 693: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3421 +//line sql.y:3448 { yyVAL.empty = struct{}{} } - case 687: + case 694: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3424 +//line sql.y:3451 { yyVAL.empty = struct{}{} } - case 688: + case 695: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3426 +//line sql.y:3453 { yyVAL.empty = struct{}{} } - case 689: + case 696: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3428 +//line sql.y:3455 { yyVAL.empty = struct{}{} } - case 690: + case 697: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3431 +//line sql.y:3458 { yyVAL.colIdent = ColIdent{} } - case 691: + case 698: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3433 +//line sql.y:3460 { yyVAL.colIdent = yyDollar[2].colIdent } - case 692: + case 699: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3437 +//line sql.y:3464 { yyVAL.colIdent = yyDollar[1].colIdent } - case 693: + case 700: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3441 +//line sql.y:3468 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 695: + case 702: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3448 +//line sql.y:3475 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 696: + case 703: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3454 +//line sql.y:3481 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } - case 697: + case 704: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3458 +//line sql.y:3485 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 699: + case 706: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3465 +//line sql.y:3492 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 994: + case 1005: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3785 +//line sql.y:3816 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 995: + case 1006: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3794 +//line sql.y:3825 { decNesting(yylex) } - case 996: + case 1007: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3799 +//line sql.y:3830 { skipToEnd(yylex) } - case 997: + case 1008: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3804 +//line sql.y:3835 { skipToEnd(yylex) } - case 998: + case 1009: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3808 +//line sql.y:3839 { skipToEnd(yylex) } - case 999: + case 1010: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3812 +//line sql.y:3843 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 4ca799e204f..79670f3d4af 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -188,6 +188,7 @@ func skipToEnd(yylex interface{}) { // Supported SHOW tokens %token COLLATION DATABASES TABLES VITESS_METADATA VSCHEMA FULL PROCESSLIST COLUMNS FIELDS ENGINES PLUGINS EXTENDED +%token KEYSPACES VITESS_KEYSPACES VITESS_SHARDS VITESS_TABLETS // SET tokens %token NAMES CHARSET GLOBAL SESSION ISOLATION LEVEL READ WRITE ONLY REPEATABLE COMMITTED UNCOMMITTED SERIALIZABLE @@ -327,6 +328,7 @@ func skipToEnd(yylex interface{}) { %type id_or_var vindex_type vindex_type_opt %type alter_object_type %type fk_reference_action fk_on_delete fk_on_update +%type vitess_topo %start any_command @@ -1626,9 +1628,20 @@ show_statement: { $$ = &Show{Type: string($2) + " " + string($3)} } -| SHOW DATABASES ddl_skip_to_end +| SHOW DATABASES like_opt { - $$ = &Show{Type: string($2)} + showTablesOpt := &ShowTablesOpt{Filter: $3} + $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt} + } +| SHOW KEYSPACES like_opt + { + showTablesOpt := &ShowTablesOpt{Filter: $3} + $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt} + } +| SHOW VITESS_KEYSPACES like_opt + { + showTablesOpt := &ShowTablesOpt{Filter: $3} + $$ = &Show{Type: string($2), ShowTablesOpt: showTablesOpt} } | SHOW ENGINES { @@ -1703,14 +1716,19 @@ show_statement: { $$ = &Show{Type: string($2)} } +/* vitess_topo supports SHOW VITESS_SHARDS / SHOW VITESS_TABLETS */ +| SHOW vitess_topo like_or_where_opt + { + // This should probably be a different type (ShowVitessTopoOpt), but + // just getting the thing working for now + showTablesOpt := &ShowTablesOpt{Filter: $3} + $$ = &Show{Type: $2, ShowTablesOpt: showTablesOpt} + } /* * Catch-all for show statements without vitess keywords: * * SHOW BINARY LOGS * SHOW INVALID - * SHOW VITESS_KEYSPACES - * SHOW VITESS_TABLETS - * SHOW VITESS_SHARDS * SHOW VITESS_TARGET */ | SHOW id_or_var ddl_skip_to_end @@ -1728,6 +1746,16 @@ tables_or_processlist: $$ = string($1) } +vitess_topo: + VITESS_TABLETS + { + $$ = string($1) + } +| VITESS_SHARDS + { + $$ = string($1) + } + extended_opt: /* empty */ { @@ -3663,6 +3691,7 @@ non_reserved_keyword: | JSON | KEY_BLOCK_SIZE | KEYS +| KEYSPACES | LANGUAGE | LAST_INSERT_ID | LESS @@ -3772,7 +3801,10 @@ non_reserved_keyword: | VINDEXES | VISIBLE | VITESS +| VITESS_KEYSPACES | VITESS_METADATA +| VITESS_SHARDS +| VITESS_TABLETS | VSCHEMA | WARNINGS | WITH diff --git a/go/vt/sqlparser/token.go b/go/vt/sqlparser/token.go index f891fb151db..a2abe134023 100644 --- a/go/vt/sqlparser/token.go +++ b/go/vt/sqlparser/token.go @@ -232,6 +232,7 @@ var keywords = map[string]int{ "json": JSON, "key": KEY, "keys": KEYS, + "keyspaces": KEYSPACES, "key_block_size": KEY_BLOCK_SIZE, "kill": UNUSED, "language": LANGUAGE, @@ -401,7 +402,10 @@ var keywords = map[string]int{ "vindexes": VINDEXES, "view": VIEW, "vitess": VITESS, + "vitess_keyspaces": VITESS_KEYSPACES, "vitess_metadata": VITESS_METADATA, + "vitess_shards": VITESS_SHARDS, + "vitess_tablets": VITESS_TABLETS, "vschema": VSCHEMA, "warnings": WARNINGS, "when": WHEN, diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 1233faeb7b1..c815d62fdf8 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -837,15 +837,27 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql show.ShowTablesOpt.DbName = "" } sql = sqlparser.String(show) - case sqlparser.KeywordString(sqlparser.DATABASES), "vitess_keyspaces", "keyspaces": + case sqlparser.KeywordString(sqlparser.DATABASES), sqlparser.KeywordString(sqlparser.VITESS_KEYSPACES), sqlparser.KeywordString(sqlparser.KEYSPACES): keyspaces, err := e.resolver.resolver.GetAllKeyspaces(ctx) if err != nil { return nil, err } - rows := make([][]sqltypes.Value, len(keyspaces)) - for i, v := range keyspaces { - rows[i] = buildVarCharRow(v) + var filter *regexp.Regexp + + if show.ShowTablesOpt != nil && show.ShowTablesOpt.Filter != nil { + filter = sqlparser.LikeToRegexp(show.ShowTablesOpt.Filter.Like) + } + + if filter == nil { + filter = regexp.MustCompile(".*") + } + + rows := make([][]sqltypes.Value, 0, len(keyspaces)) + for _, v := range keyspaces { + if filter.MatchString(v) { + rows = append(rows, buildVarCharRow(v)) + } } return &sqltypes.Result{ @@ -853,7 +865,37 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql Rows: rows, RowsAffected: uint64(len(rows)), }, nil - case "vitess_shards": + case sqlparser.KeywordString(sqlparser.VITESS_SHARDS): + showVitessShardsFilters := func(show *sqlparser.Show) ([]func(string) bool, []func(string, *topodatapb.ShardReference) bool) { + keyspaceFilters := []func(string) bool{} + shardFilters := []func(string, *topodatapb.ShardReference) bool{} + + if show.ShowTablesOpt == nil || show.ShowTablesOpt.Filter == nil { + return keyspaceFilters, shardFilters + } + + filter := show.ShowTablesOpt.Filter + + if filter.Like != "" { + likeRexep := sqlparser.LikeToRegexp(filter.Like) + + shardFilters = append(shardFilters, func(ks string, shard *topodatapb.ShardReference) bool { + return likeRexep.MatchString(topoproto.KeyspaceShardString(ks, shard.Name)) + }) + + return keyspaceFilters, shardFilters + } + + if filter.Filter != nil { + // TODO build a query planner I guess? lol that should be fun + log.Infof("SHOW VITESS_SHARDS where clause %+v. Ignoring this (for now).", filter.Filter) + } + + return keyspaceFilters, shardFilters + } + + keyspaceFilters, shardFilters := showVitessShardsFilters(show) + keyspaces, err := e.resolver.resolver.GetAllKeyspaces(ctx) if err != nil { return nil, err @@ -861,6 +903,18 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql var rows [][]sqltypes.Value for _, keyspace := range keyspaces { + skipKeyspace := false + for _, filter := range keyspaceFilters { + if !filter(keyspace) { + skipKeyspace = true + break + } + } + + if skipKeyspace { + continue + } + _, _, shards, err := e.resolver.resolver.GetKeyspaceShards(ctx, keyspace, destTabletType) if err != nil { // There might be a misconfigured keyspace or no shards in the keyspace. @@ -869,6 +923,18 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql } for _, shard := range shards { + skipShard := false + for _, filter := range shardFilters { + if !filter(keyspace, shard) { + skipShard = true + break + } + } + + if skipShard { + continue + } + rows = append(rows, buildVarCharRow(topoproto.KeyspaceShardString(keyspace, shard.Name))) } } @@ -878,8 +944,8 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql Rows: rows, RowsAffected: uint64(len(rows)), }, nil - case "vitess_tablets": - return e.showTablets() + case sqlparser.KeywordString(sqlparser.VITESS_TABLETS): + return e.showTablets(show) case "vitess_target": var rows [][]sqltypes.Value rows = append(rows, buildVarCharRow(safeSession.TargetString)) @@ -1026,8 +1092,39 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql return e.handleOther(ctx, safeSession, sql, bindVars, dest, destKeyspace, destTabletType, logStats, ignoreMaxMemoryRows) } -func (e *Executor) showTablets() (*sqltypes.Result, error) { - var rows [][]sqltypes.Value +// (tablet, servingState, mtst) -> bool +type tabletFilter func(*topodatapb.Tablet, string, int64) bool + +func (e *Executor) showTablets(show *sqlparser.Show) (*sqltypes.Result, error) { + getTabletFilters := func(show *sqlparser.Show) []tabletFilter { + filters := []tabletFilter{} + + if show.ShowTablesOpt == nil || show.ShowTablesOpt.Filter == nil { + return filters + } + + filter := show.ShowTablesOpt.Filter + if filter.Like != "" { + tabletRegexp := sqlparser.LikeToRegexp(filter.Like) + + f := func(tablet *topodatapb.Tablet, servingState string, masterTermStartTime int64) bool { + return tabletRegexp.MatchString(tablet.Hostname) + } + + filters = append(filters, f) + return filters + } + + if filter.Filter != nil { + log.Infof("SHOW VITESS_TABLETS where clause: %+v. Ignoring this (for now).", filter.Filter) + } + + return filters + } + + tabletFilters := getTabletFilters(show) + + rows := [][]sqltypes.Value{} if UsingLegacyGateway() { status := e.scatterConn.GetLegacyHealthCheckCacheStatus() for _, s := range status { @@ -1042,6 +1139,19 @@ func (e *Executor) showTablets() (*sqltypes.Result, error) { // this code depends on the fact that TabletExternallyReparentedTimestamp is the seconds since epoch start mtstStr = time.Unix(mtst, 0).UTC().Format(time.RFC3339) } + + skipTablet := false + for _, filter := range tabletFilters { + if !filter(ts.Tablet, state, mtst) { + skipTablet = true + break + } + } + + if skipTablet { + continue + } + rows = append(rows, buildVarCharRow( s.Cell, s.Target.Keyspace, @@ -1068,6 +1178,19 @@ func (e *Executor) showTablets() (*sqltypes.Result, error) { // this code depends on the fact that MasterTermStartTime is the seconds since epoch start mtstStr = time.Unix(mtst, 0).UTC().Format(time.RFC3339) } + + skipTablet := false + for _, filter := range tabletFilters { + if !filter(ts.Tablet, state, mtst) { + skipTablet = true + break + } + } + + if skipTablet { + continue + } + rows = append(rows, buildVarCharRow( s.Cell, s.Target.Keyspace, diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 7deb4e1534f..70900cbea3f 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -438,9 +438,8 @@ func TestExecutorShow(t *testing.T) { for _, query := range []string{"show databases", "show vitess_keyspaces", "show keyspaces", "show DATABASES"} { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) - if err != nil { - t.Error(err) - } + require.NoError(t, err) + wantqr := &sqltypes.Result{ Fields: buildVarCharFields("Databases"), Rows: [][]sqltypes.Value{ @@ -452,9 +451,8 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 5, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, fmt.Sprintf("unexpected results running query: %s", query)) } _, err := executor.Execute(ctx, "TestExecute", session, "show variables", nil) require.NoError(t, err) @@ -464,13 +462,8 @@ func TestExecutorShow(t *testing.T) { require.NoError(t, err) _, err = executor.Execute(ctx, "TestExecute", session, "show tables", nil) - if err != errNoKeyspace { - t.Errorf("'show tables' should fail without a keyspace") - } - - if len(sbclookup.Queries) != 0 { - t.Errorf("sbclookup unexpectedly has queries already") - } + assert.EqualError(t, err, errNoKeyspace.Error(), "'show tables' should fail without a keyspace") + assert.Empty(t, sbclookup.Queries, "sbclookup unexpectedly has queries already") showResults := &sqltypes.Result{ Fields: []*querypb.Field{ @@ -488,143 +481,89 @@ func TestExecutorShow(t *testing.T) { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) - if len(sbclookup.Queries) != 1 { - t.Errorf("Tablet should have received one 'show' query. Instead received: %v", sbclookup.Queries) - } else { - lastQuery := sbclookup.Queries[len(sbclookup.Queries)-1].Sql - want := "show tables" - if lastQuery != want { - t.Errorf("Got: %v, want %v", lastQuery, want) - } - } + assert.Equal(t, 1, len(sbclookup.Queries), "Tablet should have received one 'show' query. Instead received: %v", sbclookup.Queries) + lastQuery := sbclookup.Queries[len(sbclookup.Queries)-1].Sql + want := "show tables" + assert.Equal(t, want, lastQuery, "Got: %v, want %v", lastQuery, want) wantqr := showResults - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, fmt.Sprintf("unexpected results running query: %s", query)) wantErrNoTable := "table unknown_table not found" _, err = executor.Execute(ctx, "TestExecute", session, "show create table unknown_table", nil) - if err.Error() != wantErrNoTable { - t.Errorf("Got: %v. Want: %v", err, wantErrNoTable) - } + assert.EqualErrorf(t, err, wantErrNoTable, "Got: %v. Want: %v", wantErrNoTable) // SHOW CREATE table using vschema to find keyspace. _, err = executor.Execute(ctx, "TestExecute", session, "show create table user_seq", nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - lastQuery := sbclookup.Queries[len(sbclookup.Queries)-1].Sql + require.NoError(t, err) + lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery := "show create table user_seq" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW CREATE table with query-provided keyspace _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show create table %v.unknown", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show create table unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW KEYS with two different syntax _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show keys from %v.unknown", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show keys from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show keys from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show keys from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW INDEX with two different syntax _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show index from %v.unknown", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show index from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show index from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show index from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW INDEXES with two different syntax _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show indexes from %v.unknown", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show indexes from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show indexes from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show indexes from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // SHOW EXTENDED {INDEX | INDEXES | KEYS} _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended index from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show extended index from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended indexes from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show extended indexes from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show extended keys from unknown from %v", KsTestUnsharded), nil) - if err != nil { - t.Errorf("Unexpected error: %v", err) - } + require.NoError(t, err) lastQuery = sbclookup.Queries[len(sbclookup.Queries)-1].Sql wantQuery = "show extended keys from unknown" - if lastQuery != wantQuery { - t.Errorf("Got: %v. Want: %v", lastQuery, wantQuery) - } + assert.Equal(t, wantQuery, lastQuery, "Got: %v. Want: %v", lastQuery, wantQuery) // Set desitation keyspace in session session.TargetString = KsTestUnsharded @@ -638,6 +577,7 @@ func TestExecutorShow(t *testing.T) { session.TargetString = "@master" _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show full columns from unknown from %v", KsTestUnsharded), nil) require.NoError(t, err) + for _, query := range []string{"show charset", "show character set"} { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) @@ -656,10 +596,10 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 2, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, query) } + for _, query := range []string{"show charset like '%foo'", "show character set like 'foo%'", "show charset like 'foo%'", "show character set where foo like 'utf8'", "show character set where charset like '%foo'", "show charset where charset = '%foo'"} { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) @@ -668,10 +608,10 @@ func TestExecutorShow(t *testing.T) { Rows: [][]sqltypes.Value{}, RowsAffected: 0, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, query) } + for _, query := range []string{"show charset like 'utf8'", "show character set like 'utf8'", "show charset where charset = 'utf8'", "show character set where charset = 'utf8'"} { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) @@ -685,10 +625,10 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 1, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, query) } + for _, query := range []string{"show charset like 'utf8mb4'", "show character set like 'utf8mb4'", "show charset where charset = 'utf8mb4'", "show character set where charset = 'utf8mb4'"} { qr, err := executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) @@ -703,12 +643,12 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 1, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, query) } - qr, err = executor.Execute(ctx, "TestExecute", session, "show engines", nil) + query = "show engines" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Engine", "Support", "Comment", "Transactions", "XA", "Savepoints"), @@ -723,10 +663,10 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 1, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show engines:\n%+v, want\n%+v", qr, wantqr) - } - qr, err = executor.Execute(ctx, "TestExecute", session, "show plugins", nil) + utils.MustMatch(t, wantqr, qr, query) + + query = "show plugins" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Name", "Status", "Type", "Library", "License"), @@ -740,30 +680,28 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 1, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show plugins:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) + for _, query := range []string{"show session status", "show session status like 'Ssl_cipher'"} { qr, err = executor.Execute(ctx, "TestExecute", session, "show session status", nil) - if err != nil { - t.Error(err) - } + require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Variable_name", "Value"), Rows: make([][]sqltypes.Value, 0, 2), RowsAffected: 0, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("%v:\n%+v, want\n%+v", query, qr, wantqr) - } + + utils.MustMatch(t, wantqr, qr, query) } - qr, err = executor.Execute(ctx, "TestExecute", session, "show vitess_shards", nil) - require.NoError(t, err) // Test SHOW FULL COLUMNS FROM where query has a qualifier _, err = executor.Execute(ctx, "TestExecute", session, fmt.Sprintf("show full columns from %v.table1", KsTestUnsharded), nil) require.NoError(t, err) + query = "show vitess_shards" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + require.NoError(t, err) + // Just test for first & last. qr.Rows = [][]sqltypes.Value{qr.Rows[0], qr.Rows[len(qr.Rows)-1]} wantqr = &sqltypes.Result{ @@ -774,11 +712,10 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 33, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vitess_shards:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) - qr, err = executor.Execute(ctx, "TestExecute", session, "show vitess_tablets", nil) + query = "show vitess_tablets" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. qr.Rows = [][]sqltypes.Value{qr.Rows[0], qr.Rows[len(qr.Rows)-1]} @@ -790,11 +727,32 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 9, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vitess_tablets:\n%+v, want\n%+v", qr, wantqr) + utils.MustMatch(t, wantqr, qr, query) + + query = "show vitess_tablets like 'x'" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + require.NoError(t, err) + wantqr = &sqltypes.Result{ + Fields: buildVarCharFields("Cell", "Keyspace", "Shard", "TabletType", "State", "Alias", "Hostname", "MasterTermStartTime"), + Rows: [][]sqltypes.Value{}, + RowsAffected: 0, + } + utils.MustMatch(t, wantqr, qr, fmt.Sprintf("%q should be empty", query)) + + query = "show vitess_tablets like '-20%'" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) + require.NoError(t, err) + wantqr = &sqltypes.Result{ + Fields: buildVarCharFields("Cell", "Keyspace", "Shard", "TabletType", "State", "Alias", "Hostname", "MasterTermStartTime"), + Rows: [][]sqltypes.Value{ + buildVarCharRow("FakeCell", "TestExecutor", "-20", "MASTER", "SERVING", "aa-0000000000", "-20", "1970-01-01T00:00:01Z"), + }, + RowsAffected: 1, } + utils.MustMatch(t, wantqr, qr, query) - qr, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes", nil) + query = "show vschema vindexes" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Keyspace", "Name", "Type", "Params", "Owner"), @@ -812,11 +770,10 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 10, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema vindexes:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) - qr, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on TestExecutor.user", nil) + query = "show vschema vindexes on TestExecutor.user" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -826,24 +783,21 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 2, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema vindexes on TestExecutor.user:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) - _, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on user", nil) + query = "show vschema vindexes on user" + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) wantErr := errNoKeyspace.Error() - if err == nil || err.Error() != wantErr { - t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) - } + assert.EqualError(t, err, wantErr, query) - _, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on TestExecutor.garbage", nil) + query = "show vschema vindexes on TestExecutor.garbage" + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) wantErr = "table `garbage` does not exist in keyspace `TestExecutor`" - if err == nil || err.Error() != wantErr { - t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) - } + assert.EqualError(t, err, wantErr, query) + query = "show vschema vindexes on user" session.TargetString = "TestExecutor" - qr, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on user", nil) + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -853,12 +807,11 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 2, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema vindexes on user:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) + query = "show vschema vindexes on user2" session.TargetString = "TestExecutor" - qr, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on user2", nil) + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -868,17 +821,15 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 2, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema vindexes on user2:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) - _, err = executor.Execute(ctx, "TestExecute", session, "show vschema vindexes on garbage", nil) + query = "show vschema vindexes on garbage" + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) wantErr = "table `garbage` does not exist in keyspace `TestExecutor`" - if err == nil || err.Error() != wantErr { - t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) - } + assert.EqualError(t, err, wantErr, query) - qr, err = executor.Execute(ctx, "TestExecute", session, "show warnings", nil) + query = "show warnings" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -889,13 +840,11 @@ func TestExecutorShow(t *testing.T) { Rows: [][]sqltypes.Value{}, RowsAffected: 0, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show warnings:\n%+v, want\n%+v", qr, wantqr) - - } + utils.MustMatch(t, wantqr, qr, query) + query = "show warnings" session.Warnings = []*querypb.QueryWarning{} - qr, err = executor.Execute(ctx, "TestExecute", session, "show warnings", nil) + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -906,15 +855,14 @@ func TestExecutorShow(t *testing.T) { Rows: [][]sqltypes.Value{}, RowsAffected: 0, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show warnings:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) + query = "show warnings" session.Warnings = []*querypb.QueryWarning{ {Code: mysql.ERBadTable, Message: "bad table"}, {Code: mysql.EROutOfResources, Message: "ks/-40: query timed out"}, } - qr, err = executor.Execute(ctx, "TestExecute", session, "show warnings", nil) + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: []*querypb.Field{ @@ -929,13 +877,12 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 0, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show warnings:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) // Make sure it still works when one of the keyspaces is in a bad state getSandbox("TestExecutor").SrvKeyspaceMustFail++ - qr, err = executor.Execute(ctx, "TestExecute", session, "show vitess_shards", nil) + query = "show vitess_shards" + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) // Just test for first & last. qr.Rows = [][]sqltypes.Value{qr.Rows[0], qr.Rows[len(qr.Rows)-1]} @@ -947,12 +894,11 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 25, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show databases:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, fmt.Sprintf("%s, with a bad keyspace", query)) + query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}) - qr, err = executor.Execute(ctx, "TestExecute", session, "show vschema tables", nil) + qr, err = executor.Execute(ctx, "TestExecute", session, query, nil) require.NoError(t, err) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Tables"), @@ -969,29 +915,24 @@ func TestExecutorShow(t *testing.T) { }, RowsAffected: 9, } - if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema tables:\n%+v, want\n%+v", qr, wantqr) - } + utils.MustMatch(t, wantqr, qr, query) + query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{}) - _, err = executor.Execute(ctx, "TestExecute", session, "show vschema tables", nil) - want := errNoKeyspace.Error() - if err == nil || err.Error() != want { - t.Errorf("show vschema tables: %v, want %v", err, want) - } + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) + want = errNoKeyspace.Error() + assert.EqualError(t, err, want, query) - _, err = executor.Execute(ctx, "TestExecute", session, "show 10", nil) + query = "show 10" + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) want = "syntax error at position 8 near '10'" - if err == nil || err.Error() != want { - t.Errorf("show vschema tables: %v, want %v", err, want) - } + assert.EqualError(t, err, want, query) + query = "show vschema tables" session = NewSafeSession(&vtgatepb.Session{TargetString: "no_such_keyspace"}) - _, err = executor.Execute(ctx, "TestExecute", session, "show vschema tables", nil) + _, err = executor.Execute(ctx, "TestExecute", session, query, nil) want = "keyspace no_such_keyspace not found in vschema" - if err == nil || err.Error() != want { - t.Errorf("show vschema tables: %v, want %v", err, want) - } + assert.EqualError(t, err, want, query) } func TestExecutorUse(t *testing.T) { From 6682c70ccabfa0d3f4da5f84b77ab4c79c371592 Mon Sep 17 00:00:00 2001 From: Andrew Mason Date: Tue, 29 Sep 2020 17:37:38 -0400 Subject: [PATCH 12/15] Regenerate parser post-cherry-pick, fix govet error in tests Signed-off-by: Andrew Mason --- go/vt/sqlparser/sql.go | 7784 ++++++++++++++--------------- go/vt/vtgate/vcursor_impl_test.go | 5 +- 2 files changed, 3777 insertions(+), 4012 deletions(-) diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 83efdbe9f20..ab0855250ee 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -113,350 +113,349 @@ const LEX_ERROR = 57346 const UNION = 57347 const SELECT = 57348 const STREAM = 57349 -const VSTREAM = 57350 -const INSERT = 57351 -const UPDATE = 57352 -const DELETE = 57353 -const FROM = 57354 -const WHERE = 57355 -const GROUP = 57356 -const HAVING = 57357 -const ORDER = 57358 -const BY = 57359 -const LIMIT = 57360 -const OFFSET = 57361 -const FOR = 57362 -const ALL = 57363 -const DISTINCT = 57364 -const AS = 57365 -const EXISTS = 57366 -const ASC = 57367 -const DESC = 57368 -const INTO = 57369 -const DUPLICATE = 57370 -const KEY = 57371 -const DEFAULT = 57372 -const SET = 57373 -const LOCK = 57374 -const UNLOCK = 57375 -const KEYS = 57376 -const DO = 57377 -const DISTINCTROW = 57378 -const VALUES = 57379 -const LAST_INSERT_ID = 57380 -const NEXT = 57381 -const VALUE = 57382 -const SHARE = 57383 -const MODE = 57384 -const SQL_NO_CACHE = 57385 -const SQL_CACHE = 57386 -const SQL_CALC_FOUND_ROWS = 57387 -const JOIN = 57388 -const STRAIGHT_JOIN = 57389 -const LEFT = 57390 -const RIGHT = 57391 -const INNER = 57392 -const OUTER = 57393 -const CROSS = 57394 -const NATURAL = 57395 -const USE = 57396 -const FORCE = 57397 -const ON = 57398 -const USING = 57399 -const ID = 57400 -const AT_ID = 57401 -const AT_AT_ID = 57402 -const HEX = 57403 -const STRING = 57404 -const INTEGRAL = 57405 -const FLOAT = 57406 -const HEXNUM = 57407 -const VALUE_ARG = 57408 -const LIST_ARG = 57409 -const COMMENT = 57410 -const COMMENT_KEYWORD = 57411 -const BIT_LITERAL = 57412 -const NULL = 57413 -const TRUE = 57414 -const FALSE = 57415 -const OFF = 57416 -const OR = 57417 -const XOR = 57418 -const AND = 57419 -const NOT = 57420 -const BETWEEN = 57421 -const CASE = 57422 -const WHEN = 57423 -const THEN = 57424 -const ELSE = 57425 -const END = 57426 -const LE = 57427 -const GE = 57428 -const NE = 57429 -const NULL_SAFE_EQUAL = 57430 -const IS = 57431 -const LIKE = 57432 -const REGEXP = 57433 -const IN = 57434 -const SHIFT_LEFT = 57435 -const SHIFT_RIGHT = 57436 -const DIV = 57437 -const MOD = 57438 -const UNARY = 57439 -const COLLATE = 57440 -const BINARY = 57441 -const UNDERSCORE_BINARY = 57442 -const UNDERSCORE_UTF8MB4 = 57443 -const UNDERSCORE_UTF8 = 57444 -const UNDERSCORE_LATIN1 = 57445 -const INTERVAL = 57446 -const JSON_EXTRACT_OP = 57447 -const JSON_UNQUOTE_EXTRACT_OP = 57448 -const CREATE = 57449 -const ALTER = 57450 -const DROP = 57451 -const RENAME = 57452 -const ANALYZE = 57453 -const ADD = 57454 -const FLUSH = 57455 -const SCHEMA = 57456 -const TABLE = 57457 -const INDEX = 57458 -const VIEW = 57459 -const TO = 57460 -const IGNORE = 57461 -const IF = 57462 -const UNIQUE = 57463 -const PRIMARY = 57464 -const COLUMN = 57465 -const SPATIAL = 57466 -const FULLTEXT = 57467 -const KEY_BLOCK_SIZE = 57468 -const CHECK = 57469 -const INDEXES = 57470 -const ACTION = 57471 -const CASCADE = 57472 -const CONSTRAINT = 57473 -const FOREIGN = 57474 -const NO = 57475 -const REFERENCES = 57476 -const RESTRICT = 57477 -const SHOW = 57478 -const DESCRIBE = 57479 -const EXPLAIN = 57480 -const DATE = 57481 -const ESCAPE = 57482 -const REPAIR = 57483 -const OPTIMIZE = 57484 -const TRUNCATE = 57485 -const MAXVALUE = 57486 -const PARTITION = 57487 -const REORGANIZE = 57488 -const LESS = 57489 -const THAN = 57490 -const PROCEDURE = 57491 -const TRIGGER = 57492 -const VINDEX = 57493 -const VINDEXES = 57494 -const STATUS = 57495 -const VARIABLES = 57496 -const WARNINGS = 57497 -const SEQUENCE = 57498 -const BEGIN = 57499 -const START = 57500 -const TRANSACTION = 57501 -const COMMIT = 57502 -const ROLLBACK = 57503 -const SAVEPOINT = 57504 -const RELEASE = 57505 -const WORK = 57506 -const BIT = 57507 -const TINYINT = 57508 -const SMALLINT = 57509 -const MEDIUMINT = 57510 -const INT = 57511 -const INTEGER = 57512 -const BIGINT = 57513 -const INTNUM = 57514 -const REAL = 57515 -const DOUBLE = 57516 -const FLOAT_TYPE = 57517 -const DECIMAL = 57518 -const NUMERIC = 57519 -const TIME = 57520 -const TIMESTAMP = 57521 -const DATETIME = 57522 -const YEAR = 57523 -const CHAR = 57524 -const VARCHAR = 57525 -const BOOL = 57526 -const CHARACTER = 57527 -const VARBINARY = 57528 -const NCHAR = 57529 -const TEXT = 57530 -const TINYTEXT = 57531 -const MEDIUMTEXT = 57532 -const LONGTEXT = 57533 -const BLOB = 57534 -const TINYBLOB = 57535 -const MEDIUMBLOB = 57536 -const LONGBLOB = 57537 -const JSON = 57538 -const ENUM = 57539 -const GEOMETRY = 57540 -const POINT = 57541 -const LINESTRING = 57542 -const POLYGON = 57543 -const GEOMETRYCOLLECTION = 57544 -const MULTIPOINT = 57545 -const MULTILINESTRING = 57546 -const MULTIPOLYGON = 57547 -const NULLX = 57548 -const AUTO_INCREMENT = 57549 -const APPROXNUM = 57550 -const SIGNED = 57551 -const UNSIGNED = 57552 -const ZEROFILL = 57553 -const COLLATION = 57554 -const DATABASES = 57555 -const TABLES = 57556 -const VITESS_METADATA = 57557 -const VSCHEMA = 57558 -const FULL = 57559 -const PROCESSLIST = 57560 -const COLUMNS = 57561 -const FIELDS = 57562 -const ENGINES = 57563 -const PLUGINS = 57564 -const EXTENDED = 57565 -const KEYSPACES = 57566 -const VITESS_KEYSPACES = 57567 -const VITESS_SHARDS = 57568 -const VITESS_TABLETS = 57569 -const NAMES = 57570 -const CHARSET = 57571 -const GLOBAL = 57572 -const SESSION = 57573 -const ISOLATION = 57574 -const LEVEL = 57575 -const READ = 57576 -const WRITE = 57577 -const ONLY = 57578 -const REPEATABLE = 57579 -const COMMITTED = 57580 -const UNCOMMITTED = 57581 -const SERIALIZABLE = 57582 -const CURRENT_TIMESTAMP = 57583 -const DATABASE = 57584 -const CURRENT_DATE = 57585 -const CURRENT_TIME = 57586 -const LOCALTIME = 57587 -const LOCALTIMESTAMP = 57588 -const UTC_DATE = 57589 -const UTC_TIME = 57590 -const UTC_TIMESTAMP = 57591 -const REPLACE = 57592 -const CONVERT = 57593 -const CAST = 57594 -const SUBSTR = 57595 -const SUBSTRING = 57596 -const GROUP_CONCAT = 57597 -const SEPARATOR = 57598 -const TIMESTAMPADD = 57599 -const TIMESTAMPDIFF = 57600 -const MATCH = 57601 -const AGAINST = 57602 -const BOOLEAN = 57603 -const LANGUAGE = 57604 -const WITH = 57605 -const QUERY = 57606 -const EXPANSION = 57607 -const UNUSED = 57608 -const ARRAY = 57609 -const CUME_DIST = 57610 -const DESCRIPTION = 57611 -const DENSE_RANK = 57612 -const EMPTY = 57613 -const EXCEPT = 57614 -const FIRST_VALUE = 57615 -const GROUPING = 57616 -const GROUPS = 57617 -const JSON_TABLE = 57618 -const LAG = 57619 -const LAST_VALUE = 57620 -const LATERAL = 57621 -const LEAD = 57622 -const MEMBER = 57623 -const NTH_VALUE = 57624 -const NTILE = 57625 -const OF = 57626 -const OVER = 57627 -const PERCENT_RANK = 57628 -const RANK = 57629 -const RECURSIVE = 57630 -const ROW_NUMBER = 57631 -const SYSTEM = 57632 -const WINDOW = 57633 -const ACTIVE = 57634 -const ADMIN = 57635 -const BUCKETS = 57636 -const CLONE = 57637 -const COMPONENT = 57638 -const DEFINITION = 57639 -const ENFORCED = 57640 -const EXCLUDE = 57641 -const FOLLOWING = 57642 -const GEOMCOLLECTION = 57643 -const GET_MASTER_PUBLIC_KEY = 57644 -const HISTOGRAM = 57645 -const HISTORY = 57646 -const INACTIVE = 57647 -const INVISIBLE = 57648 -const LOCKED = 57649 -const MASTER_COMPRESSION_ALGORITHMS = 57650 -const MASTER_PUBLIC_KEY_PATH = 57651 -const MASTER_TLS_CIPHERSUITES = 57652 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57653 -const NESTED = 57654 -const NETWORK_NAMESPACE = 57655 -const NOWAIT = 57656 -const NULLS = 57657 -const OJ = 57658 -const OLD = 57659 -const OPTIONAL = 57660 -const ORDINALITY = 57661 -const ORGANIZATION = 57662 -const OTHERS = 57663 -const PATH = 57664 -const PERSIST = 57665 -const PERSIST_ONLY = 57666 -const PRECEDING = 57667 -const PRIVILEGE_CHECKS_USER = 57668 -const PROCESS = 57669 -const RANDOM = 57670 -const REFERENCE = 57671 -const REQUIRE_ROW_FORMAT = 57672 -const RESOURCE = 57673 -const RESPECT = 57674 -const RESTART = 57675 -const RETAIN = 57676 -const REUSE = 57677 -const ROLE = 57678 -const SECONDARY = 57679 -const SECONDARY_ENGINE = 57680 -const SECONDARY_LOAD = 57681 -const SECONDARY_UNLOAD = 57682 -const SKIP = 57683 -const SRID = 57684 -const THREAD_PRIORITY = 57685 -const TIES = 57686 -const UNBOUNDED = 57687 -const VCPU = 57688 -const VISIBLE = 57689 -const FORMAT = 57690 -const TREE = 57691 -const VITESS = 57692 -const TRADITIONAL = 57693 +const INSERT = 57350 +const UPDATE = 57351 +const DELETE = 57352 +const FROM = 57353 +const WHERE = 57354 +const GROUP = 57355 +const HAVING = 57356 +const ORDER = 57357 +const BY = 57358 +const LIMIT = 57359 +const OFFSET = 57360 +const FOR = 57361 +const ALL = 57362 +const DISTINCT = 57363 +const AS = 57364 +const EXISTS = 57365 +const ASC = 57366 +const DESC = 57367 +const INTO = 57368 +const DUPLICATE = 57369 +const KEY = 57370 +const DEFAULT = 57371 +const SET = 57372 +const LOCK = 57373 +const UNLOCK = 57374 +const KEYS = 57375 +const DO = 57376 +const DISTINCTROW = 57377 +const VALUES = 57378 +const LAST_INSERT_ID = 57379 +const NEXT = 57380 +const VALUE = 57381 +const SHARE = 57382 +const MODE = 57383 +const SQL_NO_CACHE = 57384 +const SQL_CACHE = 57385 +const SQL_CALC_FOUND_ROWS = 57386 +const JOIN = 57387 +const STRAIGHT_JOIN = 57388 +const LEFT = 57389 +const RIGHT = 57390 +const INNER = 57391 +const OUTER = 57392 +const CROSS = 57393 +const NATURAL = 57394 +const USE = 57395 +const FORCE = 57396 +const ON = 57397 +const USING = 57398 +const ID = 57399 +const AT_ID = 57400 +const AT_AT_ID = 57401 +const HEX = 57402 +const STRING = 57403 +const INTEGRAL = 57404 +const FLOAT = 57405 +const HEXNUM = 57406 +const VALUE_ARG = 57407 +const LIST_ARG = 57408 +const COMMENT = 57409 +const COMMENT_KEYWORD = 57410 +const BIT_LITERAL = 57411 +const NULL = 57412 +const TRUE = 57413 +const FALSE = 57414 +const OFF = 57415 +const OR = 57416 +const XOR = 57417 +const AND = 57418 +const NOT = 57419 +const BETWEEN = 57420 +const CASE = 57421 +const WHEN = 57422 +const THEN = 57423 +const ELSE = 57424 +const END = 57425 +const LE = 57426 +const GE = 57427 +const NE = 57428 +const NULL_SAFE_EQUAL = 57429 +const IS = 57430 +const LIKE = 57431 +const REGEXP = 57432 +const IN = 57433 +const SHIFT_LEFT = 57434 +const SHIFT_RIGHT = 57435 +const DIV = 57436 +const MOD = 57437 +const UNARY = 57438 +const COLLATE = 57439 +const BINARY = 57440 +const UNDERSCORE_BINARY = 57441 +const UNDERSCORE_UTF8MB4 = 57442 +const UNDERSCORE_UTF8 = 57443 +const UNDERSCORE_LATIN1 = 57444 +const INTERVAL = 57445 +const JSON_EXTRACT_OP = 57446 +const JSON_UNQUOTE_EXTRACT_OP = 57447 +const CREATE = 57448 +const ALTER = 57449 +const DROP = 57450 +const RENAME = 57451 +const ANALYZE = 57452 +const ADD = 57453 +const FLUSH = 57454 +const SCHEMA = 57455 +const TABLE = 57456 +const INDEX = 57457 +const VIEW = 57458 +const TO = 57459 +const IGNORE = 57460 +const IF = 57461 +const UNIQUE = 57462 +const PRIMARY = 57463 +const COLUMN = 57464 +const SPATIAL = 57465 +const FULLTEXT = 57466 +const KEY_BLOCK_SIZE = 57467 +const CHECK = 57468 +const INDEXES = 57469 +const ACTION = 57470 +const CASCADE = 57471 +const CONSTRAINT = 57472 +const FOREIGN = 57473 +const NO = 57474 +const REFERENCES = 57475 +const RESTRICT = 57476 +const SHOW = 57477 +const DESCRIBE = 57478 +const EXPLAIN = 57479 +const DATE = 57480 +const ESCAPE = 57481 +const REPAIR = 57482 +const OPTIMIZE = 57483 +const TRUNCATE = 57484 +const MAXVALUE = 57485 +const PARTITION = 57486 +const REORGANIZE = 57487 +const LESS = 57488 +const THAN = 57489 +const PROCEDURE = 57490 +const TRIGGER = 57491 +const VINDEX = 57492 +const VINDEXES = 57493 +const STATUS = 57494 +const VARIABLES = 57495 +const WARNINGS = 57496 +const SEQUENCE = 57497 +const BEGIN = 57498 +const START = 57499 +const TRANSACTION = 57500 +const COMMIT = 57501 +const ROLLBACK = 57502 +const SAVEPOINT = 57503 +const RELEASE = 57504 +const WORK = 57505 +const BIT = 57506 +const TINYINT = 57507 +const SMALLINT = 57508 +const MEDIUMINT = 57509 +const INT = 57510 +const INTEGER = 57511 +const BIGINT = 57512 +const INTNUM = 57513 +const REAL = 57514 +const DOUBLE = 57515 +const FLOAT_TYPE = 57516 +const DECIMAL = 57517 +const NUMERIC = 57518 +const TIME = 57519 +const TIMESTAMP = 57520 +const DATETIME = 57521 +const YEAR = 57522 +const CHAR = 57523 +const VARCHAR = 57524 +const BOOL = 57525 +const CHARACTER = 57526 +const VARBINARY = 57527 +const NCHAR = 57528 +const TEXT = 57529 +const TINYTEXT = 57530 +const MEDIUMTEXT = 57531 +const LONGTEXT = 57532 +const BLOB = 57533 +const TINYBLOB = 57534 +const MEDIUMBLOB = 57535 +const LONGBLOB = 57536 +const JSON = 57537 +const ENUM = 57538 +const GEOMETRY = 57539 +const POINT = 57540 +const LINESTRING = 57541 +const POLYGON = 57542 +const GEOMETRYCOLLECTION = 57543 +const MULTIPOINT = 57544 +const MULTILINESTRING = 57545 +const MULTIPOLYGON = 57546 +const NULLX = 57547 +const AUTO_INCREMENT = 57548 +const APPROXNUM = 57549 +const SIGNED = 57550 +const UNSIGNED = 57551 +const ZEROFILL = 57552 +const COLLATION = 57553 +const DATABASES = 57554 +const TABLES = 57555 +const VITESS_METADATA = 57556 +const VSCHEMA = 57557 +const FULL = 57558 +const PROCESSLIST = 57559 +const COLUMNS = 57560 +const FIELDS = 57561 +const ENGINES = 57562 +const PLUGINS = 57563 +const EXTENDED = 57564 +const KEYSPACES = 57565 +const VITESS_KEYSPACES = 57566 +const VITESS_SHARDS = 57567 +const VITESS_TABLETS = 57568 +const NAMES = 57569 +const CHARSET = 57570 +const GLOBAL = 57571 +const SESSION = 57572 +const ISOLATION = 57573 +const LEVEL = 57574 +const READ = 57575 +const WRITE = 57576 +const ONLY = 57577 +const REPEATABLE = 57578 +const COMMITTED = 57579 +const UNCOMMITTED = 57580 +const SERIALIZABLE = 57581 +const CURRENT_TIMESTAMP = 57582 +const DATABASE = 57583 +const CURRENT_DATE = 57584 +const CURRENT_TIME = 57585 +const LOCALTIME = 57586 +const LOCALTIMESTAMP = 57587 +const UTC_DATE = 57588 +const UTC_TIME = 57589 +const UTC_TIMESTAMP = 57590 +const REPLACE = 57591 +const CONVERT = 57592 +const CAST = 57593 +const SUBSTR = 57594 +const SUBSTRING = 57595 +const GROUP_CONCAT = 57596 +const SEPARATOR = 57597 +const TIMESTAMPADD = 57598 +const TIMESTAMPDIFF = 57599 +const MATCH = 57600 +const AGAINST = 57601 +const BOOLEAN = 57602 +const LANGUAGE = 57603 +const WITH = 57604 +const QUERY = 57605 +const EXPANSION = 57606 +const UNUSED = 57607 +const ARRAY = 57608 +const CUME_DIST = 57609 +const DESCRIPTION = 57610 +const DENSE_RANK = 57611 +const EMPTY = 57612 +const EXCEPT = 57613 +const FIRST_VALUE = 57614 +const GROUPING = 57615 +const GROUPS = 57616 +const JSON_TABLE = 57617 +const LAG = 57618 +const LAST_VALUE = 57619 +const LATERAL = 57620 +const LEAD = 57621 +const MEMBER = 57622 +const NTH_VALUE = 57623 +const NTILE = 57624 +const OF = 57625 +const OVER = 57626 +const PERCENT_RANK = 57627 +const RANK = 57628 +const RECURSIVE = 57629 +const ROW_NUMBER = 57630 +const SYSTEM = 57631 +const WINDOW = 57632 +const ACTIVE = 57633 +const ADMIN = 57634 +const BUCKETS = 57635 +const CLONE = 57636 +const COMPONENT = 57637 +const DEFINITION = 57638 +const ENFORCED = 57639 +const EXCLUDE = 57640 +const FOLLOWING = 57641 +const GEOMCOLLECTION = 57642 +const GET_MASTER_PUBLIC_KEY = 57643 +const HISTOGRAM = 57644 +const HISTORY = 57645 +const INACTIVE = 57646 +const INVISIBLE = 57647 +const LOCKED = 57648 +const MASTER_COMPRESSION_ALGORITHMS = 57649 +const MASTER_PUBLIC_KEY_PATH = 57650 +const MASTER_TLS_CIPHERSUITES = 57651 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57652 +const NESTED = 57653 +const NETWORK_NAMESPACE = 57654 +const NOWAIT = 57655 +const NULLS = 57656 +const OJ = 57657 +const OLD = 57658 +const OPTIONAL = 57659 +const ORDINALITY = 57660 +const ORGANIZATION = 57661 +const OTHERS = 57662 +const PATH = 57663 +const PERSIST = 57664 +const PERSIST_ONLY = 57665 +const PRECEDING = 57666 +const PRIVILEGE_CHECKS_USER = 57667 +const PROCESS = 57668 +const RANDOM = 57669 +const REFERENCE = 57670 +const REQUIRE_ROW_FORMAT = 57671 +const RESOURCE = 57672 +const RESPECT = 57673 +const RESTART = 57674 +const RETAIN = 57675 +const REUSE = 57676 +const ROLE = 57677 +const SECONDARY = 57678 +const SECONDARY_ENGINE = 57679 +const SECONDARY_LOAD = 57680 +const SECONDARY_UNLOAD = 57681 +const SKIP = 57682 +const SRID = 57683 +const THREAD_PRIORITY = 57684 +const TIES = 57685 +const UNBOUNDED = 57686 +const VCPU = 57687 +const VISIBLE = 57688 +const FORMAT = 57689 +const TREE = 57690 +const VITESS = 57691 +const TRADITIONAL = 57692 var yyToknames = [...]string{ "$end", @@ -839,558 +838,1653 @@ var yyExca = [...]int{ -1, 1, 1, -1, -2, 0, - -1, 44, - 34, 312, - 133, 312, - 145, 312, - 170, 326, - 171, 326, - -2, 314, - -1, 49, - 135, 336, - -2, 334, - -1, 72, - 39, 372, - -2, 380, - -1, 400, - 121, 703, - -2, 699, - -1, 401, - 121, 704, - -2, 700, - -1, 415, - 39, 373, - -2, 385, - -1, 416, - 39, 374, - -2, 386, - -1, 440, - 89, 958, - -2, 74, - -1, 441, - 89, 873, - -2, 75, - -1, 446, - 89, 840, + -1, 42, + 33, 310, + 132, 310, + 144, 310, + 169, 324, + 170, 324, + -2, 312, + -1, 47, + 134, 334, + -2, 332, + -1, 70, + 38, 370, + -2, 378, + -1, 397, + 120, 701, + -2, 697, + -1, 398, + 120, 702, + -2, 698, + -1, 412, + 38, 371, + -2, 383, + -1, 413, + 38, 372, + -2, 384, + -1, 436, + 88, 956, + -2, 72, + -1, 437, + 88, 871, + -2, 73, + -1, 442, + 88, 838, + -2, 663, + -1, 444, + 88, 903, -2, 665, - -1, 448, - 89, 905, - -2, 667, - -1, 773, - 57, 56, - 59, 56, - -2, 60, - -1, 951, - 121, 706, - -2, 702, - -1, 1381, - 5, 624, - 18, 624, - 20, 624, - 32, 624, - 60, 624, - -2, 411, + -1, 768, + 56, 54, + 58, 54, + -2, 58, + -1, 945, + 120, 704, + -2, 700, + -1, 1372, + 5, 622, + 17, 622, + 19, 622, + 31, 622, + 59, 622, + -2, 409, } const yyPrivate = 57344 -const yyLast = 17957 +const yyLast = 17950 var yyAct = [...]int{ - 400, 1620, 1610, 1420, 1577, 1307, 1232, 1057, 1212, 344, - 620, 1526, 1493, 1361, 1480, 359, 1394, 1030, 1362, 1213, - 1053, 1358, 373, 601, 1100, 746, 700, 739, 1258, 71, - 3, 1086, 1066, 1056, 330, 938, 1199, 1367, 1326, 92, - 1373, 873, 893, 290, 1150, 313, 290, 1070, 1284, 1275, - 787, 92, 1032, 290, 69, 945, 1016, 417, 445, 744, - 749, 971, 1027, 408, 767, 915, 618, 1096, 346, 786, - 570, 28, 784, 766, 1009, 402, 610, 434, 756, 290, - 92, 342, 72, 571, 290, 335, 290, 67, 775, 331, - 442, 431, 334, 713, 901, 66, 8, 7, 590, 6, - 1613, 1597, 1608, 714, 1585, 1605, 1421, 1596, 1584, 1343, - 1450, 1119, 575, 1388, 74, 75, 76, 77, 78, 79, - 94, 95, 96, 1047, 385, 1118, 391, 392, 389, 390, - 388, 387, 386, 1389, 1390, 423, 427, 1048, 1049, 403, - 393, 394, 30, 633, 333, 60, 34, 35, 286, 282, - 283, 284, 439, 788, 1327, 789, 94, 95, 96, 332, - 1266, 278, 339, 1079, 276, 1483, 280, 1117, 1552, 662, - 661, 671, 672, 664, 665, 666, 667, 668, 669, 670, - 663, 1246, 1087, 673, 1245, 1441, 1309, 1247, 94, 95, - 96, 607, 628, 609, 59, 1329, 629, 626, 627, 1439, - 323, 900, 325, 321, 862, 632, 621, 622, 631, 1311, - 861, 859, 1607, 1604, 1578, 1306, 1010, 1570, 1527, 948, - 1114, 1111, 1112, 1071, 1110, 606, 608, 1628, 1294, 1233, - 1235, 616, 1331, 1529, 1335, 591, 1330, 1624, 1328, 577, - 1073, 1535, 1310, 1333, 280, 863, 860, 902, 903, 904, - 1312, 866, 1332, 425, 636, 1073, 850, 1121, 1124, 1384, - 1290, 1291, 1292, 279, 1383, 1334, 1336, 1382, 573, 1303, - 580, 293, 94, 95, 96, 1305, 285, 290, 582, 583, - 281, 1169, 290, 1131, 592, 1559, 1130, 1166, 290, 277, - 1463, 94, 95, 96, 290, 599, 587, 1116, 605, 685, - 686, 1242, 1204, 1179, 1528, 92, 1158, 92, 781, 760, - 698, 1234, 336, 597, 92, 1080, 1054, 673, 604, 1115, - 666, 667, 668, 669, 670, 663, 92, 92, 673, 1087, - 615, 663, 1293, 1583, 673, 1043, 634, 1298, 1295, 1286, - 1296, 1289, 617, 1285, 1072, 294, 894, 1287, 1288, 1553, - 1536, 1534, 888, 1622, 297, 988, 1623, 642, 1621, 1072, - 82, 1297, 306, 1120, 584, 611, 585, 647, 648, 586, - 653, 603, 820, 623, 1568, 1544, 612, 613, 1122, 1304, - 635, 1302, 1371, 593, 594, 595, 94, 95, 96, 790, - 922, 685, 686, 650, 1165, 646, 304, 685, 686, 83, - 1345, 972, 311, 61, 920, 921, 919, 852, 1629, 653, - 683, 671, 672, 664, 665, 666, 667, 668, 669, 670, - 663, 1264, 1573, 673, 645, 643, 92, 644, 736, 290, - 290, 290, 295, 895, 737, 651, 652, 650, 92, 889, - 1407, 652, 650, 1347, 92, 972, 701, 1176, 442, 651, - 652, 650, 1630, 653, 1076, 602, 808, 753, 653, 308, - 298, 1077, 309, 310, 317, 785, 1588, 653, 301, 303, - 314, 299, 300, 319, 318, 750, 296, 316, 315, 576, - 716, 718, 720, 722, 724, 726, 727, 1489, 738, 1488, - 717, 719, 765, 723, 725, 59, 728, 821, 664, 665, - 666, 667, 668, 669, 670, 663, 1279, 918, 673, 1278, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 1267, 779, 774, 834, 837, 838, 839, 840, 841, 842, - 1590, 843, 844, 845, 846, 847, 822, 823, 824, 825, - 806, 807, 835, 275, 809, 437, 810, 811, 812, 813, - 814, 815, 816, 817, 818, 819, 826, 827, 828, 829, - 830, 831, 832, 833, 1164, 1569, 1163, 1506, 578, 579, - 290, 910, 912, 913, 848, 92, 1486, 851, 911, 853, - 290, 290, 92, 92, 92, 651, 652, 650, 290, 993, - 994, 290, 654, 990, 290, 871, 872, 1276, 290, 886, - 92, 412, 878, 653, 1541, 92, 92, 92, 290, 92, - 92, 94, 95, 96, 651, 652, 650, 1532, 1606, 836, - 428, 429, 92, 92, 877, 1073, 1592, 412, 336, 1143, - 1144, 1145, 653, 989, 748, 1532, 1581, 711, 94, 95, - 96, 849, 651, 652, 650, 1532, 412, 569, 856, 857, - 858, 777, 651, 652, 650, 1540, 875, 94, 95, 96, - 653, 1532, 1560, 742, 745, 68, 876, 1532, 1531, 1403, - 653, 880, 881, 882, 939, 884, 885, 1478, 1477, 916, - 1465, 412, 867, 941, 1462, 412, 1413, 1412, 890, 891, - 362, 361, 364, 365, 366, 367, 778, 92, 780, 363, - 368, 94, 95, 96, 777, 940, 1409, 1410, 897, 949, - 94, 95, 96, 1200, 1249, 1200, 960, 963, 1409, 1408, - 412, 1074, 973, 1001, 412, 917, 1037, 955, 776, 1072, - 92, 92, 1013, 412, 1069, 1067, 70, 1068, 30, 30, - 950, 649, 412, 1370, 1065, 1071, 797, 796, 92, 778, - 1359, 776, 1002, 1370, 1459, 290, 701, 951, 92, 1013, - 649, 1370, 290, 1207, 290, 1543, 1012, 942, 943, 1208, - 1513, 949, 290, 290, 1411, 1013, 290, 290, 1250, 1001, - 290, 290, 290, 92, 1046, 1182, 92, 952, 981, 982, - 59, 59, 59, 442, 1013, 1181, 442, 92, 571, 1001, - 985, 1028, 1007, 1001, 776, 991, 865, 1058, 1003, 782, - 995, 1598, 1495, 405, 1081, 1470, 1101, 30, 914, 951, - 1399, 923, 924, 925, 926, 927, 928, 929, 930, 931, - 932, 933, 934, 935, 936, 937, 1005, 1253, 1038, 1097, - 875, 1092, 1040, 1088, 1089, 1090, 1374, 1375, 1036, 1091, - 1308, 290, 92, 1045, 92, 1044, 1123, 879, 1041, 1496, - 290, 290, 290, 290, 290, 59, 290, 290, 1061, 59, - 290, 92, 1102, 1104, 1615, 1611, 1401, 1377, 977, 1018, - 1021, 1022, 1023, 1019, 896, 1020, 1024, 1359, 290, 1374, - 1375, 1280, 898, 290, 869, 290, 290, 1224, 1380, 290, - 92, 1379, 1225, 905, 906, 907, 908, 1602, 1226, 1222, - 1022, 1023, 1098, 1099, 1223, 1221, 1220, 1138, 1106, 1595, - 1108, 412, 956, 957, 418, 1189, 962, 965, 966, 1018, - 1021, 1022, 1023, 1019, 1351, 1020, 1024, 1135, 419, 747, - 1600, 401, 916, 1198, 1197, 751, 752, 421, 1271, 420, - 795, 980, 600, 1263, 983, 984, 1575, 1574, 958, 959, - 968, 662, 661, 671, 672, 664, 665, 666, 667, 668, - 669, 670, 663, 1511, 969, 673, 418, 740, 1261, 1255, - 93, 1457, 1491, 1107, 291, 1146, 868, 291, 917, 741, - 419, 1026, 93, 409, 291, 406, 407, 415, 416, 421, - 1196, 420, 1456, 290, 410, 70, 1455, 1354, 1195, 1200, - 630, 1617, 1616, 1188, 290, 290, 290, 290, 290, 1160, - 291, 93, 1214, 1193, 403, 291, 290, 291, 1159, 1170, - 290, 1167, 1175, 892, 290, 761, 754, 1617, 290, 1209, - 1557, 1484, 987, 405, 1052, 1205, 68, 73, 65, 1, - 312, 1192, 1609, 1422, 1492, 1248, 1113, 92, 1576, 1231, - 1525, 1203, 1201, 1393, 1251, 1202, 1254, 1058, 1064, 1055, - 1259, 1259, 81, 1238, 568, 1240, 80, 1241, 1567, 1216, - 1217, 1227, 1219, 1147, 1148, 1149, 1237, 1215, 887, 614, - 1218, 1063, 1062, 1533, 1265, 1078, 1482, 1243, 1400, 1260, - 1239, 1262, 1572, 803, 801, 92, 92, 1270, 802, 1272, - 1273, 1274, 800, 805, 1268, 1269, 1256, 1257, 804, 799, - 305, 899, 1082, 1083, 1084, 1085, 322, 1317, 1025, 791, - 1103, 755, 84, 1301, 1300, 92, 1109, 1075, 1093, 1094, - 1095, 302, 1277, 624, 1283, 625, 307, 662, 661, 671, - 672, 664, 665, 666, 667, 668, 669, 670, 663, 92, - 1299, 673, 681, 1194, 1244, 939, 1155, 1156, 443, 1323, - 436, 1365, 1282, 992, 743, 1454, 1353, 1174, 710, 1314, - 1315, 970, 770, 345, 909, 1324, 360, 1173, 1325, 357, - 1348, 358, 1316, 996, 1206, 290, 655, 343, 337, 1344, - 1337, 1313, 769, 762, 1338, 92, 1017, 1015, 1014, 432, - 1376, 92, 92, 1322, 1372, 1323, 1360, 1214, 291, 768, - 1000, 950, 414, 291, 1449, 1551, 1177, 413, 967, 291, - 52, 1363, 638, 327, 33, 291, 422, 92, 951, 23, - 22, 21, 20, 1190, 1191, 745, 93, 19, 93, 1369, - 25, 92, 18, 92, 92, 93, 17, 1259, 1259, 1378, - 1392, 1058, 16, 1058, 1386, 588, 37, 93, 93, 1357, - 27, 26, 1406, 15, 1385, 14, 1387, 13, 12, 11, - 10, 290, 9, 5, 1391, 1397, 1398, 1396, 4, 1404, - 1405, 641, 976, 24, 699, 2, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 92, 0, 1423, - 92, 92, 92, 290, 1318, 1319, 0, 0, 0, 1415, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1339, - 1340, 0, 1341, 1342, 1416, 0, 1418, 0, 1428, 1429, - 0, 0, 0, 0, 1349, 1350, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1437, 0, 0, 0, - 0, 0, 1453, 0, 411, 0, 0, 93, 0, 0, - 291, 291, 291, 0, 0, 0, 0, 0, 0, 93, - 1214, 0, 1458, 0, 0, 93, 0, 0, 1432, 0, - 1467, 0, 92, 0, 0, 1466, 0, 0, 0, 1251, - 92, 0, 1058, 662, 661, 671, 672, 664, 665, 666, - 667, 668, 669, 670, 663, 92, 0, 673, 0, 0, - 0, 0, 92, 0, 0, 0, 1402, 0, 0, 0, - 1346, 0, 1494, 0, 0, 0, 1499, 0, 0, 0, - 1485, 0, 1487, 0, 0, 0, 0, 0, 0, 0, - 1476, 0, 0, 0, 1355, 0, 0, 0, 0, 0, - 1497, 0, 0, 92, 92, 0, 92, 1498, 0, 0, - 0, 92, 0, 92, 92, 92, 290, 0, 1512, 92, - 1430, 1490, 1363, 1510, 0, 1519, 0, 1520, 1522, 1523, - 0, 1514, 0, 1524, 0, 1530, 92, 290, 0, 0, - 1537, 0, 0, 0, 0, 0, 1538, 0, 1539, 0, - 1545, 291, 0, 1505, 0, 0, 93, 0, 0, 0, - 0, 291, 291, 93, 93, 93, 0, 1558, 1566, 291, - 1518, 1564, 291, 92, 0, 291, 1363, 1565, 0, 291, - 0, 93, 0, 0, 92, 92, 93, 93, 93, 291, - 93, 93, 1580, 0, 1494, 1058, 1579, 0, 0, 0, - 92, 0, 0, 93, 93, 0, 1586, 1214, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 92, - 0, 0, 0, 0, 0, 0, 0, 1594, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1599, 1601, 92, - 0, 1451, 0, 0, 0, 0, 0, 1500, 1501, 1502, - 1503, 1504, 1614, 1603, 0, 1507, 1508, 0, 336, 1625, - 0, 0, 0, 374, 29, 1468, 0, 0, 1469, 0, - 0, 1471, 1452, 0, 0, 0, 0, 0, 93, 0, - 0, 0, 0, 1434, 1435, 0, 1436, 0, 0, 1438, - 0, 1440, 0, 29, 0, 662, 661, 671, 672, 664, - 665, 666, 667, 668, 669, 670, 663, 0, 0, 673, - 0, 93, 93, 662, 661, 671, 672, 664, 665, 666, - 667, 668, 669, 670, 663, 0, 0, 673, 0, 93, - 0, 404, 0, 0, 0, 0, 291, 0, 0, 93, - 0, 0, 0, 291, 0, 291, 0, 0, 0, 1509, - 336, 1479, 1151, 291, 291, 0, 0, 291, 291, 0, - 0, 291, 291, 291, 93, 0, 0, 93, 30, 31, - 32, 60, 34, 35, 1447, 0, 0, 0, 93, 1152, - 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, - 0, 0, 0, 36, 55, 56, 0, 58, 0, 662, - 661, 671, 672, 664, 665, 666, 667, 668, 669, 670, - 663, 0, 0, 673, 0, 1618, 45, 0, 0, 0, - 59, 661, 671, 672, 664, 665, 666, 667, 668, 669, - 670, 663, 291, 93, 673, 93, 0, 0, 0, 0, - 0, 291, 291, 291, 291, 291, 0, 291, 291, 0, - 0, 291, 93, 0, 662, 661, 671, 672, 664, 665, - 666, 667, 668, 669, 670, 663, 0, 0, 673, 291, - 0, 1446, 0, 0, 291, 0, 291, 291, 0, 0, - 291, 93, 0, 0, 0, 0, 38, 39, 41, 40, - 43, 0, 57, 0, 0, 0, 0, 0, 0, 371, - 662, 661, 671, 672, 664, 665, 666, 667, 668, 669, - 670, 663, 0, 0, 673, 44, 63, 62, 0, 0, - 53, 54, 42, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 46, 47, 91, 48, - 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, - 324, 662, 661, 671, 672, 664, 665, 666, 667, 668, - 669, 670, 663, 0, 0, 673, 0, 0, 619, 0, - 619, 0, 0, 0, 0, 0, 0, 619, 0, 444, - 0, 0, 0, 0, 291, 0, 0, 0, 0, 0, - 0, 29, 0, 0, 1445, 291, 291, 291, 291, 291, - 0, 0, 0, 0, 682, 684, 0, 291, 0, 0, - 0, 291, 0, 0, 0, 291, 0, 0, 0, 291, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, - 0, 0, 953, 954, 0, 697, 0, 0, 93, 702, - 703, 704, 705, 706, 707, 708, 709, 0, 712, 715, - 715, 715, 721, 715, 715, 721, 715, 729, 730, 731, - 732, 733, 734, 735, 1444, 0, 0, 0, 29, 0, - 986, 0, 0, 0, 662, 661, 671, 672, 664, 665, - 666, 667, 668, 669, 670, 663, 93, 93, 673, 0, - 0, 0, 0, 771, 0, 0, 0, 0, 0, 0, - 0, 657, 0, 660, 0, 0, 0, 0, 0, 674, - 675, 676, 677, 678, 679, 680, 93, 658, 659, 656, - 662, 661, 671, 672, 664, 665, 666, 667, 668, 669, - 670, 663, 0, 0, 673, 0, 772, 0, 0, 0, - 93, 0, 0, 0, 662, 661, 671, 672, 664, 665, - 666, 667, 668, 669, 670, 663, 0, 0, 673, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 291, 0, 0, 288, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 326, - 0, 0, 93, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 444, 0, 444, 0, 0, 0, - 0, 0, 0, 444, 0, 433, 0, 0, 93, 0, - 572, 0, 574, 0, 0, 637, 639, 0, 0, 0, - 0, 0, 93, 0, 93, 93, 0, 0, 619, 0, - 0, 0, 0, 0, 0, 619, 619, 619, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 619, 0, 0, 0, 0, 619, 619, - 619, 0, 619, 619, 1153, 0, 0, 0, 1154, 0, - 0, 0, 291, 0, 0, 619, 619, 0, 93, 1161, - 1162, 93, 93, 93, 291, 1168, 0, 0, 1171, 1172, - 0, 0, 0, 0, 0, 0, 1178, 0, 0, 0, - 1180, 0, 0, 1183, 1184, 1185, 1186, 1187, 0, 0, - 0, 0, 0, 0, 0, 758, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, - 0, 0, 0, 792, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1229, 1230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 93, 0, 0, 0, - 0, 0, 0, 93, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 581, 0, 0, 0, 0, 589, 0, - 0, 0, 0, 0, 596, 0, 0, 0, 0, 0, - 598, 0, 0, 0, 0, 1029, 0, 0, 0, 771, - 0, 0, 0, 771, 93, 93, 0, 93, 0, 0, - 0, 0, 93, 0, 93, 93, 93, 291, 0, 0, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 444, 0, 0, 93, 291, 0, - 0, 444, 444, 444, 0, 0, 0, 0, 1320, 1321, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 444, - 0, 0, 0, 0, 444, 444, 444, 0, 444, 444, - 0, 0, 0, 0, 93, 619, 0, 619, 0, 0, - 0, 444, 444, 0, 0, 93, 93, 0, 0, 0, - 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, - 0, 93, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 291, 0, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 0, 1381, 764, 0, 773, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 944, 0, 444, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 974, 1157, 0, 0, 404, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 978, - 979, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 997, 0, 0, - 0, 0, 0, 0, 0, 1431, 0, 758, 0, 1433, - 444, 0, 0, 0, 0, 0, 771, 0, 0, 0, - 1442, 1443, 0, 1210, 1211, 0, 0, 771, 771, 771, - 771, 771, 444, 0, 0, 444, 0, 0, 0, 0, - 0, 0, 0, 1029, 0, 1236, 444, 1460, 1461, 0, - 1464, 771, 0, 0, 0, 0, 798, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 854, 855, 1475, 0, - 0, 0, 0, 0, 864, 0, 0, 433, 0, 0, - 870, 0, 372, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, - 0, 444, 0, 444, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 619, - 444, 0, 0, 0, 0, 289, 0, 0, 320, 0, - 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 619, 1142, - 0, 0, 0, 0, 0, 1521, 0, 426, 426, 0, - 0, 435, 0, 0, 0, 0, 289, 0, 289, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1547, 1548, 1549, 1550, 0, 1554, 0, - 1555, 1556, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1561, 0, 1562, 1563, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1364, 0, 29, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1582, 0, 0, 0, 0, 0, - 0, 1004, 0, 0, 0, 0, 0, 0, 1008, 0, - 1011, 0, 0, 0, 0, 0, 0, 0, 0, 1591, - 0, 0, 974, 1039, 0, 0, 0, 0, 0, 0, + 397, 1611, 1568, 1411, 1601, 1299, 1517, 1471, 1352, 356, + 1204, 1050, 341, 1484, 1385, 1224, 1023, 616, 1205, 405, + 1046, 1250, 1059, 1349, 1353, 735, 597, 370, 696, 69, + 3, 1079, 1049, 1093, 1358, 1318, 441, 89, 932, 1143, + 1364, 287, 1192, 310, 287, 867, 1267, 1063, 1276, 89, + 939, 287, 781, 1009, 887, 614, 1025, 414, 742, 761, + 745, 740, 909, 965, 343, 1020, 27, 399, 1089, 65, + 566, 606, 1002, 780, 770, 339, 287, 89, 427, 70, + 567, 287, 895, 287, 327, 332, 67, 430, 435, 709, + 752, 64, 7, 6, 438, 5, 710, 1604, 586, 1588, + 767, 1599, 1576, 762, 1596, 1412, 1587, 1575, 1335, 1441, + 72, 73, 74, 75, 76, 571, 283, 279, 280, 281, + 1073, 1112, 382, 1379, 388, 389, 386, 387, 385, 384, + 383, 275, 400, 420, 273, 1111, 277, 328, 390, 391, + 331, 285, 91, 92, 93, 1380, 1381, 1238, 1040, 629, + 1237, 323, 29, 1239, 58, 32, 33, 1041, 1042, 782, + 330, 783, 329, 1258, 336, 624, 91, 92, 93, 625, + 622, 623, 1072, 1301, 942, 1474, 429, 1110, 91, 92, + 93, 568, 1319, 570, 1080, 1432, 1543, 658, 657, 667, + 668, 660, 661, 662, 663, 664, 665, 666, 659, 970, + 1430, 669, 320, 57, 894, 322, 318, 627, 856, 617, + 618, 628, 1303, 603, 855, 605, 853, 1598, 1569, 1595, + 1298, 1003, 1561, 1321, 1064, 1619, 612, 1518, 587, 1302, + 1107, 1104, 1105, 276, 1103, 896, 897, 898, 1225, 1227, + 573, 1615, 1520, 277, 282, 1304, 1295, 602, 604, 857, + 854, 860, 1297, 632, 1526, 844, 1375, 1066, 1374, 274, + 1323, 1373, 1327, 569, 1322, 583, 1320, 1114, 1117, 408, + 576, 1325, 290, 278, 287, 578, 579, 681, 682, 287, + 1324, 588, 1066, 1124, 1162, 287, 1123, 1550, 1454, 1159, + 1234, 287, 595, 1326, 1328, 601, 1197, 1172, 1151, 776, + 756, 694, 89, 593, 89, 659, 1036, 1109, 669, 1047, + 669, 89, 916, 1519, 91, 92, 93, 888, 982, 1080, + 1226, 607, 649, 89, 89, 611, 914, 915, 913, 1108, + 966, 1559, 1574, 580, 882, 581, 630, 613, 582, 79, + 600, 658, 657, 667, 668, 660, 661, 662, 663, 664, + 665, 666, 659, 1535, 638, 669, 1296, 1613, 1294, 619, + 1614, 1065, 1612, 1527, 1525, 1362, 631, 1544, 608, 609, + 91, 92, 93, 1113, 577, 647, 648, 646, 80, 585, + 589, 590, 591, 1339, 599, 592, 1065, 784, 1115, 642, + 1337, 594, 846, 649, 681, 682, 1564, 1256, 1144, 681, + 682, 749, 572, 679, 889, 662, 663, 664, 665, 666, + 659, 1579, 59, 669, 643, 644, 646, 641, 639, 1480, + 640, 883, 1286, 89, 1398, 287, 287, 287, 966, 1479, + 1169, 733, 649, 1271, 89, 91, 92, 93, 697, 1270, + 89, 667, 668, 660, 661, 662, 663, 664, 665, 666, + 659, 438, 1620, 669, 1282, 1283, 1284, 1259, 732, 660, + 661, 662, 663, 664, 665, 666, 659, 1581, 598, 669, + 1560, 565, 746, 712, 714, 716, 718, 720, 722, 723, + 713, 715, 734, 719, 721, 1157, 724, 1156, 574, 575, + 1069, 760, 904, 906, 907, 1497, 1621, 1070, 1477, 905, + 1268, 880, 1444, 774, 872, 769, 647, 648, 646, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 648, + 646, 409, 779, 1532, 649, 759, 1285, 768, 1066, 1523, + 1597, 1290, 1287, 1278, 1288, 1281, 649, 1277, 647, 648, + 646, 1279, 1280, 658, 657, 667, 668, 660, 661, 662, + 663, 664, 665, 666, 659, 1289, 649, 669, 1531, 1361, + 91, 92, 93, 1136, 1137, 1138, 287, 1583, 409, 57, + 842, 89, 1394, 845, 1067, 847, 287, 287, 89, 89, + 89, 912, 1523, 1572, 287, 984, 744, 287, 987, 988, + 287, 865, 866, 272, 287, 1030, 89, 771, 1158, 1523, + 409, 89, 89, 89, 287, 89, 89, 657, 667, 668, + 660, 661, 662, 663, 664, 665, 666, 659, 89, 89, + 669, 1523, 1551, 871, 66, 983, 843, 1523, 1522, 1193, + 869, 1450, 1065, 850, 851, 852, 1350, 1062, 1060, 1361, + 1061, 647, 648, 646, 647, 648, 646, 1058, 1064, 1469, + 1468, 870, 645, 647, 648, 646, 874, 875, 876, 649, + 878, 879, 649, 1456, 409, 861, 792, 424, 425, 1005, + 933, 649, 1193, 884, 885, 1006, 848, 849, 409, 935, + 910, 91, 92, 93, 858, 934, 68, 429, 1453, 409, + 864, 1404, 1403, 89, 91, 92, 93, 1006, 1241, 891, + 91, 92, 93, 772, 877, 1400, 1401, 1400, 1399, 995, + 409, 1534, 943, 1006, 409, 954, 957, 911, 1361, 29, + 1402, 967, 645, 409, 791, 790, 89, 89, 1006, 995, + 29, 945, 359, 358, 361, 362, 363, 364, 772, 996, + 944, 360, 365, 1199, 89, 1242, 1039, 697, 773, 1200, + 775, 287, 979, 1175, 89, 1174, 949, 936, 937, 287, + 1504, 402, 989, 995, 771, 946, 398, 287, 287, 985, + 57, 287, 287, 859, 943, 287, 287, 287, 89, 975, + 976, 57, 57, 773, 777, 771, 995, 1589, 1486, 1074, + 1461, 89, 567, 945, 1094, 438, 1021, 1390, 1365, 1366, + 1606, 1245, 1001, 90, 997, 1090, 1085, 288, 1051, 1084, + 288, 1602, 57, 869, 1300, 90, 908, 288, 29, 917, + 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 930, 931, 1487, 1097, 1031, 1081, 1082, 1083, + 1033, 1029, 288, 90, 999, 287, 89, 288, 89, 288, + 1116, 998, 1038, 1392, 287, 287, 287, 287, 287, 1004, + 287, 287, 1054, 1034, 287, 89, 1037, 1371, 1368, 57, + 1350, 1272, 1032, 950, 951, 1095, 971, 956, 959, 960, + 892, 863, 287, 1216, 1370, 1213, 1214, 287, 1217, 287, + 287, 1215, 1212, 287, 89, 947, 948, 1218, 1593, 1015, + 1016, 1099, 974, 1101, 1586, 977, 978, 1091, 1092, 1011, + 1014, 1015, 1016, 1012, 1131, 1013, 1017, 1343, 1182, 743, + 1128, 1075, 1076, 1077, 1078, 1011, 1014, 1015, 1016, 1012, + 1591, 1013, 1017, 980, 1191, 1365, 1366, 1086, 1087, 1088, + 1190, 910, 1263, 789, 596, 1098, 1255, 1566, 962, 415, + 1565, 1502, 1253, 736, 1118, 1119, 1120, 1121, 1122, 1247, + 1125, 1126, 963, 416, 1127, 737, 1448, 415, 1482, 1153, + 747, 748, 418, 1100, 417, 862, 1139, 1019, 911, 403, + 404, 416, 1129, 1189, 406, 1447, 407, 1130, 412, 413, + 418, 1188, 417, 1134, 68, 1446, 1346, 287, 1193, 626, + 1608, 1607, 402, 1163, 1160, 1181, 886, 287, 287, 287, + 287, 287, 750, 400, 1152, 1186, 1608, 1548, 1206, 287, + 1475, 981, 66, 287, 71, 63, 1, 287, 1168, 309, + 1600, 287, 1201, 1413, 1483, 1106, 1567, 1516, 1384, 1057, + 288, 1048, 78, 564, 77, 288, 1558, 1185, 1240, 881, + 89, 288, 1223, 610, 1056, 1196, 1194, 288, 1055, 1246, + 1524, 1243, 1195, 1251, 1251, 1473, 1207, 1051, 90, 1210, + 90, 1219, 1230, 1068, 1232, 1257, 1233, 90, 1071, 1140, + 1141, 1142, 1391, 1229, 1254, 1252, 1563, 797, 795, 90, + 90, 796, 1235, 794, 799, 798, 1231, 793, 89, 89, + 1262, 302, 1264, 1265, 1266, 433, 893, 1260, 1261, 1248, + 1249, 1208, 1209, 319, 1211, 1148, 1149, 1018, 785, 1096, + 751, 81, 1293, 1292, 1102, 299, 620, 621, 89, 304, + 677, 1187, 1269, 1236, 439, 1146, 1166, 432, 1356, 1147, + 986, 739, 1445, 1345, 1167, 706, 964, 765, 342, 903, + 1154, 1155, 89, 1291, 1274, 357, 1161, 354, 933, 1164, + 1165, 355, 990, 1198, 651, 340, 334, 1171, 764, 1315, + 757, 1173, 1010, 1008, 1176, 1177, 1178, 1179, 1180, 1317, + 1308, 1007, 428, 1305, 1306, 1307, 1367, 1275, 287, 90, + 1340, 288, 288, 288, 1330, 1363, 1329, 763, 89, 994, + 90, 1314, 411, 89, 89, 1440, 90, 1542, 410, 945, + 1351, 1316, 1206, 961, 50, 1315, 634, 324, 944, 31, + 1221, 1222, 419, 22, 21, 1336, 20, 19, 1354, 89, + 658, 657, 667, 668, 660, 661, 662, 663, 664, 665, + 666, 659, 18, 89, 669, 89, 89, 1360, 24, 1251, + 1251, 1369, 17, 16, 15, 584, 1383, 35, 26, 25, + 1051, 14, 1051, 1376, 1397, 13, 12, 11, 10, 1387, + 1388, 1389, 409, 287, 1378, 1382, 9, 8, 4, 637, + 23, 1395, 1396, 695, 2, 0, 0, 0, 1344, 1377, + 0, 0, 0, 287, 0, 0, 0, 0, 0, 89, + 0, 1414, 89, 89, 89, 287, 0, 0, 0, 1310, + 1311, 0, 658, 657, 667, 668, 660, 661, 662, 663, + 664, 665, 666, 659, 1331, 1332, 669, 1333, 1334, 0, + 0, 0, 288, 1419, 1420, 0, 1423, 90, 0, 1341, + 1342, 0, 288, 288, 90, 90, 90, 0, 1312, 1313, + 288, 0, 0, 288, 0, 0, 288, 1428, 0, 0, + 288, 1406, 90, 0, 0, 0, 0, 90, 90, 90, + 288, 90, 90, 1405, 1206, 1449, 1407, 0, 1409, 0, + 1458, 0, 0, 89, 90, 90, 0, 0, 0, 0, + 0, 89, 0, 1408, 1243, 0, 0, 1467, 0, 0, + 1051, 0, 0, 0, 0, 1418, 89, 0, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 0, 1457, + 1393, 0, 0, 1372, 0, 0, 0, 1490, 0, 0, + 1485, 1476, 0, 1478, 0, 0, 0, 0, 0, 0, + 1425, 1426, 0, 1427, 0, 0, 1429, 0, 1431, 1488, + 0, 0, 0, 0, 89, 89, 0, 89, 1489, 90, + 1496, 1481, 89, 0, 89, 89, 89, 287, 0, 1510, + 89, 1511, 1513, 1514, 1421, 1503, 1501, 1509, 1354, 0, + 0, 0, 1505, 1515, 1521, 1528, 0, 89, 287, 0, + 0, 0, 90, 90, 1536, 0, 0, 1529, 0, 1530, + 0, 0, 0, 0, 0, 0, 0, 1470, 0, 0, + 90, 0, 0, 1549, 1422, 0, 0, 288, 1424, 1557, + 90, 0, 0, 1556, 89, 288, 0, 0, 0, 1433, + 1434, 1555, 1354, 288, 288, 89, 89, 288, 288, 422, + 0, 288, 288, 288, 90, 0, 0, 1571, 1570, 0, + 0, 89, 1485, 1051, 0, 1451, 1452, 90, 1455, 1577, + 0, 1206, 287, 0, 0, 0, 0, 0, 0, 0, + 89, 0, 0, 0, 0, 0, 1466, 0, 1585, 0, + 0, 0, 0, 0, 1438, 0, 1590, 0, 1537, 1592, + 89, 1443, 0, 0, 0, 0, 333, 1594, 0, 0, + 1491, 1492, 1493, 1494, 1495, 1605, 0, 0, 1498, 1499, + 1616, 288, 90, 0, 90, 0, 0, 0, 0, 0, + 288, 288, 288, 288, 288, 0, 288, 288, 0, 0, + 288, 90, 658, 657, 667, 668, 660, 661, 662, 663, + 664, 665, 666, 659, 0, 0, 669, 0, 288, 0, + 0, 0, 0, 288, 0, 288, 288, 0, 0, 288, + 90, 0, 1580, 1512, 658, 657, 667, 668, 660, 661, + 662, 663, 664, 665, 666, 659, 0, 0, 669, 0, + 0, 0, 29, 30, 58, 32, 33, 0, 0, 0, + 0, 1538, 1539, 1540, 1541, 0, 1545, 1309, 1546, 1547, + 0, 62, 0, 371, 28, 0, 34, 53, 54, 0, + 56, 1552, 0, 1553, 1554, 0, 0, 658, 657, 667, + 668, 660, 661, 662, 663, 664, 665, 666, 659, 43, + 0, 669, 28, 57, 0, 0, 0, 0, 0, 0, + 0, 0, 1573, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1437, 0, 0, + 0, 0, 0, 288, 0, 0, 0, 1582, 1609, 401, + 0, 0, 0, 288, 288, 288, 288, 288, 0, 0, + 0, 0, 0, 0, 0, 288, 0, 0, 0, 288, + 0, 0, 0, 288, 0, 0, 1436, 288, 0, 36, + 37, 39, 38, 41, 0, 55, 0, 0, 0, 1617, + 1618, 0, 0, 0, 0, 0, 90, 0, 0, 1435, + 0, 368, 0, 0, 0, 0, 0, 0, 42, 61, + 60, 0, 0, 51, 52, 40, 0, 658, 657, 667, + 668, 660, 661, 662, 663, 664, 665, 666, 659, 44, + 45, 669, 46, 47, 48, 49, 0, 0, 88, 0, + 0, 0, 0, 0, 90, 90, 0, 0, 0, 0, + 321, 0, 0, 0, 0, 650, 658, 657, 667, 668, + 660, 661, 662, 663, 664, 665, 666, 659, 0, 0, + 669, 0, 0, 0, 90, 0, 0, 0, 440, 658, + 657, 667, 668, 660, 661, 662, 663, 664, 665, 666, + 659, 333, 0, 669, 0, 0, 0, 0, 90, 0, + 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 59, 0, 0, 0, 738, 741, 0, 0, + 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, + 0, 0, 0, 653, 90, 656, 0, 0, 0, 90, + 90, 670, 671, 672, 673, 674, 675, 676, 0, 654, + 655, 652, 658, 657, 667, 668, 660, 661, 662, 663, + 664, 665, 666, 659, 0, 90, 669, 0, 0, 0, + 0, 0, 0, 0, 0, 615, 0, 615, 0, 90, + 0, 90, 90, 0, 615, 0, 0, 0, 0, 0, + 0, 0, 0, 1145, 0, 0, 0, 0, 28, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 288, + 0, 678, 680, 658, 657, 667, 668, 660, 661, 662, + 663, 664, 665, 666, 659, 0, 0, 669, 0, 288, + 0, 0, 0, 0, 0, 90, 0, 0, 90, 90, + 90, 288, 693, 0, 0, 0, 698, 699, 700, 701, + 702, 703, 704, 705, 0, 708, 711, 711, 711, 717, + 711, 711, 717, 711, 725, 726, 727, 728, 729, 730, + 731, 0, 0, 0, 0, 28, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 0, 440, 0, 0, 0, 766, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 873, + 0, 0, 0, 0, 633, 635, 0, 0, 0, 90, + 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, + 0, 0, 0, 0, 0, 0, 890, 0, 0, 0, + 0, 0, 90, 0, 0, 0, 0, 0, 0, 90, + 0, 0, 0, 0, 0, 899, 900, 901, 902, 91, + 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 90, 0, 90, 0, 0, 0, 0, 90, 0, + 90, 90, 90, 288, 0, 0, 90, 0, 0, 0, + 952, 953, 0, 291, 754, 0, 0, 0, 0, 0, + 0, 0, 294, 90, 288, 440, 0, 0, 0, 0, + 303, 786, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 615, 0, 0, 0, 0, 0, + 0, 615, 615, 615, 0, 0, 0, 0, 0, 0, + 90, 0, 0, 0, 301, 0, 0, 0, 0, 615, + 308, 90, 90, 0, 615, 615, 615, 0, 615, 615, + 0, 0, 0, 0, 0, 0, 0, 90, 0, 0, + 0, 615, 615, 0, 1045, 0, 0, 0, 288, 0, + 292, 0, 0, 0, 0, 0, 90, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 305, 295, 0, + 306, 307, 314, 0, 0, 0, 298, 300, 311, 296, + 297, 316, 315, 0, 293, 313, 312, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 440, 0, 0, 0, 0, 0, 0, 440, + 440, 440, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, + 0, 0, 440, 440, 440, 0, 440, 440, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 814, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1022, 0, 0, 0, 766, 0, 0, 0, 766, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1170, 0, 0, 0, + 0, 0, 0, 0, 938, 0, 440, 0, 0, 0, + 0, 0, 0, 1183, 1184, 741, 0, 0, 0, 0, + 968, 0, 0, 0, 0, 0, 0, 0, 802, 0, + 0, 0, 0, 0, 0, 0, 0, 972, 973, 615, + 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 991, 0, 0, 615, 0, + 0, 0, 0, 0, 0, 754, 0, 0, 440, 815, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 0, 0, 0, 828, 831, 832, 833, 834, + 835, 836, 440, 837, 838, 839, 840, 841, 816, 817, + 818, 819, 800, 801, 829, 0, 803, 0, 804, 805, + 806, 807, 808, 809, 810, 811, 812, 813, 820, 821, + 822, 823, 824, 825, 826, 827, 0, 1150, 0, 0, + 401, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 0, 440, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 766, 830, 0, 0, 0, 369, 1202, 1203, 0, 1338, + 766, 766, 766, 766, 766, 1135, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1022, 0, 1228, 0, + 0, 0, 0, 1347, 766, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 317, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 423, 0, + 0, 431, 0, 0, 0, 0, 286, 0, 286, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 968, 0, 0, + 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 440, 0, 0, 0, 0, 0, 0, 0, 1442, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 333, 0, 0, 0, 0, + 0, 0, 1459, 0, 1355, 1460, 28, 0, 1462, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1273, + 440, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 440, 0, 0, 0, 0, 0, 286, + 0, 0, 0, 0, 286, 0, 1500, 333, 0, 0, + 286, 0, 0, 0, 440, 0, 286, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, + 0, 968, 0, 0, 1357, 1359, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1439, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1359, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 440, 0, 440, 1386, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1463, 1464, 1465, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 615, + 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, + 1410, 0, 0, 1415, 1416, 1417, 0, 0, 0, 0, + 286, 286, 286, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1355, 0, 28, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 968, 0, 0, 1533, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 440, 0, 0, 0, 1355, 0, + 0, 0, 1472, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, + 0, 0, 0, 0, 440, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 286, 0, 0, 0, 1506, 1507, 0, 1508, 0, + 0, 286, 286, 1472, 0, 1472, 1472, 1472, 0, 286, + 0, 1386, 286, 0, 0, 286, 0, 0, 0, 868, + 0, 0, 1603, 0, 0, 0, 0, 0, 1472, 286, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1562, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 440, 440, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 968, 0, 1578, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1584, 0, 0, 0, 0, 0, 0, 0, 423, + 868, 0, 0, 0, 423, 423, 0, 0, 423, 423, + 423, 1472, 0, 0, 969, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 423, 423, 423, 423, 423, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, + 0, 0, 868, 0, 286, 0, 0, 0, 0, 0, + 0, 0, 286, 1027, 0, 0, 286, 286, 0, 0, + 286, 1035, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1626, 1627, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1105, 0, 0, - 0, 0, 0, 0, 0, 0, 1125, 1126, 1127, 1128, - 1129, 0, 1132, 1133, 1281, 444, 1134, 1448, 0, 289, - 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, - 289, 0, 0, 0, 1136, 0, 289, 0, 0, 1137, - 0, 0, 0, 0, 444, 1141, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1472, 1473, 1474, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 444, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 619, 444, + 286, 0, 0, 0, 0, 0, 0, 0, 0, 286, + 286, 286, 286, 286, 0, 286, 286, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, + 0, 0, 286, 0, 1132, 1133, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 444, 0, 0, 974, 0, 0, - 1366, 1368, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1364, 0, 29, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1368, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 426, 0, 0, - 444, 0, 444, 1395, 0, 1542, 0, 0, 0, 0, - 0, 289, 289, 289, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1364, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1419, 0, 0, 1424, - 1425, 1426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 423, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 974, 1612, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 423, 286, 0, 0, 0, 0, 0, 0, 0, + 0, 969, 286, 286, 286, 286, 286, 0, 0, 0, + 0, 0, 0, 0, 1220, 0, 0, 0, 286, 0, + 0, 0, 1027, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 444, 0, 0, 0, 0, 0, 0, 0, 1481, - 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 289, 289, 444, 0, 0, 0, 0, 0, - 289, 444, 0, 289, 0, 0, 289, 0, 0, 0, - 874, 1352, 0, 0, 0, 0, 0, 0, 0, 0, - 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1515, 1516, 0, 1517, 0, 0, 0, 0, - 1481, 0, 1481, 1481, 1481, 0, 0, 0, 1395, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1481, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 426, 874, 1571, 0, 0, 426, 426, 1417, 0, 426, - 426, 426, 0, 444, 444, 975, 0, 0, 0, 1427, - 0, 0, 0, 0, 0, 0, 0, 974, 0, 1587, - 0, 0, 0, 0, 426, 426, 426, 426, 426, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1593, 0, - 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, - 0, 0, 0, 874, 289, 0, 289, 0, 1481, 0, - 0, 0, 0, 0, 289, 1034, 0, 0, 289, 289, - 0, 0, 289, 1042, 874, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, - 0, 0, 289, 289, 289, 289, 289, 0, 289, 289, - 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 289, 0, 0, 0, 0, 289, 0, 1139, 1140, 0, - 0, 289, 0, 1546, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 426, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 426, 0, 0, 0, 0, 0, 0, 1589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 426, 289, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 975, 289, 289, 289, 289, - 289, 0, 0, 0, 0, 0, 0, 0, 1228, 0, - 0, 0, 289, 0, 0, 0, 1034, 0, 0, 0, - 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1396, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1406, + 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 414, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 956, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 426, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 874, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 282, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1027, 0, 0, 0, 0, 0, 550, 538, + 0, 495, 553, 468, 485, 561, 486, 489, 526, 453, + 508, 181, 483, 286, 472, 448, 479, 449, 470, 497, + 123, 501, 467, 540, 511, 552, 152, 0, 473, 559, + 155, 517, 0, 228, 169, 0, 0, 0, 499, 542, + 506, 535, 494, 527, 458, 516, 554, 484, 524, 555, + 0, 0, 0, 91, 92, 93, 0, 1052, 1053, 0, + 0, 0, 0, 0, 113, 0, 521, 549, 481, 523, + 525, 563, 447, 518, 969, 451, 454, 560, 545, 476, + 477, 1244, 0, 0, 0, 0, 0, 286, 498, 507, + 532, 492, 0, 0, 0, 0, 0, 0, 0, 0, + 474, 0, 515, 0, 0, 0, 455, 452, 0, 0, + 0, 0, 496, 0, 0, 0, 457, 0, 475, 533, + 0, 445, 132, 537, 544, 493, 289, 548, 491, 490, + 551, 200, 0, 232, 136, 151, 109, 148, 95, 105, + 0, 134, 178, 208, 212, 541, 471, 480, 117, 478, + 210, 188, 249, 514, 190, 209, 156, 238, 201, 248, + 258, 259, 235, 256, 267, 225, 98, 234, 246, 114, + 220, 0, 0, 0, 100, 244, 231, 167, 145, 146, + 99, 0, 206, 122, 130, 119, 180, 241, 242, 118, + 270, 106, 255, 102, 107, 254, 174, 237, 245, 168, + 161, 101, 243, 166, 160, 150, 126, 138, 198, 158, + 199, 139, 171, 170, 172, 0, 450, 0, 229, 252, + 271, 111, 466, 236, 263, 266, 0, 202, 112, 131, + 125, 197, 129, 153, 262, 264, 265, 173, 108, 141, + 226, 149, 157, 205, 269, 187, 211, 115, 251, 227, + 462, 465, 460, 461, 509, 510, 556, 557, 558, 534, + 456, 0, 463, 464, 0, 539, 546, 547, 513, 94, + 103, 154, 268, 203, 128, 253, 446, 459, 121, 469, + 0, 0, 482, 487, 488, 500, 502, 503, 504, 505, + 512, 519, 520, 522, 528, 529, 530, 531, 536, 543, + 562, 96, 97, 104, 110, 116, 120, 124, 127, 133, + 137, 140, 142, 143, 144, 147, 159, 162, 163, 164, + 165, 175, 176, 177, 179, 182, 183, 184, 185, 186, + 189, 191, 192, 193, 194, 195, 196, 204, 207, 213, + 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, + 230, 233, 239, 240, 250, 257, 260, 135, 247, 261, + 550, 538, 0, 495, 553, 468, 485, 561, 486, 489, + 526, 453, 508, 181, 483, 0, 472, 448, 479, 449, + 470, 497, 123, 501, 467, 540, 511, 552, 152, 0, + 473, 559, 155, 517, 0, 228, 169, 0, 0, 0, + 499, 542, 506, 535, 494, 527, 458, 516, 554, 484, + 524, 555, 0, 0, 0, 91, 92, 93, 0, 1052, + 1053, 0, 0, 0, 0, 0, 113, 0, 521, 549, + 481, 523, 525, 563, 447, 518, 0, 451, 454, 560, + 545, 476, 477, 0, 0, 0, 0, 0, 0, 0, + 498, 507, 532, 492, 0, 0, 0, 0, 0, 0, + 0, 0, 474, 0, 515, 0, 0, 0, 455, 452, + 0, 0, 0, 0, 496, 0, 0, 0, 457, 0, + 475, 533, 0, 445, 132, 537, 544, 493, 289, 548, + 491, 490, 551, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 541, 471, 480, + 117, 478, 210, 188, 249, 514, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 450, 0, + 229, 252, 271, 111, 466, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 462, 465, 460, 461, 509, 510, 556, 557, + 558, 534, 456, 0, 463, 464, 0, 539, 546, 547, + 513, 94, 103, 154, 268, 203, 128, 253, 446, 459, + 121, 469, 0, 0, 482, 487, 488, 500, 502, 503, + 504, 505, 512, 519, 520, 522, 528, 529, 530, 531, + 536, 543, 562, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 135, + 247, 261, 550, 538, 0, 495, 553, 468, 485, 561, + 486, 489, 526, 453, 508, 181, 483, 0, 472, 448, + 479, 449, 470, 497, 123, 501, 467, 540, 511, 552, + 152, 0, 473, 559, 155, 517, 0, 228, 169, 0, + 0, 0, 499, 542, 506, 535, 494, 527, 458, 516, + 554, 484, 524, 555, 57, 0, 0, 91, 92, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, + 521, 549, 481, 523, 525, 563, 447, 518, 0, 451, + 454, 560, 545, 476, 477, 0, 0, 0, 0, 0, + 0, 0, 498, 507, 532, 492, 0, 0, 0, 0, + 0, 0, 0, 0, 474, 0, 515, 0, 0, 0, + 455, 452, 0, 0, 0, 0, 496, 0, 0, 0, + 457, 0, 475, 533, 0, 445, 132, 537, 544, 493, + 289, 548, 491, 490, 551, 200, 0, 232, 136, 151, + 109, 148, 95, 105, 0, 134, 178, 208, 212, 541, + 471, 480, 117, 478, 210, 188, 249, 514, 190, 209, + 156, 238, 201, 248, 258, 259, 235, 256, 267, 225, + 98, 234, 246, 114, 220, 0, 0, 0, 100, 244, + 231, 167, 145, 146, 99, 0, 206, 122, 130, 119, + 180, 241, 242, 118, 270, 106, 255, 102, 107, 254, + 174, 237, 245, 168, 161, 101, 243, 166, 160, 150, + 126, 138, 198, 158, 199, 139, 171, 170, 172, 0, + 450, 0, 229, 252, 271, 111, 466, 236, 263, 266, + 0, 202, 112, 131, 125, 197, 129, 153, 262, 264, + 265, 173, 108, 141, 226, 149, 157, 205, 269, 187, + 211, 115, 251, 227, 462, 465, 460, 461, 509, 510, + 556, 557, 558, 534, 456, 0, 463, 464, 0, 539, + 546, 547, 513, 94, 103, 154, 268, 203, 128, 253, + 446, 459, 121, 469, 0, 0, 482, 487, 488, 500, + 502, 503, 504, 505, 512, 519, 520, 522, 528, 529, + 530, 531, 536, 543, 562, 96, 97, 104, 110, 116, + 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, + 159, 162, 163, 164, 165, 175, 176, 177, 179, 182, + 183, 184, 185, 186, 189, 191, 192, 193, 194, 195, + 196, 204, 207, 213, 214, 215, 216, 217, 218, 219, + 221, 222, 223, 224, 230, 233, 239, 240, 250, 257, + 260, 135, 247, 261, 550, 538, 0, 495, 553, 468, + 485, 561, 486, 489, 526, 453, 508, 181, 483, 0, + 472, 448, 479, 449, 470, 497, 123, 501, 467, 540, + 511, 552, 152, 0, 473, 559, 155, 517, 0, 228, + 169, 0, 0, 0, 499, 542, 506, 535, 494, 527, + 458, 516, 554, 484, 524, 555, 0, 0, 0, 91, + 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 113, 0, 521, 549, 481, 523, 525, 563, 447, 518, + 0, 451, 454, 560, 545, 476, 477, 0, 0, 0, + 0, 0, 0, 0, 498, 507, 532, 492, 0, 0, + 0, 0, 0, 0, 1348, 0, 474, 0, 515, 0, + 0, 0, 455, 452, 0, 0, 0, 0, 496, 0, + 0, 0, 457, 0, 475, 533, 0, 445, 132, 537, + 544, 493, 289, 548, 491, 490, 551, 200, 0, 232, + 136, 151, 109, 148, 95, 105, 0, 134, 178, 208, + 212, 541, 471, 480, 117, 478, 210, 188, 249, 514, + 190, 209, 156, 238, 201, 248, 258, 259, 235, 256, + 267, 225, 98, 234, 246, 114, 220, 0, 0, 0, + 100, 244, 231, 167, 145, 146, 99, 0, 206, 122, + 130, 119, 180, 241, 242, 118, 270, 106, 255, 102, + 107, 254, 174, 237, 245, 168, 161, 101, 243, 166, + 160, 150, 126, 138, 198, 158, 199, 139, 171, 170, + 172, 0, 450, 0, 229, 252, 271, 111, 466, 236, + 263, 266, 0, 202, 112, 131, 125, 197, 129, 153, + 262, 264, 265, 173, 108, 141, 226, 149, 157, 205, + 269, 187, 211, 115, 251, 227, 462, 465, 460, 461, + 509, 510, 556, 557, 558, 534, 456, 0, 463, 464, + 0, 539, 546, 547, 513, 94, 103, 154, 268, 203, + 128, 253, 446, 459, 121, 469, 0, 0, 482, 487, + 488, 500, 502, 503, 504, 505, 512, 519, 520, 522, + 528, 529, 530, 531, 536, 543, 562, 96, 97, 104, + 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, + 144, 147, 159, 162, 163, 164, 165, 175, 176, 177, + 179, 182, 183, 184, 185, 186, 189, 191, 192, 193, + 194, 195, 196, 204, 207, 213, 214, 215, 216, 217, + 218, 219, 221, 222, 223, 224, 230, 233, 239, 240, + 250, 257, 260, 135, 247, 261, 550, 538, 0, 495, + 553, 468, 485, 561, 486, 489, 526, 453, 508, 181, + 483, 0, 472, 448, 479, 449, 470, 497, 123, 501, + 467, 540, 511, 552, 152, 0, 473, 559, 155, 517, + 0, 228, 169, 0, 0, 0, 499, 542, 506, 535, + 494, 527, 458, 516, 554, 484, 524, 555, 0, 0, + 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 113, 0, 521, 549, 481, 523, 525, 563, + 447, 518, 0, 451, 454, 560, 545, 476, 477, 0, + 0, 0, 0, 0, 0, 0, 498, 507, 532, 492, + 0, 0, 0, 0, 0, 0, 1036, 0, 474, 0, + 515, 0, 0, 0, 455, 452, 0, 0, 0, 0, + 496, 0, 0, 0, 457, 0, 475, 533, 0, 445, + 132, 537, 544, 493, 289, 548, 491, 490, 551, 200, + 0, 232, 136, 151, 109, 148, 95, 105, 0, 134, + 178, 208, 212, 541, 471, 480, 117, 478, 210, 188, + 249, 514, 190, 209, 156, 238, 201, 248, 258, 259, + 235, 256, 267, 225, 98, 234, 246, 114, 220, 0, + 0, 0, 100, 244, 231, 167, 145, 146, 99, 0, + 206, 122, 130, 119, 180, 241, 242, 118, 270, 106, + 255, 102, 107, 254, 174, 237, 245, 168, 161, 101, + 243, 166, 160, 150, 126, 138, 198, 158, 199, 139, + 171, 170, 172, 0, 450, 0, 229, 252, 271, 111, + 466, 236, 263, 266, 0, 202, 112, 131, 125, 197, + 129, 153, 262, 264, 265, 173, 108, 141, 226, 149, + 157, 205, 269, 187, 211, 115, 251, 227, 462, 465, + 460, 461, 509, 510, 556, 557, 558, 534, 456, 0, + 463, 464, 0, 539, 546, 547, 513, 94, 103, 154, + 268, 203, 128, 253, 446, 459, 121, 469, 0, 0, + 482, 487, 488, 500, 502, 503, 504, 505, 512, 519, + 520, 522, 528, 529, 530, 531, 536, 543, 562, 96, + 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, + 142, 143, 144, 147, 159, 162, 163, 164, 165, 175, + 176, 177, 179, 182, 183, 184, 185, 186, 189, 191, + 192, 193, 194, 195, 196, 204, 207, 213, 214, 215, + 216, 217, 218, 219, 221, 222, 223, 224, 230, 233, + 239, 240, 250, 257, 260, 135, 247, 261, 550, 538, + 0, 495, 553, 468, 485, 561, 486, 489, 526, 453, + 508, 181, 483, 0, 472, 448, 479, 449, 470, 497, + 123, 501, 467, 540, 511, 552, 152, 0, 473, 559, + 155, 517, 0, 228, 169, 0, 0, 0, 499, 542, + 506, 535, 494, 527, 458, 516, 554, 484, 524, 555, + 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, + 0, 0, 0, 0, 113, 0, 521, 549, 481, 523, + 525, 563, 447, 518, 0, 451, 454, 560, 545, 476, + 477, 0, 0, 0, 0, 0, 0, 0, 498, 507, + 532, 492, 0, 0, 0, 0, 0, 0, 1000, 0, + 474, 0, 515, 0, 0, 0, 455, 452, 0, 0, + 0, 0, 496, 0, 0, 0, 457, 0, 475, 533, + 0, 445, 132, 537, 544, 493, 289, 548, 491, 490, + 551, 200, 0, 232, 136, 151, 109, 148, 95, 105, + 0, 134, 178, 208, 212, 541, 471, 480, 117, 478, + 210, 188, 249, 514, 190, 209, 156, 238, 201, 248, + 258, 259, 235, 256, 267, 225, 98, 234, 246, 114, + 220, 0, 0, 0, 100, 244, 231, 167, 145, 146, + 99, 0, 206, 122, 130, 119, 180, 241, 242, 118, + 270, 106, 255, 102, 107, 254, 174, 237, 245, 168, + 161, 101, 243, 166, 160, 150, 126, 138, 198, 158, + 199, 139, 171, 170, 172, 0, 450, 0, 229, 252, + 271, 111, 466, 236, 263, 266, 0, 202, 112, 131, + 125, 197, 129, 153, 262, 264, 265, 173, 108, 141, + 226, 149, 157, 205, 269, 187, 211, 115, 251, 227, + 462, 465, 460, 461, 509, 510, 556, 557, 558, 534, + 456, 0, 463, 464, 0, 539, 546, 547, 513, 94, + 103, 154, 268, 203, 128, 253, 446, 459, 121, 469, + 0, 0, 482, 487, 488, 500, 502, 503, 504, 505, + 512, 519, 520, 522, 528, 529, 530, 531, 536, 543, + 562, 96, 97, 104, 110, 116, 120, 124, 127, 133, + 137, 140, 142, 143, 144, 147, 159, 162, 163, 164, + 165, 175, 176, 177, 179, 182, 183, 184, 185, 186, + 189, 191, 192, 193, 194, 195, 196, 204, 207, 213, + 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, + 230, 233, 239, 240, 250, 257, 260, 135, 247, 261, + 550, 538, 0, 495, 553, 468, 485, 561, 486, 489, + 526, 453, 508, 181, 483, 0, 472, 448, 479, 449, + 470, 497, 123, 501, 467, 540, 511, 552, 152, 0, + 473, 559, 155, 517, 0, 228, 169, 0, 0, 0, + 499, 542, 506, 535, 494, 527, 458, 516, 554, 484, + 524, 555, 0, 0, 0, 91, 92, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 113, 0, 521, 549, + 481, 523, 525, 563, 447, 518, 0, 451, 454, 560, + 545, 476, 477, 0, 0, 0, 0, 0, 0, 0, + 498, 507, 532, 492, 0, 0, 0, 0, 0, 0, + 0, 0, 474, 0, 515, 0, 0, 0, 455, 452, + 0, 0, 0, 0, 496, 0, 0, 0, 457, 0, + 475, 533, 0, 445, 132, 537, 544, 493, 289, 548, + 491, 490, 551, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 541, 471, 480, + 117, 478, 210, 188, 249, 514, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 450, 0, + 229, 252, 271, 111, 466, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 462, 465, 460, 461, 509, 510, 556, 557, + 558, 534, 456, 0, 463, 464, 0, 539, 546, 547, + 513, 94, 103, 154, 268, 203, 128, 253, 446, 459, + 121, 469, 0, 0, 482, 487, 488, 500, 502, 503, + 504, 505, 512, 519, 520, 522, 528, 529, 530, 531, + 536, 543, 562, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 135, + 247, 261, 550, 538, 0, 495, 553, 468, 485, 561, + 486, 489, 526, 453, 508, 181, 483, 0, 472, 448, + 479, 449, 470, 497, 123, 501, 467, 540, 511, 552, + 152, 0, 473, 559, 155, 517, 0, 228, 169, 0, + 0, 0, 499, 542, 506, 535, 494, 527, 458, 516, + 554, 484, 524, 555, 0, 0, 0, 91, 92, 93, + 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, + 521, 549, 481, 523, 525, 563, 447, 518, 0, 451, + 454, 560, 545, 476, 477, 0, 0, 0, 0, 0, + 0, 0, 498, 507, 532, 492, 0, 0, 0, 0, + 0, 0, 0, 0, 474, 0, 515, 0, 0, 0, + 455, 452, 0, 0, 0, 0, 496, 0, 0, 0, + 457, 0, 475, 533, 0, 445, 132, 537, 544, 493, + 289, 548, 491, 490, 551, 200, 0, 232, 136, 151, + 109, 148, 95, 105, 0, 134, 178, 208, 212, 541, + 471, 480, 117, 478, 210, 188, 249, 514, 190, 209, + 156, 238, 201, 248, 258, 259, 235, 256, 267, 225, + 98, 234, 246, 114, 220, 0, 0, 0, 100, 244, + 231, 167, 145, 146, 99, 0, 206, 122, 130, 119, + 180, 241, 242, 118, 270, 106, 255, 102, 443, 254, + 174, 237, 245, 168, 161, 101, 243, 166, 160, 150, + 126, 138, 198, 158, 199, 139, 171, 170, 172, 0, + 450, 0, 229, 252, 271, 111, 466, 236, 263, 266, + 0, 202, 112, 131, 125, 197, 129, 153, 262, 264, + 265, 444, 442, 141, 226, 149, 157, 205, 269, 187, + 211, 115, 251, 227, 462, 465, 460, 461, 509, 510, + 556, 557, 558, 534, 456, 0, 463, 464, 0, 539, + 546, 547, 513, 94, 103, 154, 268, 203, 128, 253, + 446, 459, 121, 469, 0, 0, 482, 487, 488, 500, + 502, 503, 504, 505, 512, 519, 520, 522, 528, 529, + 530, 531, 536, 543, 562, 96, 97, 104, 110, 116, + 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, + 159, 162, 163, 164, 165, 175, 176, 177, 179, 182, + 183, 184, 185, 186, 189, 191, 192, 193, 194, 195, + 196, 204, 207, 213, 214, 215, 216, 217, 218, 219, + 221, 222, 223, 224, 230, 233, 239, 240, 250, 257, + 260, 135, 247, 261, 550, 538, 0, 495, 553, 468, + 485, 561, 486, 489, 526, 453, 508, 181, 483, 0, + 472, 448, 479, 449, 470, 497, 123, 501, 467, 540, + 511, 552, 152, 0, 473, 559, 155, 517, 0, 228, + 169, 0, 0, 0, 499, 542, 506, 535, 494, 527, + 458, 516, 554, 484, 524, 555, 0, 0, 0, 91, + 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 113, 0, 521, 549, 481, 523, 525, 563, 447, 518, + 0, 451, 454, 560, 545, 476, 477, 0, 0, 0, + 0, 0, 0, 0, 498, 507, 532, 492, 0, 0, + 0, 0, 0, 0, 0, 0, 474, 0, 515, 0, + 0, 0, 455, 452, 0, 0, 0, 0, 496, 0, + 0, 0, 457, 0, 475, 533, 0, 445, 132, 537, + 544, 493, 289, 548, 491, 490, 551, 200, 0, 232, + 136, 151, 109, 148, 95, 105, 0, 134, 178, 208, + 212, 541, 471, 480, 117, 478, 210, 188, 249, 514, + 190, 209, 156, 238, 201, 248, 258, 259, 235, 256, + 267, 225, 98, 234, 778, 114, 220, 0, 0, 0, + 100, 244, 231, 167, 145, 146, 99, 0, 206, 122, + 130, 119, 180, 241, 242, 118, 270, 106, 255, 102, + 443, 254, 174, 237, 245, 168, 161, 101, 243, 166, + 160, 150, 126, 138, 198, 158, 199, 139, 171, 170, + 172, 0, 450, 0, 229, 252, 271, 111, 466, 236, + 263, 266, 0, 202, 112, 131, 125, 197, 129, 153, + 262, 264, 265, 444, 442, 141, 226, 149, 157, 205, + 269, 187, 211, 115, 251, 227, 462, 465, 460, 461, + 509, 510, 556, 557, 558, 534, 456, 0, 463, 464, + 0, 539, 546, 547, 513, 94, 103, 154, 268, 203, + 128, 253, 446, 459, 121, 469, 0, 0, 482, 487, + 488, 500, 502, 503, 504, 505, 512, 519, 520, 522, + 528, 529, 530, 531, 536, 543, 562, 96, 97, 104, + 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, + 144, 147, 159, 162, 163, 164, 165, 175, 176, 177, + 179, 182, 183, 184, 185, 186, 189, 191, 192, 193, + 194, 195, 196, 204, 207, 213, 214, 215, 216, 217, + 218, 219, 221, 222, 223, 224, 230, 233, 239, 240, + 250, 257, 260, 135, 247, 261, 550, 538, 0, 495, + 553, 468, 485, 561, 486, 489, 526, 453, 508, 181, + 483, 0, 472, 448, 479, 449, 470, 497, 123, 501, + 467, 540, 511, 552, 152, 0, 473, 559, 155, 517, + 0, 228, 169, 0, 0, 0, 499, 542, 506, 535, + 494, 527, 458, 516, 554, 484, 524, 555, 0, 0, + 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 113, 0, 521, 549, 481, 523, 525, 563, + 447, 518, 0, 451, 454, 560, 545, 476, 477, 0, + 0, 0, 0, 0, 0, 0, 498, 507, 532, 492, + 0, 0, 0, 0, 0, 0, 0, 0, 474, 0, + 515, 0, 0, 0, 455, 452, 0, 0, 0, 0, + 496, 0, 0, 0, 457, 0, 475, 533, 0, 445, + 132, 537, 544, 493, 289, 548, 491, 490, 551, 200, + 0, 232, 136, 151, 109, 148, 95, 105, 0, 134, + 178, 208, 212, 541, 471, 480, 117, 478, 210, 188, + 249, 514, 190, 209, 156, 238, 201, 248, 258, 259, + 235, 256, 267, 225, 98, 234, 434, 114, 220, 0, + 0, 0, 100, 244, 231, 167, 145, 146, 99, 0, + 206, 122, 130, 119, 180, 241, 242, 118, 270, 106, + 255, 102, 443, 254, 174, 237, 245, 168, 161, 101, + 243, 166, 160, 150, 126, 138, 198, 158, 199, 139, + 171, 170, 172, 0, 450, 0, 229, 252, 271, 111, + 466, 236, 263, 266, 0, 202, 112, 131, 125, 197, + 129, 153, 262, 264, 265, 444, 442, 437, 436, 149, + 157, 205, 269, 187, 211, 115, 251, 227, 462, 465, + 460, 461, 509, 510, 556, 557, 558, 534, 456, 0, + 463, 464, 0, 539, 546, 547, 513, 94, 103, 154, + 268, 203, 128, 253, 446, 459, 121, 469, 0, 0, + 482, 487, 488, 500, 502, 503, 504, 505, 512, 519, + 520, 522, 528, 529, 530, 531, 536, 543, 562, 96, + 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, + 142, 143, 144, 147, 159, 162, 163, 164, 165, 175, + 176, 177, 179, 182, 183, 184, 185, 186, 189, 191, + 192, 193, 194, 195, 196, 204, 207, 213, 214, 215, + 216, 217, 218, 219, 221, 222, 223, 224, 230, 233, + 239, 240, 250, 257, 260, 135, 247, 261, 181, 0, + 0, 940, 0, 338, 0, 0, 0, 123, 0, 337, + 0, 0, 0, 152, 0, 941, 381, 155, 0, 0, + 228, 169, 0, 0, 0, 0, 0, 372, 373, 0, + 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, + 91, 92, 93, 359, 358, 361, 362, 363, 364, 0, + 0, 113, 360, 365, 366, 367, 0, 0, 0, 0, + 335, 352, 0, 380, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 349, 350, 421, 0, 0, 0, 395, + 0, 351, 0, 0, 344, 345, 347, 346, 348, 353, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, + 394, 0, 0, 289, 0, 0, 392, 0, 200, 0, + 232, 136, 151, 109, 148, 95, 105, 0, 134, 178, + 208, 212, 0, 0, 0, 117, 0, 210, 188, 249, + 0, 190, 209, 156, 238, 201, 248, 258, 259, 235, + 256, 267, 225, 98, 234, 246, 114, 220, 0, 0, + 0, 100, 244, 231, 167, 145, 146, 99, 0, 206, + 122, 130, 119, 180, 241, 242, 118, 270, 106, 255, + 102, 107, 254, 174, 237, 245, 168, 161, 101, 243, + 166, 160, 150, 126, 138, 198, 158, 199, 139, 171, + 170, 172, 0, 0, 0, 229, 252, 271, 111, 0, + 236, 263, 266, 0, 202, 112, 131, 125, 197, 129, + 153, 262, 264, 265, 173, 108, 141, 226, 149, 157, + 205, 269, 187, 211, 115, 251, 227, 382, 393, 388, + 389, 386, 387, 385, 384, 383, 396, 374, 375, 376, + 377, 379, 0, 390, 391, 378, 94, 103, 154, 268, + 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, + 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, + 143, 144, 147, 159, 162, 163, 164, 165, 175, 176, + 177, 179, 182, 183, 184, 185, 186, 189, 191, 192, + 193, 194, 195, 196, 204, 207, 213, 214, 215, 216, + 217, 218, 219, 221, 222, 223, 224, 230, 233, 239, + 240, 250, 257, 260, 135, 247, 261, 181, 0, 0, + 0, 0, 338, 0, 0, 0, 123, 0, 337, 0, + 0, 0, 152, 0, 0, 381, 155, 0, 0, 228, + 169, 0, 0, 0, 0, 0, 372, 373, 0, 0, + 0, 0, 0, 0, 1043, 0, 57, 0, 0, 91, + 92, 93, 359, 358, 361, 362, 363, 364, 0, 0, + 113, 360, 365, 366, 367, 1044, 0, 0, 0, 335, + 352, 0, 380, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 349, 350, 0, 0, 0, 0, 395, 0, + 351, 0, 0, 344, 345, 347, 346, 348, 353, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 394, + 0, 0, 289, 0, 0, 392, 0, 200, 0, 232, + 136, 151, 109, 148, 95, 105, 0, 134, 178, 208, + 212, 0, 0, 0, 117, 0, 210, 188, 249, 0, + 190, 209, 156, 238, 201, 248, 258, 259, 235, 256, + 267, 225, 98, 234, 246, 114, 220, 0, 0, 0, + 100, 244, 231, 167, 145, 146, 99, 0, 206, 122, + 130, 119, 180, 241, 242, 118, 270, 106, 255, 102, + 107, 254, 174, 237, 245, 168, 161, 101, 243, 166, + 160, 150, 126, 138, 198, 158, 199, 139, 171, 170, + 172, 0, 0, 0, 229, 252, 271, 111, 0, 236, + 263, 266, 0, 202, 112, 131, 125, 197, 129, 153, + 262, 264, 265, 173, 108, 141, 226, 149, 157, 205, + 269, 187, 211, 115, 251, 227, 382, 393, 388, 389, + 386, 387, 385, 384, 383, 396, 374, 375, 376, 377, + 379, 0, 390, 391, 378, 94, 103, 154, 268, 203, + 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, + 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, + 144, 147, 159, 162, 163, 164, 165, 175, 176, 177, + 179, 182, 183, 184, 185, 186, 189, 191, 192, 193, + 194, 195, 196, 204, 207, 213, 214, 215, 216, 217, + 218, 219, 221, 222, 223, 224, 230, 233, 239, 240, + 250, 257, 260, 135, 247, 261, 181, 0, 0, 0, + 0, 338, 0, 0, 0, 123, 0, 337, 0, 0, + 0, 152, 0, 0, 381, 155, 0, 0, 228, 169, + 0, 0, 0, 0, 0, 372, 373, 0, 0, 0, + 0, 0, 0, 0, 0, 57, 0, 409, 91, 92, + 93, 359, 358, 361, 362, 363, 364, 0, 0, 113, + 360, 365, 366, 367, 0, 0, 0, 0, 335, 352, + 0, 380, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 349, 350, 0, 0, 0, 0, 395, 0, 351, + 0, 0, 344, 345, 347, 346, 348, 353, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 394, 0, + 0, 289, 0, 0, 392, 0, 200, 0, 232, 136, + 151, 109, 148, 95, 105, 0, 134, 178, 208, 212, + 0, 0, 0, 117, 0, 210, 188, 249, 0, 190, + 209, 156, 238, 201, 248, 258, 259, 235, 256, 267, + 225, 98, 234, 246, 114, 220, 0, 0, 0, 100, + 244, 231, 167, 145, 146, 99, 0, 206, 122, 130, + 119, 180, 241, 242, 118, 270, 106, 255, 102, 107, + 254, 174, 237, 245, 168, 161, 101, 243, 166, 160, + 150, 126, 138, 198, 158, 199, 139, 171, 170, 172, + 0, 0, 0, 229, 252, 271, 111, 0, 236, 263, + 266, 0, 202, 112, 131, 125, 197, 129, 153, 262, + 264, 265, 173, 108, 141, 226, 149, 157, 205, 269, + 187, 211, 115, 251, 227, 382, 393, 388, 389, 386, + 387, 385, 384, 383, 396, 374, 375, 376, 377, 379, + 0, 390, 391, 378, 94, 103, 154, 268, 203, 128, + 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, + 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, + 147, 159, 162, 163, 164, 165, 175, 176, 177, 179, + 182, 183, 184, 185, 186, 189, 191, 192, 193, 194, + 195, 196, 204, 207, 213, 214, 215, 216, 217, 218, + 219, 221, 222, 223, 224, 230, 233, 239, 240, 250, + 257, 260, 135, 247, 261, 181, 0, 0, 0, 0, + 338, 0, 0, 0, 123, 0, 337, 0, 0, 0, + 152, 0, 0, 381, 155, 0, 0, 228, 169, 0, + 0, 0, 0, 0, 372, 373, 0, 0, 0, 0, + 0, 0, 0, 0, 57, 0, 0, 91, 92, 93, + 359, 358, 361, 362, 363, 364, 0, 0, 113, 360, + 365, 366, 367, 0, 0, 0, 0, 335, 352, 0, + 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 349, 350, 421, 0, 0, 0, 395, 0, 351, 0, + 0, 344, 345, 347, 346, 348, 353, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 132, 394, 0, 0, + 289, 0, 0, 392, 0, 200, 0, 232, 136, 151, + 109, 148, 95, 105, 0, 134, 178, 208, 212, 0, + 0, 0, 117, 0, 210, 188, 249, 0, 190, 209, + 156, 238, 201, 248, 258, 259, 235, 256, 267, 225, + 98, 234, 246, 114, 220, 0, 0, 0, 100, 244, + 231, 167, 145, 146, 99, 0, 206, 122, 130, 119, + 180, 241, 242, 118, 270, 106, 255, 102, 107, 254, + 174, 237, 245, 168, 161, 101, 243, 166, 160, 150, + 126, 138, 198, 158, 199, 139, 171, 170, 172, 0, + 0, 0, 229, 252, 271, 111, 0, 236, 263, 266, + 0, 202, 112, 131, 125, 197, 129, 153, 262, 264, + 265, 173, 108, 141, 226, 149, 157, 205, 269, 187, + 211, 115, 251, 227, 382, 393, 388, 389, 386, 387, + 385, 384, 383, 396, 374, 375, 376, 377, 379, 0, + 390, 391, 378, 94, 103, 154, 268, 203, 128, 253, + 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, + 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, + 159, 162, 163, 164, 165, 175, 176, 177, 179, 182, + 183, 184, 185, 186, 189, 191, 192, 193, 194, 195, + 196, 204, 207, 213, 214, 215, 216, 217, 218, 219, + 221, 222, 223, 224, 230, 233, 239, 240, 250, 257, + 260, 135, 247, 261, 181, 0, 0, 0, 0, 338, + 0, 0, 0, 123, 0, 337, 0, 0, 0, 152, + 0, 0, 381, 155, 0, 0, 228, 169, 0, 0, + 0, 0, 0, 372, 373, 0, 0, 0, 0, 0, + 0, 0, 0, 57, 0, 0, 91, 92, 93, 359, + 958, 361, 362, 363, 364, 0, 0, 113, 360, 365, + 366, 367, 0, 0, 0, 0, 335, 352, 0, 380, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, + 350, 421, 0, 0, 0, 395, 0, 351, 0, 0, + 344, 345, 347, 346, 348, 353, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 132, 394, 0, 0, 289, + 0, 0, 392, 0, 200, 0, 232, 136, 151, 109, + 148, 95, 105, 0, 134, 178, 208, 212, 0, 0, + 0, 117, 0, 210, 188, 249, 0, 190, 209, 156, + 238, 201, 248, 258, 259, 235, 256, 267, 225, 98, + 234, 246, 114, 220, 0, 0, 0, 100, 244, 231, + 167, 145, 146, 99, 0, 206, 122, 130, 119, 180, + 241, 242, 118, 270, 106, 255, 102, 107, 254, 174, + 237, 245, 168, 161, 101, 243, 166, 160, 150, 126, + 138, 198, 158, 199, 139, 171, 170, 172, 0, 0, + 0, 229, 252, 271, 111, 0, 236, 263, 266, 0, + 202, 112, 131, 125, 197, 129, 153, 262, 264, 265, + 173, 108, 141, 226, 149, 157, 205, 269, 187, 211, + 115, 251, 227, 382, 393, 388, 389, 386, 387, 385, + 384, 383, 396, 374, 375, 376, 377, 379, 0, 390, + 391, 378, 94, 103, 154, 268, 203, 128, 253, 0, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, + 124, 127, 133, 137, 140, 142, 143, 144, 147, 159, + 162, 163, 164, 165, 175, 176, 177, 179, 182, 183, + 184, 185, 186, 189, 191, 192, 193, 194, 195, 196, + 204, 207, 213, 214, 215, 216, 217, 218, 219, 221, + 222, 223, 224, 230, 233, 239, 240, 250, 257, 260, + 135, 247, 261, 181, 0, 0, 0, 0, 338, 0, + 0, 0, 123, 0, 337, 0, 0, 0, 152, 0, + 0, 381, 155, 0, 0, 228, 169, 0, 0, 0, + 0, 0, 372, 373, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 0, 0, 91, 92, 93, 359, 955, + 361, 362, 363, 364, 0, 0, 113, 360, 365, 366, + 367, 0, 0, 0, 0, 335, 352, 0, 380, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 349, 350, + 421, 0, 0, 0, 395, 0, 351, 0, 0, 344, + 345, 347, 346, 348, 353, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 132, 394, 0, 0, 289, 0, + 0, 392, 0, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 0, 0, 0, + 117, 0, 210, 188, 249, 0, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 0, 0, + 229, 252, 271, 111, 0, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 382, 393, 388, 389, 386, 387, 385, 384, + 383, 396, 374, 375, 376, 377, 379, 0, 390, 391, + 378, 94, 103, 154, 268, 203, 128, 253, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 135, + 247, 261, 402, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 181, 0, 0, 0, 0, 338, + 0, 0, 0, 123, 0, 337, 0, 0, 0, 152, + 0, 0, 381, 155, 0, 0, 228, 169, 0, 0, + 0, 0, 0, 372, 373, 0, 0, 0, 0, 0, + 0, 0, 0, 57, 0, 0, 91, 92, 93, 359, + 358, 361, 362, 363, 364, 0, 0, 113, 360, 365, + 366, 367, 0, 0, 0, 0, 335, 352, 0, 380, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 349, + 350, 0, 0, 0, 0, 395, 0, 351, 0, 0, + 344, 345, 347, 346, 348, 353, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 132, 394, 0, 0, 289, + 0, 0, 392, 0, 200, 0, 232, 136, 151, 109, + 148, 95, 105, 0, 134, 178, 208, 212, 0, 0, + 0, 117, 0, 210, 188, 249, 0, 190, 209, 156, + 238, 201, 248, 258, 259, 235, 256, 267, 225, 98, + 234, 246, 114, 220, 0, 0, 0, 100, 244, 231, + 167, 145, 146, 99, 0, 206, 122, 130, 119, 180, + 241, 242, 118, 270, 106, 255, 102, 107, 254, 174, + 237, 245, 168, 161, 101, 243, 166, 160, 150, 126, + 138, 198, 158, 199, 139, 171, 170, 172, 0, 0, + 0, 229, 252, 271, 111, 0, 236, 263, 266, 0, + 202, 112, 131, 125, 197, 129, 153, 262, 264, 265, + 173, 108, 141, 226, 149, 157, 205, 269, 187, 211, + 115, 251, 227, 382, 393, 388, 389, 386, 387, 385, + 384, 383, 396, 374, 375, 376, 377, 379, 0, 390, + 391, 378, 94, 103, 154, 268, 203, 128, 253, 0, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, + 124, 127, 133, 137, 140, 142, 143, 144, 147, 159, + 162, 163, 164, 165, 175, 176, 177, 179, 182, 183, + 184, 185, 186, 189, 191, 192, 193, 194, 195, 196, + 204, 207, 213, 214, 215, 216, 217, 218, 219, 221, + 222, 223, 224, 230, 233, 239, 240, 250, 257, 260, + 135, 247, 261, 181, 0, 0, 0, 0, 338, 0, + 0, 0, 123, 0, 337, 0, 0, 0, 152, 0, + 0, 381, 155, 0, 0, 228, 169, 0, 0, 0, + 0, 0, 372, 373, 0, 0, 0, 0, 0, 0, + 0, 0, 57, 0, 0, 91, 92, 93, 359, 358, + 361, 362, 363, 364, 0, 0, 113, 360, 365, 366, + 367, 0, 0, 0, 0, 335, 352, 0, 380, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 349, 350, + 0, 0, 0, 0, 395, 0, 351, 0, 0, 344, + 345, 347, 346, 348, 353, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 132, 394, 0, 0, 289, 0, + 0, 392, 0, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 0, 0, 0, + 117, 0, 210, 188, 249, 0, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 0, 0, + 229, 252, 271, 111, 0, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 382, 393, 388, 389, 386, 387, 385, 384, + 383, 396, 374, 375, 376, 377, 379, 0, 390, 391, + 378, 94, 103, 154, 268, 203, 128, 253, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 135, + 247, 261, 181, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, + 381, 155, 0, 0, 228, 169, 0, 0, 0, 0, + 0, 372, 373, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 0, 91, 92, 93, 359, 358, 361, + 362, 363, 364, 0, 0, 113, 360, 365, 366, 367, + 0, 0, 0, 0, 0, 352, 0, 380, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 349, 350, 0, + 0, 0, 0, 395, 0, 351, 0, 0, 344, 345, + 347, 346, 348, 353, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 394, 0, 0, 289, 0, 0, + 392, 0, 200, 0, 232, 136, 151, 109, 148, 95, + 105, 0, 134, 178, 208, 212, 0, 0, 0, 117, + 0, 210, 188, 249, 1610, 190, 209, 156, 238, 201, + 248, 258, 259, 235, 256, 267, 225, 98, 234, 246, + 114, 220, 0, 0, 0, 100, 244, 231, 167, 145, + 146, 99, 0, 206, 122, 130, 119, 180, 241, 242, + 118, 270, 106, 255, 102, 107, 254, 174, 237, 245, + 168, 161, 101, 243, 166, 160, 150, 126, 138, 198, + 158, 199, 139, 171, 170, 172, 0, 0, 0, 229, + 252, 271, 111, 0, 236, 263, 266, 0, 202, 112, + 131, 125, 197, 129, 153, 262, 264, 265, 173, 108, + 141, 226, 149, 157, 205, 269, 187, 211, 115, 251, + 227, 382, 393, 388, 389, 386, 387, 385, 384, 383, + 396, 374, 375, 376, 377, 379, 0, 390, 391, 378, + 94, 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 289, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 289, 0, 0, 0, 0, + 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, + 133, 137, 140, 142, 143, 144, 147, 159, 162, 163, + 164, 165, 175, 176, 177, 179, 182, 183, 184, 185, + 186, 189, 191, 192, 193, 194, 195, 196, 204, 207, + 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, + 224, 230, 233, 239, 240, 250, 257, 260, 135, 247, + 261, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 152, 0, 0, 381, + 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, + 372, 373, 0, 0, 0, 0, 0, 0, 0, 0, + 57, 0, 409, 91, 92, 93, 359, 358, 361, 362, + 363, 364, 0, 0, 113, 360, 365, 366, 367, 0, + 0, 0, 0, 0, 352, 0, 380, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 349, 350, 0, 0, + 0, 0, 395, 0, 351, 0, 0, 344, 345, 347, + 346, 348, 353, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 394, 0, 0, 289, 0, 0, 392, + 0, 200, 0, 232, 136, 151, 109, 148, 95, 105, + 0, 134, 178, 208, 212, 0, 0, 0, 117, 0, + 210, 188, 249, 0, 190, 209, 156, 238, 201, 248, + 258, 259, 235, 256, 267, 225, 98, 234, 246, 114, + 220, 0, 0, 0, 100, 244, 231, 167, 145, 146, + 99, 0, 206, 122, 130, 119, 180, 241, 242, 118, + 270, 106, 255, 102, 107, 254, 174, 237, 245, 168, + 161, 101, 243, 166, 160, 150, 126, 138, 198, 158, + 199, 139, 171, 170, 172, 0, 0, 0, 229, 252, + 271, 111, 0, 236, 263, 266, 0, 202, 112, 131, + 125, 197, 129, 153, 262, 264, 265, 173, 108, 141, + 226, 149, 157, 205, 269, 187, 211, 115, 251, 227, + 382, 393, 388, 389, 386, 387, 385, 384, 383, 396, + 374, 375, 376, 377, 379, 0, 390, 391, 378, 94, + 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, + 137, 140, 142, 143, 144, 147, 159, 162, 163, 164, + 165, 175, 176, 177, 179, 182, 183, 184, 185, 186, + 189, 191, 192, 193, 194, 195, 196, 204, 207, 213, + 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, + 230, 233, 239, 240, 250, 257, 260, 135, 247, 261, + 181, 0, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 0, 0, 0, 0, 152, 0, 0, 381, 155, + 0, 0, 228, 169, 0, 0, 0, 0, 0, 372, + 373, 0, 0, 0, 0, 0, 0, 0, 0, 57, + 0, 0, 91, 92, 93, 359, 358, 361, 362, 363, + 364, 0, 0, 113, 360, 365, 366, 367, 0, 0, + 0, 0, 0, 352, 0, 380, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 349, 350, 0, 0, 0, + 0, 395, 0, 351, 0, 0, 344, 345, 347, 346, + 348, 353, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 132, 394, 0, 0, 289, 0, 0, 392, 0, + 200, 0, 232, 136, 151, 109, 148, 95, 105, 0, + 134, 178, 208, 212, 0, 0, 0, 117, 0, 210, + 188, 249, 0, 190, 209, 156, 238, 201, 248, 258, + 259, 235, 256, 267, 225, 98, 234, 246, 114, 220, + 0, 0, 0, 100, 244, 231, 167, 145, 146, 99, + 0, 206, 122, 130, 119, 180, 241, 242, 118, 270, + 106, 255, 102, 107, 254, 174, 237, 245, 168, 161, + 101, 243, 166, 160, 150, 126, 138, 198, 158, 199, + 139, 171, 170, 172, 0, 0, 0, 229, 252, 271, + 111, 0, 236, 263, 266, 0, 202, 112, 131, 125, + 197, 129, 153, 262, 264, 265, 173, 108, 141, 226, + 149, 157, 205, 269, 187, 211, 115, 251, 227, 382, + 393, 388, 389, 386, 387, 385, 384, 383, 396, 374, + 375, 376, 377, 379, 0, 390, 391, 378, 94, 103, + 154, 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, + 140, 142, 143, 144, 147, 159, 162, 163, 164, 165, + 175, 176, 177, 179, 182, 183, 184, 185, 186, 189, + 191, 192, 193, 194, 195, 196, 204, 207, 213, 214, + 215, 216, 217, 218, 219, 221, 222, 223, 224, 230, + 233, 239, 240, 250, 257, 260, 135, 247, 261, 181, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 152, 0, 0, 0, 155, 0, + 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 400, 91, 92, 93, 0, 0, 0, 0, 0, 0, + 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 658, 657, 667, 668, 660, 661, 662, 663, 664, 665, + 666, 659, 0, 0, 669, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 132, 0, 0, 0, 289, 0, 0, 0, 0, 200, + 0, 232, 136, 151, 109, 148, 95, 105, 0, 134, + 178, 208, 212, 0, 0, 0, 117, 0, 210, 188, + 249, 0, 190, 209, 156, 238, 201, 248, 258, 259, + 235, 256, 267, 225, 98, 234, 246, 114, 220, 0, + 0, 0, 100, 244, 231, 167, 145, 146, 99, 0, + 206, 122, 130, 119, 180, 241, 242, 118, 270, 106, + 255, 102, 107, 254, 174, 237, 245, 168, 161, 101, + 243, 166, 160, 150, 126, 138, 198, 158, 199, 139, + 171, 170, 172, 0, 0, 0, 229, 252, 271, 111, + 0, 236, 263, 266, 0, 202, 112, 131, 125, 197, + 129, 153, 262, 264, 265, 173, 108, 141, 226, 149, + 157, 205, 269, 187, 211, 115, 251, 227, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 103, 154, + 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, + 142, 143, 144, 147, 159, 162, 163, 164, 165, 175, + 176, 177, 179, 182, 183, 184, 185, 186, 189, 191, + 192, 193, 194, 195, 196, 204, 207, 213, 214, 215, + 216, 217, 218, 219, 221, 222, 223, 224, 230, 233, + 239, 240, 250, 257, 260, 135, 247, 261, 181, 0, + 0, 0, 753, 0, 0, 0, 0, 123, 0, 0, + 0, 0, 0, 152, 0, 0, 0, 155, 0, 0, + 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 91, 92, 93, 0, 755, 0, 0, 0, 0, 0, + 0, 113, 0, 0, 0, 0, 0, 647, 648, 646, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 649, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, + 0, 0, 0, 289, 0, 0, 0, 0, 200, 0, + 232, 136, 151, 109, 148, 95, 105, 0, 134, 178, + 208, 212, 0, 0, 0, 117, 0, 210, 188, 249, + 0, 190, 209, 156, 238, 201, 248, 258, 259, 235, + 256, 267, 225, 98, 234, 246, 114, 220, 0, 0, + 0, 100, 244, 231, 167, 145, 146, 99, 0, 206, + 122, 130, 119, 180, 241, 242, 118, 270, 106, 255, + 102, 107, 254, 174, 237, 245, 168, 161, 101, 243, + 166, 160, 150, 126, 138, 198, 158, 199, 139, 171, + 170, 172, 0, 0, 0, 229, 252, 271, 111, 0, + 236, 263, 266, 0, 202, 112, 131, 125, 197, 129, + 153, 262, 264, 265, 173, 108, 141, 226, 149, 157, + 205, 269, 187, 211, 115, 251, 227, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 94, 103, 154, 268, + 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, + 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, + 143, 144, 147, 159, 162, 163, 164, 165, 175, 176, + 177, 179, 182, 183, 184, 185, 186, 189, 191, 192, + 193, 194, 195, 196, 204, 207, 213, 214, 215, 216, + 217, 218, 219, 221, 222, 223, 224, 230, 233, 239, + 240, 250, 257, 260, 135, 247, 261, 181, 0, 0, + 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, + 0, 0, 152, 0, 0, 0, 155, 0, 0, 228, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, + 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 113, 0, 0, 0, 0, 0, 83, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 85, + 86, 0, 82, 0, 0, 0, 87, 200, 0, 232, + 136, 151, 109, 148, 95, 105, 0, 134, 178, 208, + 212, 0, 0, 0, 117, 0, 210, 188, 249, 0, + 190, 209, 156, 238, 201, 248, 258, 259, 235, 256, + 267, 225, 98, 234, 246, 114, 220, 0, 0, 0, + 100, 244, 231, 167, 145, 146, 99, 0, 206, 122, + 130, 119, 180, 241, 242, 118, 270, 106, 255, 102, + 107, 254, 174, 237, 245, 168, 161, 101, 243, 166, + 160, 150, 126, 138, 198, 158, 199, 139, 171, 170, + 172, 0, 0, 0, 229, 252, 271, 111, 0, 236, + 263, 266, 0, 202, 112, 131, 125, 197, 129, 153, + 262, 264, 265, 173, 108, 141, 226, 149, 157, 205, + 269, 187, 211, 115, 251, 227, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 103, 154, 268, 203, + 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, + 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, + 144, 147, 159, 162, 163, 164, 165, 175, 176, 177, + 179, 182, 183, 184, 185, 186, 189, 191, 192, 193, + 194, 195, 196, 204, 207, 213, 214, 215, 216, 217, + 218, 219, 221, 222, 223, 224, 230, 233, 239, 240, + 250, 257, 260, 135, 247, 261, 181, 0, 0, 0, + 1026, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 152, 0, 0, 0, 155, 0, 0, 228, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, + 93, 0, 1028, 0, 0, 0, 0, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, + 0, 289, 0, 0, 0, 0, 200, 0, 232, 136, + 151, 109, 148, 95, 105, 0, 134, 178, 208, 212, + 0, 0, 0, 117, 0, 210, 188, 249, 0, 190, + 209, 156, 238, 201, 248, 258, 259, 235, 256, 267, + 225, 98, 234, 246, 114, 220, 0, 0, 0, 100, + 244, 231, 167, 145, 146, 99, 0, 206, 122, 130, + 119, 180, 241, 242, 118, 270, 106, 255, 102, 107, + 254, 174, 237, 245, 168, 161, 101, 243, 166, 160, + 150, 126, 138, 198, 158, 199, 139, 171, 170, 172, + 0, 0, 0, 229, 252, 271, 111, 0, 236, 263, + 266, 0, 202, 112, 131, 125, 197, 129, 153, 262, + 264, 265, 173, 108, 141, 226, 149, 157, 205, 269, + 187, 211, 115, 251, 227, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 103, 154, 268, 203, 128, + 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, + 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, + 147, 159, 162, 163, 164, 165, 175, 176, 177, 179, + 182, 183, 184, 185, 186, 189, 191, 192, 193, 194, + 195, 196, 204, 207, 213, 214, 215, 216, 217, 218, + 219, 221, 222, 223, 224, 230, 233, 239, 240, 250, + 257, 260, 135, 247, 261, 29, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 181, 0, 0, + 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, + 0, 0, 152, 0, 0, 0, 155, 0, 0, 228, + 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 57, 0, 0, 91, + 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, + 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, + 0, 0, 289, 0, 0, 0, 0, 200, 0, 232, + 136, 151, 109, 148, 95, 105, 0, 134, 178, 208, + 212, 0, 0, 0, 117, 0, 210, 188, 249, 0, + 190, 209, 156, 238, 201, 248, 258, 259, 235, 256, + 267, 225, 98, 234, 246, 114, 220, 0, 0, 0, + 100, 244, 231, 167, 145, 146, 99, 0, 206, 122, + 130, 119, 180, 241, 242, 118, 270, 106, 255, 102, + 107, 254, 174, 237, 245, 168, 161, 101, 243, 166, + 160, 150, 126, 138, 198, 158, 199, 139, 171, 170, + 172, 0, 0, 0, 229, 252, 271, 111, 0, 236, + 263, 266, 0, 202, 112, 131, 125, 197, 129, 153, + 262, 264, 265, 173, 108, 141, 226, 149, 157, 205, + 269, 187, 211, 115, 251, 227, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 103, 154, 268, 203, + 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, + 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, + 144, 147, 159, 162, 163, 164, 165, 175, 176, 177, + 179, 182, 183, 184, 185, 186, 189, 191, 192, 193, + 194, 195, 196, 204, 207, 213, 214, 215, 216, 217, + 218, 219, 221, 222, 223, 224, 230, 233, 239, 240, + 250, 257, 260, 135, 247, 261, 181, 0, 0, 0, + 1026, 0, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 152, 0, 0, 0, 155, 0, 0, 228, 169, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, + 93, 0, 1028, 0, 0, 0, 0, 0, 0, 113, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 285, 0, 0, 0, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 103, 153, 264, 202, 128, 252, + 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, + 0, 289, 0, 0, 0, 0, 200, 0, 232, 136, + 151, 109, 148, 95, 105, 0, 134, 178, 208, 212, + 0, 0, 0, 117, 0, 210, 188, 249, 0, 1024, + 209, 156, 238, 201, 248, 258, 259, 235, 256, 267, + 225, 98, 234, 246, 114, 220, 0, 0, 0, 100, + 244, 231, 167, 145, 146, 99, 0, 206, 122, 130, + 119, 180, 241, 242, 118, 270, 106, 255, 102, 107, + 254, 174, 237, 245, 168, 161, 101, 243, 166, 160, + 150, 126, 138, 198, 158, 199, 139, 171, 170, 172, + 0, 0, 0, 229, 252, 271, 111, 0, 236, 263, + 266, 0, 202, 112, 131, 125, 197, 129, 153, 262, + 264, 265, 173, 108, 141, 226, 149, 157, 205, 269, + 187, 211, 115, 251, 227, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 103, 154, 268, 203, 128, + 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, + 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, + 147, 159, 162, 163, 164, 165, 175, 176, 177, 179, + 182, 183, 184, 185, 186, 189, 191, 192, 193, 194, + 195, 196, 204, 207, 213, 214, 215, 216, 217, 218, + 219, 221, 222, 223, 224, 230, 233, 239, 240, 250, + 257, 260, 135, 247, 261, 181, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, + 152, 0, 0, 0, 155, 0, 0, 228, 169, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, + 0, 0, 992, 0, 0, 993, 0, 0, 113, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, + 289, 0, 0, 0, 0, 200, 0, 232, 136, 151, + 109, 148, 95, 105, 0, 134, 178, 208, 212, 0, + 0, 0, 117, 0, 210, 188, 249, 0, 190, 209, + 156, 238, 201, 248, 258, 259, 235, 256, 267, 225, + 98, 234, 246, 114, 220, 0, 0, 0, 100, 244, + 231, 167, 145, 146, 99, 0, 206, 122, 130, 119, + 180, 241, 242, 118, 270, 106, 255, 102, 107, 254, + 174, 237, 245, 168, 161, 101, 243, 166, 160, 150, + 126, 138, 198, 158, 199, 139, 171, 170, 172, 0, + 0, 0, 229, 252, 271, 111, 0, 236, 263, 266, + 0, 202, 112, 131, 125, 197, 129, 153, 262, 264, + 265, 173, 108, 141, 226, 149, 157, 205, 269, 187, + 211, 115, 251, 227, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, 144, 147, - 158, 161, 162, 163, 164, 174, 175, 176, 178, 181, - 182, 183, 184, 185, 188, 190, 191, 192, 193, 194, - 195, 203, 206, 212, 213, 214, 215, 216, 217, 218, - 220, 221, 222, 223, 229, 232, 238, 239, 249, 256, - 259, 135, 246, 260, 180, 0, 0, 0, 0, 0, - 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, - 0, 0, 0, 154, 0, 0, 227, 168, 0, 0, + 159, 162, 163, 164, 165, 175, 176, 177, 179, 182, + 183, 184, 185, 186, 189, 191, 192, 193, 194, 195, + 196, 204, 207, 213, 214, 215, 216, 217, 218, 219, + 221, 222, 223, 224, 230, 233, 239, 240, 250, 257, + 260, 135, 247, 261, 181, 0, 0, 0, 0, 0, + 0, 0, 0, 123, 0, 788, 0, 0, 0, 152, + 0, 0, 0, 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, + 787, 0, 0, 0, 0, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 132, 0, 0, 0, 289, + 0, 0, 0, 0, 200, 0, 232, 136, 151, 109, + 148, 95, 105, 0, 134, 178, 208, 212, 0, 0, + 0, 117, 0, 210, 188, 249, 0, 190, 209, 156, + 238, 201, 248, 258, 259, 235, 256, 267, 225, 98, + 234, 246, 114, 220, 0, 0, 0, 100, 244, 231, + 167, 145, 146, 99, 0, 206, 122, 130, 119, 180, + 241, 242, 118, 270, 106, 255, 102, 107, 254, 174, + 237, 245, 168, 161, 101, 243, 166, 160, 150, 126, + 138, 198, 158, 199, 139, 171, 170, 172, 0, 0, + 0, 229, 252, 271, 111, 0, 236, 263, 266, 0, + 202, 112, 131, 125, 197, 129, 153, 262, 264, 265, + 173, 108, 141, 226, 149, 157, 205, 269, 187, 211, + 115, 251, 227, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94, 103, 154, 268, 203, 128, 253, 0, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, + 124, 127, 133, 137, 140, 142, 143, 144, 147, 159, + 162, 163, 164, 165, 175, 176, 177, 179, 182, 183, + 184, 185, 186, 189, 191, 192, 193, 194, 195, 196, + 204, 207, 213, 214, 215, 216, 217, 218, 219, 221, + 222, 223, 224, 230, 233, 239, 240, 250, 257, 260, + 135, 247, 261, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, + 0, 0, 155, 0, 0, 228, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 409, 91, 92, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 132, 0, 0, 0, 289, 0, + 0, 0, 0, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 0, 0, 0, + 117, 0, 210, 188, 249, 0, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 0, 0, + 229, 252, 271, 111, 0, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 103, 154, 268, 203, 128, 253, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 135, + 247, 261, 181, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, + 0, 155, 0, 0, 228, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 57, 0, 0, 91, 92, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 0, 0, 0, 289, 0, 0, + 0, 0, 200, 0, 232, 136, 151, 109, 148, 95, + 105, 0, 134, 178, 208, 212, 0, 0, 0, 117, + 0, 210, 188, 249, 0, 190, 209, 156, 238, 201, + 248, 258, 259, 235, 256, 267, 225, 98, 234, 246, + 114, 220, 0, 0, 0, 100, 244, 231, 167, 145, + 146, 99, 0, 206, 122, 130, 119, 180, 241, 242, + 118, 270, 106, 255, 102, 107, 254, 174, 237, 245, + 168, 161, 101, 243, 166, 160, 150, 126, 138, 198, + 158, 199, 139, 171, 170, 172, 0, 0, 0, 229, + 252, 271, 111, 0, 236, 263, 266, 0, 202, 112, + 131, 125, 197, 129, 153, 262, 264, 265, 173, 108, + 141, 226, 149, 157, 205, 269, 187, 211, 115, 251, + 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 103, 154, 268, 203, 128, 253, 0, 0, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, + 133, 137, 140, 142, 143, 144, 147, 159, 162, 163, + 164, 165, 175, 176, 177, 179, 182, 183, 184, 185, + 186, 189, 191, 192, 193, 194, 195, 196, 204, 207, + 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, + 224, 230, 233, 239, 240, 250, 257, 260, 135, 247, + 261, 181, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, + 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 91, 92, 93, 0, 1028, 0, 0, + 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, - 742, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 132, 0, 0, 0, 289, 0, 0, 0, + 0, 200, 0, 232, 136, 151, 109, 148, 95, 105, + 0, 134, 178, 208, 212, 0, 0, 0, 117, 0, + 210, 188, 249, 0, 190, 209, 156, 238, 201, 248, + 258, 259, 235, 256, 267, 225, 98, 234, 246, 114, + 220, 0, 0, 0, 100, 244, 231, 167, 145, 146, + 99, 0, 206, 122, 130, 119, 180, 241, 242, 118, + 270, 106, 255, 102, 107, 254, 174, 237, 245, 168, + 161, 101, 243, 166, 160, 150, 126, 138, 198, 158, + 199, 139, 171, 170, 172, 0, 0, 0, 229, 252, + 271, 111, 0, 236, 263, 266, 0, 202, 112, 131, + 125, 197, 129, 153, 262, 264, 265, 173, 108, 141, + 226, 149, 157, 205, 269, 187, 211, 115, 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, + 137, 140, 142, 143, 144, 147, 159, 162, 163, 164, + 165, 175, 176, 177, 179, 182, 183, 184, 185, 186, + 189, 191, 192, 193, 194, 195, 196, 204, 207, 213, + 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, + 230, 233, 239, 240, 250, 257, 260, 135, 247, 261, + 181, 0, 0, 0, 0, 0, 0, 0, 0, 123, + 0, 0, 0, 0, 0, 152, 0, 0, 0, 155, + 0, 0, 228, 169, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 92, 93, 0, 755, 0, 0, 0, + 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 285, - 0, 0, 0, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 132, 0, 0, 0, 289, 0, 0, 0, 0, + 200, 0, 232, 136, 151, 109, 148, 95, 105, 0, + 134, 178, 208, 212, 0, 0, 0, 117, 0, 210, + 188, 249, 0, 190, 209, 156, 238, 201, 248, 258, + 259, 235, 256, 267, 225, 98, 234, 246, 114, 220, + 0, 0, 0, 100, 244, 231, 167, 145, 146, 99, + 0, 206, 122, 130, 119, 180, 241, 242, 118, 270, + 106, 255, 102, 107, 254, 174, 237, 245, 168, 161, + 101, 243, 166, 160, 150, 126, 138, 198, 158, 199, + 139, 171, 170, 172, 0, 0, 0, 229, 252, 271, + 111, 0, 236, 263, 266, 0, 202, 112, 131, 125, + 197, 129, 153, 262, 264, 265, 173, 108, 141, 226, + 149, 157, 205, 269, 187, 211, 115, 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, + 154, 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 180, - 0, 0, 0, 0, 0, 0, 0, 745, 123, 0, - 0, 0, 0, 0, 152, 0, 0, 0, 154, 0, - 0, 227, 168, 0, 0, 0, 0, 0, 0, 0, + 140, 142, 143, 144, 147, 159, 162, 163, 164, 165, + 175, 176, 177, 179, 182, 183, 184, 185, 186, 189, + 191, 192, 193, 194, 195, 196, 204, 207, 213, 214, + 215, 216, 217, 218, 219, 221, 222, 223, 224, 230, + 233, 239, 240, 250, 257, 260, 135, 247, 261, 181, + 0, 0, 0, 0, 0, 0, 0, 758, 123, 0, + 0, 0, 0, 0, 152, 0, 0, 0, 155, 0, + 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, @@ -1399,90 +2493,173 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 132, 0, 0, 0, 285, 0, 0, 0, 0, 199, - 0, 231, 136, 151, 109, 148, 95, 105, 0, 134, - 177, 207, 211, 0, 0, 0, 117, 0, 209, 187, - 248, 0, 189, 208, 155, 237, 200, 247, 257, 258, - 234, 255, 263, 224, 98, 233, 245, 114, 219, 0, - 0, 0, 100, 243, 230, 166, 145, 146, 99, 0, - 205, 122, 130, 119, 179, 240, 241, 118, 266, 106, - 254, 102, 107, 253, 173, 236, 244, 167, 160, 101, - 242, 165, 159, 150, 126, 138, 197, 157, 198, 139, - 170, 169, 171, 0, 0, 0, 228, 251, 267, 111, - 0, 235, 261, 262, 0, 201, 112, 131, 125, 196, - 129, 172, 108, 141, 225, 149, 156, 204, 265, 186, - 210, 115, 250, 226, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 132, 0, 0, 0, 289, 0, 0, 0, 0, 200, + 0, 232, 136, 151, 109, 148, 95, 105, 0, 134, + 178, 208, 212, 0, 0, 0, 117, 0, 210, 188, + 249, 0, 190, 209, 156, 238, 201, 248, 258, 259, + 235, 256, 267, 225, 98, 234, 246, 114, 220, 0, + 0, 0, 100, 244, 231, 167, 145, 146, 99, 0, + 206, 122, 130, 119, 180, 241, 242, 118, 270, 106, + 255, 102, 107, 254, 174, 237, 245, 168, 161, 101, + 243, 166, 160, 150, 126, 138, 198, 158, 199, 139, + 171, 170, 172, 0, 0, 0, 229, 252, 271, 111, + 0, 236, 263, 266, 0, 202, 112, 131, 125, 197, + 129, 153, 262, 264, 265, 173, 108, 141, 226, 149, + 157, 205, 269, 187, 211, 115, 251, 227, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 103, 154, + 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 97, 104, 110, 116, 120, 124, 127, 133, 137, 140, + 142, 143, 144, 147, 159, 162, 163, 164, 165, 175, + 176, 177, 179, 182, 183, 184, 185, 186, 189, 191, + 192, 193, 194, 195, 196, 204, 207, 213, 214, 215, + 216, 217, 218, 219, 221, 222, 223, 224, 230, 233, + 239, 240, 250, 257, 260, 135, 247, 261, 181, 0, + 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, + 0, 0, 0, 152, 0, 0, 0, 155, 0, 0, + 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 91, 92, 93, 0, 636, 0, 0, 0, 0, 0, + 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, + 0, 0, 0, 289, 0, 0, 0, 0, 200, 0, + 232, 136, 151, 109, 148, 95, 105, 0, 134, 178, + 208, 212, 0, 0, 0, 117, 0, 210, 188, 249, + 0, 190, 209, 156, 238, 201, 248, 258, 259, 235, + 256, 267, 225, 98, 234, 246, 114, 220, 0, 0, + 0, 100, 244, 231, 167, 145, 146, 99, 0, 206, + 122, 130, 119, 180, 241, 242, 118, 270, 106, 255, + 102, 107, 254, 174, 237, 245, 168, 161, 101, 243, + 166, 160, 150, 126, 138, 198, 158, 199, 139, 171, + 170, 172, 0, 0, 0, 229, 252, 271, 111, 0, + 236, 263, 266, 0, 202, 112, 131, 125, 197, 129, + 153, 262, 264, 265, 173, 108, 141, 226, 149, 157, + 205, 269, 187, 211, 115, 251, 227, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 94, 103, 154, 268, + 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, + 104, 110, 116, 120, 124, 127, 133, 137, 140, 142, + 143, 144, 147, 159, 162, 163, 164, 165, 175, 176, + 177, 179, 182, 183, 184, 185, 186, 189, 191, 192, + 193, 194, 195, 196, 204, 207, 213, 214, 215, 216, + 217, 218, 219, 221, 222, 223, 224, 230, 233, 239, + 240, 250, 257, 260, 135, 247, 261, 426, 0, 0, + 0, 0, 0, 0, 181, 0, 0, 0, 0, 0, + 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, + 0, 0, 0, 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, - 623, 0, 0, 0, 0, 0, 0, 113, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 132, 0, 0, 0, 285, - 0, 0, 0, 0, 199, 0, 231, 136, 151, 109, - 148, 95, 105, 0, 134, 177, 207, 211, 0, 0, - 0, 117, 0, 209, 187, 248, 0, 189, 208, 155, - 237, 200, 247, 257, 258, 234, 255, 263, 224, 98, - 233, 245, 114, 219, 0, 0, 0, 100, 243, 230, - 166, 145, 146, 99, 0, 205, 122, 130, 119, 179, - 240, 241, 118, 266, 106, 254, 102, 107, 253, 173, - 236, 244, 167, 160, 101, 242, 165, 159, 150, 126, - 138, 197, 157, 198, 139, 170, 169, 171, 0, 0, - 0, 228, 251, 267, 111, 0, 235, 261, 262, 0, - 201, 112, 131, 125, 196, 129, 172, 108, 141, 225, - 149, 156, 204, 265, 186, 210, 115, 250, 226, 0, + 0, 0, 0, 0, 0, 132, 0, 0, 0, 289, + 0, 0, 0, 0, 200, 0, 232, 136, 151, 109, + 148, 95, 105, 0, 134, 178, 208, 212, 0, 0, + 0, 117, 0, 210, 188, 249, 0, 190, 209, 156, + 238, 201, 248, 258, 259, 235, 256, 267, 225, 98, + 234, 246, 114, 220, 0, 0, 0, 100, 244, 231, + 167, 145, 146, 99, 0, 206, 122, 130, 119, 180, + 241, 242, 118, 270, 106, 255, 102, 107, 254, 174, + 237, 245, 168, 161, 101, 243, 166, 160, 150, 126, + 138, 198, 158, 199, 139, 171, 170, 172, 0, 0, + 0, 229, 252, 271, 111, 0, 236, 263, 266, 0, + 202, 112, 131, 125, 197, 129, 153, 262, 264, 265, + 173, 108, 141, 226, 149, 157, 205, 269, 187, 211, + 115, 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 103, - 153, 264, 202, 128, 252, 0, 0, 121, 0, 0, + 0, 0, 94, 103, 154, 268, 203, 128, 253, 0, + 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, + 124, 127, 133, 137, 140, 142, 143, 144, 147, 159, + 162, 163, 164, 165, 175, 176, 177, 179, 182, 183, + 184, 185, 186, 189, 191, 192, 193, 194, 195, 196, + 204, 207, 213, 214, 215, 216, 217, 218, 219, 221, + 222, 223, 224, 230, 233, 239, 240, 250, 257, 260, + 135, 247, 261, 181, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, + 0, 0, 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 96, 97, 104, 110, 116, 120, 124, 127, 133, 137, - 140, 142, 143, 144, 147, 158, 161, 162, 163, 164, - 174, 175, 176, 178, 181, 182, 183, 184, 185, 188, - 190, 191, 192, 193, 194, 195, 203, 206, 212, 213, - 214, 215, 216, 217, 218, 220, 221, 222, 223, 229, - 232, 238, 239, 249, 256, 259, 135, 246, 260, 417, - 0, 0, 0, 0, 0, 0, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, + 0, 0, 0, 0, 0, 91, 92, 93, 0, 0, + 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, - 93, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 326, 0, 132, 0, 0, 0, 289, 0, + 0, 0, 0, 200, 0, 232, 136, 151, 109, 148, + 95, 105, 0, 134, 178, 208, 212, 0, 0, 0, + 117, 0, 210, 188, 249, 0, 190, 209, 156, 238, + 201, 248, 258, 259, 235, 256, 267, 225, 98, 234, + 246, 114, 220, 0, 0, 0, 100, 244, 231, 167, + 145, 146, 99, 0, 206, 122, 130, 119, 180, 241, + 242, 118, 270, 106, 255, 102, 107, 254, 174, 237, + 245, 168, 161, 101, 243, 166, 160, 150, 126, 138, + 198, 158, 199, 139, 171, 170, 172, 0, 0, 0, + 229, 252, 271, 111, 0, 236, 263, 266, 0, 202, + 112, 131, 125, 197, 129, 153, 262, 264, 265, 173, + 108, 141, 226, 149, 157, 205, 269, 187, 211, 115, + 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 94, 103, 154, 268, 203, 128, 253, 0, 0, + 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, + 127, 133, 137, 140, 142, 143, 144, 147, 159, 162, + 163, 164, 165, 175, 176, 177, 179, 182, 183, 184, + 185, 186, 189, 191, 192, 193, 194, 195, 196, 204, + 207, 213, 214, 215, 216, 217, 218, 219, 221, 222, + 223, 224, 230, 233, 239, 240, 250, 257, 260, 325, + 247, 261, 181, 0, 0, 0, 0, 0, 0, 0, + 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, + 0, 155, 0, 0, 228, 169, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 92, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, - 0, 285, 0, 0, 0, 0, 199, 0, 231, 136, - 151, 109, 148, 95, 105, 0, 134, 177, 207, 211, - 0, 0, 0, 117, 0, 209, 187, 248, 0, 189, - 208, 155, 237, 200, 247, 257, 258, 234, 255, 263, - 224, 98, 233, 245, 114, 219, 0, 0, 0, 100, - 243, 230, 166, 145, 146, 99, 0, 205, 122, 130, - 119, 179, 240, 241, 118, 266, 106, 254, 102, 107, - 253, 173, 236, 244, 167, 160, 101, 242, 165, 159, - 150, 126, 138, 197, 157, 198, 139, 170, 169, 171, - 0, 0, 0, 228, 251, 267, 111, 0, 235, 261, - 262, 0, 201, 112, 131, 125, 196, 129, 172, 108, - 141, 225, 149, 156, 204, 265, 186, 210, 115, 250, - 226, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 103, 153, 264, 202, 128, 252, 0, 0, 121, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 132, 0, 284, 0, 289, 0, 0, + 0, 0, 200, 0, 232, 136, 151, 109, 148, 95, + 105, 0, 134, 178, 208, 212, 0, 0, 0, 117, + 0, 210, 188, 249, 0, 190, 209, 156, 238, 201, + 248, 258, 259, 235, 256, 267, 225, 98, 234, 246, + 114, 220, 0, 0, 0, 100, 244, 231, 167, 145, + 146, 99, 0, 206, 122, 130, 119, 180, 241, 242, + 118, 270, 106, 255, 102, 107, 254, 174, 237, 245, + 168, 161, 101, 243, 166, 160, 150, 126, 138, 198, + 158, 199, 139, 171, 170, 172, 0, 0, 0, 229, + 252, 271, 111, 0, 236, 263, 266, 0, 202, 112, + 131, 125, 197, 129, 153, 262, 264, 265, 173, 108, + 141, 226, 149, 157, 205, 269, 187, 211, 115, 251, + 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 94, 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, 110, 116, 120, 124, 127, - 133, 137, 140, 142, 143, 144, 147, 158, 161, 162, - 163, 164, 174, 175, 176, 178, 181, 182, 183, 184, - 185, 188, 190, 191, 192, 193, 194, 195, 203, 206, - 212, 213, 214, 215, 216, 217, 218, 220, 221, 222, - 223, 229, 232, 238, 239, 249, 256, 259, 135, 246, - 260, 180, 0, 0, 0, 0, 0, 0, 0, 0, + 133, 137, 140, 142, 143, 144, 147, 159, 162, 163, + 164, 165, 175, 176, 177, 179, 182, 183, 184, 185, + 186, 189, 191, 192, 193, 194, 195, 196, 204, 207, + 213, 214, 215, 216, 217, 218, 219, 221, 222, 223, + 224, 230, 233, 239, 240, 250, 257, 260, 135, 247, + 261, 181, 0, 0, 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, 0, 152, 0, 0, 0, - 154, 0, 0, 227, 168, 0, 0, 0, 0, 0, + 155, 0, 0, 228, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 92, 93, 0, 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 0, 0, 0, @@ -1491,1433 +2668,43 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 0, 132, 0, 0, 0, 285, 0, 0, 0, - 0, 199, 0, 231, 136, 151, 109, 148, 95, 105, - 0, 134, 177, 207, 211, 0, 0, 0, 117, 0, - 209, 187, 248, 0, 189, 208, 155, 237, 200, 247, - 257, 258, 234, 255, 263, 224, 98, 233, 245, 114, - 219, 0, 0, 0, 100, 243, 230, 166, 145, 146, - 99, 0, 205, 122, 130, 119, 179, 240, 241, 118, - 266, 106, 254, 102, 107, 253, 173, 236, 244, 167, - 160, 101, 242, 165, 159, 150, 126, 138, 197, 157, - 198, 139, 170, 169, 171, 0, 0, 0, 228, 251, - 267, 111, 0, 235, 261, 262, 0, 201, 112, 131, - 125, 196, 129, 172, 108, 141, 225, 149, 156, 204, - 265, 186, 210, 115, 250, 226, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 103, 153, 264, 202, - 128, 252, 0, 0, 121, 0, 0, 0, 0, 0, + 0, 0, 132, 0, 0, 0, 289, 0, 0, 0, + 0, 200, 0, 232, 136, 151, 109, 148, 95, 105, + 0, 134, 178, 208, 212, 0, 0, 0, 117, 0, + 210, 188, 249, 0, 190, 209, 156, 238, 201, 248, + 258, 259, 235, 256, 267, 225, 98, 234, 246, 114, + 220, 0, 0, 0, 100, 244, 231, 167, 145, 146, + 99, 0, 206, 122, 130, 119, 180, 241, 242, 118, + 270, 106, 255, 102, 107, 254, 174, 237, 245, 168, + 161, 101, 243, 166, 160, 150, 126, 138, 198, 158, + 199, 139, 171, 170, 172, 0, 0, 0, 229, 252, + 271, 111, 0, 236, 263, 266, 0, 202, 112, 131, + 125, 197, 129, 153, 262, 264, 265, 173, 108, 141, + 226, 149, 157, 205, 269, 187, 211, 115, 251, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 97, 104, - 110, 116, 120, 124, 127, 133, 137, 140, 142, 143, - 144, 147, 158, 161, 162, 163, 164, 174, 175, 176, - 178, 181, 182, 183, 184, 185, 188, 190, 191, 192, - 193, 194, 195, 203, 206, 212, 213, 214, 215, 216, - 217, 218, 220, 221, 222, 223, 229, 232, 238, 239, - 249, 256, 259, 316, 246, 260, 180, 0, 0, 0, - 0, 0, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 152, 0, 0, 0, 154, 0, 0, 227, 168, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1034, 0, - 0, 0, 0, 554, 542, 0, 0, 499, 557, 472, - 489, 565, 490, 493, 530, 457, 512, 184, 487, 289, - 476, 452, 483, 453, 474, 501, 126, 505, 471, 544, - 515, 556, 155, 0, 477, 563, 158, 521, 0, 231, - 172, 0, 0, 0, 503, 546, 510, 539, 498, 531, - 462, 520, 558, 488, 528, 559, 0, 0, 0, 94, - 95, 96, 0, 1059, 1060, 0, 0, 0, 0, 0, - 116, 0, 525, 553, 485, 527, 529, 567, 451, 522, - 975, 455, 458, 564, 549, 480, 481, 1252, 0, 0, - 0, 0, 0, 289, 502, 511, 536, 496, 0, 0, - 0, 0, 0, 0, 0, 0, 478, 0, 519, 0, - 0, 0, 459, 456, 0, 0, 0, 0, 500, 0, - 0, 0, 461, 0, 479, 537, 0, 449, 135, 541, - 548, 497, 292, 552, 495, 494, 555, 203, 0, 235, - 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, - 215, 545, 475, 484, 120, 482, 213, 191, 252, 518, - 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, - 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, - 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, - 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, - 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, - 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, - 175, 0, 454, 0, 232, 255, 274, 114, 470, 239, - 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, - 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, - 272, 190, 214, 118, 254, 230, 466, 469, 464, 465, - 513, 514, 560, 561, 562, 538, 460, 0, 467, 468, - 0, 543, 550, 551, 517, 97, 106, 157, 271, 206, - 131, 256, 450, 463, 124, 473, 0, 0, 486, 491, - 492, 504, 506, 507, 508, 509, 516, 523, 524, 526, - 532, 533, 534, 535, 540, 547, 566, 99, 100, 107, - 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, - 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, - 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, - 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, - 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, - 253, 260, 263, 138, 250, 264, 554, 542, 0, 0, - 499, 557, 472, 489, 565, 490, 493, 530, 457, 512, - 184, 487, 0, 476, 452, 483, 453, 474, 501, 126, - 505, 471, 544, 515, 556, 155, 0, 477, 563, 158, - 521, 0, 231, 172, 0, 0, 0, 503, 546, 510, - 539, 498, 531, 462, 520, 558, 488, 528, 559, 0, - 0, 0, 94, 95, 96, 0, 1059, 1060, 0, 0, - 0, 0, 0, 116, 0, 525, 553, 485, 527, 529, - 567, 451, 522, 0, 455, 458, 564, 549, 480, 481, - 0, 0, 0, 0, 0, 0, 0, 502, 511, 536, - 496, 0, 0, 0, 0, 0, 0, 0, 0, 478, - 0, 519, 0, 0, 0, 459, 456, 0, 0, 0, - 0, 500, 0, 0, 0, 461, 0, 479, 537, 0, - 449, 135, 541, 548, 497, 292, 552, 495, 494, 555, - 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, - 137, 181, 211, 215, 545, 475, 484, 120, 482, 213, - 191, 252, 518, 193, 212, 159, 241, 204, 251, 261, - 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, - 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, - 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, - 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, - 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, - 142, 174, 173, 175, 0, 454, 0, 232, 255, 274, - 114, 470, 239, 266, 269, 0, 205, 115, 134, 128, - 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, - 152, 160, 208, 272, 190, 214, 118, 254, 230, 466, - 469, 464, 465, 513, 514, 560, 561, 562, 538, 460, - 0, 467, 468, 0, 543, 550, 551, 517, 97, 106, - 157, 271, 206, 131, 256, 450, 463, 124, 473, 0, - 0, 486, 491, 492, 504, 506, 507, 508, 509, 516, - 523, 524, 526, 532, 533, 534, 535, 540, 547, 566, - 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, - 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, - 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, - 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, - 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, - 236, 242, 243, 253, 260, 263, 138, 250, 264, 554, - 542, 0, 0, 499, 557, 472, 489, 565, 490, 493, - 530, 457, 512, 184, 487, 0, 476, 452, 483, 453, - 474, 501, 126, 505, 471, 544, 515, 556, 155, 0, - 477, 563, 158, 521, 0, 231, 172, 0, 0, 0, - 503, 546, 510, 539, 498, 531, 462, 520, 558, 488, - 528, 559, 59, 0, 0, 94, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 0, 116, 0, 525, 553, - 485, 527, 529, 567, 451, 522, 0, 455, 458, 564, - 549, 480, 481, 0, 0, 0, 0, 0, 0, 0, - 502, 511, 536, 496, 0, 0, 0, 0, 0, 0, - 0, 0, 478, 0, 519, 0, 0, 0, 459, 456, - 0, 0, 0, 0, 500, 0, 0, 0, 461, 0, - 479, 537, 0, 449, 135, 541, 548, 497, 292, 552, - 495, 494, 555, 203, 0, 235, 139, 154, 112, 151, - 98, 108, 0, 137, 181, 211, 215, 545, 475, 484, - 120, 482, 213, 191, 252, 518, 193, 212, 159, 241, - 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, - 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, - 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, - 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, - 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, - 201, 161, 202, 142, 174, 173, 175, 0, 454, 0, - 232, 255, 274, 114, 470, 239, 266, 269, 0, 205, - 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, - 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, - 254, 230, 466, 469, 464, 465, 513, 514, 560, 561, - 562, 538, 460, 0, 467, 468, 0, 543, 550, 551, - 517, 97, 106, 157, 271, 206, 131, 256, 450, 463, - 124, 473, 0, 0, 486, 491, 492, 504, 506, 507, - 508, 509, 516, 523, 524, 526, 532, 533, 534, 535, - 540, 547, 566, 99, 100, 107, 113, 119, 123, 127, - 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, - 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, - 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, - 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, - 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, - 250, 264, 554, 542, 0, 0, 499, 557, 472, 489, - 565, 490, 493, 530, 457, 512, 184, 487, 0, 476, - 452, 483, 453, 474, 501, 126, 505, 471, 544, 515, - 556, 155, 0, 477, 563, 158, 521, 0, 231, 172, - 0, 0, 0, 503, 546, 510, 539, 498, 531, 462, - 520, 558, 488, 528, 559, 0, 0, 0, 94, 95, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 525, 553, 485, 527, 529, 567, 451, 522, 0, - 455, 458, 564, 549, 480, 481, 0, 0, 0, 0, - 0, 0, 0, 502, 511, 536, 496, 0, 0, 0, - 0, 0, 0, 1356, 0, 478, 0, 519, 0, 0, - 0, 459, 456, 0, 0, 0, 0, 500, 0, 0, - 0, 461, 0, 479, 537, 0, 449, 135, 541, 548, - 497, 292, 552, 495, 494, 555, 203, 0, 235, 139, - 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, - 545, 475, 484, 120, 482, 213, 191, 252, 518, 193, - 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, - 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, - 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, - 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, - 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, - 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, - 0, 454, 0, 232, 255, 274, 114, 470, 239, 266, - 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, - 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, - 190, 214, 118, 254, 230, 466, 469, 464, 465, 513, - 514, 560, 561, 562, 538, 460, 0, 467, 468, 0, - 543, 550, 551, 517, 97, 106, 157, 271, 206, 131, - 256, 450, 463, 124, 473, 0, 0, 486, 491, 492, - 504, 506, 507, 508, 509, 516, 523, 524, 526, 532, - 533, 534, 535, 540, 547, 566, 99, 100, 107, 113, - 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, - 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, - 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, - 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, - 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, - 260, 263, 138, 250, 264, 554, 542, 0, 0, 499, - 557, 472, 489, 565, 490, 493, 530, 457, 512, 184, - 487, 0, 476, 452, 483, 453, 474, 501, 126, 505, - 471, 544, 515, 556, 155, 0, 477, 563, 158, 521, - 0, 231, 172, 0, 0, 0, 503, 546, 510, 539, - 498, 531, 462, 520, 558, 488, 528, 559, 0, 0, - 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, - 0, 0, 116, 0, 525, 553, 485, 527, 529, 567, - 451, 522, 0, 455, 458, 564, 549, 480, 481, 0, - 0, 0, 0, 0, 0, 0, 502, 511, 536, 496, - 0, 0, 0, 0, 0, 0, 1043, 0, 478, 0, - 519, 0, 0, 0, 459, 456, 0, 0, 0, 0, - 500, 0, 0, 0, 461, 0, 479, 537, 0, 449, - 135, 541, 548, 497, 292, 552, 495, 494, 555, 203, - 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, - 181, 211, 215, 545, 475, 484, 120, 482, 213, 191, - 252, 518, 193, 212, 159, 241, 204, 251, 261, 262, - 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, - 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, - 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, - 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, - 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, - 174, 173, 175, 0, 454, 0, 232, 255, 274, 114, - 470, 239, 266, 269, 0, 205, 115, 134, 128, 200, - 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, - 160, 208, 272, 190, 214, 118, 254, 230, 466, 469, - 464, 465, 513, 514, 560, 561, 562, 538, 460, 0, - 467, 468, 0, 543, 550, 551, 517, 97, 106, 157, - 271, 206, 131, 256, 450, 463, 124, 473, 0, 0, - 486, 491, 492, 504, 506, 507, 508, 509, 516, 523, - 524, 526, 532, 533, 534, 535, 540, 547, 566, 99, - 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, - 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, - 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, - 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, - 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, - 242, 243, 253, 260, 263, 138, 250, 264, 554, 542, - 0, 0, 499, 557, 472, 489, 565, 490, 493, 530, - 457, 512, 184, 487, 0, 476, 452, 483, 453, 474, - 501, 126, 505, 471, 544, 515, 556, 155, 0, 477, - 563, 158, 521, 0, 231, 172, 0, 0, 0, 503, - 546, 510, 539, 498, 531, 462, 520, 558, 488, 528, - 559, 0, 0, 0, 94, 95, 96, 0, 0, 0, - 0, 0, 0, 0, 0, 116, 0, 525, 553, 485, - 527, 529, 567, 451, 522, 0, 455, 458, 564, 549, - 480, 481, 0, 0, 0, 0, 0, 0, 0, 502, - 511, 536, 496, 0, 0, 0, 0, 0, 0, 1006, - 0, 478, 0, 519, 0, 0, 0, 459, 456, 0, - 0, 0, 0, 500, 0, 0, 0, 461, 0, 479, - 537, 0, 449, 135, 541, 548, 497, 292, 552, 495, - 494, 555, 203, 0, 235, 139, 154, 112, 151, 98, - 108, 0, 137, 181, 211, 215, 545, 475, 484, 120, - 482, 213, 191, 252, 518, 193, 212, 159, 241, 204, - 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, - 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, - 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, - 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, - 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, - 161, 202, 142, 174, 173, 175, 0, 454, 0, 232, - 255, 274, 114, 470, 239, 266, 269, 0, 205, 115, - 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, - 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, - 230, 466, 469, 464, 465, 513, 514, 560, 561, 562, - 538, 460, 0, 467, 468, 0, 543, 550, 551, 517, - 97, 106, 157, 271, 206, 131, 256, 450, 463, 124, - 473, 0, 0, 486, 491, 492, 504, 506, 507, 508, - 509, 516, 523, 524, 526, 532, 533, 534, 535, 540, - 547, 566, 99, 100, 107, 113, 119, 123, 127, 130, - 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, - 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, - 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, - 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, - 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, - 264, 554, 542, 0, 0, 499, 557, 472, 489, 565, - 490, 493, 530, 457, 512, 184, 487, 0, 476, 452, - 483, 453, 474, 501, 126, 505, 471, 544, 515, 556, - 155, 0, 477, 563, 158, 521, 0, 231, 172, 0, - 0, 0, 503, 546, 510, 539, 498, 531, 462, 520, - 558, 488, 528, 559, 0, 0, 0, 94, 95, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, - 525, 553, 485, 527, 529, 567, 451, 522, 0, 455, - 458, 564, 549, 480, 481, 0, 0, 0, 0, 0, - 0, 0, 502, 511, 536, 496, 0, 0, 0, 0, - 0, 0, 0, 0, 478, 0, 519, 0, 0, 0, - 459, 456, 0, 0, 0, 0, 500, 0, 0, 0, - 461, 0, 479, 537, 0, 449, 135, 541, 548, 497, - 292, 552, 495, 494, 555, 203, 0, 235, 139, 154, - 112, 151, 98, 108, 0, 137, 181, 211, 215, 545, - 475, 484, 120, 482, 213, 191, 252, 518, 193, 212, - 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, - 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, - 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, - 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, - 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, - 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, - 454, 0, 232, 255, 274, 114, 470, 239, 266, 269, - 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, - 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, - 214, 118, 254, 230, 466, 469, 464, 465, 513, 514, - 560, 561, 562, 538, 460, 0, 467, 468, 0, 543, - 550, 551, 517, 97, 106, 157, 271, 206, 131, 256, - 450, 463, 124, 473, 0, 0, 486, 491, 492, 504, - 506, 507, 508, 509, 516, 523, 524, 526, 532, 533, - 534, 535, 540, 547, 566, 99, 100, 107, 113, 119, - 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, - 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, - 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, - 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, - 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, - 263, 138, 250, 264, 554, 542, 0, 0, 499, 557, - 472, 489, 565, 490, 493, 530, 457, 512, 184, 487, - 0, 476, 452, 483, 453, 474, 501, 126, 505, 471, - 544, 515, 556, 155, 0, 477, 563, 158, 521, 0, - 231, 172, 0, 0, 0, 503, 546, 510, 539, 498, - 531, 462, 520, 558, 488, 528, 559, 0, 0, 0, - 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 0, 116, 0, 525, 553, 485, 527, 529, 567, 451, - 522, 0, 455, 458, 564, 549, 480, 481, 0, 0, - 0, 0, 0, 0, 0, 502, 511, 536, 496, 0, - 0, 0, 0, 0, 0, 0, 0, 478, 0, 519, - 0, 0, 0, 459, 456, 0, 0, 0, 0, 500, - 0, 0, 0, 461, 0, 479, 537, 0, 449, 135, - 541, 548, 497, 292, 552, 495, 494, 555, 203, 0, - 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, - 211, 215, 545, 475, 484, 120, 482, 213, 191, 252, - 518, 193, 212, 159, 241, 204, 251, 261, 262, 238, - 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, - 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, - 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, - 105, 447, 257, 177, 240, 248, 171, 164, 104, 246, - 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, - 173, 175, 0, 454, 0, 232, 255, 274, 114, 470, - 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, - 156, 265, 267, 268, 448, 446, 441, 440, 152, 160, - 208, 272, 190, 214, 118, 254, 230, 466, 469, 464, - 465, 513, 514, 560, 561, 562, 538, 460, 0, 467, - 468, 0, 543, 550, 551, 517, 97, 106, 157, 271, - 206, 131, 256, 450, 463, 124, 473, 0, 0, 486, - 491, 492, 504, 506, 507, 508, 509, 516, 523, 524, - 526, 532, 533, 534, 535, 540, 547, 566, 99, 100, - 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, - 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, - 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, - 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, - 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, - 243, 253, 260, 263, 138, 250, 264, 554, 542, 0, - 0, 499, 557, 472, 489, 565, 490, 493, 530, 457, - 512, 184, 487, 0, 476, 452, 483, 453, 474, 501, - 126, 505, 471, 544, 515, 556, 155, 0, 477, 563, - 158, 521, 0, 231, 172, 0, 0, 0, 503, 546, - 510, 539, 498, 531, 462, 520, 558, 488, 528, 559, - 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 0, 525, 553, 485, 527, - 529, 567, 451, 522, 0, 455, 458, 564, 549, 480, - 481, 0, 0, 0, 0, 0, 0, 0, 502, 511, - 536, 496, 0, 0, 0, 0, 0, 0, 0, 0, - 478, 0, 519, 0, 0, 0, 459, 456, 0, 0, - 0, 0, 500, 0, 0, 0, 461, 0, 479, 537, - 0, 449, 135, 541, 548, 497, 292, 552, 495, 494, - 555, 203, 0, 235, 139, 154, 112, 151, 98, 108, - 0, 137, 181, 211, 215, 545, 475, 484, 120, 482, - 213, 191, 252, 518, 193, 212, 159, 241, 204, 251, - 261, 262, 238, 259, 270, 228, 101, 237, 783, 117, - 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, - 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, - 273, 109, 258, 105, 447, 257, 177, 240, 248, 171, - 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, - 202, 142, 174, 173, 175, 0, 454, 0, 232, 255, - 274, 114, 470, 239, 266, 269, 0, 205, 115, 134, - 128, 200, 132, 156, 265, 267, 268, 448, 446, 441, - 440, 152, 160, 208, 272, 190, 214, 118, 254, 230, - 466, 469, 464, 465, 513, 514, 560, 561, 562, 538, - 460, 0, 467, 468, 0, 543, 550, 551, 517, 97, - 106, 157, 271, 206, 131, 256, 450, 463, 124, 473, - 0, 0, 486, 491, 492, 504, 506, 507, 508, 509, - 516, 523, 524, 526, 532, 533, 534, 535, 540, 547, - 566, 99, 100, 107, 113, 119, 123, 127, 130, 136, - 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, - 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, - 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, - 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, - 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, - 554, 542, 0, 0, 499, 557, 472, 489, 565, 490, - 493, 530, 457, 512, 184, 487, 0, 476, 452, 483, - 453, 474, 501, 126, 505, 471, 544, 515, 556, 155, - 0, 477, 563, 158, 521, 0, 231, 172, 0, 0, - 0, 503, 546, 510, 539, 498, 531, 462, 520, 558, - 488, 528, 559, 0, 0, 0, 94, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 0, 116, 0, 525, - 553, 485, 527, 529, 567, 451, 522, 0, 455, 458, - 564, 549, 480, 481, 0, 0, 0, 0, 0, 0, - 0, 502, 511, 536, 496, 0, 0, 0, 0, 0, - 0, 0, 0, 478, 0, 519, 0, 0, 0, 459, - 456, 0, 0, 0, 0, 500, 0, 0, 0, 461, - 0, 479, 537, 0, 449, 135, 541, 548, 497, 292, - 552, 495, 494, 555, 203, 0, 235, 139, 154, 112, - 151, 98, 108, 0, 137, 181, 211, 215, 545, 475, - 484, 120, 482, 213, 191, 252, 518, 193, 212, 159, - 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, - 237, 438, 117, 223, 0, 0, 0, 103, 247, 234, - 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, - 244, 245, 121, 273, 109, 258, 105, 447, 257, 177, - 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, - 141, 201, 161, 202, 142, 174, 173, 175, 0, 454, - 0, 232, 255, 274, 114, 470, 239, 266, 269, 0, - 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, - 448, 446, 441, 440, 152, 160, 208, 272, 190, 214, - 118, 254, 230, 466, 469, 464, 465, 513, 514, 560, - 561, 562, 538, 460, 0, 467, 468, 0, 543, 550, - 551, 517, 97, 106, 157, 271, 206, 131, 256, 450, - 463, 124, 473, 0, 0, 486, 491, 492, 504, 506, - 507, 508, 509, 516, 523, 524, 526, 532, 533, 534, - 535, 540, 547, 566, 99, 100, 107, 113, 119, 123, - 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, - 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, - 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, - 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, - 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, - 138, 250, 264, 184, 0, 0, 946, 0, 341, 0, - 0, 0, 126, 0, 340, 0, 0, 0, 155, 0, - 947, 384, 158, 0, 0, 231, 172, 0, 0, 0, - 0, 0, 375, 376, 0, 0, 0, 0, 0, 0, - 0, 0, 59, 0, 0, 94, 95, 96, 362, 361, - 364, 365, 366, 367, 0, 0, 116, 363, 368, 369, - 370, 0, 0, 0, 0, 338, 355, 0, 383, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 352, 353, - 424, 0, 0, 0, 398, 0, 354, 0, 0, 347, - 348, 350, 349, 351, 356, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 397, 0, 0, 292, 0, - 0, 395, 0, 203, 0, 235, 139, 154, 112, 151, - 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, - 120, 0, 213, 191, 252, 0, 193, 212, 159, 241, - 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, - 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, - 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, - 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, - 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, - 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, - 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, - 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, - 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, - 254, 230, 385, 396, 391, 392, 389, 390, 388, 387, - 386, 399, 377, 378, 379, 380, 382, 0, 393, 394, - 381, 97, 106, 157, 271, 206, 131, 256, 0, 0, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, - 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, - 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, - 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, - 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, - 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, - 250, 264, 184, 0, 0, 0, 0, 341, 0, 0, - 0, 126, 0, 340, 0, 0, 0, 155, 0, 0, - 384, 158, 0, 0, 231, 172, 0, 0, 0, 0, - 0, 375, 376, 0, 0, 0, 0, 0, 0, 1050, - 0, 59, 0, 0, 94, 95, 96, 362, 361, 364, - 365, 366, 367, 0, 0, 116, 363, 368, 369, 370, - 1051, 0, 0, 0, 338, 355, 0, 383, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 352, 353, 0, - 0, 0, 0, 398, 0, 354, 0, 0, 347, 348, - 350, 349, 351, 356, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 397, 0, 0, 292, 0, 0, - 395, 0, 203, 0, 235, 139, 154, 112, 151, 98, - 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, - 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, - 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, - 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, - 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, - 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, - 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, - 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, - 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, - 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, - 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, - 230, 385, 396, 391, 392, 389, 390, 388, 387, 386, - 399, 377, 378, 379, 380, 382, 0, 393, 394, 381, - 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, - 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, - 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, - 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, - 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, - 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, - 264, 184, 0, 0, 0, 0, 341, 0, 0, 0, - 126, 0, 340, 0, 0, 0, 155, 0, 0, 384, - 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, - 375, 376, 0, 0, 0, 0, 0, 0, 0, 0, - 59, 0, 412, 94, 95, 96, 362, 361, 364, 365, - 366, 367, 0, 0, 116, 363, 368, 369, 370, 0, - 0, 0, 0, 338, 355, 0, 383, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 352, 353, 0, 0, - 0, 0, 398, 0, 354, 0, 0, 347, 348, 350, - 349, 351, 356, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 397, 0, 0, 292, 0, 0, 395, - 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, - 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, - 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, - 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, - 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, - 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, - 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, - 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, - 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, - 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, - 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, - 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, - 385, 396, 391, 392, 389, 390, 388, 387, 386, 399, - 377, 378, 379, 380, 382, 0, 393, 394, 381, 97, - 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, - 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, - 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, - 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, - 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, - 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, - 184, 0, 0, 0, 0, 341, 0, 0, 0, 126, - 0, 340, 0, 0, 0, 155, 0, 0, 384, 158, - 0, 0, 231, 172, 0, 0, 0, 0, 0, 375, - 376, 0, 0, 0, 0, 0, 0, 0, 0, 59, - 0, 0, 94, 95, 96, 362, 361, 364, 365, 366, - 367, 0, 0, 116, 363, 368, 369, 370, 0, 0, - 0, 0, 338, 355, 0, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 352, 353, 424, 0, 0, - 0, 398, 0, 354, 0, 0, 347, 348, 350, 349, - 351, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 135, 397, 0, 0, 292, 0, 0, 395, 0, - 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, - 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, - 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, - 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, - 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, - 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, - 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, - 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, - 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, - 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, - 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, - 152, 160, 208, 272, 190, 214, 118, 254, 230, 385, - 396, 391, 392, 389, 390, 388, 387, 386, 399, 377, - 378, 379, 380, 382, 0, 393, 394, 381, 97, 106, - 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, - 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, - 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, - 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, - 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, - 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, - 0, 0, 0, 0, 341, 0, 0, 0, 126, 0, - 340, 0, 0, 0, 155, 0, 0, 384, 158, 0, - 0, 231, 172, 0, 0, 0, 0, 0, 375, 376, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 94, 95, 96, 362, 964, 364, 365, 366, 367, - 0, 0, 116, 363, 368, 369, 370, 0, 0, 0, - 0, 338, 355, 0, 383, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 352, 353, 424, 0, 0, 0, - 398, 0, 354, 0, 0, 347, 348, 350, 349, 351, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 397, 0, 0, 292, 0, 0, 395, 0, 203, - 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, - 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, - 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, - 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, - 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, - 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, - 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, - 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, - 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, - 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, - 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, - 160, 208, 272, 190, 214, 118, 254, 230, 385, 396, - 391, 392, 389, 390, 388, 387, 386, 399, 377, 378, - 379, 380, 382, 0, 393, 394, 381, 97, 106, 157, - 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, - 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, - 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, - 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, - 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, - 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, - 0, 0, 0, 341, 0, 0, 0, 126, 0, 340, - 0, 0, 0, 155, 0, 0, 384, 158, 0, 0, - 231, 172, 0, 0, 0, 0, 0, 375, 376, 0, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, - 94, 95, 96, 362, 961, 364, 365, 366, 367, 0, - 0, 116, 363, 368, 369, 370, 0, 0, 0, 0, - 338, 355, 0, 383, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 353, 424, 0, 0, 0, 398, - 0, 354, 0, 0, 347, 348, 350, 349, 351, 356, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 397, 0, 0, 292, 0, 0, 395, 0, 203, 0, - 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, - 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, - 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, - 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, - 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, - 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, - 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, - 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, - 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, - 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, - 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, - 208, 272, 190, 214, 118, 254, 230, 385, 396, 391, - 392, 389, 390, 388, 387, 386, 399, 377, 378, 379, - 380, 382, 0, 393, 394, 381, 97, 106, 157, 271, - 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, - 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, - 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, - 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, - 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, - 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, - 243, 253, 260, 263, 138, 250, 264, 405, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 184, 0, 0, 0, 0, 341, 0, 0, 0, 126, - 0, 340, 0, 0, 0, 155, 0, 0, 384, 158, - 0, 0, 231, 172, 0, 0, 0, 0, 0, 375, - 376, 0, 0, 0, 0, 0, 0, 0, 0, 59, - 0, 0, 94, 95, 96, 362, 361, 364, 365, 366, - 367, 0, 0, 116, 363, 368, 369, 370, 0, 0, - 0, 0, 338, 355, 0, 383, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 352, 353, 0, 0, 0, - 0, 398, 0, 354, 0, 0, 347, 348, 350, 349, - 351, 356, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 135, 397, 0, 0, 292, 0, 0, 395, 0, - 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, - 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, - 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, - 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, - 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, - 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, - 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, - 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, - 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, - 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, - 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, - 152, 160, 208, 272, 190, 214, 118, 254, 230, 385, - 396, 391, 392, 389, 390, 388, 387, 386, 399, 377, - 378, 379, 380, 382, 0, 393, 394, 381, 97, 106, - 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, - 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, - 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, - 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, - 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, - 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, - 0, 0, 0, 0, 341, 0, 0, 0, 126, 0, - 340, 0, 0, 0, 155, 0, 0, 384, 158, 0, - 0, 231, 172, 0, 0, 0, 0, 0, 375, 376, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 94, 95, 96, 362, 361, 364, 365, 366, 367, - 0, 0, 116, 363, 368, 369, 370, 0, 0, 0, - 0, 338, 355, 0, 383, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 352, 353, 0, 0, 0, 0, - 398, 0, 354, 0, 0, 347, 348, 350, 349, 351, - 356, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 397, 0, 0, 292, 0, 0, 395, 0, 203, - 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, - 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, - 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, - 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, - 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, - 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, - 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, - 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, - 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, - 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, - 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, - 160, 208, 272, 190, 214, 118, 254, 230, 385, 396, - 391, 392, 389, 390, 388, 387, 386, 399, 377, 378, - 379, 380, 382, 0, 393, 394, 381, 97, 106, 157, - 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, - 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, - 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, - 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, - 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, - 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, - 0, 0, 0, 155, 0, 0, 384, 158, 0, 0, - 231, 172, 0, 0, 0, 0, 0, 375, 376, 0, - 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, - 94, 95, 96, 362, 361, 364, 365, 366, 367, 0, - 0, 116, 363, 368, 369, 370, 0, 0, 0, 0, - 0, 355, 0, 383, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 352, 353, 0, 0, 0, 0, 398, - 0, 354, 0, 0, 347, 348, 350, 349, 351, 356, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 397, 0, 0, 292, 0, 0, 395, 0, 203, 0, - 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, - 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, - 1619, 193, 212, 159, 241, 204, 251, 261, 262, 238, - 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, - 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, - 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, - 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, - 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, - 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, - 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, - 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, - 208, 272, 190, 214, 118, 254, 230, 385, 396, 391, - 392, 389, 390, 388, 387, 386, 399, 377, 378, 379, - 380, 382, 0, 393, 394, 381, 97, 106, 157, 271, - 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, - 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, - 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, - 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, - 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, - 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, - 243, 253, 260, 263, 138, 250, 264, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, - 0, 0, 155, 0, 0, 384, 158, 0, 0, 231, - 172, 0, 0, 0, 0, 0, 375, 376, 0, 0, - 0, 0, 0, 0, 0, 0, 59, 0, 412, 94, - 95, 96, 362, 361, 364, 365, 366, 367, 0, 0, - 116, 363, 368, 369, 370, 0, 0, 0, 0, 0, - 355, 0, 383, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 352, 353, 0, 0, 0, 0, 398, 0, - 354, 0, 0, 347, 348, 350, 349, 351, 356, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 397, - 0, 0, 292, 0, 0, 395, 0, 203, 0, 235, - 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, - 215, 0, 0, 0, 120, 0, 213, 191, 252, 0, - 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, - 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, - 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, - 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, - 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, - 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, - 175, 0, 0, 0, 232, 255, 274, 114, 0, 239, - 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, - 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, - 272, 190, 214, 118, 254, 230, 385, 396, 391, 392, - 389, 390, 388, 387, 386, 399, 377, 378, 379, 380, - 382, 0, 393, 394, 381, 97, 106, 157, 271, 206, - 131, 256, 0, 0, 124, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, - 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, - 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, - 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, - 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, - 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, - 253, 260, 263, 138, 250, 264, 184, 0, 0, 0, - 0, 0, 0, 0, 0, 126, 0, 0, 0, 0, - 0, 155, 0, 0, 384, 158, 0, 0, 231, 172, - 0, 0, 0, 0, 0, 375, 376, 0, 0, 0, - 0, 0, 0, 0, 0, 59, 0, 0, 94, 95, - 96, 362, 361, 364, 365, 366, 367, 0, 0, 116, - 363, 368, 369, 370, 0, 0, 0, 0, 0, 355, - 0, 383, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 352, 353, 0, 0, 0, 0, 398, 0, 354, - 0, 0, 347, 348, 350, 349, 351, 356, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 397, 0, - 0, 292, 0, 0, 395, 0, 203, 0, 235, 139, - 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, - 0, 0, 0, 120, 0, 213, 191, 252, 0, 193, - 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, - 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, - 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, - 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, - 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, - 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, - 0, 0, 0, 232, 255, 274, 114, 0, 239, 266, - 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, - 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, - 190, 214, 118, 254, 230, 385, 396, 391, 392, 389, - 390, 388, 387, 386, 399, 377, 378, 379, 380, 382, - 0, 393, 394, 381, 97, 106, 157, 271, 206, 131, - 256, 0, 0, 124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, - 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, - 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, - 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, - 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, - 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, - 260, 263, 138, 250, 264, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, - 155, 0, 0, 0, 158, 0, 0, 231, 172, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 95, 96, - 0, 0, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 662, 661, 671, 672, - 664, 665, 666, 667, 668, 669, 670, 663, 0, 0, - 673, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, - 292, 0, 0, 0, 0, 203, 0, 235, 139, 154, - 112, 151, 98, 108, 0, 137, 181, 211, 215, 0, - 0, 0, 120, 0, 213, 191, 252, 0, 193, 212, - 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, - 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, - 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, - 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, - 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, - 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, - 0, 0, 232, 255, 274, 114, 0, 239, 266, 269, - 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, - 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, - 214, 118, 254, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 106, 157, 271, 206, 131, 256, - 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 99, 100, 107, 113, 119, - 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, - 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, - 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, - 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, - 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, - 263, 138, 250, 264, 184, 0, 0, 0, 757, 0, - 0, 0, 0, 126, 0, 0, 0, 0, 0, 155, - 0, 0, 0, 158, 0, 0, 231, 172, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 94, 95, 96, 0, - 759, 0, 0, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 651, 652, 650, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 0, 292, - 0, 0, 0, 0, 203, 0, 235, 139, 154, 112, - 151, 98, 108, 0, 137, 181, 211, 215, 0, 0, - 0, 120, 0, 213, 191, 252, 0, 193, 212, 159, - 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, - 237, 249, 117, 223, 0, 0, 0, 103, 247, 234, - 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, - 244, 245, 121, 273, 109, 258, 105, 110, 257, 177, - 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, - 141, 201, 161, 202, 142, 174, 173, 175, 0, 0, - 0, 232, 255, 274, 114, 0, 239, 266, 269, 0, - 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, - 176, 111, 144, 229, 152, 160, 208, 272, 190, 214, - 118, 254, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 97, 106, 157, 271, 206, 131, 256, 0, - 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, - 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, - 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, - 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, - 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, - 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, - 138, 250, 264, 184, 0, 0, 0, 0, 0, 0, - 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 158, 0, 0, 231, 172, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 95, 96, 0, 0, - 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 88, 89, 0, 85, 0, - 0, 0, 90, 203, 0, 235, 139, 154, 112, 151, - 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, - 120, 0, 213, 191, 252, 0, 193, 212, 159, 241, - 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, - 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, - 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, - 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, - 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, - 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, - 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, - 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, - 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, - 254, 230, 0, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 106, 157, 271, 206, 131, 256, 0, 0, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, - 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, - 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, - 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, - 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, - 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, - 250, 264, 184, 0, 0, 0, 1033, 0, 0, 0, - 0, 126, 0, 0, 0, 0, 0, 155, 0, 0, - 0, 158, 0, 0, 231, 172, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 95, 96, 0, 1035, 0, - 0, 0, 0, 0, 0, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 292, 0, 0, - 0, 0, 203, 0, 235, 139, 154, 112, 151, 98, - 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, - 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, - 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, - 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, - 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, - 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, - 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, - 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, - 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, - 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, - 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, - 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, - 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, - 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, - 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, - 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, - 264, 30, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 184, 0, 0, 0, 0, 0, - 0, 0, 0, 126, 0, 0, 0, 0, 0, 155, - 0, 0, 0, 158, 0, 0, 231, 172, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 59, 0, 0, 94, 95, 96, 0, - 0, 0, 0, 0, 0, 0, 0, 116, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 135, 0, 0, 0, 292, - 0, 0, 0, 0, 203, 0, 235, 139, 154, 112, - 151, 98, 108, 0, 137, 181, 211, 215, 0, 0, - 0, 120, 0, 213, 191, 252, 0, 193, 212, 159, - 241, 204, 251, 261, 262, 238, 259, 270, 228, 101, - 237, 249, 117, 223, 0, 0, 0, 103, 247, 234, - 170, 148, 149, 102, 0, 209, 125, 133, 122, 183, - 244, 245, 121, 273, 109, 258, 105, 110, 257, 177, - 240, 248, 171, 164, 104, 246, 169, 163, 153, 129, - 141, 201, 161, 202, 142, 174, 173, 175, 0, 0, - 0, 232, 255, 274, 114, 0, 239, 266, 269, 0, - 205, 115, 134, 128, 200, 132, 156, 265, 267, 268, - 176, 111, 144, 229, 152, 160, 208, 272, 190, 214, - 118, 254, 230, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 97, 106, 157, 271, 206, 131, 256, 0, - 0, 124, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 100, 107, 113, 119, 123, - 127, 130, 136, 140, 143, 145, 146, 147, 150, 162, - 165, 166, 167, 168, 178, 179, 180, 182, 185, 186, - 187, 188, 189, 192, 194, 195, 196, 197, 198, 199, - 207, 210, 216, 217, 218, 219, 220, 221, 222, 224, - 225, 226, 227, 233, 236, 242, 243, 253, 260, 263, - 138, 250, 264, 184, 0, 0, 0, 1033, 0, 0, - 0, 0, 126, 0, 0, 0, 0, 0, 155, 0, - 0, 0, 158, 0, 0, 231, 172, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 95, 96, 0, 1035, - 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 135, 0, 0, 0, 292, 0, - 0, 0, 0, 203, 0, 235, 139, 154, 112, 151, - 98, 108, 0, 137, 181, 211, 215, 0, 0, 0, - 120, 0, 213, 191, 252, 0, 1031, 212, 159, 241, - 204, 251, 261, 262, 238, 259, 270, 228, 101, 237, - 249, 117, 223, 0, 0, 0, 103, 247, 234, 170, - 148, 149, 102, 0, 209, 125, 133, 122, 183, 244, - 245, 121, 273, 109, 258, 105, 110, 257, 177, 240, - 248, 171, 164, 104, 246, 169, 163, 153, 129, 141, - 201, 161, 202, 142, 174, 173, 175, 0, 0, 0, - 232, 255, 274, 114, 0, 239, 266, 269, 0, 205, - 115, 134, 128, 200, 132, 156, 265, 267, 268, 176, - 111, 144, 229, 152, 160, 208, 272, 190, 214, 118, - 254, 230, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 97, 106, 157, 271, 206, 131, 256, 0, 0, - 124, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 99, 100, 107, 113, 119, 123, 127, - 130, 136, 140, 143, 145, 146, 147, 150, 162, 165, - 166, 167, 168, 178, 179, 180, 182, 185, 186, 187, - 188, 189, 192, 194, 195, 196, 197, 198, 199, 207, - 210, 216, 217, 218, 219, 220, 221, 222, 224, 225, - 226, 227, 233, 236, 242, 243, 253, 260, 263, 138, - 250, 264, 184, 0, 0, 0, 0, 0, 0, 0, - 0, 126, 0, 0, 0, 0, 0, 155, 0, 0, - 0, 158, 0, 0, 231, 172, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 94, 95, 96, 0, 0, 998, - 0, 0, 999, 0, 0, 116, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 135, 0, 0, 0, 292, 0, 0, - 0, 0, 203, 0, 235, 139, 154, 112, 151, 98, - 108, 0, 137, 181, 211, 215, 0, 0, 0, 120, - 0, 213, 191, 252, 0, 193, 212, 159, 241, 204, - 251, 261, 262, 238, 259, 270, 228, 101, 237, 249, - 117, 223, 0, 0, 0, 103, 247, 234, 170, 148, - 149, 102, 0, 209, 125, 133, 122, 183, 244, 245, - 121, 273, 109, 258, 105, 110, 257, 177, 240, 248, - 171, 164, 104, 246, 169, 163, 153, 129, 141, 201, - 161, 202, 142, 174, 173, 175, 0, 0, 0, 232, - 255, 274, 114, 0, 239, 266, 269, 0, 205, 115, - 134, 128, 200, 132, 156, 265, 267, 268, 176, 111, - 144, 229, 152, 160, 208, 272, 190, 214, 118, 254, - 230, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 97, 106, 157, 271, 206, 131, 256, 0, 0, 124, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 99, 100, 107, 113, 119, 123, 127, 130, - 136, 140, 143, 145, 146, 147, 150, 162, 165, 166, - 167, 168, 178, 179, 180, 182, 185, 186, 187, 188, - 189, 192, 194, 195, 196, 197, 198, 199, 207, 210, - 216, 217, 218, 219, 220, 221, 222, 224, 225, 226, - 227, 233, 236, 242, 243, 253, 260, 263, 138, 250, - 264, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 0, 794, 0, 0, 0, 155, 0, 0, 0, - 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 95, 96, 0, 793, 0, 0, - 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 0, 0, 0, 292, 0, 0, 0, - 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, - 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, - 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, - 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, - 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, - 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, - 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, - 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, - 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, - 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, - 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, - 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, - 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, - 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, - 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, - 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, - 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 0, 0, 0, 155, 0, 0, 0, 158, - 0, 0, 231, 172, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 412, 94, 95, 96, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 135, 0, 0, 0, 292, 0, 0, 0, 0, - 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, - 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, - 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, - 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, - 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, - 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, - 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, - 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, - 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, - 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, - 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, - 152, 160, 208, 272, 190, 214, 118, 254, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 97, 106, - 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, - 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, - 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, - 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, - 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, - 236, 242, 243, 253, 260, 263, 138, 250, 264, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, - 0, 0, 0, 0, 155, 0, 0, 0, 158, 0, - 0, 231, 172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, - 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, - 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 0, 0, 0, 292, 0, 0, 0, 0, 203, - 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, - 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, - 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, - 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, - 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, - 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, - 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, - 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, - 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, - 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, - 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, - 160, 208, 272, 190, 214, 118, 254, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 106, 157, - 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, - 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, - 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, - 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, - 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, - 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, - 0, 0, 0, 155, 0, 0, 0, 158, 0, 0, - 231, 172, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 95, 96, 0, 1035, 0, 0, 0, 0, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 0, 0, 292, 0, 0, 0, 0, 203, 0, - 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, - 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, - 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, - 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, - 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, - 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, - 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, - 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, - 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, - 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, - 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, - 208, 272, 190, 214, 118, 254, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 97, 106, 157, 271, - 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, - 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, - 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, - 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, - 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, - 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, - 243, 253, 260, 263, 138, 250, 264, 184, 0, 0, - 0, 0, 0, 0, 0, 0, 126, 0, 0, 0, - 0, 0, 155, 0, 0, 0, 158, 0, 0, 231, - 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, - 95, 96, 0, 759, 0, 0, 0, 0, 0, 0, - 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 135, 0, - 0, 0, 292, 0, 0, 0, 0, 203, 0, 235, - 139, 154, 112, 151, 98, 108, 0, 137, 181, 211, - 215, 0, 0, 0, 120, 0, 213, 191, 252, 0, - 193, 212, 159, 241, 204, 251, 261, 262, 238, 259, - 270, 228, 101, 237, 249, 117, 223, 0, 0, 0, - 103, 247, 234, 170, 148, 149, 102, 0, 209, 125, - 133, 122, 183, 244, 245, 121, 273, 109, 258, 105, - 110, 257, 177, 240, 248, 171, 164, 104, 246, 169, - 163, 153, 129, 141, 201, 161, 202, 142, 174, 173, - 175, 0, 0, 0, 232, 255, 274, 114, 0, 239, - 266, 269, 0, 205, 115, 134, 128, 200, 132, 156, - 265, 267, 268, 176, 111, 144, 229, 152, 160, 208, - 272, 190, 214, 118, 254, 230, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 97, 106, 157, 271, 206, - 131, 256, 0, 0, 124, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 99, 100, 107, - 113, 119, 123, 127, 130, 136, 140, 143, 145, 146, - 147, 150, 162, 165, 166, 167, 168, 178, 179, 180, - 182, 185, 186, 187, 188, 189, 192, 194, 195, 196, - 197, 198, 199, 207, 210, 216, 217, 218, 219, 220, - 221, 222, 224, 225, 226, 227, 233, 236, 242, 243, - 253, 260, 263, 138, 250, 264, 184, 0, 0, 0, - 0, 0, 0, 0, 763, 126, 0, 0, 0, 0, - 0, 155, 0, 0, 0, 158, 0, 0, 231, 172, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 94, 95, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 116, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, - 0, 292, 0, 0, 0, 0, 203, 0, 235, 139, - 154, 112, 151, 98, 108, 0, 137, 181, 211, 215, - 0, 0, 0, 120, 0, 213, 191, 252, 0, 193, - 212, 159, 241, 204, 251, 261, 262, 238, 259, 270, - 228, 101, 237, 249, 117, 223, 0, 0, 0, 103, - 247, 234, 170, 148, 149, 102, 0, 209, 125, 133, - 122, 183, 244, 245, 121, 273, 109, 258, 105, 110, - 257, 177, 240, 248, 171, 164, 104, 246, 169, 163, - 153, 129, 141, 201, 161, 202, 142, 174, 173, 175, - 0, 0, 0, 232, 255, 274, 114, 0, 239, 266, - 269, 0, 205, 115, 134, 128, 200, 132, 156, 265, - 267, 268, 176, 111, 144, 229, 152, 160, 208, 272, - 190, 214, 118, 254, 230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 97, 106, 157, 271, 206, 131, - 256, 0, 0, 124, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 99, 100, 107, 113, - 119, 123, 127, 130, 136, 140, 143, 145, 146, 147, - 150, 162, 165, 166, 167, 168, 178, 179, 180, 182, - 185, 186, 187, 188, 189, 192, 194, 195, 196, 197, - 198, 199, 207, 210, 216, 217, 218, 219, 220, 221, - 222, 224, 225, 226, 227, 233, 236, 242, 243, 253, - 260, 263, 138, 250, 264, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 126, 0, 0, 0, 0, 0, - 155, 0, 0, 0, 158, 0, 0, 231, 172, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 94, 95, 96, - 0, 640, 0, 0, 0, 0, 0, 0, 116, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 135, 0, 0, 0, - 292, 0, 0, 0, 0, 203, 0, 235, 139, 154, - 112, 151, 98, 108, 0, 137, 181, 211, 215, 0, - 0, 0, 120, 0, 213, 191, 252, 0, 193, 212, - 159, 241, 204, 251, 261, 262, 238, 259, 270, 228, - 101, 237, 249, 117, 223, 0, 0, 0, 103, 247, - 234, 170, 148, 149, 102, 0, 209, 125, 133, 122, - 183, 244, 245, 121, 273, 109, 258, 105, 110, 257, - 177, 240, 248, 171, 164, 104, 246, 169, 163, 153, - 129, 141, 201, 161, 202, 142, 174, 173, 175, 0, - 0, 0, 232, 255, 274, 114, 0, 239, 266, 269, - 0, 205, 115, 134, 128, 200, 132, 156, 265, 267, - 268, 176, 111, 144, 229, 152, 160, 208, 272, 190, - 214, 118, 254, 230, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 97, 106, 157, 271, 206, 131, 256, - 0, 0, 124, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 99, 100, 107, 113, 119, - 123, 127, 130, 136, 140, 143, 145, 146, 147, 150, - 162, 165, 166, 167, 168, 178, 179, 180, 182, 185, - 186, 187, 188, 189, 192, 194, 195, 196, 197, 198, - 199, 207, 210, 216, 217, 218, 219, 220, 221, 222, - 224, 225, 226, 227, 233, 236, 242, 243, 253, 260, - 263, 138, 250, 264, 430, 0, 0, 0, 0, 0, - 0, 184, 0, 0, 0, 0, 0, 0, 0, 0, - 126, 0, 0, 0, 0, 0, 155, 0, 0, 0, - 158, 0, 0, 231, 172, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 94, 95, 96, 0, 0, 0, 0, - 0, 0, 0, 0, 116, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 135, 0, 0, 0, 292, 0, 0, 0, - 0, 203, 0, 235, 139, 154, 112, 151, 98, 108, - 0, 137, 181, 211, 215, 0, 0, 0, 120, 0, - 213, 191, 252, 0, 193, 212, 159, 241, 204, 251, - 261, 262, 238, 259, 270, 228, 101, 237, 249, 117, - 223, 0, 0, 0, 103, 247, 234, 170, 148, 149, - 102, 0, 209, 125, 133, 122, 183, 244, 245, 121, - 273, 109, 258, 105, 110, 257, 177, 240, 248, 171, - 164, 104, 246, 169, 163, 153, 129, 141, 201, 161, - 202, 142, 174, 173, 175, 0, 0, 0, 232, 255, - 274, 114, 0, 239, 266, 269, 0, 205, 115, 134, - 128, 200, 132, 156, 265, 267, 268, 176, 111, 144, - 229, 152, 160, 208, 272, 190, 214, 118, 254, 230, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, - 106, 157, 271, 206, 131, 256, 0, 0, 124, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 99, 100, 107, 113, 119, 123, 127, 130, 136, - 140, 143, 145, 146, 147, 150, 162, 165, 166, 167, - 168, 178, 179, 180, 182, 185, 186, 187, 188, 189, - 192, 194, 195, 196, 197, 198, 199, 207, 210, 216, - 217, 218, 219, 220, 221, 222, 224, 225, 226, 227, - 233, 236, 242, 243, 253, 260, 263, 138, 250, 264, - 184, 0, 0, 0, 0, 0, 0, 0, 0, 126, - 0, 0, 0, 0, 0, 155, 0, 0, 0, 158, - 0, 0, 231, 172, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 94, 95, 96, 0, 0, 0, 0, 0, - 0, 0, 0, 116, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, - 0, 135, 0, 0, 0, 292, 0, 0, 0, 0, - 203, 0, 235, 139, 154, 112, 151, 98, 108, 0, - 137, 181, 211, 215, 0, 0, 0, 120, 0, 213, - 191, 252, 0, 193, 212, 159, 241, 204, 251, 261, - 262, 238, 259, 270, 228, 101, 237, 249, 117, 223, - 0, 0, 0, 103, 247, 234, 170, 148, 149, 102, - 0, 209, 125, 133, 122, 183, 244, 245, 121, 273, - 109, 258, 105, 110, 257, 177, 240, 248, 171, 164, - 104, 246, 169, 163, 153, 129, 141, 201, 161, 202, - 142, 174, 173, 175, 0, 0, 0, 232, 255, 274, - 114, 0, 239, 266, 269, 0, 205, 115, 134, 128, - 200, 132, 156, 265, 267, 268, 176, 111, 144, 229, - 152, 160, 208, 272, 190, 214, 118, 254, 230, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 97, 106, - 157, 271, 206, 131, 256, 0, 0, 124, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 99, 100, 107, 113, 119, 123, 127, 130, 136, 140, - 143, 145, 146, 147, 150, 162, 165, 166, 167, 168, - 178, 179, 180, 182, 185, 186, 187, 188, 189, 192, - 194, 195, 196, 197, 198, 199, 207, 210, 216, 217, - 218, 219, 220, 221, 222, 224, 225, 226, 227, 233, - 236, 242, 243, 253, 260, 263, 328, 250, 264, 184, - 0, 0, 0, 0, 0, 0, 0, 0, 126, 0, - 0, 0, 0, 0, 155, 0, 0, 0, 158, 0, - 0, 231, 172, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 94, 95, 96, 0, 0, 0, 0, 0, 0, - 0, 0, 116, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 135, 0, 287, 0, 292, 0, 0, 0, 0, 203, - 0, 235, 139, 154, 112, 151, 98, 108, 0, 137, - 181, 211, 215, 0, 0, 0, 120, 0, 213, 191, - 252, 0, 193, 212, 159, 241, 204, 251, 261, 262, - 238, 259, 270, 228, 101, 237, 249, 117, 223, 0, - 0, 0, 103, 247, 234, 170, 148, 149, 102, 0, - 209, 125, 133, 122, 183, 244, 245, 121, 273, 109, - 258, 105, 110, 257, 177, 240, 248, 171, 164, 104, - 246, 169, 163, 153, 129, 141, 201, 161, 202, 142, - 174, 173, 175, 0, 0, 0, 232, 255, 274, 114, - 0, 239, 266, 269, 0, 205, 115, 134, 128, 200, - 132, 156, 265, 267, 268, 176, 111, 144, 229, 152, - 160, 208, 272, 190, 214, 118, 254, 230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, 106, 157, - 271, 206, 131, 256, 0, 0, 124, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, - 100, 107, 113, 119, 123, 127, 130, 136, 140, 143, - 145, 146, 147, 150, 162, 165, 166, 167, 168, 178, - 179, 180, 182, 185, 186, 187, 188, 189, 192, 194, - 195, 196, 197, 198, 199, 207, 210, 216, 217, 218, - 219, 220, 221, 222, 224, 225, 226, 227, 233, 236, - 242, 243, 253, 260, 263, 138, 250, 264, 184, 0, - 0, 0, 0, 0, 0, 0, 0, 126, 0, 0, - 0, 0, 0, 155, 0, 0, 0, 158, 0, 0, - 231, 172, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 94, 95, 96, 0, 0, 0, 0, 0, 0, 0, - 0, 116, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, - 0, 0, 0, 292, 0, 0, 0, 0, 203, 0, - 235, 139, 154, 112, 151, 98, 108, 0, 137, 181, - 211, 215, 0, 0, 0, 120, 0, 213, 191, 252, - 0, 193, 212, 159, 241, 204, 251, 261, 262, 238, - 259, 270, 228, 101, 237, 249, 117, 223, 0, 0, - 0, 103, 247, 234, 170, 148, 149, 102, 0, 209, - 125, 133, 122, 183, 244, 245, 121, 273, 109, 258, - 105, 110, 257, 177, 240, 248, 171, 164, 104, 246, - 169, 163, 153, 129, 141, 201, 161, 202, 142, 174, - 173, 175, 0, 0, 0, 232, 255, 274, 114, 0, - 239, 266, 269, 0, 205, 115, 134, 128, 200, 132, - 156, 265, 267, 268, 176, 111, 144, 229, 152, 160, - 208, 272, 190, 214, 118, 254, 230, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 97, 106, 157, 271, - 206, 131, 256, 0, 0, 124, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 99, 100, - 107, 113, 119, 123, 127, 130, 136, 140, 143, 145, - 146, 147, 150, 162, 165, 166, 167, 168, 178, 179, - 180, 182, 185, 186, 187, 188, 189, 192, 194, 195, - 196, 197, 198, 199, 207, 210, 216, 217, 218, 219, - 220, 221, 222, 224, 225, 226, 227, 233, 236, 242, - 243, 253, 260, 263, 138, 250, 264, + 103, 154, 268, 203, 128, 253, 0, 0, 121, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 96, 97, 104, 110, 116, 120, 124, 127, 133, + 137, 140, 142, 143, 144, 147, 159, 162, 163, 164, + 165, 175, 176, 177, 179, 182, 183, 184, 185, 186, + 189, 191, 192, 193, 194, 195, 196, 204, 207, 213, + 214, 215, 216, 217, 218, 219, 221, 222, 223, 224, + 230, 233, 239, 240, 250, 257, 260, 135, 247, 261, } var yyPact = [...]int{ - 1722, -1000, -274, 1041, -1000, -1000, -1000, -1000, -1000, -1000, + 1676, -1000, -277, 1017, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 989, 811, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 302, 12334, 30, - 148, 17, 17240, 139, 230, 17589, -1000, 27, -1000, 19, - 17589, 23, 16891, -1000, -1000, -72, -87, -1000, 10240, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 807, 974, 975, - 987, 660, 954, -1000, 8831, 8831, 108, 108, 16542, 7435, - -1000, -1000, 550, 17589, 135, 17589, -155, 102, 102, 102, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 979, 812, -1000, + -1000, -1000, -1000, -1000, -1000, 282, 12329, 1, 142, -14, + 17234, 141, 2129, 17583, -1000, 31, -1000, 22, 17583, 27, + 16885, -1000, -1000, -68, -70, -1000, 10235, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 755, 959, 967, 970, 619, + 946, -1000, 8827, 108, 108, 16536, 7431, -1000, -1000, 375, + 17583, 131, 17583, -151, 104, 104, 104, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 935, 770, -1000, - -1000, -1000, -1000, -1000, -1000, 358, 12119, 14, 109, 28, - 16968, 107, 1731, 17313, -1000, 15, -1000, 6, 17313, 10, - 16623, -1000, -1000, -60, -61, -1000, 10049, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 744, 927, 900, 950, 532, - 1086, -1000, 8657, 82, 82, 16278, 7277, -1000, -1000, 422, - 17313, 101, 17313, -133, 79, 79, 79, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2935,24 +2722,25 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 138, 17589, 577, 577, 240, - -1000, 17589, 98, 577, 98, 98, 98, 17589, -1000, 192, - -1000, -1000, -1000, 17589, 577, 921, 358, 59, 268, 268, - 268, -1000, 197, -1000, 4894, 36, 4894, -39, 997, 37, - -26, -1000, 358, 4894, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 119, -1000, -1000, 17589, 16186, 136, 306, -1000, - -1000, -1000, -1000, -1000, -1000, 701, 536, -1000, 10240, 1980, - 734, 734, -1000, -1000, 177, -1000, -1000, 11287, 11287, 11287, - 11287, 11287, 11287, 11287, 11287, 11287, 11287, -1000, -1000, -1000, + -1000, -1000, 139, 17583, 640, 640, 210, -1000, 17583, 92, + 640, 92, 92, 92, 17583, -1000, 183, -1000, -1000, -1000, + 17583, 640, 914, 372, 82, 225, 225, 225, -1000, 193, + -1000, 4897, 40, 4897, -65, 987, 37, -19, -1000, 372, + 4897, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 119, + -1000, -1000, 17583, 16180, 146, 301, -1000, -1000, -1000, -1000, + -1000, -1000, 594, 461, -1000, 10235, 1883, 725, 725, -1000, + -1000, 156, -1000, -1000, 11282, 11282, 11282, 11282, 11282, 11282, + 11282, 11282, 11282, 11282, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 725, 181, + -1000, 9886, 725, 725, 725, 725, 725, 725, 725, 725, + 10235, 725, 725, 725, 725, 725, 725, 725, 725, 725, + 725, 725, 725, 725, 725, 725, 725, -1000, -1000, 979, + -1000, 812, -1000, -1000, -1000, 934, 10235, 10235, 979, -1000, + 881, 8827, -1000, -1000, 928, -1000, -1000, -1000, -1000, 331, + 1001, -1000, 11980, 180, 15831, 14784, 17583, 727, 692, -1000, + -1000, 179, 726, 7069, -89, -1000, -1000, -1000, 299, 14086, + -1000, -1000, -1000, 913, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 734, 189, -1000, 9891, 734, 734, 734, 734, 734, - 734, 734, 734, 10240, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, 734, 734, 734, 734, 734, 734, - -1000, -1000, 989, -1000, 811, -1000, -1000, -1000, 957, 10240, - 10240, 989, -1000, 900, 8831, -1000, -1000, 902, -1000, -1000, - -1000, -1000, 386, 1024, -1000, 11985, 188, 1023, 15837, 14790, - 17589, 692, 639, -1000, -1000, 187, 750, 7072, -96, -1000, - -1000, -1000, 300, 14092, -1000, -1000, -1000, 919, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2963,245 +2751,242 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 666, 17583, -1000, 2424, -1000, 640, + 4897, 122, 640, 312, 640, 17583, 17583, 4897, 4897, 4897, + 49, 83, 77, 17583, 715, 117, 17583, 952, 826, 17583, + 640, 640, -1000, 6345, -1000, 4897, 372, -1000, 440, 10235, + 4897, 4897, 4897, 17583, 4897, 4897, -1000, 437, -1000, -1000, + 323, -1000, -1000, -1000, -1000, -1000, -1000, 4897, 4897, -1000, + 995, 306, -1000, -1000, -1000, -1000, 10235, 225, -1000, 825, + -1000, -1000, 26, -1000, -1000, -1000, -1000, -1000, 1017, -1000, + -1000, -1000, -130, -1000, -1000, 10235, 10235, 10235, 10235, 419, + 227, 11282, 512, 230, 11282, 11282, 11282, 11282, 11282, 11282, + 11282, 11282, 11282, 11282, 11282, 11282, 11282, 11282, 11282, 621, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 640, -1000, + 996, 669, 669, 197, 197, 197, 197, 197, 197, 197, + 197, 197, 11631, 7780, 6345, 619, 664, 979, 8827, 8827, + 10235, 10235, 9525, 9176, 8827, 927, 246, 461, 17583, -1000, + -1000, 10933, -1000, -1000, -1000, -1000, -1000, 462, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 17583, 17583, 8827, 8827, 8827, + 8827, 8827, 967, 619, 928, -1000, 1012, 220, 567, 711, + -1000, 564, 967, 13737, 728, -1000, 928, -1000, -1000, -1000, + 17583, -1000, -1000, 15482, -1000, -1000, 5983, 60, 17583, -1000, + 639, 864, -1000, -1000, -1000, 955, 13039, 13388, 60, 539, + 14784, 17583, -1000, -1000, 14784, 17583, 5621, 6707, -89, -1000, + 688, -1000, -101, -94, 8129, 196, -1000, -1000, -1000, -1000, + 4535, 500, 515, 417, -54, -1000, -1000, -1000, 732, -1000, + 732, 732, 732, 732, -17, -17, -17, -17, -1000, -1000, + -1000, -1000, -1000, 752, 749, -1000, 732, 732, 732, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 687, 17589, - -1000, 341, -1000, 577, 4894, 122, 577, 326, 577, 17589, - 17589, 4894, 4894, 4894, 43, 78, 72, 17589, 747, 116, - 17589, 962, 838, 17589, 577, 577, -1000, 6346, -1000, 4894, - 358, -1000, 537, 10240, 4894, 4894, 4894, 17589, 4894, 4894, - -1000, 534, -1000, -1000, 340, -1000, -1000, -1000, -1000, -1000, - -1000, 4894, 4894, -1000, 1021, 334, -1000, -1000, -1000, -1000, - 10240, 268, -1000, 836, -1000, -1000, 22, -1000, -1000, -1000, - -1000, -1000, 1041, -1000, -1000, -1000, -119, -1000, -1000, 10240, - 10240, 10240, 10240, 497, 274, 11287, 437, 307, 11287, 11287, - 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, 11287, - 11287, 11287, 11287, 640, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 577, -1000, 1037, 626, 626, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 11636, 7784, 6346, 660, - 682, 989, 8831, 8831, 10240, 10240, 9529, 9180, 8831, 938, - 316, 536, 17589, -1000, -1000, 10938, -1000, -1000, -1000, -1000, - -1000, 541, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17589, - 17589, 8831, 8831, 8831, 8831, 8831, 975, 660, 902, -1000, - 1032, 256, 574, 746, -1000, 564, 975, 13743, 740, -1000, - 902, -1000, -1000, -1000, 17589, -1000, -1000, 15488, -1000, -1000, - 5983, 17589, 54, 17589, -1000, 735, 883, -1000, -1000, -1000, - 968, 13045, 13394, 54, 669, 14790, 17589, -1000, -1000, 14790, - 17589, 5620, 6709, -96, -1000, 6709, 725, -1000, -127, -115, - 8133, 202, -1000, -1000, -1000, -1000, 4531, 596, 661, 380, - -64, -1000, -1000, -1000, 756, -1000, 756, 756, 756, 756, - -20, -20, -20, -20, -1000, -1000, -1000, -1000, -1000, 791, - 783, -1000, 756, 756, 756, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 748, 748, 748, + 737, 737, 779, -1000, 17583, 4897, 950, 4897, -1000, 106, + -1000, -1000, -1000, 17583, 17583, 17583, 17583, 17583, 158, 17583, + 17583, 706, -1000, 17583, 4897, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 461, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 17583, -1000, -1000, -1000, -1000, 17583, 372, 17583, 17583, + 461, -1000, 17583, 17583, -1000, -1000, -1000, -1000, -1000, 461, + 227, 441, 337, -1000, -1000, 490, -1000, -1000, 1131, -1000, + -1000, -1000, -1000, 512, 11282, 11282, 11282, 242, 1131, 1944, + 340, 507, 197, 300, 300, 195, 195, 195, 195, 195, + 356, 356, -1000, -1000, -1000, 462, -1000, -1000, -1000, 462, + 8827, 8827, 705, 725, 178, -1000, 755, -1000, -1000, 967, + 651, 651, 429, 576, 278, 993, 651, 273, 992, 651, + 651, 8827, -1000, -1000, 344, -1000, 10235, 462, -1000, 177, + -1000, 1213, 697, 695, 651, 462, 462, 651, 651, 934, + -1000, -1000, 878, 10235, 10235, 10235, -1000, -1000, -1000, 934, + 972, -1000, 904, 898, 986, 8827, 14784, 928, -1000, -1000, + -1000, 176, 713, 725, -1000, 17583, 14784, 14784, 14784, 14784, + 14784, -1000, 847, 840, -1000, 841, 838, 852, 17583, -1000, + 655, 619, 13039, 185, 725, -1000, 15133, -1000, -1000, 986, + 14784, 617, -1000, 617, -1000, 170, -1000, -1000, 688, -89, + -103, -1000, -1000, -1000, -1000, 461, -1000, 634, 687, 4173, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 744, 640, -1000, + 931, 229, 254, 640, 924, -1000, -1000, -1000, 917, -1000, + 324, -64, -1000, -1000, 392, -17, -17, -1000, -1000, 196, + 912, 196, 196, 196, 436, 436, -1000, -1000, -1000, -1000, + 374, -1000, -1000, -1000, 368, -1000, 816, 17583, 4897, -1000, + -1000, -1000, -1000, 394, 394, 224, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 59, 758, -1000, + -1000, -1000, -1000, 6, 45, 111, -1000, 4897, -1000, 306, + 306, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 242, 1131, 1618, -1000, 11282, 11282, -1000, -1000, 651, 651, + 8827, 6345, 979, 934, -1000, -1000, 68, 621, 68, 11282, + 11282, -1000, 11282, 11282, -1000, -168, 671, 303, -1000, 10235, + 298, -1000, 6345, -1000, 11282, 11282, -1000, -1000, -1000, -1000, + -1000, -1000, 876, 461, 461, -1000, -1000, 17583, -1000, -1000, + -1000, -1000, 983, 10235, -1000, 670, -1000, 5259, 815, 17583, + 725, 1017, 13039, 17583, 660, -1000, 277, 864, 743, 813, + 880, -1000, -1000, -1000, -1000, 839, -1000, 822, -1000, -1000, + -1000, -1000, -1000, 619, -1000, 129, 126, 124, 17583, -1000, + 979, 617, -1000, -1000, 201, -1000, -1000, -127, -109, -1000, + -1000, -1000, 4535, -1000, 4535, 17583, 76, -1000, 640, 640, + -1000, -1000, -1000, 740, 798, 11282, -1000, -1000, -1000, 513, + 196, 196, -1000, 310, -1000, -1000, -1000, 649, -1000, 647, + 662, 633, 17583, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 781, 781, 781, 758, 758, 816, -1000, - 17589, 4894, 959, 4894, -1000, 95, -1000, -1000, -1000, 17589, - 17589, 17589, 17589, 17589, 157, 17589, 17589, 745, -1000, 17589, - 4894, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 536, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 17589, -1000, -1000, - -1000, -1000, 17589, 358, 17589, 17589, 536, -1000, 17589, 17589, - -1000, -1000, -1000, -1000, -1000, 536, 274, 362, 313, -1000, - -1000, 555, -1000, -1000, 1760, -1000, -1000, -1000, -1000, 437, - 11287, 11287, 11287, 1555, 1760, 1659, 309, 1680, 203, 214, - 214, 220, 220, 220, 220, 220, 394, 394, -1000, -1000, - -1000, 541, -1000, -1000, -1000, 541, 8831, 8831, 744, 734, - 185, -1000, 807, -1000, -1000, 975, 664, 664, 507, 371, - 275, 1019, 664, 269, 1017, 664, 664, 8831, -1000, -1000, - 360, -1000, 10240, 541, -1000, 182, -1000, 861, 736, 726, - 664, 541, 541, 664, 664, 957, -1000, -1000, 884, 10240, - 10240, 10240, -1000, -1000, -1000, 957, 988, -1000, 907, 906, - 996, 8831, 14790, 902, -1000, -1000, -1000, 181, 996, 732, - 734, -1000, 17589, 14790, 14790, 14790, 14790, 14790, -1000, 870, - 869, -1000, 863, 851, 862, 17589, -1000, 673, 660, 13045, - 175, 734, -1000, 15139, -1000, -1000, 996, 14790, 700, -1000, - 700, -1000, 180, -1000, -1000, 725, -96, -70, -1000, -1000, - -1000, -1000, 536, -1000, 649, 719, 4168, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 779, 577, -1000, 950, 226, 211, - 577, 949, -1000, -1000, -1000, 923, -1000, 347, -68, -1000, - -1000, 454, -20, -20, -1000, -1000, 202, 917, 202, 202, - 202, 532, 532, -1000, -1000, -1000, -1000, 443, -1000, -1000, - -1000, 440, -1000, 835, 17589, 4894, -1000, -1000, -1000, -1000, - 199, 199, 246, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 53, 793, -1000, -1000, -1000, -1000, - 18, 41, 115, -1000, 4894, -1000, 334, 334, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1555, 1760, 1047, - -1000, 11287, 11287, -1000, -1000, 664, 664, 8831, 6346, 989, - 957, -1000, -1000, 39, 640, 39, 11287, 11287, -1000, 11287, - 11287, -1000, -168, 720, 312, -1000, 10240, 357, -1000, 6346, - -1000, 11287, 11287, -1000, -1000, -1000, -1000, -1000, -1000, 892, - 536, 536, -1000, -1000, 17589, -1000, -1000, -1000, -1000, 993, - 10240, -1000, 716, -1000, 5257, 975, 831, 17589, 734, 1041, - 13045, 17589, 702, -1000, 293, 883, 790, 821, 833, -1000, - -1000, -1000, -1000, 855, -1000, 852, -1000, -1000, -1000, -1000, - -1000, 660, -1000, 134, 131, 126, 17589, -1000, 989, 700, - -1000, -1000, 229, -1000, -1000, -138, -122, -1000, -1000, -1000, - 4531, -1000, 4531, 17589, 74, -1000, 577, 577, -1000, -1000, - -1000, 762, 820, 11287, -1000, -1000, -1000, 609, 202, 202, - -1000, 325, -1000, -1000, -1000, 659, -1000, 647, 715, 627, - 17589, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 17589, -1000, -1000, -1000, -1000, -1000, 17589, -174, 577, 17589, - 17589, 17589, 17589, -1000, 358, 358, -1000, 11287, 1760, 1760, - -1000, -1000, 541, -1000, 975, -1000, 541, 756, 756, -1000, - 756, 758, -1000, 756, 12, 756, -2, 541, 541, 2004, - 1934, 1811, 1714, 734, -163, -1000, 536, 10240, -1000, 1573, - 1303, -1000, -1000, 991, 985, 536, -1000, -1000, -1000, 953, - 694, 695, -1000, -1000, 8482, 625, 169, 621, -1000, 989, - 17589, 10240, -1000, -1000, 10240, 757, -1000, 10240, -1000, -1000, - -1000, 989, 734, 734, 734, 621, 975, -1000, -1000, -1000, - -1000, 4168, -1000, 618, -1000, 756, -1000, -1000, -1000, 17589, - -59, 1031, 1760, -1000, -1000, -1000, -1000, -1000, -20, 511, - -20, 423, -1000, 421, 4894, -1000, -1000, -1000, -1000, 955, - -1000, 6346, -1000, -1000, 754, 802, -1000, -1000, -1000, -1000, - 1760, -1000, 957, -1000, -1000, 127, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 11287, 11287, 11287, 11287, 11287, 975, - 502, 536, 11287, 11287, -1000, 10240, 10240, 944, -1000, 734, - -1000, 733, 17589, 17589, -1000, 17589, 975, -1000, 536, 536, - 17589, 536, 14441, 17589, 17589, 12683, -1000, 161, 17589, -1000, - 608, -1000, 212, -1000, -134, 202, -1000, 202, 595, 544, - -1000, 734, 706, -1000, 286, 17589, 17589, -1000, -1000, -1000, - 861, 861, 861, 861, 69, 541, -1000, 861, 861, 536, - 701, 1030, -1000, 734, 1041, 164, -1000, -1000, -1000, 602, - 586, -1000, 586, 586, 175, 161, -1000, 577, 285, 500, - -1000, 66, 17589, 350, 928, -1000, 927, -1000, -1000, -1000, - -1000, -1000, 52, 6346, 4531, 576, -1000, -1000, -1000, -1000, - -1000, 541, 55, -177, -1000, -1000, -1000, 17589, 695, 17589, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 400, -1000, -1000, - 17589, -1000, -1000, 465, -1000, -1000, 567, -1000, 17589, -1000, - -1000, 793, -1000, 877, -172, -181, 684, -1000, -1000, 753, - -1000, -1000, 52, 903, -174, -1000, 865, -1000, 17589, -1000, - 49, -1000, -175, 558, 47, -179, 819, 734, -182, 818, - -1000, 1001, 10589, -1000, -1000, 1027, 206, 206, 861, 541, - -1000, -1000, -1000, 81, 378, -1000, -1000, -1000, -1000, -1000, - -1000, + -1000, -1000, 17583, -1000, -1000, -1000, -1000, -1000, 17583, -174, + 640, 17583, 17583, 17583, 17583, -1000, 372, 372, -1000, 11282, + 1131, 1131, -1000, -1000, 462, -1000, 967, -1000, 462, 732, + 732, -1000, 732, 737, -1000, 732, 14, 732, -1, 462, + 462, 1800, 1777, 1738, 1565, 725, -163, -1000, 461, 10235, + -1000, 1533, 444, -1000, -1000, 981, 969, 461, -1000, -1000, + 939, 581, 573, -1000, -1000, 8478, 630, 168, 605, -1000, + 979, 17583, 10235, -1000, -1000, 10235, 733, -1000, 10235, -1000, + -1000, -1000, 979, 725, 725, 725, 605, 967, -1000, -1000, + -1000, -1000, 4173, -1000, 591, -1000, 732, -1000, -1000, -1000, + 17583, -48, 1011, 1131, -1000, -1000, -1000, -1000, -1000, -17, + 434, -17, 364, -1000, 354, 4897, -1000, -1000, -1000, -1000, + 942, -1000, 6345, -1000, -1000, 731, 778, -1000, -1000, -1000, + -1000, 1131, -1000, 934, -1000, -1000, 118, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 11282, 11282, 11282, 11282, 11282, + 967, 431, 461, 11282, 11282, -1000, 10235, 10235, 923, -1000, + 725, -1000, 724, 17583, 17583, -1000, 17583, 967, -1000, 461, + 461, 17583, 461, 14435, 17583, 17583, 12678, -1000, 171, 17583, + -1000, 569, -1000, 226, -1000, -135, 196, -1000, 196, 499, + 464, -1000, 725, 653, -1000, 265, 17583, 17583, -1000, -1000, + -1000, 1213, 1213, 1213, 1213, 88, 462, -1000, 1213, 1213, + 461, 594, 1008, -1000, 725, 1017, 167, -1000, -1000, -1000, + 563, 541, -1000, 541, 541, 185, 171, -1000, 640, 243, + 406, -1000, 72, 17583, 325, 922, -1000, 919, -1000, -1000, + -1000, -1000, -1000, 57, 6345, 4535, 524, -1000, -1000, -1000, + -1000, -1000, 462, 55, -178, -1000, -1000, -1000, 17583, 573, + 17583, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 346, -1000, + -1000, 17583, -1000, -1000, 403, -1000, -1000, 509, -1000, 17583, + -1000, -1000, 758, -1000, 863, -172, -182, 501, -1000, -1000, + 730, -1000, -1000, 57, 894, -174, -1000, 857, -1000, 17583, + -1000, 56, -1000, -175, 471, 53, -179, 756, 725, -184, + 745, -1000, 991, 10584, -1000, -1000, 1007, 211, 211, 1213, + 462, -1000, -1000, -1000, 80, 423, -1000, -1000, -1000, -1000, + -1000, -1000, } var yyPgo = [...]int{ - 0, 1295, 1294, 29, 71, 75, 1293, 1291, 1288, 1283, - 99, 97, 96, 1282, 1280, 1279, 1278, 1277, 1275, 1273, - 1271, 1270, 1266, 1265, 1262, 1256, 1252, 1250, 1247, 1242, - 1241, 1240, 1239, 82, 1236, 87, 1234, 1233, 1232, 1230, - 1228, 1227, 1225, 1224, 44, 219, 55, 60, 1222, 57, - 253, 1220, 62, 73, 64, 1219, 40, 1214, 1210, 91, - 1209, 1208, 56, 1207, 1206, 2096, 1203, 77, 1202, 6, - 36, 1198, 1197, 1196, 1194, 81, 162, 1193, 1191, 15, - 1189, 1186, 103, 1184, 65, 26, 13, 22, 18, 1183, - 68, 1182, 9, 1181, 61, 1178, 1177, 1176, 1175, 25, - 1174, 59, 1173, 63, 27, 1171, 14, 74, 37, 21, - 8, 1170, 1168, 19, 72, 50, 69, 1164, 1163, 543, - 1162, 1146, 42, 1145, 1143, 1141, 23, 76, 98, 479, - 1137, 1136, 1134, 1133, 1132, 58, 941, 1859, 10, 78, - 1131, 1130, 1129, 2692, 41, 52, 17, 1128, 1126, 1121, - 34, 66, 35, 465, 1120, 38, 1119, 1118, 1113, 1112, - 1108, 1104, 1103, 315, 1102, 1101, 1098, 31, 20, 67, - 24, 1096, 1095, 1094, 1093, 49, 70, 1092, 1091, 47, - 1089, 1088, 28, 1078, 1076, 1074, 1072, 1069, 33, 7, - 1068, 16, 1063, 11, 1060, 32, 1058, 4, 1056, 12, - 1054, 3, 0, 1053, 5, 48, 1, 1052, 2, 1050, - 1049, 1048, 1623, 1292, 88, 1047, 93, + 0, 1284, 1283, 29, 66, 67, 1280, 1279, 1278, 95, + 93, 92, 1277, 1276, 1268, 1267, 1266, 1265, 1261, 1259, + 1258, 1257, 1255, 1254, 1253, 1252, 1248, 1242, 1227, 1226, + 1224, 1223, 79, 1222, 69, 1219, 1217, 1216, 1214, 1213, + 1208, 1207, 1205, 39, 174, 50, 60, 1202, 57, 1539, + 1199, 65, 59, 103, 1197, 40, 1195, 1186, 78, 1182, + 1181, 53, 1173, 1172, 100, 1170, 87, 1168, 15, 42, + 1166, 1165, 1164, 1163, 75, 164, 1162, 1161, 9, 1157, + 1155, 96, 1149, 62, 28, 8, 27, 24, 1148, 64, + 1147, 12, 1146, 63, 1145, 1144, 1143, 1142, 58, 1141, + 61, 1140, 19, 25, 1138, 7, 72, 34, 23, 10, + 1137, 1134, 18, 88, 52, 73, 1133, 1131, 593, 1130, + 1129, 54, 1127, 1126, 1125, 26, 71, 98, 402, 1124, + 1123, 1122, 1121, 36, 766, 1821, 17, 90, 1120, 1119, + 1118, 2705, 45, 56, 16, 1117, 1113, 1106, 84, 55, + 38, 1105, 1101, 35, 1097, 1095, 1094, 1093, 1091, 1088, + 1087, 120, 1086, 1084, 1082, 31, 20, 1078, 1075, 68, + 33, 1073, 1065, 1060, 46, 70, 1058, 1054, 47, 1053, + 1049, 21, 1046, 1044, 1043, 1042, 1041, 32, 11, 1039, + 14, 1038, 6, 1037, 22, 1036, 2, 1035, 13, 1034, + 3, 0, 1033, 5, 48, 1, 1030, 4, 1029, 1026, + 1025, 1703, 199, 74, 1024, 89, } var yyR1 = [...]int{ - 0, 210, 211, 211, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 209, 210, 210, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 202, 202, 202, 21, 3, 3, 3, 3, 2, 2, - 8, 9, 4, 5, 5, 10, 10, 36, 36, 11, - 12, 12, 12, 12, 214, 214, 59, 59, 60, 60, - 107, 107, 13, 14, 14, 116, 116, 115, 115, 115, - 117, 117, 117, 117, 153, 153, 15, 15, 15, 15, - 15, 15, 15, 204, 204, 203, 201, 201, 200, 200, - 199, 22, 184, 186, 186, 185, 185, 185, 185, 176, - 156, 156, 156, 156, 159, 159, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 158, 158, 158, 158, 158, - 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 162, 162, 162, 162, 162, 175, 175, - 163, 163, 169, 169, 170, 170, 170, 172, 172, 173, - 173, 130, 130, 130, 165, 165, 166, 166, 171, 171, - 167, 167, 167, 168, 168, 168, 174, 174, 174, 174, - 174, 164, 164, 177, 177, 194, 194, 193, 193, 193, - 183, 183, 190, 190, 190, 190, 190, 180, 180, 180, - 181, 181, 179, 179, 182, 182, 192, 192, 191, 178, - 178, 195, 195, 195, 195, 207, 208, 206, 206, 206, - 206, 206, 187, 187, 187, 188, 188, 188, 189, 189, - 189, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 205, 205, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 198, 196, 196, 197, 197, 17, 23, 23, - 18, 18, 18, 18, 18, 19, 19, 24, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 123, 123, - 209, 209, 125, 125, 121, 121, 124, 124, 122, 122, - 122, 126, 126, 126, 127, 127, 154, 154, 154, 26, - 26, 28, 28, 29, 30, 30, 148, 148, 149, 149, - 31, 32, 37, 37, 37, 37, 37, 37, 39, 39, - 39, 7, 7, 7, 7, 38, 38, 38, 6, 6, - 27, 27, 27, 27, 20, 215, 33, 34, 34, 35, - 35, 35, 41, 41, 41, 40, 40, 40, 46, 46, - 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, - 49, 45, 45, 47, 47, 47, 47, 140, 140, 140, - 139, 139, 51, 51, 52, 52, 53, 53, 54, 54, - 54, 91, 68, 68, 106, 106, 108, 108, 55, 55, - 55, 55, 56, 56, 57, 57, 58, 58, 147, 147, - 146, 146, 146, 145, 145, 61, 61, 61, 63, 62, - 62, 62, 62, 64, 64, 66, 66, 65, 65, 67, - 69, 69, 69, 69, 69, 70, 70, 50, 50, 50, - 50, 50, 50, 50, 50, 120, 120, 72, 72, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 83, - 83, 83, 83, 83, 83, 73, 73, 73, 73, 73, - 73, 73, 44, 44, 84, 84, 84, 90, 85, 85, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 80, 80, 80, 80, 78, 78, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 201, + 201, 201, 20, 3, 3, 3, 3, 2, 2, 8, + 4, 5, 5, 9, 9, 35, 35, 10, 11, 11, + 11, 11, 213, 213, 58, 58, 59, 59, 106, 106, + 12, 13, 13, 115, 115, 114, 114, 114, 116, 116, + 116, 116, 151, 151, 14, 14, 14, 14, 14, 14, + 14, 203, 203, 202, 200, 200, 199, 199, 198, 21, + 183, 185, 185, 184, 184, 184, 184, 175, 154, 154, + 154, 154, 157, 157, 155, 155, 155, 155, 155, 155, + 155, 155, 155, 156, 156, 156, 156, 156, 158, 158, + 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, + 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, + 160, 160, 160, 160, 160, 160, 174, 174, 161, 161, + 169, 169, 170, 170, 170, 167, 167, 168, 168, 171, + 171, 171, 163, 163, 164, 164, 172, 172, 165, 165, + 165, 166, 166, 166, 173, 173, 173, 173, 173, 162, + 162, 176, 176, 193, 193, 192, 192, 192, 182, 182, + 189, 189, 189, 189, 189, 179, 179, 179, 180, 180, + 178, 178, 181, 181, 191, 191, 190, 177, 177, 194, + 194, 194, 194, 206, 207, 205, 205, 205, 205, 205, + 186, 186, 186, 187, 187, 187, 188, 188, 188, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 204, 204, 204, 204, + 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, + 197, 195, 195, 196, 196, 16, 22, 22, 17, 17, + 17, 17, 17, 18, 18, 23, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, + 24, 24, 24, 24, 24, 24, 122, 122, 208, 208, + 124, 124, 120, 120, 123, 123, 121, 121, 121, 125, + 125, 125, 126, 126, 152, 152, 152, 25, 25, 27, + 27, 28, 29, 29, 146, 146, 147, 147, 30, 31, + 36, 36, 36, 36, 36, 36, 38, 38, 38, 7, + 7, 7, 7, 37, 37, 37, 6, 6, 26, 26, + 26, 26, 19, 214, 32, 33, 33, 34, 34, 34, + 40, 40, 40, 39, 39, 39, 45, 45, 47, 47, + 47, 47, 47, 48, 48, 48, 48, 48, 48, 44, + 44, 46, 46, 46, 46, 138, 138, 138, 137, 137, + 50, 50, 51, 51, 52, 52, 53, 53, 53, 90, + 67, 67, 105, 105, 107, 107, 54, 54, 54, 54, + 55, 55, 56, 56, 57, 57, 145, 145, 144, 144, + 144, 143, 143, 60, 60, 60, 62, 61, 61, 61, + 61, 63, 63, 65, 65, 64, 64, 66, 68, 68, + 68, 68, 68, 69, 69, 49, 49, 49, 49, 49, + 49, 49, 49, 119, 119, 71, 71, 70, 70, 70, + 70, 70, 70, 70, 70, 70, 70, 82, 82, 82, + 82, 82, 82, 72, 72, 72, 72, 72, 72, 72, + 43, 43, 83, 83, 83, 89, 84, 84, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, + 75, 75, 79, 79, 79, 79, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, - 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, - 79, 79, 79, 79, 79, 79, 79, 216, 216, 82, - 81, 81, 81, 81, 81, 81, 81, 42, 42, 42, - 42, 42, 152, 152, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 95, 95, 43, - 43, 93, 93, 94, 96, 96, 92, 92, 92, 75, - 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, - 97, 97, 98, 98, 99, 99, 100, 100, 101, 102, - 102, 102, 103, 103, 103, 103, 104, 104, 104, 74, - 74, 74, 74, 105, 105, 105, 105, 109, 109, 86, - 86, 88, 88, 87, 89, 110, 110, 113, 111, 111, - 114, 114, 114, 114, 114, 112, 112, 112, 142, 142, - 142, 118, 118, 128, 128, 129, 129, 119, 119, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 132, - 132, 132, 133, 133, 134, 134, 134, 141, 141, 137, - 137, 138, 138, 143, 143, 144, 144, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 212, 213, 150, 151, 151, - 151, + 78, 78, 78, 78, 78, 215, 215, 81, 80, 80, + 80, 80, 80, 80, 80, 41, 41, 41, 41, 41, + 150, 150, 153, 153, 153, 153, 153, 153, 153, 153, + 153, 153, 153, 153, 153, 94, 94, 42, 42, 92, + 92, 93, 95, 95, 91, 91, 91, 74, 74, 74, + 74, 74, 74, 74, 74, 76, 76, 76, 96, 96, + 97, 97, 98, 98, 99, 99, 100, 101, 101, 101, + 102, 102, 102, 102, 103, 103, 103, 73, 73, 73, + 73, 104, 104, 104, 104, 108, 108, 85, 85, 87, + 87, 86, 88, 109, 109, 112, 110, 110, 110, 113, + 113, 113, 113, 111, 111, 111, 140, 140, 140, 117, + 117, 127, 127, 128, 128, 118, 118, 129, 129, 129, + 129, 129, 129, 129, 129, 129, 129, 130, 130, 130, + 131, 131, 132, 132, 132, 139, 139, 135, 135, 136, + 136, 141, 141, 142, 142, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 133, 133, 133, 133, 133, 133, + 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, + 134, 134, 134, 211, 212, 148, 149, 149, 149, } var yyR2 = [...]int{ @@ -3231,50 +3016,50 @@ var yyR2 = [...]int{ 7, 7, 7, 7, 4, 5, 4, 4, 7, 5, 5, 5, 12, 7, 5, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 7, 1, 3, 8, 8, 3, 3, 5, - 4, 6, 5, 4, 4, 3, 2, 3, 4, 4, - 3, 4, 4, 4, 4, 4, 4, 3, 3, 3, - 2, 7, 2, 3, 4, 3, 7, 5, 4, 2, - 4, 4, 3, 3, 5, 2, 3, 3, 1, 1, - 1, 1, 0, 1, 0, 1, 1, 1, 0, 2, - 2, 0, 2, 2, 0, 2, 0, 1, 1, 2, - 1, 1, 2, 1, 1, 5, 0, 1, 0, 1, - 2, 3, 0, 3, 3, 3, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 3, 3, - 2, 2, 3, 3, 2, 0, 2, 0, 2, 1, - 2, 2, 0, 1, 1, 0, 1, 1, 0, 1, - 0, 1, 2, 3, 4, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, - 1, 1, 0, 2, 1, 3, 1, 1, 1, 3, - 3, 3, 3, 7, 1, 3, 1, 3, 4, 4, - 4, 3, 2, 4, 0, 1, 0, 2, 0, 1, - 0, 1, 2, 1, 1, 1, 2, 2, 1, 2, - 3, 2, 3, 2, 2, 2, 1, 1, 3, 3, - 0, 5, 4, 5, 5, 0, 2, 1, 3, 3, - 3, 2, 3, 1, 2, 0, 3, 1, 1, 3, - 3, 4, 4, 5, 3, 4, 5, 6, 2, 1, - 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 0, 2, 1, 1, 1, 3, 1, 3, - 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, - 1, 1, 1, 1, 4, 5, 5, 6, 4, 4, - 6, 6, 6, 8, 8, 8, 8, 9, 8, 5, - 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 8, 8, 0, 2, 3, - 4, 4, 4, 4, 4, 4, 4, 0, 3, 4, - 7, 3, 1, 1, 2, 3, 3, 1, 2, 2, - 1, 2, 1, 2, 2, 1, 2, 0, 1, 0, - 2, 1, 2, 4, 0, 2, 1, 3, 5, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, - 0, 3, 0, 2, 0, 3, 1, 3, 2, 0, - 1, 1, 0, 2, 4, 4, 0, 2, 4, 2, - 1, 5, 4, 1, 3, 3, 5, 0, 5, 1, - 3, 1, 2, 3, 1, 1, 3, 3, 1, 3, - 3, 3, 3, 3, 2, 1, 2, 1, 1, 1, - 1, 1, 1, 0, 2, 0, 3, 0, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 1, 1, 0, 1, 1, 0, 2, 1, + 7, 1, 3, 8, 8, 3, 3, 5, 4, 6, + 5, 4, 4, 3, 2, 3, 4, 4, 3, 4, + 4, 4, 4, 4, 4, 3, 3, 3, 2, 7, + 2, 3, 4, 3, 7, 5, 4, 2, 4, 4, + 3, 3, 5, 2, 3, 3, 1, 1, 1, 1, + 0, 1, 0, 1, 1, 1, 0, 2, 2, 0, + 2, 2, 0, 2, 0, 1, 1, 2, 1, 1, + 2, 1, 1, 5, 0, 1, 0, 1, 2, 3, + 0, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 3, 3, 2, 2, + 3, 3, 2, 0, 2, 0, 2, 1, 2, 2, + 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, + 2, 3, 4, 1, 1, 1, 1, 1, 1, 1, + 3, 1, 2, 3, 5, 0, 1, 2, 1, 1, + 0, 2, 1, 3, 1, 1, 1, 3, 3, 3, + 3, 7, 1, 3, 1, 3, 4, 4, 4, 3, + 2, 4, 0, 1, 0, 2, 0, 1, 0, 1, + 2, 1, 1, 1, 2, 2, 1, 2, 3, 2, + 3, 2, 2, 2, 1, 1, 3, 3, 0, 5, + 4, 5, 5, 0, 2, 1, 3, 3, 3, 2, + 3, 1, 2, 0, 3, 1, 1, 3, 3, 4, + 4, 5, 3, 4, 5, 6, 2, 1, 2, 1, + 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 0, 2, 1, 1, 1, 3, 1, 3, 1, 1, + 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 3, 1, 1, + 1, 1, 4, 5, 5, 6, 4, 4, 6, 6, + 6, 8, 8, 8, 8, 9, 8, 5, 4, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 8, 8, 0, 2, 3, 4, 4, + 4, 4, 4, 4, 4, 0, 3, 4, 7, 3, + 1, 1, 2, 3, 3, 1, 2, 2, 1, 2, + 1, 2, 2, 1, 2, 0, 1, 0, 2, 1, + 2, 4, 0, 2, 1, 3, 5, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 2, 0, 3, + 0, 2, 0, 3, 1, 3, 2, 0, 1, 1, + 0, 2, 4, 4, 0, 2, 4, 2, 1, 5, + 4, 1, 3, 3, 5, 0, 5, 1, 3, 1, + 2, 3, 1, 1, 3, 3, 1, 2, 3, 3, + 3, 3, 3, 1, 2, 1, 1, 1, 1, 1, + 1, 0, 2, 0, 3, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 1, 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -3305,352 +3090,349 @@ var yyR2 = [...]int{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 0, 1, - 1, + 1, 1, 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ - -1000, -210, -1, -3, -8, -9, -10, -11, -12, -13, - -14, -15, -16, -17, -18, -19, -24, -25, -26, -28, - -29, -30, -31, -32, -6, -27, -20, -21, -4, -212, - 6, 7, 8, -36, 10, 11, 31, -22, 124, 125, - 127, 126, 160, 128, 153, 54, 174, 175, 177, 178, - 179, 180, -39, 158, 159, 32, 33, 130, 35, 58, - 9, 267, 155, 154, 26, -211, 369, -35, 5, -99, - 16, -3, -33, -215, -33, -33, -33, -33, -33, -33, - -184, -186, 58, 97, -134, 134, 78, 259, 131, 132, - 138, -137, -202, -136, 61, 62, 63, 277, 146, 309, - 310, 174, 188, 182, 209, 201, 278, 311, 147, 199, - 202, 246, 144, 312, 229, 236, 72, 177, 255, 313, - 156, 197, 193, 314, 286, 191, 28, 315, 238, 214, - 316, 282, 240, 192, 237, 130, 317, 149, 365, 142, - 318, 215, 219, 319, 247, 320, 321, 322, 186, 187, - 323, 145, 249, 213, 143, 34, 241, 279, 38, 164, - 250, 217, 324, 212, 208, 325, 326, 327, 328, 211, - 185, 207, 42, 221, 220, 222, 245, 204, 329, 330, - 331, 150, 332, 194, 19, 333, 334, 335, 336, 337, - 253, 159, 338, 162, 339, 340, 341, 342, 343, 344, - 239, 216, 218, 139, 166, 235, 281, 345, 251, 190, - 346, 151, 163, 158, 254, 152, 347, 348, 349, 350, - 351, 352, 353, 178, 354, 355, 356, 357, 173, 248, - 257, 41, 226, 358, 184, 141, 359, 175, 170, 231, - 205, 165, 360, 361, 195, 196, 210, 183, 206, 176, - 366, 167, 160, 362, 256, 227, 283, 203, 200, 171, - 363, 168, 169, 364, 367, 242, 232, 243, 244, 233, - 172, 280, 252, 198, 228, -119, 134, 259, 131, 233, - 136, 132, 132, 133, 134, 259, 131, 132, -65, -143, - -202, -136, 134, 132, 115, 202, 246, 124, 230, 241, - 242, 238, -125, 239, 166, -154, 132, -121, 229, 232, - 233, 172, -209, -202, 240, 248, 247, 234, 244, 243, - -143, 176, -148, 181, -137, 179, -65, -37, 365, 128, - -150, -150, 231, 231, -150, -85, -50, -71, 81, -76, - 30, 24, -75, -72, -92, -89, -90, 115, 116, 118, - 117, 119, 104, 105, 112, 82, 120, -80, -78, -79, - -81, 65, 64, 73, 66, 67, 68, 69, 74, 75, - 76, -137, -143, -87, -212, 48, 49, 268, 269, 270, - 271, 276, 272, 84, 37, 258, 266, 265, 264, 262, - 263, 260, 261, 274, 275, 137, 259, 131, 110, 267, - -202, -136, -5, -4, -212, 6, 21, 22, -103, 18, - 17, -213, 60, -41, -48, 43, 44, -49, 22, 36, - 47, 45, -34, -47, 106, -50, -143, -47, -119, -119, - 12, -59, -60, -65, -67, -143, -111, -153, 176, -114, - 248, 247, -138, -112, -137, -135, 246, 202, 245, 129, - 284, 80, 23, 25, 224, 83, 115, 17, 84, 114, - 268, 124, 52, 285, 260, 261, 258, 270, 271, 259, - 230, 30, 11, 287, 26, 154, 22, 36, 108, 126, - 87, 88, 157, 24, 155, 76, 290, 20, 55, 12, - 14, 291, 292, 15, 137, 136, 99, 133, 50, 9, - 120, 27, 96, 46, 293, 29, 294, 295, 296, 297, - 48, 97, 18, 262, 263, 32, 298, 276, 161, 110, - 53, 39, 81, 299, 300, 74, 301, 77, 56, 78, - 16, 51, 302, 303, 304, 305, 98, 127, 267, 49, - 306, 131, 6, 273, 31, 153, 47, 307, 132, 86, - 274, 275, 135, 75, 5, 138, 33, 10, 54, 57, - 264, 265, 266, 37, 85, 13, 308, 79, -185, 97, - -176, -202, -65, 133, -65, 267, -129, 137, -129, -129, - 132, -65, -202, -202, 124, 126, 129, 56, -23, -65, - -128, 137, -202, -128, -128, -128, -65, 121, -65, -202, - 31, -126, 97, 13, 259, -202, 166, 132, 167, 134, - -127, 97, -127, -127, -180, 133, 34, 145, -151, -212, - -138, 170, 171, -151, -124, -123, 236, 237, 231, 235, - 13, 171, 231, 169, -126, -151, 135, -137, -38, -137, - 65, -7, -3, -11, -10, -12, 89, -150, -150, 59, - 80, 78, 79, 96, -50, -73, 99, 81, 97, 98, - 83, 101, 100, 111, 104, 105, 106, 107, 108, 109, - 110, 102, 103, 114, 89, 90, 91, 92, 93, 94, - 95, -120, -212, -90, -212, 122, 123, -76, -76, -76, - -76, -76, -76, -76, -76, -76, -76, -212, 121, -2, - -85, -4, -212, -212, -212, -212, -212, -212, -212, -212, - -95, -50, -212, -216, -82, -212, -216, -82, -216, -82, - -216, -212, -216, -82, -216, -82, -216, -216, -82, -212, - -212, -212, -212, -212, -212, -212, -99, -3, -33, -104, - 20, 32, -50, -100, -101, -50, -99, 39, -45, -47, - -49, 43, 44, 71, 12, -140, -139, 23, -137, 65, - 121, 12, -66, 27, -65, -52, -53, -54, -55, -68, - -91, -212, -65, -65, -59, -214, 59, 12, 57, -214, - 59, 121, 59, 176, -114, -153, -116, -115, 249, 251, - 89, -142, -137, 65, 30, 31, 60, 59, -65, -156, - -159, -161, -160, -162, -157, -158, 199, 200, 115, 203, - 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, - 31, 156, 195, 196, 197, 198, 215, 216, 217, 218, - 219, 220, 221, 222, 182, 201, 278, 183, 184, 185, - 186, 187, 188, 190, 191, 192, 193, 194, -202, -151, - 134, -202, 81, -202, -65, -65, -151, -151, -151, 168, - 168, 132, 132, 173, -65, 59, 135, -59, 24, 56, - -65, -202, -202, -144, -143, -135, -151, -126, 65, -50, - -151, -151, -151, -65, -151, -151, 65, -181, 12, 99, - -151, -151, 12, -122, 12, 99, -50, -127, 56, -149, - 179, 213, 366, 367, 368, -50, -50, -50, -50, -83, - 74, 81, 75, 76, -76, -84, -87, -90, 70, 99, - 97, 98, 83, -76, -76, -76, -76, -76, -76, -76, - -76, -76, -76, -76, -76, -76, -76, -76, -152, -202, - 65, -202, -75, -75, -137, -46, 22, 36, -45, -138, - -144, -135, -35, -213, -213, -99, -45, -45, -50, -50, - -92, 65, -45, -92, 65, -45, -45, -40, 22, 36, - -93, -94, 85, -92, -137, -143, -213, -76, -137, -137, - -45, -46, -46, -45, -45, -103, -213, 10, 99, 59, - 19, 59, -102, 25, 26, -103, -77, -137, 66, 69, - -51, 59, 12, -49, -65, -139, 106, -144, -65, -107, - 162, -65, 31, 59, -61, -63, -62, -64, 46, 50, - 52, 47, 48, 49, 53, -147, 23, -52, -3, -212, - -146, 162, -145, 23, -143, 65, -107, 57, -52, -65, - -52, -67, -143, 106, -114, -116, 59, 250, 252, 253, - 56, 77, -50, -168, 114, -187, -188, -189, -138, 65, - 66, -176, -177, -178, -190, 148, -195, 139, 141, 138, - -179, 149, 133, 29, 60, -130, 74, 81, -172, 227, - -163, 58, -163, -163, -163, -163, -167, 202, -167, -167, - -167, 58, 58, -163, -163, -163, -169, 58, -169, -169, - -170, 58, -170, -141, 57, -65, -151, 24, -151, -131, - 129, 126, 127, -198, 125, 224, 202, 72, 30, 16, - 268, 162, 283, -202, 163, -65, -65, -65, -65, -65, - 129, 126, -65, -65, -65, -151, -65, -65, -126, -143, - -143, -65, -137, 74, 75, 76, -84, -76, -76, -76, - -44, 157, 80, -213, -213, -45, -45, -212, 121, -5, - -103, -213, -213, 59, 57, 23, 12, 12, -213, 12, - 12, -213, -213, -45, -96, -94, 87, -50, -213, 121, - -213, 59, 59, -213, -213, -213, -213, -213, -104, 41, - -50, -50, -101, -104, -118, 20, 12, 37, 37, -70, - 13, -47, -52, -49, 121, -70, -74, 31, 37, -3, - -212, -212, -110, -113, -92, -53, -54, -54, -53, -54, - 46, 46, 46, 51, 46, 51, 46, -62, -143, -213, - -213, -3, -69, 54, 136, 55, -212, -145, -70, -52, - -70, -70, 121, -115, -117, 254, 251, 257, -202, 65, - 59, -189, 89, 58, -202, 29, -179, -179, -182, -202, - -182, 29, -165, 30, 74, -173, 228, 66, -167, -167, - -168, 31, -168, -168, -168, -175, 65, -175, 66, 66, - 56, -137, -151, -150, -205, 144, 140, 148, 149, 142, - 61, 62, 63, 133, 29, 139, 141, 162, 138, -205, - -132, -133, 135, 23, 133, 29, 162, -204, 57, 168, - 224, 168, 135, -151, -122, -122, -44, 80, -76, -76, - -213, -213, -46, -138, -99, -104, -155, 115, 199, 156, - 197, 193, 213, 204, 226, 195, 227, -152, -155, -76, - -76, -76, -76, 277, -99, 88, -50, 86, -138, -76, - -76, 42, -65, -97, 14, -50, 106, -103, -109, 56, - -110, -86, -88, -87, -212, -105, -137, -108, -137, -70, - 59, 89, -57, -56, 56, 57, -58, 56, -56, 46, - 46, -213, 133, 133, 133, -108, -99, -70, 251, 255, - 256, -188, -189, -192, -191, -137, -195, -182, -182, 58, - -166, 56, -76, 60, -168, -168, -202, 115, 60, 59, - 60, 59, 60, 59, -65, -150, -150, -65, -150, -137, - -201, 280, -203, -202, -137, -137, -137, -65, -126, -126, - -76, -213, -103, -213, -163, -163, -163, -170, -163, 187, - -163, 187, -213, -213, 20, 20, 20, 20, -212, -43, - 273, -50, 59, 59, -98, 15, 17, 28, -109, 59, - -213, -213, 59, 121, -213, 59, -99, -113, -50, -50, - 58, -50, -212, -212, -212, -213, -103, 60, 59, -163, - -106, -137, -171, 224, 10, -167, 65, -167, 66, 66, - -151, 27, -200, -199, -138, 58, 57, -104, -167, -202, - -76, -76, -76, -76, -76, -103, 65, -76, -76, -50, - -85, 29, -88, 37, -3, -137, -137, -137, -103, -106, - -106, -213, -106, -106, -146, -194, -193, 57, 143, 72, - -191, 60, 59, -174, 139, 29, 138, -79, -168, -168, - 60, 60, -212, 59, 89, -106, -65, -213, -213, -213, - -213, -42, 99, 280, -213, -213, -213, 10, -86, 121, - 60, -213, -213, -213, -69, -193, -202, -183, 89, 65, - 151, -137, -164, 72, 29, 29, -196, -197, 162, -199, - -189, 60, -213, 278, 53, 281, -110, -137, 66, -65, - 65, -213, 59, -137, -204, 42, 279, 282, 58, -197, - 37, -201, 42, -106, 164, 280, 60, 165, 281, -207, - -208, 56, -212, 282, -208, 56, 11, 10, -76, 161, - -206, 152, 147, 150, 31, -206, -213, -213, 146, 30, - 74, + -1000, -209, -1, -3, -8, -9, -10, -11, -12, -13, + -14, -15, -16, -17, -18, -23, -24, -25, -27, -28, + -29, -30, -31, -6, -26, -19, -20, -4, -211, 6, + 7, -35, 9, 10, 30, -21, 123, 124, 126, 125, + 159, 127, 152, 53, 173, 174, 176, 177, 178, 179, + -38, 157, 158, 31, 32, 129, 34, 57, 8, 266, + 154, 153, 25, -210, 368, -34, 5, -98, 15, -3, + -32, -214, -32, -32, -32, -32, -32, -183, -185, 57, + 96, -132, 133, 77, 258, 130, 131, 137, -135, -201, + -134, 60, 61, 62, 276, 145, 308, 309, 173, 187, + 181, 208, 200, 277, 310, 146, 198, 201, 245, 143, + 311, 228, 235, 71, 176, 254, 312, 155, 196, 192, + 313, 285, 190, 27, 314, 237, 213, 315, 281, 239, + 191, 236, 129, 316, 148, 364, 141, 317, 214, 218, + 318, 246, 319, 320, 321, 185, 186, 322, 144, 248, + 212, 142, 33, 240, 278, 37, 163, 249, 216, 323, + 211, 207, 324, 325, 326, 327, 210, 184, 206, 41, + 220, 219, 221, 244, 203, 328, 329, 330, 149, 331, + 193, 18, 332, 333, 334, 335, 336, 252, 158, 337, + 161, 338, 339, 340, 341, 342, 343, 238, 215, 217, + 138, 165, 234, 280, 344, 250, 189, 345, 150, 162, + 157, 253, 151, 346, 347, 348, 349, 350, 351, 352, + 177, 353, 354, 355, 356, 172, 247, 256, 40, 225, + 357, 183, 140, 358, 174, 169, 230, 204, 164, 359, + 360, 194, 195, 209, 182, 205, 175, 365, 166, 159, + 361, 255, 226, 282, 202, 199, 170, 362, 167, 168, + 363, 366, 241, 231, 242, 243, 232, 171, 279, 251, + 197, 227, -118, 133, 258, 130, 232, 135, 131, 131, + 132, 133, 258, 130, 131, -64, -141, -201, -134, 133, + 131, 114, 201, 245, 123, 229, 240, 241, 237, -124, + 238, 165, -152, 131, -120, 228, 231, 232, 171, -208, + -201, 239, 247, 246, 233, 243, 242, -141, 175, -146, + 180, -135, 178, -64, -36, 364, 127, -148, -148, 230, + 230, -148, -84, -49, -70, 80, -75, 29, 23, -74, + -71, -91, -88, -89, 114, 115, 117, 116, 118, 103, + 104, 111, 81, 119, -79, -77, -78, -80, 64, 63, + 72, 65, 66, 67, 68, 73, 74, 75, -135, -141, + -86, -211, 47, 48, 267, 268, 269, 270, 275, 271, + 83, 36, 257, 265, 264, 263, 261, 262, 259, 260, + 273, 274, 136, 258, 130, 109, 266, -201, -134, -5, + -4, -211, 6, 20, 21, -102, 17, 16, -212, 59, + -40, -47, 42, 43, -48, 21, 35, 46, 44, -33, + -46, 105, -49, -141, -118, -118, 11, -58, -59, -64, + -66, -141, -110, -151, 175, -113, 247, 246, -136, -111, + -135, -133, 245, 201, 244, 128, 283, 79, 22, 24, + 223, 82, 114, 16, 83, 113, 267, 123, 51, 284, + 259, 260, 257, 269, 270, 258, 229, 29, 10, 286, + 25, 153, 21, 35, 107, 125, 86, 87, 156, 23, + 154, 75, 289, 19, 54, 11, 13, 290, 291, 14, + 136, 135, 98, 132, 49, 8, 119, 26, 95, 45, + 292, 28, 293, 294, 295, 296, 47, 96, 17, 261, + 262, 31, 297, 275, 160, 109, 52, 38, 80, 298, + 299, 73, 300, 76, 55, 77, 15, 50, 301, 302, + 303, 304, 97, 126, 266, 48, 305, 130, 6, 272, + 30, 152, 46, 306, 131, 85, 273, 274, 134, 74, + 5, 137, 32, 9, 53, 56, 263, 264, 265, 36, + 84, 12, 307, 78, -184, 96, -175, -201, -64, 132, + -64, 266, -128, 136, -128, -128, 131, -64, -201, -201, + 123, 125, 128, 55, -22, -64, -127, 136, -201, -127, + -127, -127, -64, 120, -64, -201, 30, -125, 96, 12, + 258, -201, 165, 131, 166, 133, -126, 96, -126, -126, + -179, 132, 33, 144, -149, -211, -136, 169, 170, -149, + -123, -122, 235, 236, 230, 234, 12, 170, 230, 168, + -125, -149, 134, -135, -37, -135, 64, -7, -3, -10, + -9, -11, 88, -148, -148, 58, 79, 77, 78, 95, + -49, -72, 98, 80, 96, 97, 82, 100, 99, 110, + 103, 104, 105, 106, 107, 108, 109, 101, 102, 113, + 88, 89, 90, 91, 92, 93, 94, -119, -211, -89, + -211, 121, 122, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -75, -211, 120, -2, -84, -4, -211, -211, + -211, -211, -211, -211, -211, -211, -94, -49, -211, -215, + -81, -211, -215, -81, -215, -81, -215, -211, -215, -81, + -215, -81, -215, -215, -81, -211, -211, -211, -211, -211, + -211, -211, -98, -3, -32, -103, 19, 31, -49, -99, + -100, -49, -98, 38, -44, -46, -48, 42, 43, 70, + 11, -138, -137, 22, -135, 64, 120, -65, 26, -64, + -51, -52, -53, -54, -67, -90, -211, -64, -64, -58, + -213, 58, 11, 56, -213, 58, 120, 58, 175, -113, + -115, -114, 248, 250, 88, -140, -135, 64, 29, 30, + 59, 58, -64, -154, -157, -159, -158, -160, -155, -156, + 198, 199, 114, 202, 204, 205, 206, 207, 208, 209, + 210, 211, 212, 213, 30, 155, 194, 195, 196, 197, + 214, 215, 216, 217, 218, 219, 220, 221, 181, 200, + 277, 182, 183, 184, 185, 186, 187, 189, 190, 191, + 192, 193, -201, -149, 133, -201, 80, -201, -64, -64, + -149, -149, -149, 167, 167, 131, 131, 172, -64, 58, + 134, -58, 23, 55, -64, -201, -201, -142, -141, -133, + -149, -125, 64, -49, -149, -149, -149, -64, -149, -149, + 64, -180, 11, 98, -149, -149, 11, -121, 11, 98, + -49, -126, 55, -147, 178, 212, 365, 366, 367, -49, + -49, -49, -49, -82, 73, 80, 74, 75, -75, -83, + -86, -89, 69, 98, 96, 97, 82, -75, -75, -75, + -75, -75, -75, -75, -75, -75, -75, -75, -75, -75, + -75, -75, -150, -201, 64, -201, -74, -74, -135, -45, + 21, 35, -44, -136, -142, -133, -34, -212, -212, -98, + -44, -44, -49, -49, -91, 64, -44, -91, 64, -44, + -44, -39, 21, 35, -92, -93, 84, -91, -135, -141, + -212, -75, -135, -135, -44, -45, -45, -44, -44, -102, + -212, 9, 98, 58, 18, 58, -101, 24, 25, -102, + -76, -135, 65, 68, -50, 58, 11, -48, -64, -137, + 105, -142, -106, 161, -64, 30, 58, -60, -62, -61, + -63, 45, 49, 51, 46, 47, 48, 52, -145, 22, + -51, -3, -211, -144, 161, -143, 22, -141, 64, -106, + 56, -51, -64, -51, -66, -141, 105, -113, -115, 58, + 249, 251, 252, 55, 76, -49, -166, 113, -186, -187, + -188, -136, 64, 65, -175, -176, -177, -189, 147, -194, + 138, 140, 137, -178, 148, 132, 28, 59, -171, 73, + 80, -167, 226, -161, 57, -161, -161, -161, -161, -165, + 201, -165, -165, -165, 57, 57, -161, -161, -161, -169, + 57, -169, -169, -170, 57, -170, -139, 56, -64, -149, + 23, -149, -129, 128, 125, 126, -197, 124, 223, 201, + 71, 29, 15, 267, 161, 282, -201, 162, -64, -64, + -64, -64, -64, 128, 125, -64, -64, -64, -149, -64, + -64, -125, -141, -141, -64, -135, 73, 74, 75, -83, + -75, -75, -75, -43, 156, 79, -212, -212, -44, -44, + -211, 120, -5, -102, -212, -212, 58, 56, 22, 11, + 11, -212, 11, 11, -212, -212, -44, -95, -93, 86, + -49, -212, 120, -212, 58, 58, -212, -212, -212, -212, + -212, -103, 40, -49, -49, -100, -103, -117, 19, 11, + 36, 36, -69, 12, -46, -51, -48, 120, -73, 30, + 36, -3, -211, -211, -109, -112, -91, -52, -53, -53, + -52, -53, 45, 45, 45, 50, 45, 50, 45, -61, + -141, -212, -212, -3, -68, 53, 135, 54, -211, -143, + -69, -51, -69, -69, 120, -114, -116, 253, 250, 256, + -201, 64, 58, -188, 88, 57, -201, 28, -178, -178, + -181, -201, -181, 28, -163, 29, 73, -168, 227, 65, + -165, -165, -166, 30, -166, -166, -166, -174, 64, -174, + 65, 65, 55, -135, -149, -148, -204, 143, 139, 147, + 148, 141, 60, 61, 62, 132, 28, 138, 140, 161, + 137, -204, -130, -131, 134, 22, 132, 28, 161, -203, + 56, 167, 223, 167, 134, -149, -121, -121, -43, 79, + -75, -75, -212, -212, -45, -136, -98, -103, -153, 114, + 198, 155, 196, 192, 212, 203, 225, 194, 226, -150, + -153, -75, -75, -75, -75, 276, -98, 87, -49, 85, + -136, -75, -75, 41, -64, -96, 13, -49, 105, -108, + 55, -109, -85, -87, -86, -211, -104, -135, -107, -135, + -69, 58, 88, -56, -55, 55, 56, -57, 55, -55, + 45, 45, -212, 132, 132, 132, -107, -98, -69, 250, + 254, 255, -187, -188, -191, -190, -135, -194, -181, -181, + 57, -164, 55, -75, 59, -166, -166, -201, 114, 59, + 58, 59, 58, 59, 58, -64, -148, -148, -64, -148, + -135, -200, 279, -202, -201, -135, -135, -135, -64, -125, + -125, -75, -212, -102, -212, -161, -161, -161, -170, -161, + 186, -161, 186, -212, -212, 19, 19, 19, 19, -211, + -42, 272, -49, 58, 58, -97, 14, 16, 27, -108, + 58, -212, -212, 58, 120, -212, 58, -98, -112, -49, + -49, 57, -49, -211, -211, -211, -212, -102, 59, 58, + -161, -105, -135, -172, 223, 9, -165, 64, -165, 65, + 65, -149, 26, -199, -198, -136, 57, 56, -103, -165, + -201, -75, -75, -75, -75, -75, -102, 64, -75, -75, + -49, -84, 28, -87, 36, -3, -135, -135, -135, -102, + -105, -105, -212, -105, -105, -144, -193, -192, 56, 142, + 71, -190, 59, 58, -173, 138, 28, 137, -78, -166, + -166, 59, 59, -211, 58, 88, -105, -64, -212, -212, + -212, -212, -41, 98, 279, -212, -212, -212, 9, -85, + 120, 59, -212, -212, -212, -68, -192, -201, -182, 88, + 64, 150, -135, -162, 71, 28, 28, -195, -196, 161, + -198, -188, 59, -212, 277, 52, 280, -109, -135, 65, + -64, 64, -212, 58, -135, -203, 41, 278, 281, 57, + -196, 36, -200, 41, -105, 163, 279, 59, 164, 280, + -206, -207, 55, -211, 281, -207, 55, 10, 9, -75, + 160, -205, 151, 146, 149, 30, -205, -212, -212, 145, + 29, 73, } var yyDef = [...]int{ 28, -2, 2, 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, 624, 0, - 365, 365, 365, 365, 365, 365, 365, 0, 694, 677, - 0, 0, 0, 0, -2, 330, 331, 0, 333, -2, - 0, 0, 342, 1007, 1007, 0, 0, 1007, 0, 1005, - 47, 48, 348, 349, 350, 1, 3, 0, 369, 632, - 0, 0, -2, 367, 0, 0, 677, 677, 0, 0, - 76, 77, 0, 0, 0, 990, 0, 675, 675, 675, - 695, 696, 699, 700, 30, 31, 32, 826, 827, 828, - 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, - 839, 840, 841, 842, 843, 844, 845, 846, 847, 848, - 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, - 859, 860, 861, 862, 863, 864, 865, 866, 867, 868, - 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, - 879, 880, 881, 882, 883, 884, 885, 886, 887, 888, - 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, - 899, 900, 901, 902, 903, 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, 991, 992, 993, 994, 995, 996, 997, 998, 999, - 1000, 1001, 1002, 1003, 1004, 0, 0, 0, 0, 0, - 678, 0, 673, 0, 673, 673, 673, 0, 276, 447, - 703, 704, 990, 0, 0, 0, 321, 0, 324, 324, - 324, 290, 0, 292, 1008, 0, 1008, 0, 299, 0, - 0, 305, 321, 1008, 313, 327, 328, 315, 310, 311, - 329, 332, 0, 337, 340, 0, 355, 0, 867, 347, - 360, 361, 1007, 1007, 364, 33, 498, 457, 0, 463, - 465, 0, 500, 501, 502, 503, 504, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 530, 531, 532, - 533, 609, 610, 611, 612, 613, 614, 615, 616, 467, - 468, 606, 0, 654, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 597, 0, 567, 567, 567, 567, 567, - 567, 567, 567, 0, 0, 0, 0, 0, 0, 0, - -2, -2, 624, 43, 0, 365, 370, 371, 636, 0, - 0, 624, 1006, 0, 0, -2, -2, 381, 387, 388, - 389, 390, 366, 0, 393, 397, 0, 0, 0, 0, - 0, 0, 0, 56, 58, 447, 62, 0, 978, 658, - -2, -2, 0, 0, 701, 702, -2, 839, -2, 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, 740, 741, 742, 743, 744, 745, 746, 747, - 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, - 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, - 778, 779, 780, 781, 782, 783, 784, 785, 786, 787, - 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, - 798, 799, 800, 801, 802, 803, 804, 805, 806, 807, - 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, - 818, 819, 820, 821, 822, 823, 824, 825, 0, 0, - 95, 0, 93, 0, 1008, 0, 0, 0, 0, 0, - 0, 1008, 1008, 1008, 0, 0, 0, 0, 267, 0, - 0, 0, 0, 0, 0, 0, 275, 0, 277, 1008, - 321, 280, 0, 0, 1008, 1008, 1008, 0, 1008, 1008, - 287, 0, 288, 289, 0, 197, 198, 199, 293, 1009, - 1010, 1008, 1008, 295, 0, 318, 316, 317, 308, 309, - 0, 324, 302, 303, 306, 307, 338, 341, 358, 356, - 357, 359, 351, 352, 353, 354, 0, 362, 363, 0, - 0, 0, 0, 0, 461, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 485, 486, 487, 488, 489, 490, - 491, 464, 0, 478, 0, 0, 0, 520, 521, 522, - 523, 524, 525, 526, 527, 528, 0, 378, 0, 0, - 0, 624, 0, 0, 0, 0, 0, 0, 0, 375, - 0, 598, 0, 551, 559, 0, 552, 560, 553, 561, - 554, 0, 555, 562, 556, 563, 557, 558, 564, 0, - 0, 0, 378, 378, 0, 0, 632, 0, 380, 34, - 0, 0, 633, 625, 626, 629, 632, 0, 402, 391, - 382, 385, 386, 368, 0, 394, 398, 0, 400, 401, - 0, 0, 60, 0, 446, 0, 404, 406, 407, 408, - 428, 0, 430, -2, 0, 0, 0, 54, 55, 0, - 0, 0, 0, 978, 664, 0, 64, 65, 0, 0, - 0, 173, 668, 669, 670, 666, 222, 0, 0, 161, - 157, 101, 102, 103, 150, 105, 150, 150, 150, 150, - 170, 170, 170, 170, 133, 134, 135, 136, 137, 0, - 0, 120, 150, 150, 150, 124, 140, 141, 142, 143, - 144, 145, 146, 147, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 152, 152, 152, 154, 154, 697, 79, - 0, 1008, 0, 1008, 91, 0, 236, 238, 239, 0, - 0, 0, 0, 0, 0, 0, 0, 270, 674, 0, - 1008, 273, 274, 448, 705, 706, 278, 279, 322, 323, - 281, 282, 283, 284, 285, 286, 325, 0, 200, 201, - 294, 298, 0, 321, 0, 0, 300, 301, 0, 0, - 339, 343, 344, 345, 346, 499, 458, 459, 460, 462, - 479, 0, 481, 483, 469, 470, 494, 495, 496, 0, - 0, 0, 0, 492, 474, 0, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 514, 515, 516, 519, 582, - 583, 0, 517, 518, 529, 0, 0, 0, 379, 607, - 0, -2, 0, 497, 653, 632, 0, 0, 0, 0, - 502, 609, 0, 502, 609, 0, 0, 0, 376, 377, - 604, 601, 0, 0, 606, 0, 568, 0, 0, 0, - 0, 0, 0, 0, 0, 636, 44, 637, 0, 0, - 0, 0, 628, 630, 631, 636, 0, 617, 0, 0, - 455, 0, 0, 383, 40, 399, 395, 0, 455, 0, - 0, 445, 0, 0, 0, 0, 0, 0, 435, 0, - 0, 438, 0, 0, 0, 0, 429, 0, 0, 0, - 450, 922, 431, 0, 433, 434, 455, 0, 455, 57, - 455, 59, 0, 449, 659, 63, 0, 0, 68, 69, - 660, 661, 662, 663, 0, 92, 223, 225, 228, 229, - 230, 96, 97, 98, 0, 0, 210, 0, 0, 204, - 204, 0, 202, 203, 94, 164, 162, 0, 159, 158, - 104, 0, 170, 170, 127, 128, 173, 0, 173, 173, - 173, 0, 0, 121, 122, 123, 115, 0, 116, 117, - 118, 0, 119, 0, 0, 1008, 81, 676, 82, 1007, - 0, 0, 689, 237, 679, 680, 681, 682, 683, 684, - 685, 686, 687, 688, 0, 83, 241, 243, 242, 246, - 0, 0, 0, 268, 1008, 272, 318, 318, 297, 319, - 320, 304, 335, 480, 482, 484, 471, 492, 475, 0, - 472, 0, 0, 466, 534, 0, 0, 378, 0, 624, - 636, 538, 539, 0, 0, 0, 0, 0, 575, 0, - 0, 576, 0, 624, 0, 602, 0, 0, 550, 0, - 569, 0, 0, 570, 571, 572, 573, 574, 36, 0, - 634, 635, 627, 35, 0, 671, 672, 618, 619, 620, - 0, 392, 403, 384, 0, 632, 647, 0, 0, 640, - 0, 0, 455, 655, 0, 405, 424, 426, 0, 421, - 436, 437, 439, 0, 441, 0, 443, 444, 409, 410, - 411, 0, 412, 0, 0, 0, 0, 432, 624, 455, - 52, 53, 0, 66, 67, 0, 0, 73, 174, 175, - 0, 226, 0, 0, 0, 192, 204, 204, 195, 205, - 196, 0, 166, 0, 163, 100, 160, 0, 173, 173, - 129, 0, 130, 131, 132, 0, 148, 0, 0, 0, - 0, 698, 80, 231, 1007, 248, 249, 250, 251, 252, - 253, 254, 255, 256, 257, 258, 259, 260, 261, 1007, - 0, 1007, 690, 691, 692, 693, 0, 86, 0, 0, - 0, 0, 0, 271, 321, 321, 473, 0, 493, 476, - 535, 536, 0, 608, 632, 38, 0, 150, 150, 587, - 150, 154, 590, 150, 592, 150, 595, 0, 0, 0, - 0, 0, 0, 0, 599, 549, 605, 0, 607, 0, - 0, 638, 37, 622, 0, 456, 396, 41, 45, 0, - 647, 639, 649, 651, 0, 0, 643, 0, 416, 624, - 0, 0, 418, 425, 0, 0, 419, 0, 420, 440, - 442, -2, 0, 0, 0, 0, 632, 51, 70, 71, - 72, 224, 227, 0, 206, 150, 209, 193, 194, 0, - 168, 0, 165, 151, 125, 126, 171, 172, 170, 0, - 170, 0, 155, 0, 1008, 232, 233, 234, 235, 0, - 240, 0, 84, 85, 0, 0, 245, 269, 291, 296, - 477, 537, 636, 540, 584, 170, 588, 589, 591, 593, - 594, 596, 542, 541, 0, 0, 0, 0, 0, 632, - 0, 603, 0, 0, 42, 0, 0, 0, 46, 0, - 652, 0, 0, 0, 61, 0, 632, 656, 657, 422, - 0, 427, 0, 0, 0, 430, 50, 184, 0, 208, - 0, 414, 176, 169, 0, 173, 149, 173, 0, 0, - 78, 0, 87, 88, 0, 0, 0, 39, 585, 586, - 0, 0, 0, 0, 577, 0, 600, 0, 0, 623, - 621, 0, 650, 0, 642, 645, 644, 417, 49, 0, - 0, 452, 0, 0, 450, 183, 185, 0, 190, 0, - 207, 0, 0, 181, 0, 178, 180, 167, 138, 139, - 153, 156, 0, 0, 0, 0, 247, 543, 545, 544, - 546, 0, 0, 0, 548, 565, 566, 0, 641, 0, - 423, 451, 453, 454, 413, 186, 187, 0, 191, 189, - 0, 415, 99, 0, 177, 179, 0, 263, 0, 89, - 90, 83, 547, 0, 0, 0, 648, 646, 188, 0, - 182, 262, 0, 0, 86, 578, 0, 581, 0, 264, - 0, 244, 579, 0, 0, 0, 211, 0, 0, 212, - 213, 0, 0, 580, 214, 0, 0, 0, 0, 0, - 215, 217, 218, 0, 0, 216, 265, 266, 219, 220, - 221, + 21, 22, 23, 24, 25, 26, 27, 622, 0, 363, + 363, 363, 363, 363, 363, 0, 692, 675, 0, 0, + 0, 0, -2, 328, 329, 0, 331, -2, 0, 0, + 340, 1005, 1005, 0, 0, 1005, 0, 1003, 45, 46, + 346, 347, 348, 1, 3, 0, 367, 630, 0, 0, + -2, 365, 0, 675, 675, 0, 0, 74, 75, 0, + 0, 0, 988, 0, 673, 673, 673, 693, 694, 697, + 698, 29, 30, 31, 824, 825, 826, 827, 828, 829, + 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 844, 845, 846, 847, 848, 849, + 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, + 860, 861, 862, 863, 864, 865, 866, 867, 868, 869, + 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, + 880, 881, 882, 883, 884, 885, 886, 887, 888, 889, + 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, + 900, 901, 902, 903, 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, 989, 990, + 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000, + 1001, 1002, 0, 0, 0, 0, 0, 676, 0, 671, + 0, 671, 671, 671, 0, 274, 445, 701, 702, 988, + 0, 0, 0, 319, 0, 322, 322, 322, 288, 0, + 290, 1006, 0, 1006, 0, 297, 0, 0, 303, 319, + 1006, 311, 325, 326, 313, 308, 309, 327, 330, 0, + 335, 338, 0, 353, 0, 865, 345, 358, 359, 1005, + 1005, 362, 32, 496, 455, 0, 461, 463, 0, 498, + 499, 500, 501, 502, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 528, 529, 530, 531, 607, 608, + 609, 610, 611, 612, 613, 614, 465, 466, 604, 0, + 652, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 595, 0, 565, 565, 565, 565, 565, 565, 565, 565, + 0, 0, 0, 0, 0, 0, 0, -2, -2, 622, + 41, 0, 363, 368, 369, 634, 0, 0, 622, 1004, + 0, 0, -2, -2, 379, 385, 386, 387, 388, 364, + 0, 391, 395, 0, 0, 0, 0, 0, 0, 54, + 56, 445, 60, 0, 976, 656, -2, -2, 0, 0, + 699, 700, -2, 837, -2, 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, + 740, 741, 742, 743, 744, 745, 746, 747, 748, 749, + 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, + 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, + 780, 781, 782, 783, 784, 785, 786, 787, 788, 789, + 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, + 800, 801, 802, 803, 804, 805, 806, 807, 808, 809, + 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, + 820, 821, 822, 823, 0, 0, 93, 0, 91, 0, + 1006, 0, 0, 0, 0, 0, 0, 1006, 1006, 1006, + 0, 0, 0, 0, 265, 0, 0, 0, 0, 0, + 0, 0, 273, 0, 275, 1006, 319, 278, 0, 0, + 1006, 1006, 1006, 0, 1006, 1006, 285, 0, 286, 287, + 0, 195, 196, 197, 291, 1007, 1008, 1006, 1006, 293, + 0, 316, 314, 315, 306, 307, 0, 322, 300, 301, + 304, 305, 336, 339, 356, 354, 355, 357, 349, 350, + 351, 352, 0, 360, 361, 0, 0, 0, 0, 0, + 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 483, 484, 485, 486, 487, 488, 489, 462, 0, 476, + 0, 0, 0, 518, 519, 520, 521, 522, 523, 524, + 525, 526, 0, 376, 0, 0, 0, 622, 0, 0, + 0, 0, 0, 0, 0, 373, 0, 596, 0, 549, + 557, 0, 550, 558, 551, 559, 552, 0, 553, 560, + 554, 561, 555, 556, 562, 0, 0, 0, 376, 376, + 0, 0, 630, 0, 378, 33, 0, 0, 631, 623, + 624, 627, 630, 0, 400, 389, 380, 383, 384, 366, + 0, 392, 396, 0, 398, 399, 0, 58, 0, 444, + 0, 402, 404, 405, 406, 426, 0, 428, -2, 0, + 0, 0, 52, 53, 0, 0, 0, 0, 976, 657, + 62, 63, 0, 0, 0, 171, 666, 667, 668, 664, + 220, 0, 0, 159, 155, 99, 100, 101, 148, 103, + 148, 148, 148, 148, 168, 168, 168, 168, 131, 132, + 133, 134, 135, 0, 0, 118, 148, 148, 148, 122, + 138, 139, 140, 141, 142, 143, 144, 145, 104, 105, + 106, 107, 108, 109, 110, 111, 112, 150, 150, 150, + 152, 152, 695, 77, 0, 1006, 0, 1006, 89, 0, + 234, 236, 237, 0, 0, 0, 0, 0, 0, 0, + 0, 268, 672, 0, 1006, 271, 272, 446, 703, 704, + 276, 277, 320, 321, 279, 280, 281, 282, 283, 284, + 323, 0, 198, 199, 292, 296, 0, 319, 0, 0, + 298, 299, 0, 0, 337, 341, 342, 343, 344, 497, + 456, 457, 458, 460, 477, 0, 479, 481, 467, 468, + 492, 493, 494, 0, 0, 0, 0, 490, 472, 0, + 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, + 513, 514, 517, 580, 581, 0, 515, 516, 527, 0, + 0, 0, 377, 605, 0, -2, 0, 495, 651, 630, + 0, 0, 0, 0, 500, 607, 0, 500, 607, 0, + 0, 0, 374, 375, 602, 599, 0, 0, 604, 0, + 566, 0, 0, 0, 0, 0, 0, 0, 0, 634, + 42, 635, 0, 0, 0, 0, 626, 628, 629, 634, + 0, 615, 0, 0, 453, 0, 0, 381, 39, 397, + 393, 0, 0, 0, 443, 0, 0, 0, 0, 0, + 0, 433, 0, 0, 436, 0, 0, 0, 0, 427, + 0, 0, 0, 448, 920, 429, 0, 431, 432, 453, + 0, 453, 55, 453, 57, 0, 447, 658, 61, 0, + 0, 66, 67, 659, 660, 661, 662, 0, 90, 221, + 223, 226, 227, 228, 94, 95, 96, 0, 0, 208, + 0, 0, 202, 202, 0, 200, 201, 92, 162, 160, + 0, 157, 156, 102, 0, 168, 168, 125, 126, 171, + 0, 171, 171, 171, 0, 0, 119, 120, 121, 113, + 0, 114, 115, 116, 0, 117, 0, 0, 1006, 79, + 674, 80, 1005, 0, 0, 687, 235, 677, 678, 679, + 680, 681, 682, 683, 684, 685, 686, 0, 81, 239, + 241, 240, 244, 0, 0, 0, 266, 1006, 270, 316, + 316, 295, 317, 318, 302, 333, 478, 480, 482, 469, + 490, 473, 0, 470, 0, 0, 464, 532, 0, 0, + 376, 0, 622, 634, 536, 537, 0, 0, 0, 0, + 0, 573, 0, 0, 574, 0, 622, 0, 600, 0, + 0, 548, 0, 567, 0, 0, 568, 569, 570, 571, + 572, 35, 0, 632, 633, 625, 34, 0, 669, 670, + 616, 617, 618, 0, 390, 401, 382, 0, 645, 0, + 0, 638, 0, 0, 453, 653, 0, 403, 422, 424, + 0, 419, 434, 435, 437, 0, 439, 0, 441, 442, + 407, 408, 409, 0, 410, 0, 0, 0, 0, 430, + 622, 453, 50, 51, 0, 64, 65, 0, 0, 71, + 172, 173, 0, 224, 0, 0, 0, 190, 202, 202, + 193, 203, 194, 0, 164, 0, 161, 98, 158, 0, + 171, 171, 127, 0, 128, 129, 130, 0, 146, 0, + 0, 0, 0, 696, 78, 229, 1005, 246, 247, 248, + 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 1005, 0, 1005, 688, 689, 690, 691, 0, 84, + 0, 0, 0, 0, 0, 269, 319, 319, 471, 0, + 491, 474, 533, 534, 0, 606, 630, 37, 0, 148, + 148, 585, 148, 152, 588, 148, 590, 148, 593, 0, + 0, 0, 0, 0, 0, 0, 597, 547, 603, 0, + 605, 0, 0, 636, 36, 620, 0, 454, 394, 43, + 0, 645, 637, 647, 649, 0, 0, 641, 0, 414, + 622, 0, 0, 416, 423, 0, 0, 417, 0, 418, + 438, 440, -2, 0, 0, 0, 0, 630, 49, 68, + 69, 70, 222, 225, 0, 204, 148, 207, 191, 192, + 0, 166, 0, 163, 149, 123, 124, 169, 170, 168, + 0, 168, 0, 153, 0, 1006, 230, 231, 232, 233, + 0, 238, 0, 82, 83, 0, 0, 243, 267, 289, + 294, 475, 535, 634, 538, 582, 168, 586, 587, 589, + 591, 592, 594, 540, 539, 0, 0, 0, 0, 0, + 630, 0, 601, 0, 0, 40, 0, 0, 0, 44, + 0, 650, 0, 0, 0, 59, 0, 630, 654, 655, + 420, 0, 425, 0, 0, 0, 428, 48, 182, 0, + 206, 0, 412, 174, 167, 0, 171, 147, 171, 0, + 0, 76, 0, 85, 86, 0, 0, 0, 38, 583, + 584, 0, 0, 0, 0, 575, 0, 598, 0, 0, + 621, 619, 0, 648, 0, 640, 643, 642, 415, 47, + 0, 0, 450, 0, 0, 448, 181, 183, 0, 188, + 0, 205, 0, 0, 179, 0, 176, 178, 165, 136, + 137, 151, 154, 0, 0, 0, 0, 245, 541, 543, + 542, 544, 0, 0, 0, 546, 563, 564, 0, 639, + 0, 421, 449, 451, 452, 411, 184, 185, 0, 189, + 187, 0, 413, 97, 0, 175, 177, 0, 261, 0, + 87, 88, 81, 545, 0, 0, 0, 646, 644, 186, + 0, 180, 260, 0, 0, 84, 576, 0, 579, 0, + 262, 0, 242, 577, 0, 0, 0, 209, 0, 0, + 210, 211, 0, 0, 578, 212, 0, 0, 0, 0, + 0, 213, 215, 216, 0, 0, 214, 263, 264, 217, + 218, 219, } var yyTok1 = [...]int{ 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 82, 3, 3, 3, 109, 101, 3, - 58, 60, 106, 104, 59, 105, 121, 107, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 369, - 90, 89, 91, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 81, 3, 3, 3, 108, 100, 3, + 57, 59, 105, 103, 58, 104, 120, 106, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 368, + 89, 88, 90, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 110, 3, 3, 3, 3, 3, @@ -3706,7 +3488,7 @@ var yyTok3 = [...]int{ 57675, 350, 57676, 351, 57677, 352, 57678, 353, 57679, 354, 57680, 355, 57681, 356, 57682, 357, 57683, 358, 57684, 359, 57685, 360, 57686, 361, 57687, 362, 57688, 363, 57689, 364, - 57690, 365, 57691, 366, 57692, 367, 57693, 368, 0, + 57690, 365, 57691, 366, 57692, 367, 0, } var yyErrorMessages = [...]struct { @@ -4070,37 +3852,37 @@ yydefault: } case 28: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:377 +//line sql.y:376 { setParseTree(yylex, nil) } case 29: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:383 +//line sql.y:382 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), NoAt) } case 30: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:387 +//line sql.y:386 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), SingleAt) } case 31: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:391 +//line sql.y:390 { yyVAL.colIdent = NewColIdentWithAt(string(yyDollar[1].bytes), DoubleAt) } case 32: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:397 +//line sql.y:396 { yyVAL.statement = &OtherAdmin{} } case 33: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:403 +//line sql.y:402 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -4110,25 +3892,25 @@ yydefault: } case 34: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:411 +//line sql.y:410 { yyVAL.selStmt = &Union{FirstStatement: &ParenSelect{Select: yyDollar[2].selStmt}, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } case 35: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:415 +//line sql.y:414 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } case 36: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:419 +//line sql.y:418 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), SelectExprs{Nextval{Expr: yyDollar[5].expr}}, []string{yyDollar[3].str} /*options*/, TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}, nil /*where*/, nil /*groupBy*/, nil /*having*/) } case 37: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:442 +//line sql.y:441 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -4138,43 +3920,37 @@ yydefault: } case 38: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:450 +//line sql.y:449 { yyVAL.selStmt = Unionize(yyDollar[1].selStmt, yyDollar[3].selStmt, yyDollar[2].str, yyDollar[4].orderBy, yyDollar[5].limit, yyDollar[6].str) } case 39: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:456 +//line sql.y:455 { yyVAL.statement = &Stream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName} } - case 41: - yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:462 - { - yyVAL.statement = &VStream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName, Where: NewWhere(WhereStr, yyDollar[6].expr), Limit: yyDollar[7].limit} - } - case 42: + case 40: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:470 +//line sql.y:463 { yyVAL.selStmt = NewSelect(Comments(yyDollar[2].bytes2), yyDollar[4].selectExprs /*SelectExprs*/, yyDollar[3].strs /*options*/, yyDollar[5].tableExprs /*from*/, NewWhere(WhereStr, yyDollar[6].expr), GroupBy(yyDollar[7].exprs), NewWhere(HavingStr, yyDollar[8].expr)) } case 41: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:476 +//line sql.y:469 { yyVAL.selStmt = yyDollar[1].selStmt } case 42: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:480 +//line sql.y:473 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 43: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:487 +//line sql.y:480 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].ins @@ -4188,7 +3964,7 @@ yydefault: } case 44: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:499 +//line sql.y:492 { cols := make(Columns, 0, len(yyDollar[7].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[8].updateExprs)) @@ -4200,186 +3976,186 @@ yydefault: } case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:511 +//line sql.y:504 { yyVAL.str = InsertStr } case 46: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:515 +//line sql.y:508 { yyVAL.str = ReplaceStr } case 47: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:521 +//line sql.y:514 { yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), Ignore: yyDollar[3].str, TableExprs: yyDollar[4].tableExprs, Exprs: yyDollar[6].updateExprs, Where: NewWhere(WhereStr, yyDollar[7].expr), OrderBy: yyDollar[8].orderBy, Limit: yyDollar[9].limit} } case 48: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:527 +//line sql.y:520 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[4].tableName}}, Partitions: yyDollar[5].partitions, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} } case 49: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:531 +//line sql.y:524 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableNames, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr)} } case 50: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:535 +//line sql.y:528 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 51: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:539 +//line sql.y:532 { yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} } case 52: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:544 +//line sql.y:537 { } case 53: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:545 +//line sql.y:538 { } case 54: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:549 +//line sql.y:542 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 55: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:553 +//line sql.y:546 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } case 56: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:559 +//line sql.y:552 { yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 57: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:563 +//line sql.y:556 { yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) } case 58: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:568 +//line sql.y:561 { yyVAL.partitions = nil } case 59: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:572 +//line sql.y:565 { yyVAL.partitions = yyDollar[3].partitions } case 60: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:578 +//line sql.y:571 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } case 61: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:584 +//line sql.y:577 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Characteristics: yyDollar[5].characteristics} } case 62: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:588 +//line sql.y:581 { yyVAL.statement = &SetTransaction{Comments: Comments(yyDollar[2].bytes2), Characteristics: yyDollar[4].characteristics} } case 63: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:594 +//line sql.y:587 { yyVAL.characteristics = []Characteristic{yyDollar[1].characteristic} } case 64: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:598 +//line sql.y:591 { yyVAL.characteristics = append(yyVAL.characteristics, yyDollar[3].characteristic) } case 65: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:604 +//line sql.y:597 { yyVAL.characteristic = &IsolationLevel{Level: string(yyDollar[3].str)} } case 66: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:608 +//line sql.y:601 { yyVAL.characteristic = &AccessMode{Mode: TxReadWrite} } case 67: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:612 +//line sql.y:605 { yyVAL.characteristic = &AccessMode{Mode: TxReadOnly} } case 68: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:618 +//line sql.y:611 { yyVAL.str = RepeatableRead } case 69: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:622 +//line sql.y:615 { yyVAL.str = ReadCommitted } case 70: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:626 +//line sql.y:619 { yyVAL.str = ReadUncommitted } case 71: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:630 +//line sql.y:623 { yyVAL.str = Serializable } case 72: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:636 +//line sql.y:629 { yyVAL.str = SessionStr } case 73: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:640 +//line sql.y:633 { yyVAL.str = GlobalStr } case 74: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:646 +//line sql.y:639 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } case 75: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:651 +//line sql.y:644 { // Create table [name] like [name] yyDollar[1].ddl.OptLike = yyDollar[2].optLike @@ -4387,139 +4163,139 @@ yydefault: } case 76: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:657 +//line sql.y:650 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName} } case 77: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:662 +//line sql.y:655 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[3].tableName.ToViewName()} } case 78: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:666 +//line sql.y:659 { yyVAL.statement = &DDL{Action: CreateStr, Table: yyDollar[5].tableName.ToViewName()} } case 79: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:670 +//line sql.y:663 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 80: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:674 +//line sql.y:667 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].colIdent.String())} } case 81: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:679 +//line sql.y:672 { yyVAL.colIdent = NewColIdent("") } case 82: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:683 +//line sql.y:676 { yyVAL.colIdent = yyDollar[2].colIdent } case 83: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:689 +//line sql.y:682 { yyVAL.colIdent = yyDollar[1].colIdent } case 84: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:694 +//line sql.y:687 { var v []VindexParam yyVAL.vindexParams = v } case 85: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:699 +//line sql.y:692 { yyVAL.vindexParams = yyDollar[2].vindexParams } case 86: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:705 +//line sql.y:698 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } case 87: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:710 +//line sql.y:703 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } case 88: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:716 +//line sql.y:709 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } case 89: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:722 +//line sql.y:715 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } case 90: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:729 +//line sql.y:722 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } case 91: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:736 +//line sql.y:729 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } case 92: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:740 +//line sql.y:733 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } case 93: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:746 +//line sql.y:739 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } case 94: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:751 +//line sql.y:744 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } case 95: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:755 +//line sql.y:748 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } case 96: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:759 +//line sql.y:752 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } case 97: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:765 +//line sql.y:758 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -4531,7 +4307,7 @@ yydefault: } case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:776 +//line sql.y:769 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal @@ -4539,82 +4315,82 @@ yydefault: } case 102: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:787 +//line sql.y:780 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].sqlVal } case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:792 +//line sql.y:785 { yyVAL.columnType = yyDollar[1].columnType } case 104: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:789 +//line sql.y:791 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 105: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:793 +//line sql.y:795 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 106: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:798 +//line sql.y:799 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 107: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:802 +//line sql.y:803 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 108: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:806 +//line sql.y:807 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 109: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:810 +//line sql.y:811 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 110: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:814 +//line sql.y:815 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 111: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:818 +//line sql.y:819 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 112: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:822 +//line sql.y:823 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 113: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:826 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:829 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 114: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:830 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:835 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4622,7 +4398,7 @@ yydefault: } case 115: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:836 +//line sql.y:841 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4630,7 +4406,7 @@ yydefault: } case 116: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:842 +//line sql.y:847 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -4638,214 +4414,214 @@ yydefault: } case 117: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:848 +//line sql.y:853 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 118: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:854 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:861 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 119: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:860 +//line sql.y:865 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 120: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:868 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:869 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 121: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:872 +//line sql.y:873 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 122: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:876 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:877 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 123: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:880 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:883 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 124: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:884 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:887 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 125: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:890 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:891 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 126: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:894 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:895 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } case 127: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:898 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:899 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 128: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:902 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:903 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 129: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:906 +//line sql.y:907 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 130: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:910 +//line sql.y:911 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 131: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:914 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:915 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 132: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:918 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:919 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:922 +//line sql.y:923 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:926 +//line sql.y:927 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:930 +//line sql.y:931 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 136: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:934 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:935 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 137: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:938 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:940 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 138: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:942 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:946 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 139: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:947 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:950 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 140: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:953 +//line sql.y:954 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 141: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:957 +//line sql.y:958 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 142: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:961 +//line sql.y:962 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 143: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:965 +//line sql.y:966 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 144: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:969 +//line sql.y:970 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 145: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:973 +//line sql.y:974 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 146: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:977 +//line sql.y:980 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } case 147: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:981 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:985 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } case 148: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:987 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:990 { yyVAL.sqlVal = nil } case 149: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:992 +//line sql.y:994 { yyVAL.sqlVal = NewIntVal(yyDollar[2].bytes) } case 150: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:997 +//line sql.y:999 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 151: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1001 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1003 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4854,21 +4630,21 @@ yydefault: } case 152: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1006 +//line sql.y:1011 { yyVAL.LengthScaleOption = LengthScaleOption{} } case 153: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1010 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1015 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } case 154: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1018 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1021 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), @@ -4876,521 +4652,509 @@ yydefault: } } case 155: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1022 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1029 { yyVAL.boolVal = BoolVal(false) } case 156: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1028 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1033 { yyVAL.boolVal = BoolVal(true) } case 157: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1036 +//line sql.y:1038 { yyVAL.boolVal = BoolVal(false) } case 158: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1040 +//line sql.y:1042 { yyVAL.boolVal = BoolVal(true) } case 159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1045 +//line sql.y:1048 { yyVAL.boolVal = BoolVal(false) } case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1049 +//line sql.y:1052 { yyVAL.boolVal = BoolVal(false) } case 161: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1055 - { - yyVAL.boolean = false - } - case 162: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1059 - { - yyVAL.boolean = false - } - case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1063 +//line sql.y:1056 { yyVAL.boolVal = BoolVal(true) } case 162: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1068 +//line sql.y:1061 { yyVAL.optVal = nil } case 163: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1072 +//line sql.y:1065 { yyVAL.optVal = yyDollar[2].expr } case 164: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1077 +//line sql.y:1070 { yyVAL.optVal = nil } case 165: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1081 +//line sql.y:1074 { yyVAL.optVal = yyDollar[3].expr } case 166: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1086 +//line sql.y:1079 { yyVAL.boolVal = BoolVal(false) } case 167: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1090 +//line sql.y:1083 { yyVAL.boolVal = BoolVal(true) } case 168: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1095 +//line sql.y:1088 { yyVAL.str = "" } case 169: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1099 +//line sql.y:1092 { yyVAL.str = string(yyDollar[3].colIdent.String()) } case 170: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1103 +//line sql.y:1096 { yyVAL.str = string(yyDollar[3].bytes) } case 171: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1108 +//line sql.y:1101 { yyVAL.str = "" } case 172: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1112 +//line sql.y:1105 { yyVAL.str = string(yyDollar[2].colIdent.String()) } case 173: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1109 { yyVAL.str = string(yyDollar[2].bytes) } case 174: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1121 +//line sql.y:1114 { yyVAL.colKeyOpt = colKeyNone } case 175: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1125 +//line sql.y:1118 { yyVAL.colKeyOpt = colKeyPrimary } case 176: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1129 +//line sql.y:1122 { yyVAL.colKeyOpt = colKey } case 177: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1133 +//line sql.y:1126 { yyVAL.colKeyOpt = colKeyUniqueKey } case 178: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1137 +//line sql.y:1130 { yyVAL.colKeyOpt = colKeyUnique } case 179: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1142 +//line sql.y:1135 { yyVAL.sqlVal = nil } case 180: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1146 +//line sql.y:1139 { yyVAL.sqlVal = NewStrVal(yyDollar[2].bytes) } case 181: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1152 +//line sql.y:1145 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } case 182: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1156 +//line sql.y:1149 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } case 183: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1162 +//line sql.y:1155 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1166 +//line sql.y:1159 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } case 185: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1172 +//line sql.y:1165 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].colIdent.String())} } case 186: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1176 +//line sql.y:1169 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } case 187: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1181 +//line sql.y:1174 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } case 188: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1187 +//line sql.y:1180 { yyVAL.str = "" } case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1191 +//line sql.y:1184 { yyVAL.str = string(yyDollar[1].bytes) } case 190: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1197 +//line sql.y:1190 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } case 191: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1201 +//line sql.y:1194 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } case 192: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1205 +//line sql.y:1198 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } case 193: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1209 +//line sql.y:1202 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } case 194: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1213 +//line sql.y:1206 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } case 195: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1219 +//line sql.y:1212 { yyVAL.str = string(yyDollar[1].bytes) } case 196: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1223 +//line sql.y:1216 { yyVAL.str = string(yyDollar[1].bytes) } case 197: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1227 +//line sql.y:1220 { yyVAL.str = string(yyDollar[1].bytes) } case 198: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1234 +//line sql.y:1227 { yyVAL.str = string(yyDollar[1].bytes) } case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1238 +//line sql.y:1231 { yyVAL.str = string(yyDollar[1].bytes) } case 200: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1244 +//line sql.y:1237 { yyVAL.str = string(yyDollar[1].bytes) } case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1248 +//line sql.y:1241 { yyVAL.str = string(yyDollar[1].bytes) } case 202: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1253 +//line sql.y:1246 { yyVAL.str = "" } case 203: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1257 +//line sql.y:1250 { yyVAL.str = string(yyDollar[1].colIdent.String()) } case 204: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1263 +//line sql.y:1256 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } case 205: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1267 +//line sql.y:1260 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } case 206: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1273 +//line sql.y:1266 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].sqlVal} } case 207: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1279 +//line sql.y:1272 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].colIdent.String()), Details: yyDollar[3].constraintInfo} } case 208: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1283 +//line sql.y:1276 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } case 209: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1290 +//line sql.y:1283 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } case 210: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1294 +//line sql.y:1287 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } case 211: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1298 +//line sql.y:1291 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } case 212: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1302 +//line sql.y:1295 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } case 213: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1308 +//line sql.y:1301 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 214: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1314 +//line sql.y:1307 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } case 215: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1320 +//line sql.y:1313 { yyVAL.ReferenceAction = Restrict } case 216: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1324 +//line sql.y:1317 { yyVAL.ReferenceAction = Cascade } case 217: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1328 +//line sql.y:1321 { yyVAL.ReferenceAction = NoAction } case 218: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1332 +//line sql.y:1325 { yyVAL.ReferenceAction = SetDefault } case 219: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1336 +//line sql.y:1329 { yyVAL.ReferenceAction = SetNull } case 220: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1341 +//line sql.y:1334 { yyVAL.str = "" } case 221: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1345 +//line sql.y:1338 { yyVAL.str = " " + string(yyDollar[1].str) } case 222: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1349 +//line sql.y:1342 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } case 223: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1357 +//line sql.y:1350 { yyVAL.str = yyDollar[1].str } case 224: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1361 +//line sql.y:1354 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } case 225: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1365 +//line sql.y:1358 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } case 226: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1371 +//line sql.y:1364 { yyVAL.str = yyDollar[1].colIdent.String() } case 227: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1375 +//line sql.y:1368 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } case 228: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1379 +//line sql.y:1372 { yyVAL.str = string(yyDollar[1].bytes) } case 229: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1385 +//line sql.y:1378 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 230: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1389 +//line sql.y:1382 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 231: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1393 +//line sql.y:1386 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 232: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1397 +//line sql.y:1390 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } case 233: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1402 +//line sql.y:1395 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 234: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1407 +//line sql.y:1400 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} } case 235: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1411 +//line sql.y:1404 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } case 236: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1415 +//line sql.y:1408 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 237: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1419 +//line sql.y:1412 { yyVAL.statement = &DBDDL{Action: AlterStr, DBName: string(yyDollar[3].colIdent.String())} } case 238: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1423 +//line sql.y:1416 { yyVAL.statement = &DDL{ Action: CreateVindexStr, @@ -5404,7 +5168,7 @@ yydefault: } case 239: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1435 +//line sql.y:1428 { yyVAL.statement = &DDL{ Action: DropVindexStr, @@ -5416,19 +5180,19 @@ yydefault: } case 240: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1445 +//line sql.y:1438 { yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} } case 241: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1449 +//line sql.y:1442 { yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} } case 242: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1453 +//line sql.y:1446 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -5443,7 +5207,7 @@ yydefault: } case 243: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1466 +//line sql.y:1459 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -5455,13 +5219,13 @@ yydefault: } case 244: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1476 +//line sql.y:1469 { yyVAL.statement = &DDL{Action: AddSequenceStr, Table: yyDollar[5].tableName} } case 245: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:1480 +//line sql.y:1473 { yyVAL.statement = &DDL{ Action: AddAutoIncStr, @@ -5474,49 +5238,49 @@ yydefault: } case 260: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1509 +//line sql.y:1502 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } case 261: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1515 +//line sql.y:1508 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } case 262: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1519 +//line sql.y:1512 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } case 263: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1525 +//line sql.y:1518 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } case 264: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1529 +//line sql.y:1522 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } case 265: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1535 +//line sql.y:1528 { yyVAL.statement = yyDollar[3].ddl } case 266: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1541 +//line sql.y:1534 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } case 267: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1545 +//line sql.y:1538 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) @@ -5524,7 +5288,7 @@ yydefault: } case 268: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1553 +//line sql.y:1546 { var exists bool if yyDollar[3].byt != 0 { @@ -5534,14 +5298,14 @@ yydefault: } case 269: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1557 +//line sql.y:1554 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } case 270: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1562 +//line sql.y:1559 { var exists bool if yyDollar[3].byt != 0 { @@ -5551,158 +5315,158 @@ yydefault: } case 271: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1566 +//line sql.y:1567 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 272: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1570 +//line sql.y:1571 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].colIdent.String())} } case 273: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1576 +//line sql.y:1577 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } case 274: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1580 +//line sql.y:1581 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } case 275: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1585 +//line sql.y:1586 { yyVAL.statement = &OtherRead{} } case 276: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1591 +//line sql.y:1592 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1596 +//line sql.y:1597 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Type: CharsetStr, ShowTablesOpt: showTablesOpt} } case 278: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1601 +//line sql.y:1602 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } case 279: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1606 +//line sql.y:1607 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 280: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1611 +//line sql.y:1612 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].colIdent.String())} } case 281: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1615 +//line sql.y:1616 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 282: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1619 +//line sql.y:1620 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), Table: yyDollar[4].tableName} } case 283: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1623 +//line sql.y:1624 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 284: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1627 +//line sql.y:1628 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 285: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1631 +//line sql.y:1632 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } - case 288: + case 286: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1636 +//line sql.y:1637 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } - case 289: + case 287: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1641 +//line sql.y:1642 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowTablesOpt: showTablesOpt} } - case 290: + case 288: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1646 +//line sql.y:1647 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 291: + case 289: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1650 +//line sql.y:1651 { showTablesOpt := &ShowTablesOpt{DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Extended: string(yyDollar[2].str), Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } - case 292: + case 290: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1655 +//line sql.y:1656 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 293: + case 291: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1659 +//line sql.y:1660 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 294: + case 292: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1663 +//line sql.y:1664 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 295: + case 293: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1667 +//line sql.y:1668 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 296: + case 294: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1671 +//line sql.y:1672 { showTablesOpt := &ShowTablesOpt{Full: yyDollar[2].str, DbName: yyDollar[6].str, Filter: yyDollar[7].showFilter} yyVAL.statement = &Show{Type: string(yyDollar[3].str), ShowTablesOpt: showTablesOpt, OnTable: yyDollar[5].tableName} } - case 297: + case 295: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1676 +//line sql.y:1677 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -5712,866 +5476,866 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 298: + case 296: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1686 +//line sql.y:1687 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 299: + case 297: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1690 +//line sql.y:1691 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 300: + case 298: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1694 +//line sql.y:1695 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: yyDollar[4].expr} } - case 301: + case 299: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1698 +//line sql.y:1699 { showTablesOpt := &ShowTablesOpt{Filter: yyDollar[4].showFilter} yyVAL.statement = &Show{Scope: string(yyDollar[2].bytes), Type: string(yyDollar[3].bytes), ShowTablesOpt: showTablesOpt} } - case 302: + case 300: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1703 +//line sql.y:1704 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 303: + case 301: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1707 +//line sql.y:1708 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 304: + case 302: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1711 +//line sql.y:1712 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } - case 305: + case 303: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1715 +//line sql.y:1716 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 306: + case 304: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1720 +//line sql.y:1721 { // This should probably be a different type (ShowVitessTopoOpt), but // just getting the thing working for now showTablesOpt := &ShowTablesOpt{Filter: yyDollar[3].showFilter} yyVAL.statement = &Show{Type: yyDollar[2].str, ShowTablesOpt: showTablesOpt} } - case 307: + case 305: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1734 +//line sql.y:1735 { yyVAL.statement = &Show{Type: string(yyDollar[2].colIdent.String())} } - case 308: + case 306: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1740 +//line sql.y:1741 { yyVAL.str = string(yyDollar[1].bytes) } - case 309: + case 307: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1744 +//line sql.y:1745 { yyVAL.str = string(yyDollar[1].bytes) } - case 310: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1750 +//line sql.y:1751 { yyVAL.str = string(yyDollar[1].bytes) } - case 311: + case 309: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1754 +//line sql.y:1755 { yyVAL.str = string(yyDollar[1].bytes) } - case 312: + case 310: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1760 +//line sql.y:1761 { yyVAL.str = "" } - case 313: + case 311: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1764 +//line sql.y:1765 { yyVAL.str = "extended " } - case 314: + case 312: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1770 +//line sql.y:1771 { yyVAL.str = "" } - case 315: + case 313: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1774 +//line sql.y:1775 { yyVAL.str = "full " } - case 316: + case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1780 +//line sql.y:1781 { yyVAL.str = string(yyDollar[1].bytes) } - case 317: + case 315: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1784 +//line sql.y:1785 { yyVAL.str = string(yyDollar[1].bytes) } - case 318: + case 316: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1790 +//line sql.y:1791 { yyVAL.str = "" } - case 319: + case 317: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1794 +//line sql.y:1795 { yyVAL.str = yyDollar[2].tableIdent.v } - case 320: + case 318: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1798 +//line sql.y:1799 { yyVAL.str = yyDollar[2].tableIdent.v } - case 321: + case 319: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1804 +//line sql.y:1805 { yyVAL.showFilter = nil } - case 322: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1808 +//line sql.y:1809 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 323: + case 321: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1812 +//line sql.y:1813 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 324: + case 322: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1818 +//line sql.y:1819 { yyVAL.showFilter = nil } - case 325: + case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1822 +//line sql.y:1823 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 326: + case 324: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1828 +//line sql.y:1829 { yyVAL.str = "" } - case 327: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1832 +//line sql.y:1833 { yyVAL.str = SessionStr } - case 328: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1836 +//line sql.y:1837 { yyVAL.str = GlobalStr } - case 329: + case 327: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1842 +//line sql.y:1843 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 330: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1846 +//line sql.y:1847 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 331: + case 329: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1852 +//line sql.y:1853 { yyVAL.statement = &Begin{} } - case 332: + case 330: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1856 +//line sql.y:1857 { yyVAL.statement = &Begin{} } - case 333: + case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1862 +//line sql.y:1863 { yyVAL.statement = &Commit{} } - case 334: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1868 +//line sql.y:1869 { yyVAL.statement = &Rollback{} } - case 335: + case 333: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1872 +//line sql.y:1873 { yyVAL.statement = &SRollback{Name: yyDollar[5].colIdent} } - case 336: + case 334: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1877 +//line sql.y:1878 { yyVAL.empty = struct{}{} } - case 337: + case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1879 +//line sql.y:1880 { yyVAL.empty = struct{}{} } - case 338: + case 336: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1882 +//line sql.y:1883 { yyVAL.empty = struct{}{} } - case 339: + case 337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1884 +//line sql.y:1885 { yyVAL.empty = struct{}{} } - case 340: + case 338: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1889 +//line sql.y:1890 { yyVAL.statement = &Savepoint{Name: yyDollar[2].colIdent} } - case 341: + case 339: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1895 +//line sql.y:1896 { yyVAL.statement = &Release{Name: yyDollar[3].colIdent} } - case 342: + case 340: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1900 +//line sql.y:1901 { yyVAL.str = "" } - case 343: + case 341: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1904 +//line sql.y:1905 { yyVAL.str = JSONStr } - case 344: + case 342: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1908 +//line sql.y:1909 { yyVAL.str = TreeStr } - case 345: + case 343: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1912 +//line sql.y:1913 { yyVAL.str = VitessStr } - case 346: + case 344: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1916 +//line sql.y:1917 { yyVAL.str = TraditionalStr } - case 347: + case 345: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1920 +//line sql.y:1921 { yyVAL.str = AnalyzeStr } - case 348: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1926 +//line sql.y:1927 { yyVAL.bytes = yyDollar[1].bytes } - case 349: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1930 +//line sql.y:1931 { yyVAL.bytes = yyDollar[1].bytes } - case 350: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1934 +//line sql.y:1935 { yyVAL.bytes = yyDollar[1].bytes } - case 351: + case 349: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1940 +//line sql.y:1941 { yyVAL.statement = yyDollar[1].selStmt } - case 352: + case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1944 +//line sql.y:1945 { yyVAL.statement = yyDollar[1].statement } - case 353: + case 351: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1948 +//line sql.y:1949 { yyVAL.statement = yyDollar[1].statement } - case 354: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1952 +//line sql.y:1953 { yyVAL.statement = yyDollar[1].statement } - case 355: + case 353: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1957 +//line sql.y:1958 { yyVAL.str = "" } - case 356: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1961 +//line sql.y:1962 { yyVAL.str = "" } - case 357: + case 355: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1965 +//line sql.y:1966 { yyVAL.str = "" } - case 358: + case 356: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1971 +//line sql.y:1972 { yyVAL.statement = &OtherRead{} } - case 359: + case 357: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1975 +//line sql.y:1976 { yyVAL.statement = &Explain{Type: yyDollar[2].str, Statement: yyDollar[3].statement} } - case 360: + case 358: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1981 +//line sql.y:1982 { yyVAL.statement = &OtherAdmin{} } - case 361: + case 359: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1985 +//line sql.y:1986 { yyVAL.statement = &OtherAdmin{} } - case 362: + case 360: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1989 +//line sql.y:1990 { yyVAL.statement = &OtherAdmin{} } - case 363: + case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1993 +//line sql.y:1994 { yyVAL.statement = &OtherAdmin{} } - case 364: + case 362: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1999 +//line sql.y:2000 { yyVAL.statement = &DDL{Action: FlushStr} } - case 365: + case 363: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2003 +//line sql.y:2004 { setAllowComments(yylex, true) } - case 366: + case 364: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2007 +//line sql.y:2008 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 367: + case 365: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2013 +//line sql.y:2014 { yyVAL.bytes2 = nil } - case 368: + case 366: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2017 +//line sql.y:2018 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 369: + case 367: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2023 +//line sql.y:2024 { yyVAL.str = UnionStr } - case 370: + case 368: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2027 +//line sql.y:2028 { yyVAL.str = UnionAllStr } - case 371: + case 369: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2031 +//line sql.y:2032 { yyVAL.str = UnionDistinctStr } - case 372: + case 370: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2036 +//line sql.y:2037 { yyVAL.str = "" } - case 373: + case 371: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2040 +//line sql.y:2041 { yyVAL.str = SQLNoCacheStr } - case 374: + case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2044 +//line sql.y:2045 { yyVAL.str = SQLCacheStr } - case 375: + case 373: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2049 +//line sql.y:2050 { yyVAL.str = "" } - case 376: + case 374: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2053 +//line sql.y:2054 { yyVAL.str = DistinctStr } - case 377: + case 375: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2057 +//line sql.y:2058 { yyVAL.str = DistinctStr } - case 378: + case 376: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2062 +//line sql.y:2063 { yyVAL.selectExprs = nil } - case 379: + case 377: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2066 +//line sql.y:2067 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 380: + case 378: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2071 +//line sql.y:2072 { yyVAL.strs = nil } - case 381: + case 379: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2075 +//line sql.y:2076 { yyVAL.strs = []string{yyDollar[1].str} } - case 382: + case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2079 +//line sql.y:2080 { // TODO: This is a hack since I couldn't get it to work in a nicer way. I got 'conflicts: 8 shift/reduce' yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str} } - case 383: + case 381: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2083 +//line sql.y:2084 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str} } - case 384: + case 382: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2087 +//line sql.y:2088 { yyVAL.strs = []string{yyDollar[1].str, yyDollar[2].str, yyDollar[3].str, yyDollar[4].str} } - case 385: + case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2093 +//line sql.y:2094 { yyVAL.str = SQLNoCacheStr } - case 386: + case 384: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2097 +//line sql.y:2098 { yyVAL.str = SQLCacheStr } - case 387: + case 385: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2101 +//line sql.y:2102 { yyVAL.str = DistinctStr } - case 388: + case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2105 +//line sql.y:2106 { yyVAL.str = DistinctStr } - case 389: + case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2109 +//line sql.y:2110 { yyVAL.str = StraightJoinHint } - case 390: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2113 +//line sql.y:2114 { yyVAL.str = SQLCalcFoundRowsStr } - case 391: + case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2119 +//line sql.y:2120 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 392: + case 390: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2123 +//line sql.y:2124 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 393: + case 391: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2129 +//line sql.y:2130 { yyVAL.selectExpr = &StarExpr{} } - case 394: + case 392: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2133 +//line sql.y:2134 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 395: + case 393: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2137 +//line sql.y:2138 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 396: + case 394: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2141 +//line sql.y:2142 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 397: + case 395: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2146 +//line sql.y:2147 { yyVAL.colIdent = ColIdent{} } - case 398: + case 396: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2150 +//line sql.y:2151 { yyVAL.colIdent = yyDollar[1].colIdent } - case 399: + case 397: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2154 +//line sql.y:2155 { yyVAL.colIdent = yyDollar[2].colIdent } - case 401: + case 399: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2161 +//line sql.y:2162 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 402: + case 400: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2166 +//line sql.y:2167 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 403: + case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2170 +//line sql.y:2171 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 404: + case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2176 +//line sql.y:2177 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 405: + case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2180 +//line sql.y:2181 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 408: + case 406: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2190 +//line sql.y:2191 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 409: + case 407: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2194 +//line sql.y:2195 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 410: + case 408: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2198 +//line sql.y:2199 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 411: + case 409: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2204 +//line sql.y:2205 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 412: + case 410: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2210 +//line sql.y:2211 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 413: + case 411: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2214 +//line sql.y:2215 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 414: + case 412: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2220 +//line sql.y:2221 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 415: + case 413: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2224 +//line sql.y:2225 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 416: + case 414: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2230 +//line sql.y:2231 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 417: + case 415: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2234 +//line sql.y:2235 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 418: + case 416: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2247 +//line sql.y:2248 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 419: + case 417: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2251 +//line sql.y:2252 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 420: + case 418: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2255 +//line sql.y:2256 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 421: + case 419: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2259 +//line sql.y:2260 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 422: + case 420: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2265 +//line sql.y:2266 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 423: + case 421: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2267 +//line sql.y:2268 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 424: + case 422: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2271 +//line sql.y:2272 { yyVAL.joinCondition = JoinCondition{} } - case 425: + case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2273 +//line sql.y:2274 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 426: + case 424: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2277 +//line sql.y:2278 { yyVAL.joinCondition = JoinCondition{} } - case 427: + case 425: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2279 +//line sql.y:2280 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 428: + case 426: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2282 +//line sql.y:2283 { yyVAL.empty = struct{}{} } - case 429: + case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2284 +//line sql.y:2285 { yyVAL.empty = struct{}{} } - case 430: + case 428: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2287 +//line sql.y:2288 { yyVAL.tableIdent = NewTableIdent("") } - case 431: + case 429: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2291 +//line sql.y:2292 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 432: + case 430: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2295 +//line sql.y:2296 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 434: + case 432: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2302 +//line sql.y:2303 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 435: + case 433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2308 +//line sql.y:2309 { yyVAL.str = JoinStr } - case 436: + case 434: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2312 +//line sql.y:2313 { yyVAL.str = JoinStr } - case 437: + case 435: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2316 +//line sql.y:2317 { yyVAL.str = JoinStr } - case 438: + case 436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2322 +//line sql.y:2323 { yyVAL.str = StraightJoinStr } - case 439: + case 437: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2328 +//line sql.y:2329 { yyVAL.str = LeftJoinStr } - case 440: + case 438: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2332 +//line sql.y:2333 { yyVAL.str = LeftJoinStr } - case 441: + case 439: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2336 +//line sql.y:2337 { yyVAL.str = RightJoinStr } - case 442: + case 440: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2340 +//line sql.y:2341 { yyVAL.str = RightJoinStr } - case 443: + case 441: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2346 +//line sql.y:2347 { yyVAL.str = NaturalJoinStr } - case 444: + case 442: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2350 +//line sql.y:2351 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -6579,489 +6343,489 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 445: + case 443: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2360 +//line sql.y:2361 { yyVAL.tableName = yyDollar[2].tableName } - case 446: + case 444: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2364 +//line sql.y:2365 { yyVAL.tableName = yyDollar[1].tableName } - case 447: + case 445: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2370 +//line sql.y:2371 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 448: + case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2374 +//line sql.y:2375 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 449: + case 447: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2380 +//line sql.y:2381 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 450: + case 448: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2385 +//line sql.y:2386 { yyVAL.indexHints = nil } - case 451: + case 449: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2389 +//line sql.y:2390 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 452: + case 450: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2393 +//line sql.y:2394 { yyVAL.indexHints = &IndexHints{Type: UseStr} } - case 453: + case 451: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2397 +//line sql.y:2398 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 454: + case 452: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2401 +//line sql.y:2402 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 455: + case 453: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2406 +//line sql.y:2407 { yyVAL.expr = nil } - case 456: + case 454: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2410 +//line sql.y:2411 { yyVAL.expr = yyDollar[2].expr } - case 457: + case 455: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2416 +//line sql.y:2417 { yyVAL.expr = yyDollar[1].expr } - case 458: + case 456: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2420 +//line sql.y:2421 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 459: + case 457: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2424 +//line sql.y:2425 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 460: + case 458: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2428 +//line sql.y:2429 { yyVAL.expr = &XorExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 461: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2432 +//line sql.y:2433 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 462: + case 460: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2436 +//line sql.y:2437 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 463: + case 461: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2440 +//line sql.y:2441 { yyVAL.expr = yyDollar[1].expr } - case 464: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2444 +//line sql.y:2445 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 465: + case 463: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2450 +//line sql.y:2451 { yyVAL.str = "" } - case 466: + case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2454 +//line sql.y:2455 { yyVAL.str = string(yyDollar[2].colIdent.String()) } - case 467: + case 465: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2460 +//line sql.y:2461 { yyVAL.boolVal = BoolVal(true) } - case 468: + case 466: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2464 +//line sql.y:2465 { yyVAL.boolVal = BoolVal(false) } - case 469: + case 467: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2470 +//line sql.y:2471 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 470: + case 468: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2474 +//line sql.y:2475 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 471: + case 469: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2478 +//line sql.y:2479 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 472: + case 470: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2482 +//line sql.y:2483 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 473: + case 471: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2486 +//line sql.y:2487 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 474: + case 472: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2490 +//line sql.y:2491 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 475: + case 473: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2494 +//line sql.y:2495 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 476: + case 474: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2498 +//line sql.y:2499 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 477: + case 475: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2502 +//line sql.y:2503 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 478: + case 476: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2506 +//line sql.y:2507 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 479: + case 477: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2512 +//line sql.y:2513 { yyVAL.str = IsNullStr } - case 480: + case 478: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2516 +//line sql.y:2517 { yyVAL.str = IsNotNullStr } - case 481: + case 479: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2520 +//line sql.y:2521 { yyVAL.str = IsTrueStr } - case 482: + case 480: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2524 +//line sql.y:2525 { yyVAL.str = IsNotTrueStr } - case 483: + case 481: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2528 +//line sql.y:2529 { yyVAL.str = IsFalseStr } - case 484: + case 482: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2532 +//line sql.y:2533 { yyVAL.str = IsNotFalseStr } - case 485: + case 483: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2538 +//line sql.y:2539 { yyVAL.str = EqualStr } - case 486: + case 484: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2542 +//line sql.y:2543 { yyVAL.str = LessThanStr } - case 487: + case 485: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2546 +//line sql.y:2547 { yyVAL.str = GreaterThanStr } - case 488: + case 486: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2550 +//line sql.y:2551 { yyVAL.str = LessEqualStr } - case 489: + case 487: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2554 +//line sql.y:2555 { yyVAL.str = GreaterEqualStr } - case 490: + case 488: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2558 +//line sql.y:2559 { yyVAL.str = NotEqualStr } - case 491: + case 489: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2562 +//line sql.y:2563 { yyVAL.str = NullSafeEqualStr } - case 492: + case 490: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2567 +//line sql.y:2568 { yyVAL.expr = nil } - case 493: + case 491: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2571 +//line sql.y:2572 { yyVAL.expr = yyDollar[2].expr } - case 494: + case 492: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2577 +//line sql.y:2578 { yyVAL.colTuple = yyDollar[1].valTuple } - case 495: + case 493: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2581 +//line sql.y:2582 { yyVAL.colTuple = yyDollar[1].subquery } - case 496: + case 494: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2585 +//line sql.y:2586 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 497: + case 495: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2591 +//line sql.y:2592 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 498: + case 496: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2597 +//line sql.y:2598 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 499: + case 497: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2601 +//line sql.y:2602 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 500: + case 498: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2607 +//line sql.y:2608 { yyVAL.expr = yyDollar[1].expr } - case 501: + case 499: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2611 +//line sql.y:2612 { yyVAL.expr = yyDollar[1].boolVal } - case 502: + case 500: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2615 +//line sql.y:2616 { yyVAL.expr = yyDollar[1].colName } - case 503: + case 501: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2619 +//line sql.y:2620 { yyVAL.expr = yyDollar[1].expr } - case 504: + case 502: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2623 +//line sql.y:2624 { yyVAL.expr = yyDollar[1].subquery } - case 505: + case 503: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2627 +//line sql.y:2628 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 506: + case 504: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2631 +//line sql.y:2632 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 507: + case 505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2635 +//line sql.y:2636 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 508: + case 506: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2639 +//line sql.y:2640 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 509: + case 507: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2643 +//line sql.y:2644 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 510: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2647 +//line sql.y:2648 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 511: + case 509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2651 +//line sql.y:2652 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 512: + case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2655 +//line sql.y:2656 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 513: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2659 +//line sql.y:2660 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 514: + case 512: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2663 +//line sql.y:2664 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 515: + case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2667 +//line sql.y:2668 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 516: + case 514: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2671 +//line sql.y:2672 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 517: + case 515: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2675 +//line sql.y:2676 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 518: + case 516: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2679 +//line sql.y:2680 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 519: + case 517: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2683 +//line sql.y:2684 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 520: + case 518: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2687 +//line sql.y:2688 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 521: + case 519: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2691 +//line sql.y:2692 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 522: + case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2695 +//line sql.y:2696 { yyVAL.expr = &UnaryExpr{Operator: Utf8Str, Expr: yyDollar[2].expr} } - case 523: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2699 +//line sql.y:2700 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } - case 524: + case 522: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2703 +//line sql.y:2704 { yyVAL.expr = &UnaryExpr{Operator: Latin1Str, Expr: yyDollar[2].expr} } - case 525: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2707 +//line sql.y:2708 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -7069,9 +6833,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 526: + case 524: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2715 +//line sql.y:2716 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -7085,21 +6849,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 527: + case 525: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2729 +//line sql.y:2730 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 528: + case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2733 +//line sql.y:2734 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 529: + case 527: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2737 +//line sql.y:2738 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -7107,497 +6871,497 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 534: + case 532: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2755 +//line sql.y:2756 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 535: + case 533: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2759 +//line sql.y:2760 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 536: + case 534: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2763 +//line sql.y:2764 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 537: + case 535: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2767 +//line sql.y:2768 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 538: + case 536: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2777 +//line sql.y:2778 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 539: + case 537: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2781 +//line sql.y:2782 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 540: + case 538: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2785 +//line sql.y:2786 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 541: + case 539: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2789 +//line sql.y:2790 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 542: + case 540: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2793 +//line sql.y:2794 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 543: + case 541: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2797 +//line sql.y:2798 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 544: + case 542: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2801 +//line sql.y:2802 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 545: + case 543: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2805 +//line sql.y:2806 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 546: + case 544: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2809 +//line sql.y:2810 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 547: + case 545: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2813 +//line sql.y:2814 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 548: + case 546: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2817 +//line sql.y:2818 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str, Limit: yyDollar[7].limit} } - case 549: + case 547: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2821 +//line sql.y:2822 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 550: + case 548: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2825 +//line sql.y:2826 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 551: + case 549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2835 +//line sql.y:2836 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 552: + case 550: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2839 +//line sql.y:2840 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 553: + case 551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2843 +//line sql.y:2844 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 554: + case 552: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2848 +//line sql.y:2849 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 555: + case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2853 +//line sql.y:2854 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 556: + case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2858 +//line sql.y:2859 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 557: + case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2864 +//line sql.y:2865 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 558: + case 556: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2869 +//line sql.y:2870 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 559: + case 557: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2874 +//line sql.y:2875 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_timestamp"), Fsp: yyDollar[2].expr} } - case 560: + case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2878 +//line sql.y:2879 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_timestamp"), Fsp: yyDollar[2].expr} } - case 561: + case 559: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2882 +//line sql.y:2883 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("utc_time"), Fsp: yyDollar[2].expr} } - case 562: + case 560: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2887 +//line sql.y:2888 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtime"), Fsp: yyDollar[2].expr} } - case 563: + case 561: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2892 +//line sql.y:2893 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("localtimestamp"), Fsp: yyDollar[2].expr} } - case 564: + case 562: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2897 +//line sql.y:2898 { yyVAL.expr = &CurTimeFuncExpr{Name: NewColIdent("current_time"), Fsp: yyDollar[2].expr} } - case 565: + case 563: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2901 +//line sql.y:2902 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampadd"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 566: + case 564: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2905 +//line sql.y:2906 { yyVAL.expr = &TimestampFuncExpr{Name: string("timestampdiff"), Unit: yyDollar[3].colIdent.String(), Expr1: yyDollar[5].expr, Expr2: yyDollar[7].expr} } - case 569: + case 567: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2915 +//line sql.y:2916 { yyVAL.expr = yyDollar[2].expr } - case 570: + case 568: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2925 +//line sql.y:2926 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 571: + case 569: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2929 +//line sql.y:2930 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 572: + case 570: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2933 +//line sql.y:2934 { yyVAL.expr = &FuncExpr{Name: NewColIdent("schema"), Exprs: yyDollar[3].selectExprs} } - case 573: + case 571: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2937 +//line sql.y:2938 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 574: + case 572: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2941 +//line sql.y:2942 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 575: + case 573: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2945 +//line sql.y:2946 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 576: + case 574: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2949 +//line sql.y:2950 { yyVAL.expr = &FuncExpr{Name: NewColIdent("substr"), Exprs: yyDollar[3].selectExprs} } - case 577: + case 575: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2955 +//line sql.y:2956 { yyVAL.str = "" } - case 578: + case 576: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2959 +//line sql.y:2960 { yyVAL.str = BooleanModeStr } - case 579: + case 577: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2963 +//line sql.y:2964 { yyVAL.str = NaturalLanguageModeStr } - case 580: + case 578: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2967 +//line sql.y:2968 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 581: + case 579: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2971 +//line sql.y:2972 { yyVAL.str = QueryExpansionStr } - case 582: + case 580: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2977 +//line sql.y:2978 { yyVAL.str = string(yyDollar[1].colIdent.String()) } - case 583: + case 581: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2981 +//line sql.y:2982 { yyVAL.str = string(yyDollar[1].bytes) } - case 584: + case 582: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2987 +//line sql.y:2988 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 585: + case 583: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2991 +//line sql.y:2992 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 586: + case 584: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2995 +//line sql.y:2996 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal, Charset: string(yyDollar[3].colIdent.String())} } - case 587: + case 585: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2999 +//line sql.y:3000 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 588: + case 586: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3003 +//line sql.y:3004 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 589: + case 587: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3007 +//line sql.y:3008 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 590: + case 588: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3013 +//line sql.y:3014 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 591: + case 589: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3017 +//line sql.y:3018 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 592: + case 590: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3021 +//line sql.y:3022 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 593: + case 591: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3025 +//line sql.y:3026 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 594: + case 592: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3029 +//line sql.y:3030 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].sqlVal} } - case 595: + case 593: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3033 +//line sql.y:3034 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 596: + case 594: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3037 +//line sql.y:3038 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 597: + case 595: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3042 +//line sql.y:3043 { yyVAL.expr = nil } - case 598: + case 596: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3046 +//line sql.y:3047 { yyVAL.expr = yyDollar[1].expr } - case 599: + case 597: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3051 +//line sql.y:3052 { yyVAL.str = string("") } - case 600: + case 598: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3055 +//line sql.y:3056 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 601: + case 599: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3061 +//line sql.y:3062 { yyVAL.whens = []*When{yyDollar[1].when} } - case 602: + case 600: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3065 +//line sql.y:3066 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 603: + case 601: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3071 +//line sql.y:3072 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 604: + case 602: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3076 +//line sql.y:3077 { yyVAL.expr = nil } - case 605: + case 603: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3080 +//line sql.y:3081 { yyVAL.expr = yyDollar[2].expr } - case 606: + case 604: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3086 +//line sql.y:3087 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 607: + case 605: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3090 +//line sql.y:3091 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 608: + case 606: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3094 +//line sql.y:3095 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 609: + case 607: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3100 +//line sql.y:3101 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 610: + case 608: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3104 +//line sql.y:3105 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 611: + case 609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3108 +//line sql.y:3109 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 612: + case 610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3112 +//line sql.y:3113 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 613: + case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3116 +//line sql.y:3117 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 614: + case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3120 +//line sql.y:3121 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 615: + case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3124 +//line sql.y:3125 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 616: + case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3128 +//line sql.y:3129 { yyVAL.expr = &NullVal{} } - case 617: + case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3134 +//line sql.y:3135 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -7606,225 +7370,225 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 618: + case 616: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3143 +//line sql.y:3144 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 619: + case 617: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3147 +//line sql.y:3148 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 620: + case 618: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3152 +//line sql.y:3153 { yyVAL.exprs = nil } - case 621: + case 619: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3156 +//line sql.y:3157 { yyVAL.exprs = yyDollar[3].exprs } - case 622: + case 620: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3161 +//line sql.y:3162 { yyVAL.expr = nil } - case 623: + case 621: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3165 +//line sql.y:3166 { yyVAL.expr = yyDollar[2].expr } - case 624: + case 622: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3170 +//line sql.y:3171 { yyVAL.orderBy = nil } - case 625: + case 623: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3174 +//line sql.y:3175 { yyVAL.orderBy = yyDollar[3].orderBy } - case 626: + case 624: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3180 +//line sql.y:3181 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 627: + case 625: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3184 +//line sql.y:3185 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 628: + case 626: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3190 +//line sql.y:3191 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 629: + case 627: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3195 +//line sql.y:3196 { yyVAL.str = AscScr } - case 630: + case 628: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3199 +//line sql.y:3200 { yyVAL.str = AscScr } - case 631: + case 629: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3203 +//line sql.y:3204 { yyVAL.str = DescScr } - case 632: + case 630: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3208 +//line sql.y:3209 { yyVAL.limit = nil } - case 633: + case 631: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3212 +//line sql.y:3213 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 634: + case 632: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3216 +//line sql.y:3217 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 635: + case 633: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3220 +//line sql.y:3221 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 636: + case 634: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3225 +//line sql.y:3226 { yyVAL.str = "" } - case 637: + case 635: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3229 +//line sql.y:3230 { yyVAL.str = ForUpdateStr } - case 638: + case 636: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3233 +//line sql.y:3234 { yyVAL.str = ShareModeStr } - case 639: + case 637: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3246 +//line sql.y:3247 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 640: + case 638: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3250 +//line sql.y:3251 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 641: + case 639: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3254 +//line sql.y:3255 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 642: + case 640: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3258 +//line sql.y:3259 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 643: + case 641: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3264 +//line sql.y:3265 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 644: + case 642: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3268 +//line sql.y:3269 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 645: + case 643: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3272 +//line sql.y:3273 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 646: + case 644: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3276 +//line sql.y:3277 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 647: + case 645: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3281 +//line sql.y:3282 { yyVAL.updateExprs = nil } - case 648: + case 646: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3285 +//line sql.y:3286 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 649: + case 647: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3291 +//line sql.y:3292 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 650: + case 648: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3295 +//line sql.y:3296 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 651: + case 649: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3301 +//line sql.y:3302 { yyVAL.valTuple = yyDollar[1].valTuple } - case 652: + case 650: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3305 +//line sql.y:3306 { yyVAL.valTuple = ValTuple{} } - case 653: + case 651: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3311 +//line sql.y:3312 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 654: + case 652: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3317 +//line sql.y:3318 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = yyDollar[1].valTuple[0] @@ -7832,319 +7596,319 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 655: + case 653: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3327 +//line sql.y:3328 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 656: + case 654: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3331 +//line sql.y:3332 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 657: + case 655: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3337 +//line sql.y:3338 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 658: + case 656: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3343 +//line sql.y:3344 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 659: + case 657: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:3348 + { + yyDollar[2].setExpr.Scope = yyDollar[1].str + yyVAL.setExprs = SetExprs{yyDollar[2].setExpr} + } + case 658: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3347 +//line sql.y:3353 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 660: + case 659: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3353 +//line sql.y:3359 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 661: + case 660: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3357 +//line sql.y:3363 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 662: + case 661: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3361 +//line sql.y:3367 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 663: + case 662: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3365 +//line sql.y:3371 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } case 664: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3369 - { - yyDollar[2].setExpr.Scope = yyDollar[1].str - yyVAL.setExpr = yyDollar[2].setExpr - } - case 666: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3377 +//line sql.y:3378 { yyVAL.bytes = []byte("charset") } - case 668: + case 666: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3384 +//line sql.y:3385 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 669: + case 667: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3388 +//line sql.y:3389 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 670: + case 668: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3392 +//line sql.y:3393 { yyVAL.expr = &Default{} } + case 671: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3402 + { + yyVAL.byt = 0 + } + case 672: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:3404 + { + yyVAL.byt = 1 + } case 673: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3401 +//line sql.y:3407 { yyVAL.empty = struct{}{} } case 674: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3403 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:3409 { yyVAL.empty = struct{}{} } case 675: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3406 +//line sql.y:3412 { yyVAL.str = "" } case 676: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3408 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3414 { yyVAL.str = IgnoreStr } case 677: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3411 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3418 { yyVAL.empty = struct{}{} } case 678: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3413 +//line sql.y:3420 { yyVAL.empty = struct{}{} } case 679: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3417 +//line sql.y:3422 { yyVAL.empty = struct{}{} } case 680: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3419 +//line sql.y:3424 { yyVAL.empty = struct{}{} } case 681: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3421 +//line sql.y:3426 { yyVAL.empty = struct{}{} } case 682: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3423 +//line sql.y:3428 { yyVAL.empty = struct{}{} } case 683: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3425 +//line sql.y:3430 { yyVAL.empty = struct{}{} } case 684: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3427 +//line sql.y:3432 { yyVAL.empty = struct{}{} } case 685: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3429 +//line sql.y:3434 { yyVAL.empty = struct{}{} } case 686: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3431 +//line sql.y:3436 { yyVAL.empty = struct{}{} } case 687: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3433 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3439 { yyVAL.empty = struct{}{} } case 688: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3435 +//line sql.y:3441 { yyVAL.empty = struct{}{} } case 689: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3438 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3443 { yyVAL.empty = struct{}{} } case 690: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3440 +//line sql.y:3447 { yyVAL.empty = struct{}{} } case 691: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3442 +//line sql.y:3449 { yyVAL.empty = struct{}{} } case 692: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3446 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3452 { yyVAL.empty = struct{}{} } case 693: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3448 +//line sql.y:3454 { yyVAL.empty = struct{}{} } case 694: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3451 - { - yyVAL.empty = struct{}{} - } - case 695: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3453 - { - yyVAL.empty = struct{}{} - } - case 696: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3455 +//line sql.y:3456 { yyVAL.empty = struct{}{} } - case 697: + case 695: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3458 +//line sql.y:3459 { yyVAL.colIdent = ColIdent{} } - case 698: + case 696: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3460 +//line sql.y:3461 { yyVAL.colIdent = yyDollar[2].colIdent } - case 699: + case 697: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3464 +//line sql.y:3465 { yyVAL.colIdent = yyDollar[1].colIdent } - case 700: + case 698: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3468 +//line sql.y:3469 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 702: + case 700: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3475 +//line sql.y:3476 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 703: + case 701: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3481 +//line sql.y:3482 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].colIdent.String())) } - case 704: + case 702: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3485 +//line sql.y:3486 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 706: + case 704: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3492 +//line sql.y:3493 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 1005: + case 1003: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3816 +//line sql.y:3817 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 1006: + case 1004: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3825 +//line sql.y:3826 { decNesting(yylex) } - case 1007: + case 1005: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3830 +//line sql.y:3831 { skipToEnd(yylex) } - case 1008: + case 1006: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3835 +//line sql.y:3836 { skipToEnd(yylex) } - case 1009: + case 1007: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3839 +//line sql.y:3840 { skipToEnd(yylex) } - case 1010: + case 1008: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3843 +//line sql.y:3844 { skipToEnd(yylex) } diff --git a/go/vt/vtgate/vcursor_impl_test.go b/go/vt/vtgate/vcursor_impl_test.go index dd956f6b517..7523ff79440 100644 --- a/go/vt/vtgate/vcursor_impl_test.go +++ b/go/vt/vtgate/vcursor_impl_test.go @@ -3,6 +3,7 @@ package vtgate import ( "context" "encoding/hex" + "fmt" "testing" "vitess.io/vitess/go/vt/proto/vschema" @@ -237,7 +238,7 @@ func TestSetTarget(t *testing.T) { }} for i, tc := range tests { - t.Run(string(i)+"#"+tc.targetString, func(t *testing.T) { + t.Run(fmt.Sprint(i)+"#"+tc.targetString, func(t *testing.T) { vc, _ := newVCursorImpl(context.Background(), NewSafeSession(&vtgatepb.Session{InTransaction: true}), sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, nil) vc.vschema = tc.vschema err := vc.SetTarget(tc.targetString) @@ -277,7 +278,7 @@ func TestPlanPrefixKey(t *testing.T) { }} for i, tc := range tests { - t.Run(string(i)+"#"+tc.targetString, func(t *testing.T) { + t.Run(fmt.Sprint(i)+"#"+tc.targetString, func(t *testing.T) { ss := NewSafeSession(&vtgatepb.Session{InTransaction: false}) ss.SetTargetString(tc.targetString) vc, err := newVCursorImpl(context.Background(), ss, sqlparser.MarginComments{}, nil, nil, &fakeVSchemaOperator{vschema: tc.vschema}, tc.vschema, srvtopo.NewResolver(&fakeTopoServer{}, nil, "")) From 3d2ed673fc9c00814d97fc73791c73c7c3e51a24 Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 30 Sep 2020 14:43:26 -0700 Subject: [PATCH 13/15] tm: call SetReadOnly inside ChangeTabletType so that a tablet doesn't advertise itself as MASTER while mysql is still read_only Signed-off-by: deepthi --- go/vt/vttablet/tabletmanager/restore.go | 6 +++--- go/vt/vttablet/tabletmanager/rpc_actions.go | 16 ++++++++++++--- go/vt/vttablet/tabletmanager/rpc_backup.go | 4 ++-- .../vttablet/tabletmanager/rpc_replication.go | 20 +++++-------------- go/vt/vttablet/tabletmanager/tm_state.go | 9 ++++++++- go/vt/vttablet/tabletmanager/tm_state_test.go | 4 ++-- 6 files changed, 33 insertions(+), 26 deletions(-) diff --git a/go/vt/vttablet/tabletmanager/restore.go b/go/vt/vttablet/tabletmanager/restore.go index 078b49674dc..20bc4524956 100644 --- a/go/vt/vttablet/tabletmanager/restore.go +++ b/go/vt/vttablet/tabletmanager/restore.go @@ -129,7 +129,7 @@ func (tm *TabletManager) restoreDataLocked(ctx context.Context, logger logutil.L if originalType == topodatapb.TabletType_MASTER { originalType = tm.baseTabletType } - if err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_RESTORE); err != nil { + if err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_RESTORE, DBActionNone); err != nil { return err } // Loop until a backup exists, unless we were told to give up immediately. @@ -178,7 +178,7 @@ func (tm *TabletManager) restoreDataLocked(ctx context.Context, logger logutil.L // No-op, starting with empty database. default: // If anything failed, we should reset the original tablet type - if err := tm.tmState.ChangeTabletType(ctx, originalType); err != nil { + if err := tm.tmState.ChangeTabletType(ctx, originalType, DBActionNone); err != nil { log.Errorf("Could not change back to original tablet type %v: %v", originalType, err) } return vterrors.Wrap(err, "Can't restore backup") @@ -194,7 +194,7 @@ func (tm *TabletManager) restoreDataLocked(ctx context.Context, logger logutil.L } // Change type back to original type if we're ok to serve. - return tm.tmState.ChangeTabletType(ctx, originalType) + return tm.tmState.ChangeTabletType(ctx, originalType, DBActionNone) } // restoreToTimeFromBinlog restores to the snapshot time of the keyspace diff --git a/go/vt/vttablet/tabletmanager/rpc_actions.go b/go/vt/vttablet/tabletmanager/rpc_actions.go index 0992d63b4cf..f6eba93f651 100644 --- a/go/vt/vttablet/tabletmanager/rpc_actions.go +++ b/go/vt/vttablet/tabletmanager/rpc_actions.go @@ -33,6 +33,16 @@ import ( vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) +// DBAction is used to tell ChangeTabletType whether to call SetReadOnly on change to +// MASTER tablet type +type DBAction int + +// Allowed values for DBAction +const ( + DBActionNone = DBAction(iota) + DBActionSetReadWrite +) + // This file contains the implementations of RPCTM methods. // Major groups of methods are broken out into files named "rpc_*.go". @@ -62,11 +72,11 @@ func (tm *TabletManager) ChangeType(ctx context.Context, tabletType topodatapb.T return err } defer tm.unlock() - return tm.changeTypeLocked(ctx, tabletType) + return tm.changeTypeLocked(ctx, tabletType, DBActionNone) } // ChangeType changes the tablet type -func (tm *TabletManager) changeTypeLocked(ctx context.Context, tabletType topodatapb.TabletType) error { +func (tm *TabletManager) changeTypeLocked(ctx context.Context, tabletType topodatapb.TabletType, action DBAction) error { // We don't want to allow multiple callers to claim a tablet as drained. There is a race that could happen during // horizontal resharding where two vtworkers will try to DRAIN the same tablet. This check prevents that race from // causing errors. @@ -74,7 +84,7 @@ func (tm *TabletManager) changeTypeLocked(ctx context.Context, tabletType topoda return fmt.Errorf("Tablet: %v, is already drained", tm.tabletAlias) } - if err := tm.tmState.ChangeTabletType(ctx, tabletType); err != nil { + if err := tm.tmState.ChangeTabletType(ctx, tabletType, action); err != nil { return err } diff --git a/go/vt/vttablet/tabletmanager/rpc_backup.go b/go/vt/vttablet/tabletmanager/rpc_backup.go index cbb5f179f61..b5666672402 100644 --- a/go/vt/vttablet/tabletmanager/rpc_backup.go +++ b/go/vt/vttablet/tabletmanager/rpc_backup.go @@ -84,7 +84,7 @@ func (tm *TabletManager) Backup(ctx context.Context, concurrency int, logger log } originalType = tablet.Type // update our type to BACKUP - if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_BACKUP); err != nil { + if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_BACKUP, DBActionNone); err != nil { return err } } @@ -115,7 +115,7 @@ func (tm *TabletManager) Backup(ctx context.Context, concurrency int, logger log // Change our type back to the original value. // Original type could be master so pass in a real value for masterTermStartTime - if err := tm.changeTypeLocked(bgCtx, originalType); err != nil { + if err := tm.changeTypeLocked(bgCtx, originalType, DBActionNone); err != nil { // failure in changing the topology type is probably worse, // so returning that (we logged the snapshot error anyway) if returnErr != nil { diff --git a/go/vt/vttablet/tabletmanager/rpc_replication.go b/go/vt/vttablet/tabletmanager/rpc_replication.go index 1db7e7dccde..40e7a499995 100644 --- a/go/vt/vttablet/tabletmanager/rpc_replication.go +++ b/go/vt/vttablet/tabletmanager/rpc_replication.go @@ -249,11 +249,7 @@ func (tm *TabletManager) InitMaster(ctx context.Context) (string, error) { // Set the server read-write, from now on we can accept real // client writes. Note that if semi-sync replication is enabled, // we'll still need some replicas to be able to commit transactions. - if err := tm.MysqlDaemon.SetReadOnly(false); err != nil { - return "", err - } - - if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_MASTER); err != nil { + if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_MASTER, DBActionSetReadWrite); err != nil { return "", err } return mysql.EncodePosition(pos), nil @@ -283,7 +279,7 @@ func (tm *TabletManager) InitReplica(ctx context.Context, parent *topodatapb.Tab // is used on the old master when using InitShardMaster with // -force, and the new master is different from the old master. if tm.Tablet().Type == topodatapb.TabletType_MASTER { - if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_REPLICA); err != nil { + if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_REPLICA, DBActionNone); err != nil { return err } } @@ -522,7 +518,7 @@ func (tm *TabletManager) setMasterLocked(ctx context.Context, parentAlias *topod // unintentionally change the type of RDONLY tablets tablet := tm.Tablet() if tablet.Type == topodatapb.TabletType_MASTER { - if err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA); err != nil { + if err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA, DBActionNone); err != nil { return err } } @@ -624,7 +620,7 @@ func (tm *TabletManager) ReplicaWasRestarted(ctx context.Context, parent *topoda if tablet.Type != topodatapb.TabletType_MASTER { return nil } - return tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA) + return tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA, DBActionNone) } // StopReplicationAndGetStatus stops MySQL replication, and returns the @@ -735,13 +731,7 @@ func (tm *TabletManager) PromoteReplica(ctx context.Context) (string, error) { return "", err } - if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_MASTER); err != nil { - return "", err - } - - // We call SetReadOnly only after the topo has been updated to avoid - // situations where two tablets are master at the DB level but not at the vitess level - if err := tm.MysqlDaemon.SetReadOnly(false); err != nil { + if err := tm.changeTypeLocked(ctx, topodatapb.TabletType_MASTER, DBActionSetReadWrite); err != nil { return "", err } diff --git a/go/vt/vttablet/tabletmanager/tm_state.go b/go/vt/vttablet/tabletmanager/tm_state.go index fad4a8b9048..68ba9235c49 100644 --- a/go/vt/vttablet/tabletmanager/tm_state.go +++ b/go/vt/vttablet/tabletmanager/tm_state.go @@ -150,7 +150,7 @@ func (ts *tmState) RefreshFromTopoInfo(ctx context.Context, shardInfo *topo.Shar ts.updateLocked(ctx) } -func (ts *tmState) ChangeTabletType(ctx context.Context, tabletType topodatapb.TabletType) error { +func (ts *tmState) ChangeTabletType(ctx context.Context, tabletType topodatapb.TabletType, action DBAction) error { ts.mu.Lock() defer ts.mu.Unlock() log.Infof("Changing Tablet Type: %v", tabletType) @@ -163,6 +163,13 @@ func (ts *tmState) ChangeTabletType(ctx context.Context, tabletType topodatapb.T if err != nil { return err } + if action == DBActionSetReadWrite { + // We call SetReadOnly only after the topo has been updated to avoid + // situations where two tablets are master at the DB level but not at the vitess level + if err := ts.tm.MysqlDaemon.SetReadOnly(false); err != nil { + return err + } + } ts.tablet.Type = tabletType ts.tablet.MasterTermStartTime = masterTermStartTime diff --git a/go/vt/vttablet/tabletmanager/tm_state_test.go b/go/vt/vttablet/tabletmanager/tm_state_test.go index 680fa41e08d..4de8c87d557 100644 --- a/go/vt/vttablet/tabletmanager/tm_state_test.go +++ b/go/vt/vttablet/tabletmanager/tm_state_test.go @@ -176,14 +176,14 @@ func TestStateChangeTabletType(t *testing.T) { Uid: 2, } - err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_MASTER) + err := tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_MASTER, DBActionSetReadWrite) require.NoError(t, err) ti, err := ts.GetTablet(ctx, alias) require.NoError(t, err) assert.Equal(t, topodatapb.TabletType_MASTER, ti.Type) assert.NotNil(t, ti.MasterTermStartTime) - err = tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA) + err = tm.tmState.ChangeTabletType(ctx, topodatapb.TabletType_REPLICA, DBActionNone) require.NoError(t, err) ti, err = ts.GetTablet(ctx, alias) require.NoError(t, err) From 9c14b62c59b9ea5e91e3718acfede49a026a758c Mon Sep 17 00:00:00 2001 From: Andres Taylor Date: Tue, 22 Sep 2020 15:20:35 +0200 Subject: [PATCH 14/15] Merge pull request #6766 from GuptaManan100/warning-for-context Replaced Error with a warning in case parsing of VT_SPAN_CONTEXT fails --- go/vt/vtgate/plugin_mysql_server.go | 23 ++++++++++++++--------- go/vt/vtgate/plugin_mysql_server_test.go | 19 +++++++++++++++++++ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index ded421e99b7..260d04b8493 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -147,20 +147,25 @@ func startSpanTestable(ctx context.Context, query, label string, newSpanFromString func(context.Context, string, string) (trace.Span, context.Context, error)) (trace.Span, context.Context, error) { _, comments := sqlparser.SplitMarginComments(query) match := r.FindStringSubmatch(comments.Leading) + span, ctx := getSpan(ctx, match, newSpan, label, newSpanFromString) + + trace.AnnotateSQL(span, query) + + return span, ctx, nil +} + +func getSpan(ctx context.Context, match []string, newSpan func(context.Context, string) (trace.Span, context.Context), label string, newSpanFromString func(context.Context, string, string) (trace.Span, context.Context, error)) (trace.Span, context.Context) { var span trace.Span - if len(match) == 0 { - span, ctx = newSpan(ctx, label) - } else { + if len(match) != 0 { var err error span, ctx, err = newSpanFromString(ctx, match[1], label) - if err != nil { - return nil, nil, err + if err == nil { + return span, ctx } + log.Warningf("Unable to parse VT_SPAN_CONTEXT: %s", err.Error()) } - - trace.AnnotateSQL(span, query) - - return span, ctx, nil + span, ctx = newSpan(ctx, label) + return span, ctx } func startSpan(ctx context.Context, query, label string) (trace.Span, context.Context, error) { diff --git a/go/vt/vtgate/plugin_mysql_server_test.go b/go/vt/vtgate/plugin_mysql_server_test.go index 711b1ff861b..eebec610326 100644 --- a/go/vt/vtgate/plugin_mysql_server_test.go +++ b/go/vt/vtgate/plugin_mysql_server_test.go @@ -17,6 +17,7 @@ limitations under the License. package vtgate import ( + "fmt" "io/ioutil" "os" "path" @@ -170,6 +171,12 @@ func newFromStringFail(t *testing.T) func(ctx context.Context, parentSpan string } } +func newFromStringError(t *testing.T) func(ctx context.Context, parentSpan string, label string) (trace.Span, context.Context, error) { + return func(ctx context.Context, parentSpan string, label string) (trace.Span, context.Context, error) { + return trace.NoopSpan{}, context.Background(), fmt.Errorf("") + } +} + func newFromStringExpect(t *testing.T, expected string) func(ctx context.Context, parentSpan string, label string) (trace.Span, context.Context, error) { return func(ctx context.Context, parentSpan string, label string) (trace.Span, context.Context, error) { assert.Equal(t, expected, parentSpan) @@ -206,6 +213,18 @@ func TestSpanContextPassedInEvenAroundOtherComments(t *testing.T) { assert.NoError(t, err) } +func TestSpanContextNotParsable(t *testing.T) { + hasRun := false + _, _, err := startSpanTestable(context.Background(), "/*VT_SPAN_CONTEXT=123*/SQL QUERY", "someLabel", + func(c context.Context, s string) (trace.Span, context.Context) { + hasRun = true + return trace.NoopSpan{}, context.Background() + }, + newFromStringError(t)) + assert.NoError(t, err) + assert.True(t, hasRun, "Should have continued execution despite failure to parse VT_SPAN_CONTEXT") +} + func newTestAuthServerStatic() *mysql.AuthServerStatic { jsonConfig := "{\"user1\":{\"Password\":\"password1\", \"UserData\":\"userData1\", \"SourceHost\":\"localhost\"}}" return mysql.NewAuthServerStatic("", jsonConfig, 0) From b8901b98f20c7c5ee18fa50040218b495fe53d7f Mon Sep 17 00:00:00 2001 From: Deepthi Sigireddi Date: Thu, 17 Sep 2020 19:55:19 -0700 Subject: [PATCH 15/15] Merge pull request #6721 from tinyspeck/fixes-long-wait-filter-keyspace-upstream Fixes long wait filter keyspace --- go/vt/discovery/healthcheck.go | 27 ++++++ go/vt/discovery/healthcheck_test.go | 89 +++++++++++++++++++ .../legacy_tablet_stats_cache_wait.go | 6 ++ go/vt/vtgate/discoverygateway.go | 3 +- go/vt/vtgate/discoverygateway_test.go | 78 ++++++++++++++++ go/vt/vttablet/tabletconn/tablet_conn.go | 8 ++ 6 files changed, 210 insertions(+), 1 deletion(-) diff --git a/go/vt/discovery/healthcheck.go b/go/vt/discovery/healthcheck.go index d0ca06a7062..5a94a372b64 100644 --- a/go/vt/discovery/healthcheck.go +++ b/go/vt/discovery/healthcheck.go @@ -612,8 +612,30 @@ func (hc *HealthCheckImpl) WaitForAllServingTablets(ctx context.Context, targets return hc.waitForTablets(ctx, targets, true) } +// FilterTargetsByKeyspaces only returns the targets that are part of the provided keyspaces +func FilterTargetsByKeyspaces(keyspaces []string, targets []*query.Target) []*query.Target { + filteredTargets := make([]*query.Target, 0) + + // Keep them all if there are no keyspaces to watch + if len(KeyspacesToWatch) == 0 { + return append(filteredTargets, targets...) + } + + // Let's remove from the target shards that are not in the keyspaceToWatch list. + for _, target := range targets { + for _, keyspaceToWatch := range keyspaces { + if target.Keyspace == keyspaceToWatch { + filteredTargets = append(filteredTargets, target) + } + } + } + return filteredTargets +} + // waitForTablets is the internal method that polls for tablets. func (hc *HealthCheckImpl) waitForTablets(ctx context.Context, targets []*query.Target, requireServing bool) error { + targets = FilterTargetsByKeyspaces(KeyspacesToWatch, targets) + for { // We nil targets as we find them. allPresent := true @@ -645,6 +667,11 @@ func (hc *HealthCheckImpl) waitForTablets(ctx context.Context, targets []*query. select { case <-ctx.Done(): timer.Stop() + for _, target := range targets { + if target != nil { + log.Infof("couldn't find tablets for target: %v", target) + } + } return ctx.Err() case <-timer.C: } diff --git a/go/vt/discovery/healthcheck_test.go b/go/vt/discovery/healthcheck_test.go index 98bb5c57aea..a4b2483d47a 100644 --- a/go/vt/discovery/healthcheck_test.go +++ b/go/vt/discovery/healthcheck_test.go @@ -44,6 +44,7 @@ import ( "vitess.io/vitess/go/vt/vttablet/queryservice" "vitess.io/vitess/go/vt/vttablet/tabletconn" + "vitess.io/vitess/go/vt/proto/query" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) @@ -425,6 +426,94 @@ func TestHealthCheckTimeout(t *testing.T) { mustMatch(t, want, result, "Wrong TabletHealth data") } +func TestWaitForAllServingTablets(t *testing.T) { + ts := memorytopo.NewServer("cell") + hc := createTestHc(ts) + defer hc.Close() + tablet := createTestTablet(0, "cell", "a") + tablet.Type = topodatapb.TabletType_REPLICA + targets := []*query.Target{ + { + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } + input := make(chan *querypb.StreamHealthResponse) + createFakeConn(tablet, input) + + // create a channel and subscribe to healthcheck + resultChan := hc.Subscribe() + hc.AddTablet(tablet) + // there will be a first result, get and discard it + <-resultChan + // empty + ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second) + defer cancel() + + err := hc.WaitForAllServingTablets(ctx, targets) + assert.NotNil(t, err, "error should not be nil") + + shr := &querypb.StreamHealthResponse{ + TabletAlias: tablet.Alias, + Target: &querypb.Target{Keyspace: "k", Shard: "s", TabletType: topodatapb.TabletType_REPLICA}, + Serving: true, + TabletExternallyReparentedTimestamp: 0, + RealtimeStats: &querypb.RealtimeStats{SecondsBehindMaster: 1, CpuUsage: 0.2}, + } + + input <- shr + <-resultChan + // // check it's there + + targets = []*query.Target{ + { + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } + + err = hc.WaitForAllServingTablets(ctx, targets) + assert.Nil(t, err, "error should be nil. Targets are found") + + targets = []*query.Target{ + { + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + { + Keyspace: "newkeyspace", + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } + + err = hc.WaitForAllServingTablets(ctx, targets) + assert.NotNil(t, err, "error should not be nil (there are no tablets on this keyspace") + + targets = []*query.Target{ + { + Keyspace: tablet.Keyspace, + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + { + Keyspace: "newkeyspace", + Shard: tablet.Shard, + TabletType: tablet.Type, + }, + } + + KeyspacesToWatch = []string{tablet.Keyspace} + + err = hc.WaitForAllServingTablets(ctx, targets) + assert.Nil(t, err, "error should be nil. Keyspace with no tablets is filtered") + + KeyspacesToWatch = []string{} +} + // TestGetHealthyTablets tests the functionality of GetHealthyTabletStats. func TestGetHealthyTablets(t *testing.T) { ts := memorytopo.NewServer("cell") diff --git a/go/vt/discovery/legacy_tablet_stats_cache_wait.go b/go/vt/discovery/legacy_tablet_stats_cache_wait.go index d984ff7d1ce..976aa9e7760 100644 --- a/go/vt/discovery/legacy_tablet_stats_cache_wait.go +++ b/go/vt/discovery/legacy_tablet_stats_cache_wait.go @@ -21,6 +21,7 @@ import ( "golang.org/x/net/context" + "vitess.io/vitess/go/vt/log" querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" ) @@ -84,6 +85,11 @@ func (tc *LegacyTabletStatsCache) waitForTablets(ctx context.Context, targets [] timer := time.NewTimer(waitAvailableTabletInterval) select { case <-ctx.Done(): + for _, target := range targets { + if target != nil { + log.Infof("couldn't find tablets for target: %v", target) + } + } timer.Stop() return ctx.Err() case <-timer.C: diff --git a/go/vt/vtgate/discoverygateway.go b/go/vt/vtgate/discoverygateway.go index fbcb0becaa5..11a47bdbfda 100644 --- a/go/vt/vtgate/discoverygateway.go +++ b/go/vt/vtgate/discoverygateway.go @@ -214,7 +214,8 @@ func (dg *DiscoveryGateway) WaitForTablets(ctx context.Context, tabletTypesToWai return err } - return dg.tsc.WaitForAllServingTablets(ctx, targets) + filteredTargets := discovery.FilterTargetsByKeyspaces(discovery.KeyspacesToWatch, targets) + return dg.tsc.WaitForAllServingTablets(ctx, filteredTargets) } // Close shuts down underlying connections. diff --git a/go/vt/vtgate/discoverygateway_test.go b/go/vt/vtgate/discoverygateway_test.go index 95772daf592..dc09081baaf 100644 --- a/go/vt/vtgate/discoverygateway_test.go +++ b/go/vt/vtgate/discoverygateway_test.go @@ -20,6 +20,7 @@ import ( "fmt" "strings" "testing" + "time" "vitess.io/vitess/go/vt/log" @@ -34,6 +35,7 @@ import ( "vitess.io/vitess/go/vt/vterrors" querypb "vitess.io/vitess/go/vt/proto/query" + "vitess.io/vitess/go/vt/proto/topodata" topodatapb "vitess.io/vitess/go/vt/proto/topodata" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) @@ -134,6 +136,82 @@ func TestDiscoveryGatewayGetTablets(t *testing.T) { } } +func TestDiscoveryGatewayWaitForTablets(t *testing.T) { + keyspace := "ks" + shard := "0" + cell := "local" + hc := discovery.NewFakeLegacyHealthCheck() + ts := memorytopo.NewServer("local") + srvTopo := srvtopotest.NewPassthroughSrvTopoServer() + srvTopo.TopoServer = ts + srvTopo.SrvKeyspaceNames = []string{keyspace} + srvTopo.SrvKeyspace = &topodatapb.SrvKeyspace{ + Partitions: []*topodatapb.SrvKeyspace_KeyspacePartition{ + { + ServedType: topodata.TabletType_MASTER, + ShardReferences: []*topodatapb.ShardReference{ + { + Name: shard, + }, + }, + }, + { + ServedType: topodata.TabletType_REPLICA, + ShardReferences: []*topodatapb.ShardReference{ + { + Name: shard, + }, + }, + }, + { + ServedType: topodata.TabletType_RDONLY, + ShardReferences: []*topodatapb.ShardReference{ + { + Name: shard, + }, + }, + }, + }, + } + + dg := NewDiscoveryGateway(context.Background(), hc, srvTopo, "local", 2) + + // replica should only use local ones + hc.Reset() + dg.tsc.ResetForTesting() + hc.AddTestTablet(cell, "2.2.2.2", 1001, keyspace, shard, topodatapb.TabletType_REPLICA, true, 10, nil) + hc.AddTestTablet(cell, "1.1.1.1", 1001, keyspace, shard, topodatapb.TabletType_MASTER, true, 5, nil) + ctx, _ := context.WithTimeout(context.Background(), 1*time.Second) + err := dg.WaitForTablets(ctx, []topodatapb.TabletType{topodatapb.TabletType_REPLICA, topodatapb.TabletType_MASTER}) + if err != nil { + t.Errorf("want %+v, got %+v", nil, err) + } + + // fails if there are no available tablets for the desired TabletType + err = dg.WaitForTablets(ctx, []topodatapb.TabletType{topodatapb.TabletType_RDONLY}) + if err == nil { + t.Errorf("expected error, got nil") + } + + // errors because there is no primary on ks2 + ctx, _ = context.WithTimeout(context.Background(), 1*time.Second) + srvTopo.SrvKeyspaceNames = []string{keyspace, "ks2"} + err = dg.WaitForTablets(ctx, []topodatapb.TabletType{topodatapb.TabletType_MASTER}) + if err == nil { + t.Errorf("expected error, got nil") + } + + discovery.KeyspacesToWatch = []string{keyspace} + // does not wait for ks2 if it's not part of the filter + ctx, _ = context.WithTimeout(context.Background(), 1*time.Second) + err = dg.WaitForTablets(ctx, []topodatapb.TabletType{topodatapb.TabletType_MASTER}) + if err != nil { + t.Errorf("want %+v, got %+v", nil, err) + } + + discovery.KeyspacesToWatch = []string{} +} + func TestShuffleTablets(t *testing.T) { ts1 := discovery.LegacyTabletStats{ Key: "t1", diff --git a/go/vt/vttablet/tabletconn/tablet_conn.go b/go/vt/vttablet/tabletconn/tablet_conn.go index 2580c34fad0..97a6ea2ee1b 100644 --- a/go/vt/vttablet/tabletconn/tablet_conn.go +++ b/go/vt/vttablet/tabletconn/tablet_conn.go @@ -18,6 +18,7 @@ package tabletconn import ( "flag" + "sync" "vitess.io/vitess/go/vt/grpcclient" "vitess.io/vitess/go/vt/log" @@ -50,9 +51,14 @@ type TabletDialer func(tablet *topodatapb.Tablet, failFast grpcclient.FailFast) var dialers = make(map[string]TabletDialer) +// mu This mutex helps us prevent data races when registering / getting dialers +var mu sync.Mutex + // RegisterDialer is meant to be used by TabletDialer implementations // to self register. func RegisterDialer(name string, dialer TabletDialer) { + mu.Lock() + defer mu.Unlock() if _, ok := dialers[name]; ok { log.Fatalf("Dialer %s already exists", name) } @@ -61,6 +67,8 @@ func RegisterDialer(name string, dialer TabletDialer) { // GetDialer returns the dialer to use, described by the command line flag func GetDialer() TabletDialer { + mu.Lock() + defer mu.Unlock() td, ok := dialers[*TabletProtocol] if !ok { log.Exitf("No dialer registered for tablet protocol %s", *TabletProtocol)