From ccf9ef2e2c0462f68caf0698ffca538e89092cb4 Mon Sep 17 00:00:00 2001 From: Rafael Chacon Date: Thu, 8 Nov 2018 16:47:09 +0000 Subject: [PATCH 01/35] Do not reuse a consul lock * When you lose a consul lock, you can't reuse that lock. Existent code does not does that and should a vtctld master lose a lock, it gets stuck in a state where it can't never use that lock again and you will need to restart the process. Signed-off-by: Rafael Chacon --- go/vt/topo/consultopo/election.go | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/go/vt/topo/consultopo/election.go b/go/vt/topo/consultopo/election.go index bb4cace7e58..c36c9d8d6af 100644 --- a/go/vt/topo/consultopo/election.go +++ b/go/vt/topo/consultopo/election.go @@ -28,19 +28,8 @@ import ( // NewMasterParticipation is part of the topo.Server interface func (s *Server) NewMasterParticipation(name, id string) (topo.MasterParticipation, error) { - // Create the lock here. - electionPath := path.Join(s.root, electionsPath, name) - l, err := s.client.LockOpts(&api.LockOptions{ - Key: electionPath, - Value: []byte(id), - }) - if err != nil { - return nil, err - } - return &consulMasterParticipation{ s: s, - lock: l, name: name, id: id, stop: make(chan struct{}), @@ -56,9 +45,6 @@ type consulMasterParticipation struct { // s is our parent consul topo Server s *Server - // lock is the *api.Lock structure we're going to use. - lock *api.Lock - // name is the name of this MasterParticipation name string @@ -74,6 +60,16 @@ type consulMasterParticipation struct { // WaitForMastership is part of the topo.MasterParticipation interface. func (mp *consulMasterParticipation) WaitForMastership() (context.Context, error) { + + electionPath := path.Join(mp.s.root, electionsPath, mp.name) + l, err := mp.s.client.LockOpts(&api.LockOptions{ + Key: electionPath, + Value: []byte(mp.id), + }) + if err != nil { + return nil, err + } + // If Stop was already called, mp.done is closed, so we are interrupted. select { case <-mp.done: @@ -82,7 +78,7 @@ func (mp *consulMasterParticipation) WaitForMastership() (context.Context, error } // Try to lock until mp.stop is closed. - lost, err := mp.lock.Lock(mp.stop) + lost, err := l.Lock(mp.stop) if err != nil { // We can't lock. See if it was because we got canceled. select { @@ -105,7 +101,7 @@ func (mp *consulMasterParticipation) WaitForMastership() (context.Context, error // so the running process is not thinking it // is the master any more, then we unlock. lockCancel() - if err := mp.lock.Unlock(); err != nil { + if err := l.Unlock(); err != nil { log.Errorf("master election(%v) Unlock failed: %v", mp.name, err) } close(mp.done) From 670647ba52970495b1262a41c0ab21678ba4526f Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 24 Nov 2018 13:09:03 -0500 Subject: [PATCH 02/35] rework vtgate's vschema_manager to use topotools.RebuildVschema Pull in the topotools.RebuildVschema implementation into the vtgate VschemaManager to share the same helper function that vtctl uses to find all cells and propagate the changed vschema to all of them. This changes the UpdateVschema interface to take in a single modified keyspace and not the whole SrvVschema. Signed-off-by: Michael Demmer --- go/vt/vtgate/executor.go | 6 +++--- go/vt/vtgate/vschema_manager.go | 26 ++++++-------------------- 2 files changed, 9 insertions(+), 23 deletions(-) diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index f12dbc7d122..459a2cae727 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -425,7 +425,7 @@ func (e *Executor) handleVindexDDL(ctx context.Context, safeSession *SafeSession Owner: owner, } - return e.vm.UpdateVSchema(ctx, destKeyspace, vschema) + return e.vm.UpdateVSchema(ctx, destKeyspace, ks) case sqlparser.AddColVindexStr: // Support two cases: // @@ -488,7 +488,7 @@ func (e *Executor) handleVindexDDL(ctx context.Context, safeSession *SafeSession }) ks.Tables[tableName] = table - return e.vm.UpdateVSchema(ctx, destKeyspace, vschema) + return e.vm.UpdateVSchema(ctx, destKeyspace, ks) case sqlparser.DropColVindexStr: spec := ddl.VindexSpec name := spec.Name.String() @@ -502,7 +502,7 @@ func (e *Executor) handleVindexDDL(ctx context.Context, safeSession *SafeSession if len(table.ColumnVindexes) == 0 { delete(ks.Tables, tableName) } - return e.vm.UpdateVSchema(ctx, destKeyspace, vschema) + return e.vm.UpdateVSchema(ctx, destKeyspace, ks) } } return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s not defined in table %s.%s", name, ksName, tableName) diff --git a/go/vt/vtgate/vschema_manager.go b/go/vt/vtgate/vschema_manager.go index 5462a7fdcc4..72d5cca0993 100644 --- a/go/vt/vtgate/vschema_manager.go +++ b/go/vt/vtgate/vschema_manager.go @@ -24,7 +24,9 @@ import ( "github.com/golang/protobuf/proto" "vitess.io/vitess/go/vt/log" + "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/topo" + "vitess.io/vitess/go/vt/topotools" "vitess.io/vitess/go/vt/vtgate/vindexes" vschemapb "vitess.io/vitess/go/vt/proto/vschema" @@ -121,28 +123,12 @@ func (vm *VSchemaManager) watchSrvVSchema(ctx context.Context, cell string) { // UpdateVSchema propagates the updated vschema to the topo. The entry for // the given keyspace is updated in the global topo, and the full SrvVSchema // is updated in all known cells. -func (vm *VSchemaManager) UpdateVSchema(ctx context.Context, keyspace string, vschema *vschemapb.SrvVSchema) error { - // update the global vschema, then update the SrvVschema for - // each cell - ks, _ := vschema.Keyspaces[keyspace] - err := vm.e.serv.GetTopoServer().SaveVSchema(ctx, keyspace, ks) +func (vm *VSchemaManager) UpdateVSchema(ctx context.Context, ksName string, keyspace *vschemapb.Keyspace) error { + topo := vm.e.serv.GetTopoServer() + err := topo.SaveVSchema(ctx, ksName, keyspace) if err != nil { return err } - cells, err := vm.e.serv.GetTopoServer().GetKnownCells(ctx) - if err != nil { - return err - } - - // even if one cell fails, continue to try the others - for _, cell := range cells { - cellErr := vm.e.serv.GetTopoServer().UpdateSrvVSchema(ctx, cell, vschema) - if cellErr != nil { - err = cellErr - log.Errorf("error updating vschema in cell %s: %v", cell, cellErr) - } - } - - return err + return topotools.RebuildVSchema(ctx, logutil.NewConsoleLogger(), topo, nil) } From 94cb4af27abe47d1e191121afebae675e031c023 Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 24 Nov 2018 13:14:53 -0500 Subject: [PATCH 03/35] add a -dry_run flag to vtctl ApplyVschema Signed-off-by: Michael Demmer --- go/vt/vtctl/vtctl.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 16167296870..0ad15e1c28d 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2122,6 +2122,7 @@ func commandRebuildVSchemaGraph(ctx context.Context, wr *wrangler.Wrangler, subF func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { vschema := subFlags.String("vschema", "", "Identifies the VTGate routing schema") vschemaFile := subFlags.String("vschema_file", "", "Identifies the VTGate routing schema file") + dryRun := subFlags.Bool("dry_run", false, "If set, do not save the altered vschema, simply echo to console.") skipRebuild := subFlags.Bool("skip_rebuild", false, "If set, do no rebuild the SrvSchema objects.") var cells flagutil.StringListValue subFlags.Var(&cells, "cells", "If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set.") @@ -2150,16 +2151,23 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f if err != nil { return err } + keyspace := subFlags.Arg(0) - if err := wr.TopoServer().SaveVSchema(ctx, keyspace, &vs); err != nil { - return err - } b, err := json2.MarshalIndentPB(&vs, " ") if err != nil { wr.Logger().Errorf("Failed to marshal VSchema for display: %v", err) } else { - wr.Logger().Printf("Uploaded VSchema object:\n%s\nIf this is not what you expected, check the input data (as JSON parsing will skip unexpected fields).\n", b) + wr.Logger().Printf("New VSchema object:\n%s\nIf this is not what you expected, check the input data (as JSON parsing will skip unexpected fields).\n", b) + } + + if *dryRun { + wr.Logger().Printf("Dry run: Skipping update of VSchema\n") + return nil + } + + if err := wr.TopoServer().SaveVSchema(ctx, keyspace, &vs); err != nil { + return err } if *skipRebuild { From 6acad1d5ea58e0d99fdfeb112c01aa73ef22aad9 Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 24 Nov 2018 15:48:42 -0500 Subject: [PATCH 04/35] move the vschema ddl implementation into a new topotools helper Abstract out the execution of the vschema ddl statements into a new function in topotools. Signed-off-by: Michael Demmer --- go/vt/topotools/vschema_ddl.go | 149 +++++++++++++++++++++++++++++++++ go/vt/vtgate/executor.go | 126 ++-------------------------- 2 files changed, 156 insertions(+), 119 deletions(-) create mode 100644 go/vt/topotools/vschema_ddl.go diff --git a/go/vt/topotools/vschema_ddl.go b/go/vt/topotools/vschema_ddl.go new file mode 100644 index 00000000000..ffba159325d --- /dev/null +++ b/go/vt/topotools/vschema_ddl.go @@ -0,0 +1,149 @@ +/* +Copyright 2018 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 topotools + +import ( + "reflect" + + "vitess.io/vitess/go/vt/sqlparser" + "vitess.io/vitess/go/vt/vterrors" + + vschemapb "vitess.io/vitess/go/vt/proto/vschema" + vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" +) + +// ApplyVSchemaDDL applies the given DDL statement to the vschema +// keyspace definition and returns the modified keyspace object. +func ApplyVSchemaDDL(ksName string, ks *vschemapb.Keyspace, ddl *sqlparser.DDL) (*vschemapb.Keyspace, error) { + if ks == nil { + ks = new(vschemapb.Keyspace) + } + + if ks.Tables == nil { + ks.Tables = map[string]*vschemapb.Table{} + } + + if ks.Vindexes == nil { + ks.Vindexes = map[string]*vschemapb.Vindex{} + } + + var tableName string + var table *vschemapb.Table + if !ddl.Table.IsEmpty() { + tableName = ddl.Table.Name.String() + table, _ = ks.Tables[tableName] + } + + switch ddl.Action { + case sqlparser.CreateVindexStr: + name := ddl.VindexSpec.Name.String() + if _, ok := ks.Vindexes[name]; ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s already exists in keyspace %s", name, ksName) + } + owner, params := ddl.VindexSpec.ParseParams() + ks.Vindexes[name] = &vschemapb.Vindex{ + Type: ddl.VindexSpec.Type.String(), + Params: params, + Owner: owner, + } + return ks, nil + + case sqlparser.AddColVindexStr: + // Support two cases: + // + // 1. The vindex type / params / owner are specified. If the + // named vindex doesn't exist, create it. If it does exist, + // require the parameters to match. + // + // 2. The vindex type is not specified. Make sure the vindex + // already exists. + spec := ddl.VindexSpec + name := spec.Name.String() + if !spec.Type.IsEmpty() { + owner, params := spec.ParseParams() + if vindex, ok := ks.Vindexes[name]; ok { + if vindex.Type != spec.Type.String() { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with type %s not %s", name, vindex.Type, spec.Type.String()) + } + if vindex.Owner != owner { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with owner %s not %s", name, vindex.Owner, owner) + } + if (len(vindex.Params) != 0 || len(params) != 0) && !reflect.DeepEqual(vindex.Params, params) { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with different parameters", name) + } + } else { + ks.Vindexes[name] = &vschemapb.Vindex{ + Type: spec.Type.String(), + Params: params, + Owner: owner, + } + } + } else { + if _, ok := ks.Vindexes[name]; !ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s does not exist in keyspace %s", name, ksName) + } + } + + // If this is the first vindex being defined on the table, create + // the empty table record + if table == nil { + table = &vschemapb.Table{ + ColumnVindexes: make([]*vschemapb.ColumnVindex, 0, 4), + } + } + + // Make sure there isn't already a vindex with the same name on + // this table. + for _, vindex := range table.ColumnVindexes { + if vindex.Name == name { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s already defined on table %s", name, tableName) + } + } + + columns := make([]string, len(ddl.VindexCols), len(ddl.VindexCols)) + for i, col := range ddl.VindexCols { + columns[i] = col.String() + } + table.ColumnVindexes = append(table.ColumnVindexes, &vschemapb.ColumnVindex{ + Name: name, + Columns: columns, + }) + ks.Tables[tableName] = table + + return ks, nil + + case sqlparser.DropColVindexStr: + spec := ddl.VindexSpec + name := spec.Name.String() + if table == nil { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "table %s.%s not defined in vschema", ksName, tableName) + } + + for i, colVindex := range table.ColumnVindexes { + if colVindex.Name == name { + table.ColumnVindexes = append(table.ColumnVindexes[:i], table.ColumnVindexes[i+1:]...) + if len(table.ColumnVindexes) == 0 { + delete(ks.Tables, tableName) + } + return ks, nil + } + } + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s not defined in table %s.%s", name, ksName, tableName) + } + + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected vindex ddl operation %s", ddl.Action) +} diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 459a2cae727..b449f786c8c 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "net/http" - "reflect" "sort" "strings" "sync" @@ -42,6 +41,7 @@ import ( "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/srvtopo" "vitess.io/vitess/go/vt/topo/topoproto" + "vitess.io/vitess/go/vt/topotools" "vitess.io/vitess/go/vt/vterrors" "vitess.io/vitess/go/vt/vtgate/engine" "vitess.io/vitess/go/vt/vtgate/planbuilder" @@ -50,7 +50,6 @@ import ( querypb "vitess.io/vitess/go/vt/proto/query" topodatapb "vitess.io/vitess/go/vt/proto/topodata" - vschemapb "vitess.io/vitess/go/vt/proto/vschema" vtgatepb "vitess.io/vitess/go/vt/proto/vtgate" vtrpcpb "vitess.io/vitess/go/vt/proto/vtrpc" ) @@ -339,7 +338,7 @@ func (e *Executor) handleDDL(ctx context.Context, safeSession *SafeSession, sql logStats.PlanTime = execStart.Sub(logStats.StartTime) switch ddl.Action { case sqlparser.CreateVindexStr, sqlparser.AddColVindexStr, sqlparser.DropColVindexStr: - err := e.handleVindexDDL(ctx, safeSession, dest, destKeyspace, destTabletType, ddl, logStats) + err := e.handleVSchemaDDL(ctx, safeSession, dest, destKeyspace, destTabletType, ddl, logStats) logStats.ExecuteTime = time.Since(execStart) return &sqltypes.Result{}, err default: @@ -366,7 +365,7 @@ func (e *Executor) handleDDL(ctx context.Context, safeSession *SafeSession, sql return result, err } -func (e *Executor) handleVindexDDL(ctx context.Context, safeSession *SafeSession, dest key.Destination, destKeyspace string, destTabletType topodatapb.TabletType, ddl *sqlparser.DDL, logStats *LogStats) error { +func (e *Executor) handleVSchemaDDL(ctx context.Context, safeSession *SafeSession, dest key.Destination, destKeyspace string, destTabletType topodatapb.TabletType, ddl *sqlparser.DDL, logStats *LogStats) error { vschema := e.vm.GetCurrentSrvVschema() if vschema == nil { return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vschema not loaded") @@ -386,129 +385,18 @@ func (e *Executor) handleVindexDDL(ctx context.Context, safeSession *SafeSession if ksName == "" { ksName = destKeyspace } - if ksName == "" { return errNoKeyspace } ks, _ := vschema.Keyspaces[ksName] - if ks == nil { - ks = new(vschemapb.Keyspace) - vschema.Keyspaces[ksName] = ks - } - - if ks.Tables == nil { - ks.Tables = map[string]*vschemapb.Table{} - } - - if ks.Vindexes == nil { - ks.Vindexes = map[string]*vschemapb.Vindex{} - } - - var tableName string - var table *vschemapb.Table - if !ddl.Table.IsEmpty() { - tableName = ddl.Table.Name.String() - table, _ = ks.Tables[tableName] - } + ks, err := topotools.ApplyVSchemaDDL(ksName, ks, ddl) - switch ddl.Action { - case sqlparser.CreateVindexStr: - name := ddl.VindexSpec.Name.String() - if _, ok := ks.Vindexes[name]; ok { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s already exists in keyspace %s", name, destKeyspace) - } - owner, params := ddl.VindexSpec.ParseParams() - ks.Vindexes[name] = &vschemapb.Vindex{ - Type: ddl.VindexSpec.Type.String(), - Params: params, - Owner: owner, - } - - return e.vm.UpdateVSchema(ctx, destKeyspace, ks) - case sqlparser.AddColVindexStr: - // Support two cases: - // - // 1. The vindex type / params / owner are specified. If the - // named vindex doesn't exist, create it. If it does exist, - // require the parameters to match. - // - // 2. The vindex type is not specified. Make sure the vindex - // already exists. - spec := ddl.VindexSpec - name := spec.Name.String() - if !spec.Type.IsEmpty() { - owner, params := spec.ParseParams() - if vindex, ok := ks.Vindexes[name]; ok { - if vindex.Type != spec.Type.String() { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with type %s not %s", name, vindex.Type, spec.Type.String()) - } - if vindex.Owner != owner { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with owner %s not %s", name, vindex.Owner, owner) - } - if (len(vindex.Params) != 0 || len(params) != 0) && !reflect.DeepEqual(vindex.Params, params) { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with different parameters", name) - } - } else { - ks.Vindexes[name] = &vschemapb.Vindex{ - Type: spec.Type.String(), - Params: params, - Owner: owner, - } - } - } else { - if _, ok := ks.Vindexes[name]; !ok { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s does not exist in keyspace %s", name, destKeyspace) - } - } - - // If this is the first vindex being defined on the table, create - // the empty table record - if table == nil { - table = &vschemapb.Table{ - ColumnVindexes: make([]*vschemapb.ColumnVindex, 0, 4), - } - } - - // Make sure there isn't already a vindex with the same name on - // this table. - for _, vindex := range table.ColumnVindexes { - if vindex.Name == name { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s already defined on table %s", name, tableName) - } - } - - columns := make([]string, len(ddl.VindexCols), len(ddl.VindexCols)) - for i, col := range ddl.VindexCols { - columns[i] = col.String() - } - table.ColumnVindexes = append(table.ColumnVindexes, &vschemapb.ColumnVindex{ - Name: name, - Columns: columns, - }) - ks.Tables[tableName] = table - - return e.vm.UpdateVSchema(ctx, destKeyspace, ks) - case sqlparser.DropColVindexStr: - spec := ddl.VindexSpec - name := spec.Name.String() - if table == nil { - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "table %s.%s not defined in vschema", ksName, tableName) - } - - for i, colVindex := range table.ColumnVindexes { - if colVindex.Name == name { - table.ColumnVindexes = append(table.ColumnVindexes[:i], table.ColumnVindexes[i+1:]...) - if len(table.ColumnVindexes) == 0 { - delete(ks.Tables, tableName) - } - return e.vm.UpdateVSchema(ctx, destKeyspace, ks) - } - } - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s not defined in table %s.%s", name, ksName, tableName) + if err != nil { + return err } - return vterrors.Errorf(vtrpcpb.Code_INTERNAL, "unexpected vindex ddl operation %s", ddl.Action) + return e.vm.UpdateVSchema(ctx, ksName, ks) } func (e *Executor) handleBegin(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, destTabletType topodatapb.TabletType, logStats *LogStats) (*sqltypes.Result, error) { From 26826875294dad91569da74ae436776b82f6e69c Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 24 Nov 2018 17:09:55 -0500 Subject: [PATCH 05/35] add vtctl support to alter vschema using sql statements Add new flags to ApplyVschema to be able to take a sql ddl statement either on the command line or in a file to enable vschema changes without having to edit the whole json file. Signed-off-by: Michael Demmer --- go/vt/vtctl/vtctl.go | 96 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 79 insertions(+), 17 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 0ad15e1c28d..586057c00da 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -117,6 +117,7 @@ import ( "vitess.io/vitess/go/vt/log" "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/schemamanager" + "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/topo" "vitess.io/vitess/go/vt/topo/topoproto" "vitess.io/vitess/go/vt/topotools" @@ -2122,6 +2123,8 @@ func commandRebuildVSchemaGraph(ctx context.Context, wr *wrangler.Wrangler, subF func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *flag.FlagSet, args []string) error { vschema := subFlags.String("vschema", "", "Identifies the VTGate routing schema") vschemaFile := subFlags.String("vschema_file", "", "Identifies the VTGate routing schema file") + sql := subFlags.String("sql", "", "A vschema ddl SQL statement (e.g. `add vindex`, `alter table t add vindex hash(id)`, etc)") + sqlFile := subFlags.String("sql_file", "", "A vschema ddl SQL statement (e.g. `add vindex`, `alter table t add vindex hash(id)`, etc)") dryRun := subFlags.Bool("dry_run", false, "If set, do not save the altered vschema, simply echo to console.") skipRebuild := subFlags.Bool("skip_rebuild", false, "If set, do no rebuild the SrvSchema objects.") var cells flagutil.StringListValue @@ -2133,28 +2136,87 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f if subFlags.NArg() != 1 { return fmt.Errorf("the argument is required for the ApplyVSchema command") } - if (*vschema == "") == (*vschemaFile == "") { - return fmt.Errorf("either the vschema or vschemaFile flag must be specified when calling the ApplyVSchema command") - } - var schema []byte - if *vschemaFile != "" { - var err error - schema, err = ioutil.ReadFile(*vschemaFile) + keyspace := subFlags.Arg(0) + + var vs *vschemapb.Keyspace + var err error + if *sql != "" || *sqlFile != "" { + // + // Handle the case where vschema modification is supplied as a sql statement + // + if *sql != "" && *sqlFile != "" { + return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") + } + if *vschema != "" || *vschemaFile != "" { + return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") + } + + if *sqlFile != "" { + sqlBytes, err := ioutil.ReadFile(*sqlFile) + if err != nil { + return err + } + *sql = string(sqlBytes) + } + + stmt, err := sqlparser.Parse(*sql) + if err != nil { + return fmt.Errorf("error parsing vschema statement `%s`: %v", *sql, err) + } + ddl, ok := stmt.(*sqlparser.DDL) + if !ok { + return fmt.Errorf("error parsing: vschema statement `%s`: not a ddl statement", *sql) + } + + vs, err = wr.TopoServer().GetVSchema(ctx, keyspace) + if err != nil { + if topo.IsErrType(err, topo.NoNode) { + vs = &vschemapb.Keyspace{} + } else { + return err + } + } + + vs, err = topotools.ApplyVSchemaDDL(keyspace, vs, ddl) + if err != nil { + return err + } + + } else if *vschema != "" || *vschemaFile != "" { + // + // Handle the case where vschema modification is supplied as a json document + // + if *vschema != "" && *vschemaFile != "" { + return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") + } + if *sql != "" || *sqlFile != "" { + return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") + } + + var schema []byte + if *vschemaFile != "" { + var err error + schema, err = ioutil.ReadFile(*vschemaFile) + if err != nil { + return err + } + } else { + schema = []byte(*vschema) + } + + // Create a local schema object to unmarshal into + var vsLocal vschemapb.Keyspace + vs = &vsLocal + + err := json2.Unmarshal(schema, vs) if err != nil { return err } } else { - schema = []byte(*vschema) + return fmt.Errorf("one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") } - var vs vschemapb.Keyspace - err := json2.Unmarshal(schema, &vs) - if err != nil { - return err - } - - keyspace := subFlags.Arg(0) - b, err := json2.MarshalIndentPB(&vs, " ") + b, err := json2.MarshalIndentPB(vs, " ") if err != nil { wr.Logger().Errorf("Failed to marshal VSchema for display: %v", err) } else { @@ -2166,7 +2228,7 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f return nil } - if err := wr.TopoServer().SaveVSchema(ctx, keyspace, &vs); err != nil { + if err := wr.TopoServer().SaveVSchema(ctx, keyspace, vs); err != nil { return err } From 1d274cf970a8f942581ce6f5df2ae558e7444a85 Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 24 Nov 2018 17:14:24 -0500 Subject: [PATCH 06/35] set the sharded bit when creating the first vindex in a keyspace Make sure to set the Sharded bit to true when creating the first vindex in a keyspace, otherwise the vschema ddl statements can't be used to bootstrap a new sharded keyspace. Signed-off-by: Michael Demmer --- go/vt/topotools/vschema_ddl.go | 13 +++++++ go/vt/vtgate/executor_test.go | 67 ++++++++++++++++------------------ 2 files changed, 44 insertions(+), 36 deletions(-) diff --git a/go/vt/topotools/vschema_ddl.go b/go/vt/topotools/vschema_ddl.go index ffba159325d..56a28426a9e 100644 --- a/go/vt/topotools/vschema_ddl.go +++ b/go/vt/topotools/vschema_ddl.go @@ -54,12 +54,20 @@ func ApplyVSchemaDDL(ksName string, ks *vschemapb.Keyspace, ddl *sqlparser.DDL) if _, ok := ks.Vindexes[name]; ok { return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s already exists in keyspace %s", name, ksName) } + + // Make sure the keyspace has the sharded bit set to true + // if this is the first vindex defined in the keyspace. + if len(ks.Vindexes) == 0 { + ks.Sharded = true + } + owner, params := ddl.VindexSpec.ParseParams() ks.Vindexes[name] = &vschemapb.Vindex{ Type: ddl.VindexSpec.Type.String(), Params: params, Owner: owner, } + return ks, nil case sqlparser.AddColVindexStr: @@ -86,6 +94,11 @@ func ApplyVSchemaDDL(ksName string, ks *vschemapb.Keyspace, ddl *sqlparser.DDL) return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vindex %s defined with different parameters", name) } } else { + // Make sure the keyspace has the sharded bit set to true + // if this is the first vindex defined in the keyspace. + if len(ks.Vindexes) == 0 { + ks.Sharded = true + } ks.Vindexes[name] = &vschemapb.Vindex{ Type: spec.Type.String(), Params: params, diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 93ca6ff1f36..baa14d42ec1 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -1203,51 +1203,51 @@ func TestExecutorCreateVindexDDL(t *testing.T) { t.Fatalf("test_vindex should not exist in original vschema") } + session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) stmt := "create vindex test_vindex using hash" - wantCount := []int64{0, 0, 0} - _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: ks}), stmt, nil) + _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Error(err) } - gotCount := []int64{ - sbc1.ExecCount.Get(), - sbc2.ExecCount.Get(), - sbclookup.ExecCount.Get(), - } - if !reflect.DeepEqual(gotCount, wantCount) { - t.Errorf("Exec %s: %v, want %v", stmt, gotCount, wantCount) + + vschema, vindex = waitForVindex(t, ks, "test_vindex", vschemaUpdates, executor) + if vindex == nil || vindex.Type != "hash" { + t.Errorf("updated vschema did not contain test_vindex") } - time.Sleep(10 * time.Millisecond) + _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + wantErr := "vindex test_vindex already exists in keyspace TestExecutor" + if err == nil || err.Error() != wantErr { + t.Errorf("create duplicate vindex: %v, want %s", err, wantErr) + } select { case vschema = <-vschemaUpdates: - vindex, ok = vschema.Keyspaces[ks].Vindexes["test_vindex"] - if !ok || vindex.Type != "hash" { - t.Errorf("updated vschema did not contain test_vindex") - } + t.Errorf("vschema should not be updated on error") default: - t.Errorf("vschema was not updated as expected") } - // Wait up to 10ms until the vindex manager gets notified of the update - for i := 0; i < 10; i++ { - vschema = executor.vm.GetCurrentSrvVschema() - vindex, ok = vschema.Keyspaces[ks].Vindexes["test_vindex"] - if ok { - break - } - time.Sleep(time.Millisecond) - } - if !ok || vindex.Type != "hash" { - t.Errorf("updated vschema did not contain test_vindex") + // Create a new vschema keyspace implicitly by creating a vindex with a different + // target in the session + ksNew := "test_new_keyspace" + session = NewSafeSession(&vtgatepb.Session{TargetString: ksNew}) + stmt = "create vindex test_vindex2 using hash" + _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + if err != nil { + t.Fatalf("error in %s: %v", stmt, err) } - _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: ks}), stmt, nil) - wantErr := "vindex test_vindex already exists in keyspace TestExecutor" - if err == nil || err.Error() != wantErr { - t.Errorf("create duplicate vindex: %v, want %s", err, wantErr) + vschema, vindex = waitForVindex(t, ksNew, "test_vindex2", vschemaUpdates, executor) + if vindex.Type != "hash" { + t.Errorf("vindex type %s not hash", vindex.Type) + } + keyspace, ok := vschema.Keyspaces[ksNew] + if !ok || !keyspace.Sharded { + t.Errorf("keyspace should have been created with Sharded=true") } - gotCount = []int64{ + + // No queries should have gone to any tablets + wantCount := []int64{0, 0, 0} + gotCount := []int64{ sbc1.ExecCount.Get(), sbc2.ExecCount.Get(), sbclookup.ExecCount.Get(), @@ -1255,11 +1255,6 @@ func TestExecutorCreateVindexDDL(t *testing.T) { if !reflect.DeepEqual(gotCount, wantCount) { t.Errorf("Exec %s: %v, want %v", stmt, gotCount, wantCount) } - select { - case vschema = <-vschemaUpdates: - t.Errorf("vschema shoud not be updated on error") - default: - } } func TestExecutorAddDropVindexDDL(t *testing.T) { From 54f219246422bf5599d0a4beca0246bc9b0ef11b Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Mon, 26 Nov 2018 11:00:29 -0800 Subject: [PATCH 07/35] fix vschema test expectations Signed-off-by: Michael Demmer --- go/vt/vtgate/executor_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index baa14d42ec1..68f55d24e5b 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -1556,8 +1556,8 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } stmt = "alter table nonexistent drop vindex test_lookup" - _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{}), stmt, nil) - wantErr = errNoKeyspace.Error() + _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil) + wantErr = "table InvalidKeyspace.nonexistent not defined in vschema" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } From 1b0db074c13039bd08fe8444135858f3f5b8d39a Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Thu, 29 Nov 2018 12:50:06 -0800 Subject: [PATCH 08/35] change parameter to -dry-run for consistency Signed-off-by: Michael Demmer --- go/vt/vtctl/vtctl.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 586057c00da..9657911896f 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2125,7 +2125,7 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f vschemaFile := subFlags.String("vschema_file", "", "Identifies the VTGate routing schema file") sql := subFlags.String("sql", "", "A vschema ddl SQL statement (e.g. `add vindex`, `alter table t add vindex hash(id)`, etc)") sqlFile := subFlags.String("sql_file", "", "A vschema ddl SQL statement (e.g. `add vindex`, `alter table t add vindex hash(id)`, etc)") - dryRun := subFlags.Bool("dry_run", false, "If set, do not save the altered vschema, simply echo to console.") + dryRun := subFlags.Bool("dry-run", false, "If set, do not save the altered vschema, simply echo to console.") skipRebuild := subFlags.Bool("skip_rebuild", false, "If set, do no rebuild the SrvSchema objects.") var cells flagutil.StringListValue subFlags.Var(&cells, "cells", "If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set.") From 17af5ea1cb5b86c48be236e3713374680a98b01b Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Thu, 29 Nov 2018 13:18:52 -0800 Subject: [PATCH 09/35] update doc strings as suggested in pr review Signed-off-by: Michael Demmer --- doc/vtctlReference.md | 3 +++ go/vt/vtctl/vtctl.go | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/doc/vtctlReference.md b/doc/vtctlReference.md index 4d294919d42..cb946962586 100644 --- a/doc/vtctlReference.md +++ b/doc/vtctlReference.md @@ -1119,8 +1119,11 @@ Applies the VTGate routing schema to the provided keyspace. Shows the result aft | :-------- | :--------- | :--------- | | cells | string | If specified, limits the rebuild to the cells, after upload. Ignored if skipRebuild is set. | | skip_rebuild | Boolean | If set, do no rebuild the SrvSchema objects. | +| dry-run | Boolean | Shows the proposed change without executing it | | vschema | string | Identifies the VTGate routing schema | | vschema_file | string | Identifies the VTGate routing schema file | +| sql | string | Identifies a VSchema DDL SQL statement | +| sql_file | string | Identifies a VSchema DDL SQL statement | #### Arguments diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 9657911896f..93040b1c576 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -391,7 +391,7 @@ var commands = []commandGroup{ "", "Displays the VTGate routing schema."}, {"ApplyVSchema", commandApplyVSchema, - "{-vschema= || -vschema_file=} [-cells=c1,c2,...] [-skip_rebuild] ", + "{-vschema= || -vschema_file= || -sql= || -sql_file=} [-cells=c1,c2,...] [-skip_rebuild] [-dry-run] ", "Applies the VTGate routing schema to the provided keyspace. Shows the result after application."}, {"RebuildVSchemaGraph", commandRebuildVSchemaGraph, "[-cells=c1,c2,...]", From ea1e126a0697cfbbc6b6c042733ed66e0fa14786 Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Thu, 29 Nov 2018 13:19:20 -0800 Subject: [PATCH 10/35] rework and clean up the implementation as suggested in PR feedback Signed-off-by: Michael Demmer --- go/vt/vtctl/vtctl.go | 44 ++++++++++++++++---------------------------- 1 file changed, 16 insertions(+), 28 deletions(-) diff --git a/go/vt/vtctl/vtctl.go b/go/vt/vtctl/vtctl.go index 93040b1c576..f01f416efe6 100644 --- a/go/vt/vtctl/vtctl.go +++ b/go/vt/vtctl/vtctl.go @@ -2140,17 +2140,19 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f var vs *vschemapb.Keyspace var err error - if *sql != "" || *sqlFile != "" { - // - // Handle the case where vschema modification is supplied as a sql statement - // - if *sql != "" && *sqlFile != "" { - return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") - } - if *vschema != "" || *vschemaFile != "" { - return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") - } + sqlMode := (*sql != "") != (*sqlFile != "") + jsonMode := (*vschema != "") != (*vschemaFile != "") + + if sqlMode && jsonMode { + return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") + } + + if !sqlMode && !jsonMode { + return fmt.Errorf("one of the sql, sql_file, vschema, or vschema_file flags must be specified when calling the ApplyVSchema command") + } + + if sqlMode { if *sqlFile != "" { sqlBytes, err := ioutil.ReadFile(*sqlFile) if err != nil { @@ -2165,7 +2167,7 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f } ddl, ok := stmt.(*sqlparser.DDL) if !ok { - return fmt.Errorf("error parsing: vschema statement `%s`: not a ddl statement", *sql) + return fmt.Errorf("error parsing vschema statement `%s`: not a ddl statement", *sql) } vs, err = wr.TopoServer().GetVSchema(ctx, keyspace) @@ -2182,17 +2184,8 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f return err } - } else if *vschema != "" || *vschemaFile != "" { - // - // Handle the case where vschema modification is supplied as a json document - // - if *vschema != "" && *vschemaFile != "" { - return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") - } - if *sql != "" || *sqlFile != "" { - return fmt.Errorf("only one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") - } - + } else { + // json mode var schema []byte if *vschemaFile != "" { var err error @@ -2204,16 +2197,11 @@ func commandApplyVSchema(ctx context.Context, wr *wrangler.Wrangler, subFlags *f schema = []byte(*vschema) } - // Create a local schema object to unmarshal into - var vsLocal vschemapb.Keyspace - vs = &vsLocal - + vs = &vschemapb.Keyspace{} err := json2.Unmarshal(schema, vs) if err != nil { return err } - } else { - return fmt.Errorf("one of the sql, sql_file, vschema, or vschema_file flags may be specified when calling the ApplyVSchema command") } b, err := json2.MarshalIndentPB(vs, " ") From e47bed0e71d5c8012850954feee22b023d9243fe Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Mon, 3 Dec 2018 08:52:59 -0800 Subject: [PATCH 11/35] revert change to use topotools.RebuildVSchema in the executor The fact that the vschema ddl needs to go through the normal srvtopo interface to get to the underlying topo server when applying vschema ddl operations doesn't play well with the SandboxTopo used in some of the unit tests. So restore the previous implementation which edits the SrvVschema in place and then reapplies it to all cells, rather than trying to reuse topotools.RebuildVschema from the executor. Signed-off-by: Michael Demmer --- go/vt/vtgate/executor.go | 4 +++- go/vt/vtgate/vschema_manager.go | 24 +++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index b449f786c8c..335ac41b779 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -396,7 +396,9 @@ func (e *Executor) handleVSchemaDDL(ctx context.Context, safeSession *SafeSessio return err } - return e.vm.UpdateVSchema(ctx, ksName, ks) + vschema.Keyspaces[ksName] = ks + + return e.vm.UpdateVSchema(ctx, ksName, vschema) } func (e *Executor) handleBegin(ctx context.Context, safeSession *SafeSession, sql string, bindVars map[string]*querypb.BindVariable, destTabletType topodatapb.TabletType, logStats *LogStats) (*sqltypes.Result, error) { diff --git a/go/vt/vtgate/vschema_manager.go b/go/vt/vtgate/vschema_manager.go index 72d5cca0993..5823c080c14 100644 --- a/go/vt/vtgate/vschema_manager.go +++ b/go/vt/vtgate/vschema_manager.go @@ -24,9 +24,7 @@ import ( "github.com/golang/protobuf/proto" "vitess.io/vitess/go/vt/log" - "vitess.io/vitess/go/vt/logutil" "vitess.io/vitess/go/vt/topo" - "vitess.io/vitess/go/vt/topotools" "vitess.io/vitess/go/vt/vtgate/vindexes" vschemapb "vitess.io/vitess/go/vt/proto/vschema" @@ -123,12 +121,28 @@ func (vm *VSchemaManager) watchSrvVSchema(ctx context.Context, cell string) { // UpdateVSchema propagates the updated vschema to the topo. The entry for // the given keyspace is updated in the global topo, and the full SrvVSchema // is updated in all known cells. -func (vm *VSchemaManager) UpdateVSchema(ctx context.Context, ksName string, keyspace *vschemapb.Keyspace) error { +func (vm *VSchemaManager) UpdateVSchema(ctx context.Context, ksName string, vschema *vschemapb.SrvVSchema) error { topo := vm.e.serv.GetTopoServer() - err := topo.SaveVSchema(ctx, ksName, keyspace) + + ks := vschema.Keyspaces[ksName] + err := topo.SaveVSchema(ctx, ksName, ks) + if err != nil { + return err + } + + cells, err := vm.e.serv.GetTopoServer().GetKnownCells(ctx) if err != nil { return err } - return topotools.RebuildVSchema(ctx, logutil.NewConsoleLogger(), topo, nil) + // even if one cell fails, continue to try the others + for _, cell := range cells { + cellErr := vm.e.serv.GetTopoServer().UpdateSrvVSchema(ctx, cell, vschema) + if cellErr != nil { + err = cellErr + log.Errorf("error updating vschema in cell %s: %v", cell, cellErr) + } + } + + return err } From 1a50a4dbf6f10c45335d538ffa8d536fef1342aa Mon Sep 17 00:00:00 2001 From: Derek Perkins Date: Tue, 4 Dec 2018 08:33:34 -0700 Subject: [PATCH 12/35] config: rm secure_file_priv & innodb_support_xa Signed-off-by: Derek Perkins --- config/mycnf/master_mysql56.cnf | 2 -- 1 file changed, 2 deletions(-) diff --git a/config/mycnf/master_mysql56.cnf b/config/mycnf/master_mysql56.cnf index a3d1004a916..2c802b2332a 100644 --- a/config/mycnf/master_mysql56.cnf +++ b/config/mycnf/master_mysql56.cnf @@ -4,8 +4,6 @@ gtid_mode = ON log_bin log_slave_updates enforce_gtid_consistency -secure_file_priv = NULL -innodb_support_xa = 0 # Crash-safe replication settings. master_info_repository = TABLE From 935839304790d77c58056dc74e83a725e526a4dc Mon Sep 17 00:00:00 2001 From: Brian Ramos Date: Wed, 5 Dec 2018 14:59:42 -0800 Subject: [PATCH 13/35] stop using NFS for synced folders, put a comment explaining why Signed-off-by: Brian Ramos --- Vagrantfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 6885cb5ed6f..3b38717c90c 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -39,10 +39,13 @@ Vagrant.configure("2") do |config| # Demo Appp config.vm.network "forwarded_port", guest: 8000, host: 8000 # http - # If possible, use nfs, this gives a good boost to IO operations in the VM. - # if you run into with nfs, just remove this from the synced folder - - config.vm.synced_folder ".", "/vagrant/src/vitess.io/vitess", type: "nfs" + # N.B. It's possible to use NFS to help speed up IO operations in the VM but + # some OSX users have reported issues running govendor with it enabled. + # Additional details in https://github.com/vitessio/vitess/issues/4396 + # + # To enable, use: + # config.vm.synced_folder ".", "/vagrant/src/vitess.io/vitess", type: "nfs" + config.vm.synced_folder ".", "/vagrant/src/vitess.io/vitess" config.vm.provider :virtualbox do |vb| vb.name = "vitess" From 5fba41f797f2a06e9b173835835cfa7e19df7136 Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 5 Dec 2018 17:58:06 -0800 Subject: [PATCH 14/35] adapt helm example to run locally Signed-off-by: deepthi --- examples/local/etcd-up.sh | 11 ++++++----- examples/local/sharded-vtworker.sh | 2 +- examples/local/vtctld-up.sh | 2 +- examples/local/vtgate-up.sh | 2 +- examples/local/vttablet-down.sh | 4 ++-- examples/local/vttablet-up.sh | 16 ++++++++++------ examples/local/vtworker-up.sh | 3 ++- examples/local/zk-up.sh | 8 +++++--- 8 files changed, 28 insertions(+), 20 deletions(-) diff --git a/examples/local/etcd-up.sh b/examples/local/etcd-up.sh index dd6e77d3690..7d68dae9f27 100755 --- a/examples/local/etcd-up.sh +++ b/examples/local/etcd-up.sh @@ -17,6 +17,7 @@ # This is an example script that creates a quorum of ZooKeeper servers. set -e +cell=${CELL:-'test'} script_root=$(dirname "${BASH_SOURCE[0]}") @@ -33,18 +34,18 @@ echo "add /vitess/global" "${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcdctl --endpoints "http://${ETCD_SERVER}" mkdir /vitess/global & -echo "add /vitess/test" -"${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcdctl --endpoints "http://${ETCD_SERVER}" mkdir /vitess/test & +echo "add /vitess/$cell" +"${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcdctl --endpoints "http://${ETCD_SERVER}" mkdir /vitess/$cell & # And also add the CellInfo description for the 'test' cell. # If the node already exists, it's fine, means we used existing data. -echo "add test CellInfo" +echo "add $cell CellInfo" set +e # shellcheck disable=SC2086 "${VTROOT}"/bin/vtctl $TOPOLOGY_FLAGS AddCellInfo \ - -root /vitess/test \ + -root /vitess/$cell \ -server_address "${ETCD_SERVER}" \ - test + $cell set -e echo "etcd start done..." diff --git a/examples/local/sharded-vtworker.sh b/examples/local/sharded-vtworker.sh index d8b64df8a6b..8f7fcdd9c74 100755 --- a/examples/local/sharded-vtworker.sh +++ b/examples/local/sharded-vtworker.sh @@ -24,7 +24,7 @@ source $script_root/env.sh echo "Starting vtworker..." exec $VTROOT/bin/vtworker \ $TOPOLOGY_FLAGS \ - -cell test \ + -cell zone1 \ -log_dir $VTDATAROOT/tmp \ -alsologtostderr \ -use_v3_resharding_mode \ diff --git a/examples/local/vtctld-up.sh b/examples/local/vtctld-up.sh index 28857214cc6..0fb089718d8 100755 --- a/examples/local/vtctld-up.sh +++ b/examples/local/vtctld-up.sh @@ -18,7 +18,7 @@ set -e -cell='test' +cell=${CELL:-'test'} grpc_port=15999 script_root=`dirname "${BASH_SOURCE}"` diff --git a/examples/local/vtgate-up.sh b/examples/local/vtgate-up.sh index 71d2d6eb474..f79a4d9dc6d 100755 --- a/examples/local/vtgate-up.sh +++ b/examples/local/vtgate-up.sh @@ -18,7 +18,7 @@ set -e -cell='test' +cell=${CELL:-'test'} web_port=15001 grpc_port=15991 mysql_server_port=15306 diff --git a/examples/local/vttablet-down.sh b/examples/local/vttablet-down.sh index 66191b4f44c..0a903e5293e 100755 --- a/examples/local/vttablet-down.sh +++ b/examples/local/vttablet-down.sh @@ -17,7 +17,7 @@ # This is an example script that stops the mysqld and vttablet instances # created by vttablet-up.sh -cell='test' +cell=${CELL:-'test'} uid_base=${UID_BASE:-'100'} script_root=`dirname "${BASH_SOURCE}"` @@ -25,7 +25,7 @@ source $script_root/env.sh # Stop 3 vttablets by default. # Pass a list of UID indices on the command line to override. -uids=${@:-'0 1 2 3 4'} +uids=${@:-'0 1 2'} wait_pids='' diff --git a/examples/local/vttablet-up.sh b/examples/local/vttablet-up.sh index fc7d40a9764..b5ccd4a2e43 100755 --- a/examples/local/vttablet-up.sh +++ b/examples/local/vttablet-up.sh @@ -18,7 +18,7 @@ set -e -cell='test' +cell=${CELL:-'test'} keyspace=${KEYSPACE:-'test_keyspace'} shard=${SHARD:-'0'} uid_base=${UID_BASE:-'100'} @@ -38,12 +38,16 @@ source $script_root/env.sh init_db_sql_file="$VTROOT/config/init_db.sql" +export EXTRA_MY_CNF=$VTROOT/config/mycnf/default-fast.cnf + case "$MYSQL_FLAVOR" in "MySQL56") - export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mysql56.cnf + export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mysql56.cnf +# export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mysql56.cnf ;; "MariaDB") - export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mariadb.cnf + export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mariadb.cnf +# export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mariadb.cnf ;; *) echo "Please set MYSQL_FLAVOR to MySQL56 or MariaDB." @@ -55,7 +59,7 @@ mkdir -p $VTDATAROOT/backups # Start 5 vttablets by default. # Pass TABLETS_UIDS indices as env variable to change -uids=${TABLETS_UIDS:-'0 1 2 3 4'} +uids=${TABLETS_UIDS:-'0 1 2'} # Start all mysqlds in background. for uid_index in $uids; do @@ -71,7 +75,7 @@ for uid_index in $uids; do export MYSQL_PORT=$mysql_port tablet_type=replica - if [[ $uid_index -gt 2 ]]; then + if [[ $uid_index -gt 1 ]]; then tablet_type=rdonly fi @@ -110,7 +114,7 @@ for uid_index in $uids; do printf -v tablet_dir 'vt_%010d' $uid printf -v tablet_logfile 'vttablet_%010d_querylog.txt' $uid tablet_type=replica - if [[ $uid_index -gt 2 ]]; then + if [[ $uid_index -gt 1 ]]; then tablet_type=rdonly fi diff --git a/examples/local/vtworker-up.sh b/examples/local/vtworker-up.sh index 29a95f0342b..b13b3dfc48b 100755 --- a/examples/local/vtworker-up.sh +++ b/examples/local/vtworker-up.sh @@ -18,13 +18,14 @@ set -e +cell=${CELL:-'test'} script_root=`dirname "${BASH_SOURCE}"` source $script_root/env.sh echo "Starting vtworker..." exec $VTROOT/bin/vtworker \ $TOPOLOGY_FLAGS \ - -cell test \ + -cell $cell \ -log_dir $VTDATAROOT/tmp \ -alsologtostderr \ -service_map=grpc-vtworker \ diff --git a/examples/local/zk-up.sh b/examples/local/zk-up.sh index e10507c0924..3cf1bfc97be 100755 --- a/examples/local/zk-up.sh +++ b/examples/local/zk-up.sh @@ -18,6 +18,8 @@ set -e +cell=${CELL:-'test'} + script_root=`dirname "${BASH_SOURCE}"` source $script_root/env.sh @@ -50,14 +52,14 @@ done echo "Started zk servers." -# Add the CellInfo description for the 'test' cell. +# Add the CellInfo description for the $CELL cell. # If the node already exists, it's fine, means we used existing data. set +e # shellcheck disable=SC2086 $VTROOT/bin/vtctl $TOPOLOGY_FLAGS AddCellInfo \ - -root /vitess/test \ + -root /vitess/$cell \ -server_address $ZK_SERVER \ - test + $cell set -e echo "Configured zk servers." From 54299e34f4e70a1341600aff43a5b1319b934cef Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 5 Dec 2018 17:58:59 -0800 Subject: [PATCH 15/35] adapt helm example to run locally Signed-off-by: deepthi --- examples/local/101_initial_cluster.sh | 33 ++++++++++++++++++ examples/local/201_customer_keyspace.sh | 24 +++++++++++++ examples/local/202_customer_tablets.sh | 31 +++++++++++++++++ examples/local/203_vertical_split.sh | 33 ++++++++++++++++++ .../local/204_vertical_migrate_replicas.sh | 27 +++++++++++++++ examples/local/205_vertical_migrate_master.sh | 26 ++++++++++++++ examples/local/206_clean_commerce.sh | 29 ++++++++++++++++ examples/local/301_customer_sharded.sh | 29 ++++++++++++++++ examples/local/302_new_shards.sh | 32 +++++++++++++++++ examples/local/303_horizontal_split.sh | 33 ++++++++++++++++++ examples/local/304_migrate_replicas.sh | 28 +++++++++++++++ examples/local/305_migrate_master.sh | 26 ++++++++++++++ examples/local/306_down_shard_0.sh | 26 ++++++++++++++ examples/local/401_teardown.sh | 32 +++++++++++++++++ examples/local/create_commerce_schema.sql | 18 ++++++++++ examples/local/create_commerce_seq.sql | 4 +++ examples/local/create_customer_sharded.sql | 2 ++ examples/local/drop_commerce_tables.sql | 2 ++ examples/local/vschema_commerce_initial.json | 7 ++++ examples/local/vschema_commerce_seq.json | 11 ++++++ examples/local/vschema_commerce_vsplit.json | 5 +++ examples/local/vschema_customer_sharded.json | 34 +++++++++++++++++++ examples/local/vschema_customer_vsplit.json | 6 ++++ 23 files changed, 498 insertions(+) create mode 100755 examples/local/101_initial_cluster.sh create mode 100755 examples/local/201_customer_keyspace.sh create mode 100755 examples/local/202_customer_tablets.sh create mode 100755 examples/local/203_vertical_split.sh create mode 100755 examples/local/204_vertical_migrate_replicas.sh create mode 100755 examples/local/205_vertical_migrate_master.sh create mode 100755 examples/local/206_clean_commerce.sh create mode 100755 examples/local/301_customer_sharded.sh create mode 100755 examples/local/302_new_shards.sh create mode 100755 examples/local/303_horizontal_split.sh create mode 100755 examples/local/304_migrate_replicas.sh create mode 100755 examples/local/305_migrate_master.sh create mode 100755 examples/local/306_down_shard_0.sh create mode 100755 examples/local/401_teardown.sh create mode 100644 examples/local/create_commerce_schema.sql create mode 100644 examples/local/create_commerce_seq.sql create mode 100644 examples/local/create_customer_sharded.sql create mode 100644 examples/local/drop_commerce_tables.sql create mode 100644 examples/local/vschema_commerce_initial.json create mode 100644 examples/local/vschema_commerce_seq.json create mode 100644 examples/local/vschema_commerce_vsplit.json create mode 100644 examples/local/vschema_customer_sharded.json create mode 100644 examples/local/vschema_customer_vsplit.json diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh new file mode 100755 index 00000000000..a325f9ad2a0 --- /dev/null +++ b/examples/local/101_initial_cluster.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +CELL=zone1 $script_root/zk-up.sh +CELL=zone1 $script_root/vtctld-up.sh +CELL=zone1 KEYSPACE=commerce UID_BASE=100 $script_root/vttablet-up.sh +sleep 15 +./lvtctl.sh InitShardMaster -force commerce/0 zone1-100 +./lvtctl.sh ApplySchema -sql-file create_commerce_schema.sql commerce +./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_initial.json commerce +CELL=zone1 $script_root/vtgate-up.sh + +disown -a diff --git a/examples/local/201_customer_keyspace.sh b/examples/local/201_customer_keyspace.sh new file mode 100755 index 00000000000..0aedba25fe7 --- /dev/null +++ b/examples/local/201_customer_keyspace.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +./lvtctl.sh CreateKeyspace -served_from='master:commerce,replica:commerce,rdonly:commerce' customer + +disown -a diff --git a/examples/local/202_customer_tablets.sh b/examples/local/202_customer_tablets.sh new file mode 100755 index 00000000000..235b76fd4f0 --- /dev/null +++ b/examples/local/202_customer_tablets.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +CELL=zone1 KEYSPACE=customer UID_BASE=200 $script_root/vttablet-up.sh +sleep 15 +./lvtctl.sh InitShardMaster -force customer/0 zone1-200 +./lvtctl.sh CopySchemaShard -tables customer,corder commerce/0 customer/0 +./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_vsplit.json commerce +./lvtctl.sh ApplyVSchema -vschema_file vschema_customer_vsplit.json customer + +disown -a diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh new file mode 100755 index 00000000000..053a97f7b38 --- /dev/null +++ b/examples/local/203_vertical_split.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` +source $script_root/env.sh + +$VTROOT/bin/vtworker \ + $TOPOLOGY_FLAGS \ + -cell zone1 \ + -log_dir $VTDATAROOT/tmp \ + -alsologtostderr \ + -use_v3_resharding_mode \ + VerticalSplitClone -min_healthy_rdonly_tablets=1 -tables=customer,corder customer/0 + +disown -a diff --git a/examples/local/204_vertical_migrate_replicas.sh b/examples/local/204_vertical_migrate_replicas.sh new file mode 100755 index 00000000000..4c9acc38445 --- /dev/null +++ b/examples/local/204_vertical_migrate_replicas.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh MigrateServedFrom customer/0 rdonly +./lvtctl.sh MigrateServedFrom customer/0 replica + +disown -a diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh new file mode 100755 index 00000000000..a21c1bf6848 --- /dev/null +++ b/examples/local/205_vertical_migrate_master.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh MigrateServedFrom customer/0 master + +disown -a diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh new file mode 100755 index 00000000000..010bd8ba999 --- /dev/null +++ b/examples/local/206_clean_commerce.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh ApplySchema -sql-file drop_commerce_tables.sql commerce +./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 rdonly +./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 replica +./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 master + +disown -a diff --git a/examples/local/301_customer_sharded.sh b/examples/local/301_customer_sharded.sh new file mode 100755 index 00000000000..a1774158b30 --- /dev/null +++ b/examples/local/301_customer_sharded.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh ApplySchema -sql-file create_commerce_seq.sql commerce +./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_seq.json commerce +./lvtctl.sh ApplySchema -sql-file create_customer_sharded.sql customer +./lvtctl.sh ApplyVSchema -vschema_file vschema_customer_sharded.json customer + +disown -a diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh new file mode 100755 index 00000000000..de480e1494e --- /dev/null +++ b/examples/local/302_new_shards.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +SHARD=-80 CELL=zone1 KEYSPACE=customer UID_BASE=300 $script_root/vttablet-up.sh +SHARD=80- CELL=zone1 KEYSPACE=customer UID_BASE=400 $script_root/vttablet-up.sh +sleep 15 +./lvtctl.sh InitShardMaster -force customer/-80 zone1-300 +./lvtctl.sh InitShardMaster -force customer/80- zone1-400 +./lvtctl.sh CopySchemaShard customer/0 customer/-80 +./lvtctl.sh CopySchemaShard customer/0 customer/80- + +disown -a diff --git a/examples/local/303_horizontal_split.sh b/examples/local/303_horizontal_split.sh new file mode 100755 index 00000000000..8859b5dcf0a --- /dev/null +++ b/examples/local/303_horizontal_split.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` +source $script_root/env.sh + +$VTROOT/bin/vtworker \ + $TOPOLOGY_FLAGS \ + -cell zone1 \ + -log_dir $VTDATAROOT/tmp \ + -alsologtostderr \ + -use_v3_resharding_mode \ + SplitClone -min_healthy_rdonly_tablets=1 customer/0 + +disown -a diff --git a/examples/local/304_migrate_replicas.sh b/examples/local/304_migrate_replicas.sh new file mode 100755 index 00000000000..6722e21e2f2 --- /dev/null +++ b/examples/local/304_migrate_replicas.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh MigrateServedTypes customer/0 rdonly +./lvtctl.sh MigrateServedTypes customer/0 replica + + +disown -a diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh new file mode 100755 index 00000000000..ede4e3c970f --- /dev/null +++ b/examples/local/305_migrate_master.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh MigrateServedTypes customer/0 master + +disown -a diff --git a/examples/local/306_down_shard_0.sh b/examples/local/306_down_shard_0.sh new file mode 100755 index 00000000000..e8fe8112ddf --- /dev/null +++ b/examples/local/306_down_shard_0.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh DeleteShard -recursive customer/0 + +disown -a diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh new file mode 100755 index 00000000000..dc58874c4f6 --- /dev/null +++ b/examples/local/401_teardown.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this scripts brings up zookeeper and all the vitess components +# required for a single shard deployment. + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./vtgate-down.sh +CELL=zone1 UID_BASE=100 $script_root/vttablet-down.sh +CELL=zone1 UID_BASE=200 $script_root/vttablet-down.sh +CELL=zone1 UID_BASE=300 $script_root/vttablet-down.sh +CELL=zone1 UID_BASE=400 $script_root/vttablet-down.sh +./vtctld-down.sh +./zk-down.sh + +disown -a diff --git a/examples/local/create_commerce_schema.sql b/examples/local/create_commerce_schema.sql new file mode 100644 index 00000000000..e62e7d2e8bf --- /dev/null +++ b/examples/local/create_commerce_schema.sql @@ -0,0 +1,18 @@ +create table product( + sku varbinary(128), + description varbinary(128), + price bigint, + primary key(sku) +) ENGINE=InnoDB; +create table customer( + customer_id bigint not null auto_increment, + email varbinary(128), + primary key(customer_id) +) ENGINE=InnoDB; +create table corder( + order_id bigint not null auto_increment, + customer_id bigint, + sku varbinary(128), + price bigint, + primary key(order_id) +) ENGINE=InnoDB; diff --git a/examples/local/create_commerce_seq.sql b/examples/local/create_commerce_seq.sql new file mode 100644 index 00000000000..b4e66c771b6 --- /dev/null +++ b/examples/local/create_commerce_seq.sql @@ -0,0 +1,4 @@ +create table customer_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +insert into customer_seq(id, next_id, cache) values(0, 1000, 100); +create table order_seq(id int, next_id bigint, cache bigint, primary key(id)) comment 'vitess_sequence'; +insert into order_seq(id, next_id, cache) values(0, 1000, 100); diff --git a/examples/local/create_customer_sharded.sql b/examples/local/create_customer_sharded.sql new file mode 100644 index 00000000000..9d3931c7c94 --- /dev/null +++ b/examples/local/create_customer_sharded.sql @@ -0,0 +1,2 @@ +alter table customer change customer_id customer_id bigint not null; +alter table corder change order_id order_id bigint not null; diff --git a/examples/local/drop_commerce_tables.sql b/examples/local/drop_commerce_tables.sql new file mode 100644 index 00000000000..3393ac8141a --- /dev/null +++ b/examples/local/drop_commerce_tables.sql @@ -0,0 +1,2 @@ +drop table customer; +drop table corder; diff --git a/examples/local/vschema_commerce_initial.json b/examples/local/vschema_commerce_initial.json new file mode 100644 index 00000000000..0d1bae44428 --- /dev/null +++ b/examples/local/vschema_commerce_initial.json @@ -0,0 +1,7 @@ +{ + "tables": { + "product": {}, + "customer": {}, + "corder": {} + } +} diff --git a/examples/local/vschema_commerce_seq.json b/examples/local/vschema_commerce_seq.json new file mode 100644 index 00000000000..2e564fa6c96 --- /dev/null +++ b/examples/local/vschema_commerce_seq.json @@ -0,0 +1,11 @@ +{ + "tables": { + "customer_seq": { + "type": "sequence" + }, + "order_seq": { + "type": "sequence" + }, + "product": {} + } +} diff --git a/examples/local/vschema_commerce_vsplit.json b/examples/local/vschema_commerce_vsplit.json new file mode 100644 index 00000000000..30f34172e31 --- /dev/null +++ b/examples/local/vschema_commerce_vsplit.json @@ -0,0 +1,5 @@ +{ + "tables": { + "product": {} + } +} diff --git a/examples/local/vschema_customer_sharded.json b/examples/local/vschema_customer_sharded.json new file mode 100644 index 00000000000..3109e2a2f3c --- /dev/null +++ b/examples/local/vschema_customer_sharded.json @@ -0,0 +1,34 @@ +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "customer": { + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash" + } + ], + "auto_increment": { + "column": "customer_id", + "sequence": "customer_seq" + } + }, + "corder": { + "column_vindexes": [ + { + "column": "customer_id", + "name": "hash" + } + ], + "auto_increment": { + "column": "order_id", + "sequence": "order_seq" + } + } + } +} diff --git a/examples/local/vschema_customer_vsplit.json b/examples/local/vschema_customer_vsplit.json new file mode 100644 index 00000000000..b113a9adc9e --- /dev/null +++ b/examples/local/vschema_customer_vsplit.json @@ -0,0 +1,6 @@ +{ + "tables": { + "customer": {}, + "corder": {} + } +} From 1b83bf3f866deae5a4ba73ae41aae8eb86a0968a Mon Sep 17 00:00:00 2001 From: deepthi Date: Wed, 5 Dec 2018 19:37:41 -0800 Subject: [PATCH 16/35] remove unused scripts Signed-off-by: deepthi --- examples/local/sharded-vttablet-down.sh | 24 ------------------- examples/local/sharded-vttablet-up.sh | 29 ---------------------- examples/local/sharded-vtworker.sh | 32 ------------------------- 3 files changed, 85 deletions(-) delete mode 100755 examples/local/sharded-vttablet-down.sh delete mode 100755 examples/local/sharded-vttablet-up.sh delete mode 100755 examples/local/sharded-vtworker.sh diff --git a/examples/local/sharded-vttablet-down.sh b/examples/local/sharded-vttablet-down.sh deleted file mode 100755 index 1b6ca861442..00000000000 --- a/examples/local/sharded-vttablet-down.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# Copyright 2017 Google Inc. -# -# 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. - -# This is an example script that stops the mysqld and vttablet instances -# created by sharded-vttablet-up.sh - -script_root=`dirname "${BASH_SOURCE}"` - -UID_BASE=200 $script_root/vttablet-down.sh "$@" -UID_BASE=300 $script_root/vttablet-down.sh "$@" - diff --git a/examples/local/sharded-vttablet-up.sh b/examples/local/sharded-vttablet-up.sh deleted file mode 100755 index c7072ced079..00000000000 --- a/examples/local/sharded-vttablet-up.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash - -# Copyright 2017 Google Inc. -# -# 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. - -# This is an example script that creates a sharded vttablet deployment. - -set -e - -script_root=`dirname "${BASH_SOURCE}"` - -# Shard -80 contains all entries whose keyspace ID has a first byte < 0x80. -# See: http://vitess.io/overview/concepts/#keyspace-id -SHARD=-80 UID_BASE=200 $script_root/vttablet-up.sh "$@" - -# Shard 80- contains all entries whose keyspace ID has a first byte >= 0x80. -SHARD=80- UID_BASE=300 $script_root/vttablet-up.sh "$@" - diff --git a/examples/local/sharded-vtworker.sh b/examples/local/sharded-vtworker.sh deleted file mode 100755 index 8f7fcdd9c74..00000000000 --- a/examples/local/sharded-vtworker.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/bash - -# Copyright 2017 Google Inc. -# -# 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. - -# This is an example script that runs vtworker. - -set -e - -script_root=`dirname "${BASH_SOURCE}"` -source $script_root/env.sh - -echo "Starting vtworker..." -exec $VTROOT/bin/vtworker \ - $TOPOLOGY_FLAGS \ - -cell zone1 \ - -log_dir $VTDATAROOT/tmp \ - -alsologtostderr \ - -use_v3_resharding_mode \ - "$@" - From e2ffdb228dffb89f0a0587452eb93656936a2310 Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 6 Dec 2018 12:45:09 -0800 Subject: [PATCH 17/35] add descriptive comments to scripts, add etcd option, set MYSQL_FLAVOR is it isn't already set Signed-off-by: deepthi --- examples/local/101_initial_cluster.sh | 21 +++++++++++++++++-- examples/local/201_customer_keyspace.sh | 3 +-- examples/local/202_customer_tablets.sh | 5 +++-- examples/local/203_vertical_split.sh | 4 ++-- .../local/204_vertical_migrate_replicas.sh | 4 ++-- examples/local/205_vertical_migrate_master.sh | 4 ++-- examples/local/206_clean_commerce.sh | 4 ++-- examples/local/301_customer_sharded.sh | 7 +++++-- examples/local/302_new_shards.sh | 4 ++-- examples/local/303_horizontal_split.sh | 4 ++-- examples/local/304_migrate_replicas.sh | 3 +-- examples/local/305_migrate_master.sh | 3 +-- examples/local/306_down_shard_0.sh | 3 +-- examples/local/401_teardown.sh | 13 +++++++++--- examples/local/env.sh | 9 ++++++++ examples/local/etcd-down.sh | 2 +- examples/local/etcd-up.sh | 6 +++--- examples/local/vttablet-up.sh | 4 +--- 18 files changed, 67 insertions(+), 36 deletions(-) diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index a325f9ad2a0..921afde70fb 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -14,20 +14,37 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components +# this script brings up zookeeper and all the vitess components # required for a single shard deployment. set -e script_root=`dirname "${BASH_SOURCE}"` -CELL=zone1 $script_root/zk-up.sh +# start topo server +if [ "${TOPO}" = "etcd2" ]; then + CELL=zone1 $script_root/etcd-up.sh +else + CELL=zone1 $script_root/zk-up.sh +fi + +# start vtctld CELL=zone1 $script_root/vtctld-up.sh + +# start vttablets for keyspace commerce CELL=zone1 KEYSPACE=commerce UID_BASE=100 $script_root/vttablet-up.sh sleep 15 + +# set one of the replicas to master ./lvtctl.sh InitShardMaster -force commerce/0 zone1-100 + +# create the schema ./lvtctl.sh ApplySchema -sql-file create_commerce_schema.sql commerce + +# create the vschema ./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_initial.json commerce + +# start vtgate CELL=zone1 $script_root/vtgate-up.sh disown -a diff --git a/examples/local/201_customer_keyspace.sh b/examples/local/201_customer_keyspace.sh index 0aedba25fe7..210c4eaf5a9 100755 --- a/examples/local/201_customer_keyspace.sh +++ b/examples/local/201_customer_keyspace.sh @@ -14,8 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script creates a new keyspace in preparation for vertical resharding set -e diff --git a/examples/local/202_customer_tablets.sh b/examples/local/202_customer_tablets.sh index 235b76fd4f0..75deccbacb6 100755 --- a/examples/local/202_customer_tablets.sh +++ b/examples/local/202_customer_tablets.sh @@ -14,8 +14,9 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script creates the tablets and initializes them for vertical +# resharding it also splits the vschema between the two keyspaces +# old (commerce) and new (customer) set -e diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh index 053a97f7b38..7a88c0d4860 100755 --- a/examples/local/203_vertical_split.sh +++ b/examples/local/203_vertical_split.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script copies over all the data from commerce keyspace to +# customer keyspace for the customer and corder tables set -e diff --git a/examples/local/204_vertical_migrate_replicas.sh b/examples/local/204_vertical_migrate_replicas.sh index 4c9acc38445..567dca6f508 100755 --- a/examples/local/204_vertical_migrate_replicas.sh +++ b/examples/local/204_vertical_migrate_replicas.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script migrates traffic for the new customer keyspace to the new +# tablets of types rdonly and replica set -e diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh index a21c1bf6848..560564e5099 100755 --- a/examples/local/205_vertical_migrate_master.sh +++ b/examples/local/205_vertical_migrate_master.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script migrates master traffic for the customer keyspace to the +# new master tablet set -e diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh index 010bd8ba999..eeef5d2c04f 100755 --- a/examples/local/206_clean_commerce.sh +++ b/examples/local/206_clean_commerce.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script removes the customer and corder tables from the commerce +# keyspace set -e diff --git a/examples/local/301_customer_sharded.sh b/examples/local/301_customer_sharded.sh index a1774158b30..c7f766810d6 100755 --- a/examples/local/301_customer_sharded.sh +++ b/examples/local/301_customer_sharded.sh @@ -14,8 +14,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script creates vitess sequences for the auto_increment fields +# and alters the fields to no longer be auto_increment in preparation +# for horizontal sharding +# it also changes the customer vschema from unsharded to sharded and +# sets up the necessary vindexes set -e diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh index de480e1494e..30c1cb6b507 100755 --- a/examples/local/302_new_shards.sh +++ b/examples/local/302_new_shards.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script brings up new tablets for the two new shards that we will +# be creating in the customer keyspace and copies the schema set -e diff --git a/examples/local/303_horizontal_split.sh b/examples/local/303_horizontal_split.sh index 8859b5dcf0a..6851f6c378d 100755 --- a/examples/local/303_horizontal_split.sh +++ b/examples/local/303_horizontal_split.sh @@ -14,8 +14,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script copies the data from customer/0 to customer/-80 and customer/80- +# each row will be copied to exactly one shard based on the vindex value set -e diff --git a/examples/local/304_migrate_replicas.sh b/examples/local/304_migrate_replicas.sh index 6722e21e2f2..9e5d381e515 100755 --- a/examples/local/304_migrate_replicas.sh +++ b/examples/local/304_migrate_replicas.sh @@ -14,8 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script migrates traffic for the rdonly and replica tablets set -e diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh index ede4e3c970f..a9a01006171 100755 --- a/examples/local/305_migrate_master.sh +++ b/examples/local/305_migrate_master.sh @@ -14,8 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script migrates traffic for the master tablet set -e diff --git a/examples/local/306_down_shard_0.sh b/examples/local/306_down_shard_0.sh index e8fe8112ddf..5d32383dea4 100755 --- a/examples/local/306_down_shard_0.sh +++ b/examples/local/306_down_shard_0.sh @@ -14,8 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script deletes the old shard 0 which has been replaced by 2 shards set -e diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh index dc58874c4f6..d0663ac7da4 100755 --- a/examples/local/401_teardown.sh +++ b/examples/local/401_teardown.sh @@ -14,8 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this scripts brings up zookeeper and all the vitess components -# required for a single shard deployment. +# this script brings down zookeeper and all the vitess components +# we brought up in the example +# optionally, you may want to delete everything that was created +# by the example from $VTDATAROOT set -e @@ -27,6 +29,11 @@ CELL=zone1 UID_BASE=200 $script_root/vttablet-down.sh CELL=zone1 UID_BASE=300 $script_root/vttablet-down.sh CELL=zone1 UID_BASE=400 $script_root/vttablet-down.sh ./vtctld-down.sh -./zk-down.sh + +if [ "${TOPO}" = "etcd2" ]; then + CELL=zone1 $script_root/etcd-down.sh +else + CELL=zone1 $script_root/zk-down.sh +fi disown -a diff --git a/examples/local/env.sh b/examples/local/env.sh index 00ab9bacdaa..dab3ae00be6 100644 --- a/examples/local/env.sh +++ b/examples/local/env.sh @@ -28,6 +28,15 @@ if [ -z "$VT_MYSQL_ROOT" ]; then export VT_MYSQL_ROOT=$(dirname `dirname $mysql_path`) fi +# restore MYSQL_FLAVOR, saved by bootstrap.sh +if [ -r "$VTROOT/dist/MYSQL_FLAVOR" ]; then + MYSQL_FLAVOR=$(cat "$VTROOT/dist/MYSQL_FLAVOR") + export MYSQL_FLAVOR +fi + +if [ -z "$MYSQL_FLAVOR" ]; then + export MYSQL_FLAVOR=MySQL56 +fi if [ "${TOPO}" = "etcd2" ]; then echo "enter etcd2 env" diff --git a/examples/local/etcd-down.sh b/examples/local/etcd-down.sh index 5888ddb52e8..5bc10ac0cf4 100755 --- a/examples/local/etcd-down.sh +++ b/examples/local/etcd-down.sh @@ -26,5 +26,5 @@ source "${script_root}/env.sh" # Stop etcd servers. echo "Stopping etcd servers..." -ETCD_VERSION=$(cat "$VTROOT/dist/etcd/version") +ETCD_VERSION=$(cat "$VTROOT/dist/etcd/.installed_version") kill -9 "$(pgrep -f "dist/etcd/etcd-${ETCD_VERSION}-linux-amd64/etcd")" diff --git a/examples/local/etcd-up.sh b/examples/local/etcd-up.sh index 7d68dae9f27..955169e88fd 100755 --- a/examples/local/etcd-up.sh +++ b/examples/local/etcd-up.sh @@ -25,9 +25,9 @@ script_root=$(dirname "${BASH_SOURCE[0]}") # shellcheck disable=SC1091 source "${script_root}/env.sh" -ETCD_VERSION=$(cat "${VTROOT}/dist/etcd/version") +ETCD_VERSION=$(cat "${VTROOT}/dist/etcd/.installed_version") -"${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcd --data-dir "${VTDATAROOT}/etcd/" --listen-client-urls "http://${ETCD_SERVER}" --advertise-client-urls "http://${ETCD_SERVER}" & +"${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcd --data-dir "${VTDATAROOT}/etcd/" --listen-client-urls "http://${ETCD_SERVER}" --advertise-client-urls "http://${ETCD_SERVER}" > "${VTDATAROOT}"/tmp/etcd.out 2>&1 & sleep 5 echo "add /vitess/global" @@ -37,7 +37,7 @@ echo "add /vitess/global" echo "add /vitess/$cell" "${VTROOT}"/dist/etcd/etcd-"${ETCD_VERSION}"-linux-amd64/etcdctl --endpoints "http://${ETCD_SERVER}" mkdir /vitess/$cell & -# And also add the CellInfo description for the 'test' cell. +# And also add the CellInfo description for the cell. # If the node already exists, it's fine, means we used existing data. echo "add $cell CellInfo" set +e diff --git a/examples/local/vttablet-up.sh b/examples/local/vttablet-up.sh index b5ccd4a2e43..00cea50a5b5 100755 --- a/examples/local/vttablet-up.sh +++ b/examples/local/vttablet-up.sh @@ -43,11 +43,9 @@ export EXTRA_MY_CNF=$VTROOT/config/mycnf/default-fast.cnf case "$MYSQL_FLAVOR" in "MySQL56") export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mysql56.cnf -# export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mysql56.cnf ;; "MariaDB") export EXTRA_MY_CNF=$EXTRA_MY_CNF:$VTROOT/config/mycnf/master_mariadb.cnf -# export EXTRA_MY_CNF=$VTROOT/config/mycnf/master_mariadb.cnf ;; *) echo "Please set MYSQL_FLAVOR to MySQL56 or MariaDB." @@ -57,7 +55,7 @@ esac mkdir -p $VTDATAROOT/backups -# Start 5 vttablets by default. +# Start 3 vttablets by default. # Pass TABLETS_UIDS indices as env variable to change uids=${TABLETS_UIDS:-'0 1 2'} From c16933eb5f7b0fc1b793588be7d8180b86f8e20e Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 6 Dec 2018 16:27:52 -0800 Subject: [PATCH 18/35] remove unused files, add sql scripts to show intermediate and final results of resharding Signed-off-by: deepthi --- examples/local/101_initial_cluster.sh | 5 ++ examples/local/203_vertical_split.sh | 4 + examples/local/205_vertical_migrate_master.sh | 3 + examples/local/206_clean_commerce.sh | 3 + examples/local/302_new_shards.sh | 5 ++ examples/local/305_migrate_master.sh | 4 + examples/local/client.py | 86 ------------------- examples/local/client.sh | 33 ------- examples/local/create_test_table.sql | 7 -- examples/local/insert_commerce_data.sql | 12 +++ examples/local/select_commerce_data.sql | 8 ++ examples/local/select_customer-80_data.sql | 6 ++ examples/local/select_customer0_data.sql | 6 ++ examples/local/select_customer80-_data.sql | 6 ++ examples/local/vschema.json | 18 ---- 15 files changed, 62 insertions(+), 144 deletions(-) delete mode 100644 examples/local/client.py delete mode 100755 examples/local/client.sh delete mode 100644 examples/local/create_test_table.sql create mode 100644 examples/local/insert_commerce_data.sql create mode 100644 examples/local/select_commerce_data.sql create mode 100644 examples/local/select_customer-80_data.sql create mode 100644 examples/local/select_customer0_data.sql create mode 100644 examples/local/select_customer80-_data.sql delete mode 100644 examples/local/vschema.json diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index 921afde70fb..74f87d52396 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -46,5 +46,10 @@ sleep 15 # start vtgate CELL=zone1 $script_root/vtgate-up.sh +sleep 5 + +# insert rows into the tables. we are actually connecting to vtgate here, it will route the sql correctly +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password < insert_commerce_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql disown -a diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh index 7a88c0d4860..bf3630e9a30 100755 --- a/examples/local/203_vertical_split.sh +++ b/examples/local/203_vertical_split.sh @@ -30,4 +30,8 @@ $VTROOT/bin/vtworker \ -use_v3_resharding_mode \ VerticalSplitClone -min_healthy_rdonly_tablets=1 -tables=customer,corder customer/0 +sleep 2 +# check that customer and order data has been copied to customer keyspace +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer0_data.sql + disown -a diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh index 560564e5099..0578ddbaaff 100755 --- a/examples/local/205_vertical_migrate_master.sh +++ b/examples/local/205_vertical_migrate_master.sh @@ -23,4 +23,7 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedFrom customer/0 master +# customer and order data cannot be accessed from commerce keyspace +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql + disown -a diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh index eeef5d2c04f..342192de960 100755 --- a/examples/local/206_clean_commerce.sh +++ b/examples/local/206_clean_commerce.sh @@ -26,4 +26,7 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 replica ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 master +# customer and order tables have now been deleted from commerce keyspace +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql + disown -a diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh index 30c1cb6b507..e11caff88ef 100755 --- a/examples/local/302_new_shards.sh +++ b/examples/local/302_new_shards.sh @@ -29,4 +29,9 @@ sleep 15 ./lvtctl.sh CopySchemaShard customer/0 customer/-80 ./lvtctl.sh CopySchemaShard customer/0 customer/80- +sleep 15 +# new tables are empty +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer-80_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer80-_data.sql + disown -a diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh index a9a01006171..79c6ea22264 100755 --- a/examples/local/305_migrate_master.sh +++ b/examples/local/305_migrate_master.sh @@ -22,4 +22,8 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedTypes customer/0 master +# data has been copied over to shards, and databases for the new shards are now available +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer-80_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer80-_data.sql + disown -a diff --git a/examples/local/client.py b/examples/local/client.py deleted file mode 100644 index 1c7e8029b98..00000000000 --- a/examples/local/client.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/env python - -# Copyright 2017 Google Inc. -# -# 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. - - -"""Sample Vitess client in Python. - -This is a sample for using the Python Vitess client. -It's a script that inserts some random messages on random pages of the -guestbook sample app. - -Before running this, start up a local example cluster as described in the -README.md file. - -Then run client.sh, which sets up PYTHONPATH before running client.py: -vitess/examples/local$ ./client.sh -""" - -import argparse -import random -import time - -from vtdb import vtgate_client - -# register the python gRPC client upon import -from vtdb import grpc_vtgate_client # pylint: disable=unused-import - -# Parse args -parser = argparse.ArgumentParser() -parser.add_argument('--server', dest='server', default='localhost:15991') -parser.add_argument('--timeout', dest='timeout', type=float, default='10.0') -args = parser.parse_args() - -# Connect -conn = vtgate_client.connect('grpc', args.server, args.timeout) - -try: - # Insert some messages on random pages. - print 'Inserting into master...' - cursor = conn.cursor(tablet_type='master', writable=True) - for i in range(3): - page = random.randint(1, 100) - - cursor.begin() - cursor.execute( - 'INSERT INTO messages (page, time_created_ns, message)' - ' VALUES (:page, :time_created_ns, :message)', - { - 'page': page, - 'time_created_ns': int(time.time() * 1e9), - 'message': 'V is for speed', - }) - cursor.commit() - - # Read it back from the master. - print 'Reading from master...' - cursor.execute('SELECT page, time_created_ns, message FROM messages', {}) - for row in cursor.fetchall(): - print row - - cursor.close() - - # Read from a replica. - # Note that this may be behind master due to replication lag. - print 'Reading from replica...' - cursor = conn.cursor(tablet_type='replica') - cursor.execute('SELECT page, time_created_ns, message FROM messages', {}) - for row in cursor.fetchall(): - print row - cursor.close() - -finally: - # Clean up - conn.close() diff --git a/examples/local/client.sh b/examples/local/client.sh deleted file mode 100755 index fd7a6eeb0db..00000000000 --- a/examples/local/client.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# Copyright 2017 Google Inc. -# -# 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. - -# This is a wrapper script that sets up the environment for client.py. - -set -e - -hostname=`hostname -f` - -# We expect to find zk-client-conf.json in the same folder as this script. -script_root=`dirname "${BASH_SOURCE}"` - -# Set up environment. -for pkg in `find $VTROOT/dist -name site-packages`; do - export PYTHONPATH=$pkg:$PYTHONPATH -done - -export PYTHONPATH=$VTROOT/py-vtdb:$PYTHONPATH - -exec env python $script_root/client.py $* diff --git a/examples/local/create_test_table.sql b/examples/local/create_test_table.sql deleted file mode 100644 index bfb24b766ad..00000000000 --- a/examples/local/create_test_table.sql +++ /dev/null @@ -1,7 +0,0 @@ -CREATE TABLE messages ( - page BIGINT(20) UNSIGNED, - time_created_ns BIGINT(20) UNSIGNED, - message VARCHAR(10000), - PRIMARY KEY (page, time_created_ns) -) ENGINE=InnoDB - diff --git a/examples/local/insert_commerce_data.sql b/examples/local/insert_commerce_data.sql new file mode 100644 index 00000000000..32c4ab332fd --- /dev/null +++ b/examples/local/insert_commerce_data.sql @@ -0,0 +1,12 @@ +insert into customer(email) values('alice@domain.com'); +insert into customer(email) values('bob@domain.com'); +insert into customer(email) values('charlie@domain.com'); +insert into customer(email) values('dan@domain.com'); +insert into customer(email) values('eve@domain.com'); +insert into product(sku, description, price) values('SKU-1001', 'Monitor', 100); +insert into product(sku, description, price) values('SKU-1002', 'Keyboard', 30); +insert into corder(customer_id, sku, price) values(1, 'SKU-1001', 100); +insert into corder(customer_id, sku, price) values(2, 'SKU-1002', 30); +insert into corder(customer_id, sku, price) values(3, 'SKU-1002', 30); +insert into corder(customer_id, sku, price) values(4, 'SKU-1002', 30); +insert into corder(customer_id, sku, price) values(5, 'SKU-1002', 30); diff --git a/examples/local/select_commerce_data.sql b/examples/local/select_commerce_data.sql new file mode 100644 index 00000000000..d7494950b2d --- /dev/null +++ b/examples/local/select_commerce_data.sql @@ -0,0 +1,8 @@ +\! echo 'Using commerce/0' +use commerce/0; +\! echo 'Customer' +select * from customer; +\! echo 'Product' +select * from product; +\! echo 'COrder' +select * from corder; diff --git a/examples/local/select_customer-80_data.sql b/examples/local/select_customer-80_data.sql new file mode 100644 index 00000000000..2155068b423 --- /dev/null +++ b/examples/local/select_customer-80_data.sql @@ -0,0 +1,6 @@ +\! echo 'Using customer/-80' +use customer/-80; +\! echo 'Customer' +select * from customer; +\! echo 'COrder' +select * from corder; diff --git a/examples/local/select_customer0_data.sql b/examples/local/select_customer0_data.sql new file mode 100644 index 00000000000..01b0548ce3f --- /dev/null +++ b/examples/local/select_customer0_data.sql @@ -0,0 +1,6 @@ +\! echo 'Using customer/0' +use customer/0; +\! echo 'Customer' +select * from customer; +\! echo 'COrder' +select * from corder; diff --git a/examples/local/select_customer80-_data.sql b/examples/local/select_customer80-_data.sql new file mode 100644 index 00000000000..9e4a3c95dea --- /dev/null +++ b/examples/local/select_customer80-_data.sql @@ -0,0 +1,6 @@ +\! echo 'Using customer/80-' +use customer/80-; +\! echo 'Customer' +select * from customer; +\! echo 'COrder' +select * from corder; diff --git a/examples/local/vschema.json b/examples/local/vschema.json deleted file mode 100644 index 17e5dedf0c8..00000000000 --- a/examples/local/vschema.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "sharded": true, - "vindexes": { - "hash": { - "type": "hash" - } - }, - "tables": { - "messages": { - "column_vindexes": [ - { - "column": "page", - "name": "hash" - } - ] - } - } -} From 66426a95ed311a1ee20d00c55e425249ee742c7e Mon Sep 17 00:00:00 2001 From: deepthi Date: Thu, 6 Dec 2018 18:06:39 -0800 Subject: [PATCH 19/35] add back files required for test Signed-off-by: deepthi --- examples/local/client.py | 86 ++++++++++++++++++++++++++++ examples/local/client.sh | 33 +++++++++++ examples/local/create_test_table.sql | 7 +++ 3 files changed, 126 insertions(+) create mode 100644 examples/local/client.py create mode 100755 examples/local/client.sh create mode 100644 examples/local/create_test_table.sql diff --git a/examples/local/client.py b/examples/local/client.py new file mode 100644 index 00000000000..1c7e8029b98 --- /dev/null +++ b/examples/local/client.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python + +# Copyright 2017 Google Inc. +# +# 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. + + +"""Sample Vitess client in Python. + +This is a sample for using the Python Vitess client. +It's a script that inserts some random messages on random pages of the +guestbook sample app. + +Before running this, start up a local example cluster as described in the +README.md file. + +Then run client.sh, which sets up PYTHONPATH before running client.py: +vitess/examples/local$ ./client.sh +""" + +import argparse +import random +import time + +from vtdb import vtgate_client + +# register the python gRPC client upon import +from vtdb import grpc_vtgate_client # pylint: disable=unused-import + +# Parse args +parser = argparse.ArgumentParser() +parser.add_argument('--server', dest='server', default='localhost:15991') +parser.add_argument('--timeout', dest='timeout', type=float, default='10.0') +args = parser.parse_args() + +# Connect +conn = vtgate_client.connect('grpc', args.server, args.timeout) + +try: + # Insert some messages on random pages. + print 'Inserting into master...' + cursor = conn.cursor(tablet_type='master', writable=True) + for i in range(3): + page = random.randint(1, 100) + + cursor.begin() + cursor.execute( + 'INSERT INTO messages (page, time_created_ns, message)' + ' VALUES (:page, :time_created_ns, :message)', + { + 'page': page, + 'time_created_ns': int(time.time() * 1e9), + 'message': 'V is for speed', + }) + cursor.commit() + + # Read it back from the master. + print 'Reading from master...' + cursor.execute('SELECT page, time_created_ns, message FROM messages', {}) + for row in cursor.fetchall(): + print row + + cursor.close() + + # Read from a replica. + # Note that this may be behind master due to replication lag. + print 'Reading from replica...' + cursor = conn.cursor(tablet_type='replica') + cursor.execute('SELECT page, time_created_ns, message FROM messages', {}) + for row in cursor.fetchall(): + print row + cursor.close() + +finally: + # Clean up + conn.close() diff --git a/examples/local/client.sh b/examples/local/client.sh new file mode 100755 index 00000000000..fd7a6eeb0db --- /dev/null +++ b/examples/local/client.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Copyright 2017 Google Inc. +# +# 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. + +# This is a wrapper script that sets up the environment for client.py. + +set -e + +hostname=`hostname -f` + +# We expect to find zk-client-conf.json in the same folder as this script. +script_root=`dirname "${BASH_SOURCE}"` + +# Set up environment. +for pkg in `find $VTROOT/dist -name site-packages`; do + export PYTHONPATH=$pkg:$PYTHONPATH +done + +export PYTHONPATH=$VTROOT/py-vtdb:$PYTHONPATH + +exec env python $script_root/client.py $* diff --git a/examples/local/create_test_table.sql b/examples/local/create_test_table.sql new file mode 100644 index 00000000000..bfb24b766ad --- /dev/null +++ b/examples/local/create_test_table.sql @@ -0,0 +1,7 @@ +CREATE TABLE messages ( + page BIGINT(20) UNSIGNED, + time_created_ns BIGINT(20) UNSIGNED, + message VARCHAR(10000), + PRIMARY KEY (page, time_created_ns) +) ENGINE=InnoDB + From 8ea642dd069b2eb8af0afcf7c273c28d2d741b6e Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 1 Dec 2018 15:18:52 -0800 Subject: [PATCH 20/35] change the vschema ddl syntax to use `alter vschema ...` Rework the vschema syntax so that instead of top-level create/drop statements and alter table we use a consistent syntax of: alter vschema create vindex... alter vschema drop vindex ... alter vschema on add vindex ... alter vschema on
drop vindex ... Signed-off-by: Michael Demmer --- go/vt/sqlparser/ast.go | 13 +- go/vt/sqlparser/parse_test.go | 68 +- go/vt/sqlparser/sql.go | 5547 +++++++++++++++++---------------- go/vt/sqlparser/sql.y | 65 +- go/vt/sqlparser/token.go | 1 + go/vt/vtgate/executor_test.go | 46 +- go/vt/vtgate/sandbox_test.go | 3 + 7 files changed, 2889 insertions(+), 2854 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 0ecff77a306..3b904b12f91 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -753,8 +753,9 @@ const ( TruncateStr = "truncate" FlushStr = "flush" CreateVindexStr = "create vindex" - AddColVindexStr = "add vindex" - DropColVindexStr = "drop vindex" + DropVindexStr = "drop vindex" + AddColVindexStr = "on table add vindex" + DropColVindexStr = "on table drop vindex" // Vindex DDL param to specify the owner of a vindex VindexOwnerStr = "owner" @@ -791,9 +792,11 @@ func (node *DDL) Format(buf *TrackedBuffer) { case FlushStr: buf.Myprintf("%s", node.Action) case CreateVindexStr: - buf.Myprintf("%s %v %v", node.Action, node.VindexSpec.Name, node.VindexSpec) + buf.Myprintf("alter vschema create vindex %v %v", node.VindexSpec.Name, node.VindexSpec) + case DropVindexStr: + buf.Myprintf("alter vschema drop vindex %v", node.VindexSpec.Name) case AddColVindexStr: - buf.Myprintf("alter table %v %s %v (", node.Table, node.Action, node.VindexSpec.Name) + buf.Myprintf("alter vschema on %v add vindex %v (", node.Table, node.VindexSpec.Name) for i, col := range node.VindexCols { if i != 0 { buf.Myprintf(", %v", col) @@ -806,7 +809,7 @@ func (node *DDL) Format(buf *TrackedBuffer) { buf.Myprintf(" %v", node.VindexSpec) } case DropColVindexStr: - buf.Myprintf("alter table %v %s %v", node.Table, node.Action, node.VindexSpec.Name) + buf.Myprintf("alter vschema on %v drop vindex %v", node.Table, node.VindexSpec.Name) default: buf.Myprintf("%s table %v", node.Action, node.Table) } diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index 0eb0e7d54da..cc3cf901e50 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -903,58 +903,62 @@ var ( input: "alter table a drop id", output: "alter table a", }, { - input: "alter table a add vindex hash (id)", + input: "create table a", }, { - input: "alter table a add vindex `hash` (`id`)", - output: "alter table a add vindex hash (id)", + input: "create table a (\n\t`a` int\n)", + output: "create table a (\n\ta int\n)", }, { - input: "alter table a add vindex hash (id) using `hash`", - output: "alter table a add vindex hash (id) using hash", + input: "create table `by` (\n\t`by` char\n)", }, { - input: "alter table a add vindex `add` (`add`)", + input: "create table if not exists a (\n\t`a` int\n)", + output: "create table a (\n\ta int\n)", }, { - input: "alter table a add vindex hash (id) using hash", + input: "create table a ignore me this is garbage", + output: "create table a", }, { - input: "alter table a add vindex hash (id) using `hash`", - output: "alter table a add vindex hash (id) using hash", + input: "create table a (a int, b char, c garbage)", + output: "create table a", }, { - input: "alter table user add vindex name_lookup_vdx (name) using lookup_hash with owner=user, table=name_user_idx, from=name, to=user_id", + input: "alter vschema create vindex hash_vdx using hash", }, { - input: "alter table user2 add vindex name_lastname_lookup_vdx (name,lastname) using lookup with owner=`user`, table=`name_lastname_keyspace_id_map`, from=`name,lastname`, to=`keyspace_id`", - output: "alter table user2 add vindex name_lastname_lookup_vdx (name, lastname) using lookup with owner=user, table=name_lastname_keyspace_id_map, from=name,lastname, to=keyspace_id", + input: "alter vschema create vindex lookup_vdx using lookup with owner=user, table=name_user_idx, from=name, to=user_id", }, { - input: "alter table a drop vindex hash", + input: "alter vschema create vindex xyz_vdx using xyz with param1=hello, param2='world', param3=123", }, { - input: "alter table a drop vindex `hash`", - output: "alter table a drop vindex hash", + input: "alter vschema drop vindex hash_vdx", }, { - input: "alter table a drop vindex hash", - output: "alter table a drop vindex hash", + input: "alter vschema on a add vindex hash (id)", }, { - input: "alter table a drop vindex `add`", - output: "alter table a drop vindex `add`", + input: "alter vschema on a add vindex hash (id)", }, { - input: "create table a", + input: "alter vschema on a add vindex `hash` (`id`)", + output: "alter vschema on a add vindex hash (id)", }, { - input: "create table a (\n\t`a` int\n)", - output: "create table a (\n\ta int\n)", + input: "alter vschema on a add vindex hash (id) using `hash`", + output: "alter vschema on a add vindex hash (id) using hash", }, { - input: "create table `by` (\n\t`by` char\n)", + input: "alter vschema on a add vindex `add` (`add`)", }, { - input: "create table if not exists a (\n\t`a` int\n)", - output: "create table a (\n\ta int\n)", + input: "alter vschema on a add vindex hash (id) using hash", }, { - input: "create table a ignore me this is garbage", - output: "create table a", + input: "alter vschema on a add vindex hash (id) using `hash`", + output: "alter vschema on a add vindex hash (id) using hash", }, { - input: "create table a (a int, b char, c garbage)", - output: "create table a", + input: "alter vschema on user add vindex name_lookup_vdx (name) using lookup_hash with owner=user, table=name_user_idx, from=name, to=user_id", + }, { + input: "alter vschema on user2 add vindex name_lastname_lookup_vdx (name,lastname) using lookup with owner=`user`, table=`name_lastname_keyspace_id_map`, from=`name,lastname`, to=`keyspace_id`", + output: "alter vschema on user2 add vindex name_lastname_lookup_vdx (name, lastname) using lookup with owner=user, table=name_lastname_keyspace_id_map, from=name,lastname, to=keyspace_id", + }, { + input: "alter vschema on a drop vindex hash", }, { - input: "create vindex hash_vdx using hash", + input: "alter vschema on a drop vindex `hash`", + output: "alter vschema on a drop vindex hash", }, { - input: "create vindex lookup_vdx using lookup with owner=user, table=name_user_idx, from=name, to=user_id", + input: "alter vschema on a drop vindex hash", + output: "alter vschema on a drop vindex hash", }, { - input: "create vindex xyz_vdx using xyz with param1=hello, param2='world', param3=123", + input: "alter vschema on a drop vindex `add`", + output: "alter vschema on a drop vindex `add`", }, { input: "create index a on b", output: "alter table b", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index a409cc0f22f..26a983897a2 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -305,51 +305,52 @@ const TABLES = 57541 const VITESS_KEYSPACES = 57542 const VITESS_SHARDS = 57543 const VITESS_TABLETS = 57544 -const VSCHEMA_TABLES = 57545 -const VITESS_TARGET = 57546 -const FULL = 57547 -const PROCESSLIST = 57548 -const COLUMNS = 57549 -const FIELDS = 57550 -const ENGINES = 57551 -const PLUGINS = 57552 -const NAMES = 57553 -const CHARSET = 57554 -const GLOBAL = 57555 -const SESSION = 57556 -const ISOLATION = 57557 -const LEVEL = 57558 -const READ = 57559 -const WRITE = 57560 -const ONLY = 57561 -const REPEATABLE = 57562 -const COMMITTED = 57563 -const UNCOMMITTED = 57564 -const SERIALIZABLE = 57565 -const CURRENT_TIMESTAMP = 57566 -const DATABASE = 57567 -const CURRENT_DATE = 57568 -const CURRENT_TIME = 57569 -const LOCALTIME = 57570 -const LOCALTIMESTAMP = 57571 -const UTC_DATE = 57572 -const UTC_TIME = 57573 -const UTC_TIMESTAMP = 57574 -const REPLACE = 57575 -const CONVERT = 57576 -const CAST = 57577 -const SUBSTR = 57578 -const SUBSTRING = 57579 -const GROUP_CONCAT = 57580 -const SEPARATOR = 57581 -const MATCH = 57582 -const AGAINST = 57583 -const BOOLEAN = 57584 -const LANGUAGE = 57585 -const WITH = 57586 -const QUERY = 57587 -const EXPANSION = 57588 -const UNUSED = 57589 +const VSCHEMA = 57545 +const VSCHEMA_TABLES = 57546 +const VITESS_TARGET = 57547 +const FULL = 57548 +const PROCESSLIST = 57549 +const COLUMNS = 57550 +const FIELDS = 57551 +const ENGINES = 57552 +const PLUGINS = 57553 +const NAMES = 57554 +const CHARSET = 57555 +const GLOBAL = 57556 +const SESSION = 57557 +const ISOLATION = 57558 +const LEVEL = 57559 +const READ = 57560 +const WRITE = 57561 +const ONLY = 57562 +const REPEATABLE = 57563 +const COMMITTED = 57564 +const UNCOMMITTED = 57565 +const SERIALIZABLE = 57566 +const CURRENT_TIMESTAMP = 57567 +const DATABASE = 57568 +const CURRENT_DATE = 57569 +const CURRENT_TIME = 57570 +const LOCALTIME = 57571 +const LOCALTIMESTAMP = 57572 +const UTC_DATE = 57573 +const UTC_TIME = 57574 +const UTC_TIMESTAMP = 57575 +const REPLACE = 57576 +const CONVERT = 57577 +const CAST = 57578 +const SUBSTR = 57579 +const SUBSTRING = 57580 +const GROUP_CONCAT = 57581 +const SEPARATOR = 57582 +const MATCH = 57583 +const AGAINST = 57584 +const BOOLEAN = 57585 +const LANGUAGE = 57586 +const WITH = 57587 +const QUERY = 57588 +const EXPANSION = 57589 +const UNUSED = 57590 var yyToknames = [...]string{ "$end", @@ -571,6 +572,7 @@ var yyToknames = [...]string{ "VITESS_KEYSPACES", "VITESS_SHARDS", "VITESS_TABLETS", + "VSCHEMA", "VSCHEMA_TABLES", "VITESS_TARGET", "FULL", @@ -633,1286 +635,1291 @@ var yyExca = [...]int{ 5, 29, -2, 4, -1, 37, - 159, 297, - 160, 297, - -2, 287, - -1, 267, - 112, 633, - -2, 629, + 159, 298, + 160, 298, + -2, 288, -1, 268, 112, 634, -2, 630, - -1, 331, - 82, 804, - -2, 60, + -1, 269, + 112, 635, + -2, 631, -1, 332, - 82, 761, + 82, 805, + -2, 60, + -1, 333, + 82, 762, -2, 61, - -1, 337, - 82, 740, - -2, 595, - -1, 339, - 82, 782, - -2, 597, - -1, 593, - 1, 349, - 5, 349, - 12, 349, - 13, 349, - 14, 349, - 15, 349, - 17, 349, - 19, 349, - 30, 349, - 31, 349, - 42, 349, - 43, 349, - 44, 349, - 45, 349, - 46, 349, - 48, 349, - 49, 349, - 52, 349, - 53, 349, - 55, 349, - 56, 349, - 265, 349, - -2, 367, + -1, 338, + 82, 741, + -2, 596, + -1, 340, + 82, 783, + -2, 598, -1, 596, + 1, 350, + 5, 350, + 12, 350, + 13, 350, + 14, 350, + 15, 350, + 17, 350, + 19, 350, + 30, 350, + 31, 350, + 42, 350, + 43, 350, + 44, 350, + 45, 350, + 46, 350, + 48, 350, + 49, 350, + 52, 350, + 53, 350, + 55, 350, + 56, 350, + 266, 350, + -2, 368, + -1, 599, 53, 43, 55, 43, -2, 45, - -1, 733, - 112, 636, - -2, 632, - -1, 948, + -1, 737, + 112, 637, + -2, 633, + -1, 952, 5, 30, - -2, 433, - -1, 977, + -2, 434, + -1, 981, 5, 29, - -2, 569, - -1, 1229, - 5, 30, -2, 570, - -1, 1283, - 5, 29, - -2, 572, - -1, 1360, + -1, 1234, 5, 30, + -2, 571, + -1, 1289, + 5, 29, -2, 573, + -1, 1370, + 5, 30, + -2, 574, } const yyPrivate = 57344 -const yyLast = 11934 +const yyLast = 11975 var yyAct = [...]int{ - 268, 1395, 1351, 886, 668, 980, 558, 998, 1385, 1295, - 272, 298, 1123, 833, 814, 1049, 981, 837, 1124, 1120, - 1157, 246, 880, 1249, 57, 557, 3, 1023, 866, 914, - 1004, 846, 82, 1130, 1136, 237, 206, 836, 1093, 206, - 758, 765, 698, 1052, 940, 1040, 606, 812, 299, 51, - 850, 801, 786, 816, 768, 735, 490, 496, 589, 435, - 767, 876, 605, 336, 502, 794, 330, 206, 82, 922, - 270, 461, 206, 510, 206, 325, 82, 245, 255, 327, - 238, 239, 240, 241, 56, 1388, 244, 1372, 1383, 572, - 1358, 1380, 887, 1371, 1115, 1357, 463, 1223, 440, 1306, - 51, 590, 1151, 1165, 1166, 1167, 827, 595, 251, 465, - 243, 1170, 1168, 201, 197, 198, 199, 242, 259, 1152, - 1153, 1326, 523, 522, 532, 533, 525, 526, 527, 528, - 529, 530, 531, 524, 1011, 1031, 534, 1010, 859, 61, - 1012, 828, 829, 203, 607, 481, 608, 903, 1252, 867, - 1206, 1268, 482, 479, 480, 1094, 1204, 236, 474, 475, - 1382, 902, 1379, 1352, 333, 63, 64, 65, 66, 67, - 1073, 795, 1342, 450, 326, 467, 851, 469, 1403, 437, - 195, 439, 451, 999, 1001, 443, 1399, 1074, 1296, 907, - 677, 194, 1096, 195, 1070, 206, 667, 206, 901, 1146, - 1072, 1298, 1145, 206, 1144, 1304, 438, 466, 468, 446, - 206, 209, 853, 82, 196, 82, 853, 82, 82, 1331, - 82, 1232, 82, 546, 547, 1098, 1080, 1102, 958, 1097, - 934, 1095, 82, 200, 707, 853, 1100, 514, 457, 742, - 524, 1024, 704, 534, 834, 1099, 534, 699, 898, 895, - 896, 70, 894, 740, 741, 739, 507, 509, 1101, 1103, - 1000, 462, 82, 462, 436, 462, 462, 1340, 462, 1297, - 462, 1174, 509, 1184, 498, 1134, 436, 499, 486, 487, - 462, 867, 609, 905, 908, 1169, 470, 71, 471, 472, - 1327, 473, 1397, 476, 464, 1398, 1071, 1396, 1069, 1117, - 51, 916, 447, 485, 449, 1356, 1305, 1303, 852, 434, - 456, 787, 852, 967, 1060, 543, 488, 458, 545, 900, - 787, 856, 1175, 206, 206, 206, 671, 857, 700, 82, - 1029, 852, 261, 710, 711, 82, 849, 847, 1345, 848, - 504, 899, 1362, 1058, 845, 851, 556, 54, 560, 561, - 562, 563, 564, 565, 566, 567, 568, 738, 571, 573, - 573, 573, 573, 573, 573, 573, 573, 581, 582, 583, - 584, 588, 594, 453, 454, 455, 193, 442, 1259, 915, - 1258, 508, 507, 904, 525, 526, 527, 528, 529, 530, - 531, 524, 500, 952, 534, 951, 906, 1044, 509, 1043, - 597, 574, 575, 576, 577, 578, 579, 580, 603, 759, - 1059, 760, 508, 507, 274, 1064, 1061, 1054, 1062, 1057, - 1404, 508, 507, 1055, 1056, 333, 1032, 22, 1119, 509, - 587, 1364, 596, 508, 507, 206, 706, 1063, 509, 1341, - 82, 322, 323, 1066, 1279, 1256, 206, 206, 82, 1077, - 509, 206, 1041, 1338, 206, 444, 445, 1024, 206, 1405, - 82, 82, 931, 932, 933, 82, 82, 82, 82, 82, - 82, 1019, 1013, 705, 1014, 82, 82, 527, 528, 529, - 530, 531, 524, 953, 206, 534, 889, 250, 462, 761, - 508, 507, 725, 727, 728, 683, 462, 682, 726, 1301, - 1381, 489, 82, 1368, 489, 1365, 206, 509, 462, 462, - 672, 666, 82, 462, 462, 462, 462, 462, 462, 675, - 712, 686, 670, 462, 462, 1311, 678, 684, 665, 736, - 297, 687, 688, 508, 507, 459, 689, 690, 691, 692, - 693, 694, 617, 1301, 1349, 1310, 695, 696, 1301, 489, - 509, 1301, 1332, 673, 674, 452, 82, 1307, 326, 1301, - 1300, 681, 80, 532, 533, 525, 526, 527, 528, 529, - 530, 531, 524, 1247, 1246, 534, 777, 781, 733, 714, - 493, 497, 788, 1171, 731, 729, 772, 206, 1234, 489, - 854, 701, 1231, 489, 51, 206, 206, 515, 335, 206, - 206, 1181, 1180, 82, 1177, 1178, 441, 1177, 1176, 560, - 1133, 732, 600, 721, 946, 489, 82, 762, 763, 798, - 489, 1005, 773, 774, 791, 770, 489, 1005, 783, 616, - 615, 1121, 559, 784, 1133, 58, 1083, 24, 821, 770, - 599, 570, 790, 813, 792, 793, 822, 594, 288, 287, - 290, 291, 292, 293, 601, 24, 599, 289, 294, 868, - 869, 870, 820, 860, 798, 1282, 962, 825, 206, 824, - 1133, 82, 960, 82, 957, 946, 841, 206, 206, 975, - 946, 206, 82, 976, 544, 54, 797, 882, 1227, 955, - 798, 24, 1183, 1179, 796, 1015, 826, 946, 206, 333, - 206, 206, 599, 54, 1390, 602, 708, 823, 676, 1386, - 961, 798, 838, 54, 1373, 252, 959, 669, 956, 462, - 1348, 462, 1263, 878, 879, 803, 806, 807, 808, 804, - 462, 805, 809, 954, 1254, 1137, 1138, 884, 593, 54, - 861, 1239, 890, 335, 892, 335, 881, 335, 335, 1162, - 335, 736, 335, 912, 803, 806, 807, 808, 804, 1018, - 805, 809, 335, 54, 877, 872, 923, 1137, 1138, 924, - 871, 733, 1164, 1140, 1121, 885, 1045, 680, 483, 720, - 930, 935, 992, 1143, 909, 910, 990, 993, 911, 1142, - 989, 991, 512, 988, 994, 936, 807, 808, 1377, 206, - 206, 206, 206, 206, 732, 913, 256, 257, 982, 1370, - 1079, 206, 919, 503, 206, 1376, 713, 702, 206, 929, - 977, 928, 206, 491, 1036, 614, 460, 945, 501, 1028, - 1347, 1346, 891, 1280, 1026, 492, 1020, 82, 966, 772, - 722, 723, 1225, 978, 979, 964, 1264, 594, 594, 594, - 594, 594, 679, 1007, 1016, 811, 503, 983, 265, 335, - 986, 995, 813, 1316, 1002, 611, 253, 254, 927, 1006, - 594, 1003, 247, 1008, 769, 771, 926, 248, 1025, 58, - 1035, 1315, 1037, 1038, 1039, 82, 82, 1266, 82, 1005, - 789, 1033, 1034, 559, 484, 697, 775, 776, 505, 1021, - 1022, 984, 985, 1392, 987, 1328, 1219, 489, 1392, 1391, - 1253, 703, 82, 60, 62, 598, 55, 1, 1042, 1384, - 888, 1048, 897, 1350, 1294, 1156, 206, 844, 835, 1051, - 69, 433, 737, 838, 462, 82, 68, 1339, 843, 1065, - 842, 1302, 832, 1251, 523, 522, 532, 533, 525, 526, - 527, 528, 529, 530, 531, 524, 1076, 1047, 534, 855, - 462, 1030, 858, 1163, 1344, 1027, 622, 620, 621, 619, - 335, 624, 623, 618, 220, 328, 810, 1086, 335, 82, - 82, 1122, 1087, 1075, 1050, 610, 982, 883, 1125, 1116, - 335, 335, 1105, 1104, 506, 335, 335, 335, 335, 335, - 335, 1092, 72, 82, 1127, 335, 335, 1068, 1067, 593, - 893, 1132, 477, 593, 478, 222, 82, 542, 82, 82, - 925, 1141, 733, 1009, 334, 1126, 1128, 51, 709, 1148, - 495, 1085, 716, 1081, 1314, 1155, 1147, 1150, 920, 921, - 1265, 497, 512, 965, 569, 335, 206, 1172, 1173, 1160, - 1161, 1159, 785, 1154, 82, 1110, 522, 532, 533, 525, - 526, 527, 528, 529, 530, 531, 524, 82, 206, 534, - 273, 724, 286, 283, 82, 206, 285, 284, 943, 715, - 974, 82, 944, 516, 206, 271, 764, 263, 1185, 948, - 949, 950, 592, 585, 802, 800, 779, 779, 799, 1139, - 963, 1187, 779, 947, 1190, 969, 1193, 970, 971, 972, - 973, 1135, 838, 1194, 838, 591, 1082, 1222, 1325, 719, - 968, 1202, 26, 59, 258, 19, 18, 17, 20, 997, - 16, 1195, 594, 335, 548, 549, 550, 551, 552, 553, - 554, 555, 1226, 15, 982, 14, 335, 448, 30, 21, - 1236, 13, 12, 1182, 737, 82, 11, 1235, 10, 9, - 8, 7, 6, 82, 1221, 5, 4, 249, 23, 2, - 1245, 0, 1016, 0, 0, 1189, 0, 1085, 0, 0, - 0, 0, 1192, 82, 82, 82, 0, 0, 0, 0, - 0, 0, 0, 1241, 1242, 1243, 0, 0, 0, 1261, - 0, 335, 1262, 335, 0, 1255, 0, 1257, 0, 0, - 0, 0, 335, 593, 593, 593, 593, 593, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 593, 1267, - 0, 462, 82, 82, 0, 82, 593, 0, 335, 1125, - 82, 0, 82, 82, 82, 206, 1281, 0, 82, 1078, - 0, 838, 0, 0, 1260, 0, 1283, 1288, 0, 1293, - 0, 0, 1091, 1289, 82, 1290, 1291, 1292, 1299, 1308, - 0, 1309, 0, 0, 0, 0, 1126, 0, 0, 1284, - 1050, 838, 0, 0, 0, 0, 0, 1312, 0, 862, - 863, 864, 865, 0, 1125, 1329, 0, 0, 0, 0, - 1118, 1336, 82, 0, 1337, 873, 874, 875, 0, 0, - 1330, 0, 0, 1313, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1354, 0, 0, 0, 0, 779, 0, - 0, 1126, 82, 51, 1359, 0, 0, 0, 1149, 982, - 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 82, 1366, 523, 522, 532, 533, 525, - 526, 527, 528, 529, 530, 531, 524, 335, 0, 534, - 1374, 1375, 0, 0, 82, 734, 0, 0, 743, 744, - 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, - 755, 756, 757, 1389, 1400, 0, 0, 1378, 1060, 0, - 0, 0, 0, 1196, 0, 0, 0, 0, 941, 0, - 1198, 0, 0, 0, 0, 1046, 335, 0, 335, 494, - 0, 1207, 1208, 1209, 0, 1212, 0, 1058, 1215, 0, - 1218, 1387, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 335, 1228, 1229, 1230, 0, 1233, 0, 0, - 1363, 0, 1224, 0, 0, 204, 0, 0, 235, 559, - 0, 0, 0, 0, 1244, 335, 0, 1237, 0, 0, - 1238, 0, 0, 1240, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 262, 0, 0, 204, 0, 0, 335, - 217, 204, 0, 204, 1059, 0, 0, 0, 593, 1064, - 1061, 1054, 1062, 1057, 0, 0, 779, 1055, 1056, 1129, - 1131, 0, 0, 0, 231, 1216, 489, 0, 0, 0, - 0, 1063, 0, 0, 0, 0, 0, 1053, 0, 0, - 0, 0, 0, 1131, 0, 0, 0, 0, 0, 1278, - 0, 0, 0, 0, 0, 0, 335, 0, 335, 1158, - 0, 0, 0, 523, 522, 532, 533, 525, 526, 527, - 528, 529, 530, 531, 524, 210, 0, 534, 0, 0, - 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, - 221, 216, 0, 0, 1186, 0, 1317, 1318, 1319, 1320, - 1321, 1322, 1323, 1324, 0, 0, 0, 1188, 0, 937, - 938, 939, 0, 0, 1191, 0, 0, 1333, 1334, 1335, - 0, 335, 219, 0, 204, 223, 204, 0, 230, 0, - 0, 0, 204, 0, 0, 0, 0, 0, 0, 204, + 269, 1405, 1395, 1191, 1358, 1073, 984, 1254, 1268, 561, + 273, 1301, 1126, 1002, 1160, 1123, 884, 841, 818, 57, + 985, 918, 840, 850, 837, 560, 3, 1127, 1133, 772, + 299, 247, 81, 870, 1096, 1139, 208, 337, 762, 208, + 238, 702, 1008, 944, 1053, 820, 1044, 816, 300, 51, + 609, 805, 593, 1027, 790, 739, 769, 854, 592, 493, + 499, 798, 880, 436, 505, 608, 271, 208, 81, 331, + 926, 513, 208, 256, 208, 326, 328, 246, 56, 1398, + 575, 1382, 1393, 1368, 1390, 239, 240, 241, 242, 1192, + 1381, 245, 1367, 260, 1118, 1228, 441, 1312, 1155, 1156, + 51, 610, 468, 611, 61, 1154, 598, 466, 252, 1334, + 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, + 534, 527, 832, 833, 537, 831, 244, 1168, 1169, 1170, + 63, 64, 65, 66, 67, 1173, 1171, 903, 203, 199, + 200, 201, 205, 243, 1015, 484, 195, 1014, 197, 275, + 1016, 902, 1035, 485, 482, 483, 863, 1257, 871, 464, + 1274, 1211, 1209, 237, 477, 478, 1076, 1075, 470, 678, + 472, 677, 1392, 327, 1350, 334, 1389, 1359, 438, 907, + 440, 1072, 453, 799, 855, 1413, 1409, 454, 901, 443, + 197, 1302, 1077, 681, 670, 1149, 208, 1148, 1310, 208, + 469, 471, 1147, 439, 1304, 208, 446, 210, 857, 1003, + 1005, 208, 857, 198, 81, 703, 81, 1097, 81, 81, + 1339, 81, 1237, 81, 912, 1069, 1083, 911, 549, 550, + 962, 1071, 938, 81, 838, 711, 857, 1028, 898, 895, + 896, 196, 894, 530, 531, 532, 533, 534, 527, 450, + 537, 537, 517, 460, 1099, 527, 708, 512, 537, 202, + 510, 1348, 465, 81, 465, 437, 465, 465, 1320, 465, + 501, 465, 1303, 905, 908, 864, 512, 1177, 502, 1335, + 437, 465, 70, 1137, 489, 490, 1004, 1101, 467, 1105, + 871, 1100, 1407, 1098, 612, 1408, 704, 1406, 1103, 1311, + 1309, 51, 447, 1366, 856, 452, 1060, 1102, 856, 900, + 1172, 459, 448, 435, 449, 1120, 546, 461, 71, 548, + 1104, 1106, 511, 510, 208, 208, 208, 1070, 1178, 1068, + 81, 899, 856, 791, 672, 1058, 81, 853, 851, 512, + 852, 920, 791, 1033, 971, 849, 855, 559, 771, 563, + 564, 565, 566, 567, 568, 569, 570, 571, 503, 574, + 576, 576, 576, 576, 576, 576, 576, 576, 584, 585, + 586, 587, 591, 597, 904, 473, 1353, 474, 475, 1414, + 476, 507, 479, 491, 456, 457, 458, 906, 1372, 746, + 714, 715, 488, 577, 578, 579, 580, 581, 582, 583, + 1264, 600, 1059, 744, 745, 743, 606, 1064, 1061, 1054, + 1062, 1057, 710, 1263, 1048, 1055, 1056, 1047, 1415, 919, + 547, 528, 529, 530, 531, 532, 533, 534, 527, 1063, + 590, 537, 599, 935, 936, 937, 208, 334, 511, 510, + 956, 81, 955, 957, 860, 442, 208, 208, 81, 709, + 861, 208, 54, 1036, 208, 512, 763, 208, 764, 511, + 510, 208, 742, 81, 81, 22, 511, 510, 81, 81, + 81, 81, 81, 81, 596, 1017, 512, 1018, 81, 81, + 1346, 1374, 194, 512, 1349, 511, 510, 208, 1285, 465, + 1261, 262, 1122, 511, 510, 1080, 465, 1045, 690, 1307, + 1391, 492, 512, 1377, 492, 81, 1307, 1362, 1375, 208, + 512, 465, 465, 1307, 492, 81, 465, 465, 465, 465, + 465, 465, 444, 445, 1194, 251, 465, 465, 1028, 682, + 1023, 688, 765, 716, 729, 731, 732, 1307, 1340, 1317, + 730, 687, 620, 1307, 1306, 1316, 298, 323, 324, 1252, + 1251, 740, 674, 675, 686, 737, 673, 679, 671, 81, + 327, 1239, 492, 685, 535, 536, 528, 529, 530, 531, + 532, 533, 534, 527, 1236, 492, 537, 718, 79, 781, + 785, 1184, 1183, 1180, 1181, 792, 733, 668, 735, 776, + 208, 1180, 1179, 705, 950, 492, 24, 51, 208, 208, + 669, 462, 208, 208, 802, 492, 81, 676, 774, 492, + 619, 618, 563, 455, 336, 725, 766, 767, 1313, 81, + 979, 1174, 691, 692, 980, 736, 58, 693, 694, 695, + 696, 697, 698, 1009, 1009, 858, 788, 699, 700, 825, + 1124, 602, 795, 1136, 54, 54, 817, 1136, 1086, 826, + 597, 966, 24, 289, 288, 291, 292, 293, 294, 603, + 774, 824, 290, 295, 964, 1232, 950, 872, 873, 874, + 741, 208, 81, 829, 81, 828, 802, 1136, 81, 81, + 1288, 208, 208, 845, 886, 208, 81, 807, 810, 811, + 812, 808, 950, 809, 813, 965, 800, 1140, 1141, 961, + 54, 604, 208, 602, 208, 208, 959, 801, 963, 827, + 24, 1319, 802, 334, 1182, 1019, 830, 950, 602, 605, + 465, 712, 465, 680, 253, 1383, 842, 882, 883, 1356, + 1270, 1074, 802, 1259, 465, 865, 1244, 885, 1165, 1022, + 496, 500, 888, 960, 1140, 1141, 923, 596, 881, 737, + 958, 596, 876, 875, 1400, 1396, 724, 518, 54, 1167, + 336, 1143, 336, 1124, 336, 336, 1049, 336, 684, 336, + 996, 486, 54, 927, 740, 997, 928, 889, 994, 336, + 1146, 1145, 993, 995, 992, 939, 1387, 913, 914, 257, + 258, 915, 562, 998, 1380, 811, 812, 1082, 506, 940, + 1385, 573, 933, 208, 208, 208, 208, 208, 917, 515, + 932, 494, 986, 504, 1040, 208, 617, 463, 208, 736, + 1032, 1355, 208, 495, 981, 1354, 208, 1286, 1030, 1024, + 1230, 890, 1266, 892, 891, 683, 815, 254, 255, 506, + 248, 81, 931, 776, 970, 916, 1324, 982, 983, 249, + 930, 597, 597, 597, 597, 597, 988, 989, 1020, 991, + 58, 987, 1323, 1272, 990, 999, 817, 1007, 1006, 1011, + 1009, 487, 701, 1010, 597, 508, 336, 1402, 1401, 1402, + 1336, 1012, 614, 1258, 707, 60, 717, 62, 601, 81, + 81, 55, 1, 741, 1394, 1039, 1193, 1041, 1042, 1043, + 1037, 1038, 1267, 897, 866, 867, 868, 869, 1029, 1357, + 1025, 1026, 1300, 777, 778, 1159, 81, 848, 839, 787, + 877, 878, 879, 1046, 69, 807, 810, 811, 812, 808, + 208, 809, 813, 794, 1052, 796, 797, 434, 465, 81, + 1065, 68, 1347, 847, 773, 775, 846, 1308, 842, 1256, + 859, 1034, 596, 596, 596, 596, 596, 862, 1166, 1079, + 793, 1352, 1031, 625, 465, 623, 624, 596, 622, 627, + 626, 621, 221, 329, 814, 596, 613, 887, 509, 706, + 1095, 72, 1067, 81, 81, 1090, 1125, 336, 1119, 1066, + 986, 893, 1108, 480, 336, 1107, 1089, 481, 223, 545, + 737, 929, 726, 727, 1013, 335, 1131, 81, 1130, 336, + 336, 1128, 266, 713, 336, 336, 336, 336, 336, 336, + 81, 498, 81, 81, 336, 336, 1144, 1135, 1151, 1129, + 1322, 51, 1271, 969, 572, 1150, 1084, 789, 274, 1158, + 728, 287, 1157, 284, 286, 285, 1088, 1162, 719, 1051, + 208, 720, 978, 1153, 519, 562, 272, 264, 779, 780, + 595, 515, 1175, 1176, 336, 588, 806, 208, 804, 803, + 1113, 1142, 934, 81, 1138, 1078, 81, 81, 208, 1163, + 1164, 594, 1085, 1227, 81, 1333, 723, 208, 26, 59, + 259, 19, 18, 17, 1186, 20, 16, 15, 14, 451, + 30, 1198, 21, 13, 836, 768, 1187, 12, 1189, 11, + 10, 9, 8, 7, 6, 783, 783, 5, 1207, 949, + 4, 783, 250, 23, 2, 0, 0, 842, 1199, 842, + 0, 0, 0, 0, 1200, 597, 0, 968, 0, 0, + 0, 1231, 0, 0, 0, 0, 0, 986, 0, 947, + 0, 0, 336, 948, 0, 1240, 1185, 1241, 81, 0, + 952, 953, 954, 0, 0, 336, 81, 1226, 0, 0, + 0, 967, 0, 1188, 0, 1020, 973, 0, 974, 975, + 976, 977, 0, 1250, 1197, 0, 81, 0, 0, 0, + 0, 1088, 0, 81, 0, 0, 1246, 1247, 1248, 0, + 1001, 924, 925, 0, 500, 0, 0, 0, 0, 0, + 0, 0, 0, 1260, 0, 1262, 0, 0, 336, 0, + 336, 0, 0, 0, 909, 910, 0, 0, 0, 0, + 0, 0, 336, 0, 465, 0, 596, 81, 81, 1273, + 81, 0, 0, 0, 0, 81, 0, 81, 81, 81, + 208, 0, 1295, 81, 1296, 1297, 1298, 0, 336, 0, + 1287, 1289, 0, 1128, 0, 842, 951, 1305, 1299, 0, + 0, 81, 1294, 0, 0, 0, 0, 0, 1321, 0, + 0, 1129, 0, 972, 1290, 1314, 0, 1315, 0, 551, + 552, 553, 554, 555, 556, 557, 558, 0, 0, 0, + 1269, 1337, 0, 0, 0, 0, 0, 0, 81, 0, + 0, 0, 1345, 1344, 0, 1318, 1338, 0, 0, 1128, + 81, 81, 0, 0, 0, 0, 0, 0, 1360, 0, + 0, 0, 0, 1094, 1364, 0, 0, 1129, 1361, 51, + 81, 0, 0, 1369, 0, 1265, 0, 986, 783, 0, + 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, + 81, 0, 0, 0, 0, 0, 0, 0, 1379, 0, + 0, 0, 0, 1204, 1205, 0, 1206, 0, 0, 1208, + 0, 1210, 1384, 1386, 81, 0, 0, 336, 0, 0, + 0, 1388, 0, 0, 0, 0, 0, 1399, 0, 0, + 0, 0, 0, 0, 1410, 0, 0, 0, 0, 0, + 0, 0, 1081, 0, 0, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 1269, 842, 537, + 0, 0, 0, 0, 0, 1050, 336, 1253, 497, 0, + 0, 1397, 0, 0, 0, 0, 24, 25, 52, 27, + 28, 0, 0, 0, 0, 0, 0, 1373, 0, 0, + 0, 0, 336, 1121, 0, 43, 0, 0, 945, 0, + 29, 48, 49, 1201, 206, 0, 0, 236, 0, 0, + 1203, 0, 0, 0, 0, 336, 0, 0, 0, 0, + 38, 1212, 1213, 1214, 54, 1217, 0, 0, 1220, 0, + 1223, 1152, 263, 0, 0, 206, 0, 0, 0, 336, + 206, 0, 206, 1233, 1234, 1235, 1225, 1238, 0, 0, + 0, 0, 0, 0, 0, 0, 783, 0, 0, 1132, + 1134, 0, 738, 0, 1249, 747, 748, 749, 750, 751, + 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, + 0, 0, 0, 1134, 0, 31, 32, 34, 33, 36, + 0, 50, 0, 0, 0, 0, 336, 0, 336, 1161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1355, 0, 211, 0, 0, 1360, 1353, 559, - 0, 0, 0, 0, 0, 0, 1213, 489, 0, 0, - 0, 0, 0, 0, 779, 0, 0, 1367, 0, 0, - 0, 224, 214, 0, 225, 226, 227, 229, 228, 234, - 1210, 489, 0, 215, 218, 335, 212, 233, 232, 0, - 0, 0, 0, 1250, 523, 522, 532, 533, 525, 526, - 527, 528, 529, 530, 531, 524, 0, 0, 534, 489, - 1401, 1402, 0, 335, 335, 335, 0, 0, 523, 522, - 532, 533, 525, 526, 527, 528, 529, 530, 531, 524, - 0, 0, 534, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 204, 204, 204, 0, 523, 522, 532, 533, - 525, 526, 527, 528, 529, 530, 531, 524, 1199, 1200, - 534, 1201, 1285, 1286, 1203, 1287, 1205, 1220, 0, 0, - 1250, 0, 1250, 1250, 1250, 0, 0, 0, 1158, 24, - 25, 52, 27, 28, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1250, 0, 0, 0, 43, 0, - 1089, 1090, 0, 29, 48, 49, 0, 0, 0, 0, - 0, 0, 0, 1106, 1107, 1108, 1109, 0, 1111, 1112, - 1113, 1114, 1248, 38, 0, 0, 0, 54, 0, 0, - 0, 0, 1343, 0, 0, 0, 0, 0, 0, 0, - 0, 523, 522, 532, 533, 525, 526, 527, 528, 529, - 530, 531, 524, 0, 204, 534, 0, 0, 0, 779, - 0, 0, 1361, 0, 0, 204, 204, 0, 0, 0, - 204, 0, 0, 204, 0, 0, 0, 685, 0, 0, - 0, 0, 0, 1369, 0, 0, 0, 0, 31, 32, - 34, 33, 36, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 204, 1250, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 44, 45, 0, 0, - 46, 47, 35, 0, 0, 204, 0, 0, 0, 0, - 0, 0, 0, 0, 685, 39, 40, 0, 41, 42, - 518, 0, 521, 0, 0, 0, 0, 1197, 535, 536, - 537, 538, 539, 540, 541, 1217, 519, 520, 517, 523, - 522, 532, 533, 525, 526, 527, 528, 529, 530, 531, - 524, 1214, 0, 534, 0, 0, 262, 0, 0, 0, - 0, 262, 262, 0, 0, 780, 780, 262, 0, 0, - 0, 780, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 262, 262, 262, 262, 0, 204, 639, 0, 0, - 0, 0, 0, 0, 204, 818, 0, 0, 204, 204, - 0, 0, 0, 53, 0, 0, 0, 1211, 0, 523, - 522, 532, 533, 525, 526, 527, 528, 529, 530, 531, - 524, 0, 0, 534, 0, 523, 522, 532, 533, 525, - 526, 527, 528, 529, 530, 531, 524, 0, 0, 534, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1269, - 1270, 0, 1271, 1272, 0, 1273, 1274, 0, 1275, 1276, - 1277, 0, 0, 0, 0, 627, 0, 204, 0, 0, - 0, 0, 0, 0, 0, 0, 204, 204, 0, 0, - 204, 523, 522, 532, 533, 525, 526, 527, 528, 529, - 530, 531, 524, 0, 0, 534, 0, 204, 0, 917, - 918, 0, 640, 0, 0, 0, 0, 685, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, - 0, 0, 0, 0, 653, 654, 655, 656, 657, 658, - 659, 0, 660, 661, 662, 663, 664, 641, 642, 643, - 644, 625, 626, 0, 0, 628, 0, 629, 630, 631, - 632, 633, 634, 635, 636, 637, 638, 645, 646, 647, - 648, 649, 650, 651, 652, 0, 262, 523, 522, 532, - 533, 525, 526, 527, 528, 529, 530, 531, 524, 0, - 0, 534, 0, 0, 262, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 780, 204, 204, - 204, 204, 204, 0, 0, 0, 0, 1088, 0, 0, - 996, 0, 0, 204, 0, 0, 0, 818, 0, 0, - 0, 204, 942, 0, 0, 0, 1393, 523, 522, 532, - 533, 525, 526, 527, 528, 529, 530, 531, 524, 0, - 0, 534, 523, 522, 532, 533, 525, 526, 527, 528, - 529, 530, 531, 524, 0, 0, 534, 0, 0, 0, + 0, 0, 37, 44, 45, 0, 0, 46, 47, 35, + 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, + 534, 527, 39, 40, 537, 41, 42, 0, 0, 0, + 0, 1284, 0, 0, 1229, 0, 0, 0, 0, 1190, + 0, 562, 1195, 1196, 218, 0, 0, 0, 0, 1242, + 336, 0, 1243, 0, 206, 1245, 0, 206, 0, 0, + 0, 0, 0, 206, 0, 0, 0, 0, 232, 206, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1325, + 1326, 1327, 1328, 1329, 1330, 1331, 1332, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1341, 1342, 1343, 783, 0, 0, 0, 0, 0, 0, + 0, 53, 0, 0, 0, 0, 0, 0, 0, 211, + 0, 0, 0, 0, 336, 0, 214, 0, 0, 0, + 0, 0, 1255, 0, 222, 217, 0, 1365, 0, 0, + 0, 0, 1370, 0, 0, 0, 0, 1224, 492, 0, + 0, 0, 336, 0, 0, 0, 0, 0, 0, 336, + 0, 1376, 0, 0, 0, 0, 220, 0, 0, 224, + 0, 0, 231, 0, 0, 0, 0, 941, 942, 943, + 0, 0, 206, 206, 206, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 212, 537, + 0, 0, 0, 1291, 1292, 0, 1293, 1411, 1412, 1221, + 492, 1255, 0, 1255, 1255, 1255, 0, 0, 0, 1161, + 0, 0, 0, 0, 0, 225, 215, 0, 226, 227, + 228, 0, 230, 229, 235, 1363, 562, 1255, 216, 219, + 0, 213, 234, 233, 0, 0, 0, 526, 525, 535, + 536, 528, 529, 530, 531, 532, 533, 534, 527, 0, + 0, 537, 526, 525, 535, 536, 528, 529, 530, 531, + 532, 533, 534, 527, 1351, 0, 537, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 336, 336, 0, 1218, + 492, 0, 0, 0, 206, 0, 0, 0, 0, 0, + 0, 0, 0, 783, 206, 206, 1371, 0, 0, 206, + 0, 0, 206, 1215, 492, 206, 0, 0, 0, 689, + 0, 0, 0, 0, 0, 642, 1378, 526, 525, 535, + 536, 528, 529, 530, 531, 532, 533, 534, 527, 0, + 0, 537, 0, 0, 0, 206, 0, 0, 0, 0, + 1255, 526, 525, 535, 536, 528, 529, 530, 531, 532, + 533, 534, 527, 0, 0, 537, 0, 206, 492, 0, + 0, 0, 0, 0, 0, 0, 689, 0, 1092, 1093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1109, 1110, 1111, 1112, 0, 1114, 1115, 1116, 1117, + 0, 0, 0, 630, 0, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 263, 537, + 0, 0, 0, 263, 263, 0, 0, 784, 784, 263, + 1222, 0, 0, 784, 0, 0, 0, 0, 0, 0, + 643, 0, 0, 263, 263, 263, 263, 0, 206, 0, + 0, 0, 0, 0, 0, 0, 206, 822, 0, 0, + 206, 206, 656, 657, 658, 659, 660, 661, 662, 0, + 663, 664, 665, 666, 667, 644, 645, 646, 647, 628, + 629, 0, 0, 631, 0, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 648, 649, 650, 651, 652, + 653, 654, 655, 0, 526, 525, 535, 536, 528, 529, + 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, + 0, 0, 0, 0, 1202, 1091, 0, 1219, 0, 206, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, + 206, 0, 1216, 206, 0, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, + 206, 0, 921, 922, 0, 0, 0, 521, 0, 524, + 689, 0, 0, 0, 0, 538, 539, 540, 541, 542, + 543, 544, 263, 522, 523, 520, 526, 525, 535, 536, + 528, 529, 530, 531, 532, 533, 534, 527, 0, 0, + 537, 526, 525, 535, 536, 528, 529, 530, 531, 532, + 533, 534, 527, 0, 0, 537, 526, 525, 535, 536, + 528, 529, 530, 531, 532, 533, 534, 527, 0, 263, + 537, 525, 535, 536, 528, 529, 530, 531, 532, 533, + 534, 527, 0, 0, 537, 0, 0, 263, 1275, 1276, + 0, 1277, 1278, 0, 1279, 1280, 0, 1281, 1282, 1283, + 784, 206, 206, 206, 206, 206, 946, 0, 0, 0, + 0, 0, 0, 1000, 0, 0, 206, 0, 0, 0, + 822, 0, 0, 0, 206, 0, 526, 525, 535, 536, + 528, 529, 530, 531, 532, 533, 534, 527, 0, 0, + 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 685, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 780, 0, 139, 0, 0, - 0, 0, 0, 0, 0, 0, 103, 0, 0, 0, - 0, 0, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 81, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 204, 0, 0, 0, 0, - 0, 0, 523, 522, 532, 533, 525, 526, 527, 528, - 529, 530, 531, 524, 0, 0, 534, 204, 0, 0, - 0, 0, 0, 0, 204, 0, 0, 0, 0, 0, - 109, 0, 0, 204, 207, 0, 0, 0, 0, 146, - 0, 162, 111, 119, 84, 90, 0, 110, 137, 151, - 155, 0, 0, 0, 99, 0, 153, 141, 175, 0, - 142, 152, 123, 167, 147, 174, 208, 182, 164, 181, - 188, 85, 163, 173, 97, 156, 87, 171, 161, 129, - 115, 116, 86, 780, 150, 102, 107, 101, 138, 168, - 169, 100, 191, 91, 180, 89, 92, 179, 136, 166, - 172, 130, 127, 88, 170, 128, 126, 118, 105, 112, - 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, - 160, 177, 192, 94, 0, 165, 183, 184, 185, 186, - 187, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 157, 117, 124, 149, 190, 140, 154, 98, 176, 158, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 121, - 189, 148, 106, 178, 0, 0, 0, 0, 0, 0, + 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, + 1403, 0, 0, 0, 0, 0, 0, 0, 784, 138, + 0, 0, 0, 0, 270, 0, 0, 0, 102, 0, + 267, 0, 0, 0, 119, 310, 121, 0, 0, 158, + 130, 0, 0, 0, 0, 301, 302, 0, 0, 0, + 0, 0, 0, 834, 0, 54, 0, 0, 268, 289, + 288, 291, 292, 293, 294, 0, 0, 95, 290, 295, + 296, 297, 835, 0, 0, 265, 282, 0, 309, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 279, 280, + 0, 0, 0, 0, 321, 206, 281, 0, 0, 276, + 277, 278, 283, 0, 0, 0, 206, 0, 0, 0, + 0, 0, 108, 0, 0, 206, 209, 0, 0, 319, + 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, + 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 784, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 311, 320, 317, 318, 315, 316, 314, + 313, 312, 322, 303, 304, 305, 306, 308, 0, 307, + 82, 0, 120, 190, 147, 105, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 818, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 839, - 840, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 1017, 0, 0, 0, 0, 0, 780, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 204, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 839, - 840, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 54, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 1084, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 730, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 267, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 338, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 339, 337, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 205, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 604, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 338, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 339, 337, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 421, 412, 0, 383, 424, - 361, 375, 432, 376, 377, 405, 347, 391, 139, 373, - 0, 364, 342, 370, 343, 362, 385, 103, 388, 360, - 414, 394, 423, 120, 430, 122, 399, 0, 159, 131, - 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, - 425, 374, 403, 426, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 401, 420, - 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, - 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, - 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, - 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, - 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, - 340, 109, 411, 417, 381, 207, 419, 379, 378, 422, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 415, 363, 371, 99, 369, 153, 141, 175, - 396, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 329, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 338, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 344, - 0, 160, 177, 192, 94, 359, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 339, 337, - 332, 331, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 355, 358, 353, 354, 392, 393, 427, 428, 429, - 409, 350, 0, 356, 357, 0, 413, 395, 83, 0, - 121, 189, 148, 106, 178, 139, 0, 0, 0, 0, - 269, 0, 0, 0, 103, 0, 266, 0, 0, 0, - 120, 309, 122, 0, 0, 159, 131, 0, 0, 0, - 0, 300, 301, 0, 0, 0, 0, 0, 0, 830, - 0, 54, 0, 0, 267, 288, 287, 290, 291, 292, - 293, 0, 0, 96, 289, 294, 295, 296, 831, 0, - 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 278, 279, 0, 0, 0, 0, - 320, 0, 280, 0, 0, 275, 276, 277, 282, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 207, 0, 0, 318, 0, 146, 0, 162, - 111, 119, 84, 90, 0, 110, 137, 151, 155, 0, - 0, 0, 99, 0, 153, 141, 175, 0, 142, 152, - 123, 167, 147, 174, 208, 182, 164, 181, 188, 85, - 163, 173, 97, 156, 87, 171, 161, 129, 115, 116, - 86, 0, 150, 102, 107, 101, 138, 168, 169, 100, - 191, 91, 180, 89, 92, 179, 136, 166, 172, 130, - 127, 88, 170, 128, 126, 118, 105, 112, 144, 125, - 145, 113, 133, 132, 134, 0, 0, 0, 160, 177, - 192, 94, 0, 165, 183, 184, 185, 186, 187, 0, - 0, 95, 108, 104, 143, 135, 93, 114, 157, 117, - 124, 149, 190, 140, 154, 98, 176, 158, 310, 319, - 316, 317, 314, 315, 313, 312, 311, 321, 302, 303, - 304, 305, 307, 0, 306, 83, 0, 121, 189, 148, - 106, 178, 139, 0, 0, 766, 0, 269, 0, 0, - 0, 103, 0, 266, 0, 0, 0, 120, 309, 122, - 0, 0, 159, 131, 0, 0, 0, 0, 300, 301, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 267, 288, 287, 290, 291, 292, 293, 0, 0, - 96, 289, 294, 295, 296, 0, 0, 0, 264, 281, - 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, + 0, 0, 422, 413, 0, 384, 425, 362, 376, 433, + 377, 378, 406, 348, 392, 138, 374, 0, 365, 343, + 371, 344, 363, 386, 102, 389, 361, 415, 395, 424, + 119, 431, 121, 400, 0, 158, 130, 0, 0, 388, + 417, 390, 411, 383, 407, 353, 399, 426, 375, 404, + 427, 0, 0, 0, 80, 0, 843, 844, 0, 0, + 0, 0, 0, 95, 0, 402, 421, 373, 403, 405, + 342, 401, 0, 346, 349, 432, 419, 368, 369, 1021, + 0, 0, 0, 0, 0, 784, 387, 391, 408, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 366, 206, + 398, 0, 0, 0, 350, 347, 0, 0, 385, 0, + 0, 0, 352, 0, 367, 409, 0, 341, 108, 412, + 418, 382, 209, 420, 380, 379, 423, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 416, + 364, 372, 98, 370, 152, 140, 174, 397, 141, 151, + 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, + 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, + 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, + 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, + 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, + 144, 112, 132, 131, 133, 0, 345, 0, 159, 176, + 193, 93, 360, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 356, + 359, 354, 355, 393, 394, 428, 429, 430, 410, 351, + 0, 357, 358, 0, 414, 396, 82, 0, 120, 190, + 147, 105, 177, 422, 413, 0, 384, 425, 362, 376, + 433, 377, 378, 406, 348, 392, 138, 374, 0, 365, + 343, 371, 344, 363, 386, 102, 389, 361, 415, 395, + 424, 119, 431, 121, 400, 0, 158, 130, 0, 0, + 388, 417, 390, 411, 383, 407, 353, 399, 426, 375, + 404, 427, 0, 0, 0, 80, 0, 843, 844, 0, + 0, 0, 0, 0, 95, 0, 402, 421, 373, 403, + 405, 342, 401, 0, 346, 349, 432, 419, 368, 369, + 0, 0, 0, 0, 0, 0, 0, 387, 391, 408, + 381, 0, 0, 0, 0, 0, 0, 0, 0, 366, + 0, 398, 0, 0, 0, 350, 347, 0, 0, 385, + 0, 0, 0, 352, 0, 367, 409, 0, 341, 108, + 412, 418, 382, 209, 420, 380, 379, 423, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 416, 364, 372, 98, 370, 152, 140, 174, 397, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 345, 0, 159, + 176, 193, 93, 360, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 356, 359, 354, 355, 393, 394, 428, 429, 430, 410, + 351, 0, 357, 358, 0, 414, 396, 82, 0, 120, + 190, 147, 105, 177, 422, 413, 0, 384, 425, 362, + 376, 433, 377, 378, 406, 348, 392, 138, 374, 0, + 365, 343, 371, 344, 363, 386, 102, 389, 361, 415, + 395, 424, 119, 431, 121, 400, 0, 158, 130, 0, + 0, 388, 417, 390, 411, 383, 407, 353, 399, 426, + 375, 404, 427, 54, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 402, 421, 373, + 403, 405, 342, 401, 0, 346, 349, 432, 419, 368, + 369, 0, 0, 0, 0, 0, 0, 0, 387, 391, + 408, 381, 0, 0, 0, 0, 0, 0, 0, 0, + 366, 0, 398, 0, 0, 0, 350, 347, 0, 0, + 385, 0, 0, 0, 352, 0, 367, 409, 0, 341, + 108, 412, 418, 382, 209, 420, 380, 379, 423, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 416, 364, 372, 98, 370, 152, 140, 174, 397, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 345, 0, + 159, 176, 193, 93, 360, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 356, 359, 354, 355, 393, 394, 428, 429, 430, + 410, 351, 0, 357, 358, 0, 414, 396, 82, 0, + 120, 190, 147, 105, 177, 422, 413, 0, 384, 425, + 362, 376, 433, 377, 378, 406, 348, 392, 138, 374, + 0, 365, 343, 371, 344, 363, 386, 102, 389, 361, + 415, 395, 424, 119, 431, 121, 400, 0, 158, 130, + 0, 0, 388, 417, 390, 411, 383, 407, 353, 399, + 426, 375, 404, 427, 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 402, 421, + 373, 403, 405, 342, 401, 0, 346, 349, 432, 419, + 368, 369, 0, 0, 0, 0, 0, 0, 0, 387, + 391, 408, 381, 0, 0, 0, 0, 0, 0, 1087, + 0, 366, 0, 398, 0, 0, 0, 350, 347, 0, + 0, 385, 0, 0, 0, 352, 0, 367, 409, 0, + 341, 108, 412, 418, 382, 209, 420, 380, 379, 423, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 416, 364, 372, 98, 370, 152, 140, 174, + 397, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 345, + 0, 159, 176, 193, 93, 360, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 356, 359, 354, 355, 393, 394, 428, 429, + 430, 410, 351, 0, 357, 358, 0, 414, 396, 82, + 0, 120, 190, 147, 105, 177, 422, 413, 0, 384, + 425, 362, 376, 433, 377, 378, 406, 348, 392, 138, + 374, 0, 365, 343, 371, 344, 363, 386, 102, 389, + 361, 415, 395, 424, 119, 431, 121, 400, 0, 158, + 130, 0, 0, 388, 417, 390, 411, 383, 407, 353, + 399, 426, 375, 404, 427, 0, 0, 0, 268, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 0, 402, + 421, 373, 403, 405, 342, 401, 0, 346, 349, 432, + 419, 368, 369, 0, 0, 0, 0, 0, 0, 0, + 387, 391, 408, 381, 0, 0, 0, 0, 0, 0, + 734, 0, 366, 0, 398, 0, 0, 0, 350, 347, + 0, 0, 385, 0, 0, 0, 352, 0, 367, 409, + 0, 341, 108, 412, 418, 382, 209, 420, 380, 379, + 423, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 416, 364, 372, 98, 370, 152, 140, + 174, 397, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 345, 0, 159, 176, 193, 93, 360, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 356, 359, 354, 355, 393, 394, 428, + 429, 430, 410, 351, 0, 357, 358, 0, 414, 396, + 82, 0, 120, 190, 147, 105, 177, 422, 413, 0, + 384, 425, 362, 376, 433, 377, 378, 406, 348, 392, + 138, 374, 0, 365, 343, 371, 344, 363, 386, 102, + 389, 361, 415, 395, 424, 119, 431, 121, 400, 0, + 158, 130, 0, 0, 388, 417, 390, 411, 383, 407, + 353, 399, 426, 375, 404, 427, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 402, 421, 373, 403, 405, 342, 401, 0, 346, 349, + 432, 419, 368, 369, 0, 0, 0, 0, 0, 0, + 0, 387, 391, 408, 381, 0, 0, 0, 0, 0, + 0, 0, 0, 366, 0, 398, 0, 0, 0, 350, + 347, 0, 0, 385, 0, 0, 0, 352, 0, 367, + 409, 0, 341, 108, 412, 418, 382, 209, 420, 380, + 379, 423, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 416, 364, 372, 98, 370, 152, + 140, 174, 397, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, + 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, + 0, 345, 0, 159, 176, 193, 93, 360, 164, 183, + 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, + 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 356, 359, 354, 355, 393, 394, + 428, 429, 430, 410, 351, 0, 357, 358, 0, 414, + 396, 82, 0, 120, 190, 147, 105, 177, 422, 413, + 0, 384, 425, 362, 376, 433, 377, 378, 406, 348, + 392, 138, 374, 0, 365, 343, 371, 344, 363, 386, + 102, 389, 361, 415, 395, 424, 119, 431, 121, 400, + 0, 158, 130, 0, 0, 388, 417, 390, 411, 383, + 407, 353, 399, 426, 375, 404, 427, 0, 0, 0, + 268, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 402, 421, 373, 403, 405, 342, 401, 0, 346, + 349, 432, 419, 368, 369, 0, 0, 0, 0, 0, + 0, 0, 387, 391, 408, 381, 0, 0, 0, 0, + 0, 0, 0, 0, 366, 0, 398, 0, 0, 0, + 350, 347, 0, 0, 385, 0, 0, 0, 352, 0, + 367, 409, 0, 341, 108, 412, 418, 382, 209, 420, + 380, 379, 423, 145, 0, 161, 110, 118, 83, 89, + 0, 109, 136, 150, 154, 416, 364, 372, 98, 370, + 152, 140, 174, 397, 141, 151, 122, 166, 146, 173, + 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, + 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, + 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, + 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, + 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, + 133, 0, 345, 0, 159, 176, 193, 93, 360, 164, + 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, + 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, + 139, 153, 97, 175, 157, 356, 359, 354, 355, 393, + 394, 428, 429, 430, 410, 351, 0, 357, 358, 0, + 414, 396, 82, 0, 120, 190, 147, 105, 177, 422, + 413, 0, 384, 425, 362, 376, 433, 377, 378, 406, + 348, 392, 138, 374, 0, 365, 343, 371, 344, 363, + 386, 102, 389, 361, 415, 395, 424, 119, 431, 121, + 400, 0, 158, 130, 0, 0, 388, 417, 390, 411, + 383, 407, 353, 399, 426, 375, 404, 427, 0, 0, + 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 402, 421, 373, 403, 405, 342, 401, 0, + 346, 349, 432, 419, 368, 369, 0, 0, 0, 0, + 0, 0, 0, 387, 391, 408, 381, 0, 0, 0, + 0, 0, 0, 0, 0, 366, 0, 398, 0, 0, + 0, 350, 347, 0, 0, 385, 0, 0, 0, 352, + 0, 367, 409, 0, 341, 108, 412, 418, 382, 209, + 420, 380, 379, 423, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 416, 364, 372, 98, + 370, 152, 140, 174, 397, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 339, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 345, 0, 159, 176, 193, 93, 360, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 340, 338, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 356, 359, 354, 355, + 393, 394, 428, 429, 430, 410, 351, 0, 357, 358, + 0, 414, 396, 82, 0, 120, 190, 147, 105, 177, + 422, 413, 0, 384, 425, 362, 376, 433, 377, 378, + 406, 348, 392, 138, 374, 0, 365, 343, 371, 344, + 363, 386, 102, 389, 361, 415, 395, 424, 119, 431, + 121, 400, 0, 158, 130, 0, 0, 388, 417, 390, + 411, 383, 407, 353, 399, 426, 375, 404, 427, 0, + 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 402, 421, 373, 403, 405, 342, 401, + 0, 346, 349, 432, 419, 368, 369, 0, 0, 0, + 0, 0, 0, 0, 387, 391, 408, 381, 0, 0, + 0, 0, 0, 0, 0, 0, 366, 0, 398, 0, + 0, 0, 350, 347, 0, 0, 385, 0, 0, 0, + 352, 0, 367, 409, 0, 341, 108, 412, 418, 382, + 209, 420, 380, 379, 423, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 416, 364, 372, + 98, 370, 152, 140, 174, 397, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 345, 0, 159, 176, 193, 93, + 360, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 356, 359, 354, + 355, 393, 394, 428, 429, 430, 410, 351, 0, 357, + 358, 0, 414, 396, 82, 0, 120, 190, 147, 105, + 177, 422, 413, 0, 384, 425, 362, 376, 433, 377, + 378, 406, 348, 392, 138, 374, 0, 365, 343, 371, + 344, 363, 386, 102, 389, 361, 415, 395, 424, 119, + 431, 121, 400, 0, 158, 130, 0, 0, 388, 417, + 390, 411, 383, 407, 353, 399, 426, 375, 404, 427, + 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 402, 421, 373, 403, 405, 342, + 401, 0, 346, 349, 432, 419, 368, 369, 0, 0, + 0, 0, 0, 0, 0, 387, 391, 408, 381, 0, + 0, 0, 0, 0, 0, 0, 0, 366, 0, 398, + 0, 0, 0, 350, 347, 0, 0, 385, 0, 0, + 0, 352, 0, 367, 409, 0, 341, 108, 412, 418, + 382, 209, 420, 380, 379, 423, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 416, 364, + 372, 98, 370, 152, 140, 174, 397, 141, 151, 122, + 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, + 607, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 90, 179, 88, 339, 178, 135, 165, 171, 129, 126, + 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, + 112, 132, 131, 133, 0, 345, 0, 159, 176, 193, + 93, 360, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 340, 338, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 356, 359, + 354, 355, 393, 394, 428, 429, 430, 410, 351, 0, + 357, 358, 0, 414, 396, 82, 0, 120, 190, 147, + 105, 177, 422, 413, 0, 384, 425, 362, 376, 433, + 377, 378, 406, 348, 392, 138, 374, 0, 365, 343, + 371, 344, 363, 386, 102, 389, 361, 415, 395, 424, + 119, 431, 121, 400, 0, 158, 130, 0, 0, 388, + 417, 390, 411, 383, 407, 353, 399, 426, 375, 404, + 427, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 0, 402, 421, 373, 403, 405, + 342, 401, 0, 346, 349, 432, 419, 368, 369, 0, + 0, 0, 0, 0, 0, 0, 387, 391, 408, 381, + 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, + 398, 0, 0, 0, 350, 347, 0, 0, 385, 0, + 0, 0, 352, 0, 367, 409, 0, 341, 108, 412, + 418, 382, 209, 420, 380, 379, 423, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 416, + 364, 372, 98, 370, 152, 140, 174, 397, 141, 151, + 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, + 162, 330, 96, 155, 86, 170, 160, 128, 114, 115, + 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, + 192, 90, 179, 88, 339, 178, 135, 165, 171, 129, + 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, + 144, 112, 132, 131, 133, 0, 345, 0, 159, 176, + 193, 93, 360, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 340, 338, 333, 332, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 356, + 359, 354, 355, 393, 394, 428, 429, 430, 410, 351, + 0, 357, 358, 0, 414, 396, 82, 0, 120, 190, + 147, 105, 177, 138, 0, 0, 770, 0, 270, 0, + 0, 0, 102, 0, 267, 0, 0, 0, 119, 310, + 121, 0, 0, 158, 130, 0, 0, 0, 0, 301, + 302, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 268, 289, 288, 291, 292, 293, 294, 0, + 0, 95, 290, 295, 296, 297, 0, 0, 0, 265, + 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 278, 279, 260, 0, 0, 0, 320, 0, 280, - 0, 0, 275, 276, 277, 282, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 109, 0, 0, 0, 207, - 0, 0, 318, 0, 146, 0, 162, 111, 119, 84, - 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, - 0, 153, 141, 175, 0, 142, 152, 123, 167, 147, - 174, 208, 182, 164, 181, 188, 85, 163, 173, 97, - 156, 87, 171, 161, 129, 115, 116, 86, 0, 150, - 102, 107, 101, 138, 168, 169, 100, 191, 91, 180, - 89, 92, 179, 136, 166, 172, 130, 127, 88, 170, - 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 0, 0, 160, 177, 192, 94, 0, - 165, 183, 184, 185, 186, 187, 0, 0, 95, 108, - 104, 143, 135, 93, 114, 157, 117, 124, 149, 190, - 140, 154, 98, 176, 158, 310, 319, 316, 317, 314, - 315, 313, 312, 311, 321, 302, 303, 304, 305, 307, - 0, 306, 83, 0, 121, 189, 148, 106, 178, 139, - 0, 0, 0, 0, 269, 0, 0, 0, 103, 0, - 266, 0, 0, 0, 120, 309, 122, 0, 0, 159, - 131, 0, 0, 0, 0, 300, 301, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 489, 267, 288, - 287, 290, 291, 292, 293, 0, 0, 96, 289, 294, - 295, 296, 0, 0, 0, 264, 281, 0, 308, 0, + 0, 0, 279, 280, 261, 0, 0, 0, 321, 0, + 281, 0, 0, 276, 277, 278, 283, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, + 209, 0, 0, 319, 0, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, + 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, + 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 311, 320, 317, + 318, 315, 316, 314, 313, 312, 322, 303, 304, 305, + 306, 308, 0, 307, 82, 0, 120, 190, 147, 105, + 177, 138, 0, 0, 0, 0, 270, 0, 0, 0, + 102, 0, 267, 0, 0, 0, 119, 310, 121, 0, + 0, 158, 130, 0, 0, 0, 0, 301, 302, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 492, + 268, 289, 288, 291, 292, 293, 294, 0, 0, 95, + 290, 295, 296, 297, 0, 0, 0, 265, 282, 0, + 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, - 0, 0, 0, 0, 320, 0, 280, 0, 0, 275, - 276, 277, 282, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 0, 0, 207, 0, 0, 318, - 0, 146, 0, 162, 111, 119, 84, 90, 0, 110, - 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, - 175, 0, 142, 152, 123, 167, 147, 174, 208, 182, - 164, 181, 188, 85, 163, 173, 97, 156, 87, 171, - 161, 129, 115, 116, 86, 0, 150, 102, 107, 101, - 138, 168, 169, 100, 191, 91, 180, 89, 92, 179, - 136, 166, 172, 130, 127, 88, 170, 128, 126, 118, - 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, - 0, 0, 160, 177, 192, 94, 0, 165, 183, 184, - 185, 186, 187, 0, 0, 95, 108, 104, 143, 135, - 93, 114, 157, 117, 124, 149, 190, 140, 154, 98, - 176, 158, 310, 319, 316, 317, 314, 315, 313, 312, - 311, 321, 302, 303, 304, 305, 307, 0, 306, 83, - 0, 121, 189, 148, 106, 178, 139, 0, 0, 0, - 0, 269, 0, 0, 0, 103, 0, 266, 0, 0, - 0, 120, 309, 122, 0, 0, 159, 131, 0, 0, - 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 267, 288, 287, 290, 291, - 292, 293, 0, 0, 96, 289, 294, 295, 296, 0, - 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, + 279, 280, 0, 0, 0, 0, 321, 0, 281, 0, + 0, 276, 277, 278, 283, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, + 0, 319, 0, 145, 0, 161, 110, 118, 83, 89, + 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, + 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, + 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, + 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, + 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, + 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, + 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, + 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, + 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, + 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, + 139, 153, 97, 175, 157, 311, 320, 317, 318, 315, + 316, 314, 313, 312, 322, 303, 304, 305, 306, 308, + 0, 307, 82, 0, 120, 190, 147, 105, 177, 138, + 0, 0, 0, 0, 270, 0, 0, 0, 102, 0, + 267, 0, 0, 0, 119, 310, 121, 0, 0, 158, + 130, 0, 0, 0, 0, 301, 302, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 0, 0, 268, 289, + 288, 291, 292, 293, 294, 0, 0, 95, 290, 295, + 296, 297, 0, 0, 0, 265, 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 279, 260, 0, 0, - 0, 320, 0, 280, 0, 0, 275, 276, 277, 282, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 207, 0, 0, 318, 0, 146, 0, - 162, 111, 119, 84, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 175, 0, 142, - 152, 123, 167, 147, 174, 208, 182, 164, 181, 188, - 85, 163, 173, 97, 156, 87, 171, 161, 129, 115, - 116, 86, 0, 150, 102, 107, 101, 138, 168, 169, - 100, 191, 91, 180, 89, 92, 179, 136, 166, 172, - 130, 127, 88, 170, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 160, - 177, 192, 94, 0, 165, 183, 184, 185, 186, 187, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 157, - 117, 124, 149, 190, 140, 154, 98, 176, 158, 310, - 319, 316, 317, 314, 315, 313, 312, 311, 321, 302, - 303, 304, 305, 307, 24, 306, 83, 0, 121, 189, - 148, 106, 178, 0, 0, 0, 139, 0, 0, 0, - 0, 269, 0, 0, 0, 103, 0, 266, 0, 0, - 0, 120, 309, 122, 0, 0, 159, 131, 0, 0, - 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 267, 288, 287, 290, 291, - 292, 293, 0, 0, 96, 289, 294, 295, 296, 0, - 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 279, 280, + 261, 0, 0, 0, 321, 0, 281, 0, 0, 276, + 277, 278, 283, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 108, 0, 0, 0, 209, 0, 0, 319, + 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, + 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 311, 320, 317, 318, 315, 316, 314, + 313, 312, 322, 303, 304, 305, 306, 308, 24, 307, + 82, 0, 120, 190, 147, 105, 177, 0, 0, 0, + 138, 0, 0, 0, 0, 270, 0, 0, 0, 102, + 0, 267, 0, 0, 0, 119, 310, 121, 0, 0, + 158, 130, 0, 0, 0, 0, 301, 302, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 268, + 289, 288, 291, 292, 293, 294, 0, 0, 95, 290, + 295, 296, 297, 0, 0, 0, 265, 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 278, 279, 0, 0, 0, - 0, 320, 0, 280, 0, 0, 275, 276, 277, 282, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 207, 0, 0, 318, 0, 146, 0, - 162, 111, 119, 84, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 175, 0, 142, - 152, 123, 167, 147, 174, 208, 182, 164, 181, 188, - 85, 163, 173, 97, 156, 87, 171, 161, 129, 115, - 116, 86, 0, 150, 102, 107, 101, 138, 168, 169, - 100, 191, 91, 180, 89, 92, 179, 136, 166, 172, - 130, 127, 88, 170, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 160, - 177, 192, 94, 0, 165, 183, 184, 185, 186, 187, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 157, - 117, 124, 149, 190, 140, 154, 98, 176, 158, 310, - 319, 316, 317, 314, 315, 313, 312, 311, 321, 302, - 303, 304, 305, 307, 0, 306, 83, 0, 121, 189, - 148, 106, 178, 139, 0, 0, 0, 0, 269, 0, - 0, 0, 103, 0, 266, 0, 0, 0, 120, 309, - 122, 0, 0, 159, 131, 0, 0, 0, 0, 300, - 301, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 267, 288, 287, 290, 291, 292, 293, 0, - 0, 96, 289, 294, 295, 296, 0, 0, 0, 264, - 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, + 280, 0, 0, 0, 0, 321, 0, 281, 0, 0, + 276, 277, 278, 283, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, + 319, 0, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, + 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, + 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, + 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, + 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, + 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 311, 320, 317, 318, 315, 316, + 314, 313, 312, 322, 303, 304, 305, 306, 308, 0, + 307, 82, 0, 120, 190, 147, 105, 177, 138, 0, + 0, 0, 0, 270, 0, 0, 0, 102, 0, 267, + 0, 0, 0, 119, 310, 121, 0, 0, 158, 130, + 0, 0, 0, 0, 301, 302, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 268, 289, 288, + 291, 292, 293, 294, 0, 0, 95, 290, 295, 296, + 297, 0, 0, 0, 265, 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 278, 279, 0, 0, 0, 0, 320, 0, - 280, 0, 0, 275, 276, 277, 282, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 207, 0, 0, 318, 0, 146, 0, 162, 111, 119, - 84, 90, 0, 110, 137, 151, 155, 0, 0, 0, - 99, 0, 153, 141, 175, 0, 142, 152, 123, 167, - 147, 174, 208, 182, 164, 181, 188, 85, 163, 173, - 97, 156, 87, 171, 161, 129, 115, 116, 86, 0, - 150, 102, 107, 101, 138, 168, 169, 100, 191, 91, - 180, 89, 92, 179, 136, 166, 172, 130, 127, 88, - 170, 128, 126, 118, 105, 112, 144, 125, 145, 113, - 133, 132, 134, 0, 0, 0, 160, 177, 192, 94, - 0, 165, 183, 184, 185, 186, 187, 0, 0, 95, - 108, 104, 143, 135, 93, 114, 157, 117, 124, 149, - 190, 140, 154, 98, 176, 158, 310, 319, 316, 317, - 314, 315, 313, 312, 311, 321, 302, 303, 304, 305, - 307, 139, 306, 83, 0, 121, 189, 148, 106, 178, - 103, 0, 0, 0, 0, 0, 120, 309, 122, 0, - 0, 159, 131, 0, 0, 0, 0, 300, 301, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, - 267, 288, 287, 290, 291, 292, 293, 0, 0, 96, - 289, 294, 295, 296, 0, 0, 0, 0, 281, 0, - 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 279, 280, 0, + 0, 0, 0, 321, 0, 281, 0, 0, 276, 277, + 278, 283, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 0, 209, 0, 0, 319, 0, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, + 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, + 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 311, 320, 317, 318, 315, 316, 314, 313, + 312, 322, 303, 304, 305, 306, 308, 138, 307, 82, + 0, 120, 190, 147, 105, 177, 102, 0, 0, 0, + 0, 0, 119, 310, 121, 0, 0, 158, 130, 0, + 0, 0, 0, 301, 302, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 0, 268, 289, 288, 291, + 292, 293, 294, 0, 0, 95, 290, 295, 296, 297, + 0, 0, 0, 0, 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 278, 279, 0, 0, 0, 0, 320, 0, 280, 0, - 0, 275, 276, 277, 282, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 0, 0, 207, 0, - 0, 318, 0, 146, 0, 162, 111, 119, 84, 90, - 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, - 153, 141, 175, 1394, 142, 152, 123, 167, 147, 174, - 208, 182, 164, 181, 188, 85, 163, 173, 97, 156, - 87, 171, 161, 129, 115, 116, 86, 0, 150, 102, - 107, 101, 138, 168, 169, 100, 191, 91, 180, 89, - 92, 179, 136, 166, 172, 130, 127, 88, 170, 128, - 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, - 134, 0, 0, 0, 160, 177, 192, 94, 0, 165, - 183, 184, 185, 186, 187, 0, 0, 95, 108, 104, - 143, 135, 93, 114, 157, 117, 124, 149, 190, 140, - 154, 98, 176, 158, 310, 319, 316, 317, 314, 315, - 313, 312, 311, 321, 302, 303, 304, 305, 307, 139, - 306, 83, 0, 121, 189, 148, 106, 178, 103, 0, - 0, 0, 0, 0, 120, 309, 122, 0, 0, 159, - 131, 0, 0, 0, 0, 300, 301, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 267, 288, - 287, 290, 291, 292, 293, 0, 0, 96, 289, 294, - 295, 296, 0, 0, 0, 0, 281, 0, 308, 0, + 0, 0, 0, 0, 0, 0, 279, 280, 0, 0, + 0, 0, 321, 0, 281, 0, 0, 276, 277, 278, + 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108, 0, 0, 0, 209, 0, 0, 319, 0, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 0, 0, 0, 98, 0, 152, 140, 174, 1404, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, + 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 311, 320, 317, 318, 315, 316, 314, 313, 312, + 322, 303, 304, 305, 306, 308, 138, 307, 82, 0, + 120, 190, 147, 105, 177, 102, 0, 0, 0, 0, + 0, 119, 310, 121, 0, 0, 158, 130, 0, 0, + 0, 0, 301, 302, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 268, 289, 288, 291, 292, + 293, 294, 0, 0, 95, 290, 295, 296, 297, 0, + 0, 0, 0, 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, - 0, 0, 0, 0, 320, 0, 280, 0, 0, 275, - 276, 277, 282, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 0, 0, 207, 0, 0, 318, - 0, 146, 0, 162, 111, 119, 84, 90, 0, 110, - 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, - 175, 0, 142, 152, 123, 167, 147, 174, 208, 182, - 164, 181, 188, 85, 163, 173, 97, 156, 87, 171, - 161, 129, 115, 116, 86, 0, 150, 102, 107, 101, - 138, 168, 169, 100, 191, 91, 180, 89, 92, 179, - 136, 166, 172, 130, 127, 88, 170, 128, 126, 118, - 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, - 0, 0, 160, 177, 192, 94, 0, 165, 183, 184, - 185, 186, 187, 0, 0, 95, 108, 104, 143, 135, - 93, 114, 157, 117, 124, 149, 190, 140, 154, 98, - 176, 158, 310, 319, 316, 317, 314, 315, 313, 312, - 311, 321, 302, 303, 304, 305, 307, 0, 306, 83, - 0, 121, 189, 148, 106, 178, 139, 0, 0, 0, - 511, 0, 0, 0, 0, 103, 0, 0, 0, 0, - 0, 120, 0, 122, 0, 0, 159, 131, 0, 0, + 0, 0, 0, 0, 0, 279, 280, 0, 0, 0, + 0, 321, 0, 281, 0, 0, 276, 277, 278, 283, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 0, 209, 0, 0, 319, 0, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, + 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 311, 320, 317, 318, 315, 316, 314, 313, 312, 322, + 303, 304, 305, 306, 308, 138, 307, 82, 0, 120, + 190, 147, 105, 177, 102, 0, 0, 0, 0, 0, + 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 81, 0, 513, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 508, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 509, 0, 0, + 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 207, 0, 0, 0, 0, 146, 0, - 162, 111, 119, 84, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 175, 0, 142, - 152, 123, 167, 147, 174, 208, 182, 164, 181, 188, - 85, 163, 173, 97, 156, 87, 171, 161, 129, 115, - 116, 86, 0, 150, 102, 107, 101, 138, 168, 169, - 100, 191, 91, 180, 89, 92, 179, 136, 166, 172, - 130, 127, 88, 170, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 160, - 177, 192, 94, 0, 165, 183, 184, 185, 186, 187, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 157, - 117, 124, 149, 190, 140, 154, 98, 176, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 0, 0, 0, 0, 0, 0, 83, 103, 121, 189, - 148, 106, 178, 120, 0, 122, 0, 0, 159, 131, + 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, + 534, 527, 0, 0, 537, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, + 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, + 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, + 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, + 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, + 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, + 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, + 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, + 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 0, 0, 514, 0, 0, 0, 82, 102, 120, 190, + 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, - 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 0, 516, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 0, 0, 511, 510, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, + 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, + 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 138, 0, 0, 0, 0, 0, 0, 0, 82, + 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, + 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 77, 78, 0, 73, 0, 0, 0, 79, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 175, - 0, 142, 152, 123, 167, 147, 174, 75, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 160, 177, 192, 94, 0, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 0, 76, 0, 0, 0, 0, 0, 0, 0, - 139, 0, 0, 0, 817, 0, 0, 0, 83, 103, - 121, 189, 148, 106, 178, 120, 0, 122, 0, 0, - 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, - 0, 819, 0, 0, 0, 0, 0, 0, 96, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 76, 77, 0, 73, 0, + 0, 0, 78, 145, 0, 161, 110, 118, 83, 89, + 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, + 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, + 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, + 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, + 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, + 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, + 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, + 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, + 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, + 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, + 139, 153, 97, 175, 157, 0, 75, 0, 0, 0, + 0, 0, 0, 0, 138, 0, 0, 0, 821, 0, + 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, + 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 207, 0, 0, - 0, 0, 146, 0, 162, 111, 119, 84, 90, 0, - 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, - 141, 175, 0, 142, 152, 123, 167, 147, 174, 208, - 182, 164, 181, 188, 85, 163, 173, 97, 156, 87, - 171, 161, 129, 115, 116, 86, 0, 150, 102, 107, - 101, 138, 168, 169, 100, 191, 91, 180, 89, 92, - 179, 136, 166, 172, 130, 127, 88, 170, 128, 126, - 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 0, 0, 160, 177, 192, 94, 0, 165, 183, - 184, 185, 186, 187, 0, 0, 95, 108, 104, 143, - 135, 93, 114, 157, 117, 124, 149, 190, 140, 154, - 98, 176, 158, 0, 0, 0, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 83, 0, 121, 189, 148, 106, 178, 103, 0, 0, - 0, 0, 0, 120, 0, 122, 0, 0, 159, 131, + 0, 0, 0, 207, 0, 823, 0, 0, 0, 0, + 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 0, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, + 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, + 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, + 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, + 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, + 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, + 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, + 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 82, 0, 120, 190, 147, + 105, 177, 102, 0, 0, 0, 0, 0, 119, 0, + 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 207, 0, 0, 0, 0, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 175, - 0, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 160, 177, 192, 94, 0, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 0, 0, 0, 24, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 0, 83, 0, - 121, 189, 148, 106, 178, 103, 0, 0, 0, 0, - 0, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 205, 0, 0, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, + 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, + 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, + 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, + 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 0, 82, 0, 120, 190, 147, 105, + 177, 102, 0, 0, 0, 0, 0, 119, 0, 121, + 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 207, 0, 0, 0, 0, 146, 0, - 162, 111, 119, 84, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 175, 0, 142, - 152, 123, 167, 147, 174, 208, 182, 164, 181, 188, - 85, 163, 173, 97, 156, 87, 171, 161, 129, 115, - 116, 86, 0, 150, 102, 107, 101, 138, 168, 169, - 100, 191, 91, 180, 89, 92, 179, 136, 166, 172, - 130, 127, 88, 170, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 160, - 177, 192, 94, 0, 165, 183, 184, 185, 186, 187, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 157, - 117, 124, 149, 190, 140, 154, 98, 176, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 0, 0, 817, 0, 0, 0, 83, 103, 121, 189, - 148, 106, 178, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 205, 0, 819, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, + 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, + 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 138, 0, 0, 0, 821, + 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, + 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 207, 0, 823, 0, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 207, 0, 0, 0, 0, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 175, - 0, 815, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 160, 177, 192, 94, 0, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 139, 0, 0, 0, 0, 0, 0, 0, 83, 103, - 121, 189, 148, 106, 178, 120, 0, 122, 0, 0, - 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, - 0, 0, 717, 0, 0, 718, 0, 0, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, + 0, 0, 98, 0, 152, 140, 174, 0, 819, 151, + 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, + 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, + 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, + 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, + 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, + 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, + 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, + 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, + 721, 0, 0, 722, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 207, 0, 0, - 0, 0, 146, 0, 162, 111, 119, 84, 90, 0, - 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, - 141, 175, 0, 142, 152, 123, 167, 147, 174, 208, - 182, 164, 181, 188, 85, 163, 173, 97, 156, 87, - 171, 161, 129, 115, 116, 86, 0, 150, 102, 107, - 101, 138, 168, 169, 100, 191, 91, 180, 89, 92, - 179, 136, 166, 172, 130, 127, 88, 170, 128, 126, - 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 0, 0, 160, 177, 192, 94, 0, 165, 183, - 184, 185, 186, 187, 0, 0, 95, 108, 104, 143, - 135, 93, 114, 157, 117, 124, 149, 190, 140, 154, - 98, 176, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 83, 0, 121, 189, 148, 106, 178, 103, 0, 613, - 0, 0, 0, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 0, 612, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, + 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, + 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 138, 0, 82, + 0, 120, 190, 147, 105, 177, 102, 0, 616, 0, + 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 615, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 207, 0, 0, 0, 0, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 175, - 0, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 160, 177, 192, 94, 0, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 139, 0, 0, 0, 0, 0, 0, 0, 83, 103, - 121, 189, 148, 106, 178, 120, 0, 122, 0, 0, - 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 205, - 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, + 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 82, 102, + 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, + 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 54, 0, 0, 207, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 109, 0, 0, 0, 207, 0, 0, - 0, 0, 146, 0, 162, 111, 119, 84, 90, 0, - 110, 137, 151, 155, 0, 0, 0, 99, 0, 153, - 141, 175, 0, 142, 152, 123, 167, 147, 174, 208, - 182, 164, 181, 188, 85, 163, 173, 97, 156, 87, - 171, 161, 129, 115, 116, 86, 0, 150, 102, 107, - 101, 138, 168, 169, 100, 191, 91, 180, 89, 92, - 179, 136, 166, 172, 130, 127, 88, 170, 128, 126, - 118, 105, 112, 144, 125, 145, 113, 133, 132, 134, - 0, 0, 0, 160, 177, 192, 94, 0, 165, 183, - 184, 185, 186, 187, 0, 0, 95, 108, 104, 143, - 135, 93, 114, 157, 117, 124, 149, 190, 140, 154, - 98, 176, 158, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 139, 0, 0, 0, 0, 0, 0, 0, - 83, 103, 121, 189, 148, 106, 178, 120, 0, 122, - 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 205, 0, 819, 0, 0, 0, 0, 0, 0, - 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, + 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, + 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, + 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, + 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, + 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, + 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, + 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, + 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 207, 0, 823, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 109, 0, 0, 0, 207, - 0, 0, 0, 0, 146, 0, 162, 111, 119, 84, - 90, 0, 110, 137, 151, 155, 0, 0, 0, 99, - 0, 153, 141, 175, 0, 142, 152, 123, 167, 147, - 174, 208, 182, 164, 181, 188, 85, 163, 173, 97, - 156, 87, 171, 161, 129, 115, 116, 86, 0, 150, - 102, 107, 101, 138, 168, 169, 100, 191, 91, 180, - 89, 92, 179, 136, 166, 172, 130, 127, 88, 170, - 128, 126, 118, 105, 112, 144, 125, 145, 113, 133, - 132, 134, 0, 0, 0, 160, 177, 192, 94, 0, - 165, 183, 184, 185, 186, 187, 0, 0, 95, 108, - 104, 143, 135, 93, 114, 157, 117, 124, 149, 190, - 140, 154, 98, 176, 158, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, - 0, 0, 83, 103, 121, 189, 148, 106, 178, 120, - 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 782, 0, 0, 0, 0, - 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, + 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, + 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, + 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, + 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 268, 0, 786, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, - 0, 207, 0, 0, 0, 0, 146, 0, 162, 111, - 119, 84, 90, 0, 110, 137, 151, 155, 0, 0, - 0, 99, 0, 153, 141, 175, 0, 142, 152, 123, - 167, 147, 174, 208, 182, 164, 181, 188, 85, 163, - 173, 97, 156, 87, 171, 161, 129, 115, 116, 86, - 0, 150, 102, 107, 101, 138, 168, 169, 100, 191, - 91, 180, 89, 92, 179, 136, 166, 172, 130, 127, - 88, 170, 128, 126, 118, 105, 112, 144, 125, 145, - 113, 133, 132, 134, 0, 0, 0, 160, 177, 192, - 94, 0, 165, 183, 184, 185, 186, 187, 0, 0, - 95, 108, 104, 143, 135, 93, 114, 157, 117, 124, - 149, 190, 140, 154, 98, 176, 158, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 139, 0, 0, 0, - 0, 0, 0, 0, 83, 103, 121, 189, 148, 106, - 178, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 267, 0, 778, 0, 0, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, + 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, + 0, 0, 0, 0, 0, 0, 0, 82, 102, 120, + 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, + 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, + 782, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, - 0, 0, 0, 207, 0, 0, 0, 0, 146, 0, - 162, 111, 119, 84, 90, 0, 110, 137, 151, 155, - 0, 0, 0, 99, 0, 153, 141, 175, 0, 142, - 152, 123, 167, 147, 174, 208, 182, 164, 181, 188, - 85, 163, 173, 97, 156, 87, 171, 161, 129, 115, - 116, 86, 0, 150, 102, 107, 101, 138, 168, 169, - 100, 191, 91, 180, 89, 92, 179, 136, 166, 172, - 130, 127, 88, 170, 128, 126, 118, 105, 112, 144, - 125, 145, 113, 133, 132, 134, 0, 0, 0, 160, - 177, 192, 94, 0, 165, 183, 184, 185, 186, 187, - 0, 0, 95, 108, 104, 143, 135, 93, 114, 157, - 117, 124, 149, 190, 140, 154, 98, 176, 158, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, - 0, 0, 0, 0, 0, 0, 83, 103, 121, 189, - 148, 106, 178, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 81, 0, 513, - 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, + 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, + 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, + 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, + 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, + 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 0, 516, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 207, 0, 0, 0, 0, - 146, 0, 162, 111, 119, 84, 90, 0, 110, 137, - 151, 155, 0, 0, 0, 99, 0, 153, 141, 175, - 0, 142, 152, 123, 167, 147, 174, 208, 182, 164, - 181, 188, 85, 163, 173, 97, 156, 87, 171, 161, - 129, 115, 116, 86, 0, 150, 102, 107, 101, 138, - 168, 169, 100, 191, 91, 180, 89, 92, 179, 136, - 166, 172, 130, 127, 88, 170, 128, 126, 118, 105, - 112, 144, 125, 145, 113, 133, 132, 134, 0, 0, - 0, 160, 177, 192, 94, 0, 165, 183, 184, 185, - 186, 187, 0, 0, 95, 108, 104, 143, 135, 93, - 114, 157, 117, 124, 149, 190, 140, 154, 98, 176, - 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 83, 0, - 121, 189, 148, 106, 178, 586, 103, 0, 0, 0, - 0, 0, 120, 0, 122, 0, 0, 159, 131, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, + 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, + 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 138, 82, 0, 120, 190, 147, 105, 177, + 589, 102, 0, 0, 0, 0, 0, 119, 0, 121, + 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 207, 0, 0, 0, 0, 146, - 0, 162, 111, 119, 84, 90, 0, 110, 137, 151, - 155, 0, 0, 0, 99, 0, 153, 141, 175, 0, - 142, 152, 123, 167, 147, 174, 208, 182, 164, 181, - 188, 85, 163, 173, 97, 156, 87, 171, 161, 129, - 115, 116, 86, 0, 150, 102, 107, 101, 138, 168, - 169, 100, 191, 91, 180, 89, 92, 179, 136, 166, - 172, 130, 127, 88, 170, 128, 126, 118, 105, 112, - 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, - 160, 177, 192, 94, 0, 165, 183, 184, 185, 186, - 187, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 157, 117, 124, 149, 190, 140, 154, 98, 176, 158, - 0, 0, 324, 0, 0, 0, 0, 0, 0, 139, - 0, 0, 0, 0, 0, 0, 0, 83, 103, 121, - 189, 148, 106, 178, 120, 0, 122, 0, 0, 159, - 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, - 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, + 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, + 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 0, 0, 325, 0, + 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, + 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, + 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 109, 0, 0, 0, 207, 0, 0, 0, - 0, 146, 0, 162, 111, 119, 84, 90, 0, 110, - 137, 151, 155, 0, 0, 0, 99, 0, 153, 141, - 175, 0, 142, 152, 123, 167, 147, 174, 208, 182, - 164, 181, 188, 85, 163, 173, 97, 156, 87, 171, - 161, 129, 115, 116, 86, 0, 150, 102, 107, 101, - 138, 168, 169, 100, 191, 91, 180, 89, 92, 179, - 136, 166, 172, 130, 127, 88, 170, 128, 126, 118, - 105, 112, 144, 125, 145, 113, 133, 132, 134, 0, - 0, 0, 160, 177, 192, 94, 0, 165, 183, 184, - 185, 186, 187, 0, 0, 95, 108, 104, 143, 135, - 93, 114, 157, 117, 124, 149, 190, 140, 154, 98, - 176, 158, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 139, 0, 0, 0, 0, 0, 0, 0, 83, - 103, 121, 189, 148, 106, 178, 120, 0, 122, 0, - 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, + 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, + 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, + 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, + 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, + 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, + 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, + 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, + 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, + 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, + 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 205, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 109, 0, 202, 0, 207, 0, - 0, 0, 0, 146, 0, 162, 111, 119, 84, 90, - 0, 110, 137, 151, 155, 0, 0, 0, 99, 0, - 153, 141, 175, 0, 142, 152, 123, 167, 147, 174, - 208, 182, 164, 181, 188, 85, 163, 173, 97, 156, - 87, 171, 161, 129, 115, 116, 86, 0, 150, 102, - 107, 101, 138, 168, 169, 100, 191, 91, 180, 89, - 92, 179, 136, 166, 172, 130, 127, 88, 170, 128, - 126, 118, 105, 112, 144, 125, 145, 113, 133, 132, - 134, 0, 0, 0, 160, 177, 192, 94, 0, 165, - 183, 184, 185, 186, 187, 0, 0, 95, 108, 104, - 143, 135, 93, 114, 157, 117, 124, 149, 190, 140, - 154, 98, 176, 158, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 139, 0, 0, 0, 0, 0, 0, - 0, 83, 103, 121, 189, 148, 106, 178, 120, 0, - 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, + 0, 108, 0, 204, 0, 209, 0, 0, 0, 0, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, + 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, + 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 138, 0, 0, 0, 0, 0, 0, 0, 82, + 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, + 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, - 207, 0, 0, 0, 0, 146, 0, 162, 111, 119, - 84, 90, 0, 110, 137, 151, 155, 0, 0, 0, - 99, 0, 153, 141, 175, 0, 142, 152, 123, 167, - 147, 174, 208, 182, 164, 181, 188, 85, 163, 173, - 97, 156, 87, 171, 161, 129, 115, 116, 86, 0, - 150, 102, 107, 101, 138, 168, 169, 100, 191, 91, - 180, 89, 92, 179, 136, 166, 172, 130, 127, 88, - 170, 128, 126, 118, 105, 112, 144, 125, 145, 113, - 133, 132, 134, 0, 0, 0, 160, 177, 192, 94, - 0, 165, 183, 184, 185, 186, 187, 0, 0, 95, - 108, 104, 143, 135, 93, 114, 157, 117, 124, 149, - 190, 140, 154, 98, 176, 158, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 139, 0, 0, 0, 0, - 0, 0, 0, 83, 103, 121, 189, 148, 106, 178, - 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, + 0, 0, 0, 145, 0, 161, 110, 118, 83, 89, + 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, + 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, + 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, + 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, + 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, + 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, + 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, + 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, + 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, + 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, + 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, + 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, + 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 0, 207, 0, 0, 0, 0, 146, 0, 162, - 111, 119, 84, 90, 0, 110, 137, 151, 155, 0, - 0, 0, 99, 0, 153, 141, 175, 0, 142, 152, - 123, 167, 147, 174, 208, 182, 164, 181, 188, 85, - 163, 173, 97, 156, 87, 171, 161, 129, 115, 116, - 86, 0, 150, 102, 107, 101, 138, 168, 169, 100, - 191, 91, 180, 89, 92, 179, 136, 166, 172, 130, - 127, 88, 170, 128, 126, 118, 105, 112, 144, 125, - 145, 113, 133, 132, 134, 0, 0, 0, 160, 177, - 192, 94, 0, 165, 183, 184, 185, 186, 187, 0, - 0, 95, 108, 104, 143, 135, 93, 114, 157, 117, - 124, 149, 190, 140, 154, 98, 176, 158, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 139, 0, 0, - 0, 0, 0, 0, 0, 83, 103, 121, 189, 148, - 106, 178, 120, 0, 122, 0, 0, 159, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, - 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, + 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, + 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, + 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, + 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, + 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, + 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 138, 0, 0, + 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, + 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 109, 0, 0, 0, 207, 0, 0, 0, 0, 146, - 0, 162, 111, 119, 84, 90, 0, 110, 137, 151, - 155, 0, 0, 0, 99, 0, 153, 141, 175, 0, - 142, 152, 123, 167, 147, 174, 208, 182, 164, 181, - 188, 85, 163, 173, 97, 156, 87, 171, 161, 129, - 115, 116, 86, 0, 150, 102, 107, 101, 138, 168, - 169, 100, 191, 91, 180, 89, 92, 179, 136, 166, - 172, 130, 127, 88, 170, 128, 126, 118, 105, 112, - 144, 125, 145, 113, 133, 132, 134, 0, 0, 0, - 160, 177, 192, 94, 0, 165, 183, 184, 185, 186, - 187, 0, 0, 95, 108, 104, 143, 135, 93, 114, - 157, 117, 124, 149, 190, 140, 154, 98, 176, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 121, - 189, 148, 106, 178, + 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, + 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, + 120, 190, 147, 105, 177, } var yyPact = [...]int{ - 1773, -1000, -181, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1440, -1000, -188, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 845, 880, -1000, -1000, -1000, -1000, -1000, -1000, + 228, 7723, 21, 90, 16, 11010, 84, 1591, 11476, -1000, + -1, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -73, -90, + -1000, 704, -1000, -1000, -1000, -1000, -1000, 823, 833, 718, + 817, 749, -1000, 6041, 63, 63, 10777, 5297, -1000, -1000, + 223, 11476, 79, 11476, -155, 61, 61, 61, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 864, 908, -1000, -1000, -1000, -1000, -1000, -1000, - 197, 7700, 66, 91, -9, 10973, 88, 1457, 11437, -1000, - -7, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -99, -106, - -1000, 685, -1000, -1000, -1000, -1000, -1000, 855, 861, 709, - 846, 766, -1000, 6248, 53, 53, 10741, 5260, -1000, -1000, - 219, 11437, 82, 11437, -152, 11205, 57, 57, 57, -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, @@ -1923,22 +1930,22 @@ 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, 83, 11476, 197, -1000, 11476, 59, + 556, 59, 59, 59, 11476, -1000, 141, -1000, -1000, -1000, + 11476, 544, 787, 3209, 45, 3209, -1000, 3209, 3209, -1000, + 3209, 5, 3209, -71, 719, 859, -1000, -1000, -1000, -1000, + -1000, -1000, 3209, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 445, 792, 6540, 6540, + 845, -1000, 704, -1000, -1000, -1000, 777, -1000, -1000, 316, + 864, -1000, 7490, 140, -1000, 6540, 2073, 591, -1000, -1000, + 591, -1000, -1000, 115, -1000, -1000, 7018, 7018, 7018, 7018, + 7018, 7018, 7018, 7018, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 591, -1000, + 6292, 591, 591, 591, 591, 591, 591, 591, 591, 6540, + 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, + 591, 591, 591, 10544, 9372, 11476, 648, -1000, 664, 5036, + -132, -1000, -1000, -1000, 212, 9139, -1000, -1000, -1000, 786, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 86, 11437, -1000, 11437, 54, 498, 54, - 54, 54, 11437, -1000, 126, -1000, -1000, -1000, -1000, 11437, - 478, 796, 3180, 52, 3180, -1000, 3180, 3180, -1000, 3180, - -1, 3180, -71, 726, 882, -1000, -1000, -1000, -1000, -1000, - -1000, 3180, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 445, 804, 6745, 6745, 864, - -1000, 685, -1000, -1000, -1000, 792, -1000, -1000, 275, 887, - -1000, 7468, 125, -1000, 6745, 1866, 659, -1000, -1000, 659, - -1000, -1000, 110, -1000, -1000, 7221, 7221, 7221, 7221, 7221, - 7221, 7221, 7221, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 659, -1000, 6498, - 659, 659, 659, 659, 659, 659, 659, 659, 6745, 659, - 659, 659, 659, 659, 659, 659, 659, 659, 659, 659, - 659, 659, 10509, 9342, 11437, 601, -1000, 650, 5000, -88, - -1000, -1000, -1000, 200, 9110, -1000, -1000, -1000, 795, -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, @@ -1947,128 +1954,128 @@ 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, 555, 11476, -1000, 1875, -1000, 530, + 3209, 69, 501, 260, 499, 11476, 11476, 3209, 14, 12, + 11476, 668, 67, 11476, 812, 716, 11476, 497, 484, -1000, + 4775, -1000, 3209, 3209, -1000, -1000, -1000, 3209, 3209, 3209, + 3209, 3209, 3209, -1000, -1000, -1000, -1000, 3209, 3209, -1000, + 861, 204, -1000, -1000, -1000, -1000, 11476, 6540, -1000, -1000, + -1000, -1000, -1000, -1000, 875, 164, 394, 123, 666, -1000, + 366, 823, 445, 749, 8900, 713, -1000, -1000, 11476, -1000, + 6540, 6540, 466, -1000, 10304, -1000, -1000, 3731, 168, 7018, + 398, 313, 7018, 7018, 7018, 7018, 7018, 7018, 7018, 7018, + 7018, 7018, 7018, 7018, 7018, 7018, 7018, 399, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 475, -1000, 704, 595, + 595, 143, 143, 143, 143, 143, 143, 143, 7257, 5545, + 445, 553, 250, 6292, 6041, 6041, 6540, 6540, 10071, 9838, + 6041, 818, 255, 250, 11709, -1000, 445, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 6041, 6041, 6041, 6041, 32, 11476, + -1000, 677, 883, -1000, -1000, -1000, 814, 8434, 8667, 32, + 586, 9372, 11476, -1000, -1000, 4514, 664, -132, 661, -1000, + -109, -114, 2401, 127, -1000, -1000, -1000, -1000, 2948, 208, + 579, 376, -56, -1000, -1000, -1000, 681, -1000, 681, 681, + 681, 681, -29, -29, -29, -29, -1000, -1000, -1000, -1000, + -1000, 699, 698, -1000, 681, 681, 681, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 574, 11437, -1000, 1977, -1000, 471, 3180, - 71, 664, 465, 252, 453, 11437, 11437, 3180, 653, 64, - 11437, 829, 725, 11437, 440, 438, -1000, 4740, -1000, 3180, - 3180, -1000, -1000, -1000, 3180, 3180, 3180, 3180, 3180, 3180, - -1000, -1000, -1000, -1000, 3180, 3180, -1000, 884, 236, -1000, - -1000, -1000, -1000, 11437, 6745, -1000, -1000, -1000, -1000, -1000, - -1000, 902, 150, 418, 122, 651, -1000, 309, 855, 445, - 766, 8872, 736, -1000, -1000, 11437, -1000, 6745, 6745, 424, - -1000, 10270, -1000, -1000, 3700, 168, 7221, 293, 163, 7221, - 7221, 7221, 7221, 7221, 7221, 7221, 7221, 7221, 7221, 7221, - 7221, 7221, 7221, 7221, 352, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 432, -1000, 685, 590, 590, 139, 139, - 139, 139, 139, 139, 139, 2379, 5754, 445, 570, 361, - 6498, 6248, 6248, 6745, 6745, 10038, 9806, 6248, 835, 242, - 361, 11669, -1000, 445, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 6248, 6248, 6248, 6248, 20, 11437, -1000, 656, 712, - -1000, -1000, -1000, 833, 8408, 8640, 20, 585, 9342, 11437, - -1000, -1000, 4480, 650, -88, 641, -1000, -127, -94, 5507, - 137, -1000, -1000, -1000, -1000, 2920, 207, 534, 253, -74, - -1000, -1000, -1000, 686, -1000, 686, 686, 686, 686, -38, - -38, -38, -38, -1000, -1000, -1000, -1000, -1000, 716, 711, - -1000, 686, 686, 686, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 694, 694, 694, 683, 683, 689, -1000, + 11476, 3209, 811, 3209, -1000, 122, -1000, 11243, 11243, 107, + 11476, 11476, 663, -1000, 11476, 3209, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 710, 710, 710, 692, 692, 684, -1000, 11437, -169, 429, - 3180, 809, 3180, -1000, 132, -1000, 11437, 11437, 647, -1000, - 11437, 3180, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11437, 289, 11437, - 11437, -1000, 361, -1000, 774, 6745, 6745, 4220, 6745, -1000, - -1000, -1000, 804, -1000, 835, 857, -1000, 787, 785, 6248, - -1000, -1000, 168, 183, -1000, -1000, 394, -1000, -1000, -1000, - -1000, 118, 659, -1000, 2094, -1000, -1000, -1000, -1000, 293, - 7221, 7221, 7221, 1262, 2094, 2169, 468, 962, 139, 378, - 378, 136, 136, 136, 136, 136, 287, 287, -1000, -1000, - -1000, 445, -1000, -1000, -1000, 445, 6248, 642, -1000, -1000, - 6745, -1000, 445, 559, 559, 340, 461, 678, 663, -1000, - 116, 661, 655, 559, 6248, 233, -1000, 6745, 445, -1000, - 559, 445, 559, 559, 649, 659, -1000, 11669, 9342, 9342, - 9342, 9342, 9342, -1000, 751, 748, -1000, 744, 740, 752, - 11437, -1000, 564, 8408, 133, 659, -1000, 9574, -1000, -1000, - 877, 9342, 609, -1000, -1000, 641, -88, -100, -1000, -1000, - -1000, -1000, 361, -1000, 415, 640, 2660, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 705, 414, -1000, 808, 188, 184, - 400, 806, -1000, -1000, -1000, 800, -1000, 262, -78, -1000, - -1000, 366, -38, -38, -1000, -1000, 137, 794, 137, 137, - 137, 393, 393, -1000, -1000, -1000, -1000, 339, -1000, -1000, - -1000, 337, -1000, 724, 11205, 3180, -1000, 3960, -1000, -1000, - -1000, -1000, -1000, -1000, 1370, 286, 172, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 19, 61, - -1000, 3180, -1000, 236, -1000, 390, 6745, -1000, -1000, 771, - 361, 361, 114, -1000, -1000, 11437, -1000, -1000, -1000, -1000, - 625, -1000, -1000, -1000, 3440, 6248, -1000, 1262, 2094, 2154, - -1000, 7221, 7221, -1000, -1000, 559, 6248, 361, -1000, -1000, - -1000, 47, 352, 47, 7221, 7221, 7221, 7221, 4220, 7221, - 7221, 7221, 7221, -164, 620, 218, -1000, 6745, 349, -1000, - -1000, -1000, -1000, -1000, 722, 11669, 659, -1000, 8170, 11205, - 615, -1000, 193, 712, 715, 721, 683, -1000, -1000, -1000, - -1000, 747, -1000, 741, -1000, -1000, -1000, -1000, -1000, 80, - 78, 75, 11205, -1000, 864, 6745, 609, -1000, -1000, -1000, - -132, -119, -1000, -1000, -1000, 2920, -1000, 2920, 11205, 38, - -1000, 400, 400, -1000, -1000, -1000, 695, 720, 44, -1000, - -1000, -1000, 527, 137, 137, -1000, 214, -1000, -1000, -1000, - 552, -1000, 549, 638, 546, 11437, -1000, -1000, 637, -1000, - 191, -1000, -1000, 11205, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 11205, 11437, -1000, -1000, - -1000, -1000, -1000, 11205, 11437, -1000, 289, -1000, 361, -1000, - 3960, -1000, 877, 9342, -1000, -1000, 445, -1000, 7221, 2094, - 2094, -1000, -1000, 445, 686, 686, -1000, 686, 692, -1000, - 686, -16, 686, -22, 445, 445, 1625, 2008, 1601, 1952, - -1000, 1460, 1936, 851, 1748, 659, -159, -1000, 361, 6745, - -1000, 815, 579, 633, -1000, -1000, 6001, 445, 537, 109, - 533, -1000, 864, 11669, 6745, -1000, -1000, 6745, 687, -1000, - 6745, -1000, -1000, -1000, 659, 659, 659, 533, 855, 361, - -1000, -1000, -1000, -1000, 2660, -1000, 518, -1000, 686, -1000, - -1000, -1000, 11205, -61, 901, -1000, -1000, -1000, -1000, 680, - -1000, -1000, -1000, -1000, -1000, -1000, -38, 386, -38, 320, - -1000, 318, 3180, 3960, 2920, -1000, 668, -1000, -1000, -1000, - -1000, 820, -1000, -1000, 874, 635, -1000, 2094, -1000, -1000, - 94, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 7221, 7221, -1000, 7221, 7221, -1000, 7221, 7221, -1000, 7221, - 7221, 7221, 445, 385, 361, 805, -1000, 659, -1000, -1000, - 631, 11205, 11205, -1000, 11205, 855, -1000, 361, 361, 11205, - 361, 11205, 11205, 11205, 7932, -1000, 135, 11205, -1000, 504, - -1000, 177, -1000, -142, 501, 137, -1000, 137, 489, 469, - -1000, -1000, -1000, 11205, 659, 867, 847, -1000, -1000, 1653, - 1653, 1653, 1653, 1653, 1653, 1653, 1653, 29, -1000, -1000, - 896, -1000, 659, -1000, 685, 107, -1000, -1000, -1000, 496, - 493, 493, 493, 133, 135, -1000, 396, 185, 380, -1000, - 32, 11205, 272, 803, -1000, 802, 666, -1000, -1000, -1000, - -1000, -1000, 488, 12, -1000, 6745, 6745, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 445, 46, -172, 11669, 633, - 445, 11205, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 282, - -1000, -1000, 11437, -1000, -1000, 372, -1000, -1000, 449, 664, - 448, -1000, 11205, 361, 584, -1000, 770, -167, -176, 555, - -1000, -1000, -1000, 660, -1000, -1000, -169, -1000, 12, 781, - -1000, 759, -1000, 11205, -1000, -1000, 9, -170, 444, 6, - -174, 657, 659, -178, 652, -1000, 899, 6983, -1000, -1000, - 894, 156, 156, 1653, 445, -1000, -1000, -1000, 43, 391, + -1000, 11476, 329, 11476, 11476, -1000, 250, -1000, 708, 6540, + 6540, 4253, 6540, -1000, -1000, -1000, 792, -1000, 818, 831, + -1000, 776, 768, 6041, -1000, -1000, 168, 187, -1000, -1000, + 365, -1000, -1000, -1000, -1000, 120, 591, -1000, 1749, -1000, + -1000, -1000, -1000, 398, 7018, 7018, 7018, 1322, 1749, 2173, + 469, 2117, 143, 144, 144, 151, 151, 151, 151, 151, + 324, 324, -1000, -1000, -1000, 445, -1000, -1000, -1000, 445, + 6041, 662, -1000, -1000, 6540, -1000, 445, 539, 539, 387, + 421, 695, 688, -1000, 118, 653, 640, 539, 6041, 264, + -1000, 6540, 445, -1000, 539, 445, 539, 539, 590, 591, + -1000, 11709, 9372, 9372, 9372, 9372, 9372, -1000, 742, 740, + -1000, 736, 728, 751, 11476, -1000, 549, 8434, 159, 591, + -1000, 9605, -1000, -1000, 858, 9372, 621, -1000, -1000, 661, + -132, -91, -1000, -1000, -1000, -1000, 250, -1000, 418, 660, + 2687, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 685, 473, + -1000, 801, 184, 180, 471, 800, -1000, -1000, -1000, 791, + -1000, 275, -61, -1000, -1000, 393, -29, -29, -1000, -1000, + 127, 784, 127, 127, 127, 438, 438, -1000, -1000, -1000, + -1000, 357, -1000, -1000, -1000, 354, -1000, 714, 11243, 3209, + -1000, -1000, -1000, -1000, 278, 278, 203, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 30, 678, + -1000, 10, 9, 66, -1000, 3209, -1000, 204, -1000, 436, + 6540, -1000, -1000, 758, 250, 250, 114, -1000, -1000, 11476, + -1000, -1000, -1000, -1000, 637, -1000, -1000, -1000, 3470, 6041, + -1000, 1322, 1749, 2032, -1000, 7018, 7018, -1000, -1000, 539, + 6041, 250, -1000, -1000, -1000, 109, 399, 109, 7018, 7018, + 7018, 7018, 4253, 7018, 7018, 7018, 7018, -165, 611, 234, + -1000, 6540, 413, -1000, -1000, -1000, -1000, -1000, 711, 11709, + 591, -1000, 8195, 11243, 622, -1000, 201, 883, 692, 709, + 645, -1000, -1000, -1000, -1000, 739, -1000, 738, -1000, -1000, + -1000, -1000, -1000, 78, 73, 71, 11243, -1000, 845, 6540, + 621, -1000, -1000, -1000, -130, -141, -1000, -1000, -1000, 2948, + -1000, 2948, 11243, 46, -1000, 471, 471, -1000, -1000, -1000, + 684, 707, 68, -1000, -1000, -1000, 565, 127, 127, -1000, + 220, -1000, -1000, -1000, 536, -1000, 528, 659, 526, 11476, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 11476, -1000, -1000, -1000, + -1000, -1000, 11243, -173, 467, 11243, 11243, 11476, -1000, 329, + -1000, 250, -1000, 3992, -1000, 858, 9372, -1000, -1000, 445, + -1000, 7018, 1749, 1749, -1000, -1000, 445, 681, 681, -1000, + 681, 683, -1000, 681, -10, 681, -11, 445, 445, 1838, + 2103, 1814, 2088, -1000, 1734, 1991, 1672, 1497, 591, -162, + -1000, 250, 6540, -1000, 803, 588, 610, -1000, -1000, 5793, + 445, 519, 110, 506, -1000, 845, 11709, 6540, -1000, -1000, + 6540, 682, -1000, 6540, -1000, -1000, -1000, 591, 591, 591, + 506, 823, 250, -1000, -1000, -1000, -1000, 2687, -1000, 494, + -1000, 681, -1000, -1000, -1000, 11243, -52, 874, -1000, -1000, + -1000, -1000, 679, -1000, -1000, -1000, -1000, -1000, -1000, -29, + 431, -29, 353, -1000, 340, 3209, -1000, -1000, -1000, -1000, + 806, -1000, 3992, -1000, -1000, 676, -1000, -1000, -1000, 850, + 657, -1000, 1749, -1000, -1000, 103, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 7018, 7018, -1000, 7018, 7018, + -1000, 7018, 7018, -1000, 7018, 7018, 7018, 445, 429, 250, + 799, -1000, 591, -1000, -1000, 646, 11243, 11243, -1000, 11243, + 823, -1000, 250, 250, 11243, 250, 11243, 11243, 11243, 7956, + -1000, 138, 11243, -1000, 488, -1000, 170, -1000, -145, 562, + 127, -1000, 127, 489, 483, -1000, 591, 656, -1000, 186, + 11243, 848, 830, -1000, -1000, 1892, 1892, 1892, 1892, 1892, + 1892, 1892, 1892, 17, -1000, -1000, 871, -1000, 591, -1000, + 704, 108, -1000, -1000, -1000, 482, 458, 458, 458, 159, + 138, -1000, 423, 179, 425, -1000, 34, 11243, 310, 797, + -1000, 793, 675, -1000, -1000, -1000, -1000, -1000, 26, 3992, + 2948, 451, -1000, 6540, 6540, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 445, 43, -180, 11709, 610, 445, 11243, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 328, -1000, -1000, + 11476, -1000, -1000, 422, -1000, -1000, 452, 448, -1000, 11243, + -1000, -1000, 678, 250, 605, -1000, 755, -171, -183, 592, + -1000, -1000, -1000, 671, -1000, -1000, -1000, 26, 766, -173, + -1000, 747, -1000, 11243, -1000, 23, -1000, -178, 444, 18, + -181, 703, 591, -185, 702, -1000, 868, 6779, -1000, -1000, + 870, 156, 156, 1892, 445, -1000, -1000, -1000, 50, 350, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1169, 25, 427, 1168, 1167, 1166, 1165, 1162, 1161, - 1160, 1159, 1158, 1156, 1152, 1151, 1149, 1148, 1147, 1145, - 1143, 1130, 1128, 1127, 1126, 1125, 139, 1124, 1123, 1122, - 64, 1119, 78, 1118, 1117, 44, 60, 41, 54, 332, - 1116, 47, 58, 101, 1115, 34, 1111, 1099, 75, 1098, - 51, 1095, 1094, 107, 1093, 1092, 7, 30, 1087, 1085, - 1083, 1080, 70, 858, 1079, 1077, 1076, 1073, 1072, 1071, - 55, 6, 12, 11, 18, 1070, 414, 10, 1052, 52, - 1044, 1043, 1040, 1034, 24, 1030, 57, 1028, 21, 56, - 1026, 23, 65, 33, 19, 5, 79, 62, 1024, 16, - 66, 46, 1023, 1020, 376, 1017, 1015, 42, 1014, 1012, - 29, 173, 377, 1010, 1008, 1007, 1002, 63, 0, 530, - 96, 73, 994, 987, 985, 1419, 69, 53, 14, 976, - 35, 71, 40, 975, 974, 38, 973, 972, 971, 969, - 968, 967, 966, 663, 965, 964, 963, 28, 13, 962, - 961, 61, 22, 959, 943, 941, 45, 59, 940, 938, - 50, 27, 937, 936, 931, 930, 928, 37, 17, 927, - 20, 925, 9, 924, 31, 923, 2, 922, 15, 921, - 3, 920, 4, 43, 1, 919, 8, 917, 916, 48, - 316, 915, 914, 89, + 0, 1124, 25, 465, 1123, 1122, 1120, 1117, 1114, 1113, + 1112, 1111, 1110, 1109, 1107, 1103, 1102, 1100, 1099, 1098, + 1097, 1096, 1095, 1093, 1092, 1091, 104, 1090, 1089, 1088, + 64, 1086, 73, 1085, 1083, 43, 348, 56, 29, 491, + 1082, 47, 58, 52, 1081, 35, 1074, 1071, 75, 1069, + 51, 1068, 1066, 106, 1065, 1060, 13, 42, 1057, 1056, + 1054, 1052, 66, 1012, 1048, 1045, 1044, 1043, 1041, 1040, + 55, 9, 12, 30, 27, 1038, 149, 10, 1037, 54, + 1034, 1033, 1032, 1030, 19, 1021, 60, 1013, 31, 59, + 1006, 7, 61, 28, 15, 6, 76, 65, 1005, 20, + 69, 50, 1004, 1001, 482, 999, 998, 41, 997, 993, + 21, 182, 445, 991, 989, 982, 981, 37, 0, 546, + 107, 71, 978, 977, 976, 1438, 70, 45, 18, 974, + 40, 159, 38, 973, 972, 34, 971, 970, 969, 968, + 966, 965, 963, 275, 962, 961, 958, 33, 24, 957, + 951, 62, 16, 950, 949, 947, 46, 63, 946, 943, + 57, 53, 942, 941, 937, 924, 918, 22, 17, 917, + 14, 915, 11, 912, 23, 909, 4, 903, 8, 902, + 3, 896, 5, 44, 1, 894, 2, 892, 891, 48, + 383, 888, 887, 80, } var yyR1 = [...]int{ @@ -2078,64 +2085,64 @@ var yyR1 = [...]int{ 4, 5, 5, 7, 7, 29, 29, 8, 9, 9, 9, 191, 191, 48, 48, 92, 92, 10, 10, 10, 10, 97, 97, 101, 101, 101, 102, 102, 102, 102, - 133, 133, 11, 11, 11, 11, 11, 11, 11, 11, - 182, 182, 181, 180, 180, 179, 179, 178, 17, 163, - 165, 165, 164, 164, 164, 164, 157, 136, 136, 136, - 136, 139, 139, 137, 137, 137, 137, 137, 137, 137, - 138, 138, 138, 138, 138, 140, 140, 140, 140, 140, + 133, 133, 11, 11, 11, 11, 11, 11, 11, 182, + 182, 181, 180, 180, 179, 179, 178, 17, 163, 165, + 165, 164, 164, 164, 164, 157, 136, 136, 136, 136, + 139, 139, 137, 137, 137, 137, 137, 137, 137, 138, + 138, 138, 138, 138, 140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, - 142, 142, 142, 156, 156, 143, 143, 151, 151, 152, - 152, 152, 149, 149, 150, 150, 153, 153, 153, 144, - 144, 144, 144, 144, 144, 144, 144, 146, 146, 146, - 154, 154, 147, 147, 147, 148, 148, 148, 155, 155, - 155, 155, 155, 145, 145, 158, 158, 173, 173, 172, - 172, 172, 162, 162, 169, 169, 169, 169, 169, 160, - 160, 161, 161, 171, 171, 170, 159, 159, 174, 174, - 174, 174, 185, 186, 184, 184, 184, 184, 184, 166, - 166, 166, 167, 167, 167, 168, 168, 168, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 177, 175, - 175, 176, 176, 13, 18, 18, 14, 14, 14, 14, - 14, 15, 15, 19, 20, 20, 20, 20, 20, 20, + 141, 141, 141, 141, 142, 142, 142, 142, 142, 142, + 142, 142, 156, 156, 143, 143, 151, 151, 152, 152, + 152, 149, 149, 150, 150, 153, 153, 153, 144, 144, + 144, 144, 144, 144, 144, 144, 146, 146, 146, 154, + 154, 147, 147, 147, 148, 148, 148, 155, 155, 155, + 155, 155, 145, 145, 158, 158, 173, 173, 172, 172, + 172, 162, 162, 169, 169, 169, 169, 169, 160, 160, + 161, 161, 171, 171, 170, 159, 159, 174, 174, 174, + 174, 185, 186, 184, 184, 184, 184, 184, 166, 166, + 166, 167, 167, 167, 168, 168, 168, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 183, 183, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 177, + 175, 175, 176, 176, 13, 18, 18, 14, 14, 14, + 14, 14, 15, 15, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 108, 108, 106, 106, 109, - 109, 107, 107, 107, 110, 110, 110, 134, 134, 134, - 21, 21, 23, 23, 24, 25, 22, 22, 22, 22, - 22, 22, 22, 16, 192, 26, 27, 27, 28, 28, - 28, 32, 32, 32, 30, 30, 31, 31, 37, 37, - 36, 36, 38, 38, 38, 38, 122, 122, 122, 121, - 121, 40, 40, 41, 41, 42, 42, 43, 43, 43, - 43, 55, 55, 91, 91, 93, 93, 44, 44, 44, - 44, 45, 45, 46, 46, 47, 47, 129, 129, 128, - 128, 128, 127, 127, 49, 49, 49, 51, 50, 50, - 50, 50, 52, 52, 54, 54, 53, 53, 56, 56, - 56, 56, 57, 57, 39, 39, 39, 39, 39, 39, - 39, 105, 105, 59, 59, 58, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 69, 69, 69, 69, 69, - 69, 60, 60, 60, 60, 60, 60, 60, 35, 35, - 70, 70, 70, 76, 71, 71, 63, 63, 63, 63, + 20, 20, 20, 20, 20, 20, 108, 108, 106, 106, + 109, 109, 107, 107, 107, 110, 110, 110, 134, 134, + 134, 21, 21, 23, 23, 24, 25, 22, 22, 22, + 22, 22, 22, 22, 16, 192, 26, 27, 27, 28, + 28, 28, 32, 32, 32, 30, 30, 31, 31, 37, + 37, 36, 36, 38, 38, 38, 38, 122, 122, 122, + 121, 121, 40, 40, 41, 41, 42, 42, 43, 43, + 43, 43, 55, 55, 91, 91, 93, 93, 44, 44, + 44, 44, 45, 45, 46, 46, 47, 47, 129, 129, + 128, 128, 128, 127, 127, 49, 49, 49, 51, 50, + 50, 50, 50, 52, 52, 54, 54, 53, 53, 56, + 56, 56, 56, 57, 57, 39, 39, 39, 39, 39, + 39, 39, 105, 105, 59, 59, 58, 58, 58, 58, + 58, 58, 58, 58, 58, 58, 69, 69, 69, 69, + 69, 69, 60, 60, 60, 60, 60, 60, 60, 35, + 35, 70, 70, 70, 76, 71, 71, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 67, 67, - 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 67, + 67, 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, - 193, 193, 68, 68, 68, 68, 33, 33, 33, 33, - 33, 132, 132, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 80, 80, 34, 34, - 78, 78, 79, 81, 81, 77, 77, 77, 62, 62, - 62, 62, 62, 62, 62, 62, 64, 64, 64, 82, - 82, 83, 83, 84, 84, 85, 85, 86, 87, 87, - 87, 88, 88, 88, 88, 89, 89, 89, 61, 61, - 61, 61, 61, 61, 90, 90, 90, 90, 94, 94, - 72, 72, 74, 74, 73, 75, 95, 95, 99, 96, - 96, 100, 100, 100, 100, 98, 98, 98, 124, 124, - 124, 103, 103, 111, 111, 112, 112, 104, 104, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 114, - 114, 114, 115, 115, 116, 116, 116, 123, 123, 119, - 119, 120, 120, 125, 125, 126, 126, 117, 117, 117, + 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, + 66, 193, 193, 68, 68, 68, 68, 33, 33, 33, + 33, 33, 132, 132, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 80, 80, 34, + 34, 78, 78, 79, 81, 81, 77, 77, 77, 62, + 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, + 82, 82, 83, 83, 84, 84, 85, 85, 86, 87, + 87, 87, 88, 88, 88, 88, 89, 89, 89, 61, + 61, 61, 61, 61, 61, 90, 90, 90, 90, 94, + 94, 72, 72, 74, 74, 73, 75, 95, 95, 99, + 96, 96, 100, 100, 100, 100, 98, 98, 98, 124, + 124, 124, 103, 103, 111, 111, 112, 112, 104, 104, + 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, + 114, 114, 114, 115, 115, 116, 116, 116, 123, 123, + 119, 119, 120, 120, 125, 125, 126, 126, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, @@ -2145,6 +2152,7 @@ var yyR1 = [...]int{ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, + 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, @@ -2155,8 +2163,7 @@ var yyR1 = [...]int{ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 189, 190, 130, 131, 131, 131, + 118, 118, 118, 118, 189, 190, 130, 131, 131, 131, } var yyR2 = [...]int{ @@ -2166,63 +2173,63 @@ var yyR2 = [...]int{ 3, 1, 3, 7, 8, 1, 1, 9, 8, 7, 6, 1, 1, 1, 3, 0, 4, 3, 4, 5, 4, 1, 3, 3, 2, 2, 2, 2, 2, 1, - 1, 1, 2, 2, 8, 4, 6, 5, 5, 5, - 0, 2, 1, 0, 2, 1, 3, 3, 4, 4, - 2, 4, 1, 3, 3, 3, 8, 3, 1, 1, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 1, 2, 2, 2, 1, - 4, 4, 2, 2, 3, 3, 3, 3, 1, 1, - 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 0, 3, 0, 5, 0, - 3, 5, 0, 1, 0, 1, 0, 1, 2, 0, - 2, 2, 2, 2, 2, 4, 2, 0, 3, 5, - 0, 1, 0, 3, 3, 0, 2, 2, 0, 2, - 1, 2, 1, 0, 2, 5, 4, 1, 2, 2, - 3, 2, 0, 1, 2, 3, 3, 2, 2, 1, - 1, 0, 1, 1, 3, 2, 3, 1, 10, 11, - 11, 12, 3, 3, 1, 1, 2, 2, 2, 0, - 1, 3, 1, 2, 3, 1, 1, 1, 6, 7, - 7, 12, 7, 7, 7, 4, 5, 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, 3, 3, 2, 3, 4, - 3, 7, 5, 4, 2, 2, 4, 4, 2, 2, - 2, 2, 2, 2, 3, 1, 1, 0, 1, 1, - 1, 0, 2, 2, 0, 2, 2, 0, 1, 1, - 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, - 2, 3, 3, 2, 0, 2, 0, 2, 1, 2, - 2, 0, 1, 1, 0, 1, 0, 1, 0, 1, - 1, 3, 1, 2, 3, 5, 0, 1, 2, 1, - 1, 0, 2, 1, 3, 1, 1, 1, 3, 1, - 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, 0, 5, - 5, 5, 0, 2, 1, 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, 3, 1, 1, 1, 1, 4, 5, - 6, 4, 4, 6, 6, 6, 6, 8, 8, 6, - 8, 8, 6, 8, 8, 6, 8, 8, 9, 7, - 5, 4, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 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, - 3, 5, 4, 6, 1, 3, 3, 5, 0, 5, - 1, 3, 1, 2, 3, 1, 1, 3, 3, 1, - 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, 2, 2, 8, 4, 6, 5, 5, 0, + 2, 1, 0, 2, 1, 3, 3, 4, 4, 2, + 4, 1, 3, 3, 3, 8, 3, 1, 1, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 2, 2, 2, 2, 1, 2, 2, 2, 1, 4, + 4, 2, 2, 3, 3, 3, 3, 1, 1, 1, + 1, 1, 6, 6, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 3, 0, 3, 0, 5, 0, 3, + 5, 0, 1, 0, 1, 0, 1, 2, 0, 2, + 2, 2, 2, 2, 4, 2, 0, 3, 5, 0, + 1, 0, 3, 3, 0, 2, 2, 0, 2, 1, + 2, 1, 0, 2, 5, 4, 1, 2, 2, 3, + 2, 0, 1, 2, 3, 3, 2, 2, 1, 1, + 0, 1, 1, 3, 2, 3, 1, 10, 11, 11, + 12, 3, 3, 1, 1, 2, 2, 2, 0, 1, + 3, 1, 2, 3, 1, 1, 1, 6, 7, 7, + 7, 7, 4, 5, 7, 5, 12, 7, 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, 3, 3, 2, 3, + 4, 3, 7, 5, 4, 2, 2, 4, 4, 2, + 2, 2, 2, 2, 2, 3, 1, 1, 0, 1, + 1, 1, 0, 2, 2, 0, 2, 2, 0, 1, + 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, + 2, 2, 3, 3, 2, 0, 2, 0, 2, 1, + 2, 2, 0, 1, 1, 0, 1, 0, 1, 0, + 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, + 1, 1, 0, 2, 1, 3, 1, 1, 1, 3, + 1, 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, 0, + 5, 5, 5, 0, 2, 1, 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, 3, 1, 1, 1, 1, 4, + 5, 6, 4, 4, 6, 6, 6, 6, 8, 8, + 6, 8, 8, 6, 8, 8, 6, 8, 8, 9, + 7, 5, 4, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 2, 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, 3, 5, 4, 6, 1, 3, 3, 5, 0, + 5, 1, 3, 1, 2, 3, 1, 1, 3, 3, + 1, 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, @@ -2244,7 +2251,7 @@ 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, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ @@ -2253,140 +2260,141 @@ var yyChk = [...]int{ -22, -16, -3, -4, 6, 7, -29, 9, 10, 30, -17, 115, 116, 118, 117, 149, 119, 142, 50, 162, 163, 165, 166, 25, 143, 144, 147, 148, 31, 32, - 121, -189, 8, 250, 54, -188, 265, -84, 15, -28, + 121, -189, 8, 251, 54, -188, 266, -84, 15, -28, 5, -26, -192, -26, -26, -26, -26, -26, -163, -165, - 54, 90, -116, 125, 72, 157, 242, 122, 123, 129, - -119, 57, -118, 258, 135, 162, 173, 167, 194, 186, - 136, 184, 187, 229, 214, 224, 66, 165, 238, 145, - 182, 178, 176, 27, 226, 199, 263, 177, 225, 121, - 138, 133, 200, 204, 230, 171, 172, 232, 198, 134, - 33, 260, 35, 153, 233, 202, 197, 193, 196, 170, - 192, 39, 206, 205, 207, 228, 189, 139, 179, 18, - 236, 148, 151, 227, 201, 203, 130, 155, 262, 234, - 175, 140, 152, 147, 237, 141, 166, 231, 240, 38, - 211, 169, 132, 163, 159, 216, 190, 154, 180, 181, - 195, 168, 191, 164, 156, 149, 239, 212, 264, 188, - 185, 160, 158, 217, 218, 219, 220, 221, 161, 261, - 235, 183, 213, -104, 125, 127, 123, 123, 124, 125, - 242, 122, 123, -53, -125, 57, -118, 125, 157, 123, - 108, 187, 229, 115, 215, 226, 124, 33, 227, 155, - -134, 123, -106, 158, 214, 217, 218, 219, 221, 220, - 161, 57, 231, 230, 222, -125, 164, -130, -130, -130, - -130, -130, 216, 216, -130, -2, -88, 17, 16, -5, - -3, -189, 6, 20, 21, -32, 40, 41, -27, -38, - 99, -39, -125, -58, 74, -63, 29, 57, -118, 23, - -62, -59, -77, -75, -76, 108, 109, 110, 97, 98, - 105, 75, 111, -67, -65, -66, -68, 59, 58, 67, - 60, 61, 62, 63, 68, 69, 70, -119, -73, -189, - 44, 45, 251, 252, 253, 254, 257, 255, 77, 34, - 241, 249, 248, 247, 245, 246, 243, 244, 128, 242, - 103, 250, -104, -104, 11, -48, -53, -96, -133, 164, - -100, 231, 230, -120, -98, -119, -117, 229, 187, 228, - 120, 73, 22, 24, 209, 76, 108, 16, 77, 107, - 251, 115, 48, 243, 244, 241, 253, 254, 242, 215, - 29, 10, 25, 143, 21, 101, 117, 80, 81, 146, - 23, 144, 70, 19, 51, 11, 13, 14, 128, 127, - 92, 124, 46, 8, 111, 26, 89, 42, 28, 44, - 90, 17, 245, 246, 31, 257, 150, 103, 49, 36, - 74, 68, 71, 52, 72, 15, 47, 91, 118, 250, - 45, 122, 6, 256, 30, 142, 43, 123, 79, 126, - 69, 5, 129, 32, 9, 50, 53, 247, 248, 249, - 34, 78, 12, -164, 90, -157, 57, -53, 124, -53, - 250, -119, -112, 128, -112, -112, 123, -53, -18, -53, - -111, 128, 57, -111, -111, -111, -53, 112, -53, 57, - 30, -131, -189, -120, 242, 57, 155, 123, 156, 125, - -131, -131, -131, -131, 159, 160, -131, -109, -108, 224, - 225, 216, 223, 52, 12, -131, -130, -130, -190, 56, - -89, 19, 31, -39, -125, -85, -86, -39, -84, -2, - -26, 36, -30, 21, 65, 11, -122, 73, 72, 89, - -121, 22, -119, 59, 112, -39, -60, 92, 74, 90, - 91, 76, 94, 93, 104, 97, 98, 99, 100, 101, - 102, 103, 95, 96, 107, 82, 83, 84, 85, 86, - 87, 88, -105, -189, -76, -189, 113, 114, -63, -63, - -63, -63, -63, -63, -63, -63, -189, -2, -71, -39, - -189, -189, -189, -189, -189, -189, -189, -189, -189, -80, - -39, -189, -193, -189, -193, -193, -193, -193, -193, -193, - -193, -189, -189, -189, -189, -54, 26, -53, -41, -42, - -43, -44, -55, -76, -189, -53, -53, -48, -191, 55, - 11, 53, 55, -96, 164, -97, -101, 232, 234, 82, - -124, -119, 59, 29, 30, 56, 55, -53, -136, -139, - -141, -140, -142, -137, -138, 184, 185, 108, 188, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 30, - 145, 180, 181, 182, 183, 200, 201, 202, 203, 204, - 205, 206, 207, 167, 168, 169, 170, 171, 172, 173, - 175, 176, 177, 178, 179, 57, -131, 125, -182, 53, - 57, 74, 57, -53, -53, -131, 55, 126, -48, 23, - 52, -53, 57, 57, -126, -125, -117, -131, -131, -131, - -131, -131, -131, -131, -131, -131, -131, 11, -107, 11, - 92, -53, -39, 9, 92, 55, 18, 112, 55, -87, - 24, 25, -88, -190, -32, -64, -119, 60, 63, -31, - 43, -53, -39, -39, -69, 68, 74, 69, 70, -121, - 99, -126, -120, -117, -63, -70, -73, -76, 64, 92, - 90, 91, 76, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -63, -63, -63, -63, -63, -63, -132, 57, - 59, 57, -62, -62, -119, -37, 21, -36, -38, -190, - 55, -190, -2, -36, -36, -39, -39, -77, 59, -119, - -125, -77, 59, -36, -30, -78, -79, 78, -77, -190, - -36, -37, -36, -36, -92, 151, -53, 30, 55, -49, - -51, -50, -52, 42, 46, 48, 43, 44, 45, 49, - -129, 22, -41, -189, -128, 151, -127, 22, -125, 59, - -92, 53, -41, -53, -100, -97, 55, 233, 235, 236, - 52, 71, -39, -148, 107, -166, -167, -168, -120, 59, - 60, -157, -158, -159, -169, 137, -174, 130, 132, 129, - -160, 138, 124, 28, 56, -153, 68, 74, -149, 212, - -143, 54, -143, -143, -143, -143, -147, 187, -147, -147, - -147, 54, 54, -143, -143, -143, -151, 54, -151, -151, - -152, 54, -152, -123, 53, -53, -180, 261, -181, 57, + 54, 90, -116, 125, 72, 243, 122, 123, 129, -119, + 57, -118, 259, 135, 162, 173, 167, 194, 186, 136, + 184, 187, 230, 214, 225, 66, 165, 239, 145, 182, + 178, 176, 27, 227, 199, 264, 177, 226, 121, 138, + 133, 200, 204, 231, 171, 172, 233, 198, 134, 33, + 261, 35, 153, 234, 202, 197, 193, 196, 170, 192, + 39, 206, 205, 207, 229, 189, 139, 179, 18, 237, + 148, 151, 228, 201, 203, 130, 155, 263, 235, 175, + 140, 152, 147, 238, 141, 166, 232, 241, 38, 211, + 169, 132, 163, 159, 216, 190, 154, 180, 181, 195, + 168, 191, 164, 156, 149, 240, 212, 265, 188, 185, + 160, 157, 158, 217, 218, 219, 220, 221, 222, 161, + 262, 236, 183, 213, -104, 125, 220, 127, 123, 123, + 124, 125, 243, 122, 123, -53, -125, 57, -118, 125, + 123, 108, 187, 230, 115, 215, 227, 124, 33, 228, + 155, -134, 123, -106, 158, 214, 217, 218, 219, 222, + 221, 161, 57, 232, 231, 223, -125, 164, -130, -130, + -130, -130, -130, 216, 216, -130, -2, -88, 17, 16, + -5, -3, -189, 6, 20, 21, -32, 40, 41, -27, + -38, 99, -39, -125, -58, 74, -63, 29, 57, -118, + 23, -62, -59, -77, -75, -76, 108, 109, 110, 97, + 98, 105, 75, 111, -67, -65, -66, -68, 59, 58, + 67, 60, 61, 62, 63, 68, 69, 70, -119, -73, + -189, 44, 45, 252, 253, 254, 255, 258, 256, 77, + 34, 242, 250, 249, 248, 246, 247, 244, 245, 128, + 243, 103, 251, -104, -104, 11, -48, -53, -96, -133, + 164, -100, 232, 231, -120, -98, -119, -117, 230, 187, + 229, 120, 73, 22, 24, 209, 76, 108, 16, 77, + 107, 252, 115, 48, 244, 245, 242, 254, 255, 243, + 215, 29, 10, 25, 143, 21, 101, 117, 80, 81, + 146, 23, 144, 70, 19, 51, 11, 13, 14, 128, + 127, 92, 124, 46, 8, 111, 26, 89, 42, 28, + 44, 90, 17, 246, 247, 31, 258, 150, 103, 49, + 36, 74, 68, 71, 52, 72, 15, 47, 91, 118, + 251, 45, 122, 6, 257, 30, 142, 43, 123, 79, + 126, 69, 5, 129, 32, 9, 50, 53, 248, 249, + 250, 34, 78, 12, -164, 90, -157, 57, -53, 124, + -53, 251, -112, 128, -112, -112, 123, -53, 115, 117, + 52, -18, -53, -111, 128, 57, -111, -111, -111, -53, + 112, -53, 57, 30, -131, -189, -120, 243, 57, 155, + 123, 156, 125, -131, -131, -131, -131, 159, 160, -131, + -109, -108, 225, 226, 216, 224, 52, 12, -131, -130, + -130, -190, 56, -89, 19, 31, -39, -125, -85, -86, + -39, -84, -2, -26, 36, -30, 21, 65, 11, -122, + 73, 72, 89, -121, 22, -119, 59, 112, -39, -60, + 92, 74, 90, 91, 76, 94, 93, 104, 97, 98, + 99, 100, 101, 102, 103, 95, 96, 107, 82, 83, + 84, 85, 86, 87, 88, -105, -189, -76, -189, 113, + 114, -63, -63, -63, -63, -63, -63, -63, -63, -189, + -2, -71, -39, -189, -189, -189, -189, -189, -189, -189, + -189, -189, -80, -39, -189, -193, -189, -193, -193, -193, + -193, -193, -193, -193, -189, -189, -189, -189, -54, 26, + -53, -41, -42, -43, -44, -55, -76, -189, -53, -53, + -48, -191, 55, 11, 53, 55, -96, 164, -97, -101, + 233, 235, 82, -124, -119, 59, 29, 30, 56, 55, + -53, -136, -139, -141, -140, -142, -137, -138, 184, 185, + 108, 188, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 30, 145, 180, 181, 182, 183, 200, 201, + 202, 203, 204, 205, 206, 207, 167, 168, 169, 170, + 171, 172, 173, 175, 176, 177, 178, 179, 57, -131, + 125, 57, 74, 57, -53, -53, -131, 157, 157, -53, + 55, 126, -48, 23, 52, -53, 57, 57, -126, -125, + -117, -131, -131, -131, -131, -131, -131, -131, -131, -131, + -131, 11, -107, 11, 92, -53, -39, 9, 92, 55, + 18, 112, 55, -87, 24, 25, -88, -190, -32, -64, + -119, 60, 63, -31, 43, -53, -39, -39, -69, 68, + 74, 69, 70, -121, 99, -126, -120, -117, -63, -70, + -73, -76, 64, 92, 90, 91, 76, -63, -63, -63, + -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -63, -63, -132, 57, 59, 57, -62, -62, -119, -37, + 21, -36, -38, -190, 55, -190, -2, -36, -36, -39, + -39, -77, 59, -119, -125, -77, 59, -36, -30, -78, + -79, 78, -77, -190, -36, -37, -36, -36, -92, 151, + -53, 30, 55, -49, -51, -50, -52, 42, 46, 48, + 43, 44, 45, 49, -129, 22, -41, -189, -128, 151, + -127, 22, -125, 59, -92, 53, -41, -53, -100, -97, + 55, 234, 236, 237, 52, 71, -39, -148, 107, -166, + -167, -168, -120, 59, 60, -157, -158, -159, -169, 137, + -174, 130, 132, 129, -160, 138, 124, 28, 56, -153, + 68, 74, -149, 212, -143, 54, -143, -143, -143, -143, + -147, 187, -147, -147, -147, 54, 54, -143, -143, -143, + -151, 54, -151, -151, -152, 54, -152, -123, 53, -53, -131, 23, -131, -113, 120, 117, 118, -177, 116, 209, - 187, 66, 29, 15, 251, 151, 264, 57, 152, -53, - -53, -53, -131, -53, -110, 90, 12, -125, -125, 38, - -39, -39, -126, -86, -89, -103, 19, 11, 34, 34, - -36, 68, 69, 70, 112, -189, -70, -63, -63, -63, - -35, 146, 73, -190, -190, -36, 55, -39, -190, -190, - -190, 55, 53, 22, 55, 11, 55, 11, 112, 55, - 11, 55, 11, -190, -36, -81, -79, 80, -39, -190, - -190, -190, -190, -190, -61, 30, 34, -2, -189, -189, - -95, -99, -77, -42, -43, -43, -42, -43, 42, 42, - 42, 47, 42, 47, 42, -50, -125, -190, -56, 50, - 127, 51, -189, -127, -57, 12, -41, -57, -101, -102, - 237, 234, 240, 57, 59, 55, -168, 82, 54, 57, - 28, -160, -160, -161, 57, -161, 28, -144, 29, 68, - -150, 213, 60, -147, -147, -148, 30, -148, -148, -148, - -156, 59, -156, 60, 60, 52, -119, -131, -179, -178, - -120, -130, -183, 157, 131, 137, 138, 133, 57, 124, - 28, 130, 132, 151, 129, -183, 157, -114, -115, 126, - 22, 124, 28, 151, 126, -131, -107, 59, -39, 39, - 112, -53, -40, 11, 99, -120, -37, -35, 73, -63, - -63, -190, -38, -135, 108, 184, 145, 182, 178, 198, - 189, 211, 180, 212, -132, -135, -63, -63, -63, -63, - -120, -63, -63, -63, -63, 258, -84, 81, -39, 79, - -94, 52, -95, -72, -74, -73, -189, -2, -90, -119, - -93, -119, -57, 55, 82, -46, -45, 52, 53, -47, - 52, -45, 42, 42, 124, 124, 124, -93, -84, -39, - -57, 234, 238, 239, -167, -168, -171, -170, -119, -174, - -161, -161, 54, -146, 52, 59, 60, 61, 68, 241, - 67, 56, -148, -148, 57, 108, 56, 55, 56, 55, - 56, 55, -53, 55, 82, -130, -119, -130, -119, -53, - -130, -119, -53, -110, -57, -41, -190, -63, -190, -143, - -143, -143, -152, -143, 172, -143, 172, -190, -190, -190, - 55, 19, -190, 55, 19, -190, 55, 19, -190, 55, - 19, -189, -34, 256, -39, 27, -94, 55, -190, -190, - -190, 55, 112, -190, 55, -84, -99, -39, -39, 54, - -39, -189, -189, -189, -190, -88, 56, 55, -143, -91, - -119, -154, 209, 9, 54, -147, 59, -147, 60, 60, - -131, -178, -168, 54, 26, -82, 13, -147, 57, -63, - -63, -63, -63, -63, -63, -63, -63, -63, -190, 59, - 28, -74, 34, -2, -189, -119, -119, -119, -88, -91, - -91, -91, -91, -128, -173, -172, 53, 134, 66, -170, - 56, 55, -155, 130, 28, 129, 241, 56, -148, -148, - 56, 56, -91, -189, -83, 14, 16, -190, -190, -190, - -190, -190, -190, -190, -190, -33, 92, 261, 9, -72, - -2, 112, 56, -190, -190, -190, -56, -172, 57, -162, - 82, 59, 140, -119, -145, 66, 28, 28, 54, 56, - -175, -176, 151, -39, -71, -190, 259, 49, 262, -95, - -190, -119, 60, -53, 59, 56, -182, -190, 55, -119, - 39, 260, 263, 54, -180, -176, 34, 39, -91, 153, - 261, 56, 154, 262, -185, -186, 52, -189, 263, -186, + 187, 66, 29, 15, 252, 151, 265, 57, 152, -119, + -119, 120, 117, -53, -53, -53, -131, -53, -110, 90, + 12, -125, -125, 38, -39, -39, -126, -86, -89, -103, + 19, 11, 34, 34, -36, 68, 69, 70, 112, -189, + -70, -63, -63, -63, -35, 146, 73, -190, -190, -36, + 55, -39, -190, -190, -190, 55, 53, 22, 55, 11, + 55, 11, 112, 55, 11, 55, 11, -190, -36, -81, + -79, 80, -39, -190, -190, -190, -190, -190, -61, 30, + 34, -2, -189, -189, -95, -99, -77, -42, -43, -43, + -42, -43, 42, 42, 42, 47, 42, 47, 42, -50, + -125, -190, -56, 50, 127, 51, -189, -127, -57, 12, + -41, -57, -101, -102, 238, 235, 241, 57, 59, 55, + -168, 82, 54, 57, 28, -160, -160, -161, 57, -161, + 28, -144, 29, 68, -150, 213, 60, -147, -147, -148, + 30, -148, -148, -148, -156, 59, -156, 60, 60, 52, + -119, -131, -130, -183, 131, 137, 138, 133, 57, 124, + 28, 130, 132, 151, 129, -183, -114, -115, 126, 22, + 124, 28, 151, -182, 53, 157, 157, 126, -131, -107, + 59, -39, 39, 112, -53, -40, 11, 99, -120, -37, + -35, 73, -63, -63, -190, -38, -135, 108, 184, 145, + 182, 178, 198, 189, 211, 180, 212, -132, -135, -63, + -63, -63, -63, -120, -63, -63, -63, -63, 259, -84, + 81, -39, 79, -94, 52, -95, -72, -74, -73, -189, + -2, -90, -119, -93, -119, -57, 55, 82, -46, -45, + 52, 53, -47, 52, -45, 42, 42, 124, 124, 124, + -93, -84, -39, -57, 235, 239, 240, -167, -168, -171, + -170, -119, -174, -161, -161, 54, -146, 52, 59, 60, + 61, 68, 242, 67, 56, -148, -148, 57, 108, 56, + 55, 56, 55, 56, 55, -53, -130, -130, -53, -130, + -119, -180, 262, -181, 57, -119, -119, -53, -110, -57, + -41, -190, -63, -190, -143, -143, -143, -152, -143, 172, + -143, 172, -190, -190, -190, 55, 19, -190, 55, 19, + -190, 55, 19, -190, 55, 19, -189, -34, 257, -39, + 27, -94, 55, -190, -190, -190, 55, 112, -190, 55, + -84, -99, -39, -39, 54, -39, -189, -189, -189, -190, + -88, 56, 55, -143, -91, -119, -154, 209, 9, 54, + -147, 59, -147, 60, 60, -131, 26, -179, -178, -120, + 54, -82, 13, -147, 57, -63, -63, -63, -63, -63, + -63, -63, -63, -63, -190, 59, 28, -74, 34, -2, + -189, -119, -119, -119, -88, -91, -91, -91, -91, -128, + -173, -172, 53, 134, 66, -170, 56, 55, -155, 130, + 28, 129, 242, 56, -148, -148, 56, 56, -189, 55, + 82, -91, -83, 14, 16, -190, -190, -190, -190, -190, + -190, -190, -190, -33, 92, 262, 9, -72, -2, 112, + 56, -190, -190, -190, -56, -172, 57, -162, 82, 59, + 140, -119, -145, 66, 28, 28, 54, -175, -176, 151, + -178, -168, 56, -39, -71, -190, 260, 49, 263, -95, + -190, -119, 60, -53, 59, 56, -190, 55, -119, -182, + 39, 261, 264, 54, -176, 34, -180, 39, -91, 153, + 262, 56, 154, 263, -185, -186, 52, -189, 264, -186, 52, 10, 9, -63, 150, -184, 141, 136, 139, 30, -184, -190, -190, 135, 29, 68, } @@ -2394,39 +2402,39 @@ var yyDef = [...]int{ 23, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 553, 0, 314, 314, 314, 314, 314, 314, - 0, 624, 607, 0, 0, 0, 0, -2, 301, 302, - 0, 304, 305, 844, 844, 844, 844, 844, 0, 0, - 844, 0, 35, 36, 842, 1, 3, 561, 0, 0, - 318, 321, 316, 0, 607, 607, 0, 0, 62, 63, - 0, 0, 0, 829, 0, 830, 605, 605, 605, 625, - 626, 629, 630, 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, 826, - 827, 828, 831, 832, 833, 834, 835, 836, 837, 838, - 839, 840, 841, 0, 0, 608, 0, 603, 0, 603, - 603, 603, 0, 252, 386, 633, 634, 829, 830, 0, - 0, 0, 845, 0, 845, 264, 845, 845, 267, 845, - 0, 845, 0, 274, 275, 278, 279, 280, 281, 282, - 283, 845, 298, 299, 288, 300, 303, 306, 307, 308, - 309, 310, 844, 844, 313, 29, 565, 0, 0, 553, - 31, 0, 314, 319, 320, 324, 322, 323, 315, 0, - 332, 336, 0, 394, 0, 399, 401, -2, -2, 0, - 436, 437, 438, 439, 440, 0, 0, 0, 0, 0, - 0, 0, 0, 464, 465, 466, 467, 538, 539, 540, - 541, 542, 543, 544, 545, 403, 404, 535, 585, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 526, 0, - 500, 500, 500, 500, 500, 500, 500, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 47, 0, 820, - 589, -2, -2, 0, 0, 631, 632, -2, 739, -2, - 637, 638, 639, 640, 641, 642, 643, 644, 645, 646, + 21, 22, 554, 0, 315, 315, 315, 315, 315, 315, + 0, 625, 608, 0, 0, 0, 0, -2, 302, 303, + 0, 305, 306, 846, 846, 846, 846, 846, 0, 0, + 846, 0, 35, 36, 844, 1, 3, 562, 0, 0, + 319, 322, 317, 0, 608, 608, 0, 0, 62, 63, + 0, 0, 0, 830, 0, 606, 606, 606, 626, 627, + 630, 631, 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, 826, 827, 828, + 829, 831, 832, 833, 834, 835, 836, 837, 838, 839, + 840, 841, 842, 843, 0, 0, 0, 609, 0, 604, + 0, 604, 604, 604, 0, 253, 387, 634, 635, 830, + 0, 0, 0, 847, 0, 847, 265, 847, 847, 268, + 847, 0, 847, 0, 275, 276, 279, 280, 281, 282, + 283, 284, 847, 299, 300, 289, 301, 304, 307, 308, + 309, 310, 311, 846, 846, 314, 29, 566, 0, 0, + 554, 31, 0, 315, 320, 321, 325, 323, 324, 316, + 0, 333, 337, 0, 395, 0, 400, 402, -2, -2, + 0, 437, 438, 439, 440, 441, 0, 0, 0, 0, + 0, 0, 0, 0, 465, 466, 467, 468, 539, 540, + 541, 542, 543, 544, 545, 546, 404, 405, 536, 586, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, + 0, 501, 501, 501, 501, 501, 501, 501, 501, 0, + 0, 0, 0, 0, 0, 0, 0, 43, 47, 0, + 821, 590, -2, -2, 0, 0, 632, 633, -2, 740, + -2, 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, @@ -2435,104 +2443,105 @@ var yyDef = [...]int{ 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, - 727, 728, 729, 0, 0, 82, 0, 80, 0, 845, - 0, 70, 0, 0, 0, 0, 0, 845, 243, 0, - 0, 0, 0, 0, 0, 0, 251, 0, 253, 845, - 845, 256, 846, 847, 845, 845, 845, 845, 845, 845, - 263, 265, 266, 268, 845, 845, 270, 0, 291, 289, - 290, 285, 286, 0, 0, 284, 311, 312, 30, 843, - 24, 0, 0, 562, 0, 554, 555, 558, 561, 29, - 321, 0, 326, 325, 317, 0, 333, 0, 0, 0, - 337, 0, 339, 340, 0, 397, 0, 0, 0, 0, + 727, 728, 729, 730, 0, 0, 81, 0, 79, 0, + 847, 0, 0, 0, 0, 0, 0, 847, 0, 0, + 0, 244, 0, 0, 0, 0, 0, 0, 0, 252, + 0, 254, 847, 847, 257, 848, 849, 847, 847, 847, + 847, 847, 847, 264, 266, 267, 269, 847, 847, 271, + 0, 292, 290, 291, 286, 287, 0, 0, 285, 312, + 313, 30, 845, 24, 0, 0, 563, 0, 555, 556, + 559, 562, 29, 322, 0, 327, 326, 318, 0, 334, + 0, 0, 0, 338, 0, 340, 341, 0, 398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 421, 422, 423, 424, 425, - 426, 427, 400, 0, 414, 0, 0, 0, 456, 457, - 458, 459, 460, 461, 462, 0, 328, 29, 0, 434, - 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, - 527, 0, 492, 0, 493, 494, 495, 496, 497, 498, - 499, 0, 328, 0, 0, 45, 0, 385, 0, 343, - 345, 346, 347, -2, 0, 369, -2, 0, 0, 0, - 41, 42, 0, 48, 820, 50, 51, 0, 0, 0, - 165, 598, 599, 600, 596, 209, 0, 0, 146, 142, - 88, 89, 90, 135, 92, 135, 135, 135, 135, 162, - 162, 162, 162, 118, 119, 120, 121, 122, 0, 0, - 105, 135, 135, 135, 109, 125, 126, 127, 128, 129, - 130, 131, 132, 93, 94, 95, 96, 97, 98, 99, - 137, 137, 137, 139, 139, 627, 65, 0, 73, 0, - 845, 0, 845, 78, 0, 225, 0, 0, 246, 604, - 0, 845, 249, 250, 387, 635, 636, 254, 255, 257, - 258, 259, 260, 261, 262, 269, 273, 0, 294, 0, - 0, 277, 276, 566, 0, 0, 0, 0, 0, 557, - 559, 560, 565, 32, 324, 0, 546, 0, 0, 0, - 327, 27, 395, 396, 398, 415, 0, 417, 419, 338, - 334, 0, 536, -2, 405, 406, 430, 431, 432, 0, - 0, 0, 0, 428, 410, 0, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 455, 511, - 512, 0, 453, 454, 463, 0, 0, 329, 330, 433, - 0, 584, 29, 0, 0, 0, 0, 0, 0, 535, - 0, 0, 0, 0, 0, 533, 530, 0, 0, 501, - 0, 0, 0, 0, 0, 0, 384, 0, 0, 0, - 0, 0, 0, 374, 0, 0, 377, 0, 0, 0, - 0, 368, 0, 0, 388, 789, 370, 0, 372, 373, - 392, 0, 392, 44, 590, 49, 0, 0, 54, 55, - 591, 592, 593, 594, 0, 79, 210, 212, 215, 216, - 217, 83, 84, 85, 0, 0, 197, 0, 0, 191, - 191, 0, 189, 190, 81, 149, 147, 0, 144, 143, - 91, 0, 162, 162, 112, 113, 165, 0, 165, 165, - 165, 0, 0, 106, 107, 108, 100, 0, 101, 102, - 103, 0, 104, 0, 0, 845, 67, 0, 71, 72, - 68, 606, 69, 844, 0, 0, 619, 226, 609, 610, - 611, 612, 613, 614, 615, 616, 617, 618, 0, 0, - 244, 845, 248, 291, 272, 0, 0, 292, 293, 0, - 563, 564, 0, 556, 25, 0, 601, 602, 547, 548, - 341, 416, 418, 420, 0, 328, 407, 428, 411, 0, - 408, 0, 0, 402, 468, 0, 0, 435, -2, 471, - 472, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 553, 0, 531, 0, 0, 491, - 502, 503, 504, 505, 578, 0, 0, -2, 0, 0, - 392, 586, 0, 344, 363, 365, 0, 360, 375, 376, - 378, 0, 380, 0, 382, 383, 348, 350, 351, 0, - 0, 0, 0, 371, 553, 0, 392, 40, 52, 53, - 0, 0, 59, 166, 167, 0, 213, 0, 0, 0, - 184, 191, 191, 187, 192, 188, 0, 157, 0, 148, - 87, 145, 0, 165, 165, 114, 0, 115, 116, 117, - 0, 133, 0, 0, 0, 0, 628, 66, 74, 75, - 0, 218, 844, 0, 227, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 844, 0, 0, 844, 620, - 621, 622, 623, 0, 0, 247, 294, 295, 296, 567, - 0, 26, 392, 0, 335, 537, 0, 409, 0, 429, - 412, 469, 331, 0, 135, 135, 516, 135, 139, 519, - 135, 521, 135, 524, 0, 0, 0, 0, 0, 0, - 536, 0, 0, 0, 0, 0, 528, 490, 534, 0, - 33, 0, 578, 568, 580, 582, 0, 29, 0, 574, - 0, 355, 553, 0, 0, 357, 364, 0, 0, 358, - 0, 359, 379, 381, 0, 0, 0, 0, 561, 393, - 39, 56, 57, 58, 211, 214, 0, 193, 135, 196, - 185, 186, 0, 160, 0, 150, 151, 152, 153, 154, - 156, 136, 110, 111, 163, 164, 162, 0, 162, 0, - 140, 0, 845, 0, 0, 219, 0, 220, 222, 223, - 224, 0, 245, 271, 549, 342, 470, 413, 473, 513, - 162, 517, 518, 520, 522, 523, 525, 475, 474, 476, - 0, 0, 482, 0, 0, 479, 0, 0, 485, 0, - 0, 0, 0, 0, 532, 0, 34, 0, 583, -2, - 0, 0, 0, 46, 0, 561, 587, 588, 361, 0, - 366, 0, 0, 0, 369, 38, 176, 0, 195, 0, - 353, 168, 161, 0, 0, 165, 134, 165, 0, 0, - 64, 76, 77, 0, 0, 551, 0, 514, 515, 0, - 0, 0, 0, 0, 0, 0, 0, 506, 489, 529, - 0, 581, 0, -2, 0, 576, 575, 356, 37, 0, - 0, 0, 0, 388, 175, 177, 0, 182, 0, 194, - 0, 0, 173, 0, 170, 172, 158, 155, 123, 124, - 138, 141, 0, 0, 28, 0, 0, 477, 478, 483, - 484, 480, 481, 486, 487, 0, 0, 0, 0, 571, - 29, 0, 362, 389, 390, 391, 352, 178, 179, 0, - 183, 181, 0, 354, 86, 0, 169, 171, 0, 70, - 0, 239, 0, 552, 550, 488, 0, 0, 0, 579, - -2, 577, 180, 0, 174, 159, 73, 238, 0, 0, - 507, 0, 510, 0, 221, 240, 0, 508, 0, 0, - 0, 198, 0, 0, 199, 200, 0, 0, 509, 201, - 0, 0, 0, 0, 0, 202, 204, 205, 0, 0, - 203, 241, 242, 206, 207, 208, + 0, 0, 0, 0, 0, 0, 0, 0, 422, 423, + 424, 425, 426, 427, 428, 401, 0, 415, 0, 0, + 0, 457, 458, 459, 460, 461, 462, 463, 0, 329, + 29, 0, 435, 0, 0, 0, 0, 0, 0, 0, + 0, 325, 0, 528, 0, 493, 0, 494, 495, 496, + 497, 498, 499, 500, 0, 329, 0, 0, 45, 0, + 386, 0, 344, 346, 347, 348, -2, 0, 370, -2, + 0, 0, 0, 41, 42, 0, 48, 821, 50, 51, + 0, 0, 0, 164, 599, 600, 601, 597, 208, 0, + 0, 145, 141, 87, 88, 89, 134, 91, 134, 134, + 134, 134, 161, 161, 161, 161, 117, 118, 119, 120, + 121, 0, 0, 104, 134, 134, 134, 108, 124, 125, + 126, 127, 128, 129, 130, 131, 92, 93, 94, 95, + 96, 97, 98, 136, 136, 136, 138, 138, 628, 65, + 0, 847, 0, 847, 77, 0, 222, 0, 0, 0, + 0, 0, 247, 605, 0, 847, 250, 251, 388, 636, + 637, 255, 256, 258, 259, 260, 261, 262, 263, 270, + 274, 0, 295, 0, 0, 278, 277, 567, 0, 0, + 0, 0, 0, 558, 560, 561, 566, 32, 325, 0, + 547, 0, 0, 0, 328, 27, 396, 397, 399, 416, + 0, 418, 420, 339, 335, 0, 537, -2, 406, 407, + 431, 432, 433, 0, 0, 0, 0, 429, 411, 0, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 456, 512, 513, 0, 454, 455, 464, 0, + 0, 330, 331, 434, 0, 585, 29, 0, 0, 0, + 0, 0, 0, 536, 0, 0, 0, 0, 0, 534, + 531, 0, 0, 502, 0, 0, 0, 0, 0, 0, + 385, 0, 0, 0, 0, 0, 0, 375, 0, 0, + 378, 0, 0, 0, 0, 369, 0, 0, 389, 790, + 371, 0, 373, 374, 393, 0, 393, 44, 591, 49, + 0, 0, 54, 55, 592, 593, 594, 595, 0, 78, + 209, 211, 214, 215, 216, 82, 83, 84, 0, 0, + 196, 0, 0, 190, 190, 0, 188, 189, 80, 148, + 146, 0, 143, 142, 90, 0, 161, 161, 111, 112, + 164, 0, 164, 164, 164, 0, 0, 105, 106, 107, + 99, 0, 100, 101, 102, 0, 103, 0, 0, 847, + 67, 607, 68, 846, 0, 0, 620, 223, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 0, 69, + 225, 0, 0, 0, 245, 847, 249, 292, 273, 0, + 0, 293, 294, 0, 564, 565, 0, 557, 25, 0, + 602, 603, 548, 549, 342, 417, 419, 421, 0, 329, + 408, 429, 412, 0, 409, 0, 0, 403, 469, 0, + 0, 436, -2, 472, 473, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, + 532, 0, 0, 492, 503, 504, 505, 506, 579, 0, + 0, -2, 0, 0, 393, 587, 0, 345, 364, 366, + 0, 361, 376, 377, 379, 0, 381, 0, 383, 384, + 349, 351, 352, 0, 0, 0, 0, 372, 554, 0, + 393, 40, 52, 53, 0, 0, 59, 165, 166, 0, + 212, 0, 0, 0, 183, 190, 190, 186, 191, 187, + 0, 156, 0, 147, 86, 144, 0, 164, 164, 113, + 0, 114, 115, 116, 0, 132, 0, 0, 0, 0, + 629, 66, 217, 846, 228, 229, 230, 231, 232, 233, + 234, 235, 236, 237, 238, 846, 0, 846, 621, 622, + 623, 624, 0, 72, 0, 0, 0, 0, 248, 295, + 296, 297, 568, 0, 26, 393, 0, 336, 538, 0, + 410, 0, 430, 413, 470, 332, 0, 134, 134, 517, + 134, 138, 520, 134, 522, 134, 525, 0, 0, 0, + 0, 0, 0, 537, 0, 0, 0, 0, 0, 529, + 491, 535, 0, 33, 0, 579, 569, 581, 583, 0, + 29, 0, 575, 0, 356, 554, 0, 0, 358, 365, + 0, 0, 359, 0, 360, 380, 382, 0, 0, 0, + 0, 562, 394, 39, 56, 57, 58, 210, 213, 0, + 192, 134, 195, 184, 185, 0, 159, 0, 149, 150, + 151, 152, 153, 155, 135, 109, 110, 162, 163, 161, + 0, 161, 0, 139, 0, 847, 218, 219, 220, 221, + 0, 224, 0, 70, 71, 0, 227, 246, 272, 550, + 343, 471, 414, 474, 514, 161, 518, 519, 521, 523, + 524, 526, 476, 475, 477, 0, 0, 483, 0, 0, + 480, 0, 0, 486, 0, 0, 0, 0, 0, 533, + 0, 34, 0, 584, -2, 0, 0, 0, 46, 0, + 562, 588, 589, 362, 0, 367, 0, 0, 0, 370, + 38, 175, 0, 194, 0, 354, 167, 160, 0, 0, + 164, 133, 164, 0, 0, 64, 0, 73, 74, 0, + 0, 552, 0, 515, 516, 0, 0, 0, 0, 0, + 0, 0, 0, 507, 490, 530, 0, 582, 0, -2, + 0, 577, 576, 357, 37, 0, 0, 0, 0, 389, + 174, 176, 0, 181, 0, 193, 0, 0, 172, 0, + 169, 171, 157, 154, 122, 123, 137, 140, 0, 0, + 0, 0, 28, 0, 0, 478, 479, 484, 485, 481, + 482, 487, 488, 0, 0, 0, 0, 572, 29, 0, + 363, 390, 391, 392, 353, 177, 178, 0, 182, 180, + 0, 355, 85, 0, 168, 170, 0, 0, 240, 0, + 75, 76, 69, 553, 551, 489, 0, 0, 0, 580, + -2, 578, 179, 0, 173, 158, 239, 0, 0, 72, + 508, 0, 511, 0, 241, 0, 226, 509, 0, 0, + 0, 197, 0, 0, 198, 199, 0, 0, 510, 200, + 0, 0, 0, 0, 0, 201, 203, 204, 0, 0, + 202, 242, 243, 205, 206, 207, } var yyTok1 = [...]int{ @@ -2541,7 +2550,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 75, 3, 3, 3, 102, 94, 3, 54, 56, 99, 97, 55, 98, 112, 100, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 265, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 266, 83, 82, 84, 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, @@ -2576,7 +2585,7 @@ var yyTok2 = [...]int{ 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, - 259, 260, 261, 262, 263, 264, + 259, 260, 261, 262, 263, 264, 265, } var yyTok3 = [...]int{ 0, @@ -3229,128 +3238,118 @@ yydefault: yyDollar = yyS[yypt-5 : yypt+1] //line sql.y:574 { - yyVAL.statement = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ - Name: yyDollar[3].colIdent, - Type: yyDollar[4].colIdent, - Params: yyDollar[5].vindexParams, - }} + yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } case 68: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:582 +//line sql.y:578 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } case 69: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:586 - { - yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} - } - case 70: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:591 +//line sql.y:583 { yyVAL.colIdent = NewColIdent("") } - case 71: + case 70: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:595 +//line sql.y:587 { yyVAL.colIdent = yyDollar[2].colIdent } - case 72: + case 71: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:601 +//line sql.y:593 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 73: + case 72: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:606 +//line sql.y:598 { var v []VindexParam yyVAL.vindexParams = v } - case 74: + case 73: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:611 +//line sql.y:603 { yyVAL.vindexParams = yyDollar[2].vindexParams } - case 75: + case 74: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:617 +//line sql.y:609 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } - case 76: + case 75: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:622 +//line sql.y:614 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } - case 77: + case 76: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:628 +//line sql.y:620 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } - case 78: + case 77: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:634 +//line sql.y:626 { yyVAL.ddl = &DDL{Action: CreateStr, Table: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 79: + case 78: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:641 +//line sql.y:633 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } - case 80: + case 79: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:648 +//line sql.y:640 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[2].tableName} } - case 81: + case 80: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:652 +//line sql.y:644 { yyVAL.optLike = &OptLike{LikeTable: yyDollar[3].tableName} } - case 82: + case 81: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:658 +//line sql.y:650 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 83: + case 82: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:663 +//line sql.y:655 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 84: + case 83: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:667 +//line sql.y:659 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 85: + case 84: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:671 +//line sql.y:663 { yyVAL.TableSpec.AddConstraint(yyDollar[3].constraintDefinition) } - case 86: + case 85: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:677 +//line sql.y:669 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -3360,72 +3359,80 @@ yydefault: yyDollar[2].columnType.Comment = yyDollar[8].optVal yyVAL.columnDefinition = &ColumnDefinition{Name: NewColIdent(string(yyDollar[1].bytes)), Type: yyDollar[2].columnType} } - case 87: + case 86: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:688 +//line sql.y:680 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 91: + case 90: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:699 +//line sql.y:691 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].optVal } - case 92: + case 91: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:704 +//line sql.y:696 { yyVAL.columnType = yyDollar[1].columnType } + case 92: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:702 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } case 93: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:710 +//line sql.y:706 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 94: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:714 +//line sql.y:710 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 95: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:718 +//line sql.y:714 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 96: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:722 +//line sql.y:718 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 97: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:726 +//line sql.y:722 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 98: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:730 +//line sql.y:726 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 99: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:734 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:732 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 100: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:740 +//line sql.y:738 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3433,7 +3440,7 @@ yydefault: } case 101: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:746 +//line sql.y:744 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3441,7 +3448,7 @@ yydefault: } case 102: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:752 +//line sql.y:750 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3449,729 +3456,765 @@ yydefault: } case 103: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:758 +//line sql.y:756 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 104: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:764 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 105: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:772 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:768 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 106: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:776 +//line sql.y:772 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 107: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:780 +//line sql.y:776 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 108: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:784 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:780 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 109: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:788 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:786 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 110: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:794 +//line sql.y:790 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 111: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:798 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:794 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 112: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:802 +//line sql.y:798 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 113: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:806 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:802 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 114: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:810 +//line sql.y:806 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 115: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:814 +//line sql.y:810 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 116: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:818 +//line sql.y:814 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 117: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:822 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:818 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 118: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:826 +//line sql.y:822 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 119: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:830 +//line sql.y:826 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 120: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:834 +//line sql.y:830 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 121: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:838 +//line sql.y:834 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 122: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:842 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:838 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 123: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:846 +//line sql.y:843 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 124: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:851 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:849 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:857 +//line sql.y:853 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 126: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:861 +//line sql.y:857 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 127: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:865 +//line sql.y:861 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 128: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:869 +//line sql.y:865 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 129: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:873 +//line sql.y:869 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 130: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:877 +//line sql.y:873 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 131: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:881 +//line sql.y:877 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 132: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:885 - { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - } - case 133: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:891 +//line sql.y:883 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } - case 134: + case 133: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:896 +//line sql.y:888 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } - case 135: + case 134: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:901 +//line sql.y:893 { yyVAL.optVal = nil } - case 136: + case 135: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:905 +//line sql.y:897 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 137: + case 136: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:910 +//line sql.y:902 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 138: + case 137: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:914 +//line sql.y:906 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 139: + case 138: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:922 +//line sql.y:914 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 140: + case 139: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:926 +//line sql.y:918 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } - case 141: + case 140: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:932 +//line sql.y:924 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 142: + case 141: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:940 +//line sql.y:932 { yyVAL.boolVal = BoolVal(false) } - case 143: + case 142: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:944 +//line sql.y:936 { yyVAL.boolVal = BoolVal(true) } - case 144: + case 143: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:949 +//line sql.y:941 { yyVAL.boolVal = BoolVal(false) } - case 145: + case 144: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:953 +//line sql.y:945 { yyVAL.boolVal = BoolVal(true) } - case 146: + case 145: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:959 +//line sql.y:951 { yyVAL.boolVal = BoolVal(false) } - case 147: + case 146: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:963 +//line sql.y:955 { yyVAL.boolVal = BoolVal(false) } - case 148: + case 147: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:967 +//line sql.y:959 { yyVAL.boolVal = BoolVal(true) } - case 149: + case 148: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:972 +//line sql.y:964 { yyVAL.optVal = nil } - case 150: + case 149: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:976 +//line sql.y:968 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 151: + case 150: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:980 +//line sql.y:972 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 152: + case 151: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:984 +//line sql.y:976 { yyVAL.optVal = NewFloatVal(yyDollar[2].bytes) } - case 153: + case 152: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:988 +//line sql.y:980 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 154: + case 153: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:992 +//line sql.y:984 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 155: + case 154: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:996 +//line sql.y:988 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 156: + case 155: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1000 +//line sql.y:992 { yyVAL.optVal = NewBitVal(yyDollar[2].bytes) } - case 157: + case 156: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1005 +//line sql.y:997 { yyVAL.optVal = nil } - case 158: + case 157: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1009 +//line sql.y:1001 { yyVAL.optVal = NewValArg(yyDollar[3].bytes) } - case 159: + case 158: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1013 +//line sql.y:1005 { yyVAL.optVal = NewValArg(yyDollar[3].bytes) } - case 160: + case 159: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1018 +//line sql.y:1010 { yyVAL.boolVal = BoolVal(false) } - case 161: + case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1022 +//line sql.y:1014 { yyVAL.boolVal = BoolVal(true) } - case 162: + case 161: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1027 +//line sql.y:1019 { yyVAL.str = "" } - case 163: + case 162: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1031 +//line sql.y:1023 { yyVAL.str = string(yyDollar[3].bytes) } - case 164: + case 163: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1035 +//line sql.y:1027 { yyVAL.str = string(yyDollar[3].bytes) } - case 165: + case 164: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1040 +//line sql.y:1032 { yyVAL.str = "" } - case 166: + case 165: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1044 +//line sql.y:1036 { yyVAL.str = string(yyDollar[2].bytes) } - case 167: + case 166: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1048 +//line sql.y:1040 { yyVAL.str = string(yyDollar[2].bytes) } - case 168: + case 167: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1053 +//line sql.y:1045 { yyVAL.colKeyOpt = colKeyNone } - case 169: + case 168: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1057 +//line sql.y:1049 { yyVAL.colKeyOpt = colKeyPrimary } - case 170: + case 169: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1061 +//line sql.y:1053 { yyVAL.colKeyOpt = colKey } - case 171: + case 170: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1065 +//line sql.y:1057 { yyVAL.colKeyOpt = colKeyUniqueKey } - case 172: + case 171: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1069 +//line sql.y:1061 { yyVAL.colKeyOpt = colKeyUnique } - case 173: + case 172: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1074 +//line sql.y:1066 { yyVAL.optVal = nil } - case 174: + case 173: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1078 +//line sql.y:1070 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 175: + case 174: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1084 +//line sql.y:1076 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } - case 176: + case 175: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1088 +//line sql.y:1080 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } - case 177: + case 176: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1094 +//line sql.y:1086 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } - case 178: + case 177: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1098 +//line sql.y:1090 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } - case 179: + case 178: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1104 +//line sql.y:1096 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].bytes)} } - case 180: + case 179: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1108 +//line sql.y:1100 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } - case 181: + case 180: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1113 +//line sql.y:1105 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } - case 182: + case 181: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1119 +//line sql.y:1111 { yyVAL.str = "" } - case 183: + case 182: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1123 +//line sql.y:1115 { yyVAL.str = string(yyDollar[1].bytes) } - case 184: + case 183: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1129 +//line sql.y:1121 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } - case 185: + case 184: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1133 +//line sql.y:1125 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Spatial: true, Unique: false} } - case 186: + case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1137 +//line sql.y:1129 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(yyDollar[3].str), Unique: true} } - case 187: + case 186: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1141 +//line sql.y:1133 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(yyDollar[2].str), Unique: true} } - case 188: + case 187: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1145 +//line sql.y:1137 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(yyDollar[2].str), Unique: false} } - case 189: + case 188: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1151 +//line sql.y:1143 { yyVAL.str = string(yyDollar[1].bytes) } - case 190: + case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1155 +//line sql.y:1147 { yyVAL.str = string(yyDollar[1].bytes) } - case 191: + case 190: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1160 +//line sql.y:1152 { yyVAL.str = "" } - case 192: + case 191: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1164 +//line sql.y:1156 { yyVAL.str = string(yyDollar[1].bytes) } - case 193: + case 192: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1170 +//line sql.y:1162 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 194: + case 193: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1174 +//line sql.y:1166 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 195: + case 194: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1180 +//line sql.y:1172 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].optVal} } - case 196: + case 195: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1186 +//line sql.y:1178 { yyVAL.constraintDefinition = &ConstraintDefinition{Name: string(yyDollar[2].bytes), Details: yyDollar[3].constraintInfo} } - case 197: + case 196: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1190 +//line sql.y:1182 { yyVAL.constraintDefinition = &ConstraintDefinition{Details: yyDollar[1].constraintInfo} } - case 198: + case 197: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:1197 +//line sql.y:1189 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns} } - case 199: + case 198: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1201 +//line sql.y:1193 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction} } - case 200: + case 199: yyDollar = yyS[yypt-11 : yypt+1] -//line sql.y:1205 +//line sql.y:1197 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnUpdate: yyDollar[11].ReferenceAction} } - case 201: + case 200: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1209 +//line sql.y:1201 { yyVAL.constraintInfo = &ForeignKeyDefinition{Source: yyDollar[4].columns, ReferencedTable: yyDollar[7].tableName, ReferencedColumns: yyDollar[9].columns, OnDelete: yyDollar[11].ReferenceAction, OnUpdate: yyDollar[12].ReferenceAction} } - case 202: + case 201: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1215 +//line sql.y:1207 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 203: + case 202: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1221 +//line sql.y:1213 { yyVAL.ReferenceAction = yyDollar[3].ReferenceAction } - case 204: + case 203: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1227 +//line sql.y:1219 { yyVAL.ReferenceAction = Restrict } - case 205: + case 204: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1231 +//line sql.y:1223 { yyVAL.ReferenceAction = Cascade } - case 206: + case 205: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1235 +//line sql.y:1227 { yyVAL.ReferenceAction = NoAction } - case 207: + case 206: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1239 +//line sql.y:1231 { yyVAL.ReferenceAction = SetDefault } - case 208: + case 207: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1243 +//line sql.y:1235 { yyVAL.ReferenceAction = SetNull } - case 209: + case 208: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1248 +//line sql.y:1240 { yyVAL.str = "" } - case 210: + case 209: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1252 +//line sql.y:1244 { yyVAL.str = " " + string(yyDollar[1].str) } - case 211: + case 210: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1256 +//line sql.y:1248 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } - case 212: + case 211: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1264 +//line sql.y:1256 { yyVAL.str = yyDollar[1].str } - case 213: + case 212: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1268 +//line sql.y:1260 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 214: + case 213: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1272 +//line sql.y:1264 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } - case 215: + case 214: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1278 +//line sql.y:1270 { yyVAL.str = yyDollar[1].colIdent.String() } - case 216: + case 215: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1282 +//line sql.y:1274 { yyVAL.str = "'" + string(yyDollar[1].bytes) + "'" } - case 217: + case 216: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1286 +//line sql.y:1278 { yyVAL.str = string(yyDollar[1].bytes) } - case 218: + case 217: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1292 +//line sql.y:1284 + { + yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} + } + case 218: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1288 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 219: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1296 +//line sql.y:1292 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} } case 220: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1300 +//line sql.y:1296 { - yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} + // Change this to a rename statement + yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} } case 221: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1301 + { + // Rename an index can just be an alter + yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} + } + case 222: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:1306 + { + yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} + } + case 223: + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1310 + { + yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} + } + case 224: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1314 + { + yyVAL.statement = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ + Name: yyDollar[5].colIdent, + Type: yyDollar[6].colIdent, + Params: yyDollar[7].vindexParams, + }} + } + case 225: + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1322 + { + yyVAL.statement = &DDL{Action: DropVindexStr, VindexSpec: &VindexSpec{ + Name: yyDollar[5].colIdent, + }} + } + case 226: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1304 +//line sql.y:1328 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -4184,9 +4227,9 @@ yydefault: VindexCols: yyDollar[9].columns, } } - case 222: + case 227: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1317 +//line sql.y:1341 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -4196,85 +4239,59 @@ yydefault: }, } } - case 223: - yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1327 - { - // Change this to a rename statement - yyVAL.statement = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[4].tableName}, ToTables: TableNames{yyDollar[7].tableName}} - } - case 224: - yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1332 - { - // Rename an index can just be an alter - yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName} - } - case 225: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1337 - { - yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName()} - } - case 226: - yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1341 - { - yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} - } - case 238: + case 239: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1360 +//line sql.y:1366 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 239: + case 240: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1366 +//line sql.y:1372 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 240: + case 241: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1370 +//line sql.y:1376 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 241: + case 242: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1376 +//line sql.y:1382 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 242: + case 243: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1380 +//line sql.y:1386 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 243: + case 244: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1386 +//line sql.y:1392 { yyVAL.statement = yyDollar[3].ddl } - case 244: + case 245: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1392 +//line sql.y:1398 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } - case 245: + case 246: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1396 +//line sql.y:1402 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) yyVAL.ddl.ToTables = append(yyVAL.ddl.ToTables, yyDollar[5].tableName) } - case 246: + case 247: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1404 +//line sql.y:1410 { var exists bool if yyDollar[3].byt != 0 { @@ -4282,16 +4299,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: yyDollar[4].tableNames, IfExists: exists} } - case 247: + case 248: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1412 +//line sql.y:1418 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } - case 248: + case 249: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1417 +//line sql.y:1423 { var exists bool if yyDollar[3].byt != 0 { @@ -4299,148 +4316,148 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: TableNames{yyDollar[4].tableName.ToViewName()}, IfExists: exists} } - case 249: + case 250: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1425 +//line sql.y:1431 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 250: + case 251: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1429 +//line sql.y:1435 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 251: + case 252: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1435 +//line sql.y:1441 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } - case 252: + case 253: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1439 +//line sql.y:1445 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } - case 253: + case 254: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1444 +//line sql.y:1450 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName} } - case 254: + case 255: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1450 +//line sql.y:1456 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 255: + case 256: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1455 +//line sql.y:1461 { yyVAL.statement = &Show{Type: CharsetStr} } - case 256: + case 257: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1459 +//line sql.y:1465 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 257: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1463 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} - } case 258: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1468 +//line sql.y:1469 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 259: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1472 +//line sql.y:1474 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 260: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1476 +//line sql.y:1478 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 261: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1480 +//line sql.y:1482 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 262: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1484 +//line sql.y:1486 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 263: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1488 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:1490 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 264: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1492 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1494 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 265: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1496 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1498 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 266: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1500 +//line sql.y:1502 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 267: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1504 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1506 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 268: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1508 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1510 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 269: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1514 + { + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + } + case 270: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1512 +//line sql.y:1518 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 270: + case 271: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1516 +//line sql.y:1522 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 271: + case 272: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1520 +//line sql.y:1526 { 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 272: + case 273: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1525 +//line sql.y:1531 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -4450,650 +4467,650 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 273: + case 274: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1535 +//line sql.y:1541 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 274: + case 275: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1539 +//line sql.y:1545 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 275: + case 276: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1543 +//line sql.y:1549 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 276: + case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1547 +//line sql.y:1553 { // Cannot dereference $4 directly, or else the parser stackcannot be pooled. See yyParsePooled showCollationFilterOpt := yyDollar[4].expr yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: &showCollationFilterOpt} } - case 277: + case 278: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1553 +//line sql.y:1559 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), OnTable: yyDollar[4].tableName} } - case 278: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1557 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} - } case 279: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1561 +//line sql.y:1563 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 280: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1565 +//line sql.y:1567 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 281: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1569 +//line sql.y:1571 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 282: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1573 +//line sql.y:1575 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 283: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1577 +//line sql.y:1579 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 284: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1587 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1583 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 285: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1593 { - yyVAL.str = string(yyDollar[1].bytes) + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1597 +//line sql.y:1599 { yyVAL.str = string(yyDollar[1].bytes) } case 287: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1603 + { + yyVAL.str = string(yyDollar[1].bytes) + } + case 288: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1603 +//line sql.y:1609 { yyVAL.str = "" } - case 288: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1607 +//line sql.y:1613 { yyVAL.str = "full " } - case 289: + case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1613 +//line sql.y:1619 { yyVAL.str = string(yyDollar[1].bytes) } - case 290: + case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1617 +//line sql.y:1623 { yyVAL.str = string(yyDollar[1].bytes) } - case 291: + case 292: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1623 +//line sql.y:1629 { yyVAL.str = "" } - case 292: + case 293: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1627 +//line sql.y:1633 { yyVAL.str = yyDollar[2].tableIdent.v } - case 293: + case 294: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1631 +//line sql.y:1637 { yyVAL.str = yyDollar[2].tableIdent.v } - case 294: + case 295: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1637 +//line sql.y:1643 { yyVAL.showFilter = nil } - case 295: + case 296: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1641 +//line sql.y:1647 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 296: + case 297: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1645 +//line sql.y:1651 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 297: + case 298: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1651 +//line sql.y:1657 { yyVAL.str = "" } - case 298: + case 299: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1655 +//line sql.y:1661 { yyVAL.str = SessionStr } - case 299: + case 300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1659 +//line sql.y:1665 { yyVAL.str = GlobalStr } - case 300: + case 301: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1665 +//line sql.y:1671 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 301: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1669 - { - yyVAL.statement = &Use{DBName: TableIdent{v: ""}} - } case 302: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:1675 { - yyVAL.statement = &Begin{} + yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } case 303: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1679 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1681 { yyVAL.statement = &Begin{} } case 304: - yyDollar = yyS[yypt-1 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1685 { - yyVAL.statement = &Commit{} + yyVAL.statement = &Begin{} } case 305: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:1691 { - yyVAL.statement = &Rollback{} + yyVAL.statement = &Commit{} } case 306: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:1697 { - yyVAL.statement = &OtherRead{} + yyVAL.statement = &Rollback{} } case 307: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1701 +//line sql.y:1703 { yyVAL.statement = &OtherRead{} } case 308: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1705 +//line sql.y:1707 { yyVAL.statement = &OtherRead{} } case 309: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1709 +//line sql.y:1711 { - yyVAL.statement = &OtherAdmin{} + yyVAL.statement = &OtherRead{} } case 310: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1713 +//line sql.y:1715 { yyVAL.statement = &OtherAdmin{} } case 311: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1717 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1719 { yyVAL.statement = &OtherAdmin{} } case 312: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1721 +//line sql.y:1723 { yyVAL.statement = &OtherAdmin{} } case 313: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1727 { - yyVAL.statement = &DDL{Action: FlushStr} + yyVAL.statement = &OtherAdmin{} } case 314: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1733 + { + yyVAL.statement = &DDL{Action: FlushStr} + } + case 315: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1731 +//line sql.y:1737 { setAllowComments(yylex, true) } - case 315: + case 316: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1735 +//line sql.y:1741 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 316: + case 317: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1741 +//line sql.y:1747 { yyVAL.bytes2 = nil } - case 317: + case 318: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1745 +//line sql.y:1751 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 318: + case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1751 +//line sql.y:1757 { yyVAL.str = UnionStr } - case 319: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1755 +//line sql.y:1761 { yyVAL.str = UnionAllStr } - case 320: + case 321: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1759 +//line sql.y:1765 { yyVAL.str = UnionDistinctStr } - case 321: + case 322: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1764 +//line sql.y:1770 { yyVAL.str = "" } - case 322: + case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1768 +//line sql.y:1774 { yyVAL.str = SQLNoCacheStr } - case 323: + case 324: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1772 +//line sql.y:1778 { yyVAL.str = SQLCacheStr } - case 324: + case 325: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1777 +//line sql.y:1783 { yyVAL.str = "" } - case 325: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1781 +//line sql.y:1787 { yyVAL.str = DistinctStr } - case 326: + case 327: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1786 +//line sql.y:1792 { yyVAL.str = "" } - case 327: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1790 +//line sql.y:1796 { yyVAL.str = StraightJoinHint } - case 328: + case 329: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1795 +//line sql.y:1801 { yyVAL.selectExprs = nil } - case 329: + case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1799 +//line sql.y:1805 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 330: + case 331: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1811 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 331: + case 332: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1809 +//line sql.y:1815 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 332: + case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1815 +//line sql.y:1821 { yyVAL.selectExpr = &StarExpr{} } - case 333: + case 334: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1819 +//line sql.y:1825 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 334: + case 335: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1823 +//line sql.y:1829 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 335: + case 336: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1827 +//line sql.y:1833 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 336: + case 337: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1832 +//line sql.y:1838 { yyVAL.colIdent = ColIdent{} } - case 337: + case 338: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1836 +//line sql.y:1842 { yyVAL.colIdent = yyDollar[1].colIdent } - case 338: + case 339: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1840 +//line sql.y:1846 { yyVAL.colIdent = yyDollar[2].colIdent } - case 340: + case 341: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1847 +//line sql.y:1853 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 341: + case 342: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1852 +//line sql.y:1858 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 342: + case 343: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1856 +//line sql.y:1862 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 343: + case 344: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1862 +//line sql.y:1868 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 344: + case 345: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1866 +//line sql.y:1872 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 347: + case 348: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1876 +//line sql.y:1882 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 348: + case 349: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1880 +//line sql.y:1886 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 349: + case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1884 +//line sql.y:1890 { // missed alias for subquery yylex.Error("Every derived table must have its own alias") return 1 } - case 350: + case 351: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1890 +//line sql.y:1896 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 351: + case 352: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1896 +//line sql.y:1902 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 352: + case 353: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1900 +//line sql.y:1906 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 353: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1906 +//line sql.y:1912 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 354: + case 355: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1910 +//line sql.y:1916 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 355: + case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1916 +//line sql.y:1922 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 356: + case 357: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1920 +//line sql.y:1926 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 357: + case 358: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1933 +//line sql.y:1939 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 358: + case 359: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1937 +//line sql.y:1943 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 359: + case 360: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1941 +//line sql.y:1947 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 360: + case 361: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1945 +//line sql.y:1951 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 361: + case 362: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1951 +//line sql.y:1957 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 362: + case 363: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1953 +//line sql.y:1959 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 363: + case 364: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1957 +//line sql.y:1963 { yyVAL.joinCondition = JoinCondition{} } - case 364: + case 365: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1959 +//line sql.y:1965 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 365: + case 366: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1963 +//line sql.y:1969 { yyVAL.joinCondition = JoinCondition{} } - case 366: + case 367: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1965 +//line sql.y:1971 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 367: + case 368: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1968 +//line sql.y:1974 { yyVAL.empty = struct{}{} } - case 368: + case 369: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1970 +//line sql.y:1976 { yyVAL.empty = struct{}{} } - case 369: + case 370: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1973 +//line sql.y:1979 { yyVAL.tableIdent = NewTableIdent("") } - case 370: + case 371: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1977 +//line sql.y:1983 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 371: + case 372: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1981 +//line sql.y:1987 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 373: + case 374: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1988 +//line sql.y:1994 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 374: + case 375: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1994 +//line sql.y:2000 { yyVAL.str = JoinStr } - case 375: + case 376: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1998 +//line sql.y:2004 { yyVAL.str = JoinStr } - case 376: + case 377: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2002 +//line sql.y:2008 { yyVAL.str = JoinStr } - case 377: + case 378: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2008 +//line sql.y:2014 { yyVAL.str = StraightJoinStr } - case 378: + case 379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2014 +//line sql.y:2020 { yyVAL.str = LeftJoinStr } - case 379: + case 380: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2018 +//line sql.y:2024 { yyVAL.str = LeftJoinStr } - case 380: + case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2022 +//line sql.y:2028 { yyVAL.str = RightJoinStr } - case 381: + case 382: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2026 +//line sql.y:2032 { yyVAL.str = RightJoinStr } - case 382: + case 383: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2032 +//line sql.y:2038 { yyVAL.str = NaturalJoinStr } - case 383: + case 384: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2036 +//line sql.y:2042 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -5101,459 +5118,459 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 384: + case 385: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2046 +//line sql.y:2052 { yyVAL.tableName = yyDollar[2].tableName } - case 385: + case 386: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2050 +//line sql.y:2056 { yyVAL.tableName = yyDollar[1].tableName } - case 386: + case 387: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2056 +//line sql.y:2062 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 387: + case 388: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2060 +//line sql.y:2066 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 388: + case 389: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2065 +//line sql.y:2071 { yyVAL.indexHints = nil } - case 389: + case 390: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2069 +//line sql.y:2075 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 390: + case 391: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2073 +//line sql.y:2079 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 391: + case 392: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2077 +//line sql.y:2083 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 392: + case 393: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2082 +//line sql.y:2088 { yyVAL.expr = nil } - case 393: + case 394: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2086 +//line sql.y:2092 { yyVAL.expr = yyDollar[2].expr } - case 394: + case 395: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2092 +//line sql.y:2098 { yyVAL.expr = yyDollar[1].expr } - case 395: + case 396: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2096 +//line sql.y:2102 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 396: + case 397: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2100 +//line sql.y:2106 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 397: + case 398: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2104 +//line sql.y:2110 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 398: + case 399: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2108 +//line sql.y:2114 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 399: + case 400: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2112 +//line sql.y:2118 { yyVAL.expr = yyDollar[1].expr } - case 400: + case 401: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2116 +//line sql.y:2122 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 401: + case 402: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2122 +//line sql.y:2128 { yyVAL.str = "" } - case 402: + case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2126 +//line sql.y:2132 { yyVAL.str = string(yyDollar[2].bytes) } - case 403: + case 404: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2132 +//line sql.y:2138 { yyVAL.boolVal = BoolVal(true) } - case 404: + case 405: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2136 +//line sql.y:2142 { yyVAL.boolVal = BoolVal(false) } - case 405: + case 406: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2142 +//line sql.y:2148 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 406: + case 407: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2146 +//line sql.y:2152 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 407: + case 408: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2150 +//line sql.y:2156 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 408: + case 409: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2154 +//line sql.y:2160 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 409: + case 410: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2158 +//line sql.y:2164 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 410: + case 411: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2162 +//line sql.y:2168 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 411: + case 412: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2166 +//line sql.y:2172 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 412: + case 413: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2170 +//line sql.y:2176 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 413: + case 414: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2174 +//line sql.y:2180 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 414: + case 415: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2178 +//line sql.y:2184 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 415: + case 416: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2184 +//line sql.y:2190 { yyVAL.str = IsNullStr } - case 416: + case 417: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2188 +//line sql.y:2194 { yyVAL.str = IsNotNullStr } - case 417: + case 418: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2192 +//line sql.y:2198 { yyVAL.str = IsTrueStr } - case 418: + case 419: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2196 +//line sql.y:2202 { yyVAL.str = IsNotTrueStr } - case 419: + case 420: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2200 +//line sql.y:2206 { yyVAL.str = IsFalseStr } - case 420: + case 421: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2204 +//line sql.y:2210 { yyVAL.str = IsNotFalseStr } - case 421: + case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2210 +//line sql.y:2216 { yyVAL.str = EqualStr } - case 422: + case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2214 +//line sql.y:2220 { yyVAL.str = LessThanStr } - case 423: + case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2218 +//line sql.y:2224 { yyVAL.str = GreaterThanStr } - case 424: + case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2222 +//line sql.y:2228 { yyVAL.str = LessEqualStr } - case 425: + case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2226 +//line sql.y:2232 { yyVAL.str = GreaterEqualStr } - case 426: + case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2230 +//line sql.y:2236 { yyVAL.str = NotEqualStr } - case 427: + case 428: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2234 +//line sql.y:2240 { yyVAL.str = NullSafeEqualStr } - case 428: + case 429: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2239 +//line sql.y:2245 { yyVAL.expr = nil } - case 429: + case 430: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2243 +//line sql.y:2249 { yyVAL.expr = yyDollar[2].expr } - case 430: + case 431: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2249 +//line sql.y:2255 { yyVAL.colTuple = yyDollar[1].valTuple } - case 431: + case 432: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2253 +//line sql.y:2259 { yyVAL.colTuple = yyDollar[1].subquery } - case 432: + case 433: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2257 +//line sql.y:2263 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 433: + case 434: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2263 +//line sql.y:2269 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 434: + case 435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2269 +//line sql.y:2275 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 435: + case 436: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2273 +//line sql.y:2279 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 436: + case 437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2279 +//line sql.y:2285 { yyVAL.expr = yyDollar[1].expr } - case 437: + case 438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2283 +//line sql.y:2289 { yyVAL.expr = yyDollar[1].boolVal } - case 438: + case 439: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2287 +//line sql.y:2293 { yyVAL.expr = yyDollar[1].colName } - case 439: + case 440: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2291 +//line sql.y:2297 { yyVAL.expr = yyDollar[1].expr } - case 440: + case 441: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2295 +//line sql.y:2301 { yyVAL.expr = yyDollar[1].subquery } - case 441: + case 442: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2299 +//line sql.y:2305 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 442: + case 443: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2303 +//line sql.y:2309 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 443: + case 444: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2307 +//line sql.y:2313 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 444: + case 445: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2311 +//line sql.y:2317 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 445: + case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2315 +//line sql.y:2321 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 446: + case 447: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2319 +//line sql.y:2325 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 447: + case 448: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2323 +//line sql.y:2329 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 448: + case 449: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2327 +//line sql.y:2333 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 449: + case 450: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2331 +//line sql.y:2337 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 450: + case 451: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2335 +//line sql.y:2341 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 451: + case 452: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2339 +//line sql.y:2345 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 452: + case 453: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2343 +//line sql.y:2349 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 453: + case 454: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2347 +//line sql.y:2353 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 454: + case 455: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2351 +//line sql.y:2357 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 455: + case 456: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2355 +//line sql.y:2361 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 456: + case 457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2359 +//line sql.y:2365 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 457: + case 458: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2363 +//line sql.y:2369 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 458: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2367 +//line sql.y:2373 { yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} } - case 459: + case 460: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2371 +//line sql.y:2377 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -5561,9 +5578,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 460: + case 461: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2379 +//line sql.y:2385 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -5577,21 +5594,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 461: + case 462: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2393 +//line sql.y:2399 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 462: + case 463: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2397 +//line sql.y:2403 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 463: + case 464: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2401 +//line sql.y:2407 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -5599,467 +5616,467 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 468: + case 469: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2419 +//line sql.y:2425 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 469: + case 470: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2423 +//line sql.y:2429 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 470: + case 471: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2427 +//line sql.y:2433 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 471: + case 472: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2437 +//line sql.y:2443 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 472: + case 473: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2441 +//line sql.y:2447 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 473: + case 474: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2445 +//line sql.y:2451 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 474: + case 475: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2449 +//line sql.y:2455 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 475: + case 476: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2453 +//line sql.y:2459 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 476: + case 477: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2457 +//line sql.y:2463 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } - case 477: + case 478: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2461 +//line sql.y:2467 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 478: + case 479: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2465 +//line sql.y:2471 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 479: + case 480: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2469 +//line sql.y:2475 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } - case 480: + case 481: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2473 +//line sql.y:2479 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 481: + case 482: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2477 +//line sql.y:2483 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 482: + case 483: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2481 +//line sql.y:2487 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} } - case 483: + case 484: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2485 +//line sql.y:2491 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 484: + case 485: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2489 +//line sql.y:2495 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 485: + case 486: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2493 +//line sql.y:2499 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} } - case 486: + case 487: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2497 +//line sql.y:2503 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 487: + case 488: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2501 +//line sql.y:2507 { yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 488: + case 489: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2505 +//line sql.y:2511 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 489: + case 490: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2509 +//line sql.y:2515 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } - case 490: + case 491: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2513 +//line sql.y:2519 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 491: + case 492: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2517 +//line sql.y:2523 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 492: + case 493: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2527 +//line sql.y:2533 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 493: + case 494: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2531 +//line sql.y:2537 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 494: + case 495: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2535 +//line sql.y:2541 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 495: + case 496: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2539 +//line sql.y:2545 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 496: + case 497: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2544 +//line sql.y:2550 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 497: + case 498: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2549 +//line sql.y:2555 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 498: + case 499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2554 +//line sql.y:2560 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 499: + case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2559 +//line sql.y:2565 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 502: + case 503: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2573 +//line sql.y:2579 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 503: + case 504: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2577 +//line sql.y:2583 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 504: + case 505: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2581 +//line sql.y:2587 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 505: + case 506: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2585 +//line sql.y:2591 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 506: + case 507: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2591 +//line sql.y:2597 { yyVAL.str = "" } - case 507: + case 508: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2595 +//line sql.y:2601 { yyVAL.str = BooleanModeStr } - case 508: + case 509: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2599 +//line sql.y:2605 { yyVAL.str = NaturalLanguageModeStr } - case 509: + case 510: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2603 +//line sql.y:2609 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 510: + case 511: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2607 +//line sql.y:2613 { yyVAL.str = QueryExpansionStr } - case 511: + case 512: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2613 +//line sql.y:2619 { yyVAL.str = string(yyDollar[1].bytes) } - case 512: + case 513: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2617 +//line sql.y:2623 { yyVAL.str = string(yyDollar[1].bytes) } - case 513: + case 514: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2623 +//line sql.y:2629 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 514: + case 515: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2627 +//line sql.y:2633 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 515: + case 516: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2631 +//line sql.y:2637 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: string(yyDollar[3].bytes)} } - case 516: + case 517: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2635 +//line sql.y:2641 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 517: + case 518: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2639 +//line sql.y:2645 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 518: + case 519: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2643 +//line sql.y:2649 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 519: + case 520: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2649 +//line sql.y:2655 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 520: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2653 +//line sql.y:2659 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 521: + case 522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2657 +//line sql.y:2663 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 522: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2661 +//line sql.y:2667 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 523: + case 524: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2665 +//line sql.y:2671 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 524: + case 525: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2669 +//line sql.y:2675 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 525: + case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2673 +//line sql.y:2679 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 526: + case 527: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2678 +//line sql.y:2684 { yyVAL.expr = nil } - case 527: + case 528: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2682 +//line sql.y:2688 { yyVAL.expr = yyDollar[1].expr } - case 528: + case 529: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2687 +//line sql.y:2693 { yyVAL.str = string("") } - case 529: + case 530: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2691 +//line sql.y:2697 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 530: + case 531: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2697 +//line sql.y:2703 { yyVAL.whens = []*When{yyDollar[1].when} } - case 531: + case 532: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2701 +//line sql.y:2707 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 532: + case 533: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2707 +//line sql.y:2713 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 533: + case 534: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2712 +//line sql.y:2718 { yyVAL.expr = nil } - case 534: + case 535: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2716 +//line sql.y:2722 { yyVAL.expr = yyDollar[2].expr } - case 535: + case 536: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2722 +//line sql.y:2728 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 536: + case 537: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2726 +//line sql.y:2732 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 537: + case 538: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2730 +//line sql.y:2736 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 538: + case 539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2736 +//line sql.y:2742 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 539: + case 540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2740 +//line sql.y:2746 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 540: + case 541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2744 +//line sql.y:2750 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 541: + case 542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2748 +//line sql.y:2754 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 542: + case 543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2752 +//line sql.y:2758 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 543: + case 544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2756 +//line sql.y:2762 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 544: + case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2760 +//line sql.y:2766 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 545: + case 546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2764 +//line sql.y:2770 { yyVAL.expr = &NullVal{} } - case 546: + case 547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2770 +//line sql.y:2776 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -6068,239 +6085,239 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 547: + case 548: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2779 +//line sql.y:2785 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 548: + case 549: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2783 +//line sql.y:2789 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 549: + case 550: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2788 +//line sql.y:2794 { yyVAL.exprs = nil } - case 550: + case 551: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2792 +//line sql.y:2798 { yyVAL.exprs = yyDollar[3].exprs } - case 551: + case 552: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2797 +//line sql.y:2803 { yyVAL.expr = nil } - case 552: + case 553: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2801 +//line sql.y:2807 { yyVAL.expr = yyDollar[2].expr } - case 553: + case 554: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2806 +//line sql.y:2812 { yyVAL.orderBy = nil } - case 554: + case 555: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2810 +//line sql.y:2816 { yyVAL.orderBy = yyDollar[3].orderBy } - case 555: + case 556: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2816 +//line sql.y:2822 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 556: + case 557: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2820 +//line sql.y:2826 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 557: + case 558: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2826 +//line sql.y:2832 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 558: + case 559: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2831 +//line sql.y:2837 { yyVAL.str = AscScr } - case 559: + case 560: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2835 +//line sql.y:2841 { yyVAL.str = AscScr } - case 560: + case 561: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2839 +//line sql.y:2845 { yyVAL.str = DescScr } - case 561: + case 562: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2844 +//line sql.y:2850 { yyVAL.limit = nil } - case 562: + case 563: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2848 +//line sql.y:2854 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 563: + case 564: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2852 +//line sql.y:2858 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 564: + case 565: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2856 +//line sql.y:2862 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 565: + case 566: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2861 +//line sql.y:2867 { yyVAL.str = "" } - case 566: + case 567: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2865 +//line sql.y:2871 { yyVAL.str = ForUpdateStr } - case 567: + case 568: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2869 +//line sql.y:2875 { yyVAL.str = ShareModeStr } - case 568: + case 569: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2882 +//line sql.y:2888 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 569: + case 570: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2886 +//line sql.y:2892 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 570: + case 571: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2890 +//line sql.y:2896 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 571: + case 572: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2895 +//line sql.y:2901 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 572: + case 573: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2899 +//line sql.y:2905 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 573: + case 574: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2903 +//line sql.y:2909 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 574: + case 575: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2910 +//line sql.y:2916 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 575: + case 576: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2914 +//line sql.y:2920 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 576: + case 577: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2918 +//line sql.y:2924 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 577: + case 578: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2922 +//line sql.y:2928 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 578: + case 579: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2927 +//line sql.y:2933 { yyVAL.updateExprs = nil } - case 579: + case 580: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2931 +//line sql.y:2937 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 580: + case 581: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2937 +//line sql.y:2943 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 581: + case 582: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2941 +//line sql.y:2947 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 582: + case 583: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2947 +//line sql.y:2953 { yyVAL.valTuple = yyDollar[1].valTuple } - case 583: + case 584: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2951 +//line sql.y:2957 { yyVAL.valTuple = ValTuple{} } - case 584: + case 585: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2957 +//line sql.y:2963 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 585: + case 586: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2963 +//line sql.y:2969 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -6308,312 +6325,312 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 586: + case 587: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2973 +//line sql.y:2979 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 587: + case 588: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2977 +//line sql.y:2983 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 588: + case 589: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2983 +//line sql.y:2989 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 589: + case 590: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2989 +//line sql.y:2995 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 590: + case 591: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2993 +//line sql.y:2999 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 591: + case 592: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2999 +//line sql.y:3005 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 592: + case 593: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3003 +//line sql.y:3009 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 593: + case 594: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3007 +//line sql.y:3013 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 594: + case 595: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3011 +//line sql.y:3017 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 596: + case 597: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3018 +//line sql.y:3024 { yyVAL.bytes = []byte("charset") } - case 598: + case 599: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3025 +//line sql.y:3031 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 599: + case 600: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3029 +//line sql.y:3035 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 600: + case 601: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3033 +//line sql.y:3039 { yyVAL.expr = &Default{} } - case 603: + case 604: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3042 +//line sql.y:3048 { yyVAL.byt = 0 } - case 604: + case 605: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3044 +//line sql.y:3050 { yyVAL.byt = 1 } - case 605: + case 606: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3047 +//line sql.y:3053 { yyVAL.empty = struct{}{} } - case 606: + case 607: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3049 +//line sql.y:3055 { yyVAL.empty = struct{}{} } - case 607: + case 608: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3052 +//line sql.y:3058 { yyVAL.str = "" } - case 608: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3054 - { - yyVAL.str = IgnoreStr - } case 609: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3058 +//line sql.y:3060 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 610: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3060 +//line sql.y:3064 { yyVAL.empty = struct{}{} } case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3062 +//line sql.y:3066 { yyVAL.empty = struct{}{} } case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3064 +//line sql.y:3068 { yyVAL.empty = struct{}{} } case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3066 +//line sql.y:3070 { yyVAL.empty = struct{}{} } case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3068 +//line sql.y:3072 { yyVAL.empty = struct{}{} } case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3070 +//line sql.y:3074 { yyVAL.empty = struct{}{} } case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3072 +//line sql.y:3076 { yyVAL.empty = struct{}{} } case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3074 +//line sql.y:3078 { yyVAL.empty = struct{}{} } case 618: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3076 +//line sql.y:3080 { yyVAL.empty = struct{}{} } case 619: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3079 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3082 { yyVAL.empty = struct{}{} } case 620: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3081 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3085 { yyVAL.empty = struct{}{} } case 621: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3083 +//line sql.y:3087 { yyVAL.empty = struct{}{} } case 622: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3087 +//line sql.y:3089 { yyVAL.empty = struct{}{} } case 623: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3089 +//line sql.y:3093 { yyVAL.empty = struct{}{} } case 624: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3092 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3095 { yyVAL.empty = struct{}{} } case 625: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3094 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3098 { yyVAL.empty = struct{}{} } case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3096 +//line sql.y:3100 { yyVAL.empty = struct{}{} } case 627: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3102 + { + yyVAL.empty = struct{}{} + } + case 628: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3099 +//line sql.y:3105 { yyVAL.colIdent = ColIdent{} } - case 628: + case 629: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3101 +//line sql.y:3107 { yyVAL.colIdent = yyDollar[2].colIdent } - case 629: + case 630: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3105 +//line sql.y:3111 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 630: + case 631: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3109 +//line sql.y:3115 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 632: + case 633: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3116 +//line sql.y:3122 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 633: + case 634: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3122 +//line sql.y:3128 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 634: + case 635: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3126 +//line sql.y:3132 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 636: + case 637: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3133 +//line sql.y:3139 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 842: + case 844: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3364 +//line sql.y:3371 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 843: + case 845: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3373 +//line sql.y:3380 { decNesting(yylex) } - case 844: + case 846: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3378 +//line sql.y:3385 { skipToEnd(yylex) } - case 845: + case 847: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3383 +//line sql.y:3390 { skipToEnd(yylex) } - case 846: + case 848: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3387 +//line sql.y:3394 { skipToEnd(yylex) } - case 847: + case 849: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3391 +//line sql.y:3398 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 2a0dcdbff9f..31e52a0482f 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -180,7 +180,7 @@ func skipToEnd(yylex interface{}) { %token NULLX AUTO_INCREMENT APPROXNUM SIGNED UNSIGNED ZEROFILL // Supported SHOW tokens -%token COLLATION DATABASES TABLES VITESS_KEYSPACES VITESS_SHARDS VITESS_TABLETS VSCHEMA_TABLES VITESS_TARGET FULL PROCESSLIST COLUMNS FIELDS ENGINES PLUGINS +%token COLLATION DATABASES TABLES VITESS_KEYSPACES VITESS_SHARDS VITESS_TABLETS VSCHEMA VSCHEMA_TABLES VITESS_TARGET FULL PROCESSLIST COLUMNS FIELDS ENGINES PLUGINS // SET tokens %token NAMES CHARSET GLOBAL SESSION ISOLATION LEVEL READ WRITE ONLY REPEATABLE COMMITTED UNCOMMITTED SERIALIZABLE @@ -570,14 +570,6 @@ create_statement: { $$ = &DDL{Action: CreateStr, Table: $5.ToViewName()} } -| CREATE VINDEX sql_id vindex_type_opt vindex_params_opt - { - $$ = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ - Name: $3, - Type: $4, - Params: $5, - }} - } | CREATE DATABASE not_exists_opt ID ddl_skip_to_end { $$ = &DBDDL{Action: CreateStr, DBName: string($4)} @@ -1300,7 +1292,39 @@ alter_statement: { $$ = &DDL{Action: AlterStr, Table: $4} } -| ALTER ignore_opt TABLE table_name ADD VINDEX sql_id '(' column_list ')' vindex_type_opt vindex_params_opt +| ALTER ignore_opt TABLE table_name RENAME to_opt table_name + { + // Change this to a rename statement + $$ = &DDL{Action: RenameStr, FromTables: TableNames{$4}, ToTables: TableNames{$7}} + } +| ALTER ignore_opt TABLE table_name RENAME index_opt skip_to_end + { + // Rename an index can just be an alter + $$ = &DDL{Action: AlterStr, Table: $4} + } +| ALTER VIEW table_name ddl_skip_to_end + { + $$ = &DDL{Action: AlterStr, Table: $3.ToViewName()} + } +| ALTER ignore_opt TABLE table_name partition_operation + { + $$ = &DDL{Action: AlterStr, Table: $4, PartitionSpec: $5} + } +| ALTER VSCHEMA CREATE VINDEX sql_id vindex_type_opt vindex_params_opt + { + $$ = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ + Name: $5, + Type: $6, + Params: $7, + }} + } +| ALTER VSCHEMA DROP VINDEX sql_id + { + $$ = &DDL{Action: DropVindexStr, VindexSpec: &VindexSpec{ + Name: $5, + }} + } +| ALTER VSCHEMA ON table_name ADD VINDEX sql_id '(' column_list ')' vindex_type_opt vindex_params_opt { $$ = &DDL{ Action: AddColVindexStr, @@ -1313,7 +1337,7 @@ alter_statement: VindexCols: $9, } } -| ALTER ignore_opt TABLE table_name DROP VINDEX sql_id +| ALTER VSCHEMA ON table_name DROP VINDEX sql_id { $$ = &DDL{ Action: DropColVindexStr, @@ -1323,24 +1347,6 @@ alter_statement: }, } } -| ALTER ignore_opt TABLE table_name RENAME to_opt table_name - { - // Change this to a rename statement - $$ = &DDL{Action: RenameStr, FromTables: TableNames{$4}, ToTables: TableNames{$7}} - } -| ALTER ignore_opt TABLE table_name RENAME index_opt skip_to_end - { - // Rename an index can just be an alter - $$ = &DDL{Action: AlterStr, Table: $4} - } -| ALTER VIEW table_name ddl_skip_to_end - { - $$ = &DDL{Action: AlterStr, Table: $3.ToViewName()} - } -| ALTER ignore_opt TABLE table_name partition_operation - { - $$ = &DDL{Action: AlterStr, Table: $4, PartitionSpec: $5} - } alter_object_type: COLUMN @@ -3351,6 +3357,7 @@ non_reserved_keyword: | VITESS_KEYSPACES | VITESS_SHARDS | VITESS_TABLETS +| VSCHEMA | VSCHEMA_TABLES | VITESS_TARGET | WARNINGS diff --git a/go/vt/sqlparser/token.go b/go/vt/sqlparser/token.go index c380e964ad8..31b3bc33d75 100644 --- a/go/vt/sqlparser/token.go +++ b/go/vt/sqlparser/token.go @@ -393,6 +393,7 @@ var keywords = map[string]int{ "vitess_shards": VITESS_SHARDS, "vitess_tablets": VITESS_TABLETS, "vitess_target": VITESS_TARGET, + "vschema": VSCHEMA, "vschema_tables": VSCHEMA_TABLES, "warnings": WARNINGS, "when": WHEN, diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 68f55d24e5b..11aff53d289 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -1204,7 +1204,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) { } session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) - stmt := "create vindex test_vindex using hash" + stmt := "alter vschema create vindex test_vindex using hash" _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Error(err) @@ -1230,7 +1230,7 @@ func TestExecutorCreateVindexDDL(t *testing.T) { // target in the session ksNew := "test_new_keyspace" session = NewSafeSession(&vtgatepb.Session{TargetString: ksNew}) - stmt = "create vindex test_vindex2 using hash" + stmt = "alter vschema create vindex test_vindex2 using hash" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1277,7 +1277,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // Create a new vindex implicitly with the statement - stmt := "alter table test add vindex test_hash (id) using hash " + stmt := "alter vschema on test add vindex test_hash (id) using hash " _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1305,7 +1305,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // Drop it - stmt = "alter table test drop vindex test_hash" + stmt = "alter vschema on test drop vindex test_hash" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1320,7 +1320,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // add it again using the same syntax - stmt = "alter table test add vindex test_hash (id) using hash " + stmt = "alter vschema on test add vindex test_hash (id) using hash " _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1349,7 +1349,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // add another - stmt = "alter table test add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" + stmt = "alter vschema on test add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1387,7 +1387,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } - stmt = "alter table test add vindex test_hash_id2 (id2) using hash" + stmt = "alter vschema on test add vindex test_hash_id2 (id2) using hash" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1427,7 +1427,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // drop one - stmt = "alter table test drop vindex test_lookup" + stmt = "alter vschema on test drop vindex test_lookup" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1459,7 +1459,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // use the newly created vindex on a new table - stmt = "alter table test2 add vindex test_hash (id)" + stmt = "alter vschema on test2 add vindex test_hash (id)" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1482,7 +1482,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } // create an identical vindex definition on a different table - stmt = "alter table test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" + stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, from=`c1,c2`, table=test_lookup, to=keyspace_id" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1520,56 +1520,56 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } - stmt = "alter table test2 add vindex nonexistent (c1,c2)" + stmt = "alter vschema on test2 add vindex nonexistent (c1,c2)" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "vindex nonexistent does not exist in keyspace TestExecutor" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table test2 add vindex test_hash (c1,c2) using lookup" + stmt = "alter vschema on test2 add vindex test_hash (c1,c2) using lookup" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "vindex test_hash defined with type hash not lookup" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table test2 add vindex test_lookup (c1,c2) using lookup with owner=xyz" + stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=xyz" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "vindex test_lookup defined with owner test not xyz" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, foo=bar" + stmt = "alter vschema on test2 add vindex test_lookup (c1,c2) using lookup with owner=`test`, foo=bar" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "vindex test_lookup defined with different parameters" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table nonexistent drop vindex test_lookup" + stmt = "alter vschema on nonexistent drop vindex test_lookup" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "table TestExecutor.nonexistent not defined in vschema" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table nonexistent drop vindex test_lookup" + stmt = "alter vschema on nonexistent drop vindex test_lookup" _, err = executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{TargetString: "InvalidKeyspace"}), stmt, nil) wantErr = "table InvalidKeyspace.nonexistent not defined in vschema" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table nowhere.nohow drop vindex test_lookup" + stmt = "alter vschema on nowhere.nohow drop vindex test_lookup" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "table nowhere.nohow not defined in vschema" if err == nil || err.Error() != wantErr { t.Errorf("got %v want err %s", err, wantErr) } - stmt = "alter table test drop vindex test_lookup" + stmt = "alter vschema on test drop vindex test_lookup" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) wantErr = "vindex test_lookup not defined in table TestExecutor.test" if err == nil || err.Error() != wantErr { @@ -1603,7 +1603,7 @@ func TestExecutorVindexDDLNewKeyspace(t *testing.T) { } session := NewSafeSession(&vtgatepb.Session{TargetString: ksName}) - stmt := "create vindex test_hash using hash" + stmt := "alter vschema create vindex test_hash using hash" _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Error(err) @@ -1611,7 +1611,7 @@ func TestExecutorVindexDDLNewKeyspace(t *testing.T) { time.Sleep(50 * time.Millisecond) - stmt = "alter table test add vindex test_hash2 (id) using hash" + stmt = "alter vschema on test add vindex test_hash2 (id) using hash" _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) if err != nil { t.Fatalf("error in %s: %v", stmt, err) @@ -1660,7 +1660,7 @@ func TestExecutorVindexDDLACL(t *testing.T) { ctxBlueUser := callerid.NewContext(context.Background(), &vtrpcpb.CallerID{}, &querypb.VTGateCallerID{Username: "blueUser"}) // test that by default no users can perform the operation - stmt := "create vindex test_hash using hash" + stmt := "alter vschema create vindex test_hash using hash" authErr := "not authorized to perform vschema operations" _, err := executor.Execute(ctxRedUser, "TestExecute", session, stmt, nil) if err == nil || err.Error() != authErr { @@ -1679,7 +1679,7 @@ func TestExecutorVindexDDLACL(t *testing.T) { if err != nil { t.Errorf("unexpected error '%v'", err) } - stmt = "create vindex test_hash2 using hash" + stmt = "alter vschema create vindex test_hash2 using hash" _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) @@ -1692,7 +1692,7 @@ func TestExecutorVindexDDLACL(t *testing.T) { if err == nil || err.Error() != authErr { t.Errorf("expected error '%s' got '%v'", authErr, err) } - stmt = "create vindex test_hash3 using hash" + stmt = "alter vschema create vindex test_hash3 using hash" _, err = executor.Execute(ctxBlueUser, "TestExecute", session, stmt, nil) if err != nil { t.Errorf("unexpected error '%v'", err) diff --git a/go/vt/vtgate/sandbox_test.go b/go/vt/vtgate/sandbox_test.go index 484464de4f6..593ca103be1 100644 --- a/go/vt/vtgate/sandbox_test.go +++ b/go/vt/vtgate/sandbox_test.go @@ -253,6 +253,9 @@ func (sct *sandboxTopo) GetSrvKeyspaceNames(ctx context.Context, cell string) ([ // GetSrvKeyspace is part of the srvtopo.Server interface. func (sct *sandboxTopo) GetSrvKeyspace(ctx context.Context, cell, keyspace string) (*topodatapb.SrvKeyspace, error) { sand := getSandbox(keyspace) + if sand == nil { + return nil, fmt.Errorf("topo error GetSrvKeyspace") + } sand.sandmu.Lock() defer sand.sandmu.Unlock() if sand.SrvKeyspaceCallback != nil { From ae79ffdec10de0a817803b067cf2278473ab775e Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Sat, 1 Dec 2018 15:26:57 -0800 Subject: [PATCH 21/35] update the show syntax to match the vschema ddl changes Make the show syntax consistent: `show vschema vindexes` `show vschema tables` Signed-off-by: Michael Demmer --- go/vt/sqlparser/parse_test.go | 12 +- go/vt/sqlparser/sql.go | 2368 +++++++++++++++++---------------- go/vt/sqlparser/sql.y | 20 +- go/vt/vtgate/executor.go | 4 +- go/vt/vtgate/executor_test.go | 84 +- 5 files changed, 1247 insertions(+), 1241 deletions(-) diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index cc3cf901e50..b2ad3f136b0 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -1198,12 +1198,6 @@ var ( }, { input: "show session variables", output: "show session variables", - }, { - input: "show vindexes", - output: "show vindexes", - }, { - input: "show vindexes on t", - output: "show vindexes on t", }, { input: "show vitess_keyspaces", }, { @@ -1211,7 +1205,11 @@ var ( }, { input: "show vitess_tablets", }, { - input: "show vschema_tables", + input: "show vschema tables", + }, { + input: "show vschema vindexes", + }, { + input: "show vschema vindexes on t", }, { input: "show warnings", output: "show warnings", diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 26a983897a2..a1c4f30501c 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -638,22 +638,22 @@ var yyExca = [...]int{ 159, 298, 160, 298, -2, 288, - -1, 268, + -1, 267, 112, 634, -2, 630, - -1, 269, + -1, 268, 112, 635, -2, 631, - -1, 332, + -1, 331, 82, 805, -2, 60, - -1, 333, + -1, 332, 82, 762, -2, 61, - -1, 338, + -1, 337, 82, 741, -2, 596, - -1, 340, + -1, 339, 82, 783, -2, 598, -1, 596, @@ -687,258 +687,266 @@ var yyExca = [...]int{ -1, 737, 112, 637, -2, 633, - -1, 952, + -1, 953, 5, 30, -2, 434, - -1, 981, + -1, 982, 5, 29, -2, 570, - -1, 1234, + -1, 1235, 5, 30, -2, 571, - -1, 1289, + -1, 1290, 5, 29, -2, 573, - -1, 1370, + -1, 1371, 5, 30, -2, 574, } const yyPrivate = 57344 -const yyLast = 11975 +const yyLast = 12060 var yyAct = [...]int{ - 269, 1405, 1395, 1191, 1358, 1073, 984, 1254, 1268, 561, - 273, 1301, 1126, 1002, 1160, 1123, 884, 841, 818, 57, - 985, 918, 840, 850, 837, 560, 3, 1127, 1133, 772, - 299, 247, 81, 870, 1096, 1139, 208, 337, 762, 208, - 238, 702, 1008, 944, 1053, 820, 1044, 816, 300, 51, - 609, 805, 593, 1027, 790, 739, 769, 854, 592, 493, - 499, 798, 880, 436, 505, 608, 271, 208, 81, 331, - 926, 513, 208, 256, 208, 326, 328, 246, 56, 1398, - 575, 1382, 1393, 1368, 1390, 239, 240, 241, 242, 1192, - 1381, 245, 1367, 260, 1118, 1228, 441, 1312, 1155, 1156, - 51, 610, 468, 611, 61, 1154, 598, 466, 252, 1334, + 268, 1406, 1396, 1192, 1359, 1074, 1269, 561, 985, 1255, + 1302, 1127, 841, 1003, 818, 1161, 57, 463, 1124, 246, + 986, 816, 272, 918, 884, 1028, 1128, 1140, 1009, 850, + 274, 237, 81, 762, 298, 840, 208, 945, 336, 208, + 1097, 1134, 772, 465, 837, 560, 3, 769, 1054, 1045, + 854, 609, 820, 805, 592, 790, 493, 593, 499, 702, + 771, 880, 608, 435, 739, 798, 505, 208, 81, 330, + 270, 927, 208, 513, 208, 255, 238, 239, 240, 241, + 325, 870, 244, 327, 575, 56, 1399, 1383, 1394, 903, + 864, 1369, 1391, 1193, 1382, 1368, 1119, 245, 1229, 440, + 1313, 1016, 1155, 902, 1015, 831, 259, 1017, 1156, 1157, + 467, 333, 1335, 526, 525, 535, 536, 528, 529, 530, + 531, 532, 533, 534, 527, 832, 833, 537, 610, 487, + 611, 907, 195, 243, 197, 24, 25, 52, 27, 28, + 901, 61, 242, 1036, 1169, 1170, 1171, 203, 199, 200, + 201, 1258, 1174, 1172, 43, 483, 863, 1275, 1212, 29, + 48, 49, 452, 484, 481, 482, 871, 63, 64, 65, + 66, 67, 1210, 236, 476, 477, 469, 1360, 471, 38, + 1077, 1076, 1390, 54, 678, 677, 1393, 486, 1073, 799, + 898, 895, 896, 1410, 894, 1351, 208, 855, 1414, 208, + 1303, 1070, 1004, 1006, 453, 208, 442, 1072, 468, 470, + 197, 208, 1078, 1305, 81, 1311, 81, 681, 81, 81, + 670, 81, 857, 81, 857, 905, 908, 196, 1150, 1149, + 1148, 438, 81, 472, 445, 473, 474, 210, 475, 198, + 478, 549, 550, 1340, 31, 32, 34, 33, 36, 488, + 50, 1029, 912, 1238, 1084, 911, 449, 963, 939, 1178, + 711, 900, 81, 517, 838, 265, 501, 459, 202, 703, + 1098, 37, 44, 45, 489, 490, 46, 47, 35, 1005, + 857, 1304, 1336, 899, 537, 527, 1121, 871, 537, 708, + 920, 39, 40, 1349, 41, 42, 466, 502, 436, 1408, + 547, 512, 1409, 1071, 1407, 1069, 1367, 1100, 1321, 436, + 1179, 598, 958, 957, 1061, 956, 1312, 1310, 856, 447, + 856, 448, 746, 208, 208, 208, 904, 1173, 791, 81, + 1138, 434, 511, 510, 1354, 81, 744, 745, 743, 906, + 1102, 70, 1106, 1059, 1101, 591, 1099, 205, 612, 512, + 704, 1104, 511, 510, 596, 714, 715, 672, 507, 1123, + 1103, 441, 511, 510, 455, 456, 457, 1415, 919, 512, + 511, 510, 333, 1105, 1107, 510, 856, 71, 326, 512, + 53, 853, 851, 437, 852, 439, 860, 512, 710, 849, + 855, 512, 861, 791, 503, 972, 577, 578, 579, 580, + 581, 582, 583, 511, 510, 600, 1416, 729, 731, 732, + 1060, 1034, 606, 730, 1373, 1065, 1062, 1055, 1063, 1058, + 512, 1265, 1264, 1056, 1057, 709, 528, 529, 530, 531, + 532, 533, 534, 527, 194, 208, 537, 1064, 443, 444, + 81, 54, 511, 510, 1049, 208, 208, 81, 1048, 1037, + 208, 742, 763, 208, 764, 1375, 208, 669, 22, 512, + 208, 1350, 81, 81, 676, 1286, 1262, 81, 81, 81, + 81, 81, 81, 936, 937, 938, 1081, 81, 81, 691, + 692, 1018, 1046, 1019, 693, 694, 695, 696, 697, 698, + 1308, 1392, 1378, 492, 699, 700, 1308, 1363, 690, 322, + 323, 1347, 1308, 492, 492, 81, 1195, 446, 1029, 208, + 451, 1308, 1341, 1308, 1307, 81, 458, 1024, 250, 1253, + 1252, 716, 460, 765, 530, 531, 532, 533, 534, 527, + 687, 688, 537, 682, 1240, 492, 1237, 492, 1185, 1184, + 1376, 551, 552, 553, 554, 555, 556, 557, 558, 1181, + 1182, 741, 1181, 1180, 1318, 740, 737, 951, 492, 81, + 686, 736, 526, 525, 535, 536, 528, 529, 530, 531, + 532, 533, 534, 527, 802, 492, 537, 673, 491, 718, + 774, 492, 24, 671, 668, 619, 618, 1317, 733, 735, + 208, 781, 785, 603, 24, 461, 454, 792, 208, 208, + 1314, 1125, 208, 208, 1137, 1137, 81, 1175, 1010, 776, + 1289, 858, 58, 1010, 825, 946, 602, 774, 980, 81, + 766, 767, 981, 826, 1233, 777, 778, 1320, 596, 1087, + 54, 787, 596, 795, 590, 604, 599, 602, 788, 802, + 967, 801, 54, 965, 962, 794, 960, 796, 797, 333, + 24, 802, 951, 1183, 299, 51, 1137, 807, 810, 811, + 812, 808, 842, 809, 813, 824, 802, 1141, 1142, 1020, + 829, 208, 81, 951, 81, 828, 830, 951, 81, 81, + 602, 208, 208, 845, 966, 208, 81, 964, 961, 890, + 959, 892, 886, 807, 810, 811, 812, 808, 54, 809, + 813, 605, 208, 916, 208, 208, 51, 208, 712, 680, + 252, 54, 1384, 1357, 251, 872, 873, 874, 1271, 866, + 867, 868, 869, 1260, 865, 1075, 882, 883, 1245, 288, + 287, 290, 291, 292, 293, 877, 878, 879, 289, 294, + 885, 1166, 1141, 1142, 1401, 1023, 620, 881, 876, 875, + 737, 888, 1397, 1168, 1144, 736, 674, 675, 54, 1125, + 1050, 679, 706, 684, 326, 997, 999, 685, 811, 812, + 998, 928, 995, 929, 741, 724, 1147, 996, 740, 1146, + 994, 993, 256, 257, 935, 738, 1388, 1381, 747, 748, + 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, + 759, 760, 761, 208, 208, 208, 208, 208, 941, 1083, + 924, 1386, 934, 506, 933, 208, 1041, 494, 208, 617, + 725, 462, 208, 1033, 987, 1356, 208, 297, 504, 495, + 1355, 950, 1287, 596, 596, 596, 596, 596, 1031, 1025, + 1231, 81, 1267, 891, 982, 971, 683, 1011, 596, 969, + 815, 253, 254, 1021, 506, 1012, 596, 988, 932, 79, + 991, 989, 990, 776, 992, 247, 931, 1000, 464, 1325, + 464, 248, 464, 464, 1008, 464, 58, 464, 1324, 1273, + 1030, 1010, 1013, 485, 842, 701, 464, 1403, 1402, 81, + 81, 508, 1403, 1337, 1259, 335, 707, 60, 62, 601, + 55, 800, 1, 1026, 1027, 1395, 51, 1052, 1194, 1268, + 897, 1358, 1301, 1160, 827, 1040, 81, 1042, 1043, 1044, + 848, 546, 839, 69, 548, 1053, 1047, 433, 68, 1348, + 847, 208, 846, 1079, 1309, 1257, 859, 1035, 862, 1167, + 81, 1353, 1032, 625, 1066, 623, 624, 622, 1038, 1039, + 627, 626, 559, 621, 563, 564, 565, 566, 567, 568, + 569, 570, 571, 221, 574, 576, 576, 576, 576, 576, + 576, 576, 576, 584, 585, 586, 587, 1080, 597, 328, + 1091, 814, 889, 1089, 81, 81, 1120, 613, 1090, 1126, + 887, 1108, 913, 914, 1096, 509, 915, 72, 1068, 1109, + 1067, 893, 737, 987, 479, 480, 223, 1114, 81, 545, + 942, 943, 944, 917, 1136, 930, 1129, 1014, 923, 1145, + 334, 81, 1132, 81, 81, 713, 1152, 498, 1323, 1131, + 1272, 970, 572, 789, 273, 1159, 728, 286, 261, 283, + 1154, 335, 285, 335, 284, 335, 335, 719, 335, 1151, + 335, 208, 1164, 1165, 1163, 979, 1158, 519, 271, 335, + 263, 595, 588, 806, 842, 804, 842, 803, 208, 1143, + 1139, 594, 1086, 1228, 81, 1334, 723, 81, 81, 208, + 26, 717, 59, 1176, 1177, 81, 1187, 258, 208, 515, + 19, 18, 17, 20, 464, 16, 15, 14, 1188, 450, + 1190, 464, 30, 21, 1199, 13, 12, 11, 10, 1201, + 9, 8, 7, 6, 5, 1200, 464, 464, 596, 4, + 249, 464, 464, 464, 464, 464, 464, 1208, 1089, 23, + 2, 464, 464, 0, 0, 0, 1225, 492, 0, 773, + 775, 0, 0, 0, 0, 1232, 0, 0, 0, 0, + 0, 0, 0, 1241, 0, 793, 335, 0, 1242, 81, + 987, 0, 614, 0, 0, 0, 0, 81, 0, 0, + 0, 1021, 1251, 0, 526, 525, 535, 536, 528, 529, + 530, 531, 532, 533, 534, 527, 0, 81, 537, 1205, + 1206, 0, 1207, 0, 81, 1209, 0, 1211, 0, 0, + 0, 0, 842, 51, 1266, 0, 0, 0, 0, 0, + 0, 0, 1093, 1094, 0, 0, 0, 0, 563, 0, + 0, 0, 0, 0, 0, 1110, 1111, 1112, 1113, 0, + 1115, 1116, 1117, 1118, 0, 0, 0, 1270, 81, 81, + 0, 81, 1085, 0, 0, 0, 81, 0, 81, 81, + 81, 208, 817, 1254, 81, 1296, 597, 1297, 1298, 1299, + 1288, 1295, 1261, 0, 1263, 1300, 0, 335, 1129, 1306, + 0, 0, 81, 0, 335, 0, 0, 0, 0, 0, + 0, 1322, 1290, 0, 0, 0, 496, 500, 1274, 335, + 335, 0, 0, 0, 335, 335, 335, 335, 335, 335, + 0, 1338, 0, 518, 335, 335, 1315, 0, 1316, 81, + 0, 0, 1346, 0, 1345, 0, 0, 0, 0, 0, + 0, 81, 81, 0, 1129, 0, 464, 1361, 464, 0, + 0, 0, 720, 1365, 1362, 0, 0, 1339, 562, 0, + 464, 81, 515, 0, 948, 335, 1370, 573, 949, 0, + 0, 0, 208, 0, 0, 953, 954, 955, 1203, 0, + 987, 81, 1186, 0, 1270, 842, 968, 0, 0, 1380, + 0, 974, 0, 975, 976, 977, 978, 0, 0, 1189, + 0, 0, 0, 1385, 1387, 81, 768, 0, 0, 0, + 1198, 940, 0, 0, 1389, 1002, 783, 783, 1400, 521, + 0, 524, 783, 0, 0, 1411, 0, 538, 539, 540, + 541, 542, 543, 544, 1092, 522, 523, 520, 526, 525, + 535, 536, 528, 529, 530, 531, 532, 533, 534, 527, + 0, 0, 537, 335, 526, 525, 535, 536, 528, 529, + 530, 531, 532, 533, 534, 527, 335, 0, 537, 0, + 0, 0, 0, 983, 984, 0, 0, 597, 597, 597, + 597, 597, 0, 218, 0, 0, 0, 0, 0, 0, + 0, 0, 817, 0, 1007, 0, 0, 0, 0, 0, + 597, 0, 1276, 1277, 0, 1278, 1279, 231, 1280, 1281, + 0, 1282, 1283, 1284, 0, 0, 0, 0, 0, 335, + 0, 335, 0, 0, 0, 909, 910, 0, 0, 0, + 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, + 0, 0, 497, 0, 705, 0, 0, 0, 0, 1095, + 0, 0, 0, 0, 0, 1222, 492, 0, 211, 335, + 0, 0, 0, 0, 464, 214, 0, 0, 0, 726, + 727, 0, 0, 222, 217, 0, 0, 0, 206, 0, + 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, + 464, 0, 0, 526, 525, 535, 536, 528, 529, 530, + 531, 532, 533, 534, 527, 220, 262, 537, 0, 206, + 0, 230, 0, 0, 206, 0, 206, 0, 0, 0, + 0, 0, 562, 0, 0, 779, 780, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 212, 525, 535, + 536, 528, 529, 530, 531, 532, 533, 534, 527, 783, + 0, 537, 0, 0, 0, 0, 1130, 0, 51, 0, + 0, 0, 0, 0, 224, 215, 0, 225, 226, 227, + 229, 836, 228, 234, 0, 0, 0, 216, 219, 0, + 213, 233, 232, 1374, 1404, 0, 0, 0, 335, 1202, + 0, 0, 0, 0, 0, 0, 1204, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1213, 1214, 1215, + 0, 1218, 0, 0, 1221, 0, 1224, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, + 1235, 1236, 0, 1239, 1219, 492, 1051, 335, 206, 0, + 0, 206, 0, 0, 0, 0, 0, 206, 0, 0, + 1250, 0, 0, 206, 0, 0, 0, 1216, 492, 0, + 1226, 0, 597, 335, 0, 0, 0, 0, 925, 926, + 0, 500, 526, 525, 535, 536, 528, 529, 530, 531, + 532, 533, 534, 527, 0, 0, 537, 335, 0, 0, + 0, 0, 0, 0, 1227, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, + 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1247, 1248, 1249, 0, 1285, 783, 0, + 0, 1133, 1135, 952, 526, 525, 535, 536, 528, 529, + 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, + 973, 0, 0, 0, 0, 1135, 0, 0, 0, 0, + 0, 464, 0, 0, 0, 206, 206, 206, 335, 0, + 335, 1162, 0, 0, 0, 1326, 1327, 1328, 1329, 1330, + 1331, 1332, 1333, 535, 536, 528, 529, 530, 531, 532, + 533, 534, 527, 0, 0, 537, 1342, 1343, 1344, 0, + 0, 0, 0, 0, 0, 0, 0, 492, 1130, 0, + 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1191, 0, 0, 1196, 1197, 0, 0, 0, 0, + 0, 0, 335, 1366, 0, 0, 0, 0, 1371, 0, + 0, 1223, 1319, 0, 526, 525, 535, 536, 528, 529, + 530, 531, 532, 533, 534, 527, 0, 1377, 537, 0, + 0, 0, 0, 0, 1130, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 206, 0, 1082, + 0, 0, 0, 0, 0, 783, 0, 206, 206, 0, + 0, 0, 206, 0, 0, 206, 1220, 0, 206, 0, + 0, 0, 689, 1412, 1413, 0, 335, 0, 0, 0, + 0, 0, 0, 0, 1256, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, + 0, 1122, 0, 0, 335, 0, 0, 0, 0, 0, + 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, + 689, 0, 0, 0, 0, 0, 0, 0, 1398, 1153, 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 832, 833, 537, 831, 244, 1168, 1169, 1170, - 63, 64, 65, 66, 67, 1173, 1171, 903, 203, 199, - 200, 201, 205, 243, 1015, 484, 195, 1014, 197, 275, - 1016, 902, 1035, 485, 482, 483, 863, 1257, 871, 464, - 1274, 1211, 1209, 237, 477, 478, 1076, 1075, 470, 678, - 472, 677, 1392, 327, 1350, 334, 1389, 1359, 438, 907, - 440, 1072, 453, 799, 855, 1413, 1409, 454, 901, 443, - 197, 1302, 1077, 681, 670, 1149, 208, 1148, 1310, 208, - 469, 471, 1147, 439, 1304, 208, 446, 210, 857, 1003, - 1005, 208, 857, 198, 81, 703, 81, 1097, 81, 81, - 1339, 81, 1237, 81, 912, 1069, 1083, 911, 549, 550, - 962, 1071, 938, 81, 838, 711, 857, 1028, 898, 895, - 896, 196, 894, 530, 531, 532, 533, 534, 527, 450, - 537, 537, 517, 460, 1099, 527, 708, 512, 537, 202, - 510, 1348, 465, 81, 465, 437, 465, 465, 1320, 465, - 501, 465, 1303, 905, 908, 864, 512, 1177, 502, 1335, - 437, 465, 70, 1137, 489, 490, 1004, 1101, 467, 1105, - 871, 1100, 1407, 1098, 612, 1408, 704, 1406, 1103, 1311, - 1309, 51, 447, 1366, 856, 452, 1060, 1102, 856, 900, - 1172, 459, 448, 435, 449, 1120, 546, 461, 71, 548, - 1104, 1106, 511, 510, 208, 208, 208, 1070, 1178, 1068, - 81, 899, 856, 791, 672, 1058, 81, 853, 851, 512, - 852, 920, 791, 1033, 971, 849, 855, 559, 771, 563, - 564, 565, 566, 567, 568, 569, 570, 571, 503, 574, - 576, 576, 576, 576, 576, 576, 576, 576, 584, 585, - 586, 587, 591, 597, 904, 473, 1353, 474, 475, 1414, - 476, 507, 479, 491, 456, 457, 458, 906, 1372, 746, - 714, 715, 488, 577, 578, 579, 580, 581, 582, 583, - 1264, 600, 1059, 744, 745, 743, 606, 1064, 1061, 1054, - 1062, 1057, 710, 1263, 1048, 1055, 1056, 1047, 1415, 919, - 547, 528, 529, 530, 531, 532, 533, 534, 527, 1063, - 590, 537, 599, 935, 936, 937, 208, 334, 511, 510, - 956, 81, 955, 957, 860, 442, 208, 208, 81, 709, - 861, 208, 54, 1036, 208, 512, 763, 208, 764, 511, - 510, 208, 742, 81, 81, 22, 511, 510, 81, 81, - 81, 81, 81, 81, 596, 1017, 512, 1018, 81, 81, - 1346, 1374, 194, 512, 1349, 511, 510, 208, 1285, 465, - 1261, 262, 1122, 511, 510, 1080, 465, 1045, 690, 1307, - 1391, 492, 512, 1377, 492, 81, 1307, 1362, 1375, 208, - 512, 465, 465, 1307, 492, 81, 465, 465, 465, 465, - 465, 465, 444, 445, 1194, 251, 465, 465, 1028, 682, - 1023, 688, 765, 716, 729, 731, 732, 1307, 1340, 1317, - 730, 687, 620, 1307, 1306, 1316, 298, 323, 324, 1252, - 1251, 740, 674, 675, 686, 737, 673, 679, 671, 81, - 327, 1239, 492, 685, 535, 536, 528, 529, 530, 531, - 532, 533, 534, 527, 1236, 492, 537, 718, 79, 781, - 785, 1184, 1183, 1180, 1181, 792, 733, 668, 735, 776, - 208, 1180, 1179, 705, 950, 492, 24, 51, 208, 208, - 669, 462, 208, 208, 802, 492, 81, 676, 774, 492, - 619, 618, 563, 455, 336, 725, 766, 767, 1313, 81, - 979, 1174, 691, 692, 980, 736, 58, 693, 694, 695, - 696, 697, 698, 1009, 1009, 858, 788, 699, 700, 825, - 1124, 602, 795, 1136, 54, 54, 817, 1136, 1086, 826, - 597, 966, 24, 289, 288, 291, 292, 293, 294, 603, - 774, 824, 290, 295, 964, 1232, 950, 872, 873, 874, - 741, 208, 81, 829, 81, 828, 802, 1136, 81, 81, - 1288, 208, 208, 845, 886, 208, 81, 807, 810, 811, - 812, 808, 950, 809, 813, 965, 800, 1140, 1141, 961, - 54, 604, 208, 602, 208, 208, 959, 801, 963, 827, - 24, 1319, 802, 334, 1182, 1019, 830, 950, 602, 605, - 465, 712, 465, 680, 253, 1383, 842, 882, 883, 1356, - 1270, 1074, 802, 1259, 465, 865, 1244, 885, 1165, 1022, - 496, 500, 888, 960, 1140, 1141, 923, 596, 881, 737, - 958, 596, 876, 875, 1400, 1396, 724, 518, 54, 1167, - 336, 1143, 336, 1124, 336, 336, 1049, 336, 684, 336, - 996, 486, 54, 927, 740, 997, 928, 889, 994, 336, - 1146, 1145, 993, 995, 992, 939, 1387, 913, 914, 257, - 258, 915, 562, 998, 1380, 811, 812, 1082, 506, 940, - 1385, 573, 933, 208, 208, 208, 208, 208, 917, 515, - 932, 494, 986, 504, 1040, 208, 617, 463, 208, 736, - 1032, 1355, 208, 495, 981, 1354, 208, 1286, 1030, 1024, - 1230, 890, 1266, 892, 891, 683, 815, 254, 255, 506, - 248, 81, 931, 776, 970, 916, 1324, 982, 983, 249, - 930, 597, 597, 597, 597, 597, 988, 989, 1020, 991, - 58, 987, 1323, 1272, 990, 999, 817, 1007, 1006, 1011, - 1009, 487, 701, 1010, 597, 508, 336, 1402, 1401, 1402, - 1336, 1012, 614, 1258, 707, 60, 717, 62, 601, 81, - 81, 55, 1, 741, 1394, 1039, 1193, 1041, 1042, 1043, - 1037, 1038, 1267, 897, 866, 867, 868, 869, 1029, 1357, - 1025, 1026, 1300, 777, 778, 1159, 81, 848, 839, 787, - 877, 878, 879, 1046, 69, 807, 810, 811, 812, 808, - 208, 809, 813, 794, 1052, 796, 797, 434, 465, 81, - 1065, 68, 1347, 847, 773, 775, 846, 1308, 842, 1256, - 859, 1034, 596, 596, 596, 596, 596, 862, 1166, 1079, - 793, 1352, 1031, 625, 465, 623, 624, 596, 622, 627, - 626, 621, 221, 329, 814, 596, 613, 887, 509, 706, - 1095, 72, 1067, 81, 81, 1090, 1125, 336, 1119, 1066, - 986, 893, 1108, 480, 336, 1107, 1089, 481, 223, 545, - 737, 929, 726, 727, 1013, 335, 1131, 81, 1130, 336, - 336, 1128, 266, 713, 336, 336, 336, 336, 336, 336, - 81, 498, 81, 81, 336, 336, 1144, 1135, 1151, 1129, - 1322, 51, 1271, 969, 572, 1150, 1084, 789, 274, 1158, - 728, 287, 1157, 284, 286, 285, 1088, 1162, 719, 1051, - 208, 720, 978, 1153, 519, 562, 272, 264, 779, 780, - 595, 515, 1175, 1176, 336, 588, 806, 208, 804, 803, - 1113, 1142, 934, 81, 1138, 1078, 81, 81, 208, 1163, - 1164, 594, 1085, 1227, 81, 1333, 723, 208, 26, 59, - 259, 19, 18, 17, 1186, 20, 16, 15, 14, 451, - 30, 1198, 21, 13, 836, 768, 1187, 12, 1189, 11, - 10, 9, 8, 7, 6, 783, 783, 5, 1207, 949, - 4, 783, 250, 23, 2, 0, 0, 842, 1199, 842, - 0, 0, 0, 0, 1200, 597, 0, 968, 0, 0, - 0, 1231, 0, 0, 0, 0, 0, 986, 0, 947, - 0, 0, 336, 948, 0, 1240, 1185, 1241, 81, 0, - 952, 953, 954, 0, 0, 336, 81, 1226, 0, 0, - 0, 967, 0, 1188, 0, 1020, 973, 0, 974, 975, - 976, 977, 0, 1250, 1197, 0, 81, 0, 0, 0, - 0, 1088, 0, 81, 0, 0, 1246, 1247, 1248, 0, - 1001, 924, 925, 0, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 1260, 0, 1262, 0, 0, 336, 0, - 336, 0, 0, 0, 909, 910, 0, 0, 0, 0, - 0, 0, 336, 0, 465, 0, 596, 81, 81, 1273, - 81, 0, 0, 0, 0, 81, 0, 81, 81, 81, - 208, 0, 1295, 81, 1296, 1297, 1298, 0, 336, 0, - 1287, 1289, 0, 1128, 0, 842, 951, 1305, 1299, 0, - 0, 81, 1294, 0, 0, 0, 0, 0, 1321, 0, - 0, 1129, 0, 972, 1290, 1314, 0, 1315, 0, 551, - 552, 553, 554, 555, 556, 557, 558, 0, 0, 0, - 1269, 1337, 0, 0, 0, 0, 0, 0, 81, 0, - 0, 0, 1345, 1344, 0, 1318, 1338, 0, 0, 1128, - 81, 81, 0, 0, 0, 0, 0, 0, 1360, 0, - 0, 0, 0, 1094, 1364, 0, 0, 1129, 1361, 51, - 81, 0, 0, 1369, 0, 1265, 0, 986, 783, 0, - 0, 208, 0, 0, 0, 0, 0, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 1379, 0, - 0, 0, 0, 1204, 1205, 0, 1206, 0, 0, 1208, - 0, 1210, 1384, 1386, 81, 0, 0, 336, 0, 0, - 0, 1388, 0, 0, 0, 0, 0, 1399, 0, 0, - 0, 0, 0, 0, 1410, 0, 0, 0, 0, 0, - 0, 0, 1081, 0, 0, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 1269, 842, 537, - 0, 0, 0, 0, 0, 1050, 336, 1253, 497, 0, - 0, 1397, 0, 0, 0, 0, 24, 25, 52, 27, - 28, 0, 0, 0, 0, 0, 0, 1373, 0, 0, - 0, 0, 336, 1121, 0, 43, 0, 0, 945, 0, - 29, 48, 49, 1201, 206, 0, 0, 236, 0, 0, - 1203, 0, 0, 0, 0, 336, 0, 0, 0, 0, - 38, 1212, 1213, 1214, 54, 1217, 0, 0, 1220, 0, - 1223, 1152, 263, 0, 0, 206, 0, 0, 0, 336, - 206, 0, 206, 1233, 1234, 1235, 1225, 1238, 0, 0, - 0, 0, 0, 0, 0, 0, 783, 0, 0, 1132, - 1134, 0, 738, 0, 1249, 747, 748, 749, 750, 751, - 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, - 0, 0, 0, 1134, 0, 31, 32, 34, 33, 36, - 0, 50, 0, 0, 0, 0, 336, 0, 336, 1161, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 44, 45, 0, 0, 46, 47, 35, + 534, 527, 0, 0, 537, 1292, 1293, 0, 1294, 0, + 0, 0, 0, 1256, 0, 1256, 1256, 1256, 0, 0, + 0, 1162, 262, 0, 0, 0, 0, 262, 262, 0, + 0, 784, 784, 262, 0, 0, 0, 784, 0, 1256, + 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, + 262, 0, 206, 642, 0, 0, 0, 0, 0, 0, + 206, 822, 0, 0, 206, 206, 0, 0, 0, 0, + 947, 0, 0, 0, 0, 0, 1352, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 335, 335, 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 39, 40, 537, 41, 42, 0, 0, 0, - 0, 1284, 0, 0, 1229, 0, 0, 0, 0, 1190, - 0, 562, 1195, 1196, 218, 0, 0, 0, 0, 1242, - 336, 0, 1243, 0, 206, 1245, 0, 206, 0, 0, - 0, 0, 0, 206, 0, 0, 0, 0, 232, 206, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1325, - 1326, 1327, 1328, 1329, 1330, 1331, 1332, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1341, 1342, 1343, 783, 0, 0, 0, 0, 0, 0, - 0, 53, 0, 0, 0, 0, 0, 0, 0, 211, - 0, 0, 0, 0, 336, 0, 214, 0, 0, 0, - 0, 0, 1255, 0, 222, 217, 0, 1365, 0, 0, - 0, 0, 1370, 0, 0, 0, 0, 1224, 492, 0, - 0, 0, 336, 0, 0, 0, 0, 0, 0, 336, - 0, 1376, 0, 0, 0, 0, 220, 0, 0, 224, - 0, 0, 231, 0, 0, 0, 0, 941, 942, 943, - 0, 0, 206, 206, 206, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 212, 537, - 0, 0, 0, 1291, 1292, 0, 1293, 1411, 1412, 1221, - 492, 1255, 0, 1255, 1255, 1255, 0, 0, 0, 1161, - 0, 0, 0, 0, 0, 225, 215, 0, 226, 227, - 228, 0, 230, 229, 235, 1363, 562, 1255, 216, 219, - 0, 213, 234, 233, 0, 0, 0, 526, 525, 535, - 536, 528, 529, 530, 531, 532, 533, 534, 527, 0, - 0, 537, 526, 525, 535, 536, 528, 529, 530, 531, - 532, 533, 534, 527, 1351, 0, 537, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 336, 336, 0, 1218, - 492, 0, 0, 0, 206, 0, 0, 0, 0, 0, - 0, 0, 0, 783, 206, 206, 1371, 0, 0, 206, - 0, 0, 206, 1215, 492, 206, 0, 0, 0, 689, - 0, 0, 0, 0, 0, 642, 1378, 526, 525, 535, - 536, 528, 529, 530, 531, 532, 533, 534, 527, 0, - 0, 537, 0, 0, 0, 206, 0, 0, 0, 0, - 1255, 526, 525, 535, 536, 528, 529, 530, 531, 532, - 533, 534, 527, 0, 0, 537, 0, 206, 492, 0, - 0, 0, 0, 0, 0, 0, 689, 0, 1092, 1093, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1109, 1110, 1111, 1112, 0, 1114, 1115, 1116, 1117, - 0, 0, 0, 630, 0, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 263, 537, - 0, 0, 0, 263, 263, 0, 0, 784, 784, 263, - 1222, 0, 0, 784, 0, 0, 0, 0, 0, 0, - 643, 0, 0, 263, 263, 263, 263, 0, 206, 0, - 0, 0, 0, 0, 0, 0, 206, 822, 0, 0, - 206, 206, 656, 657, 658, 659, 660, 661, 662, 0, - 663, 664, 665, 666, 667, 644, 645, 646, 647, 628, - 629, 0, 0, 631, 0, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 648, 649, 650, 651, 652, - 653, 654, 655, 0, 526, 525, 535, 536, 528, 529, + 534, 527, 1230, 0, 537, 783, 0, 0, 1372, 562, + 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, + 1244, 0, 0, 1246, 0, 0, 0, 0, 1379, 0, + 0, 630, 0, 206, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 206, 206, 0, 0, 206, 0, 0, + 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, + 1217, 0, 0, 0, 206, 0, 921, 922, 643, 206, + 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, + 656, 657, 658, 659, 660, 661, 662, 0, 663, 664, + 665, 666, 667, 644, 645, 646, 647, 628, 629, 0, + 0, 631, 0, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 648, 649, 650, 651, 652, 653, 654, + 655, 0, 0, 262, 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, - 0, 0, 0, 0, 1202, 1091, 0, 1219, 0, 206, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, - 206, 0, 1216, 206, 0, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, - 206, 0, 921, 922, 0, 0, 0, 521, 0, 524, - 689, 0, 0, 0, 0, 538, 539, 540, 541, 542, - 543, 544, 263, 522, 523, 520, 526, 525, 535, 536, - 528, 529, 530, 531, 532, 533, 534, 527, 0, 0, - 537, 526, 525, 535, 536, 528, 529, 530, 531, 532, - 533, 534, 527, 0, 0, 537, 526, 525, 535, 536, - 528, 529, 530, 531, 532, 533, 534, 527, 0, 263, - 537, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 0, 0, 537, 0, 0, 263, 1275, 1276, - 0, 1277, 1278, 0, 1279, 1280, 0, 1281, 1282, 1283, - 784, 206, 206, 206, 206, 206, 946, 0, 0, 0, - 0, 0, 0, 1000, 0, 0, 206, 0, 0, 0, - 822, 0, 0, 0, 206, 0, 526, 525, 535, 536, - 528, 529, 530, 531, 532, 533, 534, 527, 0, 0, - 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 784, 206, 206, 206, 206, 206, + 0, 0, 0, 0, 0, 0, 0, 1001, 0, 0, + 206, 0, 0, 0, 822, 0, 0, 0, 206, 0, + 0, 526, 525, 535, 536, 528, 529, 530, 531, 532, + 533, 534, 527, 1364, 562, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -946,437 +954,338 @@ 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, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, - 1403, 0, 0, 0, 0, 0, 0, 0, 784, 138, - 0, 0, 0, 0, 270, 0, 0, 0, 102, 0, - 267, 0, 0, 0, 119, 310, 121, 0, 0, 158, - 130, 0, 0, 0, 0, 301, 302, 0, 0, 0, - 0, 0, 0, 834, 0, 54, 0, 0, 268, 289, - 288, 291, 292, 293, 294, 0, 0, 95, 290, 295, - 296, 297, 835, 0, 0, 265, 282, 0, 309, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 279, 280, - 0, 0, 0, 0, 321, 206, 281, 0, 0, 276, - 277, 278, 283, 0, 0, 0, 206, 0, 0, 0, - 0, 0, 108, 0, 0, 206, 209, 0, 0, 319, - 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, - 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, - 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, - 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, - 160, 128, 114, 115, 85, 784, 149, 101, 106, 100, - 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, - 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, - 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, - 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, - 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, - 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, - 97, 175, 157, 311, 320, 317, 318, 315, 316, 314, - 313, 312, 322, 303, 304, 305, 306, 308, 0, 307, - 82, 0, 120, 190, 147, 105, 177, 0, 0, 0, + 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 822, 0, - 0, 0, 422, 413, 0, 384, 425, 362, 376, 433, - 377, 378, 406, 348, 392, 138, 374, 0, 365, 343, - 371, 344, 363, 386, 102, 389, 361, 415, 395, 424, - 119, 431, 121, 400, 0, 158, 130, 0, 0, 388, - 417, 390, 411, 383, 407, 353, 399, 426, 375, 404, - 427, 0, 0, 0, 80, 0, 843, 844, 0, 0, - 0, 0, 0, 95, 0, 402, 421, 373, 403, 405, - 342, 401, 0, 346, 349, 432, 419, 368, 369, 1021, - 0, 0, 0, 0, 0, 784, 387, 391, 408, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 366, 206, - 398, 0, 0, 0, 350, 347, 0, 0, 385, 0, - 0, 0, 352, 0, 367, 409, 0, 341, 108, 412, - 418, 382, 209, 420, 380, 379, 423, 145, 0, 161, - 110, 118, 83, 89, 0, 109, 136, 150, 154, 416, - 364, 372, 98, 370, 152, 140, 174, 397, 141, 151, - 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, - 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, - 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, - 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, - 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, - 144, 112, 132, 131, 133, 0, 345, 0, 159, 176, - 193, 93, 360, 164, 183, 184, 185, 186, 187, 188, - 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, - 116, 123, 148, 191, 139, 153, 97, 175, 157, 356, - 359, 354, 355, 393, 394, 428, 429, 430, 410, 351, - 0, 357, 358, 0, 414, 396, 82, 0, 120, 190, - 147, 105, 177, 422, 413, 0, 384, 425, 362, 376, - 433, 377, 378, 406, 348, 392, 138, 374, 0, 365, - 343, 371, 344, 363, 386, 102, 389, 361, 415, 395, - 424, 119, 431, 121, 400, 0, 158, 130, 0, 0, - 388, 417, 390, 411, 383, 407, 353, 399, 426, 375, - 404, 427, 0, 0, 0, 80, 0, 843, 844, 0, - 0, 0, 0, 0, 95, 0, 402, 421, 373, 403, - 405, 342, 401, 0, 346, 349, 432, 419, 368, 369, - 0, 0, 0, 0, 0, 0, 0, 387, 391, 408, - 381, 0, 0, 0, 0, 0, 0, 0, 0, 366, - 0, 398, 0, 0, 0, 350, 347, 0, 0, 385, - 0, 0, 0, 352, 0, 367, 409, 0, 341, 108, - 412, 418, 382, 209, 420, 380, 379, 423, 145, 0, - 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, - 416, 364, 372, 98, 370, 152, 140, 174, 397, 141, - 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, - 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, - 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, - 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, - 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, - 124, 144, 112, 132, 131, 133, 0, 345, 0, 159, - 176, 193, 93, 360, 164, 183, 184, 185, 186, 187, - 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, - 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, - 356, 359, 354, 355, 393, 394, 428, 429, 430, 410, - 351, 0, 357, 358, 0, 414, 396, 82, 0, 120, - 190, 147, 105, 177, 422, 413, 0, 384, 425, 362, - 376, 433, 377, 378, 406, 348, 392, 138, 374, 0, - 365, 343, 371, 344, 363, 386, 102, 389, 361, 415, - 395, 424, 119, 431, 121, 400, 0, 158, 130, 0, - 0, 388, 417, 390, 411, 383, 407, 353, 399, 426, - 375, 404, 427, 54, 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 0, 95, 0, 402, 421, 373, - 403, 405, 342, 401, 0, 346, 349, 432, 419, 368, - 369, 0, 0, 0, 0, 0, 0, 0, 387, 391, - 408, 381, 0, 0, 0, 0, 0, 0, 0, 0, - 366, 0, 398, 0, 0, 0, 350, 347, 0, 0, - 385, 0, 0, 0, 352, 0, 367, 409, 0, 341, - 108, 412, 418, 382, 209, 420, 380, 379, 423, 145, - 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, - 154, 416, 364, 372, 98, 370, 152, 140, 174, 397, - 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, - 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, - 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, - 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, - 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, - 143, 124, 144, 112, 132, 131, 133, 0, 345, 0, - 159, 176, 193, 93, 360, 164, 183, 184, 185, 186, - 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, - 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, - 157, 356, 359, 354, 355, 393, 394, 428, 429, 430, - 410, 351, 0, 357, 358, 0, 414, 396, 82, 0, - 120, 190, 147, 105, 177, 422, 413, 0, 384, 425, - 362, 376, 433, 377, 378, 406, 348, 392, 138, 374, - 0, 365, 343, 371, 344, 363, 386, 102, 389, 361, - 415, 395, 424, 119, 431, 121, 400, 0, 158, 130, - 0, 0, 388, 417, 390, 411, 383, 407, 353, 399, - 426, 375, 404, 427, 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 0, 402, 421, - 373, 403, 405, 342, 401, 0, 346, 349, 432, 419, - 368, 369, 0, 0, 0, 0, 0, 0, 0, 387, - 391, 408, 381, 0, 0, 0, 0, 0, 0, 1087, - 0, 366, 0, 398, 0, 0, 0, 350, 347, 0, - 0, 385, 0, 0, 0, 352, 0, 367, 409, 0, - 341, 108, 412, 418, 382, 209, 420, 380, 379, 423, - 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, - 150, 154, 416, 364, 372, 98, 370, 152, 140, 174, - 397, 141, 151, 122, 166, 146, 173, 181, 182, 163, - 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, - 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, - 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, - 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, - 111, 143, 124, 144, 112, 132, 131, 133, 0, 345, - 0, 159, 176, 193, 93, 360, 164, 183, 184, 185, - 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, - 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, - 175, 157, 356, 359, 354, 355, 393, 394, 428, 429, - 430, 410, 351, 0, 357, 358, 0, 414, 396, 82, - 0, 120, 190, 147, 105, 177, 422, 413, 0, 384, - 425, 362, 376, 433, 377, 378, 406, 348, 392, 138, - 374, 0, 365, 343, 371, 344, 363, 386, 102, 389, - 361, 415, 395, 424, 119, 431, 121, 400, 0, 158, - 130, 0, 0, 388, 417, 390, 411, 383, 407, 353, - 399, 426, 375, 404, 427, 0, 0, 0, 268, 0, - 0, 0, 0, 0, 0, 0, 0, 95, 0, 402, - 421, 373, 403, 405, 342, 401, 0, 346, 349, 432, - 419, 368, 369, 0, 0, 0, 0, 0, 0, 0, - 387, 391, 408, 381, 0, 0, 0, 0, 0, 0, - 734, 0, 366, 0, 398, 0, 0, 0, 350, 347, - 0, 0, 385, 0, 0, 0, 352, 0, 367, 409, - 0, 341, 108, 412, 418, 382, 209, 420, 380, 379, - 423, 145, 0, 161, 110, 118, 83, 89, 0, 109, - 136, 150, 154, 416, 364, 372, 98, 370, 152, 140, - 174, 397, 141, 151, 122, 166, 146, 173, 181, 182, - 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, - 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, - 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, - 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, - 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, - 345, 0, 159, 176, 193, 93, 360, 164, 183, 184, - 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, - 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, - 97, 175, 157, 356, 359, 354, 355, 393, 394, 428, - 429, 430, 410, 351, 0, 357, 358, 0, 414, 396, - 82, 0, 120, 190, 147, 105, 177, 422, 413, 0, - 384, 425, 362, 376, 433, 377, 378, 406, 348, 392, - 138, 374, 0, 365, 343, 371, 344, 363, 386, 102, - 389, 361, 415, 395, 424, 119, 431, 121, 400, 0, - 158, 130, 0, 0, 388, 417, 390, 411, 383, 407, - 353, 399, 426, 375, 404, 427, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, - 402, 421, 373, 403, 405, 342, 401, 0, 346, 349, - 432, 419, 368, 369, 0, 0, 0, 0, 0, 0, - 0, 387, 391, 408, 381, 0, 0, 0, 0, 0, - 0, 0, 0, 366, 0, 398, 0, 0, 0, 350, - 347, 0, 0, 385, 0, 0, 0, 352, 0, 367, - 409, 0, 341, 108, 412, 418, 382, 209, 420, 380, - 379, 423, 145, 0, 161, 110, 118, 83, 89, 0, - 109, 136, 150, 154, 416, 364, 372, 98, 370, 152, - 140, 174, 397, 141, 151, 122, 166, 146, 173, 181, + 0, 0, 0, 784, 138, 0, 0, 0, 0, 269, + 0, 0, 0, 102, 0, 266, 0, 0, 0, 119, + 309, 121, 0, 0, 158, 130, 0, 0, 0, 0, + 300, 301, 0, 0, 0, 0, 0, 0, 834, 0, + 54, 0, 0, 267, 288, 287, 290, 291, 292, 293, + 0, 0, 95, 289, 294, 295, 296, 835, 0, 0, + 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 279, 0, 0, 0, 0, 320, + 206, 280, 0, 0, 275, 276, 277, 282, 0, 0, + 0, 206, 0, 0, 0, 0, 0, 108, 0, 0, + 206, 209, 0, 0, 318, 0, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, + 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, + 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, + 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 784, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, + 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, + 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, + 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 310, 319, + 316, 317, 314, 315, 313, 312, 311, 321, 302, 303, + 304, 305, 307, 0, 306, 82, 0, 120, 190, 147, + 105, 177, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 822, 0, 0, 0, 421, 412, 0, + 383, 424, 361, 375, 432, 376, 377, 405, 347, 391, + 138, 373, 0, 364, 342, 370, 343, 362, 385, 102, + 388, 360, 414, 394, 423, 119, 430, 121, 399, 0, + 158, 130, 0, 0, 387, 416, 389, 410, 382, 406, + 352, 398, 425, 374, 403, 426, 0, 0, 0, 80, + 0, 843, 844, 0, 0, 0, 0, 0, 95, 0, + 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, + 431, 418, 367, 368, 1022, 0, 0, 0, 0, 0, + 784, 386, 390, 407, 380, 0, 0, 0, 0, 0, + 0, 0, 0, 365, 206, 397, 0, 0, 0, 349, + 346, 0, 0, 384, 0, 0, 0, 351, 0, 366, + 408, 0, 340, 108, 411, 417, 381, 209, 419, 379, + 378, 422, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 415, 363, 371, 98, 369, 152, + 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, - 0, 345, 0, 159, 176, 193, 93, 360, 164, 183, + 0, 344, 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, - 153, 97, 175, 157, 356, 359, 354, 355, 393, 394, - 428, 429, 430, 410, 351, 0, 357, 358, 0, 414, - 396, 82, 0, 120, 190, 147, 105, 177, 422, 413, - 0, 384, 425, 362, 376, 433, 377, 378, 406, 348, - 392, 138, 374, 0, 365, 343, 371, 344, 363, 386, - 102, 389, 361, 415, 395, 424, 119, 431, 121, 400, - 0, 158, 130, 0, 0, 388, 417, 390, 411, 383, - 407, 353, 399, 426, 375, 404, 427, 0, 0, 0, - 268, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 402, 421, 373, 403, 405, 342, 401, 0, 346, - 349, 432, 419, 368, 369, 0, 0, 0, 0, 0, - 0, 0, 387, 391, 408, 381, 0, 0, 0, 0, - 0, 0, 0, 0, 366, 0, 398, 0, 0, 0, - 350, 347, 0, 0, 385, 0, 0, 0, 352, 0, - 367, 409, 0, 341, 108, 412, 418, 382, 209, 420, - 380, 379, 423, 145, 0, 161, 110, 118, 83, 89, - 0, 109, 136, 150, 154, 416, 364, 372, 98, 370, - 152, 140, 174, 397, 141, 151, 122, 166, 146, 173, + 153, 97, 175, 157, 355, 358, 353, 354, 392, 393, + 427, 428, 429, 409, 350, 0, 356, 357, 0, 413, + 395, 82, 0, 120, 190, 147, 105, 177, 421, 412, + 0, 383, 424, 361, 375, 432, 376, 377, 405, 347, + 391, 138, 373, 0, 364, 342, 370, 343, 362, 385, + 102, 388, 360, 414, 394, 423, 119, 430, 121, 399, + 0, 158, 130, 0, 0, 387, 416, 389, 410, 382, + 406, 352, 398, 425, 374, 403, 426, 0, 0, 0, + 80, 0, 843, 844, 0, 0, 0, 0, 0, 95, + 0, 401, 420, 372, 402, 404, 341, 400, 0, 345, + 348, 431, 418, 367, 368, 0, 0, 0, 0, 0, + 0, 0, 386, 390, 407, 380, 0, 0, 0, 0, + 0, 0, 0, 0, 365, 0, 397, 0, 0, 0, + 349, 346, 0, 0, 384, 0, 0, 0, 351, 0, + 366, 408, 0, 340, 108, 411, 417, 381, 209, 419, + 379, 378, 422, 145, 0, 161, 110, 118, 83, 89, + 0, 109, 136, 150, 154, 415, 363, 371, 98, 369, + 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, - 133, 0, 345, 0, 159, 176, 193, 93, 360, 164, + 133, 0, 344, 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, - 139, 153, 97, 175, 157, 356, 359, 354, 355, 393, - 394, 428, 429, 430, 410, 351, 0, 357, 358, 0, - 414, 396, 82, 0, 120, 190, 147, 105, 177, 422, - 413, 0, 384, 425, 362, 376, 433, 377, 378, 406, - 348, 392, 138, 374, 0, 365, 343, 371, 344, 363, - 386, 102, 389, 361, 415, 395, 424, 119, 431, 121, - 400, 0, 158, 130, 0, 0, 388, 417, 390, 411, - 383, 407, 353, 399, 426, 375, 404, 427, 0, 0, + 139, 153, 97, 175, 157, 355, 358, 353, 354, 392, + 393, 427, 428, 429, 409, 350, 0, 356, 357, 0, + 413, 395, 82, 0, 120, 190, 147, 105, 177, 421, + 412, 0, 383, 424, 361, 375, 432, 376, 377, 405, + 347, 391, 138, 373, 0, 364, 342, 370, 343, 362, + 385, 102, 388, 360, 414, 394, 423, 119, 430, 121, + 399, 0, 158, 130, 0, 0, 387, 416, 389, 410, + 382, 406, 352, 398, 425, 374, 403, 426, 54, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 402, 421, 373, 403, 405, 342, 401, 0, - 346, 349, 432, 419, 368, 369, 0, 0, 0, 0, - 0, 0, 0, 387, 391, 408, 381, 0, 0, 0, - 0, 0, 0, 0, 0, 366, 0, 398, 0, 0, - 0, 350, 347, 0, 0, 385, 0, 0, 0, 352, - 0, 367, 409, 0, 341, 108, 412, 418, 382, 209, - 420, 380, 379, 423, 145, 0, 161, 110, 118, 83, - 89, 0, 109, 136, 150, 154, 416, 364, 372, 98, - 370, 152, 140, 174, 397, 141, 151, 122, 166, 146, + 95, 0, 401, 420, 372, 402, 404, 341, 400, 0, + 345, 348, 431, 418, 367, 368, 0, 0, 0, 0, + 0, 0, 0, 386, 390, 407, 380, 0, 0, 0, + 0, 0, 0, 0, 0, 365, 0, 397, 0, 0, + 0, 349, 346, 0, 0, 384, 0, 0, 0, 351, + 0, 366, 408, 0, 340, 108, 411, 417, 381, 209, + 419, 379, 378, 422, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 415, 363, 371, 98, + 369, 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, - 88, 339, 178, 135, 165, 171, 129, 126, 87, 169, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, - 131, 133, 0, 345, 0, 159, 176, 193, 93, 360, + 131, 133, 0, 344, 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, - 107, 103, 142, 340, 338, 113, 156, 116, 123, 148, - 191, 139, 153, 97, 175, 157, 356, 359, 354, 355, - 393, 394, 428, 429, 430, 410, 351, 0, 357, 358, - 0, 414, 396, 82, 0, 120, 190, 147, 105, 177, - 422, 413, 0, 384, 425, 362, 376, 433, 377, 378, - 406, 348, 392, 138, 374, 0, 365, 343, 371, 344, - 363, 386, 102, 389, 361, 415, 395, 424, 119, 431, - 121, 400, 0, 158, 130, 0, 0, 388, 417, 390, - 411, 383, 407, 353, 399, 426, 375, 404, 427, 0, - 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 402, 421, 373, 403, 405, 342, 401, - 0, 346, 349, 432, 419, 368, 369, 0, 0, 0, - 0, 0, 0, 0, 387, 391, 408, 381, 0, 0, - 0, 0, 0, 0, 0, 0, 366, 0, 398, 0, - 0, 0, 350, 347, 0, 0, 385, 0, 0, 0, - 352, 0, 367, 409, 0, 341, 108, 412, 418, 382, - 209, 420, 380, 379, 423, 145, 0, 161, 110, 118, - 83, 89, 0, 109, 136, 150, 154, 416, 364, 372, - 98, 370, 152, 140, 174, 397, 141, 151, 122, 166, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 355, 358, 353, 354, + 392, 393, 427, 428, 429, 409, 350, 0, 356, 357, + 0, 413, 395, 82, 0, 120, 190, 147, 105, 177, + 421, 412, 0, 383, 424, 361, 375, 432, 376, 377, + 405, 347, 391, 138, 373, 0, 364, 342, 370, 343, + 362, 385, 102, 388, 360, 414, 394, 423, 119, 430, + 121, 399, 0, 158, 130, 0, 0, 387, 416, 389, + 410, 382, 406, 352, 398, 425, 374, 403, 426, 0, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 401, 420, 372, 402, 404, 341, 400, + 0, 345, 348, 431, 418, 367, 368, 0, 0, 0, + 0, 0, 0, 0, 386, 390, 407, 380, 0, 0, + 0, 0, 0, 0, 1088, 0, 365, 0, 397, 0, + 0, 0, 349, 346, 0, 0, 384, 0, 0, 0, + 351, 0, 366, 408, 0, 340, 108, 411, 417, 381, + 209, 419, 379, 378, 422, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 415, 363, 371, + 98, 369, 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, - 132, 131, 133, 0, 345, 0, 159, 176, 193, 93, - 360, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 132, 131, 133, 0, 344, 0, 159, 176, 193, 93, + 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, - 148, 191, 139, 153, 97, 175, 157, 356, 359, 354, - 355, 393, 394, 428, 429, 430, 410, 351, 0, 357, - 358, 0, 414, 396, 82, 0, 120, 190, 147, 105, - 177, 422, 413, 0, 384, 425, 362, 376, 433, 377, - 378, 406, 348, 392, 138, 374, 0, 365, 343, 371, - 344, 363, 386, 102, 389, 361, 415, 395, 424, 119, - 431, 121, 400, 0, 158, 130, 0, 0, 388, 417, - 390, 411, 383, 407, 353, 399, 426, 375, 404, 427, - 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, - 0, 0, 95, 0, 402, 421, 373, 403, 405, 342, - 401, 0, 346, 349, 432, 419, 368, 369, 0, 0, - 0, 0, 0, 0, 0, 387, 391, 408, 381, 0, - 0, 0, 0, 0, 0, 0, 0, 366, 0, 398, - 0, 0, 0, 350, 347, 0, 0, 385, 0, 0, - 0, 352, 0, 367, 409, 0, 341, 108, 412, 418, - 382, 209, 420, 380, 379, 423, 145, 0, 161, 110, - 118, 83, 89, 0, 109, 136, 150, 154, 416, 364, - 372, 98, 370, 152, 140, 174, 397, 141, 151, 122, + 148, 191, 139, 153, 97, 175, 157, 355, 358, 353, + 354, 392, 393, 427, 428, 429, 409, 350, 0, 356, + 357, 0, 413, 395, 82, 0, 120, 190, 147, 105, + 177, 421, 412, 0, 383, 424, 361, 375, 432, 376, + 377, 405, 347, 391, 138, 373, 0, 364, 342, 370, + 343, 362, 385, 102, 388, 360, 414, 394, 423, 119, + 430, 121, 399, 0, 158, 130, 0, 0, 387, 416, + 389, 410, 382, 406, 352, 398, 425, 374, 403, 426, + 0, 0, 0, 267, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 0, 401, 420, 372, 402, 404, 341, + 400, 0, 345, 348, 431, 418, 367, 368, 0, 0, + 0, 0, 0, 0, 0, 386, 390, 407, 380, 0, + 0, 0, 0, 0, 0, 734, 0, 365, 0, 397, + 0, 0, 0, 349, 346, 0, 0, 384, 0, 0, + 0, 351, 0, 366, 408, 0, 340, 108, 411, 417, + 381, 209, 419, 379, 378, 422, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 415, 363, + 371, 98, 369, 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, - 607, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, - 90, 179, 88, 339, 178, 135, 165, 171, 129, 126, + 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, - 112, 132, 131, 133, 0, 345, 0, 159, 176, 193, - 93, 360, 164, 183, 184, 185, 186, 187, 188, 0, - 0, 94, 107, 103, 142, 340, 338, 113, 156, 116, - 123, 148, 191, 139, 153, 97, 175, 157, 356, 359, - 354, 355, 393, 394, 428, 429, 430, 410, 351, 0, - 357, 358, 0, 414, 396, 82, 0, 120, 190, 147, - 105, 177, 422, 413, 0, 384, 425, 362, 376, 433, - 377, 378, 406, 348, 392, 138, 374, 0, 365, 343, - 371, 344, 363, 386, 102, 389, 361, 415, 395, 424, - 119, 431, 121, 400, 0, 158, 130, 0, 0, 388, - 417, 390, 411, 383, 407, 353, 399, 426, 375, 404, - 427, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 402, 421, 373, 403, 405, - 342, 401, 0, 346, 349, 432, 419, 368, 369, 0, - 0, 0, 0, 0, 0, 0, 387, 391, 408, 381, - 0, 0, 0, 0, 0, 0, 0, 0, 366, 0, - 398, 0, 0, 0, 350, 347, 0, 0, 385, 0, - 0, 0, 352, 0, 367, 409, 0, 341, 108, 412, - 418, 382, 209, 420, 380, 379, 423, 145, 0, 161, - 110, 118, 83, 89, 0, 109, 136, 150, 154, 416, - 364, 372, 98, 370, 152, 140, 174, 397, 141, 151, + 112, 132, 131, 133, 0, 344, 0, 159, 176, 193, + 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 355, 358, + 353, 354, 392, 393, 427, 428, 429, 409, 350, 0, + 356, 357, 0, 413, 395, 82, 0, 120, 190, 147, + 105, 177, 421, 412, 0, 383, 424, 361, 375, 432, + 376, 377, 405, 347, 391, 138, 373, 0, 364, 342, + 370, 343, 362, 385, 102, 388, 360, 414, 394, 423, + 119, 430, 121, 399, 0, 158, 130, 0, 0, 387, + 416, 389, 410, 382, 406, 352, 398, 425, 374, 403, + 426, 0, 0, 0, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 0, 401, 420, 372, 402, 404, + 341, 400, 0, 345, 348, 431, 418, 367, 368, 0, + 0, 0, 0, 0, 0, 0, 386, 390, 407, 380, + 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, + 397, 0, 0, 0, 349, 346, 0, 0, 384, 0, + 0, 0, 351, 0, 366, 408, 0, 340, 108, 411, + 417, 381, 209, 419, 379, 378, 422, 145, 0, 161, + 110, 118, 83, 89, 0, 109, 136, 150, 154, 415, + 363, 371, 98, 369, 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, - 162, 330, 96, 155, 86, 170, 160, 128, 114, 115, + 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, - 192, 90, 179, 88, 339, 178, 135, 165, 171, 129, + 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, - 144, 112, 132, 131, 133, 0, 345, 0, 159, 176, - 193, 93, 360, 164, 183, 184, 185, 186, 187, 188, - 0, 0, 94, 107, 103, 142, 340, 338, 333, 332, - 116, 123, 148, 191, 139, 153, 97, 175, 157, 356, - 359, 354, 355, 393, 394, 428, 429, 430, 410, 351, - 0, 357, 358, 0, 414, 396, 82, 0, 120, 190, - 147, 105, 177, 138, 0, 0, 770, 0, 270, 0, - 0, 0, 102, 0, 267, 0, 0, 0, 119, 310, - 121, 0, 0, 158, 130, 0, 0, 0, 0, 301, - 302, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 268, 289, 288, 291, 292, 293, 294, 0, - 0, 95, 290, 295, 296, 297, 0, 0, 0, 265, - 282, 0, 309, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 279, 280, 261, 0, 0, 0, 321, 0, - 281, 0, 0, 276, 277, 278, 283, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, - 209, 0, 0, 319, 0, 145, 0, 161, 110, 118, - 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, - 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, - 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, - 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, - 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, - 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, - 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, - 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, - 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, - 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, - 148, 191, 139, 153, 97, 175, 157, 311, 320, 317, - 318, 315, 316, 314, 313, 312, 322, 303, 304, 305, - 306, 308, 0, 307, 82, 0, 120, 190, 147, 105, - 177, 138, 0, 0, 0, 0, 270, 0, 0, 0, - 102, 0, 267, 0, 0, 0, 119, 310, 121, 0, - 0, 158, 130, 0, 0, 0, 0, 301, 302, 0, - 0, 0, 0, 0, 0, 0, 0, 54, 0, 492, - 268, 289, 288, 291, 292, 293, 294, 0, 0, 95, - 290, 295, 296, 297, 0, 0, 0, 265, 282, 0, - 309, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 279, 280, 0, 0, 0, 0, 321, 0, 281, 0, - 0, 276, 277, 278, 283, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, - 0, 319, 0, 145, 0, 161, 110, 118, 83, 89, - 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, - 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, - 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, - 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, - 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, - 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, - 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, - 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, - 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, - 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, - 139, 153, 97, 175, 157, 311, 320, 317, 318, 315, - 316, 314, 313, 312, 322, 303, 304, 305, 306, 308, - 0, 307, 82, 0, 120, 190, 147, 105, 177, 138, - 0, 0, 0, 0, 270, 0, 0, 0, 102, 0, - 267, 0, 0, 0, 119, 310, 121, 0, 0, 158, - 130, 0, 0, 0, 0, 301, 302, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 0, 0, 268, 289, - 288, 291, 292, 293, 294, 0, 0, 95, 290, 295, - 296, 297, 0, 0, 0, 265, 282, 0, 309, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 279, 280, - 261, 0, 0, 0, 321, 0, 281, 0, 0, 276, - 277, 278, 283, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 0, 209, 0, 0, 319, - 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, - 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, - 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, - 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 144, 112, 132, 131, 133, 0, 344, 0, 159, 176, + 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, + 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 355, + 358, 353, 354, 392, 393, 427, 428, 429, 409, 350, + 0, 356, 357, 0, 413, 395, 82, 0, 120, 190, + 147, 105, 177, 421, 412, 0, 383, 424, 361, 375, + 432, 376, 377, 405, 347, 391, 138, 373, 0, 364, + 342, 370, 343, 362, 385, 102, 388, 360, 414, 394, + 423, 119, 430, 121, 399, 0, 158, 130, 0, 0, + 387, 416, 389, 410, 382, 406, 352, 398, 425, 374, + 403, 426, 0, 0, 0, 267, 0, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 401, 420, 372, 402, + 404, 341, 400, 0, 345, 348, 431, 418, 367, 368, + 0, 0, 0, 0, 0, 0, 0, 386, 390, 407, + 380, 0, 0, 0, 0, 0, 0, 0, 0, 365, + 0, 397, 0, 0, 0, 349, 346, 0, 0, 384, + 0, 0, 0, 351, 0, 366, 408, 0, 340, 108, + 411, 417, 381, 209, 419, 379, 378, 422, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 415, 363, 371, 98, 369, 152, 140, 174, 396, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 344, 0, 159, + 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 355, 358, 353, 354, 392, 393, 427, 428, 429, 409, + 350, 0, 356, 357, 0, 413, 395, 82, 0, 120, + 190, 147, 105, 177, 421, 412, 0, 383, 424, 361, + 375, 432, 376, 377, 405, 347, 391, 138, 373, 0, + 364, 342, 370, 343, 362, 385, 102, 388, 360, 414, + 394, 423, 119, 430, 121, 399, 0, 158, 130, 0, + 0, 387, 416, 389, 410, 382, 406, 352, 398, 425, + 374, 403, 426, 0, 0, 0, 80, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 401, 420, 372, + 402, 404, 341, 400, 0, 345, 348, 431, 418, 367, + 368, 0, 0, 0, 0, 0, 0, 0, 386, 390, + 407, 380, 0, 0, 0, 0, 0, 0, 0, 0, + 365, 0, 397, 0, 0, 0, 349, 346, 0, 0, + 384, 0, 0, 0, 351, 0, 366, 408, 0, 340, + 108, 411, 417, 381, 209, 419, 379, 378, 422, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 415, 363, 371, 98, 369, 152, 140, 174, 396, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 338, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 344, 0, + 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 339, 337, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 355, 358, 353, 354, 392, 393, 427, 428, 429, + 409, 350, 0, 356, 357, 0, 413, 395, 82, 0, + 120, 190, 147, 105, 177, 421, 412, 0, 383, 424, + 361, 375, 432, 376, 377, 405, 347, 391, 138, 373, + 0, 364, 342, 370, 343, 362, 385, 102, 388, 360, + 414, 394, 423, 119, 430, 121, 399, 0, 158, 130, + 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, + 425, 374, 403, 426, 0, 0, 0, 207, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 401, 420, + 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, + 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, + 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, + 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, + 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, + 340, 108, 411, 417, 381, 209, 419, 379, 378, 422, + 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, + 150, 154, 415, 363, 371, 98, 369, 152, 140, 174, + 396, 141, 151, 122, 166, 146, 173, 181, 182, 163, + 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, + 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, + 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, + 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, + 111, 143, 124, 144, 112, 132, 131, 133, 0, 344, + 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, + 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, + 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, + 175, 157, 355, 358, 353, 354, 392, 393, 427, 428, + 429, 409, 350, 0, 356, 357, 0, 413, 395, 82, + 0, 120, 190, 147, 105, 177, 421, 412, 0, 383, + 424, 361, 375, 432, 376, 377, 405, 347, 391, 138, + 373, 0, 364, 342, 370, 343, 362, 385, 102, 388, + 360, 414, 394, 423, 119, 430, 121, 399, 0, 158, + 130, 0, 0, 387, 416, 389, 410, 382, 406, 352, + 398, 425, 374, 403, 426, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 0, 401, + 420, 372, 402, 404, 341, 400, 0, 345, 348, 431, + 418, 367, 368, 0, 0, 0, 0, 0, 0, 0, + 386, 390, 407, 380, 0, 0, 0, 0, 0, 0, + 0, 0, 365, 0, 397, 0, 0, 0, 349, 346, + 0, 0, 384, 0, 0, 0, 351, 0, 366, 408, + 0, 340, 108, 411, 417, 381, 209, 419, 379, 378, + 422, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 415, 363, 371, 98, 369, 152, 140, + 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 607, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, - 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 137, 167, 168, 99, 192, 90, 179, 88, 338, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, - 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 344, 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, - 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, - 97, 175, 157, 311, 320, 317, 318, 315, 316, 314, - 313, 312, 322, 303, 304, 305, 306, 308, 24, 307, - 82, 0, 120, 190, 147, 105, 177, 0, 0, 0, - 138, 0, 0, 0, 0, 270, 0, 0, 0, 102, - 0, 267, 0, 0, 0, 119, 310, 121, 0, 0, - 158, 130, 0, 0, 0, 0, 301, 302, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 268, - 289, 288, 291, 292, 293, 294, 0, 0, 95, 290, - 295, 296, 297, 0, 0, 0, 265, 282, 0, 309, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, - 280, 0, 0, 0, 0, 321, 0, 281, 0, 0, - 276, 277, 278, 283, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, - 319, 0, 145, 0, 161, 110, 118, 83, 89, 0, - 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, - 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, - 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 339, 337, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 355, 358, 353, 354, 392, 393, 427, + 428, 429, 409, 350, 0, 356, 357, 0, 413, 395, + 82, 0, 120, 190, 147, 105, 177, 421, 412, 0, + 383, 424, 361, 375, 432, 376, 377, 405, 347, 391, + 138, 373, 0, 364, 342, 370, 343, 362, 385, 102, + 388, 360, 414, 394, 423, 119, 430, 121, 399, 0, + 158, 130, 0, 0, 387, 416, 389, 410, 382, 406, + 352, 398, 425, 374, 403, 426, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, + 431, 418, 367, 368, 0, 0, 0, 0, 0, 0, + 0, 386, 390, 407, 380, 0, 0, 0, 0, 0, + 0, 0, 0, 365, 0, 397, 0, 0, 0, 349, + 346, 0, 0, 384, 0, 0, 0, 351, 0, 366, + 408, 0, 340, 108, 411, 417, 381, 209, 419, 379, + 378, 422, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 415, 363, 371, 98, 369, 152, + 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 329, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, - 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 338, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, - 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, + 0, 344, 0, 159, 176, 193, 93, 359, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, - 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, - 153, 97, 175, 157, 311, 320, 317, 318, 315, 316, - 314, 313, 312, 322, 303, 304, 305, 306, 308, 0, - 307, 82, 0, 120, 190, 147, 105, 177, 138, 0, - 0, 0, 0, 270, 0, 0, 0, 102, 0, 267, - 0, 0, 0, 119, 310, 121, 0, 0, 158, 130, - 0, 0, 0, 0, 301, 302, 0, 0, 0, 0, - 0, 0, 0, 0, 54, 0, 0, 268, 289, 288, - 291, 292, 293, 294, 0, 0, 95, 290, 295, 296, - 297, 0, 0, 0, 265, 282, 0, 309, 0, 0, + 142, 339, 337, 332, 331, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 355, 358, 353, 354, 392, 393, + 427, 428, 429, 409, 350, 0, 356, 357, 0, 413, + 395, 82, 0, 120, 190, 147, 105, 177, 138, 0, + 0, 770, 0, 269, 0, 0, 0, 102, 0, 266, + 0, 0, 0, 119, 309, 121, 0, 0, 158, 130, + 0, 0, 0, 0, 300, 301, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 267, 288, 287, + 290, 291, 292, 293, 0, 0, 95, 289, 294, 295, + 296, 0, 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 279, 280, 0, - 0, 0, 0, 321, 0, 281, 0, 0, 276, 277, - 278, 283, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 0, 209, 0, 0, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 278, 279, 260, + 0, 0, 0, 320, 0, 280, 0, 0, 275, 276, + 277, 282, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 0, 209, 0, 0, 318, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, @@ -1388,43 +1297,20 @@ var yyAct = [...]int{ 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, - 175, 157, 311, 320, 317, 318, 315, 316, 314, 313, - 312, 322, 303, 304, 305, 306, 308, 138, 307, 82, - 0, 120, 190, 147, 105, 177, 102, 0, 0, 0, - 0, 0, 119, 310, 121, 0, 0, 158, 130, 0, - 0, 0, 0, 301, 302, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, 268, 289, 288, 291, - 292, 293, 294, 0, 0, 95, 290, 295, 296, 297, - 0, 0, 0, 0, 282, 0, 309, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 279, 280, 0, 0, - 0, 0, 321, 0, 281, 0, 0, 276, 277, 278, - 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 108, 0, 0, 0, 209, 0, 0, 319, 0, 145, - 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, - 154, 0, 0, 0, 98, 0, 152, 140, 174, 1404, - 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, - 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, - 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, - 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, - 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, - 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, - 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, - 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, - 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, - 157, 311, 320, 317, 318, 315, 316, 314, 313, 312, - 322, 303, 304, 305, 306, 308, 138, 307, 82, 0, - 120, 190, 147, 105, 177, 102, 0, 0, 0, 0, - 0, 119, 310, 121, 0, 0, 158, 130, 0, 0, - 0, 0, 301, 302, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 0, 268, 289, 288, 291, 292, - 293, 294, 0, 0, 95, 290, 295, 296, 297, 0, - 0, 0, 0, 282, 0, 309, 0, 0, 0, 0, + 175, 157, 310, 319, 316, 317, 314, 315, 313, 312, + 311, 321, 302, 303, 304, 305, 307, 0, 306, 82, + 0, 120, 190, 147, 105, 177, 138, 0, 0, 0, + 0, 269, 0, 0, 0, 102, 0, 266, 0, 0, + 0, 119, 309, 121, 0, 0, 158, 130, 0, 0, + 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 492, 267, 288, 287, 290, 291, + 292, 293, 0, 0, 95, 289, 294, 295, 296, 0, + 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 279, 280, 0, 0, 0, - 0, 321, 0, 281, 0, 0, 276, 277, 278, 283, + 0, 0, 0, 0, 0, 278, 279, 0, 0, 0, + 0, 320, 0, 280, 0, 0, 275, 276, 277, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 0, 209, 0, 0, 319, 0, 145, 0, + 0, 0, 0, 209, 0, 0, 318, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, @@ -1436,19 +1322,45 @@ var yyAct = [...]int{ 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, - 311, 320, 317, 318, 315, 316, 314, 313, 312, 322, - 303, 304, 305, 306, 308, 138, 307, 82, 0, 120, - 190, 147, 105, 177, 102, 0, 0, 0, 0, 0, - 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 310, 319, 316, 317, 314, 315, 313, 312, 311, 321, + 302, 303, 304, 305, 307, 0, 306, 82, 0, 120, + 190, 147, 105, 177, 138, 0, 0, 0, 0, 269, + 0, 0, 0, 102, 0, 266, 0, 0, 0, 119, + 309, 121, 0, 0, 158, 130, 0, 0, 0, 0, + 300, 301, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 0, 0, 267, 288, 287, 290, 291, 292, 293, + 0, 0, 95, 289, 294, 295, 296, 0, 0, 0, + 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 278, 279, 260, 0, 0, 0, 320, + 0, 280, 0, 0, 275, 276, 277, 282, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 0, 209, 0, 0, 318, 0, 145, 0, 161, 110, + 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, + 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, + 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, + 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, + 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, + 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, + 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, + 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, + 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, + 123, 148, 191, 139, 153, 97, 175, 157, 310, 319, + 316, 317, 314, 315, 313, 312, 311, 321, 302, 303, + 304, 305, 307, 24, 306, 82, 0, 120, 190, 147, + 105, 177, 0, 0, 0, 138, 0, 0, 0, 0, + 269, 0, 0, 0, 102, 0, 266, 0, 0, 0, + 119, 309, 121, 0, 0, 158, 130, 0, 0, 0, + 0, 300, 301, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 267, 288, 287, 290, 291, 292, + 293, 0, 0, 95, 289, 294, 295, 296, 0, 0, + 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 0, 0, 537, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 278, 279, 0, 0, 0, 0, + 320, 0, 280, 0, 0, 275, 276, 277, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, + 0, 0, 209, 0, 0, 318, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, @@ -1459,43 +1371,69 @@ var yyAct = [...]int{ 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, - 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 0, 514, 0, 0, 0, 82, 102, 120, 190, - 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 516, - 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, - 0, 0, 511, 510, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, - 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, - 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, - 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, - 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, - 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, - 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, - 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, - 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, - 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, - 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, - 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, - 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 138, 0, 0, 0, 0, 0, 0, 0, 82, - 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, - 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 95, - 0, 0, 0, 0, 0, 74, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 116, 123, 148, 191, 139, 153, 97, 175, 157, 310, + 319, 316, 317, 314, 315, 313, 312, 311, 321, 302, + 303, 304, 305, 307, 0, 306, 82, 0, 120, 190, + 147, 105, 177, 138, 0, 0, 0, 0, 269, 0, + 0, 0, 102, 0, 266, 0, 0, 0, 119, 309, + 121, 0, 0, 158, 130, 0, 0, 0, 0, 300, + 301, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 0, 0, 267, 288, 287, 290, 291, 292, 293, 0, + 0, 95, 289, 294, 295, 296, 0, 0, 0, 264, + 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 278, 279, 0, 0, 0, 0, 320, 0, + 280, 0, 0, 275, 276, 277, 282, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, + 209, 0, 0, 318, 0, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, + 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, + 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 310, 319, 316, + 317, 314, 315, 313, 312, 311, 321, 302, 303, 304, + 305, 307, 138, 306, 82, 0, 120, 190, 147, 105, + 177, 102, 0, 0, 0, 0, 0, 119, 309, 121, + 0, 0, 158, 130, 0, 0, 0, 0, 300, 301, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, + 0, 267, 288, 287, 290, 291, 292, 293, 0, 0, + 95, 289, 294, 295, 296, 0, 0, 0, 0, 281, + 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 278, 279, 0, 0, 0, 0, 320, 0, 280, + 0, 0, 275, 276, 277, 282, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, + 0, 0, 318, 0, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, + 0, 152, 140, 174, 1405, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 310, 319, 316, 317, + 314, 315, 313, 312, 311, 321, 302, 303, 304, 305, + 307, 138, 306, 82, 0, 120, 190, 147, 105, 177, + 102, 0, 0, 0, 0, 0, 119, 309, 121, 0, + 0, 158, 130, 0, 0, 0, 0, 300, 301, 0, + 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, + 267, 288, 287, 290, 291, 292, 293, 0, 0, 95, + 289, 294, 295, 296, 0, 0, 0, 0, 281, 0, + 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 108, 76, 77, 0, 73, 0, - 0, 0, 78, 145, 0, 161, 110, 118, 83, 89, + 278, 279, 0, 0, 0, 0, 320, 0, 280, 0, + 0, 275, 276, 277, 282, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, + 0, 318, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, @@ -1506,39 +1444,39 @@ var yyAct = [...]int{ 133, 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, - 139, 153, 97, 175, 157, 0, 75, 0, 0, 0, - 0, 0, 0, 0, 138, 0, 0, 0, 821, 0, - 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, - 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 207, 0, 823, 0, 0, 0, 0, - 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 153, 97, 175, 157, 310, 319, 316, 317, 314, + 315, 313, 312, 311, 321, 302, 303, 304, 305, 307, + 138, 306, 82, 0, 120, 190, 147, 105, 177, 102, + 0, 0, 0, 0, 0, 119, 0, 121, 0, 0, + 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 526, 525, 535, 536, 528, + 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, - 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, - 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, - 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, - 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, - 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, - 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, - 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, - 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, - 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, - 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, - 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, - 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, - 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 138, 0, 82, 0, 120, 190, 147, - 105, 177, 102, 0, 0, 0, 0, 0, 119, 0, + 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, + 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, + 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, + 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, + 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, + 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, + 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 0, 0, 514, 0, 0, + 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, - 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 516, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 511, 510, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, @@ -1554,59 +1492,59 @@ var yyAct = [...]int{ 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, - 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 0, 82, 0, 120, 190, 147, 105, - 177, 102, 0, 0, 0, 0, 0, 119, 0, 121, - 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, - 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, - 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, - 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, - 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, - 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, - 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, - 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, - 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, - 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, - 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, - 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, - 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, - 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 138, 0, 0, 0, 821, - 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, - 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 207, 0, 823, 0, 0, 0, - 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, + 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, - 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, - 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, - 0, 0, 98, 0, 152, 140, 174, 0, 819, 151, - 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, - 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, - 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, - 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, - 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, - 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, - 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, - 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, - 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 76, 77, 0, 73, 0, 0, 0, 78, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, + 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 0, 75, 0, 0, 0, 0, 0, 0, 0, 138, + 0, 0, 0, 821, 0, 0, 0, 82, 102, 120, + 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, + 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, + 823, 0, 0, 0, 0, 0, 0, 95, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, + 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, + 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, - 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, - 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, + 82, 0, 120, 190, 147, 105, 177, 102, 0, 0, + 0, 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, - 721, 0, 0, 722, 0, 0, 95, 0, 0, 0, + 0, 0, 0, 0, 54, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1624,12 +1562,12 @@ var yyAct = [...]int{ 0, 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, - 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, + 175, 157, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 82, - 0, 120, 190, 147, 105, 177, 102, 0, 616, 0, + 0, 120, 190, 147, 105, 177, 102, 0, 0, 0, 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 80, 0, 615, 0, + 0, 0, 0, 54, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1649,11 +1587,11 @@ var yyAct = [...]int{ 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 0, 0, 0, 0, 0, 82, 102, + 138, 0, 0, 0, 821, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 54, 0, 0, 207, - 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 0, 823, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1662,7 +1600,7 @@ var yyAct = [...]int{ 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, - 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, + 140, 174, 0, 819, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, @@ -1676,7 +1614,7 @@ var yyAct = [...]int{ 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 207, 0, 823, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 721, 0, 0, 722, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1695,58 +1633,12 @@ var yyAct = [...]int{ 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, - 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, - 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 268, 0, 786, 0, 0, - 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, - 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, - 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, - 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, - 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, - 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, - 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, - 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, - 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, - 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, - 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, - 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, - 0, 0, 0, 0, 0, 0, 0, 82, 102, 120, - 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, - 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, - 782, 0, 0, 0, 0, 0, 0, 95, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, - 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, - 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, - 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, - 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, - 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, - 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, - 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, - 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, - 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, - 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, - 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, - 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, - 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, + 0, 0, 138, 0, 82, 0, 120, 190, 147, 105, + 177, 102, 0, 616, 0, 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 516, 0, 0, 0, 0, 0, 0, + 0, 80, 0, 615, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1765,35 +1657,11 @@ var yyAct = [...]int{ 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 138, 82, 0, 120, 190, 147, 105, 177, - 589, 102, 0, 0, 0, 0, 0, 119, 0, 121, - 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, - 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, - 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, - 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, - 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, - 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, - 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, - 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, - 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, - 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, - 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, - 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, - 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, - 191, 139, 153, 97, 175, 157, 0, 0, 325, 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 207, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1816,14 +1684,14 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 207, 0, 823, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 108, 0, 204, 0, 209, 0, 0, 0, 0, + 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, @@ -1840,7 +1708,7 @@ var yyAct = [...]int{ 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 80, 0, 0, 0, 0, 0, 0, 0, 0, 95, + 267, 0, 786, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1863,7 +1731,7 @@ var yyAct = [...]int{ 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 207, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 267, 0, 782, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1886,7 +1754,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 516, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1906,20 +1774,159 @@ var yyAct = [...]int{ 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, - 120, 190, 147, 105, 177, + 0, 0, 0, 0, 0, 0, 0, 138, 82, 0, + 120, 190, 147, 105, 177, 589, 102, 0, 0, 0, + 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, + 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, + 154, 0, 0, 0, 98, 0, 152, 140, 174, 0, + 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, + 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, + 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, + 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, + 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, + 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, + 159, 176, 193, 93, 0, 164, 183, 184, 185, 186, + 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, + 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, + 157, 0, 0, 324, 0, 0, 0, 0, 0, 0, + 138, 0, 0, 0, 0, 0, 0, 0, 82, 102, + 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, + 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, + 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, + 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, + 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, + 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, + 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, + 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, + 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, + 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, + 0, 0, 0, 159, 176, 193, 93, 0, 164, 183, + 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, + 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, + 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 138, 0, 0, 0, 0, 0, 0, + 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, + 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 207, 0, 0, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 108, 0, 204, 0, + 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, + 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, + 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, + 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, + 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, + 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, + 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, + 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, + 132, 131, 133, 0, 0, 0, 159, 176, 193, 93, + 0, 164, 183, 184, 185, 186, 187, 188, 0, 0, + 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, + 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 138, 0, 0, 0, + 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, + 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, + 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, + 0, 0, 0, 98, 0, 152, 140, 174, 0, 141, + 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, + 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, + 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, + 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, + 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, + 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, + 176, 193, 93, 0, 164, 183, 184, 185, 186, 187, + 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, + 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, + 0, 0, 0, 0, 0, 0, 0, 82, 102, 120, + 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, + 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, + 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, + 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, + 136, 150, 154, 0, 0, 0, 98, 0, 152, 140, + 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, + 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, + 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, + 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, + 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, + 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, + 0, 0, 159, 176, 193, 93, 0, 164, 183, 184, + 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, + 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, + 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 138, 0, 0, 0, 0, 0, 0, 0, + 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, + 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 267, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, + 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, + 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, + 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, + 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, + 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, + 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, + 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, + 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, + 131, 133, 0, 0, 0, 159, 176, 193, 93, 0, + 164, 183, 184, 185, 186, 187, 188, 0, 0, 94, + 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, + 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 82, 0, 120, 190, 147, 105, 177, } var yyPact = [...]int{ - 1440, -1000, -188, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 845, 880, -1000, -1000, -1000, -1000, -1000, -1000, - 228, 7723, 21, 90, 16, 11010, 84, 1591, 11476, -1000, - -1, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -73, -90, - -1000, 704, -1000, -1000, -1000, -1000, -1000, 823, 833, 718, - 817, 749, -1000, 6041, 63, 63, 10777, 5297, -1000, -1000, - 223, 11476, 79, 11476, -155, 61, 61, 61, -1000, -1000, + 129, -1000, -181, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 861, 892, -1000, -1000, -1000, -1000, -1000, -1000, + 287, 7808, 7, 116, 25, 11095, 114, 1430, 11561, -1000, + 9, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -74, -83, + -1000, 644, -1000, -1000, -1000, -1000, -1000, 848, 855, 704, + 831, 742, -1000, 6126, 83, 83, 10862, 5382, -1000, -1000, + 241, 11561, 107, 11561, -152, 78, 78, 78, -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, @@ -1930,22 +1937,22 @@ 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, 83, 11476, 197, -1000, 11476, 59, - 556, 59, 59, 59, 11476, -1000, 141, -1000, -1000, -1000, - 11476, 544, 787, 3209, 45, 3209, -1000, 3209, 3209, -1000, - 3209, 5, 3209, -71, 719, 859, -1000, -1000, -1000, -1000, - -1000, -1000, 3209, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 445, 792, 6540, 6540, - 845, -1000, 704, -1000, -1000, -1000, 777, -1000, -1000, 316, - 864, -1000, 7490, 140, -1000, 6540, 2073, 591, -1000, -1000, - 591, -1000, -1000, 115, -1000, -1000, 7018, 7018, 7018, 7018, - 7018, 7018, 7018, 7018, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 591, -1000, - 6292, 591, 591, 591, 591, 591, 591, 591, 591, 6540, - 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 10544, 9372, 11476, 648, -1000, 664, 5036, - -132, -1000, -1000, -1000, 212, 9139, -1000, -1000, -1000, 786, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 111, 11561, 204, -1000, 11561, 76, + 539, 76, 76, 76, 11561, -1000, 155, -1000, -1000, -1000, + 11561, 538, 791, 3294, 53, 3294, -1000, 3294, 3294, -1000, + 3294, 15, 3294, -61, 871, -1000, -1000, -1000, -1000, -29, + -1000, 3294, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 448, 798, 6625, 6625, 861, + -1000, 644, -1000, -1000, -1000, 792, -1000, -1000, 293, 880, + -1000, 7575, 151, -1000, 6625, 1325, 657, -1000, -1000, 657, + -1000, -1000, 128, -1000, -1000, 7103, 7103, 7103, 7103, 7103, + 7103, 7103, 7103, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 657, -1000, 6377, + 657, 657, 657, 657, 657, 657, 657, 657, 6625, 657, + 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, + 657, 657, 10629, 9457, 11561, 582, -1000, 646, 5121, -105, + -1000, -1000, -1000, 266, 9224, -1000, -1000, -1000, 789, -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, @@ -1954,128 +1961,129 @@ 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, 555, 11476, -1000, 1875, -1000, 530, - 3209, 69, 501, 260, 499, 11476, 11476, 3209, 14, 12, - 11476, 668, 67, 11476, 812, 716, 11476, 497, 484, -1000, - 4775, -1000, 3209, 3209, -1000, -1000, -1000, 3209, 3209, 3209, - 3209, 3209, 3209, -1000, -1000, -1000, -1000, 3209, 3209, -1000, - 861, 204, -1000, -1000, -1000, -1000, 11476, 6540, -1000, -1000, - -1000, -1000, -1000, -1000, 875, 164, 394, 123, 666, -1000, - 366, 823, 445, 749, 8900, 713, -1000, -1000, 11476, -1000, - 6540, 6540, 466, -1000, 10304, -1000, -1000, 3731, 168, 7018, - 398, 313, 7018, 7018, 7018, 7018, 7018, 7018, 7018, 7018, - 7018, 7018, 7018, 7018, 7018, 7018, 7018, 399, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 475, -1000, 704, 595, - 595, 143, 143, 143, 143, 143, 143, 143, 7257, 5545, - 445, 553, 250, 6292, 6041, 6041, 6540, 6540, 10071, 9838, - 6041, 818, 255, 250, 11709, -1000, 445, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 6041, 6041, 6041, 6041, 32, 11476, - -1000, 677, 883, -1000, -1000, -1000, 814, 8434, 8667, 32, - 586, 9372, 11476, -1000, -1000, 4514, 664, -132, 661, -1000, - -109, -114, 2401, 127, -1000, -1000, -1000, -1000, 2948, 208, - 579, 376, -56, -1000, -1000, -1000, 681, -1000, 681, 681, - 681, 681, -29, -29, -29, -29, -1000, -1000, -1000, -1000, - -1000, 699, 698, -1000, 681, 681, 681, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 694, 694, 694, 683, 683, 689, -1000, - 11476, 3209, 811, 3209, -1000, 122, -1000, 11243, 11243, 107, - 11476, 11476, 663, -1000, 11476, 3209, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 530, 11561, -1000, 2083, -1000, 527, 3294, + 95, 526, 283, 520, 11561, 11561, 3294, 28, 27, 11561, + 654, 91, 11561, 823, 711, 11561, 503, 473, -1000, 4860, + -1000, 3294, 3294, -1000, -1000, -1000, 3294, 3294, 3294, 3294, + 3294, 3294, -1000, -1000, -1000, -1000, 3294, 3294, -1000, 874, + 258, -1000, -1000, -1000, -1000, 6625, -1000, 710, -1000, -1000, + -1000, -1000, -1000, -1000, 887, 197, 370, 148, 653, -1000, + 331, 848, 448, 742, 8985, 732, -1000, -1000, 11561, -1000, + 6625, 6625, 339, -1000, 10389, -1000, -1000, 3816, 212, 7103, + 387, 246, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, + 7103, 7103, 7103, 7103, 7103, 7103, 7103, 395, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 466, -1000, 644, 671, + 671, 177, 177, 177, 177, 177, 177, 177, 7342, 5630, + 448, 525, 298, 6377, 6126, 6126, 6625, 6625, 10156, 9923, + 6126, 833, 250, 298, 11794, -1000, 448, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 6126, 6126, 6126, 6126, 38, 11561, + -1000, 611, 651, -1000, -1000, -1000, 828, 8519, 8752, 38, + 561, 9457, 11561, -1000, -1000, 4599, 646, -105, 621, -1000, + -129, -111, 2486, 157, -1000, -1000, -1000, -1000, 3033, 252, + 555, 318, -56, -1000, -1000, -1000, 670, -1000, 670, 670, + 670, 670, -21, -21, -21, -21, -1000, -1000, -1000, -1000, + -1000, 695, 694, -1000, 670, 670, 670, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 11476, 329, 11476, 11476, -1000, 250, -1000, 708, 6540, - 6540, 4253, 6540, -1000, -1000, -1000, 792, -1000, 818, 831, - -1000, 776, 768, 6041, -1000, -1000, 168, 187, -1000, -1000, - 365, -1000, -1000, -1000, -1000, 120, 591, -1000, 1749, -1000, - -1000, -1000, -1000, 398, 7018, 7018, 7018, 1322, 1749, 2173, - 469, 2117, 143, 144, 144, 151, 151, 151, 151, 151, - 324, 324, -1000, -1000, -1000, 445, -1000, -1000, -1000, 445, - 6041, 662, -1000, -1000, 6540, -1000, 445, 539, 539, 387, - 421, 695, 688, -1000, 118, 653, 640, 539, 6041, 264, - -1000, 6540, 445, -1000, 539, 445, 539, 539, 590, 591, - -1000, 11709, 9372, 9372, 9372, 9372, 9372, -1000, 742, 740, - -1000, 736, 728, 751, 11476, -1000, 549, 8434, 159, 591, - -1000, 9605, -1000, -1000, 858, 9372, 621, -1000, -1000, 661, - -132, -91, -1000, -1000, -1000, -1000, 250, -1000, 418, 660, - 2687, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 685, 473, - -1000, 801, 184, 180, 471, 800, -1000, -1000, -1000, 791, - -1000, 275, -61, -1000, -1000, 393, -29, -29, -1000, -1000, - 127, 784, 127, 127, 127, 438, 438, -1000, -1000, -1000, - -1000, 357, -1000, -1000, -1000, 354, -1000, 714, 11243, 3209, - -1000, -1000, -1000, -1000, 278, 278, 203, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 30, 678, - -1000, 10, 9, 66, -1000, 3209, -1000, 204, -1000, 436, - 6540, -1000, -1000, 758, 250, 250, 114, -1000, -1000, 11476, - -1000, -1000, -1000, -1000, 637, -1000, -1000, -1000, 3470, 6041, - -1000, 1322, 1749, 2032, -1000, 7018, 7018, -1000, -1000, 539, - 6041, 250, -1000, -1000, -1000, 109, 399, 109, 7018, 7018, - 7018, 7018, 4253, 7018, 7018, 7018, 7018, -165, 611, 234, - -1000, 6540, 413, -1000, -1000, -1000, -1000, -1000, 711, 11709, - 591, -1000, 8195, 11243, 622, -1000, 201, 883, 692, 709, - 645, -1000, -1000, -1000, -1000, 739, -1000, 738, -1000, -1000, - -1000, -1000, -1000, 78, 73, 71, 11243, -1000, 845, 6540, - 621, -1000, -1000, -1000, -130, -141, -1000, -1000, -1000, 2948, - -1000, 2948, 11243, 46, -1000, 471, 471, -1000, -1000, -1000, - 684, 707, 68, -1000, -1000, -1000, 565, 127, 127, -1000, - 220, -1000, -1000, -1000, 536, -1000, 528, 659, 526, 11476, + -1000, -1000, -1000, 693, 693, 693, 686, 686, 698, -1000, + 11561, 3294, 820, 3294, -1000, 74, -1000, 11328, 11328, 135, + 11561, 11561, 625, -1000, 11561, 3294, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 11476, -1000, -1000, -1000, - -1000, -1000, 11243, -173, 467, 11243, 11243, 11476, -1000, 329, - -1000, 250, -1000, 3992, -1000, 858, 9372, -1000, -1000, 445, - -1000, 7018, 1749, 1749, -1000, -1000, 445, 681, 681, -1000, - 681, 683, -1000, 681, -10, 681, -11, 445, 445, 1838, - 2103, 1814, 2088, -1000, 1734, 1991, 1672, 1497, 591, -162, - -1000, 250, 6540, -1000, 803, 588, 610, -1000, -1000, 5793, - 445, 519, 110, 506, -1000, 845, 11709, 6540, -1000, -1000, - 6540, 682, -1000, 6540, -1000, -1000, -1000, 591, 591, 591, - 506, 823, 250, -1000, -1000, -1000, -1000, 2687, -1000, 494, - -1000, 681, -1000, -1000, -1000, 11243, -52, 874, -1000, -1000, - -1000, -1000, 679, -1000, -1000, -1000, -1000, -1000, -1000, -29, - 431, -29, 353, -1000, 340, 3209, -1000, -1000, -1000, -1000, - 806, -1000, 3992, -1000, -1000, 676, -1000, -1000, -1000, 850, - 657, -1000, 1749, -1000, -1000, 103, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 7018, 7018, -1000, 7018, 7018, - -1000, 7018, 7018, -1000, 7018, 7018, 7018, 445, 429, 250, - 799, -1000, 591, -1000, -1000, 646, 11243, 11243, -1000, 11243, - 823, -1000, 250, 250, 11243, 250, 11243, 11243, 11243, 7956, - -1000, 138, 11243, -1000, 488, -1000, 170, -1000, -145, 562, - 127, -1000, 127, 489, 483, -1000, 591, 656, -1000, 186, - 11243, 848, 830, -1000, -1000, 1892, 1892, 1892, 1892, 1892, - 1892, 1892, 1892, 17, -1000, -1000, 871, -1000, 591, -1000, - 704, 108, -1000, -1000, -1000, 482, 458, 458, 458, 159, - 138, -1000, 423, 179, 425, -1000, 34, 11243, 310, 797, - -1000, 793, 675, -1000, -1000, -1000, -1000, -1000, 26, 3992, - 2948, 451, -1000, 6540, 6540, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 445, 43, -180, 11709, 610, 445, 11243, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 328, -1000, -1000, - 11476, -1000, -1000, 422, -1000, -1000, 452, 448, -1000, 11243, - -1000, -1000, 678, 250, 605, -1000, 755, -171, -183, 592, - -1000, -1000, -1000, 671, -1000, -1000, -1000, 26, 766, -173, - -1000, 747, -1000, 11243, -1000, 23, -1000, -178, 444, 18, - -181, 703, 591, -185, 702, -1000, 868, 6779, -1000, -1000, - 870, 156, 156, 1892, 445, -1000, -1000, -1000, 50, 350, - -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 11561, 278, 11561, 11561, 298, 11561, -1000, 772, 6625, + 6625, 4338, 6625, -1000, -1000, -1000, 798, -1000, 833, 847, + -1000, 780, 778, 6126, -1000, -1000, 212, 302, -1000, -1000, + 405, -1000, -1000, -1000, -1000, 146, 657, -1000, 2258, -1000, + -1000, -1000, -1000, 387, 7103, 7103, 7103, 469, 2258, 2057, + 1768, 1524, 177, 425, 425, 181, 181, 181, 181, 181, + 329, 329, -1000, -1000, -1000, 448, -1000, -1000, -1000, 448, + 6126, 622, -1000, -1000, 6625, -1000, 448, 502, 502, 260, + 290, 635, 633, -1000, 145, 632, 629, 502, 6126, 315, + -1000, 6625, 448, -1000, 502, 448, 502, 502, 588, 657, + -1000, 11794, 9457, 9457, 9457, 9457, 9457, -1000, 739, 738, + -1000, 730, 723, 724, 11561, -1000, 519, 8519, 152, 657, + -1000, 9690, -1000, -1000, 869, 9457, 596, -1000, -1000, 621, + -105, -134, -1000, -1000, -1000, -1000, 298, -1000, 424, 614, + 2772, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 691, 460, + -1000, 811, 196, 194, 451, 810, -1000, -1000, -1000, 794, + -1000, 343, -70, -1000, -1000, 389, -21, -21, -1000, -1000, + 157, 786, 157, 157, 157, 423, 423, -1000, -1000, -1000, + -1000, 388, -1000, -1000, -1000, 384, -1000, 708, 11328, 3294, + -1000, -1000, -1000, -1000, 286, 286, 179, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 37, 672, + -1000, 24, 23, 86, -1000, 3294, -1000, 258, -1000, 417, + 6625, -1000, -1000, -1000, 770, 298, 298, 142, -1000, -1000, + 11561, -1000, -1000, -1000, -1000, 618, -1000, -1000, -1000, 3555, + 6126, -1000, 469, 2258, 1341, -1000, 7103, 7103, -1000, -1000, + 502, 6126, 298, -1000, -1000, -1000, 162, 395, 162, 7103, + 7103, 7103, 7103, 4338, 7103, 7103, 7103, 7103, -163, 597, + 205, -1000, 6625, 280, -1000, -1000, -1000, -1000, -1000, 707, + 11794, 657, -1000, 8280, 11328, 601, -1000, 248, 651, 690, + 702, 615, -1000, -1000, -1000, -1000, 737, -1000, 734, -1000, + -1000, -1000, -1000, -1000, 106, 105, 104, 11328, -1000, 861, + 6625, 596, -1000, -1000, -1000, -133, -131, -1000, -1000, -1000, + 3033, -1000, 3033, 11328, 59, -1000, 451, 451, -1000, -1000, + -1000, 687, 701, 85, -1000, -1000, -1000, 551, 157, 157, + -1000, 202, -1000, -1000, -1000, 497, -1000, 494, 598, 483, + 11561, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11561, -1000, -1000, + -1000, -1000, -1000, 11328, -169, 449, 11328, 11328, 11561, -1000, + 278, -1000, 298, -1000, 4077, -1000, 869, 9457, -1000, -1000, + 448, -1000, 7103, 2258, 2258, -1000, -1000, 448, 670, 670, + -1000, 670, 686, -1000, 670, 0, 670, -14, 448, 448, + 1682, 2201, 1659, 1957, -1000, 1480, 1902, 1081, 1721, 657, + -159, -1000, 298, 6625, -1000, 813, 549, 569, -1000, -1000, + 5878, 448, 481, 141, 479, -1000, 861, 11794, 6625, -1000, + -1000, 6625, 674, -1000, 6625, -1000, -1000, -1000, 657, 657, + 657, 479, 848, 298, -1000, -1000, -1000, -1000, 2772, -1000, + 464, -1000, 670, -1000, -1000, -1000, 11328, -58, 885, -1000, + -1000, -1000, -1000, 669, -1000, -1000, -1000, -1000, -1000, -1000, + -21, 407, -21, 362, -1000, 361, 3294, -1000, -1000, -1000, + -1000, 816, -1000, 4077, -1000, -1000, 664, -1000, -1000, -1000, + 866, 584, -1000, 2258, -1000, -1000, 100, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 7103, 7103, -1000, 7103, + 7103, -1000, 7103, 7103, -1000, 7103, 7103, 7103, 448, 406, + 298, 804, -1000, 657, -1000, -1000, 576, 11328, 11328, -1000, + 11328, 848, -1000, 298, 298, 11328, 298, 11328, 11328, 11328, + 8041, -1000, 147, 11328, -1000, 458, -1000, 187, -1000, -142, + 544, 157, -1000, 157, 531, 498, -1000, 657, 572, -1000, + 226, 11328, 864, 853, -1000, -1000, 1831, 1831, 1831, 1831, + 1831, 1831, 1831, 1831, 20, -1000, -1000, 884, -1000, 657, + -1000, 644, 131, -1000, -1000, -1000, 456, 447, 447, 447, + 152, 147, -1000, 444, 211, 402, -1000, 55, 11328, 268, + 802, -1000, 797, 659, -1000, -1000, -1000, -1000, -1000, 26, + 4077, 3033, 441, -1000, 6625, 6625, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 448, 46, -172, 11794, 569, 448, + 11328, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 354, -1000, + -1000, 11561, -1000, -1000, 396, -1000, -1000, 484, 437, -1000, + 11328, -1000, -1000, 672, 298, 562, -1000, 748, -167, -177, + 550, -1000, -1000, -1000, 658, -1000, -1000, -1000, 26, 777, + -169, -1000, 747, -1000, 11328, -1000, 29, -1000, -170, 435, + 32, -175, 700, 657, -178, 692, -1000, 878, 6864, -1000, + -1000, 883, 163, 163, 1831, 448, -1000, -1000, -1000, 63, + 338, -1000, -1000, -1000, -1000, -1000, -1000, } var yyPgo = [...]int{ - 0, 1124, 25, 465, 1123, 1122, 1120, 1117, 1114, 1113, - 1112, 1111, 1110, 1109, 1107, 1103, 1102, 1100, 1099, 1098, - 1097, 1096, 1095, 1093, 1092, 1091, 104, 1090, 1089, 1088, - 64, 1086, 73, 1085, 1083, 43, 348, 56, 29, 491, - 1082, 47, 58, 52, 1081, 35, 1074, 1071, 75, 1069, - 51, 1068, 1066, 106, 1065, 1060, 13, 42, 1057, 1056, - 1054, 1052, 66, 1012, 1048, 1045, 1044, 1043, 1041, 1040, - 55, 9, 12, 30, 27, 1038, 149, 10, 1037, 54, - 1034, 1033, 1032, 1030, 19, 1021, 60, 1013, 31, 59, - 1006, 7, 61, 28, 15, 6, 76, 65, 1005, 20, - 69, 50, 1004, 1001, 482, 999, 998, 41, 997, 993, - 21, 182, 445, 991, 989, 982, 981, 37, 0, 546, - 107, 71, 978, 977, 976, 1438, 70, 45, 18, 974, - 40, 159, 38, 973, 972, 34, 971, 970, 969, 968, - 966, 965, 963, 275, 962, 961, 958, 33, 24, 957, - 951, 62, 16, 950, 949, 947, 46, 63, 946, 943, - 57, 53, 942, 941, 937, 924, 918, 22, 17, 917, - 14, 915, 11, 912, 23, 909, 4, 903, 8, 902, - 3, 896, 5, 44, 1, 894, 2, 892, 891, 48, - 383, 888, 887, 80, + 0, 1130, 45, 458, 1129, 1120, 1119, 1114, 1113, 1112, + 1111, 1110, 1108, 1107, 1106, 1105, 1103, 1102, 1099, 1097, + 1096, 1095, 1093, 1092, 1091, 1090, 141, 1087, 1082, 1080, + 66, 1076, 75, 1075, 1073, 37, 60, 47, 42, 1038, + 1072, 21, 54, 57, 1071, 27, 1070, 1069, 80, 1067, + 53, 1065, 1063, 311, 1062, 1061, 13, 28, 1060, 1058, + 1057, 1055, 70, 265, 1047, 1044, 1042, 1039, 1037, 1036, + 64, 7, 11, 34, 26, 1034, 30, 22, 1033, 55, + 1032, 1031, 1030, 1028, 16, 1027, 58, 1025, 19, 56, + 1022, 9, 65, 41, 18, 8, 83, 62, 1020, 20, + 69, 51, 1017, 1015, 434, 1009, 1006, 59, 1005, 1004, + 23, 162, 361, 1001, 1000, 998, 997, 38, 0, 827, + 43, 73, 995, 990, 987, 1522, 71, 52, 14, 981, + 31, 17, 33, 979, 963, 40, 953, 951, 950, 947, + 946, 945, 943, 90, 942, 941, 939, 81, 44, 938, + 937, 61, 24, 936, 935, 934, 49, 63, 932, 930, + 50, 25, 929, 928, 927, 923, 922, 35, 12, 920, + 15, 913, 10, 912, 29, 911, 4, 910, 6, 909, + 3, 908, 5, 48, 1, 905, 2, 902, 900, 654, + 578, 899, 898, 84, } var yyR1 = [...]int{ @@ -2194,8 +2202,8 @@ var yyR2 = [...]int{ 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, 3, 3, 2, 3, - 4, 3, 7, 5, 4, 2, 2, 4, 4, 2, - 2, 2, 2, 2, 2, 3, 1, 1, 0, 1, + 4, 3, 7, 5, 4, 2, 4, 2, 2, 2, + 2, 3, 3, 5, 2, 3, 1, 1, 0, 1, 1, 1, 0, 2, 2, 0, 2, 2, 0, 1, 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 3, 3, 2, 0, 2, 0, 2, 1, @@ -2277,33 +2285,33 @@ var yyChk = [...]int{ 262, 236, 183, 213, -104, 125, 220, 127, 123, 123, 124, 125, 243, 122, 123, -53, -125, 57, -118, 125, 123, 108, 187, 230, 115, 215, 227, 124, 33, 228, - 155, -134, 123, -106, 158, 214, 217, 218, 219, 222, - 221, 161, 57, 232, 231, 223, -125, 164, -130, -130, - -130, -130, -130, 216, 216, -130, -2, -88, 17, 16, - -5, -3, -189, 6, 20, 21, -32, 40, 41, -27, - -38, 99, -39, -125, -58, 74, -63, 29, 57, -118, - 23, -62, -59, -77, -75, -76, 108, 109, 110, 97, - 98, 105, 75, 111, -67, -65, -66, -68, 59, 58, - 67, 60, 61, 62, 63, 68, 69, 70, -119, -73, - -189, 44, 45, 252, 253, 254, 255, 258, 256, 77, - 34, 242, 250, 249, 248, 246, 247, 244, 245, 128, - 243, 103, 251, -104, -104, 11, -48, -53, -96, -133, - 164, -100, 232, 231, -120, -98, -119, -117, 230, 187, - 229, 120, 73, 22, 24, 209, 76, 108, 16, 77, - 107, 252, 115, 48, 244, 245, 242, 254, 255, 243, - 215, 29, 10, 25, 143, 21, 101, 117, 80, 81, - 146, 23, 144, 70, 19, 51, 11, 13, 14, 128, - 127, 92, 124, 46, 8, 111, 26, 89, 42, 28, - 44, 90, 17, 246, 247, 31, 258, 150, 103, 49, - 36, 74, 68, 71, 52, 72, 15, 47, 91, 118, - 251, 45, 122, 6, 257, 30, 142, 43, 123, 79, - 126, 69, 5, 129, 32, 9, 50, 53, 248, 249, - 250, 34, 78, 12, -164, 90, -157, 57, -53, 124, - -53, 251, -112, 128, -112, -112, 123, -53, 115, 117, - 52, -18, -53, -111, 128, 57, -111, -111, -111, -53, - 112, -53, 57, 30, -131, -189, -120, 243, 57, 155, - 123, 156, 125, -131, -131, -131, -131, 159, 160, -131, - -109, -108, 225, 226, 216, 224, 52, 12, -131, -130, + 155, -134, 123, -106, 214, 217, 218, 219, 222, 220, + 161, 57, 232, 231, 223, -125, 164, -130, -130, -130, + -130, -130, 216, 216, -130, -2, -88, 17, 16, -5, + -3, -189, 6, 20, 21, -32, 40, 41, -27, -38, + 99, -39, -125, -58, 74, -63, 29, 57, -118, 23, + -62, -59, -77, -75, -76, 108, 109, 110, 97, 98, + 105, 75, 111, -67, -65, -66, -68, 59, 58, 67, + 60, 61, 62, 63, 68, 69, 70, -119, -73, -189, + 44, 45, 252, 253, 254, 255, 258, 256, 77, 34, + 242, 250, 249, 248, 246, 247, 244, 245, 128, 243, + 103, 251, -104, -104, 11, -48, -53, -96, -133, 164, + -100, 232, 231, -120, -98, -119, -117, 230, 187, 229, + 120, 73, 22, 24, 209, 76, 108, 16, 77, 107, + 252, 115, 48, 244, 245, 242, 254, 255, 243, 215, + 29, 10, 25, 143, 21, 101, 117, 80, 81, 146, + 23, 144, 70, 19, 51, 11, 13, 14, 128, 127, + 92, 124, 46, 8, 111, 26, 89, 42, 28, 44, + 90, 17, 246, 247, 31, 258, 150, 103, 49, 36, + 74, 68, 71, 52, 72, 15, 47, 91, 118, 251, + 45, 122, 6, 257, 30, 142, 43, 123, 79, 126, + 69, 5, 129, 32, 9, 50, 53, 248, 249, 250, + 34, 78, 12, -164, 90, -157, 57, -53, 124, -53, + 251, -112, 128, -112, -112, 123, -53, 115, 117, 52, + -18, -53, -111, 128, 57, -111, -111, -111, -53, 112, + -53, 57, 30, -131, -189, -120, 243, 57, 155, 123, + 156, 125, -131, -131, -131, -131, 159, 160, -131, -109, + -108, 225, 226, 216, 224, 12, 216, 158, -131, -130, -130, -190, 56, -89, 19, 31, -39, -125, -85, -86, -39, -84, -2, -26, 36, -30, 21, 65, 11, -122, 73, 72, 89, -121, 22, -119, 59, 112, -39, -60, @@ -2325,7 +2333,7 @@ var yyChk = [...]int{ 125, 57, 74, 57, -53, -53, -131, 157, 157, -53, 55, 126, -48, 23, 52, -53, 57, 57, -126, -125, -117, -131, -131, -131, -131, -131, -131, -131, -131, -131, - -131, 11, -107, 11, 92, -53, -39, 9, 92, 55, + -131, 11, -107, 11, 92, -39, 52, 9, 92, 55, 18, 112, 55, -87, 24, 25, -88, -190, -32, -64, -119, 60, 63, -31, 43, -53, -39, -39, -69, 68, 74, 69, 70, -121, 99, -126, -120, -117, -63, -70, @@ -2347,56 +2355,56 @@ var yyChk = [...]int{ -131, 23, -131, -113, 120, 117, 118, -177, 116, 209, 187, 66, 29, 15, 252, 151, 265, 57, 152, -119, -119, 120, 117, -53, -53, -53, -131, -53, -110, 90, - 12, -125, -125, 38, -39, -39, -126, -86, -89, -103, - 19, 11, 34, 34, -36, 68, 69, 70, 112, -189, - -70, -63, -63, -63, -35, 146, 73, -190, -190, -36, - 55, -39, -190, -190, -190, 55, 53, 22, 55, 11, - 55, 11, 112, 55, 11, 55, 11, -190, -36, -81, - -79, 80, -39, -190, -190, -190, -190, -190, -61, 30, - 34, -2, -189, -189, -95, -99, -77, -42, -43, -43, - -42, -43, 42, 42, 42, 47, 42, 47, 42, -50, - -125, -190, -56, 50, 127, 51, -189, -127, -57, 12, - -41, -57, -101, -102, 238, 235, 241, 57, 59, 55, - -168, 82, 54, 57, 28, -160, -160, -161, 57, -161, - 28, -144, 29, 68, -150, 213, 60, -147, -147, -148, - 30, -148, -148, -148, -156, 59, -156, 60, 60, 52, - -119, -131, -130, -183, 131, 137, 138, 133, 57, 124, - 28, 130, 132, 151, 129, -183, -114, -115, 126, 22, - 124, 28, 151, -182, 53, 157, 157, 126, -131, -107, - 59, -39, 39, 112, -53, -40, 11, 99, -120, -37, - -35, 73, -63, -63, -190, -38, -135, 108, 184, 145, - 182, 178, 198, 189, 211, 180, 212, -132, -135, -63, - -63, -63, -63, -120, -63, -63, -63, -63, 259, -84, - 81, -39, 79, -94, 52, -95, -72, -74, -73, -189, - -2, -90, -119, -93, -119, -57, 55, 82, -46, -45, - 52, 53, -47, 52, -45, 42, 42, 124, 124, 124, - -93, -84, -39, -57, 235, 239, 240, -167, -168, -171, - -170, -119, -174, -161, -161, 54, -146, 52, 59, 60, - 61, 68, 242, 67, 56, -148, -148, 57, 108, 56, - 55, 56, 55, 56, 55, -53, -130, -130, -53, -130, - -119, -180, 262, -181, 57, -119, -119, -53, -110, -57, - -41, -190, -63, -190, -143, -143, -143, -152, -143, 172, - -143, 172, -190, -190, -190, 55, 19, -190, 55, 19, - -190, 55, 19, -190, 55, 19, -189, -34, 257, -39, - 27, -94, 55, -190, -190, -190, 55, 112, -190, 55, - -84, -99, -39, -39, 54, -39, -189, -189, -189, -190, - -88, 56, 55, -143, -91, -119, -154, 209, 9, 54, - -147, 59, -147, 60, 60, -131, 26, -179, -178, -120, - 54, -82, 13, -147, 57, -63, -63, -63, -63, -63, - -63, -63, -63, -63, -190, 59, 28, -74, 34, -2, - -189, -119, -119, -119, -88, -91, -91, -91, -91, -128, - -173, -172, 53, 134, 66, -170, 56, 55, -155, 130, - 28, 129, 242, 56, -148, -148, 56, 56, -189, 55, - 82, -91, -83, 14, 16, -190, -190, -190, -190, -190, - -190, -190, -190, -33, 92, 262, 9, -72, -2, 112, - 56, -190, -190, -190, -56, -172, 57, -162, 82, 59, - 140, -119, -145, 66, 28, 28, 54, -175, -176, 151, - -178, -168, 56, -39, -71, -190, 260, 49, 263, -95, - -190, -119, 60, -53, 59, 56, -190, 55, -119, -182, - 39, 261, 264, 54, -176, 34, -180, 39, -91, 153, - 262, 56, 154, 263, -185, -186, 52, -189, 264, -186, - 52, 10, 9, -63, 150, -184, 141, 136, 139, 30, - -184, -190, -190, 135, 29, 68, + 12, -125, -125, -53, 38, -39, -39, -126, -86, -89, + -103, 19, 11, 34, 34, -36, 68, 69, 70, 112, + -189, -70, -63, -63, -63, -35, 146, 73, -190, -190, + -36, 55, -39, -190, -190, -190, 55, 53, 22, 55, + 11, 55, 11, 112, 55, 11, 55, 11, -190, -36, + -81, -79, 80, -39, -190, -190, -190, -190, -190, -61, + 30, 34, -2, -189, -189, -95, -99, -77, -42, -43, + -43, -42, -43, 42, 42, 42, 47, 42, 47, 42, + -50, -125, -190, -56, 50, 127, 51, -189, -127, -57, + 12, -41, -57, -101, -102, 238, 235, 241, 57, 59, + 55, -168, 82, 54, 57, 28, -160, -160, -161, 57, + -161, 28, -144, 29, 68, -150, 213, 60, -147, -147, + -148, 30, -148, -148, -148, -156, 59, -156, 60, 60, + 52, -119, -131, -130, -183, 131, 137, 138, 133, 57, + 124, 28, 130, 132, 151, 129, -183, -114, -115, 126, + 22, 124, 28, 151, -182, 53, 157, 157, 126, -131, + -107, 59, -39, 39, 112, -53, -40, 11, 99, -120, + -37, -35, 73, -63, -63, -190, -38, -135, 108, 184, + 145, 182, 178, 198, 189, 211, 180, 212, -132, -135, + -63, -63, -63, -63, -120, -63, -63, -63, -63, 259, + -84, 81, -39, 79, -94, 52, -95, -72, -74, -73, + -189, -2, -90, -119, -93, -119, -57, 55, 82, -46, + -45, 52, 53, -47, 52, -45, 42, 42, 124, 124, + 124, -93, -84, -39, -57, 235, 239, 240, -167, -168, + -171, -170, -119, -174, -161, -161, 54, -146, 52, 59, + 60, 61, 68, 242, 67, 56, -148, -148, 57, 108, + 56, 55, 56, 55, 56, 55, -53, -130, -130, -53, + -130, -119, -180, 262, -181, 57, -119, -119, -53, -110, + -57, -41, -190, -63, -190, -143, -143, -143, -152, -143, + 172, -143, 172, -190, -190, -190, 55, 19, -190, 55, + 19, -190, 55, 19, -190, 55, 19, -189, -34, 257, + -39, 27, -94, 55, -190, -190, -190, 55, 112, -190, + 55, -84, -99, -39, -39, 54, -39, -189, -189, -189, + -190, -88, 56, 55, -143, -91, -119, -154, 209, 9, + 54, -147, 59, -147, 60, 60, -131, 26, -179, -178, + -120, 54, -82, 13, -147, 57, -63, -63, -63, -63, + -63, -63, -63, -63, -63, -190, 59, 28, -74, 34, + -2, -189, -119, -119, -119, -88, -91, -91, -91, -91, + -128, -173, -172, 53, 134, 66, -170, 56, 55, -155, + 130, 28, 129, 242, 56, -148, -148, 56, 56, -189, + 55, 82, -91, -83, 14, 16, -190, -190, -190, -190, + -190, -190, -190, -190, -33, 92, 262, 9, -72, -2, + 112, 56, -190, -190, -190, -56, -172, 57, -162, 82, + 59, 140, -119, -145, 66, 28, 28, 54, -175, -176, + 151, -178, -168, 56, -39, -71, -190, 260, 49, 263, + -95, -190, -119, 60, -53, 59, 56, -190, 55, -119, + -182, 39, 261, 264, 54, -176, 34, -180, 39, -91, + 153, 262, 56, 154, 263, -185, -186, 52, -189, 264, + -186, 52, 10, 9, -63, 150, -184, 141, 136, 139, + 30, -184, -190, -190, 135, 29, 68, } var yyDef = [...]int{ @@ -2422,33 +2430,33 @@ var yyDef = [...]int{ 840, 841, 842, 843, 0, 0, 0, 609, 0, 604, 0, 604, 604, 604, 0, 253, 387, 634, 635, 830, 0, 0, 0, 847, 0, 847, 265, 847, 847, 268, - 847, 0, 847, 0, 275, 276, 279, 280, 281, 282, - 283, 284, 847, 299, 300, 289, 301, 304, 307, 308, - 309, 310, 311, 846, 846, 314, 29, 566, 0, 0, - 554, 31, 0, 315, 320, 321, 325, 323, 324, 316, - 0, 333, 337, 0, 395, 0, 400, 402, -2, -2, - 0, 437, 438, 439, 440, 441, 0, 0, 0, 0, - 0, 0, 0, 0, 465, 466, 467, 468, 539, 540, - 541, 542, 543, 544, 545, 546, 404, 405, 536, 586, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 527, - 0, 501, 501, 501, 501, 501, 501, 501, 501, 0, - 0, 0, 0, 0, 0, 0, 0, 43, 47, 0, - 821, 590, -2, -2, 0, 0, 632, 633, -2, 740, - -2, 638, 639, 640, 641, 642, 643, 644, 645, 646, - 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, - 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, - 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, - 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, - 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, - 697, 698, 699, 700, 701, 702, 703, 704, 705, 706, - 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, - 717, 718, 719, 720, 721, 722, 723, 724, 725, 726, - 727, 728, 729, 730, 0, 0, 81, 0, 79, 0, - 847, 0, 0, 0, 0, 0, 0, 847, 0, 0, - 0, 244, 0, 0, 0, 0, 0, 0, 0, 252, - 0, 254, 847, 847, 257, 848, 849, 847, 847, 847, - 847, 847, 847, 264, 266, 267, 269, 847, 847, 271, - 0, 292, 290, 291, 286, 287, 0, 0, 285, 312, + 847, 0, 847, 0, 275, 277, 278, 279, 280, 0, + 284, 847, 299, 300, 289, 301, 304, 307, 308, 309, + 310, 311, 846, 846, 314, 29, 566, 0, 0, 554, + 31, 0, 315, 320, 321, 325, 323, 324, 316, 0, + 333, 337, 0, 395, 0, 400, 402, -2, -2, 0, + 437, 438, 439, 440, 441, 0, 0, 0, 0, 0, + 0, 0, 0, 465, 466, 467, 468, 539, 540, 541, + 542, 543, 544, 545, 546, 404, 405, 536, 586, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, + 501, 501, 501, 501, 501, 501, 501, 501, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 47, 0, 821, + 590, -2, -2, 0, 0, 632, 633, -2, 740, -2, + 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, + 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, + 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, + 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, + 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, + 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, + 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, + 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, + 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 0, 0, 81, 0, 79, 0, 847, + 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, + 244, 0, 0, 0, 0, 0, 0, 0, 252, 0, + 254, 847, 847, 257, 848, 849, 847, 847, 847, 847, + 847, 847, 264, 266, 267, 269, 847, 847, 271, 0, + 292, 290, 291, 286, 287, 0, 281, 282, 285, 312, 313, 30, 845, 24, 0, 0, 563, 0, 555, 556, 559, 562, 29, 322, 0, 327, 326, 318, 0, 334, 0, 0, 0, 338, 0, 340, 341, 0, 398, 0, @@ -2470,7 +2478,7 @@ var yyDef = [...]int{ 0, 847, 0, 847, 77, 0, 222, 0, 0, 0, 0, 0, 247, 605, 0, 847, 250, 251, 388, 636, 637, 255, 256, 258, 259, 260, 261, 262, 263, 270, - 274, 0, 295, 0, 0, 278, 277, 567, 0, 0, + 274, 0, 295, 0, 0, 276, 0, 567, 0, 0, 0, 0, 0, 558, 560, 561, 566, 32, 325, 0, 547, 0, 0, 0, 328, 27, 396, 397, 399, 416, 0, 418, 420, 339, 335, 0, 537, -2, 406, 407, @@ -2492,56 +2500,56 @@ var yyDef = [...]int{ 67, 607, 68, 846, 0, 0, 620, 223, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 0, 69, 225, 0, 0, 0, 245, 847, 249, 292, 273, 0, - 0, 293, 294, 0, 564, 565, 0, 557, 25, 0, - 602, 603, 548, 549, 342, 417, 419, 421, 0, 329, - 408, 429, 412, 0, 409, 0, 0, 403, 469, 0, - 0, 436, -2, 472, 473, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 554, 0, - 532, 0, 0, 492, 503, 504, 505, 506, 579, 0, - 0, -2, 0, 0, 393, 587, 0, 345, 364, 366, - 0, 361, 376, 377, 379, 0, 381, 0, 383, 384, - 349, 351, 352, 0, 0, 0, 0, 372, 554, 0, - 393, 40, 52, 53, 0, 0, 59, 165, 166, 0, - 212, 0, 0, 0, 183, 190, 190, 186, 191, 187, - 0, 156, 0, 147, 86, 144, 0, 164, 164, 113, - 0, 114, 115, 116, 0, 132, 0, 0, 0, 0, - 629, 66, 217, 846, 228, 229, 230, 231, 232, 233, - 234, 235, 236, 237, 238, 846, 0, 846, 621, 622, - 623, 624, 0, 72, 0, 0, 0, 0, 248, 295, - 296, 297, 568, 0, 26, 393, 0, 336, 538, 0, - 410, 0, 430, 413, 470, 332, 0, 134, 134, 517, - 134, 138, 520, 134, 522, 134, 525, 0, 0, 0, - 0, 0, 0, 537, 0, 0, 0, 0, 0, 529, - 491, 535, 0, 33, 0, 579, 569, 581, 583, 0, - 29, 0, 575, 0, 356, 554, 0, 0, 358, 365, - 0, 0, 359, 0, 360, 380, 382, 0, 0, 0, - 0, 562, 394, 39, 56, 57, 58, 210, 213, 0, - 192, 134, 195, 184, 185, 0, 159, 0, 149, 150, - 151, 152, 153, 155, 135, 109, 110, 162, 163, 161, - 0, 161, 0, 139, 0, 847, 218, 219, 220, 221, - 0, 224, 0, 70, 71, 0, 227, 246, 272, 550, - 343, 471, 414, 474, 514, 161, 518, 519, 521, 523, - 524, 526, 476, 475, 477, 0, 0, 483, 0, 0, - 480, 0, 0, 486, 0, 0, 0, 0, 0, 533, - 0, 34, 0, 584, -2, 0, 0, 0, 46, 0, - 562, 588, 589, 362, 0, 367, 0, 0, 0, 370, - 38, 175, 0, 194, 0, 354, 167, 160, 0, 0, - 164, 133, 164, 0, 0, 64, 0, 73, 74, 0, - 0, 552, 0, 515, 516, 0, 0, 0, 0, 0, - 0, 0, 0, 507, 490, 530, 0, 582, 0, -2, - 0, 577, 576, 357, 37, 0, 0, 0, 0, 389, - 174, 176, 0, 181, 0, 193, 0, 0, 172, 0, - 169, 171, 157, 154, 122, 123, 137, 140, 0, 0, - 0, 0, 28, 0, 0, 478, 479, 484, 485, 481, - 482, 487, 488, 0, 0, 0, 0, 572, 29, 0, - 363, 390, 391, 392, 353, 177, 178, 0, 182, 180, - 0, 355, 85, 0, 168, 170, 0, 0, 240, 0, - 75, 76, 69, 553, 551, 489, 0, 0, 0, 580, - -2, 578, 179, 0, 173, 158, 239, 0, 0, 72, - 508, 0, 511, 0, 241, 0, 226, 509, 0, 0, - 0, 197, 0, 0, 198, 199, 0, 0, 510, 200, - 0, 0, 0, 0, 0, 201, 203, 204, 0, 0, - 202, 242, 243, 205, 206, 207, + 0, 293, 294, 283, 0, 564, 565, 0, 557, 25, + 0, 602, 603, 548, 549, 342, 417, 419, 421, 0, + 329, 408, 429, 412, 0, 409, 0, 0, 403, 469, + 0, 0, 436, -2, 472, 473, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, + 0, 532, 0, 0, 492, 503, 504, 505, 506, 579, + 0, 0, -2, 0, 0, 393, 587, 0, 345, 364, + 366, 0, 361, 376, 377, 379, 0, 381, 0, 383, + 384, 349, 351, 352, 0, 0, 0, 0, 372, 554, + 0, 393, 40, 52, 53, 0, 0, 59, 165, 166, + 0, 212, 0, 0, 0, 183, 190, 190, 186, 191, + 187, 0, 156, 0, 147, 86, 144, 0, 164, 164, + 113, 0, 114, 115, 116, 0, 132, 0, 0, 0, + 0, 629, 66, 217, 846, 228, 229, 230, 231, 232, + 233, 234, 235, 236, 237, 238, 846, 0, 846, 621, + 622, 623, 624, 0, 72, 0, 0, 0, 0, 248, + 295, 296, 297, 568, 0, 26, 393, 0, 336, 538, + 0, 410, 0, 430, 413, 470, 332, 0, 134, 134, + 517, 134, 138, 520, 134, 522, 134, 525, 0, 0, + 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, + 529, 491, 535, 0, 33, 0, 579, 569, 581, 583, + 0, 29, 0, 575, 0, 356, 554, 0, 0, 358, + 365, 0, 0, 359, 0, 360, 380, 382, 0, 0, + 0, 0, 562, 394, 39, 56, 57, 58, 210, 213, + 0, 192, 134, 195, 184, 185, 0, 159, 0, 149, + 150, 151, 152, 153, 155, 135, 109, 110, 162, 163, + 161, 0, 161, 0, 139, 0, 847, 218, 219, 220, + 221, 0, 224, 0, 70, 71, 0, 227, 246, 272, + 550, 343, 471, 414, 474, 514, 161, 518, 519, 521, + 523, 524, 526, 476, 475, 477, 0, 0, 483, 0, + 0, 480, 0, 0, 486, 0, 0, 0, 0, 0, + 533, 0, 34, 0, 584, -2, 0, 0, 0, 46, + 0, 562, 588, 589, 362, 0, 367, 0, 0, 0, + 370, 38, 175, 0, 194, 0, 354, 167, 160, 0, + 0, 164, 133, 164, 0, 0, 64, 0, 73, 74, + 0, 0, 552, 0, 515, 516, 0, 0, 0, 0, + 0, 0, 0, 0, 507, 490, 530, 0, 582, 0, + -2, 0, 577, 576, 357, 37, 0, 0, 0, 0, + 389, 174, 176, 0, 181, 0, 193, 0, 0, 172, + 0, 169, 171, 157, 154, 122, 123, 137, 140, 0, + 0, 0, 0, 28, 0, 0, 478, 479, 484, 485, + 481, 482, 487, 488, 0, 0, 0, 0, 572, 29, + 0, 363, 390, 391, 392, 353, 177, 178, 0, 182, + 180, 0, 355, 85, 0, 168, 170, 0, 0, 240, + 0, 75, 76, 69, 553, 551, 489, 0, 0, 0, + 580, -2, 578, 179, 0, 173, 158, 239, 0, 0, + 72, 508, 0, 511, 0, 241, 0, 226, 509, 0, + 0, 0, 197, 0, 0, 198, 199, 0, 0, 510, + 200, 0, 0, 0, 0, 0, 201, 203, 204, 0, + 0, 202, 242, 243, 205, 206, 207, } var yyTok1 = [...]int{ @@ -4480,24 +4488,24 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 276: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1549 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} - } - case 277: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1553 +//line sql.y:1549 { // Cannot dereference $4 directly, or else the parser stackcannot be pooled. See yyParsePooled showCollationFilterOpt := yyDollar[4].expr yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: &showCollationFilterOpt} } + case 277: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1555 + { + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + } case 278: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1559 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), OnTable: yyDollar[4].tableName} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 279: yyDollar = yyS[yypt-2 : yypt+1] @@ -4512,22 +4520,22 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 281: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1571 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 282: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1575 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 283: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] //line sql.y:1579 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } case 284: yyDollar = yyS[yypt-2 : yypt+1] diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 31e52a0482f..8505a02c86e 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -1541,10 +1541,6 @@ show_statement: { $$ = &Show{Scope: $2, Type: string($3)} } -| SHOW VINDEXES - { - $$ = &Show{Type: string($2)} - } | SHOW COLLATION { $$ = &Show{Type: string($2)} @@ -1555,10 +1551,6 @@ show_statement: showCollationFilterOpt := $4 $$ = &Show{Type: string($2), ShowCollationFilterOpt: &showCollationFilterOpt} } -| SHOW VINDEXES ON table_name - { - $$ = &Show{Type: string($2), OnTable: $4} - } | SHOW VITESS_KEYSPACES { $$ = &Show{Type: string($2)} @@ -1575,9 +1567,17 @@ show_statement: { $$ = &Show{Type: string($2)} } -| SHOW VSCHEMA_TABLES +| SHOW VSCHEMA TABLES { - $$ = &Show{Type: string($2)} + $$ = &Show{Type: string($2) + " " + string($3)} + } +| SHOW VSCHEMA VINDEXES + { + $$ = &Show{Type: string($2) + " " + string($3)} + } +| SHOW VSCHEMA VINDEXES ON table_name + { + $$ = &Show{Type: string($2) + " " + string($3), OnTable: $5} } | SHOW WARNINGS { diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 335ac41b779..88273a303be 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -821,7 +821,7 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql Rows: rows, RowsAffected: uint64(len(rows)), }, nil - case sqlparser.KeywordString(sqlparser.VSCHEMA_TABLES): + case "vschema tables": if destKeyspace == "" { return nil, errNoKeyspace } @@ -846,7 +846,7 @@ func (e *Executor) handleShow(ctx context.Context, safeSession *SafeSession, sql Rows: rows, RowsAffected: uint64(len(rows)), }, nil - case sqlparser.KeywordString(sqlparser.VINDEXES): + case "vschema vindexes": vschema := e.vm.GetCurrentSrvVschema() if vschema == nil { return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vschema not loaded") diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 11aff53d289..80b1af9e659 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -736,7 +736,7 @@ func TestExecutorShow(t *testing.T) { t.Errorf("show vitess_tablets:\n%+v, want\n%+v", qr, wantqr) } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes", nil) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Keyspace", "Name", "Type", "Params", "Owner"), Rows: [][]sqltypes.Value{ @@ -754,10 +754,10 @@ func TestExecutorShow(t *testing.T) { RowsAffected: 10, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes:\n%+v, want\n%+v", qr, wantqr) } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.user", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.user", nil) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), Rows: [][]sqltypes.Value{ @@ -767,23 +767,23 @@ func TestExecutorShow(t *testing.T) { RowsAffected: 2, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.user:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.user:\n%+v, want\n%+v", qr, wantqr) } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on user", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on user", nil) wantErr := errNoKeyspace.Error() if err == nil || err.Error() != wantErr { - t.Errorf("show vindexes on user: %v, want %v", err, wantErr) + t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.garbage", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.garbage", nil) wantErr = "table `garbage` does not exist in keyspace `TestExecutor`" if err == nil || err.Error() != wantErr { - t.Errorf("show vindexes on user: %v, want %v", err, wantErr) + t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) } session.TargetString = "TestExecutor" - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on user", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on user", nil) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), Rows: [][]sqltypes.Value{ @@ -793,11 +793,11 @@ func TestExecutorShow(t *testing.T) { RowsAffected: 2, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on user:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on user:\n%+v, want\n%+v", qr, wantqr) } session.TargetString = "TestExecutor" - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on user2", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on user2", nil) wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), Rows: [][]sqltypes.Value{ @@ -807,13 +807,13 @@ func TestExecutorShow(t *testing.T) { RowsAffected: 2, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on user2:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on user2:\n%+v, want\n%+v", qr, wantqr) } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on garbage", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on garbage", nil) wantErr = "table `garbage` does not exist in keyspace `TestExecutor`" if err == nil || err.Error() != wantErr { - t.Errorf("show vindexes on user: %v, want %v", err, wantErr) + t.Errorf("show vschema vindexes on user: %v, want %v", err, wantErr) } qr, err = executor.Execute(context.Background(), "TestExecute", session, "show warnings", nil) @@ -889,7 +889,7 @@ func TestExecutorShow(t *testing.T) { } session = NewSafeSession(&vtgatepb.Session{TargetString: KsTestUnsharded}) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema_tables", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema tables", nil) if err != nil { t.Error(err) } @@ -909,27 +909,27 @@ func TestExecutorShow(t *testing.T) { RowsAffected: 9, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vschema_tables:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema tables:\n%+v, want\n%+v", qr, wantqr) } session = NewSafeSession(&vtgatepb.Session{}) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema_tables", nil) + qr, err = executor.Execute(context.Background(), "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) + t.Errorf("show vschema tables: %v, want %v", err, want) } qr, err = executor.Execute(context.Background(), "TestExecute", session, "show 10", 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) + t.Errorf("show vschema tables: %v, want %v", err, want) } session = NewSafeSession(&vtgatepb.Session{TargetString: "no_such_keyspace"}) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema_tables", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema tables", 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) + t.Errorf("show vschema tables: %v, want %v", err, want) } } @@ -1034,7 +1034,7 @@ func TestExecutorOther(t *testing.T) { _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{}), "analyze", nil) want := errNoKeyspace.Error() if err == nil || err.Error() != want { - t.Errorf("show vschema_tables: %v, want %v", err, want) + t.Errorf("show vschema tables: %v, want %v", err, want) } // Can't target a range with handle other @@ -1289,9 +1289,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { } vschema = waitForColVindexes(t, ks, "test", []string{"test_hash"}, executor) - qr, err := executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err := executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test: %v", err) } wantqr := &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1301,7 +1301,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { RowsAffected: 1, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } // Drop it @@ -1313,10 +1313,10 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { vschema, vindex = waitForVindex(t, ks, "test_hash", vschemaUpdates, executor) vschema = waitForColVindexes(t, ks, "test", []string{}, executor) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) wantErr := "table `test` does not exist in keyspace `TestExecutor`" if err == nil || err.Error() != wantErr { - t.Fatalf("expected error in show vindexes on TestExecutor.test %v: got %v", wantErr, err) + t.Fatalf("expected error in show vschema vindexes on TestExecutor.test %v: got %v", wantErr, err) } // add it again using the same syntax @@ -1333,9 +1333,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { vschema = waitForColVindexes(t, ks, "test", []string{"test_hash"}, executor) - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test: %v", err) } wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1345,7 +1345,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { RowsAffected: 1, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } // add another @@ -1371,9 +1371,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Fatalf("table test not defined in vschema") } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test: %v", err) } wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1384,7 +1384,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { RowsAffected: 2, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } stmt = "alter vschema on test add vindex test_hash_id2 (id2) using hash" @@ -1409,9 +1409,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Fatalf("table test not defined in vschema") } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test: %v", err) } wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1423,7 +1423,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { RowsAffected: 3, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } // drop one @@ -1436,9 +1436,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { // wait for up to 50ms for it to disappear deadline := time.Now().Add(50 * time.Millisecond) for { - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test: %v", err) } wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1504,9 +1504,9 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { t.Fatalf("table test2 not defined in vschema") } - qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vindexes on TestExecutor.test2", nil) + qr, err = executor.Execute(context.Background(), "TestExecute", session, "show vschema vindexes on TestExecutor.test2", nil) if err != nil { - t.Fatalf("error in show vindexes on TestExecutor.test2: %v", err) + t.Fatalf("error in show vschema vindexes on TestExecutor.test2: %v", err) } wantqr = &sqltypes.Result{ Fields: buildVarCharFields("Columns", "Name", "Type", "Params", "Owner"), @@ -1517,7 +1517,7 @@ func TestExecutorAddDropVindexDDL(t *testing.T) { RowsAffected: 2, } if !reflect.DeepEqual(qr, wantqr) { - t.Errorf("show vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) + t.Errorf("show vschema vindexes on TestExecutor.test:\n%+v, want\n%+v", qr, wantqr) } stmt = "alter vschema on test2 add vindex nonexistent (c1,c2)" @@ -1707,7 +1707,7 @@ func TestExecutorUnrecognized(t *testing.T) { _, err := executor.Execute(context.Background(), "TestExecute", NewSafeSession(&vtgatepb.Session{}), "invalid statement", nil) want := "unrecognized statement: invalid statement" if err == nil || err.Error() != want { - t.Errorf("show vschema_tables: %v, want %v", err, want) + t.Errorf("show vschema tables: %v, want %v", err, want) } } From b55d155f8b90693b2824e7d4fe85f8991bf01a30 Mon Sep 17 00:00:00 2001 From: Michael Demmer Date: Mon, 3 Dec 2018 10:39:21 -0800 Subject: [PATCH 22/35] add vschema ddl syntax to add/remove tables from unsharded keyspaces Since unsharded keyspaces don't have vindex definitions, implement a new syntax for adding / removing tables from the vschema: `alter vschema add table test_table` `alter vschema drop table test_table` Signed-off-by: Michael Demmer --- go/vt/sqlparser/ast.go | 26 +- go/vt/sqlparser/parse_test.go | 4 +- go/vt/sqlparser/sql.go | 3091 ++++++++++++++++---------------- go/vt/sqlparser/sql.y | 8 + go/vt/topotools/vschema_ddl.go | 24 + go/vt/vtgate/executor.go | 7 +- go/vt/vtgate/executor_test.go | 83 + 7 files changed, 1698 insertions(+), 1545 deletions(-) diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 3b904b12f91..98e7aa64553 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -746,16 +746,18 @@ type DDL struct { // DDL strings. const ( - CreateStr = "create" - AlterStr = "alter" - DropStr = "drop" - RenameStr = "rename" - TruncateStr = "truncate" - FlushStr = "flush" - CreateVindexStr = "create vindex" - DropVindexStr = "drop vindex" - AddColVindexStr = "on table add vindex" - DropColVindexStr = "on table drop vindex" + CreateStr = "create" + AlterStr = "alter" + DropStr = "drop" + RenameStr = "rename" + TruncateStr = "truncate" + FlushStr = "flush" + CreateVindexStr = "create vindex" + DropVindexStr = "drop vindex" + AddVschemaTableStr = "add vschema table" + DropVschemaTableStr = "drop vschema table" + AddColVindexStr = "on table add vindex" + DropColVindexStr = "on table drop vindex" // Vindex DDL param to specify the owner of a vindex VindexOwnerStr = "owner" @@ -795,6 +797,10 @@ func (node *DDL) Format(buf *TrackedBuffer) { buf.Myprintf("alter vschema create vindex %v %v", node.VindexSpec.Name, node.VindexSpec) case DropVindexStr: buf.Myprintf("alter vschema drop vindex %v", node.VindexSpec.Name) + case AddVschemaTableStr: + buf.Myprintf("alter vschema add table %v", node.Table) + case DropVschemaTableStr: + buf.Myprintf("alter vschema drop table %v", node.Table) case AddColVindexStr: buf.Myprintf("alter vschema on %v add vindex %v (", node.Table, node.VindexSpec.Name) for i, col := range node.VindexCols { diff --git a/go/vt/sqlparser/parse_test.go b/go/vt/sqlparser/parse_test.go index b2ad3f136b0..bdafd2061ae 100644 --- a/go/vt/sqlparser/parse_test.go +++ b/go/vt/sqlparser/parse_test.go @@ -927,7 +927,9 @@ var ( }, { input: "alter vschema drop vindex hash_vdx", }, { - input: "alter vschema on a add vindex hash (id)", + input: "alter vschema add table a", + }, { + input: "alter vschema drop table a", }, { input: "alter vschema on a add vindex hash (id)", }, { diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index a1c4f30501c..7575306054c 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -635,318 +635,326 @@ var yyExca = [...]int{ 5, 29, -2, 4, -1, 37, - 159, 298, - 160, 298, - -2, 288, + 159, 300, + 160, 300, + -2, 290, -1, 267, - 112, 634, - -2, 630, + 112, 636, + -2, 632, -1, 268, - 112, 635, - -2, 631, + 112, 637, + -2, 633, -1, 331, - 82, 805, + 82, 807, -2, 60, -1, 332, - 82, 762, + 82, 764, -2, 61, -1, 337, - 82, 741, - -2, 596, - -1, 339, - 82, 783, + 82, 743, -2, 598, - -1, 596, - 1, 350, - 5, 350, - 12, 350, - 13, 350, - 14, 350, - 15, 350, - 17, 350, - 19, 350, - 30, 350, - 31, 350, - 42, 350, - 43, 350, - 44, 350, - 45, 350, - 46, 350, - 48, 350, - 49, 350, - 52, 350, - 53, 350, - 55, 350, - 56, 350, - 266, 350, - -2, 368, - -1, 599, + -1, 339, + 82, 785, + -2, 600, + -1, 597, + 1, 352, + 5, 352, + 12, 352, + 13, 352, + 14, 352, + 15, 352, + 17, 352, + 19, 352, + 30, 352, + 31, 352, + 42, 352, + 43, 352, + 44, 352, + 45, 352, + 46, 352, + 48, 352, + 49, 352, + 52, 352, + 53, 352, + 55, 352, + 56, 352, + 266, 352, + -2, 370, + -1, 600, 53, 43, 55, 43, -2, 45, - -1, 737, - 112, 637, - -2, 633, - -1, 953, + -1, 740, + 112, 639, + -2, 635, + -1, 958, 5, 30, - -2, 434, - -1, 982, + -2, 436, + -1, 987, 5, 29, - -2, 570, - -1, 1235, + -2, 572, + -1, 1240, 5, 30, - -2, 571, - -1, 1290, - 5, 29, -2, 573, - -1, 1371, + -1, 1295, + 5, 29, + -2, 575, + -1, 1376, 5, 30, - -2, 574, + -2, 576, } const yyPrivate = 57344 -const yyLast = 12060 +const yyLast = 12140 var yyAct = [...]int{ - 268, 1406, 1396, 1192, 1359, 1074, 1269, 561, 985, 1255, - 1302, 1127, 841, 1003, 818, 1161, 57, 463, 1124, 246, - 986, 816, 272, 918, 884, 1028, 1128, 1140, 1009, 850, - 274, 237, 81, 762, 298, 840, 208, 945, 336, 208, - 1097, 1134, 772, 465, 837, 560, 3, 769, 1054, 1045, - 854, 609, 820, 805, 592, 790, 493, 593, 499, 702, - 771, 880, 608, 435, 739, 798, 505, 208, 81, 330, - 270, 927, 208, 513, 208, 255, 238, 239, 240, 241, - 325, 870, 244, 327, 575, 56, 1399, 1383, 1394, 903, - 864, 1369, 1391, 1193, 1382, 1368, 1119, 245, 1229, 440, - 1313, 1016, 1155, 902, 1015, 831, 259, 1017, 1156, 1157, - 467, 333, 1335, 526, 525, 535, 536, 528, 529, 530, - 531, 532, 533, 534, 527, 832, 833, 537, 610, 487, - 611, 907, 195, 243, 197, 24, 25, 52, 27, 28, - 901, 61, 242, 1036, 1169, 1170, 1171, 203, 199, 200, - 201, 1258, 1174, 1172, 43, 483, 863, 1275, 1212, 29, - 48, 49, 452, 484, 481, 482, 871, 63, 64, 65, - 66, 67, 1210, 236, 476, 477, 469, 1360, 471, 38, - 1077, 1076, 1390, 54, 678, 677, 1393, 486, 1073, 799, - 898, 895, 896, 1410, 894, 1351, 208, 855, 1414, 208, - 1303, 1070, 1004, 1006, 453, 208, 442, 1072, 468, 470, - 197, 208, 1078, 1305, 81, 1311, 81, 681, 81, 81, - 670, 81, 857, 81, 857, 905, 908, 196, 1150, 1149, - 1148, 438, 81, 472, 445, 473, 474, 210, 475, 198, - 478, 549, 550, 1340, 31, 32, 34, 33, 36, 488, - 50, 1029, 912, 1238, 1084, 911, 449, 963, 939, 1178, - 711, 900, 81, 517, 838, 265, 501, 459, 202, 703, - 1098, 37, 44, 45, 489, 490, 46, 47, 35, 1005, - 857, 1304, 1336, 899, 537, 527, 1121, 871, 537, 708, - 920, 39, 40, 1349, 41, 42, 466, 502, 436, 1408, - 547, 512, 1409, 1071, 1407, 1069, 1367, 1100, 1321, 436, - 1179, 598, 958, 957, 1061, 956, 1312, 1310, 856, 447, - 856, 448, 746, 208, 208, 208, 904, 1173, 791, 81, - 1138, 434, 511, 510, 1354, 81, 744, 745, 743, 906, - 1102, 70, 1106, 1059, 1101, 591, 1099, 205, 612, 512, - 704, 1104, 511, 510, 596, 714, 715, 672, 507, 1123, - 1103, 441, 511, 510, 455, 456, 457, 1415, 919, 512, - 511, 510, 333, 1105, 1107, 510, 856, 71, 326, 512, - 53, 853, 851, 437, 852, 439, 860, 512, 710, 849, - 855, 512, 861, 791, 503, 972, 577, 578, 579, 580, - 581, 582, 583, 511, 510, 600, 1416, 729, 731, 732, - 1060, 1034, 606, 730, 1373, 1065, 1062, 1055, 1063, 1058, - 512, 1265, 1264, 1056, 1057, 709, 528, 529, 530, 531, - 532, 533, 534, 527, 194, 208, 537, 1064, 443, 444, - 81, 54, 511, 510, 1049, 208, 208, 81, 1048, 1037, - 208, 742, 763, 208, 764, 1375, 208, 669, 22, 512, - 208, 1350, 81, 81, 676, 1286, 1262, 81, 81, 81, - 81, 81, 81, 936, 937, 938, 1081, 81, 81, 691, - 692, 1018, 1046, 1019, 693, 694, 695, 696, 697, 698, - 1308, 1392, 1378, 492, 699, 700, 1308, 1363, 690, 322, - 323, 1347, 1308, 492, 492, 81, 1195, 446, 1029, 208, - 451, 1308, 1341, 1308, 1307, 81, 458, 1024, 250, 1253, - 1252, 716, 460, 765, 530, 531, 532, 533, 534, 527, - 687, 688, 537, 682, 1240, 492, 1237, 492, 1185, 1184, - 1376, 551, 552, 553, 554, 555, 556, 557, 558, 1181, - 1182, 741, 1181, 1180, 1318, 740, 737, 951, 492, 81, - 686, 736, 526, 525, 535, 536, 528, 529, 530, 531, - 532, 533, 534, 527, 802, 492, 537, 673, 491, 718, - 774, 492, 24, 671, 668, 619, 618, 1317, 733, 735, - 208, 781, 785, 603, 24, 461, 454, 792, 208, 208, - 1314, 1125, 208, 208, 1137, 1137, 81, 1175, 1010, 776, - 1289, 858, 58, 1010, 825, 946, 602, 774, 980, 81, - 766, 767, 981, 826, 1233, 777, 778, 1320, 596, 1087, - 54, 787, 596, 795, 590, 604, 599, 602, 788, 802, - 967, 801, 54, 965, 962, 794, 960, 796, 797, 333, - 24, 802, 951, 1183, 299, 51, 1137, 807, 810, 811, - 812, 808, 842, 809, 813, 824, 802, 1141, 1142, 1020, - 829, 208, 81, 951, 81, 828, 830, 951, 81, 81, - 602, 208, 208, 845, 966, 208, 81, 964, 961, 890, - 959, 892, 886, 807, 810, 811, 812, 808, 54, 809, - 813, 605, 208, 916, 208, 208, 51, 208, 712, 680, - 252, 54, 1384, 1357, 251, 872, 873, 874, 1271, 866, - 867, 868, 869, 1260, 865, 1075, 882, 883, 1245, 288, - 287, 290, 291, 292, 293, 877, 878, 879, 289, 294, - 885, 1166, 1141, 1142, 1401, 1023, 620, 881, 876, 875, - 737, 888, 1397, 1168, 1144, 736, 674, 675, 54, 1125, - 1050, 679, 706, 684, 326, 997, 999, 685, 811, 812, - 998, 928, 995, 929, 741, 724, 1147, 996, 740, 1146, - 994, 993, 256, 257, 935, 738, 1388, 1381, 747, 748, - 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, - 759, 760, 761, 208, 208, 208, 208, 208, 941, 1083, - 924, 1386, 934, 506, 933, 208, 1041, 494, 208, 617, - 725, 462, 208, 1033, 987, 1356, 208, 297, 504, 495, - 1355, 950, 1287, 596, 596, 596, 596, 596, 1031, 1025, - 1231, 81, 1267, 891, 982, 971, 683, 1011, 596, 969, - 815, 253, 254, 1021, 506, 1012, 596, 988, 932, 79, - 991, 989, 990, 776, 992, 247, 931, 1000, 464, 1325, - 464, 248, 464, 464, 1008, 464, 58, 464, 1324, 1273, - 1030, 1010, 1013, 485, 842, 701, 464, 1403, 1402, 81, - 81, 508, 1403, 1337, 1259, 335, 707, 60, 62, 601, - 55, 800, 1, 1026, 1027, 1395, 51, 1052, 1194, 1268, - 897, 1358, 1301, 1160, 827, 1040, 81, 1042, 1043, 1044, - 848, 546, 839, 69, 548, 1053, 1047, 433, 68, 1348, - 847, 208, 846, 1079, 1309, 1257, 859, 1035, 862, 1167, - 81, 1353, 1032, 625, 1066, 623, 624, 622, 1038, 1039, - 627, 626, 559, 621, 563, 564, 565, 566, 567, 568, - 569, 570, 571, 221, 574, 576, 576, 576, 576, 576, - 576, 576, 576, 584, 585, 586, 587, 1080, 597, 328, - 1091, 814, 889, 1089, 81, 81, 1120, 613, 1090, 1126, - 887, 1108, 913, 914, 1096, 509, 915, 72, 1068, 1109, - 1067, 893, 737, 987, 479, 480, 223, 1114, 81, 545, - 942, 943, 944, 917, 1136, 930, 1129, 1014, 923, 1145, - 334, 81, 1132, 81, 81, 713, 1152, 498, 1323, 1131, - 1272, 970, 572, 789, 273, 1159, 728, 286, 261, 283, - 1154, 335, 285, 335, 284, 335, 335, 719, 335, 1151, - 335, 208, 1164, 1165, 1163, 979, 1158, 519, 271, 335, - 263, 595, 588, 806, 842, 804, 842, 803, 208, 1143, - 1139, 594, 1086, 1228, 81, 1334, 723, 81, 81, 208, - 26, 717, 59, 1176, 1177, 81, 1187, 258, 208, 515, - 19, 18, 17, 20, 464, 16, 15, 14, 1188, 450, - 1190, 464, 30, 21, 1199, 13, 12, 11, 10, 1201, - 9, 8, 7, 6, 5, 1200, 464, 464, 596, 4, - 249, 464, 464, 464, 464, 464, 464, 1208, 1089, 23, - 2, 464, 464, 0, 0, 0, 1225, 492, 0, 773, - 775, 0, 0, 0, 0, 1232, 0, 0, 0, 0, - 0, 0, 0, 1241, 0, 793, 335, 0, 1242, 81, - 987, 0, 614, 0, 0, 0, 0, 81, 0, 0, - 0, 1021, 1251, 0, 526, 525, 535, 536, 528, 529, - 530, 531, 532, 533, 534, 527, 0, 81, 537, 1205, - 1206, 0, 1207, 0, 81, 1209, 0, 1211, 0, 0, - 0, 0, 842, 51, 1266, 0, 0, 0, 0, 0, - 0, 0, 1093, 1094, 0, 0, 0, 0, 563, 0, - 0, 0, 0, 0, 0, 1110, 1111, 1112, 1113, 0, - 1115, 1116, 1117, 1118, 0, 0, 0, 1270, 81, 81, - 0, 81, 1085, 0, 0, 0, 81, 0, 81, 81, - 81, 208, 817, 1254, 81, 1296, 597, 1297, 1298, 1299, - 1288, 1295, 1261, 0, 1263, 1300, 0, 335, 1129, 1306, - 0, 0, 81, 0, 335, 0, 0, 0, 0, 0, - 0, 1322, 1290, 0, 0, 0, 496, 500, 1274, 335, - 335, 0, 0, 0, 335, 335, 335, 335, 335, 335, - 0, 1338, 0, 518, 335, 335, 1315, 0, 1316, 81, - 0, 0, 1346, 0, 1345, 0, 0, 0, 0, 0, - 0, 81, 81, 0, 1129, 0, 464, 1361, 464, 0, - 0, 0, 720, 1365, 1362, 0, 0, 1339, 562, 0, - 464, 81, 515, 0, 948, 335, 1370, 573, 949, 0, - 0, 0, 208, 0, 0, 953, 954, 955, 1203, 0, - 987, 81, 1186, 0, 1270, 842, 968, 0, 0, 1380, - 0, 974, 0, 975, 976, 977, 978, 0, 0, 1189, - 0, 0, 0, 1385, 1387, 81, 768, 0, 0, 0, - 1198, 940, 0, 0, 1389, 1002, 783, 783, 1400, 521, - 0, 524, 783, 0, 0, 1411, 0, 538, 539, 540, - 541, 542, 543, 544, 1092, 522, 523, 520, 526, 525, - 535, 536, 528, 529, 530, 531, 532, 533, 534, 527, - 0, 0, 537, 335, 526, 525, 535, 536, 528, 529, - 530, 531, 532, 533, 534, 527, 335, 0, 537, 0, - 0, 0, 0, 983, 984, 0, 0, 597, 597, 597, - 597, 597, 0, 218, 0, 0, 0, 0, 0, 0, - 0, 0, 817, 0, 1007, 0, 0, 0, 0, 0, - 597, 0, 1276, 1277, 0, 1278, 1279, 231, 1280, 1281, - 0, 1282, 1283, 1284, 0, 0, 0, 0, 0, 335, - 0, 335, 0, 0, 0, 909, 910, 0, 0, 0, + 268, 1411, 1401, 1197, 1364, 1079, 272, 990, 562, 844, + 1008, 1274, 1132, 1166, 991, 1260, 57, 821, 246, 1133, + 1129, 1307, 840, 887, 873, 853, 923, 843, 1139, 1033, + 1014, 1102, 81, 561, 3, 819, 208, 336, 1145, 208, + 765, 775, 705, 1059, 1050, 857, 950, 298, 808, 823, + 772, 742, 793, 593, 610, 237, 494, 500, 609, 594, + 255, 330, 883, 514, 325, 801, 435, 208, 81, 327, + 932, 506, 208, 56, 208, 1404, 774, 1388, 1399, 1374, + 1396, 1198, 1387, 1373, 867, 245, 1124, 1234, 440, 1318, + 468, 203, 199, 200, 201, 1161, 1162, 1160, 270, 61, + 238, 239, 240, 241, 834, 259, 244, 576, 488, 1340, + 527, 526, 536, 537, 529, 530, 531, 532, 533, 534, + 535, 528, 243, 906, 538, 63, 64, 65, 66, 67, + 1174, 1175, 1176, 835, 836, 242, 1041, 905, 1179, 1177, + 1021, 484, 611, 1020, 612, 195, 1022, 197, 866, 485, + 482, 483, 218, 1263, 453, 874, 470, 1280, 472, 1217, + 1215, 236, 477, 478, 680, 910, 487, 1082, 1081, 678, + 1398, 1395, 1365, 1078, 904, 802, 231, 1356, 858, 1419, + 1103, 454, 1415, 442, 1308, 197, 1009, 1011, 469, 471, + 1083, 684, 671, 860, 860, 1345, 208, 1310, 679, 208, + 860, 599, 1155, 1154, 1153, 208, 438, 681, 445, 210, + 198, 208, 202, 1316, 81, 1243, 81, 1105, 81, 81, + 1183, 81, 1034, 81, 901, 898, 899, 211, 897, 436, + 917, 841, 81, 916, 214, 550, 551, 205, 1089, 968, + 196, 1075, 222, 217, 944, 714, 518, 1077, 528, 460, + 1107, 538, 1111, 450, 1106, 538, 1104, 513, 1354, 908, + 911, 1109, 81, 1010, 436, 1309, 502, 706, 326, 711, + 1108, 1184, 70, 437, 220, 439, 467, 963, 1066, 1341, + 230, 1326, 1143, 1110, 1112, 503, 613, 874, 1413, 859, + 859, 1414, 1126, 1412, 1372, 903, 859, 434, 490, 491, + 925, 856, 854, 511, 855, 794, 212, 1064, 71, 852, + 858, 299, 51, 1178, 1317, 1315, 447, 902, 448, 513, + 794, 449, 977, 208, 208, 208, 441, 512, 511, 81, + 1039, 673, 1359, 224, 215, 81, 225, 226, 227, 229, + 508, 228, 234, 1076, 513, 1074, 216, 219, 707, 213, + 233, 232, 504, 512, 511, 1420, 456, 457, 458, 592, + 907, 749, 1378, 51, 531, 532, 533, 534, 535, 528, + 513, 251, 538, 909, 1065, 747, 748, 746, 924, 1070, + 1067, 1060, 1068, 1063, 863, 512, 511, 1061, 1062, 601, + 864, 261, 1128, 1270, 1421, 717, 718, 446, 607, 1380, + 452, 1069, 513, 443, 444, 54, 459, 732, 734, 735, + 1269, 194, 461, 733, 1054, 745, 274, 1053, 466, 578, + 579, 580, 581, 582, 583, 584, 529, 530, 531, 532, + 533, 534, 535, 528, 1042, 208, 538, 1355, 1291, 962, + 81, 961, 1267, 512, 511, 208, 208, 81, 713, 22, + 1086, 208, 1352, 766, 208, 767, 1200, 208, 512, 511, + 513, 208, 1051, 81, 81, 941, 942, 943, 81, 81, + 81, 81, 81, 81, 1034, 513, 322, 323, 81, 81, + 1023, 1029, 1024, 1313, 1397, 712, 333, 526, 536, 537, + 529, 530, 531, 532, 533, 534, 535, 528, 693, 768, + 538, 690, 512, 511, 297, 689, 81, 1383, 493, 250, + 208, 1313, 1368, 1313, 493, 604, 81, 674, 685, 513, + 672, 719, 1313, 1346, 591, 465, 600, 465, 669, 465, + 465, 691, 465, 462, 465, 455, 79, 1313, 1312, 1258, + 1257, 1245, 493, 465, 527, 526, 536, 537, 529, 530, + 531, 532, 533, 534, 535, 528, 740, 605, 538, 603, + 81, 1242, 493, 51, 493, 721, 1190, 1189, 1381, 743, + 1186, 1187, 335, 1186, 1185, 1323, 784, 788, 547, 736, + 1322, 549, 795, 288, 287, 290, 291, 292, 293, 738, + 1319, 208, 289, 294, 956, 493, 1180, 951, 779, 208, + 208, 805, 493, 208, 208, 777, 493, 81, 1015, 560, + 861, 564, 565, 566, 567, 568, 569, 570, 571, 572, + 81, 575, 577, 577, 577, 577, 577, 577, 577, 577, + 585, 586, 587, 588, 1092, 598, 621, 798, 829, 497, + 501, 1142, 780, 781, 791, 804, 675, 676, 790, 769, + 770, 805, 682, 620, 619, 326, 519, 58, 688, 875, + 876, 877, 797, 1015, 799, 800, 827, 832, 831, 972, + 805, 24, 208, 81, 1130, 81, 24, 1142, 956, 81, + 81, 208, 208, 777, 208, 208, 548, 848, 208, 81, + 970, 563, 889, 967, 965, 985, 828, 956, 603, 986, + 574, 492, 1238, 1325, 1294, 208, 1142, 208, 208, 805, + 208, 728, 1188, 971, 869, 870, 871, 872, 335, 54, + 335, 24, 335, 335, 54, 335, 1025, 335, 885, 886, + 880, 881, 882, 833, 969, 956, 335, 966, 964, 603, + 597, 606, 810, 813, 814, 815, 811, 333, 812, 816, + 715, 465, 740, 810, 813, 814, 815, 811, 465, 812, + 816, 683, 54, 1146, 1147, 252, 516, 1389, 1362, 54, + 1276, 1265, 868, 933, 465, 465, 934, 1250, 888, 465, + 465, 465, 465, 465, 465, 1171, 1146, 1147, 1080, 465, + 465, 1028, 803, 884, 743, 879, 878, 891, 946, 1406, + 1402, 1173, 1149, 940, 1130, 830, 208, 208, 208, 208, + 208, 992, 1055, 54, 709, 687, 727, 1002, 208, 1000, + 1152, 208, 1003, 1151, 1001, 208, 999, 998, 1004, 208, + 814, 815, 1393, 335, 1386, 987, 256, 257, 1088, 615, + 929, 507, 1391, 939, 81, 976, 938, 1046, 618, 463, + 955, 495, 1038, 1026, 779, 1361, 505, 1360, 1292, 993, + 1017, 51, 996, 496, 1016, 1005, 994, 995, 974, 997, + 1036, 1030, 1236, 892, 1013, 1272, 564, 894, 708, 686, + 818, 507, 914, 915, 247, 918, 919, 1035, 1018, 920, + 253, 254, 81, 81, 1043, 1044, 1045, 937, 1047, 1048, + 1049, 1031, 1032, 729, 730, 936, 922, 1330, 248, 58, + 820, 928, 1329, 1278, 598, 1015, 486, 1408, 1407, 1408, + 704, 81, 509, 1342, 1052, 1264, 710, 60, 62, 602, + 55, 1, 1400, 1199, 1273, 900, 208, 739, 744, 1363, + 1306, 1165, 1071, 851, 335, 81, 842, 69, 433, 68, + 1353, 335, 1058, 850, 849, 1314, 563, 1262, 862, 782, + 783, 1040, 865, 1172, 1358, 1085, 1037, 335, 335, 626, + 624, 625, 335, 335, 335, 335, 335, 335, 623, 628, + 627, 622, 335, 335, 465, 221, 465, 328, 817, 81, + 81, 1125, 992, 1131, 1096, 1114, 1095, 614, 1101, 890, + 465, 510, 72, 1113, 1073, 839, 740, 1072, 896, 480, + 723, 481, 223, 81, 546, 597, 935, 1019, 334, 597, + 516, 1141, 1136, 335, 1137, 333, 81, 716, 81, 81, + 499, 1157, 1328, 1277, 1134, 1150, 975, 1164, 845, 573, + 792, 1156, 265, 273, 731, 286, 283, 1159, 285, 284, + 722, 945, 984, 1163, 520, 1168, 208, 271, 263, 596, + 589, 1169, 1170, 809, 771, 807, 1181, 1182, 806, 1148, + 1144, 595, 1091, 208, 786, 786, 1233, 1339, 726, 81, + 786, 26, 81, 81, 208, 59, 258, 19, 18, 17, + 81, 20, 16, 208, 536, 537, 529, 530, 531, 532, + 533, 534, 535, 528, 930, 931, 538, 501, 15, 14, + 451, 335, 1204, 988, 989, 1192, 30, 598, 598, 598, + 598, 598, 1205, 21, 335, 13, 12, 1193, 1206, 1195, + 11, 1213, 820, 739, 1012, 10, 9, 1090, 8, 7, + 598, 6, 5, 4, 249, 23, 2, 0, 0, 992, + 0, 0, 1237, 0, 0, 0, 0, 1247, 1246, 0, + 0, 0, 0, 744, 81, 0, 0, 0, 0, 957, + 0, 0, 81, 1026, 0, 0, 1256, 335, 0, 335, + 0, 0, 0, 912, 913, 0, 978, 0, 1210, 1211, + 0, 1212, 81, 335, 1214, 0, 1216, 0, 0, 81, + 0, 0, 0, 0, 465, 720, 0, 0, 0, 0, + 1266, 0, 1268, 0, 0, 0, 464, 0, 0, 335, + 0, 0, 597, 597, 597, 597, 597, 0, 0, 0, + 0, 0, 465, 0, 0, 0, 1279, 597, 0, 0, + 0, 0, 0, 81, 81, 597, 81, 0, 0, 0, + 0, 81, 1259, 81, 81, 81, 208, 1191, 1293, 81, + 0, 0, 845, 776, 778, 1300, 1301, 0, 1302, 1303, + 1304, 0, 1311, 1305, 1194, 1295, 0, 81, 0, 796, + 0, 0, 0, 0, 0, 1203, 1134, 0, 0, 1320, + 0, 1321, 1327, 0, 0, 0, 0, 0, 1135, 0, + 51, 0, 0, 0, 0, 0, 0, 1343, 0, 786, + 0, 0, 0, 0, 81, 0, 1350, 1087, 552, 553, + 554, 555, 556, 557, 558, 559, 81, 81, 1351, 0, + 1344, 0, 0, 0, 0, 0, 1367, 1366, 0, 1370, + 0, 0, 1134, 0, 0, 0, 81, 0, 335, 992, + 1375, 0, 0, 0, 0, 0, 0, 208, 0, 0, + 0, 0, 0, 1094, 0, 0, 81, 0, 0, 1127, + 0, 0, 0, 0, 1385, 1230, 493, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1119, 1390, 1392, + 81, 0, 0, 0, 0, 0, 1056, 335, 0, 0, + 0, 0, 0, 1405, 598, 1394, 0, 1158, 0, 0, + 1416, 0, 0, 527, 526, 536, 537, 529, 530, 531, + 532, 533, 534, 535, 528, 335, 0, 538, 0, 0, + 1097, 0, 473, 0, 474, 475, 1232, 476, 0, 479, + 0, 0, 0, 0, 845, 0, 845, 0, 489, 335, + 527, 526, 536, 537, 529, 530, 531, 532, 533, 534, + 535, 528, 0, 0, 538, 1252, 1253, 1254, 0, 0, + 953, 0, 0, 335, 954, 0, 0, 0, 0, 0, + 0, 958, 959, 960, 0, 0, 0, 0, 0, 0, + 786, 0, 973, 1138, 1140, 0, 0, 979, 0, 980, + 981, 982, 983, 465, 0, 0, 0, 0, 1094, 597, + 0, 0, 0, 0, 0, 0, 0, 1140, 0, 0, + 1235, 1007, 0, 0, 0, 0, 0, 563, 0, 0, + 335, 0, 335, 1167, 0, 1248, 0, 0, 1249, 0, + 0, 1251, 0, 0, 0, 0, 0, 0, 0, 0, + 1135, 0, 0, 1296, 0, 0, 0, 0, 1379, 0, + 0, 0, 0, 741, 0, 0, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, + 764, 0, 845, 1196, 1324, 0, 1201, 1202, 0, 0, + 0, 0, 0, 0, 335, 0, 0, 498, 0, 0, + 0, 0, 522, 0, 525, 0, 1135, 0, 51, 0, + 539, 540, 541, 542, 543, 544, 545, 1275, 523, 524, + 521, 527, 526, 536, 537, 529, 530, 531, 532, 533, + 534, 535, 528, 206, 0, 538, 235, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 786, 0, 0, + 0, 0, 0, 0, 0, 0, 670, 1100, 0, 0, + 0, 262, 0, 677, 206, 0, 0, 0, 335, 206, + 0, 206, 0, 0, 0, 0, 1261, 0, 0, 694, + 695, 0, 0, 0, 696, 697, 698, 699, 700, 701, + 1227, 493, 0, 0, 702, 703, 335, 0, 0, 0, 0, 0, 0, 335, 0, 0, 0, 0, 0, 0, - 0, 0, 497, 0, 705, 0, 0, 0, 0, 1095, - 0, 0, 0, 0, 0, 1222, 492, 0, 211, 335, - 0, 0, 0, 0, 464, 214, 0, 0, 0, 726, - 727, 0, 0, 222, 217, 0, 0, 0, 206, 0, - 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, - 464, 0, 0, 526, 525, 535, 536, 528, 529, 530, - 531, 532, 533, 534, 527, 220, 262, 537, 0, 206, - 0, 230, 0, 0, 206, 0, 206, 0, 0, 0, - 0, 0, 562, 0, 0, 779, 780, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 212, 525, 535, - 536, 528, 529, 530, 531, 532, 533, 534, 527, 783, - 0, 537, 0, 0, 0, 0, 1130, 0, 51, 0, - 0, 0, 0, 0, 224, 215, 0, 225, 226, 227, - 229, 836, 228, 234, 0, 0, 0, 216, 219, 0, - 213, 233, 232, 1374, 1404, 0, 0, 0, 335, 1202, - 0, 0, 0, 0, 0, 0, 1204, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1213, 1214, 1215, - 0, 1218, 0, 0, 1221, 0, 1224, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1234, - 1235, 1236, 0, 1239, 1219, 492, 1051, 335, 206, 0, - 0, 206, 0, 0, 0, 0, 0, 206, 0, 0, - 1250, 0, 0, 206, 0, 0, 0, 1216, 492, 0, - 1226, 0, 597, 335, 0, 0, 0, 0, 925, 926, - 0, 500, 526, 525, 535, 536, 528, 529, 530, 531, - 532, 533, 534, 527, 0, 0, 537, 335, 0, 0, - 0, 0, 0, 0, 1227, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, - 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1247, 1248, 1249, 0, 1285, 783, 0, - 0, 1133, 1135, 952, 526, 525, 535, 536, 528, 529, - 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, - 973, 0, 0, 0, 0, 1135, 0, 0, 0, 0, - 0, 464, 0, 0, 0, 206, 206, 206, 335, 0, - 335, 1162, 0, 0, 0, 1326, 1327, 1328, 1329, 1330, - 1331, 1332, 1333, 535, 536, 528, 529, 530, 531, 532, - 533, 534, 527, 0, 0, 537, 1342, 1343, 1344, 0, - 0, 0, 0, 0, 0, 0, 0, 492, 1130, 0, - 0, 1291, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1191, 0, 0, 1196, 1197, 0, 0, 0, 0, - 0, 0, 335, 1366, 0, 0, 0, 0, 1371, 0, - 0, 1223, 1319, 0, 526, 525, 535, 536, 528, 529, - 530, 531, 532, 533, 534, 527, 0, 1377, 537, 0, - 0, 0, 0, 0, 1130, 0, 51, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 1082, - 0, 0, 0, 0, 0, 783, 0, 206, 206, 0, - 0, 0, 206, 0, 0, 206, 1220, 0, 206, 0, - 0, 0, 689, 1412, 1413, 0, 335, 0, 0, 0, - 0, 0, 0, 0, 1256, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, - 0, 1122, 0, 0, 335, 0, 0, 0, 0, 0, - 0, 335, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, - 689, 0, 0, 0, 0, 0, 0, 0, 1398, 1153, - 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 0, 0, 537, 1292, 1293, 0, 1294, 0, - 0, 0, 0, 1256, 0, 1256, 1256, 1256, 0, 0, - 0, 1162, 262, 0, 0, 0, 0, 262, 262, 0, - 0, 784, 784, 262, 0, 0, 0, 784, 0, 1256, - 0, 0, 0, 0, 0, 0, 0, 262, 262, 262, - 262, 0, 206, 642, 0, 0, 0, 0, 0, 0, - 206, 822, 0, 0, 206, 206, 0, 0, 0, 0, - 947, 0, 0, 0, 0, 0, 1352, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 335, 335, - 526, 525, 535, 536, 528, 529, 530, 531, 532, 533, - 534, 527, 1230, 0, 537, 783, 0, 0, 1372, 562, - 0, 0, 0, 0, 0, 0, 0, 1243, 0, 0, - 1244, 0, 0, 1246, 0, 0, 0, 0, 1379, 0, - 0, 630, 0, 206, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 206, 206, 0, 0, 206, 0, 0, - 0, 0, 1256, 0, 0, 0, 0, 0, 0, 0, - 1217, 0, 0, 0, 206, 0, 921, 922, 643, 206, - 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, - 656, 657, 658, 659, 660, 661, 662, 0, 663, 664, - 665, 666, 667, 644, 645, 646, 647, 628, 629, 0, - 0, 631, 0, 632, 633, 634, 635, 636, 637, 638, - 639, 640, 641, 648, 649, 650, 651, 652, 653, 654, - 655, 0, 0, 262, 526, 525, 535, 536, 528, 529, - 530, 531, 532, 533, 534, 527, 0, 0, 537, 0, + 1403, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1369, 563, 0, 0, 0, 1224, 493, 527, 526, + 536, 537, 529, 530, 531, 532, 533, 534, 535, 528, + 0, 0, 538, 0, 1275, 845, 0, 1297, 1298, 0, + 1299, 0, 0, 0, 0, 1261, 0, 1261, 1261, 1261, + 0, 0, 0, 1167, 527, 526, 536, 537, 529, 530, + 531, 532, 533, 534, 535, 528, 0, 0, 538, 0, + 0, 1261, 0, 0, 0, 0, 0, 0, 0, 0, + 947, 948, 949, 206, 0, 0, 206, 1207, 0, 0, + 0, 0, 206, 0, 1209, 0, 0, 0, 206, 0, + 0, 0, 0, 0, 0, 1218, 1219, 1220, 1357, 1223, + 0, 0, 1226, 0, 1229, 0, 0, 0, 0, 0, + 335, 335, 0, 0, 0, 0, 0, 1239, 1240, 1241, + 0, 1244, 0, 0, 0, 0, 0, 786, 0, 0, + 1377, 0, 0, 0, 0, 0, 0, 0, 1255, 0, + 24, 25, 52, 27, 28, 0, 0, 0, 0, 0, + 1384, 0, 0, 0, 0, 0, 0, 0, 0, 43, + 0, 0, 0, 0, 29, 48, 49, 0, 0, 893, + 0, 895, 0, 0, 1261, 0, 0, 0, 1221, 493, + 0, 0, 0, 0, 38, 921, 0, 0, 54, 0, + 0, 0, 0, 0, 493, 0, 0, 0, 0, 0, + 206, 206, 206, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1290, 527, 526, 536, 537, + 529, 530, 531, 532, 533, 534, 535, 528, 0, 0, + 538, 527, 526, 536, 537, 529, 530, 531, 532, 533, + 534, 535, 528, 0, 0, 538, 0, 0, 0, 31, + 32, 34, 33, 36, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 1331, 1332, 1333, 1334, 1335, 1336, 1337, + 1338, 0, 0, 1231, 1098, 1099, 37, 44, 45, 0, + 0, 46, 47, 35, 1347, 1348, 1349, 1115, 1116, 1117, + 1118, 1228, 1120, 1121, 1122, 1123, 39, 40, 0, 41, + 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, + 0, 1371, 206, 206, 1225, 0, 1376, 0, 206, 0, + 0, 206, 0, 0, 206, 0, 0, 0, 692, 0, + 0, 0, 0, 0, 0, 1382, 643, 527, 526, 536, + 537, 529, 530, 531, 532, 533, 534, 535, 528, 0, + 0, 538, 0, 0, 0, 527, 526, 536, 537, 529, + 530, 531, 532, 533, 534, 535, 528, 0, 0, 538, + 0, 0, 0, 0, 0, 53, 0, 206, 0, 1057, + 0, 1417, 1418, 0, 0, 0, 692, 0, 527, 526, + 536, 537, 529, 530, 531, 532, 533, 534, 535, 528, + 0, 0, 538, 0, 0, 0, 0, 1084, 0, 0, + 1208, 0, 0, 0, 631, 527, 526, 536, 537, 529, + 530, 531, 532, 533, 534, 535, 528, 0, 262, 538, + 0, 0, 0, 262, 262, 0, 0, 787, 787, 262, + 1222, 0, 0, 787, 0, 0, 0, 0, 0, 0, + 0, 644, 0, 262, 262, 262, 262, 0, 206, 0, + 0, 0, 0, 0, 0, 0, 206, 825, 0, 0, + 206, 206, 0, 657, 658, 659, 660, 661, 662, 663, + 0, 664, 665, 666, 667, 668, 645, 646, 647, 648, + 629, 630, 0, 0, 632, 0, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 642, 649, 650, 651, 652, + 653, 654, 655, 656, 527, 526, 536, 537, 529, 530, + 531, 532, 533, 534, 535, 528, 0, 0, 538, 0, + 0, 0, 0, 0, 1281, 1282, 952, 1283, 1284, 206, + 1285, 1286, 0, 1287, 1288, 1289, 0, 0, 206, 206, + 0, 206, 206, 0, 0, 206, 527, 526, 536, 537, + 529, 530, 531, 532, 533, 534, 535, 528, 0, 0, + 538, 0, 206, 0, 926, 927, 0, 206, 0, 0, + 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 784, 206, 206, 206, 206, 206, - 0, 0, 0, 0, 0, 0, 0, 1001, 0, 0, - 206, 0, 0, 0, 822, 0, 0, 0, 206, 0, - 0, 526, 525, 535, 536, 528, 529, 530, 531, 532, - 533, 534, 527, 1364, 562, 537, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 787, 206, 206, 206, 206, 206, 1271, 0, + 0, 0, 0, 0, 0, 1006, 0, 0, 206, 0, + 0, 0, 825, 0, 0, 0, 206, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1409, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -958,14 +966,14 @@ var yyAct = [...]int{ 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 692, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 784, 138, 0, 0, 0, 0, 269, + 0, 0, 0, 787, 138, 0, 0, 0, 0, 269, 0, 0, 0, 102, 0, 266, 0, 0, 0, 119, 309, 121, 0, 0, 158, 130, 0, 0, 0, 0, - 300, 301, 0, 0, 0, 0, 0, 0, 834, 0, + 300, 301, 0, 0, 0, 0, 0, 0, 837, 0, 54, 0, 0, 267, 288, 287, 290, 291, 292, 293, - 0, 0, 95, 289, 294, 295, 296, 835, 0, 0, + 0, 0, 95, 289, 294, 295, 296, 838, 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 278, 279, 0, 0, 0, 0, 320, @@ -976,7 +984,7 @@ var yyAct = [...]int{ 0, 98, 0, 152, 140, 174, 0, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, - 784, 149, 101, 106, 100, 137, 167, 168, 99, 192, + 787, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, 104, 111, 143, 124, 144, 112, 132, 131, 133, 0, 0, 0, 159, 176, 193, @@ -987,16 +995,16 @@ var yyAct = [...]int{ 304, 305, 307, 0, 306, 82, 0, 120, 190, 147, 105, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 822, 0, 0, 0, 421, 412, 0, + 0, 0, 0, 825, 0, 0, 0, 421, 412, 0, 383, 424, 361, 375, 432, 376, 377, 405, 347, 391, 138, 373, 0, 364, 342, 370, 343, 362, 385, 102, 388, 360, 414, 394, 423, 119, 430, 121, 399, 0, 158, 130, 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, 425, 374, 403, 426, 0, 0, 0, 80, - 0, 843, 844, 0, 0, 0, 0, 0, 95, 0, + 0, 846, 847, 0, 0, 0, 0, 0, 95, 0, 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, - 431, 418, 367, 368, 1022, 0, 0, 0, 0, 0, - 784, 386, 390, 407, 380, 0, 0, 0, 0, 0, + 431, 418, 367, 368, 1027, 0, 0, 0, 0, 0, + 787, 386, 390, 407, 380, 0, 0, 0, 0, 0, 0, 0, 0, 365, 206, 397, 0, 0, 0, 349, 346, 0, 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, 340, 108, 411, 417, 381, 209, 419, 379, @@ -1019,7 +1027,7 @@ var yyAct = [...]int{ 102, 388, 360, 414, 394, 423, 119, 430, 121, 399, 0, 158, 130, 0, 0, 387, 416, 389, 410, 382, 406, 352, 398, 425, 374, 403, 426, 0, 0, 0, - 80, 0, 843, 844, 0, 0, 0, 0, 0, 95, + 80, 0, 846, 847, 0, 0, 0, 0, 0, 95, 0, 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, 390, 407, 380, 0, 0, 0, 0, @@ -1075,7 +1083,7 @@ var yyAct = [...]int{ 0, 95, 0, 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, 390, 407, 380, 0, 0, - 0, 0, 0, 0, 1088, 0, 365, 0, 397, 0, + 0, 0, 0, 0, 1093, 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, 340, 108, 411, 417, 381, 209, 419, 379, 378, 422, 145, 0, 161, 110, 118, @@ -1101,7 +1109,7 @@ var yyAct = [...]int{ 0, 0, 95, 0, 401, 420, 372, 402, 404, 341, 400, 0, 345, 348, 431, 418, 367, 368, 0, 0, 0, 0, 0, 0, 0, 386, 390, 407, 380, 0, - 0, 0, 0, 0, 0, 734, 0, 365, 0, 397, + 0, 0, 0, 0, 0, 737, 0, 365, 0, 397, 0, 0, 0, 349, 346, 0, 0, 384, 0, 0, 0, 351, 0, 366, 408, 0, 340, 108, 411, 417, 381, 209, 419, 379, 378, 422, 145, 0, 161, 110, @@ -1238,7 +1246,7 @@ var yyAct = [...]int{ 422, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 415, 363, 371, 98, 369, 152, 140, 174, 396, 141, 151, 122, 166, 146, 173, 181, 182, - 163, 180, 189, 84, 162, 607, 96, 155, 86, 170, + 163, 180, 189, 84, 162, 608, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 338, 178, 135, 165, 171, 129, 126, 87, 169, 127, 125, 117, @@ -1275,7 +1283,7 @@ var yyAct = [...]int{ 153, 97, 175, 157, 355, 358, 353, 354, 392, 393, 427, 428, 429, 409, 350, 0, 356, 357, 0, 413, 395, 82, 0, 120, 190, 147, 105, 177, 138, 0, - 0, 770, 0, 269, 0, 0, 0, 102, 0, 266, + 0, 773, 0, 269, 0, 0, 0, 102, 0, 266, 0, 0, 0, 119, 309, 121, 0, 0, 158, 130, 0, 0, 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0, 267, 288, 287, @@ -1303,7 +1311,7 @@ var yyAct = [...]int{ 0, 269, 0, 0, 0, 102, 0, 266, 0, 0, 0, 119, 309, 121, 0, 0, 158, 130, 0, 0, 0, 0, 300, 301, 0, 0, 0, 0, 0, 0, - 0, 0, 54, 0, 492, 267, 288, 287, 290, 291, + 0, 0, 54, 0, 493, 267, 288, 287, 290, 291, 292, 293, 0, 0, 95, 289, 294, 295, 296, 0, 0, 0, 264, 281, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1411,7 +1419,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, 318, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, - 0, 152, 140, 174, 1405, 141, 151, 122, 166, 146, + 0, 152, 140, 174, 1410, 141, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, @@ -1453,8 +1461,8 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 526, 525, 535, 536, 528, - 529, 530, 531, 532, 533, 534, 527, 0, 0, 537, + 0, 0, 0, 0, 0, 527, 526, 536, 537, 529, + 530, 531, 532, 533, 534, 535, 528, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, @@ -1469,14 +1477,14 @@ var yyAct = [...]int{ 184, 185, 186, 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 138, 0, 0, 0, 514, 0, 0, + 0, 0, 0, 138, 0, 0, 0, 515, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 0, 516, 0, 0, 0, 0, 0, - 0, 95, 0, 0, 0, 0, 0, 511, 510, 0, + 0, 0, 80, 0, 517, 0, 0, 0, 0, 0, + 0, 95, 0, 0, 0, 0, 0, 512, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 512, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, 0, @@ -1516,11 +1524,11 @@ var yyAct = [...]int{ 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 75, 0, 0, 0, 0, 0, 0, 0, 138, - 0, 0, 0, 821, 0, 0, 0, 82, 102, 120, + 0, 0, 0, 824, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, - 823, 0, 0, 0, 0, 0, 0, 95, 0, 0, + 826, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1587,11 +1595,11 @@ var yyAct = [...]int{ 187, 188, 0, 0, 94, 107, 103, 142, 134, 92, 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 138, 0, 0, 0, 821, 0, 0, 0, 82, 102, + 138, 0, 0, 0, 824, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, - 0, 823, 0, 0, 0, 0, 0, 0, 95, 0, + 0, 826, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1600,7 +1608,7 @@ var yyAct = [...]int{ 0, 0, 0, 108, 0, 0, 0, 209, 0, 0, 0, 0, 145, 0, 161, 110, 118, 83, 89, 0, 109, 136, 150, 154, 0, 0, 0, 98, 0, 152, - 140, 174, 0, 819, 151, 122, 166, 146, 173, 181, + 140, 174, 0, 822, 151, 122, 166, 146, 173, 181, 182, 163, 180, 189, 84, 162, 172, 96, 155, 86, 170, 160, 128, 114, 115, 85, 0, 149, 101, 106, 100, 137, 167, 168, 99, 192, 90, 179, 88, 91, @@ -1614,7 +1622,7 @@ var yyAct = [...]int{ 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 80, 0, 0, 721, 0, 0, 722, 0, + 0, 0, 80, 0, 0, 724, 0, 0, 725, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1635,10 +1643,10 @@ var yyAct = [...]int{ 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 82, 0, 120, 190, 147, 105, - 177, 102, 0, 616, 0, 0, 0, 119, 0, 121, + 177, 102, 0, 617, 0, 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 80, 0, 615, 0, 0, 0, 0, 0, 0, + 0, 80, 0, 616, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1684,7 +1692,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 207, 0, 823, + 0, 0, 0, 0, 0, 0, 0, 207, 0, 826, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1708,7 +1716,7 @@ var yyAct = [...]int{ 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 267, 0, 786, 0, 0, 0, 0, 0, 0, 95, + 267, 0, 789, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1731,7 +1739,7 @@ var yyAct = [...]int{ 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 267, 0, 782, 0, 0, 0, 0, + 0, 0, 0, 267, 0, 785, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1754,7 +1762,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 82, 102, 120, 190, 147, 105, 177, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 80, 0, 516, 0, + 0, 0, 0, 0, 0, 0, 80, 0, 517, 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1775,7 +1783,7 @@ var yyAct = [...]int{ 113, 156, 116, 123, 148, 191, 139, 153, 97, 175, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 82, 0, - 120, 190, 147, 105, 177, 589, 102, 0, 0, 0, + 120, 190, 147, 105, 177, 590, 102, 0, 0, 0, 0, 0, 119, 0, 121, 0, 0, 158, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, @@ -1919,14 +1927,15 @@ var yyAct = [...]int{ } var yyPact = [...]int{ - 129, -1000, -181, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1854, -1000, -193, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 894, 922, -1000, -1000, -1000, -1000, -1000, -1000, + 218, 7888, 20, 87, -31, 11175, 86, 119, 11641, -1000, + -3, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -81, -94, + -1000, 715, -1000, -1000, -1000, -1000, -1000, 867, 892, 759, + 870, 796, -1000, 6206, 58, 58, 10942, 5462, -1000, -1000, + 207, 11641, 82, 11641, -163, 55, 55, 55, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 861, 892, -1000, -1000, -1000, -1000, -1000, -1000, - 287, 7808, 7, 116, 25, 11095, 114, 1430, 11561, -1000, - 9, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -74, -83, - -1000, 644, -1000, -1000, -1000, -1000, -1000, 848, 855, 704, - 831, 742, -1000, 6126, 83, 83, 10862, 5382, -1000, -1000, - 241, 11561, 107, 11561, -152, 78, 78, 78, -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, @@ -1937,22 +1946,22 @@ 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, 85, 11641, 201, -1000, 11641, 53, + 478, 53, 53, 53, 11641, -1000, 137, -1000, -1000, -1000, + 11641, 476, 819, 3374, 33, 3374, -1000, 3374, 3374, -1000, + 3374, 3, 3374, -75, 904, -1000, -1000, -1000, -1000, -50, + -1000, 3374, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 508, 832, 6705, 6705, 894, + -1000, 715, -1000, -1000, -1000, 820, -1000, -1000, 275, 911, + -1000, 7655, 134, -1000, 6705, 1528, 708, -1000, -1000, 708, + -1000, -1000, 122, -1000, -1000, 7183, 7183, 7183, 7183, 7183, + 7183, 7183, 7183, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 708, -1000, 6457, + 708, 708, 708, 708, 708, 708, 708, 708, 6705, 708, + 708, 708, 708, 708, 708, 708, 708, 708, 708, 708, + 708, 708, 10709, 9537, 11641, 504, -1000, 686, 5201, -91, + -1000, -1000, -1000, 204, 9304, -1000, -1000, -1000, 818, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 111, 11561, 204, -1000, 11561, 76, - 539, 76, 76, 76, 11561, -1000, 155, -1000, -1000, -1000, - 11561, 538, 791, 3294, 53, 3294, -1000, 3294, 3294, -1000, - 3294, 15, 3294, -61, 871, -1000, -1000, -1000, -1000, -29, - -1000, 3294, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 448, 798, 6625, 6625, 861, - -1000, 644, -1000, -1000, -1000, 792, -1000, -1000, 293, 880, - -1000, 7575, 151, -1000, 6625, 1325, 657, -1000, -1000, 657, - -1000, -1000, 128, -1000, -1000, 7103, 7103, 7103, 7103, 7103, - 7103, 7103, 7103, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 657, -1000, 6377, - 657, 657, 657, 657, 657, 657, 657, 657, 6625, 657, - 657, 657, 657, 657, 657, 657, 657, 657, 657, 657, - 657, 657, 10629, 9457, 11561, 582, -1000, 646, 5121, -105, - -1000, -1000, -1000, 266, 9224, -1000, -1000, -1000, 789, -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, @@ -1961,129 +1970,129 @@ 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, 598, 11641, -1000, 2036, -1000, 471, 3374, + 67, 463, 257, 460, 11641, 11641, 3374, 12, 41, 84, + 11641, 706, 65, 11641, 856, 763, 11641, 448, 444, -1000, + 4940, -1000, 3374, 3374, -1000, -1000, -1000, 3374, 3374, 3374, + 3374, 3374, 3374, -1000, -1000, -1000, -1000, 3374, 3374, -1000, + 909, 256, -1000, -1000, -1000, -1000, 6705, -1000, 762, -1000, + -1000, -1000, -1000, -1000, -1000, 917, 177, 430, 133, 695, + -1000, 371, 867, 508, 796, 9065, 773, -1000, -1000, 11641, + -1000, 6705, 6705, 339, -1000, 10469, -1000, -1000, 3896, 168, + 7183, 351, 285, 7183, 7183, 7183, 7183, 7183, 7183, 7183, + 7183, 7183, 7183, 7183, 7183, 7183, 7183, 7183, 396, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 442, -1000, 715, + 525, 525, 148, 148, 148, 148, 148, 148, 148, 7422, + 5710, 508, 550, 281, 6457, 6206, 6206, 6705, 6705, 10236, + 10003, 6206, 860, 227, 281, 11874, -1000, 508, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 6206, 6206, 6206, 6206, 24, + 11641, -1000, 615, 700, -1000, -1000, -1000, 858, 8599, 8832, + 24, 643, 9537, 11641, -1000, -1000, 4679, 686, -91, 678, + -1000, -130, -103, 2566, 124, -1000, -1000, -1000, -1000, 3113, + 172, 554, 316, -64, -1000, -1000, -1000, 718, -1000, 718, + 718, 718, 718, -32, -32, -32, -32, -1000, -1000, -1000, + -1000, -1000, 742, 741, -1000, 718, 718, 718, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 530, 11561, -1000, 2083, -1000, 527, 3294, - 95, 526, 283, 520, 11561, 11561, 3294, 28, 27, 11561, - 654, 91, 11561, 823, 711, 11561, 503, 473, -1000, 4860, - -1000, 3294, 3294, -1000, -1000, -1000, 3294, 3294, 3294, 3294, - 3294, 3294, -1000, -1000, -1000, -1000, 3294, 3294, -1000, 874, - 258, -1000, -1000, -1000, -1000, 6625, -1000, 710, -1000, -1000, - -1000, -1000, -1000, -1000, 887, 197, 370, 148, 653, -1000, - 331, 848, 448, 742, 8985, 732, -1000, -1000, 11561, -1000, - 6625, 6625, 339, -1000, 10389, -1000, -1000, 3816, 212, 7103, - 387, 246, 7103, 7103, 7103, 7103, 7103, 7103, 7103, 7103, - 7103, 7103, 7103, 7103, 7103, 7103, 7103, 395, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 466, -1000, 644, 671, - 671, 177, 177, 177, 177, 177, 177, 177, 7342, 5630, - 448, 525, 298, 6377, 6126, 6126, 6625, 6625, 10156, 9923, - 6126, 833, 250, 298, 11794, -1000, 448, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 6126, 6126, 6126, 6126, 38, 11561, - -1000, 611, 651, -1000, -1000, -1000, 828, 8519, 8752, 38, - 561, 9457, 11561, -1000, -1000, 4599, 646, -105, 621, -1000, - -129, -111, 2486, 157, -1000, -1000, -1000, -1000, 3033, 252, - 555, 318, -56, -1000, -1000, -1000, 670, -1000, 670, 670, - 670, 670, -21, -21, -21, -21, -1000, -1000, -1000, -1000, - -1000, 695, 694, -1000, 670, 670, 670, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 739, 739, 739, 724, 724, 744, + -1000, 11641, 3374, 854, 3374, -1000, 108, -1000, 11408, 11408, + 11641, 11641, 113, 11641, 11641, 684, -1000, 11641, 3374, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 693, 693, 693, 686, 686, 698, -1000, - 11561, 3294, 820, 3294, -1000, 74, -1000, 11328, 11328, 135, - 11561, 11561, 625, -1000, 11561, 3294, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 11641, 288, 11641, 11641, 281, 11641, + -1000, 802, 6705, 6705, 4418, 6705, -1000, -1000, -1000, 832, + -1000, 860, 886, -1000, 812, 809, 6206, -1000, -1000, 168, + 230, -1000, -1000, 397, -1000, -1000, -1000, -1000, 132, 708, + -1000, 2052, -1000, -1000, -1000, -1000, 351, 7183, 7183, 7183, + 451, 2052, 2193, 999, 393, 148, 265, 265, 144, 144, + 144, 144, 144, 329, 329, -1000, -1000, -1000, 508, -1000, + -1000, -1000, 508, 6206, 680, -1000, -1000, 6705, -1000, 508, + 539, 539, 386, 255, 683, 682, -1000, 127, 679, 658, + 539, 6206, 242, -1000, 6705, 508, -1000, 539, 508, 539, + 539, 665, 708, -1000, 11874, 9537, 9537, 9537, 9537, 9537, + -1000, 785, 784, -1000, 777, 775, 786, 11641, -1000, 546, + 8599, 136, 708, -1000, 9770, -1000, -1000, 903, 9537, 596, + -1000, -1000, 678, -91, -95, -1000, -1000, -1000, -1000, 281, + -1000, 423, 671, 2852, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 737, 424, -1000, 843, 166, 165, 417, 842, -1000, + -1000, -1000, 823, -1000, 262, -77, -1000, -1000, 374, -32, + -32, -1000, -1000, 124, 817, 124, 124, 124, 403, 403, + -1000, -1000, -1000, -1000, 357, -1000, -1000, -1000, 354, -1000, + 760, 11408, 3374, -1000, -1000, -1000, -1000, 250, 250, 219, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 11561, 278, 11561, 11561, 298, 11561, -1000, 772, 6625, - 6625, 4338, 6625, -1000, -1000, -1000, 798, -1000, 833, 847, - -1000, 780, 778, 6126, -1000, -1000, 212, 302, -1000, -1000, - 405, -1000, -1000, -1000, -1000, 146, 657, -1000, 2258, -1000, - -1000, -1000, -1000, 387, 7103, 7103, 7103, 469, 2258, 2057, - 1768, 1524, 177, 425, 425, 181, 181, 181, 181, 181, - 329, 329, -1000, -1000, -1000, 448, -1000, -1000, -1000, 448, - 6126, 622, -1000, -1000, 6625, -1000, 448, 502, 502, 260, - 290, 635, 633, -1000, 145, 632, 629, 502, 6126, 315, - -1000, 6625, 448, -1000, 502, 448, 502, 502, 588, 657, - -1000, 11794, 9457, 9457, 9457, 9457, 9457, -1000, 739, 738, - -1000, 730, 723, 724, 11561, -1000, 519, 8519, 152, 657, - -1000, 9690, -1000, -1000, 869, 9457, 596, -1000, -1000, 621, - -105, -134, -1000, -1000, -1000, -1000, 298, -1000, 424, 614, - 2772, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 691, 460, - -1000, 811, 196, 194, 451, 810, -1000, -1000, -1000, 794, - -1000, 343, -70, -1000, -1000, 389, -21, -21, -1000, -1000, - 157, 786, 157, 157, 157, 423, 423, -1000, -1000, -1000, - -1000, 388, -1000, -1000, -1000, 384, -1000, 708, 11328, 3294, - -1000, -1000, -1000, -1000, 286, 286, 179, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 37, 672, - -1000, 24, 23, 86, -1000, 3294, -1000, 258, -1000, 417, - 6625, -1000, -1000, -1000, 770, 298, 298, 142, -1000, -1000, - 11561, -1000, -1000, -1000, -1000, 618, -1000, -1000, -1000, 3555, - 6126, -1000, 469, 2258, 1341, -1000, 7103, 7103, -1000, -1000, - 502, 6126, 298, -1000, -1000, -1000, 162, 395, 162, 7103, - 7103, 7103, 7103, 4338, 7103, 7103, 7103, 7103, -163, 597, - 205, -1000, 6625, 280, -1000, -1000, -1000, -1000, -1000, 707, - 11794, 657, -1000, 8280, 11328, 601, -1000, 248, 651, 690, - 702, 615, -1000, -1000, -1000, -1000, 737, -1000, 734, -1000, - -1000, -1000, -1000, -1000, 106, 105, 104, 11328, -1000, 861, - 6625, 596, -1000, -1000, -1000, -133, -131, -1000, -1000, -1000, - 3033, -1000, 3033, 11328, 59, -1000, 451, 451, -1000, -1000, - -1000, 687, 701, 85, -1000, -1000, -1000, 551, 157, 157, - -1000, 202, -1000, -1000, -1000, 497, -1000, 494, 598, 483, - 11561, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11561, -1000, -1000, - -1000, -1000, -1000, 11328, -169, 449, 11328, 11328, 11561, -1000, - 278, -1000, 298, -1000, 4077, -1000, 869, 9457, -1000, -1000, - 448, -1000, 7103, 2258, 2258, -1000, -1000, 448, 670, 670, - -1000, 670, 686, -1000, 670, 0, 670, -14, 448, 448, - 1682, 2201, 1659, 1957, -1000, 1480, 1902, 1081, 1721, 657, - -159, -1000, 298, 6625, -1000, 813, 549, 569, -1000, -1000, - 5878, 448, 481, 141, 479, -1000, 861, 11794, 6625, -1000, - -1000, 6625, 674, -1000, 6625, -1000, -1000, -1000, 657, 657, - 657, 479, 848, 298, -1000, -1000, -1000, -1000, 2772, -1000, - 464, -1000, 670, -1000, -1000, -1000, 11328, -58, 885, -1000, - -1000, -1000, -1000, 669, -1000, -1000, -1000, -1000, -1000, -1000, - -21, 407, -21, 362, -1000, 361, 3294, -1000, -1000, -1000, - -1000, 816, -1000, 4077, -1000, -1000, 664, -1000, -1000, -1000, - 866, 584, -1000, 2258, -1000, -1000, 100, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 7103, 7103, -1000, 7103, - 7103, -1000, 7103, 7103, -1000, 7103, 7103, 7103, 448, 406, - 298, 804, -1000, 657, -1000, -1000, 576, 11328, 11328, -1000, - 11328, 848, -1000, 298, 298, 11328, 298, 11328, 11328, 11328, - 8041, -1000, 147, 11328, -1000, 458, -1000, 187, -1000, -142, - 544, 157, -1000, 157, 531, 498, -1000, 657, 572, -1000, - 226, 11328, 864, 853, -1000, -1000, 1831, 1831, 1831, 1831, - 1831, 1831, 1831, 1831, 20, -1000, -1000, 884, -1000, 657, - -1000, 644, 131, -1000, -1000, -1000, 456, 447, 447, 447, - 152, 147, -1000, 444, 211, 402, -1000, 55, 11328, 268, - 802, -1000, 797, 659, -1000, -1000, -1000, -1000, -1000, 26, - 4077, 3033, 441, -1000, 6625, 6625, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 448, 46, -172, 11794, 569, 448, - 11328, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 354, -1000, - -1000, 11561, -1000, -1000, 396, -1000, -1000, 484, 437, -1000, - 11328, -1000, -1000, 672, 298, 562, -1000, 748, -167, -177, - 550, -1000, -1000, -1000, 658, -1000, -1000, -1000, 26, 777, - -169, -1000, 747, -1000, 11328, -1000, 29, -1000, -170, 435, - 32, -175, 700, 657, -178, 692, -1000, 878, 6864, -1000, - -1000, 883, 163, 163, 1831, 448, -1000, -1000, -1000, 63, - 338, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 22, 735, -1000, -1000, -1000, 11, 10, 64, -1000, + 3374, -1000, 256, -1000, 391, 6705, -1000, -1000, -1000, 799, + 281, 281, 126, -1000, -1000, 11641, -1000, -1000, -1000, -1000, + 623, -1000, -1000, -1000, 3635, 6206, -1000, 451, 2052, 1357, + -1000, 7183, 7183, -1000, -1000, 539, 6206, 281, -1000, -1000, + -1000, 72, 396, 72, 7183, 7183, 7183, 7183, 4418, 7183, + 7183, 7183, 7183, -173, 642, 211, -1000, 6705, 313, -1000, + -1000, -1000, -1000, -1000, 752, 11874, 708, -1000, 8360, 11408, + 651, -1000, 200, 700, 734, 750, 711, -1000, -1000, -1000, + -1000, 781, -1000, 778, -1000, -1000, -1000, -1000, -1000, 80, + 79, 78, 11408, -1000, 894, 6705, 596, -1000, -1000, -1000, + -138, -144, -1000, -1000, -1000, 3113, -1000, 3113, 11408, 40, + -1000, 417, 417, -1000, -1000, -1000, 731, 749, 71, -1000, + -1000, -1000, 540, 124, 124, -1000, 163, -1000, -1000, -1000, + 518, -1000, 515, 657, 511, 11641, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 11641, -1000, -1000, -1000, -1000, -1000, 11408, -181, + 399, 11408, 11408, 11641, -1000, 288, -1000, 281, -1000, 4157, + -1000, 903, 9537, -1000, -1000, 508, -1000, 7183, 2052, 2052, + -1000, -1000, 508, 718, 718, -1000, 718, 724, -1000, 718, + -12, 718, -13, 508, 508, 1843, 2151, 1671, 2025, -1000, + 1635, 1992, 1320, 1974, 708, -170, -1000, 281, 6705, -1000, + 845, 622, 647, -1000, -1000, 5958, 508, 506, 103, 486, + -1000, 894, 11874, 6705, -1000, -1000, 6705, 723, -1000, 6705, + -1000, -1000, -1000, 708, 708, 708, 486, 867, 281, -1000, + -1000, -1000, -1000, 2852, -1000, 484, -1000, 718, -1000, -1000, + -1000, 11408, -56, 916, -1000, -1000, -1000, -1000, 717, -1000, + -1000, -1000, -1000, -1000, -1000, -32, 383, -32, 350, -1000, + 333, 3374, -1000, -1000, -1000, -1000, 849, -1000, 4157, -1000, + -1000, 716, -1000, -1000, -1000, 900, 654, -1000, 2052, -1000, + -1000, 100, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 7183, 7183, -1000, 7183, 7183, -1000, 7183, 7183, -1000, + 7183, 7183, 7183, 508, 379, 281, 830, -1000, 708, -1000, + -1000, 670, 11408, 11408, -1000, 11408, 867, -1000, 281, 281, + 11408, 281, 11408, 11408, 11408, 8121, -1000, 131, 11408, -1000, + 482, -1000, 185, -1000, -153, 534, 124, -1000, 124, 524, + 519, -1000, 708, 648, -1000, 199, 11408, 898, 891, -1000, + -1000, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 1858, 17, + -1000, -1000, 914, -1000, 708, -1000, 715, 83, -1000, -1000, + -1000, 467, 458, 458, 458, 136, 131, -1000, 395, 176, + 378, -1000, 37, 11408, 266, 829, -1000, 827, 714, -1000, + -1000, -1000, -1000, -1000, 21, 4157, 3113, 456, -1000, 6705, + 6705, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 508, + 34, -184, 11874, 647, 508, 11408, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 302, -1000, -1000, 11641, -1000, -1000, 340, + -1000, -1000, 512, 452, -1000, 11408, -1000, -1000, 735, 281, + 628, -1000, 795, -179, -187, 586, -1000, -1000, -1000, 713, + -1000, -1000, -1000, 21, 808, -181, -1000, 793, -1000, 11408, + -1000, 18, -1000, -182, 428, 16, -185, 748, 708, -189, + 747, -1000, 908, 6944, -1000, -1000, 910, 152, 152, 1858, + 508, -1000, -1000, -1000, 44, 326, -1000, -1000, -1000, -1000, + -1000, -1000, } var yyPgo = [...]int{ - 0, 1130, 45, 458, 1129, 1120, 1119, 1114, 1113, 1112, - 1111, 1110, 1108, 1107, 1106, 1105, 1103, 1102, 1099, 1097, - 1096, 1095, 1093, 1092, 1091, 1090, 141, 1087, 1082, 1080, - 66, 1076, 75, 1075, 1073, 37, 60, 47, 42, 1038, - 1072, 21, 54, 57, 1071, 27, 1070, 1069, 80, 1067, - 53, 1065, 1063, 311, 1062, 1061, 13, 28, 1060, 1058, - 1057, 1055, 70, 265, 1047, 1044, 1042, 1039, 1037, 1036, - 64, 7, 11, 34, 26, 1034, 30, 22, 1033, 55, - 1032, 1031, 1030, 1028, 16, 1027, 58, 1025, 19, 56, - 1022, 9, 65, 41, 18, 8, 83, 62, 1020, 20, - 69, 51, 1017, 1015, 434, 1009, 1006, 59, 1005, 1004, - 23, 162, 361, 1001, 1000, 998, 997, 38, 0, 827, - 43, 73, 995, 990, 987, 1522, 71, 52, 14, 981, - 31, 17, 33, 979, 963, 40, 953, 951, 950, 947, - 946, 945, 943, 90, 942, 941, 939, 81, 44, 938, - 937, 61, 24, 936, 935, 934, 49, 63, 932, 930, - 50, 25, 929, 928, 927, 923, 922, 35, 12, 920, - 15, 913, 10, 912, 29, 911, 4, 910, 6, 909, - 3, 908, 5, 48, 1, 905, 2, 902, 900, 654, - 578, 899, 898, 84, + 0, 1146, 33, 449, 1145, 1144, 1143, 1142, 1141, 1139, + 1138, 1136, 1135, 1130, 1126, 1125, 1123, 1116, 1110, 1109, + 1108, 1092, 1091, 1089, 1088, 1087, 99, 1086, 1085, 1081, + 71, 1078, 60, 1077, 1076, 46, 76, 50, 41, 391, + 1072, 35, 53, 59, 1071, 38, 1070, 1069, 64, 1068, + 48, 1065, 1063, 201, 1060, 1059, 10, 30, 1058, 1057, + 1054, 1052, 98, 1042, 1050, 1049, 1048, 1046, 1045, 1044, + 51, 8, 12, 47, 19, 1043, 416, 6, 1040, 52, + 1039, 1036, 1033, 1032, 16, 1030, 57, 1027, 18, 56, + 1024, 15, 65, 28, 20, 7, 69, 58, 1018, 14, + 61, 54, 1017, 1016, 411, 1014, 1012, 42, 1011, 1009, + 26, 154, 326, 1008, 1007, 1004, 1002, 37, 0, 504, + 418, 63, 1001, 999, 997, 1597, 70, 49, 17, 988, + 55, 1216, 40, 987, 985, 31, 981, 980, 979, 978, + 971, 970, 969, 84, 966, 964, 963, 24, 22, 962, + 961, 62, 23, 958, 957, 955, 44, 66, 954, 953, + 45, 29, 950, 949, 948, 947, 946, 27, 9, 943, + 13, 941, 21, 940, 25, 939, 4, 935, 11, 934, + 3, 933, 5, 43, 1, 932, 2, 931, 930, 311, + 701, 929, 928, 107, } var yyR1 = [...]int{ @@ -2109,48 +2118,48 @@ var yyR1 = [...]int{ 161, 161, 171, 171, 170, 159, 159, 174, 174, 174, 174, 185, 186, 184, 184, 184, 184, 184, 166, 166, 166, 167, 167, 167, 168, 168, 168, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, 183, 177, - 175, 175, 176, 176, 13, 18, 18, 14, 14, 14, - 14, 14, 15, 15, 19, 20, 20, 20, 20, 20, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, + 183, 177, 175, 175, 176, 176, 13, 18, 18, 14, + 14, 14, 14, 14, 15, 15, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 108, 108, 106, 106, - 109, 109, 107, 107, 107, 110, 110, 110, 134, 134, - 134, 21, 21, 23, 23, 24, 25, 22, 22, 22, - 22, 22, 22, 22, 16, 192, 26, 27, 27, 28, - 28, 28, 32, 32, 32, 30, 30, 31, 31, 37, - 37, 36, 36, 38, 38, 38, 38, 122, 122, 122, - 121, 121, 40, 40, 41, 41, 42, 42, 43, 43, - 43, 43, 55, 55, 91, 91, 93, 93, 44, 44, - 44, 44, 45, 45, 46, 46, 47, 47, 129, 129, - 128, 128, 128, 127, 127, 49, 49, 49, 51, 50, - 50, 50, 50, 52, 52, 54, 54, 53, 53, 56, - 56, 56, 56, 57, 57, 39, 39, 39, 39, 39, - 39, 39, 105, 105, 59, 59, 58, 58, 58, 58, - 58, 58, 58, 58, 58, 58, 69, 69, 69, 69, - 69, 69, 60, 60, 60, 60, 60, 60, 60, 35, - 35, 70, 70, 70, 76, 71, 71, 63, 63, 63, + 20, 20, 20, 20, 20, 20, 20, 20, 108, 108, + 106, 106, 109, 109, 107, 107, 107, 110, 110, 110, + 134, 134, 134, 21, 21, 23, 23, 24, 25, 22, + 22, 22, 22, 22, 22, 22, 16, 192, 26, 27, + 27, 28, 28, 28, 32, 32, 32, 30, 30, 31, + 31, 37, 37, 36, 36, 38, 38, 38, 38, 122, + 122, 122, 121, 121, 40, 40, 41, 41, 42, 42, + 43, 43, 43, 43, 55, 55, 91, 91, 93, 93, + 44, 44, 44, 44, 45, 45, 46, 46, 47, 47, + 129, 129, 128, 128, 128, 127, 127, 49, 49, 49, + 51, 50, 50, 50, 50, 52, 52, 54, 54, 53, + 53, 56, 56, 56, 56, 57, 57, 39, 39, 39, + 39, 39, 39, 39, 105, 105, 59, 59, 58, 58, + 58, 58, 58, 58, 58, 58, 58, 58, 69, 69, + 69, 69, 69, 69, 60, 60, 60, 60, 60, 60, + 60, 35, 35, 70, 70, 70, 76, 71, 71, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 67, - 67, 67, 65, 65, 65, 65, 65, 65, 65, 65, + 63, 67, 67, 67, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 66, 66, 66, 66, 66, 66, 66, - 66, 193, 193, 68, 68, 68, 68, 33, 33, 33, - 33, 33, 132, 132, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 80, 80, 34, - 34, 78, 78, 79, 81, 81, 77, 77, 77, 62, - 62, 62, 62, 62, 62, 62, 62, 64, 64, 64, - 82, 82, 83, 83, 84, 84, 85, 85, 86, 87, - 87, 87, 88, 88, 88, 88, 89, 89, 89, 61, - 61, 61, 61, 61, 61, 90, 90, 90, 90, 94, - 94, 72, 72, 74, 74, 73, 75, 95, 95, 99, - 96, 96, 100, 100, 100, 100, 98, 98, 98, 124, - 124, 124, 103, 103, 111, 111, 112, 112, 104, 104, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 114, 114, 114, 115, 115, 116, 116, 116, 123, 123, - 119, 119, 120, 120, 125, 125, 126, 126, 117, 117, + 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, + 66, 66, 66, 193, 193, 68, 68, 68, 68, 33, + 33, 33, 33, 33, 132, 132, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 80, + 80, 34, 34, 78, 78, 79, 81, 81, 77, 77, + 77, 62, 62, 62, 62, 62, 62, 62, 62, 64, + 64, 64, 82, 82, 83, 83, 84, 84, 85, 85, + 86, 87, 87, 87, 88, 88, 88, 88, 89, 89, + 89, 61, 61, 61, 61, 61, 61, 90, 90, 90, + 90, 94, 94, 72, 72, 74, 74, 73, 75, 95, + 95, 99, 96, 96, 100, 100, 100, 100, 98, 98, + 98, 124, 124, 124, 103, 103, 111, 111, 112, 112, + 104, 104, 113, 113, 113, 113, 113, 113, 113, 113, + 113, 113, 114, 114, 114, 115, 115, 116, 116, 116, + 123, 123, 119, 119, 120, 120, 125, 125, 126, 126, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, @@ -2160,7 +2169,7 @@ var yyR1 = [...]int{ 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, 117, - 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, + 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, @@ -2171,7 +2180,8 @@ var yyR1 = [...]int{ 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, 118, - 118, 118, 118, 118, 189, 190, 130, 131, 131, 131, + 118, 118, 118, 118, 118, 118, 189, 190, 130, 131, + 131, 131, } var yyR2 = [...]int{ @@ -2197,47 +2207,48 @@ var yyR2 = [...]int{ 0, 1, 1, 3, 2, 3, 1, 10, 11, 11, 12, 3, 3, 1, 1, 2, 2, 2, 0, 1, 3, 1, 2, 3, 1, 1, 1, 6, 7, 7, - 7, 7, 4, 5, 7, 5, 12, 7, 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, 3, 3, 2, 3, - 4, 3, 7, 5, 4, 2, 4, 2, 2, 2, - 2, 3, 3, 5, 2, 3, 1, 1, 0, 1, - 1, 1, 0, 2, 2, 0, 2, 2, 0, 1, - 1, 2, 1, 1, 2, 1, 1, 2, 2, 2, - 2, 2, 3, 3, 2, 0, 2, 0, 2, 1, - 2, 2, 0, 1, 1, 0, 1, 0, 1, 0, - 1, 1, 3, 1, 2, 3, 5, 0, 1, 2, - 1, 1, 0, 2, 1, 3, 1, 1, 1, 3, - 1, 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, 0, - 5, 5, 5, 0, 2, 1, 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, 3, 1, 1, 1, 1, 4, - 5, 6, 4, 4, 6, 6, 6, 6, 8, 8, - 6, 8, 8, 6, 8, 8, 6, 8, 8, 9, - 7, 5, 4, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 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, 3, 5, 4, 6, 1, 3, 3, 5, 0, - 5, 1, 3, 1, 2, 3, 1, 1, 3, 3, - 1, 3, 3, 3, 3, 3, 1, 2, 1, 1, - 1, 1, 1, 1, 0, 2, 0, 3, 0, 1, + 7, 7, 4, 5, 7, 5, 5, 5, 12, 7, 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, 2, 3, 3, + 2, 3, 4, 3, 7, 5, 4, 2, 4, 2, + 2, 2, 2, 3, 3, 5, 2, 3, 1, 1, + 0, 1, 1, 1, 0, 2, 2, 0, 2, 2, + 0, 1, 1, 2, 1, 1, 2, 1, 1, 2, + 2, 2, 2, 2, 3, 3, 2, 0, 2, 0, + 2, 1, 2, 2, 0, 1, 1, 0, 1, 0, + 1, 0, 1, 1, 3, 1, 2, 3, 5, 0, + 1, 2, 1, 1, 0, 2, 1, 3, 1, 1, + 1, 3, 1, 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, 0, 5, 5, 5, 0, 2, 1, 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, 3, 1, 1, 1, + 1, 4, 5, 6, 4, 4, 6, 6, 6, 6, + 8, 8, 6, 8, 8, 6, 8, 8, 6, 8, + 8, 9, 7, 5, 4, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 2, 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, 3, 5, 4, 6, 1, 3, 3, + 5, 0, 5, 1, 3, 1, 2, 3, 1, 1, + 3, 3, 1, 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, 1, 1, 1, 1, 1, @@ -2258,8 +2269,8 @@ 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, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, } var yyChk = [...]int{ @@ -2307,249 +2318,251 @@ var yyChk = [...]int{ 45, 122, 6, 257, 30, 142, 43, 123, 79, 126, 69, 5, 129, 32, 9, 50, 53, 248, 249, 250, 34, 78, 12, -164, 90, -157, 57, -53, 124, -53, - 251, -112, 128, -112, -112, 123, -53, 115, 117, 52, - -18, -53, -111, 128, 57, -111, -111, -111, -53, 112, - -53, 57, 30, -131, -189, -120, 243, 57, 155, 123, - 156, 125, -131, -131, -131, -131, 159, 160, -131, -109, - -108, 225, 226, 216, 224, 12, 216, 158, -131, -130, - -130, -190, 56, -89, 19, 31, -39, -125, -85, -86, - -39, -84, -2, -26, 36, -30, 21, 65, 11, -122, - 73, 72, 89, -121, 22, -119, 59, 112, -39, -60, - 92, 74, 90, 91, 76, 94, 93, 104, 97, 98, - 99, 100, 101, 102, 103, 95, 96, 107, 82, 83, - 84, 85, 86, 87, 88, -105, -189, -76, -189, 113, - 114, -63, -63, -63, -63, -63, -63, -63, -63, -189, - -2, -71, -39, -189, -189, -189, -189, -189, -189, -189, - -189, -189, -80, -39, -189, -193, -189, -193, -193, -193, - -193, -193, -193, -193, -189, -189, -189, -189, -54, 26, - -53, -41, -42, -43, -44, -55, -76, -189, -53, -53, - -48, -191, 55, 11, 53, 55, -96, 164, -97, -101, - 233, 235, 82, -124, -119, 59, 29, 30, 56, 55, - -53, -136, -139, -141, -140, -142, -137, -138, 184, 185, - 108, 188, 190, 191, 192, 193, 194, 195, 196, 197, - 198, 199, 30, 145, 180, 181, 182, 183, 200, 201, - 202, 203, 204, 205, 206, 207, 167, 168, 169, 170, - 171, 172, 173, 175, 176, 177, 178, 179, 57, -131, - 125, 57, 74, 57, -53, -53, -131, 157, 157, -53, - 55, 126, -48, 23, 52, -53, 57, 57, -126, -125, - -117, -131, -131, -131, -131, -131, -131, -131, -131, -131, - -131, 11, -107, 11, 92, -39, 52, 9, 92, 55, - 18, 112, 55, -87, 24, 25, -88, -190, -32, -64, - -119, 60, 63, -31, 43, -53, -39, -39, -69, 68, - 74, 69, 70, -121, 99, -126, -120, -117, -63, -70, - -73, -76, 64, 92, 90, 91, 76, -63, -63, -63, + 251, -112, 128, -112, -112, 123, -53, 115, 117, 120, + 52, -18, -53, -111, 128, 57, -111, -111, -111, -53, + 112, -53, 57, 30, -131, -189, -120, 243, 57, 155, + 123, 156, 125, -131, -131, -131, -131, 159, 160, -131, + -109, -108, 225, 226, 216, 224, 12, 216, 158, -131, + -130, -130, -190, 56, -89, 19, 31, -39, -125, -85, + -86, -39, -84, -2, -26, 36, -30, 21, 65, 11, + -122, 73, 72, 89, -121, 22, -119, 59, 112, -39, + -60, 92, 74, 90, 91, 76, 94, 93, 104, 97, + 98, 99, 100, 101, 102, 103, 95, 96, 107, 82, + 83, 84, 85, 86, 87, 88, -105, -189, -76, -189, + 113, 114, -63, -63, -63, -63, -63, -63, -63, -63, + -189, -2, -71, -39, -189, -189, -189, -189, -189, -189, + -189, -189, -189, -80, -39, -189, -193, -189, -193, -193, + -193, -193, -193, -193, -193, -189, -189, -189, -189, -54, + 26, -53, -41, -42, -43, -44, -55, -76, -189, -53, + -53, -48, -191, 55, 11, 53, 55, -96, 164, -97, + -101, 233, 235, 82, -124, -119, 59, 29, 30, 56, + 55, -53, -136, -139, -141, -140, -142, -137, -138, 184, + 185, 108, 188, 190, 191, 192, 193, 194, 195, 196, + 197, 198, 199, 30, 145, 180, 181, 182, 183, 200, + 201, 202, 203, 204, 205, 206, 207, 167, 168, 169, + 170, 171, 172, 173, 175, 176, 177, 178, 179, 57, + -131, 125, 57, 74, 57, -53, -53, -131, 157, 157, + 123, 123, -53, 55, 126, -48, 23, 52, -53, 57, + 57, -126, -125, -117, -131, -131, -131, -131, -131, -131, + -131, -131, -131, -131, 11, -107, 11, 92, -39, 52, + 9, 92, 55, 18, 112, 55, -87, 24, 25, -88, + -190, -32, -64, -119, 60, 63, -31, 43, -53, -39, + -39, -69, 68, 74, 69, 70, -121, 99, -126, -120, + -117, -63, -70, -73, -76, 64, 92, 90, 91, 76, -63, -63, -63, -63, -63, -63, -63, -63, -63, -63, - -63, -63, -132, 57, 59, 57, -62, -62, -119, -37, - 21, -36, -38, -190, 55, -190, -2, -36, -36, -39, - -39, -77, 59, -119, -125, -77, 59, -36, -30, -78, - -79, 78, -77, -190, -36, -37, -36, -36, -92, 151, - -53, 30, 55, -49, -51, -50, -52, 42, 46, 48, - 43, 44, 45, 49, -129, 22, -41, -189, -128, 151, - -127, 22, -125, 59, -92, 53, -41, -53, -100, -97, - 55, 234, 236, 237, 52, 71, -39, -148, 107, -166, - -167, -168, -120, 59, 60, -157, -158, -159, -169, 137, - -174, 130, 132, 129, -160, 138, 124, 28, 56, -153, - 68, 74, -149, 212, -143, 54, -143, -143, -143, -143, - -147, 187, -147, -147, -147, 54, 54, -143, -143, -143, - -151, 54, -151, -151, -152, 54, -152, -123, 53, -53, - -131, 23, -131, -113, 120, 117, 118, -177, 116, 209, - 187, 66, 29, 15, 252, 151, 265, 57, 152, -119, - -119, 120, 117, -53, -53, -53, -131, -53, -110, 90, - 12, -125, -125, -53, 38, -39, -39, -126, -86, -89, - -103, 19, 11, 34, 34, -36, 68, 69, 70, 112, - -189, -70, -63, -63, -63, -35, 146, 73, -190, -190, - -36, 55, -39, -190, -190, -190, 55, 53, 22, 55, - 11, 55, 11, 112, 55, 11, 55, 11, -190, -36, - -81, -79, 80, -39, -190, -190, -190, -190, -190, -61, - 30, 34, -2, -189, -189, -95, -99, -77, -42, -43, - -43, -42, -43, 42, 42, 42, 47, 42, 47, 42, - -50, -125, -190, -56, 50, 127, 51, -189, -127, -57, - 12, -41, -57, -101, -102, 238, 235, 241, 57, 59, - 55, -168, 82, 54, 57, 28, -160, -160, -161, 57, - -161, 28, -144, 29, 68, -150, 213, 60, -147, -147, - -148, 30, -148, -148, -148, -156, 59, -156, 60, 60, - 52, -119, -131, -130, -183, 131, 137, 138, 133, 57, - 124, 28, 130, 132, 151, 129, -183, -114, -115, 126, - 22, 124, 28, 151, -182, 53, 157, 157, 126, -131, - -107, 59, -39, 39, 112, -53, -40, 11, 99, -120, - -37, -35, 73, -63, -63, -190, -38, -135, 108, 184, - 145, 182, 178, 198, 189, 211, 180, 212, -132, -135, - -63, -63, -63, -63, -120, -63, -63, -63, -63, 259, - -84, 81, -39, 79, -94, 52, -95, -72, -74, -73, - -189, -2, -90, -119, -93, -119, -57, 55, 82, -46, - -45, 52, 53, -47, 52, -45, 42, 42, 124, 124, - 124, -93, -84, -39, -57, 235, 239, 240, -167, -168, - -171, -170, -119, -174, -161, -161, 54, -146, 52, 59, - 60, 61, 68, 242, 67, 56, -148, -148, 57, 108, - 56, 55, 56, 55, 56, 55, -53, -130, -130, -53, - -130, -119, -180, 262, -181, 57, -119, -119, -53, -110, - -57, -41, -190, -63, -190, -143, -143, -143, -152, -143, - 172, -143, 172, -190, -190, -190, 55, 19, -190, 55, - 19, -190, 55, 19, -190, 55, 19, -189, -34, 257, - -39, 27, -94, 55, -190, -190, -190, 55, 112, -190, - 55, -84, -99, -39, -39, 54, -39, -189, -189, -189, - -190, -88, 56, 55, -143, -91, -119, -154, 209, 9, - 54, -147, 59, -147, 60, 60, -131, 26, -179, -178, - -120, 54, -82, 13, -147, 57, -63, -63, -63, -63, - -63, -63, -63, -63, -63, -190, 59, 28, -74, 34, - -2, -189, -119, -119, -119, -88, -91, -91, -91, -91, - -128, -173, -172, 53, 134, 66, -170, 56, 55, -155, - 130, 28, 129, 242, 56, -148, -148, 56, 56, -189, - 55, 82, -91, -83, 14, 16, -190, -190, -190, -190, - -190, -190, -190, -190, -33, 92, 262, 9, -72, -2, - 112, 56, -190, -190, -190, -56, -172, 57, -162, 82, - 59, 140, -119, -145, 66, 28, 28, 54, -175, -176, - 151, -178, -168, 56, -39, -71, -190, 260, 49, 263, - -95, -190, -119, 60, -53, 59, 56, -190, 55, -119, - -182, 39, 261, 264, 54, -176, 34, -180, 39, -91, - 153, 262, 56, 154, 263, -185, -186, 52, -189, 264, - -186, 52, 10, 9, -63, 150, -184, 141, 136, 139, - 30, -184, -190, -190, 135, 29, 68, + -63, -63, -63, -63, -63, -132, 57, 59, 57, -62, + -62, -119, -37, 21, -36, -38, -190, 55, -190, -2, + -36, -36, -39, -39, -77, 59, -119, -125, -77, 59, + -36, -30, -78, -79, 78, -77, -190, -36, -37, -36, + -36, -92, 151, -53, 30, 55, -49, -51, -50, -52, + 42, 46, 48, 43, 44, 45, 49, -129, 22, -41, + -189, -128, 151, -127, 22, -125, 59, -92, 53, -41, + -53, -100, -97, 55, 234, 236, 237, 52, 71, -39, + -148, 107, -166, -167, -168, -120, 59, 60, -157, -158, + -159, -169, 137, -174, 130, 132, 129, -160, 138, 124, + 28, 56, -153, 68, 74, -149, 212, -143, 54, -143, + -143, -143, -143, -147, 187, -147, -147, -147, 54, 54, + -143, -143, -143, -151, 54, -151, -151, -152, 54, -152, + -123, 53, -53, -131, 23, -131, -113, 120, 117, 118, + -177, 116, 209, 187, 66, 29, 15, 252, 151, 265, + 57, 152, -119, -119, -53, -53, 120, 117, -53, -53, + -53, -131, -53, -110, 90, 12, -125, -125, -53, 38, + -39, -39, -126, -86, -89, -103, 19, 11, 34, 34, + -36, 68, 69, 70, 112, -189, -70, -63, -63, -63, + -35, 146, 73, -190, -190, -36, 55, -39, -190, -190, + -190, 55, 53, 22, 55, 11, 55, 11, 112, 55, + 11, 55, 11, -190, -36, -81, -79, 80, -39, -190, + -190, -190, -190, -190, -61, 30, 34, -2, -189, -189, + -95, -99, -77, -42, -43, -43, -42, -43, 42, 42, + 42, 47, 42, 47, 42, -50, -125, -190, -56, 50, + 127, 51, -189, -127, -57, 12, -41, -57, -101, -102, + 238, 235, 241, 57, 59, 55, -168, 82, 54, 57, + 28, -160, -160, -161, 57, -161, 28, -144, 29, 68, + -150, 213, 60, -147, -147, -148, 30, -148, -148, -148, + -156, 59, -156, 60, 60, 52, -119, -131, -130, -183, + 131, 137, 138, 133, 57, 124, 28, 130, 132, 151, + 129, -183, -114, -115, 126, 22, 124, 28, 151, -182, + 53, 157, 157, 126, -131, -107, 59, -39, 39, 112, + -53, -40, 11, 99, -120, -37, -35, 73, -63, -63, + -190, -38, -135, 108, 184, 145, 182, 178, 198, 189, + 211, 180, 212, -132, -135, -63, -63, -63, -63, -120, + -63, -63, -63, -63, 259, -84, 81, -39, 79, -94, + 52, -95, -72, -74, -73, -189, -2, -90, -119, -93, + -119, -57, 55, 82, -46, -45, 52, 53, -47, 52, + -45, 42, 42, 124, 124, 124, -93, -84, -39, -57, + 235, 239, 240, -167, -168, -171, -170, -119, -174, -161, + -161, 54, -146, 52, 59, 60, 61, 68, 242, 67, + 56, -148, -148, 57, 108, 56, 55, 56, 55, 56, + 55, -53, -130, -130, -53, -130, -119, -180, 262, -181, + 57, -119, -119, -53, -110, -57, -41, -190, -63, -190, + -143, -143, -143, -152, -143, 172, -143, 172, -190, -190, + -190, 55, 19, -190, 55, 19, -190, 55, 19, -190, + 55, 19, -189, -34, 257, -39, 27, -94, 55, -190, + -190, -190, 55, 112, -190, 55, -84, -99, -39, -39, + 54, -39, -189, -189, -189, -190, -88, 56, 55, -143, + -91, -119, -154, 209, 9, 54, -147, 59, -147, 60, + 60, -131, 26, -179, -178, -120, 54, -82, 13, -147, + 57, -63, -63, -63, -63, -63, -63, -63, -63, -63, + -190, 59, 28, -74, 34, -2, -189, -119, -119, -119, + -88, -91, -91, -91, -91, -128, -173, -172, 53, 134, + 66, -170, 56, 55, -155, 130, 28, 129, 242, 56, + -148, -148, 56, 56, -189, 55, 82, -91, -83, 14, + 16, -190, -190, -190, -190, -190, -190, -190, -190, -33, + 92, 262, 9, -72, -2, 112, 56, -190, -190, -190, + -56, -172, 57, -162, 82, 59, 140, -119, -145, 66, + 28, 28, 54, -175, -176, 151, -178, -168, 56, -39, + -71, -190, 260, 49, 263, -95, -190, -119, 60, -53, + 59, 56, -190, 55, -119, -182, 39, 261, 264, 54, + -176, 34, -180, 39, -91, 153, 262, 56, 154, 263, + -185, -186, 52, -189, 264, -186, 52, 10, 9, -63, + 150, -184, 141, 136, 139, 30, -184, -190, -190, 135, + 29, 68, } var yyDef = [...]int{ 23, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 554, 0, 315, 315, 315, 315, 315, 315, - 0, 625, 608, 0, 0, 0, 0, -2, 302, 303, - 0, 305, 306, 846, 846, 846, 846, 846, 0, 0, - 846, 0, 35, 36, 844, 1, 3, 562, 0, 0, - 319, 322, 317, 0, 608, 608, 0, 0, 62, 63, - 0, 0, 0, 830, 0, 606, 606, 606, 626, 627, - 630, 631, 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, 826, 827, 828, - 829, 831, 832, 833, 834, 835, 836, 837, 838, 839, - 840, 841, 842, 843, 0, 0, 0, 609, 0, 604, - 0, 604, 604, 604, 0, 253, 387, 634, 635, 830, - 0, 0, 0, 847, 0, 847, 265, 847, 847, 268, - 847, 0, 847, 0, 275, 277, 278, 279, 280, 0, - 284, 847, 299, 300, 289, 301, 304, 307, 308, 309, - 310, 311, 846, 846, 314, 29, 566, 0, 0, 554, - 31, 0, 315, 320, 321, 325, 323, 324, 316, 0, - 333, 337, 0, 395, 0, 400, 402, -2, -2, 0, - 437, 438, 439, 440, 441, 0, 0, 0, 0, 0, - 0, 0, 0, 465, 466, 467, 468, 539, 540, 541, - 542, 543, 544, 545, 546, 404, 405, 536, 586, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 527, 0, - 501, 501, 501, 501, 501, 501, 501, 501, 0, 0, - 0, 0, 0, 0, 0, 0, 43, 47, 0, 821, - 590, -2, -2, 0, 0, 632, 633, -2, 740, -2, - 638, 639, 640, 641, 642, 643, 644, 645, 646, 647, - 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, - 658, 659, 660, 661, 662, 663, 664, 665, 666, 667, - 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, - 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, - 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, - 698, 699, 700, 701, 702, 703, 704, 705, 706, 707, - 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, - 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 0, 0, 81, 0, 79, 0, 847, - 0, 0, 0, 0, 0, 0, 847, 0, 0, 0, - 244, 0, 0, 0, 0, 0, 0, 0, 252, 0, - 254, 847, 847, 257, 848, 849, 847, 847, 847, 847, - 847, 847, 264, 266, 267, 269, 847, 847, 271, 0, - 292, 290, 291, 286, 287, 0, 281, 282, 285, 312, - 313, 30, 845, 24, 0, 0, 563, 0, 555, 556, - 559, 562, 29, 322, 0, 327, 326, 318, 0, 334, - 0, 0, 0, 338, 0, 340, 341, 0, 398, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 422, 423, - 424, 425, 426, 427, 428, 401, 0, 415, 0, 0, - 0, 457, 458, 459, 460, 461, 462, 463, 0, 329, - 29, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 325, 0, 528, 0, 493, 0, 494, 495, 496, - 497, 498, 499, 500, 0, 329, 0, 0, 45, 0, - 386, 0, 344, 346, 347, 348, -2, 0, 370, -2, - 0, 0, 0, 41, 42, 0, 48, 821, 50, 51, - 0, 0, 0, 164, 599, 600, 601, 597, 208, 0, - 0, 145, 141, 87, 88, 89, 134, 91, 134, 134, - 134, 134, 161, 161, 161, 161, 117, 118, 119, 120, - 121, 0, 0, 104, 134, 134, 134, 108, 124, 125, - 126, 127, 128, 129, 130, 131, 92, 93, 94, 95, - 96, 97, 98, 136, 136, 136, 138, 138, 628, 65, - 0, 847, 0, 847, 77, 0, 222, 0, 0, 0, - 0, 0, 247, 605, 0, 847, 250, 251, 388, 636, - 637, 255, 256, 258, 259, 260, 261, 262, 263, 270, - 274, 0, 295, 0, 0, 276, 0, 567, 0, 0, - 0, 0, 0, 558, 560, 561, 566, 32, 325, 0, - 547, 0, 0, 0, 328, 27, 396, 397, 399, 416, - 0, 418, 420, 339, 335, 0, 537, -2, 406, 407, - 431, 432, 433, 0, 0, 0, 0, 429, 411, 0, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 456, 512, 513, 0, 454, 455, 464, 0, - 0, 330, 331, 434, 0, 585, 29, 0, 0, 0, - 0, 0, 0, 536, 0, 0, 0, 0, 0, 534, - 531, 0, 0, 502, 0, 0, 0, 0, 0, 0, - 385, 0, 0, 0, 0, 0, 0, 375, 0, 0, - 378, 0, 0, 0, 0, 369, 0, 0, 389, 790, - 371, 0, 373, 374, 393, 0, 393, 44, 591, 49, - 0, 0, 54, 55, 592, 593, 594, 595, 0, 78, - 209, 211, 214, 215, 216, 82, 83, 84, 0, 0, - 196, 0, 0, 190, 190, 0, 188, 189, 80, 148, - 146, 0, 143, 142, 90, 0, 161, 161, 111, 112, - 164, 0, 164, 164, 164, 0, 0, 105, 106, 107, - 99, 0, 100, 101, 102, 0, 103, 0, 0, 847, - 67, 607, 68, 846, 0, 0, 620, 223, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 0, 69, - 225, 0, 0, 0, 245, 847, 249, 292, 273, 0, - 0, 293, 294, 283, 0, 564, 565, 0, 557, 25, - 0, 602, 603, 548, 549, 342, 417, 419, 421, 0, - 329, 408, 429, 412, 0, 409, 0, 0, 403, 469, - 0, 0, 436, -2, 472, 473, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 554, - 0, 532, 0, 0, 492, 503, 504, 505, 506, 579, - 0, 0, -2, 0, 0, 393, 587, 0, 345, 364, - 366, 0, 361, 376, 377, 379, 0, 381, 0, 383, - 384, 349, 351, 352, 0, 0, 0, 0, 372, 554, - 0, 393, 40, 52, 53, 0, 0, 59, 165, 166, - 0, 212, 0, 0, 0, 183, 190, 190, 186, 191, - 187, 0, 156, 0, 147, 86, 144, 0, 164, 164, - 113, 0, 114, 115, 116, 0, 132, 0, 0, 0, - 0, 629, 66, 217, 846, 228, 229, 230, 231, 232, - 233, 234, 235, 236, 237, 238, 846, 0, 846, 621, - 622, 623, 624, 0, 72, 0, 0, 0, 0, 248, - 295, 296, 297, 568, 0, 26, 393, 0, 336, 538, - 0, 410, 0, 430, 413, 470, 332, 0, 134, 134, - 517, 134, 138, 520, 134, 522, 134, 525, 0, 0, - 0, 0, 0, 0, 537, 0, 0, 0, 0, 0, - 529, 491, 535, 0, 33, 0, 579, 569, 581, 583, - 0, 29, 0, 575, 0, 356, 554, 0, 0, 358, - 365, 0, 0, 359, 0, 360, 380, 382, 0, 0, - 0, 0, 562, 394, 39, 56, 57, 58, 210, 213, - 0, 192, 134, 195, 184, 185, 0, 159, 0, 149, - 150, 151, 152, 153, 155, 135, 109, 110, 162, 163, - 161, 0, 161, 0, 139, 0, 847, 218, 219, 220, - 221, 0, 224, 0, 70, 71, 0, 227, 246, 272, - 550, 343, 471, 414, 474, 514, 161, 518, 519, 521, - 523, 524, 526, 476, 475, 477, 0, 0, 483, 0, - 0, 480, 0, 0, 486, 0, 0, 0, 0, 0, - 533, 0, 34, 0, 584, -2, 0, 0, 0, 46, - 0, 562, 588, 589, 362, 0, 367, 0, 0, 0, - 370, 38, 175, 0, 194, 0, 354, 167, 160, 0, - 0, 164, 133, 164, 0, 0, 64, 0, 73, 74, - 0, 0, 552, 0, 515, 516, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 490, 530, 0, 582, 0, - -2, 0, 577, 576, 357, 37, 0, 0, 0, 0, - 389, 174, 176, 0, 181, 0, 193, 0, 0, 172, - 0, 169, 171, 157, 154, 122, 123, 137, 140, 0, - 0, 0, 0, 28, 0, 0, 478, 479, 484, 485, - 481, 482, 487, 488, 0, 0, 0, 0, 572, 29, - 0, 363, 390, 391, 392, 353, 177, 178, 0, 182, - 180, 0, 355, 85, 0, 168, 170, 0, 0, 240, - 0, 75, 76, 69, 553, 551, 489, 0, 0, 0, - 580, -2, 578, 179, 0, 173, 158, 239, 0, 0, - 72, 508, 0, 511, 0, 241, 0, 226, 509, 0, - 0, 0, 197, 0, 0, 198, 199, 0, 0, 510, - 200, 0, 0, 0, 0, 0, 201, 203, 204, 0, - 0, 202, 242, 243, 205, 206, 207, + 21, 22, 556, 0, 317, 317, 317, 317, 317, 317, + 0, 627, 610, 0, 0, 0, 0, -2, 304, 305, + 0, 307, 308, 848, 848, 848, 848, 848, 0, 0, + 848, 0, 35, 36, 846, 1, 3, 564, 0, 0, + 321, 324, 319, 0, 610, 610, 0, 0, 62, 63, + 0, 0, 0, 832, 0, 608, 608, 608, 628, 629, + 632, 633, 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, 826, 827, 828, 829, 830, + 831, 833, 834, 835, 836, 837, 838, 839, 840, 841, + 842, 843, 844, 845, 0, 0, 0, 611, 0, 606, + 0, 606, 606, 606, 0, 255, 389, 636, 637, 832, + 0, 0, 0, 849, 0, 849, 267, 849, 849, 270, + 849, 0, 849, 0, 277, 279, 280, 281, 282, 0, + 286, 849, 301, 302, 291, 303, 306, 309, 310, 311, + 312, 313, 848, 848, 316, 29, 568, 0, 0, 556, + 31, 0, 317, 322, 323, 327, 325, 326, 318, 0, + 335, 339, 0, 397, 0, 402, 404, -2, -2, 0, + 439, 440, 441, 442, 443, 0, 0, 0, 0, 0, + 0, 0, 0, 467, 468, 469, 470, 541, 542, 543, + 544, 545, 546, 547, 548, 406, 407, 538, 588, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 529, 0, + 503, 503, 503, 503, 503, 503, 503, 503, 0, 0, + 0, 0, 0, 0, 0, 0, 43, 47, 0, 823, + 592, -2, -2, 0, 0, 634, 635, -2, 742, -2, + 640, 641, 642, 643, 644, 645, 646, 647, 648, 649, + 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, + 660, 661, 662, 663, 664, 665, 666, 667, 668, 669, + 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, + 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, + 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, + 700, 701, 702, 703, 704, 705, 706, 707, 708, 709, + 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, + 720, 721, 722, 723, 724, 725, 726, 727, 728, 729, + 730, 731, 732, 0, 0, 81, 0, 79, 0, 849, + 0, 0, 0, 0, 0, 0, 849, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 0, 254, + 0, 256, 849, 849, 259, 850, 851, 849, 849, 849, + 849, 849, 849, 266, 268, 269, 271, 849, 849, 273, + 0, 294, 292, 293, 288, 289, 0, 283, 284, 287, + 314, 315, 30, 847, 24, 0, 0, 565, 0, 557, + 558, 561, 564, 29, 324, 0, 329, 328, 320, 0, + 336, 0, 0, 0, 340, 0, 342, 343, 0, 400, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, + 425, 426, 427, 428, 429, 430, 403, 0, 417, 0, + 0, 0, 459, 460, 461, 462, 463, 464, 465, 0, + 331, 29, 0, 437, 0, 0, 0, 0, 0, 0, + 0, 0, 327, 0, 530, 0, 495, 0, 496, 497, + 498, 499, 500, 501, 502, 0, 331, 0, 0, 45, + 0, 388, 0, 346, 348, 349, 350, -2, 0, 372, + -2, 0, 0, 0, 41, 42, 0, 48, 823, 50, + 51, 0, 0, 0, 164, 601, 602, 603, 599, 208, + 0, 0, 145, 141, 87, 88, 89, 134, 91, 134, + 134, 134, 134, 161, 161, 161, 161, 117, 118, 119, + 120, 121, 0, 0, 104, 134, 134, 134, 108, 124, + 125, 126, 127, 128, 129, 130, 131, 92, 93, 94, + 95, 96, 97, 98, 136, 136, 136, 138, 138, 630, + 65, 0, 849, 0, 849, 77, 0, 222, 0, 0, + 0, 0, 0, 0, 0, 249, 607, 0, 849, 252, + 253, 390, 638, 639, 257, 258, 260, 261, 262, 263, + 264, 265, 272, 276, 0, 297, 0, 0, 278, 0, + 569, 0, 0, 0, 0, 0, 560, 562, 563, 568, + 32, 327, 0, 549, 0, 0, 0, 330, 27, 398, + 399, 401, 418, 0, 420, 422, 341, 337, 0, 539, + -2, 408, 409, 433, 434, 435, 0, 0, 0, 0, + 431, 413, 0, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 458, 514, 515, 0, 456, + 457, 466, 0, 0, 332, 333, 436, 0, 587, 29, + 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, + 0, 0, 536, 533, 0, 0, 504, 0, 0, 0, + 0, 0, 0, 387, 0, 0, 0, 0, 0, 0, + 377, 0, 0, 380, 0, 0, 0, 0, 371, 0, + 0, 391, 792, 373, 0, 375, 376, 395, 0, 395, + 44, 593, 49, 0, 0, 54, 55, 594, 595, 596, + 597, 0, 78, 209, 211, 214, 215, 216, 82, 83, + 84, 0, 0, 196, 0, 0, 190, 190, 0, 188, + 189, 80, 148, 146, 0, 143, 142, 90, 0, 161, + 161, 111, 112, 164, 0, 164, 164, 164, 0, 0, + 105, 106, 107, 99, 0, 100, 101, 102, 0, 103, + 0, 0, 849, 67, 609, 68, 848, 0, 0, 622, + 223, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 0, 69, 225, 227, 226, 0, 0, 0, 247, + 849, 251, 294, 275, 0, 0, 295, 296, 285, 0, + 566, 567, 0, 559, 25, 0, 604, 605, 550, 551, + 344, 419, 421, 423, 0, 331, 410, 431, 414, 0, + 411, 0, 0, 405, 471, 0, 0, 438, -2, 474, + 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 556, 0, 534, 0, 0, 494, + 505, 506, 507, 508, 581, 0, 0, -2, 0, 0, + 395, 589, 0, 347, 366, 368, 0, 363, 378, 379, + 381, 0, 383, 0, 385, 386, 351, 353, 354, 0, + 0, 0, 0, 374, 556, 0, 395, 40, 52, 53, + 0, 0, 59, 165, 166, 0, 212, 0, 0, 0, + 183, 190, 190, 186, 191, 187, 0, 156, 0, 147, + 86, 144, 0, 164, 164, 113, 0, 114, 115, 116, + 0, 132, 0, 0, 0, 0, 631, 66, 217, 848, + 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, + 240, 848, 0, 848, 623, 624, 625, 626, 0, 72, + 0, 0, 0, 0, 250, 297, 298, 299, 570, 0, + 26, 395, 0, 338, 540, 0, 412, 0, 432, 415, + 472, 334, 0, 134, 134, 519, 134, 138, 522, 134, + 524, 134, 527, 0, 0, 0, 0, 0, 0, 539, + 0, 0, 0, 0, 0, 531, 493, 537, 0, 33, + 0, 581, 571, 583, 585, 0, 29, 0, 577, 0, + 358, 556, 0, 0, 360, 367, 0, 0, 361, 0, + 362, 382, 384, 0, 0, 0, 0, 564, 396, 39, + 56, 57, 58, 210, 213, 0, 192, 134, 195, 184, + 185, 0, 159, 0, 149, 150, 151, 152, 153, 155, + 135, 109, 110, 162, 163, 161, 0, 161, 0, 139, + 0, 849, 218, 219, 220, 221, 0, 224, 0, 70, + 71, 0, 229, 248, 274, 552, 345, 473, 416, 476, + 516, 161, 520, 521, 523, 525, 526, 528, 478, 477, + 479, 0, 0, 485, 0, 0, 482, 0, 0, 488, + 0, 0, 0, 0, 0, 535, 0, 34, 0, 586, + -2, 0, 0, 0, 46, 0, 564, 590, 591, 364, + 0, 369, 0, 0, 0, 372, 38, 175, 0, 194, + 0, 356, 167, 160, 0, 0, 164, 133, 164, 0, + 0, 64, 0, 73, 74, 0, 0, 554, 0, 517, + 518, 0, 0, 0, 0, 0, 0, 0, 0, 509, + 492, 532, 0, 584, 0, -2, 0, 579, 578, 359, + 37, 0, 0, 0, 0, 391, 174, 176, 0, 181, + 0, 193, 0, 0, 172, 0, 169, 171, 157, 154, + 122, 123, 137, 140, 0, 0, 0, 0, 28, 0, + 0, 480, 481, 486, 487, 483, 484, 489, 490, 0, + 0, 0, 0, 574, 29, 0, 365, 392, 393, 394, + 355, 177, 178, 0, 182, 180, 0, 357, 85, 0, + 168, 170, 0, 0, 242, 0, 75, 76, 69, 555, + 553, 491, 0, 0, 0, 582, -2, 580, 179, 0, + 173, 158, 241, 0, 0, 72, 510, 0, 513, 0, + 243, 0, 228, 511, 0, 0, 0, 197, 0, 0, + 198, 199, 0, 0, 512, 200, 0, 0, 0, 0, + 0, 201, 203, 204, 0, 0, 202, 244, 245, 205, + 206, 207, } var yyTok1 = [...]int{ @@ -4221,8 +4234,20 @@ yydefault: }} } case 226: - yyDollar = yyS[yypt-12 : yypt+1] + yyDollar = yyS[yypt-5 : yypt+1] //line sql.y:1328 + { + yyVAL.statement = &DDL{Action: AddVschemaTableStr, Table: yyDollar[5].tableName} + } + case 227: + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:1332 + { + yyVAL.statement = &DDL{Action: DropVschemaTableStr, Table: yyDollar[5].tableName} + } + case 228: + yyDollar = yyS[yypt-12 : yypt+1] +//line sql.y:1336 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -4235,9 +4260,9 @@ yydefault: VindexCols: yyDollar[9].columns, } } - case 227: + case 229: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1341 +//line sql.y:1349 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -4247,59 +4272,59 @@ yydefault: }, } } - case 239: + case 241: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1366 +//line sql.y:1374 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 240: + case 242: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1372 +//line sql.y:1380 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 241: + case 243: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1376 +//line sql.y:1384 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 242: + case 244: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1382 +//line sql.y:1390 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 243: + case 245: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1386 +//line sql.y:1394 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 244: + case 246: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1392 +//line sql.y:1400 { yyVAL.statement = yyDollar[3].ddl } - case 245: + case 247: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1398 +//line sql.y:1406 { yyVAL.ddl = &DDL{Action: RenameStr, FromTables: TableNames{yyDollar[1].tableName}, ToTables: TableNames{yyDollar[3].tableName}} } - case 246: + case 248: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1402 +//line sql.y:1410 { yyVAL.ddl = yyDollar[1].ddl yyVAL.ddl.FromTables = append(yyVAL.ddl.FromTables, yyDollar[3].tableName) yyVAL.ddl.ToTables = append(yyVAL.ddl.ToTables, yyDollar[5].tableName) } - case 247: + case 249: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1410 +//line sql.y:1418 { var exists bool if yyDollar[3].byt != 0 { @@ -4307,16 +4332,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: yyDollar[4].tableNames, IfExists: exists} } - case 248: + case 250: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1418 +//line sql.y:1426 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName} } - case 249: + case 251: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1423 +//line sql.y:1431 { var exists bool if yyDollar[3].byt != 0 { @@ -4324,69 +4349,57 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, FromTables: TableNames{yyDollar[4].tableName.ToViewName()}, IfExists: exists} } - case 250: + case 252: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1431 +//line sql.y:1439 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 251: + case 253: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1435 +//line sql.y:1443 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 252: + case 254: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1441 +//line sql.y:1449 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } - case 253: + case 255: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1445 +//line sql.y:1453 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } - case 254: + case 256: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1450 +//line sql.y:1458 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName} } - case 255: + case 257: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1456 +//line sql.y:1464 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 256: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1461 - { - yyVAL.statement = &Show{Type: CharsetStr} - } - case 257: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1465 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} - } case 258: yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1469 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} + yyVAL.statement = &Show{Type: CharsetStr} } case 259: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1474 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1473 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 260: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1478 +//line sql.y:1477 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } @@ -4409,16 +4422,16 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 264: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1494 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 265: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1498 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 266: yyDollar = yyS[yypt-3 : yypt+1] @@ -4427,13 +4440,13 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 267: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1506 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 268: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:1510 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} @@ -4445,10 +4458,10 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 270: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:1518 { - yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 271: yyDollar = yyS[yypt-3 : yypt+1] @@ -4457,15 +4470,27 @@ yydefault: yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 272: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:1526 + { + yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} + } + case 273: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1530 + { + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + } + case 274: + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:1534 { 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 273: + case 275: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1531 +//line sql.y:1539 { // this is ugly, but I couldn't find a better way for now if yyDollar[3].str == "processlist" { @@ -4475,650 +4500,650 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[3].str, ShowTablesOpt: showTablesOpt} } } - case 274: + case 276: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1541 +//line sql.y:1549 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 275: + case 277: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1545 +//line sql.y:1553 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 276: + case 278: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1549 +//line sql.y:1557 { // Cannot dereference $4 directly, or else the parser stackcannot be pooled. See yyParsePooled showCollationFilterOpt := yyDollar[4].expr yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), ShowCollationFilterOpt: &showCollationFilterOpt} } - case 277: + case 279: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1555 +//line sql.y:1563 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 278: + case 280: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1559 +//line sql.y:1567 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 279: + case 281: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1563 +//line sql.y:1571 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 280: + case 282: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1567 +//line sql.y:1575 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 281: + case 283: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1571 +//line sql.y:1579 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 282: + case 284: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1575 +//line sql.y:1583 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } - case 283: + case 285: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1579 +//line sql.y:1587 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes), OnTable: yyDollar[5].tableName} } - case 284: + case 286: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1583 +//line sql.y:1591 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 285: + case 287: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1593 +//line sql.y:1601 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 286: + case 288: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1599 +//line sql.y:1607 { yyVAL.str = string(yyDollar[1].bytes) } - case 287: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1603 +//line sql.y:1611 { yyVAL.str = string(yyDollar[1].bytes) } - case 288: + case 290: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1609 +//line sql.y:1617 { yyVAL.str = "" } - case 289: + case 291: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1613 +//line sql.y:1621 { yyVAL.str = "full " } - case 290: + case 292: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1619 +//line sql.y:1627 { yyVAL.str = string(yyDollar[1].bytes) } - case 291: + case 293: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1623 +//line sql.y:1631 { yyVAL.str = string(yyDollar[1].bytes) } - case 292: + case 294: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1629 +//line sql.y:1637 { yyVAL.str = "" } - case 293: + case 295: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1633 +//line sql.y:1641 { yyVAL.str = yyDollar[2].tableIdent.v } - case 294: + case 296: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1637 +//line sql.y:1645 { yyVAL.str = yyDollar[2].tableIdent.v } - case 295: + case 297: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1643 +//line sql.y:1651 { yyVAL.showFilter = nil } - case 296: + case 298: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1647 +//line sql.y:1655 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 297: + case 299: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1651 +//line sql.y:1659 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 298: + case 300: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1657 +//line sql.y:1665 { yyVAL.str = "" } - case 299: + case 301: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1661 +//line sql.y:1669 { yyVAL.str = SessionStr } - case 300: + case 302: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1665 +//line sql.y:1673 { yyVAL.str = GlobalStr } - case 301: + case 303: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1671 +//line sql.y:1679 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 302: + case 304: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1675 +//line sql.y:1683 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 303: + case 305: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1681 +//line sql.y:1689 { yyVAL.statement = &Begin{} } - case 304: + case 306: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1685 +//line sql.y:1693 { yyVAL.statement = &Begin{} } - case 305: + case 307: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1691 +//line sql.y:1699 { yyVAL.statement = &Commit{} } - case 306: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1697 +//line sql.y:1705 { yyVAL.statement = &Rollback{} } - case 307: + case 309: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1703 +//line sql.y:1711 { yyVAL.statement = &OtherRead{} } - case 308: + case 310: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1707 +//line sql.y:1715 { yyVAL.statement = &OtherRead{} } - case 309: + case 311: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1711 +//line sql.y:1719 { yyVAL.statement = &OtherRead{} } - case 310: + case 312: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1715 +//line sql.y:1723 { yyVAL.statement = &OtherAdmin{} } - case 311: + case 313: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1719 +//line sql.y:1727 { yyVAL.statement = &OtherAdmin{} } - case 312: + case 314: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1723 +//line sql.y:1731 { yyVAL.statement = &OtherAdmin{} } - case 313: + case 315: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1727 +//line sql.y:1735 { yyVAL.statement = &OtherAdmin{} } - case 314: + case 316: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1733 +//line sql.y:1741 { yyVAL.statement = &DDL{Action: FlushStr} } - case 315: + case 317: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1737 +//line sql.y:1745 { setAllowComments(yylex, true) } - case 316: + case 318: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1741 +//line sql.y:1749 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 317: + case 319: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1747 +//line sql.y:1755 { yyVAL.bytes2 = nil } - case 318: + case 320: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1751 +//line sql.y:1759 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 319: + case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1757 +//line sql.y:1765 { yyVAL.str = UnionStr } - case 320: + case 322: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1761 +//line sql.y:1769 { yyVAL.str = UnionAllStr } - case 321: + case 323: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1765 +//line sql.y:1773 { yyVAL.str = UnionDistinctStr } - case 322: + case 324: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1770 +//line sql.y:1778 { yyVAL.str = "" } - case 323: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1774 +//line sql.y:1782 { yyVAL.str = SQLNoCacheStr } - case 324: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1778 +//line sql.y:1786 { yyVAL.str = SQLCacheStr } - case 325: + case 327: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1783 +//line sql.y:1791 { yyVAL.str = "" } - case 326: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1787 +//line sql.y:1795 { yyVAL.str = DistinctStr } - case 327: + case 329: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1792 +//line sql.y:1800 { yyVAL.str = "" } - case 328: + case 330: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1796 +//line sql.y:1804 { yyVAL.str = StraightJoinHint } - case 329: + case 331: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1801 +//line sql.y:1809 { yyVAL.selectExprs = nil } - case 330: + case 332: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1813 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 331: + case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1811 +//line sql.y:1819 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 332: + case 334: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1815 +//line sql.y:1823 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 333: + case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1821 +//line sql.y:1829 { yyVAL.selectExpr = &StarExpr{} } - case 334: + case 336: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1825 +//line sql.y:1833 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 335: + case 337: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1829 +//line sql.y:1837 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 336: + case 338: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1833 +//line sql.y:1841 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 337: + case 339: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1838 +//line sql.y:1846 { yyVAL.colIdent = ColIdent{} } - case 338: + case 340: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1842 +//line sql.y:1850 { yyVAL.colIdent = yyDollar[1].colIdent } - case 339: + case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1846 +//line sql.y:1854 { yyVAL.colIdent = yyDollar[2].colIdent } - case 341: + case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1853 +//line sql.y:1861 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 342: + case 344: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1858 +//line sql.y:1866 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 343: + case 345: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1862 +//line sql.y:1870 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 344: + case 346: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1868 +//line sql.y:1876 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 345: + case 347: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1872 +//line sql.y:1880 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 348: + case 350: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1882 +//line sql.y:1890 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 349: + case 351: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1886 +//line sql.y:1894 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 350: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1890 +//line sql.y:1898 { // missed alias for subquery yylex.Error("Every derived table must have its own alias") return 1 } - case 351: + case 353: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1896 +//line sql.y:1904 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 352: + case 354: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1902 +//line sql.y:1910 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 353: + case 355: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1906 +//line sql.y:1914 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 354: + case 356: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1912 +//line sql.y:1920 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 355: + case 357: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1916 +//line sql.y:1924 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 356: + case 358: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1922 +//line sql.y:1930 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 357: + case 359: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1926 +//line sql.y:1934 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 358: + case 360: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1939 +//line sql.y:1947 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 359: + case 361: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1943 +//line sql.y:1951 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 360: + case 362: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1947 +//line sql.y:1955 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 361: + case 363: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1951 +//line sql.y:1959 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 362: + case 364: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1957 +//line sql.y:1965 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 363: + case 365: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1959 +//line sql.y:1967 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 364: + case 366: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1963 +//line sql.y:1971 { yyVAL.joinCondition = JoinCondition{} } - case 365: + case 367: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1965 +//line sql.y:1973 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 366: + case 368: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1969 +//line sql.y:1977 { yyVAL.joinCondition = JoinCondition{} } - case 367: + case 369: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1971 +//line sql.y:1979 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 368: + case 370: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1974 +//line sql.y:1982 { yyVAL.empty = struct{}{} } - case 369: + case 371: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1976 +//line sql.y:1984 { yyVAL.empty = struct{}{} } - case 370: + case 372: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1979 +//line sql.y:1987 { yyVAL.tableIdent = NewTableIdent("") } - case 371: + case 373: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1983 +//line sql.y:1991 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 372: + case 374: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1987 +//line sql.y:1995 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 374: + case 376: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1994 +//line sql.y:2002 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 375: + case 377: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2000 +//line sql.y:2008 { yyVAL.str = JoinStr } - case 376: + case 378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2004 +//line sql.y:2012 { yyVAL.str = JoinStr } - case 377: + case 379: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2008 +//line sql.y:2016 { yyVAL.str = JoinStr } - case 378: + case 380: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2014 +//line sql.y:2022 { yyVAL.str = StraightJoinStr } - case 379: + case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2020 +//line sql.y:2028 { yyVAL.str = LeftJoinStr } - case 380: + case 382: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2024 +//line sql.y:2032 { yyVAL.str = LeftJoinStr } - case 381: + case 383: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2028 +//line sql.y:2036 { yyVAL.str = RightJoinStr } - case 382: + case 384: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2032 +//line sql.y:2040 { yyVAL.str = RightJoinStr } - case 383: + case 385: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2038 +//line sql.y:2046 { yyVAL.str = NaturalJoinStr } - case 384: + case 386: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2042 +//line sql.y:2050 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -5126,459 +5151,459 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 385: + case 387: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2052 +//line sql.y:2060 { yyVAL.tableName = yyDollar[2].tableName } - case 386: + case 388: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2056 +//line sql.y:2064 { yyVAL.tableName = yyDollar[1].tableName } - case 387: + case 389: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2062 +//line sql.y:2070 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 388: + case 390: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2066 +//line sql.y:2074 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 389: + case 391: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2071 +//line sql.y:2079 { yyVAL.indexHints = nil } - case 390: + case 392: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2075 +//line sql.y:2083 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 391: + case 393: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2079 +//line sql.y:2087 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 392: + case 394: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2083 +//line sql.y:2091 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 393: + case 395: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2088 +//line sql.y:2096 { yyVAL.expr = nil } - case 394: + case 396: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2092 +//line sql.y:2100 { yyVAL.expr = yyDollar[2].expr } - case 395: + case 397: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2098 +//line sql.y:2106 { yyVAL.expr = yyDollar[1].expr } - case 396: + case 398: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2102 +//line sql.y:2110 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 397: + case 399: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2106 +//line sql.y:2114 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 398: + case 400: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2110 +//line sql.y:2118 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 399: + case 401: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2114 +//line sql.y:2122 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 400: + case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2118 +//line sql.y:2126 { yyVAL.expr = yyDollar[1].expr } - case 401: + case 403: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2122 +//line sql.y:2130 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 402: + case 404: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2128 +//line sql.y:2136 { yyVAL.str = "" } - case 403: + case 405: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2132 +//line sql.y:2140 { yyVAL.str = string(yyDollar[2].bytes) } - case 404: + case 406: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2138 +//line sql.y:2146 { yyVAL.boolVal = BoolVal(true) } - case 405: + case 407: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2142 +//line sql.y:2150 { yyVAL.boolVal = BoolVal(false) } - case 406: + case 408: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2148 +//line sql.y:2156 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 407: + case 409: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2152 +//line sql.y:2160 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 408: + case 410: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2156 +//line sql.y:2164 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 409: + case 411: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2160 +//line sql.y:2168 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 410: + case 412: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2164 +//line sql.y:2172 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 411: + case 413: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2168 +//line sql.y:2176 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 412: + case 414: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2172 +//line sql.y:2180 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 413: + case 415: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2176 +//line sql.y:2184 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 414: + case 416: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2180 +//line sql.y:2188 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 415: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2184 - { - yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} - } - case 416: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2190 - { - yyVAL.str = IsNullStr - } case 417: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2194 +//line sql.y:2192 { - yyVAL.str = IsNotNullStr + yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } case 418: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2198 { - yyVAL.str = IsTrueStr + yyVAL.str = IsNullStr } case 419: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2202 { - yyVAL.str = IsNotTrueStr + yyVAL.str = IsNotNullStr } case 420: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2206 { - yyVAL.str = IsFalseStr + yyVAL.str = IsTrueStr } case 421: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2210 { - yyVAL.str = IsNotFalseStr + yyVAL.str = IsNotTrueStr } case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2216 +//line sql.y:2214 { - yyVAL.str = EqualStr + yyVAL.str = IsFalseStr } case 423: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2220 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2218 { - yyVAL.str = LessThanStr + yyVAL.str = IsNotFalseStr } case 424: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2224 { - yyVAL.str = GreaterThanStr + yyVAL.str = EqualStr } case 425: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2228 { - yyVAL.str = LessEqualStr + yyVAL.str = LessThanStr } case 426: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2232 { - yyVAL.str = GreaterEqualStr + yyVAL.str = GreaterThanStr } case 427: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2236 { - yyVAL.str = NotEqualStr + yyVAL.str = LessEqualStr } case 428: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2240 { - yyVAL.str = NullSafeEqualStr + yyVAL.str = GreaterEqualStr } case 429: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2245 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2244 { - yyVAL.expr = nil + yyVAL.str = NotEqualStr } case 430: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2249 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2248 { - yyVAL.expr = yyDollar[2].expr + yyVAL.str = NullSafeEqualStr } case 431: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2255 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:2253 { - yyVAL.colTuple = yyDollar[1].valTuple + yyVAL.expr = nil } case 432: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2259 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2257 { - yyVAL.colTuple = yyDollar[1].subquery + yyVAL.expr = yyDollar[2].expr } case 433: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2263 { - yyVAL.colTuple = ListArg(yyDollar[1].bytes) + yyVAL.colTuple = yyDollar[1].valTuple } case 434: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2269 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:2267 { - yyVAL.subquery = &Subquery{yyDollar[2].selStmt} + yyVAL.colTuple = yyDollar[1].subquery } case 435: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2275 +//line sql.y:2271 { - yyVAL.exprs = Exprs{yyDollar[1].expr} + yyVAL.colTuple = ListArg(yyDollar[1].bytes) } case 436: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2279 +//line sql.y:2277 { - yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) + yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } case 437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2285 +//line sql.y:2283 { - yyVAL.expr = yyDollar[1].expr + yyVAL.exprs = Exprs{yyDollar[1].expr} } case 438: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2289 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:2287 { - yyVAL.expr = yyDollar[1].boolVal + yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } case 439: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2293 { - yyVAL.expr = yyDollar[1].colName + yyVAL.expr = yyDollar[1].expr } case 440: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2297 { - yyVAL.expr = yyDollar[1].expr + yyVAL.expr = yyDollar[1].boolVal } case 441: yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2301 { - yyVAL.expr = yyDollar[1].subquery + yyVAL.expr = yyDollar[1].colName } case 442: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2305 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} + yyVAL.expr = yyDollar[1].expr } case 443: - yyDollar = yyS[yypt-3 : yypt+1] + yyDollar = yyS[yypt-1 : yypt+1] //line sql.y:2309 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} + yyVAL.expr = yyDollar[1].subquery } case 444: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2313 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } case 445: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2317 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } case 446: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2321 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } case 447: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2325 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } case 448: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2329 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } case 449: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2333 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } case 450: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2337 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } case 451: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2341 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } case 452: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2345 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } case 453: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2349 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } case 454: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2353 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } case 455: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2357 { - yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } case 456: yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2361 { - yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } case 457: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2365 { - yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} + yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } case 458: - yyDollar = yyS[yypt-2 : yypt+1] + yyDollar = yyS[yypt-3 : yypt+1] //line sql.y:2369 { - yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} + yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } case 459: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2373 { - yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} + yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } case 460: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2377 + { + yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} + } + case 461: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2381 + { + yyVAL.expr = &UnaryExpr{Operator: Utf8mb4Str, Expr: yyDollar[2].expr} + } + case 462: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2385 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -5586,9 +5611,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 461: + case 463: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2385 +//line sql.y:2393 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -5602,21 +5627,21 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 462: + case 464: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2399 +//line sql.y:2407 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 463: + case 465: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2403 +//line sql.y:2411 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 464: + case 466: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2407 +//line sql.y:2415 { // This rule prevents the usage of INTERVAL // as a function. If support is needed for that, @@ -5624,77 +5649,65 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.expr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: yyDollar[3].colIdent.String()} } - case 469: + case 471: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2425 +//line sql.y:2433 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 470: + case 472: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2429 +//line sql.y:2437 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 471: + case 473: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2433 +//line sql.y:2441 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 472: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2443 - { - yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} - } - case 473: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2447 - { - yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} - } case 474: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:2451 { - yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} + yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } case 475: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-4 : yypt+1] //line sql.y:2455 { - yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} + yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } case 476: yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2459 { - yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} + yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 477: yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2463 { - yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} + yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } case 478: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2467 { - yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } case 479: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2471 { - yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } case 480: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2475 { - yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} + yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 481: yyDollar = yyS[yypt-8 : yypt+1] @@ -5703,34 +5716,34 @@ yydefault: yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 482: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2483 { - yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } case 483: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2487 { - yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} + yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 484: yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2491 { - yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } case 485: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2495 { - yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} } case 486: - yyDollar = yyS[yypt-6 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2499 { - yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} + yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 487: yyDollar = yyS[yypt-8 : yypt+1] @@ -5739,352 +5752,364 @@ yydefault: yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 488: - yyDollar = yyS[yypt-8 : yypt+1] + yyDollar = yyS[yypt-6 : yypt+1] //line sql.y:2507 { - yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} + yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: nil} } case 489: - yyDollar = yyS[yypt-9 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2511 { - yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} + yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 490: - yyDollar = yyS[yypt-7 : yypt+1] + yyDollar = yyS[yypt-8 : yypt+1] //line sql.y:2515 { - yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} + yyVAL.expr = &SubstrExpr{StrVal: NewStrVal(yyDollar[3].bytes), From: yyDollar[5].expr, To: yyDollar[7].expr} } case 491: - yyDollar = yyS[yypt-5 : yypt+1] + yyDollar = yyS[yypt-9 : yypt+1] //line sql.y:2519 { - yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} + yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } case 492: - yyDollar = yyS[yypt-4 : yypt+1] + yyDollar = yyS[yypt-7 : yypt+1] //line sql.y:2523 { - yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} + yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } case 493: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2533 + yyDollar = yyS[yypt-5 : yypt+1] +//line sql.y:2527 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} + yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } case 494: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2537 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:2531 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} + yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } case 495: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2541 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} + yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } case 496: yyDollar = yyS[yypt-2 : yypt+1] //line sql.y:2545 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} + yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } case 497: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2550 +//line sql.y:2549 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} + yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } case 498: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2555 +//line sql.y:2553 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} + yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } case 499: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2560 +//line sql.y:2558 { - yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} + yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } case 500: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2565 +//line sql.y:2563 + { + yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} + } + case 501: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2568 + { + yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} + } + case 502: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:2573 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 503: + case 505: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2579 +//line sql.y:2587 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 504: + case 506: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2583 +//line sql.y:2591 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 505: + case 507: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2587 +//line sql.y:2595 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 506: + case 508: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2591 +//line sql.y:2599 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 507: + case 509: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2597 +//line sql.y:2605 { yyVAL.str = "" } - case 508: + case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2601 +//line sql.y:2609 { yyVAL.str = BooleanModeStr } - case 509: + case 511: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2605 +//line sql.y:2613 { yyVAL.str = NaturalLanguageModeStr } - case 510: + case 512: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2609 +//line sql.y:2617 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 511: + case 513: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2613 +//line sql.y:2621 { yyVAL.str = QueryExpansionStr } - case 512: + case 514: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2619 +//line sql.y:2627 { yyVAL.str = string(yyDollar[1].bytes) } - case 513: + case 515: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2623 +//line sql.y:2631 { yyVAL.str = string(yyDollar[1].bytes) } - case 514: + case 516: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2629 +//line sql.y:2637 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 515: + case 517: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2633 +//line sql.y:2641 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 516: + case 518: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2637 +//line sql.y:2645 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: string(yyDollar[3].bytes)} } - case 517: + case 519: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2641 +//line sql.y:2649 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 518: + case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2645 +//line sql.y:2653 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 519: + case 521: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2649 +//line sql.y:2657 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 520: + case 522: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2655 +//line sql.y:2663 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 521: + case 523: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2659 +//line sql.y:2667 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 522: + case 524: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2663 +//line sql.y:2671 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 523: + case 525: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2667 +//line sql.y:2675 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 524: + case 526: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2671 +//line sql.y:2679 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 525: + case 527: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2675 +//line sql.y:2683 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 526: + case 528: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2679 +//line sql.y:2687 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 527: + case 529: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2684 +//line sql.y:2692 { yyVAL.expr = nil } - case 528: + case 530: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2688 +//line sql.y:2696 { yyVAL.expr = yyDollar[1].expr } - case 529: + case 531: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2693 +//line sql.y:2701 { yyVAL.str = string("") } - case 530: + case 532: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2697 +//line sql.y:2705 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 531: + case 533: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2703 +//line sql.y:2711 { yyVAL.whens = []*When{yyDollar[1].when} } - case 532: + case 534: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2707 +//line sql.y:2715 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 533: + case 535: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2713 +//line sql.y:2721 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 534: + case 536: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2718 +//line sql.y:2726 { yyVAL.expr = nil } - case 535: + case 537: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2722 +//line sql.y:2730 { yyVAL.expr = yyDollar[2].expr } - case 536: + case 538: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2728 +//line sql.y:2736 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 537: + case 539: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2732 +//line sql.y:2740 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 538: + case 540: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2736 +//line sql.y:2744 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 539: + case 541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2742 +//line sql.y:2750 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 540: + case 542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2746 +//line sql.y:2754 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 541: + case 543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2750 +//line sql.y:2758 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 542: + case 544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2754 +//line sql.y:2762 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 543: + case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2758 +//line sql.y:2766 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 544: + case 546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2762 +//line sql.y:2770 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 545: + case 547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2766 +//line sql.y:2774 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 546: + case 548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2770 +//line sql.y:2778 { yyVAL.expr = &NullVal{} } - case 547: + case 549: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2776 +//line sql.y:2784 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -6093,239 +6118,239 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 548: + case 550: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2785 +//line sql.y:2793 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 549: + case 551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2789 +//line sql.y:2797 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 550: + case 552: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2794 +//line sql.y:2802 { yyVAL.exprs = nil } - case 551: + case 553: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2798 +//line sql.y:2806 { yyVAL.exprs = yyDollar[3].exprs } - case 552: + case 554: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2803 +//line sql.y:2811 { yyVAL.expr = nil } - case 553: + case 555: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2807 +//line sql.y:2815 { yyVAL.expr = yyDollar[2].expr } - case 554: + case 556: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2812 +//line sql.y:2820 { yyVAL.orderBy = nil } - case 555: + case 557: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2816 +//line sql.y:2824 { yyVAL.orderBy = yyDollar[3].orderBy } - case 556: + case 558: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2822 +//line sql.y:2830 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 557: + case 559: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2826 +//line sql.y:2834 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 558: + case 560: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2832 +//line sql.y:2840 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 559: + case 561: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2837 +//line sql.y:2845 { yyVAL.str = AscScr } - case 560: + case 562: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2841 +//line sql.y:2849 { yyVAL.str = AscScr } - case 561: + case 563: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2845 +//line sql.y:2853 { yyVAL.str = DescScr } - case 562: + case 564: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2850 +//line sql.y:2858 { yyVAL.limit = nil } - case 563: + case 565: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2854 +//line sql.y:2862 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr} } - case 564: + case 566: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2858 +//line sql.y:2866 { yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr} } - case 565: + case 567: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2862 +//line sql.y:2870 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr} } - case 566: + case 568: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2867 +//line sql.y:2875 { yyVAL.str = "" } - case 567: + case 569: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2871 +//line sql.y:2879 { yyVAL.str = ForUpdateStr } - case 568: + case 570: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2875 +//line sql.y:2883 { yyVAL.str = ShareModeStr } - case 569: + case 571: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2888 +//line sql.y:2896 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 570: + case 572: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2892 +//line sql.y:2900 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 571: + case 573: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2896 +//line sql.y:2904 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 572: + case 574: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2901 +//line sql.y:2909 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 573: + case 575: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2905 +//line sql.y:2913 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 574: + case 576: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2909 +//line sql.y:2917 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 575: + case 577: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2916 +//line sql.y:2924 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 576: + case 578: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2920 +//line sql.y:2928 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 577: + case 579: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2924 +//line sql.y:2932 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 578: + case 580: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2928 +//line sql.y:2936 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 579: + case 581: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2933 +//line sql.y:2941 { yyVAL.updateExprs = nil } - case 580: + case 582: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2937 +//line sql.y:2945 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 581: + case 583: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2943 +//line sql.y:2951 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 582: + case 584: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2947 +//line sql.y:2955 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 583: + case 585: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2953 +//line sql.y:2961 { yyVAL.valTuple = yyDollar[1].valTuple } - case 584: + case 586: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2957 +//line sql.y:2965 { yyVAL.valTuple = ValTuple{} } - case 585: + case 587: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2963 +//line sql.y:2971 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 586: + case 588: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2969 +//line sql.y:2977 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -6333,312 +6358,312 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 587: + case 589: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2979 +//line sql.y:2987 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 588: + case 590: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2983 +//line sql.y:2991 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 589: + case 591: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2989 +//line sql.y:2997 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 590: + case 592: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2995 +//line sql.y:3003 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 591: + case 593: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2999 +//line sql.y:3007 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 592: + case 594: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3005 +//line sql.y:3013 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 593: + case 595: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3009 +//line sql.y:3017 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("off"))} } - case 594: + case 596: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3013 +//line sql.y:3021 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 595: + case 597: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3017 +//line sql.y:3025 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 597: + case 599: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3024 +//line sql.y:3032 { yyVAL.bytes = []byte("charset") } - case 599: + case 601: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3031 +//line sql.y:3039 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 600: + case 602: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3035 +//line sql.y:3043 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 601: + case 603: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3039 +//line sql.y:3047 { yyVAL.expr = &Default{} } - case 604: + case 606: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3048 +//line sql.y:3056 { yyVAL.byt = 0 } - case 605: + case 607: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3050 +//line sql.y:3058 { yyVAL.byt = 1 } - case 606: + case 608: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3053 +//line sql.y:3061 { yyVAL.empty = struct{}{} } - case 607: + case 609: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3055 +//line sql.y:3063 { yyVAL.empty = struct{}{} } - case 608: + case 610: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3058 +//line sql.y:3066 { yyVAL.str = "" } - case 609: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3060 - { - yyVAL.str = IgnoreStr - } - case 610: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3064 - { - yyVAL.empty = struct{}{} - } case 611: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3066 +//line sql.y:3068 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 612: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3068 +//line sql.y:3072 { yyVAL.empty = struct{}{} } case 613: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3070 +//line sql.y:3074 { yyVAL.empty = struct{}{} } case 614: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3072 +//line sql.y:3076 { yyVAL.empty = struct{}{} } case 615: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3074 +//line sql.y:3078 { yyVAL.empty = struct{}{} } case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3076 +//line sql.y:3080 { yyVAL.empty = struct{}{} } case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3078 +//line sql.y:3082 { yyVAL.empty = struct{}{} } case 618: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3080 +//line sql.y:3084 { yyVAL.empty = struct{}{} } case 619: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3082 +//line sql.y:3086 { yyVAL.empty = struct{}{} } case 620: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3085 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3088 { yyVAL.empty = struct{}{} } case 621: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3087 +//line sql.y:3090 { yyVAL.empty = struct{}{} } case 622: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3089 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3093 { yyVAL.empty = struct{}{} } case 623: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3093 +//line sql.y:3095 { yyVAL.empty = struct{}{} } case 624: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3095 +//line sql.y:3097 { yyVAL.empty = struct{}{} } case 625: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3098 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3101 { yyVAL.empty = struct{}{} } case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3100 +//line sql.y:3103 { yyVAL.empty = struct{}{} } case 627: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3102 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3106 { yyVAL.empty = struct{}{} } case 628: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3108 + { + yyVAL.empty = struct{}{} + } + case 629: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3110 + { + yyVAL.empty = struct{}{} + } + case 630: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3105 +//line sql.y:3113 { yyVAL.colIdent = ColIdent{} } - case 629: + case 631: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3107 +//line sql.y:3115 { yyVAL.colIdent = yyDollar[2].colIdent } - case 630: + case 632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3111 +//line sql.y:3119 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 631: + case 633: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3115 +//line sql.y:3123 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 633: + case 635: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3122 +//line sql.y:3130 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 634: + case 636: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3128 +//line sql.y:3136 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 635: + case 637: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3132 +//line sql.y:3140 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 637: + case 639: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3139 +//line sql.y:3147 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 844: + case 846: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3371 +//line sql.y:3379 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 845: + case 847: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3380 +//line sql.y:3388 { decNesting(yylex) } - case 846: + case 848: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3385 +//line sql.y:3393 { skipToEnd(yylex) } - case 847: + case 849: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3390 +//line sql.y:3398 { skipToEnd(yylex) } - case 848: + case 850: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3394 +//line sql.y:3402 { skipToEnd(yylex) } - case 849: + case 851: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3398 +//line sql.y:3406 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 8505a02c86e..07dc55ca4c7 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -1324,6 +1324,14 @@ alter_statement: Name: $5, }} } +| ALTER VSCHEMA ADD TABLE table_name + { + $$ = &DDL{Action: AddVschemaTableStr, Table: $5} + } +| ALTER VSCHEMA DROP TABLE table_name + { + $$ = &DDL{Action: DropVschemaTableStr, Table: $5} + } | ALTER VSCHEMA ON table_name ADD VINDEX sql_id '(' column_list ')' vindex_type_opt vindex_params_opt { $$ = &DDL{ diff --git a/go/vt/topotools/vschema_ddl.go b/go/vt/topotools/vschema_ddl.go index 56a28426a9e..ed5d6b1c907 100644 --- a/go/vt/topotools/vschema_ddl.go +++ b/go/vt/topotools/vschema_ddl.go @@ -70,6 +70,30 @@ func ApplyVSchemaDDL(ksName string, ks *vschemapb.Keyspace, ddl *sqlparser.DDL) return ks, nil + case sqlparser.AddVschemaTableStr: + if ks.Sharded { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "add vschema table: unsupported on sharded keyspace %s", ksName) + } + + name := ddl.Table.Name.String() + if _, ok := ks.Tables[name]; ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vschema already contains table %s in keyspace %s", name, ksName) + } + + ks.Tables[name] = &vschemapb.Table{} + + return ks, nil + + case sqlparser.DropVschemaTableStr: + name := ddl.Table.Name.String() + if _, ok := ks.Tables[name]; !ok { + return nil, vterrors.Errorf(vtrpcpb.Code_INTERNAL, "vschema does not contain table %s in keyspace %s", name, ksName) + } + + delete(ks.Tables, name) + + return ks, nil + case sqlparser.AddColVindexStr: // Support two cases: // diff --git a/go/vt/vtgate/executor.go b/go/vt/vtgate/executor.go index 88273a303be..38440dc3af8 100644 --- a/go/vt/vtgate/executor.go +++ b/go/vt/vtgate/executor.go @@ -337,7 +337,12 @@ func (e *Executor) handleDDL(ctx context.Context, safeSession *SafeSession, sql execStart := time.Now() logStats.PlanTime = execStart.Sub(logStats.StartTime) switch ddl.Action { - case sqlparser.CreateVindexStr, sqlparser.AddColVindexStr, sqlparser.DropColVindexStr: + case sqlparser.CreateVindexStr, + sqlparser.AddVschemaTableStr, + sqlparser.DropVschemaTableStr, + sqlparser.AddColVindexStr, + sqlparser.DropColVindexStr: + err := e.handleVSchemaDDL(ctx, safeSession, dest, destKeyspace, destTabletType, ddl, logStats) logStats.ExecuteTime = time.Since(execStart) return &sqltypes.Result{}, err diff --git a/go/vt/vtgate/executor_test.go b/go/vt/vtgate/executor_test.go index 80b1af9e659..008e0976fe2 100644 --- a/go/vt/vtgate/executor_test.go +++ b/go/vt/vtgate/executor_test.go @@ -20,6 +20,7 @@ import ( "bytes" "html/template" "reflect" + "sort" "strings" "testing" "time" @@ -1150,6 +1151,28 @@ func waitForVindex(t *testing.T, ks, name string, watch chan *vschemapb.SrvVSche return nil, nil } +func waitForVschemaTables(t *testing.T, ks string, tables []string, executor *Executor) *vschemapb.SrvVSchema { + t.Helper() + + // Wait up to 10ms until the vindex manager gets notified of the update + for i := 0; i < 10; i++ { + vschema := executor.vm.GetCurrentSrvVschema() + gotTables := []string{} + for t := range vschema.Keyspaces[ks].Tables { + gotTables = append(gotTables, t) + } + sort.Strings(tables) + sort.Strings(gotTables) + if reflect.DeepEqual(tables, gotTables) { + return vschema + } + time.Sleep(time.Millisecond) + } + + t.Fatalf("updated vschema did not contain tables %v", tables) + return nil +} + func waitForColVindexes(t *testing.T, ks, table string, names []string, executor *Executor) *vschemapb.SrvVSchema { t.Helper() @@ -1257,6 +1280,66 @@ func TestExecutorCreateVindexDDL(t *testing.T) { } } +func TestExecutorAddDropVschemaTableDDL(t *testing.T) { + *vschemaacl.AuthorizedDDLUsers = "%" + defer func() { + *vschemaacl.AuthorizedDDLUsers = "" + }() + executor, sbc1, sbc2, sbclookup := createExecutorEnv() + ks := KsTestUnsharded + + vschemaUpdates := make(chan *vschemapb.SrvVSchema, 4) + executor.serv.WatchSrvVSchema(context.Background(), "aa", func(vschema *vschemapb.SrvVSchema, err error) { + vschemaUpdates <- vschema + }) + + vschema := <-vschemaUpdates + _, ok := vschema.Keyspaces[ks].Tables["test_table"] + if ok { + t.Fatalf("test_table should not exist in original vschema") + } + + vschemaTables := []string{} + for t := range vschema.Keyspaces[ks].Tables { + vschemaTables = append(vschemaTables, t) + } + + session := NewSafeSession(&vtgatepb.Session{TargetString: ks}) + stmt := "alter vschema add table test_table" + _, err := executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + if err != nil { + t.Error(err) + } + vschema = waitForVschemaTables(t, ks, append(vschemaTables, "test_table"), executor) + + stmt = "alter vschema add table test_table2" + _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + if err != nil { + t.Error(err) + } + vschema = waitForVschemaTables(t, ks, append(vschemaTables, []string{"test_table", "test_table2"}...), executor) + + // Should fail on a sharded keyspace + session = NewSafeSession(&vtgatepb.Session{TargetString: "TestExecutor"}) + stmt = "alter vschema add table test_table" + _, err = executor.Execute(context.Background(), "TestExecute", session, stmt, nil) + wantErr := "add vschema table: unsupported on sharded keyspace TestExecutor" + if err == nil || err.Error() != wantErr { + t.Errorf("want error %v got %v", wantErr, err) + } + + // No queries should have gone to any tablets + wantCount := []int64{0, 0, 0} + gotCount := []int64{ + sbc1.ExecCount.Get(), + sbc2.ExecCount.Get(), + sbclookup.ExecCount.Get(), + } + if !reflect.DeepEqual(gotCount, wantCount) { + t.Errorf("Exec %s: %v, want %v", stmt, gotCount, wantCount) + } +} + func TestExecutorAddDropVindexDDL(t *testing.T) { *vschemaacl.AuthorizedDDLUsers = "%" defer func() { From 06cb4f4ab7ed284873ec3db5af0ec9f20f96958d Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 7 Dec 2018 10:14:46 -0800 Subject: [PATCH 23/35] use auth=none for vtgate, move sql scripts to common location Signed-off-by: deepthi --- examples/{local => common}/insert_commerce_data.sql | 0 examples/{local => common}/select_commerce_data.sql | 0 examples/{local => common}/select_customer-80_data.sql | 0 examples/{local => common}/select_customer0_data.sql | 0 examples/{local => common}/select_customer80-_data.sql | 0 examples/local/101_initial_cluster.sh | 4 ++-- examples/local/203_vertical_split.sh | 2 +- examples/local/205_vertical_migrate_master.sh | 2 +- examples/local/206_clean_commerce.sh | 2 +- examples/local/302_new_shards.sh | 4 ++-- examples/local/305_migrate_master.sh | 4 ++-- examples/local/vtgate-up.sh | 9 +++++++-- 12 files changed, 16 insertions(+), 11 deletions(-) rename examples/{local => common}/insert_commerce_data.sql (100%) rename examples/{local => common}/select_commerce_data.sql (100%) rename examples/{local => common}/select_customer-80_data.sql (100%) rename examples/{local => common}/select_customer0_data.sql (100%) rename examples/{local => common}/select_customer80-_data.sql (100%) diff --git a/examples/local/insert_commerce_data.sql b/examples/common/insert_commerce_data.sql similarity index 100% rename from examples/local/insert_commerce_data.sql rename to examples/common/insert_commerce_data.sql diff --git a/examples/local/select_commerce_data.sql b/examples/common/select_commerce_data.sql similarity index 100% rename from examples/local/select_commerce_data.sql rename to examples/common/select_commerce_data.sql diff --git a/examples/local/select_customer-80_data.sql b/examples/common/select_customer-80_data.sql similarity index 100% rename from examples/local/select_customer-80_data.sql rename to examples/common/select_customer-80_data.sql diff --git a/examples/local/select_customer0_data.sql b/examples/common/select_customer0_data.sql similarity index 100% rename from examples/local/select_customer0_data.sql rename to examples/common/select_customer0_data.sql diff --git a/examples/local/select_customer80-_data.sql b/examples/common/select_customer80-_data.sql similarity index 100% rename from examples/local/select_customer80-_data.sql rename to examples/common/select_customer80-_data.sql diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index 74f87d52396..1c30fdff73f 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -49,7 +49,7 @@ CELL=zone1 $script_root/vtgate-up.sh sleep 5 # insert rows into the tables. we are actually connecting to vtgate here, it will route the sql correctly -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password < insert_commerce_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user < $script_root/../common/insert_commerce_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql disown -a diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh index bf3630e9a30..21afb3798c2 100755 --- a/examples/local/203_vertical_split.sh +++ b/examples/local/203_vertical_split.sh @@ -32,6 +32,6 @@ $VTROOT/bin/vtworker \ sleep 2 # check that customer and order data has been copied to customer keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer0_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer0_data.sql disown -a diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh index 0578ddbaaff..d2024c05739 100755 --- a/examples/local/205_vertical_migrate_master.sh +++ b/examples/local/205_vertical_migrate_master.sh @@ -24,6 +24,6 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedFrom customer/0 master # customer and order data cannot be accessed from commerce keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql disown -a diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh index 342192de960..2b410a5d12e 100755 --- a/examples/local/206_clean_commerce.sh +++ b/examples/local/206_clean_commerce.sh @@ -27,6 +27,6 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 master # customer and order tables have now been deleted from commerce keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_commerce_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql disown -a diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh index e11caff88ef..c6909d04d6d 100755 --- a/examples/local/302_new_shards.sh +++ b/examples/local/302_new_shards.sh @@ -31,7 +31,7 @@ sleep 15 sleep 15 # new tables are empty -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer-80_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer80-_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer-80_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer80-_data.sql disown -a diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh index 79c6ea22264..5f989708f9f 100755 --- a/examples/local/305_migrate_master.sh +++ b/examples/local/305_migrate_master.sh @@ -23,7 +23,7 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedTypes customer/0 master # data has been copied over to shards, and databases for the new shards are now available -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer-80_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user -pmysql_password --table < select_customer80-_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer-80_data.sql +mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer80-_data.sql disown -a diff --git a/examples/local/vtgate-up.sh b/examples/local/vtgate-up.sh index f79a4d9dc6d..77483499e71 100755 --- a/examples/local/vtgate-up.sh +++ b/examples/local/vtgate-up.sh @@ -54,13 +54,19 @@ then optional_tls_args="-grpc_cert $cert_dir/server-cert.pem -grpc_key $cert_dir/server-key.pem -grpc_ca $cert_dir/ca-cert.pem" fi -optional_auth_args='' +optional_auth_args='-mysql_auth_server_impl none' if [ "$1" = "--enable-grpc-static-auth" ]; then echo "Enabling Auth with static authentication in grpc" optional_auth_args='-grpc_auth_static_client_creds ./grpc_static_client_auth.json' fi +if [ "$1" = "--enable-mysql-static-auth" ]; +then + echo "Enabling Auth with mysql static authentication" + optional_auth_args='-mysql_auth_server_static_file ./mysql_auth_server_static_creds.json' +fi + # Start vtgate. # shellcheck disable=SC2086 $VTROOT/bin/vtgate \ @@ -71,7 +77,6 @@ $VTROOT/bin/vtgate \ -grpc_port $grpc_port \ -mysql_server_port $mysql_server_port \ -mysql_server_socket_path $mysql_server_socket_path \ - -mysql_auth_server_static_file "./mysql_auth_server_static_creds.json" \ -cell $cell \ -cells_to_watch $cell \ -tablet_types_to_wait MASTER,REPLICA \ From 2be922a20c4d44ec35b20c0881dd7a2736afc883 Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 7 Dec 2018 11:16:37 -0800 Subject: [PATCH 24/35] add mysql helper script to local example, remove calls to mysql from scripts, they will be executed by the user using lmysql.sh Signed-off-by: deepthi --- examples/local/101_initial_cluster.sh | 5 ---- examples/local/203_vertical_split.sh | 4 --- examples/local/205_vertical_migrate_master.sh | 3 --- examples/local/206_clean_commerce.sh | 3 --- examples/local/302_new_shards.sh | 5 ---- examples/local/304_migrate_replicas.sh | 1 - examples/local/305_migrate_master.sh | 2 -- examples/local/306_down_shard_0.sh | 4 +-- examples/local/307_delete_shard_0.sh | 25 +++++++++++++++++++ examples/local/401_teardown.sh | 1 - examples/local/lmysql.sh | 19 ++++++++++++++ 11 files changed, 46 insertions(+), 26 deletions(-) mode change 100755 => 100644 examples/local/306_down_shard_0.sh create mode 100755 examples/local/307_delete_shard_0.sh create mode 100755 examples/local/lmysql.sh diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index 1c30fdff73f..921afde70fb 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -46,10 +46,5 @@ sleep 15 # start vtgate CELL=zone1 $script_root/vtgate-up.sh -sleep 5 - -# insert rows into the tables. we are actually connecting to vtgate here, it will route the sql correctly -mysql -h 127.0.0.1 -P 15306 -u mysql_user < $script_root/../common/insert_commerce_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql disown -a diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh index 21afb3798c2..7a88c0d4860 100755 --- a/examples/local/203_vertical_split.sh +++ b/examples/local/203_vertical_split.sh @@ -30,8 +30,4 @@ $VTROOT/bin/vtworker \ -use_v3_resharding_mode \ VerticalSplitClone -min_healthy_rdonly_tablets=1 -tables=customer,corder customer/0 -sleep 2 -# check that customer and order data has been copied to customer keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer0_data.sql - disown -a diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh index d2024c05739..560564e5099 100755 --- a/examples/local/205_vertical_migrate_master.sh +++ b/examples/local/205_vertical_migrate_master.sh @@ -23,7 +23,4 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedFrom customer/0 master -# customer and order data cannot be accessed from commerce keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql - disown -a diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh index 2b410a5d12e..eeef5d2c04f 100755 --- a/examples/local/206_clean_commerce.sh +++ b/examples/local/206_clean_commerce.sh @@ -26,7 +26,4 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 replica ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 master -# customer and order tables have now been deleted from commerce keyspace -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_commerce_data.sql - disown -a diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh index c6909d04d6d..30c1cb6b507 100755 --- a/examples/local/302_new_shards.sh +++ b/examples/local/302_new_shards.sh @@ -29,9 +29,4 @@ sleep 15 ./lvtctl.sh CopySchemaShard customer/0 customer/-80 ./lvtctl.sh CopySchemaShard customer/0 customer/80- -sleep 15 -# new tables are empty -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer-80_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer80-_data.sql - disown -a diff --git a/examples/local/304_migrate_replicas.sh b/examples/local/304_migrate_replicas.sh index 9e5d381e515..e4c154dbea9 100755 --- a/examples/local/304_migrate_replicas.sh +++ b/examples/local/304_migrate_replicas.sh @@ -23,5 +23,4 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedTypes customer/0 rdonly ./lvtctl.sh MigrateServedTypes customer/0 replica - disown -a diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh index 5f989708f9f..0e52217d752 100755 --- a/examples/local/305_migrate_master.sh +++ b/examples/local/305_migrate_master.sh @@ -23,7 +23,5 @@ script_root=`dirname "${BASH_SOURCE}"` ./lvtctl.sh MigrateServedTypes customer/0 master # data has been copied over to shards, and databases for the new shards are now available -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer-80_data.sql -mysql -h 127.0.0.1 -P 15306 -u mysql_user --table < $script_root/../common/select_customer80-_data.sql disown -a diff --git a/examples/local/306_down_shard_0.sh b/examples/local/306_down_shard_0.sh old mode 100755 new mode 100644 index 5d32383dea4..1fb25a8c8d5 --- a/examples/local/306_down_shard_0.sh +++ b/examples/local/306_down_shard_0.sh @@ -14,12 +14,12 @@ # See the License for the specific language governing permissions and # limitations under the License. -# this script deletes the old shard 0 which has been replaced by 2 shards +# this script brings down the tablets for customer/0 keyspace set -e script_root=`dirname "${BASH_SOURCE}"` -./lvtctl.sh DeleteShard -recursive customer/0 +CELL=zone1 UID_BASE=100 $script_root/vttablet-down.sh disown -a diff --git a/examples/local/307_delete_shard_0.sh b/examples/local/307_delete_shard_0.sh new file mode 100755 index 00000000000..5d32383dea4 --- /dev/null +++ b/examples/local/307_delete_shard_0.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Copyright 2018 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. + +# this script deletes the old shard 0 which has been replaced by 2 shards + +set -e + +script_root=`dirname "${BASH_SOURCE}"` + +./lvtctl.sh DeleteShard -recursive customer/0 + +disown -a diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh index d0663ac7da4..ddc34f3f9c1 100755 --- a/examples/local/401_teardown.sh +++ b/examples/local/401_teardown.sh @@ -24,7 +24,6 @@ set -e script_root=`dirname "${BASH_SOURCE}"` ./vtgate-down.sh -CELL=zone1 UID_BASE=100 $script_root/vttablet-down.sh CELL=zone1 UID_BASE=200 $script_root/vttablet-down.sh CELL=zone1 UID_BASE=300 $script_root/vttablet-down.sh CELL=zone1 UID_BASE=400 $script_root/vttablet-down.sh diff --git a/examples/local/lmysql.sh b/examples/local/lmysql.sh new file mode 100755 index 00000000000..1382e517b8d --- /dev/null +++ b/examples/local/lmysql.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Copyright 2018 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. + +# This is a convenience script to run mysql client against the local vtgate. + +mysql -h 127.0.0.1 -P 15306 -u mysql_user From 0ccc3b9ffff087b894886f60d2af0481b466866f Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 7 Dec 2018 11:20:37 -0800 Subject: [PATCH 25/35] codeclimate fix Signed-off-by: deepthi --- examples/local/307_delete_shard_0.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/local/307_delete_shard_0.sh b/examples/local/307_delete_shard_0.sh index 5d32383dea4..284e6aba3ab 100755 --- a/examples/local/307_delete_shard_0.sh +++ b/examples/local/307_delete_shard_0.sh @@ -18,8 +18,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh DeleteShard -recursive customer/0 disown -a From d97a1942d5997f0f3d0bb03642c6b9ce6c0167c7 Mon Sep 17 00:00:00 2001 From: deepthi Date: Fri, 7 Dec 2018 12:20:23 -0800 Subject: [PATCH 26/35] shellcheck fixes Signed-off-by: deepthi --- examples/local/101_initial_cluster.sh | 13 +++++++------ examples/local/202_customer_tablets.sh | 5 +++-- examples/local/203_vertical_split.sh | 13 +++++++++---- examples/local/204_vertical_migrate_replicas.sh | 2 -- examples/local/205_vertical_migrate_master.sh | 2 -- examples/local/206_clean_commerce.sh | 2 -- examples/local/301_customer_sharded.sh | 2 -- examples/local/302_new_shards.sh | 7 ++++--- examples/local/303_horizontal_split.sh | 13 +++++++++---- examples/local/304_migrate_replicas.sh | 2 -- examples/local/305_migrate_master.sh | 3 --- examples/local/306_down_shard_0.sh | 5 +++-- examples/local/401_teardown.sh | 13 +++++++------ 13 files changed, 42 insertions(+), 40 deletions(-) mode change 100644 => 100755 examples/local/306_down_shard_0.sh diff --git a/examples/local/101_initial_cluster.sh b/examples/local/101_initial_cluster.sh index 921afde70fb..a3f9793f290 100755 --- a/examples/local/101_initial_cluster.sh +++ b/examples/local/101_initial_cluster.sh @@ -19,20 +19,21 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") # start topo server if [ "${TOPO}" = "etcd2" ]; then - CELL=zone1 $script_root/etcd-up.sh + CELL=zone1 "$script_root/etcd-up.sh" else - CELL=zone1 $script_root/zk-up.sh + CELL=zone1 "$script_root/zk-up.sh" fi # start vtctld -CELL=zone1 $script_root/vtctld-up.sh +CELL=zone1 "$script_root/vtctld-up.sh" # start vttablets for keyspace commerce -CELL=zone1 KEYSPACE=commerce UID_BASE=100 $script_root/vttablet-up.sh +CELL=zone1 KEYSPACE=commerce UID_BASE=100 "$script_root/vttablet-up.sh" sleep 15 # set one of the replicas to master @@ -45,6 +46,6 @@ sleep 15 ./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_initial.json commerce # start vtgate -CELL=zone1 $script_root/vtgate-up.sh +CELL=zone1 "$script_root/vtgate-up.sh" disown -a diff --git a/examples/local/202_customer_tablets.sh b/examples/local/202_customer_tablets.sh index 75deccbacb6..05cc4ff9e6e 100755 --- a/examples/local/202_customer_tablets.sh +++ b/examples/local/202_customer_tablets.sh @@ -20,9 +20,10 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") -CELL=zone1 KEYSPACE=customer UID_BASE=200 $script_root/vttablet-up.sh +CELL=zone1 KEYSPACE=customer UID_BASE=200 "$script_root/vttablet-up.sh" sleep 15 ./lvtctl.sh InitShardMaster -force customer/0 zone1-200 ./lvtctl.sh CopySchemaShard -tables customer,corder commerce/0 customer/0 diff --git a/examples/local/203_vertical_split.sh b/examples/local/203_vertical_split.sh index 7a88c0d4860..d5a67d6c8f7 100755 --- a/examples/local/203_vertical_split.sh +++ b/examples/local/203_vertical_split.sh @@ -19,13 +19,18 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` -source $script_root/env.sh +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") -$VTROOT/bin/vtworker \ +# shellcheck source=./env.sh +# shellcheck disable=SC1091 +source "$script_root/env.sh" + +# shellcheck disable=SC2086 +"$VTROOT"/bin/vtworker \ $TOPOLOGY_FLAGS \ -cell zone1 \ - -log_dir $VTDATAROOT/tmp \ + -log_dir "$VTDATAROOT"/tmp \ -alsologtostderr \ -use_v3_resharding_mode \ VerticalSplitClone -min_healthy_rdonly_tablets=1 -tables=customer,corder customer/0 diff --git a/examples/local/204_vertical_migrate_replicas.sh b/examples/local/204_vertical_migrate_replicas.sh index 567dca6f508..3bb6c6dccbf 100755 --- a/examples/local/204_vertical_migrate_replicas.sh +++ b/examples/local/204_vertical_migrate_replicas.sh @@ -19,8 +19,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh MigrateServedFrom customer/0 rdonly ./lvtctl.sh MigrateServedFrom customer/0 replica diff --git a/examples/local/205_vertical_migrate_master.sh b/examples/local/205_vertical_migrate_master.sh index 560564e5099..1b42b0cab0d 100755 --- a/examples/local/205_vertical_migrate_master.sh +++ b/examples/local/205_vertical_migrate_master.sh @@ -19,8 +19,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh MigrateServedFrom customer/0 master disown -a diff --git a/examples/local/206_clean_commerce.sh b/examples/local/206_clean_commerce.sh index eeef5d2c04f..2aa66b2f91d 100755 --- a/examples/local/206_clean_commerce.sh +++ b/examples/local/206_clean_commerce.sh @@ -19,8 +19,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh ApplySchema -sql-file drop_commerce_tables.sql commerce ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 rdonly ./lvtctl.sh SetShardTabletControl -blacklisted_tables=customer,corder -remove commerce/0 replica diff --git a/examples/local/301_customer_sharded.sh b/examples/local/301_customer_sharded.sh index c7f766810d6..2932f5d8776 100755 --- a/examples/local/301_customer_sharded.sh +++ b/examples/local/301_customer_sharded.sh @@ -22,8 +22,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh ApplySchema -sql-file create_commerce_seq.sql commerce ./lvtctl.sh ApplyVSchema -vschema_file vschema_commerce_seq.json commerce ./lvtctl.sh ApplySchema -sql-file create_customer_sharded.sql customer diff --git a/examples/local/302_new_shards.sh b/examples/local/302_new_shards.sh index 30c1cb6b507..e70c211b847 100755 --- a/examples/local/302_new_shards.sh +++ b/examples/local/302_new_shards.sh @@ -19,10 +19,11 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") -SHARD=-80 CELL=zone1 KEYSPACE=customer UID_BASE=300 $script_root/vttablet-up.sh -SHARD=80- CELL=zone1 KEYSPACE=customer UID_BASE=400 $script_root/vttablet-up.sh +SHARD=-80 CELL=zone1 KEYSPACE=customer UID_BASE=300 "$script_root/vttablet-up.sh" +SHARD=80- CELL=zone1 KEYSPACE=customer UID_BASE=400 "$script_root/vttablet-up.sh" sleep 15 ./lvtctl.sh InitShardMaster -force customer/-80 zone1-300 ./lvtctl.sh InitShardMaster -force customer/80- zone1-400 diff --git a/examples/local/303_horizontal_split.sh b/examples/local/303_horizontal_split.sh index 6851f6c378d..9fb583d9dc1 100755 --- a/examples/local/303_horizontal_split.sh +++ b/examples/local/303_horizontal_split.sh @@ -19,13 +19,18 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` -source $script_root/env.sh +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") -$VTROOT/bin/vtworker \ +# shellcheck source=./env.sh +# shellcheck disable=SC1091 +source "${script_root}/env.sh" + +# shellcheck disable=SC2086 +"$VTROOT"/bin/vtworker \ $TOPOLOGY_FLAGS \ -cell zone1 \ - -log_dir $VTDATAROOT/tmp \ + -log_dir "$VTDATAROOT"/tmp \ -alsologtostderr \ -use_v3_resharding_mode \ SplitClone -min_healthy_rdonly_tablets=1 customer/0 diff --git a/examples/local/304_migrate_replicas.sh b/examples/local/304_migrate_replicas.sh index e4c154dbea9..39c86fe60e2 100755 --- a/examples/local/304_migrate_replicas.sh +++ b/examples/local/304_migrate_replicas.sh @@ -18,8 +18,6 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh MigrateServedTypes customer/0 rdonly ./lvtctl.sh MigrateServedTypes customer/0 replica diff --git a/examples/local/305_migrate_master.sh b/examples/local/305_migrate_master.sh index 0e52217d752..f5f1170ebc0 100755 --- a/examples/local/305_migrate_master.sh +++ b/examples/local/305_migrate_master.sh @@ -18,10 +18,7 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` - ./lvtctl.sh MigrateServedTypes customer/0 master - # data has been copied over to shards, and databases for the new shards are now available disown -a diff --git a/examples/local/306_down_shard_0.sh b/examples/local/306_down_shard_0.sh old mode 100644 new mode 100755 index 1fb25a8c8d5..530746846d0 --- a/examples/local/306_down_shard_0.sh +++ b/examples/local/306_down_shard_0.sh @@ -18,8 +18,9 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") -CELL=zone1 UID_BASE=100 $script_root/vttablet-down.sh +CELL=zone1 UID_BASE=100 "$script_root/vttablet-down.sh" disown -a diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh index ddc34f3f9c1..f314b6a6073 100755 --- a/examples/local/401_teardown.sh +++ b/examples/local/401_teardown.sh @@ -21,18 +21,19 @@ set -e -script_root=`dirname "${BASH_SOURCE}"` +# shellcheck disable=SC2128 +script_root=$(dirname "${BASH_SOURCE}") ./vtgate-down.sh -CELL=zone1 UID_BASE=200 $script_root/vttablet-down.sh -CELL=zone1 UID_BASE=300 $script_root/vttablet-down.sh -CELL=zone1 UID_BASE=400 $script_root/vttablet-down.sh +CELL=zone1 UID_BASE=200 "$script_root/vttablet-down.sh" +CELL=zone1 UID_BASE=300 "$script_root/vttablet-down.sh" +CELL=zone1 UID_BASE=400 "$script_root/vttablet-down.sh" ./vtctld-down.sh if [ "${TOPO}" = "etcd2" ]; then - CELL=zone1 $script_root/etcd-down.sh + CELL=zone1 "$script_root/etcd-down.sh" else - CELL=zone1 $script_root/zk-down.sh + CELL=zone1 "$script_root/zk-down.sh" fi disown -a From b3a9459de226cbfdd84ca123f1e55de115572b0d Mon Sep 17 00:00:00 2001 From: Rafael Chacon Date: Fri, 7 Dec 2018 14:52:35 -0800 Subject: [PATCH 27/35] Calls Unlock explicitly after potetiantly losing it Signed-off-by: Rafael Chacon --- go/vt/topo/consultopo/election.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/go/vt/topo/consultopo/election.go b/go/vt/topo/consultopo/election.go index c36c9d8d6af..5fa9f5eff22 100644 --- a/go/vt/topo/consultopo/election.go +++ b/go/vt/topo/consultopo/election.go @@ -94,8 +94,11 @@ func (mp *consulMasterParticipation) WaitForMastership() (context.Context, error go func() { select { case <-lost: - // We lost the lock, nothing to do but lockCancel(). lockCancel() + // We could have lost the lock. Per consul API, explicitly call Unlock to make sure that session will not be renewed. + if err := l.Unlock(); err != nil { + log.Errorf("master election(%v) Unlock failed: %v", mp.name, err) + } case <-mp.stop: // Stop was called. We stop the context first, // so the running process is not thinking it From dc2cbe0e6a47486d51535f0d1508c598bd0b1740 Mon Sep 17 00:00:00 2001 From: Rafael Chacon Date: Fri, 7 Dec 2018 15:34:14 -0800 Subject: [PATCH 28/35] Fix typo in comment Signed-off-by: Rafael Chacon --- go/vt/topo/consultopo/election.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/topo/consultopo/election.go b/go/vt/topo/consultopo/election.go index 5fa9f5eff22..bacbbac8d58 100644 --- a/go/vt/topo/consultopo/election.go +++ b/go/vt/topo/consultopo/election.go @@ -89,7 +89,7 @@ func (mp *consulMasterParticipation) WaitForMastership() (context.Context, error return nil, err } - // We have the lock, keep mastership until we loose it. + // We have the lock, keep mastership until we lose it. lockCtx, lockCancel := context.WithCancel(context.Background()) go func() { select { From 74c80ddaec3d1a4d21a756465aa58fdf273ecf5a Mon Sep 17 00:00:00 2001 From: Michael Hebelka Date: Fri, 7 Dec 2018 18:26:09 -0500 Subject: [PATCH 29/35] Add scope to oauth token for gcs backup storage client Signed-off-by: Michael Hebelka --- go/vt/mysqlctl/gcsbackupstorage/gcs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/vt/mysqlctl/gcsbackupstorage/gcs.go b/go/vt/mysqlctl/gcsbackupstorage/gcs.go index b6fbcfdc69c..54bea5aa3af 100644 --- a/go/vt/mysqlctl/gcsbackupstorage/gcs.go +++ b/go/vt/mysqlctl/gcsbackupstorage/gcs.go @@ -230,7 +230,7 @@ func (bs *GCSBackupStorage) client(ctx context.Context) (*storage.Client, error) // the creation context, so we create a new one, but // keep the span information. ctx = trace.CopySpan(context.Background(), ctx) - authClient, err := google.DefaultClient(ctx) + authClient, err := google.DefaultClient(ctx, storage.ScopeFullControl) if err != nil { return nil, err } From 841e07c71027b457e6c15d718f5d1163bff5bf72 Mon Sep 17 00:00:00 2001 From: Rafael Chacon Date: Sat, 8 Dec 2018 12:08:07 -0800 Subject: [PATCH 30/35] Adds removed vschema Signed-off-by: Rafael Chacon --- examples/local/vschema.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 examples/local/vschema.json diff --git a/examples/local/vschema.json b/examples/local/vschema.json new file mode 100644 index 00000000000..17e5dedf0c8 --- /dev/null +++ b/examples/local/vschema.json @@ -0,0 +1,18 @@ +{ + "sharded": true, + "vindexes": { + "hash": { + "type": "hash" + } + }, + "tables": { + "messages": { + "column_vindexes": [ + { + "column": "page", + "name": "hash" + } + ] + } + } +} From 73b3e4a544d1463fbfcf0b6e73c1504064912bab Mon Sep 17 00:00:00 2001 From: Sugu Sougoumarane Date: Sat, 8 Dec 2018 22:20:38 -0800 Subject: [PATCH 31/35] helm: add missing default Signed-off-by: Sugu Sougoumarane --- helm/vitess/templates/_vttablet.tpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helm/vitess/templates/_vttablet.tpl b/helm/vitess/templates/_vttablet.tpl index 66e3867a865..c2b85187a4d 100644 --- a/helm/vitess/templates/_vttablet.tpl +++ b/helm/vitess/templates/_vttablet.tpl @@ -441,7 +441,7 @@ spec: - name: vt mountPath: /vt {{ include "user-config-volumeMount" (.extraMyCnf | default $defaultVttablet.extraMyCnf) | indent 4 }} -{{ include "user-secret-volumeMounts" (.secrets | $defaultVttablet.secrets) | indent 4 }} +{{ include "user-secret-volumeMounts" (.secrets | default $defaultVttablet.secrets) | indent 4 }} resources: {{ toYaml (.mysqlResources | default $defaultVttablet.mysqlResources) | indent 6 }} env: From c009ca7bf84992c385331442adab0cb39529449a Mon Sep 17 00:00:00 2001 From: Sugu Sougoumarane Date: Sun, 9 Dec 2018 09:46:23 -0800 Subject: [PATCH 32/35] local example: fix typos The tablet kills were inverted between 100 vs 200 Also added a delete of all data on teardown Signed-off-by: Sugu Sougoumarane --- examples/local/306_down_shard_0.sh | 2 +- examples/local/401_teardown.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/local/306_down_shard_0.sh b/examples/local/306_down_shard_0.sh index 530746846d0..7b9f589d635 100755 --- a/examples/local/306_down_shard_0.sh +++ b/examples/local/306_down_shard_0.sh @@ -21,6 +21,6 @@ set -e # shellcheck disable=SC2128 script_root=$(dirname "${BASH_SOURCE}") -CELL=zone1 UID_BASE=100 "$script_root/vttablet-down.sh" +CELL=zone1 UID_BASE=200 "$script_root/vttablet-down.sh" disown -a diff --git a/examples/local/401_teardown.sh b/examples/local/401_teardown.sh index f314b6a6073..90b781fdd0e 100755 --- a/examples/local/401_teardown.sh +++ b/examples/local/401_teardown.sh @@ -25,7 +25,7 @@ set -e script_root=$(dirname "${BASH_SOURCE}") ./vtgate-down.sh -CELL=zone1 UID_BASE=200 "$script_root/vttablet-down.sh" +CELL=zone1 UID_BASE=100 "$script_root/vttablet-down.sh" CELL=zone1 UID_BASE=300 "$script_root/vttablet-down.sh" CELL=zone1 UID_BASE=400 "$script_root/vttablet-down.sh" ./vtctld-down.sh @@ -36,4 +36,6 @@ else CELL=zone1 "$script_root/zk-down.sh" fi +rm -r $VTDATAROOT/* + disown -a From 7ec016d8c784c2e1e59c9e9f5a50ae662b5604aa Mon Sep 17 00:00:00 2001 From: serguei Date: Sun, 9 Dec 2018 15:01:16 -0800 Subject: [PATCH 33/35] Allow subclasses of GrpcClientFactory to modify channel builder Signed-off-by: Serguei Mourachov --- .../vitess/client/grpc/GrpcClientFactory.java | 32 ++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java index 10b3ee63178..928c29334ee 100644 --- a/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java +++ b/java/grpc-client/src/main/java/io/vitess/client/grpc/GrpcClientFactory.java @@ -88,9 +88,9 @@ public GrpcClientFactory setNameResolverFactory(NameResolver.Factory value) { */ @Override public RpcClient create(Context ctx, String target) { - NettyChannelBuilder channel = NettyChannelBuilder.forTarget(target) - .negotiationType(NegotiationType.PLAINTEXT) - .intercept(new RetryingInterceptor(config)); + NettyChannelBuilder channel = channelBuilder(target) + .negotiationType(NegotiationType.PLAINTEXT) + .intercept(new RetryingInterceptor(config)); if (loadBalancerFactory != null) { channel.loadBalancerFactory(loadBalancerFactory); } @@ -98,7 +98,29 @@ public RpcClient create(Context ctx, String target) { channel.nameResolverFactory(nameResolverFactory); } return callCredentials != null ? - new GrpcClient(channel.build(), callCredentials) : new GrpcClient(channel.build()); + new GrpcClient(channel.build(), callCredentials) : new GrpcClient(channel.build()); + } + + /** + *

This method constructs NettyChannelBuilder object that will be used to create RpcClient.

+ *

Subclasses may override this method to make adjustments to the builder

+ * for example: + * + * @Override + * protected NettyChannelBuilder channelBuilder(String target) { + * return super.channelBuilder(target) + * .eventLoopGroup(new EpollEventLoopGroup()) + * .withOption(EpollChannelOption.TCP_USER_TIMEOUT,30); + * } + * + * + * + * @param target + * target is passed to NettyChannelBuilder which will resolve based on scheme, by default dns. + * @return + */ + protected NettyChannelBuilder channelBuilder(String target){ + return NettyChannelBuilder.forTarget(target); } /** @@ -152,7 +174,7 @@ public RpcClient createTls(Context ctx, String target, TlsOptions tlsOptions) { } return new GrpcClient( - NettyChannelBuilder.forTarget(target).negotiationType(NegotiationType.TLS).sslContext(sslContext).intercept(new RetryingInterceptor(config)).build()); + channelBuilder(target).negotiationType(NegotiationType.TLS).sslContext(sslContext).intercept(new RetryingInterceptor(config)).build()); } /** From e5081301e8a0497e214b14fccc7daffab10cbe79 Mon Sep 17 00:00:00 2001 From: Michael Pawliszyn Date: Wed, 12 Dec 2018 11:32:29 -0500 Subject: [PATCH 34/35] Parents the parent pom of the standard sonatype oss pom for better defaults. Signed-off-by: Michael Pawliszyn --- java/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/java/pom.xml b/java/pom.xml index 392b5c557dc..9ce2e89cb62 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -2,6 +2,13 @@ 4.0.0 + + + org.sonatype.oss + oss-parent + 7 + + io.vitess vitess-parent 3.0.0-SNAPSHOT From 8d93fe96db139dcd1df34ab0a6c7f495e3ccdf4b Mon Sep 17 00:00:00 2001 From: Michael Pawliszyn Date: Thu, 13 Dec 2018 10:50:58 -0500 Subject: [PATCH 35/35] java: Bump SNAPSHOT version to 3.1.0-SNAPSHOT after Vitess release 3.0. Signed-off-by: Michael Pawliszyn --- java/client/pom.xml | 2 +- java/example/pom.xml | 2 +- java/grpc-client/pom.xml | 2 +- java/hadoop/pom.xml | 2 +- java/jdbc/pom.xml | 2 +- java/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/client/pom.xml b/java/client/pom.xml index e11038f4f3d..0cc28fb6001 100644 --- a/java/client/pom.xml +++ b/java/client/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT vitess-client diff --git a/java/example/pom.xml b/java/example/pom.xml index 57fbc387128..86a5bf887de 100644 --- a/java/example/pom.xml +++ b/java/example/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT vitess-example diff --git a/java/grpc-client/pom.xml b/java/grpc-client/pom.xml index 14faee962c3..f40d04d8a17 100644 --- a/java/grpc-client/pom.xml +++ b/java/grpc-client/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT vitess-grpc-client diff --git a/java/hadoop/pom.xml b/java/hadoop/pom.xml index 5be7992b642..c26e9cb0e3a 100644 --- a/java/hadoop/pom.xml +++ b/java/hadoop/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT vitess-hadoop diff --git a/java/jdbc/pom.xml b/java/jdbc/pom.xml index 9019aaa72fe..b2585ea79ee 100644 --- a/java/jdbc/pom.xml +++ b/java/jdbc/pom.xml @@ -5,7 +5,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT vitess-jdbc diff --git a/java/pom.xml b/java/pom.xml index 9ce2e89cb62..e5b2fbd7b45 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -11,7 +11,7 @@ io.vitess vitess-parent - 3.0.0-SNAPSHOT + 3.1.0-SNAPSHOT pom Vitess Java Client libraries and Hadoop support [Parent]