From 73b76f7a530834ffe8cbaabb040e414f9abb4b4d Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 14:27:46 -0400 Subject: [PATCH 01/24] feat(parser): update to Substrait v0.87.0 with enum arg support - Regenerate testcase parser grammar from v0.87.0 (adds enumArg rule: IDENTIFIER::enum syntax for function enum arguments) - Implement VisitEnumArg in visitor, returning types.Enum as FuncArg - Change CaseLiteral.Value from expr.Literal to types.FuncArg to accommodate enum values alongside regular literals - Fix getAggregateFuncTableSchema to index by ColumnIndex rather than arg position, preventing nil dereference when enum args precede column args (e.g. std_dev(SAMPLE::enum, col0::fp32)) - Skip std_dev/variance tests pending upstream fix for single-column compact aggregate format - Bump github.com/substrait-io/substrait dep to v0.87.0 Partially closes #220 Co-Authored-By: Claude Sonnet 4.6 --- go.mod | 2 +- go.sum | 2 + grammar/generate.go | 10 +- .../parser/baseparser/functestcase_lexer.go | 1316 +++++------ .../parser/baseparser/functestcase_parser.go | 2023 +++++++++-------- .../functestcaseparser_base_visitor.go | 4 + .../baseparser/functestcaseparser_visitor.go | 3 + testcases/parser/nodes.go | 97 +- testcases/parser/parse_test.go | 45 +- testcases/parser/visitor.go | 16 +- 10 files changed, 1897 insertions(+), 1621 deletions(-) diff --git a/go.mod b/go.mod index 586dcb4..43a1a84 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/google/go-cmp v0.7.0 github.com/google/uuid v1.6.0 github.com/stretchr/testify v1.10.0 - github.com/substrait-io/substrait v0.85.0 + github.com/substrait-io/substrait v0.87.0 github.com/substrait-io/substrait-protobuf/go v0.85.0 golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 google.golang.org/protobuf v1.36.6 diff --git a/go.sum b/go.sum index c532e96..660bce1 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/substrait-io/substrait v0.85.0 h1:ur2VBFhOpx/3RjVG0w5i8SpLHciLjATh27kAc2HPf5A= github.com/substrait-io/substrait v0.85.0/go.mod h1:MPFNw6sToJgpD5Z2rj0rQrdP/Oq8HG7Z2t3CAEHtkHw= +github.com/substrait-io/substrait v0.87.0 h1:40rP4LejyK6SNQlWz7NX6kQELf8cmScWMBGruWhN4io= +github.com/substrait-io/substrait v0.87.0/go.mod h1:MPFNw6sToJgpD5Z2rj0rQrdP/Oq8HG7Z2t3CAEHtkHw= github.com/substrait-io/substrait-protobuf/go v0.85.0 h1:zk6MtNWLtDSl8a7qCZRFH0+EIIXVrrd/hsgYK/SQTgM= github.com/substrait-io/substrait-protobuf/go v0.85.0/go.mod h1:hn+Szm1NmZZc91FwWK9EXD/lmuGBSRTJ5IvHhlG1YnQ= golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= diff --git a/grammar/generate.go b/grammar/generate.go index ec355b3..a1fac83 100644 --- a/grammar/generate.go +++ b/grammar/generate.go @@ -2,13 +2,13 @@ package grammar -// using substrait v0.85.0 +// using substrait v0.87.0 //go:generate wget -nc https://www.antlr.org/download/antlr-4.13.2-complete.jar -//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.85.0/grammar/SubstraitLexer.g4 -//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.85.0/grammar/SubstraitType.g4 -//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.85.0/grammar/FuncTestCaseLexer.g4 -//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.85.0/grammar/FuncTestCaseParser.g4 +//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.87.0/grammar/SubstraitLexer.g4 +//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.87.0/grammar/SubstraitType.g4 +//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.87.0/grammar/FuncTestCaseLexer.g4 +//go:generate wget https://raw.githubusercontent.com/substrait-io/substrait/v0.87.0/grammar/FuncTestCaseParser.g4 //go:generate -command antlr java -Xmx500M -cp "./antlr-4.13.2-complete.jar:$CLASSPATH" org.antlr.v4.Tool //go:generate antlr -Dlanguage=Go -visitor -Dlanguage=Go -package baseparser -o "../types/parser/baseparser" SubstraitLexer.g4 SubstraitType.g4 //go:generate antlr -Dlanguage=Go -visitor -no-listener -Dlanguage=Go -package baseparser -o "../testcases/parser/baseparser" FuncTestCaseLexer.g4 FuncTestCaseParser.g4 diff --git a/testcases/parser/baseparser/functestcase_lexer.go b/testcases/parser/baseparser/functestcase_lexer.go index f700045..e25ed10 100644 --- a/testcases/parser/baseparser/functestcase_lexer.go +++ b/testcases/parser/baseparser/functestcase_lexer.go @@ -49,9 +49,9 @@ func functestcaselexerLexerInit() { "'SATURATE'", "'SILENT'", "'TIE_TO_EVEN'", "'NAN'", "'ACCEPT_NULLS'", "'IGNORE_NULLS'", "'NULL_HANDLING'", "'SPACES_ONLY'", "'TRUNCATE'", "", "", "", "", "", "", "", "", "'P'", "'T'", "'Y'", "'M'", "'D'", "'H'", - "'S'", "'F'", "", "", "", "", "", "'null'", "", "", "", "", "'IF'", - "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", - "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", "'TIMESTAMP'", + "'S'", "'F'", "", "", "", "", "", "'null'", "", "'enum'", "", "", "", + "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", + "'I32'", "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", "'TIMESTAMP'", "'TIMESTAMP_TZ'", "'DATE'", "'TIME'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", @@ -72,15 +72,15 @@ func functestcaselexerLexerInit() { "TimeLiteral", "DateLiteral", "PeriodPrefix", "TimePrefix", "YearSuffix", "MSuffix", "DaySuffix", "HourSuffix", "SecondSuffix", "FractionalSecondSuffix", "OAngleBracket", "CAngleBracket", "IntervalYearLiteral", "IntervalDayLiteral", - "IntervalCompoundLiteral", "NullLiteral", "StringLiteral", "ColumnName", - "LineComment", "BlockComment", "If", "Then", "Else", "Func", "Boolean", - "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", "Timestamp", - "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", "Interval_Compound", - "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", "List", - "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", "IYear", - "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", "VChar", - "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", + "IntervalCompoundLiteral", "NullLiteral", "StringLiteral", "EnumType", + "ColumnName", "LineComment", "BlockComment", "If", "Then", "Else", "Func", + "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", + "Timestamp", "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", + "Interval_Compound", "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", "Struct", + "NStruct", "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", + "TsTZ", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", + "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", "Identifier", @@ -97,11 +97,11 @@ func functestcaselexerLexerInit() { "YearSuffix", "MSuffix", "DaySuffix", "HourSuffix", "SecondSuffix", "FractionalSecondSuffix", "OAngleBracket", "CAngleBracket", "IntervalYearLiteral", "IntervalDayLiteral", "TimeInterval", "IntervalCompoundLiteral", "NullLiteral", - "StringLiteral", "ColumnName", "LineComment", "BlockComment", "DIGIT", - "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", "I64", - "FP32", "FP64", "String", "Binary", "Timestamp", "Timestamp_TZ", "Date", - "Time", "Interval_Year", "Interval_Day", "Interval_Compound", "UUID", - "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", + "StringLiteral", "EnumType", "ColumnName", "LineComment", "BlockComment", + "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", "I32", + "I64", "FP32", "FP64", "String", "Binary", "Timestamp", "Timestamp_TZ", + "Date", "Time", "Interval_Year", "Interval_Day", "Interval_Compound", + "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", "VChar", @@ -113,7 +113,7 @@ func functestcaselexerLexerInit() { } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 128, 1306, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, + 4, 0, 129, 1313, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, @@ -139,563 +139,566 @@ func functestcaselexerLexerInit() { 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, - 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 1, 0, 4, 0, 271, 8, 0, - 11, 0, 12, 0, 272, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, - 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, - 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, - 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, - 1, 6, 4, 6, 369, 8, 6, 11, 6, 12, 6, 370, 1, 6, 1, 6, 4, 6, 375, 8, 6, - 11, 6, 12, 6, 376, 3, 6, 379, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 385, - 8, 7, 10, 7, 12, 7, 388, 9, 7, 1, 7, 3, 7, 391, 8, 7, 1, 7, 1, 7, 1, 8, - 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, - 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, - 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, - 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, - 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, - 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, - 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, - 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, - 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, - 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, - 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, - 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, - 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, - 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 3, 23, 542, 8, 23, - 1, 23, 1, 23, 1, 24, 3, 24, 547, 8, 24, 1, 24, 4, 24, 550, 8, 24, 11, 24, - 12, 24, 551, 1, 24, 1, 24, 4, 24, 556, 8, 24, 11, 24, 12, 24, 557, 3, 24, - 560, 8, 24, 1, 25, 3, 25, 563, 8, 25, 1, 25, 4, 25, 566, 8, 25, 11, 25, - 12, 25, 567, 1, 25, 1, 25, 5, 25, 572, 8, 25, 10, 25, 12, 25, 575, 9, 25, - 3, 25, 577, 8, 25, 1, 25, 1, 25, 3, 25, 581, 8, 25, 1, 25, 4, 25, 584, - 8, 25, 11, 25, 12, 25, 585, 3, 25, 588, 8, 25, 1, 25, 3, 25, 591, 8, 25, - 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 600, 8, 25, 1, - 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 611, - 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 29, 1, - 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, - 1, 29, 1, 29, 4, 29, 635, 8, 29, 11, 29, 12, 29, 636, 3, 29, 639, 8, 29, - 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, - 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 4, 30, - 661, 8, 30, 11, 30, 12, 30, 662, 3, 30, 665, 8, 30, 1, 30, 1, 30, 1, 31, - 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 4, 31, 677, 8, 31, 11, - 31, 12, 31, 678, 3, 31, 681, 8, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, - 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, - 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, - 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, - 43, 3, 43, 720, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, - 1, 43, 3, 43, 730, 8, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, - 44, 3, 44, 739, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, - 1, 44, 3, 44, 749, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 756, - 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 761, 8, 45, 1, 45, 1, 45, 1, 45, 1, - 45, 1, 45, 3, 45, 768, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 773, 8, 45, 1, - 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 780, 8, 46, 1, 46, 1, 46, 1, 46, - 3, 46, 785, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 790, 8, 46, 1, 46, 1, 46, - 1, 46, 3, 46, 795, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, - 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 810, 8, 48, 10, 48, - 12, 48, 813, 9, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, - 49, 1, 50, 1, 50, 1, 50, 1, 50, 5, 50, 827, 8, 50, 10, 50, 12, 50, 830, - 9, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 4, 51, 839, 8, - 51, 11, 51, 12, 51, 840, 1, 51, 3, 51, 844, 8, 51, 1, 51, 5, 51, 847, 8, - 51, 10, 51, 12, 51, 850, 9, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, - 1, 52, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, - 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, - 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 59, 1, - 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, - 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, - 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, + 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 1, 0, 4, + 0, 273, 8, 0, 11, 0, 12, 0, 274, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, + 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, + 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, + 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, + 5, 1, 5, 1, 6, 1, 6, 4, 6, 371, 8, 6, 11, 6, 12, 6, 372, 1, 6, 1, 6, 4, + 6, 377, 8, 6, 11, 6, 12, 6, 378, 3, 6, 381, 8, 6, 1, 7, 1, 7, 1, 7, 1, + 7, 5, 7, 387, 8, 7, 10, 7, 12, 7, 390, 9, 7, 1, 7, 3, 7, 393, 8, 7, 1, + 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, + 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, + 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, + 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, + 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, + 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, + 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, + 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, + 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, + 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, + 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, + 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, + 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, + 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 3, + 23, 544, 8, 23, 1, 23, 1, 23, 1, 24, 3, 24, 549, 8, 24, 1, 24, 4, 24, 552, + 8, 24, 11, 24, 12, 24, 553, 1, 24, 1, 24, 4, 24, 558, 8, 24, 11, 24, 12, + 24, 559, 3, 24, 562, 8, 24, 1, 25, 3, 25, 565, 8, 25, 1, 25, 4, 25, 568, + 8, 25, 11, 25, 12, 25, 569, 1, 25, 1, 25, 5, 25, 574, 8, 25, 10, 25, 12, + 25, 577, 9, 25, 3, 25, 579, 8, 25, 1, 25, 1, 25, 3, 25, 583, 8, 25, 1, + 25, 4, 25, 586, 8, 25, 11, 25, 12, 25, 587, 3, 25, 590, 8, 25, 1, 25, 3, + 25, 593, 8, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, + 602, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, + 26, 3, 26, 613, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, + 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, + 29, 1, 29, 1, 29, 1, 29, 1, 29, 4, 29, 637, 8, 29, 11, 29, 12, 29, 638, + 3, 29, 641, 8, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, + 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, + 1, 30, 1, 30, 4, 30, 663, 8, 30, 11, 30, 12, 30, 664, 3, 30, 667, 8, 30, + 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 4, + 31, 679, 8, 31, 11, 31, 12, 31, 680, 3, 31, 683, 8, 31, 1, 31, 1, 31, 1, + 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, + 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, + 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, + 1, 43, 1, 43, 1, 43, 3, 43, 722, 8, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, + 43, 1, 43, 1, 43, 1, 43, 3, 43, 732, 8, 43, 1, 44, 1, 44, 1, 44, 1, 44, + 1, 44, 1, 44, 1, 44, 3, 44, 741, 8, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, + 44, 1, 44, 1, 44, 1, 44, 3, 44, 751, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, + 1, 45, 3, 45, 758, 8, 45, 1, 45, 1, 45, 1, 45, 3, 45, 763, 8, 45, 1, 45, + 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 770, 8, 45, 1, 45, 1, 45, 1, 45, 3, + 45, 775, 8, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 782, 8, 46, 1, + 46, 1, 46, 1, 46, 3, 46, 787, 8, 46, 1, 46, 1, 46, 1, 46, 3, 46, 792, 8, + 46, 1, 46, 1, 46, 1, 46, 3, 46, 797, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, + 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 812, + 8, 48, 10, 48, 12, 48, 815, 9, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, + 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, + 1, 51, 5, 51, 834, 8, 51, 10, 51, 12, 51, 837, 9, 51, 1, 51, 1, 51, 1, + 52, 1, 52, 1, 52, 1, 52, 1, 52, 4, 52, 846, 8, 52, 11, 52, 12, 52, 847, + 1, 52, 3, 52, 851, 8, 52, 1, 52, 5, 52, 854, 8, 52, 10, 52, 12, 52, 857, + 9, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, + 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, + 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, + 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, + 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, + 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, - 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, - 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, - 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, - 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, - 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, - 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, - 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, - 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, - 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, - 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, - 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, - 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, - 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, - 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, - 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, - 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, - 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, - 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, - 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 86, - 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, - 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, - 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, - 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, - 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, - 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, - 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, - 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, - 1, 102, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, - 1, 106, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, - 1, 110, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, - 1, 114, 1, 114, 1, 115, 1, 115, 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, - 1, 118, 1, 119, 1, 119, 1, 120, 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, - 1, 123, 1, 123, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, - 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, - 1, 129, 5, 129, 1277, 8, 129, 10, 129, 12, 129, 1280, 9, 129, 1, 129, 3, - 129, 1283, 8, 129, 1, 130, 1, 130, 1, 131, 3, 131, 1288, 8, 131, 1, 131, - 1, 131, 1, 132, 1, 132, 1, 132, 5, 132, 1295, 8, 132, 10, 132, 12, 132, - 1298, 9, 132, 1, 133, 1, 133, 3, 133, 1302, 8, 133, 1, 133, 3, 133, 1305, - 8, 133, 0, 0, 134, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, - 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, - 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, - 27, 55, 0, 57, 0, 59, 28, 61, 29, 63, 30, 65, 31, 67, 32, 69, 33, 71, 34, - 73, 35, 75, 36, 77, 37, 79, 38, 81, 39, 83, 40, 85, 41, 87, 42, 89, 43, - 91, 0, 93, 44, 95, 45, 97, 46, 99, 47, 101, 48, 103, 49, 105, 0, 107, 50, - 109, 51, 111, 52, 113, 53, 115, 54, 117, 55, 119, 56, 121, 57, 123, 58, - 125, 59, 127, 60, 129, 61, 131, 62, 133, 63, 135, 64, 137, 65, 139, 66, - 141, 67, 143, 68, 145, 69, 147, 70, 149, 71, 151, 72, 153, 73, 155, 74, - 157, 75, 159, 76, 161, 77, 163, 78, 165, 79, 167, 80, 169, 81, 171, 82, - 173, 83, 175, 84, 177, 85, 179, 86, 181, 87, 183, 88, 185, 89, 187, 90, - 189, 91, 191, 92, 193, 93, 195, 94, 197, 95, 199, 96, 201, 97, 203, 98, - 205, 99, 207, 100, 209, 101, 211, 102, 213, 103, 215, 104, 217, 105, 219, - 106, 221, 107, 223, 108, 225, 109, 227, 110, 229, 111, 231, 112, 233, 113, - 235, 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, - 121, 251, 122, 253, 123, 255, 124, 257, 125, 259, 0, 261, 0, 263, 126, - 265, 127, 267, 128, 1, 0, 31, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 83, 83, - 115, 115, 2, 0, 85, 85, 117, 117, 2, 0, 66, 66, 98, 98, 2, 0, 84, 84, 116, - 116, 2, 0, 82, 82, 114, 114, 2, 0, 65, 65, 97, 97, 2, 0, 73, 73, 105, 105, - 2, 0, 67, 67, 99, 99, 2, 0, 76, 76, 108, 108, 2, 0, 69, 69, 101, 101, 2, - 0, 71, 71, 103, 103, 2, 0, 78, 78, 110, 110, 2, 0, 68, 68, 100, 100, 2, - 0, 80, 80, 112, 112, 2, 0, 89, 89, 121, 121, 2, 0, 86, 86, 118, 118, 2, - 0, 10, 10, 13, 13, 2, 0, 70, 70, 102, 102, 2, 0, 79, 79, 111, 111, 2, 0, - 87, 87, 119, 119, 2, 0, 72, 72, 104, 104, 2, 0, 43, 43, 45, 45, 1, 0, 48, - 57, 2, 0, 77, 77, 109, 109, 2, 0, 39, 39, 92, 92, 1, 0, 42, 42, 2, 0, 42, - 42, 47, 47, 2, 0, 90, 90, 122, 122, 2, 0, 88, 88, 120, 120, 4, 0, 36, 36, - 65, 90, 95, 95, 97, 122, 1354, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, - 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, - 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, - 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, - 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, - 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, - 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, - 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, - 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, - 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, - 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, - 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, - 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, - 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, - 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, - 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, - 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, - 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, - 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, - 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, - 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, - 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, - 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, - 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, - 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, - 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, - 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, - 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, - 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, - 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, - 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, - 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, - 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, - 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, - 0, 257, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, - 0, 0, 0, 1, 270, 1, 0, 0, 0, 3, 276, 1, 0, 0, 0, 5, 280, 1, 0, 0, 0, 7, - 302, 1, 0, 0, 0, 9, 327, 1, 0, 0, 0, 11, 345, 1, 0, 0, 0, 13, 366, 1, 0, - 0, 0, 15, 380, 1, 0, 0, 0, 17, 394, 1, 0, 0, 0, 19, 401, 1, 0, 0, 0, 21, - 410, 1, 0, 0, 0, 23, 423, 1, 0, 0, 0, 25, 432, 1, 0, 0, 0, 27, 441, 1, - 0, 0, 0, 29, 447, 1, 0, 0, 0, 31, 456, 1, 0, 0, 0, 33, 463, 1, 0, 0, 0, - 35, 475, 1, 0, 0, 0, 37, 479, 1, 0, 0, 0, 39, 492, 1, 0, 0, 0, 41, 505, - 1, 0, 0, 0, 43, 519, 1, 0, 0, 0, 45, 531, 1, 0, 0, 0, 47, 541, 1, 0, 0, - 0, 49, 546, 1, 0, 0, 0, 51, 599, 1, 0, 0, 0, 53, 610, 1, 0, 0, 0, 55, 612, - 1, 0, 0, 0, 57, 617, 1, 0, 0, 0, 59, 620, 1, 0, 0, 0, 61, 646, 1, 0, 0, - 0, 63, 668, 1, 0, 0, 0, 65, 684, 1, 0, 0, 0, 67, 692, 1, 0, 0, 0, 69, 694, - 1, 0, 0, 0, 71, 696, 1, 0, 0, 0, 73, 698, 1, 0, 0, 0, 75, 700, 1, 0, 0, - 0, 77, 702, 1, 0, 0, 0, 79, 704, 1, 0, 0, 0, 81, 706, 1, 0, 0, 0, 83, 708, - 1, 0, 0, 0, 85, 710, 1, 0, 0, 0, 87, 729, 1, 0, 0, 0, 89, 748, 1, 0, 0, - 0, 91, 772, 1, 0, 0, 0, 93, 774, 1, 0, 0, 0, 95, 798, 1, 0, 0, 0, 97, 803, - 1, 0, 0, 0, 99, 816, 1, 0, 0, 0, 101, 822, 1, 0, 0, 0, 103, 833, 1, 0, - 0, 0, 105, 856, 1, 0, 0, 0, 107, 858, 1, 0, 0, 0, 109, 861, 1, 0, 0, 0, - 111, 866, 1, 0, 0, 0, 113, 871, 1, 0, 0, 0, 115, 876, 1, 0, 0, 0, 117, - 884, 1, 0, 0, 0, 119, 887, 1, 0, 0, 0, 121, 891, 1, 0, 0, 0, 123, 895, - 1, 0, 0, 0, 125, 899, 1, 0, 0, 0, 127, 904, 1, 0, 0, 0, 129, 909, 1, 0, - 0, 0, 131, 916, 1, 0, 0, 0, 133, 923, 1, 0, 0, 0, 135, 933, 1, 0, 0, 0, - 137, 946, 1, 0, 0, 0, 139, 951, 1, 0, 0, 0, 141, 956, 1, 0, 0, 0, 143, - 970, 1, 0, 0, 0, 145, 983, 1, 0, 0, 0, 147, 1001, 1, 0, 0, 0, 149, 1006, - 1, 0, 0, 0, 151, 1014, 1, 0, 0, 0, 153, 1029, 1, 0, 0, 0, 155, 1049, 1, - 0, 0, 0, 157, 1072, 1, 0, 0, 0, 159, 1082, 1, 0, 0, 0, 161, 1090, 1, 0, - 0, 0, 163, 1102, 1, 0, 0, 0, 165, 1109, 1, 0, 0, 0, 167, 1117, 1, 0, 0, - 0, 169, 1122, 1, 0, 0, 0, 171, 1126, 1, 0, 0, 0, 173, 1129, 1, 0, 0, 0, - 175, 1134, 1, 0, 0, 0, 177, 1138, 1, 0, 0, 0, 179, 1143, 1, 0, 0, 0, 181, - 1146, 1, 0, 0, 0, 183, 1151, 1, 0, 0, 0, 185, 1157, 1, 0, 0, 0, 187, 1162, - 1, 0, 0, 0, 189, 1172, 1, 0, 0, 0, 191, 1176, 1, 0, 0, 0, 193, 1179, 1, - 0, 0, 0, 195, 1183, 1, 0, 0, 0, 197, 1189, 1, 0, 0, 0, 199, 1195, 1, 0, - 0, 0, 201, 1201, 1, 0, 0, 0, 203, 1206, 1, 0, 0, 0, 205, 1210, 1, 0, 0, - 0, 207, 1213, 1, 0, 0, 0, 209, 1216, 1, 0, 0, 0, 211, 1218, 1, 0, 0, 0, - 213, 1220, 1, 0, 0, 0, 215, 1222, 1, 0, 0, 0, 217, 1224, 1, 0, 0, 0, 219, - 1226, 1, 0, 0, 0, 221, 1228, 1, 0, 0, 0, 223, 1231, 1, 0, 0, 0, 225, 1234, - 1, 0, 0, 0, 227, 1237, 1, 0, 0, 0, 229, 1239, 1, 0, 0, 0, 231, 1241, 1, - 0, 0, 0, 233, 1243, 1, 0, 0, 0, 235, 1245, 1, 0, 0, 0, 237, 1247, 1, 0, - 0, 0, 239, 1249, 1, 0, 0, 0, 241, 1251, 1, 0, 0, 0, 243, 1253, 1, 0, 0, - 0, 245, 1255, 1, 0, 0, 0, 247, 1257, 1, 0, 0, 0, 249, 1259, 1, 0, 0, 0, - 251, 1261, 1, 0, 0, 0, 253, 1265, 1, 0, 0, 0, 255, 1268, 1, 0, 0, 0, 257, - 1271, 1, 0, 0, 0, 259, 1282, 1, 0, 0, 0, 261, 1284, 1, 0, 0, 0, 263, 1287, - 1, 0, 0, 0, 265, 1291, 1, 0, 0, 0, 267, 1304, 1, 0, 0, 0, 269, 271, 7, - 0, 0, 0, 270, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 270, 1, 0, 0, - 0, 272, 273, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 275, 6, 0, 0, 0, 275, - 2, 1, 0, 0, 0, 276, 277, 5, 35, 0, 0, 277, 278, 5, 35, 0, 0, 278, 279, - 5, 35, 0, 0, 279, 4, 1, 0, 0, 0, 280, 281, 7, 1, 0, 0, 281, 282, 7, 2, - 0, 0, 282, 283, 7, 3, 0, 0, 283, 284, 7, 1, 0, 0, 284, 285, 7, 4, 0, 0, - 285, 286, 7, 5, 0, 0, 286, 287, 7, 6, 0, 0, 287, 288, 7, 7, 0, 0, 288, - 289, 7, 4, 0, 0, 289, 290, 5, 95, 0, 0, 290, 291, 7, 1, 0, 0, 291, 292, - 7, 8, 0, 0, 292, 293, 7, 6, 0, 0, 293, 294, 7, 9, 0, 0, 294, 295, 7, 6, - 0, 0, 295, 296, 7, 5, 0, 0, 296, 297, 5, 95, 0, 0, 297, 298, 7, 4, 0, 0, - 298, 299, 7, 10, 0, 0, 299, 300, 7, 1, 0, 0, 300, 301, 7, 4, 0, 0, 301, - 6, 1, 0, 0, 0, 302, 303, 7, 1, 0, 0, 303, 304, 7, 2, 0, 0, 304, 305, 7, - 3, 0, 0, 305, 306, 7, 1, 0, 0, 306, 307, 7, 4, 0, 0, 307, 308, 7, 5, 0, - 0, 308, 309, 7, 6, 0, 0, 309, 310, 7, 7, 0, 0, 310, 311, 7, 4, 0, 0, 311, - 312, 5, 95, 0, 0, 312, 313, 7, 6, 0, 0, 313, 314, 7, 11, 0, 0, 314, 315, - 7, 11, 0, 0, 315, 316, 7, 5, 0, 0, 316, 317, 7, 10, 0, 0, 317, 318, 7, - 11, 0, 0, 318, 319, 7, 6, 0, 0, 319, 320, 7, 4, 0, 0, 320, 321, 7, 10, - 0, 0, 321, 322, 5, 95, 0, 0, 322, 323, 7, 4, 0, 0, 323, 324, 7, 10, 0, - 0, 324, 325, 7, 1, 0, 0, 325, 326, 7, 4, 0, 0, 326, 8, 1, 0, 0, 0, 327, - 328, 7, 1, 0, 0, 328, 329, 7, 2, 0, 0, 329, 330, 7, 3, 0, 0, 330, 331, - 7, 1, 0, 0, 331, 332, 7, 4, 0, 0, 332, 333, 7, 5, 0, 0, 333, 334, 7, 6, - 0, 0, 334, 335, 7, 7, 0, 0, 335, 336, 7, 4, 0, 0, 336, 337, 5, 95, 0, 0, - 337, 338, 7, 7, 0, 0, 338, 339, 7, 12, 0, 0, 339, 340, 7, 8, 0, 0, 340, - 341, 7, 9, 0, 0, 341, 342, 7, 2, 0, 0, 342, 343, 7, 13, 0, 0, 343, 344, - 7, 10, 0, 0, 344, 10, 1, 0, 0, 0, 345, 346, 7, 1, 0, 0, 346, 347, 7, 2, - 0, 0, 347, 348, 7, 3, 0, 0, 348, 349, 7, 1, 0, 0, 349, 350, 7, 4, 0, 0, - 350, 351, 7, 5, 0, 0, 351, 352, 7, 6, 0, 0, 352, 353, 7, 7, 0, 0, 353, - 354, 7, 4, 0, 0, 354, 355, 5, 95, 0, 0, 355, 356, 7, 13, 0, 0, 356, 357, - 7, 10, 0, 0, 357, 358, 7, 14, 0, 0, 358, 359, 7, 10, 0, 0, 359, 360, 7, - 12, 0, 0, 360, 361, 7, 13, 0, 0, 361, 362, 7, 10, 0, 0, 362, 363, 7, 12, - 0, 0, 363, 364, 7, 8, 0, 0, 364, 365, 7, 15, 0, 0, 365, 12, 1, 0, 0, 0, - 366, 368, 7, 16, 0, 0, 367, 369, 3, 105, 52, 0, 368, 367, 1, 0, 0, 0, 369, - 370, 1, 0, 0, 0, 370, 368, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 378, - 1, 0, 0, 0, 372, 374, 5, 46, 0, 0, 373, 375, 3, 105, 52, 0, 374, 373, 1, - 0, 0, 0, 375, 376, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, - 0, 377, 379, 1, 0, 0, 0, 378, 372, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, - 14, 1, 0, 0, 0, 380, 381, 5, 35, 0, 0, 381, 382, 5, 32, 0, 0, 382, 386, - 1, 0, 0, 0, 383, 385, 8, 17, 0, 0, 384, 383, 1, 0, 0, 0, 385, 388, 1, 0, - 0, 0, 386, 384, 1, 0, 0, 0, 386, 387, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, - 388, 386, 1, 0, 0, 0, 389, 391, 5, 13, 0, 0, 390, 389, 1, 0, 0, 0, 390, - 391, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 393, 5, 10, 0, 0, 393, 16, - 1, 0, 0, 0, 394, 395, 7, 13, 0, 0, 395, 396, 7, 10, 0, 0, 396, 397, 7, - 18, 0, 0, 397, 398, 7, 7, 0, 0, 398, 399, 7, 12, 0, 0, 399, 400, 7, 10, - 0, 0, 400, 18, 1, 0, 0, 0, 401, 402, 5, 60, 0, 0, 402, 403, 5, 33, 0, 0, - 403, 404, 7, 10, 0, 0, 404, 405, 7, 5, 0, 0, 405, 406, 7, 5, 0, 0, 406, - 407, 7, 19, 0, 0, 407, 408, 7, 5, 0, 0, 408, 409, 5, 62, 0, 0, 409, 20, - 1, 0, 0, 0, 410, 411, 5, 60, 0, 0, 411, 412, 5, 33, 0, 0, 412, 413, 7, - 2, 0, 0, 413, 414, 7, 12, 0, 0, 414, 415, 7, 13, 0, 0, 415, 416, 7, 10, - 0, 0, 416, 417, 7, 18, 0, 0, 417, 418, 7, 7, 0, 0, 418, 419, 7, 12, 0, - 0, 419, 420, 7, 10, 0, 0, 420, 421, 7, 13, 0, 0, 421, 422, 5, 62, 0, 0, - 422, 22, 1, 0, 0, 0, 423, 424, 7, 19, 0, 0, 424, 425, 7, 16, 0, 0, 425, - 426, 7, 10, 0, 0, 426, 427, 7, 5, 0, 0, 427, 428, 7, 18, 0, 0, 428, 429, - 7, 9, 0, 0, 429, 430, 7, 19, 0, 0, 430, 431, 7, 20, 0, 0, 431, 24, 1, 0, - 0, 0, 432, 433, 7, 5, 0, 0, 433, 434, 7, 19, 0, 0, 434, 435, 7, 2, 0, 0, - 435, 436, 7, 12, 0, 0, 436, 437, 7, 13, 0, 0, 437, 438, 7, 7, 0, 0, 438, - 439, 7, 12, 0, 0, 439, 440, 7, 11, 0, 0, 440, 26, 1, 0, 0, 0, 441, 442, - 7, 10, 0, 0, 442, 443, 7, 5, 0, 0, 443, 444, 7, 5, 0, 0, 444, 445, 7, 19, - 0, 0, 445, 446, 7, 5, 0, 0, 446, 28, 1, 0, 0, 0, 447, 448, 7, 1, 0, 0, - 448, 449, 7, 6, 0, 0, 449, 450, 7, 4, 0, 0, 450, 451, 7, 2, 0, 0, 451, - 452, 7, 5, 0, 0, 452, 453, 7, 6, 0, 0, 453, 454, 7, 4, 0, 0, 454, 455, - 7, 10, 0, 0, 455, 30, 1, 0, 0, 0, 456, 457, 7, 1, 0, 0, 457, 458, 7, 7, - 0, 0, 458, 459, 7, 9, 0, 0, 459, 460, 7, 10, 0, 0, 460, 461, 7, 12, 0, - 0, 461, 462, 7, 4, 0, 0, 462, 32, 1, 0, 0, 0, 463, 464, 7, 4, 0, 0, 464, - 465, 7, 7, 0, 0, 465, 466, 7, 10, 0, 0, 466, 467, 5, 95, 0, 0, 467, 468, - 7, 4, 0, 0, 468, 469, 7, 19, 0, 0, 469, 470, 5, 95, 0, 0, 470, 471, 7, - 10, 0, 0, 471, 472, 7, 16, 0, 0, 472, 473, 7, 10, 0, 0, 473, 474, 7, 12, - 0, 0, 474, 34, 1, 0, 0, 0, 475, 476, 7, 12, 0, 0, 476, 477, 7, 6, 0, 0, - 477, 478, 7, 12, 0, 0, 478, 36, 1, 0, 0, 0, 479, 480, 7, 6, 0, 0, 480, - 481, 7, 8, 0, 0, 481, 482, 7, 8, 0, 0, 482, 483, 7, 10, 0, 0, 483, 484, - 7, 14, 0, 0, 484, 485, 7, 4, 0, 0, 485, 486, 5, 95, 0, 0, 486, 487, 7, - 12, 0, 0, 487, 488, 7, 2, 0, 0, 488, 489, 7, 9, 0, 0, 489, 490, 7, 9, 0, - 0, 490, 491, 7, 1, 0, 0, 491, 38, 1, 0, 0, 0, 492, 493, 7, 7, 0, 0, 493, - 494, 7, 11, 0, 0, 494, 495, 7, 12, 0, 0, 495, 496, 7, 19, 0, 0, 496, 497, - 7, 5, 0, 0, 497, 498, 7, 10, 0, 0, 498, 499, 5, 95, 0, 0, 499, 500, 7, - 12, 0, 0, 500, 501, 7, 2, 0, 0, 501, 502, 7, 9, 0, 0, 502, 503, 7, 9, 0, - 0, 503, 504, 7, 1, 0, 0, 504, 40, 1, 0, 0, 0, 505, 506, 7, 12, 0, 0, 506, - 507, 7, 2, 0, 0, 507, 508, 7, 9, 0, 0, 508, 509, 7, 9, 0, 0, 509, 510, - 5, 95, 0, 0, 510, 511, 7, 21, 0, 0, 511, 512, 7, 6, 0, 0, 512, 513, 7, - 12, 0, 0, 513, 514, 7, 13, 0, 0, 514, 515, 7, 9, 0, 0, 515, 516, 7, 7, - 0, 0, 516, 517, 7, 12, 0, 0, 517, 518, 7, 11, 0, 0, 518, 42, 1, 0, 0, 0, - 519, 520, 7, 1, 0, 0, 520, 521, 7, 14, 0, 0, 521, 522, 7, 6, 0, 0, 522, - 523, 7, 8, 0, 0, 523, 524, 7, 10, 0, 0, 524, 525, 7, 1, 0, 0, 525, 526, - 5, 95, 0, 0, 526, 527, 7, 19, 0, 0, 527, 528, 7, 12, 0, 0, 528, 529, 7, - 9, 0, 0, 529, 530, 7, 15, 0, 0, 530, 44, 1, 0, 0, 0, 531, 532, 7, 4, 0, - 0, 532, 533, 7, 5, 0, 0, 533, 534, 7, 2, 0, 0, 534, 535, 7, 12, 0, 0, 535, - 536, 7, 8, 0, 0, 536, 537, 7, 6, 0, 0, 537, 538, 7, 4, 0, 0, 538, 539, - 7, 10, 0, 0, 539, 46, 1, 0, 0, 0, 540, 542, 7, 22, 0, 0, 541, 540, 1, 0, - 0, 0, 541, 542, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 544, 3, 259, 129, - 0, 544, 48, 1, 0, 0, 0, 545, 547, 7, 22, 0, 0, 546, 545, 1, 0, 0, 0, 546, - 547, 1, 0, 0, 0, 547, 549, 1, 0, 0, 0, 548, 550, 7, 23, 0, 0, 549, 548, - 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 549, 1, 0, 0, 0, 551, 552, 1, 0, - 0, 0, 552, 559, 1, 0, 0, 0, 553, 555, 5, 46, 0, 0, 554, 556, 7, 23, 0, - 0, 555, 554, 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 555, 1, 0, 0, 0, 557, - 558, 1, 0, 0, 0, 558, 560, 1, 0, 0, 0, 559, 553, 1, 0, 0, 0, 559, 560, - 1, 0, 0, 0, 560, 50, 1, 0, 0, 0, 561, 563, 7, 22, 0, 0, 562, 561, 1, 0, - 0, 0, 562, 563, 1, 0, 0, 0, 563, 565, 1, 0, 0, 0, 564, 566, 7, 23, 0, 0, - 565, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 565, 1, 0, 0, 0, 567, - 568, 1, 0, 0, 0, 568, 576, 1, 0, 0, 0, 569, 573, 5, 46, 0, 0, 570, 572, - 7, 23, 0, 0, 571, 570, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 571, 1, 0, - 0, 0, 573, 574, 1, 0, 0, 0, 574, 577, 1, 0, 0, 0, 575, 573, 1, 0, 0, 0, - 576, 569, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 587, 1, 0, 0, 0, 578, - 580, 7, 10, 0, 0, 579, 581, 7, 22, 0, 0, 580, 579, 1, 0, 0, 0, 580, 581, - 1, 0, 0, 0, 581, 583, 1, 0, 0, 0, 582, 584, 7, 23, 0, 0, 583, 582, 1, 0, - 0, 0, 584, 585, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, - 586, 588, 1, 0, 0, 0, 587, 578, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, - 600, 1, 0, 0, 0, 589, 591, 7, 22, 0, 0, 590, 589, 1, 0, 0, 0, 590, 591, - 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 593, 7, 7, 0, 0, 593, 594, 7, 12, - 0, 0, 594, 600, 7, 18, 0, 0, 595, 596, 7, 1, 0, 0, 596, 597, 7, 12, 0, - 0, 597, 598, 7, 6, 0, 0, 598, 600, 7, 12, 0, 0, 599, 562, 1, 0, 0, 0, 599, - 590, 1, 0, 0, 0, 599, 595, 1, 0, 0, 0, 600, 52, 1, 0, 0, 0, 601, 602, 7, - 4, 0, 0, 602, 603, 7, 5, 0, 0, 603, 604, 7, 2, 0, 0, 604, 611, 7, 10, 0, - 0, 605, 606, 7, 18, 0, 0, 606, 607, 7, 6, 0, 0, 607, 608, 7, 9, 0, 0, 608, - 609, 7, 1, 0, 0, 609, 611, 7, 10, 0, 0, 610, 601, 1, 0, 0, 0, 610, 605, - 1, 0, 0, 0, 611, 54, 1, 0, 0, 0, 612, 613, 7, 23, 0, 0, 613, 614, 7, 23, - 0, 0, 614, 615, 7, 23, 0, 0, 615, 616, 7, 23, 0, 0, 616, 56, 1, 0, 0, 0, - 617, 618, 7, 23, 0, 0, 618, 619, 7, 23, 0, 0, 619, 58, 1, 0, 0, 0, 620, - 621, 5, 39, 0, 0, 621, 622, 3, 55, 27, 0, 622, 623, 5, 45, 0, 0, 623, 624, - 3, 57, 28, 0, 624, 625, 5, 45, 0, 0, 625, 626, 3, 57, 28, 0, 626, 627, - 7, 4, 0, 0, 627, 628, 3, 57, 28, 0, 628, 629, 5, 58, 0, 0, 629, 630, 3, - 57, 28, 0, 630, 631, 5, 58, 0, 0, 631, 638, 3, 57, 28, 0, 632, 634, 5, - 46, 0, 0, 633, 635, 7, 23, 0, 0, 634, 633, 1, 0, 0, 0, 635, 636, 1, 0, - 0, 0, 636, 634, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 1, 0, 0, 0, - 638, 632, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, - 641, 7, 22, 0, 0, 641, 642, 3, 57, 28, 0, 642, 643, 5, 58, 0, 0, 643, 644, - 3, 57, 28, 0, 644, 645, 5, 39, 0, 0, 645, 60, 1, 0, 0, 0, 646, 647, 5, - 39, 0, 0, 647, 648, 3, 55, 27, 0, 648, 649, 5, 45, 0, 0, 649, 650, 3, 57, - 28, 0, 650, 651, 5, 45, 0, 0, 651, 652, 3, 57, 28, 0, 652, 653, 7, 4, 0, - 0, 653, 654, 3, 57, 28, 0, 654, 655, 5, 58, 0, 0, 655, 656, 3, 57, 28, - 0, 656, 657, 5, 58, 0, 0, 657, 664, 3, 57, 28, 0, 658, 660, 5, 46, 0, 0, - 659, 661, 7, 23, 0, 0, 660, 659, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, - 660, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 665, 1, 0, 0, 0, 664, 658, - 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 667, 5, 39, - 0, 0, 667, 62, 1, 0, 0, 0, 668, 669, 5, 39, 0, 0, 669, 670, 3, 57, 28, - 0, 670, 671, 5, 58, 0, 0, 671, 672, 3, 57, 28, 0, 672, 673, 5, 58, 0, 0, - 673, 680, 3, 57, 28, 0, 674, 676, 5, 46, 0, 0, 675, 677, 7, 23, 0, 0, 676, - 675, 1, 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 676, 1, 0, 0, 0, 678, 679, - 1, 0, 0, 0, 679, 681, 1, 0, 0, 0, 680, 674, 1, 0, 0, 0, 680, 681, 1, 0, - 0, 0, 681, 682, 1, 0, 0, 0, 682, 683, 5, 39, 0, 0, 683, 64, 1, 0, 0, 0, - 684, 685, 5, 39, 0, 0, 685, 686, 3, 55, 27, 0, 686, 687, 5, 45, 0, 0, 687, - 688, 3, 57, 28, 0, 688, 689, 5, 45, 0, 0, 689, 690, 3, 57, 28, 0, 690, - 691, 5, 39, 0, 0, 691, 66, 1, 0, 0, 0, 692, 693, 7, 14, 0, 0, 693, 68, - 1, 0, 0, 0, 694, 695, 7, 4, 0, 0, 695, 70, 1, 0, 0, 0, 696, 697, 7, 15, - 0, 0, 697, 72, 1, 0, 0, 0, 698, 699, 7, 24, 0, 0, 699, 74, 1, 0, 0, 0, - 700, 701, 7, 13, 0, 0, 701, 76, 1, 0, 0, 0, 702, 703, 7, 21, 0, 0, 703, - 78, 1, 0, 0, 0, 704, 705, 7, 1, 0, 0, 705, 80, 1, 0, 0, 0, 706, 707, 7, - 18, 0, 0, 707, 82, 1, 0, 0, 0, 708, 709, 3, 229, 114, 0, 709, 84, 1, 0, - 0, 0, 710, 711, 3, 227, 113, 0, 711, 86, 1, 0, 0, 0, 712, 713, 5, 39, 0, - 0, 713, 714, 3, 67, 33, 0, 714, 715, 3, 47, 23, 0, 715, 719, 3, 71, 35, - 0, 716, 717, 3, 47, 23, 0, 717, 718, 3, 73, 36, 0, 718, 720, 1, 0, 0, 0, - 719, 716, 1, 0, 0, 0, 719, 720, 1, 0, 0, 0, 720, 721, 1, 0, 0, 0, 721, - 722, 5, 39, 0, 0, 722, 730, 1, 0, 0, 0, 723, 724, 5, 39, 0, 0, 724, 725, - 3, 67, 33, 0, 725, 726, 3, 47, 23, 0, 726, 727, 3, 73, 36, 0, 727, 728, - 5, 39, 0, 0, 728, 730, 1, 0, 0, 0, 729, 712, 1, 0, 0, 0, 729, 723, 1, 0, - 0, 0, 730, 88, 1, 0, 0, 0, 731, 732, 5, 39, 0, 0, 732, 733, 3, 67, 33, - 0, 733, 734, 3, 47, 23, 0, 734, 738, 3, 75, 37, 0, 735, 736, 3, 69, 34, - 0, 736, 737, 3, 91, 45, 0, 737, 739, 1, 0, 0, 0, 738, 735, 1, 0, 0, 0, - 738, 739, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 741, 5, 39, 0, 0, 741, - 749, 1, 0, 0, 0, 742, 743, 5, 39, 0, 0, 743, 744, 3, 67, 33, 0, 744, 745, - 3, 69, 34, 0, 745, 746, 3, 91, 45, 0, 746, 747, 5, 39, 0, 0, 747, 749, - 1, 0, 0, 0, 748, 731, 1, 0, 0, 0, 748, 742, 1, 0, 0, 0, 749, 90, 1, 0, - 0, 0, 750, 751, 3, 47, 23, 0, 751, 755, 3, 77, 38, 0, 752, 753, 3, 47, - 23, 0, 753, 754, 3, 73, 36, 0, 754, 756, 1, 0, 0, 0, 755, 752, 1, 0, 0, - 0, 755, 756, 1, 0, 0, 0, 756, 760, 1, 0, 0, 0, 757, 758, 3, 49, 24, 0, - 758, 759, 3, 79, 39, 0, 759, 761, 1, 0, 0, 0, 760, 757, 1, 0, 0, 0, 760, - 761, 1, 0, 0, 0, 761, 773, 1, 0, 0, 0, 762, 763, 3, 47, 23, 0, 763, 767, - 3, 73, 36, 0, 764, 765, 3, 49, 24, 0, 765, 766, 3, 79, 39, 0, 766, 768, - 1, 0, 0, 0, 767, 764, 1, 0, 0, 0, 767, 768, 1, 0, 0, 0, 768, 773, 1, 0, - 0, 0, 769, 770, 3, 49, 24, 0, 770, 771, 3, 79, 39, 0, 771, 773, 1, 0, 0, - 0, 772, 750, 1, 0, 0, 0, 772, 762, 1, 0, 0, 0, 772, 769, 1, 0, 0, 0, 773, - 92, 1, 0, 0, 0, 774, 775, 5, 39, 0, 0, 775, 779, 3, 67, 33, 0, 776, 777, - 3, 47, 23, 0, 777, 778, 3, 71, 35, 0, 778, 780, 1, 0, 0, 0, 779, 776, 1, - 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 784, 1, 0, 0, 0, 781, 782, 3, 47, 23, - 0, 782, 783, 3, 73, 36, 0, 783, 785, 1, 0, 0, 0, 784, 781, 1, 0, 0, 0, - 784, 785, 1, 0, 0, 0, 785, 789, 1, 0, 0, 0, 786, 787, 3, 47, 23, 0, 787, - 788, 3, 75, 37, 0, 788, 790, 1, 0, 0, 0, 789, 786, 1, 0, 0, 0, 789, 790, - 1, 0, 0, 0, 790, 794, 1, 0, 0, 0, 791, 792, 3, 69, 34, 0, 792, 793, 3, - 91, 45, 0, 793, 795, 1, 0, 0, 0, 794, 791, 1, 0, 0, 0, 794, 795, 1, 0, - 0, 0, 795, 796, 1, 0, 0, 0, 796, 797, 5, 39, 0, 0, 797, 94, 1, 0, 0, 0, - 798, 799, 7, 12, 0, 0, 799, 800, 7, 2, 0, 0, 800, 801, 7, 9, 0, 0, 801, - 802, 7, 9, 0, 0, 802, 96, 1, 0, 0, 0, 803, 811, 5, 39, 0, 0, 804, 805, - 5, 92, 0, 0, 805, 810, 9, 0, 0, 0, 806, 807, 5, 39, 0, 0, 807, 810, 5, - 39, 0, 0, 808, 810, 8, 25, 0, 0, 809, 804, 1, 0, 0, 0, 809, 806, 1, 0, - 0, 0, 809, 808, 1, 0, 0, 0, 810, 813, 1, 0, 0, 0, 811, 809, 1, 0, 0, 0, - 811, 812, 1, 0, 0, 0, 812, 814, 1, 0, 0, 0, 813, 811, 1, 0, 0, 0, 814, - 815, 5, 39, 0, 0, 815, 98, 1, 0, 0, 0, 816, 817, 7, 8, 0, 0, 817, 818, - 7, 19, 0, 0, 818, 819, 7, 9, 0, 0, 819, 820, 1, 0, 0, 0, 820, 821, 3, 259, - 129, 0, 821, 100, 1, 0, 0, 0, 822, 823, 5, 47, 0, 0, 823, 824, 5, 47, 0, - 0, 824, 828, 1, 0, 0, 0, 825, 827, 8, 17, 0, 0, 826, 825, 1, 0, 0, 0, 827, - 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 831, - 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 832, 6, 50, 0, 0, 832, 102, 1, 0, - 0, 0, 833, 834, 5, 47, 0, 0, 834, 835, 5, 42, 0, 0, 835, 843, 1, 0, 0, - 0, 836, 844, 8, 26, 0, 0, 837, 839, 5, 42, 0, 0, 838, 837, 1, 0, 0, 0, - 839, 840, 1, 0, 0, 0, 840, 838, 1, 0, 0, 0, 840, 841, 1, 0, 0, 0, 841, - 842, 1, 0, 0, 0, 842, 844, 8, 27, 0, 0, 843, 836, 1, 0, 0, 0, 843, 838, - 1, 0, 0, 0, 844, 848, 1, 0, 0, 0, 845, 847, 5, 42, 0, 0, 846, 845, 1, 0, - 0, 0, 847, 850, 1, 0, 0, 0, 848, 846, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, - 849, 851, 1, 0, 0, 0, 850, 848, 1, 0, 0, 0, 851, 852, 5, 42, 0, 0, 852, - 853, 5, 47, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 6, 51, 0, 0, 855, 104, - 1, 0, 0, 0, 856, 857, 7, 23, 0, 0, 857, 106, 1, 0, 0, 0, 858, 859, 7, 7, - 0, 0, 859, 860, 7, 18, 0, 0, 860, 108, 1, 0, 0, 0, 861, 862, 7, 4, 0, 0, - 862, 863, 7, 21, 0, 0, 863, 864, 7, 10, 0, 0, 864, 865, 7, 12, 0, 0, 865, - 110, 1, 0, 0, 0, 866, 867, 7, 10, 0, 0, 867, 868, 7, 9, 0, 0, 868, 869, - 7, 1, 0, 0, 869, 870, 7, 10, 0, 0, 870, 112, 1, 0, 0, 0, 871, 872, 7, 18, - 0, 0, 872, 873, 7, 2, 0, 0, 873, 874, 7, 12, 0, 0, 874, 875, 7, 8, 0, 0, - 875, 114, 1, 0, 0, 0, 876, 877, 7, 3, 0, 0, 877, 878, 7, 19, 0, 0, 878, - 879, 7, 19, 0, 0, 879, 880, 7, 9, 0, 0, 880, 881, 7, 10, 0, 0, 881, 882, - 7, 6, 0, 0, 882, 883, 7, 12, 0, 0, 883, 116, 1, 0, 0, 0, 884, 885, 7, 7, - 0, 0, 885, 886, 5, 56, 0, 0, 886, 118, 1, 0, 0, 0, 887, 888, 7, 7, 0, 0, - 888, 889, 5, 49, 0, 0, 889, 890, 5, 54, 0, 0, 890, 120, 1, 0, 0, 0, 891, - 892, 7, 7, 0, 0, 892, 893, 5, 51, 0, 0, 893, 894, 5, 50, 0, 0, 894, 122, - 1, 0, 0, 0, 895, 896, 7, 7, 0, 0, 896, 897, 5, 54, 0, 0, 897, 898, 5, 52, - 0, 0, 898, 124, 1, 0, 0, 0, 899, 900, 7, 18, 0, 0, 900, 901, 7, 14, 0, - 0, 901, 902, 5, 51, 0, 0, 902, 903, 5, 50, 0, 0, 903, 126, 1, 0, 0, 0, - 904, 905, 7, 18, 0, 0, 905, 906, 7, 14, 0, 0, 906, 907, 5, 54, 0, 0, 907, - 908, 5, 52, 0, 0, 908, 128, 1, 0, 0, 0, 909, 910, 7, 1, 0, 0, 910, 911, - 7, 4, 0, 0, 911, 912, 7, 5, 0, 0, 912, 913, 7, 7, 0, 0, 913, 914, 7, 12, - 0, 0, 914, 915, 7, 11, 0, 0, 915, 130, 1, 0, 0, 0, 916, 917, 7, 3, 0, 0, - 917, 918, 7, 7, 0, 0, 918, 919, 7, 12, 0, 0, 919, 920, 7, 6, 0, 0, 920, - 921, 7, 5, 0, 0, 921, 922, 7, 15, 0, 0, 922, 132, 1, 0, 0, 0, 923, 924, - 7, 4, 0, 0, 924, 925, 7, 7, 0, 0, 925, 926, 7, 24, 0, 0, 926, 927, 7, 10, - 0, 0, 927, 928, 7, 1, 0, 0, 928, 929, 7, 4, 0, 0, 929, 930, 7, 6, 0, 0, - 930, 931, 7, 24, 0, 0, 931, 932, 7, 14, 0, 0, 932, 134, 1, 0, 0, 0, 933, - 934, 7, 4, 0, 0, 934, 935, 7, 7, 0, 0, 935, 936, 7, 24, 0, 0, 936, 937, - 7, 10, 0, 0, 937, 938, 7, 1, 0, 0, 938, 939, 7, 4, 0, 0, 939, 940, 7, 6, - 0, 0, 940, 941, 7, 24, 0, 0, 941, 942, 7, 14, 0, 0, 942, 943, 5, 95, 0, - 0, 943, 944, 7, 4, 0, 0, 944, 945, 7, 28, 0, 0, 945, 136, 1, 0, 0, 0, 946, - 947, 7, 13, 0, 0, 947, 948, 7, 6, 0, 0, 948, 949, 7, 4, 0, 0, 949, 950, - 7, 10, 0, 0, 950, 138, 1, 0, 0, 0, 951, 952, 7, 4, 0, 0, 952, 953, 7, 7, - 0, 0, 953, 954, 7, 24, 0, 0, 954, 955, 7, 10, 0, 0, 955, 140, 1, 0, 0, - 0, 956, 957, 7, 7, 0, 0, 957, 958, 7, 12, 0, 0, 958, 959, 7, 4, 0, 0, 959, - 960, 7, 10, 0, 0, 960, 961, 7, 5, 0, 0, 961, 962, 7, 16, 0, 0, 962, 963, - 7, 6, 0, 0, 963, 964, 7, 9, 0, 0, 964, 965, 5, 95, 0, 0, 965, 966, 7, 15, - 0, 0, 966, 967, 7, 10, 0, 0, 967, 968, 7, 6, 0, 0, 968, 969, 7, 5, 0, 0, - 969, 142, 1, 0, 0, 0, 970, 971, 7, 7, 0, 0, 971, 972, 7, 12, 0, 0, 972, - 973, 7, 4, 0, 0, 973, 974, 7, 10, 0, 0, 974, 975, 7, 5, 0, 0, 975, 976, - 7, 16, 0, 0, 976, 977, 7, 6, 0, 0, 977, 978, 7, 9, 0, 0, 978, 979, 5, 95, - 0, 0, 979, 980, 7, 13, 0, 0, 980, 981, 7, 6, 0, 0, 981, 982, 7, 15, 0, - 0, 982, 144, 1, 0, 0, 0, 983, 984, 7, 7, 0, 0, 984, 985, 7, 12, 0, 0, 985, - 986, 7, 4, 0, 0, 986, 987, 7, 10, 0, 0, 987, 988, 7, 5, 0, 0, 988, 989, - 7, 16, 0, 0, 989, 990, 7, 6, 0, 0, 990, 991, 7, 9, 0, 0, 991, 992, 5, 95, - 0, 0, 992, 993, 7, 8, 0, 0, 993, 994, 7, 19, 0, 0, 994, 995, 7, 24, 0, - 0, 995, 996, 7, 14, 0, 0, 996, 997, 7, 19, 0, 0, 997, 998, 7, 2, 0, 0, - 998, 999, 7, 12, 0, 0, 999, 1000, 7, 13, 0, 0, 1000, 146, 1, 0, 0, 0, 1001, - 1002, 7, 2, 0, 0, 1002, 1003, 7, 2, 0, 0, 1003, 1004, 7, 7, 0, 0, 1004, - 1005, 7, 13, 0, 0, 1005, 148, 1, 0, 0, 0, 1006, 1007, 7, 13, 0, 0, 1007, - 1008, 7, 10, 0, 0, 1008, 1009, 7, 8, 0, 0, 1009, 1010, 7, 7, 0, 0, 1010, - 1011, 7, 24, 0, 0, 1011, 1012, 7, 6, 0, 0, 1012, 1013, 7, 9, 0, 0, 1013, - 150, 1, 0, 0, 0, 1014, 1015, 7, 14, 0, 0, 1015, 1016, 7, 5, 0, 0, 1016, - 1017, 7, 10, 0, 0, 1017, 1018, 7, 8, 0, 0, 1018, 1019, 7, 7, 0, 0, 1019, - 1020, 7, 1, 0, 0, 1020, 1021, 7, 7, 0, 0, 1021, 1022, 7, 19, 0, 0, 1022, - 1023, 7, 12, 0, 0, 1023, 1024, 5, 95, 0, 0, 1024, 1025, 7, 4, 0, 0, 1025, - 1026, 7, 7, 0, 0, 1026, 1027, 7, 24, 0, 0, 1027, 1028, 7, 10, 0, 0, 1028, - 152, 1, 0, 0, 0, 1029, 1030, 7, 14, 0, 0, 1030, 1031, 7, 5, 0, 0, 1031, - 1032, 7, 10, 0, 0, 1032, 1033, 7, 8, 0, 0, 1033, 1034, 7, 7, 0, 0, 1034, - 1035, 7, 1, 0, 0, 1035, 1036, 7, 7, 0, 0, 1036, 1037, 7, 19, 0, 0, 1037, - 1038, 7, 12, 0, 0, 1038, 1039, 5, 95, 0, 0, 1039, 1040, 7, 4, 0, 0, 1040, - 1041, 7, 7, 0, 0, 1041, 1042, 7, 24, 0, 0, 1042, 1043, 7, 10, 0, 0, 1043, - 1044, 7, 1, 0, 0, 1044, 1045, 7, 4, 0, 0, 1045, 1046, 7, 6, 0, 0, 1046, - 1047, 7, 24, 0, 0, 1047, 1048, 7, 14, 0, 0, 1048, 154, 1, 0, 0, 0, 1049, - 1050, 7, 14, 0, 0, 1050, 1051, 7, 5, 0, 0, 1051, 1052, 7, 10, 0, 0, 1052, - 1053, 7, 8, 0, 0, 1053, 1054, 7, 7, 0, 0, 1054, 1055, 7, 1, 0, 0, 1055, - 1056, 7, 7, 0, 0, 1056, 1057, 7, 19, 0, 0, 1057, 1058, 7, 12, 0, 0, 1058, - 1059, 5, 95, 0, 0, 1059, 1060, 7, 4, 0, 0, 1060, 1061, 7, 7, 0, 0, 1061, - 1062, 7, 24, 0, 0, 1062, 1063, 7, 10, 0, 0, 1063, 1064, 7, 1, 0, 0, 1064, - 1065, 7, 4, 0, 0, 1065, 1066, 7, 6, 0, 0, 1066, 1067, 7, 24, 0, 0, 1067, - 1068, 7, 14, 0, 0, 1068, 1069, 5, 95, 0, 0, 1069, 1070, 7, 4, 0, 0, 1070, - 1071, 7, 28, 0, 0, 1071, 156, 1, 0, 0, 0, 1072, 1073, 7, 18, 0, 0, 1073, - 1074, 7, 7, 0, 0, 1074, 1075, 7, 29, 0, 0, 1075, 1076, 7, 10, 0, 0, 1076, - 1077, 7, 13, 0, 0, 1077, 1078, 7, 8, 0, 0, 1078, 1079, 7, 21, 0, 0, 1079, - 1080, 7, 6, 0, 0, 1080, 1081, 7, 5, 0, 0, 1081, 158, 1, 0, 0, 0, 1082, - 1083, 7, 16, 0, 0, 1083, 1084, 7, 6, 0, 0, 1084, 1085, 7, 5, 0, 0, 1085, - 1086, 7, 8, 0, 0, 1086, 1087, 7, 21, 0, 0, 1087, 1088, 7, 6, 0, 0, 1088, - 1089, 7, 5, 0, 0, 1089, 160, 1, 0, 0, 0, 1090, 1091, 7, 18, 0, 0, 1091, - 1092, 7, 7, 0, 0, 1092, 1093, 7, 29, 0, 0, 1093, 1094, 7, 10, 0, 0, 1094, - 1095, 7, 13, 0, 0, 1095, 1096, 7, 3, 0, 0, 1096, 1097, 7, 7, 0, 0, 1097, - 1098, 7, 12, 0, 0, 1098, 1099, 7, 6, 0, 0, 1099, 1100, 7, 5, 0, 0, 1100, - 1101, 7, 15, 0, 0, 1101, 162, 1, 0, 0, 0, 1102, 1103, 7, 1, 0, 0, 1103, - 1104, 7, 4, 0, 0, 1104, 1105, 7, 5, 0, 0, 1105, 1106, 7, 2, 0, 0, 1106, - 1107, 7, 8, 0, 0, 1107, 1108, 7, 4, 0, 0, 1108, 164, 1, 0, 0, 0, 1109, - 1110, 7, 12, 0, 0, 1110, 1111, 7, 1, 0, 0, 1111, 1112, 7, 4, 0, 0, 1112, - 1113, 7, 5, 0, 0, 1113, 1114, 7, 2, 0, 0, 1114, 1115, 7, 8, 0, 0, 1115, - 1116, 7, 4, 0, 0, 1116, 166, 1, 0, 0, 0, 1117, 1118, 7, 9, 0, 0, 1118, - 1119, 7, 7, 0, 0, 1119, 1120, 7, 1, 0, 0, 1120, 1121, 7, 4, 0, 0, 1121, - 168, 1, 0, 0, 0, 1122, 1123, 7, 24, 0, 0, 1123, 1124, 7, 6, 0, 0, 1124, - 1125, 7, 14, 0, 0, 1125, 170, 1, 0, 0, 0, 1126, 1127, 7, 2, 0, 0, 1127, - 1128, 5, 33, 0, 0, 1128, 172, 1, 0, 0, 0, 1129, 1130, 7, 3, 0, 0, 1130, - 1131, 7, 19, 0, 0, 1131, 1132, 7, 19, 0, 0, 1132, 1133, 7, 9, 0, 0, 1133, - 174, 1, 0, 0, 0, 1134, 1135, 7, 1, 0, 0, 1135, 1136, 7, 4, 0, 0, 1136, - 1137, 7, 5, 0, 0, 1137, 176, 1, 0, 0, 0, 1138, 1139, 7, 16, 0, 0, 1139, - 1140, 7, 3, 0, 0, 1140, 1141, 7, 7, 0, 0, 1141, 1142, 7, 12, 0, 0, 1142, - 178, 1, 0, 0, 0, 1143, 1144, 7, 4, 0, 0, 1144, 1145, 7, 1, 0, 0, 1145, - 180, 1, 0, 0, 0, 1146, 1147, 7, 4, 0, 0, 1147, 1148, 7, 1, 0, 0, 1148, - 1149, 7, 4, 0, 0, 1149, 1150, 7, 28, 0, 0, 1150, 182, 1, 0, 0, 0, 1151, - 1152, 7, 7, 0, 0, 1152, 1153, 7, 15, 0, 0, 1153, 1154, 7, 10, 0, 0, 1154, - 1155, 7, 6, 0, 0, 1155, 1156, 7, 5, 0, 0, 1156, 184, 1, 0, 0, 0, 1157, - 1158, 7, 7, 0, 0, 1158, 1159, 7, 13, 0, 0, 1159, 1160, 7, 6, 0, 0, 1160, - 1161, 7, 15, 0, 0, 1161, 186, 1, 0, 0, 0, 1162, 1163, 7, 7, 0, 0, 1163, - 1164, 7, 8, 0, 0, 1164, 1165, 7, 19, 0, 0, 1165, 1166, 7, 24, 0, 0, 1166, - 1167, 7, 14, 0, 0, 1167, 1168, 7, 19, 0, 0, 1168, 1169, 7, 2, 0, 0, 1169, - 1170, 7, 12, 0, 0, 1170, 1171, 7, 13, 0, 0, 1171, 188, 1, 0, 0, 0, 1172, - 1173, 7, 13, 0, 0, 1173, 1174, 7, 10, 0, 0, 1174, 1175, 7, 8, 0, 0, 1175, - 190, 1, 0, 0, 0, 1176, 1177, 7, 14, 0, 0, 1177, 1178, 7, 4, 0, 0, 1178, - 192, 1, 0, 0, 0, 1179, 1180, 7, 14, 0, 0, 1180, 1181, 7, 4, 0, 0, 1181, - 1182, 7, 1, 0, 0, 1182, 194, 1, 0, 0, 0, 1183, 1184, 7, 14, 0, 0, 1184, - 1185, 7, 4, 0, 0, 1185, 1186, 7, 1, 0, 0, 1186, 1187, 7, 4, 0, 0, 1187, - 1188, 7, 28, 0, 0, 1188, 196, 1, 0, 0, 0, 1189, 1190, 7, 18, 0, 0, 1190, - 1191, 7, 8, 0, 0, 1191, 1192, 7, 21, 0, 0, 1192, 1193, 7, 6, 0, 0, 1193, - 1194, 7, 5, 0, 0, 1194, 198, 1, 0, 0, 0, 1195, 1196, 7, 16, 0, 0, 1196, - 1197, 7, 8, 0, 0, 1197, 1198, 7, 21, 0, 0, 1198, 1199, 7, 6, 0, 0, 1199, - 1200, 7, 5, 0, 0, 1200, 200, 1, 0, 0, 0, 1201, 1202, 7, 18, 0, 0, 1202, - 1203, 7, 3, 0, 0, 1203, 1204, 7, 7, 0, 0, 1204, 1205, 7, 12, 0, 0, 1205, - 202, 1, 0, 0, 0, 1206, 1207, 7, 6, 0, 0, 1207, 1208, 7, 12, 0, 0, 1208, - 1209, 7, 15, 0, 0, 1209, 204, 1, 0, 0, 0, 1210, 1211, 3, 203, 101, 0, 1211, - 1212, 7, 23, 0, 0, 1212, 206, 1, 0, 0, 0, 1213, 1214, 5, 58, 0, 0, 1214, - 1215, 5, 58, 0, 0, 1215, 208, 1, 0, 0, 0, 1216, 1217, 5, 43, 0, 0, 1217, - 210, 1, 0, 0, 0, 1218, 1219, 5, 45, 0, 0, 1219, 212, 1, 0, 0, 0, 1220, - 1221, 5, 42, 0, 0, 1221, 214, 1, 0, 0, 0, 1222, 1223, 5, 47, 0, 0, 1223, - 216, 1, 0, 0, 0, 1224, 1225, 5, 37, 0, 0, 1225, 218, 1, 0, 0, 0, 1226, - 1227, 5, 61, 0, 0, 1227, 220, 1, 0, 0, 0, 1228, 1229, 5, 33, 0, 0, 1229, - 1230, 5, 61, 0, 0, 1230, 222, 1, 0, 0, 0, 1231, 1232, 5, 62, 0, 0, 1232, - 1233, 5, 61, 0, 0, 1233, 224, 1, 0, 0, 0, 1234, 1235, 5, 60, 0, 0, 1235, - 1236, 5, 61, 0, 0, 1236, 226, 1, 0, 0, 0, 1237, 1238, 5, 62, 0, 0, 1238, - 228, 1, 0, 0, 0, 1239, 1240, 5, 60, 0, 0, 1240, 230, 1, 0, 0, 0, 1241, - 1242, 5, 33, 0, 0, 1242, 232, 1, 0, 0, 0, 1243, 1244, 5, 40, 0, 0, 1244, - 234, 1, 0, 0, 0, 1245, 1246, 5, 41, 0, 0, 1246, 236, 1, 0, 0, 0, 1247, - 1248, 5, 91, 0, 0, 1248, 238, 1, 0, 0, 0, 1249, 1250, 5, 93, 0, 0, 1250, - 240, 1, 0, 0, 0, 1251, 1252, 5, 44, 0, 0, 1252, 242, 1, 0, 0, 0, 1253, - 1254, 5, 58, 0, 0, 1254, 244, 1, 0, 0, 0, 1255, 1256, 5, 63, 0, 0, 1256, - 246, 1, 0, 0, 0, 1257, 1258, 5, 35, 0, 0, 1258, 248, 1, 0, 0, 0, 1259, - 1260, 5, 46, 0, 0, 1260, 250, 1, 0, 0, 0, 1261, 1262, 7, 6, 0, 0, 1262, - 1263, 7, 12, 0, 0, 1263, 1264, 7, 13, 0, 0, 1264, 252, 1, 0, 0, 0, 1265, - 1266, 7, 19, 0, 0, 1266, 1267, 7, 5, 0, 0, 1267, 254, 1, 0, 0, 0, 1268, - 1269, 5, 58, 0, 0, 1269, 1270, 5, 61, 0, 0, 1270, 256, 1, 0, 0, 0, 1271, - 1272, 5, 45, 0, 0, 1272, 1273, 5, 62, 0, 0, 1273, 258, 1, 0, 0, 0, 1274, - 1278, 2, 49, 57, 0, 1275, 1277, 3, 261, 130, 0, 1276, 1275, 1, 0, 0, 0, - 1277, 1280, 1, 0, 0, 0, 1278, 1276, 1, 0, 0, 0, 1278, 1279, 1, 0, 0, 0, - 1279, 1283, 1, 0, 0, 0, 1280, 1278, 1, 0, 0, 0, 1281, 1283, 5, 48, 0, 0, - 1282, 1274, 1, 0, 0, 0, 1282, 1281, 1, 0, 0, 0, 1283, 260, 1, 0, 0, 0, - 1284, 1285, 2, 48, 57, 0, 1285, 262, 1, 0, 0, 0, 1286, 1288, 5, 45, 0, - 0, 1287, 1286, 1, 0, 0, 0, 1287, 1288, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, - 0, 1289, 1290, 3, 259, 129, 0, 1290, 264, 1, 0, 0, 0, 1291, 1296, 7, 30, - 0, 0, 1292, 1295, 7, 30, 0, 0, 1293, 1295, 3, 261, 130, 0, 1294, 1292, - 1, 0, 0, 0, 1294, 1293, 1, 0, 0, 0, 1295, 1298, 1, 0, 0, 0, 1296, 1294, - 1, 0, 0, 0, 1296, 1297, 1, 0, 0, 0, 1297, 266, 1, 0, 0, 0, 1298, 1296, - 1, 0, 0, 0, 1299, 1301, 5, 13, 0, 0, 1300, 1302, 5, 10, 0, 0, 1301, 1300, - 1, 0, 0, 0, 1301, 1302, 1, 0, 0, 0, 1302, 1305, 1, 0, 0, 0, 1303, 1305, - 5, 10, 0, 0, 1304, 1299, 1, 0, 0, 0, 1304, 1303, 1, 0, 0, 0, 1305, 268, - 1, 0, 0, 0, 53, 0, 272, 370, 376, 378, 386, 390, 541, 546, 551, 557, 559, - 562, 567, 573, 576, 580, 585, 587, 590, 599, 610, 636, 638, 662, 664, 678, - 680, 719, 729, 738, 748, 755, 760, 767, 772, 779, 784, 789, 794, 809, 811, - 828, 840, 843, 848, 1278, 1282, 1287, 1294, 1296, 1301, 1304, 1, 0, 1, + 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, + 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, + 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, + 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, + 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, + 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, + 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, + 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, + 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 76, + 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, 76, 1, + 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, + 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, + 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, + 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, + 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, + 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, + 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, + 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, + 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, + 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 87, 1, + 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, + 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, + 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, + 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, + 95, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, + 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, + 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, + 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 104, + 1, 104, 1, 104, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 108, + 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 112, + 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 115, 1, 115, + 1, 116, 1, 116, 1, 117, 1, 117, 1, 118, 1, 118, 1, 119, 1, 119, 1, 120, + 1, 120, 1, 121, 1, 121, 1, 122, 1, 122, 1, 123, 1, 123, 1, 124, 1, 124, + 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, + 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 5, 130, + 1284, 8, 130, 10, 130, 12, 130, 1287, 9, 130, 1, 130, 3, 130, 1290, 8, + 130, 1, 131, 1, 131, 1, 132, 3, 132, 1295, 8, 132, 1, 132, 1, 132, 1, 133, + 1, 133, 1, 133, 5, 133, 1302, 8, 133, 10, 133, 12, 133, 1305, 9, 133, 1, + 134, 1, 134, 3, 134, 1309, 8, 134, 1, 134, 3, 134, 1312, 8, 134, 0, 0, + 135, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, + 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, + 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 0, + 57, 0, 59, 28, 61, 29, 63, 30, 65, 31, 67, 32, 69, 33, 71, 34, 73, 35, + 75, 36, 77, 37, 79, 38, 81, 39, 83, 40, 85, 41, 87, 42, 89, 43, 91, 0, + 93, 44, 95, 45, 97, 46, 99, 47, 101, 48, 103, 49, 105, 50, 107, 0, 109, + 51, 111, 52, 113, 53, 115, 54, 117, 55, 119, 56, 121, 57, 123, 58, 125, + 59, 127, 60, 129, 61, 131, 62, 133, 63, 135, 64, 137, 65, 139, 66, 141, + 67, 143, 68, 145, 69, 147, 70, 149, 71, 151, 72, 153, 73, 155, 74, 157, + 75, 159, 76, 161, 77, 163, 78, 165, 79, 167, 80, 169, 81, 171, 82, 173, + 83, 175, 84, 177, 85, 179, 86, 181, 87, 183, 88, 185, 89, 187, 90, 189, + 91, 191, 92, 193, 93, 195, 94, 197, 95, 199, 96, 201, 97, 203, 98, 205, + 99, 207, 100, 209, 101, 211, 102, 213, 103, 215, 104, 217, 105, 219, 106, + 221, 107, 223, 108, 225, 109, 227, 110, 229, 111, 231, 112, 233, 113, 235, + 114, 237, 115, 239, 116, 241, 117, 243, 118, 245, 119, 247, 120, 249, 121, + 251, 122, 253, 123, 255, 124, 257, 125, 259, 126, 261, 0, 263, 0, 265, + 127, 267, 128, 269, 129, 1, 0, 31, 3, 0, 9, 10, 13, 13, 32, 32, 2, 0, 83, + 83, 115, 115, 2, 0, 85, 85, 117, 117, 2, 0, 66, 66, 98, 98, 2, 0, 84, 84, + 116, 116, 2, 0, 82, 82, 114, 114, 2, 0, 65, 65, 97, 97, 2, 0, 73, 73, 105, + 105, 2, 0, 67, 67, 99, 99, 2, 0, 76, 76, 108, 108, 2, 0, 69, 69, 101, 101, + 2, 0, 71, 71, 103, 103, 2, 0, 78, 78, 110, 110, 2, 0, 68, 68, 100, 100, + 2, 0, 80, 80, 112, 112, 2, 0, 89, 89, 121, 121, 2, 0, 86, 86, 118, 118, + 2, 0, 10, 10, 13, 13, 2, 0, 70, 70, 102, 102, 2, 0, 79, 79, 111, 111, 2, + 0, 87, 87, 119, 119, 2, 0, 72, 72, 104, 104, 2, 0, 43, 43, 45, 45, 1, 0, + 48, 57, 2, 0, 77, 77, 109, 109, 2, 0, 39, 39, 92, 92, 1, 0, 42, 42, 2, + 0, 42, 42, 47, 47, 2, 0, 90, 90, 122, 122, 2, 0, 88, 88, 120, 120, 4, 0, + 36, 36, 65, 90, 95, 95, 97, 122, 1361, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, + 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, + 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, + 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, + 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, + 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, + 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, + 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, + 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, + 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, + 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, + 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, + 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, + 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, + 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, + 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, + 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, + 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, + 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, + 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, + 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, + 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, + 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, + 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, + 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, + 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, + 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, + 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, + 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, + 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, + 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, + 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, + 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, + 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, + 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, + 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 1, 272, 1, 0, 0, 0, 3, 278, 1, + 0, 0, 0, 5, 282, 1, 0, 0, 0, 7, 304, 1, 0, 0, 0, 9, 329, 1, 0, 0, 0, 11, + 347, 1, 0, 0, 0, 13, 368, 1, 0, 0, 0, 15, 382, 1, 0, 0, 0, 17, 396, 1, + 0, 0, 0, 19, 403, 1, 0, 0, 0, 21, 412, 1, 0, 0, 0, 23, 425, 1, 0, 0, 0, + 25, 434, 1, 0, 0, 0, 27, 443, 1, 0, 0, 0, 29, 449, 1, 0, 0, 0, 31, 458, + 1, 0, 0, 0, 33, 465, 1, 0, 0, 0, 35, 477, 1, 0, 0, 0, 37, 481, 1, 0, 0, + 0, 39, 494, 1, 0, 0, 0, 41, 507, 1, 0, 0, 0, 43, 521, 1, 0, 0, 0, 45, 533, + 1, 0, 0, 0, 47, 543, 1, 0, 0, 0, 49, 548, 1, 0, 0, 0, 51, 601, 1, 0, 0, + 0, 53, 612, 1, 0, 0, 0, 55, 614, 1, 0, 0, 0, 57, 619, 1, 0, 0, 0, 59, 622, + 1, 0, 0, 0, 61, 648, 1, 0, 0, 0, 63, 670, 1, 0, 0, 0, 65, 686, 1, 0, 0, + 0, 67, 694, 1, 0, 0, 0, 69, 696, 1, 0, 0, 0, 71, 698, 1, 0, 0, 0, 73, 700, + 1, 0, 0, 0, 75, 702, 1, 0, 0, 0, 77, 704, 1, 0, 0, 0, 79, 706, 1, 0, 0, + 0, 81, 708, 1, 0, 0, 0, 83, 710, 1, 0, 0, 0, 85, 712, 1, 0, 0, 0, 87, 731, + 1, 0, 0, 0, 89, 750, 1, 0, 0, 0, 91, 774, 1, 0, 0, 0, 93, 776, 1, 0, 0, + 0, 95, 800, 1, 0, 0, 0, 97, 805, 1, 0, 0, 0, 99, 818, 1, 0, 0, 0, 101, + 823, 1, 0, 0, 0, 103, 829, 1, 0, 0, 0, 105, 840, 1, 0, 0, 0, 107, 863, + 1, 0, 0, 0, 109, 865, 1, 0, 0, 0, 111, 868, 1, 0, 0, 0, 113, 873, 1, 0, + 0, 0, 115, 878, 1, 0, 0, 0, 117, 883, 1, 0, 0, 0, 119, 891, 1, 0, 0, 0, + 121, 894, 1, 0, 0, 0, 123, 898, 1, 0, 0, 0, 125, 902, 1, 0, 0, 0, 127, + 906, 1, 0, 0, 0, 129, 911, 1, 0, 0, 0, 131, 916, 1, 0, 0, 0, 133, 923, + 1, 0, 0, 0, 135, 930, 1, 0, 0, 0, 137, 940, 1, 0, 0, 0, 139, 953, 1, 0, + 0, 0, 141, 958, 1, 0, 0, 0, 143, 963, 1, 0, 0, 0, 145, 977, 1, 0, 0, 0, + 147, 990, 1, 0, 0, 0, 149, 1008, 1, 0, 0, 0, 151, 1013, 1, 0, 0, 0, 153, + 1021, 1, 0, 0, 0, 155, 1036, 1, 0, 0, 0, 157, 1056, 1, 0, 0, 0, 159, 1079, + 1, 0, 0, 0, 161, 1089, 1, 0, 0, 0, 163, 1097, 1, 0, 0, 0, 165, 1109, 1, + 0, 0, 0, 167, 1116, 1, 0, 0, 0, 169, 1124, 1, 0, 0, 0, 171, 1129, 1, 0, + 0, 0, 173, 1133, 1, 0, 0, 0, 175, 1136, 1, 0, 0, 0, 177, 1141, 1, 0, 0, + 0, 179, 1145, 1, 0, 0, 0, 181, 1150, 1, 0, 0, 0, 183, 1153, 1, 0, 0, 0, + 185, 1158, 1, 0, 0, 0, 187, 1164, 1, 0, 0, 0, 189, 1169, 1, 0, 0, 0, 191, + 1179, 1, 0, 0, 0, 193, 1183, 1, 0, 0, 0, 195, 1186, 1, 0, 0, 0, 197, 1190, + 1, 0, 0, 0, 199, 1196, 1, 0, 0, 0, 201, 1202, 1, 0, 0, 0, 203, 1208, 1, + 0, 0, 0, 205, 1213, 1, 0, 0, 0, 207, 1217, 1, 0, 0, 0, 209, 1220, 1, 0, + 0, 0, 211, 1223, 1, 0, 0, 0, 213, 1225, 1, 0, 0, 0, 215, 1227, 1, 0, 0, + 0, 217, 1229, 1, 0, 0, 0, 219, 1231, 1, 0, 0, 0, 221, 1233, 1, 0, 0, 0, + 223, 1235, 1, 0, 0, 0, 225, 1238, 1, 0, 0, 0, 227, 1241, 1, 0, 0, 0, 229, + 1244, 1, 0, 0, 0, 231, 1246, 1, 0, 0, 0, 233, 1248, 1, 0, 0, 0, 235, 1250, + 1, 0, 0, 0, 237, 1252, 1, 0, 0, 0, 239, 1254, 1, 0, 0, 0, 241, 1256, 1, + 0, 0, 0, 243, 1258, 1, 0, 0, 0, 245, 1260, 1, 0, 0, 0, 247, 1262, 1, 0, + 0, 0, 249, 1264, 1, 0, 0, 0, 251, 1266, 1, 0, 0, 0, 253, 1268, 1, 0, 0, + 0, 255, 1272, 1, 0, 0, 0, 257, 1275, 1, 0, 0, 0, 259, 1278, 1, 0, 0, 0, + 261, 1289, 1, 0, 0, 0, 263, 1291, 1, 0, 0, 0, 265, 1294, 1, 0, 0, 0, 267, + 1298, 1, 0, 0, 0, 269, 1311, 1, 0, 0, 0, 271, 273, 7, 0, 0, 0, 272, 271, + 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 272, 1, 0, 0, 0, 274, 275, 1, 0, + 0, 0, 275, 276, 1, 0, 0, 0, 276, 277, 6, 0, 0, 0, 277, 2, 1, 0, 0, 0, 278, + 279, 5, 35, 0, 0, 279, 280, 5, 35, 0, 0, 280, 281, 5, 35, 0, 0, 281, 4, + 1, 0, 0, 0, 282, 283, 7, 1, 0, 0, 283, 284, 7, 2, 0, 0, 284, 285, 7, 3, + 0, 0, 285, 286, 7, 1, 0, 0, 286, 287, 7, 4, 0, 0, 287, 288, 7, 5, 0, 0, + 288, 289, 7, 6, 0, 0, 289, 290, 7, 7, 0, 0, 290, 291, 7, 4, 0, 0, 291, + 292, 5, 95, 0, 0, 292, 293, 7, 1, 0, 0, 293, 294, 7, 8, 0, 0, 294, 295, + 7, 6, 0, 0, 295, 296, 7, 9, 0, 0, 296, 297, 7, 6, 0, 0, 297, 298, 7, 5, + 0, 0, 298, 299, 5, 95, 0, 0, 299, 300, 7, 4, 0, 0, 300, 301, 7, 10, 0, + 0, 301, 302, 7, 1, 0, 0, 302, 303, 7, 4, 0, 0, 303, 6, 1, 0, 0, 0, 304, + 305, 7, 1, 0, 0, 305, 306, 7, 2, 0, 0, 306, 307, 7, 3, 0, 0, 307, 308, + 7, 1, 0, 0, 308, 309, 7, 4, 0, 0, 309, 310, 7, 5, 0, 0, 310, 311, 7, 6, + 0, 0, 311, 312, 7, 7, 0, 0, 312, 313, 7, 4, 0, 0, 313, 314, 5, 95, 0, 0, + 314, 315, 7, 6, 0, 0, 315, 316, 7, 11, 0, 0, 316, 317, 7, 11, 0, 0, 317, + 318, 7, 5, 0, 0, 318, 319, 7, 10, 0, 0, 319, 320, 7, 11, 0, 0, 320, 321, + 7, 6, 0, 0, 321, 322, 7, 4, 0, 0, 322, 323, 7, 10, 0, 0, 323, 324, 5, 95, + 0, 0, 324, 325, 7, 4, 0, 0, 325, 326, 7, 10, 0, 0, 326, 327, 7, 1, 0, 0, + 327, 328, 7, 4, 0, 0, 328, 8, 1, 0, 0, 0, 329, 330, 7, 1, 0, 0, 330, 331, + 7, 2, 0, 0, 331, 332, 7, 3, 0, 0, 332, 333, 7, 1, 0, 0, 333, 334, 7, 4, + 0, 0, 334, 335, 7, 5, 0, 0, 335, 336, 7, 6, 0, 0, 336, 337, 7, 7, 0, 0, + 337, 338, 7, 4, 0, 0, 338, 339, 5, 95, 0, 0, 339, 340, 7, 7, 0, 0, 340, + 341, 7, 12, 0, 0, 341, 342, 7, 8, 0, 0, 342, 343, 7, 9, 0, 0, 343, 344, + 7, 2, 0, 0, 344, 345, 7, 13, 0, 0, 345, 346, 7, 10, 0, 0, 346, 10, 1, 0, + 0, 0, 347, 348, 7, 1, 0, 0, 348, 349, 7, 2, 0, 0, 349, 350, 7, 3, 0, 0, + 350, 351, 7, 1, 0, 0, 351, 352, 7, 4, 0, 0, 352, 353, 7, 5, 0, 0, 353, + 354, 7, 6, 0, 0, 354, 355, 7, 7, 0, 0, 355, 356, 7, 4, 0, 0, 356, 357, + 5, 95, 0, 0, 357, 358, 7, 13, 0, 0, 358, 359, 7, 10, 0, 0, 359, 360, 7, + 14, 0, 0, 360, 361, 7, 10, 0, 0, 361, 362, 7, 12, 0, 0, 362, 363, 7, 13, + 0, 0, 363, 364, 7, 10, 0, 0, 364, 365, 7, 12, 0, 0, 365, 366, 7, 8, 0, + 0, 366, 367, 7, 15, 0, 0, 367, 12, 1, 0, 0, 0, 368, 370, 7, 16, 0, 0, 369, + 371, 3, 107, 53, 0, 370, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 370, + 1, 0, 0, 0, 372, 373, 1, 0, 0, 0, 373, 380, 1, 0, 0, 0, 374, 376, 5, 46, + 0, 0, 375, 377, 3, 107, 53, 0, 376, 375, 1, 0, 0, 0, 377, 378, 1, 0, 0, + 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 381, 1, 0, 0, 0, 380, + 374, 1, 0, 0, 0, 380, 381, 1, 0, 0, 0, 381, 14, 1, 0, 0, 0, 382, 383, 5, + 35, 0, 0, 383, 384, 5, 32, 0, 0, 384, 388, 1, 0, 0, 0, 385, 387, 8, 17, + 0, 0, 386, 385, 1, 0, 0, 0, 387, 390, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, + 388, 389, 1, 0, 0, 0, 389, 392, 1, 0, 0, 0, 390, 388, 1, 0, 0, 0, 391, + 393, 5, 13, 0, 0, 392, 391, 1, 0, 0, 0, 392, 393, 1, 0, 0, 0, 393, 394, + 1, 0, 0, 0, 394, 395, 5, 10, 0, 0, 395, 16, 1, 0, 0, 0, 396, 397, 7, 13, + 0, 0, 397, 398, 7, 10, 0, 0, 398, 399, 7, 18, 0, 0, 399, 400, 7, 7, 0, + 0, 400, 401, 7, 12, 0, 0, 401, 402, 7, 10, 0, 0, 402, 18, 1, 0, 0, 0, 403, + 404, 5, 60, 0, 0, 404, 405, 5, 33, 0, 0, 405, 406, 7, 10, 0, 0, 406, 407, + 7, 5, 0, 0, 407, 408, 7, 5, 0, 0, 408, 409, 7, 19, 0, 0, 409, 410, 7, 5, + 0, 0, 410, 411, 5, 62, 0, 0, 411, 20, 1, 0, 0, 0, 412, 413, 5, 60, 0, 0, + 413, 414, 5, 33, 0, 0, 414, 415, 7, 2, 0, 0, 415, 416, 7, 12, 0, 0, 416, + 417, 7, 13, 0, 0, 417, 418, 7, 10, 0, 0, 418, 419, 7, 18, 0, 0, 419, 420, + 7, 7, 0, 0, 420, 421, 7, 12, 0, 0, 421, 422, 7, 10, 0, 0, 422, 423, 7, + 13, 0, 0, 423, 424, 5, 62, 0, 0, 424, 22, 1, 0, 0, 0, 425, 426, 7, 19, + 0, 0, 426, 427, 7, 16, 0, 0, 427, 428, 7, 10, 0, 0, 428, 429, 7, 5, 0, + 0, 429, 430, 7, 18, 0, 0, 430, 431, 7, 9, 0, 0, 431, 432, 7, 19, 0, 0, + 432, 433, 7, 20, 0, 0, 433, 24, 1, 0, 0, 0, 434, 435, 7, 5, 0, 0, 435, + 436, 7, 19, 0, 0, 436, 437, 7, 2, 0, 0, 437, 438, 7, 12, 0, 0, 438, 439, + 7, 13, 0, 0, 439, 440, 7, 7, 0, 0, 440, 441, 7, 12, 0, 0, 441, 442, 7, + 11, 0, 0, 442, 26, 1, 0, 0, 0, 443, 444, 7, 10, 0, 0, 444, 445, 7, 5, 0, + 0, 445, 446, 7, 5, 0, 0, 446, 447, 7, 19, 0, 0, 447, 448, 7, 5, 0, 0, 448, + 28, 1, 0, 0, 0, 449, 450, 7, 1, 0, 0, 450, 451, 7, 6, 0, 0, 451, 452, 7, + 4, 0, 0, 452, 453, 7, 2, 0, 0, 453, 454, 7, 5, 0, 0, 454, 455, 7, 6, 0, + 0, 455, 456, 7, 4, 0, 0, 456, 457, 7, 10, 0, 0, 457, 30, 1, 0, 0, 0, 458, + 459, 7, 1, 0, 0, 459, 460, 7, 7, 0, 0, 460, 461, 7, 9, 0, 0, 461, 462, + 7, 10, 0, 0, 462, 463, 7, 12, 0, 0, 463, 464, 7, 4, 0, 0, 464, 32, 1, 0, + 0, 0, 465, 466, 7, 4, 0, 0, 466, 467, 7, 7, 0, 0, 467, 468, 7, 10, 0, 0, + 468, 469, 5, 95, 0, 0, 469, 470, 7, 4, 0, 0, 470, 471, 7, 19, 0, 0, 471, + 472, 5, 95, 0, 0, 472, 473, 7, 10, 0, 0, 473, 474, 7, 16, 0, 0, 474, 475, + 7, 10, 0, 0, 475, 476, 7, 12, 0, 0, 476, 34, 1, 0, 0, 0, 477, 478, 7, 12, + 0, 0, 478, 479, 7, 6, 0, 0, 479, 480, 7, 12, 0, 0, 480, 36, 1, 0, 0, 0, + 481, 482, 7, 6, 0, 0, 482, 483, 7, 8, 0, 0, 483, 484, 7, 8, 0, 0, 484, + 485, 7, 10, 0, 0, 485, 486, 7, 14, 0, 0, 486, 487, 7, 4, 0, 0, 487, 488, + 5, 95, 0, 0, 488, 489, 7, 12, 0, 0, 489, 490, 7, 2, 0, 0, 490, 491, 7, + 9, 0, 0, 491, 492, 7, 9, 0, 0, 492, 493, 7, 1, 0, 0, 493, 38, 1, 0, 0, + 0, 494, 495, 7, 7, 0, 0, 495, 496, 7, 11, 0, 0, 496, 497, 7, 12, 0, 0, + 497, 498, 7, 19, 0, 0, 498, 499, 7, 5, 0, 0, 499, 500, 7, 10, 0, 0, 500, + 501, 5, 95, 0, 0, 501, 502, 7, 12, 0, 0, 502, 503, 7, 2, 0, 0, 503, 504, + 7, 9, 0, 0, 504, 505, 7, 9, 0, 0, 505, 506, 7, 1, 0, 0, 506, 40, 1, 0, + 0, 0, 507, 508, 7, 12, 0, 0, 508, 509, 7, 2, 0, 0, 509, 510, 7, 9, 0, 0, + 510, 511, 7, 9, 0, 0, 511, 512, 5, 95, 0, 0, 512, 513, 7, 21, 0, 0, 513, + 514, 7, 6, 0, 0, 514, 515, 7, 12, 0, 0, 515, 516, 7, 13, 0, 0, 516, 517, + 7, 9, 0, 0, 517, 518, 7, 7, 0, 0, 518, 519, 7, 12, 0, 0, 519, 520, 7, 11, + 0, 0, 520, 42, 1, 0, 0, 0, 521, 522, 7, 1, 0, 0, 522, 523, 7, 14, 0, 0, + 523, 524, 7, 6, 0, 0, 524, 525, 7, 8, 0, 0, 525, 526, 7, 10, 0, 0, 526, + 527, 7, 1, 0, 0, 527, 528, 5, 95, 0, 0, 528, 529, 7, 19, 0, 0, 529, 530, + 7, 12, 0, 0, 530, 531, 7, 9, 0, 0, 531, 532, 7, 15, 0, 0, 532, 44, 1, 0, + 0, 0, 533, 534, 7, 4, 0, 0, 534, 535, 7, 5, 0, 0, 535, 536, 7, 2, 0, 0, + 536, 537, 7, 12, 0, 0, 537, 538, 7, 8, 0, 0, 538, 539, 7, 6, 0, 0, 539, + 540, 7, 4, 0, 0, 540, 541, 7, 10, 0, 0, 541, 46, 1, 0, 0, 0, 542, 544, + 7, 22, 0, 0, 543, 542, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 545, 1, 0, + 0, 0, 545, 546, 3, 261, 130, 0, 546, 48, 1, 0, 0, 0, 547, 549, 7, 22, 0, + 0, 548, 547, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 551, 1, 0, 0, 0, 550, + 552, 7, 23, 0, 0, 551, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 551, + 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 561, 1, 0, 0, 0, 555, 557, 5, 46, + 0, 0, 556, 558, 7, 23, 0, 0, 557, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, + 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 562, 1, 0, 0, 0, 561, + 555, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 50, 1, 0, 0, 0, 563, 565, 7, + 22, 0, 0, 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 567, 1, 0, 0, + 0, 566, 568, 7, 23, 0, 0, 567, 566, 1, 0, 0, 0, 568, 569, 1, 0, 0, 0, 569, + 567, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 578, 1, 0, 0, 0, 571, 575, + 5, 46, 0, 0, 572, 574, 7, 23, 0, 0, 573, 572, 1, 0, 0, 0, 574, 577, 1, + 0, 0, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 579, 1, 0, 0, + 0, 577, 575, 1, 0, 0, 0, 578, 571, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, + 589, 1, 0, 0, 0, 580, 582, 7, 10, 0, 0, 581, 583, 7, 22, 0, 0, 582, 581, + 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 585, 1, 0, 0, 0, 584, 586, 7, 23, + 0, 0, 585, 584, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 585, 1, 0, 0, 0, + 587, 588, 1, 0, 0, 0, 588, 590, 1, 0, 0, 0, 589, 580, 1, 0, 0, 0, 589, + 590, 1, 0, 0, 0, 590, 602, 1, 0, 0, 0, 591, 593, 7, 22, 0, 0, 592, 591, + 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 594, 1, 0, 0, 0, 594, 595, 7, 7, + 0, 0, 595, 596, 7, 12, 0, 0, 596, 602, 7, 18, 0, 0, 597, 598, 7, 1, 0, + 0, 598, 599, 7, 12, 0, 0, 599, 600, 7, 6, 0, 0, 600, 602, 7, 12, 0, 0, + 601, 564, 1, 0, 0, 0, 601, 592, 1, 0, 0, 0, 601, 597, 1, 0, 0, 0, 602, + 52, 1, 0, 0, 0, 603, 604, 7, 4, 0, 0, 604, 605, 7, 5, 0, 0, 605, 606, 7, + 2, 0, 0, 606, 613, 7, 10, 0, 0, 607, 608, 7, 18, 0, 0, 608, 609, 7, 6, + 0, 0, 609, 610, 7, 9, 0, 0, 610, 611, 7, 1, 0, 0, 611, 613, 7, 10, 0, 0, + 612, 603, 1, 0, 0, 0, 612, 607, 1, 0, 0, 0, 613, 54, 1, 0, 0, 0, 614, 615, + 7, 23, 0, 0, 615, 616, 7, 23, 0, 0, 616, 617, 7, 23, 0, 0, 617, 618, 7, + 23, 0, 0, 618, 56, 1, 0, 0, 0, 619, 620, 7, 23, 0, 0, 620, 621, 7, 23, + 0, 0, 621, 58, 1, 0, 0, 0, 622, 623, 5, 39, 0, 0, 623, 624, 3, 55, 27, + 0, 624, 625, 5, 45, 0, 0, 625, 626, 3, 57, 28, 0, 626, 627, 5, 45, 0, 0, + 627, 628, 3, 57, 28, 0, 628, 629, 7, 4, 0, 0, 629, 630, 3, 57, 28, 0, 630, + 631, 5, 58, 0, 0, 631, 632, 3, 57, 28, 0, 632, 633, 5, 58, 0, 0, 633, 640, + 3, 57, 28, 0, 634, 636, 5, 46, 0, 0, 635, 637, 7, 23, 0, 0, 636, 635, 1, + 0, 0, 0, 637, 638, 1, 0, 0, 0, 638, 636, 1, 0, 0, 0, 638, 639, 1, 0, 0, + 0, 639, 641, 1, 0, 0, 0, 640, 634, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, + 642, 1, 0, 0, 0, 642, 643, 7, 22, 0, 0, 643, 644, 3, 57, 28, 0, 644, 645, + 5, 58, 0, 0, 645, 646, 3, 57, 28, 0, 646, 647, 5, 39, 0, 0, 647, 60, 1, + 0, 0, 0, 648, 649, 5, 39, 0, 0, 649, 650, 3, 55, 27, 0, 650, 651, 5, 45, + 0, 0, 651, 652, 3, 57, 28, 0, 652, 653, 5, 45, 0, 0, 653, 654, 3, 57, 28, + 0, 654, 655, 7, 4, 0, 0, 655, 656, 3, 57, 28, 0, 656, 657, 5, 58, 0, 0, + 657, 658, 3, 57, 28, 0, 658, 659, 5, 58, 0, 0, 659, 666, 3, 57, 28, 0, + 660, 662, 5, 46, 0, 0, 661, 663, 7, 23, 0, 0, 662, 661, 1, 0, 0, 0, 663, + 664, 1, 0, 0, 0, 664, 662, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 667, + 1, 0, 0, 0, 666, 660, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 668, 1, 0, + 0, 0, 668, 669, 5, 39, 0, 0, 669, 62, 1, 0, 0, 0, 670, 671, 5, 39, 0, 0, + 671, 672, 3, 57, 28, 0, 672, 673, 5, 58, 0, 0, 673, 674, 3, 57, 28, 0, + 674, 675, 5, 58, 0, 0, 675, 682, 3, 57, 28, 0, 676, 678, 5, 46, 0, 0, 677, + 679, 7, 23, 0, 0, 678, 677, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 678, + 1, 0, 0, 0, 680, 681, 1, 0, 0, 0, 681, 683, 1, 0, 0, 0, 682, 676, 1, 0, + 0, 0, 682, 683, 1, 0, 0, 0, 683, 684, 1, 0, 0, 0, 684, 685, 5, 39, 0, 0, + 685, 64, 1, 0, 0, 0, 686, 687, 5, 39, 0, 0, 687, 688, 3, 55, 27, 0, 688, + 689, 5, 45, 0, 0, 689, 690, 3, 57, 28, 0, 690, 691, 5, 45, 0, 0, 691, 692, + 3, 57, 28, 0, 692, 693, 5, 39, 0, 0, 693, 66, 1, 0, 0, 0, 694, 695, 7, + 14, 0, 0, 695, 68, 1, 0, 0, 0, 696, 697, 7, 4, 0, 0, 697, 70, 1, 0, 0, + 0, 698, 699, 7, 15, 0, 0, 699, 72, 1, 0, 0, 0, 700, 701, 7, 24, 0, 0, 701, + 74, 1, 0, 0, 0, 702, 703, 7, 13, 0, 0, 703, 76, 1, 0, 0, 0, 704, 705, 7, + 21, 0, 0, 705, 78, 1, 0, 0, 0, 706, 707, 7, 1, 0, 0, 707, 80, 1, 0, 0, + 0, 708, 709, 7, 18, 0, 0, 709, 82, 1, 0, 0, 0, 710, 711, 3, 231, 115, 0, + 711, 84, 1, 0, 0, 0, 712, 713, 3, 229, 114, 0, 713, 86, 1, 0, 0, 0, 714, + 715, 5, 39, 0, 0, 715, 716, 3, 67, 33, 0, 716, 717, 3, 47, 23, 0, 717, + 721, 3, 71, 35, 0, 718, 719, 3, 47, 23, 0, 719, 720, 3, 73, 36, 0, 720, + 722, 1, 0, 0, 0, 721, 718, 1, 0, 0, 0, 721, 722, 1, 0, 0, 0, 722, 723, + 1, 0, 0, 0, 723, 724, 5, 39, 0, 0, 724, 732, 1, 0, 0, 0, 725, 726, 5, 39, + 0, 0, 726, 727, 3, 67, 33, 0, 727, 728, 3, 47, 23, 0, 728, 729, 3, 73, + 36, 0, 729, 730, 5, 39, 0, 0, 730, 732, 1, 0, 0, 0, 731, 714, 1, 0, 0, + 0, 731, 725, 1, 0, 0, 0, 732, 88, 1, 0, 0, 0, 733, 734, 5, 39, 0, 0, 734, + 735, 3, 67, 33, 0, 735, 736, 3, 47, 23, 0, 736, 740, 3, 75, 37, 0, 737, + 738, 3, 69, 34, 0, 738, 739, 3, 91, 45, 0, 739, 741, 1, 0, 0, 0, 740, 737, + 1, 0, 0, 0, 740, 741, 1, 0, 0, 0, 741, 742, 1, 0, 0, 0, 742, 743, 5, 39, + 0, 0, 743, 751, 1, 0, 0, 0, 744, 745, 5, 39, 0, 0, 745, 746, 3, 67, 33, + 0, 746, 747, 3, 69, 34, 0, 747, 748, 3, 91, 45, 0, 748, 749, 5, 39, 0, + 0, 749, 751, 1, 0, 0, 0, 750, 733, 1, 0, 0, 0, 750, 744, 1, 0, 0, 0, 751, + 90, 1, 0, 0, 0, 752, 753, 3, 47, 23, 0, 753, 757, 3, 77, 38, 0, 754, 755, + 3, 47, 23, 0, 755, 756, 3, 73, 36, 0, 756, 758, 1, 0, 0, 0, 757, 754, 1, + 0, 0, 0, 757, 758, 1, 0, 0, 0, 758, 762, 1, 0, 0, 0, 759, 760, 3, 49, 24, + 0, 760, 761, 3, 79, 39, 0, 761, 763, 1, 0, 0, 0, 762, 759, 1, 0, 0, 0, + 762, 763, 1, 0, 0, 0, 763, 775, 1, 0, 0, 0, 764, 765, 3, 47, 23, 0, 765, + 769, 3, 73, 36, 0, 766, 767, 3, 49, 24, 0, 767, 768, 3, 79, 39, 0, 768, + 770, 1, 0, 0, 0, 769, 766, 1, 0, 0, 0, 769, 770, 1, 0, 0, 0, 770, 775, + 1, 0, 0, 0, 771, 772, 3, 49, 24, 0, 772, 773, 3, 79, 39, 0, 773, 775, 1, + 0, 0, 0, 774, 752, 1, 0, 0, 0, 774, 764, 1, 0, 0, 0, 774, 771, 1, 0, 0, + 0, 775, 92, 1, 0, 0, 0, 776, 777, 5, 39, 0, 0, 777, 781, 3, 67, 33, 0, + 778, 779, 3, 47, 23, 0, 779, 780, 3, 71, 35, 0, 780, 782, 1, 0, 0, 0, 781, + 778, 1, 0, 0, 0, 781, 782, 1, 0, 0, 0, 782, 786, 1, 0, 0, 0, 783, 784, + 3, 47, 23, 0, 784, 785, 3, 73, 36, 0, 785, 787, 1, 0, 0, 0, 786, 783, 1, + 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 791, 1, 0, 0, 0, 788, 789, 3, 47, 23, + 0, 789, 790, 3, 75, 37, 0, 790, 792, 1, 0, 0, 0, 791, 788, 1, 0, 0, 0, + 791, 792, 1, 0, 0, 0, 792, 796, 1, 0, 0, 0, 793, 794, 3, 69, 34, 0, 794, + 795, 3, 91, 45, 0, 795, 797, 1, 0, 0, 0, 796, 793, 1, 0, 0, 0, 796, 797, + 1, 0, 0, 0, 797, 798, 1, 0, 0, 0, 798, 799, 5, 39, 0, 0, 799, 94, 1, 0, + 0, 0, 800, 801, 7, 12, 0, 0, 801, 802, 7, 2, 0, 0, 802, 803, 7, 9, 0, 0, + 803, 804, 7, 9, 0, 0, 804, 96, 1, 0, 0, 0, 805, 813, 5, 39, 0, 0, 806, + 807, 5, 92, 0, 0, 807, 812, 9, 0, 0, 0, 808, 809, 5, 39, 0, 0, 809, 812, + 5, 39, 0, 0, 810, 812, 8, 25, 0, 0, 811, 806, 1, 0, 0, 0, 811, 808, 1, + 0, 0, 0, 811, 810, 1, 0, 0, 0, 812, 815, 1, 0, 0, 0, 813, 811, 1, 0, 0, + 0, 813, 814, 1, 0, 0, 0, 814, 816, 1, 0, 0, 0, 815, 813, 1, 0, 0, 0, 816, + 817, 5, 39, 0, 0, 817, 98, 1, 0, 0, 0, 818, 819, 7, 10, 0, 0, 819, 820, + 7, 12, 0, 0, 820, 821, 7, 2, 0, 0, 821, 822, 7, 24, 0, 0, 822, 100, 1, + 0, 0, 0, 823, 824, 7, 8, 0, 0, 824, 825, 7, 19, 0, 0, 825, 826, 7, 9, 0, + 0, 826, 827, 1, 0, 0, 0, 827, 828, 3, 261, 130, 0, 828, 102, 1, 0, 0, 0, + 829, 830, 5, 47, 0, 0, 830, 831, 5, 47, 0, 0, 831, 835, 1, 0, 0, 0, 832, + 834, 8, 17, 0, 0, 833, 832, 1, 0, 0, 0, 834, 837, 1, 0, 0, 0, 835, 833, + 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 838, 1, 0, 0, 0, 837, 835, 1, 0, + 0, 0, 838, 839, 6, 51, 0, 0, 839, 104, 1, 0, 0, 0, 840, 841, 5, 47, 0, + 0, 841, 842, 5, 42, 0, 0, 842, 850, 1, 0, 0, 0, 843, 851, 8, 26, 0, 0, + 844, 846, 5, 42, 0, 0, 845, 844, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, + 845, 1, 0, 0, 0, 847, 848, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 851, + 8, 27, 0, 0, 850, 843, 1, 0, 0, 0, 850, 845, 1, 0, 0, 0, 851, 855, 1, 0, + 0, 0, 852, 854, 5, 42, 0, 0, 853, 852, 1, 0, 0, 0, 854, 857, 1, 0, 0, 0, + 855, 853, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 858, 1, 0, 0, 0, 857, + 855, 1, 0, 0, 0, 858, 859, 5, 42, 0, 0, 859, 860, 5, 47, 0, 0, 860, 861, + 1, 0, 0, 0, 861, 862, 6, 52, 0, 0, 862, 106, 1, 0, 0, 0, 863, 864, 7, 23, + 0, 0, 864, 108, 1, 0, 0, 0, 865, 866, 7, 7, 0, 0, 866, 867, 7, 18, 0, 0, + 867, 110, 1, 0, 0, 0, 868, 869, 7, 4, 0, 0, 869, 870, 7, 21, 0, 0, 870, + 871, 7, 10, 0, 0, 871, 872, 7, 12, 0, 0, 872, 112, 1, 0, 0, 0, 873, 874, + 7, 10, 0, 0, 874, 875, 7, 9, 0, 0, 875, 876, 7, 1, 0, 0, 876, 877, 7, 10, + 0, 0, 877, 114, 1, 0, 0, 0, 878, 879, 7, 18, 0, 0, 879, 880, 7, 2, 0, 0, + 880, 881, 7, 12, 0, 0, 881, 882, 7, 8, 0, 0, 882, 116, 1, 0, 0, 0, 883, + 884, 7, 3, 0, 0, 884, 885, 7, 19, 0, 0, 885, 886, 7, 19, 0, 0, 886, 887, + 7, 9, 0, 0, 887, 888, 7, 10, 0, 0, 888, 889, 7, 6, 0, 0, 889, 890, 7, 12, + 0, 0, 890, 118, 1, 0, 0, 0, 891, 892, 7, 7, 0, 0, 892, 893, 5, 56, 0, 0, + 893, 120, 1, 0, 0, 0, 894, 895, 7, 7, 0, 0, 895, 896, 5, 49, 0, 0, 896, + 897, 5, 54, 0, 0, 897, 122, 1, 0, 0, 0, 898, 899, 7, 7, 0, 0, 899, 900, + 5, 51, 0, 0, 900, 901, 5, 50, 0, 0, 901, 124, 1, 0, 0, 0, 902, 903, 7, + 7, 0, 0, 903, 904, 5, 54, 0, 0, 904, 905, 5, 52, 0, 0, 905, 126, 1, 0, + 0, 0, 906, 907, 7, 18, 0, 0, 907, 908, 7, 14, 0, 0, 908, 909, 5, 51, 0, + 0, 909, 910, 5, 50, 0, 0, 910, 128, 1, 0, 0, 0, 911, 912, 7, 18, 0, 0, + 912, 913, 7, 14, 0, 0, 913, 914, 5, 54, 0, 0, 914, 915, 5, 52, 0, 0, 915, + 130, 1, 0, 0, 0, 916, 917, 7, 1, 0, 0, 917, 918, 7, 4, 0, 0, 918, 919, + 7, 5, 0, 0, 919, 920, 7, 7, 0, 0, 920, 921, 7, 12, 0, 0, 921, 922, 7, 11, + 0, 0, 922, 132, 1, 0, 0, 0, 923, 924, 7, 3, 0, 0, 924, 925, 7, 7, 0, 0, + 925, 926, 7, 12, 0, 0, 926, 927, 7, 6, 0, 0, 927, 928, 7, 5, 0, 0, 928, + 929, 7, 15, 0, 0, 929, 134, 1, 0, 0, 0, 930, 931, 7, 4, 0, 0, 931, 932, + 7, 7, 0, 0, 932, 933, 7, 24, 0, 0, 933, 934, 7, 10, 0, 0, 934, 935, 7, + 1, 0, 0, 935, 936, 7, 4, 0, 0, 936, 937, 7, 6, 0, 0, 937, 938, 7, 24, 0, + 0, 938, 939, 7, 14, 0, 0, 939, 136, 1, 0, 0, 0, 940, 941, 7, 4, 0, 0, 941, + 942, 7, 7, 0, 0, 942, 943, 7, 24, 0, 0, 943, 944, 7, 10, 0, 0, 944, 945, + 7, 1, 0, 0, 945, 946, 7, 4, 0, 0, 946, 947, 7, 6, 0, 0, 947, 948, 7, 24, + 0, 0, 948, 949, 7, 14, 0, 0, 949, 950, 5, 95, 0, 0, 950, 951, 7, 4, 0, + 0, 951, 952, 7, 28, 0, 0, 952, 138, 1, 0, 0, 0, 953, 954, 7, 13, 0, 0, + 954, 955, 7, 6, 0, 0, 955, 956, 7, 4, 0, 0, 956, 957, 7, 10, 0, 0, 957, + 140, 1, 0, 0, 0, 958, 959, 7, 4, 0, 0, 959, 960, 7, 7, 0, 0, 960, 961, + 7, 24, 0, 0, 961, 962, 7, 10, 0, 0, 962, 142, 1, 0, 0, 0, 963, 964, 7, + 7, 0, 0, 964, 965, 7, 12, 0, 0, 965, 966, 7, 4, 0, 0, 966, 967, 7, 10, + 0, 0, 967, 968, 7, 5, 0, 0, 968, 969, 7, 16, 0, 0, 969, 970, 7, 6, 0, 0, + 970, 971, 7, 9, 0, 0, 971, 972, 5, 95, 0, 0, 972, 973, 7, 15, 0, 0, 973, + 974, 7, 10, 0, 0, 974, 975, 7, 6, 0, 0, 975, 976, 7, 5, 0, 0, 976, 144, + 1, 0, 0, 0, 977, 978, 7, 7, 0, 0, 978, 979, 7, 12, 0, 0, 979, 980, 7, 4, + 0, 0, 980, 981, 7, 10, 0, 0, 981, 982, 7, 5, 0, 0, 982, 983, 7, 16, 0, + 0, 983, 984, 7, 6, 0, 0, 984, 985, 7, 9, 0, 0, 985, 986, 5, 95, 0, 0, 986, + 987, 7, 13, 0, 0, 987, 988, 7, 6, 0, 0, 988, 989, 7, 15, 0, 0, 989, 146, + 1, 0, 0, 0, 990, 991, 7, 7, 0, 0, 991, 992, 7, 12, 0, 0, 992, 993, 7, 4, + 0, 0, 993, 994, 7, 10, 0, 0, 994, 995, 7, 5, 0, 0, 995, 996, 7, 16, 0, + 0, 996, 997, 7, 6, 0, 0, 997, 998, 7, 9, 0, 0, 998, 999, 5, 95, 0, 0, 999, + 1000, 7, 8, 0, 0, 1000, 1001, 7, 19, 0, 0, 1001, 1002, 7, 24, 0, 0, 1002, + 1003, 7, 14, 0, 0, 1003, 1004, 7, 19, 0, 0, 1004, 1005, 7, 2, 0, 0, 1005, + 1006, 7, 12, 0, 0, 1006, 1007, 7, 13, 0, 0, 1007, 148, 1, 0, 0, 0, 1008, + 1009, 7, 2, 0, 0, 1009, 1010, 7, 2, 0, 0, 1010, 1011, 7, 7, 0, 0, 1011, + 1012, 7, 13, 0, 0, 1012, 150, 1, 0, 0, 0, 1013, 1014, 7, 13, 0, 0, 1014, + 1015, 7, 10, 0, 0, 1015, 1016, 7, 8, 0, 0, 1016, 1017, 7, 7, 0, 0, 1017, + 1018, 7, 24, 0, 0, 1018, 1019, 7, 6, 0, 0, 1019, 1020, 7, 9, 0, 0, 1020, + 152, 1, 0, 0, 0, 1021, 1022, 7, 14, 0, 0, 1022, 1023, 7, 5, 0, 0, 1023, + 1024, 7, 10, 0, 0, 1024, 1025, 7, 8, 0, 0, 1025, 1026, 7, 7, 0, 0, 1026, + 1027, 7, 1, 0, 0, 1027, 1028, 7, 7, 0, 0, 1028, 1029, 7, 19, 0, 0, 1029, + 1030, 7, 12, 0, 0, 1030, 1031, 5, 95, 0, 0, 1031, 1032, 7, 4, 0, 0, 1032, + 1033, 7, 7, 0, 0, 1033, 1034, 7, 24, 0, 0, 1034, 1035, 7, 10, 0, 0, 1035, + 154, 1, 0, 0, 0, 1036, 1037, 7, 14, 0, 0, 1037, 1038, 7, 5, 0, 0, 1038, + 1039, 7, 10, 0, 0, 1039, 1040, 7, 8, 0, 0, 1040, 1041, 7, 7, 0, 0, 1041, + 1042, 7, 1, 0, 0, 1042, 1043, 7, 7, 0, 0, 1043, 1044, 7, 19, 0, 0, 1044, + 1045, 7, 12, 0, 0, 1045, 1046, 5, 95, 0, 0, 1046, 1047, 7, 4, 0, 0, 1047, + 1048, 7, 7, 0, 0, 1048, 1049, 7, 24, 0, 0, 1049, 1050, 7, 10, 0, 0, 1050, + 1051, 7, 1, 0, 0, 1051, 1052, 7, 4, 0, 0, 1052, 1053, 7, 6, 0, 0, 1053, + 1054, 7, 24, 0, 0, 1054, 1055, 7, 14, 0, 0, 1055, 156, 1, 0, 0, 0, 1056, + 1057, 7, 14, 0, 0, 1057, 1058, 7, 5, 0, 0, 1058, 1059, 7, 10, 0, 0, 1059, + 1060, 7, 8, 0, 0, 1060, 1061, 7, 7, 0, 0, 1061, 1062, 7, 1, 0, 0, 1062, + 1063, 7, 7, 0, 0, 1063, 1064, 7, 19, 0, 0, 1064, 1065, 7, 12, 0, 0, 1065, + 1066, 5, 95, 0, 0, 1066, 1067, 7, 4, 0, 0, 1067, 1068, 7, 7, 0, 0, 1068, + 1069, 7, 24, 0, 0, 1069, 1070, 7, 10, 0, 0, 1070, 1071, 7, 1, 0, 0, 1071, + 1072, 7, 4, 0, 0, 1072, 1073, 7, 6, 0, 0, 1073, 1074, 7, 24, 0, 0, 1074, + 1075, 7, 14, 0, 0, 1075, 1076, 5, 95, 0, 0, 1076, 1077, 7, 4, 0, 0, 1077, + 1078, 7, 28, 0, 0, 1078, 158, 1, 0, 0, 0, 1079, 1080, 7, 18, 0, 0, 1080, + 1081, 7, 7, 0, 0, 1081, 1082, 7, 29, 0, 0, 1082, 1083, 7, 10, 0, 0, 1083, + 1084, 7, 13, 0, 0, 1084, 1085, 7, 8, 0, 0, 1085, 1086, 7, 21, 0, 0, 1086, + 1087, 7, 6, 0, 0, 1087, 1088, 7, 5, 0, 0, 1088, 160, 1, 0, 0, 0, 1089, + 1090, 7, 16, 0, 0, 1090, 1091, 7, 6, 0, 0, 1091, 1092, 7, 5, 0, 0, 1092, + 1093, 7, 8, 0, 0, 1093, 1094, 7, 21, 0, 0, 1094, 1095, 7, 6, 0, 0, 1095, + 1096, 7, 5, 0, 0, 1096, 162, 1, 0, 0, 0, 1097, 1098, 7, 18, 0, 0, 1098, + 1099, 7, 7, 0, 0, 1099, 1100, 7, 29, 0, 0, 1100, 1101, 7, 10, 0, 0, 1101, + 1102, 7, 13, 0, 0, 1102, 1103, 7, 3, 0, 0, 1103, 1104, 7, 7, 0, 0, 1104, + 1105, 7, 12, 0, 0, 1105, 1106, 7, 6, 0, 0, 1106, 1107, 7, 5, 0, 0, 1107, + 1108, 7, 15, 0, 0, 1108, 164, 1, 0, 0, 0, 1109, 1110, 7, 1, 0, 0, 1110, + 1111, 7, 4, 0, 0, 1111, 1112, 7, 5, 0, 0, 1112, 1113, 7, 2, 0, 0, 1113, + 1114, 7, 8, 0, 0, 1114, 1115, 7, 4, 0, 0, 1115, 166, 1, 0, 0, 0, 1116, + 1117, 7, 12, 0, 0, 1117, 1118, 7, 1, 0, 0, 1118, 1119, 7, 4, 0, 0, 1119, + 1120, 7, 5, 0, 0, 1120, 1121, 7, 2, 0, 0, 1121, 1122, 7, 8, 0, 0, 1122, + 1123, 7, 4, 0, 0, 1123, 168, 1, 0, 0, 0, 1124, 1125, 7, 9, 0, 0, 1125, + 1126, 7, 7, 0, 0, 1126, 1127, 7, 1, 0, 0, 1127, 1128, 7, 4, 0, 0, 1128, + 170, 1, 0, 0, 0, 1129, 1130, 7, 24, 0, 0, 1130, 1131, 7, 6, 0, 0, 1131, + 1132, 7, 14, 0, 0, 1132, 172, 1, 0, 0, 0, 1133, 1134, 7, 2, 0, 0, 1134, + 1135, 5, 33, 0, 0, 1135, 174, 1, 0, 0, 0, 1136, 1137, 7, 3, 0, 0, 1137, + 1138, 7, 19, 0, 0, 1138, 1139, 7, 19, 0, 0, 1139, 1140, 7, 9, 0, 0, 1140, + 176, 1, 0, 0, 0, 1141, 1142, 7, 1, 0, 0, 1142, 1143, 7, 4, 0, 0, 1143, + 1144, 7, 5, 0, 0, 1144, 178, 1, 0, 0, 0, 1145, 1146, 7, 16, 0, 0, 1146, + 1147, 7, 3, 0, 0, 1147, 1148, 7, 7, 0, 0, 1148, 1149, 7, 12, 0, 0, 1149, + 180, 1, 0, 0, 0, 1150, 1151, 7, 4, 0, 0, 1151, 1152, 7, 1, 0, 0, 1152, + 182, 1, 0, 0, 0, 1153, 1154, 7, 4, 0, 0, 1154, 1155, 7, 1, 0, 0, 1155, + 1156, 7, 4, 0, 0, 1156, 1157, 7, 28, 0, 0, 1157, 184, 1, 0, 0, 0, 1158, + 1159, 7, 7, 0, 0, 1159, 1160, 7, 15, 0, 0, 1160, 1161, 7, 10, 0, 0, 1161, + 1162, 7, 6, 0, 0, 1162, 1163, 7, 5, 0, 0, 1163, 186, 1, 0, 0, 0, 1164, + 1165, 7, 7, 0, 0, 1165, 1166, 7, 13, 0, 0, 1166, 1167, 7, 6, 0, 0, 1167, + 1168, 7, 15, 0, 0, 1168, 188, 1, 0, 0, 0, 1169, 1170, 7, 7, 0, 0, 1170, + 1171, 7, 8, 0, 0, 1171, 1172, 7, 19, 0, 0, 1172, 1173, 7, 24, 0, 0, 1173, + 1174, 7, 14, 0, 0, 1174, 1175, 7, 19, 0, 0, 1175, 1176, 7, 2, 0, 0, 1176, + 1177, 7, 12, 0, 0, 1177, 1178, 7, 13, 0, 0, 1178, 190, 1, 0, 0, 0, 1179, + 1180, 7, 13, 0, 0, 1180, 1181, 7, 10, 0, 0, 1181, 1182, 7, 8, 0, 0, 1182, + 192, 1, 0, 0, 0, 1183, 1184, 7, 14, 0, 0, 1184, 1185, 7, 4, 0, 0, 1185, + 194, 1, 0, 0, 0, 1186, 1187, 7, 14, 0, 0, 1187, 1188, 7, 4, 0, 0, 1188, + 1189, 7, 1, 0, 0, 1189, 196, 1, 0, 0, 0, 1190, 1191, 7, 14, 0, 0, 1191, + 1192, 7, 4, 0, 0, 1192, 1193, 7, 1, 0, 0, 1193, 1194, 7, 4, 0, 0, 1194, + 1195, 7, 28, 0, 0, 1195, 198, 1, 0, 0, 0, 1196, 1197, 7, 18, 0, 0, 1197, + 1198, 7, 8, 0, 0, 1198, 1199, 7, 21, 0, 0, 1199, 1200, 7, 6, 0, 0, 1200, + 1201, 7, 5, 0, 0, 1201, 200, 1, 0, 0, 0, 1202, 1203, 7, 16, 0, 0, 1203, + 1204, 7, 8, 0, 0, 1204, 1205, 7, 21, 0, 0, 1205, 1206, 7, 6, 0, 0, 1206, + 1207, 7, 5, 0, 0, 1207, 202, 1, 0, 0, 0, 1208, 1209, 7, 18, 0, 0, 1209, + 1210, 7, 3, 0, 0, 1210, 1211, 7, 7, 0, 0, 1211, 1212, 7, 12, 0, 0, 1212, + 204, 1, 0, 0, 0, 1213, 1214, 7, 6, 0, 0, 1214, 1215, 7, 12, 0, 0, 1215, + 1216, 7, 15, 0, 0, 1216, 206, 1, 0, 0, 0, 1217, 1218, 3, 205, 102, 0, 1218, + 1219, 7, 23, 0, 0, 1219, 208, 1, 0, 0, 0, 1220, 1221, 5, 58, 0, 0, 1221, + 1222, 5, 58, 0, 0, 1222, 210, 1, 0, 0, 0, 1223, 1224, 5, 43, 0, 0, 1224, + 212, 1, 0, 0, 0, 1225, 1226, 5, 45, 0, 0, 1226, 214, 1, 0, 0, 0, 1227, + 1228, 5, 42, 0, 0, 1228, 216, 1, 0, 0, 0, 1229, 1230, 5, 47, 0, 0, 1230, + 218, 1, 0, 0, 0, 1231, 1232, 5, 37, 0, 0, 1232, 220, 1, 0, 0, 0, 1233, + 1234, 5, 61, 0, 0, 1234, 222, 1, 0, 0, 0, 1235, 1236, 5, 33, 0, 0, 1236, + 1237, 5, 61, 0, 0, 1237, 224, 1, 0, 0, 0, 1238, 1239, 5, 62, 0, 0, 1239, + 1240, 5, 61, 0, 0, 1240, 226, 1, 0, 0, 0, 1241, 1242, 5, 60, 0, 0, 1242, + 1243, 5, 61, 0, 0, 1243, 228, 1, 0, 0, 0, 1244, 1245, 5, 62, 0, 0, 1245, + 230, 1, 0, 0, 0, 1246, 1247, 5, 60, 0, 0, 1247, 232, 1, 0, 0, 0, 1248, + 1249, 5, 33, 0, 0, 1249, 234, 1, 0, 0, 0, 1250, 1251, 5, 40, 0, 0, 1251, + 236, 1, 0, 0, 0, 1252, 1253, 5, 41, 0, 0, 1253, 238, 1, 0, 0, 0, 1254, + 1255, 5, 91, 0, 0, 1255, 240, 1, 0, 0, 0, 1256, 1257, 5, 93, 0, 0, 1257, + 242, 1, 0, 0, 0, 1258, 1259, 5, 44, 0, 0, 1259, 244, 1, 0, 0, 0, 1260, + 1261, 5, 58, 0, 0, 1261, 246, 1, 0, 0, 0, 1262, 1263, 5, 63, 0, 0, 1263, + 248, 1, 0, 0, 0, 1264, 1265, 5, 35, 0, 0, 1265, 250, 1, 0, 0, 0, 1266, + 1267, 5, 46, 0, 0, 1267, 252, 1, 0, 0, 0, 1268, 1269, 7, 6, 0, 0, 1269, + 1270, 7, 12, 0, 0, 1270, 1271, 7, 13, 0, 0, 1271, 254, 1, 0, 0, 0, 1272, + 1273, 7, 19, 0, 0, 1273, 1274, 7, 5, 0, 0, 1274, 256, 1, 0, 0, 0, 1275, + 1276, 5, 58, 0, 0, 1276, 1277, 5, 61, 0, 0, 1277, 258, 1, 0, 0, 0, 1278, + 1279, 5, 45, 0, 0, 1279, 1280, 5, 62, 0, 0, 1280, 260, 1, 0, 0, 0, 1281, + 1285, 2, 49, 57, 0, 1282, 1284, 3, 263, 131, 0, 1283, 1282, 1, 0, 0, 0, + 1284, 1287, 1, 0, 0, 0, 1285, 1283, 1, 0, 0, 0, 1285, 1286, 1, 0, 0, 0, + 1286, 1290, 1, 0, 0, 0, 1287, 1285, 1, 0, 0, 0, 1288, 1290, 5, 48, 0, 0, + 1289, 1281, 1, 0, 0, 0, 1289, 1288, 1, 0, 0, 0, 1290, 262, 1, 0, 0, 0, + 1291, 1292, 2, 48, 57, 0, 1292, 264, 1, 0, 0, 0, 1293, 1295, 5, 45, 0, + 0, 1294, 1293, 1, 0, 0, 0, 1294, 1295, 1, 0, 0, 0, 1295, 1296, 1, 0, 0, + 0, 1296, 1297, 3, 261, 130, 0, 1297, 266, 1, 0, 0, 0, 1298, 1303, 7, 30, + 0, 0, 1299, 1302, 7, 30, 0, 0, 1300, 1302, 3, 263, 131, 0, 1301, 1299, + 1, 0, 0, 0, 1301, 1300, 1, 0, 0, 0, 1302, 1305, 1, 0, 0, 0, 1303, 1301, + 1, 0, 0, 0, 1303, 1304, 1, 0, 0, 0, 1304, 268, 1, 0, 0, 0, 1305, 1303, + 1, 0, 0, 0, 1306, 1308, 5, 13, 0, 0, 1307, 1309, 5, 10, 0, 0, 1308, 1307, + 1, 0, 0, 0, 1308, 1309, 1, 0, 0, 0, 1309, 1312, 1, 0, 0, 0, 1310, 1312, + 5, 10, 0, 0, 1311, 1306, 1, 0, 0, 0, 1311, 1310, 1, 0, 0, 0, 1312, 270, + 1, 0, 0, 0, 53, 0, 274, 372, 378, 380, 388, 392, 543, 548, 553, 559, 561, + 564, 569, 575, 578, 582, 587, 589, 592, 601, 612, 638, 640, 664, 666, 680, + 682, 721, 731, 740, 750, 757, 762, 769, 774, 781, 786, 791, 796, 811, 813, + 835, 847, 850, 855, 1285, 1289, 1294, 1301, 1303, 1308, 1311, 1, 0, 1, 0, } deserializer := antlr.NewATNDeserializer(nil) @@ -783,86 +786,87 @@ const ( FuncTestCaseLexerIntervalCompoundLiteral = 44 FuncTestCaseLexerNullLiteral = 45 FuncTestCaseLexerStringLiteral = 46 - FuncTestCaseLexerColumnName = 47 - FuncTestCaseLexerLineComment = 48 - FuncTestCaseLexerBlockComment = 49 - FuncTestCaseLexerIf = 50 - FuncTestCaseLexerThen = 51 - FuncTestCaseLexerElse = 52 - FuncTestCaseLexerFunc = 53 - FuncTestCaseLexerBoolean = 54 - FuncTestCaseLexerI8 = 55 - FuncTestCaseLexerI16 = 56 - FuncTestCaseLexerI32 = 57 - FuncTestCaseLexerI64 = 58 - FuncTestCaseLexerFP32 = 59 - FuncTestCaseLexerFP64 = 60 - FuncTestCaseLexerString_ = 61 - FuncTestCaseLexerBinary = 62 - FuncTestCaseLexerTimestamp = 63 - FuncTestCaseLexerTimestamp_TZ = 64 - FuncTestCaseLexerDate = 65 - FuncTestCaseLexerTime = 66 - FuncTestCaseLexerInterval_Year = 67 - FuncTestCaseLexerInterval_Day = 68 - FuncTestCaseLexerInterval_Compound = 69 - FuncTestCaseLexerUUID = 70 - FuncTestCaseLexerDecimal = 71 - FuncTestCaseLexerPrecision_Time = 72 - FuncTestCaseLexerPrecision_Timestamp = 73 - FuncTestCaseLexerPrecision_Timestamp_TZ = 74 - FuncTestCaseLexerFixedChar = 75 - FuncTestCaseLexerVarChar = 76 - FuncTestCaseLexerFixedBinary = 77 - FuncTestCaseLexerStruct = 78 - FuncTestCaseLexerNStruct = 79 - FuncTestCaseLexerList = 80 - FuncTestCaseLexerMap = 81 - FuncTestCaseLexerUserDefined = 82 - FuncTestCaseLexerBool = 83 - FuncTestCaseLexerStr = 84 - FuncTestCaseLexerVBin = 85 - FuncTestCaseLexerTs = 86 - FuncTestCaseLexerTsTZ = 87 - FuncTestCaseLexerIYear = 88 - FuncTestCaseLexerIDay = 89 - FuncTestCaseLexerICompound = 90 - FuncTestCaseLexerDec = 91 - FuncTestCaseLexerPT = 92 - FuncTestCaseLexerPTs = 93 - FuncTestCaseLexerPTsTZ = 94 - FuncTestCaseLexerFChar = 95 - FuncTestCaseLexerVChar = 96 - FuncTestCaseLexerFBin = 97 - FuncTestCaseLexerAny = 98 - FuncTestCaseLexerAnyVar = 99 - FuncTestCaseLexerDoubleColon = 100 - FuncTestCaseLexerPlus = 101 - FuncTestCaseLexerMinus = 102 - FuncTestCaseLexerAsterisk = 103 - FuncTestCaseLexerForwardSlash = 104 - FuncTestCaseLexerPercent = 105 - FuncTestCaseLexerEq = 106 - FuncTestCaseLexerNe = 107 - FuncTestCaseLexerGte = 108 - FuncTestCaseLexerLte = 109 - FuncTestCaseLexerGt = 110 - FuncTestCaseLexerLt = 111 - FuncTestCaseLexerBang = 112 - FuncTestCaseLexerOParen = 113 - FuncTestCaseLexerCParen = 114 - FuncTestCaseLexerOBracket = 115 - FuncTestCaseLexerCBracket = 116 - FuncTestCaseLexerComma = 117 - FuncTestCaseLexerColon = 118 - FuncTestCaseLexerQMark = 119 - FuncTestCaseLexerHash = 120 - FuncTestCaseLexerDot = 121 - FuncTestCaseLexerAnd = 122 - FuncTestCaseLexerOr = 123 - FuncTestCaseLexerAssign = 124 - FuncTestCaseLexerArrow = 125 - FuncTestCaseLexerNumber = 126 - FuncTestCaseLexerIdentifier = 127 - FuncTestCaseLexerNewline = 128 + FuncTestCaseLexerEnumType = 47 + FuncTestCaseLexerColumnName = 48 + FuncTestCaseLexerLineComment = 49 + FuncTestCaseLexerBlockComment = 50 + FuncTestCaseLexerIf = 51 + FuncTestCaseLexerThen = 52 + FuncTestCaseLexerElse = 53 + FuncTestCaseLexerFunc = 54 + FuncTestCaseLexerBoolean = 55 + FuncTestCaseLexerI8 = 56 + FuncTestCaseLexerI16 = 57 + FuncTestCaseLexerI32 = 58 + FuncTestCaseLexerI64 = 59 + FuncTestCaseLexerFP32 = 60 + FuncTestCaseLexerFP64 = 61 + FuncTestCaseLexerString_ = 62 + FuncTestCaseLexerBinary = 63 + FuncTestCaseLexerTimestamp = 64 + FuncTestCaseLexerTimestamp_TZ = 65 + FuncTestCaseLexerDate = 66 + FuncTestCaseLexerTime = 67 + FuncTestCaseLexerInterval_Year = 68 + FuncTestCaseLexerInterval_Day = 69 + FuncTestCaseLexerInterval_Compound = 70 + FuncTestCaseLexerUUID = 71 + FuncTestCaseLexerDecimal = 72 + FuncTestCaseLexerPrecision_Time = 73 + FuncTestCaseLexerPrecision_Timestamp = 74 + FuncTestCaseLexerPrecision_Timestamp_TZ = 75 + FuncTestCaseLexerFixedChar = 76 + FuncTestCaseLexerVarChar = 77 + FuncTestCaseLexerFixedBinary = 78 + FuncTestCaseLexerStruct = 79 + FuncTestCaseLexerNStruct = 80 + FuncTestCaseLexerList = 81 + FuncTestCaseLexerMap = 82 + FuncTestCaseLexerUserDefined = 83 + FuncTestCaseLexerBool = 84 + FuncTestCaseLexerStr = 85 + FuncTestCaseLexerVBin = 86 + FuncTestCaseLexerTs = 87 + FuncTestCaseLexerTsTZ = 88 + FuncTestCaseLexerIYear = 89 + FuncTestCaseLexerIDay = 90 + FuncTestCaseLexerICompound = 91 + FuncTestCaseLexerDec = 92 + FuncTestCaseLexerPT = 93 + FuncTestCaseLexerPTs = 94 + FuncTestCaseLexerPTsTZ = 95 + FuncTestCaseLexerFChar = 96 + FuncTestCaseLexerVChar = 97 + FuncTestCaseLexerFBin = 98 + FuncTestCaseLexerAny = 99 + FuncTestCaseLexerAnyVar = 100 + FuncTestCaseLexerDoubleColon = 101 + FuncTestCaseLexerPlus = 102 + FuncTestCaseLexerMinus = 103 + FuncTestCaseLexerAsterisk = 104 + FuncTestCaseLexerForwardSlash = 105 + FuncTestCaseLexerPercent = 106 + FuncTestCaseLexerEq = 107 + FuncTestCaseLexerNe = 108 + FuncTestCaseLexerGte = 109 + FuncTestCaseLexerLte = 110 + FuncTestCaseLexerGt = 111 + FuncTestCaseLexerLt = 112 + FuncTestCaseLexerBang = 113 + FuncTestCaseLexerOParen = 114 + FuncTestCaseLexerCParen = 115 + FuncTestCaseLexerOBracket = 116 + FuncTestCaseLexerCBracket = 117 + FuncTestCaseLexerComma = 118 + FuncTestCaseLexerColon = 119 + FuncTestCaseLexerQMark = 120 + FuncTestCaseLexerHash = 121 + FuncTestCaseLexerDot = 122 + FuncTestCaseLexerAnd = 123 + FuncTestCaseLexerOr = 124 + FuncTestCaseLexerAssign = 125 + FuncTestCaseLexerArrow = 126 + FuncTestCaseLexerNumber = 127 + FuncTestCaseLexerIdentifier = 128 + FuncTestCaseLexerNewline = 129 ) diff --git a/testcases/parser/baseparser/functestcase_parser.go b/testcases/parser/baseparser/functestcase_parser.go index 786934e..4bfc85a 100644 --- a/testcases/parser/baseparser/functestcase_parser.go +++ b/testcases/parser/baseparser/functestcase_parser.go @@ -38,9 +38,9 @@ func functestcaseparserParserInit() { "'SATURATE'", "'SILENT'", "'TIE_TO_EVEN'", "'NAN'", "'ACCEPT_NULLS'", "'IGNORE_NULLS'", "'NULL_HANDLING'", "'SPACES_ONLY'", "'TRUNCATE'", "", "", "", "", "", "", "", "", "'P'", "'T'", "'Y'", "'M'", "'D'", "'H'", - "'S'", "'F'", "", "", "", "", "", "'null'", "", "", "", "", "'IF'", - "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", - "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", "'TIMESTAMP'", + "'S'", "'F'", "", "", "", "", "", "'null'", "", "'enum'", "", "", "", + "'IF'", "'THEN'", "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", + "'I32'", "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", "'TIMESTAMP'", "'TIMESTAMP_TZ'", "'DATE'", "'TIME'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", "'FIXEDBINARY'", @@ -61,15 +61,15 @@ func functestcaseparserParserInit() { "TimeLiteral", "DateLiteral", "PeriodPrefix", "TimePrefix", "YearSuffix", "MSuffix", "DaySuffix", "HourSuffix", "SecondSuffix", "FractionalSecondSuffix", "OAngleBracket", "CAngleBracket", "IntervalYearLiteral", "IntervalDayLiteral", - "IntervalCompoundLiteral", "NullLiteral", "StringLiteral", "ColumnName", - "LineComment", "BlockComment", "If", "Then", "Else", "Func", "Boolean", - "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", "Timestamp", - "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", "Interval_Compound", - "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", "Precision_Timestamp_TZ", - "FixedChar", "VarChar", "FixedBinary", "Struct", "NStruct", "List", - "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", "TsTZ", "IYear", - "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", "VChar", - "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", + "IntervalCompoundLiteral", "NullLiteral", "StringLiteral", "EnumType", + "ColumnName", "LineComment", "BlockComment", "If", "Then", "Else", "Func", + "Boolean", "I8", "I16", "I32", "I64", "FP32", "FP64", "String", "Binary", + "Timestamp", "Timestamp_TZ", "Date", "Time", "Interval_Year", "Interval_Day", + "Interval_Compound", "UUID", "Decimal", "Precision_Time", "Precision_Timestamp", + "Precision_Timestamp_TZ", "FixedChar", "VarChar", "FixedBinary", "Struct", + "NStruct", "List", "Map", "UserDefined", "Bool", "Str", "VBin", "Ts", + "TsTZ", "IYear", "IDay", "ICompound", "Dec", "PT", "PTs", "PTsTZ", "FChar", + "VChar", "FBin", "Any", "AnyVar", "DoubleColon", "Plus", "Minus", "Asterisk", "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", "Identifier", @@ -85,7 +85,7 @@ func functestcaseparserParserInit() { "timestampArg", "timestampTzArg", "intervalYearArg", "intervalDayArg", "intervalCompoundArg", "fixedCharArg", "varCharArg", "fixedBinaryArg", "precisionTimeArg", "precisionTimestampArg", "precisionTimestampTZArg", - "listArg", "lambdaArg", "literalList", "listElement", "literalLambda", + "listArg", "lambdaArg", "enumArg", "literalList", "listElement", "literalLambda", "lambdaParameters", "lambdaBody", "dataType", "scalarType", "booleanType", "stringType", "binaryType", "intType", "floatType", "dateType", "timeType", "timestampType", "timestampTZType", "intervalYearType", "intervalDayType", @@ -97,7 +97,7 @@ func functestcaseparserParserInit() { } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 128, 739, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 129, 746, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, @@ -112,325 +112,328 @@ func functestcaseparserParserInit() { 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, - 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 1, 0, 1, 0, 4, - 0, 169, 8, 0, 11, 0, 12, 0, 170, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 178, - 8, 1, 10, 1, 12, 1, 181, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, - 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 194, 8, 3, 10, 3, 12, 3, 197, 9, 3, 1, 4, - 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, - 1, 6, 1, 6, 3, 6, 214, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 220, 8, 7, 1, - 7, 4, 7, 223, 8, 7, 11, 7, 12, 7, 224, 1, 7, 3, 7, 228, 8, 7, 1, 7, 4, - 7, 231, 8, 7, 11, 7, 12, 7, 232, 3, 7, 235, 8, 7, 1, 8, 1, 8, 1, 8, 5, - 8, 240, 8, 8, 10, 8, 12, 8, 243, 9, 8, 1, 9, 1, 9, 3, 9, 247, 8, 9, 1, + 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 1, + 0, 1, 0, 4, 0, 171, 8, 0, 11, 0, 12, 0, 172, 1, 0, 1, 0, 1, 1, 1, 1, 1, + 1, 5, 1, 180, 8, 1, 10, 1, 12, 1, 183, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, + 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 5, 3, 196, 8, 3, 10, 3, 12, 3, 199, + 9, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, + 1, 6, 1, 6, 1, 6, 1, 6, 3, 6, 216, 8, 6, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, + 222, 8, 7, 1, 7, 4, 7, 225, 8, 7, 11, 7, 12, 7, 226, 1, 7, 3, 7, 230, 8, + 7, 1, 7, 4, 7, 233, 8, 7, 11, 7, 12, 7, 234, 3, 7, 237, 8, 7, 1, 8, 1, + 8, 1, 8, 5, 8, 242, 8, 8, 10, 8, 12, 8, 245, 9, 8, 1, 9, 1, 9, 3, 9, 249, + 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, - 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, - 10, 3, 10, 271, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 278, 8, - 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 287, 8, 12, - 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 295, 8, 12, 1, 12, 1, - 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 304, 8, 12, 1, 13, 1, 13, - 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 312, 8, 13, 10, 13, 12, 13, 315, 9, - 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 325, - 8, 14, 10, 14, 12, 14, 328, 9, 14, 3, 14, 330, 8, 14, 1, 14, 1, 14, 1, - 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 342, 8, 16, - 10, 16, 12, 16, 345, 9, 16, 3, 16, 347, 8, 16, 1, 16, 1, 16, 1, 17, 1, - 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, - 362, 8, 17, 1, 18, 1, 18, 1, 18, 5, 18, 367, 8, 18, 10, 18, 12, 18, 370, - 9, 18, 1, 19, 1, 19, 1, 19, 5, 19, 375, 8, 19, 10, 19, 12, 19, 378, 9, - 19, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 384, 8, 20, 1, 21, 1, 21, 1, 21, - 1, 21, 3, 21, 390, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 395, 8, 22, 1, 23, - 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, - 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, - 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, - 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, - 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, - 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, - 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, - 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, - 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 487, 8, 45, 10, 45, 12, 45, 490, - 9, 45, 3, 45, 492, 8, 45, 1, 45, 1, 45, 1, 46, 1, 46, 3, 46, 498, 8, 46, - 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, - 48, 4, 48, 511, 8, 48, 11, 48, 12, 48, 512, 1, 48, 3, 48, 516, 8, 48, 1, - 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 3, 50, 525, 8, 50, 1, 51, - 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, - 51, 3, 51, 539, 8, 51, 1, 51, 1, 51, 1, 51, 3, 51, 544, 8, 51, 3, 51, 546, - 8, 51, 1, 52, 1, 52, 3, 52, 550, 8, 52, 1, 53, 1, 53, 3, 53, 554, 8, 53, - 1, 54, 1, 54, 3, 54, 558, 8, 54, 1, 55, 1, 55, 3, 55, 562, 8, 55, 1, 56, - 1, 56, 3, 56, 566, 8, 56, 1, 57, 1, 57, 3, 57, 570, 8, 57, 1, 58, 1, 58, - 3, 58, 574, 8, 58, 1, 59, 1, 59, 3, 59, 578, 8, 59, 1, 60, 1, 60, 3, 60, - 582, 8, 60, 1, 61, 1, 61, 3, 61, 586, 8, 61, 1, 62, 1, 62, 3, 62, 590, - 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 596, 8, 62, 1, 63, 1, 63, 3, - 63, 600, 8, 63, 1, 63, 1, 63, 1, 63, 1, 63, 3, 63, 606, 8, 63, 1, 64, 1, - 64, 3, 64, 610, 8, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 3, 65, - 618, 8, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 626, 8, 66, - 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 3, 67, 634, 8, 67, 1, 67, 1, - 67, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 642, 8, 67, 1, 68, 1, 68, 3, 68, - 646, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 3, 69, 654, 8, 69, - 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 3, 70, 662, 8, 70, 1, 70, 1, - 70, 1, 70, 1, 70, 1, 71, 1, 71, 3, 71, 670, 8, 71, 1, 71, 1, 71, 1, 71, - 1, 71, 1, 72, 1, 72, 3, 72, 678, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, - 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 5, 73, 691, 8, 73, 10, 73, - 12, 73, 694, 9, 73, 1, 73, 1, 73, 3, 73, 698, 8, 73, 1, 74, 1, 74, 1, 74, - 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 3, 74, 711, 8, - 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, - 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 5, 80, 728, 8, 80, 10, 80, 12, 80, 731, - 9, 80, 1, 81, 1, 81, 1, 82, 1, 82, 3, 82, 737, 8, 82, 1, 82, 0, 0, 83, - 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, - 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, - 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, - 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, - 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 0, - 23, 1, 0, 3, 4, 2, 0, 18, 18, 26, 26, 2, 0, 54, 54, 83, 83, 2, 0, 61, 61, - 84, 84, 2, 0, 62, 62, 85, 85, 1, 0, 55, 58, 1, 0, 59, 60, 2, 0, 63, 63, - 86, 86, 2, 0, 64, 64, 87, 87, 2, 0, 67, 67, 88, 88, 2, 0, 68, 68, 89, 89, - 2, 0, 69, 69, 90, 90, 2, 0, 75, 75, 95, 95, 2, 0, 76, 76, 96, 96, 2, 0, - 77, 77, 97, 97, 2, 0, 71, 71, 91, 91, 2, 0, 72, 72, 92, 92, 2, 0, 73, 73, - 93, 93, 2, 0, 74, 74, 94, 94, 1, 0, 10, 11, 3, 0, 12, 13, 21, 22, 127, - 127, 5, 0, 14, 20, 23, 23, 27, 27, 45, 45, 127, 127, 2, 0, 23, 23, 122, - 123, 770, 0, 166, 1, 0, 0, 0, 2, 174, 1, 0, 0, 0, 4, 182, 1, 0, 0, 0, 6, - 187, 1, 0, 0, 0, 8, 198, 1, 0, 0, 0, 10, 203, 1, 0, 0, 0, 12, 205, 1, 0, - 0, 0, 14, 234, 1, 0, 0, 0, 16, 236, 1, 0, 0, 0, 18, 246, 1, 0, 0, 0, 20, - 270, 1, 0, 0, 0, 22, 272, 1, 0, 0, 0, 24, 303, 1, 0, 0, 0, 26, 305, 1, - 0, 0, 0, 28, 320, 1, 0, 0, 0, 30, 333, 1, 0, 0, 0, 32, 337, 1, 0, 0, 0, - 34, 361, 1, 0, 0, 0, 36, 363, 1, 0, 0, 0, 38, 371, 1, 0, 0, 0, 40, 383, - 1, 0, 0, 0, 42, 389, 1, 0, 0, 0, 44, 394, 1, 0, 0, 0, 46, 396, 1, 0, 0, - 0, 48, 398, 1, 0, 0, 0, 50, 402, 1, 0, 0, 0, 52, 406, 1, 0, 0, 0, 54, 410, - 1, 0, 0, 0, 56, 414, 1, 0, 0, 0, 58, 418, 1, 0, 0, 0, 60, 422, 1, 0, 0, - 0, 62, 426, 1, 0, 0, 0, 64, 430, 1, 0, 0, 0, 66, 434, 1, 0, 0, 0, 68, 438, - 1, 0, 0, 0, 70, 442, 1, 0, 0, 0, 72, 446, 1, 0, 0, 0, 74, 450, 1, 0, 0, - 0, 76, 454, 1, 0, 0, 0, 78, 458, 1, 0, 0, 0, 80, 462, 1, 0, 0, 0, 82, 466, - 1, 0, 0, 0, 84, 470, 1, 0, 0, 0, 86, 474, 1, 0, 0, 0, 88, 478, 1, 0, 0, - 0, 90, 482, 1, 0, 0, 0, 92, 497, 1, 0, 0, 0, 94, 499, 1, 0, 0, 0, 96, 515, - 1, 0, 0, 0, 98, 517, 1, 0, 0, 0, 100, 524, 1, 0, 0, 0, 102, 545, 1, 0, - 0, 0, 104, 547, 1, 0, 0, 0, 106, 551, 1, 0, 0, 0, 108, 555, 1, 0, 0, 0, - 110, 559, 1, 0, 0, 0, 112, 563, 1, 0, 0, 0, 114, 567, 1, 0, 0, 0, 116, - 571, 1, 0, 0, 0, 118, 575, 1, 0, 0, 0, 120, 579, 1, 0, 0, 0, 122, 583, - 1, 0, 0, 0, 124, 587, 1, 0, 0, 0, 126, 597, 1, 0, 0, 0, 128, 607, 1, 0, - 0, 0, 130, 615, 1, 0, 0, 0, 132, 623, 1, 0, 0, 0, 134, 631, 1, 0, 0, 0, - 136, 643, 1, 0, 0, 0, 138, 651, 1, 0, 0, 0, 140, 659, 1, 0, 0, 0, 142, - 667, 1, 0, 0, 0, 144, 675, 1, 0, 0, 0, 146, 697, 1, 0, 0, 0, 148, 710, - 1, 0, 0, 0, 150, 712, 1, 0, 0, 0, 152, 714, 1, 0, 0, 0, 154, 716, 1, 0, - 0, 0, 156, 720, 1, 0, 0, 0, 158, 722, 1, 0, 0, 0, 160, 724, 1, 0, 0, 0, - 162, 732, 1, 0, 0, 0, 164, 736, 1, 0, 0, 0, 166, 168, 3, 2, 1, 0, 167, - 169, 3, 14, 7, 0, 168, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 168, - 1, 0, 0, 0, 170, 171, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 173, 5, 0, - 0, 1, 173, 1, 1, 0, 0, 0, 174, 175, 3, 4, 2, 0, 175, 179, 3, 6, 3, 0, 176, - 178, 3, 8, 4, 0, 177, 176, 1, 0, 0, 0, 178, 181, 1, 0, 0, 0, 179, 177, - 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 3, 1, 0, 0, 0, 181, 179, 1, 0, 0, - 0, 182, 183, 5, 2, 0, 0, 183, 184, 7, 0, 0, 0, 184, 185, 5, 118, 0, 0, - 185, 186, 5, 7, 0, 0, 186, 5, 1, 0, 0, 0, 187, 188, 5, 2, 0, 0, 188, 189, - 5, 5, 0, 0, 189, 190, 5, 118, 0, 0, 190, 195, 5, 46, 0, 0, 191, 192, 5, - 117, 0, 0, 192, 194, 5, 46, 0, 0, 193, 191, 1, 0, 0, 0, 194, 197, 1, 0, - 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, - 195, 1, 0, 0, 0, 198, 199, 5, 2, 0, 0, 199, 200, 5, 6, 0, 0, 200, 201, - 5, 118, 0, 0, 201, 202, 5, 46, 0, 0, 202, 9, 1, 0, 0, 0, 203, 204, 5, 8, - 0, 0, 204, 11, 1, 0, 0, 0, 205, 206, 3, 164, 82, 0, 206, 207, 5, 113, 0, - 0, 207, 208, 3, 16, 8, 0, 208, 213, 5, 114, 0, 0, 209, 210, 5, 115, 0, - 0, 210, 211, 3, 160, 80, 0, 211, 212, 5, 116, 0, 0, 212, 214, 1, 0, 0, - 0, 213, 209, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, - 216, 5, 106, 0, 0, 216, 217, 3, 18, 9, 0, 217, 13, 1, 0, 0, 0, 218, 220, - 3, 10, 5, 0, 219, 218, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, - 0, 0, 221, 223, 3, 12, 6, 0, 222, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, - 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 235, 1, 0, 0, 0, 226, - 228, 3, 10, 5, 0, 227, 226, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 230, - 1, 0, 0, 0, 229, 231, 3, 22, 11, 0, 230, 229, 1, 0, 0, 0, 231, 232, 1, - 0, 0, 0, 232, 230, 1, 0, 0, 0, 232, 233, 1, 0, 0, 0, 233, 235, 1, 0, 0, - 0, 234, 219, 1, 0, 0, 0, 234, 227, 1, 0, 0, 0, 235, 15, 1, 0, 0, 0, 236, - 241, 3, 20, 10, 0, 237, 238, 5, 117, 0, 0, 238, 240, 3, 20, 10, 0, 239, - 237, 1, 0, 0, 0, 240, 243, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 242, - 1, 0, 0, 0, 242, 17, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 244, 247, 3, 20, - 10, 0, 245, 247, 3, 152, 76, 0, 246, 244, 1, 0, 0, 0, 246, 245, 1, 0, 0, - 0, 247, 19, 1, 0, 0, 0, 248, 271, 3, 48, 24, 0, 249, 271, 3, 50, 25, 0, - 250, 271, 3, 52, 26, 0, 251, 271, 3, 56, 28, 0, 252, 271, 3, 58, 29, 0, - 253, 271, 3, 54, 27, 0, 254, 271, 3, 60, 30, 0, 255, 271, 3, 62, 31, 0, - 256, 271, 3, 64, 32, 0, 257, 271, 3, 66, 33, 0, 258, 271, 3, 68, 34, 0, - 259, 271, 3, 70, 35, 0, 260, 271, 3, 72, 36, 0, 261, 271, 3, 74, 37, 0, - 262, 271, 3, 76, 38, 0, 263, 271, 3, 78, 39, 0, 264, 271, 3, 80, 40, 0, - 265, 271, 3, 82, 41, 0, 266, 271, 3, 84, 42, 0, 267, 271, 3, 86, 43, 0, - 268, 271, 3, 88, 44, 0, 269, 271, 5, 127, 0, 0, 270, 248, 1, 0, 0, 0, 270, - 249, 1, 0, 0, 0, 270, 250, 1, 0, 0, 0, 270, 251, 1, 0, 0, 0, 270, 252, - 1, 0, 0, 0, 270, 253, 1, 0, 0, 0, 270, 254, 1, 0, 0, 0, 270, 255, 1, 0, - 0, 0, 270, 256, 1, 0, 0, 0, 270, 257, 1, 0, 0, 0, 270, 258, 1, 0, 0, 0, - 270, 259, 1, 0, 0, 0, 270, 260, 1, 0, 0, 0, 270, 261, 1, 0, 0, 0, 270, - 262, 1, 0, 0, 0, 270, 263, 1, 0, 0, 0, 270, 264, 1, 0, 0, 0, 270, 265, - 1, 0, 0, 0, 270, 266, 1, 0, 0, 0, 270, 267, 1, 0, 0, 0, 270, 268, 1, 0, - 0, 0, 270, 269, 1, 0, 0, 0, 271, 21, 1, 0, 0, 0, 272, 277, 3, 24, 12, 0, - 273, 274, 5, 115, 0, 0, 274, 275, 3, 160, 80, 0, 275, 276, 5, 116, 0, 0, - 276, 278, 1, 0, 0, 0, 277, 273, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, - 279, 1, 0, 0, 0, 279, 280, 5, 106, 0, 0, 280, 281, 3, 18, 9, 0, 281, 23, - 1, 0, 0, 0, 282, 283, 3, 26, 13, 0, 283, 284, 3, 164, 82, 0, 284, 286, - 5, 113, 0, 0, 285, 287, 3, 36, 18, 0, 286, 285, 1, 0, 0, 0, 286, 287, 1, - 0, 0, 0, 287, 288, 1, 0, 0, 0, 288, 289, 5, 114, 0, 0, 289, 304, 1, 0, - 0, 0, 290, 291, 3, 28, 14, 0, 291, 292, 3, 164, 82, 0, 292, 294, 5, 113, - 0, 0, 293, 295, 3, 38, 19, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, - 0, 295, 296, 1, 0, 0, 0, 296, 297, 5, 114, 0, 0, 297, 304, 1, 0, 0, 0, - 298, 299, 3, 164, 82, 0, 299, 300, 5, 113, 0, 0, 300, 301, 3, 30, 15, 0, - 301, 302, 5, 114, 0, 0, 302, 304, 1, 0, 0, 0, 303, 282, 1, 0, 0, 0, 303, - 290, 1, 0, 0, 0, 303, 298, 1, 0, 0, 0, 304, 25, 1, 0, 0, 0, 305, 306, 5, - 9, 0, 0, 306, 307, 5, 127, 0, 0, 307, 308, 5, 113, 0, 0, 308, 313, 3, 100, - 50, 0, 309, 310, 5, 117, 0, 0, 310, 312, 3, 100, 50, 0, 311, 309, 1, 0, - 0, 0, 312, 315, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 313, 314, 1, 0, 0, 0, - 314, 316, 1, 0, 0, 0, 315, 313, 1, 0, 0, 0, 316, 317, 5, 114, 0, 0, 317, - 318, 5, 106, 0, 0, 318, 319, 3, 28, 14, 0, 319, 27, 1, 0, 0, 0, 320, 329, - 5, 113, 0, 0, 321, 326, 3, 32, 16, 0, 322, 323, 5, 117, 0, 0, 323, 325, - 3, 32, 16, 0, 324, 322, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, - 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 330, 1, 0, 0, 0, 328, 326, 1, 0, 0, - 0, 329, 321, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, - 332, 5, 114, 0, 0, 332, 29, 1, 0, 0, 0, 333, 334, 3, 32, 16, 0, 334, 335, - 5, 100, 0, 0, 335, 336, 3, 100, 50, 0, 336, 31, 1, 0, 0, 0, 337, 346, 5, - 113, 0, 0, 338, 343, 3, 34, 17, 0, 339, 340, 5, 117, 0, 0, 340, 342, 3, - 34, 17, 0, 341, 339, 1, 0, 0, 0, 342, 345, 1, 0, 0, 0, 343, 341, 1, 0, - 0, 0, 343, 344, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, - 346, 338, 1, 0, 0, 0, 346, 347, 1, 0, 0, 0, 347, 348, 1, 0, 0, 0, 348, - 349, 5, 114, 0, 0, 349, 33, 1, 0, 0, 0, 350, 362, 5, 45, 0, 0, 351, 362, - 3, 44, 22, 0, 352, 362, 5, 27, 0, 0, 353, 362, 5, 46, 0, 0, 354, 362, 5, - 31, 0, 0, 355, 362, 5, 30, 0, 0, 356, 362, 5, 29, 0, 0, 357, 362, 5, 28, - 0, 0, 358, 362, 5, 42, 0, 0, 359, 362, 5, 43, 0, 0, 360, 362, 5, 44, 0, - 0, 361, 350, 1, 0, 0, 0, 361, 351, 1, 0, 0, 0, 361, 352, 1, 0, 0, 0, 361, - 353, 1, 0, 0, 0, 361, 354, 1, 0, 0, 0, 361, 355, 1, 0, 0, 0, 361, 356, - 1, 0, 0, 0, 361, 357, 1, 0, 0, 0, 361, 358, 1, 0, 0, 0, 361, 359, 1, 0, - 0, 0, 361, 360, 1, 0, 0, 0, 362, 35, 1, 0, 0, 0, 363, 368, 3, 40, 20, 0, - 364, 365, 5, 117, 0, 0, 365, 367, 3, 40, 20, 0, 366, 364, 1, 0, 0, 0, 367, - 370, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 37, 1, - 0, 0, 0, 370, 368, 1, 0, 0, 0, 371, 376, 3, 42, 21, 0, 372, 373, 5, 117, - 0, 0, 373, 375, 3, 42, 21, 0, 374, 372, 1, 0, 0, 0, 375, 378, 1, 0, 0, - 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 39, 1, 0, 0, 0, 378, - 376, 1, 0, 0, 0, 379, 380, 5, 127, 0, 0, 380, 381, 5, 121, 0, 0, 381, 384, - 5, 47, 0, 0, 382, 384, 3, 20, 10, 0, 383, 379, 1, 0, 0, 0, 383, 382, 1, - 0, 0, 0, 384, 41, 1, 0, 0, 0, 385, 386, 5, 47, 0, 0, 386, 387, 5, 100, - 0, 0, 387, 390, 3, 100, 50, 0, 388, 390, 3, 20, 10, 0, 389, 385, 1, 0, - 0, 0, 389, 388, 1, 0, 0, 0, 390, 43, 1, 0, 0, 0, 391, 395, 5, 25, 0, 0, - 392, 395, 5, 24, 0, 0, 393, 395, 3, 46, 23, 0, 394, 391, 1, 0, 0, 0, 394, - 392, 1, 0, 0, 0, 394, 393, 1, 0, 0, 0, 395, 45, 1, 0, 0, 0, 396, 397, 7, - 1, 0, 0, 397, 47, 1, 0, 0, 0, 398, 399, 5, 45, 0, 0, 399, 400, 5, 100, - 0, 0, 400, 401, 3, 100, 50, 0, 401, 49, 1, 0, 0, 0, 402, 403, 5, 24, 0, - 0, 403, 404, 5, 100, 0, 0, 404, 405, 3, 110, 55, 0, 405, 51, 1, 0, 0, 0, - 406, 407, 3, 44, 22, 0, 407, 408, 5, 100, 0, 0, 408, 409, 3, 112, 56, 0, - 409, 53, 1, 0, 0, 0, 410, 411, 3, 44, 22, 0, 411, 412, 5, 100, 0, 0, 412, - 413, 3, 134, 67, 0, 413, 55, 1, 0, 0, 0, 414, 415, 5, 27, 0, 0, 415, 416, - 5, 100, 0, 0, 416, 417, 3, 104, 52, 0, 417, 57, 1, 0, 0, 0, 418, 419, 5, - 46, 0, 0, 419, 420, 5, 100, 0, 0, 420, 421, 3, 106, 53, 0, 421, 59, 1, - 0, 0, 0, 422, 423, 5, 31, 0, 0, 423, 424, 5, 100, 0, 0, 424, 425, 3, 114, - 57, 0, 425, 61, 1, 0, 0, 0, 426, 427, 5, 30, 0, 0, 427, 428, 5, 100, 0, - 0, 428, 429, 3, 116, 58, 0, 429, 63, 1, 0, 0, 0, 430, 431, 5, 29, 0, 0, - 431, 432, 5, 100, 0, 0, 432, 433, 3, 118, 59, 0, 433, 65, 1, 0, 0, 0, 434, - 435, 5, 28, 0, 0, 435, 436, 5, 100, 0, 0, 436, 437, 3, 120, 60, 0, 437, - 67, 1, 0, 0, 0, 438, 439, 5, 42, 0, 0, 439, 440, 5, 100, 0, 0, 440, 441, - 3, 122, 61, 0, 441, 69, 1, 0, 0, 0, 442, 443, 5, 43, 0, 0, 443, 444, 5, - 100, 0, 0, 444, 445, 3, 124, 62, 0, 445, 71, 1, 0, 0, 0, 446, 447, 5, 44, - 0, 0, 447, 448, 5, 100, 0, 0, 448, 449, 3, 126, 63, 0, 449, 73, 1, 0, 0, - 0, 450, 451, 5, 46, 0, 0, 451, 452, 5, 100, 0, 0, 452, 453, 3, 128, 64, - 0, 453, 75, 1, 0, 0, 0, 454, 455, 5, 46, 0, 0, 455, 456, 5, 100, 0, 0, - 456, 457, 3, 130, 65, 0, 457, 77, 1, 0, 0, 0, 458, 459, 5, 46, 0, 0, 459, - 460, 5, 100, 0, 0, 460, 461, 3, 132, 66, 0, 461, 79, 1, 0, 0, 0, 462, 463, - 5, 30, 0, 0, 463, 464, 5, 100, 0, 0, 464, 465, 3, 136, 68, 0, 465, 81, - 1, 0, 0, 0, 466, 467, 5, 29, 0, 0, 467, 468, 5, 100, 0, 0, 468, 469, 3, - 138, 69, 0, 469, 83, 1, 0, 0, 0, 470, 471, 5, 28, 0, 0, 471, 472, 5, 100, - 0, 0, 472, 473, 3, 140, 70, 0, 473, 85, 1, 0, 0, 0, 474, 475, 3, 90, 45, - 0, 475, 476, 5, 100, 0, 0, 476, 477, 3, 142, 71, 0, 477, 87, 1, 0, 0, 0, - 478, 479, 3, 94, 47, 0, 479, 480, 5, 100, 0, 0, 480, 481, 3, 144, 72, 0, - 481, 89, 1, 0, 0, 0, 482, 491, 5, 115, 0, 0, 483, 488, 3, 92, 46, 0, 484, - 485, 5, 117, 0, 0, 485, 487, 3, 92, 46, 0, 486, 484, 1, 0, 0, 0, 487, 490, - 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 492, 1, 0, - 0, 0, 490, 488, 1, 0, 0, 0, 491, 483, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, - 492, 493, 1, 0, 0, 0, 493, 494, 5, 116, 0, 0, 494, 91, 1, 0, 0, 0, 495, - 498, 3, 34, 17, 0, 496, 498, 3, 90, 45, 0, 497, 495, 1, 0, 0, 0, 497, 496, - 1, 0, 0, 0, 498, 93, 1, 0, 0, 0, 499, 500, 5, 113, 0, 0, 500, 501, 3, 96, - 48, 0, 501, 502, 5, 125, 0, 0, 502, 503, 3, 98, 49, 0, 503, 504, 5, 114, - 0, 0, 504, 95, 1, 0, 0, 0, 505, 516, 5, 127, 0, 0, 506, 507, 5, 113, 0, - 0, 507, 510, 5, 127, 0, 0, 508, 509, 5, 117, 0, 0, 509, 511, 5, 127, 0, - 0, 510, 508, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, - 513, 1, 0, 0, 0, 513, 514, 1, 0, 0, 0, 514, 516, 5, 114, 0, 0, 515, 505, - 1, 0, 0, 0, 515, 506, 1, 0, 0, 0, 516, 97, 1, 0, 0, 0, 517, 518, 3, 164, - 82, 0, 518, 519, 5, 113, 0, 0, 519, 520, 3, 16, 8, 0, 520, 521, 5, 114, - 0, 0, 521, 99, 1, 0, 0, 0, 522, 525, 3, 102, 51, 0, 523, 525, 3, 148, 74, - 0, 524, 522, 1, 0, 0, 0, 524, 523, 1, 0, 0, 0, 525, 101, 1, 0, 0, 0, 526, - 546, 3, 104, 52, 0, 527, 546, 3, 110, 55, 0, 528, 546, 3, 112, 56, 0, 529, - 546, 3, 106, 53, 0, 530, 546, 3, 108, 54, 0, 531, 546, 3, 118, 59, 0, 532, - 546, 3, 120, 60, 0, 533, 546, 3, 114, 57, 0, 534, 546, 3, 116, 58, 0, 535, - 546, 3, 122, 61, 0, 536, 538, 5, 70, 0, 0, 537, 539, 5, 119, 0, 0, 538, - 537, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 546, 1, 0, 0, 0, 540, 541, - 5, 82, 0, 0, 541, 543, 5, 127, 0, 0, 542, 544, 5, 119, 0, 0, 543, 542, - 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 546, 1, 0, 0, 0, 545, 526, 1, 0, - 0, 0, 545, 527, 1, 0, 0, 0, 545, 528, 1, 0, 0, 0, 545, 529, 1, 0, 0, 0, - 545, 530, 1, 0, 0, 0, 545, 531, 1, 0, 0, 0, 545, 532, 1, 0, 0, 0, 545, - 533, 1, 0, 0, 0, 545, 534, 1, 0, 0, 0, 545, 535, 1, 0, 0, 0, 545, 536, - 1, 0, 0, 0, 545, 540, 1, 0, 0, 0, 546, 103, 1, 0, 0, 0, 547, 549, 7, 2, - 0, 0, 548, 550, 5, 119, 0, 0, 549, 548, 1, 0, 0, 0, 549, 550, 1, 0, 0, - 0, 550, 105, 1, 0, 0, 0, 551, 553, 7, 3, 0, 0, 552, 554, 5, 119, 0, 0, - 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 107, 1, 0, 0, 0, 555, - 557, 7, 4, 0, 0, 556, 558, 5, 119, 0, 0, 557, 556, 1, 0, 0, 0, 557, 558, - 1, 0, 0, 0, 558, 109, 1, 0, 0, 0, 559, 561, 7, 5, 0, 0, 560, 562, 5, 119, - 0, 0, 561, 560, 1, 0, 0, 0, 561, 562, 1, 0, 0, 0, 562, 111, 1, 0, 0, 0, - 563, 565, 7, 6, 0, 0, 564, 566, 5, 119, 0, 0, 565, 564, 1, 0, 0, 0, 565, - 566, 1, 0, 0, 0, 566, 113, 1, 0, 0, 0, 567, 569, 5, 65, 0, 0, 568, 570, - 5, 119, 0, 0, 569, 568, 1, 0, 0, 0, 569, 570, 1, 0, 0, 0, 570, 115, 1, - 0, 0, 0, 571, 573, 5, 66, 0, 0, 572, 574, 5, 119, 0, 0, 573, 572, 1, 0, - 0, 0, 573, 574, 1, 0, 0, 0, 574, 117, 1, 0, 0, 0, 575, 577, 7, 7, 0, 0, - 576, 578, 5, 119, 0, 0, 577, 576, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, - 119, 1, 0, 0, 0, 579, 581, 7, 8, 0, 0, 580, 582, 5, 119, 0, 0, 581, 580, - 1, 0, 0, 0, 581, 582, 1, 0, 0, 0, 582, 121, 1, 0, 0, 0, 583, 585, 7, 9, - 0, 0, 584, 586, 5, 119, 0, 0, 585, 584, 1, 0, 0, 0, 585, 586, 1, 0, 0, - 0, 586, 123, 1, 0, 0, 0, 587, 589, 7, 10, 0, 0, 588, 590, 5, 119, 0, 0, - 589, 588, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 595, 1, 0, 0, 0, 591, - 592, 5, 40, 0, 0, 592, 593, 3, 150, 75, 0, 593, 594, 5, 41, 0, 0, 594, - 596, 1, 0, 0, 0, 595, 591, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 125, - 1, 0, 0, 0, 597, 599, 7, 11, 0, 0, 598, 600, 5, 119, 0, 0, 599, 598, 1, - 0, 0, 0, 599, 600, 1, 0, 0, 0, 600, 605, 1, 0, 0, 0, 601, 602, 5, 40, 0, - 0, 602, 603, 3, 150, 75, 0, 603, 604, 5, 41, 0, 0, 604, 606, 1, 0, 0, 0, - 605, 601, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 127, 1, 0, 0, 0, 607, - 609, 7, 12, 0, 0, 608, 610, 5, 119, 0, 0, 609, 608, 1, 0, 0, 0, 609, 610, - 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 40, 0, 0, 612, 613, 3, 150, - 75, 0, 613, 614, 5, 41, 0, 0, 614, 129, 1, 0, 0, 0, 615, 617, 7, 13, 0, - 0, 616, 618, 5, 119, 0, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, - 618, 619, 1, 0, 0, 0, 619, 620, 5, 40, 0, 0, 620, 621, 3, 150, 75, 0, 621, - 622, 5, 41, 0, 0, 622, 131, 1, 0, 0, 0, 623, 625, 7, 14, 0, 0, 624, 626, - 5, 119, 0, 0, 625, 624, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 1, - 0, 0, 0, 627, 628, 5, 40, 0, 0, 628, 629, 3, 150, 75, 0, 629, 630, 5, 41, - 0, 0, 630, 133, 1, 0, 0, 0, 631, 633, 7, 15, 0, 0, 632, 634, 5, 119, 0, - 0, 633, 632, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 641, 1, 0, 0, 0, 635, - 636, 5, 40, 0, 0, 636, 637, 3, 150, 75, 0, 637, 638, 5, 117, 0, 0, 638, - 639, 3, 150, 75, 0, 639, 640, 5, 41, 0, 0, 640, 642, 1, 0, 0, 0, 641, 635, - 1, 0, 0, 0, 641, 642, 1, 0, 0, 0, 642, 135, 1, 0, 0, 0, 643, 645, 7, 16, - 0, 0, 644, 646, 5, 119, 0, 0, 645, 644, 1, 0, 0, 0, 645, 646, 1, 0, 0, - 0, 646, 647, 1, 0, 0, 0, 647, 648, 5, 40, 0, 0, 648, 649, 3, 150, 75, 0, - 649, 650, 5, 41, 0, 0, 650, 137, 1, 0, 0, 0, 651, 653, 7, 17, 0, 0, 652, - 654, 5, 119, 0, 0, 653, 652, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, - 1, 0, 0, 0, 655, 656, 5, 40, 0, 0, 656, 657, 3, 150, 75, 0, 657, 658, 5, - 41, 0, 0, 658, 139, 1, 0, 0, 0, 659, 661, 7, 18, 0, 0, 660, 662, 5, 119, - 0, 0, 661, 660, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, - 663, 664, 5, 40, 0, 0, 664, 665, 3, 150, 75, 0, 665, 666, 5, 41, 0, 0, - 666, 141, 1, 0, 0, 0, 667, 669, 5, 80, 0, 0, 668, 670, 5, 119, 0, 0, 669, - 668, 1, 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 672, - 5, 40, 0, 0, 672, 673, 3, 100, 50, 0, 673, 674, 5, 41, 0, 0, 674, 143, - 1, 0, 0, 0, 675, 677, 5, 53, 0, 0, 676, 678, 5, 119, 0, 0, 677, 676, 1, - 0, 0, 0, 677, 678, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 680, 5, 40, 0, - 0, 680, 681, 3, 146, 73, 0, 681, 682, 5, 125, 0, 0, 682, 683, 3, 100, 50, - 0, 683, 684, 5, 41, 0, 0, 684, 145, 1, 0, 0, 0, 685, 698, 3, 100, 50, 0, - 686, 687, 5, 113, 0, 0, 687, 692, 3, 100, 50, 0, 688, 689, 5, 117, 0, 0, - 689, 691, 3, 100, 50, 0, 690, 688, 1, 0, 0, 0, 691, 694, 1, 0, 0, 0, 692, - 690, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 695, 1, 0, 0, 0, 694, 692, - 1, 0, 0, 0, 695, 696, 5, 114, 0, 0, 696, 698, 1, 0, 0, 0, 697, 685, 1, - 0, 0, 0, 697, 686, 1, 0, 0, 0, 698, 147, 1, 0, 0, 0, 699, 711, 3, 128, - 64, 0, 700, 711, 3, 130, 65, 0, 701, 711, 3, 132, 66, 0, 702, 711, 3, 134, - 67, 0, 703, 711, 3, 124, 62, 0, 704, 711, 3, 126, 63, 0, 705, 711, 3, 136, - 68, 0, 706, 711, 3, 138, 69, 0, 707, 711, 3, 140, 70, 0, 708, 711, 3, 142, - 71, 0, 709, 711, 3, 144, 72, 0, 710, 699, 1, 0, 0, 0, 710, 700, 1, 0, 0, - 0, 710, 701, 1, 0, 0, 0, 710, 702, 1, 0, 0, 0, 710, 703, 1, 0, 0, 0, 710, - 704, 1, 0, 0, 0, 710, 705, 1, 0, 0, 0, 710, 706, 1, 0, 0, 0, 710, 707, - 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 709, 1, 0, 0, 0, 711, 149, 1, 0, - 0, 0, 712, 713, 5, 24, 0, 0, 713, 151, 1, 0, 0, 0, 714, 715, 7, 19, 0, - 0, 715, 153, 1, 0, 0, 0, 716, 717, 3, 156, 78, 0, 717, 718, 5, 118, 0, - 0, 718, 719, 3, 158, 79, 0, 719, 155, 1, 0, 0, 0, 720, 721, 7, 20, 0, 0, - 721, 157, 1, 0, 0, 0, 722, 723, 7, 21, 0, 0, 723, 159, 1, 0, 0, 0, 724, - 729, 3, 154, 77, 0, 725, 726, 5, 117, 0, 0, 726, 728, 3, 154, 77, 0, 727, - 725, 1, 0, 0, 0, 728, 731, 1, 0, 0, 0, 729, 727, 1, 0, 0, 0, 729, 730, - 1, 0, 0, 0, 730, 161, 1, 0, 0, 0, 731, 729, 1, 0, 0, 0, 732, 733, 7, 22, - 0, 0, 733, 163, 1, 0, 0, 0, 734, 737, 3, 162, 81, 0, 735, 737, 5, 127, - 0, 0, 736, 734, 1, 0, 0, 0, 736, 735, 1, 0, 0, 0, 737, 165, 1, 0, 0, 0, - 65, 170, 179, 195, 213, 219, 224, 227, 232, 234, 241, 246, 270, 277, 286, - 294, 303, 313, 326, 329, 343, 346, 361, 368, 376, 383, 389, 394, 488, 491, - 497, 512, 515, 524, 538, 543, 545, 549, 553, 557, 561, 565, 569, 573, 577, - 581, 585, 589, 595, 599, 605, 609, 617, 625, 633, 641, 645, 653, 661, 669, - 677, 692, 697, 710, 729, 736, + 1, 10, 1, 10, 1, 10, 3, 10, 274, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, + 11, 3, 11, 281, 8, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, + 3, 12, 290, 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 298, + 8, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 307, 8, + 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 315, 8, 13, 10, 13, + 12, 13, 318, 9, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, + 14, 5, 14, 328, 8, 14, 10, 14, 12, 14, 331, 9, 14, 3, 14, 333, 8, 14, 1, + 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, + 345, 8, 16, 10, 16, 12, 16, 348, 9, 16, 3, 16, 350, 8, 16, 1, 16, 1, 16, + 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, + 17, 3, 17, 365, 8, 17, 1, 18, 1, 18, 1, 18, 5, 18, 370, 8, 18, 10, 18, + 12, 18, 373, 9, 18, 1, 19, 1, 19, 1, 19, 5, 19, 378, 8, 19, 10, 19, 12, + 19, 381, 9, 19, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 387, 8, 20, 1, 21, 1, + 21, 1, 21, 1, 21, 3, 21, 393, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 398, 8, + 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, + 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, + 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, + 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, + 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, + 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, + 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, + 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, + 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, + 5, 46, 494, 8, 46, 10, 46, 12, 46, 497, 9, 46, 3, 46, 499, 8, 46, 1, 46, + 1, 46, 1, 47, 1, 47, 3, 47, 505, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, + 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 4, 49, 518, 8, 49, 11, 49, + 12, 49, 519, 1, 49, 3, 49, 523, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, + 1, 51, 1, 51, 3, 51, 532, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, + 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 546, 8, 52, 1, 52, + 1, 52, 1, 52, 3, 52, 551, 8, 52, 3, 52, 553, 8, 52, 1, 53, 1, 53, 3, 53, + 557, 8, 53, 1, 54, 1, 54, 3, 54, 561, 8, 54, 1, 55, 1, 55, 3, 55, 565, + 8, 55, 1, 56, 1, 56, 3, 56, 569, 8, 56, 1, 57, 1, 57, 3, 57, 573, 8, 57, + 1, 58, 1, 58, 3, 58, 577, 8, 58, 1, 59, 1, 59, 3, 59, 581, 8, 59, 1, 60, + 1, 60, 3, 60, 585, 8, 60, 1, 61, 1, 61, 3, 61, 589, 8, 61, 1, 62, 1, 62, + 3, 62, 593, 8, 62, 1, 63, 1, 63, 3, 63, 597, 8, 63, 1, 63, 1, 63, 1, 63, + 1, 63, 3, 63, 603, 8, 63, 1, 64, 1, 64, 3, 64, 607, 8, 64, 1, 64, 1, 64, + 1, 64, 1, 64, 3, 64, 613, 8, 64, 1, 65, 1, 65, 3, 65, 617, 8, 65, 1, 65, + 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 3, 66, 625, 8, 66, 1, 66, 1, 66, 1, + 66, 1, 66, 1, 67, 1, 67, 3, 67, 633, 8, 67, 1, 67, 1, 67, 1, 67, 1, 67, + 1, 68, 1, 68, 3, 68, 641, 8, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, + 68, 3, 68, 649, 8, 68, 1, 69, 1, 69, 3, 69, 653, 8, 69, 1, 69, 1, 69, 1, + 69, 1, 69, 1, 70, 1, 70, 3, 70, 661, 8, 70, 1, 70, 1, 70, 1, 70, 1, 70, + 1, 71, 1, 71, 3, 71, 669, 8, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, + 72, 3, 72, 677, 8, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 3, 73, + 685, 8, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, + 74, 1, 74, 1, 74, 5, 74, 698, 8, 74, 10, 74, 12, 74, 701, 9, 74, 1, 74, + 1, 74, 3, 74, 705, 8, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, + 75, 1, 75, 1, 75, 1, 75, 1, 75, 3, 75, 718, 8, 75, 1, 76, 1, 76, 1, 77, + 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 80, 1, 80, 1, 81, 1, + 81, 1, 81, 5, 81, 735, 8, 81, 10, 81, 12, 81, 738, 9, 81, 1, 82, 1, 82, + 1, 83, 1, 83, 3, 83, 744, 8, 83, 1, 83, 0, 0, 84, 0, 2, 4, 6, 8, 10, 12, + 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, + 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, + 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, + 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, + 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 0, 23, 1, 0, 3, 4, 2, + 0, 18, 18, 26, 26, 2, 0, 55, 55, 84, 84, 2, 0, 62, 62, 85, 85, 2, 0, 63, + 63, 86, 86, 1, 0, 56, 59, 1, 0, 60, 61, 2, 0, 64, 64, 87, 87, 2, 0, 65, + 65, 88, 88, 2, 0, 68, 68, 89, 89, 2, 0, 69, 69, 90, 90, 2, 0, 70, 70, 91, + 91, 2, 0, 76, 76, 96, 96, 2, 0, 77, 77, 97, 97, 2, 0, 78, 78, 98, 98, 2, + 0, 72, 72, 92, 92, 2, 0, 73, 73, 93, 93, 2, 0, 74, 74, 94, 94, 2, 0, 75, + 75, 95, 95, 1, 0, 10, 11, 3, 0, 12, 13, 21, 22, 128, 128, 5, 0, 14, 20, + 23, 23, 27, 27, 45, 45, 128, 128, 2, 0, 23, 23, 123, 124, 777, 0, 168, + 1, 0, 0, 0, 2, 176, 1, 0, 0, 0, 4, 184, 1, 0, 0, 0, 6, 189, 1, 0, 0, 0, + 8, 200, 1, 0, 0, 0, 10, 205, 1, 0, 0, 0, 12, 207, 1, 0, 0, 0, 14, 236, + 1, 0, 0, 0, 16, 238, 1, 0, 0, 0, 18, 248, 1, 0, 0, 0, 20, 273, 1, 0, 0, + 0, 22, 275, 1, 0, 0, 0, 24, 306, 1, 0, 0, 0, 26, 308, 1, 0, 0, 0, 28, 323, + 1, 0, 0, 0, 30, 336, 1, 0, 0, 0, 32, 340, 1, 0, 0, 0, 34, 364, 1, 0, 0, + 0, 36, 366, 1, 0, 0, 0, 38, 374, 1, 0, 0, 0, 40, 386, 1, 0, 0, 0, 42, 392, + 1, 0, 0, 0, 44, 397, 1, 0, 0, 0, 46, 399, 1, 0, 0, 0, 48, 401, 1, 0, 0, + 0, 50, 405, 1, 0, 0, 0, 52, 409, 1, 0, 0, 0, 54, 413, 1, 0, 0, 0, 56, 417, + 1, 0, 0, 0, 58, 421, 1, 0, 0, 0, 60, 425, 1, 0, 0, 0, 62, 429, 1, 0, 0, + 0, 64, 433, 1, 0, 0, 0, 66, 437, 1, 0, 0, 0, 68, 441, 1, 0, 0, 0, 70, 445, + 1, 0, 0, 0, 72, 449, 1, 0, 0, 0, 74, 453, 1, 0, 0, 0, 76, 457, 1, 0, 0, + 0, 78, 461, 1, 0, 0, 0, 80, 465, 1, 0, 0, 0, 82, 469, 1, 0, 0, 0, 84, 473, + 1, 0, 0, 0, 86, 477, 1, 0, 0, 0, 88, 481, 1, 0, 0, 0, 90, 485, 1, 0, 0, + 0, 92, 489, 1, 0, 0, 0, 94, 504, 1, 0, 0, 0, 96, 506, 1, 0, 0, 0, 98, 522, + 1, 0, 0, 0, 100, 524, 1, 0, 0, 0, 102, 531, 1, 0, 0, 0, 104, 552, 1, 0, + 0, 0, 106, 554, 1, 0, 0, 0, 108, 558, 1, 0, 0, 0, 110, 562, 1, 0, 0, 0, + 112, 566, 1, 0, 0, 0, 114, 570, 1, 0, 0, 0, 116, 574, 1, 0, 0, 0, 118, + 578, 1, 0, 0, 0, 120, 582, 1, 0, 0, 0, 122, 586, 1, 0, 0, 0, 124, 590, + 1, 0, 0, 0, 126, 594, 1, 0, 0, 0, 128, 604, 1, 0, 0, 0, 130, 614, 1, 0, + 0, 0, 132, 622, 1, 0, 0, 0, 134, 630, 1, 0, 0, 0, 136, 638, 1, 0, 0, 0, + 138, 650, 1, 0, 0, 0, 140, 658, 1, 0, 0, 0, 142, 666, 1, 0, 0, 0, 144, + 674, 1, 0, 0, 0, 146, 682, 1, 0, 0, 0, 148, 704, 1, 0, 0, 0, 150, 717, + 1, 0, 0, 0, 152, 719, 1, 0, 0, 0, 154, 721, 1, 0, 0, 0, 156, 723, 1, 0, + 0, 0, 158, 727, 1, 0, 0, 0, 160, 729, 1, 0, 0, 0, 162, 731, 1, 0, 0, 0, + 164, 739, 1, 0, 0, 0, 166, 743, 1, 0, 0, 0, 168, 170, 3, 2, 1, 0, 169, + 171, 3, 14, 7, 0, 170, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 170, + 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 174, 175, 5, 0, + 0, 1, 175, 1, 1, 0, 0, 0, 176, 177, 3, 4, 2, 0, 177, 181, 3, 6, 3, 0, 178, + 180, 3, 8, 4, 0, 179, 178, 1, 0, 0, 0, 180, 183, 1, 0, 0, 0, 181, 179, + 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 3, 1, 0, 0, 0, 183, 181, 1, 0, 0, + 0, 184, 185, 5, 2, 0, 0, 185, 186, 7, 0, 0, 0, 186, 187, 5, 119, 0, 0, + 187, 188, 5, 7, 0, 0, 188, 5, 1, 0, 0, 0, 189, 190, 5, 2, 0, 0, 190, 191, + 5, 5, 0, 0, 191, 192, 5, 119, 0, 0, 192, 197, 5, 46, 0, 0, 193, 194, 5, + 118, 0, 0, 194, 196, 5, 46, 0, 0, 195, 193, 1, 0, 0, 0, 196, 199, 1, 0, + 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 7, 1, 0, 0, 0, 199, + 197, 1, 0, 0, 0, 200, 201, 5, 2, 0, 0, 201, 202, 5, 6, 0, 0, 202, 203, + 5, 119, 0, 0, 203, 204, 5, 46, 0, 0, 204, 9, 1, 0, 0, 0, 205, 206, 5, 8, + 0, 0, 206, 11, 1, 0, 0, 0, 207, 208, 3, 166, 83, 0, 208, 209, 5, 114, 0, + 0, 209, 210, 3, 16, 8, 0, 210, 215, 5, 115, 0, 0, 211, 212, 5, 116, 0, + 0, 212, 213, 3, 162, 81, 0, 213, 214, 5, 117, 0, 0, 214, 216, 1, 0, 0, + 0, 215, 211, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, + 218, 5, 107, 0, 0, 218, 219, 3, 18, 9, 0, 219, 13, 1, 0, 0, 0, 220, 222, + 3, 10, 5, 0, 221, 220, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 224, 1, 0, + 0, 0, 223, 225, 3, 12, 6, 0, 224, 223, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, + 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 237, 1, 0, 0, 0, 228, + 230, 3, 10, 5, 0, 229, 228, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, + 1, 0, 0, 0, 231, 233, 3, 22, 11, 0, 232, 231, 1, 0, 0, 0, 233, 234, 1, + 0, 0, 0, 234, 232, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 237, 1, 0, 0, + 0, 236, 221, 1, 0, 0, 0, 236, 229, 1, 0, 0, 0, 237, 15, 1, 0, 0, 0, 238, + 243, 3, 20, 10, 0, 239, 240, 5, 118, 0, 0, 240, 242, 3, 20, 10, 0, 241, + 239, 1, 0, 0, 0, 242, 245, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 244, + 1, 0, 0, 0, 244, 17, 1, 0, 0, 0, 245, 243, 1, 0, 0, 0, 246, 249, 3, 20, + 10, 0, 247, 249, 3, 154, 77, 0, 248, 246, 1, 0, 0, 0, 248, 247, 1, 0, 0, + 0, 249, 19, 1, 0, 0, 0, 250, 274, 3, 48, 24, 0, 251, 274, 3, 90, 45, 0, + 252, 274, 3, 50, 25, 0, 253, 274, 3, 52, 26, 0, 254, 274, 3, 56, 28, 0, + 255, 274, 3, 58, 29, 0, 256, 274, 3, 54, 27, 0, 257, 274, 3, 60, 30, 0, + 258, 274, 3, 62, 31, 0, 259, 274, 3, 64, 32, 0, 260, 274, 3, 66, 33, 0, + 261, 274, 3, 68, 34, 0, 262, 274, 3, 70, 35, 0, 263, 274, 3, 72, 36, 0, + 264, 274, 3, 74, 37, 0, 265, 274, 3, 76, 38, 0, 266, 274, 3, 78, 39, 0, + 267, 274, 3, 80, 40, 0, 268, 274, 3, 82, 41, 0, 269, 274, 3, 84, 42, 0, + 270, 274, 3, 86, 43, 0, 271, 274, 3, 88, 44, 0, 272, 274, 5, 128, 0, 0, + 273, 250, 1, 0, 0, 0, 273, 251, 1, 0, 0, 0, 273, 252, 1, 0, 0, 0, 273, + 253, 1, 0, 0, 0, 273, 254, 1, 0, 0, 0, 273, 255, 1, 0, 0, 0, 273, 256, + 1, 0, 0, 0, 273, 257, 1, 0, 0, 0, 273, 258, 1, 0, 0, 0, 273, 259, 1, 0, + 0, 0, 273, 260, 1, 0, 0, 0, 273, 261, 1, 0, 0, 0, 273, 262, 1, 0, 0, 0, + 273, 263, 1, 0, 0, 0, 273, 264, 1, 0, 0, 0, 273, 265, 1, 0, 0, 0, 273, + 266, 1, 0, 0, 0, 273, 267, 1, 0, 0, 0, 273, 268, 1, 0, 0, 0, 273, 269, + 1, 0, 0, 0, 273, 270, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 272, 1, 0, + 0, 0, 274, 21, 1, 0, 0, 0, 275, 280, 3, 24, 12, 0, 276, 277, 5, 116, 0, + 0, 277, 278, 3, 162, 81, 0, 278, 279, 5, 117, 0, 0, 279, 281, 1, 0, 0, + 0, 280, 276, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, + 283, 5, 107, 0, 0, 283, 284, 3, 18, 9, 0, 284, 23, 1, 0, 0, 0, 285, 286, + 3, 26, 13, 0, 286, 287, 3, 166, 83, 0, 287, 289, 5, 114, 0, 0, 288, 290, + 3, 36, 18, 0, 289, 288, 1, 0, 0, 0, 289, 290, 1, 0, 0, 0, 290, 291, 1, + 0, 0, 0, 291, 292, 5, 115, 0, 0, 292, 307, 1, 0, 0, 0, 293, 294, 3, 28, + 14, 0, 294, 295, 3, 166, 83, 0, 295, 297, 5, 114, 0, 0, 296, 298, 3, 38, + 19, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 299, 1, 0, 0, 0, + 299, 300, 5, 115, 0, 0, 300, 307, 1, 0, 0, 0, 301, 302, 3, 166, 83, 0, + 302, 303, 5, 114, 0, 0, 303, 304, 3, 30, 15, 0, 304, 305, 5, 115, 0, 0, + 305, 307, 1, 0, 0, 0, 306, 285, 1, 0, 0, 0, 306, 293, 1, 0, 0, 0, 306, + 301, 1, 0, 0, 0, 307, 25, 1, 0, 0, 0, 308, 309, 5, 9, 0, 0, 309, 310, 5, + 128, 0, 0, 310, 311, 5, 114, 0, 0, 311, 316, 3, 102, 51, 0, 312, 313, 5, + 118, 0, 0, 313, 315, 3, 102, 51, 0, 314, 312, 1, 0, 0, 0, 315, 318, 1, + 0, 0, 0, 316, 314, 1, 0, 0, 0, 316, 317, 1, 0, 0, 0, 317, 319, 1, 0, 0, + 0, 318, 316, 1, 0, 0, 0, 319, 320, 5, 115, 0, 0, 320, 321, 5, 107, 0, 0, + 321, 322, 3, 28, 14, 0, 322, 27, 1, 0, 0, 0, 323, 332, 5, 114, 0, 0, 324, + 329, 3, 32, 16, 0, 325, 326, 5, 118, 0, 0, 326, 328, 3, 32, 16, 0, 327, + 325, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, + 1, 0, 0, 0, 330, 333, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 324, 1, 0, + 0, 0, 332, 333, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 335, 5, 115, 0, + 0, 335, 29, 1, 0, 0, 0, 336, 337, 3, 32, 16, 0, 337, 338, 5, 101, 0, 0, + 338, 339, 3, 102, 51, 0, 339, 31, 1, 0, 0, 0, 340, 349, 5, 114, 0, 0, 341, + 346, 3, 34, 17, 0, 342, 343, 5, 118, 0, 0, 343, 345, 3, 34, 17, 0, 344, + 342, 1, 0, 0, 0, 345, 348, 1, 0, 0, 0, 346, 344, 1, 0, 0, 0, 346, 347, + 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 349, 341, 1, 0, + 0, 0, 349, 350, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 5, 115, 0, + 0, 352, 33, 1, 0, 0, 0, 353, 365, 5, 45, 0, 0, 354, 365, 3, 44, 22, 0, + 355, 365, 5, 27, 0, 0, 356, 365, 5, 46, 0, 0, 357, 365, 5, 31, 0, 0, 358, + 365, 5, 30, 0, 0, 359, 365, 5, 29, 0, 0, 360, 365, 5, 28, 0, 0, 361, 365, + 5, 42, 0, 0, 362, 365, 5, 43, 0, 0, 363, 365, 5, 44, 0, 0, 364, 353, 1, + 0, 0, 0, 364, 354, 1, 0, 0, 0, 364, 355, 1, 0, 0, 0, 364, 356, 1, 0, 0, + 0, 364, 357, 1, 0, 0, 0, 364, 358, 1, 0, 0, 0, 364, 359, 1, 0, 0, 0, 364, + 360, 1, 0, 0, 0, 364, 361, 1, 0, 0, 0, 364, 362, 1, 0, 0, 0, 364, 363, + 1, 0, 0, 0, 365, 35, 1, 0, 0, 0, 366, 371, 3, 40, 20, 0, 367, 368, 5, 118, + 0, 0, 368, 370, 3, 40, 20, 0, 369, 367, 1, 0, 0, 0, 370, 373, 1, 0, 0, + 0, 371, 369, 1, 0, 0, 0, 371, 372, 1, 0, 0, 0, 372, 37, 1, 0, 0, 0, 373, + 371, 1, 0, 0, 0, 374, 379, 3, 42, 21, 0, 375, 376, 5, 118, 0, 0, 376, 378, + 3, 42, 21, 0, 377, 375, 1, 0, 0, 0, 378, 381, 1, 0, 0, 0, 379, 377, 1, + 0, 0, 0, 379, 380, 1, 0, 0, 0, 380, 39, 1, 0, 0, 0, 381, 379, 1, 0, 0, + 0, 382, 383, 5, 128, 0, 0, 383, 384, 5, 122, 0, 0, 384, 387, 5, 48, 0, + 0, 385, 387, 3, 20, 10, 0, 386, 382, 1, 0, 0, 0, 386, 385, 1, 0, 0, 0, + 387, 41, 1, 0, 0, 0, 388, 389, 5, 48, 0, 0, 389, 390, 5, 101, 0, 0, 390, + 393, 3, 102, 51, 0, 391, 393, 3, 20, 10, 0, 392, 388, 1, 0, 0, 0, 392, + 391, 1, 0, 0, 0, 393, 43, 1, 0, 0, 0, 394, 398, 5, 25, 0, 0, 395, 398, + 5, 24, 0, 0, 396, 398, 3, 46, 23, 0, 397, 394, 1, 0, 0, 0, 397, 395, 1, + 0, 0, 0, 397, 396, 1, 0, 0, 0, 398, 45, 1, 0, 0, 0, 399, 400, 7, 1, 0, + 0, 400, 47, 1, 0, 0, 0, 401, 402, 5, 45, 0, 0, 402, 403, 5, 101, 0, 0, + 403, 404, 3, 102, 51, 0, 404, 49, 1, 0, 0, 0, 405, 406, 5, 24, 0, 0, 406, + 407, 5, 101, 0, 0, 407, 408, 3, 112, 56, 0, 408, 51, 1, 0, 0, 0, 409, 410, + 3, 44, 22, 0, 410, 411, 5, 101, 0, 0, 411, 412, 3, 114, 57, 0, 412, 53, + 1, 0, 0, 0, 413, 414, 3, 44, 22, 0, 414, 415, 5, 101, 0, 0, 415, 416, 3, + 136, 68, 0, 416, 55, 1, 0, 0, 0, 417, 418, 5, 27, 0, 0, 418, 419, 5, 101, + 0, 0, 419, 420, 3, 106, 53, 0, 420, 57, 1, 0, 0, 0, 421, 422, 5, 46, 0, + 0, 422, 423, 5, 101, 0, 0, 423, 424, 3, 108, 54, 0, 424, 59, 1, 0, 0, 0, + 425, 426, 5, 31, 0, 0, 426, 427, 5, 101, 0, 0, 427, 428, 3, 116, 58, 0, + 428, 61, 1, 0, 0, 0, 429, 430, 5, 30, 0, 0, 430, 431, 5, 101, 0, 0, 431, + 432, 3, 118, 59, 0, 432, 63, 1, 0, 0, 0, 433, 434, 5, 29, 0, 0, 434, 435, + 5, 101, 0, 0, 435, 436, 3, 120, 60, 0, 436, 65, 1, 0, 0, 0, 437, 438, 5, + 28, 0, 0, 438, 439, 5, 101, 0, 0, 439, 440, 3, 122, 61, 0, 440, 67, 1, + 0, 0, 0, 441, 442, 5, 42, 0, 0, 442, 443, 5, 101, 0, 0, 443, 444, 3, 124, + 62, 0, 444, 69, 1, 0, 0, 0, 445, 446, 5, 43, 0, 0, 446, 447, 5, 101, 0, + 0, 447, 448, 3, 126, 63, 0, 448, 71, 1, 0, 0, 0, 449, 450, 5, 44, 0, 0, + 450, 451, 5, 101, 0, 0, 451, 452, 3, 128, 64, 0, 452, 73, 1, 0, 0, 0, 453, + 454, 5, 46, 0, 0, 454, 455, 5, 101, 0, 0, 455, 456, 3, 130, 65, 0, 456, + 75, 1, 0, 0, 0, 457, 458, 5, 46, 0, 0, 458, 459, 5, 101, 0, 0, 459, 460, + 3, 132, 66, 0, 460, 77, 1, 0, 0, 0, 461, 462, 5, 46, 0, 0, 462, 463, 5, + 101, 0, 0, 463, 464, 3, 134, 67, 0, 464, 79, 1, 0, 0, 0, 465, 466, 5, 30, + 0, 0, 466, 467, 5, 101, 0, 0, 467, 468, 3, 138, 69, 0, 468, 81, 1, 0, 0, + 0, 469, 470, 5, 29, 0, 0, 470, 471, 5, 101, 0, 0, 471, 472, 3, 140, 70, + 0, 472, 83, 1, 0, 0, 0, 473, 474, 5, 28, 0, 0, 474, 475, 5, 101, 0, 0, + 475, 476, 3, 142, 71, 0, 476, 85, 1, 0, 0, 0, 477, 478, 3, 92, 46, 0, 478, + 479, 5, 101, 0, 0, 479, 480, 3, 144, 72, 0, 480, 87, 1, 0, 0, 0, 481, 482, + 3, 96, 48, 0, 482, 483, 5, 101, 0, 0, 483, 484, 3, 146, 73, 0, 484, 89, + 1, 0, 0, 0, 485, 486, 5, 128, 0, 0, 486, 487, 5, 101, 0, 0, 487, 488, 5, + 47, 0, 0, 488, 91, 1, 0, 0, 0, 489, 498, 5, 116, 0, 0, 490, 495, 3, 94, + 47, 0, 491, 492, 5, 118, 0, 0, 492, 494, 3, 94, 47, 0, 493, 491, 1, 0, + 0, 0, 494, 497, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, + 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 498, 490, 1, 0, 0, 0, 498, + 499, 1, 0, 0, 0, 499, 500, 1, 0, 0, 0, 500, 501, 5, 117, 0, 0, 501, 93, + 1, 0, 0, 0, 502, 505, 3, 34, 17, 0, 503, 505, 3, 92, 46, 0, 504, 502, 1, + 0, 0, 0, 504, 503, 1, 0, 0, 0, 505, 95, 1, 0, 0, 0, 506, 507, 5, 114, 0, + 0, 507, 508, 3, 98, 49, 0, 508, 509, 5, 126, 0, 0, 509, 510, 3, 100, 50, + 0, 510, 511, 5, 115, 0, 0, 511, 97, 1, 0, 0, 0, 512, 523, 5, 128, 0, 0, + 513, 514, 5, 114, 0, 0, 514, 517, 5, 128, 0, 0, 515, 516, 5, 118, 0, 0, + 516, 518, 5, 128, 0, 0, 517, 515, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, + 517, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 523, + 5, 115, 0, 0, 522, 512, 1, 0, 0, 0, 522, 513, 1, 0, 0, 0, 523, 99, 1, 0, + 0, 0, 524, 525, 3, 166, 83, 0, 525, 526, 5, 114, 0, 0, 526, 527, 3, 16, + 8, 0, 527, 528, 5, 115, 0, 0, 528, 101, 1, 0, 0, 0, 529, 532, 3, 104, 52, + 0, 530, 532, 3, 150, 75, 0, 531, 529, 1, 0, 0, 0, 531, 530, 1, 0, 0, 0, + 532, 103, 1, 0, 0, 0, 533, 553, 3, 106, 53, 0, 534, 553, 3, 112, 56, 0, + 535, 553, 3, 114, 57, 0, 536, 553, 3, 108, 54, 0, 537, 553, 3, 110, 55, + 0, 538, 553, 3, 120, 60, 0, 539, 553, 3, 122, 61, 0, 540, 553, 3, 116, + 58, 0, 541, 553, 3, 118, 59, 0, 542, 553, 3, 124, 62, 0, 543, 545, 5, 71, + 0, 0, 544, 546, 5, 120, 0, 0, 545, 544, 1, 0, 0, 0, 545, 546, 1, 0, 0, + 0, 546, 553, 1, 0, 0, 0, 547, 548, 5, 83, 0, 0, 548, 550, 5, 128, 0, 0, + 549, 551, 5, 120, 0, 0, 550, 549, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, + 553, 1, 0, 0, 0, 552, 533, 1, 0, 0, 0, 552, 534, 1, 0, 0, 0, 552, 535, + 1, 0, 0, 0, 552, 536, 1, 0, 0, 0, 552, 537, 1, 0, 0, 0, 552, 538, 1, 0, + 0, 0, 552, 539, 1, 0, 0, 0, 552, 540, 1, 0, 0, 0, 552, 541, 1, 0, 0, 0, + 552, 542, 1, 0, 0, 0, 552, 543, 1, 0, 0, 0, 552, 547, 1, 0, 0, 0, 553, + 105, 1, 0, 0, 0, 554, 556, 7, 2, 0, 0, 555, 557, 5, 120, 0, 0, 556, 555, + 1, 0, 0, 0, 556, 557, 1, 0, 0, 0, 557, 107, 1, 0, 0, 0, 558, 560, 7, 3, + 0, 0, 559, 561, 5, 120, 0, 0, 560, 559, 1, 0, 0, 0, 560, 561, 1, 0, 0, + 0, 561, 109, 1, 0, 0, 0, 562, 564, 7, 4, 0, 0, 563, 565, 5, 120, 0, 0, + 564, 563, 1, 0, 0, 0, 564, 565, 1, 0, 0, 0, 565, 111, 1, 0, 0, 0, 566, + 568, 7, 5, 0, 0, 567, 569, 5, 120, 0, 0, 568, 567, 1, 0, 0, 0, 568, 569, + 1, 0, 0, 0, 569, 113, 1, 0, 0, 0, 570, 572, 7, 6, 0, 0, 571, 573, 5, 120, + 0, 0, 572, 571, 1, 0, 0, 0, 572, 573, 1, 0, 0, 0, 573, 115, 1, 0, 0, 0, + 574, 576, 5, 66, 0, 0, 575, 577, 5, 120, 0, 0, 576, 575, 1, 0, 0, 0, 576, + 577, 1, 0, 0, 0, 577, 117, 1, 0, 0, 0, 578, 580, 5, 67, 0, 0, 579, 581, + 5, 120, 0, 0, 580, 579, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 119, 1, + 0, 0, 0, 582, 584, 7, 7, 0, 0, 583, 585, 5, 120, 0, 0, 584, 583, 1, 0, + 0, 0, 584, 585, 1, 0, 0, 0, 585, 121, 1, 0, 0, 0, 586, 588, 7, 8, 0, 0, + 587, 589, 5, 120, 0, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, + 123, 1, 0, 0, 0, 590, 592, 7, 9, 0, 0, 591, 593, 5, 120, 0, 0, 592, 591, + 1, 0, 0, 0, 592, 593, 1, 0, 0, 0, 593, 125, 1, 0, 0, 0, 594, 596, 7, 10, + 0, 0, 595, 597, 5, 120, 0, 0, 596, 595, 1, 0, 0, 0, 596, 597, 1, 0, 0, + 0, 597, 602, 1, 0, 0, 0, 598, 599, 5, 40, 0, 0, 599, 600, 3, 152, 76, 0, + 600, 601, 5, 41, 0, 0, 601, 603, 1, 0, 0, 0, 602, 598, 1, 0, 0, 0, 602, + 603, 1, 0, 0, 0, 603, 127, 1, 0, 0, 0, 604, 606, 7, 11, 0, 0, 605, 607, + 5, 120, 0, 0, 606, 605, 1, 0, 0, 0, 606, 607, 1, 0, 0, 0, 607, 612, 1, + 0, 0, 0, 608, 609, 5, 40, 0, 0, 609, 610, 3, 152, 76, 0, 610, 611, 5, 41, + 0, 0, 611, 613, 1, 0, 0, 0, 612, 608, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, + 613, 129, 1, 0, 0, 0, 614, 616, 7, 12, 0, 0, 615, 617, 5, 120, 0, 0, 616, + 615, 1, 0, 0, 0, 616, 617, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, + 5, 40, 0, 0, 619, 620, 3, 152, 76, 0, 620, 621, 5, 41, 0, 0, 621, 131, + 1, 0, 0, 0, 622, 624, 7, 13, 0, 0, 623, 625, 5, 120, 0, 0, 624, 623, 1, + 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 627, 5, 40, 0, + 0, 627, 628, 3, 152, 76, 0, 628, 629, 5, 41, 0, 0, 629, 133, 1, 0, 0, 0, + 630, 632, 7, 14, 0, 0, 631, 633, 5, 120, 0, 0, 632, 631, 1, 0, 0, 0, 632, + 633, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 635, 5, 40, 0, 0, 635, 636, + 3, 152, 76, 0, 636, 637, 5, 41, 0, 0, 637, 135, 1, 0, 0, 0, 638, 640, 7, + 15, 0, 0, 639, 641, 5, 120, 0, 0, 640, 639, 1, 0, 0, 0, 640, 641, 1, 0, + 0, 0, 641, 648, 1, 0, 0, 0, 642, 643, 5, 40, 0, 0, 643, 644, 3, 152, 76, + 0, 644, 645, 5, 118, 0, 0, 645, 646, 3, 152, 76, 0, 646, 647, 5, 41, 0, + 0, 647, 649, 1, 0, 0, 0, 648, 642, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, + 137, 1, 0, 0, 0, 650, 652, 7, 16, 0, 0, 651, 653, 5, 120, 0, 0, 652, 651, + 1, 0, 0, 0, 652, 653, 1, 0, 0, 0, 653, 654, 1, 0, 0, 0, 654, 655, 5, 40, + 0, 0, 655, 656, 3, 152, 76, 0, 656, 657, 5, 41, 0, 0, 657, 139, 1, 0, 0, + 0, 658, 660, 7, 17, 0, 0, 659, 661, 5, 120, 0, 0, 660, 659, 1, 0, 0, 0, + 660, 661, 1, 0, 0, 0, 661, 662, 1, 0, 0, 0, 662, 663, 5, 40, 0, 0, 663, + 664, 3, 152, 76, 0, 664, 665, 5, 41, 0, 0, 665, 141, 1, 0, 0, 0, 666, 668, + 7, 18, 0, 0, 667, 669, 5, 120, 0, 0, 668, 667, 1, 0, 0, 0, 668, 669, 1, + 0, 0, 0, 669, 670, 1, 0, 0, 0, 670, 671, 5, 40, 0, 0, 671, 672, 3, 152, + 76, 0, 672, 673, 5, 41, 0, 0, 673, 143, 1, 0, 0, 0, 674, 676, 5, 81, 0, + 0, 675, 677, 5, 120, 0, 0, 676, 675, 1, 0, 0, 0, 676, 677, 1, 0, 0, 0, + 677, 678, 1, 0, 0, 0, 678, 679, 5, 40, 0, 0, 679, 680, 3, 102, 51, 0, 680, + 681, 5, 41, 0, 0, 681, 145, 1, 0, 0, 0, 682, 684, 5, 54, 0, 0, 683, 685, + 5, 120, 0, 0, 684, 683, 1, 0, 0, 0, 684, 685, 1, 0, 0, 0, 685, 686, 1, + 0, 0, 0, 686, 687, 5, 40, 0, 0, 687, 688, 3, 148, 74, 0, 688, 689, 5, 126, + 0, 0, 689, 690, 3, 102, 51, 0, 690, 691, 5, 41, 0, 0, 691, 147, 1, 0, 0, + 0, 692, 705, 3, 102, 51, 0, 693, 694, 5, 114, 0, 0, 694, 699, 3, 102, 51, + 0, 695, 696, 5, 118, 0, 0, 696, 698, 3, 102, 51, 0, 697, 695, 1, 0, 0, + 0, 698, 701, 1, 0, 0, 0, 699, 697, 1, 0, 0, 0, 699, 700, 1, 0, 0, 0, 700, + 702, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 702, 703, 5, 115, 0, 0, 703, 705, + 1, 0, 0, 0, 704, 692, 1, 0, 0, 0, 704, 693, 1, 0, 0, 0, 705, 149, 1, 0, + 0, 0, 706, 718, 3, 130, 65, 0, 707, 718, 3, 132, 66, 0, 708, 718, 3, 134, + 67, 0, 709, 718, 3, 136, 68, 0, 710, 718, 3, 126, 63, 0, 711, 718, 3, 128, + 64, 0, 712, 718, 3, 138, 69, 0, 713, 718, 3, 140, 70, 0, 714, 718, 3, 142, + 71, 0, 715, 718, 3, 144, 72, 0, 716, 718, 3, 146, 73, 0, 717, 706, 1, 0, + 0, 0, 717, 707, 1, 0, 0, 0, 717, 708, 1, 0, 0, 0, 717, 709, 1, 0, 0, 0, + 717, 710, 1, 0, 0, 0, 717, 711, 1, 0, 0, 0, 717, 712, 1, 0, 0, 0, 717, + 713, 1, 0, 0, 0, 717, 714, 1, 0, 0, 0, 717, 715, 1, 0, 0, 0, 717, 716, + 1, 0, 0, 0, 718, 151, 1, 0, 0, 0, 719, 720, 5, 24, 0, 0, 720, 153, 1, 0, + 0, 0, 721, 722, 7, 19, 0, 0, 722, 155, 1, 0, 0, 0, 723, 724, 3, 158, 79, + 0, 724, 725, 5, 119, 0, 0, 725, 726, 3, 160, 80, 0, 726, 157, 1, 0, 0, + 0, 727, 728, 7, 20, 0, 0, 728, 159, 1, 0, 0, 0, 729, 730, 7, 21, 0, 0, + 730, 161, 1, 0, 0, 0, 731, 736, 3, 156, 78, 0, 732, 733, 5, 118, 0, 0, + 733, 735, 3, 156, 78, 0, 734, 732, 1, 0, 0, 0, 735, 738, 1, 0, 0, 0, 736, + 734, 1, 0, 0, 0, 736, 737, 1, 0, 0, 0, 737, 163, 1, 0, 0, 0, 738, 736, + 1, 0, 0, 0, 739, 740, 7, 22, 0, 0, 740, 165, 1, 0, 0, 0, 741, 744, 3, 164, + 82, 0, 742, 744, 5, 128, 0, 0, 743, 741, 1, 0, 0, 0, 743, 742, 1, 0, 0, + 0, 744, 167, 1, 0, 0, 0, 65, 172, 181, 197, 215, 221, 226, 229, 234, 236, + 243, 248, 273, 280, 289, 297, 306, 316, 329, 332, 346, 349, 364, 371, 379, + 386, 392, 397, 495, 498, 504, 519, 522, 531, 545, 550, 552, 556, 560, 564, + 568, 572, 576, 580, 584, 588, 592, 596, 602, 606, 612, 616, 624, 632, 640, + 648, 652, 660, 668, 676, 684, 699, 704, 717, 736, 743, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -515,88 +518,89 @@ const ( FuncTestCaseParserIntervalCompoundLiteral = 44 FuncTestCaseParserNullLiteral = 45 FuncTestCaseParserStringLiteral = 46 - FuncTestCaseParserColumnName = 47 - FuncTestCaseParserLineComment = 48 - FuncTestCaseParserBlockComment = 49 - FuncTestCaseParserIf = 50 - FuncTestCaseParserThen = 51 - FuncTestCaseParserElse = 52 - FuncTestCaseParserFunc = 53 - FuncTestCaseParserBoolean = 54 - FuncTestCaseParserI8 = 55 - FuncTestCaseParserI16 = 56 - FuncTestCaseParserI32 = 57 - FuncTestCaseParserI64 = 58 - FuncTestCaseParserFP32 = 59 - FuncTestCaseParserFP64 = 60 - FuncTestCaseParserString_ = 61 - FuncTestCaseParserBinary = 62 - FuncTestCaseParserTimestamp = 63 - FuncTestCaseParserTimestamp_TZ = 64 - FuncTestCaseParserDate = 65 - FuncTestCaseParserTime = 66 - FuncTestCaseParserInterval_Year = 67 - FuncTestCaseParserInterval_Day = 68 - FuncTestCaseParserInterval_Compound = 69 - FuncTestCaseParserUUID = 70 - FuncTestCaseParserDecimal = 71 - FuncTestCaseParserPrecision_Time = 72 - FuncTestCaseParserPrecision_Timestamp = 73 - FuncTestCaseParserPrecision_Timestamp_TZ = 74 - FuncTestCaseParserFixedChar = 75 - FuncTestCaseParserVarChar = 76 - FuncTestCaseParserFixedBinary = 77 - FuncTestCaseParserStruct = 78 - FuncTestCaseParserNStruct = 79 - FuncTestCaseParserList = 80 - FuncTestCaseParserMap = 81 - FuncTestCaseParserUserDefined = 82 - FuncTestCaseParserBool = 83 - FuncTestCaseParserStr = 84 - FuncTestCaseParserVBin = 85 - FuncTestCaseParserTs = 86 - FuncTestCaseParserTsTZ = 87 - FuncTestCaseParserIYear = 88 - FuncTestCaseParserIDay = 89 - FuncTestCaseParserICompound = 90 - FuncTestCaseParserDec = 91 - FuncTestCaseParserPT = 92 - FuncTestCaseParserPTs = 93 - FuncTestCaseParserPTsTZ = 94 - FuncTestCaseParserFChar = 95 - FuncTestCaseParserVChar = 96 - FuncTestCaseParserFBin = 97 - FuncTestCaseParserAny = 98 - FuncTestCaseParserAnyVar = 99 - FuncTestCaseParserDoubleColon = 100 - FuncTestCaseParserPlus = 101 - FuncTestCaseParserMinus = 102 - FuncTestCaseParserAsterisk = 103 - FuncTestCaseParserForwardSlash = 104 - FuncTestCaseParserPercent = 105 - FuncTestCaseParserEq = 106 - FuncTestCaseParserNe = 107 - FuncTestCaseParserGte = 108 - FuncTestCaseParserLte = 109 - FuncTestCaseParserGt = 110 - FuncTestCaseParserLt = 111 - FuncTestCaseParserBang = 112 - FuncTestCaseParserOParen = 113 - FuncTestCaseParserCParen = 114 - FuncTestCaseParserOBracket = 115 - FuncTestCaseParserCBracket = 116 - FuncTestCaseParserComma = 117 - FuncTestCaseParserColon = 118 - FuncTestCaseParserQMark = 119 - FuncTestCaseParserHash = 120 - FuncTestCaseParserDot = 121 - FuncTestCaseParserAnd = 122 - FuncTestCaseParserOr = 123 - FuncTestCaseParserAssign = 124 - FuncTestCaseParserArrow = 125 - FuncTestCaseParserNumber = 126 - FuncTestCaseParserIdentifier = 127 - FuncTestCaseParserNewline = 128 + FuncTestCaseParserEnumType = 47 + FuncTestCaseParserColumnName = 48 + FuncTestCaseParserLineComment = 49 + FuncTestCaseParserBlockComment = 50 + FuncTestCaseParserIf = 51 + FuncTestCaseParserThen = 52 + FuncTestCaseParserElse = 53 + FuncTestCaseParserFunc = 54 + FuncTestCaseParserBoolean = 55 + FuncTestCaseParserI8 = 56 + FuncTestCaseParserI16 = 57 + FuncTestCaseParserI32 = 58 + FuncTestCaseParserI64 = 59 + FuncTestCaseParserFP32 = 60 + FuncTestCaseParserFP64 = 61 + FuncTestCaseParserString_ = 62 + FuncTestCaseParserBinary = 63 + FuncTestCaseParserTimestamp = 64 + FuncTestCaseParserTimestamp_TZ = 65 + FuncTestCaseParserDate = 66 + FuncTestCaseParserTime = 67 + FuncTestCaseParserInterval_Year = 68 + FuncTestCaseParserInterval_Day = 69 + FuncTestCaseParserInterval_Compound = 70 + FuncTestCaseParserUUID = 71 + FuncTestCaseParserDecimal = 72 + FuncTestCaseParserPrecision_Time = 73 + FuncTestCaseParserPrecision_Timestamp = 74 + FuncTestCaseParserPrecision_Timestamp_TZ = 75 + FuncTestCaseParserFixedChar = 76 + FuncTestCaseParserVarChar = 77 + FuncTestCaseParserFixedBinary = 78 + FuncTestCaseParserStruct = 79 + FuncTestCaseParserNStruct = 80 + FuncTestCaseParserList = 81 + FuncTestCaseParserMap = 82 + FuncTestCaseParserUserDefined = 83 + FuncTestCaseParserBool = 84 + FuncTestCaseParserStr = 85 + FuncTestCaseParserVBin = 86 + FuncTestCaseParserTs = 87 + FuncTestCaseParserTsTZ = 88 + FuncTestCaseParserIYear = 89 + FuncTestCaseParserIDay = 90 + FuncTestCaseParserICompound = 91 + FuncTestCaseParserDec = 92 + FuncTestCaseParserPT = 93 + FuncTestCaseParserPTs = 94 + FuncTestCaseParserPTsTZ = 95 + FuncTestCaseParserFChar = 96 + FuncTestCaseParserVChar = 97 + FuncTestCaseParserFBin = 98 + FuncTestCaseParserAny = 99 + FuncTestCaseParserAnyVar = 100 + FuncTestCaseParserDoubleColon = 101 + FuncTestCaseParserPlus = 102 + FuncTestCaseParserMinus = 103 + FuncTestCaseParserAsterisk = 104 + FuncTestCaseParserForwardSlash = 105 + FuncTestCaseParserPercent = 106 + FuncTestCaseParserEq = 107 + FuncTestCaseParserNe = 108 + FuncTestCaseParserGte = 109 + FuncTestCaseParserLte = 110 + FuncTestCaseParserGt = 111 + FuncTestCaseParserLt = 112 + FuncTestCaseParserBang = 113 + FuncTestCaseParserOParen = 114 + FuncTestCaseParserCParen = 115 + FuncTestCaseParserOBracket = 116 + FuncTestCaseParserCBracket = 117 + FuncTestCaseParserComma = 118 + FuncTestCaseParserColon = 119 + FuncTestCaseParserQMark = 120 + FuncTestCaseParserHash = 121 + FuncTestCaseParserDot = 122 + FuncTestCaseParserAnd = 123 + FuncTestCaseParserOr = 124 + FuncTestCaseParserAssign = 125 + FuncTestCaseParserArrow = 126 + FuncTestCaseParserNumber = 127 + FuncTestCaseParserIdentifier = 128 + FuncTestCaseParserNewline = 129 ) // FuncTestCaseParser rules. @@ -646,44 +650,45 @@ const ( FuncTestCaseParserRULE_precisionTimestampTZArg = 42 FuncTestCaseParserRULE_listArg = 43 FuncTestCaseParserRULE_lambdaArg = 44 - FuncTestCaseParserRULE_literalList = 45 - FuncTestCaseParserRULE_listElement = 46 - FuncTestCaseParserRULE_literalLambda = 47 - FuncTestCaseParserRULE_lambdaParameters = 48 - FuncTestCaseParserRULE_lambdaBody = 49 - FuncTestCaseParserRULE_dataType = 50 - FuncTestCaseParserRULE_scalarType = 51 - FuncTestCaseParserRULE_booleanType = 52 - FuncTestCaseParserRULE_stringType = 53 - FuncTestCaseParserRULE_binaryType = 54 - FuncTestCaseParserRULE_intType = 55 - FuncTestCaseParserRULE_floatType = 56 - FuncTestCaseParserRULE_dateType = 57 - FuncTestCaseParserRULE_timeType = 58 - FuncTestCaseParserRULE_timestampType = 59 - FuncTestCaseParserRULE_timestampTZType = 60 - FuncTestCaseParserRULE_intervalYearType = 61 - FuncTestCaseParserRULE_intervalDayType = 62 - FuncTestCaseParserRULE_intervalCompoundType = 63 - FuncTestCaseParserRULE_fixedCharType = 64 - FuncTestCaseParserRULE_varCharType = 65 - FuncTestCaseParserRULE_fixedBinaryType = 66 - FuncTestCaseParserRULE_decimalType = 67 - FuncTestCaseParserRULE_precisionTimeType = 68 - FuncTestCaseParserRULE_precisionTimestampType = 69 - FuncTestCaseParserRULE_precisionTimestampTZType = 70 - FuncTestCaseParserRULE_listType = 71 - FuncTestCaseParserRULE_funcType = 72 - FuncTestCaseParserRULE_funcParameters = 73 - FuncTestCaseParserRULE_parameterizedType = 74 - FuncTestCaseParserRULE_numericParameter = 75 - FuncTestCaseParserRULE_substraitError = 76 - FuncTestCaseParserRULE_funcOption = 77 - FuncTestCaseParserRULE_optionName = 78 - FuncTestCaseParserRULE_optionValue = 79 - FuncTestCaseParserRULE_funcOptions = 80 - FuncTestCaseParserRULE_nonReserved = 81 - FuncTestCaseParserRULE_identifier = 82 + FuncTestCaseParserRULE_enumArg = 45 + FuncTestCaseParserRULE_literalList = 46 + FuncTestCaseParserRULE_listElement = 47 + FuncTestCaseParserRULE_literalLambda = 48 + FuncTestCaseParserRULE_lambdaParameters = 49 + FuncTestCaseParserRULE_lambdaBody = 50 + FuncTestCaseParserRULE_dataType = 51 + FuncTestCaseParserRULE_scalarType = 52 + FuncTestCaseParserRULE_booleanType = 53 + FuncTestCaseParserRULE_stringType = 54 + FuncTestCaseParserRULE_binaryType = 55 + FuncTestCaseParserRULE_intType = 56 + FuncTestCaseParserRULE_floatType = 57 + FuncTestCaseParserRULE_dateType = 58 + FuncTestCaseParserRULE_timeType = 59 + FuncTestCaseParserRULE_timestampType = 60 + FuncTestCaseParserRULE_timestampTZType = 61 + FuncTestCaseParserRULE_intervalYearType = 62 + FuncTestCaseParserRULE_intervalDayType = 63 + FuncTestCaseParserRULE_intervalCompoundType = 64 + FuncTestCaseParserRULE_fixedCharType = 65 + FuncTestCaseParserRULE_varCharType = 66 + FuncTestCaseParserRULE_fixedBinaryType = 67 + FuncTestCaseParserRULE_decimalType = 68 + FuncTestCaseParserRULE_precisionTimeType = 69 + FuncTestCaseParserRULE_precisionTimestampType = 70 + FuncTestCaseParserRULE_precisionTimestampTZType = 71 + FuncTestCaseParserRULE_listType = 72 + FuncTestCaseParserRULE_funcType = 73 + FuncTestCaseParserRULE_funcParameters = 74 + FuncTestCaseParserRULE_parameterizedType = 75 + FuncTestCaseParserRULE_numericParameter = 76 + FuncTestCaseParserRULE_substraitError = 77 + FuncTestCaseParserRULE_funcOption = 78 + FuncTestCaseParserRULE_optionName = 79 + FuncTestCaseParserRULE_optionValue = 80 + FuncTestCaseParserRULE_funcOptions = 81 + FuncTestCaseParserRULE_nonReserved = 82 + FuncTestCaseParserRULE_identifier = 83 ) // IDocContext is an interface to support dynamic dispatch. @@ -821,23 +826,23 @@ func (p *FuncTestCaseParser) Doc() (localctx IDocContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(166) + p.SetState(168) p.Header() } - p.SetState(168) + p.SetState(170) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - for ok := true; ok; ok = ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&8389376) != 0) || ((int64((_la-113)) & ^0x3f) == 0 && ((int64(1)<<(_la-113))&17921) != 0) { + for ok := true; ok; ok = ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&8389376) != 0) || ((int64((_la-114)) & ^0x3f) == 0 && ((int64(1)<<(_la-114))&17921) != 0) { { - p.SetState(167) + p.SetState(169) p.TestGroup() } - p.SetState(170) + p.SetState(172) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -845,7 +850,7 @@ func (p *FuncTestCaseParser) Doc() (localctx IDocContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(172) + p.SetState(174) p.Match(FuncTestCaseParserEOF) if p.HasError() { // Recognition error - abort rule @@ -1013,14 +1018,14 @@ func (p *FuncTestCaseParser) Header() (localctx IHeaderContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(174) + p.SetState(176) p.Version() } { - p.SetState(175) + p.SetState(177) p.Include() } - p.SetState(179) + p.SetState(181) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1029,11 +1034,11 @@ func (p *FuncTestCaseParser) Header() (localctx IHeaderContext) { for _la == FuncTestCaseParserTripleHash { { - p.SetState(176) + p.SetState(178) p.Dependency() } - p.SetState(181) + p.SetState(183) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1149,7 +1154,7 @@ func (p *FuncTestCaseParser) Version() (localctx IVersionContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(182) + p.SetState(184) p.Match(FuncTestCaseParserTripleHash) if p.HasError() { // Recognition error - abort rule @@ -1157,7 +1162,7 @@ func (p *FuncTestCaseParser) Version() (localctx IVersionContext) { } } { - p.SetState(183) + p.SetState(185) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserSubstraitScalarTest || _la == FuncTestCaseParserSubstraitAggregateTest) { @@ -1168,7 +1173,7 @@ func (p *FuncTestCaseParser) Version() (localctx IVersionContext) { } } { - p.SetState(184) + p.SetState(186) p.Match(FuncTestCaseParserColon) if p.HasError() { // Recognition error - abort rule @@ -1176,7 +1181,7 @@ func (p *FuncTestCaseParser) Version() (localctx IVersionContext) { } } { - p.SetState(185) + p.SetState(187) p.Match(FuncTestCaseParserFormatVersion) if p.HasError() { // Recognition error - abort rule @@ -1302,7 +1307,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(187) + p.SetState(189) p.Match(FuncTestCaseParserTripleHash) if p.HasError() { // Recognition error - abort rule @@ -1310,7 +1315,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { } } { - p.SetState(188) + p.SetState(190) p.Match(FuncTestCaseParserSubstraitInclude) if p.HasError() { // Recognition error - abort rule @@ -1318,7 +1323,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { } } { - p.SetState(189) + p.SetState(191) p.Match(FuncTestCaseParserColon) if p.HasError() { // Recognition error - abort rule @@ -1326,14 +1331,14 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { } } { - p.SetState(190) + p.SetState(192) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(195) + p.SetState(197) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1342,7 +1347,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { for _la == FuncTestCaseParserComma { { - p.SetState(191) + p.SetState(193) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -1350,7 +1355,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { } } { - p.SetState(192) + p.SetState(194) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -1358,7 +1363,7 @@ func (p *FuncTestCaseParser) Include() (localctx IIncludeContext) { } } - p.SetState(197) + p.SetState(199) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1467,7 +1472,7 @@ func (p *FuncTestCaseParser) Dependency() (localctx IDependencyContext) { p.EnterRule(localctx, 8, FuncTestCaseParserRULE_dependency) p.EnterOuterAlt(localctx, 1) { - p.SetState(198) + p.SetState(200) p.Match(FuncTestCaseParserTripleHash) if p.HasError() { // Recognition error - abort rule @@ -1475,7 +1480,7 @@ func (p *FuncTestCaseParser) Dependency() (localctx IDependencyContext) { } } { - p.SetState(199) + p.SetState(201) p.Match(FuncTestCaseParserSubstraitDependency) if p.HasError() { // Recognition error - abort rule @@ -1483,7 +1488,7 @@ func (p *FuncTestCaseParser) Dependency() (localctx IDependencyContext) { } } { - p.SetState(200) + p.SetState(202) p.Match(FuncTestCaseParserColon) if p.HasError() { // Recognition error - abort rule @@ -1491,7 +1496,7 @@ func (p *FuncTestCaseParser) Dependency() (localctx IDependencyContext) { } } { - p.SetState(201) + p.SetState(203) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -1585,7 +1590,7 @@ func (p *FuncTestCaseParser) TestGroupDescription() (localctx ITestGroupDescript p.EnterRule(localctx, 10, FuncTestCaseParserRULE_testGroupDescription) p.EnterOuterAlt(localctx, 1) { - p.SetState(203) + p.SetState(205) p.Match(FuncTestCaseParserDescriptionLine) if p.HasError() { // Recognition error - abort rule @@ -1780,14 +1785,14 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(205) + p.SetState(207) var _x = p.Identifier() localctx.(*TestCaseContext).functionName = _x } { - p.SetState(206) + p.SetState(208) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -1795,18 +1800,18 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { } } { - p.SetState(207) + p.SetState(209) p.Arguments() } { - p.SetState(208) + p.SetState(210) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(213) + p.SetState(215) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1815,7 +1820,7 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { if _la == FuncTestCaseParserOBracket { { - p.SetState(209) + p.SetState(211) p.Match(FuncTestCaseParserOBracket) if p.HasError() { // Recognition error - abort rule @@ -1823,11 +1828,11 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { } } { - p.SetState(210) + p.SetState(212) p.FuncOptions() } { - p.SetState(211) + p.SetState(213) p.Match(FuncTestCaseParserCBracket) if p.HasError() { // Recognition error - abort rule @@ -1837,7 +1842,7 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { } { - p.SetState(215) + p.SetState(217) p.Match(FuncTestCaseParserEq) if p.HasError() { // Recognition error - abort rule @@ -1845,7 +1850,7 @@ func (p *FuncTestCaseParser) TestCase() (localctx ITestCaseContext) { } } { - p.SetState(216) + p.SetState(218) p.Result() } @@ -2093,7 +2098,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { var _alt int - p.SetState(234) + p.SetState(236) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2103,7 +2108,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { case 1: localctx = NewScalarFuncTestGroupContext(p, localctx) p.EnterOuterAlt(localctx, 1) - p.SetState(219) + p.SetState(221) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2112,12 +2117,12 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { if _la == FuncTestCaseParserDescriptionLine { { - p.SetState(218) + p.SetState(220) p.TestGroupDescription() } } - p.SetState(222) + p.SetState(224) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2127,7 +2132,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { switch _alt { case 1: { - p.SetState(221) + p.SetState(223) p.TestCase() } @@ -2136,7 +2141,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { goto errorExit } - p.SetState(224) + p.SetState(226) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) if p.HasError() { @@ -2147,7 +2152,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { case 2: localctx = NewAggregateFuncTestGroupContext(p, localctx) p.EnterOuterAlt(localctx, 2) - p.SetState(227) + p.SetState(229) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2156,12 +2161,12 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { if _la == FuncTestCaseParserDescriptionLine { { - p.SetState(226) + p.SetState(228) p.TestGroupDescription() } } - p.SetState(230) + p.SetState(232) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2171,7 +2176,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { switch _alt { case 1: { - p.SetState(229) + p.SetState(231) p.AggFuncTestCase() } @@ -2180,7 +2185,7 @@ func (p *FuncTestCaseParser) TestGroup() (localctx ITestGroupContext) { goto errorExit } - p.SetState(232) + p.SetState(234) p.GetErrorHandler().Sync(p) _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 7, p.GetParserRuleContext()) if p.HasError() { @@ -2328,10 +2333,10 @@ func (p *FuncTestCaseParser) Arguments() (localctx IArgumentsContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(236) + p.SetState(238) p.Argument() } - p.SetState(241) + p.SetState(243) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2340,7 +2345,7 @@ func (p *FuncTestCaseParser) Arguments() (localctx IArgumentsContext) { for _la == FuncTestCaseParserComma { { - p.SetState(237) + p.SetState(239) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -2348,11 +2353,11 @@ func (p *FuncTestCaseParser) Arguments() (localctx IArgumentsContext) { } } { - p.SetState(238) + p.SetState(240) p.Argument() } - p.SetState(243) + p.SetState(245) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2473,7 +2478,7 @@ func (s *ResultContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) Result() (localctx IResultContext) { localctx = NewResultContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 18, FuncTestCaseParserRULE_result) - p.SetState(246) + p.SetState(248) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2483,14 +2488,14 @@ func (p *FuncTestCaseParser) Result() (localctx IResultContext) { case FuncTestCaseParserNaN, FuncTestCaseParserIntegerLiteral, FuncTestCaseParserDecimalLiteral, FuncTestCaseParserFloatLiteral, FuncTestCaseParserBooleanLiteral, FuncTestCaseParserTimestampTzLiteral, FuncTestCaseParserTimestampLiteral, FuncTestCaseParserTimeLiteral, FuncTestCaseParserDateLiteral, FuncTestCaseParserIntervalYearLiteral, FuncTestCaseParserIntervalDayLiteral, FuncTestCaseParserIntervalCompoundLiteral, FuncTestCaseParserNullLiteral, FuncTestCaseParserStringLiteral, FuncTestCaseParserOParen, FuncTestCaseParserOBracket, FuncTestCaseParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(244) + p.SetState(246) p.Argument() } case FuncTestCaseParserErrorResult, FuncTestCaseParserUndefineResult: p.EnterOuterAlt(localctx, 2) { - p.SetState(245) + p.SetState(247) p.SubstraitError() } @@ -2521,6 +2526,7 @@ type IArgumentContext interface { // Getter signatures NullArg() INullArgContext + EnumArg() IEnumArgContext IntArg() IIntArgContext FloatArg() IFloatArgContext BooleanArg() IBooleanArgContext @@ -2595,6 +2601,22 @@ func (s *ArgumentContext) NullArg() INullArgContext { return t.(INullArgContext) } +func (s *ArgumentContext) EnumArg() IEnumArgContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IEnumArgContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IEnumArgContext) +} + func (s *ArgumentContext) IntArg() IIntArgContext { var t antlr.RuleContext for _, ctx := range s.GetChildren() { @@ -2940,7 +2962,7 @@ func (s *ArgumentContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) Argument() (localctx IArgumentContext) { localctx = NewArgumentContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 20, FuncTestCaseParserRULE_argument) - p.SetState(270) + p.SetState(273) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2950,154 +2972,161 @@ func (p *FuncTestCaseParser) Argument() (localctx IArgumentContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(248) + p.SetState(250) p.NullArg() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(249) - p.IntArg() + p.SetState(251) + p.EnumArg() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(250) - p.FloatArg() + p.SetState(252) + p.IntArg() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(251) - p.BooleanArg() + p.SetState(253) + p.FloatArg() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(252) - p.StringArg() + p.SetState(254) + p.BooleanArg() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(253) - p.DecimalArg() + p.SetState(255) + p.StringArg() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(254) - p.DateArg() + p.SetState(256) + p.DecimalArg() } case 8: p.EnterOuterAlt(localctx, 8) { - p.SetState(255) - p.TimeArg() + p.SetState(257) + p.DateArg() } case 9: p.EnterOuterAlt(localctx, 9) { - p.SetState(256) - p.TimestampArg() + p.SetState(258) + p.TimeArg() } case 10: p.EnterOuterAlt(localctx, 10) { - p.SetState(257) - p.TimestampTzArg() + p.SetState(259) + p.TimestampArg() } case 11: p.EnterOuterAlt(localctx, 11) { - p.SetState(258) - p.IntervalYearArg() + p.SetState(260) + p.TimestampTzArg() } case 12: p.EnterOuterAlt(localctx, 12) { - p.SetState(259) - p.IntervalDayArg() + p.SetState(261) + p.IntervalYearArg() } case 13: p.EnterOuterAlt(localctx, 13) { - p.SetState(260) - p.IntervalCompoundArg() + p.SetState(262) + p.IntervalDayArg() } case 14: p.EnterOuterAlt(localctx, 14) { - p.SetState(261) - p.FixedCharArg() + p.SetState(263) + p.IntervalCompoundArg() } case 15: p.EnterOuterAlt(localctx, 15) { - p.SetState(262) - p.VarCharArg() + p.SetState(264) + p.FixedCharArg() } case 16: p.EnterOuterAlt(localctx, 16) { - p.SetState(263) - p.FixedBinaryArg() + p.SetState(265) + p.VarCharArg() } case 17: p.EnterOuterAlt(localctx, 17) { - p.SetState(264) - p.PrecisionTimeArg() + p.SetState(266) + p.FixedBinaryArg() } case 18: p.EnterOuterAlt(localctx, 18) { - p.SetState(265) - p.PrecisionTimestampArg() + p.SetState(267) + p.PrecisionTimeArg() } case 19: p.EnterOuterAlt(localctx, 19) { - p.SetState(266) - p.PrecisionTimestampTZArg() + p.SetState(268) + p.PrecisionTimestampArg() } case 20: p.EnterOuterAlt(localctx, 20) { - p.SetState(267) - p.ListArg() + p.SetState(269) + p.PrecisionTimestampTZArg() } case 21: p.EnterOuterAlt(localctx, 21) { - p.SetState(268) - p.LambdaArg() + p.SetState(270) + p.ListArg() } case 22: p.EnterOuterAlt(localctx, 22) { - p.SetState(269) + p.SetState(271) + p.LambdaArg() + } + + case 23: + p.EnterOuterAlt(localctx, 23) + { + p.SetState(272) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -3258,10 +3287,10 @@ func (p *FuncTestCaseParser) AggFuncTestCase() (localctx IAggFuncTestCaseContext p.EnterOuterAlt(localctx, 1) { - p.SetState(272) + p.SetState(275) p.AggFuncCall() } - p.SetState(277) + p.SetState(280) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3270,7 +3299,7 @@ func (p *FuncTestCaseParser) AggFuncTestCase() (localctx IAggFuncTestCaseContext if _la == FuncTestCaseParserOBracket { { - p.SetState(273) + p.SetState(276) p.Match(FuncTestCaseParserOBracket) if p.HasError() { // Recognition error - abort rule @@ -3278,11 +3307,11 @@ func (p *FuncTestCaseParser) AggFuncTestCase() (localctx IAggFuncTestCaseContext } } { - p.SetState(274) + p.SetState(277) p.FuncOptions() } { - p.SetState(275) + p.SetState(278) p.Match(FuncTestCaseParserCBracket) if p.HasError() { // Recognition error - abort rule @@ -3292,7 +3321,7 @@ func (p *FuncTestCaseParser) AggFuncTestCase() (localctx IAggFuncTestCaseContext } { - p.SetState(279) + p.SetState(282) p.Match(FuncTestCaseParserEq) if p.HasError() { // Recognition error - abort rule @@ -3300,7 +3329,7 @@ func (p *FuncTestCaseParser) AggFuncTestCase() (localctx IAggFuncTestCaseContext } } { - p.SetState(280) + p.SetState(283) p.Result() } @@ -3627,7 +3656,7 @@ func (p *FuncTestCaseParser) AggFuncCall() (localctx IAggFuncCallContext) { p.EnterRule(localctx, 24, FuncTestCaseParserRULE_aggFuncCall) var _la int - p.SetState(303) + p.SetState(306) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3638,40 +3667,40 @@ func (p *FuncTestCaseParser) AggFuncCall() (localctx IAggFuncCallContext) { localctx = NewMultiArgAggregateFuncCallContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(282) + p.SetState(285) p.TableData() } { - p.SetState(283) + p.SetState(286) var _x = p.Identifier() localctx.(*MultiArgAggregateFuncCallContext).funcName = _x } { - p.SetState(284) + p.SetState(287) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(286) + p.SetState(289) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&136343720296448) != 0) || ((int64((_la-113)) & ^0x3f) == 0 && ((int64(1)<<(_la-113))&16389) != 0) { + if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&136343720296448) != 0) || ((int64((_la-114)) & ^0x3f) == 0 && ((int64(1)<<(_la-114))&16389) != 0) { { - p.SetState(285) + p.SetState(288) p.QualifiedAggregateFuncArgs() } } { - p.SetState(288) + p.SetState(291) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -3683,40 +3712,40 @@ func (p *FuncTestCaseParser) AggFuncCall() (localctx IAggFuncCallContext) { localctx = NewCompactAggregateFuncCallContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(290) + p.SetState(293) p.TableRows() } { - p.SetState(291) + p.SetState(294) var _x = p.Identifier() localctx.(*CompactAggregateFuncCallContext).functName = _x } { - p.SetState(292) + p.SetState(295) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(294) + p.SetState(297) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&277081208651776) != 0) || ((int64((_la-113)) & ^0x3f) == 0 && ((int64(1)<<(_la-113))&16389) != 0) { + if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&417818697007104) != 0) || ((int64((_la-114)) & ^0x3f) == 0 && ((int64(1)<<(_la-114))&16389) != 0) { { - p.SetState(293) + p.SetState(296) p.AggregateFuncArgs() } } { - p.SetState(296) + p.SetState(299) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -3728,14 +3757,14 @@ func (p *FuncTestCaseParser) AggFuncCall() (localctx IAggFuncCallContext) { localctx = NewSingleArgAggregateFuncCallContext(p, localctx) p.EnterOuterAlt(localctx, 3) { - p.SetState(298) + p.SetState(301) var _x = p.Identifier() localctx.(*SingleArgAggregateFuncCallContext).functName = _x } { - p.SetState(299) + p.SetState(302) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -3743,11 +3772,11 @@ func (p *FuncTestCaseParser) AggFuncCall() (localctx IAggFuncCallContext) { } } { - p.SetState(300) + p.SetState(303) p.DataColumn() } { - p.SetState(301) + p.SetState(304) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -3949,7 +3978,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(305) + p.SetState(308) p.Match(FuncTestCaseParserDefine) if p.HasError() { // Recognition error - abort rule @@ -3957,7 +3986,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(306) + p.SetState(309) var _m = p.Match(FuncTestCaseParserIdentifier) @@ -3968,7 +3997,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(307) + p.SetState(310) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -3976,10 +4005,10 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(308) + p.SetState(311) p.DataType() } - p.SetState(313) + p.SetState(316) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3988,7 +4017,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { for _la == FuncTestCaseParserComma { { - p.SetState(309) + p.SetState(312) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -3996,11 +4025,11 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(310) + p.SetState(313) p.DataType() } - p.SetState(315) + p.SetState(318) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4008,7 +4037,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { _la = p.GetTokenStream().LA(1) } { - p.SetState(316) + p.SetState(319) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -4016,7 +4045,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(317) + p.SetState(320) p.Match(FuncTestCaseParserEq) if p.HasError() { // Recognition error - abort rule @@ -4024,7 +4053,7 @@ func (p *FuncTestCaseParser) TableData() (localctx ITableDataContext) { } } { - p.SetState(318) + p.SetState(321) p.TableRows() } @@ -4174,14 +4203,14 @@ func (p *FuncTestCaseParser) TableRows() (localctx ITableRowsContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(320) + p.SetState(323) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(329) + p.SetState(332) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4190,10 +4219,10 @@ func (p *FuncTestCaseParser) TableRows() (localctx ITableRowsContext) { if _la == FuncTestCaseParserOParen { { - p.SetState(321) + p.SetState(324) p.ColumnValues() } - p.SetState(326) + p.SetState(329) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4202,7 +4231,7 @@ func (p *FuncTestCaseParser) TableRows() (localctx ITableRowsContext) { for _la == FuncTestCaseParserComma { { - p.SetState(322) + p.SetState(325) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -4210,11 +4239,11 @@ func (p *FuncTestCaseParser) TableRows() (localctx ITableRowsContext) { } } { - p.SetState(323) + p.SetState(326) p.ColumnValues() } - p.SetState(328) + p.SetState(331) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4224,7 +4253,7 @@ func (p *FuncTestCaseParser) TableRows() (localctx ITableRowsContext) { } { - p.SetState(331) + p.SetState(334) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -4352,11 +4381,11 @@ func (p *FuncTestCaseParser) DataColumn() (localctx IDataColumnContext) { p.EnterRule(localctx, 30, FuncTestCaseParserRULE_dataColumn) p.EnterOuterAlt(localctx, 1) { - p.SetState(333) + p.SetState(336) p.ColumnValues() } { - p.SetState(334) + p.SetState(337) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -4364,7 +4393,7 @@ func (p *FuncTestCaseParser) DataColumn() (localctx IDataColumnContext) { } } { - p.SetState(335) + p.SetState(338) p.DataType() } @@ -4514,14 +4543,14 @@ func (p *FuncTestCaseParser) ColumnValues() (localctx IColumnValuesContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(337) + p.SetState(340) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(346) + p.SetState(349) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4530,10 +4559,10 @@ func (p *FuncTestCaseParser) ColumnValues() (localctx IColumnValuesContext) { if (int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&136343720296448) != 0 { { - p.SetState(338) + p.SetState(341) p.Literal() } - p.SetState(343) + p.SetState(346) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4542,7 +4571,7 @@ func (p *FuncTestCaseParser) ColumnValues() (localctx IColumnValuesContext) { for _la == FuncTestCaseParserComma { { - p.SetState(339) + p.SetState(342) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -4550,11 +4579,11 @@ func (p *FuncTestCaseParser) ColumnValues() (localctx IColumnValuesContext) { } } { - p.SetState(340) + p.SetState(343) p.Literal() } - p.SetState(345) + p.SetState(348) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4564,7 +4593,7 @@ func (p *FuncTestCaseParser) ColumnValues() (localctx IColumnValuesContext) { } { - p.SetState(348) + p.SetState(351) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -4718,7 +4747,7 @@ func (s *LiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { localctx = NewLiteralContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 34, FuncTestCaseParserRULE_literal) - p.SetState(361) + p.SetState(364) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4728,7 +4757,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserNullLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(350) + p.SetState(353) p.Match(FuncTestCaseParserNullLiteral) if p.HasError() { // Recognition error - abort rule @@ -4739,14 +4768,14 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserNaN, FuncTestCaseParserIntegerLiteral, FuncTestCaseParserDecimalLiteral, FuncTestCaseParserFloatLiteral: p.EnterOuterAlt(localctx, 2) { - p.SetState(351) + p.SetState(354) p.NumericLiteral() } case FuncTestCaseParserBooleanLiteral: p.EnterOuterAlt(localctx, 3) { - p.SetState(352) + p.SetState(355) p.Match(FuncTestCaseParserBooleanLiteral) if p.HasError() { // Recognition error - abort rule @@ -4757,7 +4786,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserStringLiteral: p.EnterOuterAlt(localctx, 4) { - p.SetState(353) + p.SetState(356) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -4768,7 +4797,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserDateLiteral: p.EnterOuterAlt(localctx, 5) { - p.SetState(354) + p.SetState(357) p.Match(FuncTestCaseParserDateLiteral) if p.HasError() { // Recognition error - abort rule @@ -4779,7 +4808,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserTimeLiteral: p.EnterOuterAlt(localctx, 6) { - p.SetState(355) + p.SetState(358) p.Match(FuncTestCaseParserTimeLiteral) if p.HasError() { // Recognition error - abort rule @@ -4790,7 +4819,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserTimestampLiteral: p.EnterOuterAlt(localctx, 7) { - p.SetState(356) + p.SetState(359) p.Match(FuncTestCaseParserTimestampLiteral) if p.HasError() { // Recognition error - abort rule @@ -4801,7 +4830,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserTimestampTzLiteral: p.EnterOuterAlt(localctx, 8) { - p.SetState(357) + p.SetState(360) p.Match(FuncTestCaseParserTimestampTzLiteral) if p.HasError() { // Recognition error - abort rule @@ -4812,7 +4841,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserIntervalYearLiteral: p.EnterOuterAlt(localctx, 9) { - p.SetState(358) + p.SetState(361) p.Match(FuncTestCaseParserIntervalYearLiteral) if p.HasError() { // Recognition error - abort rule @@ -4823,7 +4852,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserIntervalDayLiteral: p.EnterOuterAlt(localctx, 10) { - p.SetState(359) + p.SetState(362) p.Match(FuncTestCaseParserIntervalDayLiteral) if p.HasError() { // Recognition error - abort rule @@ -4834,7 +4863,7 @@ func (p *FuncTestCaseParser) Literal() (localctx ILiteralContext) { case FuncTestCaseParserIntervalCompoundLiteral: p.EnterOuterAlt(localctx, 11) { - p.SetState(360) + p.SetState(363) p.Match(FuncTestCaseParserIntervalCompoundLiteral) if p.HasError() { // Recognition error - abort rule @@ -4983,10 +5012,10 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArgs() (localctx IQualifiedAg p.EnterOuterAlt(localctx, 1) { - p.SetState(363) + p.SetState(366) p.QualifiedAggregateFuncArg() } - p.SetState(368) + p.SetState(371) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4995,7 +5024,7 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArgs() (localctx IQualifiedAg for _la == FuncTestCaseParserComma { { - p.SetState(364) + p.SetState(367) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -5003,11 +5032,11 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArgs() (localctx IQualifiedAg } } { - p.SetState(365) + p.SetState(368) p.QualifiedAggregateFuncArg() } - p.SetState(370) + p.SetState(373) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5151,10 +5180,10 @@ func (p *FuncTestCaseParser) AggregateFuncArgs() (localctx IAggregateFuncArgsCon p.EnterOuterAlt(localctx, 1) { - p.SetState(371) + p.SetState(374) p.AggregateFuncArg() } - p.SetState(376) + p.SetState(379) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5163,7 +5192,7 @@ func (p *FuncTestCaseParser) AggregateFuncArgs() (localctx IAggregateFuncArgsCon for _la == FuncTestCaseParserComma { { - p.SetState(372) + p.SetState(375) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -5171,11 +5200,11 @@ func (p *FuncTestCaseParser) AggregateFuncArgs() (localctx IAggregateFuncArgsCon } } { - p.SetState(373) + p.SetState(376) p.AggregateFuncArg() } - p.SetState(378) + p.SetState(381) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5305,7 +5334,7 @@ func (s *QualifiedAggregateFuncArgContext) Accept(visitor antlr.ParseTreeVisitor func (p *FuncTestCaseParser) QualifiedAggregateFuncArg() (localctx IQualifiedAggregateFuncArgContext) { localctx = NewQualifiedAggregateFuncArgContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 40, FuncTestCaseParserRULE_qualifiedAggregateFuncArg) - p.SetState(383) + p.SetState(386) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5315,7 +5344,7 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArg() (localctx IQualifiedAgg case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(379) + p.SetState(382) var _m = p.Match(FuncTestCaseParserIdentifier) @@ -5326,7 +5355,7 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArg() (localctx IQualifiedAgg } } { - p.SetState(380) + p.SetState(383) p.Match(FuncTestCaseParserDot) if p.HasError() { // Recognition error - abort rule @@ -5334,7 +5363,7 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArg() (localctx IQualifiedAgg } } { - p.SetState(381) + p.SetState(384) p.Match(FuncTestCaseParserColumnName) if p.HasError() { // Recognition error - abort rule @@ -5345,7 +5374,7 @@ func (p *FuncTestCaseParser) QualifiedAggregateFuncArg() (localctx IQualifiedAgg case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(382) + p.SetState(385) p.Argument() } @@ -5476,7 +5505,7 @@ func (s *AggregateFuncArgContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FuncTestCaseParser) AggregateFuncArg() (localctx IAggregateFuncArgContext) { localctx = NewAggregateFuncArgContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 42, FuncTestCaseParserRULE_aggregateFuncArg) - p.SetState(389) + p.SetState(392) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5486,7 +5515,7 @@ func (p *FuncTestCaseParser) AggregateFuncArg() (localctx IAggregateFuncArgConte case FuncTestCaseParserColumnName: p.EnterOuterAlt(localctx, 1) { - p.SetState(385) + p.SetState(388) p.Match(FuncTestCaseParserColumnName) if p.HasError() { // Recognition error - abort rule @@ -5494,7 +5523,7 @@ func (p *FuncTestCaseParser) AggregateFuncArg() (localctx IAggregateFuncArgConte } } { - p.SetState(386) + p.SetState(389) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -5502,14 +5531,14 @@ func (p *FuncTestCaseParser) AggregateFuncArg() (localctx IAggregateFuncArgConte } } { - p.SetState(387) + p.SetState(390) p.DataType() } case FuncTestCaseParserNaN, FuncTestCaseParserIntegerLiteral, FuncTestCaseParserDecimalLiteral, FuncTestCaseParserFloatLiteral, FuncTestCaseParserBooleanLiteral, FuncTestCaseParserTimestampTzLiteral, FuncTestCaseParserTimestampLiteral, FuncTestCaseParserTimeLiteral, FuncTestCaseParserDateLiteral, FuncTestCaseParserIntervalYearLiteral, FuncTestCaseParserIntervalDayLiteral, FuncTestCaseParserIntervalCompoundLiteral, FuncTestCaseParserNullLiteral, FuncTestCaseParserStringLiteral, FuncTestCaseParserOParen, FuncTestCaseParserOBracket, FuncTestCaseParserIdentifier: p.EnterOuterAlt(localctx, 2) { - p.SetState(388) + p.SetState(391) p.Argument() } @@ -5624,7 +5653,7 @@ func (s *NumericLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FuncTestCaseParser) NumericLiteral() (localctx INumericLiteralContext) { localctx = NewNumericLiteralContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 44, FuncTestCaseParserRULE_numericLiteral) - p.SetState(394) + p.SetState(397) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5634,7 +5663,7 @@ func (p *FuncTestCaseParser) NumericLiteral() (localctx INumericLiteralContext) case FuncTestCaseParserDecimalLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(391) + p.SetState(394) p.Match(FuncTestCaseParserDecimalLiteral) if p.HasError() { // Recognition error - abort rule @@ -5645,7 +5674,7 @@ func (p *FuncTestCaseParser) NumericLiteral() (localctx INumericLiteralContext) case FuncTestCaseParserIntegerLiteral: p.EnterOuterAlt(localctx, 2) { - p.SetState(392) + p.SetState(395) p.Match(FuncTestCaseParserIntegerLiteral) if p.HasError() { // Recognition error - abort rule @@ -5656,7 +5685,7 @@ func (p *FuncTestCaseParser) NumericLiteral() (localctx INumericLiteralContext) case FuncTestCaseParserNaN, FuncTestCaseParserFloatLiteral: p.EnterOuterAlt(localctx, 3) { - p.SetState(393) + p.SetState(396) p.FloatLiteral() } @@ -5758,7 +5787,7 @@ func (p *FuncTestCaseParser) FloatLiteral() (localctx IFloatLiteralContext) { p.EnterOuterAlt(localctx, 1) { - p.SetState(396) + p.SetState(399) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserNaN || _la == FuncTestCaseParserFloatLiteral) { @@ -5877,7 +5906,7 @@ func (p *FuncTestCaseParser) NullArg() (localctx INullArgContext) { p.EnterRule(localctx, 48, FuncTestCaseParserRULE_nullArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(398) + p.SetState(401) p.Match(FuncTestCaseParserNullLiteral) if p.HasError() { // Recognition error - abort rule @@ -5885,7 +5914,7 @@ func (p *FuncTestCaseParser) NullArg() (localctx INullArgContext) { } } { - p.SetState(399) + p.SetState(402) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -5893,7 +5922,7 @@ func (p *FuncTestCaseParser) NullArg() (localctx INullArgContext) { } } { - p.SetState(400) + p.SetState(403) p.DataType() } @@ -6005,7 +6034,7 @@ func (p *FuncTestCaseParser) IntArg() (localctx IIntArgContext) { p.EnterRule(localctx, 50, FuncTestCaseParserRULE_intArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(402) + p.SetState(405) p.Match(FuncTestCaseParserIntegerLiteral) if p.HasError() { // Recognition error - abort rule @@ -6013,7 +6042,7 @@ func (p *FuncTestCaseParser) IntArg() (localctx IIntArgContext) { } } { - p.SetState(403) + p.SetState(406) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6021,7 +6050,7 @@ func (p *FuncTestCaseParser) IntArg() (localctx IIntArgContext) { } } { - p.SetState(404) + p.SetState(407) p.IntType() } @@ -6145,11 +6174,11 @@ func (p *FuncTestCaseParser) FloatArg() (localctx IFloatArgContext) { p.EnterRule(localctx, 52, FuncTestCaseParserRULE_floatArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(406) + p.SetState(409) p.NumericLiteral() } { - p.SetState(407) + p.SetState(410) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6157,7 +6186,7 @@ func (p *FuncTestCaseParser) FloatArg() (localctx IFloatArgContext) { } } { - p.SetState(408) + p.SetState(411) p.FloatType() } @@ -6281,11 +6310,11 @@ func (p *FuncTestCaseParser) DecimalArg() (localctx IDecimalArgContext) { p.EnterRule(localctx, 54, FuncTestCaseParserRULE_decimalArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(410) + p.SetState(413) p.NumericLiteral() } { - p.SetState(411) + p.SetState(414) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6293,7 +6322,7 @@ func (p *FuncTestCaseParser) DecimalArg() (localctx IDecimalArgContext) { } } { - p.SetState(412) + p.SetState(415) p.DecimalType() } @@ -6405,7 +6434,7 @@ func (p *FuncTestCaseParser) BooleanArg() (localctx IBooleanArgContext) { p.EnterRule(localctx, 56, FuncTestCaseParserRULE_booleanArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(414) + p.SetState(417) p.Match(FuncTestCaseParserBooleanLiteral) if p.HasError() { // Recognition error - abort rule @@ -6413,7 +6442,7 @@ func (p *FuncTestCaseParser) BooleanArg() (localctx IBooleanArgContext) { } } { - p.SetState(415) + p.SetState(418) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6421,7 +6450,7 @@ func (p *FuncTestCaseParser) BooleanArg() (localctx IBooleanArgContext) { } } { - p.SetState(416) + p.SetState(419) p.BooleanType() } @@ -6533,7 +6562,7 @@ func (p *FuncTestCaseParser) StringArg() (localctx IStringArgContext) { p.EnterRule(localctx, 58, FuncTestCaseParserRULE_stringArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(418) + p.SetState(421) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -6541,7 +6570,7 @@ func (p *FuncTestCaseParser) StringArg() (localctx IStringArgContext) { } } { - p.SetState(419) + p.SetState(422) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6549,7 +6578,7 @@ func (p *FuncTestCaseParser) StringArg() (localctx IStringArgContext) { } } { - p.SetState(420) + p.SetState(423) p.StringType() } @@ -6661,7 +6690,7 @@ func (p *FuncTestCaseParser) DateArg() (localctx IDateArgContext) { p.EnterRule(localctx, 60, FuncTestCaseParserRULE_dateArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(422) + p.SetState(425) p.Match(FuncTestCaseParserDateLiteral) if p.HasError() { // Recognition error - abort rule @@ -6669,7 +6698,7 @@ func (p *FuncTestCaseParser) DateArg() (localctx IDateArgContext) { } } { - p.SetState(423) + p.SetState(426) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6677,7 +6706,7 @@ func (p *FuncTestCaseParser) DateArg() (localctx IDateArgContext) { } } { - p.SetState(424) + p.SetState(427) p.DateType() } @@ -6789,7 +6818,7 @@ func (p *FuncTestCaseParser) TimeArg() (localctx ITimeArgContext) { p.EnterRule(localctx, 62, FuncTestCaseParserRULE_timeArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(426) + p.SetState(429) p.Match(FuncTestCaseParserTimeLiteral) if p.HasError() { // Recognition error - abort rule @@ -6797,7 +6826,7 @@ func (p *FuncTestCaseParser) TimeArg() (localctx ITimeArgContext) { } } { - p.SetState(427) + p.SetState(430) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6805,7 +6834,7 @@ func (p *FuncTestCaseParser) TimeArg() (localctx ITimeArgContext) { } } { - p.SetState(428) + p.SetState(431) p.TimeType() } @@ -6917,7 +6946,7 @@ func (p *FuncTestCaseParser) TimestampArg() (localctx ITimestampArgContext) { p.EnterRule(localctx, 64, FuncTestCaseParserRULE_timestampArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(430) + p.SetState(433) p.Match(FuncTestCaseParserTimestampLiteral) if p.HasError() { // Recognition error - abort rule @@ -6925,7 +6954,7 @@ func (p *FuncTestCaseParser) TimestampArg() (localctx ITimestampArgContext) { } } { - p.SetState(431) + p.SetState(434) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -6933,7 +6962,7 @@ func (p *FuncTestCaseParser) TimestampArg() (localctx ITimestampArgContext) { } } { - p.SetState(432) + p.SetState(435) p.TimestampType() } @@ -7045,7 +7074,7 @@ func (p *FuncTestCaseParser) TimestampTzArg() (localctx ITimestampTzArgContext) p.EnterRule(localctx, 66, FuncTestCaseParserRULE_timestampTzArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(434) + p.SetState(437) p.Match(FuncTestCaseParserTimestampTzLiteral) if p.HasError() { // Recognition error - abort rule @@ -7053,7 +7082,7 @@ func (p *FuncTestCaseParser) TimestampTzArg() (localctx ITimestampTzArgContext) } } { - p.SetState(435) + p.SetState(438) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7061,7 +7090,7 @@ func (p *FuncTestCaseParser) TimestampTzArg() (localctx ITimestampTzArgContext) } } { - p.SetState(436) + p.SetState(439) p.TimestampTZType() } @@ -7173,7 +7202,7 @@ func (p *FuncTestCaseParser) IntervalYearArg() (localctx IIntervalYearArgContext p.EnterRule(localctx, 68, FuncTestCaseParserRULE_intervalYearArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(438) + p.SetState(441) p.Match(FuncTestCaseParserIntervalYearLiteral) if p.HasError() { // Recognition error - abort rule @@ -7181,7 +7210,7 @@ func (p *FuncTestCaseParser) IntervalYearArg() (localctx IIntervalYearArgContext } } { - p.SetState(439) + p.SetState(442) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7189,7 +7218,7 @@ func (p *FuncTestCaseParser) IntervalYearArg() (localctx IIntervalYearArgContext } } { - p.SetState(440) + p.SetState(443) p.IntervalYearType() } @@ -7301,7 +7330,7 @@ func (p *FuncTestCaseParser) IntervalDayArg() (localctx IIntervalDayArgContext) p.EnterRule(localctx, 70, FuncTestCaseParserRULE_intervalDayArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(442) + p.SetState(445) p.Match(FuncTestCaseParserIntervalDayLiteral) if p.HasError() { // Recognition error - abort rule @@ -7309,7 +7338,7 @@ func (p *FuncTestCaseParser) IntervalDayArg() (localctx IIntervalDayArgContext) } } { - p.SetState(443) + p.SetState(446) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7317,7 +7346,7 @@ func (p *FuncTestCaseParser) IntervalDayArg() (localctx IIntervalDayArgContext) } } { - p.SetState(444) + p.SetState(447) p.IntervalDayType() } @@ -7429,7 +7458,7 @@ func (p *FuncTestCaseParser) IntervalCompoundArg() (localctx IIntervalCompoundAr p.EnterRule(localctx, 72, FuncTestCaseParserRULE_intervalCompoundArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(446) + p.SetState(449) p.Match(FuncTestCaseParserIntervalCompoundLiteral) if p.HasError() { // Recognition error - abort rule @@ -7437,7 +7466,7 @@ func (p *FuncTestCaseParser) IntervalCompoundArg() (localctx IIntervalCompoundAr } } { - p.SetState(447) + p.SetState(450) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7445,7 +7474,7 @@ func (p *FuncTestCaseParser) IntervalCompoundArg() (localctx IIntervalCompoundAr } } { - p.SetState(448) + p.SetState(451) p.IntervalCompoundType() } @@ -7557,7 +7586,7 @@ func (p *FuncTestCaseParser) FixedCharArg() (localctx IFixedCharArgContext) { p.EnterRule(localctx, 74, FuncTestCaseParserRULE_fixedCharArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(450) + p.SetState(453) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -7565,7 +7594,7 @@ func (p *FuncTestCaseParser) FixedCharArg() (localctx IFixedCharArgContext) { } } { - p.SetState(451) + p.SetState(454) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7573,7 +7602,7 @@ func (p *FuncTestCaseParser) FixedCharArg() (localctx IFixedCharArgContext) { } } { - p.SetState(452) + p.SetState(455) p.FixedCharType() } @@ -7685,7 +7714,7 @@ func (p *FuncTestCaseParser) VarCharArg() (localctx IVarCharArgContext) { p.EnterRule(localctx, 76, FuncTestCaseParserRULE_varCharArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(454) + p.SetState(457) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -7693,7 +7722,7 @@ func (p *FuncTestCaseParser) VarCharArg() (localctx IVarCharArgContext) { } } { - p.SetState(455) + p.SetState(458) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7701,7 +7730,7 @@ func (p *FuncTestCaseParser) VarCharArg() (localctx IVarCharArgContext) { } } { - p.SetState(456) + p.SetState(459) p.VarCharType() } @@ -7813,7 +7842,7 @@ func (p *FuncTestCaseParser) FixedBinaryArg() (localctx IFixedBinaryArgContext) p.EnterRule(localctx, 78, FuncTestCaseParserRULE_fixedBinaryArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(458) + p.SetState(461) p.Match(FuncTestCaseParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -7821,7 +7850,7 @@ func (p *FuncTestCaseParser) FixedBinaryArg() (localctx IFixedBinaryArgContext) } } { - p.SetState(459) + p.SetState(462) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7829,7 +7858,7 @@ func (p *FuncTestCaseParser) FixedBinaryArg() (localctx IFixedBinaryArgContext) } } { - p.SetState(460) + p.SetState(463) p.FixedBinaryType() } @@ -7941,7 +7970,7 @@ func (p *FuncTestCaseParser) PrecisionTimeArg() (localctx IPrecisionTimeArgConte p.EnterRule(localctx, 80, FuncTestCaseParserRULE_precisionTimeArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(462) + p.SetState(465) p.Match(FuncTestCaseParserTimeLiteral) if p.HasError() { // Recognition error - abort rule @@ -7949,7 +7978,7 @@ func (p *FuncTestCaseParser) PrecisionTimeArg() (localctx IPrecisionTimeArgConte } } { - p.SetState(463) + p.SetState(466) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -7957,7 +7986,7 @@ func (p *FuncTestCaseParser) PrecisionTimeArg() (localctx IPrecisionTimeArgConte } } { - p.SetState(464) + p.SetState(467) p.PrecisionTimeType() } @@ -8069,7 +8098,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampArg() (localctx IPrecisionTimesta p.EnterRule(localctx, 82, FuncTestCaseParserRULE_precisionTimestampArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(466) + p.SetState(469) p.Match(FuncTestCaseParserTimestampLiteral) if p.HasError() { // Recognition error - abort rule @@ -8077,7 +8106,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampArg() (localctx IPrecisionTimesta } } { - p.SetState(467) + p.SetState(470) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -8085,7 +8114,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampArg() (localctx IPrecisionTimesta } } { - p.SetState(468) + p.SetState(471) p.PrecisionTimestampType() } @@ -8197,7 +8226,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZArg() (localctx IPrecisionTimes p.EnterRule(localctx, 84, FuncTestCaseParserRULE_precisionTimestampTZArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(470) + p.SetState(473) p.Match(FuncTestCaseParserTimestampTzLiteral) if p.HasError() { // Recognition error - abort rule @@ -8205,7 +8234,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZArg() (localctx IPrecisionTimes } } { - p.SetState(471) + p.SetState(474) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -8213,7 +8242,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZArg() (localctx IPrecisionTimes } } { - p.SetState(472) + p.SetState(475) p.PrecisionTimestampTZType() } @@ -8337,11 +8366,11 @@ func (p *FuncTestCaseParser) ListArg() (localctx IListArgContext) { p.EnterRule(localctx, 86, FuncTestCaseParserRULE_listArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(474) + p.SetState(477) p.LiteralList() } { - p.SetState(475) + p.SetState(478) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -8349,7 +8378,7 @@ func (p *FuncTestCaseParser) ListArg() (localctx IListArgContext) { } } { - p.SetState(476) + p.SetState(479) p.ListType() } @@ -8473,11 +8502,11 @@ func (p *FuncTestCaseParser) LambdaArg() (localctx ILambdaArgContext) { p.EnterRule(localctx, 88, FuncTestCaseParserRULE_lambdaArg) p.EnterOuterAlt(localctx, 1) { - p.SetState(478) + p.SetState(481) p.LiteralLambda() } { - p.SetState(479) + p.SetState(482) p.Match(FuncTestCaseParserDoubleColon) if p.HasError() { // Recognition error - abort rule @@ -8485,7 +8514,7 @@ func (p *FuncTestCaseParser) LambdaArg() (localctx ILambdaArgContext) { } } { - p.SetState(480) + p.SetState(483) p.FuncType() } @@ -8502,6 +8531,126 @@ errorExit: goto errorExit // Trick to prevent compiler error if the label is not used } +// IEnumArgContext is an interface to support dynamic dispatch. +type IEnumArgContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + Identifier() antlr.TerminalNode + DoubleColon() antlr.TerminalNode + EnumType() antlr.TerminalNode + + // IsEnumArgContext differentiates from other interfaces. + IsEnumArgContext() +} + +type EnumArgContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyEnumArgContext() *EnumArgContext { + var p = new(EnumArgContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FuncTestCaseParserRULE_enumArg + return p +} + +func InitEmptyEnumArgContext(p *EnumArgContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FuncTestCaseParserRULE_enumArg +} + +func (*EnumArgContext) IsEnumArgContext() {} + +func NewEnumArgContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *EnumArgContext { + var p = new(EnumArgContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = FuncTestCaseParserRULE_enumArg + + return p +} + +func (s *EnumArgContext) GetParser() antlr.Parser { return s.parser } + +func (s *EnumArgContext) Identifier() antlr.TerminalNode { + return s.GetToken(FuncTestCaseParserIdentifier, 0) +} + +func (s *EnumArgContext) DoubleColon() antlr.TerminalNode { + return s.GetToken(FuncTestCaseParserDoubleColon, 0) +} + +func (s *EnumArgContext) EnumType() antlr.TerminalNode { + return s.GetToken(FuncTestCaseParserEnumType, 0) +} + +func (s *EnumArgContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *EnumArgContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *EnumArgContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case FuncTestCaseParserVisitor: + return t.VisitEnumArg(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *FuncTestCaseParser) EnumArg() (localctx IEnumArgContext) { + localctx = NewEnumArgContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 90, FuncTestCaseParserRULE_enumArg) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(485) + p.Match(FuncTestCaseParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(486) + p.Match(FuncTestCaseParserDoubleColon) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(487) + p.Match(FuncTestCaseParserEnumType) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + // ILiteralListContext is an interface to support dynamic dispatch. type ILiteralListContext interface { antlr.ParserRuleContext @@ -8630,19 +8779,19 @@ func (s *LiteralListContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) LiteralList() (localctx ILiteralListContext) { localctx = NewLiteralListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 90, FuncTestCaseParserRULE_literalList) + p.EnterRule(localctx, 92, FuncTestCaseParserRULE_literalList) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(482) + p.SetState(489) p.Match(FuncTestCaseParserOBracket) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(491) + p.SetState(498) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8651,10 +8800,10 @@ func (p *FuncTestCaseParser) LiteralList() (localctx ILiteralListContext) { if ((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&136343720296448) != 0) || _la == FuncTestCaseParserOBracket { { - p.SetState(483) + p.SetState(490) p.ListElement() } - p.SetState(488) + p.SetState(495) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8663,7 +8812,7 @@ func (p *FuncTestCaseParser) LiteralList() (localctx ILiteralListContext) { for _la == FuncTestCaseParserComma { { - p.SetState(484) + p.SetState(491) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -8671,11 +8820,11 @@ func (p *FuncTestCaseParser) LiteralList() (localctx ILiteralListContext) { } } { - p.SetState(485) + p.SetState(492) p.ListElement() } - p.SetState(490) + p.SetState(497) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8685,7 +8834,7 @@ func (p *FuncTestCaseParser) LiteralList() (localctx ILiteralListContext) { } { - p.SetState(493) + p.SetState(500) p.Match(FuncTestCaseParserCBracket) if p.HasError() { // Recognition error - abort rule @@ -8805,8 +8954,8 @@ func (s *ListElementContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) ListElement() (localctx IListElementContext) { localctx = NewListElementContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 92, FuncTestCaseParserRULE_listElement) - p.SetState(497) + p.EnterRule(localctx, 94, FuncTestCaseParserRULE_listElement) + p.SetState(504) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8816,14 +8965,14 @@ func (p *FuncTestCaseParser) ListElement() (localctx IListElementContext) { case FuncTestCaseParserNaN, FuncTestCaseParserIntegerLiteral, FuncTestCaseParserDecimalLiteral, FuncTestCaseParserFloatLiteral, FuncTestCaseParserBooleanLiteral, FuncTestCaseParserTimestampTzLiteral, FuncTestCaseParserTimestampLiteral, FuncTestCaseParserTimeLiteral, FuncTestCaseParserDateLiteral, FuncTestCaseParserIntervalYearLiteral, FuncTestCaseParserIntervalDayLiteral, FuncTestCaseParserIntervalCompoundLiteral, FuncTestCaseParserNullLiteral, FuncTestCaseParserStringLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(495) + p.SetState(502) p.Literal() } case FuncTestCaseParserOBracket: p.EnterOuterAlt(localctx, 2) { - p.SetState(496) + p.SetState(503) p.LiteralList() } @@ -8959,10 +9108,10 @@ func (s *LiteralLambdaContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FuncTestCaseParser) LiteralLambda() (localctx ILiteralLambdaContext) { localctx = NewLiteralLambdaContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 94, FuncTestCaseParserRULE_literalLambda) + p.EnterRule(localctx, 96, FuncTestCaseParserRULE_literalLambda) p.EnterOuterAlt(localctx, 1) { - p.SetState(499) + p.SetState(506) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -8970,11 +9119,11 @@ func (p *FuncTestCaseParser) LiteralLambda() (localctx ILiteralLambdaContext) { } } { - p.SetState(500) + p.SetState(507) p.LambdaParameters() } { - p.SetState(501) + p.SetState(508) p.Match(FuncTestCaseParserArrow) if p.HasError() { // Recognition error - abort rule @@ -8982,11 +9131,11 @@ func (p *FuncTestCaseParser) LiteralLambda() (localctx ILiteralLambdaContext) { } } { - p.SetState(502) + p.SetState(509) p.LambdaBody() } { - p.SetState(503) + p.SetState(510) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -9147,10 +9296,10 @@ func (s *SingleParamContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersContext) { localctx = NewLambdaParametersContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 96, FuncTestCaseParserRULE_lambdaParameters) + p.EnterRule(localctx, 98, FuncTestCaseParserRULE_lambdaParameters) var _la int - p.SetState(515) + p.SetState(522) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9161,7 +9310,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte localctx = NewSingleParamContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(505) + p.SetState(512) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -9173,7 +9322,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte localctx = NewTupleParamsContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(506) + p.SetState(513) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -9181,14 +9330,14 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte } } { - p.SetState(507) + p.SetState(514) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(510) + p.SetState(517) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9197,7 +9346,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte for ok := true; ok; ok = _la == FuncTestCaseParserComma { { - p.SetState(508) + p.SetState(515) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -9205,7 +9354,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte } } { - p.SetState(509) + p.SetState(516) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -9213,7 +9362,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte } } - p.SetState(512) + p.SetState(519) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9221,7 +9370,7 @@ func (p *FuncTestCaseParser) LambdaParameters() (localctx ILambdaParametersConte _la = p.GetTokenStream().LA(1) } { - p.SetState(514) + p.SetState(521) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -9356,14 +9505,14 @@ func (s *LambdaBodyContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) LambdaBody() (localctx ILambdaBodyContext) { localctx = NewLambdaBodyContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 98, FuncTestCaseParserRULE_lambdaBody) + p.EnterRule(localctx, 100, FuncTestCaseParserRULE_lambdaBody) p.EnterOuterAlt(localctx, 1) { - p.SetState(517) + p.SetState(524) p.Identifier() } { - p.SetState(518) + p.SetState(525) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -9371,11 +9520,11 @@ func (p *FuncTestCaseParser) LambdaBody() (localctx ILambdaBodyContext) { } } { - p.SetState(519) + p.SetState(526) p.Arguments() } { - p.SetState(520) + p.SetState(527) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -9495,8 +9644,8 @@ func (s *DataTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) DataType() (localctx IDataTypeContext) { localctx = NewDataTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 100, FuncTestCaseParserRULE_dataType) - p.SetState(524) + p.EnterRule(localctx, 102, FuncTestCaseParserRULE_dataType) + p.SetState(531) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9506,14 +9655,14 @@ func (p *FuncTestCaseParser) DataType() (localctx IDataTypeContext) { case FuncTestCaseParserBoolean, FuncTestCaseParserI8, FuncTestCaseParserI16, FuncTestCaseParserI32, FuncTestCaseParserI64, FuncTestCaseParserFP32, FuncTestCaseParserFP64, FuncTestCaseParserString_, FuncTestCaseParserBinary, FuncTestCaseParserTimestamp, FuncTestCaseParserTimestamp_TZ, FuncTestCaseParserDate, FuncTestCaseParserTime, FuncTestCaseParserInterval_Year, FuncTestCaseParserUUID, FuncTestCaseParserUserDefined, FuncTestCaseParserBool, FuncTestCaseParserStr, FuncTestCaseParserVBin, FuncTestCaseParserTs, FuncTestCaseParserTsTZ, FuncTestCaseParserIYear: p.EnterOuterAlt(localctx, 1) { - p.SetState(522) + p.SetState(529) p.ScalarType() } case FuncTestCaseParserFunc, FuncTestCaseParserInterval_Day, FuncTestCaseParserInterval_Compound, FuncTestCaseParserDecimal, FuncTestCaseParserPrecision_Time, FuncTestCaseParserPrecision_Timestamp, FuncTestCaseParserPrecision_Timestamp_TZ, FuncTestCaseParserFixedChar, FuncTestCaseParserVarChar, FuncTestCaseParserFixedBinary, FuncTestCaseParserList, FuncTestCaseParserIDay, FuncTestCaseParserICompound, FuncTestCaseParserDec, FuncTestCaseParserPT, FuncTestCaseParserPTs, FuncTestCaseParserPTsTZ, FuncTestCaseParserFChar, FuncTestCaseParserVChar, FuncTestCaseParserFBin: p.EnterOuterAlt(localctx, 2) { - p.SetState(523) + p.SetState(530) p.ParameterizedType() } @@ -10117,10 +10266,10 @@ func (s *TimestampTzContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewScalarTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 102, FuncTestCaseParserRULE_scalarType) + p.EnterRule(localctx, 104, FuncTestCaseParserRULE_scalarType) var _la int - p.SetState(545) + p.SetState(552) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10131,7 +10280,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewBooleanContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(526) + p.SetState(533) p.BooleanType() } @@ -10139,7 +10288,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewIntContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(527) + p.SetState(534) p.IntType() } @@ -10147,7 +10296,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewFloatContext(p, localctx) p.EnterOuterAlt(localctx, 3) { - p.SetState(528) + p.SetState(535) p.FloatType() } @@ -10155,7 +10304,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewStringContext(p, localctx) p.EnterOuterAlt(localctx, 4) { - p.SetState(529) + p.SetState(536) p.StringType() } @@ -10163,7 +10312,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewBinaryContext(p, localctx) p.EnterOuterAlt(localctx, 5) { - p.SetState(530) + p.SetState(537) p.BinaryType() } @@ -10171,7 +10320,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewTimestampContext(p, localctx) p.EnterOuterAlt(localctx, 6) { - p.SetState(531) + p.SetState(538) p.TimestampType() } @@ -10179,7 +10328,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewTimestampTzContext(p, localctx) p.EnterOuterAlt(localctx, 7) { - p.SetState(532) + p.SetState(539) p.TimestampTZType() } @@ -10187,7 +10336,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewDateContext(p, localctx) p.EnterOuterAlt(localctx, 8) { - p.SetState(533) + p.SetState(540) p.DateType() } @@ -10195,7 +10344,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewTimeContext(p, localctx) p.EnterOuterAlt(localctx, 9) { - p.SetState(534) + p.SetState(541) p.TimeType() } @@ -10203,7 +10352,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewIntervalYearContext(p, localctx) p.EnterOuterAlt(localctx, 10) { - p.SetState(535) + p.SetState(542) p.IntervalYearType() } @@ -10211,14 +10360,14 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewUuidContext(p, localctx) p.EnterOuterAlt(localctx, 11) { - p.SetState(536) + p.SetState(543) p.Match(FuncTestCaseParserUUID) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(538) + p.SetState(545) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10227,7 +10376,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(537) + p.SetState(544) var _m = p.Match(FuncTestCaseParserQMark) @@ -10244,7 +10393,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { localctx = NewUserDefinedContext(p, localctx) p.EnterOuterAlt(localctx, 12) { - p.SetState(540) + p.SetState(547) p.Match(FuncTestCaseParserUserDefined) if p.HasError() { // Recognition error - abort rule @@ -10252,14 +10401,14 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { } } { - p.SetState(541) + p.SetState(548) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(543) + p.SetState(550) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10268,7 +10417,7 @@ func (p *FuncTestCaseParser) ScalarType() (localctx IScalarTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(542) + p.SetState(549) var _m = p.Match(FuncTestCaseParserQMark) @@ -10390,12 +10539,12 @@ func (s *BooleanTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) BooleanType() (localctx IBooleanTypeContext) { localctx = NewBooleanTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 104, FuncTestCaseParserRULE_booleanType) + p.EnterRule(localctx, 106, FuncTestCaseParserRULE_booleanType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(547) + p.SetState(554) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserBoolean || _la == FuncTestCaseParserBool) { @@ -10405,7 +10554,7 @@ func (p *FuncTestCaseParser) BooleanType() (localctx IBooleanTypeContext) { p.Consume() } } - p.SetState(549) + p.SetState(556) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10414,7 +10563,7 @@ func (p *FuncTestCaseParser) BooleanType() (localctx IBooleanTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(548) + p.SetState(555) var _m = p.Match(FuncTestCaseParserQMark) @@ -10531,12 +10680,12 @@ func (s *StringTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) StringType() (localctx IStringTypeContext) { localctx = NewStringTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 106, FuncTestCaseParserRULE_stringType) + p.EnterRule(localctx, 108, FuncTestCaseParserRULE_stringType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(551) + p.SetState(558) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserString_ || _la == FuncTestCaseParserStr) { @@ -10546,7 +10695,7 @@ func (p *FuncTestCaseParser) StringType() (localctx IStringTypeContext) { p.Consume() } } - p.SetState(553) + p.SetState(560) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10555,7 +10704,7 @@ func (p *FuncTestCaseParser) StringType() (localctx IStringTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(552) + p.SetState(559) var _m = p.Match(FuncTestCaseParserQMark) @@ -10672,12 +10821,12 @@ func (s *BinaryTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) BinaryType() (localctx IBinaryTypeContext) { localctx = NewBinaryTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 108, FuncTestCaseParserRULE_binaryType) + p.EnterRule(localctx, 110, FuncTestCaseParserRULE_binaryType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(555) + p.SetState(562) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserBinary || _la == FuncTestCaseParserVBin) { @@ -10687,7 +10836,7 @@ func (p *FuncTestCaseParser) BinaryType() (localctx IBinaryTypeContext) { p.Consume() } } - p.SetState(557) + p.SetState(564) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10696,7 +10845,7 @@ func (p *FuncTestCaseParser) BinaryType() (localctx IBinaryTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(556) + p.SetState(563) var _m = p.Match(FuncTestCaseParserQMark) @@ -10823,22 +10972,22 @@ func (s *IntTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) IntType() (localctx IIntTypeContext) { localctx = NewIntTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 110, FuncTestCaseParserRULE_intType) + p.EnterRule(localctx, 112, FuncTestCaseParserRULE_intType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(559) + p.SetState(566) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&540431955284459520) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&1080863910568919040) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) p.Consume() } } - p.SetState(561) + p.SetState(568) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10847,7 +10996,7 @@ func (p *FuncTestCaseParser) IntType() (localctx IIntTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(560) + p.SetState(567) var _m = p.Match(FuncTestCaseParserQMark) @@ -10964,12 +11113,12 @@ func (s *FloatTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) FloatType() (localctx IFloatTypeContext) { localctx = NewFloatTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 112, FuncTestCaseParserRULE_floatType) + p.EnterRule(localctx, 114, FuncTestCaseParserRULE_floatType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(563) + p.SetState(570) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserFP32 || _la == FuncTestCaseParserFP64) { @@ -10979,7 +11128,7 @@ func (p *FuncTestCaseParser) FloatType() (localctx IFloatTypeContext) { p.Consume() } } - p.SetState(565) + p.SetState(572) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10988,7 +11137,7 @@ func (p *FuncTestCaseParser) FloatType() (localctx IFloatTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(564) + p.SetState(571) var _m = p.Match(FuncTestCaseParserQMark) @@ -11100,19 +11249,19 @@ func (s *DateTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) DateType() (localctx IDateTypeContext) { localctx = NewDateTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 114, FuncTestCaseParserRULE_dateType) + p.EnterRule(localctx, 116, FuncTestCaseParserRULE_dateType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(567) + p.SetState(574) p.Match(FuncTestCaseParserDate) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(569) + p.SetState(576) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11121,7 +11270,7 @@ func (p *FuncTestCaseParser) DateType() (localctx IDateTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(568) + p.SetState(575) var _m = p.Match(FuncTestCaseParserQMark) @@ -11233,19 +11382,19 @@ func (s *TimeTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) TimeType() (localctx ITimeTypeContext) { localctx = NewTimeTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 116, FuncTestCaseParserRULE_timeType) + p.EnterRule(localctx, 118, FuncTestCaseParserRULE_timeType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(571) + p.SetState(578) p.Match(FuncTestCaseParserTime) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(573) + p.SetState(580) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11254,7 +11403,7 @@ func (p *FuncTestCaseParser) TimeType() (localctx ITimeTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(572) + p.SetState(579) var _m = p.Match(FuncTestCaseParserQMark) @@ -11371,12 +11520,12 @@ func (s *TimestampTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FuncTestCaseParser) TimestampType() (localctx ITimestampTypeContext) { localctx = NewTimestampTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 118, FuncTestCaseParserRULE_timestampType) + p.EnterRule(localctx, 120, FuncTestCaseParserRULE_timestampType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(575) + p.SetState(582) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserTimestamp || _la == FuncTestCaseParserTs) { @@ -11386,7 +11535,7 @@ func (p *FuncTestCaseParser) TimestampType() (localctx ITimestampTypeContext) { p.Consume() } } - p.SetState(577) + p.SetState(584) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11395,7 +11544,7 @@ func (p *FuncTestCaseParser) TimestampType() (localctx ITimestampTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(576) + p.SetState(583) var _m = p.Match(FuncTestCaseParserQMark) @@ -11512,12 +11661,12 @@ func (s *TimestampTZTypeContext) Accept(visitor antlr.ParseTreeVisitor) interfac func (p *FuncTestCaseParser) TimestampTZType() (localctx ITimestampTZTypeContext) { localctx = NewTimestampTZTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 120, FuncTestCaseParserRULE_timestampTZType) + p.EnterRule(localctx, 122, FuncTestCaseParserRULE_timestampTZType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(579) + p.SetState(586) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserTimestamp_TZ || _la == FuncTestCaseParserTsTZ) { @@ -11527,7 +11676,7 @@ func (p *FuncTestCaseParser) TimestampTZType() (localctx ITimestampTZTypeContext p.Consume() } } - p.SetState(581) + p.SetState(588) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11536,7 +11685,7 @@ func (p *FuncTestCaseParser) TimestampTZType() (localctx ITimestampTZTypeContext if _la == FuncTestCaseParserQMark { { - p.SetState(580) + p.SetState(587) var _m = p.Match(FuncTestCaseParserQMark) @@ -11653,12 +11802,12 @@ func (s *IntervalYearTypeContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FuncTestCaseParser) IntervalYearType() (localctx IIntervalYearTypeContext) { localctx = NewIntervalYearTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 122, FuncTestCaseParserRULE_intervalYearType) + p.EnterRule(localctx, 124, FuncTestCaseParserRULE_intervalYearType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(583) + p.SetState(590) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserInterval_Year || _la == FuncTestCaseParserIYear) { @@ -11668,7 +11817,7 @@ func (p *FuncTestCaseParser) IntervalYearType() (localctx IIntervalYearTypeConte p.Consume() } } - p.SetState(585) + p.SetState(592) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11677,7 +11826,7 @@ func (p *FuncTestCaseParser) IntervalYearType() (localctx IIntervalYearTypeConte if _la == FuncTestCaseParserQMark { { - p.SetState(584) + p.SetState(591) var _m = p.Match(FuncTestCaseParserQMark) @@ -11832,12 +11981,12 @@ func (s *IntervalDayTypeContext) Accept(visitor antlr.ParseTreeVisitor) interfac func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext) { localctx = NewIntervalDayTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 124, FuncTestCaseParserRULE_intervalDayType) + p.EnterRule(localctx, 126, FuncTestCaseParserRULE_intervalDayType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(587) + p.SetState(594) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserInterval_Day || _la == FuncTestCaseParserIDay) { @@ -11847,7 +11996,7 @@ func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext p.Consume() } } - p.SetState(589) + p.SetState(596) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11856,7 +12005,7 @@ func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext if _la == FuncTestCaseParserQMark { { - p.SetState(588) + p.SetState(595) var _m = p.Match(FuncTestCaseParserQMark) @@ -11868,7 +12017,7 @@ func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext } } - p.SetState(595) + p.SetState(602) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11877,7 +12026,7 @@ func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext if _la == FuncTestCaseParserOAngleBracket { { - p.SetState(591) + p.SetState(598) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -11885,14 +12034,14 @@ func (p *FuncTestCaseParser) IntervalDayType() (localctx IIntervalDayTypeContext } } { - p.SetState(592) + p.SetState(599) var _x = p.NumericParameter() localctx.(*IntervalDayTypeContext).len_ = _x } { - p.SetState(593) + p.SetState(600) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12044,12 +12193,12 @@ func (s *IntervalCompoundTypeContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundTypeContext) { localctx = NewIntervalCompoundTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 126, FuncTestCaseParserRULE_intervalCompoundType) + p.EnterRule(localctx, 128, FuncTestCaseParserRULE_intervalCompoundType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(597) + p.SetState(604) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserInterval_Compound || _la == FuncTestCaseParserICompound) { @@ -12059,7 +12208,7 @@ func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundT p.Consume() } } - p.SetState(599) + p.SetState(606) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12068,7 +12217,7 @@ func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundT if _la == FuncTestCaseParserQMark { { - p.SetState(598) + p.SetState(605) var _m = p.Match(FuncTestCaseParserQMark) @@ -12080,7 +12229,7 @@ func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundT } } - p.SetState(605) + p.SetState(612) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12089,7 +12238,7 @@ func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundT if _la == FuncTestCaseParserOAngleBracket { { - p.SetState(601) + p.SetState(608) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12097,14 +12246,14 @@ func (p *FuncTestCaseParser) IntervalCompoundType() (localctx IIntervalCompoundT } } { - p.SetState(602) + p.SetState(609) var _x = p.NumericParameter() localctx.(*IntervalCompoundTypeContext).len_ = _x } { - p.SetState(603) + p.SetState(610) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12256,12 +12405,12 @@ func (s *FixedCharTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FuncTestCaseParser) FixedCharType() (localctx IFixedCharTypeContext) { localctx = NewFixedCharTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 128, FuncTestCaseParserRULE_fixedCharType) + p.EnterRule(localctx, 130, FuncTestCaseParserRULE_fixedCharType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(607) + p.SetState(614) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserFixedChar || _la == FuncTestCaseParserFChar) { @@ -12271,7 +12420,7 @@ func (p *FuncTestCaseParser) FixedCharType() (localctx IFixedCharTypeContext) { p.Consume() } } - p.SetState(609) + p.SetState(616) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12280,7 +12429,7 @@ func (p *FuncTestCaseParser) FixedCharType() (localctx IFixedCharTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(608) + p.SetState(615) var _m = p.Match(FuncTestCaseParserQMark) @@ -12293,7 +12442,7 @@ func (p *FuncTestCaseParser) FixedCharType() (localctx IFixedCharTypeContext) { } { - p.SetState(611) + p.SetState(618) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12301,14 +12450,14 @@ func (p *FuncTestCaseParser) FixedCharType() (localctx IFixedCharTypeContext) { } } { - p.SetState(612) + p.SetState(619) var _x = p.NumericParameter() localctx.(*FixedCharTypeContext).len_ = _x } { - p.SetState(613) + p.SetState(620) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12458,12 +12607,12 @@ func (s *VarCharTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) VarCharType() (localctx IVarCharTypeContext) { localctx = NewVarCharTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 130, FuncTestCaseParserRULE_varCharType) + p.EnterRule(localctx, 132, FuncTestCaseParserRULE_varCharType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(615) + p.SetState(622) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserVarChar || _la == FuncTestCaseParserVChar) { @@ -12473,7 +12622,7 @@ func (p *FuncTestCaseParser) VarCharType() (localctx IVarCharTypeContext) { p.Consume() } } - p.SetState(617) + p.SetState(624) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12482,7 +12631,7 @@ func (p *FuncTestCaseParser) VarCharType() (localctx IVarCharTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(616) + p.SetState(623) var _m = p.Match(FuncTestCaseParserQMark) @@ -12495,7 +12644,7 @@ func (p *FuncTestCaseParser) VarCharType() (localctx IVarCharTypeContext) { } { - p.SetState(619) + p.SetState(626) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12503,14 +12652,14 @@ func (p *FuncTestCaseParser) VarCharType() (localctx IVarCharTypeContext) { } } { - p.SetState(620) + p.SetState(627) var _x = p.NumericParameter() localctx.(*VarCharTypeContext).len_ = _x } { - p.SetState(621) + p.SetState(628) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12660,12 +12809,12 @@ func (s *FixedBinaryTypeContext) Accept(visitor antlr.ParseTreeVisitor) interfac func (p *FuncTestCaseParser) FixedBinaryType() (localctx IFixedBinaryTypeContext) { localctx = NewFixedBinaryTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 132, FuncTestCaseParserRULE_fixedBinaryType) + p.EnterRule(localctx, 134, FuncTestCaseParserRULE_fixedBinaryType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(623) + p.SetState(630) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserFixedBinary || _la == FuncTestCaseParserFBin) { @@ -12675,7 +12824,7 @@ func (p *FuncTestCaseParser) FixedBinaryType() (localctx IFixedBinaryTypeContext p.Consume() } } - p.SetState(625) + p.SetState(632) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12684,7 +12833,7 @@ func (p *FuncTestCaseParser) FixedBinaryType() (localctx IFixedBinaryTypeContext if _la == FuncTestCaseParserQMark { { - p.SetState(624) + p.SetState(631) var _m = p.Match(FuncTestCaseParserQMark) @@ -12697,7 +12846,7 @@ func (p *FuncTestCaseParser) FixedBinaryType() (localctx IFixedBinaryTypeContext } { - p.SetState(627) + p.SetState(634) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12705,14 +12854,14 @@ func (p *FuncTestCaseParser) FixedBinaryType() (localctx IFixedBinaryTypeContext } } { - p.SetState(628) + p.SetState(635) var _x = p.NumericParameter() localctx.(*FixedBinaryTypeContext).len_ = _x } { - p.SetState(629) + p.SetState(636) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12904,12 +13053,12 @@ func (s *DecimalTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { localctx = NewDecimalTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 134, FuncTestCaseParserRULE_decimalType) + p.EnterRule(localctx, 136, FuncTestCaseParserRULE_decimalType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(631) + p.SetState(638) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserDecimal || _la == FuncTestCaseParserDec) { @@ -12919,7 +13068,7 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { p.Consume() } } - p.SetState(633) + p.SetState(640) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12928,7 +13077,7 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(632) + p.SetState(639) var _m = p.Match(FuncTestCaseParserQMark) @@ -12940,7 +13089,7 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { } } - p.SetState(641) + p.SetState(648) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12949,7 +13098,7 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { if _la == FuncTestCaseParserOAngleBracket { { - p.SetState(635) + p.SetState(642) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -12957,14 +13106,14 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { } } { - p.SetState(636) + p.SetState(643) var _x = p.NumericParameter() localctx.(*DecimalTypeContext).precision = _x } { - p.SetState(637) + p.SetState(644) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -12972,14 +13121,14 @@ func (p *FuncTestCaseParser) DecimalType() (localctx IDecimalTypeContext) { } } { - p.SetState(638) + p.SetState(645) var _x = p.NumericParameter() localctx.(*DecimalTypeContext).scale = _x } { - p.SetState(639) + p.SetState(646) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13131,12 +13280,12 @@ func (s *PrecisionTimeTypeContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FuncTestCaseParser) PrecisionTimeType() (localctx IPrecisionTimeTypeContext) { localctx = NewPrecisionTimeTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 136, FuncTestCaseParserRULE_precisionTimeType) + p.EnterRule(localctx, 138, FuncTestCaseParserRULE_precisionTimeType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(643) + p.SetState(650) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserPrecision_Time || _la == FuncTestCaseParserPT) { @@ -13146,7 +13295,7 @@ func (p *FuncTestCaseParser) PrecisionTimeType() (localctx IPrecisionTimeTypeCon p.Consume() } } - p.SetState(645) + p.SetState(652) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13155,7 +13304,7 @@ func (p *FuncTestCaseParser) PrecisionTimeType() (localctx IPrecisionTimeTypeCon if _la == FuncTestCaseParserQMark { { - p.SetState(644) + p.SetState(651) var _m = p.Match(FuncTestCaseParserQMark) @@ -13168,7 +13317,7 @@ func (p *FuncTestCaseParser) PrecisionTimeType() (localctx IPrecisionTimeTypeCon } { - p.SetState(647) + p.SetState(654) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13176,14 +13325,14 @@ func (p *FuncTestCaseParser) PrecisionTimeType() (localctx IPrecisionTimeTypeCon } } { - p.SetState(648) + p.SetState(655) var _x = p.NumericParameter() localctx.(*PrecisionTimeTypeContext).precision = _x } { - p.SetState(649) + p.SetState(656) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13333,12 +13482,12 @@ func (s *PrecisionTimestampTypeContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FuncTestCaseParser) PrecisionTimestampType() (localctx IPrecisionTimestampTypeContext) { localctx = NewPrecisionTimestampTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 138, FuncTestCaseParserRULE_precisionTimestampType) + p.EnterRule(localctx, 140, FuncTestCaseParserRULE_precisionTimestampType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(651) + p.SetState(658) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserPrecision_Timestamp || _la == FuncTestCaseParserPTs) { @@ -13348,7 +13497,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampType() (localctx IPrecisionTimest p.Consume() } } - p.SetState(653) + p.SetState(660) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13357,7 +13506,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampType() (localctx IPrecisionTimest if _la == FuncTestCaseParserQMark { { - p.SetState(652) + p.SetState(659) var _m = p.Match(FuncTestCaseParserQMark) @@ -13370,7 +13519,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampType() (localctx IPrecisionTimest } { - p.SetState(655) + p.SetState(662) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13378,14 +13527,14 @@ func (p *FuncTestCaseParser) PrecisionTimestampType() (localctx IPrecisionTimest } } { - p.SetState(656) + p.SetState(663) var _x = p.NumericParameter() localctx.(*PrecisionTimestampTypeContext).precision = _x } { - p.SetState(657) + p.SetState(664) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13535,12 +13684,12 @@ func (s *PrecisionTimestampTZTypeContext) Accept(visitor antlr.ParseTreeVisitor) func (p *FuncTestCaseParser) PrecisionTimestampTZType() (localctx IPrecisionTimestampTZTypeContext) { localctx = NewPrecisionTimestampTZTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 140, FuncTestCaseParserRULE_precisionTimestampTZType) + p.EnterRule(localctx, 142, FuncTestCaseParserRULE_precisionTimestampTZType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(659) + p.SetState(666) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserPrecision_Timestamp_TZ || _la == FuncTestCaseParserPTsTZ) { @@ -13550,7 +13699,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZType() (localctx IPrecisionTime p.Consume() } } - p.SetState(661) + p.SetState(668) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13559,7 +13708,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZType() (localctx IPrecisionTime if _la == FuncTestCaseParserQMark { { - p.SetState(660) + p.SetState(667) var _m = p.Match(FuncTestCaseParserQMark) @@ -13572,7 +13721,7 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZType() (localctx IPrecisionTime } { - p.SetState(663) + p.SetState(670) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13580,14 +13729,14 @@ func (p *FuncTestCaseParser) PrecisionTimestampTZType() (localctx IPrecisionTime } } { - p.SetState(664) + p.SetState(671) var _x = p.NumericParameter() localctx.(*PrecisionTimestampTZTypeContext).precision = _x } { - p.SetState(665) + p.SetState(672) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13734,20 +13883,20 @@ func (s *ListContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) ListType() (localctx IListTypeContext) { localctx = NewListTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 142, FuncTestCaseParserRULE_listType) + p.EnterRule(localctx, 144, FuncTestCaseParserRULE_listType) var _la int localctx = NewListContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(667) + p.SetState(674) p.Match(FuncTestCaseParserList) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(669) + p.SetState(676) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13756,7 +13905,7 @@ func (p *FuncTestCaseParser) ListType() (localctx IListTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(668) + p.SetState(675) var _m = p.Match(FuncTestCaseParserQMark) @@ -13769,7 +13918,7 @@ func (p *FuncTestCaseParser) ListType() (localctx IListTypeContext) { } { - p.SetState(671) + p.SetState(678) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13777,14 +13926,14 @@ func (p *FuncTestCaseParser) ListType() (localctx IListTypeContext) { } } { - p.SetState(672) + p.SetState(679) var _x = p.DataType() localctx.(*ListContext).elemType = _x } { - p.SetState(673) + p.SetState(680) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -13962,19 +14111,19 @@ func (s *FuncTypeContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) FuncType() (localctx IFuncTypeContext) { localctx = NewFuncTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 144, FuncTestCaseParserRULE_funcType) + p.EnterRule(localctx, 146, FuncTestCaseParserRULE_funcType) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(675) + p.SetState(682) p.Match(FuncTestCaseParserFunc) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(677) + p.SetState(684) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13983,7 +14132,7 @@ func (p *FuncTestCaseParser) FuncType() (localctx IFuncTypeContext) { if _la == FuncTestCaseParserQMark { { - p.SetState(676) + p.SetState(683) var _m = p.Match(FuncTestCaseParserQMark) @@ -13996,7 +14145,7 @@ func (p *FuncTestCaseParser) FuncType() (localctx IFuncTypeContext) { } { - p.SetState(679) + p.SetState(686) p.Match(FuncTestCaseParserOAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -14004,14 +14153,14 @@ func (p *FuncTestCaseParser) FuncType() (localctx IFuncTypeContext) { } } { - p.SetState(680) + p.SetState(687) var _x = p.FuncParameters() localctx.(*FuncTypeContext).params = _x } { - p.SetState(681) + p.SetState(688) p.Match(FuncTestCaseParserArrow) if p.HasError() { // Recognition error - abort rule @@ -14019,14 +14168,14 @@ func (p *FuncTestCaseParser) FuncType() (localctx IFuncTypeContext) { } } { - p.SetState(682) + p.SetState(689) var _x = p.DataType() localctx.(*FuncTypeContext).returnType = _x } { - p.SetState(683) + p.SetState(690) p.Match(FuncTestCaseParserCAngleBracket) if p.HasError() { // Recognition error - abort rule @@ -14232,10 +14381,10 @@ func (s *FuncParamsWithParensContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) { localctx = NewFuncParametersContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 146, FuncTestCaseParserRULE_funcParameters) + p.EnterRule(localctx, 148, FuncTestCaseParserRULE_funcParameters) var _la int - p.SetState(697) + p.SetState(704) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14246,7 +14395,7 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) localctx = NewSingleFuncParamContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(685) + p.SetState(692) p.DataType() } @@ -14254,7 +14403,7 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) localctx = NewFuncParamsWithParensContext(p, localctx) p.EnterOuterAlt(localctx, 2) { - p.SetState(686) + p.SetState(693) p.Match(FuncTestCaseParserOParen) if p.HasError() { // Recognition error - abort rule @@ -14262,10 +14411,10 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) } } { - p.SetState(687) + p.SetState(694) p.DataType() } - p.SetState(692) + p.SetState(699) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14274,7 +14423,7 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) for _la == FuncTestCaseParserComma { { - p.SetState(688) + p.SetState(695) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -14282,11 +14431,11 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) } } { - p.SetState(689) + p.SetState(696) p.DataType() } - p.SetState(694) + p.SetState(701) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14294,7 +14443,7 @@ func (p *FuncTestCaseParser) FuncParameters() (localctx IFuncParametersContext) _la = p.GetTokenStream().LA(1) } { - p.SetState(695) + p.SetState(702) p.Match(FuncTestCaseParserCParen) if p.HasError() { // Recognition error - abort rule @@ -14572,8 +14721,8 @@ func (s *ParameterizedTypeContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FuncTestCaseParser) ParameterizedType() (localctx IParameterizedTypeContext) { localctx = NewParameterizedTypeContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 148, FuncTestCaseParserRULE_parameterizedType) - p.SetState(710) + p.EnterRule(localctx, 150, FuncTestCaseParserRULE_parameterizedType) + p.SetState(717) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -14583,77 +14732,77 @@ func (p *FuncTestCaseParser) ParameterizedType() (localctx IParameterizedTypeCon case FuncTestCaseParserFixedChar, FuncTestCaseParserFChar: p.EnterOuterAlt(localctx, 1) { - p.SetState(699) + p.SetState(706) p.FixedCharType() } case FuncTestCaseParserVarChar, FuncTestCaseParserVChar: p.EnterOuterAlt(localctx, 2) { - p.SetState(700) + p.SetState(707) p.VarCharType() } case FuncTestCaseParserFixedBinary, FuncTestCaseParserFBin: p.EnterOuterAlt(localctx, 3) { - p.SetState(701) + p.SetState(708) p.FixedBinaryType() } case FuncTestCaseParserDecimal, FuncTestCaseParserDec: p.EnterOuterAlt(localctx, 4) { - p.SetState(702) + p.SetState(709) p.DecimalType() } case FuncTestCaseParserInterval_Day, FuncTestCaseParserIDay: p.EnterOuterAlt(localctx, 5) { - p.SetState(703) + p.SetState(710) p.IntervalDayType() } case FuncTestCaseParserInterval_Compound, FuncTestCaseParserICompound: p.EnterOuterAlt(localctx, 6) { - p.SetState(704) + p.SetState(711) p.IntervalCompoundType() } case FuncTestCaseParserPrecision_Time, FuncTestCaseParserPT: p.EnterOuterAlt(localctx, 7) { - p.SetState(705) + p.SetState(712) p.PrecisionTimeType() } case FuncTestCaseParserPrecision_Timestamp, FuncTestCaseParserPTs: p.EnterOuterAlt(localctx, 8) { - p.SetState(706) + p.SetState(713) p.PrecisionTimestampType() } case FuncTestCaseParserPrecision_Timestamp_TZ, FuncTestCaseParserPTsTZ: p.EnterOuterAlt(localctx, 9) { - p.SetState(707) + p.SetState(714) p.PrecisionTimestampTZType() } case FuncTestCaseParserList: p.EnterOuterAlt(localctx, 10) { - p.SetState(708) + p.SetState(715) p.ListType() } case FuncTestCaseParserFunc: p.EnterOuterAlt(localctx, 11) { - p.SetState(709) + p.SetState(716) p.FuncType() } @@ -14763,11 +14912,11 @@ func (s *IntegerLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FuncTestCaseParser) NumericParameter() (localctx INumericParameterContext) { localctx = NewNumericParameterContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 150, FuncTestCaseParserRULE_numericParameter) + p.EnterRule(localctx, 152, FuncTestCaseParserRULE_numericParameter) localctx = NewIntegerLiteralContext(p, localctx) p.EnterOuterAlt(localctx, 1) { - p.SetState(712) + p.SetState(719) p.Match(FuncTestCaseParserIntegerLiteral) if p.HasError() { // Recognition error - abort rule @@ -14863,12 +15012,12 @@ func (s *SubstraitErrorContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FuncTestCaseParser) SubstraitError() (localctx ISubstraitErrorContext) { localctx = NewSubstraitErrorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 152, FuncTestCaseParserRULE_substraitError) + p.EnterRule(localctx, 154, FuncTestCaseParserRULE_substraitError) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(714) + p.SetState(721) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserErrorResult || _la == FuncTestCaseParserUndefineResult) { @@ -14996,14 +15145,14 @@ func (s *FuncOptionContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) FuncOption() (localctx IFuncOptionContext) { localctx = NewFuncOptionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 154, FuncTestCaseParserRULE_funcOption) + p.EnterRule(localctx, 156, FuncTestCaseParserRULE_funcOption) p.EnterOuterAlt(localctx, 1) { - p.SetState(716) + p.SetState(723) p.OptionName() } { - p.SetState(717) + p.SetState(724) p.Match(FuncTestCaseParserColon) if p.HasError() { // Recognition error - abort rule @@ -15011,7 +15160,7 @@ func (p *FuncTestCaseParser) FuncOption() (localctx IFuncOptionContext) { } } { - p.SetState(718) + p.SetState(725) p.OptionValue() } @@ -15118,12 +15267,12 @@ func (s *OptionNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) OptionName() (localctx IOptionNameContext) { localctx = NewOptionNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 156, FuncTestCaseParserRULE_optionName) + p.EnterRule(localctx, 158, FuncTestCaseParserRULE_optionName) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(720) + p.SetState(727) _la = p.GetTokenStream().LA(1) if !(((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&6303744) != 0) || _la == FuncTestCaseParserIdentifier) { @@ -15267,12 +15416,12 @@ func (s *OptionValueContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) OptionValue() (localctx IOptionValueContext) { localctx = NewOptionValueContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 158, FuncTestCaseParserRULE_optionValue) + p.EnterRule(localctx, 160, FuncTestCaseParserRULE_optionValue) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(722) + p.SetState(729) _la = p.GetTokenStream().LA(1) if !(((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&35184516775936) != 0) || _la == FuncTestCaseParserIdentifier) { @@ -15414,15 +15563,15 @@ func (s *FuncOptionsContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) FuncOptions() (localctx IFuncOptionsContext) { localctx = NewFuncOptionsContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 160, FuncTestCaseParserRULE_funcOptions) + p.EnterRule(localctx, 162, FuncTestCaseParserRULE_funcOptions) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(724) + p.SetState(731) p.FuncOption() } - p.SetState(729) + p.SetState(736) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -15431,7 +15580,7 @@ func (p *FuncTestCaseParser) FuncOptions() (localctx IFuncOptionsContext) { for _la == FuncTestCaseParserComma { { - p.SetState(725) + p.SetState(732) p.Match(FuncTestCaseParserComma) if p.HasError() { // Recognition error - abort rule @@ -15439,11 +15588,11 @@ func (p *FuncTestCaseParser) FuncOptions() (localctx IFuncOptionsContext) { } } { - p.SetState(726) + p.SetState(733) p.FuncOption() } - p.SetState(731) + p.SetState(738) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -15544,12 +15693,12 @@ func (s *NonReservedContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FuncTestCaseParser) NonReserved() (localctx INonReservedContext) { localctx = NewNonReservedContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 162, FuncTestCaseParserRULE_nonReserved) + p.EnterRule(localctx, 164, FuncTestCaseParserRULE_nonReserved) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(732) + p.SetState(739) _la = p.GetTokenStream().LA(1) if !(_la == FuncTestCaseParserTruncate || _la == FuncTestCaseParserAnd || _la == FuncTestCaseParserOr) { @@ -15660,8 +15809,8 @@ func (s *IdentifierContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FuncTestCaseParser) Identifier() (localctx IIdentifierContext) { localctx = NewIdentifierContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 164, FuncTestCaseParserRULE_identifier) - p.SetState(736) + p.EnterRule(localctx, 166, FuncTestCaseParserRULE_identifier) + p.SetState(743) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -15671,14 +15820,14 @@ func (p *FuncTestCaseParser) Identifier() (localctx IIdentifierContext) { case FuncTestCaseParserTruncate, FuncTestCaseParserAnd, FuncTestCaseParserOr: p.EnterOuterAlt(localctx, 1) { - p.SetState(734) + p.SetState(741) p.NonReserved() } case FuncTestCaseParserIdentifier: p.EnterOuterAlt(localctx, 2) { - p.SetState(735) + p.SetState(742) p.Match(FuncTestCaseParserIdentifier) if p.HasError() { // Recognition error - abort rule diff --git a/testcases/parser/baseparser/functestcaseparser_base_visitor.go b/testcases/parser/baseparser/functestcaseparser_base_visitor.go index 51e6f34..cea03f0 100644 --- a/testcases/parser/baseparser/functestcaseparser_base_visitor.go +++ b/testcases/parser/baseparser/functestcaseparser_base_visitor.go @@ -199,6 +199,10 @@ func (v *BaseFuncTestCaseParserVisitor) VisitLambdaArg(ctx *LambdaArgContext) in return v.VisitChildren(ctx) } +func (v *BaseFuncTestCaseParserVisitor) VisitEnumArg(ctx *EnumArgContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseFuncTestCaseParserVisitor) VisitLiteralList(ctx *LiteralListContext) interface{} { return v.VisitChildren(ctx) } diff --git a/testcases/parser/baseparser/functestcaseparser_visitor.go b/testcases/parser/baseparser/functestcaseparser_visitor.go index 447aed8..50b8b39 100644 --- a/testcases/parser/baseparser/functestcaseparser_visitor.go +++ b/testcases/parser/baseparser/functestcaseparser_visitor.go @@ -151,6 +151,9 @@ type FuncTestCaseParserVisitor interface { // Visit a parse tree produced by FuncTestCaseParser#lambdaArg. VisitLambdaArg(ctx *LambdaArgContext) interface{} + // Visit a parse tree produced by FuncTestCaseParser#enumArg. + VisitEnumArg(ctx *EnumArgContext) interface{} + // Visit a parse tree produced by FuncTestCaseParser#literalList. VisitLiteralList(ctx *LiteralListContext) interface{} diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index dd947d7..cba440d 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -23,7 +23,7 @@ const ( type CaseLiteral struct { Type types.Type ValueText string - Value expr.Literal + Value types.FuncArg SubstraitError *SubstraitError } @@ -34,7 +34,10 @@ func (c *CaseLiteral) String() string { if c.Value == nil { return "NULL" } - return literalToString(c.Value) + "::" + c.Type.String() + if lit, ok := c.Value.(expr.Literal); ok { + return literalToString(lit) + "::" + c.Type.String() + } + return c.ValueText + "::" + c.Type.String() } func literalToString(literal expr.Literal) string { @@ -76,7 +79,10 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - return c.Value.ValueString() + "::" + c.Type.String() + if lit, ok := c.Value.(expr.Literal); ok { + return lit.ValueString() + "::" + c.Type.String() + } + return c.ValueText + "::" + c.Type.String() } // updateLiteralType updates the type of the literal CaseLiteral.Value to use the CaseLiteral.Type @@ -261,10 +267,19 @@ func (tc *TestCase) getAggregateFuncArgTypes() []types.Type { } func (tc *TestCase) getAggregateFuncTableSchema() []types.Type { - schemaTypes := make([]types.Type, len(tc.AggregateArgs)) - for i, arg := range tc.AggregateArgs { + var maxColIdx int32 = -1 + for _, arg := range tc.AggregateArgs { + if !arg.IsScalar && arg.ColumnIndex > maxColIdx { + maxColIdx = arg.ColumnIndex + } + } + if maxColIdx < 0 { + return nil + } + schemaTypes := make([]types.Type, maxColIdx+1) + for _, arg := range tc.AggregateArgs { if !arg.IsScalar { - schemaTypes[i] = arg.ColumnType + schemaTypes[arg.ColumnIndex] = arg.ColumnType } } return schemaTypes @@ -348,17 +363,79 @@ func (tc *TestCase) GetScalarFunctionInvocation(reg *expr.ExtensionRegistry, fun return invocation, nil } - // exact match not found, try to find a function that matches with function parameter type "any" + // exact match not found, try to find a function that matches with function parameter type "any". + // Also try substituting string-typed args with CommonEnumType, to handle test cases that represent + // enum options as string literals (e.g. 'YEAR'::str for extract). + argTypes := tc.GetArgTypes() + enumArgTypes, hasEnumFallback := enumSubstitutedArgTypes(argTypes) funcVariants := funcRegistry.GetScalarFunctions(tc.FuncName, len(args)) for _, function := range funcVariants { - isMatch, err1 := function.Match(tc.GetArgTypes()) - if err1 == nil && isMatch && function.ID().URN == id.URN { - return expr.NewScalarFunc(*reg, function.ID(), tc.GetFunctionOptions(), args...) + if function.ID().URN != id.URN { + continue + } + isMatch, err1 := function.Match(argTypes) + if (err1 != nil || !isMatch) && hasEnumFallback { + isMatch, err1 = function.Match(enumArgTypes) + } + if err1 == nil && isMatch { + normalizedArgs := normalizeArgsForVariant(function, args) + return expr.NewScalarFunc(*reg, function.ID(), tc.GetFunctionOptions(), normalizedArgs...) } } return nil, fmt.Errorf("%w: no matching function found or %s", substraitgo.ErrNotFound, id) } +// normalizeArgsForVariant converts string-typed args to enum values at positions +// where the given function variant declares an EnumArg. Test cases represent +// enum options as string literals (e.g. 'YEAR'::str for extract). +func normalizeArgsForVariant(variant extensions.FunctionVariant, args []types.FuncArg) []types.FuncArg { + params := variant.Args() + out := make([]types.FuncArg, len(args)) + copy(out, args) + for i, param := range params { + if i >= len(args) { + break + } + if _, isEnum := param.(extensions.EnumArg); !isEnum { + continue + } + lit, ok := args[i].(expr.Literal) + if !ok { + continue + } + strLit, ok := lit.(*expr.PrimitiveLiteral[string]) + if !ok { + continue + } + out[i] = types.Enum(strLit.Value) + } + return out +} + +// enumSubstitutedArgTypes returns a copy of argTypes where StringType entries are +// replaced with CommonEnumType, and reports whether any substitution was made. +func enumSubstitutedArgTypes(argTypes []types.Type) ([]types.Type, bool) { + hasString := false + for _, t := range argTypes { + if _, ok := t.(*types.StringType); ok { + hasString = true + break + } + } + if !hasString { + return argTypes, false + } + out := make([]types.Type, len(argTypes)) + for i, t := range argTypes { + if _, ok := t.(*types.StringType); ok { + out[i] = types.CommonEnumType + } else { + out[i] = t + } + } + return out, true +} + func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, funcRegistry functions.FunctionRegistry) (*expr.AggregateFunction, error) { if tc.FuncType != AggregateFuncType { return nil, fmt.Errorf("not an aggregate function testcase") diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index c95cd61..ec1ab2e 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -208,10 +208,14 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - checkNullability(t, arg.Value, arg.Type) + if lit, ok := arg.Value.(expr.Literal); ok { + checkNullability(t, lit, arg.Type) + } } assert.NotNil(t, testFile.TestCases[0].Result.Value) - checkNullability(t, testFile.TestCases[0].Result.Value, testFile.TestCases[0].Result.Type) + if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { + checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) + } }) } } @@ -427,7 +431,9 @@ sum((9223372036854775806, 1, 1, 1, 1, 10000000000)::i64) [overflow:ERROR] = ", } assert.Equal(t, newFloat32List(1, 2, 3), tc.AggregateArgs[0].Argument.Value) - assert.Equal(t, listType, tc.AggregateArgs[0].Argument.Value.GetType()) + if lit, ok := tc.AggregateArgs[0].Argument.Value.(expr.Literal); ok { + assert.Equal(t, listType, lit.GetType()) + } assert.Equal(t, "fp64", tc.Result.Type.String()) assert.Equal(t, literal.NewFloat64(2, false), tc.Result.Value) assert.Equal(t, AggregateFuncType, tc.FuncType) @@ -766,7 +772,7 @@ func TestParseTestWithBadScalarTests(t *testing.T) { {"add(123::fp32, 1.4E+::fp32) = 123::fp32", 18, "no viable alternative at input '1.4E'"}, {"add(123::fp32, 3.E.5::fp32) = 123::fp32", 17, "no viable alternative at input '3.E'"}, {"f1((1, 2, 3, 4)::i64) = 10::fp64", 0, "expected scalar testcase based on test file header, but got aggregate function testcase"}, - {"add(4.53::dec<1, 0>, 0.25::dec<2, 2>) = 0.78::dec<5, 2>", 0, "Visit error at line 5: invalid argument number 4.53"}, + {"add(4.53::dec<1, 0>, 0.25::dec<2, 2>) = 0.78::dec<5, 2>", 0, "Visit error at line 5: invalid decimal arg number 4.53 exceeds target scale 0"}, } for _, test := range tests { t.Run(test.testCaseStr, func(t *testing.T) { @@ -794,8 +800,8 @@ func TestParseTestWithBadAggregateTests(t *testing.T) { corr(t1.col0, t2.col1) = 1::fp64`, "table name in argument t2, does not match the table name in the function call t1", }, - {"((20, 20), (-3, -3), (1, 1), (10,10), (5,5)) corr(my_col::fp32, col0::fp32) = 1::fp64", "mismatched input '::' expecting ')"}, - {"((20, 20), (-3, -3), (1, 1), (10,10), (5,5)) corr(col0::fp32, column1::fp32) = 1::fp64", "mismatched input '::' expecting ')"}, + {"((20, 20), (-3, -3), (1, 1), (10,10), (5,5)) corr(my_col::fp32, col0::fp32) = 1::fp64", "mismatched input 'fp32' expecting 'enum'"}, + {"((20, 20), (-3, -3), (1, 1), (10,10), (5,5)) corr(col0::fp32, column1::fp32) = 1::fp64", "mismatched input 'fp32' expecting 'enum'"}, {"f8('13:01:01.234'::time) = 123::i32", "expected aggregate testcase based on test file header, but got scalar function testcase"}, } for _, test := range tests { @@ -913,9 +919,11 @@ func TestLoadAllSubstraitTestFiles(t *testing.T) { for _, filePath := range filePaths { t.Run(filePath, func(t *testing.T) { switch filePath { - case "tests/cases/datetime/extract.test": - // TODO deal with enum arguments in testcase - t.Skip("Skipping extract.test") + case "tests/cases/arithmetic/std_dev.test", + "tests/cases/arithmetic/variance.test": + // TODO: these files use single-column compact format ((v1, v2, ..., vn)) which + // is parsed as 1 row with n columns, but the tests expect n rows with 1 column. + t.Skip("Skipping tests with single-column compact aggregate format") case "tests/cases/list/all_match.test", "tests/cases/list/any_match.test", "tests/cases/list/filter.test", @@ -942,14 +950,29 @@ func testGetFunctionInvocation(t *testing.T, tc *TestCase, reg *expr.ExtensionRe require.NoError(t, err, "GetScalarFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) argTypes := invocation.GetArgTypes() - require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + // Enum args appear as nil in invocation arg types since types.Enum has no GetType(); + // skip the comparison when enum args are present. + if !hasNilType(argTypes) { + require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + } case AggregateFuncType: invocation, err := tc.GetAggregateFunctionInvocation(reg, registry) require.NoError(t, err, "GetAggregateFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) argTypes := invocation.GetArgTypes() - require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + if !hasNilType(argTypes) { + require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + } + } +} + +func hasNilType(types []types.Type) bool { + for _, t := range types { + if t == nil { + return true + } } + return false } func listFiles(embedFs embed.FS, root string) ([]string, error) { diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index 7023f35..38f6693 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -415,6 +415,9 @@ func (v *TestCaseVisitor) VisitArgument(ctx *baseparser.ArgumentContext) interfa if ctx.ListArg() != nil { return v.Visit(ctx.ListArg()) } + if ctx.EnumArg() != nil { + return v.Visit(ctx.EnumArg()) + } if ctx.IntervalCompoundArg() != nil { // TODO(#209): implement when substrait test cases use interval compound args v.ErrorListener.ReportVisitError(ctx, fmt.Errorf("interval compound argument not yet implemented")) @@ -631,8 +634,19 @@ func (v *TestCaseVisitor) VisitDecimalArg(ctx *baseparser.DecimalArgContext) int decimal, err := literal.NewDecimalFromString(ctx.NumericLiteral().GetText(), decType.GetNullability() == types.NullabilityNullable) if err != nil { v.ErrorListener.ReportVisitError(ctx, err) + return &CaseLiteral{ValueText: ctx.NumericLiteral().GetText(), Type: decType} + } + typed, err := decimal.(expr.WithTypeLiteral).WithType(decType) + if err != nil { + v.ErrorListener.ReportVisitError(ctx, fmt.Errorf("invalid decimal arg %v", err)) + return &CaseLiteral{ValueText: ctx.NumericLiteral().GetText(), Type: decType} } - return &CaseLiteral{Value: decimal, ValueText: ctx.NumericLiteral().GetText(), Type: decType} + return &CaseLiteral{Value: typed, ValueText: ctx.NumericLiteral().GetText(), Type: decType} +} + +func (v *TestCaseVisitor) VisitEnumArg(ctx *baseparser.EnumArgContext) interface{} { + identifier := ctx.Identifier().GetText() + return &CaseLiteral{Value: types.Enum(identifier), ValueText: identifier, Type: types.CommonEnumType} } func (v *TestCaseVisitor) VisitPrecisionTimeArg(ctx *baseparser.PrecisionTimeArgContext) interface{} { From 460467754c2f492d545eae8ed0bd548099c64b49 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 14:30:46 -0400 Subject: [PATCH 02/24] chore: go mod tidy after substrait v0.87.0 upgrade Co-Authored-By: Claude Sonnet 4.6 --- go.sum | 2 -- 1 file changed, 2 deletions(-) diff --git a/go.sum b/go.sum index 660bce1..ed81d8d 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,6 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/substrait-io/substrait v0.85.0 h1:ur2VBFhOpx/3RjVG0w5i8SpLHciLjATh27kAc2HPf5A= -github.com/substrait-io/substrait v0.85.0/go.mod h1:MPFNw6sToJgpD5Z2rj0rQrdP/Oq8HG7Z2t3CAEHtkHw= github.com/substrait-io/substrait v0.87.0 h1:40rP4LejyK6SNQlWz7NX6kQELf8cmScWMBGruWhN4io= github.com/substrait-io/substrait v0.87.0/go.mod h1:MPFNw6sToJgpD5Z2rj0rQrdP/Oq8HG7Z2t3CAEHtkHw= github.com/substrait-io/substrait-protobuf/go v0.85.0 h1:zk6MtNWLtDSl8a7qCZRFH0+EIIXVrrd/hsgYK/SQTgM= From f290b00dd7ca470c3a833b0557109d0eb57d1951 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 14:37:51 -0400 Subject: [PATCH 03/24] refactor(parser): route enum args via CaseLiteral.FuncArg() not Value field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enum args (YEAR::enum) are not literals — they don't belong in CaseLiteral.Value (expr.Literal). Instead, VisitEnumArg stores only ValueText and Type=CommonEnumType, and a new FuncArg() method on CaseLiteral converts to types.FuncArg at call sites, returning types.Enum(ValueText) for enum args and Value for everything else. This reverts the CaseLiteral.Value type widening (types.FuncArg → back to expr.Literal) from the previous commit. Co-Authored-By: Claude Sonnet 4.6 --- testcases/parser/nodes.go | 24 ++++++++++++++---------- testcases/parser/parse_test.go | 12 +++--------- testcases/parser/visitor.go | 2 +- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index cba440d..02ba07b 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -23,7 +23,7 @@ const ( type CaseLiteral struct { Type types.Type ValueText string - Value types.FuncArg + Value expr.Literal SubstraitError *SubstraitError } @@ -34,10 +34,17 @@ func (c *CaseLiteral) String() string { if c.Value == nil { return "NULL" } - if lit, ok := c.Value.(expr.Literal); ok { - return literalToString(lit) + "::" + c.Type.String() + return literalToString(c.Value) + "::" + c.Type.String() +} + +// FuncArg returns the value of this literal as a types.FuncArg suitable for +// passing to a function builder. Enum args (Type == CommonEnumType, Value nil) +// are constructed from ValueText; all other args return Value directly. +func (c *CaseLiteral) FuncArg() types.FuncArg { + if _, ok := c.Type.(*types.EnumType); ok { + return types.Enum(c.ValueText) } - return c.ValueText + "::" + c.Type.String() + return c.Value } func literalToString(literal expr.Literal) string { @@ -79,10 +86,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - if lit, ok := c.Value.(expr.Literal); ok { - return lit.ValueString() + "::" + c.Type.String() - } - return c.ValueText + "::" + c.Type.String() + return c.Value.ValueString() + "::" + c.Type.String() } // updateLiteralType updates the type of the literal CaseLiteral.Value to use the CaseLiteral.Type @@ -355,7 +359,7 @@ func (tc *TestCase) GetScalarFunctionInvocation(reg *expr.ExtensionRegistry, fun id := tc.ID() args := make([]types.FuncArg, len(tc.Args)) for i, arg := range tc.Args { - args[i] = arg.Value + args[i] = arg.FuncArg() } invocation, err := expr.NewScalarFunc(*reg, id, tc.GetFunctionOptions(), args...) @@ -445,7 +449,7 @@ func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, baseSchema := types.NewRecordTypeFromTypes(tc.getAggregateFuncTableSchema()) for i, arg := range tc.AggregateArgs { if arg.IsScalar { - args[i] = arg.Argument.Value + args[i] = arg.Argument.FuncArg() continue } diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index ec1ab2e..c296232 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -208,14 +208,10 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - if lit, ok := arg.Value.(expr.Literal); ok { - checkNullability(t, lit, arg.Type) - } + checkNullability(t, arg.Value, arg.Type) } assert.NotNil(t, testFile.TestCases[0].Result.Value) - if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { - checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) - } + checkNullability(t, testFile.TestCases[0].Result.Value, testFile.TestCases[0].Result.Type) }) } } @@ -431,9 +427,7 @@ sum((9223372036854775806, 1, 1, 1, 1, 10000000000)::i64) [overflow:ERROR] = ", } assert.Equal(t, newFloat32List(1, 2, 3), tc.AggregateArgs[0].Argument.Value) - if lit, ok := tc.AggregateArgs[0].Argument.Value.(expr.Literal); ok { - assert.Equal(t, listType, lit.GetType()) - } + assert.Equal(t, listType, tc.AggregateArgs[0].Argument.Value.GetType()) assert.Equal(t, "fp64", tc.Result.Type.String()) assert.Equal(t, literal.NewFloat64(2, false), tc.Result.Value) assert.Equal(t, AggregateFuncType, tc.FuncType) diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index 38f6693..74b23ad 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -646,7 +646,7 @@ func (v *TestCaseVisitor) VisitDecimalArg(ctx *baseparser.DecimalArgContext) int func (v *TestCaseVisitor) VisitEnumArg(ctx *baseparser.EnumArgContext) interface{} { identifier := ctx.Identifier().GetText() - return &CaseLiteral{Value: types.Enum(identifier), ValueText: identifier, Type: types.CommonEnumType} + return &CaseLiteral{ValueText: identifier, Type: types.CommonEnumType} } func (v *TestCaseVisitor) VisitPrecisionTimeArg(ctx *baseparser.PrecisionTimeArgContext) interface{} { From 4e71758f9feec49051177becb290e1e696b1ec3c Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 14:42:52 -0400 Subject: [PATCH 04/24] refactor(parser): widen CaseLiteral.Value to types.FuncArg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enum args (YEAR::enum) are a valid FunctionArgument in the substrait proto — siblings of expression literals, not subtypes. types.Enum can't implement expr.Literal because there's no Expression.Literal proto variant for enums; they appear as FunctionArgument.enum (a string field). types.FuncArg is the right interface: it covers all three FunctionArgument kinds (value/literal, type, enum). This reverts the FuncArg() helper method added in the previous commit in favour of the simpler direct field access. Co-Authored-By: Claude Sonnet 4.6 --- testcases/parser/nodes.go | 24 ++++++++++-------------- testcases/parser/parse_test.go | 12 +++++++++--- testcases/parser/visitor.go | 2 +- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 02ba07b..cba440d 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -23,7 +23,7 @@ const ( type CaseLiteral struct { Type types.Type ValueText string - Value expr.Literal + Value types.FuncArg SubstraitError *SubstraitError } @@ -34,17 +34,10 @@ func (c *CaseLiteral) String() string { if c.Value == nil { return "NULL" } - return literalToString(c.Value) + "::" + c.Type.String() -} - -// FuncArg returns the value of this literal as a types.FuncArg suitable for -// passing to a function builder. Enum args (Type == CommonEnumType, Value nil) -// are constructed from ValueText; all other args return Value directly. -func (c *CaseLiteral) FuncArg() types.FuncArg { - if _, ok := c.Type.(*types.EnumType); ok { - return types.Enum(c.ValueText) + if lit, ok := c.Value.(expr.Literal); ok { + return literalToString(lit) + "::" + c.Type.String() } - return c.Value + return c.ValueText + "::" + c.Type.String() } func literalToString(literal expr.Literal) string { @@ -86,7 +79,10 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - return c.Value.ValueString() + "::" + c.Type.String() + if lit, ok := c.Value.(expr.Literal); ok { + return lit.ValueString() + "::" + c.Type.String() + } + return c.ValueText + "::" + c.Type.String() } // updateLiteralType updates the type of the literal CaseLiteral.Value to use the CaseLiteral.Type @@ -359,7 +355,7 @@ func (tc *TestCase) GetScalarFunctionInvocation(reg *expr.ExtensionRegistry, fun id := tc.ID() args := make([]types.FuncArg, len(tc.Args)) for i, arg := range tc.Args { - args[i] = arg.FuncArg() + args[i] = arg.Value } invocation, err := expr.NewScalarFunc(*reg, id, tc.GetFunctionOptions(), args...) @@ -449,7 +445,7 @@ func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, baseSchema := types.NewRecordTypeFromTypes(tc.getAggregateFuncTableSchema()) for i, arg := range tc.AggregateArgs { if arg.IsScalar { - args[i] = arg.Argument.FuncArg() + args[i] = arg.Argument.Value continue } diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index c296232..ec1ab2e 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -208,10 +208,14 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - checkNullability(t, arg.Value, arg.Type) + if lit, ok := arg.Value.(expr.Literal); ok { + checkNullability(t, lit, arg.Type) + } } assert.NotNil(t, testFile.TestCases[0].Result.Value) - checkNullability(t, testFile.TestCases[0].Result.Value, testFile.TestCases[0].Result.Type) + if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { + checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) + } }) } } @@ -427,7 +431,9 @@ sum((9223372036854775806, 1, 1, 1, 1, 10000000000)::i64) [overflow:ERROR] = ", } assert.Equal(t, newFloat32List(1, 2, 3), tc.AggregateArgs[0].Argument.Value) - assert.Equal(t, listType, tc.AggregateArgs[0].Argument.Value.GetType()) + if lit, ok := tc.AggregateArgs[0].Argument.Value.(expr.Literal); ok { + assert.Equal(t, listType, lit.GetType()) + } assert.Equal(t, "fp64", tc.Result.Type.String()) assert.Equal(t, literal.NewFloat64(2, false), tc.Result.Value) assert.Equal(t, AggregateFuncType, tc.FuncType) diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index 74b23ad..38f6693 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -646,7 +646,7 @@ func (v *TestCaseVisitor) VisitDecimalArg(ctx *baseparser.DecimalArgContext) int func (v *TestCaseVisitor) VisitEnumArg(ctx *baseparser.EnumArgContext) interface{} { identifier := ctx.Identifier().GetText() - return &CaseLiteral{ValueText: identifier, Type: types.CommonEnumType} + return &CaseLiteral{Value: types.Enum(identifier), ValueText: identifier, Type: types.CommonEnumType} } func (v *TestCaseVisitor) VisitPrecisionTimeArg(ctx *baseparser.PrecisionTimeArgContext) interface{} { From 6713850f55f1236b8520082501c95559c246ea19 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 15:50:55 -0400 Subject: [PATCH 05/24] refactor(parser): remove WithType from VisitDecimalArg Scalar decimal args are already normalized by updateLiteralType in VisitArguments, so applying WithType directly in VisitDecimalArg is redundant. Keep this PR focused on enum arg support. Co-Authored-By: Claude Sonnet 4.6 --- testcases/parser/parse_test.go | 2 +- testcases/parser/visitor.go | 8 +------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index ec1ab2e..b126c28 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -772,7 +772,7 @@ func TestParseTestWithBadScalarTests(t *testing.T) { {"add(123::fp32, 1.4E+::fp32) = 123::fp32", 18, "no viable alternative at input '1.4E'"}, {"add(123::fp32, 3.E.5::fp32) = 123::fp32", 17, "no viable alternative at input '3.E'"}, {"f1((1, 2, 3, 4)::i64) = 10::fp64", 0, "expected scalar testcase based on test file header, but got aggregate function testcase"}, - {"add(4.53::dec<1, 0>, 0.25::dec<2, 2>) = 0.78::dec<5, 2>", 0, "Visit error at line 5: invalid decimal arg number 4.53 exceeds target scale 0"}, + {"add(4.53::dec<1, 0>, 0.25::dec<2, 2>) = 0.78::dec<5, 2>", 0, "Visit error at line 5: invalid argument number 4.53"}, } for _, test := range tests { t.Run(test.testCaseStr, func(t *testing.T) { diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index 38f6693..f130530 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -634,14 +634,8 @@ func (v *TestCaseVisitor) VisitDecimalArg(ctx *baseparser.DecimalArgContext) int decimal, err := literal.NewDecimalFromString(ctx.NumericLiteral().GetText(), decType.GetNullability() == types.NullabilityNullable) if err != nil { v.ErrorListener.ReportVisitError(ctx, err) - return &CaseLiteral{ValueText: ctx.NumericLiteral().GetText(), Type: decType} } - typed, err := decimal.(expr.WithTypeLiteral).WithType(decType) - if err != nil { - v.ErrorListener.ReportVisitError(ctx, fmt.Errorf("invalid decimal arg %v", err)) - return &CaseLiteral{ValueText: ctx.NumericLiteral().GetText(), Type: decType} - } - return &CaseLiteral{Value: typed, ValueText: ctx.NumericLiteral().GetText(), Type: decType} + return &CaseLiteral{Value: decimal, ValueText: ctx.NumericLiteral().GetText(), Type: decType} } func (v *TestCaseVisitor) VisitEnumArg(ctx *baseparser.EnumArgContext) interface{} { From 0abf3eddcc2f6609d2af21ae87db245ceb5d4f70 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 15:59:58 -0400 Subject: [PATCH 06/24] refactor(parser): remove string-to-enum fallback from GetScalarFunctionInvocation normalizeArgsForVariant and enumSubstitutedArgTypes existed to handle old test files that represented enum options as string literals (e.g. 'YEAR'::str). v0.87.0 test files use the proper YEAR::enum syntax, which VisitEnumArg now handles natively, so these workarounds are no longer needed. Co-Authored-By: Claude Sonnet 4.6 --- testcases/parser/nodes.go | 70 +++------------------------------------ 1 file changed, 4 insertions(+), 66 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index cba440d..e269997 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -363,79 +363,17 @@ func (tc *TestCase) GetScalarFunctionInvocation(reg *expr.ExtensionRegistry, fun return invocation, nil } - // exact match not found, try to find a function that matches with function parameter type "any". - // Also try substituting string-typed args with CommonEnumType, to handle test cases that represent - // enum options as string literals (e.g. 'YEAR'::str for extract). - argTypes := tc.GetArgTypes() - enumArgTypes, hasEnumFallback := enumSubstitutedArgTypes(argTypes) + // exact match not found, try to find a function that matches with function parameter type "any" funcVariants := funcRegistry.GetScalarFunctions(tc.FuncName, len(args)) for _, function := range funcVariants { - if function.ID().URN != id.URN { - continue - } - isMatch, err1 := function.Match(argTypes) - if (err1 != nil || !isMatch) && hasEnumFallback { - isMatch, err1 = function.Match(enumArgTypes) - } - if err1 == nil && isMatch { - normalizedArgs := normalizeArgsForVariant(function, args) - return expr.NewScalarFunc(*reg, function.ID(), tc.GetFunctionOptions(), normalizedArgs...) + isMatch, err1 := function.Match(tc.GetArgTypes()) + if err1 == nil && isMatch && function.ID().URN == id.URN { + return expr.NewScalarFunc(*reg, function.ID(), tc.GetFunctionOptions(), args...) } } return nil, fmt.Errorf("%w: no matching function found or %s", substraitgo.ErrNotFound, id) } -// normalizeArgsForVariant converts string-typed args to enum values at positions -// where the given function variant declares an EnumArg. Test cases represent -// enum options as string literals (e.g. 'YEAR'::str for extract). -func normalizeArgsForVariant(variant extensions.FunctionVariant, args []types.FuncArg) []types.FuncArg { - params := variant.Args() - out := make([]types.FuncArg, len(args)) - copy(out, args) - for i, param := range params { - if i >= len(args) { - break - } - if _, isEnum := param.(extensions.EnumArg); !isEnum { - continue - } - lit, ok := args[i].(expr.Literal) - if !ok { - continue - } - strLit, ok := lit.(*expr.PrimitiveLiteral[string]) - if !ok { - continue - } - out[i] = types.Enum(strLit.Value) - } - return out -} - -// enumSubstitutedArgTypes returns a copy of argTypes where StringType entries are -// replaced with CommonEnumType, and reports whether any substitution was made. -func enumSubstitutedArgTypes(argTypes []types.Type) ([]types.Type, bool) { - hasString := false - for _, t := range argTypes { - if _, ok := t.(*types.StringType); ok { - hasString = true - break - } - } - if !hasString { - return argTypes, false - } - out := make([]types.Type, len(argTypes)) - for i, t := range argTypes { - if _, ok := t.(*types.StringType); ok { - out[i] = types.CommonEnumType - } else { - out[i] = t - } - } - return out, true -} - func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, funcRegistry functions.FunctionRegistry) (*expr.AggregateFunction, error) { if tc.FuncType != AggregateFuncType { return nil, fmt.Errorf("not an aggregate function testcase") From 8a18d596f07fddc011f00713a6d21728af9e58e1 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 16:32:30 -0400 Subject: [PATCH 07/24] chore: skip std_dev/variance tests and revert getAggregateFuncTableSchema TODO(#223): these test files are skipped until the compact table format and enum arg schema issues are resolved. Co-Authored-By: Claude Sonnet 4.6 --- testcases/parser/nodes.go | 15 +++------------ testcases/parser/parse_test.go | 3 +-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index e269997..bd6aebb 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -267,19 +267,10 @@ func (tc *TestCase) getAggregateFuncArgTypes() []types.Type { } func (tc *TestCase) getAggregateFuncTableSchema() []types.Type { - var maxColIdx int32 = -1 - for _, arg := range tc.AggregateArgs { - if !arg.IsScalar && arg.ColumnIndex > maxColIdx { - maxColIdx = arg.ColumnIndex - } - } - if maxColIdx < 0 { - return nil - } - schemaTypes := make([]types.Type, maxColIdx+1) - for _, arg := range tc.AggregateArgs { + schemaTypes := make([]types.Type, len(tc.AggregateArgs)) + for i, arg := range tc.AggregateArgs { if !arg.IsScalar { - schemaTypes[arg.ColumnIndex] = arg.ColumnType + schemaTypes[i] = arg.ColumnType } } return schemaTypes diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index b126c28..bab6bcc 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -921,8 +921,7 @@ func TestLoadAllSubstraitTestFiles(t *testing.T) { switch filePath { case "tests/cases/arithmetic/std_dev.test", "tests/cases/arithmetic/variance.test": - // TODO: these files use single-column compact format ((v1, v2, ..., vn)) which - // is parsed as 1 row with n columns, but the tests expect n rows with 1 column. + // TODO(#223): skipping for now until resolved t.Skip("Skipping tests with single-column compact aggregate format") case "tests/cases/list/all_match.test", "tests/cases/list/any_match.test", From 4e0469ba7c8b9160fb314193e1364e3233919e72 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 16:43:45 -0400 Subject: [PATCH 08/24] fix: EnumType.ShortString() should return "req" per substrait spec Co-Authored-By: Claude Sonnet 4.6 --- types/types.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/types.go b/types/types.go index a13f5f8..bb0e200 100644 --- a/types/types.go +++ b/types/types.go @@ -625,7 +625,7 @@ func (e *EnumType) MatchWithoutNullability(ot Type) bool { } func (e *EnumType) ShortString() string { - return "enum" + return "req" } func (e *EnumType) GetNullability() Nullability { From 10e28f1b4ac9f4b913f675e198750976b41e9d27 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 16:49:15 -0400 Subject: [PATCH 09/24] fix: getArgTypes returns CommonEnumType for enum args instead of nil Removes the hasNilType guard in tests since enum arg types are now correctly reflected in function invocation arg types. Co-Authored-By: Claude Sonnet 4.6 --- expr/functions.go | 2 ++ testcases/parser/parse_test.go | 21 ++------------------- 2 files changed, 4 insertions(+), 19 deletions(-) diff --git a/expr/functions.go b/expr/functions.go index 4b71040..ed688ac 100644 --- a/expr/functions.go +++ b/expr/functions.go @@ -368,6 +368,8 @@ func getArgTypes(args []types.FuncArg) []types.Type { argTypes := make([]types.Type, len(args)) for i, arg := range args { switch a := arg.(type) { + case types.Enum: + argTypes[i] = types.CommonEnumType case Expression: argTypes[i] = a.GetType() case types.Type: diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index bab6bcc..1ea6502 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -948,30 +948,13 @@ func testGetFunctionInvocation(t *testing.T, tc *TestCase, reg *expr.ExtensionRe invocation, err := tc.GetScalarFunctionInvocation(reg, registry) require.NoError(t, err, "GetScalarFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) - argTypes := invocation.GetArgTypes() - // Enum args appear as nil in invocation arg types since types.Enum has no GetType(); - // skip the comparison when enum args are present. - if !hasNilType(argTypes) { - require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) - } + require.Equal(t, tc.GetArgTypes(), invocation.GetArgTypes(), "unexpected arg types in test case: %s", tc.CompoundFunctionName()) case AggregateFuncType: invocation, err := tc.GetAggregateFunctionInvocation(reg, registry) require.NoError(t, err, "GetAggregateFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) - argTypes := invocation.GetArgTypes() - if !hasNilType(argTypes) { - require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) - } - } -} - -func hasNilType(types []types.Type) bool { - for _, t := range types { - if t == nil { - return true - } + require.Equal(t, tc.GetArgTypes(), invocation.GetArgTypes(), "unexpected arg types in test case: %s", tc.CompoundFunctionName()) } - return false } func listFiles(embedFs embed.FS, root string) ([]string, error) { From 7622e1890dddc5ba13d2a0ad877d5172901235a4 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 17:30:48 -0400 Subject: [PATCH 10/24] =?UTF-8?q?fix(parser):=20cleanup=20from=20review=20?= =?UTF-8?q?=E2=80=94=20drop=20stale=20TODO,=20extract=20literal()=20helper?= =?UTF-8?q?,=20assert=20enum=20type=20in=20test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- extensions/simple_extension.go | 2 +- testcases/parser/nodes.go | 11 +++++++++-- testcases/parser/parse_test.go | 4 +++- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/extensions/simple_extension.go b/extensions/simple_extension.go index 9ce3878..42abf82 100644 --- a/extensions/simple_extension.go +++ b/extensions/simple_extension.go @@ -48,7 +48,7 @@ type TypeVariationFunctions string const ( TypeVariationInheritsFuncs TypeVariationFunctions = "INHERITS" TypeVariationSeparateFuncs TypeVariationFunctions = "SEPARATE" - EnumTypeString = "req" // TODO change this to "enum" + EnumTypeString = "req" ) type TypeVariation struct { diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index bd6aebb..e913898 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -27,6 +27,12 @@ type CaseLiteral struct { SubstraitError *SubstraitError } +// literal returns the underlying Literal if Value is one, distinguishing from enum args. +func (c *CaseLiteral) literal() (expr.Literal, bool) { + lit, ok := c.Value.(expr.Literal) + return lit, ok +} + func (c *CaseLiteral) String() string { if c.SubstraitError != nil { return c.SubstraitError.String() @@ -34,7 +40,7 @@ func (c *CaseLiteral) String() string { if c.Value == nil { return "NULL" } - if lit, ok := c.Value.(expr.Literal); ok { + if lit, ok := c.literal(); ok { return literalToString(lit) + "::" + c.Type.String() } return c.ValueText + "::" + c.Type.String() @@ -79,7 +85,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - if lit, ok := c.Value.(expr.Literal); ok { + if lit, ok := c.literal(); ok { return lit.ValueString() + "::" + c.Type.String() } return c.ValueText + "::" + c.Type.String() @@ -89,6 +95,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { // Parser creates a literal with a type using existing util functions. // For ParameterizedTypes utils functions use minimum required values for the parameters. // This function changes the type to use requested type, so that the function invocation object is created correctly. +// Enum args are excluded: CommonEnumType has no parameters, so they return early. func (c *CaseLiteral) updateLiteralType() error { if len(c.Type.GetParameters()) == 0 { return nil diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 1ea6502..dcb7cc3 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -208,8 +208,10 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - if lit, ok := arg.Value.(expr.Literal); ok { + if lit, ok := arg.literal(); ok { checkNullability(t, lit, arg.Type) + } else { + assert.Equal(t, types.CommonEnumType, arg.Type) } } assert.NotNil(t, testFile.TestCases[0].Result.Value) From dff6d3fe21c31bef6113f76701860fea9456187b Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Thu, 9 Apr 2026 17:38:31 -0400 Subject: [PATCH 11/24] fix(parser): use literal() helper consistently, document enum arg limitations Co-Authored-By: Claude Opus 4.6 (1M context) --- testcases/parser/nodes.go | 2 ++ testcases/parser/parse_test.go | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index e913898..04fe492 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -409,6 +409,8 @@ func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, return nil, fmt.Errorf("%w: no matching function found or %s", substraitgo.ErrNotFound, id) } +// GetAggregateColumnsData returns column data for aggregate test cases. +// Enum args in aggregate functions are not yet supported (#223). func (tc *TestCase) GetAggregateColumnsData() ([][]expr.Literal, error) { if tc.FuncType != AggregateFuncType { return nil, fmt.Errorf("expected function type %v, but got %v", AggregateFuncType, tc.FuncType) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index dcb7cc3..afd57ed 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -215,7 +215,7 @@ func TestParseTestWithVariousTypes(t *testing.T) { } } assert.NotNil(t, testFile.TestCases[0].Result.Value) - if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { + if resultLit, ok := testFile.TestCases[0].Result.literal(); ok { checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) } }) From e518a408084f61d33bdf9f5ffa312e78eb6386f3 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:03:58 -0400 Subject: [PATCH 12/24] chore(testcases): update std_dev/variance skip to reference upstream fix The single-column compact table format used in these test files was corrected in substrait-io/substrait#1043, released in v0.88.0. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/parse_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 96e26e3..0db3663 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -945,8 +945,9 @@ func TestLoadAllSubstraitTestFiles(t *testing.T) { switch filePath { case "tests/cases/arithmetic/std_dev.test", "tests/cases/arithmetic/variance.test": - // TODO(#223): skipping for now until resolved - t.Skip("Skipping tests with single-column compact aggregate format") + // Skipping: upstream test files use an invalid single-column compact format, + // fixed in substrait v0.88.0 (substrait-io/substrait#1043). + t.Skip("Skipping until substrait dependency is updated to v0.88.0+") case "tests/cases/list/all_match.test", "tests/cases/list/any_match.test", "tests/cases/list/filter.test", From 2aecefa9a9266d82b9a343017f2ea0f731dd9207 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:12:54 -0400 Subject: [PATCH 13/24] chore(testcases): remove stale #223 comment and clarify nil-type workarounds Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 1 - testcases/parser/visitor.go | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 04fe492..8c66763 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -410,7 +410,6 @@ func (tc *TestCase) GetAggregateFunctionInvocation(reg *expr.ExtensionRegistry, } // GetAggregateColumnsData returns column data for aggregate test cases. -// Enum args in aggregate functions are not yet supported (#223). func (tc *TestCase) GetAggregateColumnsData() ([][]expr.Literal, error) { if tc.FuncType != AggregateFuncType { return nil, fmt.Errorf("expected function type %v, but got %v", AggregateFuncType, tc.FuncType) diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index 53e6bb1..d647da0 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -805,7 +805,8 @@ func (v *TestCaseVisitor) VisitLiteral(ctx *baseparser.LiteralContext) interface if ctx.NumericLiteral() != nil { if v.getLiteralTypeInContext() == nil { - // in compactAggregateFuncCall context, the type is not set, full schema of table may not be available + // Type is unavailable when parsing table rows in aggregate contexts; + // store as string until the column type is resolved. return literal.NewString(ctx.NumericLiteral().GetText(), false) } value := v.getLiteralFromString(ctx, ctx.NumericLiteral().GetText(), v.getLiteralTypeInContext()) @@ -821,7 +822,8 @@ func (v *TestCaseVisitor) VisitLiteral(ctx *baseparser.LiteralContext) interface if ctx.NullLiteral() != nil { nullType := v.getLiteralTypeInContext() if nullType == nil { - // Use a dummy type for null literal. This happens in AggregateFuncCall context, where type is not set + // Type is unavailable when parsing table rows in aggregate contexts; + // use a nullable decimal as a placeholder until the column type is resolved. nullType = &types.DecimalType{Precision: 38, Scale: 0, Nullability: types.NullabilityNullable} } return expr.NewNullLiteral(nullType) From f9f5fa8f5de95f3fccbc56a21b9458240c95546c Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:29:19 -0400 Subject: [PATCH 14/24] test(testcases): add TestParseEnumArg to cover enum arg parsing and String() Also fixes CaseLiteral.String() to render enum args as "VALUE::enum" rather than "VALUE::" (CommonEnumType.Name is empty). Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 3 ++- testcases/parser/parse_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 8c66763..1ae2d8d 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -43,7 +43,8 @@ func (c *CaseLiteral) String() string { if lit, ok := c.literal(); ok { return literalToString(lit) + "::" + c.Type.String() } - return c.ValueText + "::" + c.Type.String() + // Enum args use CommonEnumType whose String() is empty; render as "enum" + return c.ValueText + "::enum" } func literalToString(literal expr.Literal) string { diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 0db3663..34d3a81 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -934,6 +934,35 @@ func TestParseTestCaseFile(t *testing.T) { assert.Len(t, testFile.TestCases, 13) } +func TestParseEnumArg(t *testing.T) { + header := makeHeader("v1.0", "/extensions/functions_datetime.yaml") + tests := "# timestamps\nextract(YEAR::enum, '2016-12-31T13:30:15'::ts) = 2016::i64\n" + testFile, err := ParseTestCasesFromString(header + tests) + require.NoError(t, err) + require.Len(t, testFile.TestCases, 1) + + tc := testFile.TestCases[0] + require.Len(t, tc.Args, 2) + + // Enum arg has CommonEnumType and the identifier as ValueText + enumArg := tc.Args[0] + assert.Equal(t, types.CommonEnumType, enumArg.Type) + assert.Equal(t, "YEAR", enumArg.ValueText) + + // String() on an enum CaseLiteral uses ValueText, not literalToString + assert.Equal(t, "YEAR::enum", enumArg.String()) + + // The test case string representation round-trips correctly + assert.Equal(t, "extract(YEAR::enum, '2016-12-31T13:30:15'::timestamp) = 2016::i64", tc.String()) + + // Function invocation resolves correctly + reg, funcRegistry := functions.NewExtensionAndFunctionRegistries(extensions.GetDefaultCollectionWithNoError()) + invocation, err := tc.GetScalarFunctionInvocation(®, funcRegistry) + require.NoError(t, err) + assert.Equal(t, tc.ID().URN, invocation.ID().URN) + assert.Equal(t, []types.Type{types.CommonEnumType, &types.TimestampType{Nullability: types.NullabilityRequired}}, invocation.GetArgTypes()) +} + func TestLoadAllSubstraitTestFiles(t *testing.T) { got := substrait.GetSubstraitTestsFS() filePaths, err := listFiles(got, ".") From 37d30e25c6ed61ef72cd84a39519c179b76653fc Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:43:23 -0400 Subject: [PATCH 15/24] refactor(testcases): inline literal() helper Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 10 ++-------- testcases/parser/parse_test.go | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 1ae2d8d..1069ebc 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -27,12 +27,6 @@ type CaseLiteral struct { SubstraitError *SubstraitError } -// literal returns the underlying Literal if Value is one, distinguishing from enum args. -func (c *CaseLiteral) literal() (expr.Literal, bool) { - lit, ok := c.Value.(expr.Literal) - return lit, ok -} - func (c *CaseLiteral) String() string { if c.SubstraitError != nil { return c.SubstraitError.String() @@ -40,7 +34,7 @@ func (c *CaseLiteral) String() string { if c.Value == nil { return "NULL" } - if lit, ok := c.literal(); ok { + if lit, ok := c.Value.(expr.Literal); ok { return literalToString(lit) + "::" + c.Type.String() } // Enum args use CommonEnumType whose String() is empty; render as "enum" @@ -86,7 +80,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - if lit, ok := c.literal(); ok { + if lit, ok := c.Value.(expr.Literal); ok { return lit.ValueString() + "::" + c.Type.String() } return c.ValueText + "::" + c.Type.String() diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 34d3a81..9642fe1 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -208,14 +208,14 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - if lit, ok := arg.literal(); ok { + if lit, ok := arg.Value.(expr.Literal); ok { checkNullability(t, lit, arg.Type) } else { assert.Equal(t, types.CommonEnumType, arg.Type) } } assert.NotNil(t, testFile.TestCases[0].Result.Value) - if resultLit, ok := testFile.TestCases[0].Result.literal(); ok { + if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) } }) From 8d3d47855e8febda495863b97f3b7dd33fce8254 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:52:50 -0400 Subject: [PATCH 16/24] fix(testcases): fix enum rendering in String/AsAggregateArgumentString, add coverage - Fix CaseLiteral.String() and AsAggregateArgumentString() to render enum args as "VALUE::enum" rather than "VALUE::" since CommonEnumType.Name is empty - Add enum case to TestParseTestWithVariousTypes and TestParseAggregateTestWithVariousTypes - Strengthen result literal assertion in TestParseTestWithVariousTypes Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 2 +- testcases/parser/parse_test.go | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 1069ebc..364e1ca 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -83,7 +83,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { if lit, ok := c.Value.(expr.Literal); ok { return lit.ValueString() + "::" + c.Type.String() } - return c.ValueText + "::" + c.Type.String() + return c.ValueText + "::enum" } // updateLiteralType updates the type of the literal CaseLiteral.Value to use the CaseLiteral.Type diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 9642fe1..8d8f44d 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -189,6 +189,7 @@ func TestParseTestWithVariousTypes(t *testing.T) { {testCaseStr: "concat('abcd'::vchar<9>, Null::varchar<9>) = Null::vchar<9>", expTestStr: "concat('abcd'::varchar<9>, null::varchar?<9>) = null::varchar?<9>"}, {testCaseStr: "concat('abcd'::vchar<9>, Null::fixedchar<9>) = Null::fchar<9>", expTestStr: "concat('abcd'::varchar<9>, null::fixedchar?<9>) = null::fixedchar?<9>"}, {testCaseStr: "concat('abcd'::fbin<9>, Null::fixedbinary<9>) = Null::fbin<9>", expTestStr: "concat('0x61626364'::fixedbinary<9>, null::fixedbinary?<9>) = null::fixedbinary?<9>"}, + {testCaseStr: "extract(YEAR::enum, '2016-12-31T13:30:15'::ts) = 2016::i64", expTestStr: "extract(YEAR::enum, '2016-12-31T13:30:15'::timestamp) = 2016::i64"}, {testCaseStr: "f35('1991-01-01T01:02:03.456'::pts<3>) = '1991-01-01T01:02:30.123123'::precision_timestamp<3>", expTestStr: "f35('1991-01-01T01:02:03.456'::precision_timestamp<3>) = '1991-01-01T01:02:30.123'::precision_timestamp<3>"}, {testCaseStr: "f36('1991-01-01T01:02:03.456'::pts<3>, '1991-01-01T01:02:30.123123'::precision_timestamp<3>) = 123456::i64", expTestStr: "f36('1991-01-01T01:02:03.456'::precision_timestamp<3>, '1991-01-01T01:02:30.123'::precision_timestamp<3>) = 123456::i64"}, {testCaseStr: "f37('1991-01-01T01:02:03.123456'::pts<6>, '1991-01-01T04:05:06.456'::precision_timestamp<6>) = 123456::i64", expTestStr: "f37('1991-01-01T01:02:03.123456'::precision_timestamp<6>, '1991-01-01T04:05:06.456'::precision_timestamp<6>) = 123456::i64"}, @@ -214,10 +215,9 @@ func TestParseTestWithVariousTypes(t *testing.T) { assert.Equal(t, types.CommonEnumType, arg.Type) } } - assert.NotNil(t, testFile.TestCases[0].Result.Value) - if resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal); ok { - checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) - } + resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal) + require.True(t, ok, "result should be a literal, got %T", testFile.TestCases[0].Result.Value) + checkNullability(t, resultLit, testFile.TestCases[0].Result.Type) }) } } @@ -896,6 +896,8 @@ count(t1.col0) = 4::fp64`, expTestStr: "(('cat'), ('bat'), ('rat'), (null)) coun expTestStr: "f38(('1990-12-31T19:32:03.456')::precision_timestamp_tz?<3>) = '1990-12-31T08:30:00.000+00:00'::precision_timestamp_tz<3>"}, {testCaseStr: "f39(('1991-01-01T01:02:03.456+05:30', '1991-01-01T01:02:03.123456+05:30')::ptstz<6>) = '1991-01-01T00:00:00+15:30'::ptstz<6>", expTestStr: "f39(('1990-12-31T19:32:03.456', '1990-12-31T19:32:03.123456')::precision_timestamp_tz<6>) = '1990-12-31T08:30:00.000+00:00'::precision_timestamp_tz<6>"}, + {testCaseStr: "((1.0), (2.0), (3.0)) std_dev(SAMPLE::enum, col0::fp32) = 1.0::fp32?", + expTestStr: "((1), (2), (3)) std_dev(SAMPLE::enum, col0::fp32) = 1::fp32?"}, } for _, test := range tests { t.Run(test.testCaseStr, func(t *testing.T) { From fa6bb7614099e32649cd6c72b466aa3964785d23 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:54:28 -0400 Subject: [PATCH 17/24] chore: restore original comments in visitor.go to keep diff minimal Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/visitor.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/testcases/parser/visitor.go b/testcases/parser/visitor.go index d647da0..53e6bb1 100644 --- a/testcases/parser/visitor.go +++ b/testcases/parser/visitor.go @@ -805,8 +805,7 @@ func (v *TestCaseVisitor) VisitLiteral(ctx *baseparser.LiteralContext) interface if ctx.NumericLiteral() != nil { if v.getLiteralTypeInContext() == nil { - // Type is unavailable when parsing table rows in aggregate contexts; - // store as string until the column type is resolved. + // in compactAggregateFuncCall context, the type is not set, full schema of table may not be available return literal.NewString(ctx.NumericLiteral().GetText(), false) } value := v.getLiteralFromString(ctx, ctx.NumericLiteral().GetText(), v.getLiteralTypeInContext()) @@ -822,8 +821,7 @@ func (v *TestCaseVisitor) VisitLiteral(ctx *baseparser.LiteralContext) interface if ctx.NullLiteral() != nil { nullType := v.getLiteralTypeInContext() if nullType == nil { - // Type is unavailable when parsing table rows in aggregate contexts; - // use a nullable decimal as a placeholder until the column type is resolved. + // Use a dummy type for null literal. This happens in AggregateFuncCall context, where type is not set nullType = &types.DecimalType{Precision: 38, Scale: 0, Nullability: types.NullabilityNullable} } return expr.NewNullLiteral(nullType) From 7da3b4691da9e1d98dc4441c849f0ebb0474d372 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:57:15 -0400 Subject: [PATCH 18/24] chore: restore argTypes variable pattern in testGetFunctionInvocation Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/parse_test.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 8d8f44d..7c69eac 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -1004,12 +1004,14 @@ func testGetFunctionInvocation(t *testing.T, tc *TestCase, reg *expr.ExtensionRe invocation, err := tc.GetScalarFunctionInvocation(reg, registry) require.NoError(t, err, "GetScalarFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) - require.Equal(t, tc.GetArgTypes(), invocation.GetArgTypes(), "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + argTypes := invocation.GetArgTypes() + require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) case AggregateFuncType: invocation, err := tc.GetAggregateFunctionInvocation(reg, registry) require.NoError(t, err, "GetAggregateFunctionInvocation failed with error in test case: %s", tc.CompoundFunctionName()) require.Equal(t, tc.ID().URN, invocation.ID().URN) - require.Equal(t, tc.GetArgTypes(), invocation.GetArgTypes(), "unexpected arg types in test case: %s", tc.CompoundFunctionName()) + argTypes := invocation.GetArgTypes() + require.Equal(t, tc.GetArgTypes(), argTypes, "unexpected arg types in test case: %s", tc.CompoundFunctionName()) } } From d2134e2eb40cd7fce7a954469873e37f22120558 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 17:59:23 -0400 Subject: [PATCH 19/24] refactor(testcases): simplify TestParseEnumArg Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/parse_test.go | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index 7c69eac..c58213a 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -938,30 +938,17 @@ func TestParseTestCaseFile(t *testing.T) { func TestParseEnumArg(t *testing.T) { header := makeHeader("v1.0", "/extensions/functions_datetime.yaml") - tests := "# timestamps\nextract(YEAR::enum, '2016-12-31T13:30:15'::ts) = 2016::i64\n" - testFile, err := ParseTestCasesFromString(header + tests) + testFile, err := ParseTestCasesFromString(header + "# timestamps\nextract(YEAR::enum, '2016-12-31T13:30:15'::ts) = 2016::i64\n") require.NoError(t, err) require.Len(t, testFile.TestCases, 1) tc := testFile.TestCases[0] - require.Len(t, tc.Args, 2) - - // Enum arg has CommonEnumType and the identifier as ValueText - enumArg := tc.Args[0] - assert.Equal(t, types.CommonEnumType, enumArg.Type) - assert.Equal(t, "YEAR", enumArg.ValueText) - - // String() on an enum CaseLiteral uses ValueText, not literalToString - assert.Equal(t, "YEAR::enum", enumArg.String()) - - // The test case string representation round-trips correctly + assert.Equal(t, types.CommonEnumType, tc.Args[0].Type) assert.Equal(t, "extract(YEAR::enum, '2016-12-31T13:30:15'::timestamp) = 2016::i64", tc.String()) - // Function invocation resolves correctly reg, funcRegistry := functions.NewExtensionAndFunctionRegistries(extensions.GetDefaultCollectionWithNoError()) invocation, err := tc.GetScalarFunctionInvocation(®, funcRegistry) require.NoError(t, err) - assert.Equal(t, tc.ID().URN, invocation.ID().URN) assert.Equal(t, []types.Type{types.CommonEnumType, &types.TimestampType{Nullability: types.NullabilityRequired}}, invocation.GetArgTypes()) } From b50e9aee68cce0ca10d5afb3f2b925de085cc251 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Mon, 13 Apr 2026 18:06:30 -0400 Subject: [PATCH 20/24] test: cover types.Enum case in getArgTypes and EnumType.ShortString Co-Authored-By: Claude Sonnet 4.6 (1M context) --- expr/binding_test.go | 7 +++++++ types/types_test.go | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/expr/binding_test.go b/expr/binding_test.go index a553b15..1e2924a 100644 --- a/expr/binding_test.go +++ b/expr/binding_test.go @@ -108,3 +108,10 @@ func TestBoundExpressions(t *testing.T) { }) } } + +func TestGetArgTypesWithEnum(t *testing.T) { + f, err := NewScalarFunc(extReg, extractID, nil, types.Enum("YEAR"), + MustExpr(NewRootFieldRef(NewStructFieldRef(9), types.NewRecordTypeFromStruct(boringSchema.Struct)))) + assert.NoError(t, err) + assert.Equal(t, types.CommonEnumType, f.GetArgTypes()[0]) +} diff --git a/types/types_test.go b/types/types_test.go index 9e1247a..f5948c2 100644 --- a/types/types_test.go +++ b/types/types_test.go @@ -700,3 +700,7 @@ func TestStructTypeDepthFirstNameCount(t *testing.T) { }) } } + +func TestEnumTypeShortString(t *testing.T) { + assert.Equal(t, "req", CommonEnumType.ShortString()) +} From 9137a7721ef2ec1fa977367bdbca59173fc75378 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Tue, 14 Apr 2026 09:33:45 -0400 Subject: [PATCH 21/24] fix(testcases): remove unreachable Literal branch in AsAggregateArgumentString The non-list expr.Literal branch was dead code since AsAggregateArgumentString is only called for singleArgAggregateFuncCall column data, which is always a ListLiteral. Also strengthen aggregate arg type assertion in test per review feedback. Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 3 --- testcases/parser/parse_test.go | 6 +++--- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index 364e1ca..d9fc8e5 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -80,9 +80,6 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - if lit, ok := c.Value.(expr.Literal); ok { - return lit.ValueString() + "::" + c.Type.String() - } return c.ValueText + "::enum" } diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index c58213a..ad39f2d 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -433,9 +433,9 @@ sum((9223372036854775806, 1, 1, 1, 1, 10000000000)::i64) [overflow:ERROR] = ", } assert.Equal(t, newFloat32List(1, 2, 3), tc.AggregateArgs[0].Argument.Value) - if lit, ok := tc.AggregateArgs[0].Argument.Value.(expr.Literal); ok { - assert.Equal(t, listType, lit.GetType()) - } + lit, ok := tc.AggregateArgs[0].Argument.Value.(expr.Literal) + require.True(t, ok, "aggregate arg should be a literal, got %T", tc.AggregateArgs[0].Argument.Value) + assert.Equal(t, listType, lit.GetType()) assert.Equal(t, "fp64", tc.Result.Type.String()) assert.Equal(t, literal.NewFloat64(2, false), tc.Result.Value) assert.Equal(t, AggregateFuncType, tc.FuncType) From c4095ef9e39b9d85671dfe98b67e1f4d3ff89651 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Tue, 14 Apr 2026 09:36:27 -0400 Subject: [PATCH 22/24] docs(types): add comment explaining EnumType.ShortString returns "req" Co-Authored-By: Claude Sonnet 4.6 (1M context) --- types/types.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/types/types.go b/types/types.go index bb0e200..f366a7c 100644 --- a/types/types.go +++ b/types/types.go @@ -625,6 +625,8 @@ func (e *EnumType) MatchWithoutNullability(ot Type) bool { } func (e *EnumType) ShortString() string { + // Enum args use "req" as their compound function name key, matching the + // substrait spec's EnumTypeString constant in extensions/simple_extension.go. return "req" } From 3d43a74edaf8198498e45a308e60976694c97882 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Tue, 14 Apr 2026 09:39:39 -0400 Subject: [PATCH 23/24] fix(testcases): restore general fallback in AsAggregateArgumentString Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/nodes.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testcases/parser/nodes.go b/testcases/parser/nodes.go index d9fc8e5..f005f9d 100644 --- a/testcases/parser/nodes.go +++ b/testcases/parser/nodes.go @@ -80,7 +80,7 @@ func (c *CaseLiteral) AsAggregateArgumentString() string { } return "(" + strings.Join(elements, ", ") + ")::" + c.Type.String() } - return c.ValueText + "::enum" + return c.ValueText + "::" + c.Type.String() } // updateLiteralType updates the type of the literal CaseLiteral.Value to use the CaseLiteral.Type From 858423de7df10ae6a53fbacf94afdf079112efc9 Mon Sep 17 00:00:00 2001 From: Ben Bellick Date: Tue, 14 Apr 2026 09:42:55 -0400 Subject: [PATCH 24/24] refactor(testcases): use type switch for arg value assertion Co-Authored-By: Claude Sonnet 4.6 (1M context) --- testcases/parser/parse_test.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/testcases/parser/parse_test.go b/testcases/parser/parse_test.go index ad39f2d..7e77056 100644 --- a/testcases/parser/parse_test.go +++ b/testcases/parser/parse_test.go @@ -209,10 +209,13 @@ func TestParseTestWithVariousTypes(t *testing.T) { } for _, arg := range testFile.TestCases[0].Args { assert.NotNil(t, arg.Value) - if lit, ok := arg.Value.(expr.Literal); ok { - checkNullability(t, lit, arg.Type) - } else { + switch v := arg.Value.(type) { + case expr.Literal: + checkNullability(t, v, arg.Type) + case types.Enum: assert.Equal(t, types.CommonEnumType, arg.Type) + default: + t.Errorf("unexpected arg value type %T", v) } } resultLit, ok := testFile.TestCases[0].Result.Value.(expr.Literal)