From 493ede97f7c1e3853b42fc92abf3e2a7c55b826f Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Sun, 8 Dec 2024 22:21:33 +0800 Subject: [PATCH 01/13] fix: add target db pattern default value, validate, and source/target db name generate function --- go/vt/vtgate/branch/branch_meta.go | 7 ++- go/vt/vtgate/branch/branch_service.go | 7 ++- go/vt/vtgate/branch/target_mysql_service.go | 58 +++++++++++++++++-- .../branch/target_mysql_service_test.go | 51 ++++++++++++++++ go/vt/vtgate/engine/branch_primitive.go | 12 ++-- 5 files changed, 123 insertions(+), 12 deletions(-) diff --git a/go/vt/vtgate/branch/branch_meta.go b/go/vt/vtgate/branch/branch_meta.go index c2e1fa7760..d4939ac518 100644 --- a/go/vt/vtgate/branch/branch_meta.go +++ b/go/vt/vtgate/branch/branch_meta.go @@ -13,10 +13,15 @@ type BranchMeta struct { IncludeDatabases []string ExcludeDatabases []string // others - TargetDBPattern string // todo enhancement: so that we can test branch in single mysql instance + TargetDBPattern string // todo complete me Status BranchStatus } +const ( + // SourceDBNamePlaceHolder used in target db pattern + SourceDBNamePlaceHolder = "{source_db_name}" +) + type BranchStatus string const ( diff --git a/go/vt/vtgate/branch/branch_service.go b/go/vt/vtgate/branch/branch_service.go index f88c3e8af7..551e696d64 100644 --- a/go/vt/vtgate/branch/branch_service.go +++ b/go/vt/vtgate/branch/branch_service.go @@ -100,7 +100,10 @@ func (meta *BranchMeta) Validate() error { return fmt.Errorf("branch invalid Status: %s", meta.Status) } - // todo enhancement: TargetDBPattern + if err := ValidateTargetDatabasePattern(meta.TargetDBPattern); err != nil { + return fmt.Errorf("branch target db pattern %s is invalid, %v", meta.TargetDBPattern, err) + } + return nil } @@ -148,7 +151,7 @@ func (bs *BranchService) BranchCreate(branchMeta *BranchMeta) error { } if meta.Status == StatusFetched { - err := bs.targetMySQLService.ApplySnapshot(meta.Name) + err := bs.targetMySQLService.ApplySnapshot(meta.Name, meta.TargetDBPattern) if err != nil { return err } diff --git a/go/vt/vtgate/branch/target_mysql_service.go b/go/vt/vtgate/branch/target_mysql_service.go index 75df0a0c6c..83b58b0b0f 100644 --- a/go/vt/vtgate/branch/target_mysql_service.go +++ b/go/vt/vtgate/branch/target_mysql_service.go @@ -53,7 +53,7 @@ func (t *TargetMySQLService) SelectOrInsertBranchMeta(metaToInsertIfNotExists *B // // Returns: // - error: Returns nil on success, error otherwise -func (t *TargetMySQLService) ApplySnapshot(name string) error { +func (t *TargetMySQLService) ApplySnapshot(name, targetDBPattern string) error { failpoint.Inject(failpointkey.BranchApplySnapshotError.Name, func() { failpoint.Return(fmt.Errorf("error applying snapshot by failpoint")) }) @@ -74,7 +74,7 @@ func (t *TargetMySQLService) ApplySnapshot(name string) error { } // apply schema to target - err = t.createDatabaseAndTables(snapshot) + err = t.createDatabaseAndTables(snapshot, targetDBPattern) if err != nil { return err } @@ -82,12 +82,60 @@ func (t *TargetMySQLService) ApplySnapshot(name string) error { return nil } -/**********************************************************************************************************************/ - func (t *TargetMySQLService) GetMysqlService() *MysqlService { return t.mysqlService } +func ValidateTargetDatabasePattern(targetDatabasePattern string) error { + if strings.Count(targetDatabasePattern, SourceDBNamePlaceHolder) != 1 { + return fmt.Errorf("target database pattern must contain exactly one %s placeholder", SourceDBNamePlaceHolder) + } + return nil +} + +// GenerateTargetName generates the target database name based on the source database name +// and the target database pattern. +func GenerateTargetName(sourceDBName string, targetDatabasePattern string) string { + // Replace the {source_db_name} placeholder with the actual source database name + targetDBName := strings.ReplaceAll(targetDatabasePattern, "{source_db_name}", sourceDBName) + return targetDBName +} + +// GenerateSourceName extracts the source database name from the target database name +// according to the given target database pattern. +func GenerateSourceName(targetDBName string, targetDatabasePattern string) (string, error) { + // Get the length of the source pattern + placeHolderLen := len(SourceDBNamePlaceHolder) + + // Find the index of the source pattern in the target database pattern + start := strings.Index(targetDatabasePattern, SourceDBNamePlaceHolder) + if start == -1 { + return "", fmt.Errorf("target database pattern does not contain {source_db_name}") + } + + patternBeforePlaceHolder := targetDatabasePattern[:start] + patternAfterPlaceHolder := targetDatabasePattern[start+placeHolderLen:] + + // Verify that the target database name matches the expected length for the pattern + if len(targetDBName)-len(patternAfterPlaceHolder) < 0 || len(targetDBName)-len(patternAfterPlaceHolder) <= len(patternBeforePlaceHolder) { + return "", fmt.Errorf("target database name is too short for given pattern") + } + + // Check the beginning and end of the target name against the expected pattern + before := targetDBName[:len(patternBeforePlaceHolder)] + after := targetDBName[len(targetDBName)-len(patternAfterPlaceHolder):] + + if before != patternBeforePlaceHolder || after != patternAfterPlaceHolder { + return "", fmt.Errorf("target database name does not match the expected pattern") + } + + sourceDBName := targetDBName[len(patternBeforePlaceHolder) : len(targetDBName)-len(patternAfterPlaceHolder)] + + return sourceDBName, nil +} + +/**********************************************************************************************************************/ + func (t *TargetMySQLService) getSnapshot(name string) (*BranchSchema, error) { selectSnapshotSQL := GetSelectSnapshotSQL(name) // mysql Query will stream the result, so we don't need to worry if the data is too large to transfer. @@ -258,7 +306,7 @@ func (t *TargetMySQLService) getAllDatabases() ([]string, error) { return databases, nil } -func (t *TargetMySQLService) createDatabaseAndTables(branchSchema *BranchSchema) error { +func (t *TargetMySQLService) createDatabaseAndTables(branchSchema *BranchSchema, targetDBPattern string) error { for database, tables := range branchSchema.branchSchema { // create database _, err := t.mysqlService.Exec("", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", database)) diff --git a/go/vt/vtgate/branch/target_mysql_service_test.go b/go/vt/vtgate/branch/target_mysql_service_test.go index 8dccda7f8a..66bca6f123 100644 --- a/go/vt/vtgate/branch/target_mysql_service_test.go +++ b/go/vt/vtgate/branch/target_mysql_service_test.go @@ -149,3 +149,54 @@ func TestAddIfNotExistsForCreateTableSQL(t *testing.T) { }) } } + +func TestGenerateTargetName(t *testing.T) { + tests := []struct { + sourceDBName string + targetDatabasePattern string + expected string + }{ + {"example_db", "target_{source_db_name}_db", "target_example_db_db"}, + {"dev_db", "dev_{source_db_name}_database", "dev_dev_db_database"}, + {"prod", "{source_db_name}_production", "prod_production"}, + } + + for _, test := range tests { + result := GenerateTargetName(test.sourceDBName, test.targetDatabasePattern) + if result != test.expected { + t.Errorf("GenerateTargetName(%q, %q) = %q; expected %q", test.sourceDBName, test.targetDatabasePattern, result, test.expected) + } + } +} + +func TestGenerateSourceName(t *testing.T) { + tests := []struct { + targetDBName string + targetDatabasePattern string + expected string + expectError bool + }{ + {"target_example_db_db", "target_{source_db_name}_db", "example_db", false}, + {"dev_dev_db_database", "dev_{source_db_name}_database", "dev_db", false}, + {"prod_production", "{source_db_name}_production", "prod", false}, + {"invalid_name", "target_{source_db_name}_db", "", true}, // Should return an error + {"target_wrong_db", "other_{source_db_name}_db", "", true}, // Should return an error + {"target_source_db", "target_{source_db_name}_db", "source", false}, + {"target_db", "target_{source_db_name}_db", "", true}, + } + + for _, test := range tests { + result, err := GenerateSourceName(test.targetDBName, test.targetDatabasePattern) + if test.expectError { + if err == nil { + t.Errorf("Expected error for GenerateSourceName(%q, %q), but got none", test.targetDBName, test.targetDatabasePattern) + } + } else { + if err != nil { + t.Errorf("Error for GenerateSourceName(%q, %q): %v", test.targetDBName, test.targetDatabasePattern, err) + } else if result != test.expected { + t.Errorf("GenerateSourceName(%q, %q) = %q; expected %q", test.targetDBName, test.targetDatabasePattern, result, test.expected) + } + } + } +} diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index 2656b8b05f..06a4f5128e 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -327,6 +327,8 @@ func (bcp *BranchCreateParams) setValues(params map[string]string) error { if v, ok := params[BranchCreateParamsTargetDBPattern]; ok { bcp.TargetDBPattern = v delete(params, BranchCreateParamsTargetDBPattern) + } else { + bcp.TargetDBPattern = branch.SourceDBNamePlaceHolder } return checkRedundantParams(params) @@ -353,11 +355,14 @@ func (bcp *BranchCreateParams) validate() error { return fmt.Errorf("branch create: include databases is required") } + if err := branch.ValidateTargetDatabasePattern(bcp.TargetDBPattern); err != nil { + return fmt.Errorf("branch create: target db pattern %s is invalid, %v", bcp.TargetDBPattern, err) + } + return nil } -// todo complete me -// todo output type +// todo enhancement: output type func (bdp *BranchDiffParams) setValues(params map[string]string) error { if v, ok := params[BranchDiffParamsCompareObjects]; ok { bdp.CompareObjects = v @@ -369,8 +374,7 @@ func (bdp *BranchDiffParams) setValues(params map[string]string) error { return checkRedundantParams(params) } -// todo complete me -// todo output type +// todo enhancement: output type func (bdp *BranchDiffParams) validate() error { switch branch.BranchDiffObjectsFlag(bdp.CompareObjects) { case branch.FromSourceToTarget, branch.FromTargetToSource, From 8239c230cbc67a32f37421a683b9c16025ead5ea Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 9 Dec 2024 15:18:52 +0800 Subject: [PATCH 02/13] feat: support target db pattern --- go/vt/vtgate/branch/branch_service.go | 48 ++++++-- go/vt/vtgate/branch/branch_service_test.go | 109 ++++++++++++++++++ go/vt/vtgate/branch/target_mysql_service.go | 7 +- .../branch/target_mysql_service_test.go | 21 ++-- 4 files changed, 165 insertions(+), 20 deletions(-) diff --git a/go/vt/vtgate/branch/branch_service.go b/go/vt/vtgate/branch/branch_service.go index 551e696d64..51dada0a44 100644 --- a/go/vt/vtgate/branch/branch_service.go +++ b/go/vt/vtgate/branch/branch_service.go @@ -187,7 +187,7 @@ func (bs *BranchService) BranchCreate(branchMeta *BranchMeta) error { // - *BranchDiff: Contains the calculated schema differences // - error: Returns nil on success, error on invalid flag or retrieval failure // todo enhancement: filter schemas about table gc and online DDL shadow tables -func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDatabases []string, branchDiffObjectsFlag BranchDiffObjectsFlag, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, branchDiffObjectsFlag BranchDiffObjectsFlag, hints *schemadiff.DiffHints) (*BranchDiff, error) { switch branchDiffObjectsFlag { case FromSourceToTarget, FromTargetToSource: // get source schema from source mysql @@ -200,6 +200,12 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba if err != nil { return nil, err } + // modify target schema db name to source db name + targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) + if err != nil { + return nil, err + } + // return diff if branchDiffObjectsFlag == FromSourceToTarget { return getBranchSchemaDiff(sourceSchema, targetSchema, hints) @@ -209,6 +215,11 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba case FromTargetToSnapshot, FromSnapshotToTarget: // get target schema from target mysql targetSchema, err := bs.targetMySQLService.GetBranchSchema(includeDatabases, excludeDatabases) + // modify target schema db name to source db name + targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) + if err != nil { + return nil, err + } if err != nil { return nil, err } @@ -267,7 +278,7 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba // Returns: // - BranchDiff: The calculated DDL operations required for the merge-back. // - error: An error if any step of the process fails. -func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus, includeDatabases, excludeDatabases []string, mergeOption MergeBackOption, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus, includeDatabases, excludeDatabases []string, targetDBPattern string, mergeOption MergeBackOption, hints *schemadiff.DiffHints) (*BranchDiff, error) { if mergeOption != MergeOverride && mergeOption != MergeDiff { return nil, fmt.Errorf("%v is invalid merge option, should be one of %v or %v", mergeOption, MergeOverride, MergeDiff) } @@ -292,12 +303,12 @@ func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus // calculate ddl based on merge option ddls := &BranchDiff{} if mergeOption == MergeOverride { - ddls, err = bs.getMergeBackOverrideDDLs(name, includeDatabases, excludeDatabases, hints) + ddls, err = bs.getMergeBackOverrideDDLs(name, includeDatabases, excludeDatabases, targetDBPattern, hints) if err != nil { return nil, err } } else if mergeOption == MergeDiff { - ddls, err = bs.getMergeBackMergeDiffDDLs(name, includeDatabases, excludeDatabases, hints) + ddls, err = bs.getMergeBackMergeDiffDDLs(name, includeDatabases, excludeDatabases, targetDBPattern, hints) if err != nil { return nil, err } @@ -371,6 +382,23 @@ func (t *TargetMySQLService) BranchCleanUp(name string) error { /**********************************************************************************************************************/ +func modifyBranchSchemaDBNameToSourceDBName(branchSchema *BranchSchema, targetDBNamePattern string) (*BranchSchema, error) { + if targetDBNamePattern == SourceDBNamePlaceHolder { + return branchSchema, nil + } + rst := &BranchSchema{ + branchSchema: make(map[string]map[string]string), + } + for targetDBName, dbSchema := range branchSchema.branchSchema { + sourceDBName, err := GenerateSourceName(targetDBName, targetDBNamePattern) + if err != nil { + return nil, err + } + rst.branchSchema[sourceDBName] = dbSchema + } + return rst, nil +} + func statusIsOneOf(status BranchStatus, statuses []BranchStatus) bool { for _, s := range statuses { if status == s { @@ -419,11 +447,11 @@ func (bs *BranchService) executeMergeBackDDLOneByOne(name string) error { return nil } -func (bs *BranchService) getMergeBackOverrideDDLs(name string, includeDatabases, excludeDatabases []string, hints *schemadiff.DiffHints) (*BranchDiff, error) { - return bs.BranchDiff(name, includeDatabases, excludeDatabases, FromSourceToTarget, hints) +func (bs *BranchService) getMergeBackOverrideDDLs(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, hints *schemadiff.DiffHints) (*BranchDiff, error) { + return bs.BranchDiff(name, includeDatabases, excludeDatabases, targetDBPattern, FromSourceToTarget, hints) } -func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases, excludeDatabases []string, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, hints *schemadiff.DiffHints) (*BranchDiff, error) { sourceSchema, err := bs.sourceMySQLService.GetBranchSchema(includeDatabases, excludeDatabases) if err != nil { return nil, err @@ -432,6 +460,12 @@ func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases if err != nil { return nil, err } + // modify target schema db name to source db name + targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) + if err != nil { + return nil, err + } + snapshot, err := bs.targetMySQLService.getSnapshot(name) if err != nil { return nil, err diff --git a/go/vt/vtgate/branch/branch_service_test.go b/go/vt/vtgate/branch/branch_service_test.go index 22f79080ac..37a65a7766 100644 --- a/go/vt/vtgate/branch/branch_service_test.go +++ b/go/vt/vtgate/branch/branch_service_test.go @@ -1,6 +1,7 @@ package branch import ( + "fmt" "github.com/stretchr/testify/assert" "sort" "testing" @@ -348,3 +349,111 @@ func compareBranchDiff(t *testing.T, want, got *BranchDiff) { } } } + +func TestModifyBranchSchemaDBNameToSourceDBName(t *testing.T) { + tests := []struct { + name string + input *BranchSchema + pattern string + expected *BranchSchema + expectError bool + }{ + { + name: "successful modification", + input: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, + }, + }, + pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), + expected: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "example": {"table1": "CREATE TABLE table1 (...)"}, + }, + }, + expectError: false, + }, + { + name: "successful modification2", + input: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, + "target_example2_db": {"table2": "CREATE TABLE table2 (...)"}, + }, + }, + pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), + expected: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "example": {"table1": "CREATE TABLE table1 (...)"}, + "example2": {"table2": "CREATE TABLE table2 (...)"}, + }, + }, + expectError: false, + }, + { + name: "conflict due to existing source name", + input: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, + "example": {"table2": "CREATE TABLE table2 (...)"}, + }, + }, + pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), + expectError: true, + }, + { + name: "no matching pattern", + input: &BranchSchema{ + branchSchema: map[string]map[string]string{ + "wrong_example_db": {"table1": "CREATE TABLE table1 (...)"}, + }, + }, + pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), + expectError: true, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + rst, err := modifyBranchSchemaDBNameToSourceDBName(test.input, test.pattern) + if test.expectError { + if err == nil { + t.Errorf("Expected error, but got none") + } + return + } + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + + if !isNestedMapEqual(rst.branchSchema, test.expected.branchSchema) { + t.Errorf("Expected branchSchema %v, but got %v", test.expected.branchSchema, test.input.branchSchema) + } + }) + } +} + +func isNestedMapEqual(a, b map[string]map[string]string) bool { + if len(a) != len(b) { + return false + } + for k, v := range a { + bv, exists := b[k] + if !exists || !isMapEqual(v, bv) { + return false + } + } + return true +} + +func isMapEqual(a, b map[string]string) bool { + if len(a) != len(b) { + return false + } + for k, v := range a { + if b[k] != v { + return false + } + } + return true +} diff --git a/go/vt/vtgate/branch/target_mysql_service.go b/go/vt/vtgate/branch/target_mysql_service.go index 83b58b0b0f..9fbf40bb40 100644 --- a/go/vt/vtgate/branch/target_mysql_service.go +++ b/go/vt/vtgate/branch/target_mysql_service.go @@ -97,7 +97,7 @@ func ValidateTargetDatabasePattern(targetDatabasePattern string) error { // and the target database pattern. func GenerateTargetName(sourceDBName string, targetDatabasePattern string) string { // Replace the {source_db_name} placeholder with the actual source database name - targetDBName := strings.ReplaceAll(targetDatabasePattern, "{source_db_name}", sourceDBName) + targetDBName := strings.ReplaceAll(targetDatabasePattern, SourceDBNamePlaceHolder, sourceDBName) return targetDBName } @@ -309,14 +309,15 @@ func (t *TargetMySQLService) getAllDatabases() ([]string, error) { func (t *TargetMySQLService) createDatabaseAndTables(branchSchema *BranchSchema, targetDBPattern string) error { for database, tables := range branchSchema.branchSchema { // create database - _, err := t.mysqlService.Exec("", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", database)) + targetDBName := GenerateTargetName(database, targetDBPattern) + _, err := t.mysqlService.Exec("", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", targetDBName)) if err != nil { return fmt.Errorf("failed to create database '%s': %v", database, err) } // create tables createTableStmts := addIfNotExistsForCreateTableSQL(tables) - err = t.createTables(database, createTableStmts) + err = t.createTables(targetDBName, createTableStmts) if err != nil { return err } diff --git a/go/vt/vtgate/branch/target_mysql_service_test.go b/go/vt/vtgate/branch/target_mysql_service_test.go index 66bca6f123..e409adf1e5 100644 --- a/go/vt/vtgate/branch/target_mysql_service_test.go +++ b/go/vt/vtgate/branch/target_mysql_service_test.go @@ -156,9 +156,10 @@ func TestGenerateTargetName(t *testing.T) { targetDatabasePattern string expected string }{ - {"example_db", "target_{source_db_name}_db", "target_example_db_db"}, - {"dev_db", "dev_{source_db_name}_database", "dev_dev_db_database"}, - {"prod", "{source_db_name}_production", "prod_production"}, + {"example_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "target_example_db_db"}, + {"dev_db", fmt.Sprintf("dev_%s_database", SourceDBNamePlaceHolder), "dev_dev_db_database"}, + {"prod", fmt.Sprintf("%s_production", SourceDBNamePlaceHolder), "prod_production"}, + {"test", fmt.Sprintf("%s", SourceDBNamePlaceHolder), "test"}, } for _, test := range tests { @@ -176,13 +177,13 @@ func TestGenerateSourceName(t *testing.T) { expected string expectError bool }{ - {"target_example_db_db", "target_{source_db_name}_db", "example_db", false}, - {"dev_dev_db_database", "dev_{source_db_name}_database", "dev_db", false}, - {"prod_production", "{source_db_name}_production", "prod", false}, - {"invalid_name", "target_{source_db_name}_db", "", true}, // Should return an error - {"target_wrong_db", "other_{source_db_name}_db", "", true}, // Should return an error - {"target_source_db", "target_{source_db_name}_db", "source", false}, - {"target_db", "target_{source_db_name}_db", "", true}, + {"target_example_db_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "example_db", false}, + {"dev_dev_db_database", fmt.Sprintf("dev_%s_database", SourceDBNamePlaceHolder), "dev_db", false}, + {"prod_production", fmt.Sprintf("%s_production", SourceDBNamePlaceHolder), "prod", false}, + {"invalid_name", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "", true}, // Should return an error + {"target_wrong_db", fmt.Sprintf("other_%s_db", SourceDBNamePlaceHolder), "", true}, // Should return an error + {"target_source_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "source", false}, + {"target_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "", true}, } for _, test := range tests { From 2b428559321b1a359963ff5f0376a2148d8c6e95 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 9 Dec 2024 18:20:34 +0800 Subject: [PATCH 03/13] fix: remove target db pattern; fix some bugs --- endtoend/branch/branch_test.go | 4 + go/vt/sidecardb/schema/branch/branch.sql | 1 - go/vt/vtgate/branch/branch_meta.go | 19 +-- go/vt/vtgate/branch/branch_service.go | 57 ++------- go/vt/vtgate/branch/branch_service_test.go | 109 ------------------ go/vt/vtgate/branch/common_mysql_service.go | 4 + go/vt/vtgate/branch/target_mysql_service.go | 68 ++--------- .../branch/target_mysql_service_test.go | 56 --------- go/vt/vtgate/branch/test_util.go | 4 - go/vt/vtgate/engine/branch_primitive.go | 60 ++++------ go/vt/vtgate/engine/cached_size.go | 4 +- 11 files changed, 56 insertions(+), 330 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 862f304855..05e9cdfd20 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -387,3 +387,7 @@ func expectBranchStatus(t *testing.T, name, expectStatus string) { assert.Nil(t, err) assert.Equal(t, expectStatus, actualStatus) } + +// todo test database add and drop + +// todo test local diff --git a/go/vt/sidecardb/schema/branch/branch.sql b/go/vt/sidecardb/schema/branch/branch.sql index 648702fddf..fca8eb7f5f 100644 --- a/go/vt/sidecardb/schema/branch/branch.sql +++ b/go/vt/sidecardb/schema/branch/branch.sql @@ -9,7 +9,6 @@ CREATE TABLE IF NOT EXISTS mysql.branch `include_databases` varchar(256) NOT NULL, `exclude_databases` varchar(256), `status` varchar(32) NOT NULL, - `target_db_pattern` varchar(256), PRIMARY KEY (`id`), UNIQUE KEY (`name`) ) ENGINE = InnoDB; diff --git a/go/vt/vtgate/branch/branch_meta.go b/go/vt/vtgate/branch/branch_meta.go index d4939ac518..fb4754dccb 100644 --- a/go/vt/vtgate/branch/branch_meta.go +++ b/go/vt/vtgate/branch/branch_meta.go @@ -13,15 +13,9 @@ type BranchMeta struct { IncludeDatabases []string ExcludeDatabases []string // others - TargetDBPattern string // todo complete me - Status BranchStatus + Status BranchStatus } -const ( - // SourceDBNamePlaceHolder used in target db pattern - SourceDBNamePlaceHolder = "{source_db_name}" -) - type BranchStatus string const ( @@ -101,9 +95,9 @@ const ( UpsertBranchMetaSQL = ` INSERT INTO mysql.branch (Name, source_host, source_port, source_user, source_password, - include_databases, exclude_databases, Status, target_db_pattern) + include_databases, exclude_databases, Status) VALUES - ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s') + ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s') ON DUPLICATE KEY UPDATE source_host = VALUES(source_host), source_port = VALUES(source_port), @@ -111,16 +105,15 @@ const ( source_password = VALUES(source_password), include_databases = VALUES(include_databases), exclude_databases = VALUES(exclude_databases), - Status = VALUES(Status), - target_db_pattern = VALUES(target_db_pattern)` + Status = VALUES(Status)` SelectBranchMetaSQL = "select * from mysql.branch where Name='%s'" InsertBranchMetaSQL = `INSERT INTO mysql.branch (Name, source_host, source_port, source_user, source_password, - include_databases, exclude_databases, Status, target_db_pattern) + include_databases, exclude_databases, Status) VALUES - ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s')` + ('%s', '%s', %d, '%s', '%s', '%s', '%s', '%s')` UpdateBranchStatusSQL = "update mysql.branch set Status='%s' where Name='%s'" diff --git a/go/vt/vtgate/branch/branch_service.go b/go/vt/vtgate/branch/branch_service.go index 51dada0a44..22305c6b8f 100644 --- a/go/vt/vtgate/branch/branch_service.go +++ b/go/vt/vtgate/branch/branch_service.go @@ -25,7 +25,7 @@ func NewBranchService(sourceHandler *SourceMySQLService, targetHandler *TargetMy } func NewBranchMeta(name, sourceHost string, sourcePort int, sourceUser, sourcePassword, - includeDBs, excludeDBs, targetDBPattern string) (*BranchMeta, error) { + includeDBs, excludeDBs string) (*BranchMeta, error) { var includeDatabases []string if includeDBs == "" { @@ -58,7 +58,6 @@ func NewBranchMeta(name, sourceHost string, sourcePort int, sourceUser, sourcePa SourcePassword: sourcePassword, IncludeDatabases: includeDatabases, ExcludeDatabases: excludeDatabases, - TargetDBPattern: targetDBPattern, Status: StatusInit, } @@ -100,10 +99,6 @@ func (meta *BranchMeta) Validate() error { return fmt.Errorf("branch invalid Status: %s", meta.Status) } - if err := ValidateTargetDatabasePattern(meta.TargetDBPattern); err != nil { - return fmt.Errorf("branch target db pattern %s is invalid, %v", meta.TargetDBPattern, err) - } - return nil } @@ -151,7 +146,7 @@ func (bs *BranchService) BranchCreate(branchMeta *BranchMeta) error { } if meta.Status == StatusFetched { - err := bs.targetMySQLService.ApplySnapshot(meta.Name, meta.TargetDBPattern) + err := bs.targetMySQLService.ApplySnapshot(meta.Name) if err != nil { return err } @@ -187,7 +182,7 @@ func (bs *BranchService) BranchCreate(branchMeta *BranchMeta) error { // - *BranchDiff: Contains the calculated schema differences // - error: Returns nil on success, error on invalid flag or retrieval failure // todo enhancement: filter schemas about table gc and online DDL shadow tables -func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, branchDiffObjectsFlag BranchDiffObjectsFlag, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDatabases []string, branchDiffObjectsFlag BranchDiffObjectsFlag, hints *schemadiff.DiffHints) (*BranchDiff, error) { switch branchDiffObjectsFlag { case FromSourceToTarget, FromTargetToSource: // get source schema from source mysql @@ -200,12 +195,6 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba if err != nil { return nil, err } - // modify target schema db name to source db name - targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) - if err != nil { - return nil, err - } - // return diff if branchDiffObjectsFlag == FromSourceToTarget { return getBranchSchemaDiff(sourceSchema, targetSchema, hints) @@ -215,11 +204,6 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba case FromTargetToSnapshot, FromSnapshotToTarget: // get target schema from target mysql targetSchema, err := bs.targetMySQLService.GetBranchSchema(includeDatabases, excludeDatabases) - // modify target schema db name to source db name - targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) - if err != nil { - return nil, err - } if err != nil { return nil, err } @@ -278,7 +262,7 @@ func (bs *BranchService) BranchDiff(name string, includeDatabases, excludeDataba // Returns: // - BranchDiff: The calculated DDL operations required for the merge-back. // - error: An error if any step of the process fails. -func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus, includeDatabases, excludeDatabases []string, targetDBPattern string, mergeOption MergeBackOption, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus, includeDatabases, excludeDatabases []string, mergeOption MergeBackOption, hints *schemadiff.DiffHints) (*BranchDiff, error) { if mergeOption != MergeOverride && mergeOption != MergeDiff { return nil, fmt.Errorf("%v is invalid merge option, should be one of %v or %v", mergeOption, MergeOverride, MergeDiff) } @@ -303,12 +287,12 @@ func (bs *BranchService) BranchPrepareMergeBack(name string, status BranchStatus // calculate ddl based on merge option ddls := &BranchDiff{} if mergeOption == MergeOverride { - ddls, err = bs.getMergeBackOverrideDDLs(name, includeDatabases, excludeDatabases, targetDBPattern, hints) + ddls, err = bs.getMergeBackOverrideDDLs(name, includeDatabases, excludeDatabases, hints) if err != nil { return nil, err } } else if mergeOption == MergeDiff { - ddls, err = bs.getMergeBackMergeDiffDDLs(name, includeDatabases, excludeDatabases, targetDBPattern, hints) + ddls, err = bs.getMergeBackMergeDiffDDLs(name, includeDatabases, excludeDatabases, hints) if err != nil { return nil, err } @@ -382,23 +366,6 @@ func (t *TargetMySQLService) BranchCleanUp(name string) error { /**********************************************************************************************************************/ -func modifyBranchSchemaDBNameToSourceDBName(branchSchema *BranchSchema, targetDBNamePattern string) (*BranchSchema, error) { - if targetDBNamePattern == SourceDBNamePlaceHolder { - return branchSchema, nil - } - rst := &BranchSchema{ - branchSchema: make(map[string]map[string]string), - } - for targetDBName, dbSchema := range branchSchema.branchSchema { - sourceDBName, err := GenerateSourceName(targetDBName, targetDBNamePattern) - if err != nil { - return nil, err - } - rst.branchSchema[sourceDBName] = dbSchema - } - return rst, nil -} - func statusIsOneOf(status BranchStatus, statuses []BranchStatus) bool { for _, s := range statuses { if status == s { @@ -447,11 +414,11 @@ func (bs *BranchService) executeMergeBackDDLOneByOne(name string) error { return nil } -func (bs *BranchService) getMergeBackOverrideDDLs(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, hints *schemadiff.DiffHints) (*BranchDiff, error) { - return bs.BranchDiff(name, includeDatabases, excludeDatabases, targetDBPattern, FromSourceToTarget, hints) +func (bs *BranchService) getMergeBackOverrideDDLs(name string, includeDatabases, excludeDatabases []string, hints *schemadiff.DiffHints) (*BranchDiff, error) { + return bs.BranchDiff(name, includeDatabases, excludeDatabases, FromSourceToTarget, hints) } -func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases, excludeDatabases []string, targetDBPattern string, hints *schemadiff.DiffHints) (*BranchDiff, error) { +func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases, excludeDatabases []string, hints *schemadiff.DiffHints) (*BranchDiff, error) { sourceSchema, err := bs.sourceMySQLService.GetBranchSchema(includeDatabases, excludeDatabases) if err != nil { return nil, err @@ -460,12 +427,6 @@ func (bs *BranchService) getMergeBackMergeDiffDDLs(name string, includeDatabases if err != nil { return nil, err } - // modify target schema db name to source db name - targetSchema, err = modifyBranchSchemaDBNameToSourceDBName(targetSchema, targetDBPattern) - if err != nil { - return nil, err - } - snapshot, err := bs.targetMySQLService.getSnapshot(name) if err != nil { return nil, err diff --git a/go/vt/vtgate/branch/branch_service_test.go b/go/vt/vtgate/branch/branch_service_test.go index 37a65a7766..22f79080ac 100644 --- a/go/vt/vtgate/branch/branch_service_test.go +++ b/go/vt/vtgate/branch/branch_service_test.go @@ -1,7 +1,6 @@ package branch import ( - "fmt" "github.com/stretchr/testify/assert" "sort" "testing" @@ -349,111 +348,3 @@ func compareBranchDiff(t *testing.T, want, got *BranchDiff) { } } } - -func TestModifyBranchSchemaDBNameToSourceDBName(t *testing.T) { - tests := []struct { - name string - input *BranchSchema - pattern string - expected *BranchSchema - expectError bool - }{ - { - name: "successful modification", - input: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, - }, - }, - pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), - expected: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "example": {"table1": "CREATE TABLE table1 (...)"}, - }, - }, - expectError: false, - }, - { - name: "successful modification2", - input: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, - "target_example2_db": {"table2": "CREATE TABLE table2 (...)"}, - }, - }, - pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), - expected: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "example": {"table1": "CREATE TABLE table1 (...)"}, - "example2": {"table2": "CREATE TABLE table2 (...)"}, - }, - }, - expectError: false, - }, - { - name: "conflict due to existing source name", - input: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "target_example_db": {"table1": "CREATE TABLE table1 (...)"}, - "example": {"table2": "CREATE TABLE table2 (...)"}, - }, - }, - pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), - expectError: true, - }, - { - name: "no matching pattern", - input: &BranchSchema{ - branchSchema: map[string]map[string]string{ - "wrong_example_db": {"table1": "CREATE TABLE table1 (...)"}, - }, - }, - pattern: fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), - expectError: true, - }, - } - - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - rst, err := modifyBranchSchemaDBNameToSourceDBName(test.input, test.pattern) - if test.expectError { - if err == nil { - t.Errorf("Expected error, but got none") - } - return - } - if err != nil { - t.Errorf("Unexpected error: %v", err) - } - - if !isNestedMapEqual(rst.branchSchema, test.expected.branchSchema) { - t.Errorf("Expected branchSchema %v, but got %v", test.expected.branchSchema, test.input.branchSchema) - } - }) - } -} - -func isNestedMapEqual(a, b map[string]map[string]string) bool { - if len(a) != len(b) { - return false - } - for k, v := range a { - bv, exists := b[k] - if !exists || !isMapEqual(v, bv) { - return false - } - } - return true -} - -func isMapEqual(a, b map[string]string) bool { - if len(a) != len(b) { - return false - } - for k, v := range a { - if b[k] != v { - return false - } - } - return true -} diff --git a/go/vt/vtgate/branch/common_mysql_service.go b/go/vt/vtgate/branch/common_mysql_service.go index 7c37a28bc0..df6b573244 100644 --- a/go/vt/vtgate/branch/common_mysql_service.go +++ b/go/vt/vtgate/branch/common_mysql_service.go @@ -12,6 +12,10 @@ func (c *CommonMysqlService) GetBranchSchema(databasesInclude, databasesExclude if err != nil { return nil, err } + if len(tableInfos) == 0 { + return nil, fmt.Errorf("no table found") + } + return c.getBranchSchemaInBatches(tableInfos, GetBranchSchemaBatchSize) } diff --git a/go/vt/vtgate/branch/target_mysql_service.go b/go/vt/vtgate/branch/target_mysql_service.go index 9fbf40bb40..478de4a303 100644 --- a/go/vt/vtgate/branch/target_mysql_service.go +++ b/go/vt/vtgate/branch/target_mysql_service.go @@ -53,7 +53,7 @@ func (t *TargetMySQLService) SelectOrInsertBranchMeta(metaToInsertIfNotExists *B // // Returns: // - error: Returns nil on success, error otherwise -func (t *TargetMySQLService) ApplySnapshot(name, targetDBPattern string) error { +func (t *TargetMySQLService) ApplySnapshot(name string) error { failpoint.Inject(failpointkey.BranchApplySnapshotError.Name, func() { failpoint.Return(fmt.Errorf("error applying snapshot by failpoint")) }) @@ -74,7 +74,7 @@ func (t *TargetMySQLService) ApplySnapshot(name, targetDBPattern string) error { } // apply schema to target - err = t.createDatabaseAndTables(snapshot, targetDBPattern) + err = t.createDatabaseAndTables(snapshot) if err != nil { return err } @@ -86,54 +86,6 @@ func (t *TargetMySQLService) GetMysqlService() *MysqlService { return t.mysqlService } -func ValidateTargetDatabasePattern(targetDatabasePattern string) error { - if strings.Count(targetDatabasePattern, SourceDBNamePlaceHolder) != 1 { - return fmt.Errorf("target database pattern must contain exactly one %s placeholder", SourceDBNamePlaceHolder) - } - return nil -} - -// GenerateTargetName generates the target database name based on the source database name -// and the target database pattern. -func GenerateTargetName(sourceDBName string, targetDatabasePattern string) string { - // Replace the {source_db_name} placeholder with the actual source database name - targetDBName := strings.ReplaceAll(targetDatabasePattern, SourceDBNamePlaceHolder, sourceDBName) - return targetDBName -} - -// GenerateSourceName extracts the source database name from the target database name -// according to the given target database pattern. -func GenerateSourceName(targetDBName string, targetDatabasePattern string) (string, error) { - // Get the length of the source pattern - placeHolderLen := len(SourceDBNamePlaceHolder) - - // Find the index of the source pattern in the target database pattern - start := strings.Index(targetDatabasePattern, SourceDBNamePlaceHolder) - if start == -1 { - return "", fmt.Errorf("target database pattern does not contain {source_db_name}") - } - - patternBeforePlaceHolder := targetDatabasePattern[:start] - patternAfterPlaceHolder := targetDatabasePattern[start+placeHolderLen:] - - // Verify that the target database name matches the expected length for the pattern - if len(targetDBName)-len(patternAfterPlaceHolder) < 0 || len(targetDBName)-len(patternAfterPlaceHolder) <= len(patternBeforePlaceHolder) { - return "", fmt.Errorf("target database name is too short for given pattern") - } - - // Check the beginning and end of the target name against the expected pattern - before := targetDBName[:len(patternBeforePlaceHolder)] - after := targetDBName[len(targetDBName)-len(patternAfterPlaceHolder):] - - if before != patternBeforePlaceHolder || after != patternAfterPlaceHolder { - return "", fmt.Errorf("target database name does not match the expected pattern") - } - - sourceDBName := targetDBName[len(patternBeforePlaceHolder) : len(targetDBName)-len(patternAfterPlaceHolder)] - - return sourceDBName, nil -} - /**********************************************************************************************************************/ func (t *TargetMySQLService) getSnapshot(name string) (*BranchSchema, error) { @@ -306,18 +258,17 @@ func (t *TargetMySQLService) getAllDatabases() ([]string, error) { return databases, nil } -func (t *TargetMySQLService) createDatabaseAndTables(branchSchema *BranchSchema, targetDBPattern string) error { +func (t *TargetMySQLService) createDatabaseAndTables(branchSchema *BranchSchema) error { for database, tables := range branchSchema.branchSchema { // create database - targetDBName := GenerateTargetName(database, targetDBPattern) - _, err := t.mysqlService.Exec("", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", targetDBName)) + _, err := t.mysqlService.Exec("", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", database)) if err != nil { return fmt.Errorf("failed to create database '%s': %v", database, err) } // create tables createTableStmts := addIfNotExistsForCreateTableSQL(tables) - err = t.createTables(targetDBName, createTableStmts) + err = t.createTables(database, createTableStmts) if err != nil { return err } @@ -343,7 +294,7 @@ func (t *TargetMySQLService) SelectAndValidateBranchMeta(name string) (*BranchMe defer rows.Close() if !rows.Next() { - return nil, err + return nil, fmt.Errorf("branch not found: %s", name) } var meta BranchMeta @@ -360,7 +311,6 @@ func (t *TargetMySQLService) SelectAndValidateBranchMeta(name string) (*BranchMe &includeDBs, &excludeDBs, &status, - &meta.TargetDBPattern, ) if err != nil { return nil, err @@ -420,8 +370,7 @@ func getUpsertBranchMetaSQL(branchMeta *BranchMeta) string { branchMeta.SourcePassword, includeDatabases, excludeDatabases, - string(branchMeta.Status), - branchMeta.TargetDBPattern) + string(branchMeta.Status)) } func getInsertBranchMetaSQL(branchMeta *BranchMeta) string { @@ -435,8 +384,7 @@ func getInsertBranchMetaSQL(branchMeta *BranchMeta) string { branchMeta.SourcePassword, includeDatabases, excludeDatabases, - string(branchMeta.Status), - branchMeta.TargetDBPattern) + string(branchMeta.Status)) } func getUpdateBranchStatusSQL(name string, status BranchStatus) string { diff --git a/go/vt/vtgate/branch/target_mysql_service_test.go b/go/vt/vtgate/branch/target_mysql_service_test.go index e409adf1e5..4917a93448 100644 --- a/go/vt/vtgate/branch/target_mysql_service_test.go +++ b/go/vt/vtgate/branch/target_mysql_service_test.go @@ -46,10 +46,6 @@ func compareBranchMetas(first, second *BranchMeta) bool { fmt.Printf("SourcePassword different: first=%s, second=%s\n", first.SourcePassword, second.SourcePassword) return false } - if first.TargetDBPattern != second.TargetDBPattern { - fmt.Printf("TargetDBPattern different: first=%s, second=%s\n", first.TargetDBPattern, second.TargetDBPattern) - return false - } if first.Status != second.Status { fmt.Printf("Status different: first=%s, second=%s\n", first.Status, second.Status) return false @@ -149,55 +145,3 @@ func TestAddIfNotExistsForCreateTableSQL(t *testing.T) { }) } } - -func TestGenerateTargetName(t *testing.T) { - tests := []struct { - sourceDBName string - targetDatabasePattern string - expected string - }{ - {"example_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "target_example_db_db"}, - {"dev_db", fmt.Sprintf("dev_%s_database", SourceDBNamePlaceHolder), "dev_dev_db_database"}, - {"prod", fmt.Sprintf("%s_production", SourceDBNamePlaceHolder), "prod_production"}, - {"test", fmt.Sprintf("%s", SourceDBNamePlaceHolder), "test"}, - } - - for _, test := range tests { - result := GenerateTargetName(test.sourceDBName, test.targetDatabasePattern) - if result != test.expected { - t.Errorf("GenerateTargetName(%q, %q) = %q; expected %q", test.sourceDBName, test.targetDatabasePattern, result, test.expected) - } - } -} - -func TestGenerateSourceName(t *testing.T) { - tests := []struct { - targetDBName string - targetDatabasePattern string - expected string - expectError bool - }{ - {"target_example_db_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "example_db", false}, - {"dev_dev_db_database", fmt.Sprintf("dev_%s_database", SourceDBNamePlaceHolder), "dev_db", false}, - {"prod_production", fmt.Sprintf("%s_production", SourceDBNamePlaceHolder), "prod", false}, - {"invalid_name", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "", true}, // Should return an error - {"target_wrong_db", fmt.Sprintf("other_%s_db", SourceDBNamePlaceHolder), "", true}, // Should return an error - {"target_source_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "source", false}, - {"target_db", fmt.Sprintf("target_%s_db", SourceDBNamePlaceHolder), "", true}, - } - - for _, test := range tests { - result, err := GenerateSourceName(test.targetDBName, test.targetDatabasePattern) - if test.expectError { - if err == nil { - t.Errorf("Expected error for GenerateSourceName(%q, %q), but got none", test.targetDBName, test.targetDatabasePattern) - } - } else { - if err != nil { - t.Errorf("Error for GenerateSourceName(%q, %q): %v", test.targetDBName, test.targetDatabasePattern, err) - } else if result != test.expected { - t.Errorf("GenerateSourceName(%q, %q) = %q; expected %q", test.targetDBName, test.targetDatabasePattern, result, test.expected) - } - } - } -} diff --git a/go/vt/vtgate/branch/test_util.go b/go/vt/vtgate/branch/test_util.go index c5bbefb846..84258db0c7 100644 --- a/go/vt/vtgate/branch/test_util.go +++ b/go/vt/vtgate/branch/test_util.go @@ -187,7 +187,6 @@ var ( SourcePassword: "password123", IncludeDatabases: []string{"db1", "db2"}, ExcludeDatabases: []string{"db3"}, - TargetDBPattern: "", Status: "init", }, { @@ -198,7 +197,6 @@ var ( SourcePassword: "password123", IncludeDatabases: []string{"*"}, ExcludeDatabases: []string{}, - TargetDBPattern: "", Status: "bad Status", }, { @@ -209,7 +207,6 @@ var ( SourcePassword: "password123", IncludeDatabases: []string{"*"}, ExcludeDatabases: []string{}, - TargetDBPattern: "", Status: "unknown", }, } @@ -226,7 +223,6 @@ func InitMockBranchMetas(mock sqlmock.Sqlmock) { BranchMetasForTest[i].SourcePassword, strings.Join(BranchMetasForTest[i].IncludeDatabases, ","), strings.Join(BranchMetasForTest[i].ExcludeDatabases, ","), - BranchMetasForTest[i].TargetDBPattern, BranchMetasForTest[i].Status, ) diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index 06a4f5128e..ab41137f0e 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -56,23 +56,21 @@ const ( ) const ( - BranchCreateParamsSourceHost = "source_host" - BranchCreateParamsSourcePort = "source_port" - BranchCreateParamsSourceUser = "source_user" - BranchCreateParamsSourcePassword = "source_password" - BranchCreateParamsInclude = "include_databases" - BranchCreateParamsExclude = "exclude_databases" - BranchCreateParamsTargetDBPattern = "target_db_pattern" + BranchCreateParamsSourceHost = "source_host" + BranchCreateParamsSourcePort = "source_port" + BranchCreateParamsSourceUser = "source_user" + BranchCreateParamsSourcePassword = "source_password" + BranchCreateParamsInclude = "include_databases" + BranchCreateParamsExclude = "exclude_databases" ) type BranchCreateParams struct { - SourceHost string - SourcePort string - SourceUser string - SourcePassword string - Include string - Exclude string - TargetDBPattern string + SourceHost string + SourcePort string + SourceUser string + SourcePassword string + Include string + Exclude string } const ( @@ -324,13 +322,6 @@ func (bcp *BranchCreateParams) setValues(params map[string]string) error { delete(params, BranchCreateParamsSourcePassword) } - if v, ok := params[BranchCreateParamsTargetDBPattern]; ok { - bcp.TargetDBPattern = v - delete(params, BranchCreateParamsTargetDBPattern) - } else { - bcp.TargetDBPattern = branch.SourceDBNamePlaceHolder - } - return checkRedundantParams(params) } @@ -355,10 +346,6 @@ func (bcp *BranchCreateParams) validate() error { return fmt.Errorf("branch create: include databases is required") } - if err := branch.ValidateTargetDatabasePattern(bcp.TargetDBPattern); err != nil { - return fmt.Errorf("branch create: target db pattern %s is invalid, %v", bcp.TargetDBPattern, err) - } - return nil } @@ -470,7 +457,7 @@ func (b *Branch) branchCreate() (*sqltypes.Result, error) { if err != nil { return nil, err } - branchMeta, err := branch.NewBranchMeta(b.name, createParams.SourceHost, port, createParams.SourceUser, createParams.SourcePassword, createParams.Include, createParams.Exclude, createParams.TargetDBPattern) + branchMeta, err := branch.NewBranchMeta(b.name, createParams.SourceHost, port, createParams.SourceUser, createParams.SourcePassword, createParams.Include, createParams.Exclude) if err != nil { return nil, err } @@ -612,11 +599,11 @@ func buildBranchDiffResult(diff *branch.BranchDiff) *sqltypes.Result { } func buildMetaResult(meta *branch.BranchMeta) (*sqltypes.Result, error) { - fields := sqltypes.BuildVarCharFields("name", "status", "source host", "source port", "source user", "include", "exclude", "target db pattern") + fields := sqltypes.BuildVarCharFields("name", "status", "source host", "source port", "source user", "include", "exclude") rows := make([][]sqltypes.Value, 0) include := strings.Join(meta.IncludeDatabases, ",") exclude := strings.Join(meta.ExcludeDatabases, ",") - rows = append(rows, sqltypes.BuildVarCharRow(meta.Name, string(meta.Status), meta.SourceHost, string(rune(meta.SourcePort)), meta.SourceUser, include, exclude, meta.TargetDBPattern)) + rows = append(rows, sqltypes.BuildVarCharRow(meta.Name, string(meta.Status), meta.SourceHost, strconv.Itoa(meta.SourcePort), meta.SourceUser, include, exclude)) return &sqltypes.Result{Fields: fields, Rows: rows}, nil } @@ -664,23 +651,24 @@ func buildSnapshotResult(branchName string, targetHandler *branch.TargetMySQLSer } defer rows.Close() - fields := sqltypes.BuildVarCharFields("id", "name", "database", "table", "create table") + fields := sqltypes.BuildVarCharFields("id", "name", "database", "table", "create table", "update time") resultRows := make([][]sqltypes.Value, 0) for rows.Next() { var ( - id int - name string - database string - table string - createTableSQL string + id int + name string + database string + table string + createTableSQL string + updateTimestamp string ) - if err := rows.Scan(&id, &name, &database, &table, &createTableSQL); err != nil { + if err := rows.Scan(&id, &name, &database, &table, &createTableSQL, &updateTimestamp); err != nil { return nil, fmt.Errorf("failed to scan row: %v", err) } - resultRows = append(resultRows, sqltypes.BuildVarCharRow(string(rune(id)), name, database, table, createTableSQL)) + resultRows = append(resultRows, sqltypes.BuildVarCharRow(string(rune(id)), name, database, table, createTableSQL, updateTimestamp)) } return &sqltypes.Result{Fields: fields, Rows: resultRows}, nil diff --git a/go/vt/vtgate/engine/cached_size.go b/go/vt/vtgate/engine/cached_size.go index f98b6e2834..49e5d055cc 100644 --- a/go/vt/vtgate/engine/cached_size.go +++ b/go/vt/vtgate/engine/cached_size.go @@ -85,7 +85,7 @@ func (cached *BranchCreateParams) CachedSize(alloc bool) int64 { } size := int64(0) if alloc { - size += int64(112) + size += int64(96) } // field SourceHost string size += hack.RuntimeAllocSize(int64(len(cached.SourceHost))) @@ -99,8 +99,6 @@ func (cached *BranchCreateParams) CachedSize(alloc bool) int64 { size += hack.RuntimeAllocSize(int64(len(cached.Include))) // field Exclude string size += hack.RuntimeAllocSize(int64(len(cached.Exclude))) - // field TargetDBPattern string - size += hack.RuntimeAllocSize(int64(len(cached.TargetDBPattern))) return size } func (cached *BranchDiffParams) CachedSize(alloc bool) int64 { From 98d53067bd4bb3cb6606fe396ce67b24fdeee49d Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 9 Dec 2024 19:42:04 +0800 Subject: [PATCH 04/13] fix: fix bugs --- endtoend/branch/branch_test.go | 170 ++++++++++---------- go/vt/vtgate/branch/branch_meta.go | 2 + go/vt/vtgate/branch/branch_service.go | 43 +++-- go/vt/vtgate/branch/target_mysql_service.go | 12 +- 4 files changed, 131 insertions(+), 96 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 05e9cdfd20..069df8301c 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -292,91 +292,91 @@ func TestBranchBasic(t *testing.T) { } -func TestBranchBasicWithFailPoint(t *testing.T) { - testSourceAndTargetClusterConnection(t) - sourcePrepare() - targetPrepare() - - // defer cleanup - defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) - defer sourceClean() - defer targetClean() - - // create branch - createCMD := getBranchCreateCMD(sourceHostToTarget, sourceCluster.MysqlPort, "root", "passwd", "*", "information_schema,mysql,performance_schema,sys") - framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError", "return(true)") - framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) - expectBranchStatus(t, "my_branch", "init") - - framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError") - framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError", "return(true)") - framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) - expectBranchStatus(t, "my_branch", "fetched") - framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError") - - framework.ExecNoError(t, targetCluster.WescaleDb, createCMD) - expectBranchStatus(t, "my_branch", "created") - - assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db1", "users")) - assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db2", "orders")) - // the test_db3 will be skipped when branch creating - assert.Equal(t, false, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "source_products")) - assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "target_products")) - - // change schema - framework.ExecNoError(t, sourceCluster.WescaleDb, "ALTER TABLE test_db3.source_products ADD COLUMN description TEXT;") - assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "source_products", "description")) - - framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db3.target_products ADD COLUMN description TEXT;") - assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db3", "target_products", "description")) - - framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db1.users DROP COLUMN created_at;") - assert.Equal(t, false, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db1", "users", "created_at")) - - framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db2.orders ADD COLUMN description TEXT;") - assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db2", "orders", "description")) - - // branch diff - diffCMD := getBranchDiffCMD("source_target") - rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) - defer rows.Close() - printBranchDiff(rows) - - // branch prepare merge back - framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError", "return(true)") - framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchPrepareMergeBackCMD()) - expectBranchStatus(t, "my_branch", "preparing") - framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError") - - rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) - defer rows2.Close() - printBranchDiff(rows2) - expectBranchStatus(t, "my_branch", "prepared") - - // branch merge - framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError", "return(true)") - framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchMergeBackCMD()) - expectBranchStatus(t, "my_branch", "merging") - - framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError") - framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) - expectBranchStatus(t, "my_branch", "merged") - - // no diff - rows3 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchDiffCMD("source_target")) - defer rows3.Close() - assert.Equal(t, false, rows3.Next()) - - // check schema - assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "target_products")) - assert.Equal(t, false, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "source_products")) - assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db1", "users")) - assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db2", "orders")) - - assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "target_products", "description")) - assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db2", "orders", "description")) - -} +//func TestBranchBasicWithFailPoint(t *testing.T) { +// testSourceAndTargetClusterConnection(t) +// sourcePrepare() +// targetPrepare() +// +// // defer cleanup +// defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) +// defer sourceClean() +// defer targetClean() +// +// // create branch +// createCMD := getBranchCreateCMD(sourceHostToTarget, sourceCluster.MysqlPort, "root", "passwd", "*", "information_schema,mysql,performance_schema,sys") +// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError", "return(true)") +// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) +// expectBranchStatus(t, "my_branch", "init") +// +// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError") +// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError", "return(true)") +// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) +// expectBranchStatus(t, "my_branch", "fetched") +// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError") +// +// framework.ExecNoError(t, targetCluster.WescaleDb, createCMD) +// expectBranchStatus(t, "my_branch", "created") +// +// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db1", "users")) +// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db2", "orders")) +// // the test_db3 will be skipped when branch creating +// assert.Equal(t, false, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "source_products")) +// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "target_products")) +// +// // change schema +// framework.ExecNoError(t, sourceCluster.WescaleDb, "ALTER TABLE test_db3.source_products ADD COLUMN description TEXT;") +// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "source_products", "description")) +// +// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db3.target_products ADD COLUMN description TEXT;") +// assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db3", "target_products", "description")) +// +// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db1.users DROP COLUMN created_at;") +// assert.Equal(t, false, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db1", "users", "created_at")) +// +// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db2.orders ADD COLUMN description TEXT;") +// assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db2", "orders", "description")) +// +// // branch diff +// diffCMD := getBranchDiffCMD("source_target") +// rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) +// defer rows.Close() +// printBranchDiff(rows) +// +// // branch prepare merge back +// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError", "return(true)") +// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchPrepareMergeBackCMD()) +// expectBranchStatus(t, "my_branch", "preparing") +// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError") +// +// rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) +// defer rows2.Close() +// printBranchDiff(rows2) +// expectBranchStatus(t, "my_branch", "prepared") +// +// // branch merge +// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError", "return(true)") +// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchMergeBackCMD()) +// expectBranchStatus(t, "my_branch", "merging") +// +// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError") +// framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) +// expectBranchStatus(t, "my_branch", "merged") +// +// // no diff +// rows3 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchDiffCMD("source_target")) +// defer rows3.Close() +// assert.Equal(t, false, rows3.Next()) +// +// // check schema +// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "target_products")) +// assert.Equal(t, false, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "source_products")) +// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db1", "users")) +// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db2", "orders")) +// +// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "target_products", "description")) +// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db2", "orders", "description")) +// +//} func expectBranchStatus(t *testing.T, name, expectStatus string) { rows := framework.QueryNoError(t, targetCluster.WescaleDb, fmt.Sprintf("select status from mysql.branch where name = '%s'", name)) diff --git a/go/vt/vtgate/branch/branch_meta.go b/go/vt/vtgate/branch/branch_meta.go index fb4754dccb..4403e60863 100644 --- a/go/vt/vtgate/branch/branch_meta.go +++ b/go/vt/vtgate/branch/branch_meta.go @@ -133,6 +133,8 @@ const ( SelectBranchUnmergedDDLSQL = "select * from mysql.branch_patch where Name='%s' and merged = false order by id" + SelectBranchUnmergedDBDDLSQL = "select * from mysql.branch_patch where Name='%s' and merged = false and `table` = '' order by id" + SelectBranchMergeBackDDLSQL = "select * from mysql.branch_patch where Name='%s' order by id" InsertBranchMergeBackDDLSQL = "insert into mysql.branch_patch (`Name`, `database`, `table`, `ddl`, `merged`) values ('%s', '%s', '%s', '%s', false)" diff --git a/go/vt/vtgate/branch/branch_service.go b/go/vt/vtgate/branch/branch_service.go index 22305c6b8f..6637079bb4 100644 --- a/go/vt/vtgate/branch/branch_service.go +++ b/go/vt/vtgate/branch/branch_service.go @@ -1,6 +1,7 @@ package branch import ( + "database/sql" "fmt" "github.com/pingcap/failpoint" "strings" @@ -344,7 +345,7 @@ func (bs *BranchService) BranchMergeBack(name string, status BranchStatus) error // select and execute merge back ddl one by one // todo enhancement: track whether the current ddl to apply has finished or is executing - err = bs.executeMergeBackDDLOneByOne(name) + err = bs.executeMergeBackDDL(name) if err != nil { return err } @@ -375,14 +376,32 @@ func statusIsOneOf(status BranchStatus, statuses []BranchStatus) bool { return false } -func (bs *BranchService) executeMergeBackDDLOneByOne(name string) error { +func (bs *BranchService) executeMergeBackDDL(name string) error { + // create or drop database first + selectUnmergedDBDDLSQL := getSelectUnmergedDBDDLSQL(name) + rows, err := bs.targetMySQLService.mysqlService.Query(selectUnmergedDBDDLSQL) + if err != nil { + return err + } + defer rows.Close() + err = bs.executeMergeBackDDLOneByOne(rows) + if err != nil { + return err + } + + // then, execute table ddl selectMergeBackDDLSQL := getSelectUnmergedDDLSQL(name) - rows, err := bs.targetMySQLService.mysqlService.Query(selectMergeBackDDLSQL) + rows2, err := bs.targetMySQLService.mysqlService.Query(selectMergeBackDDLSQL) if err != nil { return err } - defer rows.Close() + defer rows2.Close() + return bs.executeMergeBackDDLOneByOne(rows2) +} + +// caller should close rows +func (bs *BranchService) executeMergeBackDDLOneByOne(rows *sql.Rows) error { for rows.Next() { var ( id int @@ -392,14 +411,20 @@ func (bs *BranchService) executeMergeBackDDLOneByOne(name string) error { ddl string merged bool ) - - if err := rows.Scan(&id, &name, &database, &table, &ddl, &merged); err != nil { + var err error + if err = rows.Scan(&id, &name, &database, &table, &ddl, &merged); err != nil { return fmt.Errorf("failed to scan row: %v", err) } - // todo enhancement: track whether the current ddl to apply has finished or is executing - _, err = bs.sourceMySQLService.mysqlService.Exec(database, ddl) + + if table == "" { + // create or drop database ddl + _, err = bs.sourceMySQLService.mysqlService.Exec("", ddl) + } else { + // todo enhancement: track whether the current ddl to apply has finished or is executing + _, err = bs.sourceMySQLService.mysqlService.Exec(database, ddl) + } if err != nil { - return fmt.Errorf("failed to execute ddl: %v", err) + return fmt.Errorf("failed to execute ddl %v: %v", ddl, err) } updateDDLMergedSQL := getUpdateDDLMergedSQL(id) _, err = bs.targetMySQLService.mysqlService.Exec("", updateDDLMergedSQL) diff --git a/go/vt/vtgate/branch/target_mysql_service.go b/go/vt/vtgate/branch/target_mysql_service.go index 478de4a303..d0c9804097 100644 --- a/go/vt/vtgate/branch/target_mysql_service.go +++ b/go/vt/vtgate/branch/target_mysql_service.go @@ -173,12 +173,16 @@ func (t *TargetMySQLService) insertMergeBackDDLInBatches(name string, ddls *Bran insertSQLs := make([]string, 0) for database, databaseDiff := range ddls.Diffs { if databaseDiff.NeedDropDatabase { - insertSQLs = append(insertSQLs, fmt.Sprintf("DROP DATABASE IF EXISTS %s", database)) + ddl := fmt.Sprintf("DROP DATABASE IF EXISTS %s", database) + sql := getInsertMergeBackDDLSQL(name, database, "", ddl) + insertSQLs = append(insertSQLs, sql) continue } if databaseDiff.NeedCreateDatabase { - insertSQLs = append(insertSQLs, fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", database)) + ddl := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", database) + sql := getInsertMergeBackDDLSQL(name, database, "", ddl) + insertSQLs = append(insertSQLs, sql) } for tableName, ddls := range databaseDiff.TableDDLs { @@ -423,6 +427,10 @@ func getSelectUnmergedDDLSQL(name string) string { return fmt.Sprintf(SelectBranchUnmergedDDLSQL, name) } +func getSelectUnmergedDBDDLSQL(name string) string { + return fmt.Sprintf(SelectBranchUnmergedDBDDLSQL, name) +} + func GetSelectMergeBackDDLSQL(name string) string { return fmt.Sprintf(SelectBranchMergeBackDDLSQL, name) } From 8542991f4c36f9dc3a4fd67a7f8d590d007d8e91 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Mon, 9 Dec 2024 20:47:50 +0800 Subject: [PATCH 05/13] fix: fix bugs; add testcase --- endtoend/branch/branch_test.go | 309 +++++++++++++++++------- endtoend/framework/sql_utils.go | 18 ++ go/vt/vtgate/engine/branch_primitive.go | 18 +- 3 files changed, 245 insertions(+), 100 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 069df8301c..62efd384c2 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -6,6 +6,7 @@ import ( "fmt" "github.com/stretchr/testify/assert" "github.com/wesql/wescale/endtoend/framework" + "strconv" "testing" "time" ) @@ -78,10 +79,12 @@ func sourcePrepare() { "DROP DATABASE IF EXISTS test_db1;", "DROP DATABASE IF EXISTS test_db2;", "DROP DATABASE IF EXISTS test_db3;", + "DROP DATABASE IF EXISTS test_db4;", "CREATE DATABASE test_db1;", "CREATE DATABASE test_db2;", "CREATE DATABASE test_db3;", + "CREATE DATABASE test_db4;", `CREATE TABLE test_db1.users ( id INT PRIMARY KEY AUTO_INCREMENT, @@ -106,6 +109,11 @@ func sourcePrepare() { category VARCHAR(50), last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );`, + + `CREATE TABLE test_db4.student ( + id INT PRIMARY KEY AUTO_INCREMENT, + name VARCHAR(200) NOT NULL + );`, } for _, statement := range sqlStatements { _, err := sourceCluster.WescaleDb.Exec(statement) @@ -120,6 +128,8 @@ func sourceClean() { "DROP DATABASE IF EXISTS test_db1;", "DROP DATABASE IF EXISTS test_db2;", "DROP DATABASE IF EXISTS test_db3;", + "DROP DATABASE IF EXISTS test_db4;", + "DROP DATABASE IF EXISTS target_db", } for _, statement := range sqlStatements { _, err := sourceCluster.WescaleDb.Exec(statement) @@ -134,8 +144,11 @@ func targetPrepare() { "DROP DATABASE IF EXISTS test_db1;", "DROP DATABASE IF EXISTS test_db2;", "DROP DATABASE IF EXISTS test_db3;", + "DROP DATABASE IF EXISTS test_db4;", + "DROP DATABASE IF EXISTS target_db;", "CREATE DATABASE test_db3;", + "CREATE DATABASE target_db", `CREATE TABLE test_db3.target_products ( product_id INT PRIMARY KEY AUTO_INCREMENT, @@ -145,6 +158,11 @@ func targetPrepare() { category VARCHAR(50), last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );`, + + `CREATE TABLE target_db.target_new_table ( + id INT PRIMARY KEY AUTO_INCREMENT, + col1 VARCHAR(200) NOT NULL + );`, } for _, statement := range sqlStatements { _, err := targetCluster.WescaleDb.Exec(statement) @@ -159,6 +177,8 @@ func targetClean() { "DROP DATABASE IF EXISTS test_db1;", "DROP DATABASE IF EXISTS test_db2;", "DROP DATABASE IF EXISTS test_db3;", + "DROP DATABASE IF EXISTS test_db4;", + "DROP DATABASE IF EXISTS target_db", } for _, statement := range sqlStatements { _, err := targetCluster.WescaleDb.Exec(statement) @@ -213,23 +233,111 @@ func getBranchMergeBackCMD() string { return fmt.Sprintf(`Branch merge_back;`) } +func getBranchShowCMD(showOption string) string { + return fmt.Sprintf(`Branch show with ('show_option'='%s');`, showOption) +} + func printBranchDiff(rows *sql.Rows) { fmt.Printf("---------------------- start printing branch diff ----------------------\n") for rows.Next() { var ( + name string database string tableName string ddl string ) - err := rows.Scan(&database, &tableName, &ddl) + err := rows.Scan(&name, &database, &tableName, &ddl) if err != nil { panic(err) } - fmt.Printf("Database: %s, Table: %s, DDL: %s\n", database, tableName, ddl) + fmt.Printf("Branch Name: %s, Database: %s, Table: %s, DDL: %s\n", name, database, tableName, ddl) } fmt.Printf("---------------------- print branch diff end ----------------------\n") } +func branchDiffContains(rows *sql.Rows, name, database string, tableName string, ddl string) bool { + for rows.Next() { + var ( + nameTmp string + databaseTmp string + tableNameTmp string + ddlTmp string + ) + err := rows.Scan(&nameTmp, &databaseTmp, &tableNameTmp, &ddlTmp) + if err != nil { + panic(err) + } + if nameTmp == name && databaseTmp == database && tableNameTmp == tableName && ddlTmp == ddl { + return true + } + } + return false +} + +func printBranchShowStatus(rows *sql.Rows) { + fmt.Printf("---------------------- start printing branch show status ----------------------\n") + for rows.Next() { + var ( + name string + status string + sourceHost string + sourcePort int + sourceUser string + includeDatabases string + excludeDatabases string + ) + err := rows.Scan(&name, &status, &sourceHost, &sourcePort, &sourceUser, &includeDatabases, &excludeDatabases) + if err != nil { + panic(err) + } + fmt.Printf("Branch Name: %s, Status: %s, Source Host: %s, Source Port: %d, Source User: %s, Include Databases: %s, Exclude Databases: %s\n", + name, status, sourceHost, sourcePort, sourceUser, includeDatabases, excludeDatabases) + } + fmt.Printf("---------------------- print branch show status end ----------------------\n") +} + +func printBranchShowSnapshot(rows *sql.Rows) { + fmt.Printf("---------------------- start printing branch show snapshot ----------------------\n") + for rows.Next() { + var ( + id int + name string + database string + table string + createTableSQL string + updateTimestamp string + ) + + if err := rows.Scan(&id, &name, &database, &table, &createTableSQL, &updateTimestamp); err != nil { + panic(err) + } + fmt.Printf("Snapshot ID: %d, Branch Name: %s, Database: %s, Table: %s, CreateTableSQL: %s, UpdateTimestamp: %s\n", + id, name, database, table, createTableSQL, updateTimestamp) + } + fmt.Printf("---------------------- print branch show snapshot end ----------------------\n") +} + +func printBranchShowMergeBackDDL(rows *sql.Rows) { + fmt.Printf("---------------------- start printing branch show merge back ddl ----------------------\n") + for rows.Next() { + var ( + id int + name string + database string + table string + ddl string + merged bool + ) + + if err := rows.Scan(&id, &name, &database, &table, &ddl, &merged); err != nil { + panic(err) + } + fmt.Printf("Merge Back DDL ID: %d, Branch Name: %s, Database: %s, Table: %s, DDL: %s, Merged or not: %s\n", + id, name, database, table, ddl, strconv.FormatBool(merged)) + } + fmt.Printf("---------------------- print branch show merge back ddl end ----------------------\n") +} + func TestBranchBasic(t *testing.T) { testSourceAndTargetClusterConnection(t) sourcePrepare() @@ -262,17 +370,38 @@ func TestBranchBasic(t *testing.T) { framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db2.orders ADD COLUMN description TEXT;") assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db2", "orders", "description")) + framework.ExecNoError(t, targetCluster.WescaleDb, "DROP DATABASE IF EXISTS test_db4") + assert.Equal(t, false, framework.CheckDatabaseExists(t, targetCluster.WescaleDb, "test_db4")) + // branch diff diffCMD := getBranchDiffCMD("source_target") rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) defer rows.Close() printBranchDiff(rows) + branchDiffContains(rows, "my_branch", "target_db", "", "CREATE DATABASE IF NOT EXISTS target_db") + branchDiffContains(rows, "mt_branch", "test_db4", "", "DROP DATABASE IF EXISTS test_db4") // branch prepare merge back rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) defer rows2.Close() printBranchDiff(rows2) + // branch show + showStatus := "branch show;" + rowsStatus := framework.QueryNoError(t, targetCluster.WescaleDb, showStatus) + defer rowsStatus.Close() + printBranchShowStatus(rowsStatus) + + showSnapshot := getBranchShowCMD("snapshot") + rowsSnapshot := framework.QueryNoError(t, targetCluster.WescaleDb, showSnapshot) + defer rowsSnapshot.Close() + printBranchShowSnapshot(rowsSnapshot) + + showMergeBackDDL := getBranchShowCMD("merge_back_ddl") + rowsMergeBackDDL := framework.QueryNoError(t, targetCluster.WescaleDb, showMergeBackDDL) + defer rowsMergeBackDDL.Close() + printBranchShowMergeBackDDL(rowsMergeBackDDL) + // branch merge framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) @@ -290,93 +419,95 @@ func TestBranchBasic(t *testing.T) { assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "target_products", "description")) assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db2", "orders", "description")) + assert.Equal(t, false, framework.CheckDatabaseExists(t, sourceCluster.WescaleDb, "test_db4")) + assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "target_db", "target_new_table")) } -//func TestBranchBasicWithFailPoint(t *testing.T) { -// testSourceAndTargetClusterConnection(t) -// sourcePrepare() -// targetPrepare() -// -// // defer cleanup -// defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) -// defer sourceClean() -// defer targetClean() -// -// // create branch -// createCMD := getBranchCreateCMD(sourceHostToTarget, sourceCluster.MysqlPort, "root", "passwd", "*", "information_schema,mysql,performance_schema,sys") -// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError", "return(true)") -// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) -// expectBranchStatus(t, "my_branch", "init") -// -// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError") -// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError", "return(true)") -// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) -// expectBranchStatus(t, "my_branch", "fetched") -// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError") -// -// framework.ExecNoError(t, targetCluster.WescaleDb, createCMD) -// expectBranchStatus(t, "my_branch", "created") -// -// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db1", "users")) -// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db2", "orders")) -// // the test_db3 will be skipped when branch creating -// assert.Equal(t, false, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "source_products")) -// assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "target_products")) -// -// // change schema -// framework.ExecNoError(t, sourceCluster.WescaleDb, "ALTER TABLE test_db3.source_products ADD COLUMN description TEXT;") -// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "source_products", "description")) -// -// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db3.target_products ADD COLUMN description TEXT;") -// assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db3", "target_products", "description")) -// -// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db1.users DROP COLUMN created_at;") -// assert.Equal(t, false, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db1", "users", "created_at")) -// -// framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db2.orders ADD COLUMN description TEXT;") -// assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db2", "orders", "description")) -// -// // branch diff -// diffCMD := getBranchDiffCMD("source_target") -// rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) -// defer rows.Close() -// printBranchDiff(rows) -// -// // branch prepare merge back -// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError", "return(true)") -// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchPrepareMergeBackCMD()) -// expectBranchStatus(t, "my_branch", "preparing") -// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError") -// -// rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) -// defer rows2.Close() -// printBranchDiff(rows2) -// expectBranchStatus(t, "my_branch", "prepared") -// -// // branch merge -// framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError", "return(true)") -// framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchMergeBackCMD()) -// expectBranchStatus(t, "my_branch", "merging") -// -// framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError") -// framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) -// expectBranchStatus(t, "my_branch", "merged") -// -// // no diff -// rows3 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchDiffCMD("source_target")) -// defer rows3.Close() -// assert.Equal(t, false, rows3.Next()) -// -// // check schema -// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "target_products")) -// assert.Equal(t, false, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "source_products")) -// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db1", "users")) -// assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db2", "orders")) -// -// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "target_products", "description")) -// assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db2", "orders", "description")) -// -//} +func TestBranchBasicWithFailPoint(t *testing.T) { + testSourceAndTargetClusterConnection(t) + sourcePrepare() + targetPrepare() + + // defer cleanup + defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) + defer sourceClean() + defer targetClean() + + // create branch + createCMD := getBranchCreateCMD(sourceHostToTarget, sourceCluster.MysqlPort, "root", "passwd", "*", "information_schema,mysql,performance_schema,sys") + framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError", "return(true)") + framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) + expectBranchStatus(t, "my_branch", "init") + + framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError") + framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError", "return(true)") + framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) + expectBranchStatus(t, "my_branch", "fetched") + framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError") + + framework.ExecNoError(t, targetCluster.WescaleDb, createCMD) + expectBranchStatus(t, "my_branch", "created") + + assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db1", "users")) + assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db2", "orders")) + // the test_db3 will be skipped when branch creating + assert.Equal(t, false, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "source_products")) + assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db3", "target_products")) + + // change schema + framework.ExecNoError(t, sourceCluster.WescaleDb, "ALTER TABLE test_db3.source_products ADD COLUMN description TEXT;") + assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "source_products", "description")) + + framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db3.target_products ADD COLUMN description TEXT;") + assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db3", "target_products", "description")) + + framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db1.users DROP COLUMN created_at;") + assert.Equal(t, false, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db1", "users", "created_at")) + + framework.ExecNoError(t, targetCluster.WescaleDb, "ALTER TABLE test_db2.orders ADD COLUMN description TEXT;") + assert.Equal(t, true, framework.CheckColumnExists(t, targetCluster.WescaleDb, "test_db2", "orders", "description")) + + // branch diff + diffCMD := getBranchDiffCMD("source_target") + rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) + defer rows.Close() + printBranchDiff(rows) + + // branch prepare merge back + framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError", "return(true)") + framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchPrepareMergeBackCMD()) + expectBranchStatus(t, "my_branch", "preparing") + framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError") + + rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) + defer rows2.Close() + printBranchDiff(rows2) + expectBranchStatus(t, "my_branch", "prepared") + + // branch merge + framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError", "return(true)") + framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchMergeBackCMD()) + expectBranchStatus(t, "my_branch", "merging") + + framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError") + framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) + expectBranchStatus(t, "my_branch", "merged") + + // no diff + rows3 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchDiffCMD("source_target")) + defer rows3.Close() + assert.Equal(t, false, rows3.Next()) + + // check schema + assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "target_products")) + assert.Equal(t, false, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db3", "source_products")) + assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db1", "users")) + assert.Equal(t, true, framework.CheckTableExists(t, sourceCluster.WescaleDb, "test_db2", "orders")) + + assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db3", "target_products", "description")) + assert.Equal(t, true, framework.CheckColumnExists(t, sourceCluster.WescaleDb, "test_db2", "orders", "description")) + +} func expectBranchStatus(t *testing.T, name, expectStatus string) { rows := framework.QueryNoError(t, targetCluster.WescaleDb, fmt.Sprintf("select status from mysql.branch where name = '%s'", name)) @@ -387,7 +518,3 @@ func expectBranchStatus(t *testing.T, name, expectStatus string) { assert.Nil(t, err) assert.Equal(t, expectStatus, actualStatus) } - -// todo test database add and drop - -// todo test local diff --git a/endtoend/framework/sql_utils.go b/endtoend/framework/sql_utils.go index 4159a6e616..f336bc9bd8 100644 --- a/endtoend/framework/sql_utils.go +++ b/endtoend/framework/sql_utils.go @@ -58,6 +58,7 @@ func CheckTableExists(t *testing.T, db *sql.DB, schema string, table string) boo return false } +// CheckColumnExists checks if a specific column exists in a given table. func CheckColumnExists(t *testing.T, db *sql.DB, schema, table, column string) bool { t.Helper() query := fmt.Sprintf(`SELECT COUNT(1) FROM information_schema.columns WHERE table_schema = '%s' AND table_name = '%s' AND column_name = '%s'`, schema, table, column) @@ -74,6 +75,23 @@ func CheckColumnExists(t *testing.T, db *sql.DB, schema, table, column string) b return count > 0 } +// CheckDatabaseExists checks if a specific database exists in the MySQL server. +func CheckDatabaseExists(t *testing.T, db *sql.DB, databaseName string) bool { + t.Helper() + query := fmt.Sprintf(`SELECT COUNT(1) FROM information_schema.schemata WHERE schema_name = '%s'`, databaseName) + + rows := QueryNoError(t, db, query) + defer rows.Close() + + var count int + if rows.Next() { + err := rows.Scan(&count) + assert.NoError(t, err) + } + + return count > 0 +} + func EnableFailPoint(t *testing.T, db *sql.DB, key, value string) { t.Helper() query := fmt.Sprintf("set @put_failpoint='%s=%s'", key, value) diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index ab41137f0e..16426b77ed 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -493,7 +493,7 @@ func (b *Branch) branchDiff() (*sqltypes.Result, error) { return nil, err } - return buildBranchDiffResult(diff), nil + return buildBranchDiffResult(meta.Name, diff), nil } func (b *Branch) branchPrepareMergeBack() (*sqltypes.Result, error) { @@ -513,7 +513,7 @@ func (b *Branch) branchPrepareMergeBack() (*sqltypes.Result, error) { return nil, err } - return buildBranchDiffResult(diff), nil + return buildBranchDiffResult(meta.Name, diff), nil } func (b *Branch) branchMergeBack() (*sqltypes.Result, error) { @@ -578,20 +578,20 @@ func getBranchDataStruct(name string) (*branch.BranchMeta, *branch.BranchService return meta, bs, sourceHandler, targetHandler, nil } -func buildBranchDiffResult(diff *branch.BranchDiff) *sqltypes.Result { - fields := sqltypes.BuildVarCharFields("database", "table", "ddl") +func buildBranchDiffResult(name string, diff *branch.BranchDiff) *sqltypes.Result { + fields := sqltypes.BuildVarCharFields("branch name", "database", "table", "ddl") rows := make([][]sqltypes.Value, 0) for db, dbDiff := range diff.Diffs { if dbDiff.NeedDropDatabase { - rows = append(rows, sqltypes.BuildVarCharRow(db, "", fmt.Sprintf("drop database `%s`", db))) + rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("drop database `%s`", db))) continue } if dbDiff.NeedCreateDatabase { - rows = append(rows, sqltypes.BuildVarCharRow(db, "", fmt.Sprintf("create database `%s`", db))) + rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("create database `%s`", db))) } for table, tableDiffs := range dbDiff.TableDDLs { for _, tableDiff := range tableDiffs { - rows = append(rows, sqltypes.BuildVarCharRow(db, table, tableDiff)) + rows = append(rows, sqltypes.BuildVarCharRow(name, db, table, tableDiff)) } } } @@ -636,7 +636,7 @@ func buildMergeBackDDLResult(branchName string, targetHandler *branch.TargetMySQ if merged { mergedStr = "true" } - resultRows = append(resultRows, sqltypes.BuildVarCharRow(string(rune(id)), name, database, table, ddl, mergedStr)) + resultRows = append(resultRows, sqltypes.BuildVarCharRow(strconv.Itoa(id), name, database, table, ddl, mergedStr)) } return &sqltypes.Result{Fields: fields, Rows: resultRows}, nil @@ -668,7 +668,7 @@ func buildSnapshotResult(branchName string, targetHandler *branch.TargetMySQLSer return nil, fmt.Errorf("failed to scan row: %v", err) } - resultRows = append(resultRows, sqltypes.BuildVarCharRow(string(rune(id)), name, database, table, createTableSQL, updateTimestamp)) + resultRows = append(resultRows, sqltypes.BuildVarCharRow(strconv.Itoa(id), name, database, table, createTableSQL, updateTimestamp)) } return &sqltypes.Result{Fields: fields, Rows: resultRows}, nil From 972df4f3fd124877687ed872737e8fde0fb34a26 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 10 Dec 2024 15:51:43 +0800 Subject: [PATCH 06/13] fix: change branch clean_up to delete --- endtoend/branch/branch_test.go | 8 +- go/vt/sqlparser/keywords.go | 1 - go/vt/sqlparser/sql.go | 10966 +++++++++++----------- go/vt/sqlparser/sql.y | 7 +- go/vt/vtgate/engine/branch_primitive.go | 12 +- 5 files changed, 5491 insertions(+), 5503 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 62efd384c2..3815bcbb89 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -213,8 +213,8 @@ func getBranchCreateCMD( ) } -func getBranchCleanUpCMD() string { - return fmt.Sprintf(`Branch clean_up;`) +func getBranchDeleteCMD() string { + return fmt.Sprintf(`Branch delete;`) } // default override @@ -344,7 +344,7 @@ func TestBranchBasic(t *testing.T) { targetPrepare() // defer cleanup - defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) + defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchDeleteCMD()) defer sourceClean() defer targetClean() @@ -429,7 +429,7 @@ func TestBranchBasicWithFailPoint(t *testing.T) { targetPrepare() // defer cleanup - defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchCleanUpCMD()) + defer framework.ExecNoError(t, targetCluster.WescaleDb, getBranchDeleteCMD()) defer sourceClean() defer targetClean() diff --git a/go/vt/sqlparser/keywords.go b/go/vt/sqlparser/keywords.go index 61cbc8d8e4..21c59d8272 100644 --- a/go/vt/sqlparser/keywords.go +++ b/go/vt/sqlparser/keywords.go @@ -733,7 +733,6 @@ var keywords = []keyword{ {"merge_back", MERGE_BACK}, {"prepare_merge_back", PREPARE_MERGE_BACK}, {"diff", DIFF}, - {"clean_up", CLEAN_UP}, } // keywordStrings contains the reverse mapping of token to keyword strings diff --git a/go/vt/sqlparser/sql.go b/go/vt/sqlparser/sql.go index 96d0d7e081..c9491d231f 100644 --- a/go/vt/sqlparser/sql.go +++ b/go/vt/sqlparser/sql.go @@ -345,391 +345,390 @@ const BRANCH = 57642 const DIFF = 57643 const PREPARE_MERGE_BACK = 57644 const MERGE_BACK = 57645 -const CLEAN_UP = 57646 -const CDC = 57647 -const CDCS = 57648 -const WASM_BINARY_NAME = 57649 -const ENV = 57650 -const VITESS_MIGRATION = 57651 -const CANCEL = 57652 -const RETRY = 57653 -const LAUNCH = 57654 -const COMPLETE = 57655 -const CLEANUP = 57656 -const THROTTLE = 57657 -const UNTHROTTLE = 57658 -const EXPIRE = 57659 -const RATIO = 57660 -const PAUSE = 57661 -const RESUME = 57662 -const SCHEMA_MIGRATION = 57663 -const VITESS_THROTTLER = 57664 -const DML_JOB = 57665 -const DETAILS = 57666 -const TIME_PERIOD = 57667 -const BEGIN = 57668 -const START = 57669 -const TRANSACTION = 57670 -const COMMIT = 57671 -const ROLLBACK = 57672 -const SAVEPOINT = 57673 -const RELEASE = 57674 -const WORK = 57675 -const CONSISTENT = 57676 -const SNAPSHOT = 57677 -const BIT = 57678 -const TINYINT = 57679 -const SMALLINT = 57680 -const MEDIUMINT = 57681 -const INT = 57682 -const INTEGER = 57683 -const BIGINT = 57684 -const INTNUM = 57685 -const REAL = 57686 -const DOUBLE = 57687 -const FLOAT_TYPE = 57688 -const FLOAT4_TYPE = 57689 -const FLOAT8_TYPE = 57690 -const DECIMAL_TYPE = 57691 -const NUMERIC = 57692 -const TIME = 57693 -const TIMESTAMP = 57694 -const DATETIME = 57695 -const YEAR = 57696 -const CHAR = 57697 -const VARCHAR = 57698 -const BOOL = 57699 -const CHARACTER = 57700 -const VARBINARY = 57701 -const NCHAR = 57702 -const TEXT = 57703 -const TINYTEXT = 57704 -const MEDIUMTEXT = 57705 -const LONGTEXT = 57706 -const BLOB = 57707 -const TINYBLOB = 57708 -const MEDIUMBLOB = 57709 -const LONGBLOB = 57710 -const JSON = 57711 -const JSON_SCHEMA_VALID = 57712 -const JSON_SCHEMA_VALIDATION_REPORT = 57713 -const ENUM = 57714 -const GEOMETRY = 57715 -const POINT = 57716 -const LINESTRING = 57717 -const POLYGON = 57718 -const GEOMCOLLECTION = 57719 -const GEOMETRYCOLLECTION = 57720 -const MULTIPOINT = 57721 -const MULTILINESTRING = 57722 -const MULTIPOLYGON = 57723 -const ASCII = 57724 -const UNICODE = 57725 -const NULLX = 57726 -const AUTO_INCREMENT = 57727 -const APPROXNUM = 57728 -const SIGNED = 57729 -const UNSIGNED = 57730 -const ZEROFILL = 57731 -const CODE = 57732 -const COLLATION = 57733 -const COLUMNS = 57734 -const DATABASES = 57735 -const ENGINES = 57736 -const EVENT = 57737 -const EXTENDED = 57738 -const FIELDS = 57739 -const FULL = 57740 -const FUNCTION = 57741 -const GTID_EXECUTED = 57742 -const KEYSPACES = 57743 -const OPEN = 57744 -const PLUGINS = 57745 -const PRIVILEGES = 57746 -const PROCESSLIST = 57747 -const SCHEMAS = 57748 -const TABLES = 57749 -const TRIGGERS = 57750 -const USER = 57751 -const VGTID_EXECUTED = 57752 -const VITESS_KEYSPACES = 57753 -const VITESS_METADATA = 57754 -const VITESS_MIGRATIONS = 57755 -const VITESS_REPLICATION_STATUS = 57756 -const VITESS_SHARDS = 57757 -const VITESS_TABLETS = 57758 -const VITESS_TARGET = 57759 -const VSCHEMA = 57760 -const VITESS_THROTTLED_APPS = 57761 -const WORKLOAD = 57762 -const LASTSEENGTID = 57763 -const FAILPOINTS = 57764 -const TABLETS_PLANS = 57765 -const DML_JOBS = 57766 -const NAMES = 57767 -const GLOBAL = 57768 -const SESSION = 57769 -const ISOLATION = 57770 -const LEVEL = 57771 -const READ = 57772 -const WRITE = 57773 -const ONLY = 57774 -const REPEATABLE = 57775 -const COMMITTED = 57776 -const UNCOMMITTED = 57777 -const SERIALIZABLE = 57778 -const FAST = 57779 -const QUICK = 57780 -const CHANGED = 57781 -const MEDIUM = 57782 -const CURRENT_TIMESTAMP = 57783 -const DATABASE = 57784 -const CURRENT_DATE = 57785 -const NOW = 57786 -const CURRENT_TIME = 57787 -const LOCALTIME = 57788 -const LOCALTIMESTAMP = 57789 -const CURRENT_USER = 57790 -const UTC_DATE = 57791 -const UTC_TIME = 57792 -const UTC_TIMESTAMP = 57793 -const DAY = 57794 -const DAY_HOUR = 57795 -const DAY_MICROSECOND = 57796 -const DAY_MINUTE = 57797 -const DAY_SECOND = 57798 -const HOUR = 57799 -const HOUR_MICROSECOND = 57800 -const HOUR_MINUTE = 57801 -const HOUR_SECOND = 57802 -const MICROSECOND = 57803 -const MINUTE = 57804 -const MINUTE_MICROSECOND = 57805 -const MINUTE_SECOND = 57806 -const MONTH = 57807 -const QUARTER = 57808 -const SECOND = 57809 -const SECOND_MICROSECOND = 57810 -const YEAR_MONTH = 57811 -const WEEK = 57812 -const REPLACE = 57813 -const CONVERT = 57814 -const CAST = 57815 -const SUBSTR = 57816 -const SUBSTRING = 57817 -const SEPARATOR = 57818 -const TIMESTAMPADD = 57819 -const TIMESTAMPDIFF = 57820 -const WEIGHT_STRING = 57821 -const LTRIM = 57822 -const RTRIM = 57823 -const TRIM = 57824 -const JSON_ARRAY = 57825 -const JSON_OBJECT = 57826 -const JSON_QUOTE = 57827 -const JSON_DEPTH = 57828 -const JSON_TYPE = 57829 -const JSON_LENGTH = 57830 -const JSON_VALID = 57831 -const JSON_ARRAY_APPEND = 57832 -const JSON_ARRAY_INSERT = 57833 -const JSON_INSERT = 57834 -const JSON_MERGE = 57835 -const JSON_MERGE_PATCH = 57836 -const JSON_MERGE_PRESERVE = 57837 -const JSON_REMOVE = 57838 -const JSON_REPLACE = 57839 -const JSON_SET = 57840 -const JSON_UNQUOTE = 57841 -const COUNT = 57842 -const AVG = 57843 -const MAX = 57844 -const MIN = 57845 -const SUM = 57846 -const GROUP_CONCAT = 57847 -const BIT_AND = 57848 -const BIT_OR = 57849 -const BIT_XOR = 57850 -const STD = 57851 -const STDDEV = 57852 -const STDDEV_POP = 57853 -const STDDEV_SAMP = 57854 -const VAR_POP = 57855 -const VAR_SAMP = 57856 -const VARIANCE = 57857 -const REGEXP_INSTR = 57858 -const REGEXP_LIKE = 57859 -const REGEXP_REPLACE = 57860 -const REGEXP_SUBSTR = 57861 -const ExtractValue = 57862 -const UpdateXML = 57863 -const GET_LOCK = 57864 -const RELEASE_LOCK = 57865 -const RELEASE_ALL_LOCKS = 57866 -const IS_FREE_LOCK = 57867 -const IS_USED_LOCK = 57868 -const LOCATE = 57869 -const POSITION = 57870 -const MATCH = 57871 -const AGAINST = 57872 -const BOOLEAN = 57873 -const LANGUAGE = 57874 -const WITH = 57875 -const QUERY = 57876 -const EXPANSION = 57877 -const WITHOUT = 57878 -const VALIDATION = 57879 -const UNUSED = 57880 -const ARRAY = 57881 -const BYTE = 57882 -const CUME_DIST = 57883 -const DESCRIPTION = 57884 -const DENSE_RANK = 57885 -const EMPTY = 57886 -const EXCEPT = 57887 -const FIRST_VALUE = 57888 -const GROUPING = 57889 -const GROUPS = 57890 -const JSON_TABLE = 57891 -const LAG = 57892 -const LAST_VALUE = 57893 -const LATERAL = 57894 -const LEAD = 57895 -const NTH_VALUE = 57896 -const NTILE = 57897 -const OF = 57898 -const OVER = 57899 -const PERCENT_RANK = 57900 -const RANK = 57901 -const RECURSIVE = 57902 -const ROW_NUMBER = 57903 -const SYSTEM = 57904 -const WINDOW = 57905 -const ACTIVE = 57906 -const ADMIN = 57907 -const AUTOEXTEND_SIZE = 57908 -const BUCKETS = 57909 -const CLONE = 57910 -const COLUMN_FORMAT = 57911 -const COMPONENT = 57912 -const DEFINITION = 57913 -const ENFORCED = 57914 -const ENGINE_ATTRIBUTE = 57915 -const EXCLUDE = 57916 -const FOLLOWING = 57917 -const GET_MASTER_PUBLIC_KEY = 57918 -const HISTOGRAM = 57919 -const HISTORY = 57920 -const INACTIVE = 57921 -const INVISIBLE = 57922 -const LOCKED = 57923 -const MASTER_COMPRESSION_ALGORITHMS = 57924 -const MASTER_PUBLIC_KEY_PATH = 57925 -const MASTER_TLS_CIPHERSUITES = 57926 -const MASTER_ZSTD_COMPRESSION_LEVEL = 57927 -const NESTED = 57928 -const NETWORK_NAMESPACE = 57929 -const NOWAIT = 57930 -const NULLS = 57931 -const OJ = 57932 -const OLD = 57933 -const OPTIONAL = 57934 -const ORDINALITY = 57935 -const ORGANIZATION = 57936 -const OTHERS = 57937 -const PARTIAL = 57938 -const PATH = 57939 -const PERSIST = 57940 -const PERSIST_ONLY = 57941 -const PRECEDING = 57942 -const PRIVILEGE_CHECKS_USER = 57943 -const PROCESS = 57944 -const RANDOM = 57945 -const REFERENCE = 57946 -const REQUIRE_ROW_FORMAT = 57947 -const RESOURCE = 57948 -const RESPECT = 57949 -const RESTART = 57950 -const RETAIN = 57951 -const REUSE = 57952 -const ROLE = 57953 -const SECONDARY = 57954 -const SECONDARY_ENGINE = 57955 -const SECONDARY_ENGINE_ATTRIBUTE = 57956 -const SECONDARY_LOAD = 57957 -const SECONDARY_UNLOAD = 57958 -const SIMPLE = 57959 -const SKIP = 57960 -const SRID = 57961 -const THREAD_PRIORITY = 57962 -const TIES = 57963 -const UNBOUNDED = 57964 -const VCPU = 57965 -const VISIBLE = 57966 -const RETURNING = 57967 -const FORMAT_BYTES = 57968 -const FORMAT_PICO_TIME = 57969 -const PS_CURRENT_THREAD_ID = 57970 -const PS_THREAD_ID = 57971 -const GTID_SUBSET = 57972 -const GTID_SUBTRACT = 57973 -const WAIT_FOR_EXECUTED_GTID_SET = 57974 -const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57975 -const FORMAT = 57976 -const TREE = 57977 -const VITESS = 57978 -const TRADITIONAL = 57979 -const VTEXPLAIN = 57980 -const VEXPLAIN = 57981 -const PLAN = 57982 -const LOCAL = 57983 -const LOW_PRIORITY = 57984 -const KILL = 57985 -const USERS = 57986 -const NO_WRITE_TO_BINLOG = 57987 -const LOGS = 57988 -const ERROR = 57989 -const GENERAL = 57990 -const HOSTS = 57991 -const OPTIMIZER_COSTS = 57992 -const USER_RESOURCES = 57993 -const SLOW = 57994 -const CHANNEL = 57995 -const RELAY = 57996 -const EXPORT = 57997 -const CURRENT = 57998 -const ROW = 57999 -const ROWS = 58000 -const AVG_ROW_LENGTH = 58001 -const CONNECTION = 58002 -const CHECKSUM = 58003 -const DELAY_KEY_WRITE = 58004 -const ENCRYPTION = 58005 -const ENGINE = 58006 -const INSERT_METHOD = 58007 -const MAX_ROWS = 58008 -const MIN_ROWS = 58009 -const PACK_KEYS = 58010 -const PASSWORD = 58011 -const FIXED = 58012 -const DYNAMIC = 58013 -const COMPRESSED = 58014 -const REDUNDANT = 58015 -const COMPACT = 58016 -const ROW_FORMAT = 58017 -const STATS_AUTO_RECALC = 58018 -const STATS_PERSISTENT = 58019 -const STATS_SAMPLE_PAGES = 58020 -const STORAGE = 58021 -const MEMORY = 58022 -const DISK = 58023 -const PARTITIONS = 58024 -const LINEAR = 58025 -const RANGE = 58026 -const LIST = 58027 -const SUBPARTITION = 58028 -const SUBPARTITIONS = 58029 -const HASH = 58030 +const CDC = 57646 +const CDCS = 57647 +const WASM_BINARY_NAME = 57648 +const ENV = 57649 +const VITESS_MIGRATION = 57650 +const CANCEL = 57651 +const RETRY = 57652 +const LAUNCH = 57653 +const COMPLETE = 57654 +const CLEANUP = 57655 +const THROTTLE = 57656 +const UNTHROTTLE = 57657 +const EXPIRE = 57658 +const RATIO = 57659 +const PAUSE = 57660 +const RESUME = 57661 +const SCHEMA_MIGRATION = 57662 +const VITESS_THROTTLER = 57663 +const DML_JOB = 57664 +const DETAILS = 57665 +const TIME_PERIOD = 57666 +const BEGIN = 57667 +const START = 57668 +const TRANSACTION = 57669 +const COMMIT = 57670 +const ROLLBACK = 57671 +const SAVEPOINT = 57672 +const RELEASE = 57673 +const WORK = 57674 +const CONSISTENT = 57675 +const SNAPSHOT = 57676 +const BIT = 57677 +const TINYINT = 57678 +const SMALLINT = 57679 +const MEDIUMINT = 57680 +const INT = 57681 +const INTEGER = 57682 +const BIGINT = 57683 +const INTNUM = 57684 +const REAL = 57685 +const DOUBLE = 57686 +const FLOAT_TYPE = 57687 +const FLOAT4_TYPE = 57688 +const FLOAT8_TYPE = 57689 +const DECIMAL_TYPE = 57690 +const NUMERIC = 57691 +const TIME = 57692 +const TIMESTAMP = 57693 +const DATETIME = 57694 +const YEAR = 57695 +const CHAR = 57696 +const VARCHAR = 57697 +const BOOL = 57698 +const CHARACTER = 57699 +const VARBINARY = 57700 +const NCHAR = 57701 +const TEXT = 57702 +const TINYTEXT = 57703 +const MEDIUMTEXT = 57704 +const LONGTEXT = 57705 +const BLOB = 57706 +const TINYBLOB = 57707 +const MEDIUMBLOB = 57708 +const LONGBLOB = 57709 +const JSON = 57710 +const JSON_SCHEMA_VALID = 57711 +const JSON_SCHEMA_VALIDATION_REPORT = 57712 +const ENUM = 57713 +const GEOMETRY = 57714 +const POINT = 57715 +const LINESTRING = 57716 +const POLYGON = 57717 +const GEOMCOLLECTION = 57718 +const GEOMETRYCOLLECTION = 57719 +const MULTIPOINT = 57720 +const MULTILINESTRING = 57721 +const MULTIPOLYGON = 57722 +const ASCII = 57723 +const UNICODE = 57724 +const NULLX = 57725 +const AUTO_INCREMENT = 57726 +const APPROXNUM = 57727 +const SIGNED = 57728 +const UNSIGNED = 57729 +const ZEROFILL = 57730 +const CODE = 57731 +const COLLATION = 57732 +const COLUMNS = 57733 +const DATABASES = 57734 +const ENGINES = 57735 +const EVENT = 57736 +const EXTENDED = 57737 +const FIELDS = 57738 +const FULL = 57739 +const FUNCTION = 57740 +const GTID_EXECUTED = 57741 +const KEYSPACES = 57742 +const OPEN = 57743 +const PLUGINS = 57744 +const PRIVILEGES = 57745 +const PROCESSLIST = 57746 +const SCHEMAS = 57747 +const TABLES = 57748 +const TRIGGERS = 57749 +const USER = 57750 +const VGTID_EXECUTED = 57751 +const VITESS_KEYSPACES = 57752 +const VITESS_METADATA = 57753 +const VITESS_MIGRATIONS = 57754 +const VITESS_REPLICATION_STATUS = 57755 +const VITESS_SHARDS = 57756 +const VITESS_TABLETS = 57757 +const VITESS_TARGET = 57758 +const VSCHEMA = 57759 +const VITESS_THROTTLED_APPS = 57760 +const WORKLOAD = 57761 +const LASTSEENGTID = 57762 +const FAILPOINTS = 57763 +const TABLETS_PLANS = 57764 +const DML_JOBS = 57765 +const NAMES = 57766 +const GLOBAL = 57767 +const SESSION = 57768 +const ISOLATION = 57769 +const LEVEL = 57770 +const READ = 57771 +const WRITE = 57772 +const ONLY = 57773 +const REPEATABLE = 57774 +const COMMITTED = 57775 +const UNCOMMITTED = 57776 +const SERIALIZABLE = 57777 +const FAST = 57778 +const QUICK = 57779 +const CHANGED = 57780 +const MEDIUM = 57781 +const CURRENT_TIMESTAMP = 57782 +const DATABASE = 57783 +const CURRENT_DATE = 57784 +const NOW = 57785 +const CURRENT_TIME = 57786 +const LOCALTIME = 57787 +const LOCALTIMESTAMP = 57788 +const CURRENT_USER = 57789 +const UTC_DATE = 57790 +const UTC_TIME = 57791 +const UTC_TIMESTAMP = 57792 +const DAY = 57793 +const DAY_HOUR = 57794 +const DAY_MICROSECOND = 57795 +const DAY_MINUTE = 57796 +const DAY_SECOND = 57797 +const HOUR = 57798 +const HOUR_MICROSECOND = 57799 +const HOUR_MINUTE = 57800 +const HOUR_SECOND = 57801 +const MICROSECOND = 57802 +const MINUTE = 57803 +const MINUTE_MICROSECOND = 57804 +const MINUTE_SECOND = 57805 +const MONTH = 57806 +const QUARTER = 57807 +const SECOND = 57808 +const SECOND_MICROSECOND = 57809 +const YEAR_MONTH = 57810 +const WEEK = 57811 +const REPLACE = 57812 +const CONVERT = 57813 +const CAST = 57814 +const SUBSTR = 57815 +const SUBSTRING = 57816 +const SEPARATOR = 57817 +const TIMESTAMPADD = 57818 +const TIMESTAMPDIFF = 57819 +const WEIGHT_STRING = 57820 +const LTRIM = 57821 +const RTRIM = 57822 +const TRIM = 57823 +const JSON_ARRAY = 57824 +const JSON_OBJECT = 57825 +const JSON_QUOTE = 57826 +const JSON_DEPTH = 57827 +const JSON_TYPE = 57828 +const JSON_LENGTH = 57829 +const JSON_VALID = 57830 +const JSON_ARRAY_APPEND = 57831 +const JSON_ARRAY_INSERT = 57832 +const JSON_INSERT = 57833 +const JSON_MERGE = 57834 +const JSON_MERGE_PATCH = 57835 +const JSON_MERGE_PRESERVE = 57836 +const JSON_REMOVE = 57837 +const JSON_REPLACE = 57838 +const JSON_SET = 57839 +const JSON_UNQUOTE = 57840 +const COUNT = 57841 +const AVG = 57842 +const MAX = 57843 +const MIN = 57844 +const SUM = 57845 +const GROUP_CONCAT = 57846 +const BIT_AND = 57847 +const BIT_OR = 57848 +const BIT_XOR = 57849 +const STD = 57850 +const STDDEV = 57851 +const STDDEV_POP = 57852 +const STDDEV_SAMP = 57853 +const VAR_POP = 57854 +const VAR_SAMP = 57855 +const VARIANCE = 57856 +const REGEXP_INSTR = 57857 +const REGEXP_LIKE = 57858 +const REGEXP_REPLACE = 57859 +const REGEXP_SUBSTR = 57860 +const ExtractValue = 57861 +const UpdateXML = 57862 +const GET_LOCK = 57863 +const RELEASE_LOCK = 57864 +const RELEASE_ALL_LOCKS = 57865 +const IS_FREE_LOCK = 57866 +const IS_USED_LOCK = 57867 +const LOCATE = 57868 +const POSITION = 57869 +const MATCH = 57870 +const AGAINST = 57871 +const BOOLEAN = 57872 +const LANGUAGE = 57873 +const WITH = 57874 +const QUERY = 57875 +const EXPANSION = 57876 +const WITHOUT = 57877 +const VALIDATION = 57878 +const UNUSED = 57879 +const ARRAY = 57880 +const BYTE = 57881 +const CUME_DIST = 57882 +const DESCRIPTION = 57883 +const DENSE_RANK = 57884 +const EMPTY = 57885 +const EXCEPT = 57886 +const FIRST_VALUE = 57887 +const GROUPING = 57888 +const GROUPS = 57889 +const JSON_TABLE = 57890 +const LAG = 57891 +const LAST_VALUE = 57892 +const LATERAL = 57893 +const LEAD = 57894 +const NTH_VALUE = 57895 +const NTILE = 57896 +const OF = 57897 +const OVER = 57898 +const PERCENT_RANK = 57899 +const RANK = 57900 +const RECURSIVE = 57901 +const ROW_NUMBER = 57902 +const SYSTEM = 57903 +const WINDOW = 57904 +const ACTIVE = 57905 +const ADMIN = 57906 +const AUTOEXTEND_SIZE = 57907 +const BUCKETS = 57908 +const CLONE = 57909 +const COLUMN_FORMAT = 57910 +const COMPONENT = 57911 +const DEFINITION = 57912 +const ENFORCED = 57913 +const ENGINE_ATTRIBUTE = 57914 +const EXCLUDE = 57915 +const FOLLOWING = 57916 +const GET_MASTER_PUBLIC_KEY = 57917 +const HISTOGRAM = 57918 +const HISTORY = 57919 +const INACTIVE = 57920 +const INVISIBLE = 57921 +const LOCKED = 57922 +const MASTER_COMPRESSION_ALGORITHMS = 57923 +const MASTER_PUBLIC_KEY_PATH = 57924 +const MASTER_TLS_CIPHERSUITES = 57925 +const MASTER_ZSTD_COMPRESSION_LEVEL = 57926 +const NESTED = 57927 +const NETWORK_NAMESPACE = 57928 +const NOWAIT = 57929 +const NULLS = 57930 +const OJ = 57931 +const OLD = 57932 +const OPTIONAL = 57933 +const ORDINALITY = 57934 +const ORGANIZATION = 57935 +const OTHERS = 57936 +const PARTIAL = 57937 +const PATH = 57938 +const PERSIST = 57939 +const PERSIST_ONLY = 57940 +const PRECEDING = 57941 +const PRIVILEGE_CHECKS_USER = 57942 +const PROCESS = 57943 +const RANDOM = 57944 +const REFERENCE = 57945 +const REQUIRE_ROW_FORMAT = 57946 +const RESOURCE = 57947 +const RESPECT = 57948 +const RESTART = 57949 +const RETAIN = 57950 +const REUSE = 57951 +const ROLE = 57952 +const SECONDARY = 57953 +const SECONDARY_ENGINE = 57954 +const SECONDARY_ENGINE_ATTRIBUTE = 57955 +const SECONDARY_LOAD = 57956 +const SECONDARY_UNLOAD = 57957 +const SIMPLE = 57958 +const SKIP = 57959 +const SRID = 57960 +const THREAD_PRIORITY = 57961 +const TIES = 57962 +const UNBOUNDED = 57963 +const VCPU = 57964 +const VISIBLE = 57965 +const RETURNING = 57966 +const FORMAT_BYTES = 57967 +const FORMAT_PICO_TIME = 57968 +const PS_CURRENT_THREAD_ID = 57969 +const PS_THREAD_ID = 57970 +const GTID_SUBSET = 57971 +const GTID_SUBTRACT = 57972 +const WAIT_FOR_EXECUTED_GTID_SET = 57973 +const WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS = 57974 +const FORMAT = 57975 +const TREE = 57976 +const VITESS = 57977 +const TRADITIONAL = 57978 +const VTEXPLAIN = 57979 +const VEXPLAIN = 57980 +const PLAN = 57981 +const LOCAL = 57982 +const LOW_PRIORITY = 57983 +const KILL = 57984 +const USERS = 57985 +const NO_WRITE_TO_BINLOG = 57986 +const LOGS = 57987 +const ERROR = 57988 +const GENERAL = 57989 +const HOSTS = 57990 +const OPTIMIZER_COSTS = 57991 +const USER_RESOURCES = 57992 +const SLOW = 57993 +const CHANNEL = 57994 +const RELAY = 57995 +const EXPORT = 57996 +const CURRENT = 57997 +const ROW = 57998 +const ROWS = 57999 +const AVG_ROW_LENGTH = 58000 +const CONNECTION = 58001 +const CHECKSUM = 58002 +const DELAY_KEY_WRITE = 58003 +const ENCRYPTION = 58004 +const ENGINE = 58005 +const INSERT_METHOD = 58006 +const MAX_ROWS = 58007 +const MIN_ROWS = 58008 +const PACK_KEYS = 58009 +const PASSWORD = 58010 +const FIXED = 58011 +const DYNAMIC = 58012 +const COMPRESSED = 58013 +const REDUNDANT = 58014 +const COMPACT = 58015 +const ROW_FORMAT = 58016 +const STATS_AUTO_RECALC = 58017 +const STATS_PERSISTENT = 58018 +const STATS_SAMPLE_PAGES = 58019 +const STORAGE = 58020 +const MEMORY = 58021 +const DISK = 58022 +const PARTITIONS = 58023 +const LINEAR = 58024 +const RANGE = 58025 +const LIST = 58026 +const SUBPARTITION = 58027 +const SUBPARTITIONS = 58028 +const HASH = 58029 var yyToknames = [...]string{ "$end", @@ -1052,7 +1051,6 @@ var yyToknames = [...]string{ "DIFF", "PREPARE_MERGE_BACK", "MERGE_BACK", - "CLEAN_UP", "CDC", "CDCS", "WASM_BINARY_NAME", @@ -1457,12 +1455,12 @@ var yyExca = [...]int{ -2, 50, -1, 62, 1, 247, - 706, 247, + 705, 247, -2, 255, -1, 63, 135, 255, 176, 255, - 375, 255, + 374, 255, -2, 609, -1, 73, 36, 908, @@ -1470,10 +1468,10 @@ var yyExca = [...]int{ 251, 908, 286, 922, 287, 922, - 409, 910, - 414, 910, - 422, 910, - 424, 910, + 408, 910, + 413, 910, + 421, 910, + 423, 910, -2, 1016, -1, 78, 242, 946, @@ -1483,7 +1481,7 @@ var yyExca = [...]int{ -2, 221, -1, 145, 1, 248, - 706, 248, + 705, 248, -2, 255, -1, 156, 136, 495, @@ -1492,82 +1490,82 @@ var yyExca = [...]int{ -1, 175, 135, 255, 176, 255, - 375, 255, + 374, 255, -2, 618, - -1, 882, + -1, 881, 87, 1627, -2, 1472, - -1, 883, + -1, 882, 87, 1628, 221, 1632, -2, 1473, - -1, 884, + -1, 883, 221, 1631, -2, 52, - -1, 963, + -1, 962, 60, 1023, -2, 1038, - -1, 1059, + -1, 1058, 250, 53, 255, 53, -2, 506, - -1, 1148, + -1, 1147, 1, 666, - 706, 666, + 705, 666, -2, 255, - -1, 1471, + -1, 1470, 221, 1632, -2, 1473, - -1, 1619, + -1, 1618, 60, 1024, -2, 1043, - -1, 1620, + -1, 1619, 60, 1025, -2, 1044, - -1, 1678, + -1, 1677, 135, 255, 176, 255, - 375, 255, + 374, 255, -2, 545, - -1, 1764, + -1, 1763, 136, 495, 245, 495, -2, 598, - -1, 1774, + -1, 1773, 250, 54, 255, 54, -2, 1627, - -1, 2172, + -1, 2171, 221, 1636, -2, 1630, - -1, 2173, + -1, 2172, 221, 1632, -2, 1628, - -1, 2273, + -1, 2272, 135, 255, 176, 255, - 375, 255, + 374, 255, -2, 546, - -1, 2280, + -1, 2279, 26, 276, -2, 278, - -1, 2476, + -1, 2475, 239, 1610, -2, 221, - -1, 2692, + -1, 2691, 78, 108, 88, 108, -2, 1102, - -1, 2764, - 681, 817, + -1, 2763, + 680, 817, -2, 791, - -1, 2949, + -1, 2948, 50, 1578, -2, 1572, - -1, 3677, - 681, 817, + -1, 3676, + 680, 817, -2, 805, - -1, 3779, + -1, 3778, 90, 749, 95, 749, 105, 749, @@ -1618,944 +1616,944 @@ var yyExca = [...]int{ const yyPrivate = 57344 -const yyLast = 50017 +const yyLast = 49958 var yyAct = [...]int{ - 883, 3374, 2221, 3822, 1681, 3406, 3854, 3118, 3715, 3745, - 3823, 3001, 3405, 2201, 3404, 3008, 3638, 3577, 3065, 3865, - 2962, 3202, 3056, 1229, 1983, 3586, 3360, 5, 3654, 3344, - 3312, 3636, 2203, 3576, 2965, 985, 3070, 3067, 3066, 852, - 893, 3064, 52, 3069, 3068, 3434, 3626, 2623, 957, 3099, - 2905, 3016, 3085, 885, 2039, 2346, 853, 3084, 1641, 886, - 2665, 756, 3043, 738, 2966, 2963, 216, 848, 3235, 216, - 3439, 3756, 2840, 3243, 2790, 715, 2270, 3777, 846, 766, - 721, 3087, 2241, 2950, 2244, 2646, 3263, 2163, 1180, 2652, - 2225, 216, 2960, 3227, 2761, 1091, 734, 736, 2307, 2726, - 2334, 2312, 2824, 2787, 1739, 2727, 2377, 2728, 184, 2258, - 986, 2589, 1231, 216, 847, 2677, 2246, 53, 1789, 2245, - 2658, 1621, 2168, 1018, 2641, 2625, 2134, 2160, 2035, 959, - 51, 2054, 1993, 2810, 1209, 2355, 170, 2333, 2397, 2233, - 721, 216, 961, 721, 964, 1771, 735, 2314, 2719, 2133, - 1049, 1670, 2694, 1650, 2248, 1601, 1067, 118, 1597, 2058, - 1483, 1913, 2012, 122, 988, 1410, 3124, 1395, 1054, 1918, - 1909, 748, 1779, 1026, 1872, 1022, 1057, 1060, 1027, 2303, - 1055, 1056, 123, 1669, 743, 1742, 1003, 2304, 1005, 1655, - 1467, 2226, 2130, 976, 2169, 2067, 1443, 1227, 1219, 1939, - 1982, 967, 1732, 117, 102, 153, 188, 1763, 154, 1142, - 125, 148, 146, 147, 1632, 974, 742, 998, 1487, 3667, - 2754, 124, 966, 116, 101, 3855, 2348, 2349, 2350, 3700, - 3345, 3053, 2348, 2752, 3075, 965, 2784, 2783, 2392, 3337, - 1855, 113, 3806, 725, 113, 730, 113, 3072, 704, 2832, - 3290, 657, 2833, 1411, 2654, 3701, 2, 1491, 902, 903, - 904, 993, 997, 2015, 3075, 664, 3695, 3696, 1093, 149, - 2000, 155, 111, 1999, 710, 979, 113, 3409, 1998, 1411, - 1997, 1110, 1111, 1112, 1096, 1115, 1116, 1117, 1118, 1047, - 3073, 1121, 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, - 1130, 1131, 1132, 1133, 1134, 1135, 1136, 1137, 1019, 1996, - 1995, 129, 130, 131, 1071, 134, 3079, 3409, 143, 1012, - 3073, 212, 980, 958, 651, 1966, 1013, 960, 726, 1963, - 662, 728, 137, 661, 1070, 729, 1104, 2477, 723, 724, - 3801, 1046, 2198, 2199, 1406, 2621, 3079, 710, 953, 954, - 955, 956, 149, 1097, 1100, 1101, 1038, 1045, 1044, 1043, - 963, 1033, 1422, 2946, 3408, 902, 903, 904, 211, 3696, - 2774, 2381, 1428, 2909, 1628, 3810, 3808, 1011, 850, 851, - 1113, 3787, 3763, 3826, 3875, 3821, 3845, 3207, 1422, 1000, - 1001, 704, 150, 3206, 172, 2379, 2777, 987, 1025, 3785, - 3809, 3807, 3639, 2590, 3408, 193, 2005, 2323, 3791, 3792, - 3149, 1015, 3572, 3571, 3757, 2380, 3018, 3019, 704, 3350, - 149, 704, 3351, 3786, 1095, 1094, 3836, 103, 3672, 3076, - 2317, 3592, 3804, 701, 2486, 3387, 183, 1397, 3375, 3746, - 3753, 103, 171, 1444, 2740, 3591, 103, 2394, 2374, 105, - 1633, 2044, 3782, 103, 1011, 850, 851, 3386, 3169, 3076, - 2229, 190, 1752, 2622, 191, 3146, 1445, 1446, 1447, 1448, - 1449, 1450, 1451, 1453, 1452, 1454, 1455, 2668, 2997, 2800, - 2801, 663, 2831, 159, 160, 182, 181, 210, 705, 3763, - 3452, 2998, 2999, 2265, 2266, 680, 2483, 1417, 704, 2484, - 1409, 2816, 2669, 1975, 1976, 113, 1671, 1425, 1672, 1426, - 1427, 2809, 2703, 2264, 1042, 2702, 1155, 1156, 2704, 113, - 1199, 1187, 951, 1417, 113, 3017, 1188, 950, 1187, 1204, - 1205, 113, 3655, 1188, 1186, 677, 1185, 3020, 1037, 2715, - 1396, 1039, 2755, 3240, 694, 2283, 2282, 1200, 1158, 2661, - 2662, 704, 1193, 2874, 2200, 3157, 3155, 1407, 704, 1147, - 1223, 2474, 1974, 718, 1978, 722, 716, 1965, 1605, 1141, - 1667, 3125, 1040, 660, 704, 2811, 2788, 3578, 2316, 1153, - 1606, 3827, 689, 1919, 2403, 2762, 176, 157, 179, 164, - 156, 1919, 177, 178, 686, 692, 688, 3120, 1152, 1114, - 194, 2792, 3828, 2478, 2479, 2481, 2480, 2356, 2796, 200, - 165, 3044, 3113, 1168, 1169, 3614, 2229, 3615, 968, 2398, - 3114, 3101, 3857, 1873, 168, 166, 161, 162, 163, 167, - 1212, 705, 1166, 1167, 1845, 1221, 158, 3313, 1208, 2404, - 1042, 3579, 1034, 2465, 1886, 169, 1149, 3339, 1917, 1036, - 1035, 216, 973, 216, 2819, 3338, 216, 216, 705, 3556, - 1206, 705, 1988, 2454, 667, 1120, 669, 682, 1201, 707, - 1207, 706, 673, 1194, 671, 675, 683, 676, 1846, 670, - 1847, 681, 2227, 2228, 672, 684, 685, 691, 695, 696, - 698, 693, 690, 699, 665, 666, 697, 687, 1040, 679, - 708, 721, 1222, 721, 721, 1119, 658, 3122, 1004, 3802, - 2400, 969, 970, 971, 972, 1042, 1140, 3102, 3121, 1202, - 1203, 3335, 2402, 721, 216, 2359, 3413, 2242, 1014, 1008, - 1006, 3317, 1050, 3314, 1080, 1041, 1051, 1418, 705, 1416, - 1413, 1414, 1415, 1421, 1423, 1420, 1051, 1419, 2875, 2451, - 1089, 2452, 1471, 2453, 2908, 1088, 1183, 1412, 1189, 1190, - 1191, 1192, 185, 1418, 2401, 1416, 1413, 1414, 1415, 1421, - 1423, 1420, 1078, 1419, 1087, 1086, 1085, 1084, 1083, 1082, - 1139, 1077, 1627, 1412, 1224, 1225, 1226, 3666, 2753, 3106, - 1609, 705, 1756, 1048, 1090, 1023, 3020, 2484, 705, 1138, - 1063, 3759, 1458, 1144, 2823, 1014, 1008, 1006, 1023, 3876, - 3869, 3834, 1021, 1023, 705, 1146, 1197, 1145, 1778, 1469, - 1213, 1214, 1216, 1062, 1668, 1910, 999, 1893, 899, 2626, - 2628, 899, 659, 899, 1743, 3758, 3334, 1458, 2227, 2228, - 2717, 2378, 1461, 1462, 1463, 1464, 1388, 2820, 2385, 180, - 1750, 2384, 1475, 3147, 2798, 1904, 2791, 1398, 2794, 1107, - 3047, 1041, 1069, 2795, 2756, 2423, 2772, 2422, 3046, 3241, - 2426, 2427, 3077, 3078, 2424, 2425, 3100, 3790, 2793, 2320, - 2428, 1888, 1081, 1887, 3004, 3081, 1891, 1892, 3045, 2836, - 1889, 1890, 1749, 1748, 1471, 1857, 1856, 1858, 1859, 1860, - 1389, 1390, 3077, 3078, 1479, 3288, 3289, 1907, 3759, 3407, - 173, 1746, 1143, 174, 709, 3081, 3103, 3104, 656, 2321, - 1079, 3789, 1465, 1184, 2498, 106, 2319, 1777, 655, 3005, - 650, 3385, 3315, 3316, 3651, 2776, 1041, 702, 1595, 3277, - 1459, 1460, 3758, 186, 1007, 3259, 2376, 2699, 1099, 3407, - 198, 216, 703, 3007, 1062, 721, 721, 145, 1098, 2664, - 2322, 2485, 2826, 2808, 2598, 1068, 2807, 2825, 112, 2826, - 2318, 3002, 2047, 1923, 2825, 2271, 216, 1405, 1659, 2775, - 1560, 1923, 112, 1160, 1489, 2659, 1490, 112, 3018, 3019, - 1878, 206, 1458, 1610, 112, 3003, 721, 2627, 1612, 216, - 1455, 2996, 1616, 982, 1220, 3798, 1210, 961, 1157, 1613, - 3191, 721, 3744, 1154, 1920, 1921, 1924, 1922, 216, 3727, - 1196, 1007, 1920, 1921, 1924, 1922, 3687, 1493, 3009, 1596, - 3867, 1198, 3681, 3868, 3678, 3866, 187, 192, 189, 195, - 196, 197, 199, 201, 202, 203, 204, 3663, 3583, 1069, - 1210, 2068, 205, 207, 208, 209, 1940, 3582, 721, 1092, - 721, 3544, 3357, 2059, 1896, 2069, 1894, 1895, 721, 1899, - 1900, 1471, 1614, 1897, 1898, 122, 3330, 721, 721, 2841, - 721, 1215, 721, 721, 3320, 721, 721, 721, 721, 721, - 721, 1615, 1182, 1596, 123, 3253, 3110, 3017, 1471, 2943, - 2399, 1471, 721, 1471, 216, 1602, 1989, 1901, 1673, 3020, - 1589, 2860, 1566, 1567, 1568, 1569, 1570, 2059, 2329, 2515, - 1426, 1427, 125, 3837, 216, 2439, 2435, 2437, 2438, 2436, - 2442, 2443, 1427, 1877, 2440, 2441, 3448, 721, 1783, 3295, - 2375, 216, 1753, 1754, 1755, 2410, 2406, 2408, 2409, 2407, - 2413, 2414, 1068, 1211, 2411, 2412, 1840, 1072, 1062, 721, - 3294, 216, 1074, 3829, 2843, 1818, 1075, 1073, 1821, 1630, - 1823, 1148, 2373, 216, 216, 216, 216, 216, 216, 216, - 721, 1769, 958, 2363, 1634, 1635, 1636, 1637, 1638, 1786, - 1762, 1640, 960, 1599, 2066, 216, 1791, 1211, 1792, 1785, - 1794, 1796, 216, 1941, 1800, 1802, 1804, 1806, 1808, 1830, - 1831, 216, 216, 1782, 1069, 1836, 1837, 1744, 1664, 1665, - 1776, 2371, 1780, 1780, 1080, 1822, 1078, 1881, 3278, 1879, - 1880, 1611, 1884, 1885, 978, 1181, 1882, 1883, 3871, 1781, - 141, 2368, 1745, 3361, 3362, 3363, 3364, 3365, 3366, 3367, - 3368, 3369, 1106, 3877, 3006, 3717, 1069, 138, 1760, 3644, - 1759, 1758, 1772, 2853, 2852, 2851, 3564, 1069, 2845, 2368, - 2849, 1865, 2844, 1915, 2842, 1176, 3381, 1178, 3382, 2847, - 2372, 1874, 1944, 1875, 1863, 3563, 1876, 1852, 2846, 1948, - 3554, 1950, 1951, 1952, 1953, 1751, 1428, 3398, 1957, 1826, - 3718, 3397, 1961, 1962, 3645, 1964, 2848, 2850, 2370, 2007, - 2009, 2010, 3302, 211, 2108, 1175, 1177, 1068, 139, 1428, - 1942, 1943, 1628, 1062, 1065, 1066, 3301, 1023, 1911, 2064, - 2017, 1059, 1063, 2008, 1947, 1864, 3291, 150, 2065, 1171, - 3878, 1954, 1955, 1956, 2018, 1456, 1457, 2016, 1862, 1037, - 193, 1851, 1039, 3054, 1428, 149, 3036, 2724, 1170, 1068, - 1045, 1044, 1043, 1069, 2723, 1062, 1065, 1066, 1428, 1023, - 1068, 2722, 2326, 1059, 1063, 1072, 1062, 1936, 2234, 2235, - 1074, 2490, 2491, 2492, 1075, 1073, 1866, 1850, 721, 721, - 140, 1849, 1848, 2708, 1058, 1946, 1428, 902, 903, 904, - 1838, 721, 2165, 3841, 1628, 1076, 190, 2550, 1832, 191, - 216, 1960, 2100, 2089, 2090, 2091, 2092, 2102, 2093, 2094, - 2095, 2107, 2103, 2096, 2097, 2104, 2105, 2106, 2098, 2099, - 2101, 1425, 210, 1426, 1427, 1829, 1828, 1827, 3010, 1798, - 2862, 52, 3014, 1165, 52, 1428, 3117, 1164, 1173, 3013, - 1392, 1042, 1174, 1034, 1425, 3833, 1426, 1427, 710, 721, - 1036, 1035, 1179, 3285, 710, 1667, 1068, 2330, 1105, 1471, - 2328, 128, 1102, 1928, 1450, 1451, 1453, 1452, 1454, 1455, - 721, 1628, 127, 3015, 126, 1927, 1471, 1926, 3011, 1425, - 1925, 1426, 1427, 3012, 3830, 1172, 2013, 2706, 710, 1906, - 2042, 2042, 1905, 1425, 1870, 1426, 1427, 2344, 2343, 1040, - 1428, 721, 721, 2040, 2040, 2043, 1031, 1428, 1595, 1448, - 1449, 1450, 1451, 1453, 1452, 1454, 1455, 1869, 2011, 3839, - 1628, 1425, 2542, 1426, 1427, 1030, 1469, 2342, 2341, 2503, - 2021, 2340, 2339, 1444, 3799, 194, 1440, 2552, 1441, 2650, - 3856, 1628, 1628, 2060, 200, 3817, 1628, 1424, 1628, 3252, - 3793, 2173, 1442, 1456, 1457, 1439, 1445, 1446, 1447, 1448, - 1449, 1450, 1451, 1453, 1452, 1454, 1455, 1424, 1628, 3668, - 1425, 3743, 1426, 1427, 2170, 1971, 1972, 3741, 2020, 1444, - 2022, 2023, 2024, 2025, 2026, 2027, 2028, 2029, 2030, 2031, - 2032, 2033, 2034, 102, 216, 1990, 102, 2650, 3752, 1596, - 721, 2014, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1453, - 1452, 1454, 1455, 1445, 1446, 1447, 1448, 1449, 1450, 1451, - 1453, 1452, 1454, 1455, 1424, 3729, 1644, 2019, 3680, 3728, - 216, 2650, 3725, 721, 3684, 1425, 3683, 1426, 1427, 2212, - 3675, 2213, 1425, 216, 1426, 1427, 3674, 721, 3661, 2046, - 2173, 216, 3648, 216, 3647, 216, 216, 1428, 3646, 2122, - 3575, 2161, 1041, 2172, 3559, 2053, 2055, 2650, 3721, 2120, - 721, 1428, 1645, 2170, 3547, 2175, 2176, 3537, 1444, 2131, - 2835, 2070, 2071, 2072, 2073, 1432, 1433, 1434, 1435, 1436, - 1437, 1438, 1430, 3536, 2252, 2084, 122, 185, 3708, 1628, - 3600, 1445, 1446, 1447, 1448, 1449, 1450, 1451, 1453, 1452, - 1454, 1455, 2171, 3680, 3679, 123, 3447, 122, 1446, 1447, - 1448, 1449, 1450, 1451, 1453, 1452, 1454, 1455, 3599, 721, - 2165, 3348, 3665, 2216, 2162, 1428, 123, 3445, 1629, 1631, - 3394, 3769, 1628, 2164, 3581, 3580, 2174, 2195, 2280, 2177, - 2178, 3383, 1428, 2131, 3371, 3767, 1628, 897, 119, 721, - 3567, 1628, 2172, 2650, 3555, 121, 721, 721, 119, 120, - 721, 3164, 721, 2289, 2290, 2291, 2292, 2274, 979, 120, - 1594, 2284, 1593, 2285, 2286, 2287, 2288, 2205, 2256, 1592, - 2193, 3299, 1425, 2275, 1426, 1427, 3543, 3542, 3541, 2295, - 2296, 2297, 2298, 2215, 3356, 3355, 1425, 3284, 1426, 1427, - 3238, 2239, 721, 2357, 3348, 1628, 1428, 721, 2647, 3595, - 2309, 721, 721, 2219, 1628, 2650, 3346, 3540, 2315, 3319, - 3318, 2368, 1628, 3373, 1628, 2763, 2237, 1628, 2278, 3257, - 1628, 1012, 2262, 2261, 3131, 2260, 2563, 1628, 1013, 3129, - 2277, 2276, 128, 3126, 3123, 3109, 3108, 121, 3039, 216, - 3038, 3029, 3028, 127, 2814, 126, 3026, 3027, 216, 2325, - 1425, 2733, 1426, 1427, 121, 3024, 3025, 2738, 186, 3024, - 3023, 1428, 2354, 2674, 1628, 198, 2720, 1425, 1591, 1426, - 1427, 2942, 2941, 2279, 216, 216, 2484, 2785, 2310, 2306, - 216, 1628, 216, 2299, 2301, 2302, 2390, 2324, 216, 2389, - 2331, 2224, 2362, 2207, 1071, 2365, 1628, 2366, 2206, 1738, - 2766, 3254, 2332, 2759, 2760, 1780, 206, 2338, 2650, 2649, - 216, 2508, 1628, 1628, 1070, 2382, 1967, 216, 2310, 2361, - 2360, 2364, 1937, 1428, 1861, 2386, 1853, 1428, 2383, 2387, - 2388, 1425, 2643, 1426, 1427, 1428, 2045, 1628, 3713, 216, - 1428, 1843, 1839, 1835, 1428, 3765, 1628, 121, 721, 1834, - 1444, 187, 192, 189, 195, 196, 197, 199, 201, 202, - 203, 204, 1444, 1833, 2497, 1428, 1646, 205, 207, 208, - 209, 2393, 2554, 1445, 1446, 1447, 1448, 1449, 1450, 1451, - 1453, 1452, 1454, 1455, 1428, 1445, 1446, 1447, 1448, 1449, - 1450, 1451, 1453, 1452, 1454, 1455, 1425, 1218, 1426, 1427, - 1428, 2467, 2468, 2695, 1428, 2508, 2470, 3623, 1628, 1428, - 1217, 3621, 1628, 1428, 3686, 2471, 1471, 2695, 2173, 3618, - 1628, 2650, 1428, 2666, 3604, 1628, 1428, 2666, 3226, 1628, - 2674, 1428, 1738, 1737, 2991, 1428, 2673, 2512, 2369, 1428, - 2961, 2502, 3211, 2013, 2484, 1428, 1679, 1678, 2457, 3219, - 1628, 3252, 3026, 2931, 2263, 1428, 2463, 127, 1425, 2508, - 1426, 1427, 1425, 1648, 1426, 1427, 2696, 1428, 3216, 1628, - 1425, 1428, 1426, 1427, 2563, 1425, 2698, 1426, 1427, 1425, - 2696, 1426, 1427, 2500, 3214, 1628, 2495, 1428, 3179, 1628, - 2484, 2674, 2539, 3162, 1628, 2674, 2368, 2618, 1628, 3252, - 1425, 2538, 1426, 1427, 2368, 1428, 2616, 1628, 2351, 2232, - 2511, 2473, 1639, 2196, 2045, 2595, 1628, 1428, 1991, 1425, - 3831, 1426, 1427, 2578, 1628, 1973, 1424, 2482, 1903, 1647, - 2172, 1666, 1428, 141, 2494, 1425, 2496, 1426, 1427, 1425, - 3659, 1426, 1427, 1428, 1425, 1053, 1426, 1427, 1425, 2493, - 1426, 1427, 3551, 1428, 1052, 2570, 1628, 1425, 2014, 1426, - 1427, 1425, 1428, 1426, 1427, 113, 1425, 216, 1426, 1427, - 1425, 3272, 1426, 1427, 1425, 216, 1426, 1427, 1428, 2171, - 1425, 3796, 1426, 1427, 3731, 721, 3588, 2514, 3057, 3221, - 1425, 2505, 1426, 1427, 1642, 3545, 2522, 721, 3538, 3459, - 2730, 2504, 1425, 1428, 1426, 1427, 1425, 2630, 1426, 1427, - 3358, 113, 3329, 2537, 3326, 2476, 3297, 3331, 3174, 2042, - 3173, 216, 1425, 1740, 1426, 1427, 216, 3217, 1428, 2308, - 3115, 3107, 2040, 2632, 3059, 3055, 2670, 3189, 3040, 2786, - 1425, 2062, 1426, 1427, 2767, 2063, 2548, 2725, 2743, 2396, - 2305, 52, 1425, 2300, 1426, 1427, 2294, 2293, 2218, 1868, - 2688, 1428, 3185, 2690, 1775, 1770, 2633, 1425, 2635, 1426, - 1427, 1734, 142, 1428, 1147, 3119, 731, 3851, 1425, 2126, - 1426, 1427, 3589, 1428, 2323, 2651, 2210, 3171, 1425, 2729, - 1426, 1427, 3264, 3265, 721, 3849, 3824, 1425, 1969, 1426, - 1427, 3690, 3694, 216, 3609, 2689, 3267, 2158, 2644, 216, - 3051, 3050, 3170, 1425, 3049, 1426, 1427, 2961, 2746, 2660, - 2458, 1602, 2620, 721, 3590, 2758, 3303, 3270, 1428, 3269, - 721, 2983, 2187, 1428, 721, 721, 2984, 2730, 1425, 721, - 1426, 1427, 2980, 2640, 2979, 3167, 2716, 2718, 1428, 1629, - 2194, 1596, 2709, 3307, 1428, 1471, 2663, 2614, 2693, 2981, - 1970, 2223, 2648, 1425, 2982, 1426, 1427, 2613, 1428, 1643, - 2214, 216, 216, 216, 216, 216, 1428, 3304, 3305, 3306, - 2697, 3258, 2732, 2217, 2315, 2700, 2936, 2735, 2736, 2985, - 1428, 2683, 2684, 2707, 1428, 2935, 1425, 3245, 1426, 1427, - 3308, 3309, 3310, 989, 3440, 3244, 995, 995, 1425, 3643, - 1426, 1427, 2609, 2721, 2710, 2951, 2953, 2608, 1425, 3438, - 1426, 1427, 2780, 3429, 2954, 3428, 983, 3248, 216, 216, - 1902, 2731, 2607, 2782, 984, 1428, 2948, 2739, 2606, 949, - 2744, 3022, 1428, 2747, 2748, 2749, 1814, 2734, 2779, 1428, - 2713, 1109, 2605, 1810, 1108, 216, 1428, 3140, 1762, 2729, - 2604, 1428, 2829, 1425, 119, 1426, 1427, 2068, 1425, 1391, - 1426, 1427, 2773, 3427, 2593, 120, 721, 3250, 2587, 2768, - 2769, 2069, 128, 1425, 121, 1426, 1427, 150, 2778, 1425, - 3863, 1426, 1427, 127, 2327, 126, 2741, 1815, 1816, 1817, - 1811, 1812, 1813, 1425, 121, 1426, 1427, 2234, 2235, 119, - 2461, 1425, 2450, 1426, 1427, 3774, 121, 1428, 3664, 2586, - 120, 3584, 3021, 721, 2812, 1425, 2585, 1426, 1427, 1425, - 2813, 1426, 1427, 2584, 2687, 2220, 2934, 2815, 991, 992, - 2583, 2449, 2448, 2447, 2933, 2582, 2817, 2854, 2679, 2682, - 2683, 2684, 2680, 2818, 2681, 2685, 2869, 2446, 3264, 3265, - 2821, 721, 3631, 2445, 2837, 2444, 2838, 2434, 2433, 721, - 1425, 2827, 1426, 1427, 2828, 2432, 2431, 1425, 2430, 1426, - 1427, 2429, 1626, 1622, 1425, 2421, 1426, 1427, 2420, 1428, - 2419, 1425, 2915, 1426, 1427, 2418, 1425, 1623, 1426, 1427, - 721, 2581, 2417, 2416, 2855, 2679, 2682, 2683, 2684, 2680, - 2857, 2681, 2685, 2415, 216, 2912, 2839, 3228, 2488, 128, - 126, 721, 1735, 1736, 1625, 3630, 1624, 3612, 3446, 3444, - 127, 127, 126, 3443, 3436, 721, 2856, 3327, 1428, 1471, - 3249, 3247, 721, 721, 1471, 216, 216, 216, 216, 216, - 3060, 2878, 1425, 2252, 1426, 1427, 2352, 216, 2915, 1757, - 2884, 990, 3435, 216, 2973, 216, 128, 3236, 216, 216, - 216, 2958, 2938, 2580, 2910, 2666, 2990, 127, 2161, 3417, - 2161, 964, 3853, 3852, 2252, 2252, 2252, 2252, 2252, 2643, - 2914, 2911, 2876, 2913, 2540, 2886, 2967, 2888, 2939, 2894, - 2895, 2896, 2897, 2898, 2252, 2208, 2964, 2252, 1660, 1428, - 1652, 2964, 3852, 2899, 2900, 2901, 2902, 216, 2930, 3853, - 2926, 3649, 2579, 1428, 1425, 3283, 1426, 1427, 132, 133, - 721, 981, 141, 1471, 1987, 2937, 2940, 13, 721, 1986, - 3083, 1984, 10, 216, 9, 1985, 2955, 2956, 8, 2992, - 3, 115, 2993, 2927, 2928, 2929, 1, 3098, 3311, 966, - 3105, 2972, 2975, 2976, 2974, 2978, 216, 2977, 3359, 122, - 1428, 2986, 965, 1425, 2395, 1426, 1427, 2789, 2994, 2742, - 3042, 1162, 1915, 1916, 1394, 1393, 3287, 3000, 123, 3784, - 678, 216, 2197, 2573, 216, 3034, 3035, 1428, 1600, 2501, - 3062, 3825, 3031, 2506, 3033, 3032, 2509, 2572, 2510, 3780, - 3781, 1854, 1844, 2517, 3376, 2132, 3041, 2519, 2520, 2521, - 3585, 3063, 1428, 3091, 2358, 3325, 2313, 2527, 2528, 2529, - 2530, 2531, 2532, 2533, 2534, 2535, 2536, 2315, 3082, 1428, - 1061, 175, 2272, 3097, 1425, 2273, 1426, 1427, 3748, 136, - 1016, 135, 1064, 3061, 2571, 1195, 2353, 3349, 1425, 3090, - 1426, 1427, 2714, 2543, 2544, 2545, 2546, 2547, 2281, 2549, - 1685, 1683, 1684, 2551, 721, 1682, 1687, 2556, 2557, 1686, - 2558, 2568, 3148, 2561, 2541, 2562, 3138, 3139, 3190, 2565, - 1977, 1428, 3136, 2569, 3135, 1603, 717, 2574, 2575, 2576, - 2577, 2686, 3143, 216, 3144, 1425, 2567, 1426, 1427, 711, - 2588, 213, 2591, 2592, 3153, 1674, 3150, 3151, 1653, 3152, - 2594, 2596, 3154, 2566, 3156, 3203, 3158, 2599, 2600, 2601, - 2602, 2603, 1425, 1428, 1426, 1427, 1103, 668, 2610, 2611, - 3030, 2612, 2391, 674, 2615, 2617, 2217, 1476, 2619, 3127, - 3128, 1968, 3130, 2932, 3132, 3133, 2701, 1425, 2631, 1426, - 1427, 1428, 216, 1010, 653, 1428, 1626, 1622, 3234, 1002, - 2209, 1428, 2634, 1009, 1425, 2564, 1426, 1427, 1428, 3552, - 2969, 1623, 1428, 3242, 2947, 2949, 952, 3205, 2653, 3232, - 2952, 216, 3229, 3230, 3209, 2945, 3642, 3437, 3237, 3726, - 2711, 2252, 1649, 3246, 3261, 3239, 1619, 1620, 1625, 1429, - 1624, 3210, 2513, 2057, 1466, 2249, 3271, 2560, 216, 3412, - 216, 216, 216, 3275, 3276, 3251, 1425, 2006, 1426, 1427, - 721, 721, 3332, 3333, 3268, 740, 1024, 739, 1484, 737, - 2636, 2667, 1431, 3273, 887, 2559, 3274, 2624, 1661, 2555, - 2678, 2676, 2675, 3091, 3281, 2553, 3282, 2459, 2257, 3266, - 3262, 3776, 2518, 2251, 2247, 2642, 2507, 838, 1425, 837, - 1426, 1427, 749, 741, 733, 836, 835, 3280, 3089, 3760, - 3292, 3293, 2797, 3116, 3298, 2799, 3300, 2712, 3112, 3090, - 721, 721, 721, 721, 1408, 1618, 1425, 727, 1426, 1427, - 1425, 1032, 1426, 1427, 3145, 3670, 1425, 2487, 1426, 1427, - 3168, 1617, 2087, 1425, 2088, 1426, 1427, 1425, 3677, 1426, - 1427, 3071, 3353, 3354, 3343, 3052, 2764, 2345, 81, 56, - 3637, 3714, 834, 831, 3414, 3415, 3416, 2906, 2907, 3336, - 3372, 3697, 3698, 3340, 3341, 3342, 830, 3699, 2115, 1404, - 1401, 3800, 1979, 114, 3370, 38, 37, 36, 35, 34, - 28, 27, 26, 25, 24, 21, 20, 31, 23, 22, - 19, 18, 3074, 3820, 3393, 3862, 144, 65, 62, 60, - 152, 151, 63, 59, 1150, 57, 2645, 100, 99, 98, - 97, 96, 95, 50, 49, 48, 47, 46, 45, 44, - 43, 42, 216, 33, 32, 17, 16, 15, 14, 12, - 11, 7, 3389, 6, 41, 3432, 40, 30, 39, 29, - 4, 2751, 2347, 1471, 0, 0, 0, 0, 721, 0, - 721, 0, 0, 0, 3410, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3453, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3455, 0, 0, 52, 1651, 0, 0, - 0, 0, 0, 3433, 0, 2864, 2865, 2866, 2867, 2868, - 3457, 2967, 3441, 2042, 0, 2967, 3442, 0, 3449, 3451, - 2964, 0, 0, 0, 2873, 0, 2040, 3461, 0, 0, - 721, 0, 3553, 0, 3462, 3463, 1741, 0, 0, 0, - 0, 0, 0, 216, 3401, 0, 721, 3465, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3565, 721, 0, 211, 0, - 3548, 0, 3546, 3550, 3549, 0, 0, 0, 0, 0, - 0, 0, 3557, 0, 0, 0, 0, 0, 3569, 3587, - 0, 3570, 150, 0, 0, 0, 3574, 0, 0, 0, - 3607, 0, 0, 0, 0, 193, 0, 3606, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 721, 0, 0, - 0, 721, 721, 3560, 3561, 3562, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2042, 0, 0, 0, 2970, 0, 0, 0, 0, 0, - 721, 3611, 3653, 2040, 3610, 3613, 0, 0, 0, 3616, - 0, 190, 2988, 0, 191, 0, 0, 3632, 3633, 3635, - 3634, 0, 0, 0, 0, 0, 0, 3650, 0, 1938, - 0, 0, 0, 3652, 0, 0, 0, 210, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2967, - 0, 3656, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 721, - 0, 3658, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 216, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3660, 0, 1151, 0, 1159, 3662, - 0, 1161, 1163, 0, 0, 0, 0, 0, 0, 721, - 216, 3688, 0, 3673, 0, 3641, 0, 3676, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3682, 3685, - 194, 0, 0, 3669, 0, 0, 0, 3142, 0, 200, - 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3159, 3160, 3161, - 721, 3163, 3165, 0, 0, 0, 0, 0, 0, 1400, - 1471, 0, 721, 0, 0, 3172, 0, 0, 0, 0, - 3176, 3177, 3178, 3180, 3181, 3182, 3183, 3712, 0, 3184, - 3719, 3186, 3187, 3188, 0, 0, 3192, 3193, 3194, 3195, - 3196, 3197, 3198, 3199, 3200, 3201, 0, 721, 721, 3730, - 3732, 0, 3724, 0, 3208, 0, 3735, 3212, 3742, 3213, - 3215, 0, 3218, 3220, 52, 3222, 3223, 3224, 3225, 721, - 3587, 3749, 3747, 3231, 3740, 3737, 3736, 2964, 0, 3734, - 0, 3739, 3738, 216, 721, 3703, 0, 0, 3704, 0, - 3772, 2001, 2002, 2003, 2004, 0, 3775, 0, 3783, 0, - 3794, 0, 3788, 0, 0, 0, 0, 0, 0, 0, - 0, 3255, 3256, 0, 0, 3260, 0, 0, 0, 3761, - 3803, 3762, 0, 3692, 0, 0, 0, 0, 0, 0, - 0, 3702, 185, 0, 721, 0, 0, 0, 0, 0, - 2048, 2049, 3814, 3819, 0, 2051, 0, 995, 995, 2056, - 0, 0, 0, 2061, 0, 0, 0, 721, 0, 3832, - 0, 0, 0, 0, 0, 3835, 2074, 2075, 2076, 2077, - 2078, 2079, 2080, 2081, 2082, 2083, 721, 3761, 721, 3762, - 2109, 2110, 2111, 2112, 2113, 2114, 2116, 3850, 2121, 3805, - 2123, 2124, 2125, 3848, 2127, 2128, 2129, 3843, 2135, 2136, + 882, 3373, 2220, 3821, 1680, 3405, 3853, 3117, 3714, 3744, + 3822, 3000, 3404, 2200, 3403, 3007, 3637, 3576, 3064, 3864, + 2961, 3201, 3055, 3585, 1982, 3359, 3343, 5, 3653, 3575, + 3311, 3635, 2202, 3069, 3066, 984, 3065, 3063, 1228, 851, + 892, 3068, 52, 3067, 2964, 3433, 3625, 2622, 956, 3084, + 2904, 847, 3098, 884, 2038, 3015, 852, 2345, 1640, 885, + 3083, 755, 3042, 737, 2965, 2962, 216, 1090, 2789, 216, + 3438, 3755, 2839, 3242, 765, 714, 2269, 3776, 2240, 3234, + 720, 2664, 3086, 2949, 2243, 2645, 3262, 2823, 2651, 2306, + 2224, 216, 845, 2959, 2162, 846, 1179, 735, 3123, 2725, + 3226, 2333, 733, 2588, 1738, 2760, 2311, 2786, 2726, 2376, + 1230, 2727, 1017, 216, 2257, 2676, 2245, 53, 184, 985, + 2640, 2657, 2133, 2167, 2244, 2809, 2354, 1066, 2624, 958, + 1620, 2053, 51, 2159, 1208, 2034, 170, 1992, 2332, 734, + 720, 216, 960, 720, 963, 2396, 1788, 1770, 2313, 2718, + 2232, 1048, 1669, 1053, 2693, 1649, 1482, 747, 2132, 2247, + 1600, 2057, 2011, 1596, 987, 1912, 1394, 1917, 1409, 1908, + 118, 1778, 122, 1059, 1056, 1025, 1741, 1026, 2302, 1871, + 1021, 1054, 123, 1055, 1668, 1002, 1654, 1004, 742, 975, + 1466, 1442, 117, 2303, 2168, 2129, 966, 1981, 1218, 102, + 1938, 148, 146, 2066, 147, 1731, 2225, 153, 154, 1141, + 973, 124, 724, 741, 1486, 997, 3666, 1226, 188, 2753, + 116, 101, 965, 125, 3854, 3344, 1762, 2, 2347, 2348, + 2349, 2347, 3052, 1631, 2783, 2782, 3289, 964, 111, 2751, + 1092, 2391, 3336, 113, 113, 1854, 1410, 3805, 3074, 2831, + 729, 2832, 3695, 1109, 1110, 1111, 2653, 1114, 1115, 1116, + 1117, 992, 996, 1120, 1121, 1122, 1123, 1124, 1125, 1126, + 1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134, 1135, 1136, + 663, 149, 129, 130, 131, 1070, 134, 1490, 978, 143, + 155, 3699, 212, 1018, 1095, 650, 703, 725, 137, 3408, + 3694, 661, 656, 3074, 3072, 3408, 709, 1103, 113, 722, + 723, 979, 1999, 957, 1998, 1997, 3071, 3700, 1996, 952, + 953, 954, 955, 1011, 959, 1410, 1995, 2014, 1994, 1965, + 3078, 962, 1069, 1962, 660, 2197, 2198, 1046, 901, 902, + 903, 1012, 901, 902, 903, 113, 1405, 1044, 1043, 2620, + 1042, 1096, 1099, 1100, 727, 1421, 1045, 3800, 728, 3072, + 999, 1000, 1627, 986, 149, 211, 2945, 1037, 709, 1024, + 2476, 1032, 2380, 3825, 2773, 2908, 3874, 1014, 3820, 3809, + 3807, 3844, 3206, 3786, 1427, 3078, 3407, 3756, 3205, 150, + 2378, 172, 3407, 2776, 3638, 1112, 1010, 849, 850, 2322, + 2589, 3784, 193, 3695, 3808, 3806, 3003, 2004, 3148, 3571, + 3790, 3791, 703, 3570, 3349, 1094, 2379, 3350, 3017, 3018, + 1093, 3835, 2316, 3591, 3803, 3785, 103, 103, 3386, 1396, + 3671, 3374, 149, 183, 1421, 3745, 103, 3752, 2485, 171, + 703, 2739, 2393, 3075, 2373, 1632, 3590, 1010, 849, 850, + 3385, 3004, 2043, 103, 700, 3781, 105, 3168, 190, 1751, + 2667, 191, 3762, 2799, 2800, 2702, 3762, 1670, 2701, 1671, + 2996, 2703, 2997, 2998, 2621, 3006, 3451, 2264, 2265, 2830, + 159, 160, 182, 181, 210, 2668, 1974, 1975, 2482, 1416, + 2263, 703, 1408, 3001, 2815, 2808, 1198, 950, 3075, 949, + 1203, 1204, 662, 2483, 113, 113, 703, 1222, 3654, 1199, + 3017, 3018, 1192, 1186, 113, 1186, 679, 3002, 1187, 1424, + 1187, 1425, 1426, 2714, 2282, 2281, 1185, 3016, 1184, 2754, + 3239, 113, 1395, 3119, 703, 704, 3156, 703, 3154, 3019, + 2660, 2661, 703, 2473, 2873, 1973, 717, 2199, 2228, 1977, + 3008, 715, 721, 3124, 1604, 2810, 676, 1964, 3312, 1406, + 2787, 2761, 2355, 3577, 1666, 693, 1605, 2422, 1416, 2421, + 2315, 3826, 2425, 2426, 659, 1113, 2423, 2424, 2795, 2228, + 1140, 2397, 2427, 176, 157, 179, 164, 156, 3856, 177, + 178, 3043, 3827, 1167, 1168, 1918, 3613, 194, 3614, 1844, + 3112, 2450, 688, 2451, 1872, 2452, 200, 165, 3113, 1201, + 1202, 1165, 1166, 1211, 685, 691, 687, 1220, 1892, 3016, + 1207, 168, 166, 161, 162, 163, 167, 3578, 2402, 1200, + 1205, 3019, 1193, 158, 2464, 1443, 2477, 2478, 2480, 2479, + 1206, 3338, 169, 1845, 1148, 1846, 2818, 3337, 1221, 1003, + 216, 704, 216, 3120, 3313, 216, 216, 3145, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, 1987, + 2453, 2438, 2434, 2436, 2437, 2435, 2441, 2442, 1119, 704, + 2439, 2440, 2401, 2403, 666, 3121, 668, 681, 2791, 706, + 2399, 705, 672, 1118, 670, 674, 682, 675, 3555, 669, + 720, 680, 720, 720, 671, 683, 684, 690, 694, 695, + 697, 692, 689, 698, 664, 665, 696, 686, 1079, 678, + 707, 2358, 720, 216, 2400, 3801, 1077, 3412, 2241, 1417, + 704, 1415, 1412, 1413, 1414, 1420, 1422, 1419, 2874, 1418, + 1049, 1050, 1088, 3334, 1050, 704, 1013, 1007, 1005, 1411, + 1087, 1470, 1086, 211, 1085, 2907, 657, 1084, 185, 1083, + 1082, 1081, 1076, 1182, 3316, 1188, 1189, 1190, 1191, 2226, + 2227, 3105, 1608, 704, 1755, 3005, 704, 150, 1089, 2483, + 1457, 704, 1626, 3665, 1457, 1196, 2752, 3019, 3875, 1022, + 193, 1223, 1224, 1225, 1062, 3833, 1022, 1013, 1007, 1005, + 2226, 2227, 1468, 2822, 1041, 1022, 1154, 1155, 1417, 1020, + 1415, 1412, 1413, 1414, 1420, 1422, 1419, 1667, 1418, 1212, + 1213, 1215, 1061, 1909, 1777, 2819, 1742, 1877, 1411, 898, + 898, 2625, 2627, 2707, 2384, 2377, 3100, 2797, 1157, 998, + 1047, 1460, 1461, 1462, 1463, 180, 190, 2383, 3045, 191, + 2755, 1474, 3314, 3315, 1895, 3240, 1893, 1894, 3333, 1898, + 1899, 1903, 1039, 1896, 1897, 1397, 1080, 2835, 3044, 1152, + 2319, 2497, 210, 1098, 1078, 1749, 1106, 1387, 3789, 1061, + 3758, 3046, 658, 1097, 3758, 3076, 3077, 1151, 1068, 2794, + 3287, 3288, 1748, 1470, 898, 1747, 1478, 3868, 3080, 1856, + 1855, 1857, 1858, 1859, 2771, 1906, 173, 1464, 1745, 174, + 2320, 655, 654, 649, 3757, 3650, 2375, 2318, 3757, 1388, + 1389, 3276, 3788, 3384, 1183, 1918, 2807, 2716, 3258, 2806, + 3406, 106, 3101, 1776, 708, 2698, 3406, 1594, 2775, 186, + 3076, 3077, 2663, 2790, 2825, 2793, 198, 1458, 1459, 2824, + 216, 2321, 971, 3080, 720, 720, 2597, 701, 2658, 3009, + 2046, 2317, 1006, 3013, 2484, 2792, 112, 112, 2825, 1146, + 3012, 1658, 702, 2824, 1559, 216, 112, 145, 1404, 1488, + 1159, 1489, 2774, 2995, 1922, 194, 2270, 206, 1457, 1195, + 1916, 1067, 1609, 112, 200, 720, 1454, 1611, 216, 2626, + 1197, 1615, 1209, 1939, 3014, 981, 960, 1219, 1612, 3010, + 720, 1181, 3797, 1006, 3011, 2328, 3743, 216, 1156, 3726, + 3686, 3190, 1153, 1209, 1040, 1919, 1920, 1923, 1921, 3680, + 1595, 3677, 187, 192, 189, 195, 196, 197, 199, 201, + 202, 203, 204, 3662, 3146, 3582, 1885, 3581, 205, 207, + 208, 209, 1091, 2058, 3543, 3356, 1492, 720, 3329, 720, + 3319, 3252, 3109, 1880, 2942, 1878, 1879, 720, 1883, 1884, + 1470, 2398, 1881, 1882, 1988, 1900, 720, 720, 2067, 720, + 1613, 720, 720, 122, 720, 720, 720, 720, 720, 720, + 1614, 3099, 2068, 123, 1595, 1672, 2859, 1470, 1214, 3836, + 1470, 720, 1470, 216, 1426, 2058, 1588, 2514, 3447, 1601, + 2374, 1425, 1426, 1752, 1753, 1754, 3294, 3866, 3293, 1876, + 3867, 1782, 3865, 216, 2372, 1041, 1139, 2362, 1785, 1784, + 3102, 3103, 2370, 1775, 125, 3828, 720, 1079, 1077, 3716, + 216, 1565, 1566, 1567, 1568, 1569, 185, 977, 1817, 1210, + 1940, 1820, 3277, 1822, 1180, 1839, 2367, 1629, 720, 3870, + 216, 1598, 3563, 967, 1036, 1864, 3380, 1038, 3381, 1768, + 1210, 957, 216, 216, 216, 216, 216, 216, 216, 720, + 1829, 1830, 3562, 2367, 3717, 1639, 1835, 1836, 959, 1761, + 1138, 1147, 1779, 1779, 216, 2371, 1610, 972, 1175, 3876, + 1177, 216, 1633, 1634, 1635, 1636, 1637, 1743, 1137, 3553, + 216, 216, 1143, 1821, 1781, 1663, 1664, 3397, 3643, 1068, + 3396, 2065, 2369, 1790, 1145, 1791, 1144, 1793, 1795, 1863, + 1427, 1799, 1801, 1803, 1805, 1807, 3301, 1780, 1174, 1176, + 1862, 1744, 2409, 2405, 2407, 2408, 2406, 2412, 2413, 3163, + 2164, 2410, 2411, 2006, 2008, 2009, 968, 969, 970, 1759, + 1757, 2840, 1170, 3644, 1771, 1750, 1041, 1873, 1033, 1874, + 1914, 1851, 1875, 1068, 3300, 1035, 1034, 2007, 1758, 3290, + 1169, 1427, 1887, 709, 1886, 3053, 3877, 1890, 1891, 1943, + 1036, 1888, 1889, 1038, 1068, 3035, 1947, 2723, 1949, 1950, + 1951, 1952, 1105, 2541, 1861, 1956, 2489, 2490, 2491, 1960, + 1961, 2722, 1963, 1825, 1922, 1627, 901, 902, 903, 1941, + 1942, 1142, 1067, 2721, 1039, 2325, 1910, 186, 1061, 1064, + 1065, 1627, 1022, 1946, 198, 1850, 1058, 1062, 2063, 1427, + 1953, 1954, 1955, 1865, 1849, 1040, 2842, 2064, 1848, 1044, + 1043, 1847, 1042, 1068, 1837, 1919, 1920, 1923, 1921, 1449, + 1450, 1452, 1451, 1453, 1454, 1424, 149, 1425, 1426, 1831, + 1172, 1828, 3116, 3251, 1173, 206, 1067, 1827, 1826, 1797, + 1164, 1071, 1061, 1163, 1178, 1391, 1073, 720, 720, 1666, + 1074, 1072, 1041, 2329, 1033, 1945, 1935, 1067, 3284, 709, + 720, 1035, 1034, 1061, 1064, 1065, 2327, 1022, 1927, 216, + 1959, 1058, 1062, 1068, 2705, 709, 1424, 1171, 1425, 1426, + 187, 192, 189, 195, 196, 197, 199, 201, 202, 203, + 204, 1926, 1057, 2343, 2342, 1925, 205, 207, 208, 209, + 52, 1924, 2107, 52, 2852, 2851, 2850, 2341, 2340, 2844, + 1039, 2848, 1905, 2843, 119, 2841, 1067, 1030, 720, 1904, + 2846, 1071, 1061, 2339, 2338, 120, 1073, 2016, 1470, 2845, + 1074, 1072, 1869, 1868, 1424, 1029, 1425, 1426, 3832, 720, + 3829, 2017, 1455, 1456, 2015, 1470, 1040, 2847, 2849, 1643, + 3798, 1075, 2649, 3855, 1627, 2012, 3667, 1427, 3792, 2041, + 2041, 3360, 3361, 3362, 3363, 3364, 3365, 3366, 3367, 3368, + 720, 720, 2039, 2039, 2042, 3742, 1067, 1594, 1104, 1468, + 1627, 3599, 1101, 1445, 1446, 1447, 1448, 1449, 1450, 1452, + 1451, 1453, 1454, 2010, 3740, 1644, 2059, 3728, 1443, 2020, + 2099, 2088, 2089, 2090, 2091, 2101, 2092, 2093, 2094, 2106, + 2102, 2095, 2096, 2103, 2104, 2105, 2097, 2098, 2100, 3683, + 2172, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1452, 1451, + 1453, 1454, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, + 2019, 1427, 2021, 2022, 2023, 2024, 2025, 2026, 2027, 2028, + 2029, 2030, 2031, 2032, 2033, 1443, 2013, 102, 2169, 141, + 102, 1989, 1427, 216, 1970, 1971, 1427, 3816, 1627, 720, + 1595, 3682, 1040, 2549, 1423, 1627, 138, 2553, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, 2649, + 3751, 2018, 1424, 3674, 1425, 1426, 1427, 3679, 3727, 216, + 2164, 2861, 720, 3598, 2161, 2649, 3724, 3540, 2211, 3673, + 2212, 2160, 216, 2163, 2649, 3720, 720, 3660, 2045, 2172, + 216, 2121, 216, 3647, 216, 216, 1627, 896, 1427, 3646, + 2171, 2551, 3707, 1627, 2052, 2054, 3645, 139, 1427, 720, + 3539, 1423, 1627, 2119, 3574, 2174, 2175, 1627, 3679, 3678, + 3840, 1627, 3372, 2130, 3347, 3664, 2762, 2169, 2069, 2070, + 2071, 2072, 1427, 2251, 1431, 1432, 1433, 1434, 1435, 1436, + 1437, 1429, 2083, 3558, 122, 3546, 1424, 128, 1425, 1426, + 3838, 1627, 3580, 3579, 123, 2170, 3566, 1627, 127, 3536, + 126, 3535, 1427, 2649, 3554, 122, 3446, 1424, 720, 1425, + 1426, 1424, 3444, 1425, 1426, 123, 3393, 1628, 1630, 140, + 1427, 2215, 3768, 1627, 2737, 2173, 3382, 2279, 2176, 2177, + 1427, 2194, 3766, 1627, 1427, 3542, 3541, 2130, 720, 2171, + 3370, 1424, 1593, 1425, 1426, 720, 720, 3355, 3354, 720, + 1592, 720, 2288, 2289, 2290, 2291, 3764, 1627, 2192, 1591, + 2283, 2274, 2284, 2285, 2286, 2287, 2273, 1427, 1627, 2204, + 978, 3298, 2255, 1424, 3283, 1425, 1426, 119, 2294, 2295, + 2296, 2297, 2214, 1424, 121, 1425, 1426, 3830, 120, 2356, + 2308, 720, 1427, 3237, 2238, 2646, 720, 3130, 2218, 3128, + 720, 720, 2277, 2511, 3622, 1627, 2278, 1424, 2314, 1425, + 1426, 1427, 2236, 3125, 3620, 1627, 3347, 1627, 3617, 1627, + 1423, 2260, 2261, 2259, 1011, 2649, 3345, 3318, 3317, 113, + 2276, 3122, 2275, 2367, 1627, 2233, 2234, 1424, 216, 1425, + 1426, 3038, 1012, 1627, 3256, 1627, 3253, 216, 2562, 1627, + 2353, 3603, 1627, 3108, 3107, 1424, 1427, 1425, 1426, 2324, + 3037, 3028, 3027, 3712, 1070, 1424, 2813, 1425, 1426, 1424, + 2732, 1425, 1426, 216, 216, 1779, 2510, 2305, 3795, 216, + 2719, 216, 2309, 3025, 3026, 2323, 1427, 216, 2298, 2300, + 2301, 1590, 2331, 2361, 2330, 2389, 2364, 2337, 2365, 3023, + 3024, 3730, 1424, 2381, 1425, 1426, 1427, 2388, 211, 216, + 2223, 1069, 2206, 1427, 2205, 2359, 216, 1966, 2382, 2363, + 2360, 1936, 2309, 1860, 1647, 1852, 1427, 1424, 1842, 1425, + 1426, 2385, 150, 2694, 1443, 2386, 2387, 1439, 216, 1440, + 3225, 1627, 3023, 3022, 3685, 193, 1424, 720, 1425, 1426, + 2673, 1627, 1427, 1441, 1455, 1456, 1438, 1444, 1445, 1446, + 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, 2941, 2940, + 3218, 1627, 2649, 1427, 2502, 2392, 1444, 1445, 1446, 1447, + 1448, 1449, 1450, 1452, 1451, 1453, 1454, 2483, 2784, 2694, + 1646, 1424, 2673, 1425, 1426, 1427, 2695, 3215, 1627, 1427, + 121, 190, 1737, 2765, 191, 1443, 2697, 2834, 2466, 2467, + 3213, 1627, 3587, 2469, 1838, 1470, 1427, 2172, 2758, 2759, + 1427, 1424, 2470, 1425, 1426, 2649, 2648, 210, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, 1834, + 1427, 1424, 2012, 1425, 1426, 1443, 2456, 2496, 1424, 1833, + 1425, 1426, 2695, 2462, 1427, 2501, 1832, 3178, 1627, 1627, + 1427, 1424, 2483, 1425, 1426, 1645, 2499, 1427, 1444, 1445, + 1446, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, 3161, + 1627, 2507, 1627, 2617, 1627, 2494, 1427, 1424, 2642, 1425, + 1426, 1217, 1427, 2044, 1627, 1737, 1736, 1678, 1677, 1427, + 2615, 1627, 2960, 121, 2594, 1627, 2990, 1216, 1424, 2472, + 1425, 1426, 127, 3251, 1427, 2665, 2483, 2672, 2665, 1427, + 3210, 2368, 3025, 1427, 2577, 1627, 2493, 2171, 2495, 2481, + 1424, 1427, 1425, 1426, 1424, 2930, 1425, 1426, 2569, 1627, + 194, 2262, 1427, 2013, 141, 3658, 2507, 2562, 2492, 200, + 2538, 1424, 3550, 1425, 1426, 1424, 2537, 1425, 1426, 1427, + 2504, 2507, 2367, 2350, 2231, 1638, 216, 2195, 2044, 1990, + 2503, 1972, 2673, 1902, 216, 1424, 3594, 1425, 1426, 2367, + 1427, 1423, 2170, 3271, 720, 2475, 1665, 2673, 2513, 1424, + 3251, 1425, 1426, 1052, 3302, 1424, 720, 1425, 1426, 3330, + 2521, 1051, 1424, 3220, 1425, 1426, 2629, 3216, 1641, 3544, + 3537, 3458, 3357, 3328, 3118, 3188, 3325, 2536, 2041, 3296, + 216, 1424, 113, 1425, 1426, 216, 3184, 1424, 1427, 1425, + 1426, 2039, 2631, 3173, 1424, 2669, 1425, 1426, 1813, 3172, + 2061, 2547, 1427, 3170, 2062, 3303, 3304, 3305, 1739, 1424, + 52, 1425, 1426, 1427, 1424, 2307, 1425, 1426, 1424, 2687, + 1425, 1426, 2689, 2728, 3169, 3114, 1424, 3106, 1425, 1426, + 3058, 3054, 2632, 3039, 2634, 2785, 730, 1424, 2125, 1425, + 1426, 2766, 2742, 1427, 2650, 2395, 2304, 2299, 2293, 1814, + 1815, 1816, 2292, 720, 1424, 2217, 1425, 1426, 1867, 1427, + 1774, 185, 216, 1427, 2688, 1769, 2157, 1733, 216, 142, + 3056, 2729, 3166, 1427, 2729, 1424, 2643, 1425, 1426, 2659, + 3588, 1146, 720, 2322, 2757, 1601, 2619, 2724, 1427, 720, + 2209, 2186, 1427, 720, 720, 3263, 3264, 2613, 720, 1427, + 1968, 3850, 3848, 3823, 3693, 2715, 2717, 2647, 1628, 2193, + 3608, 3266, 1595, 2731, 1470, 2639, 3269, 2662, 2734, 2735, + 3050, 2708, 2692, 1424, 3049, 1425, 1426, 2612, 1427, 3048, + 216, 216, 216, 216, 216, 1427, 3689, 1424, 2960, 1425, + 1426, 2696, 2216, 2608, 2314, 2699, 3268, 2607, 1424, 1427, + 1425, 1426, 2745, 2706, 2457, 3257, 2979, 2606, 2709, 2982, + 2978, 1427, 1969, 988, 2983, 2779, 994, 994, 3589, 2222, + 1427, 1642, 2605, 2720, 1427, 2213, 2604, 2980, 1424, 2935, + 1425, 1426, 2981, 2603, 1427, 2934, 3437, 216, 216, 3642, + 3439, 2730, 2781, 3428, 1424, 3427, 1425, 1426, 1424, 3247, + 1425, 1426, 128, 2746, 2747, 2748, 2743, 2738, 1424, 2947, + 1425, 1426, 2592, 127, 216, 126, 1901, 1761, 2778, 2586, + 3244, 3021, 948, 1424, 121, 1425, 1426, 1424, 3243, 1425, + 1426, 3306, 2712, 2585, 1424, 720, 1425, 1426, 2777, 1108, + 2767, 2768, 186, 3426, 1809, 2584, 2733, 1427, 2984, 198, + 2682, 2683, 982, 2326, 2583, 2950, 2952, 2067, 2582, 1107, + 983, 3139, 2728, 1424, 2953, 1425, 1426, 2828, 2581, 1390, + 1424, 2068, 1425, 1426, 119, 2811, 1427, 2772, 3307, 3308, + 3309, 2812, 720, 1627, 1424, 120, 1425, 1426, 2814, 150, + 206, 1810, 1811, 1812, 3249, 121, 1424, 2816, 1425, 1426, + 3773, 2233, 2234, 119, 2817, 1424, 2853, 1425, 1426, 1424, + 121, 1425, 1426, 3862, 120, 2868, 2740, 2460, 3663, 1424, + 720, 1425, 1426, 3583, 2820, 2837, 3020, 2686, 720, 2836, + 2826, 2580, 2219, 2827, 2449, 187, 192, 189, 195, 196, + 197, 199, 201, 202, 203, 204, 990, 991, 2933, 2448, + 128, 205, 207, 208, 209, 2447, 2932, 3227, 1427, 720, + 2579, 127, 2446, 126, 2445, 2444, 2914, 2443, 2838, 2856, + 2854, 2433, 121, 216, 2911, 2432, 2431, 2430, 1427, 2429, + 720, 2428, 1424, 2420, 1425, 1426, 2678, 2681, 2682, 2683, + 2679, 2419, 2680, 2684, 720, 2418, 2417, 1427, 1470, 2416, + 2855, 720, 720, 1470, 216, 216, 216, 216, 216, 2415, + 2414, 1424, 2251, 1425, 1426, 2883, 216, 2877, 2160, 2487, + 2160, 126, 216, 2972, 216, 2909, 128, 216, 216, 216, + 2957, 3630, 2914, 3629, 3611, 2989, 1427, 127, 127, 126, + 963, 3445, 2578, 2251, 2251, 2251, 2251, 2251, 3443, 2963, + 2913, 3442, 2937, 3435, 2963, 2966, 2910, 2938, 2912, 2885, + 3326, 2887, 2572, 2251, 3248, 3246, 2251, 2893, 2894, 2895, + 2896, 2897, 3059, 1427, 2351, 1756, 216, 2898, 2899, 2900, + 2901, 2571, 2925, 2926, 2927, 2928, 989, 128, 3434, 720, + 2936, 3235, 1470, 1424, 2665, 1425, 1426, 720, 127, 3082, + 3852, 3851, 216, 3416, 2939, 2929, 2954, 2955, 2991, 2642, + 2875, 2992, 2539, 1424, 2207, 1425, 1426, 1659, 965, 1651, + 2570, 2974, 2975, 3851, 2977, 216, 3033, 3034, 2973, 3852, + 2985, 2976, 1424, 964, 1425, 1426, 3648, 122, 3282, 1914, + 132, 133, 2993, 3061, 980, 141, 1986, 123, 2971, 13, + 216, 1985, 1983, 216, 10, 9, 2999, 2567, 2500, 3, + 1984, 115, 2505, 8, 3030, 2508, 3032, 2509, 3031, 1, + 3097, 1424, 2516, 1425, 1426, 3310, 2518, 2519, 2520, 3040, + 3104, 1427, 3358, 2394, 2788, 2741, 2526, 2527, 2528, 2529, + 2530, 2531, 2532, 2533, 2534, 2535, 3090, 2314, 1427, 3089, + 3041, 3060, 3081, 1161, 1915, 1393, 1392, 3286, 1424, 3783, + 1425, 1426, 677, 3096, 2196, 1599, 3824, 3779, 3780, 1853, + 1843, 3375, 2542, 2543, 2544, 2545, 2546, 2131, 2548, 1427, + 3584, 3062, 2550, 720, 2357, 3324, 2555, 2556, 3134, 2557, + 3126, 3127, 2560, 3129, 2561, 3131, 3132, 2312, 2564, 1060, + 175, 3135, 2568, 3137, 3138, 1602, 2573, 2574, 2575, 2576, + 2271, 2272, 216, 3143, 3152, 2566, 3747, 3142, 136, 2587, + 1015, 2590, 2591, 135, 1063, 3149, 3150, 1194, 3151, 2593, + 2595, 3153, 2565, 3155, 2352, 3157, 2598, 2599, 2600, 2601, + 2602, 3348, 2713, 2280, 1684, 1682, 1683, 2609, 2610, 1427, + 2611, 1681, 1686, 2614, 2616, 2216, 1685, 2618, 3147, 2540, + 3189, 1976, 716, 2563, 2685, 710, 1424, 2630, 1425, 1426, + 213, 216, 1427, 1673, 652, 1652, 1427, 3202, 1102, 667, + 1427, 3029, 2390, 1424, 1427, 1425, 1426, 673, 3204, 1475, + 1967, 2931, 2700, 1009, 1001, 3208, 951, 2208, 3233, 1427, + 216, 2633, 1008, 3551, 2968, 3231, 3241, 3236, 3228, 3229, + 2251, 2946, 3245, 3238, 1424, 2948, 1425, 1426, 1428, 2652, + 2951, 2944, 3641, 3436, 3725, 3270, 2710, 216, 1648, 216, + 216, 216, 3209, 2559, 3260, 3250, 2512, 2056, 1465, 720, + 720, 3331, 3332, 3267, 2248, 3411, 1023, 1483, 3272, 2005, + 1625, 1621, 739, 3274, 3275, 3273, 2558, 738, 3280, 736, + 2554, 3291, 3292, 2635, 2552, 1622, 3281, 2666, 2517, 1430, + 886, 2678, 2681, 2682, 2683, 2679, 3090, 2680, 2684, 3089, + 2623, 3263, 3264, 2506, 1424, 1660, 1425, 1426, 2677, 2675, + 1734, 1735, 1624, 3297, 1623, 3299, 2674, 2458, 2256, 720, + 720, 720, 720, 3265, 3261, 3775, 2250, 1424, 2246, 1425, + 1426, 1424, 2641, 1425, 1426, 1424, 837, 1425, 1426, 1424, + 3335, 1425, 1426, 836, 3339, 3340, 3341, 1625, 1621, 748, + 740, 3352, 3353, 732, 1424, 835, 1425, 1426, 834, 3279, + 3088, 3759, 1622, 2796, 3115, 2798, 2711, 3111, 1407, 3371, + 1617, 726, 1031, 3144, 3669, 2486, 3167, 3369, 1616, 2086, + 2087, 3676, 3070, 3342, 3051, 2763, 2344, 1618, 1619, 1624, + 81, 1623, 56, 3636, 3713, 833, 830, 3413, 3414, 3415, + 2905, 2906, 3696, 3392, 3697, 829, 3698, 2114, 1403, 1400, + 3799, 1978, 114, 38, 37, 36, 35, 34, 28, 27, + 26, 25, 24, 21, 20, 31, 23, 22, 19, 18, + 3073, 216, 3819, 3861, 144, 65, 62, 60, 152, 151, + 63, 3388, 59, 1149, 3431, 57, 2644, 100, 99, 98, + 97, 96, 1470, 95, 50, 49, 48, 720, 47, 720, + 46, 45, 44, 3409, 43, 42, 33, 32, 17, 16, + 15, 14, 12, 11, 7, 6, 41, 40, 30, 39, + 3452, 29, 4, 2750, 2346, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 1650, 0, 0, 0, + 0, 0, 3454, 2963, 2863, 2864, 2865, 2866, 2867, 3456, + 2966, 3440, 2041, 3432, 2966, 3441, 0, 3448, 3450, 0, + 0, 0, 0, 2872, 0, 2039, 3460, 0, 0, 720, + 0, 3552, 0, 0, 0, 1740, 0, 0, 0, 0, + 0, 0, 216, 0, 0, 720, 3464, 0, 3400, 0, + 0, 0, 0, 0, 3461, 3462, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3564, 720, 0, 0, 0, 3547, + 0, 3545, 0, 0, 3549, 0, 3548, 0, 0, 0, + 0, 3556, 0, 0, 0, 0, 0, 3569, 0, 0, + 0, 3568, 0, 0, 3559, 3560, 3561, 0, 3573, 3606, + 0, 0, 0, 3586, 0, 0, 3605, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, + 720, 720, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2041, + 0, 0, 0, 2969, 0, 0, 0, 0, 0, 720, + 3610, 3652, 2039, 3609, 3612, 0, 0, 0, 3615, 0, + 0, 2987, 0, 0, 0, 0, 3631, 3632, 3634, 3633, + 0, 0, 0, 0, 0, 0, 0, 0, 1937, 0, + 0, 0, 3651, 0, 0, 0, 3649, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2966, 0, + 3655, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, + 3657, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 216, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3659, 3661, 1150, 0, 1158, 0, 0, + 1160, 1162, 0, 0, 0, 0, 0, 0, 720, 216, + 3687, 0, 3672, 3675, 0, 0, 0, 0, 0, 3640, + 0, 0, 0, 0, 0, 0, 3681, 0, 3684, 0, + 0, 0, 3668, 0, 0, 0, 3141, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3158, 3159, 3160, 720, + 3162, 3164, 0, 0, 0, 0, 0, 0, 1399, 1470, + 0, 720, 0, 0, 3171, 0, 0, 0, 0, 3175, + 3176, 3177, 3179, 3180, 3181, 3182, 3711, 0, 3183, 3718, + 3185, 3186, 3187, 0, 0, 3191, 3192, 3193, 3194, 3195, + 3196, 3197, 3198, 3199, 3200, 0, 720, 720, 3729, 3731, + 0, 3723, 0, 3207, 0, 3734, 3211, 3741, 3212, 3214, + 2963, 3217, 3219, 52, 3221, 3222, 3223, 3224, 720, 3746, + 3739, 3736, 3230, 3735, 3733, 0, 3702, 0, 3738, 3703, + 3737, 0, 216, 720, 3586, 3748, 0, 0, 0, 3771, + 2000, 2001, 2002, 2003, 0, 3774, 0, 3782, 0, 3793, + 0, 3787, 0, 0, 0, 0, 0, 0, 0, 0, + 3254, 3255, 0, 0, 3259, 0, 0, 0, 3760, 3802, + 3761, 0, 0, 0, 0, 0, 0, 3691, 0, 0, + 0, 0, 0, 720, 0, 3701, 0, 0, 0, 2047, + 2048, 3813, 3818, 0, 2050, 0, 994, 994, 2055, 0, + 0, 0, 2060, 0, 0, 0, 720, 0, 3831, 0, + 0, 0, 0, 0, 3834, 2073, 2074, 2075, 2076, 2077, + 2078, 2079, 2080, 2081, 2082, 720, 3760, 720, 3761, 2108, + 2109, 2110, 2111, 2112, 2113, 2115, 3849, 2120, 3804, 2122, + 2123, 2124, 3847, 2126, 2127, 2128, 3842, 2134, 2135, 2136, 2137, 2138, 2139, 2140, 2141, 2142, 2143, 2144, 2145, 2146, 2147, 2148, 2149, 2150, 2151, 2152, 2153, 2154, 2155, 2156, - 2157, 2042, 2159, 3872, 2166, 2167, 995, 3347, 995, 995, - 995, 995, 995, 3870, 2040, 3847, 3864, 0, 2179, 2180, - 2181, 2182, 2183, 2184, 2185, 2186, 3607, 2188, 2189, 2190, - 2191, 2192, 3881, 3882, 3880, 3844, 3846, 3761, 0, 3762, - 898, 0, 0, 104, 0, 0, 0, 0, 0, 3858, - 1479, 0, 0, 0, 0, 0, 2042, 0, 0, 0, - 0, 0, 0, 0, 1663, 995, 0, 0, 3384, 2040, - 3879, 3388, 0, 0, 0, 0, 0, 0, 3818, 0, - 0, 0, 0, 1680, 0, 0, 0, 0, 1702, 0, - 0, 0, 0, 186, 2230, 2231, 0, 0, 3399, 0, - 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3403, 0, 0, 0, 0, 0, 0, - 2269, 0, 0, 0, 0, 3411, 0, 0, 0, 0, - 0, 0, 0, 3418, 103, 54, 55, 105, 0, 0, - 0, 206, 0, 962, 0, 104, 0, 0, 0, 0, + 2041, 2158, 3871, 2165, 2166, 994, 3346, 994, 994, 994, + 994, 994, 3869, 2039, 3846, 3863, 0, 2178, 2179, 2180, + 2181, 2182, 2183, 2184, 2185, 3606, 2187, 2188, 2189, 2190, + 2191, 3880, 3881, 3879, 3843, 3845, 3760, 0, 3761, 0, + 897, 0, 1478, 104, 0, 0, 0, 0, 3857, 0, + 3817, 0, 0, 0, 0, 2041, 0, 0, 0, 0, + 1701, 0, 0, 1662, 994, 0, 0, 3383, 2039, 3878, + 3387, 0, 0, 0, 0, 0, 0, 0, 211, 0, + 0, 0, 1679, 0, 0, 0, 0, 0, 0, 2756, + 0, 0, 0, 2229, 2230, 0, 0, 3398, 0, 0, + 0, 0, 150, 0, 172, 0, 1701, 0, 0, 0, + 0, 0, 3402, 0, 0, 193, 0, 0, 0, 2268, + 0, 0, 0, 0, 3410, 0, 0, 0, 0, 0, + 0, 0, 3417, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 961, 0, 104, 183, 0, 0, 0, + 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 961, 0, 0, 1823, 0, + 0, 190, 0, 0, 191, 0, 0, 0, 0, 0, + 2310, 0, 0, 1028, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1764, 1765, 182, 181, 210, 0, 0, + 0, 0, 0, 0, 1689, 1870, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1928, 1929, 1930, + 1931, 1932, 1933, 1934, 0, 0, 0, 0, 0, 0, + 1689, 0, 0, 0, 0, 0, 0, 0, 0, 1944, + 0, 0, 0, 0, 0, 3565, 1948, 0, 0, 0, + 0, 0, 0, 0, 3572, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1702, + 0, 0, 0, 0, 0, 0, 176, 1766, 179, 0, + 1763, 0, 177, 178, 0, 0, 0, 0, 0, 0, + 194, 0, 3592, 3593, 0, 3595, 0, 3596, 3597, 200, + 0, 0, 3600, 3601, 3602, 0, 3604, 3607, 0, 0, + 0, 0, 0, 0, 0, 1702, 0, 0, 0, 0, + 0, 0, 3616, 3618, 3619, 3621, 3623, 3624, 3626, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1715, + 1718, 1719, 1720, 1721, 1722, 1723, 3656, 1724, 1725, 1727, + 1728, 1726, 1729, 1730, 1703, 1704, 1705, 1706, 1687, 1688, + 1716, 0, 1690, 0, 1691, 1692, 1693, 1694, 1695, 1696, + 1697, 1698, 1699, 0, 0, 1700, 1707, 1708, 1709, 1710, + 0, 1711, 1712, 1713, 1714, 1715, 1718, 1719, 1720, 1721, + 1722, 1723, 0, 1724, 1725, 1727, 1728, 1726, 1729, 1730, + 1703, 1704, 1705, 1706, 1687, 1688, 1716, 0, 1690, 0, + 1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 0, + 0, 1700, 1707, 1708, 1709, 1710, 0, 1711, 1712, 1713, + 1714, 185, 0, 0, 1993, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2515, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2522, 2523, 2524, 2525, + 0, 0, 0, 0, 0, 0, 0, 0, 3692, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3708, 0, + 0, 0, 0, 0, 3709, 3710, 0, 0, 180, 0, + 0, 1483, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1717, 0, 3721, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3753, 3754, 0, 0, 0, 0, 173, + 1717, 0, 174, 0, 0, 0, 0, 3763, 3765, 3767, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 186, 0, 0, 3796, 0, 0, 0, 198, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1650, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3815, 0, + 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2235, 0, 0, + 0, 0, 0, 0, 0, 2239, 0, 2242, 0, 0, + 1993, 0, 0, 3837, 3839, 3841, 0, 0, 0, 0, + 1227, 0, 1227, 1227, 0, 187, 192, 189, 195, 196, + 197, 199, 201, 202, 203, 204, 0, 0, 0, 0, + 0, 205, 207, 208, 209, 3860, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3872, 3873, 0, 0, 0, 0, 0, 0, 0, + 961, 1467, 1472, 1473, 0, 1476, 0, 1477, 1479, 1480, + 1481, 0, 1484, 1485, 1487, 1487, 0, 1487, 1491, 1491, + 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, + 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, + 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, + 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, + 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, + 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, + 1553, 1554, 1555, 1556, 1557, 0, 0, 0, 0, 1558, + 0, 1560, 1561, 1562, 1563, 1564, 0, 0, 0, 0, + 0, 0, 0, 0, 1491, 1491, 1491, 1491, 1491, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1570, 1571, + 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, + 1582, 1583, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1993, 0, 2833, 0, 0, 0, 1597, + 0, 0, 2404, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 994, 0, 0, 2857, 2858, 0, + 0, 2860, 0, 0, 2862, 0, 0, 0, 2454, 2455, + 0, 0, 0, 0, 2459, 0, 0, 0, 0, 0, + 0, 0, 2463, 0, 2869, 2870, 2871, 0, 0, 0, + 0, 0, 1603, 0, 0, 0, 2876, 0, 961, 2878, + 2879, 2880, 961, 0, 2465, 2881, 2882, 961, 0, 2134, + 2884, 2468, 211, 2886, 0, 0, 2888, 2889, 2890, 2891, + 0, 0, 0, 1760, 2892, 2134, 2134, 2134, 2134, 2134, + 0, 0, 0, 2471, 0, 0, 150, 0, 172, 0, + 0, 0, 0, 994, 0, 0, 0, 0, 0, 193, + 2915, 2916, 2917, 2918, 2919, 2920, 0, 0, 0, 2921, + 2922, 0, 2923, 0, 2924, 0, 0, 899, 0, 2164, + 0, 881, 900, 0, 103, 54, 55, 105, 0, 0, + 183, 0, 2040, 0, 0, 0, 171, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 58, 88, - 89, 0, 86, 90, 0, 962, 0, 0, 0, 1824, - 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2311, 0, 1029, 0, 0, 187, 192, 189, 195, - 196, 197, 199, 201, 202, 203, 204, 0, 0, 0, - 74, 0, 205, 207, 208, 209, 1871, 0, 0, 0, - 0, 0, 113, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1690, 0, 0, 0, 0, 0, 1929, 1930, - 1931, 1932, 1933, 1934, 1935, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1945, 0, 0, 0, 0, 0, 3566, 1949, 0, 0, - 0, 0, 0, 0, 0, 3573, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3593, 3594, 0, 3596, 1703, 3597, 3598, - 0, 0, 0, 3601, 3602, 3603, 0, 3605, 3608, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3617, 3619, 3620, 3622, 3624, 3625, 3627, + 89, 0, 86, 90, 0, 190, 0, 0, 191, 0, + 0, 87, 2958, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1764, 1765, 182, + 181, 210, 0, 0, 0, 0, 0, 2988, 0, 0, + 74, 0, 0, 0, 0, 699, 0, 0, 0, 0, + 0, 719, 113, 0, 0, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, + 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, + 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, + 941, 942, 943, 944, 945, 946, 947, 0, 0, 0, + 0, 3057, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 719, 0, 0, 719, 0, 0, 0, 0, 1227, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 176, 1766, 179, 0, 1763, 0, 177, 178, 0, 0, + 0, 0, 0, 0, 194, 0, 0, 0, 113, 0, + 0, 899, 0, 200, 0, 887, 900, 901, 902, 903, + 888, 0, 0, 889, 890, 0, 891, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 896, 904, 905, 0, 0, 0, 0, 0, 0, 0, 61, 64, 67, 66, 69, 0, 85, 0, 0, 94, - 72, 91, 0, 0, 0, 0, 0, 0, 0, 0, + 72, 91, 0, 0, 0, 0, 0, 0, 3165, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, - 0, 0, 0, 0, 73, 108, 107, 3657, 0, 83, - 84, 68, 0, 0, 0, 0, 0, 92, 93, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1716, 1719, - 1720, 1721, 1722, 1723, 1724, 0, 1725, 1726, 1728, 1729, - 1727, 1730, 1731, 1704, 1705, 1706, 1707, 1688, 1689, 1717, - 0, 1691, 0, 1692, 1693, 1694, 1695, 1696, 1697, 1698, - 1699, 1700, 110, 0, 1701, 1708, 1709, 1710, 1711, 0, - 1712, 1713, 1714, 1715, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 75, 76, - 0, 77, 78, 79, 80, 1994, 0, 0, 0, 0, + 2691, 0, 3174, 0, 73, 108, 107, 3091, 3092, 83, + 84, 68, 0, 0, 0, 0, 0, 92, 93, 906, + 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, + 947, 0, 110, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 838, 2744, 0, 0, + 0, 0, 0, 0, 0, 185, 0, 75, 76, 0, + 77, 78, 79, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3093, 0, 0, 0, 1227, 1227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 0, 0, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2516, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2523, 2524, 2525, - 2526, 0, 0, 0, 0, 0, 0, 0, 0, 3693, + 0, 0, 0, 0, 0, 2801, 2802, 2803, 2804, 2805, + 0, 0, 0, 0, 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3709, - 0, 0, 0, 0, 0, 3710, 3711, 0, 0, 0, - 0, 0, 1484, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3722, 0, 0, + 0, 0, 180, 0, 0, 0, 0, 0, 0, 0, + 0, 3327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1993, 2821, 0, 0, 0, 0, 3094, 3095, + 0, 0, 0, 0, 3351, 0, 1019, 0, 0, 1027, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2829, + 0, 0, 106, 173, 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1718, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 106, 3754, 3755, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3764, 3766, - 3768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3797, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 186, 0, 0, 0, + 0, 0, 0, 198, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 3389, 0, + 3390, 0, 0, 3391, 112, 0, 3394, 3395, 853, 0, + 0, 857, 0, 854, 855, 3399, 0, 0, 856, 0, + 0, 0, 0, 0, 206, 3401, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 112, 0, 0, 0, 1651, + 0, 0, 0, 0, 0, 0, 0, 3418, 0, 0, + 3419, 0, 3420, 3421, 0, 3422, 0, 3423, 0, 0, + 0, 0, 3424, 0, 0, 0, 0, 0, 0, 187, + 192, 189, 195, 196, 197, 199, 201, 202, 203, 204, + 0, 0, 0, 0, 0, 205, 207, 208, 209, 3449, + 0, 0, 0, 0, 2249, 0, 0, 0, 0, 0, + 3457, 0, 0, 3459, 0, 0, 0, 0, 0, 0, + 82, 0, 0, 0, 71, 3463, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 3816, + 0, 0, 0, 3538, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2236, 0, - 0, 0, 0, 0, 0, 0, 2240, 0, 2243, 0, - 0, 1994, 0, 0, 3838, 3840, 3842, 0, 0, 0, - 0, 1228, 0, 1228, 1228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3861, 0, 0, 0, + 0, 719, 1386, 719, 719, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 82, 3873, 3874, 0, 71, 0, 0, 0, 0, - 0, 962, 1468, 1473, 1474, 0, 1477, 0, 1478, 1480, - 1481, 1482, 0, 1485, 1486, 1488, 1488, 0, 1488, 1492, - 1492, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, - 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, - 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, - 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, - 1533, 1534, 1535, 1536, 1537, 1538, 1539, 1540, 1541, 1542, - 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, 1551, 1552, - 1553, 1554, 1555, 1556, 1557, 1558, 0, 0, 0, 0, - 1559, 0, 1561, 1562, 1563, 1564, 1565, 0, 0, 0, - 0, 0, 0, 0, 0, 1492, 1492, 1492, 1492, 1492, - 0, 0, 1702, 0, 0, 0, 0, 0, 0, 1571, - 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, - 1582, 1583, 1584, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1994, 0, 2834, 0, 0, 0, - 1598, 0, 0, 2405, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 995, 0, 0, 2858, 2859, - 0, 0, 2861, 0, 0, 2863, 0, 0, 0, 2455, - 2456, 0, 0, 0, 0, 2460, 0, 0, 0, 0, - 0, 0, 0, 2464, 0, 2870, 2871, 2872, 0, 0, - 0, 0, 0, 1604, 0, 0, 0, 2877, 0, 962, - 2879, 2880, 2881, 962, 0, 2466, 2882, 2883, 962, 0, - 2135, 2885, 2469, 0, 2887, 0, 0, 2889, 2890, 2891, - 2892, 0, 0, 0, 0, 2893, 2135, 2135, 2135, 2135, - 2135, 0, 0, 0, 2472, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 995, 0, 1690, 0, 0, 0, - 0, 2916, 2917, 2918, 2919, 2920, 2921, 0, 0, 0, - 2922, 2923, 211, 2924, 0, 2925, 0, 0, 0, 0, - 0, 882, 0, 2757, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 150, 0, 172, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2959, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 183, 1703, 0, 0, 0, 0, 171, 0, 2989, 0, - 0, 0, 0, 0, 0, 700, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 190, 0, 0, 191, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1765, 1766, 182, - 181, 210, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3058, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 720, 0, 0, 0, 0, 0, - 1228, 0, 1716, 1719, 1720, 1721, 1722, 1723, 1724, 0, - 1725, 1726, 1728, 1729, 1727, 1730, 1731, 1704, 1705, 1706, - 1707, 1688, 1689, 1717, 0, 1691, 0, 1692, 1693, 1694, - 1695, 1696, 1697, 1698, 1699, 1700, 0, 0, 1701, 1708, - 1709, 1710, 1711, 900, 1712, 1713, 1714, 1715, 901, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2041, 0, - 176, 1767, 179, 0, 1764, 0, 177, 178, 0, 0, - 0, 0, 0, 0, 194, 0, 0, 0, 0, 0, - 0, 0, 0, 200, 0, 0, 0, 0, 0, 3166, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2692, 0, 3175, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 907, 908, 909, 910, 911, 912, 913, 914, 915, - 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, - 946, 947, 948, 0, 0, 0, 839, 0, 2745, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1718, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1228, 1228, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 104, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 185, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2802, 2803, 2804, 2805, - 2806, 0, 900, 0, 2165, 0, 719, 901, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2041, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3328, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3483, 3485, 3484, 3502, 3503, 3504, 3505, 3506, - 3507, 3508, 788, 1994, 2822, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3352, 1020, 0, 0, 1028, - 0, 0, 0, 180, 0, 0, 0, 0, 0, 0, - 2830, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 719, 0, 0, 0, 0, 113, 0, + 0, 899, 0, 0, 0, 887, 900, 901, 902, 903, + 888, 3047, 0, 889, 890, 1028, 891, 0, 0, 0, + 0, 0, 1469, 0, 0, 0, 0, 0, 0, 0, + 896, 904, 905, 0, 0, 0, 0, 3085, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3091, 3092, 0, + 0, 3639, 0, 0, 0, 3133, 0, 0, 3136, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, - 947, 948, 0, 0, 173, 0, 0, 174, 0, 3390, - 0, 3391, 0, 0, 3392, 0, 0, 3395, 3396, 0, - 0, 0, 0, 0, 0, 0, 3400, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3402, 186, 0, 0, - 0, 0, 0, 0, 198, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3419, 0, - 0, 3420, 0, 3421, 3422, 0, 3423, 0, 3424, 0, - 0, 0, 0, 3425, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3450, 0, 0, 0, 0, 2250, 0, 0, 0, 0, - 0, 3458, 0, 0, 3460, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3464, 0, 0, 0, - 187, 192, 189, 195, 196, 197, 199, 201, 202, 203, - 204, 0, 0, 0, 3539, 0, 205, 207, 208, 209, + 947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 720, 1387, 720, 720, 3489, 0, 0, 1029, + 0, 0, 0, 0, 1469, 0, 0, 0, 0, 0, + 0, 0, 0, 3093, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3497, 3498, 0, 720, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3048, 0, 0, 0, 1029, 0, 0, 0, - 0, 0, 0, 1470, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3086, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 719, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3111, 854, 0, 767, 858, 769, 855, 856, 0, - 765, 768, 857, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3640, 0, 0, 0, 3134, 0, 0, 3137, - 0, 0, 0, 0, 0, 0, 0, 0, 786, 787, - 3482, 3486, 3487, 3488, 3499, 3500, 3501, 3509, 3511, 819, - 3510, 3512, 3513, 3514, 3517, 3518, 3519, 3520, 3515, 3516, - 3521, 3466, 3470, 3467, 3468, 3469, 3481, 3471, 3472, 3473, - 3474, 3475, 3476, 3477, 3478, 3479, 3480, 3522, 3523, 3524, - 3525, 3526, 3527, 3492, 3496, 3495, 3493, 3494, 3490, 3491, + 0, 3690, 0, 0, 0, 2488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 859, 0, 860, 1470, 0, 864, 0, 0, - 0, 866, 865, 0, 867, 833, 832, 0, 0, 861, - 862, 0, 863, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3233, 0, + 0, 0, 0, 0, 3704, 0, 719, 3705, 0, 3706, + 0, 0, 0, 0, 0, 0, 0, 0, 3094, 3095, + 0, 719, 0, 0, 2498, 3295, 0, 0, 0, 0, + 0, 0, 1732, 0, 0, 0, 1229, 0, 1229, 1229, + 0, 0, 0, 0, 0, 1746, 0, 0, 0, 0, + 0, 0, 3320, 0, 3321, 3322, 3323, 0, 1398, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 719, 0, + 1773, 0, 0, 0, 0, 0, 0, 0, 719, 0, + 0, 1469, 1783, 0, 0, 1786, 1787, 719, 719, 0, + 719, 0, 719, 719, 0, 719, 719, 719, 719, 719, + 719, 0, 0, 0, 0, 0, 0, 0, 1469, 1818, + 1819, 1469, 719, 1469, 0, 1824, 0, 3794, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 720, 720, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, + 2596, 3810, 0, 3811, 0, 3812, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1907, 0, 0, 719, + 0, 839, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2628, 0, 0, 0, 0, 0, 0, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3691, 0, 0, 0, 2489, 3528, 3529, 3530, - 3531, 3532, 3533, 3534, 3535, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3705, 0, 720, 3706, 0, - 3707, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 720, 0, 0, 2499, 3296, 0, 0, 0, - 0, 0, 0, 1733, 0, 0, 0, 1230, 0, 1230, - 1230, 0, 0, 0, 0, 0, 1747, 0, 0, 0, - 0, 0, 0, 3321, 0, 3322, 3323, 3324, 0, 1399, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 720, - 0, 1774, 0, 0, 0, 0, 0, 0, 0, 720, - 0, 0, 1470, 1784, 0, 0, 1787, 1788, 720, 720, - 0, 720, 0, 720, 720, 0, 720, 720, 720, 720, - 720, 720, 0, 0, 0, 0, 0, 0, 0, 1470, - 1819, 1820, 1470, 720, 1470, 0, 1825, 0, 3795, 0, + 0, 2670, 2671, 0, 0, 3858, 0, 3859, 0, 0, + 2249, 0, 0, 961, 2690, 0, 0, 214, 0, 0, + 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 653, 899, 0, 0, 0, 0, 900, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2040, 0, + 0, 0, 0, 0, 976, 0, 0, 0, 0, 0, + 1606, 1607, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 995, 995, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 2597, 3811, 0, 3812, 0, 3813, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1908, 0, 0, - 720, 840, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2629, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 962, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1656, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1674, 0, 0, 2770, + 0, 906, 907, 908, 909, 910, 911, 912, 913, 914, + 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, + 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, + 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, + 945, 946, 947, 1019, 0, 1772, 0, 0, 719, 719, + 0, 0, 0, 1772, 0, 0, 0, 0, 0, 0, + 0, 719, 1789, 1789, 0, 1789, 0, 1789, 1789, 0, + 1798, 1789, 1789, 1789, 1789, 1789, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2671, 2672, 0, 0, 3859, 0, 3860, 0, - 0, 2250, 0, 0, 962, 2691, 0, 214, 0, 0, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, + 0, 0, 1866, 0, 0, 0, 0, 0, 0, 1469, + 0, 0, 0, 0, 0, 0, 0, 0, 2049, 0, + 719, 0, 0, 0, 1911, 0, 1469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 977, 0, 0, 0, 0, 0, - 0, 1607, 1608, 0, 0, 0, 0, 0, 0, 0, - 0, 996, 996, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1229, 0, 0, 0, 0, + 0, 719, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1657, 0, 211, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1761, 0, 1675, 0, 0, - 2771, 0, 0, 0, 0, 0, 0, 0, 150, 0, - 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 193, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1020, 0, 1773, 0, 0, 720, - 720, 0, 183, 0, 1773, 0, 0, 0, 171, 0, - 0, 0, 720, 1790, 1790, 0, 1790, 0, 1790, 1790, - 0, 1799, 1790, 1790, 1790, 1790, 1790, 190, 0, 0, - 191, 0, 0, 0, 0, 0, 0, 0, 1020, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1765, - 1766, 182, 181, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 1867, 0, 0, 0, 0, 0, 0, - 1470, 0, 0, 0, 0, 0, 0, 0, 0, 2050, - 0, 720, 0, 0, 0, 1912, 0, 1470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1230, 0, 0, 0, - 0, 0, 720, 720, 0, 0, 0, 0, 0, 0, + 2902, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3688, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 176, 1767, 179, 0, 1764, 0, 177, 178, - 0, 0, 0, 0, 0, 0, 194, 0, 0, 0, - 0, 2903, 720, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3689, 0, 0, 0, 0, + 719, 0, 0, 2249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2967, + 0, 104, 0, 719, 2249, 2249, 2249, 2249, 2249, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, + 719, 0, 0, 0, 2249, 0, 0, 2249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 2250, 0, 0, 0, 0, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2968, 0, 104, 0, 720, 2250, 2250, 2250, 2250, 2250, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 720, 0, 0, 0, 2250, 0, 0, 2250, 0, + 0, 0, 0, 1229, 1229, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1979, 0, 0, 0, + 0, 0, 0, 0, 3079, 0, 0, 0, 0, 719, + 0, 0, 0, 0, 3087, 0, 0, 0, 0, 2334, + 2335, 2336, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, + 0, 0, 0, 0, 0, 0, 719, 719, 0, 0, + 719, 0, 719, 0, 2035, 0, 0, 2366, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2051, 0, 0, 0, 0, + 0, 653, 0, 653, 0, 0, 653, 653, 0, 0, + 0, 0, 719, 0, 0, 0, 0, 719, 0, 0, + 0, 719, 719, 0, 0, 0, 2084, 2085, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1230, 1230, 0, 0, 185, 0, - 0, 0, 0, 0, 0, 0, 0, 1980, 0, 0, - 0, 0, 0, 0, 0, 3080, 0, 0, 0, 0, - 720, 0, 0, 0, 0, 3088, 0, 0, 0, 0, - 2335, 2336, 2337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 0, 0, 0, 0, 720, 720, 0, - 0, 720, 0, 720, 0, 2036, 0, 0, 2367, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 180, 2052, 0, 0, 0, - 0, 0, 654, 0, 654, 0, 0, 654, 654, 0, - 0, 0, 0, 720, 0, 0, 0, 0, 720, 0, - 0, 0, 720, 720, 0, 0, 0, 2085, 2086, 0, + 0, 0, 0, 0, 653, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 173, 0, 0, 174, + 0, 0, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 654, 0, 1230, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 186, - 0, 0, 0, 0, 0, 0, 198, 0, 0, 0, - 0, 0, 0, 1472, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2211, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 2250, 0, 0, 0, 0, 0, 0, 2222, - 0, 0, 0, 0, 0, 3279, 0, 0, 0, 720, - 0, 0, 0, 1657, 0, 0, 1230, 0, 0, 0, - 0, 0, 187, 192, 189, 195, 196, 197, 199, 201, - 202, 203, 204, 0, 0, 0, 1020, 0, 205, 207, - 208, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2249, 0, 0, 0, 0, 0, 0, 2221, 0, + 0, 0, 0, 0, 3278, 0, 0, 0, 719, 0, + 0, 0, 1656, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1470, 0, 720, - 0, 0, 0, 0, 0, 1472, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1020, 0, 0, 0, 0, - 0, 0, 1028, 1773, 0, 0, 1773, 0, 1773, 0, - 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1469, 0, 719, 0, + 0, 0, 0, 0, 1471, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1027, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 977, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1020, 0, - 0, 0, 0, 2036, 0, 0, 0, 2036, 2036, 0, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 3426, 0, - 3430, 3431, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, - 0, 0, 0, 0, 0, 2968, 0, 104, 720, 2968, - 0, 0, 1472, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1019, 0, 0, 0, 0, 0, + 0, 1027, 1772, 0, 0, 1772, 0, 1772, 0, 0, + 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 976, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1019, 0, 0, + 0, 0, 2035, 0, 0, 0, 2035, 2035, 0, 653, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3425, 0, 3429, + 3430, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, + 0, 0, 0, 0, 2967, 0, 104, 719, 2967, 0, + 0, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1472, - 0, 0, 1472, 0, 1472, 654, 0, 0, 0, 0, - 0, 0, 0, 2705, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1841, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1471, 0, + 0, 1471, 0, 1471, 653, 0, 0, 0, 0, 0, + 0, 0, 2704, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 2475, 0, 3558, 0, 0, 0, + 0, 653, 0, 2474, 0, 3557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1914, 0, 0, 720, 0, 0, 0, 0, - 0, 0, 0, 0, 654, 654, 654, 654, 654, 654, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 720, 0, 654, 0, 0, 0, - 0, 720, 0, 654, 0, 720, 720, 0, 0, 0, - 720, 0, 1958, 1959, 1230, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1470, 2781, 0, 0, + 0, 1913, 0, 0, 719, 0, 0, 0, 0, 0, + 0, 0, 0, 653, 653, 653, 653, 653, 653, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 719, 0, 653, 0, 0, 0, 0, + 719, 0, 653, 0, 719, 719, 0, 0, 0, 719, + 0, 1957, 1958, 1229, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1469, 2780, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2968, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1494, 1495, 1496, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2967, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, - 1507, 1508, 1509, 1513, 1514, 1515, 1516, 1517, 1518, 1519, + 1507, 1508, 1512, 1513, 1514, 1515, 1516, 1517, 1518, 1519, 1520, 1521, 1522, 1523, 1524, 1525, 1526, 1527, 1528, 1529, 1530, 1531, 1532, 1533, 1534, 1535, 1536, 1537, 1538, 1539, - 1540, 1541, 1542, 1544, 1545, 1546, 1547, 1548, 1549, 1550, - 1551, 1552, 1553, 1571, 1572, 1573, 1574, 1575, 1576, 1577, - 1578, 1579, 1580, 1581, 1582, 1583, 1584, 720, 0, 0, + 1540, 1541, 1543, 1544, 1545, 1546, 1547, 1548, 1549, 1550, + 1551, 1552, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, + 1578, 1579, 1580, 1581, 1582, 1583, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 3671, 0, 0, + 0, 0, 0, 0, 0, 0, 3670, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2637, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2655, 720, 104, 0, 0, 0, 0, + 2636, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2654, 719, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 654, 0, 0, 0, 0, 0, 0, 0, 0, + 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 719, 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3723, 0, 0, 0, - 1472, 720, 0, 0, 0, 104, 0, 0, 0, 0, - 0, 0, 996, 996, 0, 0, 0, 1472, 0, 0, - 2737, 0, 720, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 720, 0, 0, 0, - 1470, 0, 0, 720, 720, 1470, 0, 0, 0, 2222, - 0, 0, 0, 0, 0, 0, 2765, 0, 0, 0, - 1773, 1773, 0, 0, 0, 2770, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3722, 0, 0, 0, 1471, + 719, 0, 0, 0, 104, 0, 0, 0, 0, 0, + 0, 995, 995, 0, 0, 0, 1471, 0, 0, 2736, + 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 719, 0, 0, 0, 1469, + 0, 0, 719, 719, 1469, 0, 0, 0, 2221, 0, + 0, 0, 0, 0, 0, 2764, 0, 0, 0, 1772, + 1772, 0, 0, 0, 2769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 996, 1914, 996, 996, 996, 996, 996, 0, 0, - 0, 0, 0, 0, 0, 0, 3037, 0, 0, 0, - 0, 0, 0, 0, 0, 3815, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 1470, 1841, 0, 0, 0, 720, + 995, 1913, 995, 995, 995, 995, 995, 0, 0, 0, + 0, 0, 0, 0, 0, 3036, 0, 0, 0, 0, + 0, 0, 0, 0, 3814, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 719, 0, 0, 1469, 1840, 0, 0, 0, 719, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 995, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 977, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, - 0, 1914, 654, 0, 654, 0, 654, 2259, 0, 0, - 0, 0, 2036, 0, 0, 3141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 976, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, + 1913, 653, 0, 653, 0, 653, 2258, 0, 0, 0, + 0, 2035, 0, 0, 3140, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2036, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2904, 0, 0, - 0, 0, 0, 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2903, 0, 0, 0, + 0, 0, 0, 0, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2944, 0, 0, + 0, 0, 0, 0, 0, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1230, 0, 0, 0, 0, 0, 0, 2971, 1790, + 0, 0, 0, 0, 0, 0, 2943, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 3286, 0, 0, 0, 0, 0, 0, 0, 0, + 1229, 0, 0, 0, 0, 0, 0, 2970, 1789, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 654, + 3285, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 653, + 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 720, 0, 0, 654, 654, 0, 0, 0, - 0, 654, 0, 2462, 0, 0, 0, 0, 0, 654, - 0, 0, 0, 0, 0, 0, 1020, 0, 0, 0, - 0, 0, 0, 0, 2222, 0, 0, 0, 0, 0, - 0, 654, 0, 0, 0, 0, 0, 0, 654, 0, + 719, 719, 0, 0, 653, 653, 0, 0, 0, 0, + 653, 0, 2461, 0, 0, 0, 0, 0, 653, 0, + 0, 0, 0, 0, 0, 1019, 0, 0, 0, 0, + 0, 0, 0, 2221, 0, 0, 0, 0, 0, 0, + 653, 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 720, 720, 720, 0, 0, 0, 0, 0, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 719, 719, 719, 719, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 113, 0, 0, 900, 0, 0, 0, 888, 901, - 902, 903, 904, 889, 0, 0, 890, 891, 0, 892, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 897, 905, 906, 0, 1472, 0, 1914, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3204, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3092, 3093, 0, 0, 1470, 0, 0, 0, 0, 720, - 0, 720, 907, 908, 909, 910, 911, 912, 913, 914, - 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1471, 0, 1913, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3094, 720, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, - 0, 0, 0, 0, 0, 0, 1841, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 720, 0, 0, - 0, 0, 0, 0, 0, 0, 2222, 2222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1469, 0, 0, 0, 0, 719, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 0, 0, 0, 654, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 0, 720, 720, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3377, 3378, 3379, 3380, - 0, 0, 3095, 3096, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, - 2750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 854, 0, 0, 858, 1472, 855, 856, 0, - 0, 0, 857, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 654, 654, 654, 654, 0, 0, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, + 0, 0, 0, 0, 0, 1840, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 719, 0, 0, 0, + 0, 0, 0, 0, 0, 2221, 2221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3454, 0, 3456, 0, 0, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, - 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 653, 0, 0, 0, 0, 653, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, + 0, 719, 719, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3376, 3377, 3378, 3379, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 720, 0, 0, 0, 0, 654, 0, 0, 0, - 0, 1470, 0, 720, 0, 0, 2222, 0, 0, 0, + 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 996, 0, 3568, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1230, 0, 0, 0, 0, 0, 0, 0, - 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, + 0, 0, 0, 653, 0, 0, 0, 0, 0, 2749, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3628, 0, 0, 0, 3628, 3628, 996, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 2222, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 720, 0, - 0, 0, 0, 0, 0, 654, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 720, 0, 720, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 719, + 0, 0, 0, 0, 0, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1472, 0, 0, 0, 0, 1472, 654, 654, 654, 654, - 654, 0, 0, 0, 0, 0, 0, 0, 2987, 0, - 0, 0, 0, 0, 1841, 0, 654, 0, 0, 654, - 2995, 1914, 0, 0, 0, 2222, 0, 0, 0, 0, + 0, 653, 653, 653, 653, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3453, 0, 3455, 0, 0, 0, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 654, 0, - 0, 0, 0, 0, 0, 2222, 0, 0, 0, 0, - 0, 0, 0, 0, 1472, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 654, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 653, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 654, 0, 0, - 0, 113, 0, 0, 900, 0, 3716, 0, 888, 901, - 902, 903, 904, 889, 0, 0, 890, 891, 3720, 892, - 0, 0, 654, 0, 0, 654, 0, 0, 0, 0, - 0, 0, 0, 897, 905, 906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1230, 1230, 0, 0, 0, 0, 0, + 719, 0, 0, 0, 0, 653, 0, 0, 0, 0, + 1469, 0, 719, 0, 0, 2221, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 995, + 0, 3567, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 719, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3770, 0, 0, 0, 0, - 3092, 3093, 0, 0, 0, 0, 0, 0, 0, 0, - 3778, 0, 907, 908, 909, 910, 911, 912, 913, 914, - 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 654, 0, 0, 0, 0, 0, - 3716, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1229, 0, 0, 0, 0, 0, 0, 0, 719, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3627, 0, 0, 0, 3627, 3627, 995, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 719, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2221, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 719, 0, 0, + 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 719, 0, 719, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1471, + 0, 0, 0, 0, 1471, 653, 653, 653, 653, 653, + 0, 0, 0, 0, 0, 0, 0, 2986, 0, 0, + 0, 0, 0, 1840, 0, 653, 0, 0, 653, 2994, + 1913, 0, 0, 0, 2221, 0, 3482, 3484, 3483, 3501, + 3502, 3503, 3504, 3505, 3506, 3507, 787, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 653, 0, 0, + 0, 0, 0, 0, 2221, 0, 0, 0, 0, 0, + 0, 0, 0, 1471, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2222, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3094, 0, 0, 0, - 0, 0, 3204, 0, 3778, 0, 0, 0, 0, 0, - 0, 0, 0, 654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 653, 0, 0, 0, + 0, 0, 0, 0, 0, 3715, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3719, 0, 0, + 0, 653, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 654, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1229, 1229, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 654, - 0, 654, 654, 654, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3769, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3777, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 3095, 3096, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 653, 0, 0, 0, 0, 0, 3715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2221, 0, 0, 0, 0, 0, 0, 3488, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 3203, 0, 3777, 3496, 3497, 0, 0, 0, 0, + 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 653, 0, + 653, 653, 653, 0, 0, 853, 0, 766, 857, 768, + 854, 855, 0, 764, 767, 856, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 785, 786, 3481, 3485, 3486, 3487, 3498, 3499, 3500, + 3508, 3510, 818, 3509, 3511, 3512, 3513, 3516, 3517, 3518, + 3519, 3514, 3515, 3520, 3465, 3469, 3466, 3467, 3468, 3480, + 3470, 3471, 3472, 3473, 3474, 3475, 3476, 3477, 3478, 3479, + 3521, 3522, 3523, 3524, 3525, 3526, 3491, 3495, 3494, 3492, + 3493, 3489, 3490, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 858, 0, 859, 0, 0, + 863, 0, 0, 0, 865, 864, 0, 866, 832, 831, + 0, 0, 860, 861, 0, 862, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1472, 0, 0, 0, 0, 0, + 0, 0, 1840, 0, 0, 0, 0, 0, 0, 0, + 3527, 3528, 3529, 3530, 3531, 3532, 3533, 3534, 0, 0, + 0, 0, 0, 1471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2564,7 +2562,7 @@ 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, 1841, 0, 0, 0, 0, 0, + 0, 0, 0, 1840, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -2580,64 +2578,204 @@ 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, 408, 0, 0, 0, 1364, 1349, 529, 0, - 1292, 1367, 1261, 1280, 1377, 1283, 1286, 1328, 1240, 1306, - 427, 1277, 1233, 1265, 1235, 1272, 1236, 1263, 1294, 285, - 1260, 1351, 1310, 1366, 378, 282, 1242, 1266, 441, 1282, - 223, 1330, 498, 269, 389, 386, 537, 297, 288, 284, - 267, 331, 397, 439, 519, 433, 1373, 382, 1316, 0, - 508, 412, 1841, 0, 0, 1296, 1355, 1304, 1342, 1291, - 1329, 1250, 1315, 1368, 1278, 1325, 1369, 337, 265, 339, - 222, 424, 509, 301, 0, 0, 0, 0, 3750, 710, - 0, 654, 0, 0, 3751, 0, 0, 0, 0, 255, + 0, 408, 0, 0, 0, 1363, 1348, 529, 0, 1291, + 1366, 1260, 1279, 1376, 1282, 1285, 1327, 1239, 1305, 427, + 1276, 1232, 1264, 1234, 1271, 1235, 1262, 1293, 285, 1259, + 1350, 1309, 1365, 378, 282, 1241, 1265, 441, 1281, 223, + 1329, 498, 269, 389, 386, 537, 297, 288, 284, 267, + 331, 397, 439, 519, 433, 1372, 382, 1315, 0, 508, + 412, 1840, 0, 0, 1295, 1354, 1303, 1341, 1290, 1328, + 1249, 1314, 1367, 1277, 1324, 1368, 337, 265, 339, 222, + 424, 509, 301, 0, 0, 0, 0, 3749, 709, 0, + 653, 0, 0, 3750, 0, 0, 0, 0, 255, 0, + 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, + 355, 357, 362, 369, 375, 1273, 1321, 1362, 1274, 1323, + 280, 335, 287, 279, 534, 1373, 1353, 1238, 1302, 1361, + 0, 0, 246, 1364, 1297, 0, 1326, 0, 1379, 1233, + 1317, 0, 1236, 1240, 1375, 1357, 1268, 290, 0, 0, + 1471, 0, 0, 0, 0, 1294, 1304, 1338, 1342, 1288, + 0, 0, 0, 0, 0, 0, 0, 1266, 0, 1313, + 0, 0, 0, 1245, 1237, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1292, 0, 0, + 0, 0, 1248, 1840, 1267, 1339, 0, 1231, 312, 1242, + 413, 272, 1385, 0, 465, 1346, 1356, 1289, 577, 1360, + 1287, 1286, 1333, 1246, 1352, 1280, 377, 1244, 344, 218, + 242, 0, 1278, 423, 473, 485, 1351, 1263, 1272, 270, + 1270, 483, 437, 554, 250, 299, 470, 443, 481, 453, + 302, 1312, 1331, 482, 384, 539, 463, 551, 578, 579, + 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, + 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, + 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 644, 645, 646, 647, 0, 0, + 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, + 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, + 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, + 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, + 0, 0, 273, 426, 543, 544, 271, 608, 245, 571, + 237, 1243, 570, 419, 538, 547, 406, 395, 236, 545, + 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, + 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, + 510, 559, 609, 251, 252, 254, 1258, 294, 298, 306, + 309, 317, 318, 327, 379, 430, 459, 455, 464, 1347, + 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, + 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, + 506, 347, 385, 1336, 1378, 436, 484, 257, 556, 507, + 1381, 1382, 1383, 1384, 1253, 1257, 1251, 1318, 1252, 1307, + 1308, 1254, 1369, 1370, 1371, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 0, 1340, 1247, 0, 1255, 1256, 1349, + 1358, 1359, 642, 396, 497, 553, 349, 361, 364, 354, + 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, + 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, + 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, + 475, 476, 477, 307, 562, 323, 480, 479, 345, 346, + 391, 462, 1311, 217, 238, 380, 1374, 466, 303, 606, + 567, 561, 224, 240, 1250, 277, 1261, 1269, 0, 1275, + 1283, 1284, 1296, 1298, 1299, 1300, 1301, 1319, 1320, 1322, + 1330, 1332, 1335, 1337, 1344, 1355, 1377, 219, 220, 227, + 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, + 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, + 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, + 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, + 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, + 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, + 316, 457, 458, 328, 329, 603, 604, 314, 550, 581, + 548, 602, 575, 451, 390, 1310, 1380, 565, 1316, 393, + 296, 319, 334, 1325, 566, 513, 244, 478, 305, 268, + 1343, 1345, 229, 263, 247, 274, 289, 292, 338, 403, + 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, + 521, 522, 524, 407, 281, 444, 1306, 1334, 388, 530, + 531, 330, 408, 0, 0, 0, 1363, 1348, 529, 0, + 1291, 1366, 1260, 1279, 1376, 1282, 1285, 1327, 1239, 1305, + 427, 1276, 1232, 1264, 1234, 1271, 1235, 1262, 1293, 285, + 1259, 1350, 1309, 1365, 378, 282, 1241, 1265, 441, 1281, + 223, 1329, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 1372, 382, 1315, 0, + 508, 412, 0, 0, 0, 1295, 1354, 1303, 1341, 1290, + 1328, 1249, 1314, 1367, 1277, 1324, 1368, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, - 353, 355, 357, 362, 369, 375, 1274, 1322, 1363, 1275, - 1324, 280, 335, 287, 279, 534, 1374, 1354, 1239, 1303, - 1362, 0, 0, 246, 1365, 1298, 0, 1327, 0, 1380, - 1234, 1318, 0, 1237, 1241, 1376, 1358, 1269, 290, 0, - 0, 1472, 0, 0, 0, 0, 1295, 1305, 1339, 1343, - 1289, 0, 0, 0, 0, 0, 0, 0, 1267, 0, - 1314, 0, 0, 0, 1246, 1238, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, - 0, 0, 0, 1249, 1841, 1268, 1340, 0, 1232, 312, - 1243, 413, 272, 1386, 0, 465, 1347, 1357, 1290, 577, - 1361, 1288, 1287, 1334, 1247, 1353, 1281, 377, 1245, 344, - 218, 242, 0, 1279, 423, 473, 485, 1352, 1264, 1273, - 270, 1271, 483, 437, 554, 250, 299, 470, 443, 481, - 453, 302, 1313, 1332, 482, 384, 539, 463, 551, 578, + 353, 355, 357, 362, 369, 375, 1273, 1321, 1362, 1274, + 1323, 280, 335, 287, 279, 534, 1373, 1353, 1238, 1302, + 1361, 0, 0, 246, 1364, 1297, 0, 1326, 0, 1379, + 1233, 1317, 0, 1236, 1240, 1375, 1357, 1268, 290, 0, + 0, 0, 0, 0, 0, 0, 1294, 1304, 1338, 1342, + 1288, 0, 0, 0, 0, 0, 2995, 0, 1266, 0, + 1313, 0, 0, 0, 1245, 1237, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1292, 0, + 0, 0, 0, 1248, 0, 1267, 1339, 0, 1231, 312, + 1242, 413, 272, 1385, 0, 465, 1346, 1356, 1289, 577, + 1360, 1287, 1286, 1333, 1246, 1352, 1280, 377, 1244, 344, + 218, 242, 0, 1278, 423, 473, 485, 1351, 1263, 1272, + 270, 1270, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 1312, 1331, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 644, 645, 646, 647, 648, - 0, 0, 643, 649, 584, 241, 491, 383, 259, 248, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 1243, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 1258, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 1347, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 1336, 1378, 436, 484, 257, 556, + 507, 1381, 1382, 1383, 1384, 1253, 1257, 1251, 1318, 1252, + 1307, 1308, 1254, 1369, 1370, 1371, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 1340, 1247, 0, 1255, 1256, + 1349, 1358, 1359, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 1311, 217, 238, 380, 1374, 466, 303, + 606, 567, 561, 224, 240, 1250, 277, 1261, 1269, 0, + 1275, 1283, 1284, 1296, 1298, 1299, 1300, 1301, 1319, 1320, + 1322, 1330, 1332, 1335, 1337, 1344, 1355, 1377, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 1310, 1380, 565, 1316, + 393, 296, 319, 334, 1325, 566, 513, 244, 478, 305, + 268, 1343, 1345, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 1306, 1334, 388, + 530, 531, 330, 408, 0, 0, 0, 1363, 1348, 529, + 0, 1291, 1366, 1260, 1279, 1376, 1282, 1285, 1327, 1239, + 1305, 427, 1276, 1232, 1264, 1234, 1271, 1235, 1262, 1293, + 285, 1259, 1350, 1309, 1365, 378, 282, 1241, 1265, 441, + 1281, 223, 1329, 498, 269, 389, 386, 537, 297, 288, + 284, 267, 331, 397, 439, 519, 433, 1372, 382, 1315, + 0, 508, 412, 0, 0, 0, 1295, 1354, 1303, 1341, + 1290, 1328, 1249, 1314, 1367, 1277, 1324, 1368, 337, 265, + 339, 222, 424, 509, 301, 0, 0, 0, 0, 0, + 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, + 352, 353, 355, 357, 362, 369, 375, 1273, 1321, 1362, + 1274, 1323, 280, 335, 287, 279, 534, 1373, 1353, 1238, + 1302, 1361, 0, 0, 246, 1364, 1297, 0, 1326, 0, + 1379, 1233, 1317, 0, 1236, 1240, 1375, 1357, 1268, 290, + 0, 0, 0, 0, 0, 0, 0, 1294, 1304, 1338, + 1342, 1288, 0, 0, 0, 0, 0, 2956, 0, 1266, + 0, 1313, 0, 0, 0, 1245, 1237, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1292, + 0, 0, 0, 0, 1248, 0, 1267, 1339, 0, 1231, + 312, 1242, 413, 272, 1385, 0, 465, 1346, 1356, 1289, + 577, 1360, 1287, 1286, 1333, 1246, 1352, 1280, 377, 1244, + 344, 218, 242, 0, 1278, 423, 473, 485, 1351, 1263, + 1272, 270, 1270, 483, 437, 554, 250, 299, 470, 443, + 481, 453, 302, 1312, 1331, 482, 384, 539, 463, 551, + 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, + 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, + 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, + 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, + 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, 608, - 245, 571, 237, 1244, 570, 419, 538, 547, 406, 395, + 245, 571, 237, 1243, 570, 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, - 226, 0, 510, 559, 609, 251, 252, 254, 1259, 294, + 226, 0, 510, 559, 609, 251, 252, 254, 1258, 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, - 464, 1348, 533, 552, 564, 576, 582, 583, 585, 591, + 464, 1347, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, - 418, 325, 506, 347, 385, 1337, 1379, 436, 484, 257, - 556, 507, 1382, 1383, 1384, 1385, 1254, 1258, 1252, 1319, - 1253, 1308, 1309, 1255, 1370, 1371, 1372, 610, 611, 612, + 418, 325, 506, 347, 385, 1336, 1378, 436, 484, 257, + 556, 507, 1381, 1382, 1383, 1384, 1253, 1257, 1251, 1318, + 1252, 1307, 1308, 1254, 1369, 1370, 1371, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 0, 1341, 1248, 0, 1256, - 1257, 1350, 1359, 1360, 642, 396, 497, 553, 349, 361, + 623, 624, 625, 626, 627, 0, 1340, 1247, 0, 1255, + 1256, 1349, 1358, 1359, 642, 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, 479, - 345, 346, 391, 462, 1312, 217, 238, 380, 1375, 466, - 303, 606, 567, 561, 224, 240, 1251, 277, 1262, 1270, - 0, 1276, 1284, 1285, 1297, 1299, 1300, 1301, 1302, 1320, - 1321, 1323, 1331, 1333, 1336, 1338, 1345, 1356, 1378, 219, + 345, 346, 391, 462, 1311, 217, 238, 380, 1374, 466, + 303, 606, 567, 561, 224, 240, 1250, 277, 1261, 1269, + 0, 1275, 1283, 1284, 1296, 1298, 1299, 1300, 1301, 1319, + 1320, 1322, 1330, 1332, 1335, 1337, 1344, 1355, 1377, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, @@ -2645,140 +2783,280 @@ var yyAct = [...]int{ 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, 314, - 550, 581, 548, 602, 575, 451, 390, 1311, 1381, 565, - 1317, 393, 296, 319, 334, 1326, 566, 513, 244, 478, - 305, 268, 1344, 1346, 229, 263, 247, 274, 289, 292, + 550, 581, 548, 602, 575, 451, 390, 1310, 1380, 565, + 1316, 393, 296, 319, 334, 1325, 566, 513, 244, 478, + 305, 268, 1343, 1345, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, - 496, 520, 521, 522, 524, 407, 281, 444, 1307, 1335, - 388, 530, 531, 330, 408, 0, 0, 0, 1364, 1349, - 529, 0, 1292, 1367, 1261, 1280, 1377, 1283, 1286, 1328, - 1240, 1306, 427, 1277, 1233, 1265, 1235, 1272, 1236, 1263, - 1294, 285, 1260, 1351, 1310, 1366, 378, 282, 1242, 1266, - 441, 1282, 223, 1330, 498, 269, 389, 386, 537, 297, - 288, 284, 267, 331, 397, 439, 519, 433, 1373, 382, - 1316, 0, 508, 412, 0, 0, 0, 1296, 1355, 1304, - 1342, 1291, 1329, 1250, 1315, 1368, 1278, 1325, 1369, 337, + 496, 520, 521, 522, 524, 407, 281, 444, 1306, 1334, + 388, 530, 531, 330, 408, 0, 0, 0, 1363, 1348, + 529, 0, 1291, 1366, 1260, 1279, 1376, 1282, 1285, 1327, + 1239, 1305, 427, 1276, 1232, 1264, 1234, 1271, 1235, 1262, + 1293, 285, 1259, 1350, 1309, 1365, 378, 282, 1241, 1265, + 441, 1281, 223, 1329, 498, 269, 389, 386, 537, 297, + 288, 284, 267, 331, 397, 439, 519, 433, 1372, 382, + 1315, 0, 508, 412, 0, 0, 0, 1295, 1354, 1303, + 1341, 1290, 1328, 1249, 1314, 1367, 1277, 1324, 1368, 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, 0, - 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, - 371, 352, 353, 355, 357, 362, 369, 375, 1274, 1322, - 1363, 1275, 1324, 280, 335, 287, 279, 534, 1374, 1354, - 1239, 1303, 1362, 0, 0, 246, 1365, 1298, 0, 1327, - 0, 1380, 1234, 1318, 0, 1237, 1241, 1376, 1358, 1269, - 290, 0, 0, 0, 0, 0, 0, 0, 1295, 1305, - 1339, 1343, 1289, 0, 0, 0, 0, 0, 2996, 0, - 1267, 0, 1314, 0, 0, 0, 1246, 1238, 0, 0, + 371, 352, 353, 355, 357, 362, 369, 375, 1273, 1321, + 1362, 1274, 1323, 280, 335, 287, 279, 534, 1373, 1353, + 1238, 1302, 1361, 0, 0, 246, 1364, 1297, 0, 1326, + 0, 1379, 1233, 1317, 0, 1236, 1240, 1375, 1357, 1268, + 290, 0, 0, 0, 0, 0, 0, 0, 1294, 1304, + 1338, 1342, 1288, 0, 0, 0, 0, 0, 2237, 0, + 1266, 0, 1313, 0, 0, 0, 1245, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1293, 0, 0, 0, 0, 1249, 0, 1268, 1340, 0, - 1232, 312, 1243, 413, 272, 1386, 0, 465, 1347, 1357, - 1290, 577, 1361, 1288, 1287, 1334, 1247, 1353, 1281, 377, - 1245, 344, 218, 242, 0, 1279, 423, 473, 485, 1352, - 1264, 1273, 270, 1271, 483, 437, 554, 250, 299, 470, - 443, 481, 453, 302, 1313, 1332, 482, 384, 539, 463, + 1292, 0, 0, 0, 0, 1248, 0, 1267, 1339, 0, + 1231, 312, 1242, 413, 272, 1385, 0, 465, 1346, 1356, + 1289, 577, 1360, 1287, 1286, 1333, 1246, 1352, 1280, 377, + 1244, 344, 218, 242, 0, 1278, 423, 473, 485, 1351, + 1263, 1272, 270, 1270, 483, 437, 554, 250, 299, 470, + 443, 481, 453, 302, 1312, 1331, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, 646, - 647, 648, 0, 0, 643, 649, 584, 241, 491, 383, + 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, + 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, + 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, + 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, + 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, + 608, 245, 571, 237, 1243, 570, 419, 538, 547, 406, + 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, + 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, + 0, 226, 0, 510, 559, 609, 251, 252, 254, 1258, + 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, + 455, 464, 1347, 533, 552, 564, 576, 582, 583, 585, + 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, + 588, 418, 325, 506, 347, 385, 1336, 1378, 436, 484, + 257, 556, 507, 1381, 1382, 1383, 1384, 1253, 1257, 1251, + 1318, 1252, 1307, 1308, 1254, 1369, 1370, 1371, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 0, 1340, 1247, 0, + 1255, 1256, 1349, 1358, 1359, 642, 396, 497, 553, 349, + 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, + 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, + 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, + 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, + 479, 345, 346, 391, 462, 1311, 217, 238, 380, 1374, + 466, 303, 606, 567, 561, 224, 240, 1250, 277, 1261, + 1269, 0, 1275, 1283, 1284, 1296, 1298, 1299, 1300, 1301, + 1319, 1320, 1322, 1330, 1332, 1335, 1337, 1344, 1355, 1377, + 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, + 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, + 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, + 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, + 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, + 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, + 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, + 314, 550, 581, 548, 602, 575, 451, 390, 1310, 1380, + 565, 1316, 393, 296, 319, 334, 1325, 566, 513, 244, + 478, 305, 268, 1343, 1345, 229, 263, 247, 274, 289, + 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, + 258, 496, 520, 521, 522, 524, 407, 281, 444, 1306, + 1334, 388, 530, 531, 330, 408, 0, 0, 0, 1363, + 1348, 529, 0, 1291, 1366, 1260, 1279, 1376, 1282, 1285, + 1327, 1239, 1305, 427, 1276, 1232, 1264, 1234, 1271, 1235, + 1262, 1293, 285, 1259, 1350, 1309, 1365, 378, 282, 1241, + 1265, 441, 1281, 223, 1329, 498, 269, 389, 386, 537, + 297, 288, 284, 267, 331, 397, 439, 519, 433, 1372, + 382, 1315, 0, 508, 412, 0, 0, 0, 1295, 1354, + 1303, 1341, 1290, 1328, 1249, 1314, 1367, 1277, 1324, 1368, + 337, 265, 339, 222, 424, 509, 301, 0, 113, 0, + 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, + 372, 371, 352, 353, 355, 357, 362, 369, 375, 1273, + 1321, 1362, 1274, 1323, 280, 335, 287, 279, 534, 1373, + 1353, 1238, 1302, 1361, 0, 0, 246, 1364, 1297, 0, + 1326, 0, 1379, 1233, 1317, 0, 1236, 1240, 1375, 1357, + 1268, 290, 0, 0, 0, 0, 0, 0, 0, 1294, + 1304, 1338, 1342, 1288, 0, 0, 0, 0, 0, 0, + 0, 1266, 0, 1313, 0, 0, 0, 1245, 1237, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1292, 0, 0, 0, 0, 1248, 0, 1267, 1339, + 0, 1231, 312, 1242, 413, 272, 1385, 0, 465, 1346, + 1356, 1289, 577, 1360, 1287, 1286, 1333, 1246, 1352, 1280, + 377, 1244, 344, 218, 242, 0, 1278, 423, 473, 485, + 1351, 1263, 1272, 270, 1270, 483, 437, 554, 250, 299, + 470, 443, 481, 453, 302, 1312, 1331, 482, 384, 539, + 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, + 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, + 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, + 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, 544, - 271, 608, 245, 571, 237, 1244, 570, 419, 538, 547, + 271, 608, 245, 571, 237, 1243, 570, 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, - 1259, 294, 298, 306, 309, 317, 318, 327, 379, 430, - 459, 455, 464, 1348, 533, 552, 564, 576, 582, 583, + 1258, 294, 298, 306, 309, 317, 318, 327, 379, 430, + 459, 455, 464, 1347, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, - 594, 588, 418, 325, 506, 347, 385, 1337, 1379, 436, - 484, 257, 556, 507, 1382, 1383, 1384, 1385, 1254, 1258, - 1252, 1319, 1253, 1308, 1309, 1255, 1370, 1371, 1372, 610, + 594, 588, 418, 325, 506, 347, 385, 1336, 1378, 436, + 484, 257, 556, 507, 1381, 1382, 1383, 1384, 1253, 1257, + 1251, 1318, 1252, 1307, 1308, 1254, 1369, 1370, 1371, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 0, 1341, 1248, - 0, 1256, 1257, 1350, 1359, 1360, 642, 396, 497, 553, + 621, 622, 623, 624, 625, 626, 627, 0, 1340, 1247, + 0, 1255, 1256, 1349, 1358, 1359, 642, 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, - 480, 479, 345, 346, 391, 462, 1312, 217, 238, 380, - 1375, 466, 303, 606, 567, 561, 224, 240, 1251, 277, - 1262, 1270, 0, 1276, 1284, 1285, 1297, 1299, 1300, 1301, - 1302, 1320, 1321, 1323, 1331, 1333, 1336, 1338, 1345, 1356, - 1378, 219, 220, 227, 239, 249, 253, 260, 276, 291, + 480, 479, 345, 346, 391, 462, 1311, 217, 238, 380, + 1374, 466, 303, 606, 567, 561, 224, 240, 1250, 277, + 1261, 1269, 0, 1275, 1283, 1284, 1296, 1298, 1299, 1300, + 1301, 1319, 1320, 1322, 1330, 1332, 1335, 1337, 1344, 1355, + 1377, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, 603, - 604, 314, 550, 581, 548, 602, 575, 451, 390, 1311, - 1381, 565, 1317, 393, 296, 319, 334, 1326, 566, 513, - 244, 478, 305, 268, 1344, 1346, 229, 263, 247, 274, + 604, 314, 550, 581, 548, 602, 575, 451, 390, 1310, + 1380, 565, 1316, 393, 296, 319, 334, 1325, 566, 513, + 244, 478, 305, 268, 1343, 1345, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, - 1307, 1335, 388, 530, 531, 330, 408, 0, 0, 0, - 1364, 1349, 529, 0, 1292, 1367, 1261, 1280, 1377, 1283, - 1286, 1328, 1240, 1306, 427, 1277, 1233, 1265, 1235, 1272, - 1236, 1263, 1294, 285, 1260, 1351, 1310, 1366, 378, 282, - 1242, 1266, 441, 1282, 223, 1330, 498, 269, 389, 386, + 1306, 1334, 388, 530, 531, 330, 408, 0, 0, 0, + 1363, 1348, 529, 0, 1291, 1366, 1260, 1279, 1376, 1282, + 1285, 1327, 1239, 1305, 427, 1276, 1232, 1264, 1234, 1271, + 1235, 1262, 1293, 285, 1259, 1350, 1309, 1365, 378, 282, + 1241, 1265, 441, 1281, 223, 1329, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, - 1373, 382, 1316, 0, 508, 412, 0, 0, 0, 1296, - 1355, 1304, 1342, 1291, 1329, 1250, 1315, 1368, 1278, 1325, - 1369, 337, 265, 339, 222, 424, 509, 301, 0, 0, - 0, 0, 0, 710, 0, 0, 0, 0, 0, 0, + 1372, 382, 1315, 0, 508, 412, 0, 0, 0, 1295, + 1354, 1303, 1341, 1290, 1328, 1249, 1314, 1367, 1277, 1324, + 1368, 337, 265, 339, 222, 424, 509, 301, 0, 0, + 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, - 1274, 1322, 1363, 1275, 1324, 280, 335, 287, 279, 534, - 1374, 1354, 1239, 1303, 1362, 0, 0, 246, 1365, 1298, - 0, 1327, 0, 1380, 1234, 1318, 0, 1237, 1241, 1376, - 1358, 1269, 290, 0, 0, 0, 0, 0, 0, 0, - 1295, 1305, 1339, 1343, 1289, 0, 0, 0, 0, 0, - 2957, 0, 1267, 0, 1314, 0, 0, 0, 1246, 1238, + 1273, 1321, 1362, 1274, 1323, 280, 335, 287, 279, 534, + 1373, 1353, 1238, 1302, 1361, 0, 0, 246, 1364, 1297, + 0, 1326, 0, 1379, 1233, 1317, 0, 1236, 1240, 1375, + 1357, 1268, 290, 0, 0, 0, 0, 0, 0, 0, + 1294, 1304, 1338, 1342, 1288, 0, 0, 0, 0, 0, + 0, 0, 1266, 0, 1313, 0, 0, 0, 1245, 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1293, 0, 0, 0, 0, 1249, 0, 1268, - 1340, 0, 1232, 312, 1243, 413, 272, 1386, 0, 465, - 1347, 1357, 1290, 577, 1361, 1288, 1287, 1334, 1247, 1353, - 1281, 377, 1245, 344, 218, 242, 0, 1279, 423, 473, - 485, 1352, 1264, 1273, 270, 1271, 483, 437, 554, 250, - 299, 470, 443, 481, 453, 302, 1313, 1332, 482, 384, + 0, 0, 1292, 0, 0, 0, 0, 1248, 0, 1267, + 1339, 0, 1231, 312, 1242, 413, 272, 1385, 0, 465, + 1346, 1356, 1289, 577, 1360, 1287, 1286, 1333, 1246, 1352, + 1280, 377, 1244, 344, 218, 242, 0, 1278, 423, 473, + 485, 1351, 1263, 1272, 270, 1270, 483, 437, 554, 250, + 299, 470, 443, 481, 453, 302, 1312, 1331, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, - 645, 646, 647, 648, 0, 0, 643, 649, 584, 241, + 645, 646, 647, 0, 0, 643, 648, 584, 241, 491, + 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, + 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, + 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, + 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, + 544, 271, 608, 245, 571, 237, 1243, 570, 419, 538, + 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, + 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, + 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, + 254, 1258, 294, 298, 306, 309, 317, 318, 327, 379, + 430, 459, 455, 464, 1347, 533, 552, 564, 576, 582, + 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, + 598, 594, 588, 418, 325, 506, 347, 385, 1336, 1378, + 436, 484, 257, 556, 507, 1381, 1382, 1383, 1384, 1253, + 1257, 1251, 1318, 1252, 1307, 1308, 1254, 1369, 1370, 1371, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 0, 1340, + 1247, 0, 1255, 1256, 1349, 1358, 1359, 642, 396, 497, + 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, + 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, + 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, + 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, + 323, 480, 479, 345, 346, 391, 462, 1311, 217, 238, + 380, 1374, 466, 303, 606, 567, 561, 224, 240, 1250, + 277, 1261, 1269, 0, 1275, 1283, 1284, 1296, 1298, 1299, + 1300, 1301, 1319, 1320, 1322, 1330, 1332, 1335, 1337, 1344, + 1355, 1377, 219, 220, 227, 239, 249, 253, 260, 276, + 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, + 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, + 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, + 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, + 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, + 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, + 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, + 1310, 1380, 565, 1316, 393, 296, 319, 334, 1325, 566, + 513, 244, 478, 305, 268, 1343, 1345, 229, 263, 247, + 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, + 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, + 444, 1306, 1334, 388, 530, 531, 330, 408, 0, 0, + 0, 1363, 1348, 529, 0, 1291, 1366, 1260, 1279, 1376, + 1282, 1285, 1327, 1239, 1305, 427, 1276, 1232, 1264, 1234, + 1271, 1235, 1262, 1293, 285, 1259, 1350, 1309, 1365, 378, + 282, 1241, 1265, 441, 1281, 223, 1329, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 1372, 382, 1315, 0, 508, 412, 0, 0, 0, + 1295, 1354, 1303, 1341, 1290, 1328, 1249, 1314, 1367, 1277, + 1324, 1368, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 0, 883, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 1273, 1321, 1362, 1274, 1323, 280, 335, 287, 279, + 534, 1373, 1353, 1238, 1302, 1361, 0, 0, 246, 1364, + 1297, 0, 1326, 0, 1379, 1233, 1317, 0, 1236, 1240, + 1375, 1357, 1268, 290, 0, 0, 0, 0, 0, 0, + 0, 1294, 1304, 1338, 1342, 1288, 0, 0, 0, 0, + 0, 0, 0, 1266, 0, 1313, 0, 0, 0, 1245, + 1237, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1292, 0, 0, 0, 0, 1248, 0, + 1267, 1339, 0, 1231, 312, 1242, 413, 272, 1385, 0, + 465, 1346, 1356, 1289, 577, 1360, 1287, 1286, 1333, 1246, + 1352, 1280, 377, 1244, 344, 218, 242, 0, 1278, 423, + 473, 485, 1351, 1263, 1272, 270, 1270, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 1312, 1331, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, - 543, 544, 271, 608, 245, 571, 237, 1244, 570, 419, + 543, 544, 271, 608, 245, 571, 237, 1243, 570, 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, - 252, 254, 1259, 294, 298, 306, 309, 317, 318, 327, - 379, 430, 459, 455, 464, 1348, 533, 552, 564, 576, + 252, 254, 1258, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 1347, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, - 597, 598, 594, 588, 418, 325, 506, 347, 385, 1337, - 1379, 436, 484, 257, 556, 507, 1382, 1383, 1384, 1385, - 1254, 1258, 1252, 1319, 1253, 1308, 1309, 1255, 1370, 1371, - 1372, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 1336, + 1378, 436, 484, 257, 556, 507, 1381, 1382, 1383, 1384, + 1253, 1257, 1251, 1318, 1252, 1307, 1308, 1254, 1369, 1370, + 1371, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, - 1341, 1248, 0, 1256, 1257, 1350, 1359, 1360, 642, 396, + 1340, 1247, 0, 1255, 1256, 1349, 1358, 1359, 642, 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, - 562, 323, 480, 479, 345, 346, 391, 462, 1312, 217, - 238, 380, 1375, 466, 303, 606, 567, 561, 224, 240, - 1251, 277, 1262, 1270, 0, 1276, 1284, 1285, 1297, 1299, - 1300, 1301, 1302, 1320, 1321, 1323, 1331, 1333, 1336, 1338, - 1345, 1356, 1378, 219, 220, 227, 239, 249, 253, 260, + 562, 323, 480, 479, 345, 346, 391, 462, 1311, 217, + 238, 380, 1374, 466, 303, 606, 567, 561, 224, 240, + 1250, 277, 1261, 1269, 0, 1275, 1283, 1284, 1296, 1298, + 1299, 1300, 1301, 1319, 1320, 1322, 1330, 1332, 1335, 1337, + 1344, 1355, 1377, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, @@ -2786,917 +3064,2234 @@ var yyAct = [...]int{ 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, - 390, 1311, 1381, 565, 1317, 393, 296, 319, 334, 1326, - 566, 513, 244, 478, 305, 268, 1344, 1346, 229, 263, + 390, 1310, 1380, 565, 1316, 393, 296, 319, 334, 1325, + 566, 513, 244, 478, 305, 268, 1343, 1345, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, - 281, 444, 1307, 1335, 388, 530, 531, 330, 408, 0, - 0, 0, 1364, 1349, 529, 0, 1292, 1367, 1261, 1280, - 1377, 1283, 1286, 1328, 1240, 1306, 427, 1277, 1233, 1265, - 1235, 1272, 1236, 1263, 1294, 285, 1260, 1351, 1310, 1366, - 378, 282, 1242, 1266, 441, 1282, 223, 1330, 498, 269, + 281, 444, 1306, 1334, 388, 530, 531, 330, 408, 0, + 0, 0, 1363, 1348, 529, 0, 1291, 1366, 1260, 1279, + 1376, 1282, 1285, 1327, 1239, 1305, 427, 1276, 1232, 1264, + 1234, 1271, 1235, 1262, 1293, 285, 1259, 1350, 1309, 1365, + 378, 282, 1241, 1265, 441, 1281, 223, 1329, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, - 519, 433, 1373, 382, 1316, 0, 508, 412, 0, 0, - 0, 1296, 1355, 1304, 1342, 1291, 1329, 1250, 1315, 1368, - 1278, 1325, 1369, 337, 265, 339, 222, 424, 509, 301, - 0, 0, 0, 0, 0, 884, 0, 0, 0, 0, + 519, 433, 1372, 382, 1315, 0, 508, 412, 0, 0, + 0, 1295, 1354, 1303, 1341, 1290, 1328, 1249, 1314, 1367, + 1277, 1324, 1368, 337, 265, 339, 222, 424, 509, 301, + 0, 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, - 369, 375, 1274, 1322, 1363, 1275, 1324, 280, 335, 287, - 279, 534, 1374, 1354, 1239, 1303, 1362, 0, 0, 246, - 1365, 1298, 0, 1327, 0, 1380, 1234, 1318, 0, 1237, - 1241, 1376, 1358, 1269, 290, 0, 0, 0, 0, 0, - 0, 0, 1295, 1305, 1339, 1343, 1289, 0, 0, 0, - 0, 0, 2238, 0, 1267, 0, 1314, 0, 0, 0, - 1246, 1238, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1293, 0, 0, 0, 0, 1249, - 0, 1268, 1340, 0, 1232, 312, 1243, 413, 272, 1386, - 0, 465, 1347, 1357, 1290, 577, 1361, 1288, 1287, 1334, - 1247, 1353, 1281, 377, 1245, 344, 218, 242, 0, 1279, - 423, 473, 485, 1352, 1264, 1273, 270, 1271, 483, 437, - 554, 250, 299, 470, 443, 481, 453, 302, 1313, 1332, + 369, 375, 1273, 1321, 1362, 1274, 1323, 280, 335, 287, + 279, 534, 1373, 1353, 1238, 1302, 1361, 0, 0, 246, + 1364, 1297, 0, 1326, 0, 1379, 1233, 1317, 0, 1236, + 1240, 1375, 1357, 1268, 290, 0, 0, 0, 0, 0, + 0, 0, 1294, 1304, 1338, 1342, 1288, 0, 0, 0, + 0, 0, 0, 0, 1266, 0, 1313, 0, 0, 0, + 1245, 1237, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1292, 0, 0, 0, 0, 1248, + 0, 1267, 1339, 0, 1231, 312, 1242, 413, 272, 1385, + 0, 465, 1346, 1356, 1289, 577, 1360, 1287, 1286, 1333, + 1246, 1352, 1280, 377, 1244, 344, 218, 242, 0, 1278, + 423, 473, 485, 1351, 1263, 1272, 270, 1270, 483, 437, + 554, 250, 299, 470, 443, 481, 453, 302, 1312, 1331, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 644, 645, 646, 647, 648, 0, 0, 643, 649, + 641, 644, 645, 646, 647, 0, 0, 643, 648, 584, + 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, + 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, + 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, + 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, + 426, 543, 544, 271, 608, 245, 571, 237, 1243, 570, + 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, + 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, + 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, + 251, 252, 254, 1258, 294, 298, 306, 309, 317, 318, + 327, 379, 430, 459, 455, 464, 1347, 533, 552, 564, + 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, + 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, + 1336, 1378, 436, 484, 257, 556, 507, 1381, 1382, 1383, + 1384, 1253, 1257, 1251, 1318, 1252, 1307, 1308, 1254, 1369, + 1370, 1371, 610, 611, 612, 613, 614, 615, 616, 617, + 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, + 0, 1340, 1247, 0, 1255, 1256, 1349, 1358, 1359, 642, + 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, + 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, + 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, + 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, + 307, 562, 323, 480, 479, 345, 346, 391, 462, 1311, + 217, 238, 380, 1374, 466, 303, 606, 567, 561, 224, + 240, 1250, 277, 1261, 1269, 0, 1275, 1283, 1284, 1296, + 1298, 1299, 1300, 1301, 1319, 1320, 1322, 1330, 1332, 1335, + 1337, 1344, 1355, 1377, 219, 220, 227, 239, 249, 253, + 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, + 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, + 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, + 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, + 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, + 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, + 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, + 451, 390, 1310, 1380, 565, 1316, 393, 296, 319, 334, + 1325, 566, 513, 244, 478, 305, 268, 1343, 1345, 229, + 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, + 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, + 407, 281, 444, 1306, 1334, 388, 530, 531, 330, 408, + 0, 0, 0, 0, 0, 529, 0, 762, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, + 0, 0, 749, 0, 0, 0, 285, 754, 0, 0, + 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, + 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, + 439, 519, 433, 761, 382, 0, 0, 508, 412, 0, + 0, 0, 0, 0, 757, 758, 0, 0, 0, 0, + 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, + 301, 0, 113, 0, 0, 899, 883, 849, 850, 887, + 900, 901, 902, 903, 888, 0, 255, 889, 890, 262, + 891, 0, 848, 789, 791, 790, 808, 809, 810, 811, + 812, 813, 814, 787, 896, 904, 905, 0, 280, 335, + 287, 279, 534, 0, 0, 2116, 2117, 2118, 0, 0, + 246, 0, 0, 0, 0, 0, 0, 0, 731, 746, + 0, 760, 0, 0, 0, 290, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 743, 744, 0, 0, 0, 0, 843, 0, 745, + 0, 0, 753, 906, 907, 908, 909, 910, 911, 912, + 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, + 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, + 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, + 943, 944, 945, 946, 947, 756, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, + 0, 0, 465, 842, 0, 0, 577, 0, 0, 840, + 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, + 0, 423, 473, 485, 0, 0, 0, 893, 0, 483, + 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, + 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, + 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, + 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, + 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, + 640, 641, 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, 0, - 273, 426, 543, 544, 271, 608, 245, 571, 237, 1244, + 273, 426, 894, 895, 271, 608, 795, 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, 394, - 348, 367, 368, 295, 321, 460, 387, 461, 320, 322, + 348, 803, 804, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, - 609, 251, 252, 254, 1259, 294, 298, 306, 309, 317, - 318, 327, 379, 430, 459, 455, 464, 1348, 533, 552, + 609, 251, 252, 254, 0, 294, 298, 306, 309, 317, + 318, 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, 347, - 385, 1337, 1379, 436, 484, 257, 556, 507, 1382, 1383, - 1384, 1385, 1254, 1258, 1252, 1319, 1253, 1308, 1309, 1255, - 1370, 1371, 1372, 610, 611, 612, 613, 614, 615, 616, + 385, 0, 0, 436, 484, 257, 556, 507, 0, 0, + 0, 0, 853, 841, 766, 857, 768, 854, 855, 763, + 764, 767, 856, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, - 627, 0, 1341, 1248, 0, 1256, 1257, 1350, 1359, 1360, - 642, 396, 497, 553, 349, 361, 364, 354, 373, 0, - 374, 350, 351, 356, 358, 359, 360, 365, 366, 370, - 376, 266, 228, 402, 410, 532, 326, 233, 234, 235, - 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, - 477, 307, 562, 323, 480, 479, 345, 346, 391, 462, - 1312, 217, 238, 380, 1375, 466, 303, 606, 567, 561, - 224, 240, 1251, 277, 1262, 1270, 0, 1276, 1284, 1285, - 1297, 1299, 1300, 1301, 1302, 1320, 1321, 1323, 1331, 1333, - 1336, 1338, 1345, 1356, 1378, 219, 220, 227, 239, 249, + 627, 0, 844, 752, 751, 0, 759, 0, 785, 786, + 788, 792, 793, 794, 805, 806, 807, 815, 817, 818, + 816, 819, 820, 821, 824, 825, 826, 827, 822, 823, + 828, 769, 773, 770, 771, 772, 784, 774, 775, 776, + 777, 778, 779, 780, 781, 782, 783, 867, 868, 869, + 870, 871, 872, 798, 802, 801, 799, 800, 796, 797, + 750, 217, 238, 380, 0, 466, 303, 606, 567, 561, + 224, 240, 858, 277, 859, 0, 0, 863, 0, 0, + 0, 865, 864, 0, 866, 832, 831, 0, 0, 860, + 861, 0, 862, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, - 517, 540, 542, 555, 574, 580, 492, 315, 316, 457, - 458, 328, 329, 603, 604, 314, 550, 581, 548, 602, - 575, 451, 390, 1311, 1381, 565, 1317, 393, 296, 319, - 334, 1326, 566, 513, 244, 478, 305, 268, 1344, 1346, + 517, 540, 542, 555, 574, 580, 492, 873, 874, 875, + 876, 877, 878, 879, 880, 314, 550, 581, 548, 602, + 575, 451, 390, 0, 0, 565, 0, 393, 296, 319, + 334, 0, 566, 513, 244, 478, 305, 268, 898, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, - 524, 407, 281, 444, 1307, 1335, 388, 530, 531, 330, - 408, 0, 0, 0, 1364, 1349, 529, 0, 1292, 1367, - 1261, 1280, 1377, 1283, 1286, 1328, 1240, 1306, 427, 1277, - 1233, 1265, 1235, 1272, 1236, 1263, 1294, 285, 1260, 1351, - 1310, 1366, 378, 282, 1242, 1266, 441, 1282, 223, 1330, + 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, + 529, 0, 762, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 427, 0, 0, 0, 0, 749, 0, 0, + 0, 285, 754, 0, 0, 0, 378, 282, 0, 0, + 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, + 288, 284, 267, 331, 397, 439, 519, 433, 761, 382, + 0, 0, 508, 412, 0, 0, 0, 0, 0, 757, + 758, 0, 0, 0, 0, 0, 0, 2266, 0, 337, + 265, 339, 222, 424, 509, 301, 0, 113, 0, 0, + 899, 883, 849, 850, 887, 900, 901, 902, 903, 888, + 0, 255, 889, 890, 262, 891, 0, 848, 789, 791, + 790, 808, 809, 810, 811, 812, 813, 814, 787, 896, + 904, 905, 2267, 280, 335, 287, 279, 534, 0, 0, + 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, + 0, 0, 0, 731, 746, 0, 760, 0, 0, 0, + 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 743, 744, 0, 0, + 0, 0, 843, 0, 745, 0, 0, 753, 906, 907, + 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, + 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, + 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, + 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, + 756, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 312, 0, 413, 272, 0, 0, 465, 842, 0, + 0, 577, 0, 0, 840, 0, 0, 0, 0, 377, + 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, + 0, 0, 893, 0, 483, 437, 554, 250, 299, 470, + 443, 481, 453, 302, 0, 0, 482, 384, 539, 463, + 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, + 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, + 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, + 635, 636, 637, 638, 639, 640, 641, 644, 645, 646, + 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, + 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, + 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, + 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, + 469, 283, 308, 0, 0, 273, 426, 894, 895, 271, + 608, 795, 571, 237, 0, 570, 419, 538, 547, 406, + 395, 236, 545, 404, 394, 348, 803, 804, 295, 321, + 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, + 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, + 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, + 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, + 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, + 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, + 257, 556, 507, 0, 0, 0, 0, 853, 841, 766, + 857, 768, 854, 855, 763, 764, 767, 856, 610, 611, + 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, + 622, 623, 624, 625, 626, 627, 0, 844, 752, 751, + 0, 759, 0, 785, 786, 788, 792, 793, 794, 805, + 806, 807, 815, 817, 818, 816, 819, 820, 821, 824, + 825, 826, 827, 822, 823, 828, 769, 773, 770, 771, + 772, 784, 774, 775, 776, 777, 778, 779, 780, 781, + 782, 783, 867, 868, 869, 870, 871, 872, 798, 802, + 801, 799, 800, 796, 797, 750, 217, 238, 380, 0, + 466, 303, 606, 567, 561, 224, 240, 858, 277, 859, + 0, 0, 863, 0, 0, 0, 865, 864, 0, 866, + 832, 831, 0, 0, 860, 861, 0, 862, 0, 0, + 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, + 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, + 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, + 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, + 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, + 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, + 580, 492, 873, 874, 875, 876, 877, 878, 879, 880, + 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, + 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, + 478, 305, 268, 898, 0, 229, 263, 247, 274, 289, + 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, + 258, 496, 520, 521, 522, 524, 407, 281, 444, 0, + 408, 388, 530, 531, 330, 103, 529, 0, 762, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 749, 0, 0, 0, 285, 754, 0, + 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, - 397, 439, 519, 433, 1373, 382, 1316, 0, 508, 412, - 0, 0, 0, 1296, 1355, 1304, 1342, 1291, 1329, 1250, - 1315, 1368, 1278, 1325, 1369, 337, 265, 339, 222, 424, - 509, 301, 0, 113, 0, 0, 0, 710, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, - 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, - 357, 362, 369, 375, 1274, 1322, 1363, 1275, 1324, 280, - 335, 287, 279, 534, 1374, 1354, 1239, 1303, 1362, 0, - 0, 246, 1365, 1298, 0, 1327, 0, 1380, 1234, 1318, - 0, 1237, 1241, 1376, 1358, 1269, 290, 0, 0, 0, - 0, 0, 0, 0, 1295, 1305, 1339, 1343, 1289, 0, - 0, 0, 0, 0, 0, 0, 1267, 0, 1314, 0, - 0, 0, 1246, 1238, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1293, 0, 0, 0, - 0, 1249, 0, 1268, 1340, 0, 1232, 312, 1243, 413, - 272, 1386, 0, 465, 1347, 1357, 1290, 577, 1361, 1288, - 1287, 1334, 1247, 1353, 1281, 377, 1245, 344, 218, 242, - 0, 1279, 423, 473, 485, 1352, 1264, 1273, 270, 1271, - 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, - 1313, 1332, 482, 384, 539, 463, 551, 578, 579, 278, - 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, + 397, 439, 519, 433, 761, 382, 0, 0, 508, 412, + 0, 0, 0, 0, 0, 757, 758, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, + 509, 301, 0, 113, 0, 0, 899, 883, 849, 850, + 887, 900, 901, 902, 903, 888, 0, 255, 889, 890, + 262, 891, 0, 848, 789, 791, 790, 808, 809, 810, + 811, 812, 813, 814, 787, 896, 904, 905, 0, 280, + 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 0, 731, + 746, 0, 760, 0, 0, 0, 290, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 743, 744, 0, 0, 0, 0, 843, 0, + 745, 0, 0, 753, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 945, 946, 947, 756, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, + 272, 0, 0, 465, 842, 0, 0, 577, 0, 0, + 840, 0, 0, 0, 0, 377, 0, 344, 218, 242, + 0, 0, 423, 473, 485, 0, 0, 0, 893, 0, + 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, + 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, + 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, - 639, 640, 641, 644, 645, 646, 647, 648, 0, 0, - 643, 649, 584, 241, 491, 383, 259, 248, 541, 560, - 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, - 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, - 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, - 0, 0, 273, 426, 543, 544, 271, 608, 245, 571, - 237, 1244, 570, 419, 538, 547, 406, 395, 236, 545, - 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, - 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, - 510, 559, 609, 251, 252, 254, 1259, 294, 298, 306, - 309, 317, 318, 327, 379, 430, 459, 455, 464, 1348, - 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, - 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, - 506, 347, 385, 1337, 1379, 436, 484, 257, 556, 507, - 1382, 1383, 1384, 1385, 1254, 1258, 1252, 1319, 1253, 1308, - 1309, 1255, 1370, 1371, 1372, 610, 611, 612, 613, 614, - 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, - 625, 626, 627, 0, 1341, 1248, 0, 1256, 1257, 1350, - 1359, 1360, 642, 396, 497, 553, 349, 361, 364, 354, - 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, - 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, - 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, - 475, 476, 477, 307, 562, 323, 480, 479, 345, 346, - 391, 462, 1312, 217, 238, 380, 1375, 466, 303, 606, - 567, 561, 224, 240, 1251, 277, 1262, 1270, 0, 1276, - 1284, 1285, 1297, 1299, 1300, 1301, 1302, 1320, 1321, 1323, - 1331, 1333, 1336, 1338, 1345, 1356, 1378, 219, 220, 227, - 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, - 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, - 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, - 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, - 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, - 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, - 316, 457, 458, 328, 329, 603, 604, 314, 550, 581, - 548, 602, 575, 451, 390, 1311, 1381, 565, 1317, 393, - 296, 319, 334, 1326, 566, 513, 244, 478, 305, 268, - 1344, 1346, 229, 263, 247, 274, 289, 292, 338, 403, - 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, - 521, 522, 524, 407, 281, 444, 1307, 1335, 388, 530, - 531, 330, 408, 0, 0, 0, 1364, 1349, 529, 0, - 1292, 1367, 1261, 1280, 1377, 1283, 1286, 1328, 1240, 1306, - 427, 1277, 1233, 1265, 1235, 1272, 1236, 1263, 1294, 285, - 1260, 1351, 1310, 1366, 378, 282, 1242, 1266, 441, 1282, - 223, 1330, 498, 269, 389, 386, 537, 297, 288, 284, - 267, 331, 397, 439, 519, 433, 1373, 382, 1316, 0, - 508, 412, 0, 0, 0, 1296, 1355, 1304, 1342, 1291, - 1329, 1250, 1315, 1368, 1278, 1325, 1369, 337, 265, 339, - 222, 424, 509, 301, 0, 0, 0, 0, 0, 710, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, - 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, - 353, 355, 357, 362, 369, 375, 1274, 1322, 1363, 1275, - 1324, 280, 335, 287, 279, 534, 1374, 1354, 1239, 1303, - 1362, 0, 0, 246, 1365, 1298, 0, 1327, 0, 1380, - 1234, 1318, 0, 1237, 1241, 1376, 1358, 1269, 290, 0, - 0, 0, 0, 0, 0, 0, 1295, 1305, 1339, 1343, - 1289, 0, 0, 0, 0, 0, 0, 0, 1267, 0, - 1314, 0, 0, 0, 1246, 1238, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1293, 0, - 0, 0, 0, 1249, 0, 1268, 1340, 0, 1232, 312, - 1243, 413, 272, 1386, 0, 465, 1347, 1357, 1290, 577, - 1361, 1288, 1287, 1334, 1247, 1353, 1281, 377, 1245, 344, - 218, 242, 0, 1279, 423, 473, 485, 1352, 1264, 1273, - 270, 1271, 483, 437, 554, 250, 299, 470, 443, 481, - 453, 302, 1313, 1332, 482, 384, 539, 463, 551, 578, - 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, - 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, - 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 644, 645, 646, 647, 648, - 0, 0, 643, 649, 584, 241, 491, 383, 259, 248, - 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, - 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, - 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, - 283, 308, 0, 0, 273, 426, 543, 544, 271, 608, - 245, 571, 237, 1244, 570, 419, 538, 547, 406, 395, - 236, 545, 404, 394, 348, 367, 368, 295, 321, 460, - 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, - 226, 0, 510, 559, 609, 251, 252, 254, 1259, 294, - 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, - 464, 1348, 533, 552, 564, 576, 582, 583, 585, 591, - 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, - 418, 325, 506, 347, 385, 1337, 1379, 436, 484, 257, - 556, 507, 1382, 1383, 1384, 1385, 1254, 1258, 1252, 1319, - 1253, 1308, 1309, 1255, 1370, 1371, 1372, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 0, 1341, 1248, 0, 1256, - 1257, 1350, 1359, 1360, 642, 396, 497, 553, 349, 361, - 364, 354, 373, 0, 374, 350, 351, 356, 358, 359, - 360, 365, 366, 370, 376, 266, 228, 402, 410, 532, - 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, - 573, 474, 475, 476, 477, 307, 562, 323, 480, 479, - 345, 346, 391, 462, 1312, 217, 238, 380, 1375, 466, - 303, 606, 567, 561, 224, 240, 1251, 277, 1262, 1270, - 0, 1276, 1284, 1285, 1297, 1299, 1300, 1301, 1302, 1320, - 1321, 1323, 1331, 1333, 1336, 1338, 1345, 1356, 1378, 219, - 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, - 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, - 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, - 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, - 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, - 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, - 492, 315, 316, 457, 458, 328, 329, 603, 604, 314, - 550, 581, 548, 602, 575, 451, 390, 1311, 1381, 565, - 1317, 393, 296, 319, 334, 1326, 566, 513, 244, 478, - 305, 268, 1344, 1346, 229, 263, 247, 274, 289, 292, - 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, - 496, 520, 521, 522, 524, 407, 281, 444, 1307, 1335, - 388, 530, 531, 330, 408, 0, 0, 0, 1364, 1349, - 529, 0, 1292, 1367, 1261, 1280, 1377, 1283, 1286, 1328, - 1240, 1306, 427, 1277, 1233, 1265, 1235, 1272, 1236, 1263, - 1294, 285, 1260, 1351, 1310, 1366, 378, 282, 1242, 1266, - 441, 1282, 223, 1330, 498, 269, 389, 386, 537, 297, - 288, 284, 267, 331, 397, 439, 519, 433, 1373, 382, - 1316, 0, 508, 412, 0, 0, 0, 1296, 1355, 1304, - 1342, 1291, 1329, 1250, 1315, 1368, 1278, 1325, 1369, 337, - 265, 339, 222, 424, 509, 301, 0, 0, 0, 0, - 0, 884, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, - 371, 352, 353, 355, 357, 362, 369, 375, 1274, 1322, - 1363, 1275, 1324, 280, 335, 287, 279, 534, 1374, 1354, - 1239, 1303, 1362, 0, 0, 246, 1365, 1298, 0, 1327, - 0, 1380, 1234, 1318, 0, 1237, 1241, 1376, 1358, 1269, - 290, 0, 0, 0, 0, 0, 0, 0, 1295, 1305, - 1339, 1343, 1289, 0, 0, 0, 0, 0, 0, 0, - 1267, 0, 1314, 0, 0, 0, 1246, 1238, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1293, 0, 0, 0, 0, 1249, 0, 1268, 1340, 0, - 1232, 312, 1243, 413, 272, 1386, 0, 465, 1347, 1357, - 1290, 577, 1361, 1288, 1287, 1334, 1247, 1353, 1281, 377, - 1245, 344, 218, 242, 0, 1279, 423, 473, 485, 1352, - 1264, 1273, 270, 1271, 483, 437, 554, 250, 299, 470, - 443, 481, 453, 302, 1313, 1332, 482, 384, 539, 463, - 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, - 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, - 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, - 635, 636, 637, 638, 639, 640, 641, 644, 645, 646, - 647, 648, 0, 0, 643, 649, 584, 241, 491, 383, + 639, 640, 641, 644, 645, 646, 647, 0, 0, 643, + 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, + 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, + 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, + 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, + 0, 273, 426, 894, 895, 271, 608, 795, 571, 237, + 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, + 394, 348, 803, 804, 295, 321, 460, 387, 461, 320, + 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, + 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, + 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, + 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, + 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, + 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, + 0, 0, 0, 853, 841, 766, 857, 768, 854, 855, + 763, 764, 767, 856, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 0, 844, 752, 751, 0, 759, 0, 785, + 786, 788, 792, 793, 794, 805, 806, 807, 815, 817, + 818, 816, 819, 820, 821, 824, 825, 826, 827, 822, + 823, 828, 769, 773, 770, 771, 772, 784, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 867, 868, + 869, 870, 871, 872, 798, 802, 801, 799, 800, 796, + 797, 750, 217, 238, 380, 112, 466, 303, 606, 567, + 561, 224, 240, 858, 277, 859, 0, 0, 863, 0, + 0, 0, 865, 864, 0, 866, 832, 831, 0, 0, + 860, 861, 0, 862, 0, 0, 219, 220, 227, 239, + 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, + 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, + 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, + 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, + 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, + 512, 517, 540, 542, 555, 574, 580, 492, 873, 874, + 875, 876, 877, 878, 879, 880, 314, 550, 581, 548, + 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, + 319, 334, 0, 566, 513, 244, 478, 305, 268, 898, + 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, + 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, + 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, + 330, 529, 0, 762, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 0, 0, 0, 0, 749, 0, + 0, 0, 285, 754, 0, 0, 0, 378, 282, 0, + 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, + 297, 288, 284, 267, 331, 397, 439, 519, 433, 761, + 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, + 757, 758, 0, 0, 0, 0, 0, 0, 0, 0, + 337, 265, 339, 222, 424, 509, 301, 0, 113, 0, + 0, 899, 883, 849, 850, 887, 900, 901, 902, 903, + 888, 0, 255, 889, 890, 262, 891, 0, 848, 789, + 791, 790, 808, 809, 810, 811, 812, 813, 814, 787, + 896, 904, 905, 0, 280, 335, 287, 279, 534, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, + 0, 0, 0, 0, 731, 746, 0, 760, 0, 0, + 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 743, 744, 0, + 0, 0, 0, 843, 0, 745, 0, 0, 753, 906, + 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, + 947, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 312, 0, 413, 272, 0, 0, 465, 842, + 0, 0, 577, 0, 0, 840, 0, 0, 0, 0, + 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, + 0, 0, 0, 893, 0, 483, 437, 554, 250, 299, + 470, 443, 481, 453, 302, 3732, 0, 482, 384, 539, + 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, + 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, + 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, + 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, - 0, 469, 283, 308, 0, 0, 273, 426, 543, 544, - 271, 608, 245, 571, 237, 1244, 570, 419, 538, 547, - 406, 395, 236, 545, 404, 394, 348, 367, 368, 295, + 0, 469, 283, 308, 0, 0, 273, 426, 894, 895, + 271, 608, 795, 571, 237, 0, 570, 419, 538, 547, + 406, 395, 236, 545, 404, 394, 348, 803, 804, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, - 1259, 294, 298, 306, 309, 317, 318, 327, 379, 430, - 459, 455, 464, 1348, 533, 552, 564, 576, 582, 583, + 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, + 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, - 594, 588, 418, 325, 506, 347, 385, 1337, 1379, 436, - 484, 257, 556, 507, 1382, 1383, 1384, 1385, 1254, 1258, - 1252, 1319, 1253, 1308, 1309, 1255, 1370, 1371, 1372, 610, + 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, + 484, 257, 556, 507, 0, 0, 0, 0, 853, 841, + 766, 857, 768, 854, 855, 763, 764, 767, 856, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 0, 1341, 1248, - 0, 1256, 1257, 1350, 1359, 1360, 642, 396, 497, 553, - 349, 361, 364, 354, 373, 0, 374, 350, 351, 356, - 358, 359, 360, 365, 366, 370, 376, 266, 228, 402, - 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, - 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, - 480, 479, 345, 346, 391, 462, 1312, 217, 238, 380, - 1375, 466, 303, 606, 567, 561, 224, 240, 1251, 277, - 1262, 1270, 0, 1276, 1284, 1285, 1297, 1299, 1300, 1301, - 1302, 1320, 1321, 1323, 1331, 1333, 1336, 1338, 1345, 1356, - 1378, 219, 220, 227, 239, 249, 253, 260, 276, 291, + 621, 622, 623, 624, 625, 626, 627, 0, 844, 752, + 751, 0, 759, 0, 785, 786, 788, 792, 793, 794, + 805, 806, 807, 815, 817, 818, 816, 819, 820, 821, + 824, 825, 826, 827, 822, 823, 828, 769, 773, 770, + 771, 772, 784, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 867, 868, 869, 870, 871, 872, 798, + 802, 801, 799, 800, 796, 797, 750, 217, 238, 380, + 0, 466, 303, 606, 567, 561, 224, 240, 858, 277, + 859, 0, 0, 863, 0, 0, 0, 865, 864, 0, + 866, 832, 831, 0, 0, 860, 861, 0, 862, 0, + 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, - 574, 580, 492, 315, 316, 457, 458, 328, 329, 603, - 604, 314, 550, 581, 548, 602, 575, 451, 390, 1311, - 1381, 565, 1317, 393, 296, 319, 334, 1326, 566, 513, - 244, 478, 305, 268, 1344, 1346, 229, 263, 247, 274, + 574, 580, 492, 873, 874, 875, 876, 877, 878, 879, + 880, 314, 550, 581, 548, 602, 575, 451, 390, 0, + 0, 565, 0, 393, 296, 319, 334, 0, 566, 513, + 244, 478, 305, 268, 898, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, - 1307, 1335, 388, 530, 531, 330, 408, 0, 0, 0, - 1364, 1349, 529, 0, 1292, 1367, 1261, 1280, 1377, 1283, - 1286, 1328, 1240, 1306, 427, 1277, 1233, 1265, 1235, 1272, - 1236, 1263, 1294, 285, 1260, 1351, 1310, 1366, 378, 282, - 1242, 1266, 441, 1282, 223, 1330, 498, 269, 389, 386, - 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, - 1373, 382, 1316, 0, 508, 412, 0, 0, 0, 1296, - 1355, 1304, 1342, 1291, 1329, 1250, 1315, 1368, 1278, 1325, - 1369, 337, 265, 339, 222, 424, 509, 301, 0, 0, - 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, - 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, - 1274, 1322, 1363, 1275, 1324, 280, 335, 287, 279, 534, - 1374, 1354, 1239, 1303, 1362, 0, 0, 246, 1365, 1298, - 0, 1327, 0, 1380, 1234, 1318, 0, 1237, 1241, 1376, - 1358, 1269, 290, 0, 0, 0, 0, 0, 0, 0, - 1295, 1305, 1339, 1343, 1289, 0, 0, 0, 0, 0, - 0, 0, 1267, 0, 1314, 0, 0, 0, 1246, 1238, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1293, 0, 0, 0, 0, 1249, 0, 1268, - 1340, 0, 1232, 312, 1243, 413, 272, 1386, 0, 465, - 1347, 1357, 1290, 577, 1361, 1288, 1287, 1334, 1247, 1353, - 1281, 377, 1245, 344, 218, 242, 0, 1279, 423, 473, - 485, 1352, 1264, 1273, 270, 1271, 483, 437, 554, 250, - 299, 470, 443, 481, 453, 302, 1313, 1332, 482, 384, - 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, - 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, - 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, - 645, 646, 647, 648, 0, 0, 643, 649, 584, 241, - 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, - 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, - 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, - 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, - 543, 544, 271, 608, 245, 571, 237, 1244, 570, 419, - 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, - 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, - 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, - 252, 254, 1259, 294, 298, 306, 309, 317, 318, 327, - 379, 430, 459, 455, 464, 1348, 533, 552, 564, 576, - 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, - 597, 598, 594, 588, 418, 325, 506, 347, 385, 1337, - 1379, 436, 484, 257, 556, 507, 1382, 1383, 1384, 1385, - 1254, 1258, 1252, 1319, 1253, 1308, 1309, 1255, 1370, 1371, - 1372, 610, 611, 612, 613, 614, 615, 616, 617, 618, - 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, - 1341, 1248, 0, 1256, 1257, 1350, 1359, 1360, 642, 396, - 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, - 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, - 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, - 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, - 562, 323, 480, 479, 345, 346, 391, 462, 1312, 217, - 238, 380, 1375, 466, 303, 606, 567, 561, 224, 240, - 1251, 277, 1262, 1270, 0, 1276, 1284, 1285, 1297, 1299, - 1300, 1301, 1302, 1320, 1321, 1323, 1331, 1333, 1336, 1338, - 1345, 1356, 1378, 219, 220, 227, 239, 249, 253, 260, - 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, - 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, - 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, - 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, - 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, - 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, - 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, - 390, 1311, 1381, 565, 1317, 393, 296, 319, 334, 1326, - 566, 513, 244, 478, 305, 268, 1344, 1346, 229, 263, - 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, - 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, - 281, 444, 1307, 1335, 388, 530, 531, 330, 408, 0, - 0, 0, 0, 0, 529, 0, 763, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, - 0, 750, 0, 0, 0, 285, 755, 0, 0, 0, - 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, - 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, - 519, 433, 762, 382, 0, 0, 508, 412, 0, 0, - 0, 0, 0, 758, 759, 0, 0, 0, 0, 0, - 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, - 0, 113, 0, 0, 900, 884, 850, 851, 888, 901, - 902, 903, 904, 889, 0, 255, 890, 891, 262, 892, - 0, 849, 790, 792, 791, 809, 810, 811, 812, 813, - 814, 815, 788, 897, 905, 906, 0, 280, 335, 287, - 279, 534, 0, 0, 2117, 2118, 2119, 0, 0, 246, - 0, 0, 0, 0, 0, 0, 0, 732, 747, 0, - 761, 0, 0, 0, 290, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 744, 745, 0, 0, 0, 0, 844, 0, 746, 0, - 0, 754, 907, 908, 909, 910, 911, 912, 913, 914, - 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, - 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, - 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, - 945, 946, 947, 948, 757, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 312, 0, 413, 272, 0, - 0, 465, 843, 0, 0, 577, 0, 0, 841, 0, - 0, 0, 0, 377, 0, 344, 218, 242, 0, 0, - 423, 473, 485, 0, 0, 0, 894, 0, 483, 437, - 554, 250, 299, 470, 443, 481, 453, 302, 0, 0, - 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, - 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, - 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, - 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, - 641, 644, 645, 646, 647, 648, 0, 0, 643, 649, - 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, - 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, - 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, - 405, 340, 341, 231, 0, 469, 283, 308, 0, 0, - 273, 426, 895, 896, 271, 608, 796, 571, 237, 0, - 570, 419, 538, 547, 406, 395, 236, 545, 404, 394, - 348, 804, 805, 295, 321, 460, 387, 461, 320, 322, - 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, - 609, 251, 252, 254, 0, 294, 298, 306, 309, 317, - 318, 327, 379, 430, 459, 455, 464, 0, 533, 552, - 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, - 599, 596, 597, 598, 594, 588, 418, 325, 506, 347, - 385, 0, 0, 436, 484, 257, 556, 507, 0, 0, - 0, 0, 854, 842, 767, 858, 769, 855, 856, 764, - 765, 768, 857, 610, 611, 612, 613, 614, 615, 616, - 617, 618, 619, 620, 621, 622, 623, 624, 625, 626, - 627, 0, 845, 753, 752, 0, 760, 0, 786, 787, - 789, 793, 794, 795, 806, 807, 808, 816, 818, 819, - 817, 820, 821, 822, 825, 826, 827, 828, 823, 824, - 829, 770, 774, 771, 772, 773, 785, 775, 776, 777, - 778, 779, 780, 781, 782, 783, 784, 868, 869, 870, - 871, 872, 873, 799, 803, 802, 800, 801, 797, 798, - 751, 217, 238, 380, 0, 466, 303, 606, 567, 561, - 224, 240, 859, 277, 860, 0, 0, 864, 0, 0, - 0, 866, 865, 0, 867, 833, 832, 0, 0, 861, - 862, 0, 863, 0, 0, 219, 220, 227, 239, 249, - 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, - 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, - 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, - 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, - 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, - 517, 540, 542, 555, 574, 580, 492, 874, 875, 876, - 877, 878, 879, 880, 881, 314, 550, 581, 548, 602, - 575, 451, 390, 0, 0, 565, 0, 393, 296, 319, - 334, 0, 566, 513, 244, 478, 305, 268, 899, 0, - 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, - 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, - 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, - 529, 0, 763, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 427, 0, 0, 0, 0, 750, 0, 0, - 0, 285, 755, 0, 0, 0, 378, 282, 0, 0, - 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, - 288, 284, 267, 331, 397, 439, 519, 433, 762, 382, - 0, 0, 508, 412, 0, 0, 0, 0, 0, 758, - 759, 0, 0, 0, 0, 0, 0, 2267, 0, 337, - 265, 339, 222, 424, 509, 301, 0, 113, 0, 0, - 900, 884, 850, 851, 888, 901, 902, 903, 904, 889, - 0, 255, 890, 891, 262, 892, 0, 849, 790, 792, - 791, 809, 810, 811, 812, 813, 814, 815, 788, 897, - 905, 906, 2268, 280, 335, 287, 279, 534, 0, 0, - 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, - 0, 0, 0, 732, 747, 0, 761, 0, 0, 0, - 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 744, 745, 0, 0, - 0, 0, 844, 0, 746, 0, 0, 754, 907, 908, - 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, - 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, - 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, - 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, - 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 312, 0, 413, 272, 0, 0, 465, 843, 0, - 0, 577, 0, 0, 841, 0, 0, 0, 0, 377, - 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, - 0, 0, 894, 0, 483, 437, 554, 250, 299, 470, - 443, 481, 453, 302, 0, 0, 482, 384, 539, 463, - 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, - 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, - 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, - 635, 636, 637, 638, 639, 640, 641, 644, 645, 646, - 647, 648, 0, 0, 643, 649, 584, 241, 491, 383, + 408, 0, 388, 530, 531, 330, 529, 0, 762, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 749, 0, 0, 0, 285, 754, 0, + 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, + 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, + 397, 439, 519, 433, 761, 382, 0, 0, 508, 412, + 0, 0, 0, 0, 0, 757, 758, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, + 509, 301, 0, 113, 0, 1627, 899, 883, 849, 850, + 887, 900, 901, 902, 903, 888, 0, 255, 889, 890, + 262, 891, 0, 848, 789, 791, 790, 808, 809, 810, + 811, 812, 813, 814, 787, 896, 904, 905, 0, 280, + 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 0, 731, + 746, 0, 760, 0, 0, 0, 290, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 743, 744, 0, 0, 0, 0, 843, 0, + 745, 0, 0, 753, 906, 907, 908, 909, 910, 911, + 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, + 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, + 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, + 942, 943, 944, 945, 946, 947, 756, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, + 272, 0, 0, 465, 842, 0, 0, 577, 0, 0, + 840, 0, 0, 0, 0, 377, 0, 344, 218, 242, + 0, 0, 423, 473, 485, 0, 0, 0, 893, 0, + 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, + 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, + 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, + 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 644, 645, 646, 647, 0, 0, 643, + 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, + 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, + 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, + 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, + 0, 273, 426, 894, 895, 271, 608, 795, 571, 237, + 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, + 394, 348, 803, 804, 295, 321, 460, 387, 461, 320, + 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, + 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, + 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, + 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, + 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, + 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, + 0, 0, 0, 853, 841, 766, 857, 768, 854, 855, + 763, 764, 767, 856, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 0, 844, 752, 751, 0, 759, 0, 785, + 786, 788, 792, 793, 794, 805, 806, 807, 815, 817, + 818, 816, 819, 820, 821, 824, 825, 826, 827, 822, + 823, 828, 769, 773, 770, 771, 772, 784, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 867, 868, + 869, 870, 871, 872, 798, 802, 801, 799, 800, 796, + 797, 750, 217, 238, 380, 0, 466, 303, 606, 567, + 561, 224, 240, 858, 277, 859, 0, 0, 863, 0, + 0, 0, 865, 864, 0, 866, 832, 831, 0, 0, + 860, 861, 0, 862, 0, 0, 219, 220, 227, 239, + 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, + 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, + 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, + 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, + 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, + 512, 517, 540, 542, 555, 574, 580, 492, 873, 874, + 875, 876, 877, 878, 879, 880, 314, 550, 581, 548, + 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, + 319, 334, 0, 566, 513, 244, 478, 305, 268, 898, + 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, + 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, + 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, + 330, 529, 0, 762, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 0, 0, 0, 0, 749, 0, + 0, 0, 285, 754, 0, 0, 0, 378, 282, 0, + 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, + 297, 288, 284, 267, 331, 397, 439, 519, 433, 761, + 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, + 757, 758, 0, 0, 0, 0, 0, 0, 0, 0, + 337, 265, 339, 222, 424, 509, 301, 0, 113, 0, + 0, 899, 883, 849, 850, 887, 900, 901, 902, 903, + 888, 0, 255, 889, 890, 262, 891, 0, 848, 789, + 791, 790, 808, 809, 810, 811, 812, 813, 814, 787, + 896, 904, 905, 0, 280, 335, 287, 279, 534, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, + 0, 0, 0, 0, 731, 746, 0, 760, 0, 0, + 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 743, 744, 993, + 0, 0, 0, 843, 0, 745, 0, 0, 753, 906, + 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, + 947, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 312, 0, 413, 272, 0, 0, 465, 842, + 0, 0, 577, 0, 0, 840, 0, 0, 0, 0, + 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, + 0, 0, 0, 893, 0, 483, 437, 554, 250, 299, + 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, + 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, + 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, + 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, + 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, - 0, 469, 283, 308, 0, 0, 273, 426, 895, 896, - 271, 608, 796, 571, 237, 0, 570, 419, 538, 547, - 406, 395, 236, 545, 404, 394, 348, 804, 805, 295, + 0, 469, 283, 308, 0, 0, 273, 426, 894, 895, + 271, 608, 795, 571, 237, 0, 570, 419, 538, 547, + 406, 395, 236, 545, 404, 394, 348, 803, 804, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, - 484, 257, 556, 507, 0, 0, 0, 0, 854, 842, - 767, 858, 769, 855, 856, 764, 765, 768, 857, 610, + 484, 257, 556, 507, 0, 0, 0, 0, 853, 841, + 766, 857, 768, 854, 855, 763, 764, 767, 856, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, - 621, 622, 623, 624, 625, 626, 627, 0, 845, 753, - 752, 0, 760, 0, 786, 787, 789, 793, 794, 795, - 806, 807, 808, 816, 818, 819, 817, 820, 821, 822, - 825, 826, 827, 828, 823, 824, 829, 770, 774, 771, - 772, 773, 785, 775, 776, 777, 778, 779, 780, 781, - 782, 783, 784, 868, 869, 870, 871, 872, 873, 799, - 803, 802, 800, 801, 797, 798, 751, 217, 238, 380, - 0, 466, 303, 606, 567, 561, 224, 240, 859, 277, - 860, 0, 0, 864, 0, 0, 0, 866, 865, 0, - 867, 833, 832, 0, 0, 861, 862, 0, 863, 0, + 621, 622, 623, 624, 625, 626, 627, 0, 844, 752, + 751, 0, 759, 0, 785, 786, 788, 792, 793, 794, + 805, 806, 807, 815, 817, 818, 816, 819, 820, 821, + 824, 825, 826, 827, 822, 823, 828, 769, 773, 770, + 771, 772, 784, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 867, 868, 869, 870, 871, 872, 798, + 802, 801, 799, 800, 796, 797, 750, 217, 238, 380, + 0, 466, 303, 606, 567, 561, 224, 240, 858, 277, + 859, 0, 0, 863, 0, 0, 0, 865, 864, 0, + 866, 832, 831, 0, 0, 860, 861, 0, 862, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, - 574, 580, 492, 874, 875, 876, 877, 878, 879, 880, - 881, 314, 550, 581, 548, 602, 575, 451, 390, 0, + 574, 580, 492, 873, 874, 875, 876, 877, 878, 879, + 880, 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, 513, - 244, 478, 305, 268, 899, 0, 229, 263, 247, 274, + 244, 478, 305, 268, 898, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, - 0, 408, 388, 530, 531, 330, 103, 529, 0, 763, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 750, 0, 0, 0, 285, 755, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 762, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 758, 759, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 113, 0, 0, 900, 884, 850, - 851, 888, 901, 902, 903, 904, 889, 0, 255, 890, - 891, 262, 892, 0, 849, 790, 792, 791, 809, 810, - 811, 812, 813, 814, 815, 788, 897, 905, 906, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 732, 747, 0, 761, 0, 0, 0, 290, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 744, 745, 0, 0, 0, 0, 844, - 0, 746, 0, 0, 754, 907, 908, 909, 910, 911, + 408, 0, 388, 530, 531, 330, 529, 0, 762, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 749, 0, 0, 0, 285, 754, 0, + 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, + 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, + 397, 439, 519, 433, 761, 382, 0, 0, 508, 412, + 0, 0, 0, 0, 0, 757, 758, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, + 509, 301, 0, 113, 0, 0, 899, 883, 849, 850, + 887, 900, 901, 902, 903, 888, 0, 255, 889, 890, + 262, 891, 0, 848, 789, 791, 790, 808, 809, 810, + 811, 812, 813, 814, 787, 896, 904, 905, 0, 280, + 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 0, 731, + 746, 0, 760, 0, 0, 0, 290, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 743, 744, 0, 0, 0, 0, 843, 0, + 745, 0, 0, 753, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, - 942, 943, 944, 945, 946, 947, 948, 757, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 413, 272, 0, 0, 465, 843, 0, 0, 577, 0, - 0, 841, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 894, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, - 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, - 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, - 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, - 308, 0, 0, 273, 426, 895, 896, 271, 608, 796, - 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, - 545, 404, 394, 348, 804, 805, 295, 321, 460, 387, - 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, - 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, - 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, - 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, - 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, - 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, - 507, 0, 0, 0, 0, 854, 842, 767, 858, 769, - 855, 856, 764, 765, 768, 857, 610, 611, 612, 613, - 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625, 626, 627, 0, 845, 753, 752, 0, 760, - 0, 786, 787, 789, 793, 794, 795, 806, 807, 808, - 816, 818, 819, 817, 820, 821, 822, 825, 826, 827, - 828, 823, 824, 829, 770, 774, 771, 772, 773, 785, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 868, 869, 870, 871, 872, 873, 799, 803, 802, 800, - 801, 797, 798, 751, 217, 238, 380, 112, 466, 303, - 606, 567, 561, 224, 240, 859, 277, 860, 0, 0, - 864, 0, 0, 0, 866, 865, 0, 867, 833, 832, - 0, 0, 861, 862, 0, 863, 0, 0, 219, 220, - 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, - 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, - 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, - 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, - 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, - 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, - 874, 875, 876, 877, 878, 879, 880, 881, 314, 550, - 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, - 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, - 268, 899, 0, 229, 263, 247, 274, 289, 292, 338, - 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, - 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, - 530, 531, 330, 529, 0, 763, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, - 750, 0, 0, 0, 285, 755, 0, 0, 0, 378, - 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, - 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, - 433, 762, 382, 0, 0, 508, 412, 0, 0, 0, - 0, 0, 758, 759, 0, 0, 0, 0, 0, 0, - 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 113, 0, 0, 900, 884, 850, 851, 888, 901, 902, - 903, 904, 889, 0, 255, 890, 891, 262, 892, 0, - 849, 790, 792, 791, 809, 810, 811, 812, 813, 814, - 815, 788, 897, 905, 906, 0, 280, 335, 287, 279, - 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, - 0, 0, 0, 0, 0, 0, 732, 747, 0, 761, - 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 744, - 745, 0, 0, 0, 0, 844, 0, 746, 0, 0, - 754, 907, 908, 909, 910, 911, 912, 913, 914, 915, - 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, - 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, - 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, - 946, 947, 948, 757, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, - 465, 843, 0, 0, 577, 0, 0, 841, 0, 0, - 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, - 473, 485, 0, 0, 0, 894, 0, 483, 437, 554, - 250, 299, 470, 443, 481, 453, 302, 3733, 0, 482, - 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, - 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, - 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 895, 896, 271, 608, 796, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 804, 805, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 854, 842, 767, 858, 769, 855, 856, 764, 765, - 768, 857, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 845, 753, 752, 0, 760, 0, 786, 787, 789, - 793, 794, 795, 806, 807, 808, 816, 818, 819, 817, - 820, 821, 822, 825, 826, 827, 828, 823, 824, 829, - 770, 774, 771, 772, 773, 785, 775, 776, 777, 778, - 779, 780, 781, 782, 783, 784, 868, 869, 870, 871, - 872, 873, 799, 803, 802, 800, 801, 797, 798, 751, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 859, 277, 860, 0, 0, 864, 0, 0, 0, - 866, 865, 0, 867, 833, 832, 0, 0, 861, 862, - 0, 863, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 874, 875, 876, 877, - 878, 879, 880, 881, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 899, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 763, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 750, 0, 0, 0, - 285, 755, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 762, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 758, 759, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 113, 0, 1628, 900, - 884, 850, 851, 888, 901, 902, 903, 904, 889, 0, - 255, 890, 891, 262, 892, 0, 849, 790, 792, 791, - 809, 810, 811, 812, 813, 814, 815, 788, 897, 905, - 906, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 732, 747, 0, 761, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 744, 745, 0, 0, 0, - 0, 844, 0, 746, 0, 0, 754, 907, 908, 909, - 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, - 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, - 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, - 940, 941, 942, 943, 944, 945, 946, 947, 948, 757, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 843, 0, 0, - 577, 0, 0, 841, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 894, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 895, 896, 271, - 608, 796, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 804, 805, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 854, 842, 767, - 858, 769, 855, 856, 764, 765, 768, 857, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 845, 753, 752, - 0, 760, 0, 786, 787, 789, 793, 794, 795, 806, - 807, 808, 816, 818, 819, 817, 820, 821, 822, 825, - 826, 827, 828, 823, 824, 829, 770, 774, 771, 772, - 773, 785, 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 868, 869, 870, 871, 872, 873, 799, 803, - 802, 800, 801, 797, 798, 751, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 859, 277, 860, - 0, 0, 864, 0, 0, 0, 866, 865, 0, 867, - 833, 832, 0, 0, 861, 862, 0, 863, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 874, 875, 876, 877, 878, 879, 880, 881, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 899, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 763, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 750, 0, 0, 0, 285, 755, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 762, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 758, 759, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 113, 0, 0, 900, 884, 850, 851, 888, - 901, 902, 903, 904, 889, 0, 255, 890, 891, 262, - 892, 0, 849, 790, 792, 791, 809, 810, 811, 812, - 813, 814, 815, 788, 897, 905, 906, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 732, 747, - 0, 761, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 744, 745, 994, 0, 0, 0, 844, 0, 746, - 0, 0, 754, 907, 908, 909, 910, 911, 912, 913, - 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, - 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, - 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, - 944, 945, 946, 947, 948, 757, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 843, 0, 0, 577, 0, 0, 841, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 894, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, + 942, 943, 944, 945, 946, 947, 756, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, + 272, 0, 0, 465, 842, 0, 0, 577, 0, 0, + 840, 0, 0, 0, 0, 377, 0, 344, 218, 242, + 0, 0, 423, 473, 485, 0, 0, 0, 893, 0, + 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, + 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, + 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, + 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 644, 645, 646, 647, 0, 0, 643, + 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 895, 896, 271, 608, 796, 571, 237, + 0, 273, 426, 894, 895, 271, 608, 795, 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 804, 805, 295, 321, 460, 387, 461, 320, + 394, 348, 803, 804, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 854, 842, 767, 858, 769, 855, 856, - 764, 765, 768, 857, 610, 611, 612, 613, 614, 615, + 0, 0, 0, 853, 841, 766, 857, 768, 854, 855, + 763, 764, 767, 856, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 845, 753, 752, 0, 760, 0, 786, - 787, 789, 793, 794, 795, 806, 807, 808, 816, 818, - 819, 817, 820, 821, 822, 825, 826, 827, 828, 823, - 824, 829, 770, 774, 771, 772, 773, 785, 775, 776, - 777, 778, 779, 780, 781, 782, 783, 784, 868, 869, - 870, 871, 872, 873, 799, 803, 802, 800, 801, 797, - 798, 751, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 859, 277, 860, 0, 0, 864, 0, - 0, 0, 866, 865, 0, 867, 833, 832, 0, 0, - 861, 862, 0, 863, 0, 0, 219, 220, 227, 239, + 626, 627, 0, 844, 752, 751, 0, 759, 0, 785, + 786, 788, 792, 793, 794, 805, 806, 807, 815, 817, + 818, 816, 819, 820, 821, 824, 825, 826, 827, 822, + 823, 828, 769, 773, 770, 771, 772, 784, 774, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 867, 868, + 869, 870, 871, 872, 798, 802, 801, 799, 800, 796, + 797, 750, 217, 238, 380, 0, 466, 303, 606, 567, + 561, 224, 240, 858, 277, 859, 0, 0, 863, 0, + 0, 0, 865, 864, 0, 866, 832, 831, 0, 0, + 860, 861, 0, 862, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 874, 875, - 876, 877, 878, 879, 880, 881, 314, 550, 581, 548, + 512, 517, 540, 542, 555, 574, 580, 492, 873, 874, + 875, 876, 877, 878, 879, 880, 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 899, + 319, 334, 0, 566, 513, 244, 478, 305, 268, 898, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 763, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 750, 0, - 0, 0, 285, 755, 0, 0, 0, 378, 282, 0, + 330, 529, 0, 762, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 0, 0, 0, 0, 749, 0, + 0, 0, 285, 754, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 762, + 297, 288, 284, 267, 331, 397, 439, 519, 433, 761, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 758, 759, 0, 0, 0, 0, 0, 0, 0, 0, + 757, 758, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, 113, 0, - 0, 900, 884, 850, 851, 888, 901, 902, 903, 904, - 889, 0, 255, 890, 891, 262, 892, 0, 849, 790, - 792, 791, 809, 810, 811, 812, 813, 814, 815, 788, - 897, 905, 906, 0, 280, 335, 287, 279, 534, 0, + 0, 899, 883, 849, 850, 887, 900, 901, 902, 903, + 888, 0, 255, 889, 890, 262, 891, 0, 848, 789, + 791, 790, 808, 809, 810, 811, 812, 813, 814, 787, + 896, 904, 905, 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 732, 747, 0, 761, 0, 0, + 0, 0, 0, 0, 0, 746, 0, 760, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 744, 745, 0, - 0, 0, 0, 844, 0, 746, 0, 0, 754, 907, - 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, - 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, - 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, - 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, - 948, 757, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 843, - 0, 0, 577, 0, 0, 841, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 743, 744, 0, + 0, 0, 0, 843, 0, 745, 0, 0, 753, 906, + 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, + 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, + 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, + 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, + 947, 756, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 312, 0, 413, 272, 0, 0, 465, 842, + 0, 0, 577, 0, 0, 840, 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 894, 0, 483, 437, 554, 250, 299, + 0, 0, 0, 893, 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 895, - 896, 271, 608, 796, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 804, 805, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 854, - 842, 767, 858, 769, 855, 856, 764, 765, 768, 857, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 845, - 753, 752, 0, 760, 0, 786, 787, 789, 793, 794, - 795, 806, 807, 808, 816, 818, 819, 817, 820, 821, - 822, 825, 826, 827, 828, 823, 824, 829, 770, 774, - 771, 772, 773, 785, 775, 776, 777, 778, 779, 780, - 781, 782, 783, 784, 868, 869, 870, 871, 872, 873, - 799, 803, 802, 800, 801, 797, 798, 751, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 859, - 277, 860, 0, 0, 864, 0, 0, 0, 866, 865, - 0, 867, 833, 832, 0, 0, 861, 862, 0, 863, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 874, 875, 876, 877, 878, 879, - 880, 881, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 899, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 763, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 750, 0, 0, 0, 285, 755, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 762, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 758, 759, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 113, 0, 0, 900, 884, 850, - 851, 888, 901, 902, 903, 904, 889, 0, 255, 890, - 891, 262, 892, 0, 849, 790, 792, 791, 809, 810, - 811, 812, 813, 814, 815, 788, 897, 905, 906, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 747, 0, 761, 0, 0, 0, 290, 0, 0, + 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, + 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, + 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, + 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, + 0, 469, 283, 308, 0, 0, 273, 426, 894, 895, + 271, 608, 795, 571, 237, 0, 570, 419, 538, 547, + 406, 395, 236, 545, 404, 394, 348, 803, 804, 295, + 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, + 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, + 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, + 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, + 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, + 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, + 484, 257, 556, 507, 0, 0, 0, 0, 853, 841, + 766, 857, 768, 854, 855, 763, 764, 767, 856, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 844, 752, + 751, 0, 759, 0, 785, 786, 788, 792, 793, 794, + 805, 806, 807, 815, 817, 818, 816, 819, 820, 821, + 824, 825, 826, 827, 822, 823, 828, 769, 773, 770, + 771, 772, 784, 774, 775, 776, 777, 778, 779, 780, + 781, 782, 783, 867, 868, 869, 870, 871, 872, 798, + 802, 801, 799, 800, 796, 797, 750, 217, 238, 380, + 0, 466, 303, 606, 567, 561, 224, 240, 858, 277, + 859, 0, 0, 863, 0, 0, 0, 865, 864, 0, + 866, 832, 831, 0, 0, 860, 861, 0, 862, 0, + 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, + 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, + 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, + 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, + 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, + 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, + 574, 580, 492, 873, 874, 875, 876, 877, 878, 879, + 880, 314, 550, 581, 548, 602, 575, 451, 390, 0, + 0, 565, 0, 393, 296, 319, 334, 0, 566, 513, + 244, 478, 305, 268, 898, 0, 229, 263, 247, 274, + 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, + 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, + 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, + 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, + 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, + 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, + 509, 301, 0, 0, 0, 0, 0, 709, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, + 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, + 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, + 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 1443, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1444, + 1445, 1446, 1447, 1448, 1449, 1450, 1452, 1451, 1453, 1454, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, + 272, 0, 0, 465, 0, 0, 0, 577, 0, 0, + 0, 0, 0, 0, 0, 377, 0, 344, 218, 242, + 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, + 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, + 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, + 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, + 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 644, 645, 646, 647, 0, 0, 643, + 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, + 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, + 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, + 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, + 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, + 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, + 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, + 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, + 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, + 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, + 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, + 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, + 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, + 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, + 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, + 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, + 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, + 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, + 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, + 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, + 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, + 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, + 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, + 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, + 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, + 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, + 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, + 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, + 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, + 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, + 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, + 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, + 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, + 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, + 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, + 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, + 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, + 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, + 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, + 0, 0, 0, 0, 0, 0, 246, 0, 1068, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, + 0, 1067, 577, 0, 0, 0, 0, 0, 1064, 1065, + 377, 1022, 344, 218, 242, 1058, 1062, 423, 473, 485, + 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, + 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, + 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, + 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, + 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, + 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, + 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, + 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, + 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, + 0, 469, 283, 308, 0, 0, 273, 426, 543, 544, + 271, 608, 245, 571, 237, 0, 570, 419, 538, 547, + 406, 395, 236, 545, 404, 394, 348, 367, 368, 295, + 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, + 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, + 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, + 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, + 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, + 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, + 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, + 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, + 621, 622, 623, 624, 625, 626, 627, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 642, 396, 497, 553, + 349, 361, 364, 354, 373, 0, 374, 350, 351, 356, + 358, 359, 360, 365, 366, 370, 376, 266, 228, 402, + 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, + 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, + 480, 479, 345, 346, 391, 462, 0, 217, 238, 380, + 0, 466, 303, 606, 567, 561, 224, 240, 0, 277, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, + 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, + 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, + 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, + 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, + 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, + 574, 580, 492, 315, 316, 457, 458, 328, 329, 603, + 604, 314, 550, 581, 548, 602, 575, 451, 390, 0, + 0, 565, 0, 393, 296, 319, 334, 0, 566, 513, + 244, 478, 305, 268, 0, 0, 229, 263, 247, 274, + 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, + 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, + 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, + 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, + 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, + 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, + 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, + 509, 301, 0, 0, 0, 0, 1590, 883, 0, 0, + 1587, 0, 0, 0, 0, 1585, 0, 255, 1586, 1584, + 262, 1589, 0, 848, 363, 372, 371, 352, 353, 355, + 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, + 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, + 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, + 272, 0, 0, 465, 0, 0, 0, 577, 0, 0, + 0, 0, 0, 0, 0, 377, 0, 344, 218, 242, + 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, + 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, + 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, + 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, + 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, + 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, + 639, 640, 641, 644, 645, 646, 647, 0, 0, 643, + 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, + 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, + 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, + 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, + 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, + 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, + 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, + 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, + 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, + 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, + 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, + 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, + 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, + 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, + 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, + 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, + 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, + 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, + 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, + 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, + 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, + 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, + 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, + 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, + 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, + 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, + 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, + 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, + 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, + 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, + 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, + 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, + 522, 524, 407, 281, 444, 0, 408, 388, 530, 531, + 330, 103, 529, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, + 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, + 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, + 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, + 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 337, 265, 339, 222, 424, 509, 301, 0, 113, + 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, + 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, + 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, + 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 312, 0, 413, 272, 0, 0, 465, + 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, + 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, + 485, 0, 0, 0, 270, 0, 483, 437, 554, 250, + 299, 470, 443, 481, 453, 302, 0, 0, 482, 384, + 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, + 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, + 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, + 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, + 645, 646, 647, 0, 0, 643, 648, 584, 241, 491, + 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, + 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, + 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, + 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, + 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, + 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, + 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, + 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, + 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, + 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, + 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, + 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, + 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, + 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, + 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, + 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, + 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, + 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, + 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, + 380, 112, 466, 303, 606, 567, 561, 224, 240, 0, + 277, 0, 0, 0, 0, 0, 0, 2253, 0, 0, + 2252, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, + 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, + 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, + 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, + 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, + 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, + 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, + 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, + 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, + 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, + 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, + 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, + 444, 1653, 0, 388, 530, 531, 330, 529, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, + 0, 0, 0, 1655, 0, 0, 0, 0, 285, 0, + 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, + 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, + 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, + 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, + 424, 509, 301, 0, 0, 0, 0, 1657, 709, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, + 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, + 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, + 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, + 0, 0, 246, 0, 0, 0, 1424, 0, 1425, 1426, + 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, + 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, + 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, + 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, + 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, + 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, + 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, + 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, + 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, + 638, 639, 640, 641, 644, 645, 646, 647, 0, 0, + 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, + 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, + 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, + 546, 514, 405, 340, 341, 231, 0, 469, 283, 308, + 0, 0, 273, 426, 543, 544, 271, 608, 245, 571, + 237, 0, 570, 419, 538, 547, 406, 395, 236, 545, + 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, + 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, + 510, 559, 609, 251, 252, 254, 0, 294, 298, 306, + 309, 317, 318, 327, 379, 430, 459, 455, 464, 0, + 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, + 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, + 506, 347, 385, 0, 0, 436, 484, 257, 556, 507, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 610, 611, 612, 613, 614, + 615, 616, 617, 618, 619, 620, 621, 622, 623, 624, + 625, 626, 627, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 642, 396, 497, 553, 349, 361, 364, 354, + 373, 0, 374, 350, 351, 356, 358, 359, 360, 365, + 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, + 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, + 475, 476, 477, 307, 562, 323, 480, 479, 345, 346, + 391, 462, 0, 217, 238, 380, 0, 466, 303, 606, + 567, 561, 224, 240, 0, 277, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 219, 220, 227, + 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, + 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, + 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, + 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, + 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, + 511, 512, 517, 540, 542, 555, 574, 580, 492, 315, + 316, 457, 458, 328, 329, 603, 604, 314, 550, 581, + 548, 602, 575, 451, 390, 0, 0, 565, 0, 393, + 296, 319, 334, 0, 566, 513, 244, 478, 305, 268, + 0, 0, 229, 263, 247, 274, 289, 292, 338, 403, + 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, + 521, 522, 524, 407, 281, 444, 0, 408, 388, 530, + 531, 330, 103, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 113, 0, 1627, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 112, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 113, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 2253, 0, 0, 2252, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 2203, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 1841, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 2201, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 1016, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 1022, 344, + 218, 242, 1020, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 2203, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 1841, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 1627, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 3628, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 2036, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2037, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 2655, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2656, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 2637, + 0, 0, 0, 0, 255, 0, 0, 262, 2638, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 1676, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 1675, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 0, 711, 712, 713, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 3770, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 1841, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 3628, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 113, 0, 0, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 2254, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 1657, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 744, 745, 0, 0, 0, 0, 844, - 0, 746, 0, 0, 754, 907, 908, 909, 910, 911, - 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, - 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, - 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, - 942, 943, 944, 945, 946, 947, 948, 757, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 413, 272, 0, 0, 465, 843, 0, 0, 577, 0, - 0, 841, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 894, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, - 308, 0, 0, 273, 426, 895, 896, 271, 608, 796, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, - 545, 404, 394, 348, 804, 805, 295, 321, 460, 387, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, - 507, 0, 0, 0, 0, 854, 842, 767, 858, 769, - 855, 856, 764, 765, 768, 857, 610, 611, 612, 613, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625, 626, 627, 0, 845, 753, 752, 0, 760, - 0, 786, 787, 789, 793, 794, 795, 806, 807, 808, - 816, 818, 819, 817, 820, 821, 822, 825, 826, 827, - 828, 823, 824, 829, 770, 774, 771, 772, 773, 785, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 868, 869, 870, 871, 872, 873, 799, 803, 802, 800, - 801, 797, 798, 751, 217, 238, 380, 0, 466, 303, - 606, 567, 561, 224, 240, 859, 277, 860, 0, 0, - 864, 0, 0, 0, 866, 865, 0, 867, 833, 832, - 0, 0, 861, 862, 0, 863, 0, 0, 219, 220, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 1991, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, - 874, 875, 876, 877, 878, 879, 880, 881, 314, 550, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, - 268, 899, 0, 229, 263, 247, 274, 289, 292, 338, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, @@ -3707,15 +5302,15 @@ var yyAct = [...]int{ 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 1980, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, - 0, 0, 0, 1444, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1445, 1446, 1447, 1448, - 1449, 1450, 1451, 1453, 1452, 1454, 1455, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -3730,216 +5325,146 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 1069, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 1068, - 577, 0, 0, 0, 0, 0, 1065, 1066, 377, 1023, - 344, 218, 242, 1059, 1063, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 1591, 884, 0, 0, 1588, - 0, 0, 0, 0, 1586, 0, 255, 1587, 1585, 262, - 1590, 0, 849, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 1808, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 0, 408, 388, 530, 531, - 330, 103, 529, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, - 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, - 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, - 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, - 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 337, 265, 339, 222, 424, 509, 301, 0, 113, - 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, - 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, - 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, - 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 1806, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 312, 0, 413, 272, 0, 0, 465, - 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, - 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, - 485, 0, 0, 0, 270, 0, 483, 437, 554, 250, - 299, 470, 443, 481, 453, 302, 0, 0, 482, 384, - 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, - 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, - 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, - 633, 634, 635, 636, 637, 638, 639, 640, 641, 644, - 645, 646, 647, 648, 0, 0, 643, 649, 584, 241, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, @@ -3962,9 +5487,9 @@ var yyAct = [...]int{ 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, - 238, 380, 112, 466, 303, 606, 567, 561, 224, 240, - 0, 277, 0, 0, 0, 0, 0, 0, 2254, 0, - 0, 2253, 0, 0, 0, 0, 0, 0, 0, 0, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, @@ -3977,21 +5502,21 @@ var yyAct = [...]int{ 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, - 281, 444, 1654, 0, 388, 530, 531, 330, 529, 0, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 427, 0, 0, 0, 1656, 0, 0, 0, 0, 285, + 427, 0, 1804, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, - 222, 424, 509, 301, 0, 0, 0, 0, 1658, 710, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, - 0, 0, 0, 246, 0, 0, 0, 1425, 0, 1426, - 1427, 0, 0, 0, 0, 0, 0, 0, 290, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4008,199 +5533,129 @@ var yyAct = [...]int{ 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, - 637, 638, 639, 640, 641, 644, 645, 646, 647, 648, - 0, 0, 643, 649, 584, 241, 491, 383, 259, 248, - 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, - 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, - 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, - 283, 308, 0, 0, 273, 426, 543, 544, 271, 608, - 245, 571, 237, 0, 570, 419, 538, 547, 406, 395, - 236, 545, 404, 394, 348, 367, 368, 295, 321, 460, - 387, 461, 320, 322, 415, 414, 416, 225, 558, 0, - 226, 0, 510, 559, 609, 251, 252, 254, 0, 294, - 298, 306, 309, 317, 318, 327, 379, 430, 459, 455, - 464, 0, 533, 552, 564, 576, 582, 583, 585, 591, - 592, 593, 595, 601, 599, 596, 597, 598, 594, 588, - 418, 325, 506, 347, 385, 0, 0, 436, 484, 257, - 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 610, 611, 612, - 613, 614, 615, 616, 617, 618, 619, 620, 621, 622, - 623, 624, 625, 626, 627, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 642, 396, 497, 553, 349, 361, - 364, 354, 373, 0, 374, 350, 351, 356, 358, 359, - 360, 365, 366, 370, 376, 266, 228, 402, 410, 532, - 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, - 573, 474, 475, 476, 477, 307, 562, 323, 480, 479, - 345, 346, 391, 462, 0, 217, 238, 380, 0, 466, - 303, 606, 567, 561, 224, 240, 0, 277, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, - 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, - 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, - 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, - 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, - 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, - 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, - 492, 315, 316, 457, 458, 328, 329, 603, 604, 314, - 550, 581, 548, 602, 575, 451, 390, 0, 0, 565, - 0, 393, 296, 319, 334, 0, 566, 513, 244, 478, - 305, 268, 0, 0, 229, 263, 247, 274, 289, 292, - 338, 403, 411, 440, 445, 311, 286, 261, 471, 258, - 496, 520, 521, 522, 524, 407, 281, 444, 0, 408, - 388, 530, 531, 330, 103, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 113, 0, 1628, 0, 710, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, + 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, + 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, + 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, + 308, 0, 0, 273, 426, 543, 544, 271, 608, 245, + 571, 237, 0, 570, 419, 538, 547, 406, 395, 236, + 545, 404, 394, 348, 367, 368, 295, 321, 460, 387, + 461, 320, 322, 415, 414, 416, 225, 558, 0, 226, + 0, 510, 559, 609, 251, 252, 254, 0, 294, 298, + 306, 309, 317, 318, 327, 379, 430, 459, 455, 464, + 0, 533, 552, 564, 576, 582, 583, 585, 591, 592, + 593, 595, 601, 599, 596, 597, 598, 594, 588, 418, + 325, 506, 347, 385, 0, 0, 436, 484, 257, 556, + 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625, 626, 627, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 642, 396, 497, 553, 349, 361, 364, + 354, 373, 0, 374, 350, 351, 356, 358, 359, 360, + 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, + 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, + 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, + 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, + 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, + 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, + 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, + 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, + 315, 316, 457, 458, 328, 329, 603, 604, 314, 550, + 581, 548, 602, 575, 451, 390, 0, 0, 565, 0, + 393, 296, 319, 334, 0, 566, 513, 244, 478, 305, + 268, 0, 0, 229, 263, 247, 274, 289, 292, 338, + 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, + 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, + 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 1802, 0, 0, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, + 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, + 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 112, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, + 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, + 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, + 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, + 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, + 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 113, 0, - 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, + 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, + 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, + 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, + 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, + 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 2254, 0, 0, - 2253, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 2204, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 1842, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 427, 0, 1800, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4208,17 +5663,17 @@ 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, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 2202, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -4257,21 +5712,21 @@ var yyAct = [...]int{ 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 1796, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, - 0, 0, 1017, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4280,293 +5735,84 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, - 0, 0, 377, 1023, 344, 218, 242, 1021, 0, 423, + 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 2204, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 1842, - 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 1628, 0, 710, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 3629, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 2037, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 2038, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 2656, 710, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 427, 0, 1794, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2657, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -4605,15 +5851,15 @@ var yyAct = [...]int{ 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 1792, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 2638, - 0, 0, 0, 0, 255, 0, 0, 262, 2639, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, 246, 0, @@ -4635,268 +5881,59 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 1677, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 1676, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 712, 713, 714, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 3771, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 1842, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 1767, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -4904,17 +5941,17 @@ 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, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -4954,13 +5991,13 @@ var yyAct = [...]int{ 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, - 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, + 0, 0, 0, 1661, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, @@ -4975,7 +6012,7 @@ 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, 312, 0, 413, 272, 0, 0, - 465, 0, 0, 0, 577, 0, 0, 0, 3629, 0, + 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, @@ -4983,268 +6020,59 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 113, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 2255, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 215, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 1658, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 113, 0, 0, 0, 883, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5252,17 +6080,17 @@ 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, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -5284,7 +6112,7 @@ var yyAct = [...]int{ 365, 366, 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, 479, 345, - 346, 391, 462, 0, 217, 238, 380, 1992, 466, 303, + 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, @@ -5308,7 +6136,7 @@ var yyAct = [...]int{ 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 1981, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, @@ -5322,7 +6150,7 @@ 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, 312, 0, 413, 272, 0, 0, + 0, 0, 1402, 0, 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, @@ -5331,268 +6159,59 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 1809, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 1807, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 710, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 1805, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 1401, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 1803, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 0, 710, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 215, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -5600,17 +6219,17 @@ 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, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -5635,7 +6254,7 @@ var yyAct = [...]int{ 346, 391, 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, + 0, 0, 0, 0, 974, 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, @@ -5649,14 +6268,14 @@ var yyAct = [...]int{ 403, 411, 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 427, 0, 1801, 0, 0, + 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, @@ -5671,7 +6290,7 @@ 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, 312, 0, 413, 272, 0, 0, - 465, 0, 0, 0, 577, 0, 0, 0, 0, 0, + 465, 0, 651, 0, 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, 0, 482, @@ -5679,286 +6298,77 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 1797, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 1795, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 710, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 1793, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 0, 710, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 1768, 0, 0, 0, 710, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 709, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 413, 272, 0, 0, 465, 0, 0, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -5986,7 +6396,7 @@ var yyAct = [...]int{ 0, 0, 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, 400, 401, - 420, 421, 422, 425, 428, 429, 432, 434, 435, 438, + 3778, 421, 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, 580, 492, @@ -5998,13 +6408,13 @@ var yyAct = [...]int{ 520, 521, 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, - 0, 0, 0, 1662, 285, 0, 0, 0, 0, 378, + 0, 0, 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 709, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, @@ -6027,286 +6437,77 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 420, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 113, 0, 0, 0, - 884, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 215, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1403, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 1402, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 427, - 0, 0, 0, 0, 0, 0, 0, 0, 285, 0, - 0, 0, 0, 378, 282, 0, 0, 441, 0, 223, - 0, 498, 269, 389, 386, 537, 297, 288, 284, 267, - 331, 397, 439, 519, 433, 0, 382, 0, 0, 508, - 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, - 424, 509, 301, 0, 0, 0, 0, 0, 215, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, - 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, - 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, - 280, 335, 287, 279, 534, 0, 0, 0, 0, 0, - 0, 0, 246, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 408, 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 427, 0, 0, 0, 0, 0, 0, 0, 0, 285, + 0, 0, 0, 0, 378, 282, 0, 0, 441, 0, + 223, 0, 498, 269, 389, 386, 537, 297, 288, 284, + 267, 331, 397, 439, 519, 433, 0, 382, 0, 0, + 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, + 222, 424, 509, 301, 0, 0, 0, 0, 0, 883, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, + 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, + 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, + 0, 280, 335, 287, 279, 534, 0, 0, 0, 0, + 0, 0, 0, 246, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, - 413, 272, 0, 0, 465, 0, 652, 0, 577, 0, - 0, 0, 0, 0, 0, 0, 377, 0, 344, 218, - 242, 0, 0, 423, 473, 485, 0, 0, 0, 270, - 0, 483, 437, 554, 250, 299, 470, 443, 481, 453, - 302, 0, 0, 482, 384, 539, 463, 551, 578, 579, - 278, 417, 563, 523, 572, 605, 243, 275, 431, 516, - 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, - 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, - 638, 639, 640, 641, 644, 645, 646, 647, 648, 0, - 0, 643, 649, 584, 241, 491, 383, 259, 248, 541, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, + 0, 413, 272, 0, 0, 465, 0, 0, 0, 577, + 0, 0, 0, 0, 0, 0, 0, 377, 0, 344, + 218, 242, 0, 0, 423, 473, 485, 0, 0, 0, + 270, 0, 483, 437, 554, 250, 299, 470, 443, 481, + 453, 302, 0, 0, 482, 384, 539, 463, 551, 578, + 579, 278, 417, 563, 523, 572, 605, 243, 275, 431, + 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, + 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, + 637, 638, 639, 640, 641, 644, 645, 646, 647, 0, + 0, 643, 648, 584, 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, 469, 283, @@ -6352,7 +6553,7 @@ var yyAct = [...]int{ 433, 0, 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, 301, 0, - 0, 0, 0, 0, 710, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, 287, 279, @@ -6375,280 +6576,70 @@ var yyAct = [...]int{ 572, 605, 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640, 641, - 644, 645, 646, 647, 648, 0, 0, 643, 649, 584, - 241, 491, 383, 259, 248, 541, 560, 304, 468, 447, - 448, 586, 600, 587, 589, 590, 230, 518, 549, 256, - 495, 0, 0, 607, 264, 515, 232, 546, 514, 405, - 340, 341, 231, 0, 469, 283, 308, 0, 0, 273, - 426, 543, 544, 271, 608, 245, 571, 237, 0, 570, - 419, 538, 547, 406, 395, 236, 545, 404, 394, 348, - 367, 368, 295, 321, 460, 387, 461, 320, 322, 415, - 414, 416, 225, 558, 0, 226, 0, 510, 559, 609, - 251, 252, 254, 0, 294, 298, 306, 309, 317, 318, - 327, 379, 430, 459, 455, 464, 0, 533, 552, 564, - 576, 582, 583, 585, 591, 592, 593, 595, 601, 599, - 596, 597, 598, 594, 588, 418, 325, 506, 347, 385, - 0, 0, 436, 484, 257, 556, 507, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 610, 611, 612, 613, 614, 615, 616, 617, - 618, 619, 620, 621, 622, 623, 624, 625, 626, 627, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 642, - 396, 497, 553, 349, 361, 364, 354, 373, 0, 374, - 350, 351, 356, 358, 359, 360, 365, 366, 370, 376, - 266, 228, 402, 410, 532, 326, 233, 234, 235, 525, - 526, 527, 528, 568, 569, 573, 474, 475, 476, 477, - 307, 562, 323, 480, 479, 345, 346, 391, 462, 0, - 217, 238, 380, 0, 466, 303, 606, 567, 561, 224, - 240, 0, 277, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 219, 220, 227, 239, 249, 253, - 260, 276, 291, 293, 300, 313, 324, 332, 333, 336, - 342, 392, 398, 399, 400, 401, 3779, 421, 422, 425, - 428, 429, 432, 434, 435, 438, 442, 446, 449, 450, - 452, 454, 456, 467, 472, 486, 487, 488, 489, 490, - 493, 494, 499, 500, 501, 502, 503, 511, 512, 517, - 540, 542, 555, 574, 580, 492, 315, 316, 457, 458, - 328, 329, 603, 604, 314, 550, 581, 548, 602, 575, - 451, 390, 0, 0, 565, 0, 393, 296, 319, 334, - 0, 566, 513, 244, 478, 305, 268, 0, 0, 229, - 263, 247, 274, 289, 292, 338, 403, 411, 440, 445, - 311, 286, 261, 471, 258, 496, 520, 521, 522, 524, - 407, 281, 444, 408, 0, 388, 530, 531, 330, 529, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, - 285, 0, 0, 0, 0, 378, 282, 0, 0, 441, - 0, 223, 0, 498, 269, 389, 386, 537, 297, 288, - 284, 267, 331, 397, 439, 519, 433, 0, 382, 0, - 0, 508, 412, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 337, 265, - 339, 222, 424, 509, 301, 0, 0, 0, 0, 0, - 710, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 255, 0, 0, 262, 0, 0, 0, 363, 372, 371, - 352, 353, 355, 357, 362, 369, 375, 0, 0, 0, - 0, 0, 280, 335, 287, 279, 534, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 290, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 413, 272, 0, 0, 465, 0, 0, 0, - 577, 0, 0, 0, 0, 0, 0, 0, 377, 0, - 344, 218, 242, 0, 0, 423, 473, 485, 0, 0, - 0, 270, 0, 483, 437, 554, 250, 299, 470, 443, - 481, 453, 302, 0, 0, 482, 384, 539, 463, 551, - 578, 579, 278, 417, 563, 523, 572, 605, 243, 275, - 431, 516, 557, 505, 409, 535, 536, 343, 504, 310, - 221, 381, 628, 629, 630, 631, 632, 633, 634, 635, - 636, 637, 638, 639, 640, 641, 644, 645, 646, 647, - 648, 0, 0, 643, 649, 584, 241, 491, 383, 259, - 248, 541, 560, 304, 468, 447, 448, 586, 600, 587, - 589, 590, 230, 518, 549, 256, 495, 0, 0, 607, - 264, 515, 232, 546, 514, 405, 340, 341, 231, 0, - 469, 283, 308, 0, 0, 273, 426, 543, 544, 271, - 608, 245, 571, 237, 0, 570, 419, 538, 547, 406, - 395, 236, 545, 404, 394, 348, 367, 368, 295, 321, - 460, 387, 461, 320, 322, 415, 414, 416, 225, 558, - 0, 226, 0, 510, 559, 609, 251, 252, 254, 0, - 294, 298, 306, 309, 317, 318, 327, 379, 430, 459, - 455, 464, 0, 533, 552, 564, 576, 582, 583, 585, - 591, 592, 593, 595, 601, 599, 596, 597, 598, 594, - 588, 418, 325, 506, 347, 385, 0, 0, 436, 484, - 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 610, 611, - 612, 613, 614, 615, 616, 617, 618, 619, 620, 621, - 622, 623, 624, 625, 626, 627, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 642, 396, 497, 553, 349, - 361, 364, 354, 373, 0, 374, 350, 351, 356, 358, - 359, 360, 365, 366, 370, 376, 266, 228, 402, 410, - 532, 326, 233, 234, 235, 525, 526, 527, 528, 568, - 569, 573, 474, 475, 476, 477, 307, 562, 323, 480, - 479, 345, 346, 391, 462, 0, 217, 238, 380, 0, - 466, 303, 606, 567, 561, 224, 240, 0, 277, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 219, 220, 227, 239, 249, 253, 260, 276, 291, 293, - 300, 313, 324, 332, 333, 336, 342, 392, 398, 399, - 400, 401, 420, 421, 422, 425, 428, 429, 432, 434, - 435, 438, 442, 446, 449, 450, 452, 454, 456, 467, - 472, 486, 487, 488, 489, 490, 493, 494, 499, 500, - 501, 502, 503, 511, 512, 517, 540, 542, 555, 574, - 580, 492, 315, 316, 457, 458, 328, 329, 603, 604, - 314, 550, 581, 548, 602, 575, 451, 390, 0, 0, - 565, 0, 393, 296, 319, 334, 0, 566, 513, 244, - 478, 305, 268, 0, 0, 229, 263, 247, 274, 289, - 292, 338, 403, 411, 440, 445, 311, 286, 261, 471, - 258, 496, 520, 521, 522, 524, 407, 281, 444, 408, - 0, 388, 530, 531, 330, 529, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 427, 0, 0, - 0, 0, 0, 0, 0, 0, 285, 0, 0, 0, - 0, 378, 282, 0, 0, 441, 0, 223, 0, 498, - 269, 389, 386, 537, 297, 288, 284, 267, 331, 397, - 439, 519, 433, 0, 382, 0, 0, 508, 412, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 337, 265, 339, 222, 424, 509, - 301, 0, 0, 0, 0, 0, 884, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 255, 0, 0, 262, - 0, 0, 0, 363, 372, 371, 352, 353, 355, 357, - 362, 369, 375, 0, 0, 0, 0, 0, 280, 335, - 287, 279, 534, 0, 0, 0, 0, 0, 0, 0, - 246, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 290, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 413, 272, - 0, 0, 465, 0, 0, 0, 577, 0, 0, 0, - 0, 0, 0, 0, 377, 0, 344, 218, 242, 0, - 0, 423, 473, 485, 0, 0, 0, 270, 0, 483, - 437, 554, 250, 299, 470, 443, 481, 453, 302, 0, - 0, 482, 384, 539, 463, 551, 578, 579, 278, 417, - 563, 523, 572, 605, 243, 275, 431, 516, 557, 505, - 409, 535, 536, 343, 504, 310, 221, 381, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, - 640, 641, 644, 645, 646, 647, 648, 0, 0, 643, - 649, 584, 241, 491, 383, 259, 248, 541, 560, 304, - 468, 447, 448, 586, 600, 587, 589, 590, 230, 518, - 549, 256, 495, 0, 0, 607, 264, 515, 232, 546, - 514, 405, 340, 341, 231, 0, 469, 283, 308, 0, - 0, 273, 426, 543, 544, 271, 608, 245, 571, 237, - 0, 570, 419, 538, 547, 406, 395, 236, 545, 404, - 394, 348, 367, 368, 295, 321, 460, 387, 461, 320, - 322, 415, 414, 416, 225, 558, 0, 226, 0, 510, - 559, 609, 251, 252, 254, 0, 294, 298, 306, 309, - 317, 318, 327, 379, 430, 459, 455, 464, 0, 533, - 552, 564, 576, 582, 583, 585, 591, 592, 593, 595, - 601, 599, 596, 597, 598, 594, 588, 418, 325, 506, - 347, 385, 0, 0, 436, 484, 257, 556, 507, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 610, 611, 612, 613, 614, 615, - 616, 617, 618, 619, 620, 621, 622, 623, 624, 625, - 626, 627, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 642, 396, 497, 553, 349, 361, 364, 354, 373, - 0, 374, 350, 351, 356, 358, 359, 360, 365, 366, - 370, 376, 266, 228, 402, 410, 532, 326, 233, 234, - 235, 525, 526, 527, 528, 568, 569, 573, 474, 475, - 476, 477, 307, 562, 323, 480, 479, 345, 346, 391, - 462, 0, 217, 238, 380, 0, 466, 303, 606, 567, - 561, 224, 240, 0, 277, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 219, 220, 227, 239, - 249, 253, 260, 276, 291, 293, 300, 313, 324, 332, - 333, 336, 342, 392, 398, 399, 400, 401, 420, 421, - 422, 425, 428, 429, 432, 434, 435, 438, 442, 446, - 449, 450, 452, 454, 456, 467, 472, 486, 487, 488, - 489, 490, 493, 494, 499, 500, 501, 502, 503, 511, - 512, 517, 540, 542, 555, 574, 580, 492, 315, 316, - 457, 458, 328, 329, 603, 604, 314, 550, 581, 548, - 602, 575, 451, 390, 0, 0, 565, 0, 393, 296, - 319, 334, 0, 566, 513, 244, 478, 305, 268, 0, - 0, 229, 263, 247, 274, 289, 292, 338, 403, 411, - 440, 445, 311, 286, 261, 471, 258, 496, 520, 521, - 522, 524, 407, 281, 444, 408, 0, 388, 530, 531, - 330, 529, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, - 0, 0, 285, 0, 0, 0, 0, 378, 282, 0, - 0, 441, 0, 223, 0, 498, 269, 389, 386, 537, - 297, 288, 284, 267, 331, 397, 439, 519, 433, 0, - 382, 0, 0, 508, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 337, 265, 339, 222, 424, 509, 301, 0, 0, 0, - 0, 0, 215, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 255, 0, 0, 262, 0, 0, 0, 363, - 372, 371, 352, 353, 355, 357, 362, 369, 375, 0, - 0, 0, 0, 0, 280, 335, 287, 279, 534, 0, - 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 290, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 413, 272, 0, 0, 465, 0, - 0, 0, 577, 0, 0, 0, 0, 0, 0, 0, - 377, 0, 344, 218, 242, 0, 0, 423, 473, 485, - 0, 0, 0, 270, 0, 483, 437, 554, 250, 299, - 470, 443, 481, 453, 302, 0, 0, 482, 384, 539, - 463, 551, 578, 579, 278, 417, 563, 523, 572, 605, - 243, 275, 431, 516, 557, 505, 409, 535, 536, 343, - 504, 310, 221, 381, 628, 629, 630, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 641, 644, 645, - 646, 647, 648, 0, 0, 643, 649, 584, 241, 491, - 383, 259, 248, 541, 560, 304, 468, 447, 448, 586, - 600, 587, 589, 590, 230, 518, 549, 256, 495, 0, - 0, 607, 264, 515, 232, 546, 514, 405, 340, 341, - 231, 0, 469, 283, 308, 0, 0, 273, 426, 543, - 544, 271, 608, 245, 571, 237, 0, 570, 419, 538, - 547, 406, 395, 236, 545, 404, 394, 348, 367, 368, - 295, 321, 460, 387, 461, 320, 322, 415, 414, 416, - 225, 558, 0, 226, 0, 510, 559, 609, 251, 252, - 254, 0, 294, 298, 306, 309, 317, 318, 327, 379, - 430, 459, 455, 464, 0, 533, 552, 564, 576, 582, - 583, 585, 591, 592, 593, 595, 601, 599, 596, 597, - 598, 594, 588, 418, 325, 506, 347, 385, 0, 0, - 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, + 644, 645, 646, 647, 0, 0, 643, 648, 584, 241, + 491, 383, 259, 248, 541, 560, 304, 468, 447, 448, + 586, 600, 587, 589, 590, 230, 518, 549, 256, 495, + 0, 0, 607, 264, 515, 232, 546, 514, 405, 340, + 341, 231, 0, 469, 283, 308, 0, 0, 273, 426, + 543, 544, 271, 608, 245, 571, 237, 0, 570, 419, + 538, 547, 406, 395, 236, 545, 404, 394, 348, 367, + 368, 295, 321, 460, 387, 461, 320, 322, 415, 414, + 416, 225, 558, 0, 226, 0, 510, 559, 609, 251, + 252, 254, 0, 294, 298, 306, 309, 317, 318, 327, + 379, 430, 459, 455, 464, 0, 533, 552, 564, 576, + 582, 583, 585, 591, 592, 593, 595, 601, 599, 596, + 597, 598, 594, 588, 418, 325, 506, 347, 385, 0, + 0, 436, 484, 257, 556, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, - 620, 621, 622, 623, 624, 625, 626, 627, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 642, 396, 497, - 553, 349, 361, 364, 354, 373, 0, 374, 350, 351, - 356, 358, 359, 360, 365, 366, 370, 376, 266, 228, - 402, 410, 532, 326, 233, 234, 235, 525, 526, 527, - 528, 568, 569, 573, 474, 475, 476, 477, 307, 562, - 323, 480, 479, 345, 346, 391, 462, 0, 217, 238, - 380, 0, 466, 303, 606, 567, 561, 224, 240, 0, - 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 610, 611, 612, 613, 614, 615, 616, 617, 618, + 619, 620, 621, 622, 623, 624, 625, 626, 627, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 642, 396, + 497, 553, 349, 361, 364, 354, 373, 0, 374, 350, + 351, 356, 358, 359, 360, 365, 366, 370, 376, 266, + 228, 402, 410, 532, 326, 233, 234, 235, 525, 526, + 527, 528, 568, 569, 573, 474, 475, 476, 477, 307, + 562, 323, 480, 479, 345, 346, 391, 462, 0, 217, + 238, 380, 0, 466, 303, 606, 567, 561, 224, 240, + 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 219, 220, 227, 239, 249, 253, 260, 276, - 291, 293, 300, 313, 324, 332, 333, 336, 342, 392, - 398, 399, 400, 401, 420, 421, 422, 425, 428, 429, - 432, 434, 435, 438, 442, 446, 449, 450, 452, 454, - 456, 467, 472, 486, 487, 488, 489, 490, 493, 494, - 499, 500, 501, 502, 503, 511, 512, 517, 540, 542, - 555, 574, 580, 492, 315, 316, 457, 458, 328, 329, - 603, 604, 314, 550, 581, 548, 602, 575, 451, 390, - 0, 0, 565, 0, 393, 296, 319, 334, 0, 566, - 513, 244, 478, 305, 268, 0, 0, 229, 263, 247, - 274, 289, 292, 338, 403, 411, 440, 445, 311, 286, - 261, 471, 258, 496, 520, 521, 522, 524, 407, 281, - 444, 0, 0, 388, 530, 531, 330, + 0, 0, 0, 219, 220, 227, 239, 249, 253, 260, + 276, 291, 293, 300, 313, 324, 332, 333, 336, 342, + 392, 398, 399, 400, 401, 420, 421, 422, 425, 428, + 429, 432, 434, 435, 438, 442, 446, 449, 450, 452, + 454, 456, 467, 472, 486, 487, 488, 489, 490, 493, + 494, 499, 500, 501, 502, 503, 511, 512, 517, 540, + 542, 555, 574, 580, 492, 315, 316, 457, 458, 328, + 329, 603, 604, 314, 550, 581, 548, 602, 575, 451, + 390, 0, 0, 565, 0, 393, 296, 319, 334, 0, + 566, 513, 244, 478, 305, 268, 0, 0, 229, 263, + 247, 274, 289, 292, 338, 403, 411, 440, 445, 311, + 286, 261, 471, 258, 496, 520, 521, 522, 524, 407, + 281, 444, 0, 0, 388, 530, 531, 330, } var yyPact = [...]int{ - -1000, -1000, 3985, -1000, -483, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 4925, -1000, -485, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2516, 2504, -1000, -1000, -1000, -1000, 2745, -1000, 1231, - 2215, -1000, 2485, 360, -1000, 49311, 691, -1000, 46527, 689, - 679, 155, -88, 256, 31215, -1000, 221, -1000, 213, 47919, - 217, -1000, -1000, -1000, -1000, -327, 19381, 2424, 103, 98, - 49311, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 2688, 2154, -1000, 418, -1000, -1000, -1000, -1000, -1000, - 393, -1000, 45831, -1000, 1134, -1000, -1000, 2484, 2471, 2748, - 841, 2413, -1000, 2629, 2154, -1000, 19381, 2671, 2544, 18685, - 18685, 583, -1000, -1000, 363, -1000, -1000, -1000, 2753, 26343, - 49311, -1000, 33999, 1213, -1000, 2485, -1000, -1000, -1000, 113, - -1000, 461, 2096, -1000, 2087, -1000, 1119, 1130, 506, 645, - 607, 504, 503, 502, 501, 500, 499, 480, 475, 524, - -1000, 908, 908, -129, -130, 3370, 708, 577, 577, 1226, - 617, 2448, 2445, -1000, -1000, 908, 908, 908, 423, 908, - 908, 908, 908, 422, 382, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, 908, 908, 908, - 908, 908, 477, 2485, 361, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2550, 2612, -1000, -1000, -1000, -1000, 2797, -1000, 1590, + 2252, -1000, 2527, 357, -1000, 49253, 674, -1000, 46473, 673, + 672, 206, -86, 277, 31183, -1000, 207, -1000, 197, 47863, + 205, -1000, -1000, -1000, -1000, -303, 19366, 2447, 76, 74, + 49253, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 2749, 2165, -1000, 417, -1000, -1000, -1000, -1000, -1000, + 938, -1000, 45778, -1000, 1047, -1000, -1000, 2535, 2521, 2801, + 843, 2479, -1000, 2670, 2165, -1000, 19366, 2736, 2592, 18671, + 18671, 596, -1000, -1000, 305, -1000, -1000, -1000, 2806, 26318, + 49253, -1000, 33963, 1154, -1000, 2527, -1000, -1000, -1000, 161, + -1000, 469, 2143, -1000, 2135, -1000, 1157, 1216, 487, 599, + 591, 486, 485, 484, 482, 479, 477, 475, 467, 508, + -1000, 901, 901, -133, -138, 1930, 633, 576, 576, 1276, + 634, 2493, 2473, -1000, -1000, 901, 901, 901, 399, 901, + 901, 901, 901, 410, 395, 901, 901, 901, 901, 901, + 901, 901, 901, 901, 901, 901, 901, 901, 901, 901, + 901, 901, 887, 2527, 359, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6691,64 +6682,66 @@ 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, - 49311, 276, 49311, -1000, 762, 49311, 49311, -1000, 1351, 1347, - -1000, -1000, 310, 1036, 1076, -1000, -1000, 1076, 112, 1076, - 1076, 1076, 1076, 266, 780, 96, -1000, 261, 433, 243, - 352, 1035, -1000, -1000, 343, 1035, 991, 1035, 1950, 1937, - -1000, 845, 349, 278, -1000, 1076, 1076, 1076, -1000, -1000, - 12396, 183, 12396, 12396, -1000, 2466, -1000, -1000, -1000, -1000, - -1000, 1358, -1000, -1000, -1000, -1000, -10, 615, -1000, -1000, - -1000, -1000, 47919, 45135, 320, -1000, -1000, 76, -1000, -1000, - 1546, 1364, 19381, 1544, -1000, 1403, 816, -1000, -1000, -1000, - -1000, -1000, 717, -1000, 20077, 20077, 20077, 20077, -1000, -1000, - 2108, 44439, 2108, 2108, 20077, 2108, -1000, 20077, 2108, 2108, - 2108, 19381, 2108, 2108, 2108, 2108, -1000, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, -1000, -1000, -1000, -1000, 2108, - 759, 2108, 2108, 2108, 2108, 2108, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 2108, 2108, 2108, 2108, 2108, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 22165, 1709, 1702, 1700, -1000, 16597, 2108, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 49253, + 566, 49253, -1000, 759, 49253, 49253, -1000, 1287, 1284, -1000, + -1000, 290, 959, 995, -1000, -1000, 995, 105, 995, 995, + 995, 995, 226, 749, 73, -1000, 223, 323, 214, 334, + 987, -1000, -1000, 326, 987, 1008, 987, 2047, 2031, -1000, + 848, 331, 225, -1000, 995, 995, 995, -1000, -1000, 12391, + 215, 12391, 12391, -1000, 2506, -1000, -1000, -1000, -1000, -1000, + 1293, -1000, -1000, -1000, -1000, -17, 623, -1000, -1000, -1000, + -1000, 47863, 45083, 322, -1000, -1000, 69, -1000, -1000, 1762, + 1335, 19366, 1553, -1000, 1824, 812, -1000, -1000, -1000, -1000, + -1000, 724, -1000, 20061, 20061, 20061, 20061, -1000, -1000, 1772, + 44388, 1772, 1772, 20061, 1772, -1000, 20061, 1772, 1772, 1772, + 19366, 1772, 1772, 1772, 1772, -1000, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, -1000, -1000, -1000, -1000, 1772, 753, + 1772, 1772, 1772, 1772, 1772, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 1772, 1772, 1772, 1772, 1772, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 22146, 1699, 1690, 1682, -1000, 16586, 1772, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 49253, + -1000, 1772, 229, 47863, 47863, 500, 2670, 2165, -1000, 2749, + 2688, 417, 3123, 2464, 1784, 1405, 2165, -104, -104, -104, + -104, -104, -104, 2107, 49253, -1000, 2151, -1000, -1000, -1000, + -1000, 2379, 1445, 2005, -1000, -1000, -1000, -1000, 1932, 19366, + -1000, -1000, 2774, -1000, 23537, 750, 2772, 43693, -1000, 596, + 596, 2128, 473, 23, -1000, -1000, -1000, -1000, 944, 30488, + -1000, -1000, -1000, -1000, -1000, 2039, 49253, -1000, -1000, 3933, + 1192, -1000, 2250, -1000, 3046, 2037, -1000, 2191, 19366, 582, + 582, 2269, 669, 1192, 655, 652, 635, -1000, -28, -1000, + -1000, -1000, -1000, -1000, -1000, 901, 901, 901, -1000, 504, + 2725, 357, 4864, -1000, -1000, -1000, 42998, 2248, 47863, -1000, + 2243, -1000, 996, 688, 751, 751, 47863, -1000, -1000, 48558, + 1192, 992, 991, 1192, 1192, 47863, 47863, -1000, 42303, -1000, + 41608, 40913, 1283, 47863, 40218, 39523, 38828, 38133, 37438, -1000, + 2482, -1000, 2236, -1000, -1000, -1000, 48558, 1192, 1192, 48558, + 47863, 48558, 49253, 1192, -1000, -1000, 407, -1000, -1000, 1282, + 1281, 1275, 901, 901, 1273, 1996, 1989, 1979, 901, 901, + 1258, 1954, 32573, 1868, 343, 1255, 1252, 1248, 1239, 1865, + 213, 1863, 1208, 1133, 1247, 47863, 2241, 1382, 1381, 49253, + -1000, 314, 1042, 737, 956, 528, 924, 2527, 2441, 2115, + 619, 1368, 1361, 666, 1192, 579, 579, 47863, -1000, 14494, + -1000, 902, -1000, -1000, -1000, 1350, -1000, 1344, -1000, 1340, + 1317, 49253, 49253, 49253, 49253, 49253, 49253, 49253, 12391, -1000, + 1861, 19366, -1000, 988, 987, 987, -1000, -1000, -1000, -1000, + -1000, -1000, 995, 49253, 988, -1000, -1000, -1000, 987, 995, + 49253, 995, 995, 995, 995, 987, 987, 987, 995, 49253, + 49253, 848, 995, 995, -329, 995, 217, -333, -1000, 1857, + -1000, -1000, 2355, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 49311, -1000, 2108, 242, 47919, 47919, 518, 2629, 2154, -1000, - 2688, 2641, 418, 2972, 1854, 1745, 1462, 2154, -100, -100, - -100, -100, -100, -100, 2054, 49311, -1000, 2137, -1000, -1000, - -1000, -1000, 2337, 1592, 1906, -1000, -1000, -1000, -1000, 2071, - 19381, -1000, -1000, 2725, -1000, 23558, 757, 2723, 43743, -1000, - 583, 583, 2073, 479, 61, -1000, -1000, -1000, -1000, 957, - 30519, -1000, -1000, -1000, -1000, -1000, 1988, 49311, -1000, -1000, - 4729, 1367, -1000, 2214, -1000, 2588, 1974, -1000, 2166, 19381, - 590, 590, 2222, 672, 1367, 653, 652, 610, -1000, -26, - -1000, -1000, -1000, -1000, -1000, -1000, 908, 908, 908, -1000, - 522, 2669, 360, 6246, -1000, -1000, -1000, 43047, 2208, 47919, - -1000, 2207, -1000, 1083, 682, 725, 725, 47919, -1000, -1000, - 48615, 1367, 1062, 1052, 1367, 1367, 47919, 47919, -1000, 42351, - -1000, 41655, 40959, 1343, 47919, 40263, 39567, 38871, 38175, 37479, - -1000, 2451, -1000, 2444, -1000, -1000, -1000, 48615, 1367, 1367, - 48615, 47919, 48615, 49311, 1367, -1000, -1000, 416, -1000, -1000, - 1341, 1340, 1339, 908, 908, 1312, 1903, 1889, 1883, 908, - 908, 1304, 1882, 32607, 1881, 378, 1296, 1295, 1291, 1255, - 1866, 208, 1864, 1252, 1239, 1290, 47919, 2202, 1436, 1413, - 49311, -1000, 333, 1056, 900, 554, 737, 956, 2485, 2415, - 2070, 613, 1411, 1408, 668, 1367, 581, 581, 47919, -1000, - 14502, -1000, 560, -1000, -1000, -1000, 1399, -1000, 1396, -1000, - 1394, 1382, 49311, 49311, 49311, 49311, 49311, 49311, 49311, 12396, - -1000, 1862, 19381, -1000, 1041, 1035, 1035, -1000, -1000, -1000, - -1000, -1000, -1000, 1076, 49311, 1041, -1000, -1000, -1000, 1035, - 1076, 49311, 1076, 1076, 1076, 1076, 1035, 1035, 1035, 1076, - 49311, 49311, 845, 1076, 1076, -334, 1076, 226, -338, -1000, - 1856, -1000, -1000, 2313, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -6763,310 +6756,309 @@ var yyPact = [...]int{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 12391, 12391, -1000, -1000, + -1000, -1000, -1000, 2113, -1000, 195, 39, 202, -1000, 36743, + 444, 923, -1000, 444, -1000, -1000, -1000, 2111, 36048, -1000, + -334, -336, -344, -347, -1000, -1000, -1000, -1000, -348, -350, + -1000, -1000, -1000, 19366, 19366, 19366, 19366, -165, -1000, 1134, + 20061, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 221, 1322, + 20061, 20061, 20061, 20061, 20061, 20061, 20061, 20061, 20061, 20061, + 20061, 20061, 20061, 20061, 20061, -1000, -1000, 28403, 6093, 6093, + 812, 812, 812, 812, -1000, -94, 2110, 48558, -1000, -1000, + -1000, 739, 19366, 19366, 812, -1000, 1192, 16586, 20756, 18671, + 18671, 19366, 906, 1335, 48558, 19366, -1000, 1405, -1000, -1000, + -1000, 1242, -1000, 1053, 2502, 2502, 2502, 2502, 19366, 19366, + 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 2502, 47863, + 47863, 1072, 19366, 19366, 19366, 19366, 19366, 19366, 15195, 19366, + 19366, 20061, 19366, 19366, 19366, 1405, 19366, 19366, 19366, 19366, + 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, + 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, + 19366, 19366, 19366, 1405, 19366, 1548, 19366, 19366, 18671, 13793, + 18671, 18671, 18671, 18671, 18671, -1000, -1000, -1000, -1000, -1000, + 19366, 19366, 19366, 19366, 19366, 19366, 19366, 19366, 1405, 19366, + 19366, 19366, 19366, 19366, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1709, 1431, 1526, 19366, -1000, 2109, + -1000, -111, 25623, 19366, 1854, 1852, 2769, 2282, 47863, -1000, + -1000, -1000, 2670, -1000, 2670, 1709, 2385, 18671, -1000, -1000, + 3046, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2000, + -1000, -1000, 2238, -1000, -1000, -1000, -1000, -1000, 49253, 2107, + 2576, 47863, 2376, 1850, 402, -1000, 19366, 19366, 2106, -1000, + 1837, 49253, -1000, -165, -1000, 35353, -1000, -1000, 11690, 49253, + 453, 49253, -1000, 24928, 34658, 356, -1000, 23, 2083, -1000, + 45, 30, 15890, 810, -1000, -1000, -1000, 1930, 21451, 1747, + 810, 121, -1000, -1000, -1000, 2191, -1000, 2191, 2191, 2191, + 2191, 402, 402, 402, 402, -1000, -1000, -1000, -1000, -1000, + 2235, 2231, -1000, 2191, 2191, 2191, 2191, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 12396, 12396, -1000, - -1000, -1000, -1000, -1000, 2067, -1000, 211, 55, 216, -1000, - 36783, 437, 955, -1000, 437, -1000, -1000, -1000, 2060, 36087, - -1000, -353, -354, -383, -385, -1000, -1000, -1000, -1000, -390, - -393, -1000, -1000, -1000, 19381, 19381, 19381, 19381, -167, -1000, - 1190, 20077, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 157, - 1185, 20077, 20077, 20077, 20077, 20077, 20077, 20077, 20077, 20077, - 20077, 20077, 20077, 20077, 20077, 20077, -1000, -1000, 28431, 5033, - 5033, 816, 816, 816, 816, -1000, -96, 2056, 48615, -1000, - -1000, -1000, 751, 19381, 19381, 816, -1000, 1367, 16597, 20773, - 18685, 18685, 19381, 916, 1364, 48615, 19381, -1000, 1462, -1000, - -1000, -1000, 1233, -1000, 1026, 2472, 2472, 2472, 2472, 19381, - 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 2472, - 47919, 47919, 943, 19381, 19381, 19381, 19381, 19381, 19381, 15204, - 19381, 19381, 20077, 19381, 19381, 19381, 1462, 19381, 19381, 19381, - 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, - 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, - 19381, 19381, 19381, 19381, 1462, 19381, 1648, 19381, 19381, 18685, - 13800, 18685, 18685, 18685, 18685, 18685, -1000, -1000, -1000, -1000, - -1000, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, 1462, - 19381, 19381, 19381, 19381, 19381, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 1463, 1755, 1489, 19381, -1000, - 2055, -1000, -105, 25647, 19381, 1838, 1833, 2720, 2238, 47919, - -1000, -1000, -1000, 2629, -1000, 2629, 1463, 2340, 18685, -1000, - -1000, 2588, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 1837, -1000, -1000, 2201, -1000, -1000, -1000, -1000, -1000, 49311, - 2054, 2539, 47919, 2328, 1831, 439, -1000, 19381, 19381, 2051, - -1000, 1350, 49311, -1000, -167, -1000, 35391, -1000, -1000, 11694, - 49311, 452, 49311, -1000, 24951, 34695, 286, -1000, 61, 1996, - -1000, 67, 45, 15900, 799, -1000, -1000, -1000, 3370, 21469, - 1814, 799, 141, -1000, -1000, -1000, 2166, -1000, 2166, 2166, - 2166, 2166, 439, 439, 439, 439, -1000, -1000, -1000, -1000, - -1000, 2200, 2199, -1000, 2166, 2166, 2166, 2166, -1000, -1000, + -1000, -1000, -1000, -1000, 2230, 2230, 2230, 2229, 2229, 2198, + 2198, 546, -1000, 19366, -1000, -1000, 321, 33963, 2543, 1229, + 1577, 1315, 872, 1302, 314, 582, 2275, 1192, 1192, 1192, + 582, -1000, 1373, 1357, 1343, -1000, -471, 2105, -1000, -1000, + 2724, -1000, -1000, 1082, 1011, 1010, 1136, 47863, 262, 446, + -1000, 539, -1000, -1000, 33963, 47863, 990, 751, 47863, -1000, + 47863, -1000, -1000, -1000, -1000, 1192, -1000, -1000, 2104, -1000, + 2121, 1095, 1005, 1068, 997, 2104, -1000, -1000, -105, 2104, + -1000, 2104, -1000, 2104, -1000, 2104, -1000, 2104, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 883, 247, -224, + 47863, 262, 605, -1000, 592, 28403, -1000, -1000, -1000, 28403, + 28403, -1000, -1000, -1000, -1000, 1847, 1835, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2196, 2196, 2196, 2193, 2193, - 2172, 2172, 563, -1000, 19381, -1000, -1000, 329, 33999, 2509, - 1276, 1822, 1379, 975, 1376, 333, 590, 2236, 1367, 1367, - 1367, 590, -1000, 1451, 1447, 1417, -1000, -474, 2050, -1000, - -1000, 2666, -1000, -1000, 1077, 1099, 1097, 912, 47919, 307, - 450, -1000, 545, -1000, -1000, 33999, 47919, 1046, 725, 47919, - -1000, 47919, -1000, -1000, -1000, -1000, 1367, -1000, -1000, 2046, - -1000, 2038, 1181, 1094, 1153, 1045, 2046, -1000, -1000, -102, - 2046, -1000, 2046, -1000, 2046, -1000, 2046, -1000, 2046, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 913, 252, - -226, 47919, 307, 609, -1000, 606, 28431, -1000, -1000, -1000, - 28431, 28431, -1000, -1000, -1000, -1000, 1829, 1826, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -454, 49253, -107, 2228, + -1000, 289, 920, 409, 443, 389, 49253, 916, 2656, 2655, + 2645, 2642, 2641, 2637, 2629, 241, 2627, 2625, 2623, 2622, + 2621, 2617, 345, 2613, 2611, 2610, 2608, 2601, 2595, 2580, + 308, 387, 49253, 49253, -1000, -1000, 579, 2347, 49253, 2560, + 49253, -1000, -1000, -1000, -1000, 572, 49253, -1000, 349, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -458, 49311, -103, - 2192, -1000, 327, 949, 429, 483, 345, 49311, 818, 2619, - 2609, 2608, 2601, 2596, 2594, 2591, 538, 2587, 2584, 2582, - 2581, 2574, 2573, 798, 2571, 2569, 2563, 2549, 2548, 2547, - 2518, 456, 380, 49311, 49311, -1000, -1000, 581, 2273, 49311, - 2513, 49311, -1000, -1000, -1000, -1000, 568, 49311, -1000, 358, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1335, 49253, -1000, + -1000, 995, 995, -1000, -1000, 49253, 995, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 995, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, 49253, -1000, -1000, + -1000, -1000, -17, 192, -1000, -1000, 47863, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -15, -1000, + 148, 42, 415, -1000, -1000, -1000, -1000, -1000, 2666, -1000, + 1335, 970, 962, -1000, 1772, -1000, -1000, 1187, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 221, 20061, 20061, 20061, 1935, + 608, 1398, 1843, 1359, 1406, 1406, 1191, 1191, 823, 823, + 823, 823, 823, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1831, -1000, 1772, 48558, 2035, 13793, 1978, 2112, 1405, + 3015, -1000, 2023, -1000, 2023, 1818, 958, -1000, 19366, 1405, + 3000, -1000, -1000, 1405, 1405, 1405, 19366, -1000, -1000, 19366, + 19366, 19366, 19366, 1577, 1577, 1577, 1577, 1577, 1577, 1577, + 1577, 1577, 1577, 19366, 2098, 2092, 2767, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1364, 49311, - -1000, -1000, 1076, 1076, -1000, -1000, 49311, 1076, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 1076, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 49311, -1000, - -1000, -1000, -1000, -10, 209, -1000, -1000, 47919, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -49, - -1000, 102, 49, 411, -1000, -1000, -1000, -1000, -1000, 2625, - -1000, 1364, 979, 990, -1000, 2108, -1000, -1000, 1262, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 157, 20077, 20077, 20077, - 1852, 661, 1449, 1460, 1564, 1353, 1353, 1306, 1306, 827, - 827, 827, 827, 827, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1808, -1000, 2108, 48615, 1878, 13800, 1513, 2143, - 1462, 3008, -1000, 1853, -1000, 1853, 2052, 970, -1000, 19381, - 1462, 3004, -1000, -1000, 1462, 1462, 1462, 19381, -1000, -1000, - 19381, 19381, 19381, 19381, 1822, 1822, 1822, 1822, 1822, 1822, - 1822, 1822, 1822, 1822, 19381, 2043, 2034, 2709, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1277, 1577, + 1577, 1577, 1577, 1577, 19366, 1598, -1000, -1000, -1000, 1593, + 2996, 1455, 2992, 1577, 1577, -1000, 1577, 2988, 2965, 1405, + 1762, 1405, 2089, -1000, 2895, 1577, 2864, 2847, 2739, 2080, + 2702, 2663, 2644, 1577, 1577, 1577, 2066, 2624, 2542, 2513, + 2450, 2440, 2436, 2427, 2415, 2401, 1577, -173, 1577, 1405, + -1000, -1000, -1000, -1000, -1000, 2394, 2046, 1405, 2088, 1772, + 735, -1000, -1000, 2023, 1405, 1405, 2023, 2023, 2365, 2358, + 2354, 2339, 2329, 2325, 1577, 1577, -1000, 1577, 2309, 2279, + 2042, 2025, 1405, -1000, 1526, 49253, -1000, -308, -1000, 27, + 756, 1772, -1000, 32573, 1405, -1000, -1000, 4837, -1000, 1158, + -1000, -1000, -1000, 29793, 2103, 3046, -1000, 1735, -1000, 1772, + 1967, -1000, -1000, 402, 107, 29098, 781, 781, 142, 1335, + 1335, 19366, -1000, -1000, -1000, -1000, -1000, -1000, 721, 2748, + 427, 1772, -1000, 2114, 2589, -1000, -1000, -1000, 2571, 22842, + -1000, -1000, 1772, 1772, 49253, 2004, 1948, -1000, 714, -1000, + 1298, 2083, 23, 19, -1000, -1000, -1000, -1000, 1335, -1000, + 1324, 466, 745, -1000, 555, -1000, -1000, -1000, -1000, 2461, + 118, -1000, -1000, -1000, 371, 402, -1000, -1000, -1000, -1000, + -1000, -1000, 1820, 1820, -1000, -1000, -1000, -1000, -1000, 1227, + -1000, -1000, -1000, -1000, 1215, -1000, -1000, 1201, -1000, -1000, + 2268, 2259, 321, -1000, -1000, 901, 1810, -1000, -1000, 2476, + 901, 901, 47863, -1000, -1000, 1665, 2543, -108, 2559, 2225, + 289, 49253, 2345, -1000, 2275, 2275, 2275, 49253, -1000, -1000, + -1000, -1000, -1000, -1000, -459, 82, 442, -1000, -1000, -1000, + 3930, 47863, 1960, -1000, 260, -1000, 1607, -1000, 47863, -1000, + 1944, 2224, 47863, 47863, -1000, -1000, -1000, 47863, 1772, -1000, + -1000, -1000, -1000, 665, 2515, 342, -1000, -1000, -195, -1000, + -1000, 262, 260, 48558, 1192, 810, -1000, -1000, -1000, -1000, + -1000, -462, 1929, 2218, 255, 659, 648, 279, 373, 49253, + 49253, 49253, 49253, 49253, 699, -1000, -1000, 64, -1000, -1000, + -1000, -1000, 222, -1000, -1000, -1000, -1000, -1000, -1000, 222, + -1000, -1000, -1000, -1000, -1000, 222, -1000, 1806, -1000, -1000, + -1000, -1000, 222, -1000, -1000, -1000, 63, -1000, -1000, -1000, + -1000, 222, -1000, -1000, -1000, -1000, -1000, -1000, 222, -1000, + -1000, -1000, -1000, 362, 583, -1000, 49253, 49253, 715, -1000, + -1000, -1000, -1000, -1000, -1000, 987, -1000, -1000, 987, -1000, + -1000, -1000, -1000, -1000, -1000, 1028, -1000, -1000, -1000, -1000, + -1000, -1000, 2503, 49253, 33, -422, -1000, -418, 19366, -1000, + -1000, -1000, -1000, 1895, 604, 1398, 20061, 20061, 20061, -1000, + -1000, -1000, 1084, 1084, 28403, -1000, 19366, 18671, -1000, -1000, + 19366, 19366, 946, -1000, 19366, 1493, -1000, 19366, -1000, -1000, + -1000, 1526, 1577, 1577, 1577, 1577, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, 2123, 19366, 19366, 19366, + 1405, 367, -1000, -1000, -1000, -1000, -1000, 2765, -1000, 19366, + -1000, 28403, 19366, 19366, 19366, -1000, -1000, -1000, 19366, 19366, + -1000, -1000, 19366, 19366, -1000, 19366, 19366, 19366, -1000, 19366, + 19366, 19366, 19366, -1000, -1000, -1000, -1000, 19366, 19366, 19366, + 19366, 19366, 19366, 19366, 19366, 19366, 19366, -1000, -1000, 33963, + 132, -173, 1548, 132, 1548, -1000, 18671, 13092, -1000, -1000, + -1000, -1000, -1000, 19366, 19366, 19366, 19366, 19366, 19366, -1000, + -1000, -1000, 19366, 19366, -1000, 19366, -1000, 19366, -1000, -1000, + -1000, -1000, -1000, 756, -1000, 751, 751, 751, 47863, -1000, + -1000, -1000, -1000, 2077, -1000, 2603, -1000, 2397, 2391, 2764, + 2748, -1000, 24928, 3046, 1910, -1000, 913, -1000, -1000, 47863, + -284, -1000, 2432, 2477, 781, 781, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 10989, 2670, 19366, 2331, 48558, 157, -1000, + 24233, 47863, 48558, 24928, 24928, 24928, 24928, 24928, -1000, 2363, + 2359, -1000, 2380, 2362, 2451, 49253, -1000, 1709, 1892, -1000, + 19366, 27013, 2058, 24928, -1000, -1000, 24928, 49253, 10288, -1000, + -1000, 24, 22, -1000, -1000, -1000, -1000, 1930, -1000, -1000, + 374, 2570, 2449, -1000, -1000, -1000, -1000, -1000, 1884, -1000, + 1841, 2064, 1825, 1803, 247, -1000, 2262, 2498, 901, 901, + -1000, 1199, -1000, 1192, 1800, 1781, -1000, -1000, -1000, 2216, + -1000, 255, 562, 640, -1000, 49253, 2322, 2317, 2313, -1000, + -470, 1189, 2214, 2258, 19366, 2213, 2722, 1914, 47863, -1000, + -1000, 48558, -1000, 258, -1000, 321, 47863, -1000, -1000, -1000, + 446, 49253, -1000, 5571, -1000, -1000, -1000, 260, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, 807, 498, 2210, 1795, 911, + -1000, -1000, -1000, -1000, 49253, 310, -1000, 2208, 1280, -1000, + -1000, 2166, -1000, -1000, -1000, -1000, 252, 404, 1771, 219, + 1753, 219, 219, 1739, 219, 1737, 219, 219, -1000, 49253, + 691, 2259, 49253, -1000, -1000, -1000, 995, 995, -1000, -1000, + 2497, -1000, 1192, 1577, 20061, 20061, -1000, 812, 495, -147, + 2191, 2191, -1000, 2191, 2198, -1000, 2191, 181, 2191, 179, + 2191, -1000, -1000, 1405, 1405, 1526, -1000, 2021, 1226, -1000, + 1335, 19366, 2254, -1000, -1000, -1000, -1000, -1000, -35, 2206, + 2185, 1577, -1000, 2182, 2176, 19366, 1577, 1405, 1999, 1577, + 1577, 1577, 1577, -1000, 1335, 1526, 2168, 1526, 1577, 1577, + 2157, 380, 1577, 1790, 1790, 1790, 1790, 1790, 1526, 1526, + 1526, 1526, 47863, -1000, -173, -1000, -1000, -217, -223, -1000, + 1405, -173, 2062, 1405, -1000, 1952, 1939, 2149, 1912, 1577, + 2145, 1577, 1577, 1577, 1882, -1000, 2604, 2604, 2604, 1775, + 1158, 49253, -1000, -1000, -1000, -1000, 2748, 2744, 1934, -1000, + -1000, 1735, 1733, -1000, 107, 478, -1000, 2442, 2477, -1000, + 2715, 2419, 2714, -1000, -1000, -1000, -1000, -1000, 1335, -1000, + 2533, 2055, -1000, 910, 1788, -1000, -1000, 17976, 1786, 2367, + 707, 1775, 2132, 2589, 2288, 2304, 3024, -1000, -1000, -1000, + -1000, 2349, -1000, 2319, -1000, -1000, 2151, -1000, 2125, 453, + 24928, 2129, 2129, -1000, 700, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, 1033, 5021, 2795, -1000, 1714, -1000, 1308, 204, + 1183, -1000, -1000, 901, 901, -1000, 981, 979, -1000, 49253, + 2162, -1000, 402, 1711, 402, 1178, -1000, -1000, 1140, -1000, + -1000, -1000, -1000, 2192, 2469, -1000, -1000, -1000, -1000, 529, + 491, 1769, 909, -1000, -1000, -1000, 49253, -1000, 49253, 49253, + 49253, 2159, 2710, -1000, 19366, 2156, 907, 2140, 47863, 47863, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1506, - 1822, 1822, 1822, 1822, 1822, 19381, 1392, -1000, -1000, -1000, - 1469, 2997, 1840, 2991, 1822, 1822, -1000, 1822, 2987, 2959, - 1462, 1546, 1462, 2016, -1000, 2917, 1822, 2865, 2848, 2823, - 2097, 2796, 2749, 2735, 1822, 1822, 1822, 2065, 2664, 2615, - 2543, 2487, 2482, 2475, 2468, 2461, 2420, 1822, -171, 1822, - 1462, -1000, -1000, -1000, -1000, -1000, 2416, 2057, 1462, 2001, - 2108, 743, -1000, -1000, 1853, 1462, 1462, 1853, 1853, 2402, - 2394, 2380, 2374, 2359, 2354, 1822, 1822, -1000, 1822, 2309, - 2299, 2048, 2039, 1462, -1000, 1489, 49311, -1000, -313, -1000, - 15, 754, 2108, -1000, 32607, 1462, -1000, -1000, 5242, -1000, - 1310, -1000, -1000, -1000, 29823, 1947, 2588, -1000, 1738, -1000, - 2108, 1850, -1000, -1000, 439, 119, 29127, 808, 808, 150, - 1364, 1364, 19381, -1000, -1000, -1000, -1000, -1000, -1000, 738, - 2689, 444, 2108, -1000, 2033, 2568, -1000, -1000, -1000, 2538, - 22862, -1000, -1000, 2108, 2108, 49311, 2032, 2018, -1000, 726, - -1000, 1374, 1996, 61, 65, -1000, -1000, -1000, -1000, 1364, - -1000, 1407, 471, 1305, -1000, 558, -1000, -1000, -1000, -1000, - 2439, 133, -1000, -1000, -1000, 283, 439, -1000, -1000, -1000, - -1000, -1000, -1000, 1806, 1806, -1000, -1000, -1000, -1000, -1000, - 1275, -1000, -1000, -1000, -1000, 1268, -1000, -1000, 1261, -1000, - -1000, 2188, 2285, 329, -1000, -1000, 908, 1791, -1000, -1000, - 2437, 908, 908, 47919, -1000, -1000, 1798, 2509, -106, 2499, - 2191, 327, 49311, 2271, -1000, 2236, 2236, 2236, 49311, -1000, - -1000, -1000, -1000, -1000, -1000, -466, 83, 455, -1000, -1000, - -1000, 4914, 47919, 1845, -1000, 284, -1000, 1756, -1000, 47919, - -1000, 1841, 2187, 47919, 47919, -1000, -1000, -1000, 47919, 2108, - -1000, -1000, -1000, -1000, 627, 2470, 338, -1000, -1000, -193, - -1000, -1000, 307, 284, 48615, 1367, 799, -1000, -1000, -1000, - -1000, -1000, -461, 1818, 2182, 271, 572, 622, 309, 389, - 49311, 49311, 49311, 49311, 49311, 736, -1000, -1000, 79, -1000, - -1000, -1000, -1000, 241, -1000, -1000, -1000, -1000, -1000, -1000, - 241, -1000, -1000, -1000, -1000, -1000, 241, -1000, 1784, -1000, - -1000, -1000, -1000, 241, -1000, -1000, -1000, 69, -1000, -1000, - -1000, -1000, 241, -1000, -1000, -1000, -1000, -1000, -1000, 241, - -1000, -1000, -1000, -1000, 370, 605, -1000, 49311, 49311, 716, - -1000, -1000, -1000, -1000, -1000, -1000, 1035, -1000, -1000, 1035, - -1000, -1000, -1000, -1000, -1000, -1000, 402, -1000, -1000, -1000, - -1000, -1000, -1000, 2458, 49311, 35, -423, -1000, -418, 19381, - -1000, -1000, -1000, -1000, 1548, 626, 1449, 20077, 20077, 20077, - -1000, -1000, -1000, 902, 902, 28431, -1000, 19381, 18685, -1000, - -1000, 19381, 19381, 961, -1000, 19381, 1292, -1000, 19381, -1000, - -1000, -1000, 1489, 1822, 1822, 1822, 1822, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, 2068, 19381, 19381, - 19381, 1462, 376, -1000, -1000, -1000, -1000, -1000, 2707, -1000, - 19381, -1000, 28431, 19381, 19381, 19381, -1000, -1000, -1000, 19381, - 19381, -1000, -1000, 19381, 19381, -1000, 19381, 19381, 19381, -1000, - 19381, 19381, 19381, 19381, -1000, -1000, -1000, -1000, 19381, 19381, - 19381, 19381, 19381, 19381, 19381, 19381, 19381, 19381, -1000, -1000, - 33999, 130, -171, 1648, 130, 1648, -1000, 18685, 13098, -1000, - -1000, -1000, -1000, -1000, 19381, 19381, 19381, 19381, 19381, 19381, - -1000, -1000, -1000, 19381, 19381, -1000, 19381, -1000, 19381, -1000, - -1000, -1000, -1000, -1000, 754, -1000, 725, 725, 725, 47919, - -1000, -1000, -1000, -1000, 1995, -1000, 2551, -1000, 2367, 2358, - 2704, 2689, -1000, 24951, 2588, 1813, -1000, 948, -1000, -1000, - 47919, -288, -1000, 2419, 2397, 808, 808, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 10992, 2629, 19381, 2270, 48615, 159, - -1000, 24255, 47919, 48615, 24951, 24951, 24951, 24951, 24951, -1000, - 2307, 2305, -1000, 2322, 2294, 2352, 49311, -1000, 1463, 1805, - -1000, 19381, 27039, 1986, 24951, -1000, -1000, 24951, 49311, 10290, - -1000, -1000, 31, 40, -1000, -1000, -1000, -1000, 3370, -1000, - -1000, 852, 2526, 2429, -1000, -1000, -1000, -1000, -1000, 1801, - -1000, 1797, 1994, 1788, 1783, 252, -1000, 2148, 2455, 908, - 908, -1000, 1260, -1000, 1367, 1780, 1778, -1000, -1000, -1000, - 2181, -1000, 271, 582, 619, -1000, 49311, 2267, 2264, 2263, - -1000, -472, 1257, 2178, 2136, 19381, 2177, 2660, 1963, 47919, - -1000, -1000, 48615, -1000, 189, -1000, 329, 47919, -1000, -1000, - -1000, 450, 49311, -1000, 8804, -1000, -1000, -1000, 284, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, 592, 516, 2174, 1777, - 945, -1000, -1000, -1000, -1000, 49311, 322, -1000, 2173, 1354, - -1000, -1000, 2227, -1000, -1000, -1000, -1000, 316, 426, 1774, - 236, 1773, 236, 236, 1769, 236, 1764, 236, 236, -1000, - 49311, 709, 2285, 49311, -1000, -1000, -1000, 1076, 1076, -1000, - -1000, 2453, -1000, 1367, 1822, 20077, 20077, -1000, 816, 303, - -146, 2166, 2166, -1000, 2166, 2172, -1000, 2166, 198, 2166, - 197, 2166, -1000, -1000, 1462, 1462, 1489, -1000, 2035, 1758, - -1000, 1364, 19381, 2287, -1000, -1000, -1000, -1000, -1000, -35, - 2254, 2229, 1822, -1000, 2163, 2161, 19381, 1822, 1462, 2030, - 1822, 1822, 1822, 1822, -1000, 1364, 1489, 2204, 1489, 1822, - 1822, 2179, 368, 1822, 1768, 1768, 1768, 1768, 1768, 1489, - 1489, 1489, 1489, 47919, -1000, -171, -1000, -1000, -213, -219, - -1000, 1462, -171, 1984, 1462, -1000, 2026, 2010, 2169, 1991, - 1822, 2131, 1822, 1822, 1822, 1970, -1000, 2624, 2624, 2624, - 1753, 1310, 49311, -1000, -1000, -1000, -1000, 2689, 2680, 1972, - -1000, -1000, 1738, 1730, -1000, 119, 491, -1000, 2379, 2397, - -1000, 2651, 2407, 2650, -1000, -1000, -1000, -1000, -1000, 1364, - -1000, 2476, 1993, -1000, 944, 1843, -1000, -1000, 17989, 1761, - 2353, 724, 1753, 2041, 2568, 2245, 2259, 2511, -1000, -1000, - -1000, -1000, 2292, -1000, 2290, -1000, -1000, 2137, -1000, 2113, - 452, 24951, 2037, 2037, -1000, 718, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 1109, 8014, 2742, -1000, 1727, -1000, 1373, - 218, 1240, -1000, -1000, 908, 908, -1000, 1023, 1002, -1000, - 49311, 2159, -1000, 439, 1711, 439, 1230, -1000, -1000, 1216, - -1000, -1000, -1000, -1000, 2324, 2351, -1000, -1000, -1000, -1000, - 608, 458, 1751, 933, -1000, -1000, -1000, 49311, -1000, 49311, - 49311, 49311, 2157, 2647, -1000, 19381, 2155, 925, 2158, 47919, - 47919, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 559, 908, -442, 372, 364, 908, 908, 908, - -473, -1000, -1000, 1747, 1736, -1000, -131, -1000, 19381, -1000, - -1000, -1000, 1301, 1301, 1709, 1702, 1700, -1000, 1726, 911, - -1000, -1000, -1000, -1000, -1000, -1000, 2153, 936, -1000, 572, - 1674, 2137, -1000, -1000, -1000, 1754, -1000, -1000, -112, 47919, - 47919, 47919, 47919, -1000, -1000, 1180, -1000, -1000, -1000, 1671, + -1000, 581, 901, -438, 364, 358, 901, 901, 901, -477, + -1000, -1000, 1767, 1758, -1000, -135, -1000, 19366, -1000, -1000, + -1000, 1220, 1220, 1699, 1690, 1682, -1000, 1689, 904, -1000, + -1000, -1000, -1000, -1000, -1000, 2155, 1194, -1000, 659, 1680, + 2151, -1000, -1000, -1000, 1603, -1000, -1000, -118, 47863, 47863, + 47863, 47863, -1000, -1000, 1070, -1000, -1000, -1000, 1666, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 816, 1462, 383, -116, 1462, -1000, - -1000, 439, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 19381, -1000, 19381, -1000, 1364, 19381, 2629, 1660, - 19381, 19381, -1000, 1205, 1201, 1822, -1000, -1000, -1000, 19381, - -1000, -1000, -1000, -1000, -1000, 19381, -1000, -1000, -1000, 19381, - 285, 902, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1462, 451, -1000, -1000, -1000, -1000, 2694, -1000, - 1462, 19381, -1000, -1000, 19381, -1000, 19381, 19381, -1000, 19381, - -1000, 19381, -1000, -1000, -1000, -1000, 19381, 2108, 2436, 2108, - 2108, 27039, -1000, -1000, 2680, 2674, 2644, -1000, -1000, 2395, - 2381, 2381, 2379, -1000, 2643, 2639, -1000, 1657, 2638, 1636, - 999, -1000, 48615, 19381, 159, -1000, 432, 47919, 159, 47919, - -1000, 2642, -1000, -1000, 19381, 2142, -1000, 19381, -1000, -1000, - -1000, -1000, 5033, 2689, 2037, -1000, -1000, 833, -1000, 19381, - -1000, -1000, -1000, 5264, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 1613, 1597, -1000, -1000, 2141, 19381, -1000, -1000, - -1000, 1748, 1719, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 1718, 910, -1000, -1000, -1000, -1000, 2138, -1000, 582, - 1594, 2137, -1000, -1000, -1000, -1000, 450, -468, 2093, 47919, - 1194, -1000, 1685, 1963, 381, 159, 1584, 908, 908, 908, - 1189, 1170, 32607, 1682, -1000, 47919, 539, -1000, 450, -1000, - -141, -142, 1822, -1000, -1000, -1000, 592, 1580, 325, 1666, - 906, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 897, -1000, 2525, -1000, -1000, 13098, -1000, -1000, 2129, 2234, - -1000, -1000, -1000, -1000, -1000, 2291, -104, -121, -1000, -1000, - 1822, 1822, 1741, 1462, -1000, 1822, 1822, 1649, 1621, -1000, - 1822, 1489, 1966, -1000, 285, 1462, 2257, -1000, -1000, 5033, - -1000, -1000, 2642, 2637, 130, -1000, -1000, 315, 130, 1364, - 1961, 1822, 1953, 1949, 1822, 1822, 27735, -1000, 2635, 2572, - 33303, 33303, 754, 2674, -178, 19381, 19381, 2384, 1182, -1000, - -1000, -1000, -1000, 1578, 1574, -1000, 1572, -1000, 2738, -1000, - 1364, -1000, 159, -1000, 713, 1843, -1000, 2629, 1364, 47919, - 1364, 123, 2642, -1000, 1822, -1000, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, 2108, - 2108, 2108, 2108, 2108, 2108, 2108, -1000, -1000, 47919, 2081, - -1000, -1000, -1000, 608, 1568, 325, 896, -1000, 2522, 1653, - 82, -1000, 1490, 1963, -1000, -1000, 154, -1000, 19381, -1000, - 32607, 1566, 1560, -1000, -1000, -1000, -1000, -473, -1000, -1000, - -1000, -1000, -1000, -1000, 883, -1000, 1635, 881, -1000, -1000, - -1000, 936, 1556, 1554, 418, 1956, -1000, 875, 47919, 49311, - -1000, 2268, -1000, -1000, -1000, 19381, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 19381, -1000, 1462, 2255, -1000, -295, - -1000, -446, 19381, -171, -1000, -1000, -171, -1000, 19381, -1000, - -1000, 19381, -1000, 19381, -1000, -1000, 1620, -1000, -1000, -1000, - -1000, -1000, 1620, 1620, -1000, -178, -1000, 1880, -1000, 47919, - 1364, 1546, -1000, 1178, -1000, -1000, -1000, -1000, -1000, 48615, - 1843, 47919, -1000, 1589, 1462, 2108, 2629, -1000, 1553, -1000, - 868, -1000, 1550, 1545, 418, -1000, 2127, 2136, -1000, -1000, - -1000, 17293, -1000, -1000, -1000, -1000, -1000, 219, 1497, -1000, - 325, 1491, 861, -1000, -1000, -111, 13098, 9588, 1519, -1000, - -110, 1822, 1489, -1000, -397, -1000, -1000, -1000, -1000, 269, - -1000, -1000, 1546, -1000, -1000, 1887, 1677, 1663, 31911, -1000, - -1000, -1000, -1000, -178, -1000, -1000, 2519, -1000, -1000, 1471, - -1000, -1000, 27039, 47223, -1000, -94, 280, 1470, -1000, -1000, - -111, 19381, 2124, 1462, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 854, -1000, 1454, -1000, 51, -1000, -1000, -1000, - -1000, -1000, 2227, -119, -1000, -1000, -1000, 162, -432, -216, - -217, -1000, -1000, 20077, -1000, 19381, -1000, 19381, -1000, 19381, - -1000, -1000, -1000, 47919, 2108, -1000, 1467, -1000, 3915, -229, - 2249, -1000, -32, -1000, -1000, -1000, 1044, 1404, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 2061, 47919, -1000, 1365, -1000, - 561, -1000, -1000, -112, -126, 981, -1000, -1000, -1000, -1000, - -1000, 1441, 1315, 1822, -1000, 47919, -1000, 47223, -224, 799, - 5033, -1000, 2248, 2230, 2699, -1000, -1000, -1000, -1000, -1000, - -1000, -479, 1461, -1000, 331, -1000, -1000, 162, -1000, 19381, - -1000, 19381, -1000, 1462, -1000, -1000, 2493, 123, -1000, 2736, - -1000, 2728, 777, 777, -1000, 1142, -479, -1000, -1000, 1822, - 1822, -1000, -230, -1000, -1000, -1000, -1000, -1000, 557, 1221, - -1000, -1000, -1000, -1000, -1000, 5033, -1000, -1000, -1000, 245, - 245, -1000, -1000, + -1000, -1000, -1000, 812, 1405, 376, -122, 1405, -1000, -1000, + 402, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 19366, -1000, 19366, -1000, 1335, 19366, 2670, 1656, 19366, + 19366, -1000, 1124, 1121, 1577, -1000, -1000, -1000, 19366, -1000, + -1000, -1000, -1000, -1000, 19366, -1000, -1000, -1000, 19366, 273, + 1084, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1405, 452, -1000, -1000, -1000, -1000, 2758, -1000, 1405, + 19366, -1000, -1000, 19366, -1000, 19366, 19366, -1000, 19366, -1000, + 19366, -1000, -1000, -1000, -1000, 19366, 1772, 2446, 1772, 1772, + 27013, -1000, -1000, 2744, 2740, 2703, -1000, -1000, 2402, 2407, + 2407, 2442, -1000, 2701, 2698, -1000, 1652, 2691, 1646, 971, + -1000, 48558, 19366, 157, -1000, 418, 47863, 157, 47863, -1000, + 2689, -1000, -1000, 19366, 2154, -1000, 19366, -1000, -1000, -1000, + -1000, 6093, 2748, 2129, -1000, -1000, 815, -1000, 19366, -1000, + -1000, -1000, 8688, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 1641, 1639, -1000, -1000, 2153, 19366, -1000, -1000, -1000, + 1591, 1558, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 1677, 903, -1000, -1000, -1000, -1000, 2152, -1000, 562, 1625, + 2151, -1000, -1000, -1000, -1000, 446, -468, 2093, 47863, 1113, + -1000, 1645, 1914, 420, 157, 1623, 901, 901, 901, 1086, + 1066, 32573, 1638, -1000, 47863, 530, -1000, 446, -1000, -140, + -144, 1577, -1000, -1000, -1000, 807, 1594, 311, 1634, 896, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 894, + -1000, 2567, -1000, -1000, 13092, -1000, -1000, 1955, 2272, -1000, + -1000, -1000, -1000, -1000, 2375, -102, -128, -1000, -1000, 1577, + 1577, 2118, 1405, -1000, 1577, 1577, 1554, 1432, -1000, 1577, + 1526, 1793, -1000, 273, 1405, 2303, -1000, -1000, 6093, -1000, + -1000, 2689, 2684, 132, -1000, -1000, 296, 132, 1335, 1760, + 1577, 1756, 1746, 1577, 1577, 27708, -1000, 2683, 2681, 33268, + 33268, 756, 2740, -185, 19366, 19366, 2404, 1141, -1000, -1000, + -1000, -1000, 1586, 1579, -1000, 1573, -1000, 2793, -1000, 1335, + -1000, 157, -1000, 694, 1788, -1000, 2670, 1335, 47863, 1335, + 100, 2689, -1000, 1577, -1000, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, 1772, + 1772, 1772, 1772, 1772, 1772, -1000, -1000, 47863, 2086, -1000, + -1000, -1000, 529, 1567, 311, 892, -1000, 2562, 1606, 79, + -1000, 1407, 1914, -1000, -1000, 156, -1000, 19366, -1000, 32573, + 1559, 1543, -1000, -1000, -1000, -1000, -477, -1000, -1000, -1000, + -1000, -1000, -1000, 880, -1000, 1600, 878, -1000, -1000, -1000, + 1194, 1521, 1469, 417, 1886, -1000, 869, 47863, 49253, -1000, + 2343, -1000, -1000, -1000, 19366, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 19366, -1000, 1405, 2297, -1000, -260, -1000, + -383, 19366, -173, -1000, -1000, -173, -1000, 19366, -1000, -1000, + 19366, -1000, 19366, -1000, -1000, 1584, -1000, -1000, -1000, -1000, + -1000, 1584, 1584, -1000, -185, -1000, 1805, -1000, 47863, 1335, + 1762, -1000, 1062, -1000, -1000, -1000, -1000, -1000, 48558, 1788, + 47863, -1000, 1566, 1405, 1772, 2670, -1000, 1557, -1000, 868, + -1000, 1549, 1447, 417, -1000, 1844, 2258, -1000, -1000, -1000, + 17281, -1000, -1000, -1000, -1000, -1000, 203, 1444, -1000, 311, + 1425, 865, -1000, -1000, -114, 13092, 9587, 1541, -1000, -112, + 1577, 1526, -1000, -411, -1000, -1000, -1000, -1000, 242, -1000, + -1000, 1762, -1000, -1000, 1698, 1674, 1664, 31878, -1000, -1000, + -1000, -1000, -185, -1000, -1000, 2544, -1000, -1000, 1285, -1000, + -1000, 27013, 47168, -1000, -90, 282, 1408, -1000, -1000, -114, + 19366, 1821, 1405, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 861, -1000, 1400, -1000, 68, -1000, -1000, -1000, -1000, + -1000, 2166, -126, -1000, -1000, -1000, 246, -426, -211, -212, + -1000, -1000, 20061, -1000, 19366, -1000, 19366, -1000, 19366, -1000, + -1000, -1000, 47863, 1772, -1000, 1519, -1000, 3887, -235, 2296, + -1000, -41, -1000, -1000, -1000, 1016, 1390, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 1728, 47863, -1000, 1388, -1000, 545, + -1000, -1000, -118, -130, 957, -1000, -1000, -1000, -1000, -1000, + 1632, 1602, 1577, -1000, 47863, -1000, 47168, -228, 810, 6093, + -1000, 2295, 2294, 2757, -1000, -1000, -1000, -1000, -1000, -1000, + -479, 1404, -1000, 297, -1000, -1000, 246, -1000, 19366, -1000, + 19366, -1000, 1405, -1000, -1000, 2556, 100, -1000, 2786, -1000, + 2779, 864, 864, -1000, 1063, -479, -1000, -1000, 1577, 1577, + -1000, -237, -1000, -1000, -1000, -1000, -1000, 536, 1167, -1000, + -1000, -1000, -1000, -1000, 6093, -1000, -1000, -1000, 267, 267, + -1000, -1000, } var yyPgo = [...]int{ - 0, 3252, 3251, 22, 6, 44, 43, 3250, 39, 130, - 224, 24, 272, 117, 3249, 200, 3248, 3247, 3246, 3244, - 3243, 3241, 2775, 2771, 2769, 3240, 3239, 2764, 3238, 3237, - 3236, 3235, 3234, 3233, 3231, 3230, 3229, 3228, 3227, 3226, - 3225, 3224, 3223, 3222, 3221, 3220, 3219, 3218, 3217, 214, - 85, 3216, 3215, 201, 193, 215, 3214, 3213, 3212, 136, - 207, 105, 107, 208, 3211, 3210, 99, 3209, 3208, 3207, - 213, 212, 211, 957, 3206, 206, 135, 55, 3205, 3203, - 3202, 3201, 3200, 3199, 3198, 3197, 3196, 3195, 3194, 3193, - 3192, 3191, 3190, 3189, 3188, 3187, 3186, 3185, 256, 3183, - 3182, 9, 3181, 102, 3180, 3179, 3178, 3177, 3176, 71, - 3172, 3171, 21, 111, 3168, 3167, 50, 3166, 3165, 3164, - 3163, 3162, 8, 3161, 16, 3160, 31, 3159, 3158, 150, - 3157, 3156, 3155, 29, 3154, 3151, 3148, 3144, 3142, 3141, - 3140, 165, 3137, 3135, 3134, 195, 221, 3131, 3127, 194, - 122, 131, 3125, 3124, 121, 209, 3118, 138, 3117, 3115, - 3113, 174, 3112, 2306, 3109, 3108, 81, 114, 3107, 146, - 3106, 3105, 61, 97, 78, 59, 53, 54, 3104, 3103, - 79, 96, 3102, 127, 3099, 3097, 124, 84, 3095, 119, - 116, 3094, 3093, 77, 28, 3091, 12, 14, 5, 86, - 3090, 3089, 132, 3088, 3087, 3082, 115, 3081, 3080, 2925, - 3078, 109, 154, 125, 93, 3077, 47, 60, 3074, 3072, - 3071, 3070, 3069, 63, 3067, 3065, 3057, 162, 158, 192, - 3049, 34, 56, 64, 171, 3045, 67, 94, 216, 190, - 3044, 3043, 159, 160, 3042, 3041, 68, 45, 48, 3032, - 129, 153, 139, 35, 110, 157, 3030, 3029, 70, 89, - 3027, 3026, 3025, 3020, 196, 3018, 3015, 83, 3014, 73, - 3013, 203, 3010, 2, 58, 3009, 46, 184, 3003, 87, - 3002, 3000, 82, 118, 92, 20, 2999, 183, 188, 151, - 191, 2993, 2986, 65, 2983, 2981, 2977, 217, 254, 2973, - 2972, 88, 198, 170, 185, 106, 2970, 361, 2967, 2966, - 112, 0, 5256, 2955, 23, 189, 2948, 2945, 6091, 161, - 32, 13, 2941, 134, 2939, 2931, 2926, 2920, 243, 197, - 128, 186, 72, 2918, 2914, 2912, 4, 2909, 2906, 2905, - 2902, 2901, 2900, 104, 41, 38, 37, 257, 90, 76, - 120, 187, 179, 98, 2898, 2892, 2887, 148, 123, 2886, - 181, 180, 168, 156, 2885, 199, 172, 145, 2882, 95, - 36, 2881, 2880, 2879, 2878, 108, 2875, 2872, 2871, 2870, - 178, 173, 147, 100, 2856, 101, 137, 177, 175, 57, - 2855, 52, 2854, 2851, 18, 205, 25, 2850, 1, 126, - 149, 2845, 4931, 202, 2844, 7, 356, 176, 2842, 2841, - 19, 3, 10, 2840, 2839, 2831, 2828, 155, 2822, 2820, - 2819, 2816, 15, 51, 11, 40, 133, 166, 2815, 2814, - 167, 169, 2813, 2811, 2810, 2809, 2807, 2804, 2798, 103, - 33, 2790, 62, 74, 26, 17, 2788, 2787, 30, 49, - 2786, 2781, 3900, 782, 152, 2780, 218, + 0, 3284, 3283, 22, 6, 43, 41, 3282, 39, 132, + 221, 24, 238, 117, 3281, 197, 3279, 3278, 3277, 3276, + 3275, 3274, 2830, 2822, 2821, 3273, 3272, 2816, 3271, 3270, + 3269, 3268, 3267, 3266, 3265, 3264, 3262, 3261, 3260, 3258, + 3256, 3255, 3254, 3253, 3251, 3250, 3249, 3248, 3247, 233, + 85, 3246, 3245, 196, 189, 210, 3243, 3242, 3240, 136, + 226, 108, 111, 208, 3239, 3238, 99, 3237, 3236, 3235, + 204, 202, 201, 977, 3234, 218, 126, 57, 3233, 3232, + 3230, 3229, 3228, 3227, 3226, 3225, 3224, 3223, 3222, 3221, + 3220, 3219, 3218, 3217, 3216, 3215, 3214, 3213, 227, 3212, + 3211, 9, 3210, 87, 3209, 3208, 3207, 3206, 3205, 71, + 3204, 3202, 21, 103, 3201, 3200, 50, 3199, 3198, 3197, + 3196, 3195, 8, 3194, 16, 3193, 31, 3192, 3190, 151, + 3186, 3185, 3184, 26, 3183, 3182, 3181, 3180, 3179, 3178, + 3176, 168, 3175, 3174, 3173, 203, 211, 3172, 3171, 194, + 123, 131, 3170, 3168, 130, 209, 3167, 145, 3166, 3165, + 3164, 179, 3163, 2306, 3161, 3160, 82, 95, 3159, 139, + 3158, 3155, 61, 97, 92, 59, 53, 54, 3153, 3150, + 74, 102, 3149, 133, 3143, 3136, 120, 84, 3132, 124, + 116, 3128, 3126, 77, 28, 3125, 12, 14, 5, 86, + 3124, 3123, 137, 3118, 3117, 3116, 115, 3109, 3108, 2925, + 3105, 114, 159, 128, 100, 3100, 47, 81, 3090, 3089, + 3087, 3083, 3079, 63, 3077, 3072, 3069, 162, 163, 195, + 3065, 44, 56, 64, 157, 3064, 51, 105, 213, 190, + 3058, 3057, 161, 156, 3056, 3052, 79, 45, 48, 3048, + 129, 155, 150, 35, 119, 170, 3046, 3044, 70, 88, + 3043, 3042, 3041, 3040, 191, 3039, 3035, 83, 3031, 73, + 3026, 192, 3024, 2, 58, 3023, 46, 188, 3022, 94, + 3021, 3017, 78, 146, 93, 20, 3014, 184, 187, 152, + 206, 3013, 3012, 65, 3011, 3010, 3009, 215, 256, 3007, + 3002, 96, 198, 169, 176, 109, 3001, 371, 2999, 2998, + 110, 0, 5256, 2997, 38, 186, 2995, 2993, 6091, 165, + 32, 13, 2990, 134, 2985, 2984, 2982, 2981, 212, 217, + 135, 185, 72, 2980, 2979, 2978, 4, 2976, 2972, 2971, + 2966, 2965, 2964, 104, 37, 36, 34, 287, 90, 76, + 121, 193, 178, 89, 2963, 2962, 2961, 149, 112, 2954, + 183, 181, 153, 127, 2947, 200, 171, 147, 2944, 67, + 33, 2943, 2940, 2938, 2936, 118, 2931, 2930, 2920, 2919, + 177, 175, 148, 101, 2917, 106, 138, 173, 180, 60, + 2905, 49, 2904, 2901, 18, 207, 23, 2900, 1, 122, + 158, 2897, 4931, 205, 2891, 7, 367, 174, 2890, 2889, + 19, 3, 10, 2888, 2887, 2886, 2885, 160, 2884, 2882, + 2879, 2877, 15, 55, 11, 40, 125, 98, 2876, 2875, + 166, 167, 2874, 2873, 2870, 2855, 2854, 2853, 2852, 107, + 29, 2850, 62, 68, 25, 17, 2845, 2840, 30, 52, + 2839, 2831, 3900, 782, 154, 2829, 214, } -//line sql.y:9092 +//line sql.y:9091 type yySymType struct { union any empty struct{} @@ -8033,8 +8025,7 @@ var yyR1 = [...]int{ 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, 311, - 311, 311, 311, 311, 311, 452, 453, 328, 329, 329, - 329, + 311, 311, 311, 311, 452, 453, 328, 329, 329, 329, } var yyR2 = [...]int{ @@ -8260,8 +8251,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, 1, 1, 1, 0, 0, 1, - 1, + 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, } var yyChk = [...]int{ @@ -8272,388 +8262,388 @@ var yyChk = [...]int{ -18, -19, -34, -35, -36, -37, -38, -39, -40, -41, -42, -9, -8, -13, 10, 11, -127, -52, 33, -57, -67, 225, -68, -58, 226, -69, 228, 227, 266, 229, - 250, 660, 235, 259, 75, 343, 344, 346, 347, 348, - 349, -128, 656, 264, 265, 231, 37, 46, 34, 35, + 250, 659, 235, 259, 75, 342, 343, 345, 346, 347, + 348, -128, 655, 264, 265, 231, 37, 46, 34, 35, 38, 236, 272, 273, 234, -43, -44, -45, -46, -47, - -48, -10, -53, 9, -452, 12, 488, 261, 260, 29, - 317, -12, 550, 87, -99, -451, 706, -271, -255, 23, + -48, -10, -53, 9, -452, 12, 487, 261, 260, 29, + 317, -12, 549, 87, -99, -451, 705, -271, -255, 23, 34, 30, -254, -250, -146, -255, 21, 19, 8, -98, -98, -98, 13, 14, -98, -371, -373, -12, 26, 87, 159, 9, 87, -98, -74, -73, -71, -70, -72, -75, 32, -64, -65, -395, -63, -60, 230, 227, 276, 123, 124, 266, 267, 268, 229, 250, 265, 269, 264, 285, - -59, 82, 34, 550, 553, -378, 226, 232, 233, 228, - 489, 126, 125, 76, -375, 402, 583, 676, -75, 678, - 101, 104, 677, 45, 240, 679, 680, 681, 590, 682, - 249, 683, 684, 685, 686, 692, 631, 693, 694, 695, - 127, 8, -98, -322, -318, 91, -311, 547, 252, 581, - 582, 301, 82, 42, 556, 399, 402, 583, 518, 676, - 343, 359, 353, 523, 524, 525, 382, 374, 548, 584, - 557, 327, 253, 289, 670, 372, 135, 678, 331, 585, - 267, 407, 408, 586, 409, 101, 346, 451, 691, 330, - 587, 689, 104, 677, 351, 80, 517, 52, 673, 45, - 262, 370, 234, 366, 679, 290, 588, 559, 283, 126, - 123, 698, 37, 362, 51, 31, 688, 125, 50, 680, - 150, 589, 681, 590, 411, 389, 664, 49, 412, 268, - 591, 85, 273, 552, 334, 672, 413, 537, 363, 414, - 300, 687, 231, 592, 651, 643, 644, 415, 416, 665, - 394, 390, 395, 539, 593, 443, 522, 417, 647, 648, - 705, 53, 594, 595, 666, 124, 596, 79, 682, 81, - 357, 358, 597, 298, 251, 542, 543, 445, 386, 500, - 507, 508, 111, 112, 503, 113, 509, 114, 510, 511, - 512, 501, 115, 108, 502, 513, 514, 387, 388, 116, - 515, 110, 109, 504, 506, 117, 516, 249, 36, 418, - 549, 302, 59, 329, 277, 446, 47, 392, 702, 46, - 658, 544, 598, 663, 385, 381, 497, 54, 599, 600, - 601, 602, 519, 683, 384, 356, 380, 697, 4, 295, - 520, 684, 63, 233, 397, 396, 398, 284, 442, 377, - 603, 604, 605, 256, 83, 606, 367, 22, 607, 608, - 419, 291, 609, 57, 610, 611, 449, 265, 612, 55, - 685, 40, 613, 270, 699, 686, 614, 336, 337, 615, - 616, 657, 617, 272, 618, 421, 619, 645, 646, 420, - 391, 393, 545, 279, 422, 237, 551, 620, 335, 361, - 269, 690, 621, 257, 533, 534, 535, 536, 671, 541, - 540, 271, 276, 264, 450, 258, 622, 623, 624, 625, - 626, 328, 642, 627, 628, 347, 692, 498, 44, 629, - 630, 631, 632, 633, 299, 294, 444, 453, 62, 84, - 404, 634, 635, 669, 355, 352, 292, 636, 344, 56, - 693, 694, 695, 286, 696, 526, 527, 528, 529, 10, - 703, 704, 521, 424, 127, 296, 297, 48, 378, 278, - 637, 332, 638, 368, 369, 383, 354, 379, 654, 345, - 652, 280, 425, 499, 266, 639, 452, 293, 400, 405, - 333, 555, 538, 285, 426, 661, 668, 554, 530, 531, - 376, 373, 287, 532, 640, 656, 427, 241, 281, 282, - 641, 653, 428, 429, 326, 430, 338, 340, 441, 341, - 342, 431, 432, 433, 440, 434, 437, 438, 439, 436, - 339, 435, 655, 649, 650, 288, 553, 350, 371, 406, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 303, 304, + -59, 82, 34, 549, 552, -378, 226, 232, 233, 228, + 488, 126, 125, 76, -375, 401, 582, 675, -75, 677, + 101, 104, 676, 45, 240, 678, 679, 680, 589, 681, + 249, 682, 683, 684, 685, 691, 630, 692, 693, 694, + 127, 8, -98, -322, -318, 91, -311, 546, 252, 580, + 581, 301, 82, 42, 555, 398, 401, 582, 517, 675, + 342, 358, 352, 522, 523, 524, 381, 373, 547, 583, + 556, 326, 253, 289, 669, 371, 135, 677, 330, 584, + 267, 406, 407, 585, 408, 101, 345, 450, 690, 329, + 586, 688, 104, 676, 350, 80, 516, 52, 672, 45, + 262, 369, 234, 365, 678, 290, 587, 558, 283, 126, + 123, 697, 37, 361, 51, 31, 687, 125, 50, 679, + 150, 588, 680, 589, 410, 388, 663, 49, 411, 268, + 590, 85, 273, 551, 333, 671, 412, 536, 362, 413, + 300, 686, 231, 591, 650, 642, 643, 414, 415, 664, + 393, 389, 394, 538, 592, 442, 521, 416, 646, 647, + 704, 53, 593, 594, 665, 124, 595, 79, 681, 81, + 356, 357, 596, 298, 251, 541, 542, 444, 385, 499, + 506, 507, 111, 112, 502, 113, 508, 114, 509, 510, + 511, 500, 115, 108, 501, 512, 513, 386, 387, 116, + 514, 110, 109, 503, 505, 117, 515, 249, 36, 417, + 548, 302, 59, 328, 277, 445, 47, 391, 701, 46, + 657, 543, 597, 662, 384, 380, 496, 54, 598, 599, + 600, 601, 518, 682, 383, 355, 379, 696, 4, 295, + 519, 683, 63, 233, 396, 395, 397, 284, 441, 376, + 602, 603, 604, 256, 83, 605, 366, 22, 606, 607, + 418, 291, 608, 57, 609, 610, 448, 265, 611, 55, + 684, 40, 612, 270, 698, 685, 613, 335, 336, 614, + 615, 656, 616, 272, 617, 420, 618, 644, 645, 419, + 390, 392, 544, 279, 421, 237, 550, 619, 334, 360, + 269, 689, 620, 257, 532, 533, 534, 535, 670, 540, + 539, 271, 276, 264, 449, 258, 621, 622, 623, 624, + 625, 327, 641, 626, 627, 346, 691, 497, 44, 628, + 629, 630, 631, 632, 299, 294, 443, 452, 62, 84, + 403, 633, 634, 668, 354, 351, 292, 635, 343, 56, + 692, 693, 694, 286, 695, 525, 526, 527, 528, 10, + 702, 703, 520, 423, 127, 296, 297, 48, 377, 278, + 636, 331, 637, 367, 368, 382, 353, 378, 653, 344, + 651, 280, 424, 498, 266, 638, 451, 293, 399, 404, + 332, 554, 537, 285, 425, 660, 667, 553, 529, 530, + 375, 372, 287, 531, 639, 655, 426, 241, 281, 282, + 640, 652, 427, 428, 325, 429, 337, 339, 440, 340, + 341, 430, 431, 432, 439, 433, 436, 437, 438, 435, + 338, 434, 654, 648, 649, 288, 552, 349, 370, 405, + 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, + 478, 479, 480, 481, 482, 483, 484, 485, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, - 315, 316, 496, 324, 317, 318, 319, 320, 321, 325, - 239, -98, 239, -209, -318, 239, 239, 96, 551, 677, - 661, 421, -98, 225, -290, 438, 439, 408, -308, 410, - 423, 418, 428, 416, -299, 419, 421, 279, -419, 443, - 239, 425, 411, 420, 429, 430, 338, 441, 340, 326, - 436, 431, 339, 435, 288, 432, 433, 440, 434, 437, - -402, 177, 681, 696, 135, 375, 415, 413, 444, 658, - 91, -324, 91, 92, 93, -311, 345, -326, 350, -312, - -402, -311, 348, -98, -98, -328, -328, -148, 658, 662, - -228, -163, 143, -178, -181, -169, -173, -222, -223, -224, - -225, -179, -238, -277, 166, 167, 174, 144, -234, -182, - 27, 546, 490, 489, 177, 32, -172, 220, 69, 70, - 492, 146, 58, 12, 465, 466, -180, 460, 467, 462, - 517, 519, 520, 521, 518, 523, 524, 525, 526, 527, - 528, 529, 530, 531, 532, 522, 494, 495, 118, 496, - 108, 110, 109, 497, 498, 499, 372, 544, 545, 539, - 542, 543, 541, 540, 387, 388, 500, 501, 502, 111, - 112, 113, 114, 115, 116, 117, 503, 506, 504, 505, - 507, 508, 509, 514, 515, 510, 511, 512, 513, 516, - -108, -120, 572, 571, -121, -170, -171, -184, -185, -312, - -318, 244, 459, 238, 172, 488, -174, -167, -236, 107, - 92, 93, -8, -232, 458, 463, 464, 468, 461, 558, - 560, 575, 576, 578, 563, 568, 567, 570, 533, 534, - 535, 536, 537, 538, 643, 644, 645, 646, 647, 648, - 649, 650, -402, -311, 91, -176, -175, -218, 94, 99, - 102, 103, 105, -425, 262, 368, 369, 119, -452, 674, - 90, 95, 96, 97, 98, 120, 121, 178, 179, 180, - 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, - 211, 212, 213, 214, 215, 216, 217, 218, 219, 45, - 424, 424, -209, -98, -98, -98, -98, -248, -146, -250, - -10, -8, -452, -98, -8, -9, -13, -53, 225, 318, - 319, 320, 321, 259, -55, 577, -54, -318, 100, -255, - -271, 13, 162, 43, 51, -253, -254, -12, -8, -163, - 20, 24, 25, -151, 168, -163, -318, -151, -297, 243, - -98, -98, -286, -331, 345, -288, 444, 658, 443, -278, - -291, 91, -277, -290, 442, -12, -372, 159, -358, -362, - -312, 254, -388, 250, -209, -98, -381, -380, -312, -452, - 322, 303, -147, -307, 240, 248, 247, 136, -406, 139, - 296, 459, 238, -70, -71, -72, -290, 176, 680, -129, - 271, 275, 88, 88, -362, -361, -360, -407, 275, 254, - -387, -379, 246, 255, -368, 247, 248, -363, 240, 137, - -407, -363, 245, 255, 250, 254, 275, 275, 127, 275, - 127, 275, 275, 275, 275, 275, 275, 275, 275, 275, - 270, -369, 151, -369, 554, 554, -375, -407, 250, 240, - -407, -407, 246, -309, -363, 242, 26, 242, 36, 36, - -369, -369, -369, -290, 176, -369, -369, -369, -369, 283, - 283, -369, -369, -369, -369, -369, -369, -369, -369, -369, - -369, -369, -369, -369, -369, -369, -369, -369, 322, 303, - 239, -406, -155, 435, 326, 340, 338, 82, -73, 285, - -56, -209, 322, 303, -307, 240, 241, -406, 272, -209, - 221, -209, -433, -209, 96, 96, 322, 323, 303, 304, - 322, 303, 459, 412, 416, 279, 239, 280, 241, 426, - -301, 159, 16, -301, -298, 424, 422, 409, 414, -301, - -301, -301, -301, 286, 407, -364, 240, 36, 251, 424, - 286, 407, 286, 287, 286, 287, 417, 427, 286, -323, - 15, 162, 287, -323, -323, 90, -323, 90, 90, -302, - 159, 286, 424, 282, -301, -301, -301, -329, -452, -314, - -312, -310, 230, 24, 142, 26, 28, 145, 177, 130, - 20, 146, 38, 232, 375, 250, 176, 246, 489, 225, - 73, 558, 460, 462, 458, 465, 491, 492, 459, 410, - 32, 14, 560, 29, 260, 25, 39, 170, 227, 149, - 561, 263, 27, 261, 118, 121, 563, 23, 76, 255, - 15, 248, 41, 17, 564, 565, 18, 244, 243, 162, - 240, 71, 12, 220, 30, 158, 67, 566, 137, 567, - 568, 569, 570, 131, 69, 159, 21, 700, 463, 464, - 34, 659, 546, 274, 172, 74, 60, 662, 143, 461, - 571, 572, 119, 573, 122, 77, 667, 139, 19, 72, - 43, 574, 275, 575, 245, 701, 576, 447, 577, 160, - 228, 488, 70, 161, 674, 578, 675, 238, 423, 9, - 493, 33, 259, 247, 129, 68, 579, 239, 148, 494, - 495, 242, 132, 120, 8, 136, 35, 13, 75, 78, - 466, 467, 468, 58, 128, 550, 147, 16, 580, 448, - 141, 660, 454, 455, 456, 457, 235, -402, 663, -329, - -329, 33, 92, -428, -429, -430, 550, 447, 242, -312, - -209, -104, 651, 229, -105, 657, 24, 237, -153, 424, - -141, 177, 681, 664, 665, 666, 663, 421, 661, 671, - 669, 667, 286, 668, 88, 139, 141, 142, 4, -163, - 158, -219, 151, 152, 153, 154, 155, 156, 157, 162, - 143, 145, 159, -264, 140, 163, 164, 165, 166, 167, - 168, 169, 171, 170, 172, 173, 160, 161, 176, 223, - 224, -173, -173, -173, -173, -234, -240, -239, -452, -236, - -402, -311, -318, -452, -452, -173, -296, -452, -452, -169, - -452, -452, -452, -243, -163, -452, -452, -456, -452, -456, - -456, -347, -452, -347, -452, -452, -452, -452, -452, -452, + 315, 316, 495, 323, 317, 318, 319, 320, 324, 239, + -98, 239, -209, -318, 239, 239, 96, 550, 676, 660, + 420, -98, 225, -290, 437, 438, 407, -308, 409, 422, + 417, 427, 415, -299, 418, 420, 279, -419, 442, 239, + 424, 410, 419, 428, 429, 337, 440, 339, 325, 435, + 430, 338, 434, 288, 431, 432, 439, 433, 436, -402, + 177, 680, 695, 135, 374, 414, 412, 443, 657, 91, + -324, 91, 92, 93, -311, 344, -326, 349, -312, -402, + -311, 347, -98, -98, -328, -328, -148, 657, 661, -228, + -163, 143, -178, -181, -169, -173, -222, -223, -224, -225, + -179, -238, -277, 166, 167, 174, 144, -234, -182, 27, + 545, 489, 488, 177, 32, -172, 220, 69, 70, 491, + 146, 58, 12, 464, 465, -180, 459, 466, 461, 516, + 518, 519, 520, 517, 522, 523, 524, 525, 526, 527, + 528, 529, 530, 531, 521, 493, 494, 118, 495, 108, + 110, 109, 496, 497, 498, 371, 543, 544, 538, 541, + 542, 540, 539, 386, 387, 499, 500, 501, 111, 112, + 113, 114, 115, 116, 117, 502, 505, 503, 504, 506, + 507, 508, 513, 514, 509, 510, 511, 512, 515, -108, + -120, 571, 570, -121, -170, -171, -184, -185, -312, -318, + 244, 458, 238, 172, 487, -174, -167, -236, 107, 92, + 93, -8, -232, 457, 462, 463, 467, 460, 557, 559, + 574, 575, 577, 562, 567, 566, 569, 532, 533, 534, + 535, 536, 537, 642, 643, 644, 645, 646, 647, 648, + 649, -402, -311, 91, -176, -175, -218, 94, 99, 102, + 103, 105, -425, 262, 367, 368, 119, -452, 673, 90, + 95, 96, 97, 98, 120, 121, 178, 179, 180, 181, + 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, + 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, + 212, 213, 214, 215, 216, 217, 218, 219, 45, 423, + 423, -209, -98, -98, -98, -98, -248, -146, -250, -10, + -8, -452, -98, -8, -9, -13, -53, 225, 318, 319, + 320, 14, 259, -55, 576, -54, -318, 100, -255, -271, + 13, 162, 43, 51, -253, -254, -12, -8, -163, 20, + 24, 25, -151, 168, -163, -318, -151, -297, 243, -98, + -98, -286, -331, 344, -288, 443, 657, 442, -278, -291, + 91, -277, -290, 441, -12, -372, 159, -358, -362, -312, + 254, -388, 250, -209, -98, -381, -380, -312, -452, 321, + 303, -147, -307, 240, 248, 247, 136, -406, 139, 296, + 458, 238, -70, -71, -72, -290, 176, 679, -129, 271, + 275, 88, 88, -362, -361, -360, -407, 275, 254, -387, + -379, 246, 255, -368, 247, 248, -363, 240, 137, -407, + -363, 245, 255, 250, 254, 275, 275, 127, 275, 127, + 275, 275, 275, 275, 275, 275, 275, 275, 275, 270, + -369, 151, -369, 553, 553, -375, -407, 250, 240, -407, + -407, 246, -309, -363, 242, 26, 242, 36, 36, -369, + -369, -369, -290, 176, -369, -369, -369, -369, 283, 283, + -369, -369, -369, -369, -369, -369, -369, -369, -369, -369, + -369, -369, -369, -369, -369, -369, -369, 321, 303, 239, + -406, -155, 434, 325, 339, 337, 82, -73, 285, -56, + -209, 321, 303, -307, 240, 241, -406, 272, -209, 221, + -209, -433, -209, 96, 96, 321, 322, 303, 304, 321, + 303, 458, 411, 415, 279, 239, 280, 241, 425, -301, + 159, 16, -301, -298, 423, 421, 408, 413, -301, -301, + -301, -301, 286, 406, -364, 240, 36, 251, 423, 286, + 406, 286, 287, 286, 287, 416, 426, 286, -323, 15, + 162, 287, -323, -323, 90, -323, 90, 90, -302, 159, + 286, 423, 282, -301, -301, -301, -329, -452, -314, -312, + -310, 230, 24, 142, 26, 28, 145, 177, 130, 20, + 146, 38, 232, 374, 250, 176, 246, 488, 225, 73, + 557, 459, 461, 457, 464, 490, 491, 458, 409, 32, + 14, 559, 29, 260, 25, 39, 170, 227, 149, 560, + 263, 27, 261, 118, 121, 562, 23, 76, 255, 15, + 248, 41, 17, 563, 564, 18, 244, 243, 162, 240, + 71, 12, 220, 30, 158, 67, 565, 137, 566, 567, + 568, 569, 131, 69, 159, 21, 699, 462, 463, 34, + 658, 545, 274, 172, 74, 60, 661, 143, 460, 570, + 571, 119, 572, 122, 77, 666, 139, 19, 72, 43, + 573, 275, 574, 245, 700, 575, 446, 576, 160, 228, + 487, 70, 161, 673, 577, 674, 238, 422, 9, 492, + 33, 259, 247, 129, 68, 578, 239, 148, 493, 494, + 242, 132, 120, 8, 136, 35, 13, 75, 78, 465, + 466, 467, 58, 128, 549, 147, 16, 579, 447, 141, + 659, 453, 454, 455, 456, 235, -402, 662, -329, -329, + 33, 92, -428, -429, -430, 549, 446, 242, -312, -209, + -104, 650, 229, -105, 656, 24, 237, -153, 423, -141, + 177, 680, 663, 664, 665, 662, 420, 660, 670, 668, + 666, 286, 667, 88, 139, 141, 142, 4, -163, 158, + -219, 151, 152, 153, 154, 155, 156, 157, 162, 143, + 145, 159, -264, 140, 163, 164, 165, 166, 167, 168, + 169, 171, 170, 172, 173, 160, 161, 176, 223, 224, + -173, -173, -173, -173, -234, -240, -239, -452, -236, -402, + -311, -318, -452, -452, -173, -296, -452, -452, -169, -452, + -452, -452, -243, -163, -452, -452, -456, -452, -456, -456, + -347, -452, -347, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, + -452, -452, -452, -452, -452, -452, -452, -452, -452, 221, + -452, -452, -452, -452, -452, -347, -347, -347, -347, -347, -452, -452, -452, -452, -452, -452, -452, -452, -452, -452, - 221, -452, -452, -452, -452, -452, -347, -347, -347, -347, - -347, -452, -452, -452, -452, -452, -452, -452, -452, -452, - -452, -452, -452, -452, -452, 103, 99, 102, 94, -238, - 105, 90, 90, 90, 90, -8, -9, -228, -452, -328, - -416, -417, -212, -209, -452, 326, 338, -312, -312, 272, - -253, -12, -8, -248, -254, -250, -8, -139, -152, 64, - 65, -154, 25, 39, 68, 66, 24, -453, 89, -453, - -271, -453, -49, 550, -49, -49, -49, -49, -49, 88, - -55, -274, 87, 62, 44, 90, 90, 88, 22, -249, - -251, -163, 15, -316, 4, -315, 26, -312, 90, 221, - 15, -210, 30, -209, -297, -297, 88, 91, 345, -287, - -289, 445, 447, 151, -317, -312, 90, 32, 89, 88, - -209, -336, -339, -341, -340, -342, -337, -338, 372, 373, - 177, 376, 378, 379, 380, 381, 382, 383, 384, 385, - 386, 389, 33, 262, 368, 369, 370, 371, 390, 391, - 392, 393, 395, 396, 397, 398, 353, 374, 548, 354, - 355, 356, 357, 358, 359, 361, 362, 365, 363, 364, - 366, 367, -403, -402, 87, 64, 65, 89, 88, -343, - 87, -163, -304, 244, -304, -155, 239, -402, 240, 240, - 240, -98, 488, -369, -369, -369, 270, 20, -63, -60, - -395, 19, -59, -60, 230, 123, 124, 227, 87, -358, - 87, -367, -403, -312, -402, 87, 137, 245, 136, -366, - -363, -366, -367, -236, -402, 137, 137, -402, -402, -283, - -312, -283, -283, 24, -283, 24, -283, 24, 96, -312, - -283, 24, -283, 24, -283, 24, -283, 24, -283, 24, - 32, 79, 80, 81, 32, 83, 84, 85, -236, -402, - -402, -236, -358, -236, -209, -402, -290, 96, 96, 96, - -369, -369, 96, 90, 90, 90, -369, -369, 96, 90, - -320, -318, 90, 90, -408, 256, 300, 302, 96, 96, - 96, 96, 32, 90, -409, 32, 688, 687, 689, 690, - 691, 90, 96, 32, 96, 32, 96, -312, 87, 91, - 91, -209, -161, 290, 225, 227, 230, 77, 90, 329, - 330, 327, 336, 337, 332, 333, 90, 329, 327, 336, - 337, 332, 333, 90, 329, 330, 327, 336, 337, 332, - 333, 151, 45, 88, 242, 91, 91, 239, -402, -303, - 244, -303, -312, -319, -318, -310, -432, 88, -431, 23, - 454, 455, 457, 413, 456, 91, 91, 91, 91, -209, - -209, -209, -209, -209, -209, -209, -329, 90, -163, -365, - 15, 162, -323, -323, -301, -209, -365, -323, -301, -209, - -301, -301, -301, -301, -323, -323, -323, -301, -318, -318, - -302, -301, -301, 663, -301, 341, 663, 90, -295, 15, - 77, -329, -329, 88, 351, 448, 449, -327, 348, -100, - -312, 90, -15, -11, -23, -22, -24, -27, 225, 151, - -15, 88, 550, -202, -209, 663, 663, 663, 663, 663, - 663, -163, -163, -163, -163, 573, -226, 119, 143, 120, - 121, -181, -227, -232, -234, 106, 162, 145, 159, -264, - -169, -173, -169, -169, -169, -169, -169, -169, -169, -169, - -169, -169, -169, -169, -169, -330, -312, 90, 177, -177, - -176, 105, -425, -177, 547, 88, -239, 221, -163, -163, - -402, -163, -312, -149, -151, -149, -163, -241, -242, 147, - -236, -163, -453, -453, 96, 105, 168, -145, 25, 39, - -145, -145, -145, -145, -163, -163, -163, -163, -163, -163, - -163, -163, -163, -163, -145, -312, -312, -138, -137, 470, - 471, 472, 473, 475, 476, 477, 480, 481, 485, 486, - 469, 487, 474, 479, 482, 483, 484, 478, 371, -163, - -163, -163, -163, -163, -163, -106, -163, 130, 131, 132, - -228, -163, -169, -163, -163, -163, -453, -163, -163, -163, - -229, -228, -401, -400, -399, -163, -163, -163, -163, -163, + -452, -452, -452, -452, 103, 99, 102, 94, -238, 105, + 90, 90, 90, 90, -8, -9, -228, -452, -328, -416, + -417, -212, -209, -452, 325, 337, -312, -312, 272, -253, + -12, -8, -248, -254, -250, -8, -139, -152, 64, 65, + -154, 25, 39, 68, 66, 24, -453, 89, -453, -271, + -453, -49, 549, -49, -49, -49, -49, -49, 88, -55, + -274, 87, 62, 44, 90, 90, 88, 22, -249, -251, + -163, 15, -316, 4, -315, 26, -312, 90, 221, 15, + -210, 30, -209, -297, -297, 88, 91, 344, -287, -289, + 444, 446, 151, -317, -312, 90, 32, 89, 88, -209, + -336, -339, -341, -340, -342, -337, -338, 371, 372, 177, + 375, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 388, 33, 262, 367, 368, 369, 370, 389, 390, 391, + 392, 394, 395, 396, 397, 352, 373, 547, 353, 354, + 355, 356, 357, 358, 360, 361, 364, 362, 363, 365, + 366, -403, -402, 87, 64, 65, 89, 88, -343, 87, + -163, -304, 244, -304, -155, 239, -402, 240, 240, 240, + -98, 487, -369, -369, -369, 270, 20, -63, -60, -395, + 19, -59, -60, 230, 123, 124, 227, 87, -358, 87, + -367, -403, -312, -402, 87, 137, 245, 136, -366, -363, + -366, -367, -236, -402, 137, 137, -402, -402, -283, -312, + -283, -283, 24, -283, 24, -283, 24, 96, -312, -283, + 24, -283, 24, -283, 24, -283, 24, -283, 24, 32, + 79, 80, 81, 32, 83, 84, 85, -236, -402, -402, + -236, -358, -236, -209, -402, -290, 96, 96, 96, -369, + -369, 96, 90, 90, 90, -369, -369, 96, 90, -320, + -318, 90, 90, -408, 256, 300, 302, 96, 96, 96, + 96, 32, 90, -409, 32, 687, 686, 688, 689, 690, + 90, 96, 32, 96, 32, 96, -312, 87, 91, 91, + -209, -161, 290, 225, 227, 230, 77, 90, 328, 329, + 326, 335, 336, 331, 332, 90, 328, 326, 335, 336, + 331, 332, 90, 328, 329, 326, 335, 336, 331, 332, + 151, 45, 88, 242, 91, 91, 239, -402, -303, 244, + -303, -312, -319, -318, -310, -432, 88, -431, 23, 453, + 454, 456, 412, 455, 91, 91, 91, 91, -209, -209, + -209, -209, -209, -209, -209, -329, 90, -163, -365, 15, + 162, -323, -323, -301, -209, -365, -323, -301, -209, -301, + -301, -301, -301, -323, -323, -323, -301, -318, -318, -302, + -301, -301, 662, -301, 340, 662, 90, -295, 15, 77, + -329, -329, 88, 350, 447, 448, -327, 347, -100, -312, + 90, -15, -11, -23, -22, -24, -27, 225, 151, -15, + 88, 549, -202, -209, 662, 662, 662, 662, 662, 662, + -163, -163, -163, -163, 572, -226, 119, 143, 120, 121, + -181, -227, -232, -234, 106, 162, 145, 159, -264, -169, + -173, -169, -169, -169, -169, -169, -169, -169, -169, -169, + -169, -169, -169, -169, -330, -312, 90, 177, -177, -176, + 105, -425, -177, 546, 88, -239, 221, -163, -163, -402, + -163, -312, -149, -151, -149, -163, -241, -242, 147, -236, + -163, -453, -453, 96, 105, 168, -145, 25, 39, -145, + -145, -145, -145, -163, -163, -163, -163, -163, -163, -163, + -163, -163, -163, -145, -312, -312, -138, -137, 469, 470, + 471, 472, 474, 475, 476, 479, 480, 484, 485, 468, + 486, 473, 478, 481, 482, 483, 477, 370, -163, -163, + -163, -163, -163, -163, -106, -163, 130, 131, 132, -228, + -163, -169, -163, -163, -163, -453, -163, -163, -163, -229, + -228, -401, -400, -399, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, -163, - -163, -163, -163, -163, -163, -163, -163, -163, -453, -163, - -183, -167, 96, -279, 105, 92, -163, -163, -150, -149, - -314, -319, -310, -311, -149, -150, -150, -149, -149, -163, - -163, -163, -163, -163, -163, -163, -163, -453, -163, -163, - -163, -163, -163, -271, -453, -228, 88, -418, 447, 448, - 659, -321, 275, -320, 26, -229, 90, 90, 15, -281, - 78, -312, -253, -253, 60, -149, -154, -453, 87, -54, - 26, -273, -312, 63, 90, -348, -290, 399, 400, 177, - -163, -163, 88, -252, 28, 29, -209, -315, 168, -319, - -209, -282, 275, -209, -187, -189, -190, -191, -212, -235, - -452, -192, -8, 569, 566, 15, -202, -203, -211, -318, - -288, -331, -287, 88, 446, 448, 449, 77, 122, -163, - -349, 176, -377, -376, -375, -358, -360, -361, -362, 89, - -349, -354, 405, 404, -343, -343, -343, -343, -343, -348, - -348, -348, -348, 87, 87, -343, -343, -343, -343, -351, - 87, -351, -351, -352, -351, 87, -352, -353, 87, -353, - -388, -163, -385, -384, -382, -383, 249, 101, 641, 597, - 550, 590, 631, 78, -380, -252, 96, -453, 91, 143, - 91, -161, -304, -386, -383, -402, -402, -402, -304, 91, - 90, 91, 90, 91, 90, -130, -77, -1, 700, 701, - 702, 88, 20, -359, -358, -76, 300, -391, -392, 275, - -387, -381, -367, 137, -366, -367, -367, -402, 88, 30, - 127, 127, 127, 127, 550, 227, 33, -305, 589, 143, - 641, 597, -358, -76, 242, 242, -330, -330, -330, 90, - 90, -300, 696, -202, 550, -437, 87, -157, 292, 151, - 281, 281, 239, 239, 294, -209, 328, 331, 329, 330, - 327, 336, 337, 332, 333, 24, 24, 24, 24, 24, - 24, 24, 329, 327, 336, 337, 332, 333, 342, 24, - 24, 24, 24, 24, 24, 328, 331, 329, 330, 327, - 336, 337, 332, 333, 24, 24, 24, 24, 24, 24, - 24, 293, 295, 297, 283, -209, -209, -303, 77, -204, - -209, 27, -318, -431, -209, 285, -209, -301, -301, -209, - -301, -301, -209, -430, 352, -312, -98, 386, 652, 653, - 655, 654, -141, 447, 88, 550, 23, -142, 23, -452, - 119, 120, 121, -227, -169, -173, -169, 142, 263, -452, - -236, -453, -314, 26, 88, 78, -453, 88, 88, -453, - -453, 88, 15, -244, -242, 149, -163, -453, 88, -453, - -453, -453, -228, -163, -163, -163, -163, -453, -453, -453, - -453, -453, -453, -453, -453, -453, -453, -228, 88, 88, - 15, -334, 26, -453, -453, -453, -453, -453, -243, -453, - 15, -453, 78, 88, 162, 88, -453, -453, -453, 88, - 88, -453, -453, 88, 88, -453, 88, 88, 88, -453, - 88, 88, 88, 88, -453, -453, -453, -453, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, -453, -113, - 574, -453, -453, 88, -453, 88, -453, -452, 221, -453, - -453, -453, -453, -453, 88, 88, 88, 88, 88, 88, - -453, -453, -453, 88, 88, -453, 88, -453, 88, -453, - -417, 658, 448, -216, -215, -213, 75, 243, 76, -452, - -320, -453, -177, -279, -280, -279, -221, -312, 96, 105, - -255, -186, -188, 15, -154, -51, -50, 90, -234, 89, - 88, -348, -259, -265, -298, -312, 90, 177, -350, 177, - -350, 399, 400, -251, 221, -217, 16, -220, 33, 58, - -11, -452, -452, 33, 88, -205, -207, -206, -208, 67, - 71, 73, 68, 69, 70, 74, -325, 26, -8, -187, - -8, -452, -209, -202, -454, 15, 78, -454, 88, 221, - -289, -292, 450, 447, 453, -402, 90, -129, 88, -375, - -362, -256, -158, 41, -355, 406, -348, 557, -348, -357, - 90, -357, 96, 96, 96, 89, -66, -61, -62, 34, - 82, -382, -369, 90, 40, -369, -369, -312, 89, -252, - 550, 27, -435, 87, -157, -209, 77, -386, -386, -386, - -318, -2, 699, 705, 137, 87, 409, 19, -273, 88, - 89, -237, 301, 89, -131, -312, 89, 87, -367, -367, - -312, -452, 239, 32, 32, 641, 597, 589, -76, -237, - -236, -402, -349, 698, 697, 89, 87, -439, 305, -436, - -443, 284, 29, 306, 286, 241, 299, -162, 465, -159, - 90, 91, -209, -209, -209, -209, -209, 230, 227, 432, - -426, 334, -426, -426, 90, -426, 432, -426, -426, 284, - 242, -202, -209, 88, -103, 258, 253, -323, -323, 34, - -209, 447, 672, 670, -163, 142, 263, -181, -173, -169, - -332, 177, 372, 262, 370, 366, 386, 377, 404, 368, - 405, 363, 362, 361, -332, -330, -228, -151, -163, -163, - 150, -163, 148, -163, -453, -453, -453, -453, -453, -248, - -163, -163, -163, -453, 177, 372, 15, -163, -330, -163, - -163, -163, -163, -163, -399, -163, -228, -163, -228, -163, - -163, -163, -163, -163, -400, -400, -400, -400, -400, -228, - -228, -228, -228, -452, -312, -116, -115, -114, 624, 243, - -113, -183, -116, -183, -150, -314, -163, -163, -163, -163, - -163, -163, -163, -163, -163, -163, -213, -363, -363, -363, - -283, 88, -294, 23, 15, 58, 58, -186, -217, -187, - -154, 89, 88, 151, -312, -262, 651, -268, 47, -266, - -267, 48, -263, 49, 57, -350, -350, 168, -253, -163, - -284, 77, -285, -293, -236, -231, -233, -232, -452, -272, - -453, -312, -283, -285, -189, -190, -190, -189, -190, 67, - 67, 67, 72, 67, 72, 67, -206, -318, -453, -163, - -321, 78, -187, -187, -211, -318, 168, 447, 451, 452, - -375, -424, 119, 143, 32, 77, 402, 101, -422, 176, - 586, 636, 641, 597, 590, 631, -423, 245, 136, 137, - 257, 26, 42, 89, 88, 89, 88, 89, 89, 88, - -306, -305, -62, -61, -369, -369, 96, -402, 90, 90, - 87, -439, -434, -442, 29, 306, 286, 241, -209, 77, - 77, 77, -132, 703, 96, 87, -3, 82, -163, 87, - 20, -358, -236, -393, -344, -394, -345, -346, -5, -6, - -370, -135, 58, 101, -80, 45, 240, 683, 684, 127, - -452, 696, -385, -273, -389, -391, -209, -166, -452, -165, - -167, -174, 166, 167, 262, 368, 369, -237, -447, -449, - 284, 29, 125, 324, 325, -441, 273, 87, 89, 88, - 151, -209, -156, 290, 298, 87, -160, 92, -405, 78, - 281, 402, 281, 90, -427, 335, 90, -427, -427, 90, - -427, 90, -427, -427, -209, -103, -66, -209, -301, -301, - 34, -402, -453, -181, -173, -144, 162, 550, -335, 556, - -343, -343, -343, -353, -343, 358, -343, 358, -343, -453, - -453, -453, 88, -453, 23, -453, -163, 88, -140, 493, - 88, 88, -453, 87, 87, -163, -453, -453, -453, 88, - -453, -453, -453, -453, -453, 88, -453, -453, -453, 88, - -333, 642, -453, -453, -453, -453, -453, -453, -453, -453, - -453, -453, -112, -313, -312, -113, 606, 606, -453, -113, - -245, 88, -453, -453, 88, -453, 88, 88, -453, 88, - -453, 88, -453, -453, -453, -453, 88, -214, 23, -214, - -214, -453, -279, -209, -217, -246, 17, -50, 90, -259, - 52, 378, -270, -269, 56, 48, -267, 20, 50, 20, - 31, -284, 88, 151, 88, -453, -453, 88, 58, 221, - -453, -217, -200, -199, 77, 78, -201, 77, -199, 67, - 67, -274, 88, -282, -187, -217, -217, 221, 119, -452, - -168, -180, -166, 13, 90, 90, -402, -421, 687, 688, - 32, 96, -369, -369, 137, 137, -209, 87, -348, 90, - -348, 96, 96, 32, 83, 84, 85, 32, 79, 80, - 81, -446, -448, 29, 125, 324, 325, 273, 89, 88, - 151, -209, -209, -209, -209, -390, 87, 20, -163, 87, - 151, 89, -273, -273, 277, 162, -369, 681, 283, 283, - -369, -369, -369, -134, -133, 703, 89, -453, 88, -356, - 550, 553, -163, -175, -175, 89, 88, 151, 87, -438, - -444, 307, 308, 309, 310, 311, 312, 313, 314, 315, - -443, 90, -274, 89, -398, 550, -404, -312, -312, -312, - -312, 96, 98, 90, -453, 548, 74, 551, -453, -348, - -163, -163, -163, -253, 90, -163, -163, 96, 96, -453, - -163, -228, -163, -453, -197, -196, -198, 664, 119, 32, - -332, -453, -230, 275, -119, -118, -117, 15, -453, -163, - -163, -163, -163, -163, -163, -163, -452, 67, 19, 17, - -452, -452, -321, -246, -247, 18, 20, -260, 54, -258, - 53, -258, -269, 20, 20, 90, 20, 90, 137, -293, - -163, -233, 58, -11, -312, -231, -312, -248, -163, 87, - -163, -177, -217, -217, -163, -223, 517, 519, 520, 521, - 518, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 522, 496, 108, 110, 109, 497, 498, 499, 372, - 544, 545, 539, 542, 543, 541, 540, 387, 388, 500, - 501, 502, 111, 112, 113, 114, 115, 116, 117, 503, - 506, 504, 507, 508, 509, 514, 515, 510, 511, 512, - 513, 516, 533, 534, 535, 536, 537, 538, 643, 644, - 645, 646, 647, 648, 649, 650, 90, 90, 87, -163, - 89, 89, 89, 88, 151, 87, -442, 90, -274, -389, - -77, 89, -275, -273, 96, 89, 278, -232, -452, 90, - -369, -369, -369, 96, 96, -320, -453, 88, -312, -423, - -391, 554, 554, -453, -449, 90, -440, -445, 252, 316, - 89, 88, 151, 151, 26, -397, -396, -314, 87, 78, - 63, 549, 552, -453, -453, 88, -453, -453, -453, 89, - 89, -453, -453, -453, 88, -453, -196, -198, -453, 77, - -177, -248, 20, -116, 300, 302, -116, -453, 88, -453, - -453, 88, -453, 88, -453, -453, -276, -453, -312, 245, - 20, 20, -276, -276, -216, -247, -126, -125, -124, 580, - -163, -228, -261, 55, 77, 122, 90, 90, 90, 13, - -231, 221, -253, -273, -194, 409, -248, -453, -273, 89, - -448, 90, -440, 151, 26, 89, 705, 137, 89, -232, - -143, -452, 274, -320, 90, 90, -133, -136, 151, 89, - 88, 151, -444, 90, 90, -11, 88, 151, -273, -209, - 63, -163, -228, -453, 77, 561, 664, -111, -110, -107, - 675, 701, -228, -113, -113, -163, -163, -163, 88, -453, - -453, -453, -126, 88, -123, -122, -312, 77, 122, -285, - -312, 89, -453, -452, -253, 89, -257, 151, 89, 90, - -11, 87, -3, 274, -344, -394, -345, -346, -5, -6, - -370, 90, -445, 90, 151, -101, 550, -396, -374, -314, - 90, 96, 89, 550, -453, -453, -109, 145, 673, 639, - -164, -175, -172, 220, -453, 88, -453, 88, -453, 88, - -312, 245, -124, 88, 26, -321, -195, -193, -312, 603, - -414, -413, 546, -424, -420, 119, 143, 101, -422, 641, - 597, 128, 129, 90, -101, -163, 87, -453, 151, 90, - -102, 289, 658, -405, 551, -109, 674, 617, 592, 617, - 592, -163, -163, -163, -122, -452, -453, 88, 23, -336, - -79, 614, -411, -412, 77, -415, 415, 613, 634, 119, - 90, 89, -273, 90, 250, -398, 552, 142, -453, 88, - -453, 88, -453, -112, -193, 610, -349, -177, -412, 77, - -411, 77, 14, 13, -4, 704, 89, 291, -109, -163, - -163, -453, -78, 27, -194, -410, 258, 253, 256, 33, - -410, 96, -4, -453, -453, 614, 252, 32, 119, -177, - -197, -196, -196, + -163, -163, -163, -163, -163, -163, -163, -453, -163, -183, + -167, 96, -279, 105, 92, -163, -163, -150, -149, -314, + -319, -310, -311, -149, -150, -150, -149, -149, -163, -163, + -163, -163, -163, -163, -163, -163, -453, -163, -163, -163, + -163, -163, -271, -453, -228, 88, -418, 446, 447, 658, + -321, 275, -320, 26, -229, 90, 90, 15, -281, 78, + -312, -253, -253, 60, -149, -154, -453, 87, -54, 26, + -273, -312, 63, 90, -348, -290, 398, 399, 177, -163, + -163, 88, -252, 28, 29, -209, -315, 168, -319, -209, + -282, 275, -209, -187, -189, -190, -191, -212, -235, -452, + -192, -8, 568, 565, 15, -202, -203, -211, -318, -288, + -331, -287, 88, 445, 447, 448, 77, 122, -163, -349, + 176, -377, -376, -375, -358, -360, -361, -362, 89, -349, + -354, 404, 403, -343, -343, -343, -343, -343, -348, -348, + -348, -348, 87, 87, -343, -343, -343, -343, -351, 87, + -351, -351, -352, -351, 87, -352, -353, 87, -353, -388, + -163, -385, -384, -382, -383, 249, 101, 640, 596, 549, + 589, 630, 78, -380, -252, 96, -453, 91, 143, 91, + -161, -304, -386, -383, -402, -402, -402, -304, 91, 90, + 91, 90, 91, 90, -130, -77, -1, 699, 700, 701, + 88, 20, -359, -358, -76, 300, -391, -392, 275, -387, + -381, -367, 137, -366, -367, -367, -402, 88, 30, 127, + 127, 127, 127, 549, 227, 33, -305, 588, 143, 640, + 596, -358, -76, 242, 242, -330, -330, -330, 90, 90, + -300, 695, -202, 549, -437, 87, -157, 292, 151, 281, + 281, 239, 239, 294, -209, 327, 330, 328, 329, 326, + 335, 336, 331, 332, 24, 24, 24, 24, 24, 24, + 24, 328, 326, 335, 336, 331, 332, 341, 24, 24, + 24, 24, 24, 24, 327, 330, 328, 329, 326, 335, + 336, 331, 332, 24, 24, 24, 24, 24, 24, 24, + 293, 295, 297, 283, -209, -209, -303, 77, -204, -209, + 27, -318, -431, -209, 285, -209, -301, -301, -209, -301, + -301, -209, -430, 351, -312, -98, 385, 651, 652, 654, + 653, -141, 446, 88, 549, 23, -142, 23, -452, 119, + 120, 121, -227, -169, -173, -169, 142, 263, -452, -236, + -453, -314, 26, 88, 78, -453, 88, 88, -453, -453, + 88, 15, -244, -242, 149, -163, -453, 88, -453, -453, + -453, -228, -163, -163, -163, -163, -453, -453, -453, -453, + -453, -453, -453, -453, -453, -453, -228, 88, 88, 15, + -334, 26, -453, -453, -453, -453, -453, -243, -453, 15, + -453, 78, 88, 162, 88, -453, -453, -453, 88, 88, + -453, -453, 88, 88, -453, 88, 88, 88, -453, 88, + 88, 88, 88, -453, -453, -453, -453, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, -453, -113, 573, + -453, -453, 88, -453, 88, -453, -452, 221, -453, -453, + -453, -453, -453, 88, 88, 88, 88, 88, 88, -453, + -453, -453, 88, 88, -453, 88, -453, 88, -453, -417, + 657, 447, -216, -215, -213, 75, 243, 76, -452, -320, + -453, -177, -279, -280, -279, -221, -312, 96, 105, -255, + -186, -188, 15, -154, -51, -50, 90, -234, 89, 88, + -348, -259, -265, -298, -312, 90, 177, -350, 177, -350, + 398, 399, -251, 221, -217, 16, -220, 33, 58, -11, + -452, -452, 33, 88, -205, -207, -206, -208, 67, 71, + 73, 68, 69, 70, 74, -325, 26, -8, -187, -8, + -452, -209, -202, -454, 15, 78, -454, 88, 221, -289, + -292, 449, 446, 452, -402, 90, -129, 88, -375, -362, + -256, -158, 41, -355, 405, -348, 556, -348, -357, 90, + -357, 96, 96, 96, 89, -66, -61, -62, 34, 82, + -382, -369, 90, 40, -369, -369, -312, 89, -252, 549, + 27, -435, 87, -157, -209, 77, -386, -386, -386, -318, + -2, 698, 704, 137, 87, 408, 19, -273, 88, 89, + -237, 301, 89, -131, -312, 89, 87, -367, -367, -312, + -452, 239, 32, 32, 640, 596, 588, -76, -237, -236, + -402, -349, 697, 696, 89, 87, -439, 305, -436, -443, + 284, 29, 306, 286, 241, 299, -162, 464, -159, 90, + 91, -209, -209, -209, -209, -209, 230, 227, 431, -426, + 333, -426, -426, 90, -426, 431, -426, -426, 284, 242, + -202, -209, 88, -103, 258, 253, -323, -323, 34, -209, + 446, 671, 669, -163, 142, 263, -181, -173, -169, -332, + 177, 371, 262, 369, 365, 385, 376, 403, 367, 404, + 362, 361, 360, -332, -330, -228, -151, -163, -163, 150, + -163, 148, -163, -453, -453, -453, -453, -453, -248, -163, + -163, -163, -453, 177, 371, 15, -163, -330, -163, -163, + -163, -163, -163, -399, -163, -228, -163, -228, -163, -163, + -163, -163, -163, -400, -400, -400, -400, -400, -228, -228, + -228, -228, -452, -312, -116, -115, -114, 623, 243, -113, + -183, -116, -183, -150, -314, -163, -163, -163, -163, -163, + -163, -163, -163, -163, -163, -213, -363, -363, -363, -283, + 88, -294, 23, 15, 58, 58, -186, -217, -187, -154, + 89, 88, 151, -312, -262, 650, -268, 47, -266, -267, + 48, -263, 49, 57, -350, -350, 168, -253, -163, -284, + 77, -285, -293, -236, -231, -233, -232, -452, -272, -453, + -312, -283, -285, -189, -190, -190, -189, -190, 67, 67, + 67, 72, 67, 72, 67, -206, -318, -453, -163, -321, + 78, -187, -187, -211, -318, 168, 446, 450, 451, -375, + -424, 119, 143, 32, 77, 401, 101, -422, 176, 585, + 635, 640, 596, 589, 630, -423, 245, 136, 137, 257, + 26, 42, 89, 88, 89, 88, 89, 89, 88, -306, + -305, -62, -61, -369, -369, 96, -402, 90, 90, 87, + -439, -434, -442, 29, 306, 286, 241, -209, 77, 77, + 77, -132, 702, 96, 87, -3, 82, -163, 87, 20, + -358, -236, -393, -344, -394, -345, -346, -5, -6, -370, + -135, 58, 101, -80, 45, 240, 682, 683, 127, -452, + 695, -385, -273, -389, -391, -209, -166, -452, -165, -167, + -174, 166, 167, 262, 367, 368, -237, -447, -449, 284, + 29, 125, 323, 324, -441, 273, 87, 89, 88, 151, + -209, -156, 290, 298, 87, -160, 92, -405, 78, 281, + 401, 281, 90, -427, 334, 90, -427, -427, 90, -427, + 90, -427, -427, -209, -103, -66, -209, -301, -301, 34, + -402, -453, -181, -173, -144, 162, 549, -335, 555, -343, + -343, -343, -353, -343, 357, -343, 357, -343, -453, -453, + -453, 88, -453, 23, -453, -163, 88, -140, 492, 88, + 88, -453, 87, 87, -163, -453, -453, -453, 88, -453, + -453, -453, -453, -453, 88, -453, -453, -453, 88, -333, + 641, -453, -453, -453, -453, -453, -453, -453, -453, -453, + -453, -112, -313, -312, -113, 605, 605, -453, -113, -245, + 88, -453, -453, 88, -453, 88, 88, -453, 88, -453, + 88, -453, -453, -453, -453, 88, -214, 23, -214, -214, + -453, -279, -209, -217, -246, 17, -50, 90, -259, 52, + 377, -270, -269, 56, 48, -267, 20, 50, 20, 31, + -284, 88, 151, 88, -453, -453, 88, 58, 221, -453, + -217, -200, -199, 77, 78, -201, 77, -199, 67, 67, + -274, 88, -282, -187, -217, -217, 221, 119, -452, -168, + -180, -166, 13, 90, 90, -402, -421, 686, 687, 32, + 96, -369, -369, 137, 137, -209, 87, -348, 90, -348, + 96, 96, 32, 83, 84, 85, 32, 79, 80, 81, + -446, -448, 29, 125, 323, 324, 273, 89, 88, 151, + -209, -209, -209, -209, -390, 87, 20, -163, 87, 151, + 89, -273, -273, 277, 162, -369, 680, 283, 283, -369, + -369, -369, -134, -133, 702, 89, -453, 88, -356, 549, + 552, -163, -175, -175, 89, 88, 151, 87, -438, -444, + 307, 308, 309, 310, 311, 312, 313, 314, 315, -443, + 90, -274, 89, -398, 549, -404, -312, -312, -312, -312, + 96, 98, 90, -453, 547, 74, 550, -453, -348, -163, + -163, -163, -253, 90, -163, -163, 96, 96, -453, -163, + -228, -163, -453, -197, -196, -198, 663, 119, 32, -332, + -453, -230, 275, -119, -118, -117, 15, -453, -163, -163, + -163, -163, -163, -163, -163, -452, 67, 19, 17, -452, + -452, -321, -246, -247, 18, 20, -260, 54, -258, 53, + -258, -269, 20, 20, 90, 20, 90, 137, -293, -163, + -233, 58, -11, -312, -231, -312, -248, -163, 87, -163, + -177, -217, -217, -163, -223, 516, 518, 519, 520, 517, + 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 521, 495, 108, 110, 109, 496, 497, 498, 371, 543, + 544, 538, 541, 542, 540, 539, 386, 387, 499, 500, + 501, 111, 112, 113, 114, 115, 116, 117, 502, 505, + 503, 506, 507, 508, 513, 514, 509, 510, 511, 512, + 515, 532, 533, 534, 535, 536, 537, 642, 643, 644, + 645, 646, 647, 648, 649, 90, 90, 87, -163, 89, + 89, 89, 88, 151, 87, -442, 90, -274, -389, -77, + 89, -275, -273, 96, 89, 278, -232, -452, 90, -369, + -369, -369, 96, 96, -320, -453, 88, -312, -423, -391, + 553, 553, -453, -449, 90, -440, -445, 252, 316, 89, + 88, 151, 151, 26, -397, -396, -314, 87, 78, 63, + 548, 551, -453, -453, 88, -453, -453, -453, 89, 89, + -453, -453, -453, 88, -453, -196, -198, -453, 77, -177, + -248, 20, -116, 300, 302, -116, -453, 88, -453, -453, + 88, -453, 88, -453, -453, -276, -453, -312, 245, 20, + 20, -276, -276, -216, -247, -126, -125, -124, 579, -163, + -228, -261, 55, 77, 122, 90, 90, 90, 13, -231, + 221, -253, -273, -194, 408, -248, -453, -273, 89, -448, + 90, -440, 151, 26, 89, 704, 137, 89, -232, -143, + -452, 274, -320, 90, 90, -133, -136, 151, 89, 88, + 151, -444, 90, 90, -11, 88, 151, -273, -209, 63, + -163, -228, -453, 77, 560, 663, -111, -110, -107, 674, + 700, -228, -113, -113, -163, -163, -163, 88, -453, -453, + -453, -126, 88, -123, -122, -312, 77, 122, -285, -312, + 89, -453, -452, -253, 89, -257, 151, 89, 90, -11, + 87, -3, 274, -344, -394, -345, -346, -5, -6, -370, + 90, -445, 90, 151, -101, 549, -396, -374, -314, 90, + 96, 89, 549, -453, -453, -109, 145, 672, 638, -164, + -175, -172, 220, -453, 88, -453, 88, -453, 88, -312, + 245, -124, 88, 26, -321, -195, -193, -312, 602, -414, + -413, 545, -424, -420, 119, 143, 101, -422, 640, 596, + 128, 129, 90, -101, -163, 87, -453, 151, 90, -102, + 289, 657, -405, 550, -109, 673, 616, 591, 616, 591, + -163, -163, -163, -122, -452, -453, 88, 23, -336, -79, + 613, -411, -412, 77, -415, 414, 612, 633, 119, 90, + 89, -273, 90, 250, -398, 551, 142, -453, 88, -453, + 88, -453, -112, -193, 609, -349, -177, -412, 77, -411, + 77, 14, 13, -4, 703, 89, 291, -109, -163, -163, + -453, -78, 27, -194, -410, 258, 253, 256, 33, -410, + 96, -4, -453, -453, 613, 252, 32, 119, -177, -197, + -196, -196, } var yyDef = [...]int{ @@ -8665,10 +8655,10 @@ var yyDef = [...]int{ 49, 82, 84, 85, 1016, 1016, 1016, 0, 1016, 0, 0, 1016, -2, -2, 1016, 1633, 0, 1016, 0, 0, 0, 0, 0, -2, 928, 934, 0, 943, -2, 0, - 0, 1016, 1016, 2227, 2227, 1011, 0, 0, 0, 0, + 0, 1016, 1016, 2226, 2226, 1011, 0, 0, 0, 0, 0, 1016, 1016, 1016, 1016, 157, 158, 159, 160, 161, 162, 1490, 62, 1016, 0, 97, 98, 963, 964, 965, - 0, 77, 0, 2225, 1017, 1, 3, 83, 87, 0, + 0, 77, 0, 2224, 1017, 1, 3, 83, 87, 0, 0, 0, 70, 1499, 0, 90, 0, 0, 1020, 0, 0, 1616, 1016, 1016, 0, 214, 215, 216, 0, 0, 0, 1016, 0, -2, 220, -2, 249, 250, 251, 0, @@ -8721,331 +8711,331 @@ var yyDef = [...]int{ 2185, 2186, 2187, 2188, 2189, 2190, 2191, 2192, 2193, 2194, 2195, 2196, 2197, 2198, 2199, 2200, 2201, 2202, 2203, 2204, 2205, 2206, 2207, 2208, 2209, 2210, 2211, 2212, 2213, 2214, - 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 2224, - 0, 1610, 0, 837, 1119, 0, 0, 842, 0, 0, - 845, 846, 0, 0, 917, 848, 849, 917, 0, 917, - 917, 917, 917, 0, 0, 0, 859, 0, 0, 0, - 0, 914, 875, 876, 0, 914, 914, 914, 0, 0, - 887, 920, 0, 0, 893, 917, 917, 917, 897, 898, - 2228, 0, 2228, 2228, 1601, 0, 911, 909, 923, 924, - 52, 927, 930, 931, 932, 933, 936, 0, 947, 950, - 1627, 1628, 0, 952, 959, 977, 978, 0, 1012, 1013, - 57, 1267, 0, 1141, 1146, 1157, 1172, 1173, 1174, 1175, - 1176, 1178, 1179, 1180, 0, 0, 0, 0, 1185, 1186, - 0, 0, 0, 0, 0, 1248, 1194, 0, 0, 0, - 0, 1463, 0, 0, 1424, 1424, 1282, 1424, 1426, 1426, - 1841, 1977, 1985, 2107, 1803, 1808, 1809, 1810, 2100, 2101, - 2102, 2103, 2143, 2144, 2148, 1901, 0, 0, 0, 2217, - 1938, 1946, 1947, 1971, 2072, 2128, 1820, 1966, 2037, 1898, - 1920, 1921, 2054, 2055, 1942, 1943, 1924, 1936, 1939, 1927, - 1928, 1930, 1932, 1937, 1944, 1950, 1929, 1949, 1948, 0, - 1925, 1926, 1931, 1941, 1945, 1933, 1934, 1935, 1940, 1951, - 0, 0, 0, 0, 0, 1363, 1364, 1365, 1366, 0, - 0, 0, 0, 0, 0, 0, 380, 381, 1476, 1477, - 55, 56, 1266, 1597, 1426, 1426, 1426, 1426, 1426, 1208, - 1209, 1210, 1211, 1212, 1236, 1237, 1243, 1244, 2049, 2050, - 2051, 2052, 1882, 2137, 1890, 1891, 2032, 2033, 1903, 1904, - 2178, 2179, -2, -2, -2, 321, 322, 323, 324, 325, - 326, 327, 328, 0, 1845, 2118, 2119, 317, 0, 0, - 385, 386, 382, 383, 384, 1250, 1251, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 2227, - 0, 987, 0, 0, 0, 0, 0, 1499, 0, 1491, - 1490, 75, 0, -2, 0, 0, 0, 0, 169, 169, - 169, 169, 169, 169, 59, 0, 64, 1076, 1019, 89, - 88, 1548, 0, 0, 0, 71, 1500, 79, 81, 1501, - 0, 1021, 1022, 0, 1052, 1056, 0, 0, 0, 1617, - 1616, 1616, 114, 0, 0, 115, 135, 136, 137, 0, - 0, 121, 122, 1603, 1604, 217, 0, 0, 267, 268, - 0, 53, 515, 0, 263, 1038, 0, 508, 447, 0, - 1614, 1614, 1517, 0, 0, 0, 0, 0, 1016, 0, - 1611, 244, 245, 252, 253, 254, 488, 488, 488, 661, - 0, 0, 255, 255, 619, 620, 621, 0, 0, -2, - 513, 0, 599, 0, 0, 502, 502, 506, 504, 505, - 0, 0, 0, 0, 0, 0, 0, 0, 638, 0, - 639, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 785, 0, 489, 0, 659, 660, 551, 0, 0, 0, - 0, 0, 0, 0, 0, 1619, 1620, 0, 636, 637, - 0, 0, 0, 488, 488, 0, 0, 0, 0, 488, - 488, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 243, 1539, 0, 0, 0, 0, 0, -2, 0, - 829, 0, 0, 0, 0, 0, 1612, 1612, 0, 836, - 0, 838, 1530, 840, 843, 844, 0, 140, 0, 179, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2228, - 847, 0, 0, 850, 0, 914, 914, 912, 913, 852, - 853, 854, 855, 917, 0, 0, 497, 498, 499, 914, - 917, 0, 917, 917, 917, 917, 914, 914, 914, 917, - 0, 0, 920, 917, 917, 0, 917, 883, 0, 888, - 0, 889, 890, 891, 894, 895, 896, 899, 2229, 2230, - 1629, 1630, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, - 1645, 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, - 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, - 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, - 1675, 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, - 1685, 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, - 1695, 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, - 1705, 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, - 1715, 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, - 1725, 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, - 1735, 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, - 1745, 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, - 1755, 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, - 1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, - 1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, - 1785, 1786, 1787, 1788, 1789, 1790, 1791, 2228, 2228, 903, - 907, 1602, 929, 935, 937, 938, 0, 0, 948, 951, - 971, 61, 1889, 958, 61, 960, 961, 962, 990, 991, - 996, 0, 0, 0, 0, 1002, 1003, 1004, 1005, 0, - 0, 1008, 1009, 1010, 0, 0, 0, 0, 0, 1139, - 0, 0, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1158, 1159, 0, 0, - 0, 1181, 1182, 1183, 1184, 1187, 0, 1199, 0, 1201, - 1472, -2, 0, 0, 0, 1192, 1193, 0, 0, 0, - 0, 0, 0, 0, 1464, 0, 0, 1280, 0, 1281, - 1283, 1284, 0, 1285, 1026, 1026, 1026, 1026, 1026, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1026, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1622, 231, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1036, - 0, 0, 1036, 1036, 0, 0, 310, 311, 312, 313, - 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 329, 330, 331, 332, 333, - 334, 387, 335, 336, 337, 1266, 0, 0, 0, 58, - 979, 980, 0, 1102, 1622, 0, 0, 0, 1032, 0, - 69, 78, 80, 1499, 73, 1499, 0, 0, 0, -2, - -2, 1039, 1045, 1046, 1047, 1048, 1049, 66, 2226, 67, - 0, 86, 163, 0, 164, 165, 166, 167, 168, 0, - 60, 0, 0, 0, 0, 461, 1551, 0, 0, 1492, - 1493, 1496, 0, 1053, 1983, 1057, 0, 1059, 1060, 0, - 0, 112, 0, 1118, 0, 0, 0, 123, 0, 125, - 126, 0, 0, 0, 472, 1605, 1606, 1607, -2, 495, - 0, 472, 456, 395, 396, 397, 447, 399, 447, 447, - 447, 447, 461, 461, 461, 461, 430, 431, 432, 433, - 434, 0, 0, 416, 447, 447, 447, 447, 437, 438, - 439, 440, 441, 442, 443, 444, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 449, 449, 449, 449, 449, - 453, 453, 0, 54, 0, 1043, 1044, 476, 0, 1496, - 0, 0, 0, 0, 0, 1539, 1614, 1624, 0, 0, - 0, 1614, 222, 0, 0, 0, 662, 735, 613, 650, - 663, 0, 616, 617, -2, 0, 0, 598, 0, 600, - 0, 496, 0, 507, -2, 0, 506, 0, 502, 506, - 503, 506, 494, 640, 641, 642, 0, 644, 645, 765, - 1088, 0, 0, 0, 0, 0, 771, 772, 773, 0, - 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, - 651, 652, 653, 654, 655, 656, 657, 658, 0, 0, - 0, 0, 600, 0, 647, 0, 0, 552, 553, 554, - 0, 0, 557, 558, 559, 560, 0, 0, 563, 564, - 565, 1105, 1106, 566, 567, 592, 593, 594, 568, 569, - 570, 571, 572, 573, 574, 586, 587, 588, 589, 590, - 591, 575, 576, 577, 578, 579, 580, 583, 0, 0, - 180, 237, 1521, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 141, 176, 1612, 0, 0, - 0, 0, 1035, 1120, 1635, 1636, 839, 0, 1531, 0, - 1534, 1535, 1536, 1537, 1538, 138, 177, 139, 178, 868, - 869, 870, 871, 872, 873, 874, 900, 918, 919, 0, - 500, 501, 917, 917, 856, 904, 0, 917, 860, 905, - 861, 863, 862, 864, 877, 878, 917, 867, 915, 916, - 879, 880, 881, 886, 882, 884, 885, 921, 0, 925, - 926, 901, 902, 0, 0, 941, 942, 0, 949, 974, - 972, 973, 975, 966, 967, 968, 969, 970, 1016, 0, - 976, 0, 0, 993, 108, 998, 999, 1000, 1001, 1014, - 1007, 1268, 1136, 1137, 1138, 0, 1140, 1143, 0, 1252, - 1254, 1145, 1147, 1263, 1264, 1265, 0, 0, 0, 0, - 0, 1151, 1155, 1160, 1161, 1162, 1163, 1164, 1165, 1166, - 1167, 1168, 1169, 1170, 1171, 1177, 1440, 1441, 1442, 1196, - 388, 389, 0, 1197, 0, 0, 0, 0, 0, 0, - 0, 1267, 1198, 0, 1050, 0, 0, 1470, 1467, 0, - 0, 0, 1425, 1427, 0, 0, 0, 0, 1027, 1028, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1403, 1404, - 1405, 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, - 1415, 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1443, - 0, 0, 0, 0, 0, 1463, 0, 1203, 1204, 1205, - 0, 0, 0, 0, 0, 0, 1323, 0, 0, 0, - 0, 1623, 0, 232, 233, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1367, 1368, 1369, 1370, 51, 0, 0, 0, 1037, - 1474, 0, -2, -2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1392, 0, 0, - 0, 0, 0, 0, 1595, 0, 0, 982, 983, 985, - 0, 1122, 0, 1103, 0, 0, 988, 989, 0, 1031, - 0, 1034, 72, 74, 0, 1061, 1040, 68, 0, 63, - 0, 0, 1080, 1549, 461, 1571, 0, 470, 470, 467, - 1502, 1503, 0, 1495, 1497, 1498, 91, 1058, 1054, 0, - 1134, 0, 0, 1117, 0, 1064, 1066, 1067, 1068, 1100, - 0, 1071, 1072, 0, 0, 0, 0, 0, 110, 1119, - 116, 0, 124, 0, 0, 129, 130, 117, 118, 119, - 120, 0, 724, -2, 547, 269, 271, 272, 273, 264, - -2, 459, 457, 458, 398, 461, 461, 424, 425, 426, - 427, 428, 429, 0, 0, 417, 418, 419, 420, 409, - 0, 410, 411, 412, 451, 0, 413, 414, 0, 415, - 514, 0, 1504, 477, 478, 480, 488, 0, 483, 484, - 0, 488, 488, 0, 509, 510, 0, 1496, 0, 0, - 182, 1521, 0, 0, 1625, 1624, 1624, 1624, 0, 257, - 258, 259, 260, 261, 262, 760, 0, 0, 736, 758, - 759, 255, 0, 0, 265, 602, 601, 0, 792, 0, - 512, 0, 0, 506, 506, 491, 492, 643, 0, 0, - 767, 768, 769, 770, 0, 0, 0, 629, 541, 0, - 630, 631, 600, 602, 0, 0, 472, 555, 556, 561, - 562, 581, 0, 0, 0, 184, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 676, 677, 678, 681, - 683, 684, 685, 604, 691, 680, 682, 686, 687, 688, - 604, 692, 693, 695, 696, 697, 604, 703, 0, 694, - 698, 699, 700, 604, 704, 707, 708, 709, 712, 714, - 715, 716, 604, 722, 711, 713, 717, 718, 719, 604, - 723, 1518, 1519, 1520, 0, 0, 830, 0, 0, 538, - 106, 1613, 835, 1532, 841, 1533, 914, 866, 906, 914, - 858, 865, 892, 939, 940, 945, -2, 953, 954, 955, - 956, 957, 997, 0, 0, 0, 0, 1006, 0, 0, - 1144, 1253, 1255, 1148, 0, 1152, 1156, 0, 0, 0, - 1202, 1200, 1474, 0, 0, 0, 1249, 0, 0, 1271, - 1272, 0, 0, 0, 1468, 0, 0, 1278, 0, 1428, - 1429, 1286, 0, 0, 0, 0, 0, 1292, 1293, 1294, - 1295, 1296, 1297, 1298, 1299, 1300, 1301, 1490, 0, 0, - 0, 0, 0, 1307, 1308, 1309, 1310, 1311, 0, 1313, - 0, 1314, 0, 0, 0, 0, 1321, 1322, 1324, 0, - 0, 1327, 1328, 0, 0, 1329, 0, 0, 0, 1333, - 0, 0, 0, 0, 1342, 1343, 1344, 1345, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 1356, 1357, - 0, 1231, 0, 0, 1231, 0, 1269, 1036, 0, 1430, - 1431, 1432, 1433, 1434, 0, 0, 0, 0, 0, 0, - 1390, 1391, 1393, 0, 0, 1396, 0, 1398, 0, 1596, - 981, 984, 986, 1074, 1123, 1124, 0, 0, 0, 0, - 1104, 1621, 1029, 1030, 1033, 1082, 0, 1478, 0, 0, - 1061, 1134, 1062, 0, 1041, 0, 171, 0, 65, 1077, - 0, 1553, 1552, 1565, 1578, 470, 470, 464, 465, 471, - 466, 468, 469, 1494, 0, 1499, 0, 1589, 0, 0, - 1581, 0, 0, 0, 0, 0, 0, 0, 0, 1107, - 0, 0, 1110, 0, 0, 0, 0, 1101, 1072, 0, - 1073, 0, -2, 0, 0, 104, 105, 0, 0, 0, - 127, 128, 0, 0, 134, 473, 474, 246, 255, 549, - 270, 522, 0, 0, 394, 460, 421, 422, 423, 0, - 445, 0, 0, 0, 0, 543, 218, 1508, 1507, 488, - 488, 479, 0, 482, 0, 0, 0, 1626, 448, 511, - 0, 1615, 184, 0, 0, 236, 0, 0, 0, 0, - 242, 730, 0, 0, 737, 0, 0, 0, 611, 0, - 622, 623, 0, 764, -2, 826, 476, 0, 490, 493, - 1089, 0, 0, 624, 0, 627, 628, 542, 602, 633, - 634, 648, 635, 584, 585, 582, 0, 186, 0, 0, - 0, 195, 196, 197, 198, 0, 0, 1540, 1541, 1546, - 1544, 1545, 223, 669, 671, 670, 674, 0, 0, 0, - 606, 0, 606, 606, 0, 606, 0, 606, 606, 667, - 0, 538, 1504, 0, 834, 539, 540, 917, 917, 992, - 109, 0, 995, 0, 0, 0, 0, 1149, 1153, 1435, - 1461, 447, 447, 1448, 447, 453, 1451, 447, 1453, 447, - 1456, 447, 1459, 1460, 0, 0, 0, 1051, 0, 0, - 1277, 1471, 0, 0, 1287, 1288, 1289, 1290, 1291, 1465, - 0, 0, 0, 1306, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 234, 235, 0, 0, 0, 0, - 0, 0, 1401, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1226, 1230, 0, 1232, 1233, 0, 0, - 1359, 0, 0, 1371, 0, 1475, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 1125, 1130, 1130, 1130, - 0, 0, 0, 1608, 1609, 1479, 1480, 1134, 1481, 1063, - 1042, 170, 0, 0, 1081, 1571, 0, 1564, 0, -2, - 1573, 0, 0, 0, 1579, 462, 463, 1055, 92, 1135, - 95, 0, 1589, 1598, 0, 1580, 1591, 1593, 0, 0, - 0, 1585, 0, 1134, 1065, 1096, 1098, 0, 1093, 1108, - 1109, 1111, 0, 1113, 0, 1115, 1116, 1076, 1070, 0, - 112, 0, 1134, 1134, 111, 0, 1121, 131, 132, 133, - 548, 274, 279, 0, 0, 0, 284, 0, 286, 0, - 0, 0, 291, 292, 488, 488, 523, 0, 391, 393, - 0, 0, 277, 461, 0, 461, 0, 452, 454, 0, - 524, 544, 1505, 1506, 0, 0, 481, 485, 486, 487, - 0, 0, 0, 0, 192, 193, 194, 0, 238, 0, - 0, 0, 733, 0, 761, 0, 0, 0, 0, 0, - 0, 266, 603, 793, 794, 795, 796, 797, 798, 799, - 800, 801, 0, 488, 0, 0, 0, 488, 488, 488, - 0, 818, 475, 0, 0, 789, 786, 625, 0, 315, - 316, 318, 0, 0, 0, 0, 0, 632, 0, 0, - 152, 153, 154, 155, 156, 175, 0, 0, 181, 0, - 0, 1076, 1522, 1523, 1524, 0, 1543, 1547, 226, 0, - 0, 0, 0, 679, 689, 0, 605, 690, 701, 705, - 702, 710, 720, 721, 831, 832, 833, 107, 851, 857, - 994, 1015, 1142, 1150, 1154, 0, 0, 0, 0, 1462, - 1446, 461, 1449, 1450, 1452, 1454, 1455, 1457, 1458, 1190, - 1191, 1195, 0, 1274, 0, 1276, 1469, 0, 1499, 0, - 0, 0, 1305, 0, 0, 0, 1316, 1315, 1317, 0, - 1319, 1320, 1325, 1326, 1330, 0, 1332, 1334, 1335, 0, - 0, 0, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, - 1354, 1355, 0, 1224, 1227, 1358, 1234, 1235, 1240, 1361, - 0, 0, 1270, 1373, 0, 1378, 0, 0, 1384, 0, - 1388, 0, 1394, 1395, 1397, 1399, 0, 0, 0, 0, - 0, 1102, 1083, 76, 1481, 1483, 0, 172, 173, 1558, - 1556, 1556, 1566, 1567, 0, 0, 1574, 0, 0, 0, - 0, 96, 0, 0, 0, 1594, 0, 0, 0, 0, - 113, 1490, 1090, 1097, 0, 0, 1091, 0, 1092, 1112, - 1114, 1069, 0, 1134, 1134, 102, 103, 0, 280, 0, - 282, 308, 309, 0, 285, 287, 288, 289, 295, 296, - 297, 290, 0, 0, 390, 392, 0, 0, 435, 446, - 436, 0, 0, 1509, 1510, 1511, 1512, 1513, 1514, 1515, - 1516, 0, 0, 148, 149, 150, 151, 0, 183, 0, - 0, 1076, 239, 240, 241, 725, 0, 735, 0, 1078, - 0, 728, 0, 614, 0, 0, 0, 488, 488, 488, - 0, 0, 0, 0, 803, 0, 0, 766, 0, 774, - 0, 0, 0, 319, 320, 143, 0, 0, 0, 0, - 0, 201, 202, 203, 204, 205, 206, 207, 208, 209, - 0, 190, 0, 1542, 668, 0, 224, 225, 0, 0, - 673, 607, 608, 706, 1188, 0, 0, 0, 1189, 1447, - 0, 0, 0, 0, 1466, 0, 0, 0, 0, 1312, - 0, 0, 0, 1338, 0, 0, 0, 755, 756, 0, - 1402, 1229, 1490, 0, 1231, 1241, 1242, 0, 1231, 1372, - 0, 0, 0, 0, 0, 0, 0, 1131, 0, 0, - 0, 0, 1122, 1483, 1488, 0, 0, 1561, 0, 1554, - 1557, 1555, 1568, 0, 0, 1575, 0, 1577, 0, 1599, - 1600, 1592, 0, 1584, 1587, 1583, 1586, 1499, 1094, 0, - 1099, 0, 1490, 101, 0, 283, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 293, 294, 0, 0, - 450, 455, 142, 0, 0, 0, 0, 188, 0, 0, - 0, 726, 0, 1079, 738, 729, 0, 816, 0, 820, - 0, 0, 0, 823, 824, 825, 802, 0, 806, 516, - 790, 787, 788, 626, 0, 146, 0, 0, 212, 213, - 185, 0, 0, 0, 0, 227, 228, 0, 0, 0, - 1436, 0, 1439, 1273, 1275, 0, 1302, 1303, 1304, 1444, - 1445, 1318, 1331, 1336, 0, 1339, 0, 0, 1340, 0, - 757, 1220, 0, 0, 1238, 1239, 0, 1374, 0, 1379, - 1380, 0, 1385, 0, 1389, 1400, 0, 1127, 1084, 1085, - 1132, 1133, 0, 0, 1075, 1488, 94, 1489, 1486, 0, - 1484, 1482, 1550, 0, 1559, 1560, 1569, 1570, 1576, 0, - 1582, 0, 99, 0, 0, 0, 1499, 281, 0, 300, - 0, 144, 0, 0, 0, 734, 0, 737, 727, 814, - 815, 0, 827, 819, 821, 822, 804, -2, 0, 187, - 0, 0, 0, 199, 191, 1525, 0, 0, 0, 675, - 1437, 0, 0, 1341, 0, 753, 754, 1228, 1221, 0, - 1206, 1207, 1225, 1360, 1362, 0, 0, 0, 0, 1126, - 1128, 1129, 93, 0, 1485, 1246, 0, 1562, 1563, 1590, - 1588, 1095, 1102, 0, 100, 529, 522, 0, 174, 189, - 1525, 0, 0, 0, 807, 808, 809, 810, 811, 812, - 813, 147, 0, 210, 0, 665, 1527, 229, 230, 595, - 596, 597, 223, 0, 1279, 1337, 1222, 0, 0, 0, - 0, 1218, 1219, 0, 1375, 0, 1381, 0, 1386, 0, - 1086, 1087, 1487, 0, 0, 739, 0, 741, 0, -2, - 517, 530, 0, 275, 301, 302, 0, 0, 305, 306, - 307, 298, 299, 145, 219, 0, 0, 828, 0, 200, - 0, 1528, 1529, 226, 0, 0, 1213, 1214, 1215, 1216, - 1217, 0, 0, 0, 1247, 1226, 740, 0, 0, 472, - 0, 750, 518, 519, 0, 525, 526, 527, 528, 303, - 304, 762, 0, 211, 0, 672, 1438, 0, 1376, 0, - 1382, 0, 1387, 0, 742, 743, 751, 0, 520, 0, - 521, 0, 0, 0, 731, 0, 762, 1526, 1223, 0, - 0, 1245, 0, 752, 748, 531, 533, 534, 0, 0, - 532, 763, 732, 1377, 1383, 0, 535, 536, 537, 744, - 745, 746, 747, + 2215, 2216, 2217, 2218, 2219, 2220, 2221, 2222, 2223, 0, + 1610, 0, 837, 1119, 0, 0, 842, 0, 0, 845, + 846, 0, 0, 917, 848, 849, 917, 0, 917, 917, + 917, 917, 0, 0, 0, 859, 0, 0, 0, 0, + 914, 875, 876, 0, 914, 914, 914, 0, 0, 887, + 920, 0, 0, 893, 917, 917, 917, 897, 898, 2227, + 0, 2227, 2227, 1601, 0, 911, 909, 923, 924, 52, + 927, 930, 931, 932, 933, 936, 0, 947, 950, 1627, + 1628, 0, 952, 959, 977, 978, 0, 1012, 1013, 57, + 1267, 0, 1141, 1146, 1157, 1172, 1173, 1174, 1175, 1176, + 1178, 1179, 1180, 0, 0, 0, 0, 1185, 1186, 0, + 0, 0, 0, 0, 1248, 1194, 0, 0, 0, 0, + 1463, 0, 0, 1424, 1424, 1282, 1424, 1426, 1426, 1841, + 1977, 1985, 2107, 1803, 1808, 1809, 1810, 2100, 2101, 2102, + 2103, 2143, 2144, 2148, 1901, 0, 0, 0, 2217, 1938, + 1946, 1947, 1971, 2072, 2128, 1820, 1966, 2037, 1898, 1920, + 1921, 2054, 2055, 1942, 1943, 1924, 1936, 1939, 1927, 1928, + 1930, 1932, 1937, 1944, 1950, 1929, 1949, 1948, 0, 1925, + 1926, 1931, 1941, 1945, 1933, 1934, 1935, 1940, 1951, 0, + 0, 0, 0, 0, 1363, 1364, 1365, 1366, 0, 0, + 0, 0, 0, 0, 0, 380, 381, 1476, 1477, 55, + 56, 1266, 1597, 1426, 1426, 1426, 1426, 1426, 1208, 1209, + 1210, 1211, 1212, 1236, 1237, 1243, 1244, 2049, 2050, 2051, + 2052, 1882, 2137, 1890, 1891, 2032, 2033, 1903, 1904, 2178, + 2179, -2, -2, -2, 321, 322, 323, 324, 325, 326, + 327, 328, 0, 1845, 2118, 2119, 317, 0, 0, 385, + 386, 382, 383, 384, 1250, 1251, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 2226, 0, + 987, 0, 0, 0, 0, 0, 1499, 0, 1491, 1490, + 75, 0, -2, 0, 0, 0, 0, 169, 169, 169, + 169, 169, 169, 59, 0, 64, 1076, 1019, 89, 88, + 1548, 0, 0, 0, 71, 1500, 79, 81, 1501, 0, + 1021, 1022, 0, 1052, 1056, 0, 0, 0, 1617, 1616, + 1616, 114, 0, 0, 115, 135, 136, 137, 0, 0, + 121, 122, 1603, 1604, 217, 0, 0, 267, 268, 0, + 53, 515, 0, 263, 1038, 0, 508, 447, 0, 1614, + 1614, 1517, 0, 0, 0, 0, 0, 1016, 0, 1611, + 244, 245, 252, 253, 254, 488, 488, 488, 661, 0, + 0, 255, 255, 619, 620, 621, 0, 0, -2, 513, + 0, 599, 0, 0, 502, 502, 506, 504, 505, 0, + 0, 0, 0, 0, 0, 0, 0, 638, 0, 639, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 785, + 0, 489, 0, 659, 660, 551, 0, 0, 0, 0, + 0, 0, 0, 0, 1619, 1620, 0, 636, 637, 0, + 0, 0, 488, 488, 0, 0, 0, 0, 488, 488, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 243, 1539, 0, 0, 0, 0, 0, -2, 0, 829, + 0, 0, 0, 0, 0, 1612, 1612, 0, 836, 0, + 838, 1530, 840, 843, 844, 0, 140, 0, 179, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2227, 847, + 0, 0, 850, 0, 914, 914, 912, 913, 852, 853, + 854, 855, 917, 0, 0, 497, 498, 499, 914, 917, + 0, 917, 917, 917, 917, 914, 914, 914, 917, 0, + 0, 920, 917, 917, 0, 917, 883, 0, 888, 0, + 889, 890, 891, 894, 895, 896, 899, 2228, 2229, 1629, + 1630, 1637, 1638, 1639, 1640, 1641, 1642, 1643, 1644, 1645, + 1646, 1647, 1648, 1649, 1650, 1651, 1652, 1653, 1654, 1655, + 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, + 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1675, + 1676, 1677, 1678, 1679, 1680, 1681, 1682, 1683, 1684, 1685, + 1686, 1687, 1688, 1689, 1690, 1691, 1692, 1693, 1694, 1695, + 1696, 1697, 1698, 1699, 1700, 1701, 1702, 1703, 1704, 1705, + 1706, 1707, 1708, 1709, 1710, 1711, 1712, 1713, 1714, 1715, + 1716, 1717, 1718, 1719, 1720, 1721, 1722, 1723, 1724, 1725, + 1726, 1727, 1728, 1729, 1730, 1731, 1732, 1733, 1734, 1735, + 1736, 1737, 1738, 1739, 1740, 1741, 1742, 1743, 1744, 1745, + 1746, 1747, 1748, 1749, 1750, 1751, 1752, 1753, 1754, 1755, + 1756, 1757, 1758, 1759, 1760, 1761, 1762, 1763, 1764, 1765, + 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774, 1775, + 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784, 1785, + 1786, 1787, 1788, 1789, 1790, 1791, 2227, 2227, 903, 907, + 1602, 929, 935, 937, 938, 0, 0, 948, 951, 971, + 61, 1889, 958, 61, 960, 961, 962, 990, 991, 996, + 0, 0, 0, 0, 1002, 1003, 1004, 1005, 0, 0, + 1008, 1009, 1010, 0, 0, 0, 0, 0, 1139, 0, + 0, 1256, 1257, 1258, 1259, 1260, 1261, 1262, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1158, 1159, 0, 0, 0, + 1181, 1182, 1183, 1184, 1187, 0, 1199, 0, 1201, 1472, + -2, 0, 0, 0, 1192, 1193, 0, 0, 0, 0, + 0, 0, 0, 1464, 0, 0, 1280, 0, 1281, 1283, + 1284, 0, 1285, 1026, 1026, 1026, 1026, 1026, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1026, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1622, + 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1036, 0, + 0, 1036, 1036, 0, 0, 310, 311, 312, 313, 314, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 329, 330, 331, 332, 333, 334, + 387, 335, 336, 337, 1266, 0, 0, 0, 58, 979, + 980, 0, 1102, 1622, 0, 0, 0, 1032, 0, 69, + 78, 80, 1499, 73, 1499, 0, 0, 0, -2, -2, + 1039, 1045, 1046, 1047, 1048, 1049, 66, 2225, 67, 0, + 86, 163, 0, 164, 165, 166, 167, 168, 0, 60, + 0, 0, 0, 0, 461, 1551, 0, 0, 1492, 1493, + 1496, 0, 1053, 1983, 1057, 0, 1059, 1060, 0, 0, + 112, 0, 1118, 0, 0, 0, 123, 0, 125, 126, + 0, 0, 0, 472, 1605, 1606, 1607, -2, 495, 0, + 472, 456, 395, 396, 397, 447, 399, 447, 447, 447, + 447, 461, 461, 461, 461, 430, 431, 432, 433, 434, + 0, 0, 416, 447, 447, 447, 447, 437, 438, 439, + 440, 441, 442, 443, 444, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 449, 449, 449, 449, 449, 453, + 453, 0, 54, 0, 1043, 1044, 476, 0, 1496, 0, + 0, 0, 0, 0, 1539, 1614, 1624, 0, 0, 0, + 1614, 222, 0, 0, 0, 662, 735, 613, 650, 663, + 0, 616, 617, -2, 0, 0, 598, 0, 600, 0, + 496, 0, 507, -2, 0, 506, 0, 502, 506, 503, + 506, 494, 640, 641, 642, 0, 644, 645, 765, 1088, + 0, 0, 0, 0, 0, 771, 772, 773, 0, 775, + 776, 777, 778, 779, 780, 781, 782, 783, 784, 651, + 652, 653, 654, 655, 656, 657, 658, 0, 0, 0, + 0, 600, 0, 647, 0, 0, 552, 553, 554, 0, + 0, 557, 558, 559, 560, 0, 0, 563, 564, 565, + 1105, 1106, 566, 567, 592, 593, 594, 568, 569, 570, + 571, 572, 573, 574, 586, 587, 588, 589, 590, 591, + 575, 576, 577, 578, 579, 580, 583, 0, 0, 180, + 237, 1521, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 141, 176, 1612, 0, 0, 0, + 0, 1035, 1120, 1635, 1636, 839, 0, 1531, 0, 1534, + 1535, 1536, 1537, 1538, 138, 177, 139, 178, 868, 869, + 870, 871, 872, 873, 874, 900, 918, 919, 0, 500, + 501, 917, 917, 856, 904, 0, 917, 860, 905, 861, + 863, 862, 864, 877, 878, 917, 867, 915, 916, 879, + 880, 881, 886, 882, 884, 885, 921, 0, 925, 926, + 901, 902, 0, 0, 941, 942, 0, 949, 974, 972, + 973, 975, 966, 967, 968, 969, 970, 1016, 0, 976, + 0, 0, 993, 108, 998, 999, 1000, 1001, 1014, 1007, + 1268, 1136, 1137, 1138, 0, 1140, 1143, 0, 1252, 1254, + 1145, 1147, 1263, 1264, 1265, 0, 0, 0, 0, 0, + 1151, 1155, 1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167, + 1168, 1169, 1170, 1171, 1177, 1440, 1441, 1442, 1196, 388, + 389, 0, 1197, 0, 0, 0, 0, 0, 0, 0, + 1267, 1198, 0, 1050, 0, 0, 1470, 1467, 0, 0, + 0, 1425, 1427, 0, 0, 0, 0, 1027, 1028, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1403, 1404, 1405, + 1406, 1407, 1408, 1409, 1410, 1411, 1412, 1413, 1414, 1415, + 1416, 1417, 1418, 1419, 1420, 1421, 1422, 1423, 1443, 0, + 0, 0, 0, 0, 1463, 0, 1203, 1204, 1205, 0, + 0, 0, 0, 0, 0, 1323, 0, 0, 0, 0, + 1623, 0, 232, 233, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1367, 1368, 1369, 1370, 51, 0, 0, 0, 1037, 1474, + 0, -2, -2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1392, 0, 0, 0, + 0, 0, 0, 1595, 0, 0, 982, 983, 985, 0, + 1122, 0, 1103, 0, 0, 988, 989, 0, 1031, 0, + 1034, 72, 74, 0, 1061, 1040, 68, 0, 63, 0, + 0, 1080, 1549, 461, 1571, 0, 470, 470, 467, 1502, + 1503, 0, 1495, 1497, 1498, 91, 1058, 1054, 0, 1134, + 0, 0, 1117, 0, 1064, 1066, 1067, 1068, 1100, 0, + 1071, 1072, 0, 0, 0, 0, 0, 110, 1119, 116, + 0, 124, 0, 0, 129, 130, 117, 118, 119, 120, + 0, 724, -2, 547, 269, 271, 272, 273, 264, -2, + 459, 457, 458, 398, 461, 461, 424, 425, 426, 427, + 428, 429, 0, 0, 417, 418, 419, 420, 409, 0, + 410, 411, 412, 451, 0, 413, 414, 0, 415, 514, + 0, 1504, 477, 478, 480, 488, 0, 483, 484, 0, + 488, 488, 0, 509, 510, 0, 1496, 0, 0, 182, + 1521, 0, 0, 1625, 1624, 1624, 1624, 0, 257, 258, + 259, 260, 261, 262, 760, 0, 0, 736, 758, 759, + 255, 0, 0, 265, 602, 601, 0, 792, 0, 512, + 0, 0, 506, 506, 491, 492, 643, 0, 0, 767, + 768, 769, 770, 0, 0, 0, 629, 541, 0, 630, + 631, 600, 602, 0, 0, 472, 555, 556, 561, 562, + 581, 0, 0, 0, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 676, 677, 678, 681, 683, + 684, 685, 604, 691, 680, 682, 686, 687, 688, 604, + 692, 693, 695, 696, 697, 604, 703, 0, 694, 698, + 699, 700, 604, 704, 707, 708, 709, 712, 714, 715, + 716, 604, 722, 711, 713, 717, 718, 719, 604, 723, + 1518, 1519, 1520, 0, 0, 830, 0, 0, 538, 106, + 1613, 835, 1532, 841, 1533, 914, 866, 906, 914, 858, + 865, 892, 939, 940, 945, -2, 953, 954, 955, 956, + 957, 997, 0, 0, 0, 0, 1006, 0, 0, 1144, + 1253, 1255, 1148, 0, 1152, 1156, 0, 0, 0, 1202, + 1200, 1474, 0, 0, 0, 1249, 0, 0, 1271, 1272, + 0, 0, 0, 1468, 0, 0, 1278, 0, 1428, 1429, + 1286, 0, 0, 0, 0, 0, 1292, 1293, 1294, 1295, + 1296, 1297, 1298, 1299, 1300, 1301, 1490, 0, 0, 0, + 0, 0, 1307, 1308, 1309, 1310, 1311, 0, 1313, 0, + 1314, 0, 0, 0, 0, 1321, 1322, 1324, 0, 0, + 1327, 1328, 0, 0, 1329, 0, 0, 0, 1333, 0, + 0, 0, 0, 1342, 1343, 1344, 1345, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1356, 1357, 0, + 1231, 0, 0, 1231, 0, 1269, 1036, 0, 1430, 1431, + 1432, 1433, 1434, 0, 0, 0, 0, 0, 0, 1390, + 1391, 1393, 0, 0, 1396, 0, 1398, 0, 1596, 981, + 984, 986, 1074, 1123, 1124, 0, 0, 0, 0, 1104, + 1621, 1029, 1030, 1033, 1082, 0, 1478, 0, 0, 1061, + 1134, 1062, 0, 1041, 0, 171, 0, 65, 1077, 0, + 1553, 1552, 1565, 1578, 470, 470, 464, 465, 471, 466, + 468, 469, 1494, 0, 1499, 0, 1589, 0, 0, 1581, + 0, 0, 0, 0, 0, 0, 0, 0, 1107, 0, + 0, 1110, 0, 0, 0, 0, 1101, 1072, 0, 1073, + 0, -2, 0, 0, 104, 105, 0, 0, 0, 127, + 128, 0, 0, 134, 473, 474, 246, 255, 549, 270, + 522, 0, 0, 394, 460, 421, 422, 423, 0, 445, + 0, 0, 0, 0, 543, 218, 1508, 1507, 488, 488, + 479, 0, 482, 0, 0, 0, 1626, 448, 511, 0, + 1615, 184, 0, 0, 236, 0, 0, 0, 0, 242, + 730, 0, 0, 737, 0, 0, 0, 611, 0, 622, + 623, 0, 764, -2, 826, 476, 0, 490, 493, 1089, + 0, 0, 624, 0, 627, 628, 542, 602, 633, 634, + 648, 635, 584, 585, 582, 0, 186, 0, 0, 0, + 195, 196, 197, 198, 0, 0, 1540, 1541, 1546, 1544, + 1545, 223, 669, 671, 670, 674, 0, 0, 0, 606, + 0, 606, 606, 0, 606, 0, 606, 606, 667, 0, + 538, 1504, 0, 834, 539, 540, 917, 917, 992, 109, + 0, 995, 0, 0, 0, 0, 1149, 1153, 1435, 1461, + 447, 447, 1448, 447, 453, 1451, 447, 1453, 447, 1456, + 447, 1459, 1460, 0, 0, 0, 1051, 0, 0, 1277, + 1471, 0, 0, 1287, 1288, 1289, 1290, 1291, 1465, 0, + 0, 0, 1306, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 235, 0, 0, 0, 0, 0, + 0, 1401, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1226, 1230, 0, 1232, 1233, 0, 0, 1359, + 0, 0, 1371, 0, 1475, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1125, 1130, 1130, 1130, 0, + 0, 0, 1608, 1609, 1479, 1480, 1134, 1481, 1063, 1042, + 170, 0, 0, 1081, 1571, 0, 1564, 0, -2, 1573, + 0, 0, 0, 1579, 462, 463, 1055, 92, 1135, 95, + 0, 1589, 1598, 0, 1580, 1591, 1593, 0, 0, 0, + 1585, 0, 1134, 1065, 1096, 1098, 0, 1093, 1108, 1109, + 1111, 0, 1113, 0, 1115, 1116, 1076, 1070, 0, 112, + 0, 1134, 1134, 111, 0, 1121, 131, 132, 133, 548, + 274, 279, 0, 0, 0, 284, 0, 286, 0, 0, + 0, 291, 292, 488, 488, 523, 0, 391, 393, 0, + 0, 277, 461, 0, 461, 0, 452, 454, 0, 524, + 544, 1505, 1506, 0, 0, 481, 485, 486, 487, 0, + 0, 0, 0, 192, 193, 194, 0, 238, 0, 0, + 0, 733, 0, 761, 0, 0, 0, 0, 0, 0, + 266, 603, 793, 794, 795, 796, 797, 798, 799, 800, + 801, 0, 488, 0, 0, 0, 488, 488, 488, 0, + 818, 475, 0, 0, 789, 786, 625, 0, 315, 316, + 318, 0, 0, 0, 0, 0, 632, 0, 0, 152, + 153, 154, 155, 156, 175, 0, 0, 181, 0, 0, + 1076, 1522, 1523, 1524, 0, 1543, 1547, 226, 0, 0, + 0, 0, 679, 689, 0, 605, 690, 701, 705, 702, + 710, 720, 721, 831, 832, 833, 107, 851, 857, 994, + 1015, 1142, 1150, 1154, 0, 0, 0, 0, 1462, 1446, + 461, 1449, 1450, 1452, 1454, 1455, 1457, 1458, 1190, 1191, + 1195, 0, 1274, 0, 1276, 1469, 0, 1499, 0, 0, + 0, 1305, 0, 0, 0, 1316, 1315, 1317, 0, 1319, + 1320, 1325, 1326, 1330, 0, 1332, 1334, 1335, 0, 0, + 0, 1346, 1347, 1348, 1349, 1350, 1351, 1352, 1353, 1354, + 1355, 0, 1224, 1227, 1358, 1234, 1235, 1240, 1361, 0, + 0, 1270, 1373, 0, 1378, 0, 0, 1384, 0, 1388, + 0, 1394, 1395, 1397, 1399, 0, 0, 0, 0, 0, + 1102, 1083, 76, 1481, 1483, 0, 172, 173, 1558, 1556, + 1556, 1566, 1567, 0, 0, 1574, 0, 0, 0, 0, + 96, 0, 0, 0, 1594, 0, 0, 0, 0, 113, + 1490, 1090, 1097, 0, 0, 1091, 0, 1092, 1112, 1114, + 1069, 0, 1134, 1134, 102, 103, 0, 280, 0, 282, + 308, 309, 0, 285, 287, 288, 289, 295, 296, 297, + 290, 0, 0, 390, 392, 0, 0, 435, 446, 436, + 0, 0, 1509, 1510, 1511, 1512, 1513, 1514, 1515, 1516, + 0, 0, 148, 149, 150, 151, 0, 183, 0, 0, + 1076, 239, 240, 241, 725, 0, 735, 0, 1078, 0, + 728, 0, 614, 0, 0, 0, 488, 488, 488, 0, + 0, 0, 0, 803, 0, 0, 766, 0, 774, 0, + 0, 0, 319, 320, 143, 0, 0, 0, 0, 0, + 201, 202, 203, 204, 205, 206, 207, 208, 209, 0, + 190, 0, 1542, 668, 0, 224, 225, 0, 0, 673, + 607, 608, 706, 1188, 0, 0, 0, 1189, 1447, 0, + 0, 0, 0, 1466, 0, 0, 0, 0, 1312, 0, + 0, 0, 1338, 0, 0, 0, 755, 756, 0, 1402, + 1229, 1490, 0, 1231, 1241, 1242, 0, 1231, 1372, 0, + 0, 0, 0, 0, 0, 0, 1131, 0, 0, 0, + 0, 1122, 1483, 1488, 0, 0, 1561, 0, 1554, 1557, + 1555, 1568, 0, 0, 1575, 0, 1577, 0, 1599, 1600, + 1592, 0, 1584, 1587, 1583, 1586, 1499, 1094, 0, 1099, + 0, 1490, 101, 0, 283, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 293, 294, 0, 0, 450, + 455, 142, 0, 0, 0, 0, 188, 0, 0, 0, + 726, 0, 1079, 738, 729, 0, 816, 0, 820, 0, + 0, 0, 823, 824, 825, 802, 0, 806, 516, 790, + 787, 788, 626, 0, 146, 0, 0, 212, 213, 185, + 0, 0, 0, 0, 227, 228, 0, 0, 0, 1436, + 0, 1439, 1273, 1275, 0, 1302, 1303, 1304, 1444, 1445, + 1318, 1331, 1336, 0, 1339, 0, 0, 1340, 0, 757, + 1220, 0, 0, 1238, 1239, 0, 1374, 0, 1379, 1380, + 0, 1385, 0, 1389, 1400, 0, 1127, 1084, 1085, 1132, + 1133, 0, 0, 1075, 1488, 94, 1489, 1486, 0, 1484, + 1482, 1550, 0, 1559, 1560, 1569, 1570, 1576, 0, 1582, + 0, 99, 0, 0, 0, 1499, 281, 0, 300, 0, + 144, 0, 0, 0, 734, 0, 737, 727, 814, 815, + 0, 827, 819, 821, 822, 804, -2, 0, 187, 0, + 0, 0, 199, 191, 1525, 0, 0, 0, 675, 1437, + 0, 0, 1341, 0, 753, 754, 1228, 1221, 0, 1206, + 1207, 1225, 1360, 1362, 0, 0, 0, 0, 1126, 1128, + 1129, 93, 0, 1485, 1246, 0, 1562, 1563, 1590, 1588, + 1095, 1102, 0, 100, 529, 522, 0, 174, 189, 1525, + 0, 0, 0, 807, 808, 809, 810, 811, 812, 813, + 147, 0, 210, 0, 665, 1527, 229, 230, 595, 596, + 597, 223, 0, 1279, 1337, 1222, 0, 0, 0, 0, + 1218, 1219, 0, 1375, 0, 1381, 0, 1386, 0, 1086, + 1087, 1487, 0, 0, 739, 0, 741, 0, -2, 517, + 530, 0, 275, 301, 302, 0, 0, 305, 306, 307, + 298, 299, 145, 219, 0, 0, 828, 0, 200, 0, + 1528, 1529, 226, 0, 0, 1213, 1214, 1215, 1216, 1217, + 0, 0, 0, 1247, 1226, 740, 0, 0, 472, 0, + 750, 518, 519, 0, 525, 526, 527, 528, 303, 304, + 762, 0, 211, 0, 672, 1438, 0, 1376, 0, 1382, + 0, 1387, 0, 742, 743, 751, 0, 520, 0, 521, + 0, 0, 0, 731, 0, 762, 1526, 1223, 0, 0, + 1245, 0, 752, 748, 531, 533, 534, 0, 0, 532, + 763, 732, 1377, 1383, 0, 535, 536, 537, 744, 745, + 746, 747, } var yyTok1 = [...]int{ @@ -9054,7 +9044,7 @@ var yyTok1 = [...]int{ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 144, 3, 3, 3, 171, 163, 3, 87, 89, 168, 166, 88, 167, 221, 169, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 706, + 3, 3, 3, 3, 3, 3, 3, 3, 3, 705, 152, 151, 153, 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, @@ -9180,7 +9170,7 @@ var yyTok3 = [...]int{ 58015, 690, 58016, 691, 58017, 692, 58018, 693, 58019, 694, 58020, 695, 58021, 696, 58022, 697, 58023, 698, 58024, 699, 58025, 700, 58026, 701, 58027, 702, 58028, 703, 58029, 704, - 58030, 705, 0, + 0, } var yyErrorMessages = [...]struct { @@ -10549,7 +10539,7 @@ yydefault: //line sql.y:1439 { yyLOCAL = &BranchCommand{ - Type: "cleanUp", + Type: "delete", Params: yyDollar[3].withParamsUnion(), } } @@ -21798,42 +21788,42 @@ yydefault: { yyVAL.identifierCS = NewIdentifierCS(string(yyDollar[1].str)) } - case 2225: + case 2224: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9062 +//line sql.y:9061 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 2226: + case 2225: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9071 +//line sql.y:9070 { decNesting(yylex) } - case 2227: + case 2226: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:9076 +//line sql.y:9075 { skipToEnd(yylex) } - case 2228: + case 2227: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:9081 +//line sql.y:9080 { skipToEnd(yylex) } - case 2229: + case 2228: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9085 +//line sql.y:9084 { skipToEnd(yylex) } - case 2230: + case 2229: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:9089 +//line sql.y:9088 { skipToEnd(yylex) } diff --git a/go/vt/sqlparser/sql.y b/go/vt/sqlparser/sql.y index 0fcca7819d..a02666e5bd 100644 --- a/go/vt/sqlparser/sql.y +++ b/go/vt/sqlparser/sql.y @@ -341,7 +341,7 @@ func bindVariable(yylex yyLexer, bvar string) { %token ACTION_ARGS // Branch Tokens -%token BRANCH DIFF PREPARE_MERGE_BACK MERGE_BACK CLEAN_UP +%token BRANCH DIFF PREPARE_MERGE_BACK MERGE_BACK // CDC Tokens %token CDC CDCS WASM_BINARY_NAME ENV @@ -1435,10 +1435,10 @@ branch_merge_back_statement: // Branch clean up command branch_clean_up_statement: - BRANCH CLEAN_UP with_opt + BRANCH DELETE with_opt { $$ = &BranchCommand{ - Type: "cleanUp", + Type: "delete", Params: $3, } } @@ -9052,7 +9052,6 @@ non_reserved_keyword: | DIFF | PREPARE_MERGE_BACK | MERGE_BACK -| CLEAN_UP | ENV %prec FUNCTION_CALL_NON_KEYWORD diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index 16426b77ed..1f55d7360d 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -22,7 +22,7 @@ const ( Diff BranchCommandType = "diff" MergeBack BranchCommandType = "mergeBack" PrepareMergeBack BranchCommandType = "prepareMergeBack" - Cleanup BranchCommandType = "cleanUp" + BranchDelete BranchCommandType = "delete" Show BranchCommandType = "show" ) @@ -134,7 +134,7 @@ func (b *Branch) TryExecute(ctx context.Context, vcursor VCursor, bindVars map[s return b.branchPrepareMergeBack() case MergeBack: return b.branchMergeBack() - case Cleanup: + case BranchDelete: return b.branchCleanUp() case Show: return b.branchShow() @@ -168,7 +168,7 @@ func (b *Branch) TryStreamExecute(ctx context.Context, vcursor VCursor, bindVars if err != nil { return err } - case Cleanup: + case BranchDelete: result, err = b.branchCleanUp() if err != nil { return err @@ -229,8 +229,8 @@ func parseBranchCommandType(s string) (BranchCommandType, error) { return MergeBack, nil case string(PrepareMergeBack): return PrepareMergeBack, nil - case string(Cleanup): - return Cleanup, nil + case string(BranchDelete): + return BranchDelete, nil case string(Show): return Show, nil default: @@ -256,7 +256,7 @@ func (b *Branch) setAndValidateParams(paramsMap map[string]string) error { params = &BranchPrepareMergeBackParams{} case Show: params = &BranchShowParams{} - case MergeBack, Cleanup: + case MergeBack, BranchDelete: return nil default: return fmt.Errorf("invalid branch command type: %s", b.commandType) From 6f5e5cbd2bdb8db65eb5c67c8966f816467ce348 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 10 Dec 2024 16:52:03 +0800 Subject: [PATCH 07/13] fix: config target info by flag --- go/internal/global/global.go | 21 +++++++++- go/viperutil/vtgate_handlers.go | 31 ++++++++++++++ go/vt/vtgate/engine/branch_primitive.go | 55 +++++++++++++++++++------ go/vt/vtgate/engine/declarative_ddl.go | 4 +- go/vt/vtgate/plugin_mysql_server.go | 9 ++-- go/vt/vtgate/vtgate_test.go | 3 +- 6 files changed, 101 insertions(+), 22 deletions(-) diff --git a/go/internal/global/global.go b/go/internal/global/global.go index e15b9f57c4..6623be391f 100644 --- a/go/internal/global/global.go +++ b/go/internal/global/global.go @@ -5,7 +5,11 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package global -import "time" +import ( + "github.com/spf13/pflag" + "time" + "vitess.io/vitess/go/vt/servenv" +) // Keyspace const ( @@ -56,3 +60,18 @@ const ( const ( TopoServerConfigOverwriteShard = true ) + +// ***************************************************************************************************************************** + +var ( + MysqlServerPort = -1 +) + +func registerPluginFlags(fs *pflag.FlagSet) { + fs.IntVar(&MysqlServerPort, "mysql_server_port", MysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") +} + +func init() { + servenv.OnParseFor("vtgate", registerPluginFlags) + servenv.OnParseFor("vtcombo", registerPluginFlags) +} diff --git a/go/viperutil/vtgate_handlers.go b/go/viperutil/vtgate_handlers.go index b85bb47b8d..41ca6d24a1 100644 --- a/go/viperutil/vtgate_handlers.go +++ b/go/viperutil/vtgate_handlers.go @@ -184,4 +184,35 @@ func RegisterReloadHandlersForVtGate(v *ViperConfig) { log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) } }) + + // branch + v.ReloadHandler.AddReloadHandler("branch_default_name", func(key string, value string, fs *pflag.FlagSet) { + if err := fs.Set("branch_default_name", value); err != nil { + log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) + } + }) + + v.ReloadHandler.AddReloadHandler("branch_default_target_host", func(key string, value string, fs *pflag.FlagSet) { + if err := fs.Set("branch_default_target_host", value); err != nil { + log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) + } + }) + + v.ReloadHandler.AddReloadHandler("branch_default_target_port", func(key string, value string, fs *pflag.FlagSet) { + if err := fs.Set("branch_default_target_port", value); err != nil { + log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) + } + }) + + v.ReloadHandler.AddReloadHandler("branch_default_target_user", func(key string, value string, fs *pflag.FlagSet) { + if err := fs.Set("branch_default_target_user", value); err != nil { + log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) + } + }) + + v.ReloadHandler.AddReloadHandler("branch_default_target_password", func(key string, value string, fs *pflag.FlagSet) { + if err := fs.Set("branch_default_target_password", value); err != nil { + log.Errorf("fail to reload config %s=%s, err: %v", key, value, err) + } + }) } diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index 1f55d7360d..329fa7c8f9 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -4,11 +4,14 @@ import ( "context" "fmt" "github.com/go-sql-driver/mysql" + "github.com/spf13/pflag" "strconv" "strings" + "vitess.io/vitess/go/internal/global" "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/schemadiff" + "vitess.io/vitess/go/vt/servenv" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/branch" ) @@ -26,16 +29,27 @@ const ( Show BranchCommandType = "show" ) -// todo enhancement: add flags to config -const ( - DefaultBranchName = "my_branch" - +var ( + DefaultBranchName = "my_branch" DefaultBranchTargetHost = "127.0.0.1" - DefaultBranchTargetPort = 15306 + DefaultBranchTargetPort = -1 DefaultBranchTargetUser = "root" DefaultBranchTargetPassword = "passwd" ) +func registerBranchFlags(fs *pflag.FlagSet) { + // todo add dynamic handler + fs.StringVar(&DefaultBranchName, "branch_default_name", DefaultBranchName, "default branch name") + fs.StringVar(&DefaultBranchTargetHost, "branch_default_target_host", DefaultBranchTargetHost, "default branch target host") + fs.IntVar(&DefaultBranchTargetPort, "branch_default_target_port", DefaultBranchTargetPort, "default branch target port") + fs.StringVar(&DefaultBranchTargetUser, "branch_default_target_user", DefaultBranchTargetUser, "default branch target user") + fs.StringVar(&DefaultBranchTargetPassword, "branch_default_target_password", DefaultBranchTargetPassword, "default branch target password") +} + +func init() { + servenv.OnParseFor("vtgate", registerBranchFlags) +} + // Branch is an operator to deal with branch commands type Branch struct { // set when plan building @@ -43,6 +57,11 @@ type Branch struct { commandType BranchCommandType params branchParams + targetHost string + targetPort int + targetUser string + targetPassword string + noInputs } @@ -120,6 +139,16 @@ func BuildBranchPlan(branchCmd *sqlparser.BranchCommand) (*Branch, error) { if err != nil { return nil, fmt.Errorf("invalid branch command params: %w", err) } + + b.targetHost = DefaultBranchTargetHost + if DefaultBranchTargetPort == -1 { + b.targetPort = global.MysqlServerPort + } else { + b.targetPort = DefaultBranchTargetPort + } + b.targetUser = DefaultBranchTargetUser + b.targetPassword = DefaultBranchTargetPassword + return b, nil } @@ -467,7 +496,7 @@ func (b *Branch) branchCreate() (*sqltypes.Result, error) { if err != nil { return nil, err } - targetHandler, err := createBranchTargetHandler(DefaultBranchTargetUser, DefaultBranchTargetPassword, DefaultBranchTargetHost, DefaultBranchTargetPort) + targetHandler, err := createBranchTargetHandler(b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -482,7 +511,7 @@ func (b *Branch) branchDiff() (*sqltypes.Result, error) { if !ok { return nil, fmt.Errorf("branch diff: invalid branch command params") } - meta, bs, _, _, err := getBranchDataStruct(b.name) + meta, bs, _, _, err := getBranchDataStruct(b.name, b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -502,7 +531,7 @@ func (b *Branch) branchPrepareMergeBack() (*sqltypes.Result, error) { return nil, fmt.Errorf("branch prepare merge back: invalid branch command params") } - meta, bs, _, _, err := getBranchDataStruct(b.name) + meta, bs, _, _, err := getBranchDataStruct(b.name, b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -517,7 +546,7 @@ func (b *Branch) branchPrepareMergeBack() (*sqltypes.Result, error) { } func (b *Branch) branchMergeBack() (*sqltypes.Result, error) { - meta, bs, _, _, err := getBranchDataStruct(b.name) + meta, bs, _, _, err := getBranchDataStruct(b.name, b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -526,7 +555,7 @@ func (b *Branch) branchMergeBack() (*sqltypes.Result, error) { func (b *Branch) branchCleanUp() (*sqltypes.Result, error) { // get target handler - targetHandler, err := createBranchTargetHandler(DefaultBranchTargetUser, DefaultBranchTargetPassword, DefaultBranchTargetHost, DefaultBranchTargetPort) + targetHandler, err := createBranchTargetHandler(b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -540,7 +569,7 @@ func (b *Branch) branchShow() (*sqltypes.Result, error) { return nil, fmt.Errorf("branch show: invalid branch command params") } - meta, _, _, targetHandler, err := getBranchDataStruct(b.name) + meta, _, _, targetHandler, err := getBranchDataStruct(b.name, b.targetUser, b.targetPassword, b.targetHost, b.targetPort) if err != nil { return nil, err } @@ -557,9 +586,9 @@ func (b *Branch) branchShow() (*sqltypes.Result, error) { } } -func getBranchDataStruct(name string) (*branch.BranchMeta, *branch.BranchService, *branch.SourceMySQLService, *branch.TargetMySQLService, error) { +func getBranchDataStruct(name string, targetUser, targetPassword, targetHost string, targetPort int) (*branch.BranchMeta, *branch.BranchService, *branch.SourceMySQLService, *branch.TargetMySQLService, error) { // get target handler - targetHandler, err := createBranchTargetHandler(DefaultBranchTargetUser, DefaultBranchTargetPassword, DefaultBranchTargetHost, DefaultBranchTargetPort) + targetHandler, err := createBranchTargetHandler(targetUser, targetPassword, targetHost, targetPort) if err != nil { return nil, nil, nil, nil, err } diff --git a/go/vt/vtgate/engine/declarative_ddl.go b/go/vt/vtgate/engine/declarative_ddl.go index 5893b60b31..278989fb36 100644 --- a/go/vt/vtgate/engine/declarative_ddl.go +++ b/go/vt/vtgate/engine/declarative_ddl.go @@ -63,7 +63,7 @@ var configInStr = HintsInStr{ } // not all options are supported to configure -func registerPoolSizeControllerConfigTypeFlags(fs *pflag.FlagSet) { +func registerDeclarativeDDLDiffHintsFlags(fs *pflag.FlagSet) { fs.StringVar(&configInStr.AutoIncrementStrategy, "declarative_ddl_hints_auto_increment_strategy", configInStr.AutoIncrementStrategy, "auto increment strategy") fs.StringVar(&configInStr.RangeRotationStrategy, "declarative_ddl_hints_range_rotation_strategy", configInStr.RangeRotationStrategy, "range rotation strategy") fs.StringVar(&configInStr.ConstraintNamesStrategy, "declarative_ddl_hints_constraint_names_strategy", configInStr.ConstraintNamesStrategy, "constraint names strategy") @@ -74,7 +74,7 @@ func registerPoolSizeControllerConfigTypeFlags(fs *pflag.FlagSet) { } func init() { - servenv.OnParseFor("vtgate", registerPoolSizeControllerConfigTypeFlags) + servenv.OnParseFor("vtgate", registerDeclarativeDDLDiffHintsFlags) } // DeclarativeDDL is an operator to send schema diff DDL queries to the specific keyspace, tabletType and destination diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 2d0dcf1f13..4984aefd03 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -33,6 +33,7 @@ import ( "sync/atomic" "syscall" "time" + "vitess.io/vitess/go/internal/global" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -57,7 +58,6 @@ import ( ) var ( - mysqlServerPort = -1 mysqlServerBindAddress string mysqlServerSocketPath string mysqlTCPVersion = "tcp" @@ -85,7 +85,6 @@ var ( ) func registerPluginFlags(fs *pflag.FlagSet) { - fs.IntVar(&mysqlServerPort, "mysql_server_port", mysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") fs.StringVar(&mysqlServerBindAddress, "mysql_server_bind_address", mysqlServerBindAddress, "Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance.") fs.StringVar(&mysqlServerSocketPath, "mysql_server_socket_path", mysqlServerSocketPath, "This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket") fs.StringVar(&mysqlTCPVersion, "mysql_tcp_version", mysqlTCPVersion, "Select tcp, tcp4, or tcp6 to control the socket type.") @@ -464,7 +463,7 @@ func initTLSConfig(mysqlListener *mysql.Listener, mysqlSslCert, mysqlSslKey, mys // It should be called only once in a process. func initMySQLProtocol() { // Flag is not set, just return. - if mysqlServerPort < 0 && mysqlServerSocketPath == "" { + if global.MysqlServerPort < 0 && mysqlServerSocketPath == "" { return } @@ -494,10 +493,10 @@ func initMySQLProtocol() { // Create a Listener. var err error vtgateHandle = newVtgateHandler(rpcVTGate) - if mysqlServerPort >= 0 { + if global.MysqlServerPort >= 0 { mysqlListener, err = mysql.NewListener( mysqlTCPVersion, - net.JoinHostPort(mysqlServerBindAddress, fmt.Sprintf("%v", mysqlServerPort)), + net.JoinHostPort(mysqlServerBindAddress, fmt.Sprintf("%v", global.MysqlServerPort)), authServer, vtgateHandle, mysqlConnReadTimeout, diff --git a/go/vt/vtgate/vtgate_test.go b/go/vt/vtgate/vtgate_test.go index ffbfdc3993..b5b3d3c544 100644 --- a/go/vt/vtgate/vtgate_test.go +++ b/go/vt/vtgate/vtgate_test.go @@ -26,6 +26,7 @@ import ( "fmt" "strings" "testing" + "vitess.io/vitess/go/internal/global" "github.com/stretchr/testify/assert" "google.golang.org/protobuf/proto" @@ -68,7 +69,7 @@ func init() { transactionMode = "MULTI" Init(context.Background(), hcVTGateTest, newSandboxForCells([]string{"aa"}), "aa", nil, querypb.ExecuteOptions_Gen4) - mysqlServerPort = 0 + global.MysqlServerPort = 0 mysqlAuthServerImpl = "none" initMySQLProtocol() } From 328385babd65fe786868df063dc483264a609edf Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Tue, 10 Dec 2024 20:10:19 +0800 Subject: [PATCH 08/13] fix: share mysqlServerPort --- go/internal/global/global.go | 17 ----------------- go/vt/share/share_vars.go | 3 +++ go/vt/vtgate/engine/branch_primitive.go | 4 ++-- go/vt/vtgate/plugin_mysql_server.go | 16 ++++++++++++---- go/vt/vtgate/vtgate_test.go | 3 +-- 5 files changed, 18 insertions(+), 25 deletions(-) create mode 100644 go/vt/share/share_vars.go diff --git a/go/internal/global/global.go b/go/internal/global/global.go index 6623be391f..a939db4eed 100644 --- a/go/internal/global/global.go +++ b/go/internal/global/global.go @@ -6,9 +6,7 @@ Licensed under the Apache v2(found in the LICENSE file in the root directory). package global import ( - "github.com/spf13/pflag" "time" - "vitess.io/vitess/go/vt/servenv" ) // Keyspace @@ -60,18 +58,3 @@ const ( const ( TopoServerConfigOverwriteShard = true ) - -// ***************************************************************************************************************************** - -var ( - MysqlServerPort = -1 -) - -func registerPluginFlags(fs *pflag.FlagSet) { - fs.IntVar(&MysqlServerPort, "mysql_server_port", MysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") -} - -func init() { - servenv.OnParseFor("vtgate", registerPluginFlags) - servenv.OnParseFor("vtcombo", registerPluginFlags) -} diff --git a/go/vt/share/share_vars.go b/go/vt/share/share_vars.go new file mode 100644 index 0000000000..0157108e69 --- /dev/null +++ b/go/vt/share/share_vars.go @@ -0,0 +1,3 @@ +package share + +var GetMysqlServerPort func() int diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index 329fa7c8f9..c855467297 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -7,11 +7,11 @@ import ( "github.com/spf13/pflag" "strconv" "strings" - "vitess.io/vitess/go/internal/global" "vitess.io/vitess/go/sqltypes" querypb "vitess.io/vitess/go/vt/proto/query" "vitess.io/vitess/go/vt/schemadiff" "vitess.io/vitess/go/vt/servenv" + "vitess.io/vitess/go/vt/share" "vitess.io/vitess/go/vt/sqlparser" "vitess.io/vitess/go/vt/vtgate/branch" ) @@ -142,7 +142,7 @@ func BuildBranchPlan(branchCmd *sqlparser.BranchCommand) (*Branch, error) { b.targetHost = DefaultBranchTargetHost if DefaultBranchTargetPort == -1 { - b.targetPort = global.MysqlServerPort + b.targetPort = share.GetMysqlServerPort() } else { b.targetPort = DefaultBranchTargetPort } diff --git a/go/vt/vtgate/plugin_mysql_server.go b/go/vt/vtgate/plugin_mysql_server.go index 4984aefd03..89d48ec60f 100644 --- a/go/vt/vtgate/plugin_mysql_server.go +++ b/go/vt/vtgate/plugin_mysql_server.go @@ -33,7 +33,7 @@ import ( "sync/atomic" "syscall" "time" - "vitess.io/vitess/go/internal/global" + "vitess.io/vitess/go/vt/share" topodatapb "vitess.io/vitess/go/vt/proto/topodata" @@ -58,6 +58,7 @@ import ( ) var ( + mysqlServerPort = -1 mysqlServerBindAddress string mysqlServerSocketPath string mysqlTCPVersion = "tcp" @@ -85,6 +86,7 @@ var ( ) func registerPluginFlags(fs *pflag.FlagSet) { + fs.IntVar(&mysqlServerPort, "mysql_server_port", mysqlServerPort, "If set, also listen for MySQL binary protocol connections on this port.") fs.StringVar(&mysqlServerBindAddress, "mysql_server_bind_address", mysqlServerBindAddress, "Binds on this address when listening to MySQL binary protocol. Useful to restrict listening to 'localhost' only for instance.") fs.StringVar(&mysqlServerSocketPath, "mysql_server_socket_path", mysqlServerSocketPath, "This option specifies the Unix socket file to use when listening for local connections. By default it will be empty and it won't listen to a unix socket") fs.StringVar(&mysqlTCPVersion, "mysql_tcp_version", mysqlTCPVersion, "Select tcp, tcp4, or tcp6 to control the socket type.") @@ -104,6 +106,12 @@ func registerPluginFlags(fs *pflag.FlagSet) { fs.DurationVar(&mysqlQueryTimeout, "mysql_server_query_timeout", mysqlQueryTimeout, "mysql query timeout") fs.BoolVar(&mysqlConnBufferPooling, "mysql-server-pool-conn-read-buffers", mysqlConnBufferPooling, "If set, the server will pool incoming connection read buffers") fs.StringVar(&mysqlDefaultWorkloadName, "mysql_default_workload", mysqlDefaultWorkloadName, "Default session workload (OLTP, OLAP, DBA)") + + share.GetMysqlServerPort = GetMysqlServerPort +} + +func GetMysqlServerPort() int { + return mysqlServerPort } // vtgateHandler implements the Listener interface. @@ -463,7 +471,7 @@ func initTLSConfig(mysqlListener *mysql.Listener, mysqlSslCert, mysqlSslKey, mys // It should be called only once in a process. func initMySQLProtocol() { // Flag is not set, just return. - if global.MysqlServerPort < 0 && mysqlServerSocketPath == "" { + if mysqlServerPort < 0 && mysqlServerSocketPath == "" { return } @@ -493,10 +501,10 @@ func initMySQLProtocol() { // Create a Listener. var err error vtgateHandle = newVtgateHandler(rpcVTGate) - if global.MysqlServerPort >= 0 { + if mysqlServerPort >= 0 { mysqlListener, err = mysql.NewListener( mysqlTCPVersion, - net.JoinHostPort(mysqlServerBindAddress, fmt.Sprintf("%v", global.MysqlServerPort)), + net.JoinHostPort(mysqlServerBindAddress, fmt.Sprintf("%v", mysqlServerPort)), authServer, vtgateHandle, mysqlConnReadTimeout, diff --git a/go/vt/vtgate/vtgate_test.go b/go/vt/vtgate/vtgate_test.go index b5b3d3c544..ffbfdc3993 100644 --- a/go/vt/vtgate/vtgate_test.go +++ b/go/vt/vtgate/vtgate_test.go @@ -26,7 +26,6 @@ import ( "fmt" "strings" "testing" - "vitess.io/vitess/go/internal/global" "github.com/stretchr/testify/assert" "google.golang.org/protobuf/proto" @@ -69,7 +68,7 @@ func init() { transactionMode = "MULTI" Init(context.Background(), hcVTGateTest, newSandboxForCells([]string{"aa"}), "aa", nil, querypb.ExecuteOptions_Gen4) - global.MysqlServerPort = 0 + mysqlServerPort = 0 mysqlAuthServerImpl = "none" initMySQLProtocol() } From f8939731e8fff52315d7adc0ff55a45ed0055cad Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 11 Dec 2024 01:03:48 +0800 Subject: [PATCH 09/13] doc: branch doc --- doc-chinese/toturial/08-Branch.md | 392 +++++----- doc-chinese/toturial/images/BranchStatus.png | Bin 0 -> 118444 bytes doc/toturial/08-Branch.md | 719 +++++-------------- doc/toturial/images/BranchStatus.png | Bin 0 -> 118444 bytes 4 files changed, 417 insertions(+), 694 deletions(-) create mode 100644 doc-chinese/toturial/images/BranchStatus.png create mode 100644 doc/toturial/images/BranchStatus.png diff --git a/doc-chinese/toturial/08-Branch.md b/doc-chinese/toturial/08-Branch.md index 21eeb22d89..2187210261 100644 --- a/doc-chinese/toturial/08-Branch.md +++ b/doc-chinese/toturial/08-Branch.md @@ -1,230 +1,278 @@ ---- -题目: Branch ---- +# 分支 -# **背景** +## 概述 -branch功能用于将数据库复制到另一个 WeScale 集群或本地集群。在生产环境中,您可以使用branch功能创建与开发环境中相同的数据库。本文档将解释如何使用branch功能。`Branch` 是一个“伞式”命令,其中的 `action` 子命令定义了工作流上的操作。每个 `action` 都可以有自己的 `options`。 +WeSQL中的Branch功能允许您将一个Wescale集群(**source**)中的数据库复制到另一个Wescale集群(**target**)。这个功能特别适用于创建与您的生产环境相似的开发数据库。本指南提供了使用Branch功能的清晰指令,包括其命令和选项。 -# **branch命令的一般语法** +**Source**指的是从中复制schema的Wescale集群,而**Target**指的是将schema应用到的Wescale集群。 -branch操作由 vtctld 服务器执行,该服务器维护与 vttablets 的 gRPC 连接。本质上,vtctld 扮演指挥者的角色。 +--- -注意:如果要使用branch功能,**请确保写入端的 vtctld 服务器已打开。** -``` -Branch -- +## 一般语法 -action := [Prepare | Start | Stop | PrepareMergeBack | StartMergeBack | Cleanup | Schemadiff] --- 每个 action 都有自己的选项,可以用来控制其行为。 +Branch命令的一般语法如下: + +``` +Branch [with ('key1'='value1', 'key2'='value2', 'key3'='value3');] ``` -# **Actions** +其中**Action**可以是以下之一: +- **create** +- **diff** +- **prepare_merge_back** +- **merge_back** +- **show** +- **delete** -branch命令包含 Prepare、Start、Stop、PrepareMergeBack、StartMergeBack 和 SchemaDiff 命令。 +--- -如果您的目标只是复制一个数据库,请专注于 'Prepare'、'Start' 和 'Stop' 命令。这些命令可用于完成数据库复制工作流。 +## 动作概述 -'PrepareMergeBack' 和 'StartMergeBack' 命令通常用于将目标数据库的Schema与源数据库合并。 +- **create**: 通过将数据库schema从source复制到target数据库来初始化分支工作流。 +- **diff**: 显示source和target数据库schema之间的差异。 +- **prepare_merge_back**: 准备将target的schema更改合并回source数据库。 +- **merge_back**: 执行schema更改的合并。 +- **show**: 显示分支元数据。 +- **delete**: 删除分支元数据。 -在讲解branch功能的教程之前,我们将使用以下环境作为教程的主要示例。执行以下 SQL 命令创建数据库和表: -```sql -mysql -h127.0.0.1 -P15306 -e 'create database if not exists branch_source' - -mysql -h127.0.0.1 -P15306 -e 'create table if not exists branch_source.product( - sku varchar(128), - description varchar(128), - price bigint, - primary key(sku) - ) ENGINE=InnoDB; - create table if not exists branch_source.customer( - customer_id bigint not null auto_increment, - email varchar(128), - primary key(customer_id) - ) ENGINE=InnoDB; - create table if not exists branch_source.corder( - order_id bigint not null auto_increment, - customer_id bigint, - sku varchar(128), - price bigint, - primary key(order_id) - ) ENGINE=InnoDB; - CREATE TABLE if not exists branch_source.user ( - id INT AUTO_INCREMENT PRIMARY KEY auto_increment, - name VARCHAR(255) NOT NULL - ) ENGINE=InnoDB;' -``` +--- -## **Prepare** +## 先决条件 + +### 创建集群 + +每个分支对应一个MySQL实例。因此,您需要两个Wescale集群:一个作为source,另一个作为target。您可以使用以下命令启动这两个Wescale集群。如果您已经在本地运行了一个Wescale集群,可以直接启动一个新的集群。 + +在这里,我们将使用端口**15306**上的Wescale集群作为source,另一个在端口**15307**上作为target。 -在Prepare阶段,vtctld 将任务和相应的 table_rules 插入到 mysql.branch_jobs 和 mysql.branch_table_rules 表中。您可以通过修改 mysql.branch_table_rules 中的信息来自定义过滤器。 -``` -Branch -- ---source_database= ---target_database= ---workflow_name= -[--source_topo_url=] -[--tablet_types=] -[--cells=] -[--include=] -[--exclude=] -[--skip_copy_phase =] -[--stop_after_copy=] -[--default_filter_rules=] -Prepare -``` -+ source_database : 指定源数据库名称。 -+ target_database : 指定目标数据库名称(如果不存在,将自动创建)。 -+ workflow_name : 指定branch工作流名称(用于查询branch状态)。 -+ source_topo_url : 源集群的拓扑服务器 URL(默认为本地拓扑服务器)。 -+ tablet_types : 数据源 tablet 类型(如 REPLICA、PRIMARY 等)。 -+ include : 指定要从源数据库中包含的表。 -+ exclude : 指定要从源数据库中排除的表。 -+ skip_copy_phase : 仅复制模式,不复制数据。 -+ stop_after_copy : 如果为 false,则在复制完成后持续同步源和目标之间的数据。 -+ default_filter_rules : 在 'where' 子句中附加条件以过滤特定数据。 - -### **用法** ```shell -vtctlclient --server localhost:15999 Branch -- --source_database branch_source --target_database branch_target --skip_copy_phase=false --stop_after_copy=false --workflow_name - branch_test --default_filter_rules "RAND()<0.1" Prepare - -successfully create branch workflow : branch_test sourceDatabase : branch_source targetDatabase : branch_target -rules : -[source_table:"corder" target_table:"corder" filtering_rule:"select * from corder WHERE RAND()<0.1" create_ddl:"copy" merge_ddl:"copy" default_filter_rules:"RAND()<0.1"] -[source_table:"customer" target_table:"customer" filtering_rule:"select * from customer WHERE RAND()<0.1" create_ddl:"copy" merge_ddl:"copy" default_filter_rules:"RAND()<0.1"] -[source_table:"product" target_table:"product" filtering_rule:"select * from product WHERE RAND()<0.1" create_ddl:"copy" merge_ddl:"copy" default_filter_rules:"RAND()<0.1"] -[source_table:"user" target_table:"user" filtering_rule:"select * from `user` WHERE RAND()<0.1" create_ddl:"copy" merge_ddl:"copy" default_filter_rules:"RAND()<0.1"] +docker network create wescale-network + +# Source集群 +docker run -itd --network wescale-network --name mysql-server \ + -p 3306:3306 \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_ROOT_HOST=% \ + -e MYSQL_LOG_CONSOLE=true \ + mysql/mysql-server:8.0.32 \ + --bind-address=0.0.0.0 \ + --port=3306 \ + --log-bin=binlog \ + --gtid_mode=ON \ + --enforce_gtid_consistency=ON \ + --log_replica_updates=ON \ + --binlog_format=ROW + +docker run -itd --network wescale-network --name wescale \ + -p 15306:15306 \ + -w /vt/examples/wesql-server \ + -e MYSQL_ROOT_USER=root \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_PORT=3306 \ + -e MYSQL_HOST=mysql-server \ + -e CONFIG_PATH=/vt/config/wescale/default \ + apecloud/apecloud-mysql-scale:0.3.8-alpha4 \ + /vt/examples/wesql-server/init_single_node_cluster.sh + +# Target集群 +docker run -itd --network wescale-network --name mysql-server3307 \ + -p 3307:3307 \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_ROOT_HOST=% \ + -e MYSQL_LOG_CONSOLE=true \ + mysql/mysql-server:8.0.32 \ + --bind-address=0.0.0.0 \ + --port=3307 \ + --log-bin=binlog \ + --gtid_mode=ON \ + --enforce_gtid_consistency=ON \ + --log_replica_updates=ON \ + --binlog_format=ROW + +docker run -itd --network wescale-network --name wescale15307 \ + -p 15307:15307 \ + -w /vt/examples/wesql-server \ + -e MYSQL_ROOT_USER=root \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_PORT=3307 \ + -e MYSQL_HOST=mysql-server3307 \ + -e VTGATE_MYSQL_PORT=15307 \ + -e CONFIG_PATH=/vt/config/wescale/default \ + apecloud/apecloud-mysql-scale:0.3.8-alpha4 \ + /vt/examples/wesql-server/init_single_node_cluster.sh ``` -## **data transformer** +### 初始化数据 + +在连接到source Wescale后,运行以下命令: -在数据流开始之前,您可以通过修改 mysql.branch_table_rules 表中的 filtering_rule 属性来执行数据转换。我们兼容 [gofakeit](https://github.com/brianvoe/gofakeit) 中的内容。您可以使用 gofakeit_generate 生成特定字符串或使用 gofakeit_bytype 生成特定类型。 +```shell +docker exec -it wescale mysql -h127.0.0.1 -P15306 +``` -过滤规则将在源 MySQL 实例上执行,并在 vttablet 上进行转换和过滤。 +创建以下数据库和表: -### **用法** ```sql -update mysql.branch_table_rules set filtering_rule='select id, gofakeit_generate(\'{firstname}:###:???:{moviename}\') as name from user WHERE id<=100' where source_table_name = 'user'; -update mysql.branch_table_rules set filtering_rule='select customer_id, gofakeit_bytype(\'regex\',\'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$\') as email from `customer` WHERE customer_id<=100' where source_table_name = 'customer'; -update mysql.branch_table_rules set filtering_rule='select sku,description,gofakeit_bytype(\'intrange\',110,150) as price,gofakeit_bytype(\'floatrange\',23.5,23.9) as weight from `product`' where source_table_name = 'product'; -update mysql.branch_table_rules set filtering_rule='SELECT order_id,gofakeit_bytype(\'bigint\') as customer_id,gofakeit_generate(\'{firstname}:###:???:{moviename}\') as sku,gofakeit_bytype(\'bigint\') as price FROM corder where customer_id<=100' where source_table_name = 'corder'; +DROP DATABASE IF EXISTS test_db1; +DROP DATABASE IF EXISTS test_db2; +DROP DATABASE IF EXISTS test_db3; +CREATE DATABASE test_db1; +CREATE DATABASE test_db2; + +CREATE TABLE test_db1.users ( + id INT PRIMARY KEY AUTO_INCREMENT, + username VARCHAR(50) NOT NULL, + email VARCHAR(100) UNIQUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE test_db2.source_orders ( + order_id INT PRIMARY KEY AUTO_INCREMENT, + customer_name VARCHAR(100) NOT NULL, + order_date DATE NOT NULL, + total_amount DECIMAL(10,2), + status VARCHAR(20) +); ``` -## **Start** - -`Start` 将在源端和目标端之间启动数据流。目标端将根据 table_rules 执行 ETL 操作。 +接下来,连接到target Wescale: -### **用法** ```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test Start +docker exec -it wescale15307 mysql -h127.0.0.1 -P15307 +``` + +创建以下数据库和表: -Start workflow:branch_test successfully. +```sql +DROP DATABASE IF EXISTS test_db1; +DROP DATABASE IF EXISTS test_db2; +DROP DATABASE IF EXISTS test_db3; +CREATE DATABASE test_db2; +CREATE DATABASE test_db3; + +CREATE TABLE test_db2.target_orders ( + order_id INT PRIMARY KEY AUTO_INCREMENT, + customer_name VARCHAR(100) NOT NULL +); + +CREATE TABLE test_db3.products ( + product_id INT PRIMARY KEY AUTO_INCREMENT, + product_name VARCHAR(200) NOT NULL, + price DECIMAL(10,2), + stock_quantity INT, + category VARCHAR(50), + last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); ``` -## **Stop** +--- -`Stop` 将停止先前的数据流,您可以使用 `Start` 命令再次启动数据流。 +## 基本用法 -### **用法** -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test Stop +在软件开发过程中,我们通常需要修改现有的数据库schema。然而,直接在生产环境中进行测试存在显著的安全风险。因此,通常会创建一个测试环境,以便在其中安全地测试schema修改,然后再将其应用回生产环境。在这里,我们将生产环境称为“source”,将测试环境称为“target”。 -Start workflow branch_test successfully -``` +如上所述,典型的工作流涉及三个主要过程:从source复制schema到target,在target中修改schema,以及将target的schema合并回source。 -注意:如果branch复制阶段已经完成且 stop_after_copy 设置为 true,则 Stop 功能将失效。 +### Schema复制 -## **SchemaDiff** +在连接到target Wescale后,复制之前检查可用的数据库: -`SchemaDiff` 显示两个数据库模式之间的差异。该工具有助于决定是否将更改合并回源数据库。 +```sql +SHOW DATABASES; +``` -### **用法** -```shell -mysql -h127.0.0.1 -P15306 -e 'alter table branch_target.product add column v2 int;' -mysql -h127.0.0.1 -P15306 -e 'alter table branch_target.product add column v3 int;' +要将数据库schema从source复制到target,请使用以下命令创建一个分支: + +```sql +Branch create with ( + 'source_host'='wescale', + 'source_port'='15306', + 'source_user'='root', + 'source_password'='passwd' +); +``` -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test schemadiff +*注意:有关详细参数解释,请参考本文件后面的命令参数部分。* -table product is diff -branch_target:name:"product" schema:"CREATE TABLE `product` (\n `sku` varchar(128) NOT NULL,\n `description` varchar(128) DEFAULT NULL,\n `price` bigint DEFAULT NULL,\n `v2` int DEFAULT NULL,\n `v3` int DEFAULT NULL,\n PRIMARY KEY (`sku`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci" primary_key_columns:"sku" type:"BASE TABLE" data_length:16384 -branch_source:name:"product" schema:"CREATE TABLE `product` (\n `sku` varchar(128) NOT NULL,\n `description` varchar(128) DEFAULT NULL,\n `price` bigint DEFAULT NULL,\n PRIMARY KEY (`sku`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci" primary_key_columns:"sku" type:"BASE TABLE" data_length:1589248 row_count:5294 +要查看当前的分支元数据,请使用: + +```sql +Branch show; ``` -## +您将看到分支状态为“created”。 -**PrepareMergeBack** +现在,再次检查可用的数据库,您会发现source的schema已被复制到target。 -`PrepareMergeBack` 将构建源数据库和目标数据库之间的差异,然后生成可执行的 DDL 并将其添加到 branch_table_rules 表中。 +### Schema修改 -### **用法** -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test PrepareMergeBack +假设我们需要修改target中的`test_db1.users`表,您可以运行: -PrepareMergeBack branch_test successfully -table: product entry: ALTER TABLE `product` ADD COLUMN `v2` int, ADD COLUMN `v3` int +```sql +ALTER TABLE test_db1.users ADD COLUMN new_col INT; ``` -## **StartMergeBack** +### Schema合并 -`StartMergeBack` 将使用 'online' 策略执行 PrepareMergeBack 阶段生成的 DDL。 +WeSQL中的Branch功能允许您将target的schema合并回source。我们提供的合并过程称为“覆盖”,这意味着target schema将覆盖source schema。 -### **用法** -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test StartMergeBack +要查看将source schema更新为与target匹配所需的DDL,请使用: -Start mergeBack branch_test successfully. uuid list: -[c057f330_b1e0_11ee_b7b2_5ea977d56bb7] +```sql +Branch prepare_merge_back; ``` -启动 StartMergeBack 后,我们会收到一个 OnlineDDL 的 UUID。然后可以使用该 UUID 和 `show vitess_migrations like [uuid]` 命令来查询 onlineDDL 的状态。 +如果一切准备就绪,分支状态将更新为“prepared”,表示准备好进行合并。 + +通过以下命令执行合并: -### **用法** ```sql -mysql> show vitess_migrations like 'c057f330_b1e0_11ee_b7b2_5ea977d56bb7' \G; +Branch merge_back; ``` -## **清理** +合并后,source中的schema应反映与target相同的结构。 -`Cleanup` 功能将删除与 workflow_name 相关的 `branch_jobs` 表和 `branch_table_rules` 表中的项目。 +--- -### **用法** -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test cleanup +## 高级 -cleanup workflow:branch_test successfully -``` +### 幂等性 + +Branch命令是幂等的。这意味着如果一个命令失败,只需重新执行该命令即可从中断处继续。 + +例如,`Branch create`命令涉及两个主要阶段:从source检索schema并将其应用于target。如果在抓取schema的过程中发生崩溃,只需重新执行`Branch create`命令,无需其他操作。 + +> 需要注意的是,`branch merge_back`命令的幂等性尚不完美。每次执行`branch merge_back`时,它将开始依次执行`branch prepare_merge_back`命令生成的“未合并” DDL(可通过`branch show`命令查看),并在执行后将其标记为“merged”。 **由于潜在的崩溃,可能会存在已执行但未标记为merged的DDL。检查这些DDL是我们计划在未来解决的任务。** + +### 命令参数解释 + +| 命令动作 | 参数 | 描述 | 默认值 | 必需 | +|------------------------|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|----------| +| `Branch create` | `name` | 分支的名称 | my_branch | 否 | +| | `source_host` | source数据库的主机 | | 是 | +| | `source_port` | source数据库的端口 | 3306 | 否 | +| | `source_user` | source数据库的用户名 | root | 否 | +| | `source_password` | source数据库的密码 | | 否 | +| | `include_databases` | 要处理的数据库白名单 | * | 否 | +| | `exclude_databases` | 要处理的数据库黑名单。系统数据库如information_schema、mysql、performance_schema和sys总是被排除在外。 | | 否 | +| `Branch diff` | `name` | 分支的名称 | my_branch | 否 | +| | `compare_objects` | 比较对象。应为`source_target`、`target_source`、`source_snapshot`、`snapshot_source`、`target_snapshot`、`snapshot_target`、`source_target`之一。
`source`指的是source的实时schema。
`target`指的是target的实时schema。
`snapshot`指的是分支创建时source的schema。 | target_source | 否 | +| `Branch prepare_merge_back` | `name` | 分支的名称 | my_branch | 否 | +| `Branch merge_back` | `name` | 分支的名称 | my_branch | 否 | +| `Branch show` | `name` | 分支的名称 | my_branch | 否 | +| | `show_option` | 显示选项。应为`status`、`snapshot`、`merge_back_ddl`之一。 | status | 否 | +| `Branch delete` | `name` | 分支的名称 | my_branch | 否 | + +### 状态转换 + +分支可以有以下状态: + +- **Init**: 创建分支后的初始状态。 +- **Fetched**: 快照已保存到target。 +- **Created**: 快照已应用到target。 +- **Preparing**: 正在生成合并回DDL。 +- **Prepared**: DDL已生成并保存,准备合并。 +- **Merging**: 正在将DDL应用于source。 +- **Merged**: 所有DDL已成功应用于source。 -## **gofakeit 函数** - -提供了 `gofakeit_generate` 和 `gofakeit_bytype` 函数,完全兼容 MySQL 的不同类型数据生成。 - -### **gofakeit_generate** - -`gofakeit_generate` 函数遵循 `gofakeit.generate` 的模式生成随机字符串。您可以在 [gofakeit](https://github.com/brianvoe/gofakeit) GitHub 页面上找到更多信息。 - -### **gofakeit_bytype** - -`gofakeit_bytype` 支持以下功能: - -| 类型 | 描述 | 用法示例 | -|--------------|---------------------------------------------|--------------------------------------| -| `tinyint` | 生成一个随机的 tinyint 类型整数。 | `gofakeit_bytype('tinyint')` | -| `smallint` | 生成一个随机的 smallint 类型整数。 | `gofakeit_bytype('smallint')` | -| `mediumint` | 生成一个随机的 mediumint 类型整数。 | `gofakeit_bytype('mediumint')` | -| `int` | 生成一个随机的 int 类型整数。 | `gofakeit_bytype('int')` | -| `integer` | `int` 类型的别名。 | `gofakeit_bytype('integer')` | -| `bigint` | 生成一个随机的 bigint 类型整数。 | `gofakeit_bytype('bigint')` | -| `float` | 生成一个随机的浮点数。 | `gofakeit_bytype('float')` | -| `double` | 生成一个随机的 double 类型数。 | `gofakeit_bytype('double')` | -| `decimal` | 生成一个随机的 decimal 类型数。 | `gofakeit_bytype('decimal', 5, 2)` | -| `date` | 生成一个随机日期。 | `gofakeit_bytype('date')` | -| `datetime` | 生成一个随机的日期时间。 | `gofakeit_bytype('datetime')` | -| `timestamp` | 生成一个随机的时间戳。 | `gofakeit_bytype('timestamp')` | -| `time` | 生成一个随机时间。 | `gofakeit_bytype('time')` | -| `year` | 生成一个随机年份。 | `gofakeit_bytype('year')` | -| `floatrange` | 生成一个在指定范围内的随机浮点数。 | `gofakeit_bytype('floatrange', 1.5, 10.0)` | -| `intrange` | 生成一个在指定范围内的随机整数。 | `gofakeit_bytype('intrange', 110, 150)` | -| `name` | 生成一个随机名称。 | `gofakeit_bytype('name')` | -| `address` | 生成一个随机地址。 | `gofakeit_bytype('address')` | -| `uuid` | 生成一个随机的 UUID。 | `gofakeit_bytype('uuid')` | -| `regex` | 生成一个符合正则表达式模式的字符串。 | `gofakeit_bytype('regex', '[a-zA-Z]{5}')` | \ No newline at end of file +![BranchStatus](images/BranchStatus.png) \ No newline at end of file diff --git a/doc-chinese/toturial/images/BranchStatus.png b/doc-chinese/toturial/images/BranchStatus.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc831c40ae9eaed0bc5b3881bb05fabd50988b5 GIT binary patch literal 118444 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 I>zopr0B>=v5dZ)H literal 0 HcmV?d00001 diff --git a/doc/toturial/08-Branch.md b/doc/toturial/08-Branch.md index 366169e908..237466cb49 100644 --- a/doc/toturial/08-Branch.md +++ b/doc/toturial/08-Branch.md @@ -1,603 +1,278 @@ ---- -title: Branch ---- - # Branch ## Overview -The Branch feature in WeSQL allows you to copy a database to current Wescale cluster or another Wescale cluster. This is particularly useful when you want to create a development database that mirrors your production environment. This guide explains how to use the Branch feature, including its commands and options. - -## General Syntax +The Branch feature in WeSQL allows you to copy a database from one Wescale cluster (the **source**) to another Wescale cluster (the **target**). This functionality is particularly useful for creating a development database that mirrors your production environment. This guide provides clear instructions on how to use the Branch feature, including its commands and options. -The `Branch` command is an umbrella command with several subcommands (`actions`) that define specific operations within the workflow. Each action has its own options to control its behavior. - -```shell -Branch -- - -action := [Prepare | Start | Stop | SchemaDiff | PrepareMergeBack | StartMergeBack | Cleanup ] -``` +**Source** refers to the Wescale cluster from which schema is copied, while **Target** refers to the Wescale cluster where the schema will be copied to. -## Actions Overview - -- **Prepare**: Initializes the branch workflow by copying the database schema from the source to the target database. -- **Start**: Begins data streaming from the source to the target database. -- **Stop**: Halts the data streaming process. -- **SchemaDiff**: Displays differences between the source and target database schemas. -- **PrepareMergeBack**: Prepares to merge schema changes from the target back to the source database. -- **StartMergeBack**: Executes the merge of schema changes. -- **Cleanup**: Cleans up the branch workflow - -For a simple database copy, focus on the `Prepare`, `PrepareMergeBack`, `StartMergeBack`, and `Cleanup` commands. +--- -## Step1: Example Scenario Setup +## General Syntax -### Create Sample Tables -We'll use a sample environment to demonstrate the Branch feature. Execute the following commands to create the source database and tables: +The general syntax for Branch commands is as follows: -```sql -CREATE DATABASE IF NOT EXISTS branch_source; - -USE branch_source; - -CREATE TABLE IF NOT EXISTS branch_source.user ( - id INT AUTO_INCREMENT PRIMARY KEY, - name VARCHAR(255) NOT NULL - ) ENGINE=InnoDB; - -CREATE TABLE IF NOT EXISTS branch_source.customer ( - customer_id BIGINT NOT NULL AUTO_INCREMENT, - email VARCHAR(128), - PRIMARY KEY(customer_id) - ) ENGINE=InnoDB; - -CREATE TABLE IF NOT EXISTS branch_source.product ( - sku VARCHAR(128), - description VARCHAR(128), - price BIGINT, - PRIMARY KEY(sku) - ) ENGINE=InnoDB; - -CREATE TABLE IF NOT EXISTS branch_source.corder ( - order_id BIGINT NOT NULL AUTO_INCREMENT, - customer_id BIGINT, - sku VARCHAR(128), - price BIGINT, - PRIMARY KEY(order_id) - ) ENGINE=InnoDB; ``` - -### Insert Sample Data - -You can then insert some sample data into the tables: -```sql --- Insert data into user table (500 rows) -INSERT INTO branch_source.user (name) -SELECT CONCAT('user_', n) -FROM ( - SELECT ROW_NUMBER() OVER () AS n - FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) a - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) b - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) c - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) d -) AS numbers -WHERE n <= 500; - --- Insert data into customer table (200 rows), linking to user table -INSERT INTO branch_source.customer (email, customer_id) -SELECT CONCAT('customer_', n, '@example.com'), n -FROM ( - SELECT ROW_NUMBER() OVER () AS n - FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) a - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) b - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) c - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) d -) AS numbers -WHERE n <= 200; - --- Insert data into product table (1000 rows) -INSERT INTO branch_source.product (sku, description, price) -SELECT CONCAT('sku_', n), CONCAT('product_', n), FLOOR(RAND() * 1000 + 1) -- Random price between 1 and 1000 -FROM ( - SELECT ROW_NUMBER() OVER () AS n - FROM (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) a - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) b - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) c - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) d - CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) e -) AS numbers -WHERE n <= 1000; - --- Insert data into corder table (10000 rows), linking to customer and product tables -INSERT INTO branch_source.corder (customer_id, sku, price) -SELECT c.customer_id, p.sku, p.price -FROM ( - SELECT ROW_NUMBER() OVER () AS n, customer_id - FROM branch_source.customer - ORDER BY RAND() -- Randomly select customers -) c -JOIN ( - SELECT ROW_NUMBER() OVER () AS n, sku, price - FROM branch_source.product - ORDER BY RAND() -- Randomly select products -) p ON (c.n % 1000) + 1 = p.n -- Ensure every product is ordered -CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) a -CROSS JOIN (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) b -WHERE c.n <= 10000; +Branch [with ('key1'='value1', 'key2'='value2', 'key3'='value3');] ``` -With the tables and data in place, you can now proceed with the Branch feature, or try out the sample queries provided in the [Example Business Queries](#example-business-queries) section. - -### Prepare Branch Command Client +Where the **Action** can be one of the following: +- **create** +- **diff** +- **prepare_merge_back** +- **merge_back** +- **show** +- **delete** -We need to use `vtctlclient` to execute the `Branch` command. - -If you are using `kubernetes`, you can enter the `wesql-vtcontroller` Pod to run the `vtctlclient` command: -```shell -$ kubectl get po -NAME READY STATUS RESTARTS AGE -mycluster-wesql-0-0 2/2 Running 0 25m -mycluster-wesql-1-0 1/1 Running 1 (22m ago) 25m -mycluster-wesql-2-0 1/1 Running 1 (22m ago) 25m -wesql-vtcontroller-0 2/2 Running 0 25m -wesql-vtgate-87f69955c-h62nx 1/1 Running 0 25m -wesql-vtgate-87f69955c-t7lbg 1/1 Running 0 25m - -$ kubectl exec -it wesql-vtcontroller-0 -c vtctld -- sh -/vt # vtctlclient -v -WeScale version: 0.3.7 (git revision cb93f4e1dacce0882dde6ec27ee409c011684034 branch 'HEAD') built on Tue Oct 22 03:40:00 UTC 2024 by root@buildkitsandbox using go1.20.2 linux/amd64 -``` +--- -If you are using `docker`, you can enter the `wescale` container to run the `vtctlclient` command: -```shell -ubuntu $ docker exec -it wescale bash -[root@3c089b5e14fc wesql-server]$ -[root@3c089b5e14fc wesql-server]$ vtctlclient -v -WeScale version: 0.3.7 (git revision cb93f4e1dacce0882dde6ec27ee409c011684034 branch 'HEAD') built on Tue Oct 22 03:40:00 UTC 2024 by root@buildkitsandbox using go1.20.2 linux/amd64 -``` +## Actions Overview -## Step2: Create a Branch Workflow +- **create**: Initializes the branch workflow by copying the database schema from the source to the target database. +- **diff**: Displays differences between the source and target database schemas. +- **prepare_merge_back**: Prepares to merge schema changes from the target back to the source database. +- **merge_back**: Executes the merge of schema changes. +- **show**: Displays the branch metadata. +- **delete**: Deletes the branch metadata. -The `Prepare` action create a branch workflow by copying the schema from the source database to the target database. +--- +## Prerequisites -### Example -Let's copy the schema from the `branch_source` database to the `branch_target` database. +### Create Cluster -`skip_copy_phase=false` and `stop_after_copy=false` means that we'll copy both schema and data. +Each branch corresponds to a MySQL instance. Therefore, you need two Wescale clusters: one acting as the source and the other as the target. You can start the two Wescale clusters with the following commands. If you already have a Wescale cluster running locally, you can just start a new one. +Here, we will use the Wescale cluster on port **15306** as the source and another on port **15307** as the target. ```shell -vtctlclient --server localhost:15999 Branch -- \ - --source_database branch_source \ - --target_database branch_target \ - --workflow_name branch_test \ - --skip_copy_phase=false \ - --stop_after_copy=false \ -Prepare -``` - -**Output:** +docker network create wescale-network + +# Source cluster +docker run -itd --network wescale-network --name mysql-server \ + -p 3306:3306 \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_ROOT_HOST=% \ + -e MYSQL_LOG_CONSOLE=true \ + mysql/mysql-server:8.0.32 \ + --bind-address=0.0.0.0 \ + --port=3306 \ + --log-bin=binlog \ + --gtid_mode=ON \ + --enforce_gtid_consistency=ON \ + --log_replica_updates=ON \ + --binlog_format=ROW + +docker run -itd --network wescale-network --name wescale \ + -p 15306:15306 \ + -w /vt/examples/wesql-server \ + -e MYSQL_ROOT_USER=root \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_PORT=3306 \ + -e MYSQL_HOST=mysql-server \ + -e CONFIG_PATH=/vt/config/wescale/default \ + apecloud/apecloud-mysql-scale:0.3.8-alpha4 \ + /vt/examples/wesql-server/init_single_node_cluster.sh + +# Target cluster +docker run -itd --network wescale-network --name mysql-server3307 \ + -p 3307:3307 \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_ROOT_HOST=% \ + -e MYSQL_LOG_CONSOLE=true \ + mysql/mysql-server:8.0.32 \ + --bind-address=0.0.0.0 \ + --port=3307 \ + --log-bin=binlog \ + --gtid_mode=ON \ + --enforce_gtid_consistency=ON \ + --log_replica_updates=ON \ + --binlog_format=ROW + +docker run -itd --network wescale-network --name wescale15307 \ + -p 15307:15307 \ + -w /vt/examples/wesql-server \ + -e MYSQL_ROOT_USER=root \ + -e MYSQL_ROOT_PASSWORD=passwd \ + -e MYSQL_PORT=3307 \ + -e MYSQL_HOST=mysql-server3307 \ + -e VTGATE_MYSQL_PORT=15307 \ + -e CONFIG_PATH=/vt/config/wescale/default \ + apecloud/apecloud-mysql-scale:0.3.8-alpha4 \ + /vt/examples/wesql-server/init_single_node_cluster.sh +``` + +### Initialize Data + +After connecting to the source Wescale, run the following commands: -``` -successfully create branch workflow : branch_test sourceDatabase : branch_source targetDatabase : branch_target -rules : -[source_table:"corder" target_table:"corder" filtering_rule:"select * from corder " create_ddl:"copy" merge_ddl:"copy"] -[source_table:"customer" target_table:"customer" filtering_rule:"select * from customer " create_ddl:"copy" merge_ddl:"copy"] -[source_table:"product" target_table:"product" filtering_rule:"select * from product " create_ddl:"copy" merge_ddl:"copy"] -[source_table:"user" target_table:"user" filtering_rule:"select * from `user` " create_ddl:"copy" merge_ddl:"copy"] -``` - -The output shows that the branch workflow `branch_test` has been created. Now you can verify that the `branch_target` database has been created: -```sql -mysql> show databases; -+--------------------+ -| Database | -+--------------------+ -| branch_source | -| branch_target | -| information_schema | -| mysql | -| performance_schema | -| sys | -+--------------------+ -6 rows in set (0.00 sec) -``` - - -### Optional Parameters -

-Optional Parameters - -For Advanced usage, you can use the following syntax: ```shell -Branch -- \ - --source_database= \ - --target_database= \ - --workflow_name= \ - [--source_topo_url=] \ - [--tablet_types=] \ - [--cells=] \ - [--include=] \ - [--exclude=] \ - [--skip_copy_phase=] \ - [--stop_after_copy=] \ - [--default_filter_rules=] \ -Prepare +docker exec -it wescale mysql -h127.0.0.1 -P15306 ``` -**Options** - -- `--source_database`: Name of the source database. -- `--target_database`: Name of the target database (created if it doesn't exist). -- `--workflow_name`: Identifier for the branch workflow. -- `--source_topo_url`: URL of the source cluster's topology server (defaults to local). -- `--tablet_types`: Types of tablets to use as data sources (e.g., `REPLICA`, `PRIMARY`). -- `--include`: Tables to include from the source database. -- `--exclude`: Tables to exclude from the source database. -- `--skip_copy_phase`: If `true`, only copies the schema without data. -- `--stop_after_copy`: If `true`, stops data synchronization after the initial copy. -- `--default_filter_rules`: Conditions to filter data during copying. - -
- -## Step3: Data Streaming and Transformation - -Once `Prepare` command is executed, you can define data transformation rules for each table in the `mysql.branch_table_rules` table. -This allows you to filter, transform, or generate mock data before streaming it to the target database. -All you need to do is update the `filtering_rule` column in the `branch_table_rules` table. - -### Example +Create the following databases and tables: ```sql -UPDATE mysql.branch_table_rules -SET filtering_rule='SELECT id, gofakeit_generate(''{firstname}:###:???:{moviename}'') AS name FROM user' -WHERE source_table_name = 'user' and workflow_name='branch_test'; - -UPDATE mysql.branch_table_rules -SET filtering_rule='SELECT customer_id, gofakeit_bytype(''regex'', ''^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'') AS email FROM customer' -WHERE source_table_name = 'customer' and workflow_name='branch_test'; -``` - - -## Step4: Start Data Streaming - -Use the `Start` action to begin data streaming between the source and target databases. The target database applies ETL operations based on the defined `filtering_rule`. - -### Example +DROP DATABASE IF EXISTS test_db1; +DROP DATABASE IF EXISTS test_db2; +DROP DATABASE IF EXISTS test_db3; +CREATE DATABASE test_db1; +CREATE DATABASE test_db2; + +CREATE TABLE test_db1.users ( + id INT PRIMARY KEY AUTO_INCREMENT, + username VARCHAR(50) NOT NULL, + email VARCHAR(100) UNIQUE, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); + +CREATE TABLE test_db2.source_orders ( + order_id INT PRIMARY KEY AUTO_INCREMENT, + customer_name VARCHAR(100) NOT NULL, + order_date DATE NOT NULL, + total_amount DECIMAL(10,2), + status VARCHAR(20) +); +``` + +Next, connect to the target Wescale: ```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name=branch_test Start -``` - -**Output:** -``` -Start workflow: branch_test successfully. +docker exec -it wescale15307 mysql -h127.0.0.1 -P15307 ``` -Then you can insert some data into the source database and verify that it's copied to the target database. -You can see that the data is transformed according to the rules defined in the `branch_table_rules` table. +Create the following databases and tables: -Since `gofakeit_generate(''{firstname}:###:???:{moviename}'') AS name` is used for the `user` table, the `name` column is populated with random names. -It's very convenient for generating mock data in the target branch for testing purposes. -> For more information on `gofakeit` functions, see the [Using `gofakeit` Functions in Data Streaming and Transformation](#using-gofakeit-functions-in-data-streaming-and-transformation) section. ```sql -mysql> select * from branch_source.user; - -mysql> select * from branch_target.user; - -mysql> select * from branch_source.customer; - -mysql> select * from branch_target.customer; -``` - -
-Syntax -Branch -- --workflow_name=${workflow_name} Start -
- - -## Step5: Stop Data Streaming - -The `Stop` action halts the data streaming process. Restart it later using the `Start` action if needed. -### Example - -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test Stop +DROP DATABASE IF EXISTS test_db1; +DROP DATABASE IF EXISTS test_db2; +DROP DATABASE IF EXISTS test_db3; +CREATE DATABASE test_db2; +CREATE DATABASE test_db3; + +CREATE TABLE test_db2.target_orders ( + order_id INT PRIMARY KEY AUTO_INCREMENT, + customer_name VARCHAR(100) NOT NULL +); + +CREATE TABLE test_db3.products ( + product_id INT PRIMARY KEY AUTO_INCREMENT, + product_name VARCHAR(200) NOT NULL, + price DECIMAL(10,2), + stock_quantity INT, + category VARCHAR(50), + last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP +); ``` -**Output:** -``` -Stop workflow: branch_test successfully. -``` - -**Note:** If `stop_after_copy` was set to `true` during the `Prepare` action and the data copy is complete, the `Stop` command will have no effect. - - -
-Syntax -Branch -- --workflow_name=${workflow_name} Stop -
+--- +## Basic Usage -## Step6: View Schema Differences +In the process of software development, we often need to modify the existing database schema. However, testing directly in the production environment poses significant security risks. Thus, it's common to create a testing environment where schema modifications can be safely tested before being applied back to the production environment. Here, we refer to the production environment as the "source" and the testing environment as the "target." -Use the `SchemaDiff` action to display differences between the source and target database schemas. This helps decide whether to merge schema changes back into the source database. +As described above, a typical workflow involves three major processes: copying schema from source to target, schema modification in target, and merging target schema back to source. -### Example +### Schema Copy -Assuming you've made schema changes to the target database: +After connecting to the target Wescale, check the available databases before copying: ```sql -mysql> # Since OnlineDDL is enabled, it return the UUID of the OnlineDDL Job. OnlineDDL runs asynchronously, so you may need to wait for it to complete. -mysql> ALTER TABLE branch_target.product ADD COLUMN v2 INT; -+--------------------------------------+ -| uuid | -+--------------------------------------+ -| 63ed2d8f_7c09_11ef_82e1_0aa7bf255933 | -+--------------------------------------+ -1 row in set (0.02 sec) - - -mysql> # Since OnlineDDL is enabled, it return the UUID of the OnlineDDL Job. OnlineDDL runs asynchronously, so you may need to wait for it to complete. -mysql> ALTER TABLE branch_target.product ADD COLUMN v3 INT; -+--------------------------------------+ -| uuid | -+--------------------------------------+ -| 67dd9224_7c09_11ef_82e1_0aa7bf255933 | -+--------------------------------------+ -1 row in set (0.01 sec) - -mysql> # Check the table schema and make sure the OnlineDDL is completed. -mysql> show create table branch_target.product\G -*************************** 1. row *************************** - Table: product -Create Table: CREATE TABLE `product` ( - `sku` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, - `description` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, - `price` bigint DEFAULT NULL, - `v2` int DEFAULT NULL, - `v3` int DEFAULT NULL, - PRIMARY KEY (`sku`) -) ENGINE=SMARTENGINE DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci -1 row in set (0.01 sec) -``` - -Then run the `SchemaDiff` action to compare the source and target database schemas: -```bash -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test SchemaDiff --compare_objects=source_target --output_type=ddl -``` - -You can see that the target side has two additional columns `v2` and `v3` in the `product` table compared to the source side. -**Output:** -``` -The DDLs required to transform from the source schema to the target schema are as follows: -alter table product add column v2 int, add column v3 int -``` - -
-Syntax - -```shell -Branch -- --workflow_name=${workflow_name} SchemaDiff \ -[--compare_objects=] \ -[--output_type=] \ -``` -**compare_objects** -(default `source_target`) -- `source`: Source schema, may be changed due to other branches merged. -- `target`: Target schema. -- `snapshot`: Snapshot of source schema when starting branch. - -**output_type** -(default `create_table`) -- `create_table`: Show difference of create table SQLs of compare objects. -- `ddl`: Show DDls used to convert from first compare object to second compare object. -- `conflict`: Show whether schema of first compare object can be merged to schema of second compare object without conflicts. - -
- -## Step7: PrepareMergeBack - -The `PrepareMergeBack` action is a prerequisite for the `StartMergeBack` action. -It generates DDL statements that will be executed at the source side, so that the schema changes made at the target side can be merged back to the source side. - -Since `product` table on the target side has two additional columns `v2` and `v3`, the DDL statement will be generated to add these two columns to the source side. - -### Example - -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test PrepareMergeBack --merge_option=override -``` - -**Output:** -``` -Table: product -DDL: ALTER TABLE `product` ADD COLUMN `v2` int, ADD COLUMN `v3` int -PrepareMergeBack (mergeOption=override) branch_test successfully -``` - - -
-Syntax - -```shell -Branch -- --workflow_name=${workflow_name} PrepareMergeBack \ -[--merge_option=] \ -``` -**merge_option** -(default `override`) -- `override`: Override the source schema with the target schema and output the required DDL. -- `diff`: Merge the target schema into the source schema and output the required DDL. You can use the `SchemaDiff` command to check for conflicts before merging. - -
- - - -## Step8: StartMergeBack - -Use the `StartMergeBack` action to execute the DDL statements generated during `PrepareMergeBack`, applying schema changes to the source database using an online strategy. - -### Example - -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test StartMergeBack -``` - -**Output:** -``` -StartMergeBack for 'branch_test' completed successfully. UUIDs: -[c057f330_b1e0_11ee_b7b2_5ea977d56bb7] +SHOW DATABASES; ``` -Monitor the progress of the Online DDL using the provided UUID: +To copy the database schema from the source to the target, create a branch with the following command: ```sql -mysql> SHOW SCHEMA_MIGRATION LIKE 'c057f330_b1e0_11ee_b7b2_5ea977d56bb7'\G +Branch create with ( + 'source_host'='wescale', + 'source_port'='15306', + 'source_user'='root', + 'source_password'='passwd' +); ``` -When the Online DDL task is complete, the schema of source table should be the same as that of target table. +*Note: For detailed parameter explanations, refer to the command parameters section later in this document.* + +To view the current branch metadata, use: ```sql -mysql> desc branch_source.product; -+-------------+--------------+------+-----+---------+-------+ -| Field | Type | Null | Key | Default | Extra | -+-------------+--------------+------+-----+---------+-------+ -| sku | varchar(128) | NO | PRI | NULL | | -| description | varchar(128) | YES | | NULL | | -| price | bigint | YES | | NULL | | -| v2 | int | YES | | NULL | | -| v3 | int | YES | | NULL | | -+-------------+--------------+------+-----+---------+-------+ -5 rows in set (0.005 sec) +Branch show; ``` -
-Syntax -Branch -- --workflow_name=${workflow_name} StartMergeBack -
- - -## Step9: Cleanup a Branch Workflow - -The `Cleanup` action removes the metadata of branch workflow. The target database **will not** be deleted. +You'll see the branch status as "created". +And now, check the available databases again, you will find the source schema has been copied to target. -### Example +### Schema modification -```shell -vtctlclient --server localhost:15999 Branch -- --workflow_name branch_test Cleanup -``` +We suppose we need to modify the `test_db1.users` table, in the target, you could run: -**Output:** -``` -Cleanup for workflow 'branch_test' completed successfully. +```sql +ALTER TABLE test_db1.users ADD COLUMN new_col INT; ``` -
-Syntax -Branch -- --workflow_name=${workflow_name} Cleanup -
+### Schema Merge -## Appendix +The Branch functionality in WeSQL allows you to merge the target's schema back to the source. The merging process we provide is called "override," which means that the target schema will overwrite the source schema. -### Using `gofakeit` Functions in Data Streaming and Transformation - -The Branch feature supports `gofakeit_generate` and `gofakeit_bytype` functions for data generation, compatible with MySQL data types. -It only works with the `Branch` feature and is not available for general queries. - -**gofakeit_generate:** - -Generates random strings based on patterns. Refer to the [gofakeit documentation](https://github.com/brianvoe/gofakeit) for pattern syntax. - -**Example:** +To see the DDLs required to update the source schema to match the target, use: ```sql -SELECT gofakeit_generate('{firstname} {lastname}') AS full_name; +Branch prepare_merge_back; ``` -**gofakeit_bytype:** - -Generates random data based on specified types. - -#### Supported Types and Usage - -| Type | Description | Example Usage | -|--------------|----------------------------------------------------|---------------------------------------------| -| `tinyint` | Generates a random tiny integer. | `gofakeit_bytype('tinyint')` | -| `smallint` | Generates a random small integer. | `gofakeit_bytype('smallint')` | -| `mediumint` | Generates a random medium integer. | `gofakeit_bytype('mediumint')` | -| `int` | Generates a random integer. | `gofakeit_bytype('int')` | -| `integer` | Alias for `int`. | `gofakeit_bytype('integer')` | -| `bigint` | Generates a random big integer. | `gofakeit_bytype('bigint')` | -| `float` | Generates a random float. | `gofakeit_bytype('float')` | -| `double` | Generates a random double. | `gofakeit_bytype('double')` | -| `decimal` | Generates a random decimal. | `gofakeit_bytype('decimal', 5, 2)` | -| `date` | Generates a random date. | `gofakeit_bytype('date')` | -| `datetime` | Generates a random datetime. | `gofakeit_bytype('datetime')` | -| `timestamp` | Generates a random timestamp. | `gofakeit_bytype('timestamp')` | -| `time` | Generates a random time. | `gofakeit_bytype('time')` | -| `year` | Generates a random year. | `gofakeit_bytype('year')` | -| `floatrange` | Generates a random float within a specified range. | `gofakeit_bytype('floatrange', 1.5, 10.0)` | -| `intrange` | Generates a random integer within a range. | `gofakeit_bytype('intrange', 100, 200)` | -| `name` | Generates a random name. | `gofakeit_bytype('name')` | -| `address` | Generates a random address. | `gofakeit_bytype('address')` | -| `uuid` | Generates a random UUID. | `gofakeit_bytype('uuid')` | -| `regex` | Generates a string matching a regex pattern. | `gofakeit_bytype('regex', '[A-Z]{5}')` | - -**Example:** +If everything is prepared, the branch status will update to "prepared," indicating readiness to merge. + +Execute the merge with: ```sql -SELECT gofakeit_bytype('intrange', 1, 100) AS random_number; +Branch merge_back; ``` ----- +After merging, the schema in the source should reflect the same structure as in the target. -### Example Business Queries +--- -Here are some example queries that demonstrate typical business use cases for the given tables, along with explanations: +## Advanced -**1. Find the top 5 customers by total order value:** +### Idempotency -```sql -SELECT c.customer_id, c.email, SUM(co.price) AS total_spent -FROM branch_source.customer c -JOIN branch_source.corder co ON c.customer_id = co.customer_id -GROUP BY c.customer_id, c.email -ORDER BY total_spent DESC -LIMIT 5; -``` +Branch commands are idempotent. This means if a command fails, simply re-executing the command will continue from where it left off. -**2. Find the most popular product (most frequently ordered):** +For instance, the `Branch create` command involves two main phases: retrieving the schema from the source and applying it to the target. If a crash occurs while fetching the schema, just re-execute the `Branch create` command without additional operations. -```sql -SELECT p.sku, p.description, COUNT(co.order_id) AS order_count -FROM branch_source.product p -JOIN branch_source.corder co ON p.sku = co.sku -GROUP BY p.sku, p.description -ORDER BY order_count DESC -LIMIT 1; -``` +> It is important to note that the idempotency of the `branch merge_back` command is not yet perfect. Each time branch merge_back is executed, it begins by sequentially executing the "unmerged" DDLs generated by the `branch prepare_merge_back `command (viewable with the branch show command) and marks them as "merged" once executed. **Due to potential crashes, there might be DDLs that are executed but not marked as merged. Checking these DDLs is a task we plan to address in the future.** -**3. Find all orders made by a specific customer:** +### Command Parameter Explanation -```sql -SELECT co.order_id, co.sku, co.price -FROM branch_source.corder co -WHERE co.customer_id = 123; -- Replace 123 with the desired customer ID -``` +| Command Action | Parameter | Description | Default Value | Required | +|------------------------|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|----------| +| `Branch create` | `name` | Name of the branch | my_branch | No | +| | `source_host` | Host of the source database | | Yes | +| | `source_port` | Port of the source database | 3306 | No | +| | `source_user` | Username for the source database | root | No | +| | `source_password` | Password for the source database | | No | +| | `include_databases` | Whitelist of databases to process | * | No | +| | `exclude_databases` | Blacklist of databases to process. system databases like information_schema, mysql, performance_schema and sys are alwats excluded. | | No | +| `Branch diff` | `name` | Name of the branch | my_branch | No | +| | `compare_objects` | Comparison objects. Should be one of `source_target`, `target_source`, `source_snapshot`, `snapshot_source`, `target_snapshot`, `snapshot_target`, `source_target`.
`source` refers to the real-time schema of the source.
`target` refers to the real-time schema of the target.
`snapshot` refers to the schema of the source at the time the branch was created. | target_source | No | +| `Branch prepare_merge_back` | `name` | Name of the branch | my_branch | No | +| `Branch merge_back` | `name` | Name of the branch | my_branch | No | +| `Branch show` | `name` | Name of the branch | my_branch | No | +| | `show_option` | Options for display. Should be one of `status`, `snapshot`, `merge_back_ddl`. | status | No | +| `Branch delete` | `name` | Name of the branch | my_branch | No | -**4. Find the average order value:** +### State Transitions -```sql -SELECT AVG(price) AS average_order_value -FROM branch_source.corder; -``` +Branch can have the following states: -**5. Total revenue for the most popular product:** +- **Init**: Initial state after creating the branch. +- **Fetched**: Snapshot saved to the target. +- **Created**: Snapshot has been applied to the target. +- **Preparing**: Generating the merge back DDL. +- **Prepared**: DDL generated and saved, ready for merging. +- **Merging**: Applying DDL to the source. +- **Merged**: All DDLs have been applied to the source successfully. -```sql -SELECT SUM(co.price) AS total_revenue -FROM branch_source.corder co -WHERE co.sku = (SELECT sku FROM branch_source.corder GROUP BY sku ORDER BY COUNT(*) DESC LIMIT 1); -``` +![BranchStatus](images/BranchStatus.png) diff --git a/doc/toturial/images/BranchStatus.png b/doc/toturial/images/BranchStatus.png new file mode 100644 index 0000000000000000000000000000000000000000..bdc831c40ae9eaed0bc5b3881bb05fabd50988b5 GIT binary patch literal 118444 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 I>zopr0B>=v5dZ)H literal 0 HcmV?d00001 From 66eaf220bef3b6c58de15b3a99a86065b123db13 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 11 Dec 2024 12:43:55 +0800 Subject: [PATCH 10/13] fix: branch default name --- doc-chinese/toturial/08-Branch.md | 12 ++++++------ doc/toturial/08-Branch.md | 12 ++++++------ endtoend/branch/branch_test.go | 18 +++++++++--------- go/vt/vtgate/branch/target_mysql_service.go | 4 ++-- go/vt/vtgate/engine/branch_primitive.go | 2 +- 5 files changed, 24 insertions(+), 24 deletions(-) diff --git a/doc-chinese/toturial/08-Branch.md b/doc-chinese/toturial/08-Branch.md index 2187210261..1d5c719dcb 100644 --- a/doc-chinese/toturial/08-Branch.md +++ b/doc-chinese/toturial/08-Branch.md @@ -248,20 +248,20 @@ Branch命令是幂等的。这意味着如果一个命令失败,只需重新 | 命令动作 | 参数 | 描述 | 默认值 | 必需 | |------------------------|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|----------| -| `Branch create` | `name` | 分支的名称 | my_branch | 否 | +| `Branch create` | `name` | 分支的名称 | origin | 否 | | | `source_host` | source数据库的主机 | | 是 | | | `source_port` | source数据库的端口 | 3306 | 否 | | | `source_user` | source数据库的用户名 | root | 否 | | | `source_password` | source数据库的密码 | | 否 | | | `include_databases` | 要处理的数据库白名单 | * | 否 | | | `exclude_databases` | 要处理的数据库黑名单。系统数据库如information_schema、mysql、performance_schema和sys总是被排除在外。 | | 否 | -| `Branch diff` | `name` | 分支的名称 | my_branch | 否 | +| `Branch diff` | `name` | 分支的名称 | origin | 否 | | | `compare_objects` | 比较对象。应为`source_target`、`target_source`、`source_snapshot`、`snapshot_source`、`target_snapshot`、`snapshot_target`、`source_target`之一。
`source`指的是source的实时schema。
`target`指的是target的实时schema。
`snapshot`指的是分支创建时source的schema。 | target_source | 否 | -| `Branch prepare_merge_back` | `name` | 分支的名称 | my_branch | 否 | -| `Branch merge_back` | `name` | 分支的名称 | my_branch | 否 | -| `Branch show` | `name` | 分支的名称 | my_branch | 否 | +| `Branch prepare_merge_back` | `name` | 分支的名称 | origin | 否 | +| `Branch merge_back` | `name` | 分支的名称 | origin | 否 | +| `Branch show` | `name` | 分支的名称 | origin | 否 | | | `show_option` | 显示选项。应为`status`、`snapshot`、`merge_back_ddl`之一。 | status | 否 | -| `Branch delete` | `name` | 分支的名称 | my_branch | 否 | +| `Branch delete` | `name` | 分支的名称 | origin | 否 | ### 状态转换 diff --git a/doc/toturial/08-Branch.md b/doc/toturial/08-Branch.md index 237466cb49..58f73d67e9 100644 --- a/doc/toturial/08-Branch.md +++ b/doc/toturial/08-Branch.md @@ -248,20 +248,20 @@ For instance, the `Branch create` command involves two main phases: retrieving t | Command Action | Parameter | Description | Default Value | Required | |------------------------|-------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|----------| -| `Branch create` | `name` | Name of the branch | my_branch | No | +| `Branch create` | `name` | Name of the branch | origin | No | | | `source_host` | Host of the source database | | Yes | | | `source_port` | Port of the source database | 3306 | No | | | `source_user` | Username for the source database | root | No | | | `source_password` | Password for the source database | | No | | | `include_databases` | Whitelist of databases to process | * | No | | | `exclude_databases` | Blacklist of databases to process. system databases like information_schema, mysql, performance_schema and sys are alwats excluded. | | No | -| `Branch diff` | `name` | Name of the branch | my_branch | No | +| `Branch diff` | `name` | Name of the branch | origin | No | | | `compare_objects` | Comparison objects. Should be one of `source_target`, `target_source`, `source_snapshot`, `snapshot_source`, `target_snapshot`, `snapshot_target`, `source_target`.
`source` refers to the real-time schema of the source.
`target` refers to the real-time schema of the target.
`snapshot` refers to the schema of the source at the time the branch was created. | target_source | No | -| `Branch prepare_merge_back` | `name` | Name of the branch | my_branch | No | -| `Branch merge_back` | `name` | Name of the branch | my_branch | No | -| `Branch show` | `name` | Name of the branch | my_branch | No | +| `Branch prepare_merge_back` | `name` | Name of the branch | origin | No | +| `Branch merge_back` | `name` | Name of the branch | origin | No | +| `Branch show` | `name` | Name of the branch | origin | No | | | `show_option` | Options for display. Should be one of `status`, `snapshot`, `merge_back_ddl`. | status | No | -| `Branch delete` | `name` | Name of the branch | my_branch | No | +| `Branch delete` | `name` | Name of the branch | origin | No | ### State Transitions diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 3815bcbb89..9ad66efec0 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -378,8 +378,8 @@ func TestBranchBasic(t *testing.T) { rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) defer rows.Close() printBranchDiff(rows) - branchDiffContains(rows, "my_branch", "target_db", "", "CREATE DATABASE IF NOT EXISTS target_db") - branchDiffContains(rows, "mt_branch", "test_db4", "", "DROP DATABASE IF EXISTS test_db4") + assert.Equal(t, true, branchDiffContains(rows, "origin", "target_db", "", "CREATE DATABASE IF NOT EXISTS target_db")) + assert.Equal(t, true, branchDiffContains(rows, "origin", "test_db4", "", "DROP DATABASE IF EXISTS test_db4")) // branch prepare merge back rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) @@ -437,16 +437,16 @@ func TestBranchBasicWithFailPoint(t *testing.T) { createCMD := getBranchCreateCMD(sourceHostToTarget, sourceCluster.MysqlPort, "root", "passwd", "*", "information_schema,mysql,performance_schema,sys") framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError", "return(true)") framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) - expectBranchStatus(t, "my_branch", "init") + expectBranchStatus(t, "origin", "init") framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchFetchSnapshotError") framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError", "return(true)") framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", createCMD) - expectBranchStatus(t, "my_branch", "fetched") + expectBranchStatus(t, "origin", "fetched") framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchApplySnapshotError") framework.ExecNoError(t, targetCluster.WescaleDb, createCMD) - expectBranchStatus(t, "my_branch", "created") + expectBranchStatus(t, "origin", "created") assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db1", "users")) assert.Equal(t, true, framework.CheckTableExists(t, targetCluster.WescaleDb, "test_db2", "orders")) @@ -476,22 +476,22 @@ func TestBranchBasicWithFailPoint(t *testing.T) { // branch prepare merge back framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError", "return(true)") framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchPrepareMergeBackCMD()) - expectBranchStatus(t, "my_branch", "preparing") + expectBranchStatus(t, "origin", "preparing") framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchInsertMergeBackDDLError") rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) defer rows2.Close() printBranchDiff(rows2) - expectBranchStatus(t, "my_branch", "prepared") + expectBranchStatus(t, "origin", "prepared") // branch merge framework.EnableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError", "return(true)") framework.ExecWithErrorContains(t, targetCluster.WescaleDb, "failpoint", getBranchMergeBackCMD()) - expectBranchStatus(t, "my_branch", "merging") + expectBranchStatus(t, "origin", "merging") framework.DisableFailPoint(t, targetCluster.WescaleDb, "vitess.io/vitess/go/vt/vtgate/branch/BranchExecuteMergeBackDDLError") framework.ExecNoError(t, targetCluster.WescaleDb, getBranchMergeBackCMD()) - expectBranchStatus(t, "my_branch", "merged") + expectBranchStatus(t, "origin", "merged") // no diff rows3 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchDiffCMD("source_target")) diff --git a/go/vt/vtgate/branch/target_mysql_service.go b/go/vt/vtgate/branch/target_mysql_service.go index d0c9804097..2f456f7c5e 100644 --- a/go/vt/vtgate/branch/target_mysql_service.go +++ b/go/vt/vtgate/branch/target_mysql_service.go @@ -173,14 +173,14 @@ func (t *TargetMySQLService) insertMergeBackDDLInBatches(name string, ddls *Bran insertSQLs := make([]string, 0) for database, databaseDiff := range ddls.Diffs { if databaseDiff.NeedDropDatabase { - ddl := fmt.Sprintf("DROP DATABASE IF EXISTS %s", database) + ddl := fmt.Sprintf("DROP DATABASE IF EXISTS `%s`", database) sql := getInsertMergeBackDDLSQL(name, database, "", ddl) insertSQLs = append(insertSQLs, sql) continue } if databaseDiff.NeedCreateDatabase { - ddl := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", database) + ddl := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", database) sql := getInsertMergeBackDDLSQL(name, database, "", ddl) insertSQLs = append(insertSQLs, sql) } diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index c855467297..cca10b5125 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -30,7 +30,7 @@ const ( ) var ( - DefaultBranchName = "my_branch" + DefaultBranchName = "origin" DefaultBranchTargetHost = "127.0.0.1" DefaultBranchTargetPort = -1 DefaultBranchTargetUser = "root" From 9eef7532c44ae9b3cd5147d21a34627b36ace7b2 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 11 Dec 2024 13:28:23 +0800 Subject: [PATCH 11/13] fix: fix testcase --- endtoend/branch/branch_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 9ad66efec0..385c9f509b 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -378,8 +378,8 @@ func TestBranchBasic(t *testing.T) { rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) defer rows.Close() printBranchDiff(rows) - assert.Equal(t, true, branchDiffContains(rows, "origin", "target_db", "", "CREATE DATABASE IF NOT EXISTS target_db")) - assert.Equal(t, true, branchDiffContains(rows, "origin", "test_db4", "", "DROP DATABASE IF EXISTS test_db4")) + assert.Equal(t, true, branchDiffContains(rows, "origin", "target_db", "", "CREATE DATABASE IF NOT EXISTS `target_db`")) + assert.Equal(t, true, branchDiffContains(rows, "origin", "test_db4", "", "DROP DATABASE IF EXISTS `test_db4`")) // branch prepare merge back rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD()) From 4aa9bd04a0ebdff7a9e2abb3adb0120ec99bdf25 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 11 Dec 2024 13:47:48 +0800 Subject: [PATCH 12/13] fix: fix output --- go/vt/vtgate/engine/branch_primitive.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go/vt/vtgate/engine/branch_primitive.go b/go/vt/vtgate/engine/branch_primitive.go index cca10b5125..4d4f6b54a6 100644 --- a/go/vt/vtgate/engine/branch_primitive.go +++ b/go/vt/vtgate/engine/branch_primitive.go @@ -612,11 +612,11 @@ func buildBranchDiffResult(name string, diff *branch.BranchDiff) *sqltypes.Resul rows := make([][]sqltypes.Value, 0) for db, dbDiff := range diff.Diffs { if dbDiff.NeedDropDatabase { - rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("drop database `%s`", db))) + rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("DROP DATABASE IF EXISTS `%s`", db))) continue } if dbDiff.NeedCreateDatabase { - rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("create database `%s`", db))) + rows = append(rows, sqltypes.BuildVarCharRow(name, db, "", fmt.Sprintf("CREATE DATABASE IF NOT EXISTS `%s`", db))) } for table, tableDiffs := range dbDiff.TableDDLs { for _, tableDiff := range tableDiffs { From 9a024c48334177c2b654ab69fecb4e177639e9a6 Mon Sep 17 00:00:00 2001 From: newborn22 <953950914@qq.com> Date: Wed, 11 Dec 2024 18:02:08 +0800 Subject: [PATCH 13/13] fix: fix testcase --- endtoend/branch/branch_test.go | 39 +++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/endtoend/branch/branch_test.go b/endtoend/branch/branch_test.go index 385c9f509b..1b3cafd4a6 100644 --- a/endtoend/branch/branch_test.go +++ b/endtoend/branch/branch_test.go @@ -237,8 +237,16 @@ func getBranchShowCMD(showOption string) string { return fmt.Sprintf(`Branch show with ('show_option'='%s');`, showOption) } -func printBranchDiff(rows *sql.Rows) { +type BranchDiffRow struct { + Name string + Database string + TableName string + DDL string +} + +func printBranchDiff(rows *sql.Rows) []BranchDiffRow { fmt.Printf("---------------------- start printing branch diff ----------------------\n") + rst := make([]BranchDiffRow, 0) for rows.Next() { var ( name string @@ -250,24 +258,21 @@ func printBranchDiff(rows *sql.Rows) { if err != nil { panic(err) } + rst = append(rst, BranchDiffRow{ + Name: name, + Database: database, + TableName: tableName, + DDL: ddl, + }) fmt.Printf("Branch Name: %s, Database: %s, Table: %s, DDL: %s\n", name, database, tableName, ddl) } fmt.Printf("---------------------- print branch diff end ----------------------\n") + return rst } -func branchDiffContains(rows *sql.Rows, name, database string, tableName string, ddl string) bool { - for rows.Next() { - var ( - nameTmp string - databaseTmp string - tableNameTmp string - ddlTmp string - ) - err := rows.Scan(&nameTmp, &databaseTmp, &tableNameTmp, &ddlTmp) - if err != nil { - panic(err) - } - if nameTmp == name && databaseTmp == database && tableNameTmp == tableName && ddlTmp == ddl { +func branchDiffContains(rows []BranchDiffRow, name, database string, tableName string, ddl string) bool { + for _, row := range rows { + if row.Name == name && row.Database == database && row.TableName == tableName && row.DDL == ddl { return true } } @@ -377,9 +382,9 @@ func TestBranchBasic(t *testing.T) { diffCMD := getBranchDiffCMD("source_target") rows := framework.QueryNoError(t, targetCluster.WescaleDb, diffCMD) defer rows.Close() - printBranchDiff(rows) - assert.Equal(t, true, branchDiffContains(rows, "origin", "target_db", "", "CREATE DATABASE IF NOT EXISTS `target_db`")) - assert.Equal(t, true, branchDiffContains(rows, "origin", "test_db4", "", "DROP DATABASE IF EXISTS `test_db4`")) + branchDiff := printBranchDiff(rows) + assert.Equal(t, true, branchDiffContains(branchDiff, "origin", "target_db", "", "CREATE DATABASE IF NOT EXISTS `target_db`")) + assert.Equal(t, true, branchDiffContains(branchDiff, "origin", "test_db4", "", "DROP DATABASE IF EXISTS `test_db4`")) // branch prepare merge back rows2 := framework.QueryNoError(t, targetCluster.WescaleDb, getBranchPrepareMergeBackCMD())