From 11fa472d613582a6b9ce2bedea5de31b3e6eb86e Mon Sep 17 00:00:00 2001 From: malinjawi <171935807+malinjawi@users.noreply.github.com> Date: Tue, 12 May 2026 12:48:26 +0300 Subject: [PATCH] feat: add support for unresolved expressions --- dialects/tests/expressions_test.yaml | 1 + dialects/tests/types_test.yaml | 1 + grammar/FuncTestCaseParser.g4 | 1 + grammar/SubstraitLexer.g4 | 2 + grammar/SubstraitType.g4 | 1 + proto/substrait/algebra.proto | 30 +- proto/substrait/type.proto | 13 + site/docs/expressions/_config | 1 + site/docs/expressions/extended_expression.md | 8 + site/docs/expressions/unbound_expressions.md | 54 + site/docs/extensions/index.md | 3 + site/docs/types/type_classes.md | 7 + site/docs/types/type_parsing.md | 9 + site/docs/types/type_system.md | 2 + site/examples/README.md | 1 + site/examples/proto-textformat/README.md | 2 + .../unbound_named_projection.textproto | 58 ++ .../named_expression.textproto | 6 + .../scalar_function_unknown.textproto | 25 + .../antlr_parser/FuncTestCaseLexer.py | 895 ++++++++-------- .../antlr_parser/FuncTestCaseParser.py | 955 +++++++++--------- .../FuncTestCaseParserListener.py | 9 + .../antlr_parser/FuncTestCaseParserVisitor.py | 5 + tests/coverage/extensions.py | 1 + tests/test_extensions.py | 1 + tests/test_proto_example_validator.py | 18 +- tests/test_unbound_expressions.py | 112 ++ tests/type/antlr_parser/SubstraitLexer.py | 429 ++++---- tests/type/antlr_parser/SubstraitTypeLexer.py | 429 ++++---- .../antlr_parser/SubstraitTypeListener.py | 9 + .../type/antlr_parser/SubstraitTypeParser.py | 861 ++++++++-------- .../type/antlr_parser/SubstraitTypeVisitor.py | 5 + text/dialect_schema.yaml | 26 + 33 files changed, 2238 insertions(+), 1742 deletions(-) create mode 100644 site/docs/expressions/unbound_expressions.md create mode 100644 site/examples/proto-textformat/extended_expression/unbound_named_projection.textproto create mode 100644 site/examples/proto-textformat/unbound_expression/named_expression.textproto create mode 100644 site/examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto create mode 100644 tests/test_unbound_expressions.py diff --git a/dialects/tests/expressions_test.yaml b/dialects/tests/expressions_test.yaml index de48f4f66..57215120c 100644 --- a/dialects/tests/expressions_test.yaml +++ b/dialects/tests/expressions_test.yaml @@ -7,6 +7,7 @@ supported_expressions: - LITERAL - SELECTION - SCALAR_FUNCTION + - expression: NAMED_EXPRESSION - expression: CAST metadata: truncates_on_overflow: true diff --git a/dialects/tests/types_test.yaml b/dialects/tests/types_test.yaml index e8d2395bc..5a3b34086 100644 --- a/dialects/tests/types_test.yaml +++ b/dialects/tests/types_test.yaml @@ -9,6 +9,7 @@ dependencies: supported_types: - I8 - I16 + - UNKNOWN - type: I32 metadata: storage_bytes: 4 diff --git a/grammar/FuncTestCaseParser.g4 b/grammar/FuncTestCaseParser.g4 index b1df46d15..1235048d5 100644 --- a/grammar/FuncTestCaseParser.g4 +++ b/grammar/FuncTestCaseParser.g4 @@ -242,6 +242,7 @@ scalarType | dateType #date | intervalYearType #intervalYear | UUID isnull=QMark? #uuid + | Unknown isnull=QMark? #unknown | UserDefined Identifier isnull=QMark? #userDefined ; diff --git a/grammar/SubstraitLexer.g4 b/grammar/SubstraitLexer.g4 index 2e42c8ee0..050c3c0b3 100644 --- a/grammar/SubstraitLexer.g4 +++ b/grammar/SubstraitLexer.g4 @@ -116,6 +116,8 @@ Number : '-'? Int ; +Unknown: 'UNKNOWN'; + Identifier : ('A'..'Z' | '_' | '$') ('A'..'Z' | '_' | '$' | Digit)* ; diff --git a/grammar/SubstraitType.g4 b/grammar/SubstraitType.g4 index 1dea302d3..2611719e3 100644 --- a/grammar/SubstraitType.g4 +++ b/grammar/SubstraitType.g4 @@ -23,6 +23,7 @@ scalarType | Date #date | Interval_Year #intervalYear | UUID #uuid + | Unknown #unknown ; parameterizedType diff --git a/proto/substrait/algebra.proto b/proto/substrait/algebra.proto index 708fb66c4..f540c232c 100644 --- a/proto/substrait/algebra.proto +++ b/proto/substrait/algebra.proto @@ -1019,6 +1019,7 @@ message Expression { Lambda lambda = 15; LambdaInvocation lambda_invocation = 16; ExecutionContextVariable execution_context_variable = 17; + NamedExpression named_expression = 18; // deprecated: enum literals are only sensible in the context of // function arguments, for which FunctionArgument should now be @@ -1254,6 +1255,17 @@ message Expression { Nested.Struct arguments = 2; } + // A named expression that is not yet resolved to a positional reference or + // concrete expression. The names field is used to represent namespacing + // (e.g. qualifier and field name). Producers and consumers must share enough + // external context to resolve this expression before execution unless the + // consumer defines semantics for unresolved named expressions. Until + // resolved, a NamedExpression's type is Type.Unknown. + message NamedExpression { + repeated string names = 1; + substrait.extensions.AdvancedExtension advanced_extension = 10; + } + // A scalar function call. message ScalarFunction { // Points to a function_anchor defined in this plan, which must refer @@ -1271,6 +1283,9 @@ message Expression { // - Enum arguments must be bound using FunctionArgument.enum // followed by Enum.specified, with a string that case-insensitively // matches one of the allowed options. + // + // In a partially bound expression, Type.Unknown may stand in for any + // concrete type while binding value or type arguments. repeated FunctionArgument arguments = 4; // Options to specify behavior for corner cases, or leave behavior @@ -1279,7 +1294,8 @@ message Expression { repeated FunctionOption options = 5; // Must be set to the return type of the function, exactly as derived - // using the declaration in the extension. + // using the declaration in the extension. In a partially bound expression, + // this may be Type.Unknown if the concrete return type is unresolved. Type output_type = 3; // Deprecated; use arguments instead. @@ -1310,6 +1326,9 @@ message Expression { // - Enum arguments must be bound using FunctionArgument.enum // followed by Enum.specified, with a string that case-insensitively // matches one of the allowed options. + // + // In a partially bound expression, Type.Unknown may stand in for any + // concrete type while binding value or type arguments. repeated FunctionArgument arguments = 9; // Options to specify behavior for corner cases, or leave behavior @@ -1318,7 +1337,8 @@ message Expression { repeated FunctionOption options = 11; // Must be set to the return type of the function, exactly as derived - // using the declaration in the extension. + // using the declaration in the extension. In a partially bound expression, + // this may be Type.Unknown if the concrete return type is unresolved. Type output_type = 7; // Describes which part of the window function to perform within the @@ -1839,6 +1859,9 @@ message AggregateFunction { // - Optional enum arguments must be bound using FunctionArgument.enum // followed by either Enum.specified or Enum.unspecified. If specified, // the string must case-insensitively match one of the allowed options. + // + // In a partially bound expression, Type.Unknown may stand in for any + // concrete type while binding value or type arguments. repeated FunctionArgument arguments = 7; // Options to specify behavior for corner cases, or leave behavior @@ -1847,7 +1870,8 @@ message AggregateFunction { repeated FunctionOption options = 8; // Must be set to the return type of the function, exactly as derived - // using the declaration in the extension. + // using the declaration in the extension. In a partially bound expression, + // this may be Type.Unknown if the concrete return type is unresolved. Type output_type = 5; // Describes which part of the aggregation to perform within the context of diff --git a/proto/substrait/type.proto b/proto/substrait/type.proto index 9a4da4e97..53ebdd031 100644 --- a/proto/substrait/type.proto +++ b/proto/substrait/type.proto @@ -46,6 +46,13 @@ message Type { Map map = 28; Func func = 38; + // A placeholder type whose concrete type has not yet been resolved. + // Unknown may be used where a concrete type would normally appear in + // partially bound plans and expressions, and must be resolved to a + // concrete type before execution unless the consumer defines semantics for + // unknown-typed values. + Unknown unknown = 39; + UserDefined user_defined = 30; // Deprecated in favor of user_defined, which allows nullability and @@ -225,6 +232,12 @@ message Type { Nullability nullability = 3; } + message Unknown { + // Optional nullability constraint for this unknown type. If unspecified, + // both the concrete type and its nullability are unresolved. + Nullability nullability = 1; + } + message UserDefined { // References a type_anchor defined in the plan's extension declarations. uint32 type_reference = 1; diff --git a/site/docs/expressions/_config b/site/docs/expressions/_config index c07657ad3..8f023f1b5 100644 --- a/site/docs/expressions/_config +++ b/site/docs/expressions/_config @@ -1,5 +1,6 @@ arrange: - field_references.md + - unbound_expressions.md - scalar_functions.md - aggregate_functions.md - specialized_record_expressions.md diff --git a/site/docs/expressions/extended_expression.md b/site/docs/expressions/extended_expression.md index e7fb18e1d..77d68d759 100644 --- a/site/docs/expressions/extended_expression.md +++ b/site/docs/expressions/extended_expression.md @@ -23,3 +23,11 @@ For a message with multiple expressions, users may produce each Extended Express ## Function extensions Function extensions work the same for both Extended Expression and the original Expression defined in the Substrait protocol. + +## Partially Bound Expressions + +Extended Expression can also carry partially bound expressions for producers that do not yet know the full input schema. In this form, field-like references can be represented as `NamedExpression`, and any known-but-unresolved schema or expression types can use `unknown`. A consumer must bind these names and types before execution unless it defines its own unresolved-expression semantics. + +```protobuf +--8<-- "examples/proto-textformat/extended_expression/unbound_named_projection.textproto" +``` diff --git a/site/docs/expressions/unbound_expressions.md b/site/docs/expressions/unbound_expressions.md new file mode 100644 index 000000000..d7e86a0a9 --- /dev/null +++ b/site/docs/expressions/unbound_expressions.md @@ -0,0 +1,54 @@ +# Unbound Expressions + +Substrait normally represents bound relational expressions: field references are positional, value types are known, and function invocations identify implementations whose argument and return types have been derived. Some producers need to serialize expressions earlier in planning, before names and types have been resolved. + +An expression tree is partially bound when it contains either an [`unknown`](../types/type_classes.md#unknown-type) type or a `NamedExpression`. Consumers may validate and transform partially bound expressions, but must resolve them before execution unless they define their own semantics for unresolved names or unknown-typed values. + +This applies anywhere Substrait uses `Expression`, including both full `Plan` messages and `ExtendedExpression`. The examples below use `ExtendedExpression` because expression-only filter / projection APIs are a common motivating use case, not because partially bound expressions are limited to that entry point. + +## Detecting Partial Binding + +There is no separate "unbound expression" message. Instead, partially bound state is detected structurally: + +- If any expression, function argument, or schema field type is `unknown`, the expression is partially bound. +- If any expression contains `NamedExpression`, the expression is partially bound. + +This is the canonical way to distinguish fully bound expressions from partially bound expressions in Substrait. + +## Unknown Type + +The `unknown` type marks an expression whose concrete type is not known yet. It may be used anywhere a concrete type would normally be expected in a partially bound function call. If only the nullability is known, set the nullability field; otherwise leave it unspecified. + +## Named Expression + +`NamedExpression` represents a reference by name instead of ordinal position. The `names` field stores one or more namespace components, such as `["foo"]` for an unqualified name or `["orders", "amount"]` for a qualified name. Until resolved, a named expression's type is `unknown`. Resolution of these components is intentionally external to Substrait and must be understood by both producer and consumer. + +```protobuf +--8<-- "examples/proto-textformat/unbound_expression/named_expression.textproto" +``` + +## Function Example + +Partially bound function calls can use named expressions as value arguments and `unknown` as the output type when the return type cannot be derived yet. + +```protobuf +--8<-- "examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto" +``` + +## Extended Expression Protocols + +Expression-level APIs, such as filters and projections exchanged outside a full `Plan`, should use `ExtendedExpression`. This lets the producer include output names, any known input names, and extension declarations next to the expression tree. + +If the input names are known but their types are not, `base_schema` can contain fields with `unknown` types. If the function overload is also unresolved, the function can refer to the `extension:io.substrait:unknown` extension until a downstream binder replaces it with a concrete function reference and concrete output type. In that case, the referenced function name should use the normal Substrait function-signature form with `unknown` short names, such as `add:unknown_unknown`. + +```protobuf +--8<-- "examples/proto-textformat/extended_expression/unbound_named_projection.textproto" +``` + +Consumers that execute expressions must reject or bind away all `NamedExpression` and `unknown` types before execution unless they explicitly support unresolved semantics. A typical binder resolves `NamedExpression` values to `FieldReference`, replaces `unknown` input and output types with concrete types, and updates unresolved function references to concrete overloads. + +## Plans, ReadRel, and Dynamic Parameters + +Partially bound expressions may also appear inside a `Plan`. In that case, relational operators such as `ReadRel` still provide the surrounding schema context. If field names are known, `ReadRel.base_schema` remains the source of those names even before ordinal binding has happened. A downstream binder can use that schema to resolve `NamedExpression` values into positional `FieldReference`s. If names are known but types are not, `base_schema` can use `unknown` types until type resolution completes. + +`NamedExpression` is intentionally distinct from `DynamicParameter`. A `DynamicParameter` represents an externally supplied literal value, identified by `parameter_anchor` and resolved through `DynamicParameterBinding`. A `NamedExpression` represents an unresolved field-like or catalog-like reference that is expected to bind against schema or catalog context. Because these are different binding problems, this proposal keeps `DynamicParameterBinding` and `NamedExpression` separate. diff --git a/site/docs/extensions/index.md b/site/docs/extensions/index.md index a723a1e82..f98905a5a 100644 --- a/site/docs/extensions/index.md +++ b/site/docs/extensions/index.md @@ -115,8 +115,11 @@ A function signature uniquely identifies a function implementation within a sing | map<K,V> | map | | func<T->R>, func<(T1,...,TN)->R> | func | | any[\d]? | any | +| unknown | unknown | | user-defined type <name> | u!<name> | +The `unknown` short type is reserved for partially bound expressions. When a producer does not yet know the concrete overload of a function, it may use a placeholder signature such as `add:unknown_unknown` until a downstream binder resolves the argument and return types. + #### Examples | Function Signature | Function Name | diff --git a/site/docs/types/type_classes.md b/site/docs/types/type_classes.md index cf1a17068..224539f51 100644 --- a/site/docs/types/type_classes.md +++ b/site/docs/types/type_classes.md @@ -24,6 +24,13 @@ Simple type classes are those that don't support any form of configuration. For | date | A date within [1000-01-01..9999-12-31]. | `int32` days since `1970-01-01` | interval_year | Interval year to month. Supports a range of [-10,000..10,000] years with month precision (= [-120,000..120,000] months). Usually stored as separate integers for years and months, but only the total number of months is significant, i.e. `1y 0m` is considered equal to `0y 12m` or `1001y -12000m`. | `int32` years and `int32` months, with the added constraint that each component can never independently specify more than 10,000 years, even if the components have opposite signs (e.g. `-10000y 200000m` is **not** allowed) | uuid | A universally-unique identifier composed of 128 bits. Typically presented to users in the following hexadecimal format: `c48ffa9e-64f4-44cb-ae47-152b4e60e77b`. Any 128-bit value is allowed, without specific adherence to RFC4122. | 16-byte `binary` +| unknown | A placeholder for a type that has not been resolved yet. `unknown` may be used in partially bound expressions and can stand in for any concrete type during binding. It must be resolved before execution unless the consumer defines semantics for unknown-typed values. | n/a + +### Unknown Type + +The `unknown` type class is intended for producers that serialize expressions before all schema and catalog information is available. For example, a front end can represent `a + b` with unresolved named operands and an `unknown` result type, then a downstream binder can resolve `a` and `b` to positional field references and concrete types. + +`unknown` is not a wildcard for a fully bound executable plan. A plan that still contains `unknown` is partially bound. ### Compound Types diff --git a/site/docs/types/type_parsing.md b/site/docs/types/type_parsing.md index 0e0ac7b06..959fd7445 100644 --- a/site/docs/types/type_parsing.md +++ b/site/docs/types/type_parsing.md @@ -107,3 +107,12 @@ func<(any1, any2, any3) -> any4> ``` Function types use the arrow syntax (`->`) to separate parameter types from the return type. For multiple parameters, use parentheses to group the parameter types. See [Lambda Expressions](../expressions/lambda_expressions.md) for more details on lambda expressions and their usage. + +### Unknown Type + +The `unknown` type is written as `unknown` and may include the normal nullability marker: + +``` +unknown +unknown? +``` diff --git a/site/docs/types/type_system.md b/site/docs/types/type_system.md index eef7ff507..0cd25212a 100644 --- a/site/docs/types/type_system.md +++ b/site/docs/types/type_system.md @@ -15,3 +15,5 @@ Refer to [Type Parsing](type_parsing.md) for a description of the syntax used to !!! note "Note" Substrait employs a strict type system without any coercion rules. All changes in types must be made explicit via [cast expressions](../expressions/specialized_record_expressions.md). + + Partially bound expressions may use the [`unknown`](type_classes.md#unknown-type) type as a placeholder until a downstream binder resolves the concrete type. diff --git a/site/examples/README.md b/site/examples/README.md index fc5fe19dc..9a4f145d3 100644 --- a/site/examples/README.md +++ b/site/examples/README.md @@ -9,6 +9,7 @@ By storing examples as separate files instead of inline in markdown, we can easi ``` examples/ ├── extensions/ # Extension function examples (e.g., any types) +├── proto-textformat/ # Protobuf text format examples ├── types/ # User-defined type examples └── README.md # This file ``` diff --git a/site/examples/proto-textformat/README.md b/site/examples/proto-textformat/README.md index 6c265960e..f0385c3df 100644 --- a/site/examples/proto-textformat/README.md +++ b/site/examples/proto-textformat/README.md @@ -9,3 +9,5 @@ We use protobuf text format (textproto) rather than JSON for these examples beca - `lambda/` - Examples of `Expression.Lambda` messages - `lambda_invocation/` - Examples of `Expression.LambdaInvocation` messages - `field_reference/` - Examples of `Expression.FieldReference` messages +- `extended_expression/` - Examples of `ExtendedExpression` messages +- `unbound_expression/` - Examples of unresolved `Expression` messages diff --git a/site/examples/proto-textformat/extended_expression/unbound_named_projection.textproto b/site/examples/proto-textformat/extended_expression/unbound_named_projection.textproto new file mode 100644 index 000000000..0aa450cb8 --- /dev/null +++ b/site/examples/proto-textformat/extended_expression/unbound_named_projection.textproto @@ -0,0 +1,58 @@ +# message ExtendedExpression +# Arrow-style expression protocols should use ExtendedExpression so the message +# carries expression names and extension declarations with the expression tree. +version { + major_number: 0 + minor_number: 0 + patch_number: 0 + producer: "substrait" +} +extension_urns { + extension_urn_anchor: 1 + urn: "extension:io.substrait:unknown" +} +extensions { + extension_function { + extension_urn_reference: 1 + function_anchor: 1 + name: "add:unknown_unknown" + } +} +base_schema { + names: "a" + names: "b" + struct { + types { + unknown {} + } + types { + unknown {} + } + nullability: NULLABILITY_REQUIRED + } +} +referred_expr { + expression { + scalar_function { + function_reference: 1 + arguments { + value { + named_expression { + names: "a" + } + } + } + arguments { + value { + named_expression { + names: "b" + } + } + } + output_type { + unknown {} + } + } + } + output_names: "sum" +} diff --git a/site/examples/proto-textformat/unbound_expression/named_expression.textproto b/site/examples/proto-textformat/unbound_expression/named_expression.textproto new file mode 100644 index 000000000..bd923400b --- /dev/null +++ b/site/examples/proto-textformat/unbound_expression/named_expression.textproto @@ -0,0 +1,6 @@ +# message Expression +# An unresolved reference to a named expression, such as a column name entered +# before a schema has been bound. +named_expression { + names: "foo" +} diff --git a/site/examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto b/site/examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto new file mode 100644 index 000000000..28b5fca25 --- /dev/null +++ b/site/examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto @@ -0,0 +1,25 @@ +# message Expression +# A partially bound scalar function over unresolved named expressions. The +# function_reference is still plan-local and must be declared by the enclosing +# Plan or ExtendedExpression. The unknown output type records that concrete +# type derivation has not completed. +scalar_function { + function_reference: 1 + arguments { + value { + named_expression { + names: "a" + } + } + } + arguments { + value { + named_expression { + names: "b" + } + } + } + output_type { + unknown {} + } +} diff --git a/tests/coverage/antlr_parser/FuncTestCaseLexer.py b/tests/coverage/antlr_parser/FuncTestCaseLexer.py index 0eaf08bda..61a9b47d1 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseLexer.py +++ b/tests/coverage/antlr_parser/FuncTestCaseLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,125,1262,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, + 4,0,126,1272,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,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25, @@ -32,445 +32,449 @@ def serializedATN(): 7,114,2,115,7,115,2,116,7,116,2,117,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, - 1,0,4,0,265,8,0,11,0,12,0,266,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,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1,6,4, - 6,373,8,6,11,6,12,6,374,1,7,1,7,4,7,379,8,7,11,7,12,7,380,1,7,1, - 7,4,7,385,8,7,11,7,12,7,386,3,7,389,8,7,1,8,1,8,1,8,1,8,5,8,395, - 8,8,10,8,12,8,398,9,8,1,8,3,8,401,8,8,1,8,1,8,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,11,1,11, - 1,11,1,11,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,13,1,13,1,13,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,15,1,15,1,16,1,16,1,16,1,16,1,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,1,17,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,21,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,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1,22, - 1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,3,24, - 552,8,24,1,24,1,24,1,25,3,25,557,8,25,1,25,4,25,560,8,25,11,25,12, - 25,561,1,25,1,25,4,25,566,8,25,11,25,12,25,567,3,25,570,8,25,1,26, - 3,26,573,8,26,1,26,4,26,576,8,26,11,26,12,26,577,1,26,1,26,5,26, - 582,8,26,10,26,12,26,585,9,26,3,26,587,8,26,1,26,1,26,3,26,591,8, - 26,1,26,4,26,594,8,26,11,26,12,26,595,3,26,598,8,26,1,26,3,26,601, - 8,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,610,8,26,1,27,1,27, - 1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,621,8,27,1,28,1,28,1,28, - 1,28,1,28,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,4,30,644,8,30,11,30,12,30,645,3,30,648, - 8,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1,31,1,31,1,31, - 1,31,1,31,1,31,1,31,1,31,1,31,4,31,668,8,31,11,31,12,31,669,3,31, - 672,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,4,32,681,8,32,11,32, - 12,32,682,3,32,685,8,32,1,33,1,33,1,33,1,33,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,44,1,44,1,44,1,44,1,44,1,44,3,44,719, - 8,44,1,44,1,44,1,44,1,44,3,44,725,8,44,1,45,1,45,1,45,1,45,1,45, - 1,45,3,45,733,8,45,1,45,1,45,1,45,1,45,3,45,739,8,45,1,46,1,46,1, - 46,1,46,1,46,3,46,746,8,46,1,46,1,46,1,46,3,46,751,8,46,1,46,1,46, - 1,46,1,46,1,46,3,46,758,8,46,1,46,1,46,1,46,3,46,763,8,46,1,47,1, - 47,1,47,1,47,3,47,769,8,47,1,47,1,47,1,47,3,47,774,8,47,1,47,1,47, - 1,47,3,47,779,8,47,1,47,1,47,1,47,3,47,784,8,47,1,48,1,48,1,48,1, - 48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,5,49,797,8,49,10,49,12,49, - 800,9,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51,1,51, - 1,51,1,51,1,52,1,52,1,52,1,52,5,52,819,8,52,10,52,12,52,822,9,52, - 1,52,1,52,1,53,1,53,1,53,1,53,1,53,4,53,831,8,53,11,53,12,53,832, - 1,53,3,53,836,8,53,1,53,5,53,839,8,53,10,53,12,53,842,9,53,1,53, - 1,53,1,53,1,53,1,53,1,54,1,54,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,59,1,59, - 1,59,1,59,1,59,1,59,1,59,1,59,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,64,1,64,1,64,1,64,1,64, - 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,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,69,1,69,1,69,1,69,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,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,71,1,71,1,71,1,71,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,74,1,74,1,74,1,74,1,74,1,74,1,74,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,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,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,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,79, - 1,79,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,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1,84, - 1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,86,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,88,1,88,1,89,1,89,1,89,1,89, - 1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1,91, - 1,91,1,91,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1,94, - 1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1,96, - 1,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,99,1,99,1,99, - 1,100,1,100,1,100,1,101,1,101,1,102,1,102,1,103,1,103,1,104,1,104, - 1,105,1,105,1,106,1,106,1,107,1,107,1,107,1,108,1,108,1,108,1,109, - 1,109,1,109,1,110,1,110,1,111,1,111,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,122,1,122,1,123,1,123,1,123, - 1,124,1,124,1,124,1,125,1,125,1,125,1,126,1,126,5,126,1233,8,126, - 10,126,12,126,1236,9,126,1,126,3,126,1239,8,126,1,127,1,127,1,128, - 3,128,1244,8,128,1,128,1,128,1,129,1,129,1,129,5,129,1251,8,129, - 10,129,12,129,1254,9,129,1,130,1,130,3,130,1258,8,130,1,130,3,130, - 1261,8,130,0,0,131,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,28,57,0,59,0,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,44,93,0,95,45,97,46,99,47,101,48,103,49,105,50,107, - 51,109,0,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,0,255,0,257,123,259,124,261,125,1,0,32,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,88,88,120,120,2,0,79,79,111,111,5,0,46,46,48,58,65,90, - 95,95,97,122,2,0,86,86,118,118,2,0,10,10,13,13,2,0,70,70,102,102, - 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,4,0,36,36,65,90,95,95,97,122,1311,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,55,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,91,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,107,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,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0, - 1,264,1,0,0,0,3,270,1,0,0,0,5,274,1,0,0,0,7,296,1,0,0,0,9,321,1, - 0,0,0,11,339,1,0,0,0,13,360,1,0,0,0,15,376,1,0,0,0,17,390,1,0,0, - 0,19,404,1,0,0,0,21,411,1,0,0,0,23,420,1,0,0,0,25,433,1,0,0,0,27, - 442,1,0,0,0,29,451,1,0,0,0,31,457,1,0,0,0,33,466,1,0,0,0,35,473, - 1,0,0,0,37,485,1,0,0,0,39,489,1,0,0,0,41,502,1,0,0,0,43,515,1,0, - 0,0,45,529,1,0,0,0,47,541,1,0,0,0,49,551,1,0,0,0,51,556,1,0,0,0, - 53,609,1,0,0,0,55,620,1,0,0,0,57,622,1,0,0,0,59,627,1,0,0,0,61,630, - 1,0,0,0,63,654,1,0,0,0,65,673,1,0,0,0,67,686,1,0,0,0,69,692,1,0, - 0,0,71,694,1,0,0,0,73,696,1,0,0,0,75,698,1,0,0,0,77,700,1,0,0,0, - 79,702,1,0,0,0,81,704,1,0,0,0,83,706,1,0,0,0,85,708,1,0,0,0,87,710, - 1,0,0,0,89,724,1,0,0,0,91,738,1,0,0,0,93,762,1,0,0,0,95,764,1,0, - 0,0,97,785,1,0,0,0,99,790,1,0,0,0,101,803,1,0,0,0,103,808,1,0,0, - 0,105,814,1,0,0,0,107,825,1,0,0,0,109,848,1,0,0,0,111,850,1,0,0, - 0,113,853,1,0,0,0,115,858,1,0,0,0,117,863,1,0,0,0,119,868,1,0,0, - 0,121,876,1,0,0,0,123,879,1,0,0,0,125,883,1,0,0,0,127,887,1,0,0, - 0,129,891,1,0,0,0,131,896,1,0,0,0,133,901,1,0,0,0,135,908,1,0,0, - 0,137,915,1,0,0,0,139,920,1,0,0,0,141,934,1,0,0,0,143,947,1,0,0, - 0,145,965,1,0,0,0,147,970,1,0,0,0,149,978,1,0,0,0,151,993,1,0,0, - 0,153,1013,1,0,0,0,155,1036,1,0,0,0,157,1046,1,0,0,0,159,1054,1, - 0,0,0,161,1066,1,0,0,0,163,1073,1,0,0,0,165,1081,1,0,0,0,167,1086, - 1,0,0,0,169,1090,1,0,0,0,171,1093,1,0,0,0,173,1098,1,0,0,0,175,1102, - 1,0,0,0,177,1107,1,0,0,0,179,1113,1,0,0,0,181,1118,1,0,0,0,183,1128, - 1,0,0,0,185,1132,1,0,0,0,187,1135,1,0,0,0,189,1139,1,0,0,0,191,1145, - 1,0,0,0,193,1151,1,0,0,0,195,1157,1,0,0,0,197,1162,1,0,0,0,199,1166, - 1,0,0,0,201,1169,1,0,0,0,203,1172,1,0,0,0,205,1174,1,0,0,0,207,1176, - 1,0,0,0,209,1178,1,0,0,0,211,1180,1,0,0,0,213,1182,1,0,0,0,215,1184, - 1,0,0,0,217,1187,1,0,0,0,219,1190,1,0,0,0,221,1193,1,0,0,0,223,1195, - 1,0,0,0,225,1197,1,0,0,0,227,1199,1,0,0,0,229,1201,1,0,0,0,231,1203, - 1,0,0,0,233,1205,1,0,0,0,235,1207,1,0,0,0,237,1209,1,0,0,0,239,1211, - 1,0,0,0,241,1213,1,0,0,0,243,1215,1,0,0,0,245,1217,1,0,0,0,247,1221, - 1,0,0,0,249,1224,1,0,0,0,251,1227,1,0,0,0,253,1238,1,0,0,0,255,1240, - 1,0,0,0,257,1243,1,0,0,0,259,1247,1,0,0,0,261,1260,1,0,0,0,263,265, - 7,0,0,0,264,263,1,0,0,0,265,266,1,0,0,0,266,264,1,0,0,0,266,267, - 1,0,0,0,267,268,1,0,0,0,268,269,6,0,0,0,269,2,1,0,0,0,270,271,5, - 35,0,0,271,272,5,35,0,0,272,273,5,35,0,0,273,4,1,0,0,0,274,275,7, - 1,0,0,275,276,7,2,0,0,276,277,7,3,0,0,277,278,7,1,0,0,278,279,7, - 4,0,0,279,280,7,5,0,0,280,281,7,6,0,0,281,282,7,7,0,0,282,283,7, - 4,0,0,283,284,5,95,0,0,284,285,7,1,0,0,285,286,7,8,0,0,286,287,7, - 6,0,0,287,288,7,9,0,0,288,289,7,6,0,0,289,290,7,5,0,0,290,291,5, - 95,0,0,291,292,7,4,0,0,292,293,7,10,0,0,293,294,7,1,0,0,294,295, - 7,4,0,0,295,6,1,0,0,0,296,297,7,1,0,0,297,298,7,2,0,0,298,299,7, - 3,0,0,299,300,7,1,0,0,300,301,7,4,0,0,301,302,7,5,0,0,302,303,7, - 6,0,0,303,304,7,7,0,0,304,305,7,4,0,0,305,306,5,95,0,0,306,307,7, - 6,0,0,307,308,7,11,0,0,308,309,7,11,0,0,309,310,7,5,0,0,310,311, - 7,10,0,0,311,312,7,11,0,0,312,313,7,6,0,0,313,314,7,4,0,0,314,315, - 7,10,0,0,315,316,5,95,0,0,316,317,7,4,0,0,317,318,7,10,0,0,318,319, - 7,1,0,0,319,320,7,4,0,0,320,8,1,0,0,0,321,322,7,1,0,0,322,323,7, - 2,0,0,323,324,7,3,0,0,324,325,7,1,0,0,325,326,7,4,0,0,326,327,7, - 5,0,0,327,328,7,6,0,0,328,329,7,7,0,0,329,330,7,4,0,0,330,331,5, - 95,0,0,331,332,7,7,0,0,332,333,7,12,0,0,333,334,7,8,0,0,334,335, - 7,9,0,0,335,336,7,2,0,0,336,337,7,13,0,0,337,338,7,10,0,0,338,10, - 1,0,0,0,339,340,7,1,0,0,340,341,7,2,0,0,341,342,7,3,0,0,342,343, - 7,1,0,0,343,344,7,4,0,0,344,345,7,5,0,0,345,346,7,6,0,0,346,347, - 7,7,0,0,347,348,7,4,0,0,348,349,5,95,0,0,349,350,7,13,0,0,350,351, - 7,10,0,0,351,352,7,14,0,0,352,353,7,10,0,0,353,354,7,12,0,0,354, - 355,7,13,0,0,355,356,7,10,0,0,356,357,7,12,0,0,357,358,7,8,0,0,358, - 359,7,15,0,0,359,12,1,0,0,0,360,361,7,10,0,0,361,362,7,16,0,0,362, - 363,7,4,0,0,363,364,7,10,0,0,364,365,7,12,0,0,365,366,7,1,0,0,366, - 367,7,7,0,0,367,368,7,17,0,0,368,369,7,12,0,0,369,370,5,58,0,0,370, - 372,1,0,0,0,371,373,7,18,0,0,372,371,1,0,0,0,373,374,1,0,0,0,374, - 372,1,0,0,0,374,375,1,0,0,0,375,14,1,0,0,0,376,378,7,19,0,0,377, - 379,3,109,54,0,378,377,1,0,0,0,379,380,1,0,0,0,380,378,1,0,0,0,380, - 381,1,0,0,0,381,388,1,0,0,0,382,384,5,46,0,0,383,385,3,109,54,0, - 384,383,1,0,0,0,385,386,1,0,0,0,386,384,1,0,0,0,386,387,1,0,0,0, - 387,389,1,0,0,0,388,382,1,0,0,0,388,389,1,0,0,0,389,16,1,0,0,0,390, - 391,5,35,0,0,391,392,5,32,0,0,392,396,1,0,0,0,393,395,8,20,0,0,394, - 393,1,0,0,0,395,398,1,0,0,0,396,394,1,0,0,0,396,397,1,0,0,0,397, - 400,1,0,0,0,398,396,1,0,0,0,399,401,5,13,0,0,400,399,1,0,0,0,400, - 401,1,0,0,0,401,402,1,0,0,0,402,403,5,10,0,0,403,18,1,0,0,0,404, - 405,7,13,0,0,405,406,7,10,0,0,406,407,7,21,0,0,407,408,7,7,0,0,408, - 409,7,12,0,0,409,410,7,10,0,0,410,20,1,0,0,0,411,412,5,60,0,0,412, - 413,5,33,0,0,413,414,7,10,0,0,414,415,7,5,0,0,415,416,7,5,0,0,416, - 417,7,17,0,0,417,418,7,5,0,0,418,419,5,62,0,0,419,22,1,0,0,0,420, - 421,5,60,0,0,421,422,5,33,0,0,422,423,7,2,0,0,423,424,7,12,0,0,424, - 425,7,13,0,0,425,426,7,10,0,0,426,427,7,21,0,0,427,428,7,7,0,0,428, - 429,7,12,0,0,429,430,7,10,0,0,430,431,7,13,0,0,431,432,5,62,0,0, - 432,24,1,0,0,0,433,434,7,17,0,0,434,435,7,19,0,0,435,436,7,10,0, - 0,436,437,7,5,0,0,437,438,7,21,0,0,438,439,7,9,0,0,439,440,7,17, - 0,0,440,441,7,22,0,0,441,26,1,0,0,0,442,443,7,5,0,0,443,444,7,17, - 0,0,444,445,7,2,0,0,445,446,7,12,0,0,446,447,7,13,0,0,447,448,7, - 7,0,0,448,449,7,12,0,0,449,450,7,11,0,0,450,28,1,0,0,0,451,452,7, - 10,0,0,452,453,7,5,0,0,453,454,7,5,0,0,454,455,7,17,0,0,455,456, - 7,5,0,0,456,30,1,0,0,0,457,458,7,1,0,0,458,459,7,6,0,0,459,460,7, - 4,0,0,460,461,7,2,0,0,461,462,7,5,0,0,462,463,7,6,0,0,463,464,7, - 4,0,0,464,465,7,10,0,0,465,32,1,0,0,0,466,467,7,1,0,0,467,468,7, - 7,0,0,468,469,7,9,0,0,469,470,7,10,0,0,470,471,7,12,0,0,471,472, - 7,4,0,0,472,34,1,0,0,0,473,474,7,4,0,0,474,475,7,7,0,0,475,476,7, - 10,0,0,476,477,5,95,0,0,477,478,7,4,0,0,478,479,7,17,0,0,479,480, - 5,95,0,0,480,481,7,10,0,0,481,482,7,19,0,0,482,483,7,10,0,0,483, - 484,7,12,0,0,484,36,1,0,0,0,485,486,7,12,0,0,486,487,7,6,0,0,487, - 488,7,12,0,0,488,38,1,0,0,0,489,490,7,6,0,0,490,491,7,8,0,0,491, - 492,7,8,0,0,492,493,7,10,0,0,493,494,7,14,0,0,494,495,7,4,0,0,495, - 496,5,95,0,0,496,497,7,12,0,0,497,498,7,2,0,0,498,499,7,9,0,0,499, - 500,7,9,0,0,500,501,7,1,0,0,501,40,1,0,0,0,502,503,7,7,0,0,503,504, - 7,11,0,0,504,505,7,12,0,0,505,506,7,17,0,0,506,507,7,5,0,0,507,508, - 7,10,0,0,508,509,5,95,0,0,509,510,7,12,0,0,510,511,7,2,0,0,511,512, - 7,9,0,0,512,513,7,9,0,0,513,514,7,1,0,0,514,42,1,0,0,0,515,516,7, - 12,0,0,516,517,7,2,0,0,517,518,7,9,0,0,518,519,7,9,0,0,519,520,5, - 95,0,0,520,521,7,23,0,0,521,522,7,6,0,0,522,523,7,12,0,0,523,524, - 7,13,0,0,524,525,7,9,0,0,525,526,7,7,0,0,526,527,7,12,0,0,527,528, - 7,11,0,0,528,44,1,0,0,0,529,530,7,1,0,0,530,531,7,14,0,0,531,532, - 7,6,0,0,532,533,7,8,0,0,533,534,7,10,0,0,534,535,7,1,0,0,535,536, - 5,95,0,0,536,537,7,17,0,0,537,538,7,12,0,0,538,539,7,9,0,0,539,540, - 7,15,0,0,540,46,1,0,0,0,541,542,7,4,0,0,542,543,7,5,0,0,543,544, - 7,2,0,0,544,545,7,12,0,0,545,546,7,8,0,0,546,547,7,6,0,0,547,548, - 7,4,0,0,548,549,7,10,0,0,549,48,1,0,0,0,550,552,7,24,0,0,551,550, - 1,0,0,0,551,552,1,0,0,0,552,553,1,0,0,0,553,554,3,253,126,0,554, - 50,1,0,0,0,555,557,7,24,0,0,556,555,1,0,0,0,556,557,1,0,0,0,557, - 559,1,0,0,0,558,560,7,25,0,0,559,558,1,0,0,0,560,561,1,0,0,0,561, - 559,1,0,0,0,561,562,1,0,0,0,562,569,1,0,0,0,563,565,5,46,0,0,564, - 566,7,25,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,570,1,0,0,0,569,563,1,0,0,0,569,570,1,0,0,0,570, - 52,1,0,0,0,571,573,7,24,0,0,572,571,1,0,0,0,572,573,1,0,0,0,573, - 575,1,0,0,0,574,576,7,25,0,0,575,574,1,0,0,0,576,577,1,0,0,0,577, - 575,1,0,0,0,577,578,1,0,0,0,578,586,1,0,0,0,579,583,5,46,0,0,580, - 582,7,25,0,0,581,580,1,0,0,0,582,585,1,0,0,0,583,581,1,0,0,0,583, - 584,1,0,0,0,584,587,1,0,0,0,585,583,1,0,0,0,586,579,1,0,0,0,586, - 587,1,0,0,0,587,597,1,0,0,0,588,590,7,10,0,0,589,591,7,24,0,0,590, - 589,1,0,0,0,590,591,1,0,0,0,591,593,1,0,0,0,592,594,7,25,0,0,593, - 592,1,0,0,0,594,595,1,0,0,0,595,593,1,0,0,0,595,596,1,0,0,0,596, - 598,1,0,0,0,597,588,1,0,0,0,597,598,1,0,0,0,598,610,1,0,0,0,599, - 601,7,24,0,0,600,599,1,0,0,0,600,601,1,0,0,0,601,602,1,0,0,0,602, - 603,7,7,0,0,603,604,7,12,0,0,604,610,7,21,0,0,605,606,7,1,0,0,606, - 607,7,12,0,0,607,608,7,6,0,0,608,610,7,12,0,0,609,572,1,0,0,0,609, - 600,1,0,0,0,609,605,1,0,0,0,610,54,1,0,0,0,611,612,7,4,0,0,612,613, - 7,5,0,0,613,614,7,2,0,0,614,621,7,10,0,0,615,616,7,21,0,0,616,617, - 7,6,0,0,617,618,7,9,0,0,618,619,7,1,0,0,619,621,7,10,0,0,620,611, - 1,0,0,0,620,615,1,0,0,0,621,56,1,0,0,0,622,623,7,25,0,0,623,624, - 7,25,0,0,624,625,7,25,0,0,625,626,7,25,0,0,626,58,1,0,0,0,627,628, - 7,25,0,0,628,629,7,25,0,0,629,60,1,0,0,0,630,631,3,57,28,0,631,632, - 5,45,0,0,632,633,3,59,29,0,633,634,5,45,0,0,634,635,3,59,29,0,635, - 636,7,4,0,0,636,637,3,59,29,0,637,638,5,58,0,0,638,639,3,59,29,0, - 639,640,5,58,0,0,640,647,3,59,29,0,641,643,5,46,0,0,642,644,7,25, - 0,0,643,642,1,0,0,0,644,645,1,0,0,0,645,643,1,0,0,0,645,646,1,0, - 0,0,646,648,1,0,0,0,647,641,1,0,0,0,647,648,1,0,0,0,648,649,1,0, - 0,0,649,650,7,24,0,0,650,651,3,59,29,0,651,652,5,58,0,0,652,653, - 3,59,29,0,653,62,1,0,0,0,654,655,3,57,28,0,655,656,5,45,0,0,656, - 657,3,59,29,0,657,658,5,45,0,0,658,659,3,59,29,0,659,660,7,4,0,0, - 660,661,3,59,29,0,661,662,5,58,0,0,662,663,3,59,29,0,663,664,5,58, - 0,0,664,671,3,59,29,0,665,667,5,46,0,0,666,668,7,25,0,0,667,666, - 1,0,0,0,668,669,1,0,0,0,669,667,1,0,0,0,669,670,1,0,0,0,670,672, - 1,0,0,0,671,665,1,0,0,0,671,672,1,0,0,0,672,64,1,0,0,0,673,674,3, - 59,29,0,674,675,5,58,0,0,675,676,3,59,29,0,676,677,5,58,0,0,677, - 684,3,59,29,0,678,680,5,46,0,0,679,681,7,25,0,0,680,679,1,0,0,0, - 681,682,1,0,0,0,682,680,1,0,0,0,682,683,1,0,0,0,683,685,1,0,0,0, - 684,678,1,0,0,0,684,685,1,0,0,0,685,66,1,0,0,0,686,687,3,57,28,0, - 687,688,5,45,0,0,688,689,3,59,29,0,689,690,5,45,0,0,690,691,3,59, - 29,0,691,68,1,0,0,0,692,693,7,14,0,0,693,70,1,0,0,0,694,695,7,4, - 0,0,695,72,1,0,0,0,696,697,7,15,0,0,697,74,1,0,0,0,698,699,7,26, - 0,0,699,76,1,0,0,0,700,701,7,13,0,0,701,78,1,0,0,0,702,703,7,23, - 0,0,703,80,1,0,0,0,704,705,7,1,0,0,705,82,1,0,0,0,706,707,7,21,0, - 0,707,84,1,0,0,0,708,709,3,223,111,0,709,86,1,0,0,0,710,711,3,221, - 110,0,711,88,1,0,0,0,712,713,3,69,34,0,713,714,3,49,24,0,714,718, - 3,73,36,0,715,716,3,49,24,0,716,717,3,75,37,0,717,719,1,0,0,0,718, - 715,1,0,0,0,718,719,1,0,0,0,719,725,1,0,0,0,720,721,3,69,34,0,721, - 722,3,49,24,0,722,723,3,75,37,0,723,725,1,0,0,0,724,712,1,0,0,0, - 724,720,1,0,0,0,725,90,1,0,0,0,726,727,3,69,34,0,727,728,3,49,24, - 0,728,732,3,77,38,0,729,730,3,71,35,0,730,731,3,93,46,0,731,733, - 1,0,0,0,732,729,1,0,0,0,732,733,1,0,0,0,733,739,1,0,0,0,734,735, - 3,69,34,0,735,736,3,71,35,0,736,737,3,93,46,0,737,739,1,0,0,0,738, - 726,1,0,0,0,738,734,1,0,0,0,739,92,1,0,0,0,740,741,3,49,24,0,741, - 745,3,79,39,0,742,743,3,49,24,0,743,744,3,75,37,0,744,746,1,0,0, - 0,745,742,1,0,0,0,745,746,1,0,0,0,746,750,1,0,0,0,747,748,3,51,25, - 0,748,749,3,81,40,0,749,751,1,0,0,0,750,747,1,0,0,0,750,751,1,0, - 0,0,751,763,1,0,0,0,752,753,3,49,24,0,753,757,3,75,37,0,754,755, - 3,51,25,0,755,756,3,81,40,0,756,758,1,0,0,0,757,754,1,0,0,0,757, - 758,1,0,0,0,758,763,1,0,0,0,759,760,3,51,25,0,760,761,3,81,40,0, - 761,763,1,0,0,0,762,740,1,0,0,0,762,752,1,0,0,0,762,759,1,0,0,0, - 763,94,1,0,0,0,764,768,3,69,34,0,765,766,3,49,24,0,766,767,3,73, - 36,0,767,769,1,0,0,0,768,765,1,0,0,0,768,769,1,0,0,0,769,773,1,0, - 0,0,770,771,3,49,24,0,771,772,3,75,37,0,772,774,1,0,0,0,773,770, - 1,0,0,0,773,774,1,0,0,0,774,778,1,0,0,0,775,776,3,49,24,0,776,777, - 3,77,38,0,777,779,1,0,0,0,778,775,1,0,0,0,778,779,1,0,0,0,779,783, - 1,0,0,0,780,781,3,71,35,0,781,782,3,93,46,0,782,784,1,0,0,0,783, - 780,1,0,0,0,783,784,1,0,0,0,784,96,1,0,0,0,785,786,7,12,0,0,786, - 787,7,2,0,0,787,788,7,9,0,0,788,789,7,9,0,0,789,98,1,0,0,0,790,798, - 5,39,0,0,791,792,5,92,0,0,792,797,9,0,0,0,793,794,5,39,0,0,794,797, - 5,39,0,0,795,797,8,27,0,0,796,791,1,0,0,0,796,793,1,0,0,0,796,795, - 1,0,0,0,797,800,1,0,0,0,798,796,1,0,0,0,798,799,1,0,0,0,799,801, - 1,0,0,0,800,798,1,0,0,0,801,802,5,39,0,0,802,100,1,0,0,0,803,804, - 7,10,0,0,804,805,7,12,0,0,805,806,7,2,0,0,806,807,7,26,0,0,807,102, - 1,0,0,0,808,809,7,8,0,0,809,810,7,17,0,0,810,811,7,9,0,0,811,812, - 1,0,0,0,812,813,3,253,126,0,813,104,1,0,0,0,814,815,5,47,0,0,815, - 816,5,47,0,0,816,820,1,0,0,0,817,819,8,20,0,0,818,817,1,0,0,0,819, - 822,1,0,0,0,820,818,1,0,0,0,820,821,1,0,0,0,821,823,1,0,0,0,822, - 820,1,0,0,0,823,824,6,52,0,0,824,106,1,0,0,0,825,826,5,47,0,0,826, - 827,5,42,0,0,827,835,1,0,0,0,828,836,8,28,0,0,829,831,5,42,0,0,830, - 829,1,0,0,0,831,832,1,0,0,0,832,830,1,0,0,0,832,833,1,0,0,0,833, - 834,1,0,0,0,834,836,8,29,0,0,835,828,1,0,0,0,835,830,1,0,0,0,836, - 840,1,0,0,0,837,839,5,42,0,0,838,837,1,0,0,0,839,842,1,0,0,0,840, - 838,1,0,0,0,840,841,1,0,0,0,841,843,1,0,0,0,842,840,1,0,0,0,843, - 844,5,42,0,0,844,845,5,47,0,0,845,846,1,0,0,0,846,847,6,53,0,0,847, - 108,1,0,0,0,848,849,7,25,0,0,849,110,1,0,0,0,850,851,7,7,0,0,851, - 852,7,21,0,0,852,112,1,0,0,0,853,854,7,4,0,0,854,855,7,23,0,0,855, - 856,7,10,0,0,856,857,7,12,0,0,857,114,1,0,0,0,858,859,7,10,0,0,859, - 860,7,9,0,0,860,861,7,1,0,0,861,862,7,10,0,0,862,116,1,0,0,0,863, - 864,7,21,0,0,864,865,7,2,0,0,865,866,7,12,0,0,866,867,7,8,0,0,867, - 118,1,0,0,0,868,869,7,3,0,0,869,870,7,17,0,0,870,871,7,17,0,0,871, - 872,7,9,0,0,872,873,7,10,0,0,873,874,7,6,0,0,874,875,7,12,0,0,875, - 120,1,0,0,0,876,877,7,7,0,0,877,878,5,56,0,0,878,122,1,0,0,0,879, - 880,7,7,0,0,880,881,5,49,0,0,881,882,5,54,0,0,882,124,1,0,0,0,883, - 884,7,7,0,0,884,885,5,51,0,0,885,886,5,50,0,0,886,126,1,0,0,0,887, - 888,7,7,0,0,888,889,5,54,0,0,889,890,5,52,0,0,890,128,1,0,0,0,891, - 892,7,21,0,0,892,893,7,14,0,0,893,894,5,51,0,0,894,895,5,50,0,0, - 895,130,1,0,0,0,896,897,7,21,0,0,897,898,7,14,0,0,898,899,5,54,0, - 0,899,900,5,52,0,0,900,132,1,0,0,0,901,902,7,1,0,0,902,903,7,4,0, - 0,903,904,7,5,0,0,904,905,7,7,0,0,905,906,7,12,0,0,906,907,7,11, - 0,0,907,134,1,0,0,0,908,909,7,3,0,0,909,910,7,7,0,0,910,911,7,12, - 0,0,911,912,7,6,0,0,912,913,7,5,0,0,913,914,7,15,0,0,914,136,1,0, - 0,0,915,916,7,13,0,0,916,917,7,6,0,0,917,918,7,4,0,0,918,919,7,10, - 0,0,919,138,1,0,0,0,920,921,7,7,0,0,921,922,7,12,0,0,922,923,7,4, - 0,0,923,924,7,10,0,0,924,925,7,5,0,0,925,926,7,19,0,0,926,927,7, - 6,0,0,927,928,7,9,0,0,928,929,5,95,0,0,929,930,7,15,0,0,930,931, - 7,10,0,0,931,932,7,6,0,0,932,933,7,5,0,0,933,140,1,0,0,0,934,935, - 7,7,0,0,935,936,7,12,0,0,936,937,7,4,0,0,937,938,7,10,0,0,938,939, - 7,5,0,0,939,940,7,19,0,0,940,941,7,6,0,0,941,942,7,9,0,0,942,943, - 5,95,0,0,943,944,7,13,0,0,944,945,7,6,0,0,945,946,7,15,0,0,946,142, - 1,0,0,0,947,948,7,7,0,0,948,949,7,12,0,0,949,950,7,4,0,0,950,951, - 7,10,0,0,951,952,7,5,0,0,952,953,7,19,0,0,953,954,7,6,0,0,954,955, - 7,9,0,0,955,956,5,95,0,0,956,957,7,8,0,0,957,958,7,17,0,0,958,959, - 7,26,0,0,959,960,7,14,0,0,960,961,7,17,0,0,961,962,7,2,0,0,962,963, - 7,12,0,0,963,964,7,13,0,0,964,144,1,0,0,0,965,966,7,2,0,0,966,967, - 7,2,0,0,967,968,7,7,0,0,968,969,7,13,0,0,969,146,1,0,0,0,970,971, - 7,13,0,0,971,972,7,10,0,0,972,973,7,8,0,0,973,974,7,7,0,0,974,975, - 7,26,0,0,975,976,7,6,0,0,976,977,7,9,0,0,977,148,1,0,0,0,978,979, - 7,14,0,0,979,980,7,5,0,0,980,981,7,10,0,0,981,982,7,8,0,0,982,983, - 7,7,0,0,983,984,7,1,0,0,984,985,7,7,0,0,985,986,7,17,0,0,986,987, - 7,12,0,0,987,988,5,95,0,0,988,989,7,4,0,0,989,990,7,7,0,0,990,991, - 7,26,0,0,991,992,7,10,0,0,992,150,1,0,0,0,993,994,7,14,0,0,994,995, - 7,5,0,0,995,996,7,10,0,0,996,997,7,8,0,0,997,998,7,7,0,0,998,999, - 7,1,0,0,999,1000,7,7,0,0,1000,1001,7,17,0,0,1001,1002,7,12,0,0,1002, - 1003,5,95,0,0,1003,1004,7,4,0,0,1004,1005,7,7,0,0,1005,1006,7,26, - 0,0,1006,1007,7,10,0,0,1007,1008,7,1,0,0,1008,1009,7,4,0,0,1009, - 1010,7,6,0,0,1010,1011,7,26,0,0,1011,1012,7,14,0,0,1012,152,1,0, - 0,0,1013,1014,7,14,0,0,1014,1015,7,5,0,0,1015,1016,7,10,0,0,1016, - 1017,7,8,0,0,1017,1018,7,7,0,0,1018,1019,7,1,0,0,1019,1020,7,7,0, - 0,1020,1021,7,17,0,0,1021,1022,7,12,0,0,1022,1023,5,95,0,0,1023, - 1024,7,4,0,0,1024,1025,7,7,0,0,1025,1026,7,26,0,0,1026,1027,7,10, - 0,0,1027,1028,7,1,0,0,1028,1029,7,4,0,0,1029,1030,7,6,0,0,1030,1031, - 7,26,0,0,1031,1032,7,14,0,0,1032,1033,5,95,0,0,1033,1034,7,4,0,0, - 1034,1035,7,30,0,0,1035,154,1,0,0,0,1036,1037,7,21,0,0,1037,1038, - 7,7,0,0,1038,1039,7,16,0,0,1039,1040,7,10,0,0,1040,1041,7,13,0,0, - 1041,1042,7,8,0,0,1042,1043,7,23,0,0,1043,1044,7,6,0,0,1044,1045, - 7,5,0,0,1045,156,1,0,0,0,1046,1047,7,19,0,0,1047,1048,7,6,0,0,1048, - 1049,7,5,0,0,1049,1050,7,8,0,0,1050,1051,7,23,0,0,1051,1052,7,6, - 0,0,1052,1053,7,5,0,0,1053,158,1,0,0,0,1054,1055,7,21,0,0,1055,1056, - 7,7,0,0,1056,1057,7,16,0,0,1057,1058,7,10,0,0,1058,1059,7,13,0,0, - 1059,1060,7,3,0,0,1060,1061,7,7,0,0,1061,1062,7,12,0,0,1062,1063, - 7,6,0,0,1063,1064,7,5,0,0,1064,1065,7,15,0,0,1065,160,1,0,0,0,1066, - 1067,7,1,0,0,1067,1068,7,4,0,0,1068,1069,7,5,0,0,1069,1070,7,2,0, - 0,1070,1071,7,8,0,0,1071,1072,7,4,0,0,1072,162,1,0,0,0,1073,1074, - 7,12,0,0,1074,1075,7,1,0,0,1075,1076,7,4,0,0,1076,1077,7,5,0,0,1077, - 1078,7,2,0,0,1078,1079,7,8,0,0,1079,1080,7,4,0,0,1080,164,1,0,0, - 0,1081,1082,7,9,0,0,1082,1083,7,7,0,0,1083,1084,7,1,0,0,1084,1085, - 7,4,0,0,1085,166,1,0,0,0,1086,1087,7,26,0,0,1087,1088,7,6,0,0,1088, - 1089,7,14,0,0,1089,168,1,0,0,0,1090,1091,7,2,0,0,1091,1092,5,33, - 0,0,1092,170,1,0,0,0,1093,1094,7,3,0,0,1094,1095,7,17,0,0,1095,1096, - 7,17,0,0,1096,1097,7,9,0,0,1097,172,1,0,0,0,1098,1099,7,1,0,0,1099, - 1100,7,4,0,0,1100,1101,7,5,0,0,1101,174,1,0,0,0,1102,1103,7,19,0, - 0,1103,1104,7,3,0,0,1104,1105,7,7,0,0,1105,1106,7,12,0,0,1106,176, - 1,0,0,0,1107,1108,7,7,0,0,1108,1109,7,15,0,0,1109,1110,7,10,0,0, - 1110,1111,7,6,0,0,1111,1112,7,5,0,0,1112,178,1,0,0,0,1113,1114,7, - 7,0,0,1114,1115,7,13,0,0,1115,1116,7,6,0,0,1116,1117,7,15,0,0,1117, - 180,1,0,0,0,1118,1119,7,7,0,0,1119,1120,7,8,0,0,1120,1121,7,17,0, - 0,1121,1122,7,26,0,0,1122,1123,7,14,0,0,1123,1124,7,17,0,0,1124, - 1125,7,2,0,0,1125,1126,7,12,0,0,1126,1127,7,13,0,0,1127,182,1,0, - 0,0,1128,1129,7,13,0,0,1129,1130,7,10,0,0,1130,1131,7,8,0,0,1131, - 184,1,0,0,0,1132,1133,7,14,0,0,1133,1134,7,4,0,0,1134,186,1,0,0, - 0,1135,1136,7,14,0,0,1136,1137,7,4,0,0,1137,1138,7,1,0,0,1138,188, - 1,0,0,0,1139,1140,7,14,0,0,1140,1141,7,4,0,0,1141,1142,7,1,0,0,1142, - 1143,7,4,0,0,1143,1144,7,30,0,0,1144,190,1,0,0,0,1145,1146,7,21, - 0,0,1146,1147,7,8,0,0,1147,1148,7,23,0,0,1148,1149,7,6,0,0,1149, - 1150,7,5,0,0,1150,192,1,0,0,0,1151,1152,7,19,0,0,1152,1153,7,8,0, - 0,1153,1154,7,23,0,0,1154,1155,7,6,0,0,1155,1156,7,5,0,0,1156,194, - 1,0,0,0,1157,1158,7,21,0,0,1158,1159,7,3,0,0,1159,1160,7,7,0,0,1160, - 1161,7,12,0,0,1161,196,1,0,0,0,1162,1163,7,6,0,0,1163,1164,7,12, - 0,0,1164,1165,7,15,0,0,1165,198,1,0,0,0,1166,1167,3,197,98,0,1167, - 1168,7,25,0,0,1168,200,1,0,0,0,1169,1170,5,58,0,0,1170,1171,5,58, - 0,0,1171,202,1,0,0,0,1172,1173,5,43,0,0,1173,204,1,0,0,0,1174,1175, - 5,45,0,0,1175,206,1,0,0,0,1176,1177,5,42,0,0,1177,208,1,0,0,0,1178, - 1179,5,47,0,0,1179,210,1,0,0,0,1180,1181,5,37,0,0,1181,212,1,0,0, - 0,1182,1183,5,61,0,0,1183,214,1,0,0,0,1184,1185,5,33,0,0,1185,1186, - 5,61,0,0,1186,216,1,0,0,0,1187,1188,5,62,0,0,1188,1189,5,61,0,0, - 1189,218,1,0,0,0,1190,1191,5,60,0,0,1191,1192,5,61,0,0,1192,220, - 1,0,0,0,1193,1194,5,62,0,0,1194,222,1,0,0,0,1195,1196,5,60,0,0,1196, - 224,1,0,0,0,1197,1198,5,33,0,0,1198,226,1,0,0,0,1199,1200,5,40,0, - 0,1200,228,1,0,0,0,1201,1202,5,41,0,0,1202,230,1,0,0,0,1203,1204, - 5,91,0,0,1204,232,1,0,0,0,1205,1206,5,93,0,0,1206,234,1,0,0,0,1207, - 1208,5,44,0,0,1208,236,1,0,0,0,1209,1210,5,58,0,0,1210,238,1,0,0, - 0,1211,1212,5,63,0,0,1212,240,1,0,0,0,1213,1214,5,35,0,0,1214,242, - 1,0,0,0,1215,1216,5,46,0,0,1216,244,1,0,0,0,1217,1218,7,6,0,0,1218, - 1219,7,12,0,0,1219,1220,7,13,0,0,1220,246,1,0,0,0,1221,1222,7,17, - 0,0,1222,1223,7,5,0,0,1223,248,1,0,0,0,1224,1225,5,58,0,0,1225,1226, - 5,61,0,0,1226,250,1,0,0,0,1227,1228,5,45,0,0,1228,1229,5,62,0,0, - 1229,252,1,0,0,0,1230,1234,2,49,57,0,1231,1233,3,255,127,0,1232, - 1231,1,0,0,0,1233,1236,1,0,0,0,1234,1232,1,0,0,0,1234,1235,1,0,0, - 0,1235,1239,1,0,0,0,1236,1234,1,0,0,0,1237,1239,5,48,0,0,1238,1230, - 1,0,0,0,1238,1237,1,0,0,0,1239,254,1,0,0,0,1240,1241,2,48,57,0,1241, - 256,1,0,0,0,1242,1244,5,45,0,0,1243,1242,1,0,0,0,1243,1244,1,0,0, - 0,1244,1245,1,0,0,0,1245,1246,3,253,126,0,1246,258,1,0,0,0,1247, - 1252,7,31,0,0,1248,1251,7,31,0,0,1249,1251,3,255,127,0,1250,1248, - 1,0,0,0,1250,1249,1,0,0,0,1251,1254,1,0,0,0,1252,1250,1,0,0,0,1252, - 1253,1,0,0,0,1253,260,1,0,0,0,1254,1252,1,0,0,0,1255,1257,5,13,0, - 0,1256,1258,5,10,0,0,1257,1256,1,0,0,0,1257,1258,1,0,0,0,1258,1261, - 1,0,0,0,1259,1261,5,10,0,0,1260,1255,1,0,0,0,1260,1259,1,0,0,0,1261, - 262,1,0,0,0,54,0,266,374,380,386,388,396,400,551,556,561,567,569, - 572,577,583,586,590,595,597,600,609,620,645,647,669,671,682,684, - 718,724,732,738,745,750,757,762,768,773,778,783,796,798,820,832, - 835,840,1234,1238,1243,1250,1252,1257,1260,1,0,1,0 + 2,131,7,131,1,0,4,0,267,8,0,11,0,12,0,268,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,1,6,1,6,1,6,1,6,1,6,1,6,1,6,1, + 6,1,6,1,6,4,6,375,8,6,11,6,12,6,376,1,7,1,7,4,7,381,8,7,11,7,12, + 7,382,1,7,1,7,4,7,387,8,7,11,7,12,7,388,3,7,391,8,7,1,8,1,8,1,8, + 1,8,5,8,397,8,8,10,8,12,8,400,9,8,1,8,3,8,403,8,8,1,8,1,8,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,11,1,11,1,11,1,11,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,13,1,13,1,13,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,15,1,15,1,16,1,16,1,16,1,16,1,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,1, + 17,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,21,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,21,1,22,1,22,1,22,1,22,1,22,1,22,1,22,1, + 22,1,22,1,22,1,22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,24,3,24,554,8,24,1,24,1,24,1,25,3,25,559,8,25,1,25,4,25,562, + 8,25,11,25,12,25,563,1,25,1,25,4,25,568,8,25,11,25,12,25,569,3,25, + 572,8,25,1,26,3,26,575,8,26,1,26,4,26,578,8,26,11,26,12,26,579,1, + 26,1,26,5,26,584,8,26,10,26,12,26,587,9,26,3,26,589,8,26,1,26,1, + 26,3,26,593,8,26,1,26,4,26,596,8,26,11,26,12,26,597,3,26,600,8,26, + 1,26,3,26,603,8,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,3,26,612,8, + 26,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,1,27,3,27,623,8,27,1, + 28,1,28,1,28,1,28,1,28,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,4,30,646,8,30,11,30,12,30, + 647,3,30,650,8,30,1,30,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,31,1, + 31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,1,31,4,31,670,8,31,11,31,12, + 31,671,3,31,674,8,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,4,32,683, + 8,32,11,32,12,32,684,3,32,687,8,32,1,33,1,33,1,33,1,33,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,44,1,44,1,44,1,44,1,44,1,44, + 3,44,721,8,44,1,44,1,44,1,44,1,44,3,44,727,8,44,1,45,1,45,1,45,1, + 45,1,45,1,45,3,45,735,8,45,1,45,1,45,1,45,1,45,3,45,741,8,45,1,46, + 1,46,1,46,1,46,1,46,3,46,748,8,46,1,46,1,46,1,46,3,46,753,8,46,1, + 46,1,46,1,46,1,46,1,46,3,46,760,8,46,1,46,1,46,1,46,3,46,765,8,46, + 1,47,1,47,1,47,1,47,3,47,771,8,47,1,47,1,47,1,47,3,47,776,8,47,1, + 47,1,47,1,47,3,47,781,8,47,1,47,1,47,1,47,3,47,786,8,47,1,48,1,48, + 1,48,1,48,1,48,1,49,1,49,1,49,1,49,1,49,1,49,5,49,799,8,49,10,49, + 12,49,802,9,49,1,49,1,49,1,50,1,50,1,50,1,50,1,50,1,51,1,51,1,51, + 1,51,1,51,1,51,1,52,1,52,1,52,1,52,5,52,821,8,52,10,52,12,52,824, + 9,52,1,52,1,52,1,53,1,53,1,53,1,53,1,53,4,53,833,8,53,11,53,12,53, + 834,1,53,3,53,838,8,53,1,53,5,53,841,8,53,10,53,12,53,844,9,53,1, + 53,1,53,1,53,1,53,1,53,1,54,1,54,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,59,1, + 59,1,59,1,59,1,59,1,59,1,59,1,59,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,64,1,64,1,64,1,64,1, + 64,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, + 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,69,1,69,1,69,1,69,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, + 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,71,1,71,1,71,1,71,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,74,1,74,1,74,1,74,1,74,1,74,1,74,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,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,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,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, + 79,1,79,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,82,1,82,1,82,1,82,1,82,1,83,1,83,1,83,1,83,1, + 84,1,84,1,84,1,85,1,85,1,85,1,85,1,85,1,86,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,88,1,88,1,89,1,89,1,89,1, + 89,1,89,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,91,1, + 91,1,91,1,91,1,92,1,92,1,92,1,93,1,93,1,93,1,93,1,94,1,94,1,94,1, + 94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1,96,1, + 96,1,96,1,97,1,97,1,97,1,97,1,97,1,98,1,98,1,98,1,98,1,99,1,99,1, + 99,1,100,1,100,1,100,1,101,1,101,1,102,1,102,1,103,1,103,1,104,1, + 104,1,105,1,105,1,106,1,106,1,107,1,107,1,107,1,108,1,108,1,108, + 1,109,1,109,1,109,1,110,1,110,1,111,1,111,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,122,1,122,1,123,1,123, + 1,123,1,124,1,124,1,124,1,125,1,125,1,125,1,126,1,126,5,126,1235, + 8,126,10,126,12,126,1238,9,126,1,126,3,126,1241,8,126,1,127,1,127, + 1,128,3,128,1246,8,128,1,128,1,128,1,129,1,129,1,129,1,129,1,129, + 1,129,1,129,1,129,1,130,1,130,1,130,5,130,1261,8,130,10,130,12,130, + 1264,9,130,1,131,1,131,3,131,1268,8,131,1,131,3,131,1271,8,131,0, + 0,132,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,28,57,0,59,0,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,44,93,0,95,45,97,46,99,47,101,48,103,49,105,50,107,51,109,0,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,0,255, + 0,257,123,259,124,261,125,263,126,1,0,33,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,88,88,120,120,2,0,79,79,111,111,5,0,46,46,48,58,65,90,95, + 95,97,122,2,0,86,86,118,118,2,0,10,10,13,13,2,0,70,70,102,102,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,75,75,107,107,4,0,36,36,65,90,95,95,97,122,1321,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,55,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,91,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,107, + 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,257,1,0,0,0,0,259,1,0,0,0, + 0,261,1,0,0,0,0,263,1,0,0,0,1,266,1,0,0,0,3,272,1,0,0,0,5,276,1, + 0,0,0,7,298,1,0,0,0,9,323,1,0,0,0,11,341,1,0,0,0,13,362,1,0,0,0, + 15,378,1,0,0,0,17,392,1,0,0,0,19,406,1,0,0,0,21,413,1,0,0,0,23,422, + 1,0,0,0,25,435,1,0,0,0,27,444,1,0,0,0,29,453,1,0,0,0,31,459,1,0, + 0,0,33,468,1,0,0,0,35,475,1,0,0,0,37,487,1,0,0,0,39,491,1,0,0,0, + 41,504,1,0,0,0,43,517,1,0,0,0,45,531,1,0,0,0,47,543,1,0,0,0,49,553, + 1,0,0,0,51,558,1,0,0,0,53,611,1,0,0,0,55,622,1,0,0,0,57,624,1,0, + 0,0,59,629,1,0,0,0,61,632,1,0,0,0,63,656,1,0,0,0,65,675,1,0,0,0, + 67,688,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,712,1,0,0,0,89,726,1,0,0,0,91,740,1,0,0,0, + 93,764,1,0,0,0,95,766,1,0,0,0,97,787,1,0,0,0,99,792,1,0,0,0,101, + 805,1,0,0,0,103,810,1,0,0,0,105,816,1,0,0,0,107,827,1,0,0,0,109, + 850,1,0,0,0,111,852,1,0,0,0,113,855,1,0,0,0,115,860,1,0,0,0,117, + 865,1,0,0,0,119,870,1,0,0,0,121,878,1,0,0,0,123,881,1,0,0,0,125, + 885,1,0,0,0,127,889,1,0,0,0,129,893,1,0,0,0,131,898,1,0,0,0,133, + 903,1,0,0,0,135,910,1,0,0,0,137,917,1,0,0,0,139,922,1,0,0,0,141, + 936,1,0,0,0,143,949,1,0,0,0,145,967,1,0,0,0,147,972,1,0,0,0,149, + 980,1,0,0,0,151,995,1,0,0,0,153,1015,1,0,0,0,155,1038,1,0,0,0,157, + 1048,1,0,0,0,159,1056,1,0,0,0,161,1068,1,0,0,0,163,1075,1,0,0,0, + 165,1083,1,0,0,0,167,1088,1,0,0,0,169,1092,1,0,0,0,171,1095,1,0, + 0,0,173,1100,1,0,0,0,175,1104,1,0,0,0,177,1109,1,0,0,0,179,1115, + 1,0,0,0,181,1120,1,0,0,0,183,1130,1,0,0,0,185,1134,1,0,0,0,187,1137, + 1,0,0,0,189,1141,1,0,0,0,191,1147,1,0,0,0,193,1153,1,0,0,0,195,1159, + 1,0,0,0,197,1164,1,0,0,0,199,1168,1,0,0,0,201,1171,1,0,0,0,203,1174, + 1,0,0,0,205,1176,1,0,0,0,207,1178,1,0,0,0,209,1180,1,0,0,0,211,1182, + 1,0,0,0,213,1184,1,0,0,0,215,1186,1,0,0,0,217,1189,1,0,0,0,219,1192, + 1,0,0,0,221,1195,1,0,0,0,223,1197,1,0,0,0,225,1199,1,0,0,0,227,1201, + 1,0,0,0,229,1203,1,0,0,0,231,1205,1,0,0,0,233,1207,1,0,0,0,235,1209, + 1,0,0,0,237,1211,1,0,0,0,239,1213,1,0,0,0,241,1215,1,0,0,0,243,1217, + 1,0,0,0,245,1219,1,0,0,0,247,1223,1,0,0,0,249,1226,1,0,0,0,251,1229, + 1,0,0,0,253,1240,1,0,0,0,255,1242,1,0,0,0,257,1245,1,0,0,0,259,1249, + 1,0,0,0,261,1257,1,0,0,0,263,1270,1,0,0,0,265,267,7,0,0,0,266,265, + 1,0,0,0,267,268,1,0,0,0,268,266,1,0,0,0,268,269,1,0,0,0,269,270, + 1,0,0,0,270,271,6,0,0,0,271,2,1,0,0,0,272,273,5,35,0,0,273,274,5, + 35,0,0,274,275,5,35,0,0,275,4,1,0,0,0,276,277,7,1,0,0,277,278,7, + 2,0,0,278,279,7,3,0,0,279,280,7,1,0,0,280,281,7,4,0,0,281,282,7, + 5,0,0,282,283,7,6,0,0,283,284,7,7,0,0,284,285,7,4,0,0,285,286,5, + 95,0,0,286,287,7,1,0,0,287,288,7,8,0,0,288,289,7,6,0,0,289,290,7, + 9,0,0,290,291,7,6,0,0,291,292,7,5,0,0,292,293,5,95,0,0,293,294,7, + 4,0,0,294,295,7,10,0,0,295,296,7,1,0,0,296,297,7,4,0,0,297,6,1,0, + 0,0,298,299,7,1,0,0,299,300,7,2,0,0,300,301,7,3,0,0,301,302,7,1, + 0,0,302,303,7,4,0,0,303,304,7,5,0,0,304,305,7,6,0,0,305,306,7,7, + 0,0,306,307,7,4,0,0,307,308,5,95,0,0,308,309,7,6,0,0,309,310,7,11, + 0,0,310,311,7,11,0,0,311,312,7,5,0,0,312,313,7,10,0,0,313,314,7, + 11,0,0,314,315,7,6,0,0,315,316,7,4,0,0,316,317,7,10,0,0,317,318, + 5,95,0,0,318,319,7,4,0,0,319,320,7,10,0,0,320,321,7,1,0,0,321,322, + 7,4,0,0,322,8,1,0,0,0,323,324,7,1,0,0,324,325,7,2,0,0,325,326,7, + 3,0,0,326,327,7,1,0,0,327,328,7,4,0,0,328,329,7,5,0,0,329,330,7, + 6,0,0,330,331,7,7,0,0,331,332,7,4,0,0,332,333,5,95,0,0,333,334,7, + 7,0,0,334,335,7,12,0,0,335,336,7,8,0,0,336,337,7,9,0,0,337,338,7, + 2,0,0,338,339,7,13,0,0,339,340,7,10,0,0,340,10,1,0,0,0,341,342,7, + 1,0,0,342,343,7,2,0,0,343,344,7,3,0,0,344,345,7,1,0,0,345,346,7, + 4,0,0,346,347,7,5,0,0,347,348,7,6,0,0,348,349,7,7,0,0,349,350,7, + 4,0,0,350,351,5,95,0,0,351,352,7,13,0,0,352,353,7,10,0,0,353,354, + 7,14,0,0,354,355,7,10,0,0,355,356,7,12,0,0,356,357,7,13,0,0,357, + 358,7,10,0,0,358,359,7,12,0,0,359,360,7,8,0,0,360,361,7,15,0,0,361, + 12,1,0,0,0,362,363,7,10,0,0,363,364,7,16,0,0,364,365,7,4,0,0,365, + 366,7,10,0,0,366,367,7,12,0,0,367,368,7,1,0,0,368,369,7,7,0,0,369, + 370,7,17,0,0,370,371,7,12,0,0,371,372,5,58,0,0,372,374,1,0,0,0,373, + 375,7,18,0,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,14,1,0,0,0,378,380,7,19,0,0,379,381,3,109,54,0,380, + 379,1,0,0,0,381,382,1,0,0,0,382,380,1,0,0,0,382,383,1,0,0,0,383, + 390,1,0,0,0,384,386,5,46,0,0,385,387,3,109,54,0,386,385,1,0,0,0, + 387,388,1,0,0,0,388,386,1,0,0,0,388,389,1,0,0,0,389,391,1,0,0,0, + 390,384,1,0,0,0,390,391,1,0,0,0,391,16,1,0,0,0,392,393,5,35,0,0, + 393,394,5,32,0,0,394,398,1,0,0,0,395,397,8,20,0,0,396,395,1,0,0, + 0,397,400,1,0,0,0,398,396,1,0,0,0,398,399,1,0,0,0,399,402,1,0,0, + 0,400,398,1,0,0,0,401,403,5,13,0,0,402,401,1,0,0,0,402,403,1,0,0, + 0,403,404,1,0,0,0,404,405,5,10,0,0,405,18,1,0,0,0,406,407,7,13,0, + 0,407,408,7,10,0,0,408,409,7,21,0,0,409,410,7,7,0,0,410,411,7,12, + 0,0,411,412,7,10,0,0,412,20,1,0,0,0,413,414,5,60,0,0,414,415,5,33, + 0,0,415,416,7,10,0,0,416,417,7,5,0,0,417,418,7,5,0,0,418,419,7,17, + 0,0,419,420,7,5,0,0,420,421,5,62,0,0,421,22,1,0,0,0,422,423,5,60, + 0,0,423,424,5,33,0,0,424,425,7,2,0,0,425,426,7,12,0,0,426,427,7, + 13,0,0,427,428,7,10,0,0,428,429,7,21,0,0,429,430,7,7,0,0,430,431, + 7,12,0,0,431,432,7,10,0,0,432,433,7,13,0,0,433,434,5,62,0,0,434, + 24,1,0,0,0,435,436,7,17,0,0,436,437,7,19,0,0,437,438,7,10,0,0,438, + 439,7,5,0,0,439,440,7,21,0,0,440,441,7,9,0,0,441,442,7,17,0,0,442, + 443,7,22,0,0,443,26,1,0,0,0,444,445,7,5,0,0,445,446,7,17,0,0,446, + 447,7,2,0,0,447,448,7,12,0,0,448,449,7,13,0,0,449,450,7,7,0,0,450, + 451,7,12,0,0,451,452,7,11,0,0,452,28,1,0,0,0,453,454,7,10,0,0,454, + 455,7,5,0,0,455,456,7,5,0,0,456,457,7,17,0,0,457,458,7,5,0,0,458, + 30,1,0,0,0,459,460,7,1,0,0,460,461,7,6,0,0,461,462,7,4,0,0,462,463, + 7,2,0,0,463,464,7,5,0,0,464,465,7,6,0,0,465,466,7,4,0,0,466,467, + 7,10,0,0,467,32,1,0,0,0,468,469,7,1,0,0,469,470,7,7,0,0,470,471, + 7,9,0,0,471,472,7,10,0,0,472,473,7,12,0,0,473,474,7,4,0,0,474,34, + 1,0,0,0,475,476,7,4,0,0,476,477,7,7,0,0,477,478,7,10,0,0,478,479, + 5,95,0,0,479,480,7,4,0,0,480,481,7,17,0,0,481,482,5,95,0,0,482,483, + 7,10,0,0,483,484,7,19,0,0,484,485,7,10,0,0,485,486,7,12,0,0,486, + 36,1,0,0,0,487,488,7,12,0,0,488,489,7,6,0,0,489,490,7,12,0,0,490, + 38,1,0,0,0,491,492,7,6,0,0,492,493,7,8,0,0,493,494,7,8,0,0,494,495, + 7,10,0,0,495,496,7,14,0,0,496,497,7,4,0,0,497,498,5,95,0,0,498,499, + 7,12,0,0,499,500,7,2,0,0,500,501,7,9,0,0,501,502,7,9,0,0,502,503, + 7,1,0,0,503,40,1,0,0,0,504,505,7,7,0,0,505,506,7,11,0,0,506,507, + 7,12,0,0,507,508,7,17,0,0,508,509,7,5,0,0,509,510,7,10,0,0,510,511, + 5,95,0,0,511,512,7,12,0,0,512,513,7,2,0,0,513,514,7,9,0,0,514,515, + 7,9,0,0,515,516,7,1,0,0,516,42,1,0,0,0,517,518,7,12,0,0,518,519, + 7,2,0,0,519,520,7,9,0,0,520,521,7,9,0,0,521,522,5,95,0,0,522,523, + 7,23,0,0,523,524,7,6,0,0,524,525,7,12,0,0,525,526,7,13,0,0,526,527, + 7,9,0,0,527,528,7,7,0,0,528,529,7,12,0,0,529,530,7,11,0,0,530,44, + 1,0,0,0,531,532,7,1,0,0,532,533,7,14,0,0,533,534,7,6,0,0,534,535, + 7,8,0,0,535,536,7,10,0,0,536,537,7,1,0,0,537,538,5,95,0,0,538,539, + 7,17,0,0,539,540,7,12,0,0,540,541,7,9,0,0,541,542,7,15,0,0,542,46, + 1,0,0,0,543,544,7,4,0,0,544,545,7,5,0,0,545,546,7,2,0,0,546,547, + 7,12,0,0,547,548,7,8,0,0,548,549,7,6,0,0,549,550,7,4,0,0,550,551, + 7,10,0,0,551,48,1,0,0,0,552,554,7,24,0,0,553,552,1,0,0,0,553,554, + 1,0,0,0,554,555,1,0,0,0,555,556,3,253,126,0,556,50,1,0,0,0,557,559, + 7,24,0,0,558,557,1,0,0,0,558,559,1,0,0,0,559,561,1,0,0,0,560,562, + 7,25,0,0,561,560,1,0,0,0,562,563,1,0,0,0,563,561,1,0,0,0,563,564, + 1,0,0,0,564,571,1,0,0,0,565,567,5,46,0,0,566,568,7,25,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,572, + 1,0,0,0,571,565,1,0,0,0,571,572,1,0,0,0,572,52,1,0,0,0,573,575,7, + 24,0,0,574,573,1,0,0,0,574,575,1,0,0,0,575,577,1,0,0,0,576,578,7, + 25,0,0,577,576,1,0,0,0,578,579,1,0,0,0,579,577,1,0,0,0,579,580,1, + 0,0,0,580,588,1,0,0,0,581,585,5,46,0,0,582,584,7,25,0,0,583,582, + 1,0,0,0,584,587,1,0,0,0,585,583,1,0,0,0,585,586,1,0,0,0,586,589, + 1,0,0,0,587,585,1,0,0,0,588,581,1,0,0,0,588,589,1,0,0,0,589,599, + 1,0,0,0,590,592,7,10,0,0,591,593,7,24,0,0,592,591,1,0,0,0,592,593, + 1,0,0,0,593,595,1,0,0,0,594,596,7,25,0,0,595,594,1,0,0,0,596,597, + 1,0,0,0,597,595,1,0,0,0,597,598,1,0,0,0,598,600,1,0,0,0,599,590, + 1,0,0,0,599,600,1,0,0,0,600,612,1,0,0,0,601,603,7,24,0,0,602,601, + 1,0,0,0,602,603,1,0,0,0,603,604,1,0,0,0,604,605,7,7,0,0,605,606, + 7,12,0,0,606,612,7,21,0,0,607,608,7,1,0,0,608,609,7,12,0,0,609,610, + 7,6,0,0,610,612,7,12,0,0,611,574,1,0,0,0,611,602,1,0,0,0,611,607, + 1,0,0,0,612,54,1,0,0,0,613,614,7,4,0,0,614,615,7,5,0,0,615,616,7, + 2,0,0,616,623,7,10,0,0,617,618,7,21,0,0,618,619,7,6,0,0,619,620, + 7,9,0,0,620,621,7,1,0,0,621,623,7,10,0,0,622,613,1,0,0,0,622,617, + 1,0,0,0,623,56,1,0,0,0,624,625,7,25,0,0,625,626,7,25,0,0,626,627, + 7,25,0,0,627,628,7,25,0,0,628,58,1,0,0,0,629,630,7,25,0,0,630,631, + 7,25,0,0,631,60,1,0,0,0,632,633,3,57,28,0,633,634,5,45,0,0,634,635, + 3,59,29,0,635,636,5,45,0,0,636,637,3,59,29,0,637,638,7,4,0,0,638, + 639,3,59,29,0,639,640,5,58,0,0,640,641,3,59,29,0,641,642,5,58,0, + 0,642,649,3,59,29,0,643,645,5,46,0,0,644,646,7,25,0,0,645,644,1, + 0,0,0,646,647,1,0,0,0,647,645,1,0,0,0,647,648,1,0,0,0,648,650,1, + 0,0,0,649,643,1,0,0,0,649,650,1,0,0,0,650,651,1,0,0,0,651,652,7, + 24,0,0,652,653,3,59,29,0,653,654,5,58,0,0,654,655,3,59,29,0,655, + 62,1,0,0,0,656,657,3,57,28,0,657,658,5,45,0,0,658,659,3,59,29,0, + 659,660,5,45,0,0,660,661,3,59,29,0,661,662,7,4,0,0,662,663,3,59, + 29,0,663,664,5,58,0,0,664,665,3,59,29,0,665,666,5,58,0,0,666,673, + 3,59,29,0,667,669,5,46,0,0,668,670,7,25,0,0,669,668,1,0,0,0,670, + 671,1,0,0,0,671,669,1,0,0,0,671,672,1,0,0,0,672,674,1,0,0,0,673, + 667,1,0,0,0,673,674,1,0,0,0,674,64,1,0,0,0,675,676,3,59,29,0,676, + 677,5,58,0,0,677,678,3,59,29,0,678,679,5,58,0,0,679,686,3,59,29, + 0,680,682,5,46,0,0,681,683,7,25,0,0,682,681,1,0,0,0,683,684,1,0, + 0,0,684,682,1,0,0,0,684,685,1,0,0,0,685,687,1,0,0,0,686,680,1,0, + 0,0,686,687,1,0,0,0,687,66,1,0,0,0,688,689,3,57,28,0,689,690,5,45, + 0,0,690,691,3,59,29,0,691,692,5,45,0,0,692,693,3,59,29,0,693,68, + 1,0,0,0,694,695,7,14,0,0,695,70,1,0,0,0,696,697,7,4,0,0,697,72,1, + 0,0,0,698,699,7,15,0,0,699,74,1,0,0,0,700,701,7,26,0,0,701,76,1, + 0,0,0,702,703,7,13,0,0,703,78,1,0,0,0,704,705,7,23,0,0,705,80,1, + 0,0,0,706,707,7,1,0,0,707,82,1,0,0,0,708,709,7,21,0,0,709,84,1,0, + 0,0,710,711,3,223,111,0,711,86,1,0,0,0,712,713,3,221,110,0,713,88, + 1,0,0,0,714,715,3,69,34,0,715,716,3,49,24,0,716,720,3,73,36,0,717, + 718,3,49,24,0,718,719,3,75,37,0,719,721,1,0,0,0,720,717,1,0,0,0, + 720,721,1,0,0,0,721,727,1,0,0,0,722,723,3,69,34,0,723,724,3,49,24, + 0,724,725,3,75,37,0,725,727,1,0,0,0,726,714,1,0,0,0,726,722,1,0, + 0,0,727,90,1,0,0,0,728,729,3,69,34,0,729,730,3,49,24,0,730,734,3, + 77,38,0,731,732,3,71,35,0,732,733,3,93,46,0,733,735,1,0,0,0,734, + 731,1,0,0,0,734,735,1,0,0,0,735,741,1,0,0,0,736,737,3,69,34,0,737, + 738,3,71,35,0,738,739,3,93,46,0,739,741,1,0,0,0,740,728,1,0,0,0, + 740,736,1,0,0,0,741,92,1,0,0,0,742,743,3,49,24,0,743,747,3,79,39, + 0,744,745,3,49,24,0,745,746,3,75,37,0,746,748,1,0,0,0,747,744,1, + 0,0,0,747,748,1,0,0,0,748,752,1,0,0,0,749,750,3,51,25,0,750,751, + 3,81,40,0,751,753,1,0,0,0,752,749,1,0,0,0,752,753,1,0,0,0,753,765, + 1,0,0,0,754,755,3,49,24,0,755,759,3,75,37,0,756,757,3,51,25,0,757, + 758,3,81,40,0,758,760,1,0,0,0,759,756,1,0,0,0,759,760,1,0,0,0,760, + 765,1,0,0,0,761,762,3,51,25,0,762,763,3,81,40,0,763,765,1,0,0,0, + 764,742,1,0,0,0,764,754,1,0,0,0,764,761,1,0,0,0,765,94,1,0,0,0,766, + 770,3,69,34,0,767,768,3,49,24,0,768,769,3,73,36,0,769,771,1,0,0, + 0,770,767,1,0,0,0,770,771,1,0,0,0,771,775,1,0,0,0,772,773,3,49,24, + 0,773,774,3,75,37,0,774,776,1,0,0,0,775,772,1,0,0,0,775,776,1,0, + 0,0,776,780,1,0,0,0,777,778,3,49,24,0,778,779,3,77,38,0,779,781, + 1,0,0,0,780,777,1,0,0,0,780,781,1,0,0,0,781,785,1,0,0,0,782,783, + 3,71,35,0,783,784,3,93,46,0,784,786,1,0,0,0,785,782,1,0,0,0,785, + 786,1,0,0,0,786,96,1,0,0,0,787,788,7,12,0,0,788,789,7,2,0,0,789, + 790,7,9,0,0,790,791,7,9,0,0,791,98,1,0,0,0,792,800,5,39,0,0,793, + 794,5,92,0,0,794,799,9,0,0,0,795,796,5,39,0,0,796,799,5,39,0,0,797, + 799,8,27,0,0,798,793,1,0,0,0,798,795,1,0,0,0,798,797,1,0,0,0,799, + 802,1,0,0,0,800,798,1,0,0,0,800,801,1,0,0,0,801,803,1,0,0,0,802, + 800,1,0,0,0,803,804,5,39,0,0,804,100,1,0,0,0,805,806,7,10,0,0,806, + 807,7,12,0,0,807,808,7,2,0,0,808,809,7,26,0,0,809,102,1,0,0,0,810, + 811,7,8,0,0,811,812,7,17,0,0,812,813,7,9,0,0,813,814,1,0,0,0,814, + 815,3,253,126,0,815,104,1,0,0,0,816,817,5,47,0,0,817,818,5,47,0, + 0,818,822,1,0,0,0,819,821,8,20,0,0,820,819,1,0,0,0,821,824,1,0,0, + 0,822,820,1,0,0,0,822,823,1,0,0,0,823,825,1,0,0,0,824,822,1,0,0, + 0,825,826,6,52,0,0,826,106,1,0,0,0,827,828,5,47,0,0,828,829,5,42, + 0,0,829,837,1,0,0,0,830,838,8,28,0,0,831,833,5,42,0,0,832,831,1, + 0,0,0,833,834,1,0,0,0,834,832,1,0,0,0,834,835,1,0,0,0,835,836,1, + 0,0,0,836,838,8,29,0,0,837,830,1,0,0,0,837,832,1,0,0,0,838,842,1, + 0,0,0,839,841,5,42,0,0,840,839,1,0,0,0,841,844,1,0,0,0,842,840,1, + 0,0,0,842,843,1,0,0,0,843,845,1,0,0,0,844,842,1,0,0,0,845,846,5, + 42,0,0,846,847,5,47,0,0,847,848,1,0,0,0,848,849,6,53,0,0,849,108, + 1,0,0,0,850,851,7,25,0,0,851,110,1,0,0,0,852,853,7,7,0,0,853,854, + 7,21,0,0,854,112,1,0,0,0,855,856,7,4,0,0,856,857,7,23,0,0,857,858, + 7,10,0,0,858,859,7,12,0,0,859,114,1,0,0,0,860,861,7,10,0,0,861,862, + 7,9,0,0,862,863,7,1,0,0,863,864,7,10,0,0,864,116,1,0,0,0,865,866, + 7,21,0,0,866,867,7,2,0,0,867,868,7,12,0,0,868,869,7,8,0,0,869,118, + 1,0,0,0,870,871,7,3,0,0,871,872,7,17,0,0,872,873,7,17,0,0,873,874, + 7,9,0,0,874,875,7,10,0,0,875,876,7,6,0,0,876,877,7,12,0,0,877,120, + 1,0,0,0,878,879,7,7,0,0,879,880,5,56,0,0,880,122,1,0,0,0,881,882, + 7,7,0,0,882,883,5,49,0,0,883,884,5,54,0,0,884,124,1,0,0,0,885,886, + 7,7,0,0,886,887,5,51,0,0,887,888,5,50,0,0,888,126,1,0,0,0,889,890, + 7,7,0,0,890,891,5,54,0,0,891,892,5,52,0,0,892,128,1,0,0,0,893,894, + 7,21,0,0,894,895,7,14,0,0,895,896,5,51,0,0,896,897,5,50,0,0,897, + 130,1,0,0,0,898,899,7,21,0,0,899,900,7,14,0,0,900,901,5,54,0,0,901, + 902,5,52,0,0,902,132,1,0,0,0,903,904,7,1,0,0,904,905,7,4,0,0,905, + 906,7,5,0,0,906,907,7,7,0,0,907,908,7,12,0,0,908,909,7,11,0,0,909, + 134,1,0,0,0,910,911,7,3,0,0,911,912,7,7,0,0,912,913,7,12,0,0,913, + 914,7,6,0,0,914,915,7,5,0,0,915,916,7,15,0,0,916,136,1,0,0,0,917, + 918,7,13,0,0,918,919,7,6,0,0,919,920,7,4,0,0,920,921,7,10,0,0,921, + 138,1,0,0,0,922,923,7,7,0,0,923,924,7,12,0,0,924,925,7,4,0,0,925, + 926,7,10,0,0,926,927,7,5,0,0,927,928,7,19,0,0,928,929,7,6,0,0,929, + 930,7,9,0,0,930,931,5,95,0,0,931,932,7,15,0,0,932,933,7,10,0,0,933, + 934,7,6,0,0,934,935,7,5,0,0,935,140,1,0,0,0,936,937,7,7,0,0,937, + 938,7,12,0,0,938,939,7,4,0,0,939,940,7,10,0,0,940,941,7,5,0,0,941, + 942,7,19,0,0,942,943,7,6,0,0,943,944,7,9,0,0,944,945,5,95,0,0,945, + 946,7,13,0,0,946,947,7,6,0,0,947,948,7,15,0,0,948,142,1,0,0,0,949, + 950,7,7,0,0,950,951,7,12,0,0,951,952,7,4,0,0,952,953,7,10,0,0,953, + 954,7,5,0,0,954,955,7,19,0,0,955,956,7,6,0,0,956,957,7,9,0,0,957, + 958,5,95,0,0,958,959,7,8,0,0,959,960,7,17,0,0,960,961,7,26,0,0,961, + 962,7,14,0,0,962,963,7,17,0,0,963,964,7,2,0,0,964,965,7,12,0,0,965, + 966,7,13,0,0,966,144,1,0,0,0,967,968,7,2,0,0,968,969,7,2,0,0,969, + 970,7,7,0,0,970,971,7,13,0,0,971,146,1,0,0,0,972,973,7,13,0,0,973, + 974,7,10,0,0,974,975,7,8,0,0,975,976,7,7,0,0,976,977,7,26,0,0,977, + 978,7,6,0,0,978,979,7,9,0,0,979,148,1,0,0,0,980,981,7,14,0,0,981, + 982,7,5,0,0,982,983,7,10,0,0,983,984,7,8,0,0,984,985,7,7,0,0,985, + 986,7,1,0,0,986,987,7,7,0,0,987,988,7,17,0,0,988,989,7,12,0,0,989, + 990,5,95,0,0,990,991,7,4,0,0,991,992,7,7,0,0,992,993,7,26,0,0,993, + 994,7,10,0,0,994,150,1,0,0,0,995,996,7,14,0,0,996,997,7,5,0,0,997, + 998,7,10,0,0,998,999,7,8,0,0,999,1000,7,7,0,0,1000,1001,7,1,0,0, + 1001,1002,7,7,0,0,1002,1003,7,17,0,0,1003,1004,7,12,0,0,1004,1005, + 5,95,0,0,1005,1006,7,4,0,0,1006,1007,7,7,0,0,1007,1008,7,26,0,0, + 1008,1009,7,10,0,0,1009,1010,7,1,0,0,1010,1011,7,4,0,0,1011,1012, + 7,6,0,0,1012,1013,7,26,0,0,1013,1014,7,14,0,0,1014,152,1,0,0,0,1015, + 1016,7,14,0,0,1016,1017,7,5,0,0,1017,1018,7,10,0,0,1018,1019,7,8, + 0,0,1019,1020,7,7,0,0,1020,1021,7,1,0,0,1021,1022,7,7,0,0,1022,1023, + 7,17,0,0,1023,1024,7,12,0,0,1024,1025,5,95,0,0,1025,1026,7,4,0,0, + 1026,1027,7,7,0,0,1027,1028,7,26,0,0,1028,1029,7,10,0,0,1029,1030, + 7,1,0,0,1030,1031,7,4,0,0,1031,1032,7,6,0,0,1032,1033,7,26,0,0,1033, + 1034,7,14,0,0,1034,1035,5,95,0,0,1035,1036,7,4,0,0,1036,1037,7,30, + 0,0,1037,154,1,0,0,0,1038,1039,7,21,0,0,1039,1040,7,7,0,0,1040,1041, + 7,16,0,0,1041,1042,7,10,0,0,1042,1043,7,13,0,0,1043,1044,7,8,0,0, + 1044,1045,7,23,0,0,1045,1046,7,6,0,0,1046,1047,7,5,0,0,1047,156, + 1,0,0,0,1048,1049,7,19,0,0,1049,1050,7,6,0,0,1050,1051,7,5,0,0,1051, + 1052,7,8,0,0,1052,1053,7,23,0,0,1053,1054,7,6,0,0,1054,1055,7,5, + 0,0,1055,158,1,0,0,0,1056,1057,7,21,0,0,1057,1058,7,7,0,0,1058,1059, + 7,16,0,0,1059,1060,7,10,0,0,1060,1061,7,13,0,0,1061,1062,7,3,0,0, + 1062,1063,7,7,0,0,1063,1064,7,12,0,0,1064,1065,7,6,0,0,1065,1066, + 7,5,0,0,1066,1067,7,15,0,0,1067,160,1,0,0,0,1068,1069,7,1,0,0,1069, + 1070,7,4,0,0,1070,1071,7,5,0,0,1071,1072,7,2,0,0,1072,1073,7,8,0, + 0,1073,1074,7,4,0,0,1074,162,1,0,0,0,1075,1076,7,12,0,0,1076,1077, + 7,1,0,0,1077,1078,7,4,0,0,1078,1079,7,5,0,0,1079,1080,7,2,0,0,1080, + 1081,7,8,0,0,1081,1082,7,4,0,0,1082,164,1,0,0,0,1083,1084,7,9,0, + 0,1084,1085,7,7,0,0,1085,1086,7,1,0,0,1086,1087,7,4,0,0,1087,166, + 1,0,0,0,1088,1089,7,26,0,0,1089,1090,7,6,0,0,1090,1091,7,14,0,0, + 1091,168,1,0,0,0,1092,1093,7,2,0,0,1093,1094,5,33,0,0,1094,170,1, + 0,0,0,1095,1096,7,3,0,0,1096,1097,7,17,0,0,1097,1098,7,17,0,0,1098, + 1099,7,9,0,0,1099,172,1,0,0,0,1100,1101,7,1,0,0,1101,1102,7,4,0, + 0,1102,1103,7,5,0,0,1103,174,1,0,0,0,1104,1105,7,19,0,0,1105,1106, + 7,3,0,0,1106,1107,7,7,0,0,1107,1108,7,12,0,0,1108,176,1,0,0,0,1109, + 1110,7,7,0,0,1110,1111,7,15,0,0,1111,1112,7,10,0,0,1112,1113,7,6, + 0,0,1113,1114,7,5,0,0,1114,178,1,0,0,0,1115,1116,7,7,0,0,1116,1117, + 7,13,0,0,1117,1118,7,6,0,0,1118,1119,7,15,0,0,1119,180,1,0,0,0,1120, + 1121,7,7,0,0,1121,1122,7,8,0,0,1122,1123,7,17,0,0,1123,1124,7,26, + 0,0,1124,1125,7,14,0,0,1125,1126,7,17,0,0,1126,1127,7,2,0,0,1127, + 1128,7,12,0,0,1128,1129,7,13,0,0,1129,182,1,0,0,0,1130,1131,7,13, + 0,0,1131,1132,7,10,0,0,1132,1133,7,8,0,0,1133,184,1,0,0,0,1134,1135, + 7,14,0,0,1135,1136,7,4,0,0,1136,186,1,0,0,0,1137,1138,7,14,0,0,1138, + 1139,7,4,0,0,1139,1140,7,1,0,0,1140,188,1,0,0,0,1141,1142,7,14,0, + 0,1142,1143,7,4,0,0,1143,1144,7,1,0,0,1144,1145,7,4,0,0,1145,1146, + 7,30,0,0,1146,190,1,0,0,0,1147,1148,7,21,0,0,1148,1149,7,8,0,0,1149, + 1150,7,23,0,0,1150,1151,7,6,0,0,1151,1152,7,5,0,0,1152,192,1,0,0, + 0,1153,1154,7,19,0,0,1154,1155,7,8,0,0,1155,1156,7,23,0,0,1156,1157, + 7,6,0,0,1157,1158,7,5,0,0,1158,194,1,0,0,0,1159,1160,7,21,0,0,1160, + 1161,7,3,0,0,1161,1162,7,7,0,0,1162,1163,7,12,0,0,1163,196,1,0,0, + 0,1164,1165,7,6,0,0,1165,1166,7,12,0,0,1166,1167,7,15,0,0,1167,198, + 1,0,0,0,1168,1169,3,197,98,0,1169,1170,7,25,0,0,1170,200,1,0,0,0, + 1171,1172,5,58,0,0,1172,1173,5,58,0,0,1173,202,1,0,0,0,1174,1175, + 5,43,0,0,1175,204,1,0,0,0,1176,1177,5,45,0,0,1177,206,1,0,0,0,1178, + 1179,5,42,0,0,1179,208,1,0,0,0,1180,1181,5,47,0,0,1181,210,1,0,0, + 0,1182,1183,5,37,0,0,1183,212,1,0,0,0,1184,1185,5,61,0,0,1185,214, + 1,0,0,0,1186,1187,5,33,0,0,1187,1188,5,61,0,0,1188,216,1,0,0,0,1189, + 1190,5,62,0,0,1190,1191,5,61,0,0,1191,218,1,0,0,0,1192,1193,5,60, + 0,0,1193,1194,5,61,0,0,1194,220,1,0,0,0,1195,1196,5,62,0,0,1196, + 222,1,0,0,0,1197,1198,5,60,0,0,1198,224,1,0,0,0,1199,1200,5,33,0, + 0,1200,226,1,0,0,0,1201,1202,5,40,0,0,1202,228,1,0,0,0,1203,1204, + 5,41,0,0,1204,230,1,0,0,0,1205,1206,5,91,0,0,1206,232,1,0,0,0,1207, + 1208,5,93,0,0,1208,234,1,0,0,0,1209,1210,5,44,0,0,1210,236,1,0,0, + 0,1211,1212,5,58,0,0,1212,238,1,0,0,0,1213,1214,5,63,0,0,1214,240, + 1,0,0,0,1215,1216,5,35,0,0,1216,242,1,0,0,0,1217,1218,5,46,0,0,1218, + 244,1,0,0,0,1219,1220,7,6,0,0,1220,1221,7,12,0,0,1221,1222,7,13, + 0,0,1222,246,1,0,0,0,1223,1224,7,17,0,0,1224,1225,7,5,0,0,1225,248, + 1,0,0,0,1226,1227,5,58,0,0,1227,1228,5,61,0,0,1228,250,1,0,0,0,1229, + 1230,5,45,0,0,1230,1231,5,62,0,0,1231,252,1,0,0,0,1232,1236,2,49, + 57,0,1233,1235,3,255,127,0,1234,1233,1,0,0,0,1235,1238,1,0,0,0,1236, + 1234,1,0,0,0,1236,1237,1,0,0,0,1237,1241,1,0,0,0,1238,1236,1,0,0, + 0,1239,1241,5,48,0,0,1240,1232,1,0,0,0,1240,1239,1,0,0,0,1241,254, + 1,0,0,0,1242,1243,2,48,57,0,1243,256,1,0,0,0,1244,1246,5,45,0,0, + 1245,1244,1,0,0,0,1245,1246,1,0,0,0,1246,1247,1,0,0,0,1247,1248, + 3,253,126,0,1248,258,1,0,0,0,1249,1250,7,2,0,0,1250,1251,7,12,0, + 0,1251,1252,7,31,0,0,1252,1253,7,12,0,0,1253,1254,7,17,0,0,1254, + 1255,7,22,0,0,1255,1256,7,12,0,0,1256,260,1,0,0,0,1257,1262,7,32, + 0,0,1258,1261,7,32,0,0,1259,1261,3,255,127,0,1260,1258,1,0,0,0,1260, + 1259,1,0,0,0,1261,1264,1,0,0,0,1262,1260,1,0,0,0,1262,1263,1,0,0, + 0,1263,262,1,0,0,0,1264,1262,1,0,0,0,1265,1267,5,13,0,0,1266,1268, + 5,10,0,0,1267,1266,1,0,0,0,1267,1268,1,0,0,0,1268,1271,1,0,0,0,1269, + 1271,5,10,0,0,1270,1265,1,0,0,0,1270,1269,1,0,0,0,1271,264,1,0,0, + 0,54,0,268,376,382,388,390,398,402,553,558,563,569,571,574,579,585, + 588,592,597,599,602,611,622,647,649,671,673,684,686,720,726,734, + 740,747,752,759,764,770,775,780,785,798,800,822,834,837,842,1236, + 1240,1245,1260,1262,1267,1270,1,0,1,0 ] class FuncTestCaseLexer(Lexer): @@ -602,8 +606,9 @@ class FuncTestCaseLexer(Lexer): Assign = 121 Arrow = 122 Number = 123 - Identifier = 124 - Newline = 125 + Unknown = 124 + Identifier = 125 + Newline = 126 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -627,7 +632,7 @@ class FuncTestCaseLexer(Lexer): "'VCHAR'", "'FBIN'", "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", "'AND'", - "'OR'", "':='", "'->'" ] + "'OR'", "':='", "'->'", "'UNKNOWN'" ] symbolicNames = [ "", "Whitespace", "TripleHash", "SubstraitScalarTest", "SubstraitAggregateTest", @@ -653,7 +658,7 @@ class FuncTestCaseLexer(Lexer): "ForwardSlash", "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", - "Number", "Identifier", "Newline" ] + "Number", "Unknown", "Identifier", "Newline" ] ruleNames = [ "Whitespace", "TripleHash", "SubstraitScalarTest", "SubstraitAggregateTest", "SubstraitInclude", "SubstraitDependency", "ExtensionUrn", @@ -681,7 +686,7 @@ class FuncTestCaseLexer(Lexer): "Percent", "Eq", "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", - "Int", "Digit", "Number", "Identifier", "Newline" ] + "Int", "Digit", "Number", "Unknown", "Identifier", "Newline" ] grammarFileName = "FuncTestCaseLexer.g4" diff --git a/tests/coverage/antlr_parser/FuncTestCaseParser.py b/tests/coverage/antlr_parser/FuncTestCaseParser.py index 836b6d077..0a094d6be 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParser.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParser.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,1,125,698,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, + 4,1,126,702,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,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2,26,7, @@ -52,222 +52,224 @@ def serializedATN(): 1,45,1,45,1,45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,4,46,485, 8,46,11,46,12,46,486,1,46,3,46,490,8,46,1,47,1,47,1,47,1,47,1,47, 1,48,1,48,3,48,499,8,48,1,49,1,49,1,49,1,49,1,49,1,49,1,49,1,49, - 1,49,3,49,510,8,49,1,49,1,49,1,49,3,49,515,8,49,3,49,517,8,49,1, - 50,1,50,3,50,521,8,50,1,51,1,51,3,51,525,8,51,1,52,1,52,3,52,529, - 8,52,1,53,1,53,3,53,533,8,53,1,54,1,54,3,54,537,8,54,1,55,1,55,3, - 55,541,8,55,1,56,1,56,3,56,545,8,56,1,57,1,57,3,57,549,8,57,1,57, - 1,57,1,57,1,57,3,57,555,8,57,1,58,1,58,3,58,559,8,58,1,58,1,58,1, - 58,1,58,3,58,565,8,58,1,59,1,59,3,59,569,8,59,1,59,1,59,1,59,1,59, - 1,60,1,60,3,60,577,8,60,1,60,1,60,1,60,1,60,1,61,1,61,3,61,585,8, - 61,1,61,1,61,1,61,1,61,1,62,1,62,3,62,593,8,62,1,62,1,62,1,62,1, - 62,1,62,1,62,3,62,601,8,62,1,63,1,63,3,63,605,8,63,1,63,1,63,1,63, - 1,63,1,64,1,64,3,64,613,8,64,1,64,1,64,1,64,1,64,1,65,1,65,3,65, - 621,8,65,1,65,1,65,1,65,1,65,1,66,1,66,3,66,629,8,66,1,66,1,66,1, - 66,1,66,1,67,1,67,3,67,637,8,67,1,67,1,67,1,67,1,67,1,67,1,67,1, - 68,1,68,1,68,1,68,1,68,5,68,650,8,68,10,68,12,68,653,9,68,1,68,1, - 68,3,68,657,8,68,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1,69,1, - 69,1,69,3,69,670,8,69,1,70,1,70,1,71,1,71,1,72,1,72,1,72,1,72,1, - 73,1,73,1,74,1,74,1,75,1,75,1,75,5,75,687,8,75,10,75,12,75,690,9, - 75,1,76,1,76,1,77,1,77,3,77,696,8,77,1,77,0,0,78,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,0,21,1,0,3,4,2,0,19, - 19,27,27,2,0,56,56,82,82,2,0,63,63,83,83,2,0,64,64,84,84,1,0,57, - 60,1,0,61,62,2,0,66,66,85,85,2,0,67,67,86,86,2,0,68,68,87,87,2,0, - 74,74,92,92,2,0,75,75,93,93,2,0,76,76,94,94,2,0,70,70,88,88,2,0, - 71,71,89,89,2,0,72,72,90,90,2,0,73,73,91,91,1,0,11,12,3,0,13,14, - 22,23,124,124,5,0,15,21,24,24,28,28,46,46,124,124,2,0,24,24,119, - 120,725,0,156,1,0,0,0,2,164,1,0,0,0,4,172,1,0,0,0,6,177,1,0,0,0, - 8,182,1,0,0,0,10,187,1,0,0,0,12,189,1,0,0,0,14,218,1,0,0,0,16,220, - 1,0,0,0,18,230,1,0,0,0,20,252,1,0,0,0,22,254,1,0,0,0,24,285,1,0, - 0,0,26,287,1,0,0,0,28,302,1,0,0,0,30,315,1,0,0,0,32,319,1,0,0,0, - 34,343,1,0,0,0,36,345,1,0,0,0,38,353,1,0,0,0,40,365,1,0,0,0,42,371, - 1,0,0,0,44,376,1,0,0,0,46,378,1,0,0,0,48,380,1,0,0,0,50,384,1,0, - 0,0,52,388,1,0,0,0,54,392,1,0,0,0,56,396,1,0,0,0,58,400,1,0,0,0, - 60,404,1,0,0,0,62,408,1,0,0,0,64,412,1,0,0,0,66,416,1,0,0,0,68,420, - 1,0,0,0,70,424,1,0,0,0,72,428,1,0,0,0,74,432,1,0,0,0,76,436,1,0, - 0,0,78,440,1,0,0,0,80,444,1,0,0,0,82,448,1,0,0,0,84,452,1,0,0,0, - 86,456,1,0,0,0,88,471,1,0,0,0,90,473,1,0,0,0,92,489,1,0,0,0,94,491, - 1,0,0,0,96,498,1,0,0,0,98,516,1,0,0,0,100,518,1,0,0,0,102,522,1, - 0,0,0,104,526,1,0,0,0,106,530,1,0,0,0,108,534,1,0,0,0,110,538,1, - 0,0,0,112,542,1,0,0,0,114,546,1,0,0,0,116,556,1,0,0,0,118,566,1, - 0,0,0,120,574,1,0,0,0,122,582,1,0,0,0,124,590,1,0,0,0,126,602,1, - 0,0,0,128,610,1,0,0,0,130,618,1,0,0,0,132,626,1,0,0,0,134,634,1, - 0,0,0,136,656,1,0,0,0,138,669,1,0,0,0,140,671,1,0,0,0,142,673,1, - 0,0,0,144,675,1,0,0,0,146,679,1,0,0,0,148,681,1,0,0,0,150,683,1, - 0,0,0,152,691,1,0,0,0,154,695,1,0,0,0,156,158,3,2,1,0,157,159,3, - 14,7,0,158,157,1,0,0,0,159,160,1,0,0,0,160,158,1,0,0,0,160,161,1, - 0,0,0,161,162,1,0,0,0,162,163,5,0,0,1,163,1,1,0,0,0,164,165,3,4, - 2,0,165,169,3,6,3,0,166,168,3,8,4,0,167,166,1,0,0,0,168,171,1,0, - 0,0,169,167,1,0,0,0,169,170,1,0,0,0,170,3,1,0,0,0,171,169,1,0,0, - 0,172,173,5,2,0,0,173,174,7,0,0,0,174,175,5,115,0,0,175,176,5,8, - 0,0,176,5,1,0,0,0,177,178,5,2,0,0,178,179,5,5,0,0,179,180,5,115, - 0,0,180,181,5,7,0,0,181,7,1,0,0,0,182,183,5,2,0,0,183,184,5,6,0, - 0,184,185,5,115,0,0,185,186,5,7,0,0,186,9,1,0,0,0,187,188,5,9,0, - 0,188,11,1,0,0,0,189,190,3,154,77,0,190,191,5,110,0,0,191,192,3, - 16,8,0,192,197,5,111,0,0,193,194,5,112,0,0,194,195,3,150,75,0,195, - 196,5,113,0,0,196,198,1,0,0,0,197,193,1,0,0,0,197,198,1,0,0,0,198, - 199,1,0,0,0,199,200,5,103,0,0,200,201,3,18,9,0,201,13,1,0,0,0,202, - 204,3,10,5,0,203,202,1,0,0,0,203,204,1,0,0,0,204,206,1,0,0,0,205, - 207,3,12,6,0,206,205,1,0,0,0,207,208,1,0,0,0,208,206,1,0,0,0,208, - 209,1,0,0,0,209,219,1,0,0,0,210,212,3,10,5,0,211,210,1,0,0,0,211, - 212,1,0,0,0,212,214,1,0,0,0,213,215,3,22,11,0,214,213,1,0,0,0,215, - 216,1,0,0,0,216,214,1,0,0,0,216,217,1,0,0,0,217,219,1,0,0,0,218, - 203,1,0,0,0,218,211,1,0,0,0,219,15,1,0,0,0,220,225,3,20,10,0,221, - 222,5,114,0,0,222,224,3,20,10,0,223,221,1,0,0,0,224,227,1,0,0,0, - 225,223,1,0,0,0,225,226,1,0,0,0,226,17,1,0,0,0,227,225,1,0,0,0,228, - 231,3,20,10,0,229,231,3,142,71,0,230,228,1,0,0,0,230,229,1,0,0,0, - 231,19,1,0,0,0,232,253,3,48,24,0,233,253,3,84,42,0,234,253,3,50, - 25,0,235,253,3,52,26,0,236,253,3,56,28,0,237,253,3,58,29,0,238,253, - 3,54,27,0,239,253,3,60,30,0,240,253,3,62,31,0,241,253,3,64,32,0, - 242,253,3,66,33,0,243,253,3,68,34,0,244,253,3,70,35,0,245,253,3, - 72,36,0,246,253,3,74,37,0,247,253,3,76,38,0,248,253,3,78,39,0,249, - 253,3,80,40,0,250,253,3,82,41,0,251,253,5,124,0,0,252,232,1,0,0, - 0,252,233,1,0,0,0,252,234,1,0,0,0,252,235,1,0,0,0,252,236,1,0,0, - 0,252,237,1,0,0,0,252,238,1,0,0,0,252,239,1,0,0,0,252,240,1,0,0, - 0,252,241,1,0,0,0,252,242,1,0,0,0,252,243,1,0,0,0,252,244,1,0,0, - 0,252,245,1,0,0,0,252,246,1,0,0,0,252,247,1,0,0,0,252,248,1,0,0, - 0,252,249,1,0,0,0,252,250,1,0,0,0,252,251,1,0,0,0,253,21,1,0,0,0, - 254,259,3,24,12,0,255,256,5,112,0,0,256,257,3,150,75,0,257,258,5, - 113,0,0,258,260,1,0,0,0,259,255,1,0,0,0,259,260,1,0,0,0,260,261, - 1,0,0,0,261,262,5,103,0,0,262,263,3,18,9,0,263,23,1,0,0,0,264,265, - 3,26,13,0,265,266,3,154,77,0,266,268,5,110,0,0,267,269,3,36,18,0, - 268,267,1,0,0,0,268,269,1,0,0,0,269,270,1,0,0,0,270,271,5,111,0, - 0,271,286,1,0,0,0,272,273,3,28,14,0,273,274,3,154,77,0,274,276,5, - 110,0,0,275,277,3,38,19,0,276,275,1,0,0,0,276,277,1,0,0,0,277,278, - 1,0,0,0,278,279,5,111,0,0,279,286,1,0,0,0,280,281,3,154,77,0,281, - 282,5,110,0,0,282,283,3,30,15,0,283,284,5,111,0,0,284,286,1,0,0, - 0,285,264,1,0,0,0,285,272,1,0,0,0,285,280,1,0,0,0,286,25,1,0,0,0, - 287,288,5,10,0,0,288,289,5,124,0,0,289,290,5,110,0,0,290,295,3,96, - 48,0,291,292,5,114,0,0,292,294,3,96,48,0,293,291,1,0,0,0,294,297, - 1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0,296,298,1,0,0,0,297,295, - 1,0,0,0,298,299,5,111,0,0,299,300,5,103,0,0,300,301,3,28,14,0,301, - 27,1,0,0,0,302,311,5,110,0,0,303,308,3,32,16,0,304,305,5,114,0,0, - 305,307,3,32,16,0,306,304,1,0,0,0,307,310,1,0,0,0,308,306,1,0,0, - 0,308,309,1,0,0,0,309,312,1,0,0,0,310,308,1,0,0,0,311,303,1,0,0, - 0,311,312,1,0,0,0,312,313,1,0,0,0,313,314,5,111,0,0,314,29,1,0,0, - 0,315,316,3,32,16,0,316,317,5,97,0,0,317,318,3,96,48,0,318,31,1, - 0,0,0,319,328,5,110,0,0,320,325,3,34,17,0,321,322,5,114,0,0,322, - 324,3,34,17,0,323,321,1,0,0,0,324,327,1,0,0,0,325,323,1,0,0,0,325, - 326,1,0,0,0,326,329,1,0,0,0,327,325,1,0,0,0,328,320,1,0,0,0,328, - 329,1,0,0,0,329,330,1,0,0,0,330,331,5,111,0,0,331,33,1,0,0,0,332, - 344,5,46,0,0,333,344,3,44,22,0,334,344,5,28,0,0,335,344,5,47,0,0, - 336,344,5,32,0,0,337,344,5,31,0,0,338,344,5,30,0,0,339,344,5,29, - 0,0,340,344,5,43,0,0,341,344,5,44,0,0,342,344,5,45,0,0,343,332,1, - 0,0,0,343,333,1,0,0,0,343,334,1,0,0,0,343,335,1,0,0,0,343,336,1, - 0,0,0,343,337,1,0,0,0,343,338,1,0,0,0,343,339,1,0,0,0,343,340,1, - 0,0,0,343,341,1,0,0,0,343,342,1,0,0,0,344,35,1,0,0,0,345,350,3,40, - 20,0,346,347,5,114,0,0,347,349,3,40,20,0,348,346,1,0,0,0,349,352, - 1,0,0,0,350,348,1,0,0,0,350,351,1,0,0,0,351,37,1,0,0,0,352,350,1, - 0,0,0,353,358,3,42,21,0,354,355,5,114,0,0,355,357,3,42,21,0,356, - 354,1,0,0,0,357,360,1,0,0,0,358,356,1,0,0,0,358,359,1,0,0,0,359, - 39,1,0,0,0,360,358,1,0,0,0,361,362,5,124,0,0,362,363,5,118,0,0,363, - 366,5,49,0,0,364,366,3,20,10,0,365,361,1,0,0,0,365,364,1,0,0,0,366, - 41,1,0,0,0,367,368,5,49,0,0,368,369,5,97,0,0,369,372,3,96,48,0,370, - 372,3,20,10,0,371,367,1,0,0,0,371,370,1,0,0,0,372,43,1,0,0,0,373, - 377,5,26,0,0,374,377,5,25,0,0,375,377,3,46,23,0,376,373,1,0,0,0, - 376,374,1,0,0,0,376,375,1,0,0,0,377,45,1,0,0,0,378,379,7,1,0,0,379, - 47,1,0,0,0,380,381,5,46,0,0,381,382,5,97,0,0,382,383,3,96,48,0,383, - 49,1,0,0,0,384,385,5,25,0,0,385,386,5,97,0,0,386,387,3,106,53,0, - 387,51,1,0,0,0,388,389,3,44,22,0,389,390,5,97,0,0,390,391,3,108, - 54,0,391,53,1,0,0,0,392,393,3,44,22,0,393,394,5,97,0,0,394,395,3, - 124,62,0,395,55,1,0,0,0,396,397,5,28,0,0,397,398,5,97,0,0,398,399, - 3,100,50,0,399,57,1,0,0,0,400,401,5,47,0,0,401,402,5,97,0,0,402, - 403,3,102,51,0,403,59,1,0,0,0,404,405,5,32,0,0,405,406,5,97,0,0, - 406,407,3,110,55,0,407,61,1,0,0,0,408,409,5,43,0,0,409,410,5,97, - 0,0,410,411,3,112,56,0,411,63,1,0,0,0,412,413,5,44,0,0,413,414,5, - 97,0,0,414,415,3,114,57,0,415,65,1,0,0,0,416,417,5,45,0,0,417,418, - 5,97,0,0,418,419,3,116,58,0,419,67,1,0,0,0,420,421,5,47,0,0,421, - 422,5,97,0,0,422,423,3,118,59,0,423,69,1,0,0,0,424,425,5,47,0,0, - 425,426,5,97,0,0,426,427,3,120,60,0,427,71,1,0,0,0,428,429,5,47, - 0,0,429,430,5,97,0,0,430,431,3,122,61,0,431,73,1,0,0,0,432,433,5, - 31,0,0,433,434,5,97,0,0,434,435,3,126,63,0,435,75,1,0,0,0,436,437, - 5,30,0,0,437,438,5,97,0,0,438,439,3,128,64,0,439,77,1,0,0,0,440, - 441,5,29,0,0,441,442,5,97,0,0,442,443,3,130,65,0,443,79,1,0,0,0, - 444,445,3,86,43,0,445,446,5,97,0,0,446,447,3,132,66,0,447,81,1,0, - 0,0,448,449,3,90,45,0,449,450,5,97,0,0,450,451,3,134,67,0,451,83, - 1,0,0,0,452,453,5,124,0,0,453,454,5,97,0,0,454,455,5,48,0,0,455, - 85,1,0,0,0,456,465,5,112,0,0,457,462,3,88,44,0,458,459,5,114,0,0, - 459,461,3,88,44,0,460,458,1,0,0,0,461,464,1,0,0,0,462,460,1,0,0, - 0,462,463,1,0,0,0,463,466,1,0,0,0,464,462,1,0,0,0,465,457,1,0,0, - 0,465,466,1,0,0,0,466,467,1,0,0,0,467,468,5,113,0,0,468,87,1,0,0, - 0,469,472,3,34,17,0,470,472,3,86,43,0,471,469,1,0,0,0,471,470,1, - 0,0,0,472,89,1,0,0,0,473,474,5,110,0,0,474,475,3,92,46,0,475,476, - 5,122,0,0,476,477,3,94,47,0,477,478,5,111,0,0,478,91,1,0,0,0,479, - 490,5,124,0,0,480,481,5,110,0,0,481,484,5,124,0,0,482,483,5,114, - 0,0,483,485,5,124,0,0,484,482,1,0,0,0,485,486,1,0,0,0,486,484,1, - 0,0,0,486,487,1,0,0,0,487,488,1,0,0,0,488,490,5,111,0,0,489,479, - 1,0,0,0,489,480,1,0,0,0,490,93,1,0,0,0,491,492,3,154,77,0,492,493, - 5,110,0,0,493,494,3,16,8,0,494,495,5,111,0,0,495,95,1,0,0,0,496, - 499,3,98,49,0,497,499,3,138,69,0,498,496,1,0,0,0,498,497,1,0,0,0, - 499,97,1,0,0,0,500,517,3,100,50,0,501,517,3,106,53,0,502,517,3,108, - 54,0,503,517,3,102,51,0,504,517,3,104,52,0,505,517,3,110,55,0,506, - 517,3,112,56,0,507,509,5,69,0,0,508,510,5,116,0,0,509,508,1,0,0, - 0,509,510,1,0,0,0,510,517,1,0,0,0,511,512,5,81,0,0,512,514,5,124, - 0,0,513,515,5,116,0,0,514,513,1,0,0,0,514,515,1,0,0,0,515,517,1, - 0,0,0,516,500,1,0,0,0,516,501,1,0,0,0,516,502,1,0,0,0,516,503,1, - 0,0,0,516,504,1,0,0,0,516,505,1,0,0,0,516,506,1,0,0,0,516,507,1, - 0,0,0,516,511,1,0,0,0,517,99,1,0,0,0,518,520,7,2,0,0,519,521,5,116, - 0,0,520,519,1,0,0,0,520,521,1,0,0,0,521,101,1,0,0,0,522,524,7,3, - 0,0,523,525,5,116,0,0,524,523,1,0,0,0,524,525,1,0,0,0,525,103,1, - 0,0,0,526,528,7,4,0,0,527,529,5,116,0,0,528,527,1,0,0,0,528,529, - 1,0,0,0,529,105,1,0,0,0,530,532,7,5,0,0,531,533,5,116,0,0,532,531, - 1,0,0,0,532,533,1,0,0,0,533,107,1,0,0,0,534,536,7,6,0,0,535,537, - 5,116,0,0,536,535,1,0,0,0,536,537,1,0,0,0,537,109,1,0,0,0,538,540, - 5,65,0,0,539,541,5,116,0,0,540,539,1,0,0,0,540,541,1,0,0,0,541,111, - 1,0,0,0,542,544,7,7,0,0,543,545,5,116,0,0,544,543,1,0,0,0,544,545, - 1,0,0,0,545,113,1,0,0,0,546,548,7,8,0,0,547,549,5,116,0,0,548,547, - 1,0,0,0,548,549,1,0,0,0,549,554,1,0,0,0,550,551,5,41,0,0,551,552, - 3,140,70,0,552,553,5,42,0,0,553,555,1,0,0,0,554,550,1,0,0,0,554, - 555,1,0,0,0,555,115,1,0,0,0,556,558,7,9,0,0,557,559,5,116,0,0,558, - 557,1,0,0,0,558,559,1,0,0,0,559,564,1,0,0,0,560,561,5,41,0,0,561, - 562,3,140,70,0,562,563,5,42,0,0,563,565,1,0,0,0,564,560,1,0,0,0, - 564,565,1,0,0,0,565,117,1,0,0,0,566,568,7,10,0,0,567,569,5,116,0, - 0,568,567,1,0,0,0,568,569,1,0,0,0,569,570,1,0,0,0,570,571,5,41,0, - 0,571,572,3,140,70,0,572,573,5,42,0,0,573,119,1,0,0,0,574,576,7, - 11,0,0,575,577,5,116,0,0,576,575,1,0,0,0,576,577,1,0,0,0,577,578, - 1,0,0,0,578,579,5,41,0,0,579,580,3,140,70,0,580,581,5,42,0,0,581, - 121,1,0,0,0,582,584,7,12,0,0,583,585,5,116,0,0,584,583,1,0,0,0,584, - 585,1,0,0,0,585,586,1,0,0,0,586,587,5,41,0,0,587,588,3,140,70,0, - 588,589,5,42,0,0,589,123,1,0,0,0,590,592,7,13,0,0,591,593,5,116, - 0,0,592,591,1,0,0,0,592,593,1,0,0,0,593,600,1,0,0,0,594,595,5,41, - 0,0,595,596,3,140,70,0,596,597,5,114,0,0,597,598,3,140,70,0,598, - 599,5,42,0,0,599,601,1,0,0,0,600,594,1,0,0,0,600,601,1,0,0,0,601, - 125,1,0,0,0,602,604,7,14,0,0,603,605,5,116,0,0,604,603,1,0,0,0,604, - 605,1,0,0,0,605,606,1,0,0,0,606,607,5,41,0,0,607,608,3,140,70,0, - 608,609,5,42,0,0,609,127,1,0,0,0,610,612,7,15,0,0,611,613,5,116, - 0,0,612,611,1,0,0,0,612,613,1,0,0,0,613,614,1,0,0,0,614,615,5,41, - 0,0,615,616,3,140,70,0,616,617,5,42,0,0,617,129,1,0,0,0,618,620, - 7,16,0,0,619,621,5,116,0,0,620,619,1,0,0,0,620,621,1,0,0,0,621,622, - 1,0,0,0,622,623,5,41,0,0,623,624,3,140,70,0,624,625,5,42,0,0,625, - 131,1,0,0,0,626,628,5,79,0,0,627,629,5,116,0,0,628,627,1,0,0,0,628, - 629,1,0,0,0,629,630,1,0,0,0,630,631,5,41,0,0,631,632,3,96,48,0,632, - 633,5,42,0,0,633,133,1,0,0,0,634,636,5,55,0,0,635,637,5,116,0,0, - 636,635,1,0,0,0,636,637,1,0,0,0,637,638,1,0,0,0,638,639,5,41,0,0, - 639,640,3,136,68,0,640,641,5,122,0,0,641,642,3,96,48,0,642,643,5, - 42,0,0,643,135,1,0,0,0,644,657,3,96,48,0,645,646,5,110,0,0,646,651, - 3,96,48,0,647,648,5,114,0,0,648,650,3,96,48,0,649,647,1,0,0,0,650, - 653,1,0,0,0,651,649,1,0,0,0,651,652,1,0,0,0,652,654,1,0,0,0,653, - 651,1,0,0,0,654,655,5,111,0,0,655,657,1,0,0,0,656,644,1,0,0,0,656, - 645,1,0,0,0,657,137,1,0,0,0,658,670,3,118,59,0,659,670,3,120,60, - 0,660,670,3,122,61,0,661,670,3,124,62,0,662,670,3,114,57,0,663,670, - 3,116,58,0,664,670,3,126,63,0,665,670,3,128,64,0,666,670,3,130,65, - 0,667,670,3,132,66,0,668,670,3,134,67,0,669,658,1,0,0,0,669,659, - 1,0,0,0,669,660,1,0,0,0,669,661,1,0,0,0,669,662,1,0,0,0,669,663, - 1,0,0,0,669,664,1,0,0,0,669,665,1,0,0,0,669,666,1,0,0,0,669,667, - 1,0,0,0,669,668,1,0,0,0,670,139,1,0,0,0,671,672,5,25,0,0,672,141, - 1,0,0,0,673,674,7,17,0,0,674,143,1,0,0,0,675,676,3,146,73,0,676, - 677,5,115,0,0,677,678,3,148,74,0,678,145,1,0,0,0,679,680,7,18,0, - 0,680,147,1,0,0,0,681,682,7,19,0,0,682,149,1,0,0,0,683,688,3,144, - 72,0,684,685,5,114,0,0,685,687,3,144,72,0,686,684,1,0,0,0,687,690, - 1,0,0,0,688,686,1,0,0,0,688,689,1,0,0,0,689,151,1,0,0,0,690,688, - 1,0,0,0,691,692,7,20,0,0,692,153,1,0,0,0,693,696,3,152,76,0,694, - 696,5,124,0,0,695,693,1,0,0,0,695,694,1,0,0,0,696,155,1,0,0,0,61, + 1,49,3,49,510,8,49,1,49,1,49,3,49,514,8,49,1,49,1,49,1,49,3,49,519, + 8,49,3,49,521,8,49,1,50,1,50,3,50,525,8,50,1,51,1,51,3,51,529,8, + 51,1,52,1,52,3,52,533,8,52,1,53,1,53,3,53,537,8,53,1,54,1,54,3,54, + 541,8,54,1,55,1,55,3,55,545,8,55,1,56,1,56,3,56,549,8,56,1,57,1, + 57,3,57,553,8,57,1,57,1,57,1,57,1,57,3,57,559,8,57,1,58,1,58,3,58, + 563,8,58,1,58,1,58,1,58,1,58,3,58,569,8,58,1,59,1,59,3,59,573,8, + 59,1,59,1,59,1,59,1,59,1,60,1,60,3,60,581,8,60,1,60,1,60,1,60,1, + 60,1,61,1,61,3,61,589,8,61,1,61,1,61,1,61,1,61,1,62,1,62,3,62,597, + 8,62,1,62,1,62,1,62,1,62,1,62,1,62,3,62,605,8,62,1,63,1,63,3,63, + 609,8,63,1,63,1,63,1,63,1,63,1,64,1,64,3,64,617,8,64,1,64,1,64,1, + 64,1,64,1,65,1,65,3,65,625,8,65,1,65,1,65,1,65,1,65,1,66,1,66,3, + 66,633,8,66,1,66,1,66,1,66,1,66,1,67,1,67,3,67,641,8,67,1,67,1,67, + 1,67,1,67,1,67,1,67,1,68,1,68,1,68,1,68,1,68,5,68,654,8,68,10,68, + 12,68,657,9,68,1,68,1,68,3,68,661,8,68,1,69,1,69,1,69,1,69,1,69, + 1,69,1,69,1,69,1,69,1,69,1,69,3,69,674,8,69,1,70,1,70,1,71,1,71, + 1,72,1,72,1,72,1,72,1,73,1,73,1,74,1,74,1,75,1,75,1,75,5,75,691, + 8,75,10,75,12,75,694,9,75,1,76,1,76,1,77,1,77,3,77,700,8,77,1,77, + 0,0,78,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,0,21,1,0,3,4,2,0,19,19,27,27,2,0,56,56,82,82,2,0,63,63,83,83, + 2,0,64,64,84,84,1,0,57,60,1,0,61,62,2,0,66,66,85,85,2,0,67,67,86, + 86,2,0,68,68,87,87,2,0,74,74,92,92,2,0,75,75,93,93,2,0,76,76,94, + 94,2,0,70,70,88,88,2,0,71,71,89,89,2,0,72,72,90,90,2,0,73,73,91, + 91,1,0,11,12,3,0,13,14,22,23,125,125,5,0,15,21,24,24,28,28,46,46, + 125,125,2,0,24,24,119,120,731,0,156,1,0,0,0,2,164,1,0,0,0,4,172, + 1,0,0,0,6,177,1,0,0,0,8,182,1,0,0,0,10,187,1,0,0,0,12,189,1,0,0, + 0,14,218,1,0,0,0,16,220,1,0,0,0,18,230,1,0,0,0,20,252,1,0,0,0,22, + 254,1,0,0,0,24,285,1,0,0,0,26,287,1,0,0,0,28,302,1,0,0,0,30,315, + 1,0,0,0,32,319,1,0,0,0,34,343,1,0,0,0,36,345,1,0,0,0,38,353,1,0, + 0,0,40,365,1,0,0,0,42,371,1,0,0,0,44,376,1,0,0,0,46,378,1,0,0,0, + 48,380,1,0,0,0,50,384,1,0,0,0,52,388,1,0,0,0,54,392,1,0,0,0,56,396, + 1,0,0,0,58,400,1,0,0,0,60,404,1,0,0,0,62,408,1,0,0,0,64,412,1,0, + 0,0,66,416,1,0,0,0,68,420,1,0,0,0,70,424,1,0,0,0,72,428,1,0,0,0, + 74,432,1,0,0,0,76,436,1,0,0,0,78,440,1,0,0,0,80,444,1,0,0,0,82,448, + 1,0,0,0,84,452,1,0,0,0,86,456,1,0,0,0,88,471,1,0,0,0,90,473,1,0, + 0,0,92,489,1,0,0,0,94,491,1,0,0,0,96,498,1,0,0,0,98,520,1,0,0,0, + 100,522,1,0,0,0,102,526,1,0,0,0,104,530,1,0,0,0,106,534,1,0,0,0, + 108,538,1,0,0,0,110,542,1,0,0,0,112,546,1,0,0,0,114,550,1,0,0,0, + 116,560,1,0,0,0,118,570,1,0,0,0,120,578,1,0,0,0,122,586,1,0,0,0, + 124,594,1,0,0,0,126,606,1,0,0,0,128,614,1,0,0,0,130,622,1,0,0,0, + 132,630,1,0,0,0,134,638,1,0,0,0,136,660,1,0,0,0,138,673,1,0,0,0, + 140,675,1,0,0,0,142,677,1,0,0,0,144,679,1,0,0,0,146,683,1,0,0,0, + 148,685,1,0,0,0,150,687,1,0,0,0,152,695,1,0,0,0,154,699,1,0,0,0, + 156,158,3,2,1,0,157,159,3,14,7,0,158,157,1,0,0,0,159,160,1,0,0,0, + 160,158,1,0,0,0,160,161,1,0,0,0,161,162,1,0,0,0,162,163,5,0,0,1, + 163,1,1,0,0,0,164,165,3,4,2,0,165,169,3,6,3,0,166,168,3,8,4,0,167, + 166,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169,170,1,0,0,0,170, + 3,1,0,0,0,171,169,1,0,0,0,172,173,5,2,0,0,173,174,7,0,0,0,174,175, + 5,115,0,0,175,176,5,8,0,0,176,5,1,0,0,0,177,178,5,2,0,0,178,179, + 5,5,0,0,179,180,5,115,0,0,180,181,5,7,0,0,181,7,1,0,0,0,182,183, + 5,2,0,0,183,184,5,6,0,0,184,185,5,115,0,0,185,186,5,7,0,0,186,9, + 1,0,0,0,187,188,5,9,0,0,188,11,1,0,0,0,189,190,3,154,77,0,190,191, + 5,110,0,0,191,192,3,16,8,0,192,197,5,111,0,0,193,194,5,112,0,0,194, + 195,3,150,75,0,195,196,5,113,0,0,196,198,1,0,0,0,197,193,1,0,0,0, + 197,198,1,0,0,0,198,199,1,0,0,0,199,200,5,103,0,0,200,201,3,18,9, + 0,201,13,1,0,0,0,202,204,3,10,5,0,203,202,1,0,0,0,203,204,1,0,0, + 0,204,206,1,0,0,0,205,207,3,12,6,0,206,205,1,0,0,0,207,208,1,0,0, + 0,208,206,1,0,0,0,208,209,1,0,0,0,209,219,1,0,0,0,210,212,3,10,5, + 0,211,210,1,0,0,0,211,212,1,0,0,0,212,214,1,0,0,0,213,215,3,22,11, + 0,214,213,1,0,0,0,215,216,1,0,0,0,216,214,1,0,0,0,216,217,1,0,0, + 0,217,219,1,0,0,0,218,203,1,0,0,0,218,211,1,0,0,0,219,15,1,0,0,0, + 220,225,3,20,10,0,221,222,5,114,0,0,222,224,3,20,10,0,223,221,1, + 0,0,0,224,227,1,0,0,0,225,223,1,0,0,0,225,226,1,0,0,0,226,17,1,0, + 0,0,227,225,1,0,0,0,228,231,3,20,10,0,229,231,3,142,71,0,230,228, + 1,0,0,0,230,229,1,0,0,0,231,19,1,0,0,0,232,253,3,48,24,0,233,253, + 3,84,42,0,234,253,3,50,25,0,235,253,3,52,26,0,236,253,3,56,28,0, + 237,253,3,58,29,0,238,253,3,54,27,0,239,253,3,60,30,0,240,253,3, + 62,31,0,241,253,3,64,32,0,242,253,3,66,33,0,243,253,3,68,34,0,244, + 253,3,70,35,0,245,253,3,72,36,0,246,253,3,74,37,0,247,253,3,76,38, + 0,248,253,3,78,39,0,249,253,3,80,40,0,250,253,3,82,41,0,251,253, + 5,125,0,0,252,232,1,0,0,0,252,233,1,0,0,0,252,234,1,0,0,0,252,235, + 1,0,0,0,252,236,1,0,0,0,252,237,1,0,0,0,252,238,1,0,0,0,252,239, + 1,0,0,0,252,240,1,0,0,0,252,241,1,0,0,0,252,242,1,0,0,0,252,243, + 1,0,0,0,252,244,1,0,0,0,252,245,1,0,0,0,252,246,1,0,0,0,252,247, + 1,0,0,0,252,248,1,0,0,0,252,249,1,0,0,0,252,250,1,0,0,0,252,251, + 1,0,0,0,253,21,1,0,0,0,254,259,3,24,12,0,255,256,5,112,0,0,256,257, + 3,150,75,0,257,258,5,113,0,0,258,260,1,0,0,0,259,255,1,0,0,0,259, + 260,1,0,0,0,260,261,1,0,0,0,261,262,5,103,0,0,262,263,3,18,9,0,263, + 23,1,0,0,0,264,265,3,26,13,0,265,266,3,154,77,0,266,268,5,110,0, + 0,267,269,3,36,18,0,268,267,1,0,0,0,268,269,1,0,0,0,269,270,1,0, + 0,0,270,271,5,111,0,0,271,286,1,0,0,0,272,273,3,28,14,0,273,274, + 3,154,77,0,274,276,5,110,0,0,275,277,3,38,19,0,276,275,1,0,0,0,276, + 277,1,0,0,0,277,278,1,0,0,0,278,279,5,111,0,0,279,286,1,0,0,0,280, + 281,3,154,77,0,281,282,5,110,0,0,282,283,3,30,15,0,283,284,5,111, + 0,0,284,286,1,0,0,0,285,264,1,0,0,0,285,272,1,0,0,0,285,280,1,0, + 0,0,286,25,1,0,0,0,287,288,5,10,0,0,288,289,5,125,0,0,289,290,5, + 110,0,0,290,295,3,96,48,0,291,292,5,114,0,0,292,294,3,96,48,0,293, + 291,1,0,0,0,294,297,1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0,296, + 298,1,0,0,0,297,295,1,0,0,0,298,299,5,111,0,0,299,300,5,103,0,0, + 300,301,3,28,14,0,301,27,1,0,0,0,302,311,5,110,0,0,303,308,3,32, + 16,0,304,305,5,114,0,0,305,307,3,32,16,0,306,304,1,0,0,0,307,310, + 1,0,0,0,308,306,1,0,0,0,308,309,1,0,0,0,309,312,1,0,0,0,310,308, + 1,0,0,0,311,303,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0,0,313,314, + 5,111,0,0,314,29,1,0,0,0,315,316,3,32,16,0,316,317,5,97,0,0,317, + 318,3,96,48,0,318,31,1,0,0,0,319,328,5,110,0,0,320,325,3,34,17,0, + 321,322,5,114,0,0,322,324,3,34,17,0,323,321,1,0,0,0,324,327,1,0, + 0,0,325,323,1,0,0,0,325,326,1,0,0,0,326,329,1,0,0,0,327,325,1,0, + 0,0,328,320,1,0,0,0,328,329,1,0,0,0,329,330,1,0,0,0,330,331,5,111, + 0,0,331,33,1,0,0,0,332,344,5,46,0,0,333,344,3,44,22,0,334,344,5, + 28,0,0,335,344,5,47,0,0,336,344,5,32,0,0,337,344,5,31,0,0,338,344, + 5,30,0,0,339,344,5,29,0,0,340,344,5,43,0,0,341,344,5,44,0,0,342, + 344,5,45,0,0,343,332,1,0,0,0,343,333,1,0,0,0,343,334,1,0,0,0,343, + 335,1,0,0,0,343,336,1,0,0,0,343,337,1,0,0,0,343,338,1,0,0,0,343, + 339,1,0,0,0,343,340,1,0,0,0,343,341,1,0,0,0,343,342,1,0,0,0,344, + 35,1,0,0,0,345,350,3,40,20,0,346,347,5,114,0,0,347,349,3,40,20,0, + 348,346,1,0,0,0,349,352,1,0,0,0,350,348,1,0,0,0,350,351,1,0,0,0, + 351,37,1,0,0,0,352,350,1,0,0,0,353,358,3,42,21,0,354,355,5,114,0, + 0,355,357,3,42,21,0,356,354,1,0,0,0,357,360,1,0,0,0,358,356,1,0, + 0,0,358,359,1,0,0,0,359,39,1,0,0,0,360,358,1,0,0,0,361,362,5,125, + 0,0,362,363,5,118,0,0,363,366,5,49,0,0,364,366,3,20,10,0,365,361, + 1,0,0,0,365,364,1,0,0,0,366,41,1,0,0,0,367,368,5,49,0,0,368,369, + 5,97,0,0,369,372,3,96,48,0,370,372,3,20,10,0,371,367,1,0,0,0,371, + 370,1,0,0,0,372,43,1,0,0,0,373,377,5,26,0,0,374,377,5,25,0,0,375, + 377,3,46,23,0,376,373,1,0,0,0,376,374,1,0,0,0,376,375,1,0,0,0,377, + 45,1,0,0,0,378,379,7,1,0,0,379,47,1,0,0,0,380,381,5,46,0,0,381,382, + 5,97,0,0,382,383,3,96,48,0,383,49,1,0,0,0,384,385,5,25,0,0,385,386, + 5,97,0,0,386,387,3,106,53,0,387,51,1,0,0,0,388,389,3,44,22,0,389, + 390,5,97,0,0,390,391,3,108,54,0,391,53,1,0,0,0,392,393,3,44,22,0, + 393,394,5,97,0,0,394,395,3,124,62,0,395,55,1,0,0,0,396,397,5,28, + 0,0,397,398,5,97,0,0,398,399,3,100,50,0,399,57,1,0,0,0,400,401,5, + 47,0,0,401,402,5,97,0,0,402,403,3,102,51,0,403,59,1,0,0,0,404,405, + 5,32,0,0,405,406,5,97,0,0,406,407,3,110,55,0,407,61,1,0,0,0,408, + 409,5,43,0,0,409,410,5,97,0,0,410,411,3,112,56,0,411,63,1,0,0,0, + 412,413,5,44,0,0,413,414,5,97,0,0,414,415,3,114,57,0,415,65,1,0, + 0,0,416,417,5,45,0,0,417,418,5,97,0,0,418,419,3,116,58,0,419,67, + 1,0,0,0,420,421,5,47,0,0,421,422,5,97,0,0,422,423,3,118,59,0,423, + 69,1,0,0,0,424,425,5,47,0,0,425,426,5,97,0,0,426,427,3,120,60,0, + 427,71,1,0,0,0,428,429,5,47,0,0,429,430,5,97,0,0,430,431,3,122,61, + 0,431,73,1,0,0,0,432,433,5,31,0,0,433,434,5,97,0,0,434,435,3,126, + 63,0,435,75,1,0,0,0,436,437,5,30,0,0,437,438,5,97,0,0,438,439,3, + 128,64,0,439,77,1,0,0,0,440,441,5,29,0,0,441,442,5,97,0,0,442,443, + 3,130,65,0,443,79,1,0,0,0,444,445,3,86,43,0,445,446,5,97,0,0,446, + 447,3,132,66,0,447,81,1,0,0,0,448,449,3,90,45,0,449,450,5,97,0,0, + 450,451,3,134,67,0,451,83,1,0,0,0,452,453,5,125,0,0,453,454,5,97, + 0,0,454,455,5,48,0,0,455,85,1,0,0,0,456,465,5,112,0,0,457,462,3, + 88,44,0,458,459,5,114,0,0,459,461,3,88,44,0,460,458,1,0,0,0,461, + 464,1,0,0,0,462,460,1,0,0,0,462,463,1,0,0,0,463,466,1,0,0,0,464, + 462,1,0,0,0,465,457,1,0,0,0,465,466,1,0,0,0,466,467,1,0,0,0,467, + 468,5,113,0,0,468,87,1,0,0,0,469,472,3,34,17,0,470,472,3,86,43,0, + 471,469,1,0,0,0,471,470,1,0,0,0,472,89,1,0,0,0,473,474,5,110,0,0, + 474,475,3,92,46,0,475,476,5,122,0,0,476,477,3,94,47,0,477,478,5, + 111,0,0,478,91,1,0,0,0,479,490,5,125,0,0,480,481,5,110,0,0,481,484, + 5,125,0,0,482,483,5,114,0,0,483,485,5,125,0,0,484,482,1,0,0,0,485, + 486,1,0,0,0,486,484,1,0,0,0,486,487,1,0,0,0,487,488,1,0,0,0,488, + 490,5,111,0,0,489,479,1,0,0,0,489,480,1,0,0,0,490,93,1,0,0,0,491, + 492,3,154,77,0,492,493,5,110,0,0,493,494,3,16,8,0,494,495,5,111, + 0,0,495,95,1,0,0,0,496,499,3,98,49,0,497,499,3,138,69,0,498,496, + 1,0,0,0,498,497,1,0,0,0,499,97,1,0,0,0,500,521,3,100,50,0,501,521, + 3,106,53,0,502,521,3,108,54,0,503,521,3,102,51,0,504,521,3,104,52, + 0,505,521,3,110,55,0,506,521,3,112,56,0,507,509,5,69,0,0,508,510, + 5,116,0,0,509,508,1,0,0,0,509,510,1,0,0,0,510,521,1,0,0,0,511,513, + 5,124,0,0,512,514,5,116,0,0,513,512,1,0,0,0,513,514,1,0,0,0,514, + 521,1,0,0,0,515,516,5,81,0,0,516,518,5,125,0,0,517,519,5,116,0,0, + 518,517,1,0,0,0,518,519,1,0,0,0,519,521,1,0,0,0,520,500,1,0,0,0, + 520,501,1,0,0,0,520,502,1,0,0,0,520,503,1,0,0,0,520,504,1,0,0,0, + 520,505,1,0,0,0,520,506,1,0,0,0,520,507,1,0,0,0,520,511,1,0,0,0, + 520,515,1,0,0,0,521,99,1,0,0,0,522,524,7,2,0,0,523,525,5,116,0,0, + 524,523,1,0,0,0,524,525,1,0,0,0,525,101,1,0,0,0,526,528,7,3,0,0, + 527,529,5,116,0,0,528,527,1,0,0,0,528,529,1,0,0,0,529,103,1,0,0, + 0,530,532,7,4,0,0,531,533,5,116,0,0,532,531,1,0,0,0,532,533,1,0, + 0,0,533,105,1,0,0,0,534,536,7,5,0,0,535,537,5,116,0,0,536,535,1, + 0,0,0,536,537,1,0,0,0,537,107,1,0,0,0,538,540,7,6,0,0,539,541,5, + 116,0,0,540,539,1,0,0,0,540,541,1,0,0,0,541,109,1,0,0,0,542,544, + 5,65,0,0,543,545,5,116,0,0,544,543,1,0,0,0,544,545,1,0,0,0,545,111, + 1,0,0,0,546,548,7,7,0,0,547,549,5,116,0,0,548,547,1,0,0,0,548,549, + 1,0,0,0,549,113,1,0,0,0,550,552,7,8,0,0,551,553,5,116,0,0,552,551, + 1,0,0,0,552,553,1,0,0,0,553,558,1,0,0,0,554,555,5,41,0,0,555,556, + 3,140,70,0,556,557,5,42,0,0,557,559,1,0,0,0,558,554,1,0,0,0,558, + 559,1,0,0,0,559,115,1,0,0,0,560,562,7,9,0,0,561,563,5,116,0,0,562, + 561,1,0,0,0,562,563,1,0,0,0,563,568,1,0,0,0,564,565,5,41,0,0,565, + 566,3,140,70,0,566,567,5,42,0,0,567,569,1,0,0,0,568,564,1,0,0,0, + 568,569,1,0,0,0,569,117,1,0,0,0,570,572,7,10,0,0,571,573,5,116,0, + 0,572,571,1,0,0,0,572,573,1,0,0,0,573,574,1,0,0,0,574,575,5,41,0, + 0,575,576,3,140,70,0,576,577,5,42,0,0,577,119,1,0,0,0,578,580,7, + 11,0,0,579,581,5,116,0,0,580,579,1,0,0,0,580,581,1,0,0,0,581,582, + 1,0,0,0,582,583,5,41,0,0,583,584,3,140,70,0,584,585,5,42,0,0,585, + 121,1,0,0,0,586,588,7,12,0,0,587,589,5,116,0,0,588,587,1,0,0,0,588, + 589,1,0,0,0,589,590,1,0,0,0,590,591,5,41,0,0,591,592,3,140,70,0, + 592,593,5,42,0,0,593,123,1,0,0,0,594,596,7,13,0,0,595,597,5,116, + 0,0,596,595,1,0,0,0,596,597,1,0,0,0,597,604,1,0,0,0,598,599,5,41, + 0,0,599,600,3,140,70,0,600,601,5,114,0,0,601,602,3,140,70,0,602, + 603,5,42,0,0,603,605,1,0,0,0,604,598,1,0,0,0,604,605,1,0,0,0,605, + 125,1,0,0,0,606,608,7,14,0,0,607,609,5,116,0,0,608,607,1,0,0,0,608, + 609,1,0,0,0,609,610,1,0,0,0,610,611,5,41,0,0,611,612,3,140,70,0, + 612,613,5,42,0,0,613,127,1,0,0,0,614,616,7,15,0,0,615,617,5,116, + 0,0,616,615,1,0,0,0,616,617,1,0,0,0,617,618,1,0,0,0,618,619,5,41, + 0,0,619,620,3,140,70,0,620,621,5,42,0,0,621,129,1,0,0,0,622,624, + 7,16,0,0,623,625,5,116,0,0,624,623,1,0,0,0,624,625,1,0,0,0,625,626, + 1,0,0,0,626,627,5,41,0,0,627,628,3,140,70,0,628,629,5,42,0,0,629, + 131,1,0,0,0,630,632,5,79,0,0,631,633,5,116,0,0,632,631,1,0,0,0,632, + 633,1,0,0,0,633,634,1,0,0,0,634,635,5,41,0,0,635,636,3,96,48,0,636, + 637,5,42,0,0,637,133,1,0,0,0,638,640,5,55,0,0,639,641,5,116,0,0, + 640,639,1,0,0,0,640,641,1,0,0,0,641,642,1,0,0,0,642,643,5,41,0,0, + 643,644,3,136,68,0,644,645,5,122,0,0,645,646,3,96,48,0,646,647,5, + 42,0,0,647,135,1,0,0,0,648,661,3,96,48,0,649,650,5,110,0,0,650,655, + 3,96,48,0,651,652,5,114,0,0,652,654,3,96,48,0,653,651,1,0,0,0,654, + 657,1,0,0,0,655,653,1,0,0,0,655,656,1,0,0,0,656,658,1,0,0,0,657, + 655,1,0,0,0,658,659,5,111,0,0,659,661,1,0,0,0,660,648,1,0,0,0,660, + 649,1,0,0,0,661,137,1,0,0,0,662,674,3,118,59,0,663,674,3,120,60, + 0,664,674,3,122,61,0,665,674,3,124,62,0,666,674,3,114,57,0,667,674, + 3,116,58,0,668,674,3,126,63,0,669,674,3,128,64,0,670,674,3,130,65, + 0,671,674,3,132,66,0,672,674,3,134,67,0,673,662,1,0,0,0,673,663, + 1,0,0,0,673,664,1,0,0,0,673,665,1,0,0,0,673,666,1,0,0,0,673,667, + 1,0,0,0,673,668,1,0,0,0,673,669,1,0,0,0,673,670,1,0,0,0,673,671, + 1,0,0,0,673,672,1,0,0,0,674,139,1,0,0,0,675,676,5,25,0,0,676,141, + 1,0,0,0,677,678,7,17,0,0,678,143,1,0,0,0,679,680,3,146,73,0,680, + 681,5,115,0,0,681,682,3,148,74,0,682,145,1,0,0,0,683,684,7,18,0, + 0,684,147,1,0,0,0,685,686,7,19,0,0,686,149,1,0,0,0,687,692,3,144, + 72,0,688,689,5,114,0,0,689,691,3,144,72,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,151,1,0,0,0,694,692, + 1,0,0,0,695,696,7,20,0,0,696,153,1,0,0,0,697,700,3,152,76,0,698, + 700,5,125,0,0,699,697,1,0,0,0,699,698,1,0,0,0,700,155,1,0,0,0,62, 160,169,197,203,208,211,216,218,225,230,252,259,268,276,285,295, 308,311,325,328,343,350,358,365,371,376,462,465,471,486,489,498, - 509,514,516,520,524,528,532,536,540,544,548,554,558,564,568,576, - 584,592,600,604,612,620,628,636,651,656,669,688,695 + 509,513,518,520,524,528,532,536,540,544,548,552,558,562,568,572, + 580,588,596,604,608,616,624,632,640,655,660,673,692,699 ] class FuncTestCaseParser ( Parser ): @@ -280,61 +282,62 @@ class FuncTestCaseParser ( Parser ): sharedContextCache = PredictionContextCache() - literalNames = [ "", "", "'###'", "'SUBSTRAIT_SCALAR_TEST'", - "'SUBSTRAIT_AGGREGATE_TEST'", "'SUBSTRAIT_INCLUDE'", - "'SUBSTRAIT_DEPENDENCY'", "", "", - "", "'DEFINE'", "''", "''", - "'OVERFLOW'", "'ROUNDING'", "'ERROR'", "'SATURATE'", - "'SILENT'", "'TIE_TO_EVEN'", "'NAN'", "'ACCEPT_NULLS'", - "'IGNORE_NULLS'", "'NULL_HANDLING'", "'SPACES_ONLY'", - "'TRUNCATE'", "", "", "", - "", "", "", "", - "", "'P'", "'T'", "'Y'", "'M'", "'D'", "'H'", - "'S'", "'F'", "", "", "", - "", "", "'null'", "", "'enum'", - "", "", "", "'IF'", "'THEN'", - "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", - "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", - "'DATE'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", - "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", - "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", - "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", "'LIST'", - "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'IYEAR'", - "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", "'PTS'", - "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", - "", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", - "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", - "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", - "'.'", "'AND'", "'OR'", "':='", "'->'" ] - - symbolicNames = [ "", "Whitespace", "TripleHash", "SubstraitScalarTest", - "SubstraitAggregateTest", "SubstraitInclude", "SubstraitDependency", - "ExtensionUrn", "FormatVersion", "DescriptionLine", - "Define", "ErrorResult", "UndefineResult", "Overflow", - "Rounding", "Error", "Saturate", "Silent", "TieToEven", - "NaN", "AcceptNulls", "IgnoreNulls", "NullHandling", - "SpacesOnly", "Truncate", "IntegerLiteral", "DecimalLiteral", - "FloatLiteral", "BooleanLiteral", "TimestampTzLiteral", - "TimestampLiteral", "TimeLiteral", "DateLiteral", - "PeriodPrefix", "TimePrefix", "YearSuffix", "MSuffix", - "DaySuffix", "HourSuffix", "SecondSuffix", "FractionalSecondSuffix", - "OAngleBracket", "CAngleBracket", "IntervalYearLiteral", - "IntervalDayLiteral", "IntervalCompoundLiteral", "NullLiteral", - "StringLiteral", "EnumType", "ColumnName", "LineComment", - "BlockComment", "If", "Then", "Else", "Func", "Boolean", - "I8", "I16", "I32", "I64", "FP32", "FP64", "String", - "Binary", "Date", "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", "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", "Newline" ] + literalNames = [ "", "", "'###'", "'SUBSTRAIT_SCALAR_TEST'", + "'SUBSTRAIT_AGGREGATE_TEST'", "'SUBSTRAIT_INCLUDE'", + "'SUBSTRAIT_DEPENDENCY'", "", "", + "", "'DEFINE'", "''", "''", + "'OVERFLOW'", "'ROUNDING'", "'ERROR'", "'SATURATE'", + "'SILENT'", "'TIE_TO_EVEN'", "'NAN'", "'ACCEPT_NULLS'", + "'IGNORE_NULLS'", "'NULL_HANDLING'", "'SPACES_ONLY'", + "'TRUNCATE'", "", "", "", + "", "", "", "", + "", "'P'", "'T'", "'Y'", "'M'", "'D'", "'H'", + "'S'", "'F'", "", "", "", + "", "", "'null'", "", "'enum'", + "", "", "", "'IF'", "'THEN'", + "'ELSE'", "'FUNC'", "'BOOLEAN'", "'I8'", "'I16'", "'I32'", + "'I64'", "'FP32'", "'FP64'", "'STRING'", "'BINARY'", + "'DATE'", "'INTERVAL_YEAR'", "'INTERVAL_DAY'", "'INTERVAL_COMPOUND'", + "'UUID'", "'DECIMAL'", "'PRECISION_TIME'", "'PRECISION_TIMESTAMP'", + "'PRECISION_TIMESTAMP_TZ'", "'FIXEDCHAR'", "'VARCHAR'", + "'FIXEDBINARY'", "'STRUCT'", "'NSTRUCT'", "'LIST'", + "'MAP'", "'U!'", "'BOOL'", "'STR'", "'VBIN'", "'IYEAR'", + "'IDAY'", "'ICOMPOUND'", "'DEC'", "'PT'", "'PTS'", + "'PTSTZ'", "'FCHAR'", "'VCHAR'", "'FBIN'", "'ANY'", + "", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", + "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", + "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", + "'.'", "'AND'", "'OR'", "':='", "'->'", "", + "'UNKNOWN'" ] + + symbolicNames = [ "", "Whitespace", "TripleHash", "SubstraitScalarTest", + "SubstraitAggregateTest", "SubstraitInclude", "SubstraitDependency", + "ExtensionUrn", "FormatVersion", "DescriptionLine", + "Define", "ErrorResult", "UndefineResult", "Overflow", + "Rounding", "Error", "Saturate", "Silent", "TieToEven", + "NaN", "AcceptNulls", "IgnoreNulls", "NullHandling", + "SpacesOnly", "Truncate", "IntegerLiteral", "DecimalLiteral", + "FloatLiteral", "BooleanLiteral", "TimestampTzLiteral", + "TimestampLiteral", "TimeLiteral", "DateLiteral", + "PeriodPrefix", "TimePrefix", "YearSuffix", "MSuffix", + "DaySuffix", "HourSuffix", "SecondSuffix", "FractionalSecondSuffix", + "OAngleBracket", "CAngleBracket", "IntervalYearLiteral", + "IntervalDayLiteral", "IntervalCompoundLiteral", "NullLiteral", + "StringLiteral", "EnumType", "ColumnName", "LineComment", + "BlockComment", "If", "Then", "Else", "Func", "Boolean", + "I8", "I16", "I32", "I64", "FP32", "FP64", "String", + "Binary", "Date", "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", "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", "Unknown", "Identifier", "Newline" ] RULE_doc = 0 RULE_header = 1 @@ -415,25 +418,25 @@ class FuncTestCaseParser ( Parser ): RULE_nonReserved = 76 RULE_identifier = 77 - ruleNames = [ "doc", "header", "version", "include", "dependency", - "testGroupDescription", "testCase", "testGroup", "arguments", - "result", "argument", "aggFuncTestCase", "aggFuncCall", - "tableData", "tableRows", "dataColumn", "columnValues", - "literal", "qualifiedAggregateFuncArgs", "aggregateFuncArgs", - "qualifiedAggregateFuncArg", "aggregateFuncArg", "numericLiteral", - "floatLiteral", "nullArg", "intArg", "floatArg", "decimalArg", - "booleanArg", "stringArg", "dateArg", "intervalYearArg", - "intervalDayArg", "intervalCompoundArg", "fixedCharArg", - "varCharArg", "fixedBinaryArg", "precisionTimeArg", "precisionTimestampArg", - "precisionTimestampTZArg", "listArg", "lambdaArg", "enumArg", - "literalList", "listElement", "literalLambda", "lambdaParameters", - "lambdaBody", "dataType", "scalarType", "booleanType", - "stringType", "binaryType", "intType", "floatType", "dateType", - "intervalYearType", "intervalDayType", "intervalCompoundType", - "fixedCharType", "varCharType", "fixedBinaryType", "decimalType", - "precisionTimeType", "precisionTimestampType", "precisionTimestampTZType", - "listType", "funcType", "funcParameters", "parameterizedType", - "numericParameter", "substraitError", "funcOption", "optionName", + ruleNames = [ "doc", "header", "version", "include", "dependency", + "testGroupDescription", "testCase", "testGroup", "arguments", + "result", "argument", "aggFuncTestCase", "aggFuncCall", + "tableData", "tableRows", "dataColumn", "columnValues", + "literal", "qualifiedAggregateFuncArgs", "aggregateFuncArgs", + "qualifiedAggregateFuncArg", "aggregateFuncArg", "numericLiteral", + "floatLiteral", "nullArg", "intArg", "floatArg", "decimalArg", + "booleanArg", "stringArg", "dateArg", "intervalYearArg", + "intervalDayArg", "intervalCompoundArg", "fixedCharArg", + "varCharArg", "fixedBinaryArg", "precisionTimeArg", "precisionTimestampArg", + "precisionTimestampTZArg", "listArg", "lambdaArg", "enumArg", + "literalList", "listElement", "literalLambda", "lambdaParameters", + "lambdaBody", "dataType", "scalarType", "booleanType", + "stringType", "binaryType", "intType", "floatType", "dateType", + "intervalYearType", "intervalDayType", "intervalCompoundType", + "fixedCharType", "varCharType", "fixedBinaryType", "decimalType", + "precisionTimeType", "precisionTimestampType", "precisionTimestampTZType", + "listType", "funcType", "funcParameters", "parameterizedType", + "numericParameter", "substraitError", "funcOption", "optionName", "optionValue", "funcOptions", "nonReserved", "identifier" ] EOF = Token.EOF @@ -560,8 +563,9 @@ class FuncTestCaseParser ( Parser ): Assign=121 Arrow=122 Number=123 - Identifier=124 - Newline=125 + Unknown=124 + Identifier=125 + Newline=126 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -622,16 +626,16 @@ def doc(self): self.enterOuterAlt(localctx, 1) self.state = 156 self.header() - self.state = 158 + self.state = 158 self._errHandler.sync(self) _la = self._input.LA(1) while True: self.state = 157 self.testGroup() - self.state = 160 + self.state = 160 self._errHandler.sync(self) _la = self._input.LA(1) - if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 16778752) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 17921) != 0)): + if not ((((_la) & ~0x3f) == 0 and ((1 << _la) & 16778752) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 34305) != 0)): break self.state = 162 @@ -1069,7 +1073,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_testGroup - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -1158,7 +1162,7 @@ def testGroup(self): self.testGroupDescription() - self.state = 206 + self.state = 206 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1168,7 +1172,7 @@ def testGroup(self): else: raise NoViableAltException(self) - self.state = 208 + self.state = 208 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,4,self._ctx) @@ -1185,7 +1189,7 @@ def testGroup(self): self.testGroupDescription() - self.state = 214 + self.state = 214 self._errHandler.sync(self) _alt = 1 while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -1195,7 +1199,7 @@ def testGroup(self): else: raise NoViableAltException(self) - self.state = 216 + self.state = 216 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,6,self._ctx) @@ -1324,7 +1328,7 @@ def result(self): self.state = 230 self._errHandler.sync(self) token = self._input.LA(1) - if token in [19, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 110, 112, 124]: + if token in [19, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 110, 112, 125]: self.enterOuterAlt(localctx, 1) self.state = 228 self.argument() @@ -1683,7 +1687,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_aggFuncCall - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -1816,7 +1820,7 @@ def aggFuncCall(self): self.state = 268 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 272687440592896) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 16389) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 272687440592896) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 32773) != 0): self.state = 267 self.qualifiedAggregateFuncArgs() @@ -1836,7 +1840,7 @@ def aggFuncCall(self): self.state = 276 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 835637394014208) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 16389) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 835637394014208) != 0) or ((((_la - 110)) & ~0x3f) == 0 and ((1 << (_la - 110)) & 32773) != 0): self.state = 275 self.aggregateFuncArgs() @@ -1844,7 +1848,7 @@ def aggFuncCall(self): self.state = 278 self.match(FuncTestCaseParser.CParen) pass - elif token in [24, 119, 120, 124]: + elif token in [24, 119, 120, 125]: localctx = FuncTestCaseParser.SingleArgAggregateFuncCallContext(self, localctx) self.enterOuterAlt(localctx, 3) self.state = 280 @@ -2610,7 +2614,7 @@ def aggregateFuncArg(self): self.state = 369 self.dataType() pass - elif token in [19, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 110, 112, 124]: + elif token in [19, 25, 26, 27, 28, 29, 30, 31, 32, 43, 44, 45, 46, 47, 110, 112, 125]: self.enterOuterAlt(localctx, 2) self.state = 370 self.argument() @@ -4091,7 +4095,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_lambdaParameters - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -4167,7 +4171,7 @@ def lambdaParameters(self): self.state = 489 self._errHandler.sync(self) token = self._input.LA(1) - if token in [124]: + if token in [125]: localctx = FuncTestCaseParser.SingleParamContext(self, localctx) self.enterOuterAlt(localctx, 1) self.state = 479 @@ -4180,7 +4184,7 @@ def lambdaParameters(self): self.match(FuncTestCaseParser.OParen) self.state = 481 self.match(FuncTestCaseParser.Identifier) - self.state = 484 + self.state = 484 self._errHandler.sync(self) _la = self._input.LA(1) while True: @@ -4188,7 +4192,7 @@ def lambdaParameters(self): self.match(FuncTestCaseParser.Comma) self.state = 483 self.match(FuncTestCaseParser.Identifier) - self.state = 486 + self.state = 486 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==114): @@ -4316,7 +4320,7 @@ def dataType(self): self.state = 498 self._errHandler.sync(self) token = self._input.LA(1) - if token in [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 81, 82, 83, 84, 85]: + if token in [56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 69, 81, 82, 83, 84, 85, 124]: self.enterOuterAlt(localctx, 1) self.state = 496 self.scalarType() @@ -4349,7 +4353,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_scalarType - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -4586,6 +4590,33 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class UnknownContext(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a FuncTestCaseParser.ScalarTypeContext + super().__init__(parser) + self.isnull = None # Token + self.copyFrom(ctx) + + def Unknown(self): + return self.getToken(FuncTestCaseParser.Unknown, 0) + def QMark(self): + return self.getToken(FuncTestCaseParser.QMark, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnknown" ): + listener.enterUnknown(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnknown" ): + listener.exitUnknown(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnknown" ): + return visitor.visitUnknown(self) + else: + return visitor.visitChildren(self) + + def scalarType(self): @@ -4593,7 +4624,7 @@ def scalarType(self): self.enterRule(localctx, 98, self.RULE_scalarType) self._la = 0 # Token type try: - self.state = 516 + self.state = 520 self._errHandler.sync(self) token = self._input.LA(1) if token in [56, 82]: @@ -4652,18 +4683,32 @@ def scalarType(self): pass - elif token in [81]: - localctx = FuncTestCaseParser.UserDefinedContext(self, localctx) + elif token in [124]: + localctx = FuncTestCaseParser.UnknownContext(self, localctx) self.enterOuterAlt(localctx, 9) self.state = 511 + self.match(FuncTestCaseParser.Unknown) + self.state = 513 + self._errHandler.sync(self) + _la = self._input.LA(1) + if _la==116: + self.state = 512 + localctx.isnull = self.match(FuncTestCaseParser.QMark) + + + pass + elif token in [81]: + localctx = FuncTestCaseParser.UserDefinedContext(self, localctx) + self.enterOuterAlt(localctx, 10) + self.state = 515 self.match(FuncTestCaseParser.UserDefined) - self.state = 512 + self.state = 516 self.match(FuncTestCaseParser.Identifier) - self.state = 514 + self.state = 518 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 513 + self.state = 517 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -4724,18 +4769,18 @@ def booleanType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 518 + self.state = 522 _la = self._input.LA(1) if not(_la==56 or _la==82): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 520 + self.state = 524 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 519 + self.state = 523 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -4792,18 +4837,18 @@ def stringType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 522 + self.state = 526 _la = self._input.LA(1) if not(_la==63 or _la==83): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 524 + self.state = 528 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 523 + self.state = 527 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -4860,18 +4905,18 @@ def binaryType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 526 + self.state = 530 _la = self._input.LA(1) if not(_la==64 or _la==84): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 528 + self.state = 532 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 527 + self.state = 531 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -4934,18 +4979,18 @@ def intType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 530 + self.state = 534 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 2161727821137838080) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 532 + self.state = 536 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 531 + self.state = 535 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5002,18 +5047,18 @@ def floatType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 534 + self.state = 538 _la = self._input.LA(1) if not(_la==61 or _la==62): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 536 + self.state = 540 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 535 + self.state = 539 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5067,13 +5112,13 @@ def dateType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 538 + self.state = 542 self.match(FuncTestCaseParser.Date) - self.state = 540 + self.state = 544 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 539 + self.state = 543 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5130,18 +5175,18 @@ def intervalYearType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 542 + self.state = 546 _la = self._input.LA(1) if not(_la==66 or _la==85): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 544 + self.state = 548 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 543 + self.state = 547 localctx.isnull = self.match(FuncTestCaseParser.QMark) @@ -5209,30 +5254,30 @@ def intervalDayType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 546 + self.state = 550 _la = self._input.LA(1) if not(_la==67 or _la==86): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 548 + self.state = 552 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 547 + self.state = 551 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 554 + self.state = 558 self._errHandler.sync(self) _la = self._input.LA(1) if _la==41: - self.state = 550 + self.state = 554 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 551 + self.state = 555 localctx.len_ = self.numericParameter() - self.state = 552 + self.state = 556 self.match(FuncTestCaseParser.CAngleBracket) @@ -5300,30 +5345,30 @@ def intervalCompoundType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 556 + self.state = 560 _la = self._input.LA(1) if not(_la==68 or _la==87): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 558 + self.state = 562 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 557 + self.state = 561 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 564 + self.state = 568 self._errHandler.sync(self) _la = self._input.LA(1) if _la==41: - self.state = 560 + self.state = 564 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 561 + self.state = 565 localctx.len_ = self.numericParameter() - self.state = 562 + self.state = 566 self.match(FuncTestCaseParser.CAngleBracket) @@ -5391,26 +5436,26 @@ def fixedCharType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 566 + self.state = 570 _la = self._input.LA(1) if not(_la==74 or _la==92): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 568 + self.state = 572 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 567 + self.state = 571 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 570 + self.state = 574 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 571 + self.state = 575 localctx.len_ = self.numericParameter() - self.state = 572 + self.state = 576 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5476,26 +5521,26 @@ def varCharType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 574 + self.state = 578 _la = self._input.LA(1) if not(_la==75 or _la==93): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 576 + self.state = 580 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 575 + self.state = 579 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 578 + self.state = 582 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 579 + self.state = 583 localctx.len_ = self.numericParameter() - self.state = 580 + self.state = 584 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5561,26 +5606,26 @@ def fixedBinaryType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 582 + self.state = 586 _la = self._input.LA(1) if not(_la==76 or _la==94): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 584 + self.state = 588 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 583 + self.state = 587 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 586 + self.state = 590 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 587 + self.state = 591 localctx.len_ = self.numericParameter() - self.state = 588 + self.state = 592 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5653,34 +5698,34 @@ def decimalType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 590 + self.state = 594 _la = self._input.LA(1) if not(_la==70 or _la==88): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 592 + self.state = 596 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 591 + self.state = 595 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 600 + self.state = 604 self._errHandler.sync(self) _la = self._input.LA(1) if _la==41: - self.state = 594 + self.state = 598 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 595 + self.state = 599 localctx.precision = self.numericParameter() - self.state = 596 + self.state = 600 self.match(FuncTestCaseParser.Comma) - self.state = 597 + self.state = 601 localctx.scale = self.numericParameter() - self.state = 598 + self.state = 602 self.match(FuncTestCaseParser.CAngleBracket) @@ -5748,26 +5793,26 @@ def precisionTimeType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 602 + self.state = 606 _la = self._input.LA(1) if not(_la==71 or _la==89): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 604 + self.state = 608 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 603 + self.state = 607 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 606 + self.state = 610 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 607 + self.state = 611 localctx.precision = self.numericParameter() - self.state = 608 + self.state = 612 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5833,26 +5878,26 @@ def precisionTimestampType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 610 + self.state = 614 _la = self._input.LA(1) if not(_la==72 or _la==90): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 612 + self.state = 616 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 611 + self.state = 615 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 614 + self.state = 618 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 615 + self.state = 619 localctx.precision = self.numericParameter() - self.state = 616 + self.state = 620 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5918,26 +5963,26 @@ def precisionTimestampTZType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 618 + self.state = 622 _la = self._input.LA(1) if not(_la==73 or _la==91): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 620 + self.state = 624 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 619 + self.state = 623 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 622 + self.state = 626 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 623 + self.state = 627 localctx.precision = self.numericParameter() - self.state = 624 + self.state = 628 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -5959,7 +6004,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_listType - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -6009,21 +6054,21 @@ def listType(self): try: localctx = FuncTestCaseParser.ListContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 626 + self.state = 630 self.match(FuncTestCaseParser.List) - self.state = 628 + self.state = 632 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 627 + self.state = 631 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 630 + self.state = 634 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 631 + self.state = 635 localctx.elemType = self.dataType() - self.state = 632 + self.state = 636 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6094,25 +6139,25 @@ def funcType(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 634 + self.state = 638 self.match(FuncTestCaseParser.Func) - self.state = 636 + self.state = 640 self._errHandler.sync(self) _la = self._input.LA(1) if _la==116: - self.state = 635 + self.state = 639 localctx.isnull = self.match(FuncTestCaseParser.QMark) - self.state = 638 + self.state = 642 self.match(FuncTestCaseParser.OAngleBracket) - self.state = 639 + self.state = 643 localctx.params = self.funcParameters() - self.state = 640 + self.state = 644 self.match(FuncTestCaseParser.Arrow) - self.state = 641 + self.state = 645 localctx.returnType = self.dataType() - self.state = 642 + self.state = 646 self.match(FuncTestCaseParser.CAngleBracket) except RecognitionException as re: localctx.exception = re @@ -6134,7 +6179,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_funcParameters - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -6209,35 +6254,35 @@ def funcParameters(self): self.enterRule(localctx, 136, self.RULE_funcParameters) self._la = 0 # Token type try: - self.state = 656 + self.state = 660 self._errHandler.sync(self) token = self._input.LA(1) - if token in [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94]: + if token in [55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 79, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 124]: localctx = FuncTestCaseParser.SingleFuncParamContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 644 + self.state = 648 self.dataType() pass elif token in [110]: localctx = FuncTestCaseParser.FuncParamsWithParensContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 645 + self.state = 649 self.match(FuncTestCaseParser.OParen) - self.state = 646 + self.state = 650 self.dataType() - self.state = 651 + self.state = 655 self._errHandler.sync(self) _la = self._input.LA(1) while _la==114: - self.state = 647 + self.state = 651 self.match(FuncTestCaseParser.Comma) - self.state = 648 + self.state = 652 self.dataType() - self.state = 653 + self.state = 657 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 654 + self.state = 658 self.match(FuncTestCaseParser.CParen) pass else: @@ -6328,62 +6373,62 @@ def parameterizedType(self): localctx = FuncTestCaseParser.ParameterizedTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 138, self.RULE_parameterizedType) try: - self.state = 669 + self.state = 673 self._errHandler.sync(self) token = self._input.LA(1) if token in [74, 92]: self.enterOuterAlt(localctx, 1) - self.state = 658 + self.state = 662 self.fixedCharType() pass elif token in [75, 93]: self.enterOuterAlt(localctx, 2) - self.state = 659 + self.state = 663 self.varCharType() pass elif token in [76, 94]: self.enterOuterAlt(localctx, 3) - self.state = 660 + self.state = 664 self.fixedBinaryType() pass elif token in [70, 88]: self.enterOuterAlt(localctx, 4) - self.state = 661 + self.state = 665 self.decimalType() pass elif token in [67, 86]: self.enterOuterAlt(localctx, 5) - self.state = 662 + self.state = 666 self.intervalDayType() pass elif token in [68, 87]: self.enterOuterAlt(localctx, 6) - self.state = 663 + self.state = 667 self.intervalCompoundType() pass elif token in [71, 89]: self.enterOuterAlt(localctx, 7) - self.state = 664 + self.state = 668 self.precisionTimeType() pass elif token in [72, 90]: self.enterOuterAlt(localctx, 8) - self.state = 665 + self.state = 669 self.precisionTimestampType() pass elif token in [73, 91]: self.enterOuterAlt(localctx, 9) - self.state = 666 + self.state = 670 self.precisionTimestampTZType() pass elif token in [79]: self.enterOuterAlt(localctx, 10) - self.state = 667 + self.state = 671 self.listType() pass elif token in [55]: self.enterOuterAlt(localctx, 11) - self.state = 668 + self.state = 672 self.funcType() pass else: @@ -6409,7 +6454,7 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): def getRuleIndex(self): return FuncTestCaseParser.RULE_numericParameter - + def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) @@ -6447,7 +6492,7 @@ def numericParameter(self): try: localctx = FuncTestCaseParser.IntegerLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 671 + self.state = 675 self.match(FuncTestCaseParser.IntegerLiteral) except RecognitionException as re: localctx.exception = re @@ -6498,7 +6543,7 @@ def substraitError(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 673 + self.state = 677 _la = self._input.LA(1) if not(_la==11 or _la==12): self._errHandler.recoverInline(self) @@ -6558,11 +6603,11 @@ def funcOption(self): self.enterRule(localctx, 144, self.RULE_funcOption) try: self.enterOuterAlt(localctx, 1) - self.state = 675 + self.state = 679 self.optionName() - self.state = 676 + self.state = 680 self.match(FuncTestCaseParser.Colon) - self.state = 677 + self.state = 681 self.optionValue() except RecognitionException as re: localctx.exception = re @@ -6622,9 +6667,9 @@ def optionName(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 679 + self.state = 683 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 12607488) != 0) or _la==124): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 12607488) != 0) or _la==125): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6705,9 +6750,9 @@ def optionValue(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 681 + self.state = 685 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 70369033551872) != 0) or _la==124): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 70369033551872) != 0) or _la==125): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6768,17 +6813,17 @@ def funcOptions(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 683 + self.state = 687 self.funcOption() - self.state = 688 + self.state = 692 self._errHandler.sync(self) _la = self._input.LA(1) while _la==114: - self.state = 684 + self.state = 688 self.match(FuncTestCaseParser.Comma) - self.state = 685 + self.state = 689 self.funcOption() - self.state = 690 + self.state = 694 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6834,7 +6879,7 @@ def nonReserved(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 691 + self.state = 695 _la = self._input.LA(1) if not(_la==24 or _la==119 or _la==120): self._errHandler.recoverInline(self) @@ -6889,17 +6934,17 @@ def identifier(self): localctx = FuncTestCaseParser.IdentifierContext(self, self._ctx, self.state) self.enterRule(localctx, 154, self.RULE_identifier) try: - self.state = 695 + self.state = 699 self._errHandler.sync(self) token = self._input.LA(1) if token in [24, 119, 120]: self.enterOuterAlt(localctx, 1) - self.state = 693 + self.state = 697 self.nonReserved() pass - elif token in [124]: + elif token in [125]: self.enterOuterAlt(localctx, 2) - self.state = 694 + self.state = 698 self.match(FuncTestCaseParser.Identifier) pass else: diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserListener.py b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py index e9f293015..fafe05d24 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParserListener.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParserListener.py @@ -558,6 +558,15 @@ def exitUuid(self, ctx:FuncTestCaseParser.UuidContext): pass + # Enter a parse tree produced by FuncTestCaseParser#unknown. + def enterUnknown(self, ctx:FuncTestCaseParser.UnknownContext): + pass + + # Exit a parse tree produced by FuncTestCaseParser#unknown. + def exitUnknown(self, ctx:FuncTestCaseParser.UnknownContext): + pass + + # Enter a parse tree produced by FuncTestCaseParser#userDefined. def enterUserDefined(self, ctx:FuncTestCaseParser.UserDefinedContext): pass diff --git a/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py index c717e5b92..7befdc104 100644 --- a/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py +++ b/tests/coverage/antlr_parser/FuncTestCaseParserVisitor.py @@ -315,6 +315,11 @@ def visitUuid(self, ctx:FuncTestCaseParser.UuidContext): return self.visitChildren(ctx) + # Visit a parse tree produced by FuncTestCaseParser#unknown. + def visitUnknown(self, ctx:FuncTestCaseParser.UnknownContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by FuncTestCaseParser#userDefined. def visitUserDefined(self, ctx:FuncTestCaseParser.UserDefinedContext): return self.visitChildren(ctx) diff --git a/tests/coverage/extensions.py b/tests/coverage/extensions.py index 65a364a01..838be3bf6 100644 --- a/tests/coverage/extensions.py +++ b/tests/coverage/extensions.py @@ -49,6 +49,7 @@ def build_type_to_short_type(): FuncTestCaseLexer.Map: FuncTestCaseLexer.Map, FuncTestCaseLexer.Any: FuncTestCaseLexer.Any, FuncTestCaseLexer.Func: FuncTestCaseLexer.Func, + FuncTestCaseLexer.Unknown: FuncTestCaseLexer.Unknown, } to_short_type = { substrait_type_str(k): substrait_type_str(v) for k, v in rule_map.items() diff --git a/tests/test_extensions.py b/tests/test_extensions.py index e01610390..30b26f312 100644 --- a/tests/test_extensions.py +++ b/tests/test_extensions.py @@ -78,3 +78,4 @@ def test_build_type_to_short_type(): assert long_to_short["list"] == "list" assert long_to_short["map"] == "map" assert long_to_short["struct"] == "struct" + assert long_to_short["unknown"] == "unknown" diff --git a/tests/test_proto_example_validator.py b/tests/test_proto_example_validator.py index 08a60edbe..2263adf69 100644 --- a/tests/test_proto_example_validator.py +++ b/tests/test_proto_example_validator.py @@ -10,7 +10,7 @@ import pytest try: - from substrait import algebra_pb2 + from substrait import algebra_pb2, extended_expression_pb2 except ImportError as err: raise ImportError( "Protobuf bindings not found. Run 'buf generate' to generate them." @@ -64,3 +64,19 @@ def test_validate_field_references(): validate_example( textproto_file.read_text(), algebra_pb2.Expression.FieldReference ) + + +def test_validate_unbound_expressions(): + """Validate unbound expression examples.""" + examples_dir = Path("site/examples/proto-textformat/unbound_expression") + for textproto_file in examples_dir.glob("*.textproto"): + validate_example(textproto_file.read_text(), algebra_pb2.Expression) + + +def test_validate_extended_expressions(): + """Validate extended expression examples.""" + examples_dir = Path("site/examples/proto-textformat/extended_expression") + for textproto_file in examples_dir.glob("*.textproto"): + validate_example( + textproto_file.read_text(), extended_expression_pb2.ExtendedExpression + ) diff --git a/tests/test_unbound_expressions.py b/tests/test_unbound_expressions.py new file mode 100644 index 000000000..b509db5c5 --- /dev/null +++ b/tests/test_unbound_expressions.py @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: Apache-2.0 +from pathlib import Path + +from antlr4 import CommonTokenStream, InputStream +from antlr4.error.ErrorListener import ErrorListener +from google.protobuf import text_format + +from substrait import algebra_pb2, extended_expression_pb2, type_pb2 +from tests.coverage.extensions import Extension +from tests.type.antlr_parser.SubstraitLexer import SubstraitLexer +from tests.type.antlr_parser.SubstraitTypeParser import SubstraitTypeParser + + +class ParseErrorListener(ErrorListener): + def __init__(self): + super().__init__() + self.errors = [] + + def syntaxError(self, recognizer, offending_symbol, line, column, msg, e): + self.errors.append(f"Syntax error at line {line}, column {column}: {msg}") + + +def parse_textproto(path: str, message): + text_format.Parse(Path(path).read_text(), message, allow_unknown_field=False) + return message + + +def parse_type_statement(text: str): + lexer = SubstraitLexer(InputStream(text)) + parser = SubstraitTypeParser(CommonTokenStream(lexer)) + error_listener = ParseErrorListener() + parser.removeErrorListeners() + parser.addErrorListener(error_listener) + tree = parser.typeStatement() + assert parser.getNumberOfSyntaxErrors() == 0, error_listener.errors + return tree + + +def test_unknown_type_parser_accepts_nullable_and_non_nullable_forms(): + assert parse_type_statement("unknown").typeDef().getText() == "unknown" + assert parse_type_statement("unknown?").typeDef().getText() == "unknown?" + + +def test_unknown_short_type_is_stable(): + assert Extension.get_short_type("unknown") == "unknown" + assert Extension.get_short_type("unknown?") == "unknown" + + +def test_named_expression_example_contract(): + expr = parse_textproto( + "site/examples/proto-textformat/unbound_expression/named_expression.textproto", + algebra_pb2.Expression(), + ) + + assert expr.WhichOneof("rex_type") == "named_expression" + assert list(expr.named_expression.names) == ["foo"] + + +def test_scalar_function_unknown_example_contract(): + expr = parse_textproto( + "site/examples/proto-textformat/unbound_expression/scalar_function_unknown.textproto", + algebra_pb2.Expression(), + ) + + assert expr.WhichOneof("rex_type") == "scalar_function" + assert expr.scalar_function.function_reference == 1 + assert len(expr.scalar_function.arguments) == 2 + assert list(expr.scalar_function.arguments[0].value.named_expression.names) == ["a"] + assert list(expr.scalar_function.arguments[1].value.named_expression.names) == ["b"] + assert expr.scalar_function.output_type.WhichOneof("kind") == "unknown" + assert ( + expr.scalar_function.output_type.unknown.nullability + == type_pb2.Type.NULLABILITY_UNSPECIFIED + ) + + +def test_unbound_extended_expression_example_contract(): + expr = parse_textproto( + "site/examples/proto-textformat/extended_expression/unbound_named_projection.textproto", + extended_expression_pb2.ExtendedExpression(), + ) + + assert expr.version.producer == "substrait" + assert len(expr.extension_urns) == 1 + assert expr.extension_urns[0].extension_urn_anchor == 1 + assert expr.extension_urns[0].urn == "extension:io.substrait:unknown" + + assert len(expr.extensions) == 1 + assert expr.extensions[0].WhichOneof("mapping_type") == "extension_function" + assert expr.extensions[0].extension_function.extension_urn_reference == 1 + assert expr.extensions[0].extension_function.function_anchor == 1 + assert expr.extensions[0].extension_function.name == "add:unknown_unknown" + + assert list(expr.base_schema.names) == ["a", "b"] + assert expr.base_schema.struct.nullability == type_pb2.Type.NULLABILITY_REQUIRED + assert [ + field_type.WhichOneof("kind") for field_type in expr.base_schema.struct.types + ] == [ + "unknown", + "unknown", + ] + + assert len(expr.referred_expr) == 1 + assert list(expr.referred_expr[0].output_names) == ["sum"] + assert expr.referred_expr[0].expression.WhichOneof("rex_type") == "scalar_function" + + fn = expr.referred_expr[0].expression.scalar_function + assert fn.function_reference == 1 + assert len(fn.arguments) == 2 + assert list(fn.arguments[0].value.named_expression.names) == ["a"] + assert list(fn.arguments[1].value.named_expression.names) == ["b"] + assert fn.output_type.WhichOneof("kind") == "unknown" diff --git a/tests/type/antlr_parser/SubstraitLexer.py b/tests/type/antlr_parser/SubstraitLexer.py index 4c99f8a51..74ba6f93b 100644 --- a/tests/type/antlr_parser/SubstraitLexer.py +++ b/tests/type/antlr_parser/SubstraitLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,79,624,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, + 4,0,80,634,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,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, @@ -23,213 +23,217 @@ def serializedATN(): 58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,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,1,0,1,0,1,0,1,0,5,0,170,8, - 0,10,0,12,0,173,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,182,8,1,11,1, - 12,1,183,1,1,3,1,187,8,1,1,1,5,1,190,8,1,10,1,12,1,193,9,1,1,1,1, - 1,1,1,1,1,1,1,1,2,4,2,201,8,2,11,2,12,2,202,1,2,1,2,1,3,1,3,1,4, - 1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7, - 1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1, - 10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, - 13,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,17,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,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,20,1,20,1,20,1,20,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,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, - 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,1,0,1,0,1,0,1,0, + 5,0,172,8,0,10,0,12,0,175,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,184, + 8,1,11,1,12,1,185,1,1,3,1,189,8,1,1,1,5,1,192,8,1,10,1,12,1,195, + 9,1,1,1,1,1,1,1,1,1,1,1,1,2,4,2,203,8,2,11,2,12,2,204,1,2,1,2,1, + 3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1, + 7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1, + 10,1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1, + 13,1,13,1,13,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,17,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,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,20,1,20,1,20,1,20,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,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1, 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, - 24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, - 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1, - 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1, - 27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,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,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, - 33,1,33,1,33,1,34,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,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1, - 38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, - 40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, - 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1, - 45,1,45,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1, - 48,1,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,1,54,1, - 54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1, - 59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1,65,1,65,1, - 66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1, - 72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,1, - 76,1,77,1,77,5,77,595,8,77,10,77,12,77,598,9,77,1,77,3,77,601,8, - 77,1,78,1,78,1,79,3,79,606,8,79,1,79,1,79,1,80,1,80,1,80,5,80,613, - 8,80,10,80,12,80,616,9,80,1,81,1,81,3,81,620,8,81,1,81,3,81,623, - 8,81,0,0,82,1,1,3,2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23, - 11,25,12,27,13,29,14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45, - 22,47,23,49,24,51,25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67, - 33,69,34,71,35,73,36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89, - 44,91,45,93,46,95,47,97,48,99,49,101,50,103,51,105,52,107,53,109, - 54,111,55,113,56,115,57,117,58,119,59,121,60,123,61,125,62,127,63, - 129,64,131,65,133,66,135,67,137,68,139,69,141,70,143,71,145,72,147, - 73,149,74,151,75,153,76,155,0,157,0,159,77,161,78,163,79,1,0,28, - 2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1, - 0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2, - 0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108, - 108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66, - 98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82, - 82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100, - 2,0,86,86,118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88, - 120,120,4,0,36,36,65,90,95,95,97,122,632,0,1,1,0,0,0,0,3,1,0,0,0, - 0,5,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,55,1,0,0,0,0, - 57,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,91,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,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,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,1,165, - 1,0,0,0,3,176,1,0,0,0,5,200,1,0,0,0,7,206,1,0,0,0,9,208,1,0,0,0, - 11,211,1,0,0,0,13,216,1,0,0,0,15,221,1,0,0,0,17,226,1,0,0,0,19,234, - 1,0,0,0,21,237,1,0,0,0,23,241,1,0,0,0,25,245,1,0,0,0,27,249,1,0, - 0,0,29,254,1,0,0,0,31,259,1,0,0,0,33,266,1,0,0,0,35,273,1,0,0,0, - 37,278,1,0,0,0,39,292,1,0,0,0,41,305,1,0,0,0,43,323,1,0,0,0,45,328, - 1,0,0,0,47,336,1,0,0,0,49,351,1,0,0,0,51,371,1,0,0,0,53,394,1,0, - 0,0,55,404,1,0,0,0,57,412,1,0,0,0,59,424,1,0,0,0,61,431,1,0,0,0, - 63,439,1,0,0,0,65,444,1,0,0,0,67,448,1,0,0,0,69,451,1,0,0,0,71,456, - 1,0,0,0,73,460,1,0,0,0,75,465,1,0,0,0,77,471,1,0,0,0,79,476,1,0, - 0,0,81,486,1,0,0,0,83,490,1,0,0,0,85,493,1,0,0,0,87,497,1,0,0,0, - 89,503,1,0,0,0,91,509,1,0,0,0,93,515,1,0,0,0,95,520,1,0,0,0,97,524, - 1,0,0,0,99,527,1,0,0,0,101,530,1,0,0,0,103,532,1,0,0,0,105,534,1, - 0,0,0,107,536,1,0,0,0,109,538,1,0,0,0,111,540,1,0,0,0,113,542,1, - 0,0,0,115,545,1,0,0,0,117,548,1,0,0,0,119,551,1,0,0,0,121,553,1, - 0,0,0,123,555,1,0,0,0,125,557,1,0,0,0,127,559,1,0,0,0,129,561,1, - 0,0,0,131,563,1,0,0,0,133,565,1,0,0,0,135,567,1,0,0,0,137,569,1, - 0,0,0,139,571,1,0,0,0,141,573,1,0,0,0,143,575,1,0,0,0,145,577,1, - 0,0,0,147,579,1,0,0,0,149,583,1,0,0,0,151,586,1,0,0,0,153,589,1, - 0,0,0,155,600,1,0,0,0,157,602,1,0,0,0,159,605,1,0,0,0,161,609,1, - 0,0,0,163,622,1,0,0,0,165,166,5,47,0,0,166,167,5,47,0,0,167,171, - 1,0,0,0,168,170,8,0,0,0,169,168,1,0,0,0,170,173,1,0,0,0,171,169, - 1,0,0,0,171,172,1,0,0,0,172,174,1,0,0,0,173,171,1,0,0,0,174,175, - 6,0,0,0,175,2,1,0,0,0,176,177,5,47,0,0,177,178,5,42,0,0,178,186, - 1,0,0,0,179,187,8,1,0,0,180,182,5,42,0,0,181,180,1,0,0,0,182,183, - 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,185,1,0,0,0,185,187, - 8,2,0,0,186,179,1,0,0,0,186,181,1,0,0,0,187,191,1,0,0,0,188,190, - 5,42,0,0,189,188,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192, - 1,0,0,0,192,194,1,0,0,0,193,191,1,0,0,0,194,195,5,42,0,0,195,196, - 5,47,0,0,196,197,1,0,0,0,197,198,6,1,0,0,198,4,1,0,0,0,199,201,7, - 3,0,0,200,199,1,0,0,0,201,202,1,0,0,0,202,200,1,0,0,0,202,203,1, - 0,0,0,203,204,1,0,0,0,204,205,6,2,0,0,205,6,1,0,0,0,206,207,7,4, - 0,0,207,8,1,0,0,0,208,209,7,5,0,0,209,210,7,6,0,0,210,10,1,0,0,0, - 211,212,7,7,0,0,212,213,7,8,0,0,213,214,7,9,0,0,214,215,7,10,0,0, - 215,12,1,0,0,0,216,217,7,9,0,0,217,218,7,11,0,0,218,219,7,12,0,0, - 219,220,7,9,0,0,220,14,1,0,0,0,221,222,7,6,0,0,222,223,7,13,0,0, - 223,224,7,10,0,0,224,225,7,14,0,0,225,16,1,0,0,0,226,227,7,15,0, - 0,227,228,7,16,0,0,228,229,7,16,0,0,229,230,7,11,0,0,230,231,7,9, - 0,0,231,232,7,17,0,0,232,233,7,10,0,0,233,18,1,0,0,0,234,235,7,5, - 0,0,235,236,5,56,0,0,236,20,1,0,0,0,237,238,7,5,0,0,238,239,5,49, - 0,0,239,240,5,54,0,0,240,22,1,0,0,0,241,242,7,5,0,0,242,243,5,51, - 0,0,243,244,5,50,0,0,244,24,1,0,0,0,245,246,7,5,0,0,246,247,5,54, - 0,0,247,248,5,52,0,0,248,26,1,0,0,0,249,250,7,6,0,0,250,251,7,18, - 0,0,251,252,5,51,0,0,252,253,5,50,0,0,253,28,1,0,0,0,254,255,7,6, - 0,0,255,256,7,18,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,30,1, - 0,0,0,259,260,7,12,0,0,260,261,7,7,0,0,261,262,7,19,0,0,262,263, - 7,5,0,0,263,264,7,10,0,0,264,265,7,20,0,0,265,32,1,0,0,0,266,267, - 7,15,0,0,267,268,7,5,0,0,268,269,7,10,0,0,269,270,7,17,0,0,270,271, - 7,19,0,0,271,272,7,21,0,0,272,34,1,0,0,0,273,274,7,22,0,0,274,275, - 7,17,0,0,275,276,7,7,0,0,276,277,7,9,0,0,277,36,1,0,0,0,278,279, - 7,5,0,0,279,280,7,10,0,0,280,281,7,7,0,0,281,282,7,9,0,0,282,283, - 7,19,0,0,283,284,7,23,0,0,284,285,7,17,0,0,285,286,7,11,0,0,286, - 287,5,95,0,0,287,288,7,21,0,0,288,289,7,9,0,0,289,290,7,17,0,0,290, - 291,7,19,0,0,291,38,1,0,0,0,292,293,7,5,0,0,293,294,7,10,0,0,294, - 295,7,7,0,0,295,296,7,9,0,0,296,297,7,19,0,0,297,298,7,23,0,0,298, - 299,7,17,0,0,299,300,7,11,0,0,300,301,5,95,0,0,301,302,7,22,0,0, - 302,303,7,17,0,0,303,304,7,21,0,0,304,40,1,0,0,0,305,306,7,5,0,0, - 306,307,7,10,0,0,307,308,7,7,0,0,308,309,7,9,0,0,309,310,7,19,0, - 0,310,311,7,23,0,0,311,312,7,17,0,0,312,313,7,11,0,0,313,314,5,95, - 0,0,314,315,7,14,0,0,315,316,7,16,0,0,316,317,7,24,0,0,317,318,7, - 18,0,0,318,319,7,16,0,0,319,320,7,13,0,0,320,321,7,10,0,0,321,322, - 7,22,0,0,322,42,1,0,0,0,323,324,7,13,0,0,324,325,7,13,0,0,325,326, - 7,5,0,0,326,327,7,22,0,0,327,44,1,0,0,0,328,329,7,22,0,0,329,330, - 7,9,0,0,330,331,7,14,0,0,331,332,7,5,0,0,332,333,7,24,0,0,333,334, - 7,17,0,0,334,335,7,11,0,0,335,46,1,0,0,0,336,337,7,18,0,0,337,338, - 7,19,0,0,338,339,7,9,0,0,339,340,7,14,0,0,340,341,7,5,0,0,341,342, - 7,12,0,0,342,343,7,5,0,0,343,344,7,16,0,0,344,345,7,10,0,0,345,346, - 5,95,0,0,346,347,7,7,0,0,347,348,7,5,0,0,348,349,7,24,0,0,349,350, - 7,9,0,0,350,48,1,0,0,0,351,352,7,18,0,0,352,353,7,19,0,0,353,354, - 7,9,0,0,354,355,7,14,0,0,355,356,7,5,0,0,356,357,7,12,0,0,357,358, - 7,5,0,0,358,359,7,16,0,0,359,360,7,10,0,0,360,361,5,95,0,0,361,362, - 7,7,0,0,362,363,7,5,0,0,363,364,7,24,0,0,364,365,7,9,0,0,365,366, - 7,12,0,0,366,367,7,7,0,0,367,368,7,17,0,0,368,369,7,24,0,0,369,370, - 7,18,0,0,370,50,1,0,0,0,371,372,7,18,0,0,372,373,7,19,0,0,373,374, - 7,9,0,0,374,375,7,14,0,0,375,376,7,5,0,0,376,377,7,12,0,0,377,378, - 7,5,0,0,378,379,7,16,0,0,379,380,7,10,0,0,380,381,5,95,0,0,381,382, - 7,7,0,0,382,383,7,5,0,0,383,384,7,24,0,0,384,385,7,9,0,0,385,386, - 7,12,0,0,386,387,7,7,0,0,387,388,7,17,0,0,388,389,7,24,0,0,389,390, - 7,18,0,0,390,391,5,95,0,0,391,392,7,7,0,0,392,393,7,25,0,0,393,52, - 1,0,0,0,394,395,7,6,0,0,395,396,7,5,0,0,396,397,7,26,0,0,397,398, - 7,9,0,0,398,399,7,22,0,0,399,400,7,14,0,0,400,401,7,8,0,0,401,402, - 7,17,0,0,402,403,7,19,0,0,403,54,1,0,0,0,404,405,7,23,0,0,405,406, - 7,17,0,0,406,407,7,19,0,0,407,408,7,14,0,0,408,409,7,8,0,0,409,410, - 7,17,0,0,410,411,7,19,0,0,411,56,1,0,0,0,412,413,7,6,0,0,413,414, - 7,5,0,0,414,415,7,26,0,0,415,416,7,9,0,0,416,417,7,22,0,0,417,418, - 7,15,0,0,418,419,7,5,0,0,419,420,7,10,0,0,420,421,7,17,0,0,421,422, - 7,19,0,0,422,423,7,21,0,0,423,58,1,0,0,0,424,425,7,12,0,0,425,426, - 7,7,0,0,426,427,7,19,0,0,427,428,7,13,0,0,428,429,7,14,0,0,429,430, - 7,7,0,0,430,60,1,0,0,0,431,432,7,10,0,0,432,433,7,12,0,0,433,434, - 7,7,0,0,434,435,7,19,0,0,435,436,7,13,0,0,436,437,7,14,0,0,437,438, - 7,7,0,0,438,62,1,0,0,0,439,440,7,11,0,0,440,441,7,5,0,0,441,442, - 7,12,0,0,442,443,7,7,0,0,443,64,1,0,0,0,444,445,7,24,0,0,445,446, - 7,17,0,0,446,447,7,18,0,0,447,66,1,0,0,0,448,449,7,13,0,0,449,450, - 5,33,0,0,450,68,1,0,0,0,451,452,7,15,0,0,452,453,7,16,0,0,453,454, - 7,16,0,0,454,455,7,11,0,0,455,70,1,0,0,0,456,457,7,12,0,0,457,458, - 7,7,0,0,458,459,7,19,0,0,459,72,1,0,0,0,460,461,7,23,0,0,461,462, - 7,15,0,0,462,463,7,5,0,0,463,464,7,10,0,0,464,74,1,0,0,0,465,466, - 7,5,0,0,466,467,7,21,0,0,467,468,7,9,0,0,468,469,7,17,0,0,469,470, - 7,19,0,0,470,76,1,0,0,0,471,472,7,5,0,0,472,473,7,22,0,0,473,474, - 7,17,0,0,474,475,7,21,0,0,475,78,1,0,0,0,476,477,7,5,0,0,477,478, - 7,14,0,0,478,479,7,16,0,0,479,480,7,24,0,0,480,481,7,18,0,0,481, - 482,7,16,0,0,482,483,7,13,0,0,483,484,7,10,0,0,484,485,7,22,0,0, - 485,80,1,0,0,0,486,487,7,22,0,0,487,488,7,9,0,0,488,489,7,14,0,0, - 489,82,1,0,0,0,490,491,7,18,0,0,491,492,7,7,0,0,492,84,1,0,0,0,493, - 494,7,18,0,0,494,495,7,7,0,0,495,496,7,12,0,0,496,86,1,0,0,0,497, - 498,7,18,0,0,498,499,7,7,0,0,499,500,7,12,0,0,500,501,7,7,0,0,501, - 502,7,25,0,0,502,88,1,0,0,0,503,504,7,6,0,0,504,505,7,14,0,0,505, - 506,7,8,0,0,506,507,7,17,0,0,507,508,7,19,0,0,508,90,1,0,0,0,509, - 510,7,23,0,0,510,511,7,14,0,0,511,512,7,8,0,0,512,513,7,17,0,0,513, - 514,7,19,0,0,514,92,1,0,0,0,515,516,7,6,0,0,516,517,7,15,0,0,517, - 518,7,5,0,0,518,519,7,10,0,0,519,94,1,0,0,0,520,521,7,17,0,0,521, - 522,7,10,0,0,522,523,7,21,0,0,523,96,1,0,0,0,524,525,3,95,47,0,525, - 526,7,4,0,0,526,98,1,0,0,0,527,528,5,58,0,0,528,529,5,58,0,0,529, - 100,1,0,0,0,530,531,5,43,0,0,531,102,1,0,0,0,532,533,5,45,0,0,533, - 104,1,0,0,0,534,535,5,42,0,0,535,106,1,0,0,0,536,537,5,47,0,0,537, - 108,1,0,0,0,538,539,5,37,0,0,539,110,1,0,0,0,540,541,5,61,0,0,541, - 112,1,0,0,0,542,543,5,33,0,0,543,544,5,61,0,0,544,114,1,0,0,0,545, - 546,5,62,0,0,546,547,5,61,0,0,547,116,1,0,0,0,548,549,5,60,0,0,549, - 550,5,61,0,0,550,118,1,0,0,0,551,552,5,62,0,0,552,120,1,0,0,0,553, - 554,5,60,0,0,554,122,1,0,0,0,555,556,5,33,0,0,556,124,1,0,0,0,557, - 558,3,121,60,0,558,126,1,0,0,0,559,560,3,119,59,0,560,128,1,0,0, - 0,561,562,5,40,0,0,562,130,1,0,0,0,563,564,5,41,0,0,564,132,1,0, - 0,0,565,566,5,91,0,0,566,134,1,0,0,0,567,568,5,93,0,0,568,136,1, - 0,0,0,569,570,5,44,0,0,570,138,1,0,0,0,571,572,5,58,0,0,572,140, - 1,0,0,0,573,574,5,63,0,0,574,142,1,0,0,0,575,576,5,35,0,0,576,144, - 1,0,0,0,577,578,5,46,0,0,578,146,1,0,0,0,579,580,7,17,0,0,580,581, - 7,10,0,0,581,582,7,22,0,0,582,148,1,0,0,0,583,584,7,16,0,0,584,585, - 7,19,0,0,585,150,1,0,0,0,586,587,5,58,0,0,587,588,5,61,0,0,588,152, - 1,0,0,0,589,590,5,45,0,0,590,591,5,62,0,0,591,154,1,0,0,0,592,596, - 2,49,57,0,593,595,3,157,78,0,594,593,1,0,0,0,595,598,1,0,0,0,596, - 594,1,0,0,0,596,597,1,0,0,0,597,601,1,0,0,0,598,596,1,0,0,0,599, - 601,5,48,0,0,600,592,1,0,0,0,600,599,1,0,0,0,601,156,1,0,0,0,602, - 603,2,48,57,0,603,158,1,0,0,0,604,606,5,45,0,0,605,604,1,0,0,0,605, - 606,1,0,0,0,606,607,1,0,0,0,607,608,3,155,77,0,608,160,1,0,0,0,609, - 614,7,27,0,0,610,613,7,27,0,0,611,613,3,157,78,0,612,610,1,0,0,0, - 612,611,1,0,0,0,613,616,1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0, - 615,162,1,0,0,0,616,614,1,0,0,0,617,619,5,13,0,0,618,620,5,10,0, - 0,619,618,1,0,0,0,619,620,1,0,0,0,620,623,1,0,0,0,621,623,5,10,0, - 0,622,617,1,0,0,0,622,621,1,0,0,0,623,164,1,0,0,0,13,0,171,183,186, - 191,202,596,600,605,612,614,619,622,1,0,1,0 + 24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,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,31,1,31,1,31,1,31,1,31,1,32,1,32,1, + 32,1,32,1,33,1,33,1,33,1,34,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,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1, + 38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1, + 39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1, + 43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1, + 45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1, + 48,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1, + 53,1,54,1,54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1, + 58,1,59,1,59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1, + 65,1,65,1,66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1, + 71,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1, + 76,1,76,1,76,1,77,1,77,5,77,597,8,77,10,77,12,77,600,9,77,1,77,3, + 77,603,8,77,1,78,1,78,1,79,3,79,608,8,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,5,81,623,8,81,10,81,12,81, + 626,9,81,1,82,1,82,3,82,630,8,82,1,82,3,82,633,8,82,0,0,83,1,1,3, + 2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23,11,25,12,27,13,29, + 14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45,22,47,23,49,24,51, + 25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67,33,69,34,71,35,73, + 36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89,44,91,45,93,46,95, + 47,97,48,99,49,101,50,103,51,105,52,107,53,109,54,111,55,113,56, + 115,57,117,58,119,59,121,60,123,61,125,62,127,63,129,64,131,65,133, + 66,135,67,137,68,139,69,141,70,143,71,145,72,147,73,149,74,151,75, + 153,76,155,0,157,0,159,77,161,78,163,79,165,80,1,0,30,2,0,10,10, + 13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1,0,48,57,2, + 0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2,0,72,72,104, + 104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108,108,2,0,83, + 83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66,98,98,2,0, + 79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82,82,114,114, + 2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100,2,0,86,86, + 118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88,120,120,2, + 0,75,75,107,107,2,0,87,87,119,119,4,0,36,36,65,90,95,95,97,122,642, + 0,1,1,0,0,0,0,3,1,0,0,0,0,5,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,55,1,0,0,0,0,57,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,91,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,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,159,1,0,0,0,0,161,1,0,0,0, + 0,163,1,0,0,0,0,165,1,0,0,0,1,167,1,0,0,0,3,178,1,0,0,0,5,202,1, + 0,0,0,7,208,1,0,0,0,9,210,1,0,0,0,11,213,1,0,0,0,13,218,1,0,0,0, + 15,223,1,0,0,0,17,228,1,0,0,0,19,236,1,0,0,0,21,239,1,0,0,0,23,243, + 1,0,0,0,25,247,1,0,0,0,27,251,1,0,0,0,29,256,1,0,0,0,31,261,1,0, + 0,0,33,268,1,0,0,0,35,275,1,0,0,0,37,280,1,0,0,0,39,294,1,0,0,0, + 41,307,1,0,0,0,43,325,1,0,0,0,45,330,1,0,0,0,47,338,1,0,0,0,49,353, + 1,0,0,0,51,373,1,0,0,0,53,396,1,0,0,0,55,406,1,0,0,0,57,414,1,0, + 0,0,59,426,1,0,0,0,61,433,1,0,0,0,63,441,1,0,0,0,65,446,1,0,0,0, + 67,450,1,0,0,0,69,453,1,0,0,0,71,458,1,0,0,0,73,462,1,0,0,0,75,467, + 1,0,0,0,77,473,1,0,0,0,79,478,1,0,0,0,81,488,1,0,0,0,83,492,1,0, + 0,0,85,495,1,0,0,0,87,499,1,0,0,0,89,505,1,0,0,0,91,511,1,0,0,0, + 93,517,1,0,0,0,95,522,1,0,0,0,97,526,1,0,0,0,99,529,1,0,0,0,101, + 532,1,0,0,0,103,534,1,0,0,0,105,536,1,0,0,0,107,538,1,0,0,0,109, + 540,1,0,0,0,111,542,1,0,0,0,113,544,1,0,0,0,115,547,1,0,0,0,117, + 550,1,0,0,0,119,553,1,0,0,0,121,555,1,0,0,0,123,557,1,0,0,0,125, + 559,1,0,0,0,127,561,1,0,0,0,129,563,1,0,0,0,131,565,1,0,0,0,133, + 567,1,0,0,0,135,569,1,0,0,0,137,571,1,0,0,0,139,573,1,0,0,0,141, + 575,1,0,0,0,143,577,1,0,0,0,145,579,1,0,0,0,147,581,1,0,0,0,149, + 585,1,0,0,0,151,588,1,0,0,0,153,591,1,0,0,0,155,602,1,0,0,0,157, + 604,1,0,0,0,159,607,1,0,0,0,161,611,1,0,0,0,163,619,1,0,0,0,165, + 632,1,0,0,0,167,168,5,47,0,0,168,169,5,47,0,0,169,173,1,0,0,0,170, + 172,8,0,0,0,171,170,1,0,0,0,172,175,1,0,0,0,173,171,1,0,0,0,173, + 174,1,0,0,0,174,176,1,0,0,0,175,173,1,0,0,0,176,177,6,0,0,0,177, + 2,1,0,0,0,178,179,5,47,0,0,179,180,5,42,0,0,180,188,1,0,0,0,181, + 189,8,1,0,0,182,184,5,42,0,0,183,182,1,0,0,0,184,185,1,0,0,0,185, + 183,1,0,0,0,185,186,1,0,0,0,186,187,1,0,0,0,187,189,8,2,0,0,188, + 181,1,0,0,0,188,183,1,0,0,0,189,193,1,0,0,0,190,192,5,42,0,0,191, + 190,1,0,0,0,192,195,1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194, + 196,1,0,0,0,195,193,1,0,0,0,196,197,5,42,0,0,197,198,5,47,0,0,198, + 199,1,0,0,0,199,200,6,1,0,0,200,4,1,0,0,0,201,203,7,3,0,0,202,201, + 1,0,0,0,203,204,1,0,0,0,204,202,1,0,0,0,204,205,1,0,0,0,205,206, + 1,0,0,0,206,207,6,2,0,0,207,6,1,0,0,0,208,209,7,4,0,0,209,8,1,0, + 0,0,210,211,7,5,0,0,211,212,7,6,0,0,212,10,1,0,0,0,213,214,7,7,0, + 0,214,215,7,8,0,0,215,216,7,9,0,0,216,217,7,10,0,0,217,12,1,0,0, + 0,218,219,7,9,0,0,219,220,7,11,0,0,220,221,7,12,0,0,221,222,7,9, + 0,0,222,14,1,0,0,0,223,224,7,6,0,0,224,225,7,13,0,0,225,226,7,10, + 0,0,226,227,7,14,0,0,227,16,1,0,0,0,228,229,7,15,0,0,229,230,7,16, + 0,0,230,231,7,16,0,0,231,232,7,11,0,0,232,233,7,9,0,0,233,234,7, + 17,0,0,234,235,7,10,0,0,235,18,1,0,0,0,236,237,7,5,0,0,237,238,5, + 56,0,0,238,20,1,0,0,0,239,240,7,5,0,0,240,241,5,49,0,0,241,242,5, + 54,0,0,242,22,1,0,0,0,243,244,7,5,0,0,244,245,5,51,0,0,245,246,5, + 50,0,0,246,24,1,0,0,0,247,248,7,5,0,0,248,249,5,54,0,0,249,250,5, + 52,0,0,250,26,1,0,0,0,251,252,7,6,0,0,252,253,7,18,0,0,253,254,5, + 51,0,0,254,255,5,50,0,0,255,28,1,0,0,0,256,257,7,6,0,0,257,258,7, + 18,0,0,258,259,5,54,0,0,259,260,5,52,0,0,260,30,1,0,0,0,261,262, + 7,12,0,0,262,263,7,7,0,0,263,264,7,19,0,0,264,265,7,5,0,0,265,266, + 7,10,0,0,266,267,7,20,0,0,267,32,1,0,0,0,268,269,7,15,0,0,269,270, + 7,5,0,0,270,271,7,10,0,0,271,272,7,17,0,0,272,273,7,19,0,0,273,274, + 7,21,0,0,274,34,1,0,0,0,275,276,7,22,0,0,276,277,7,17,0,0,277,278, + 7,7,0,0,278,279,7,9,0,0,279,36,1,0,0,0,280,281,7,5,0,0,281,282,7, + 10,0,0,282,283,7,7,0,0,283,284,7,9,0,0,284,285,7,19,0,0,285,286, + 7,23,0,0,286,287,7,17,0,0,287,288,7,11,0,0,288,289,5,95,0,0,289, + 290,7,21,0,0,290,291,7,9,0,0,291,292,7,17,0,0,292,293,7,19,0,0,293, + 38,1,0,0,0,294,295,7,5,0,0,295,296,7,10,0,0,296,297,7,7,0,0,297, + 298,7,9,0,0,298,299,7,19,0,0,299,300,7,23,0,0,300,301,7,17,0,0,301, + 302,7,11,0,0,302,303,5,95,0,0,303,304,7,22,0,0,304,305,7,17,0,0, + 305,306,7,21,0,0,306,40,1,0,0,0,307,308,7,5,0,0,308,309,7,10,0,0, + 309,310,7,7,0,0,310,311,7,9,0,0,311,312,7,19,0,0,312,313,7,23,0, + 0,313,314,7,17,0,0,314,315,7,11,0,0,315,316,5,95,0,0,316,317,7,14, + 0,0,317,318,7,16,0,0,318,319,7,24,0,0,319,320,7,18,0,0,320,321,7, + 16,0,0,321,322,7,13,0,0,322,323,7,10,0,0,323,324,7,22,0,0,324,42, + 1,0,0,0,325,326,7,13,0,0,326,327,7,13,0,0,327,328,7,5,0,0,328,329, + 7,22,0,0,329,44,1,0,0,0,330,331,7,22,0,0,331,332,7,9,0,0,332,333, + 7,14,0,0,333,334,7,5,0,0,334,335,7,24,0,0,335,336,7,17,0,0,336,337, + 7,11,0,0,337,46,1,0,0,0,338,339,7,18,0,0,339,340,7,19,0,0,340,341, + 7,9,0,0,341,342,7,14,0,0,342,343,7,5,0,0,343,344,7,12,0,0,344,345, + 7,5,0,0,345,346,7,16,0,0,346,347,7,10,0,0,347,348,5,95,0,0,348,349, + 7,7,0,0,349,350,7,5,0,0,350,351,7,24,0,0,351,352,7,9,0,0,352,48, + 1,0,0,0,353,354,7,18,0,0,354,355,7,19,0,0,355,356,7,9,0,0,356,357, + 7,14,0,0,357,358,7,5,0,0,358,359,7,12,0,0,359,360,7,5,0,0,360,361, + 7,16,0,0,361,362,7,10,0,0,362,363,5,95,0,0,363,364,7,7,0,0,364,365, + 7,5,0,0,365,366,7,24,0,0,366,367,7,9,0,0,367,368,7,12,0,0,368,369, + 7,7,0,0,369,370,7,17,0,0,370,371,7,24,0,0,371,372,7,18,0,0,372,50, + 1,0,0,0,373,374,7,18,0,0,374,375,7,19,0,0,375,376,7,9,0,0,376,377, + 7,14,0,0,377,378,7,5,0,0,378,379,7,12,0,0,379,380,7,5,0,0,380,381, + 7,16,0,0,381,382,7,10,0,0,382,383,5,95,0,0,383,384,7,7,0,0,384,385, + 7,5,0,0,385,386,7,24,0,0,386,387,7,9,0,0,387,388,7,12,0,0,388,389, + 7,7,0,0,389,390,7,17,0,0,390,391,7,24,0,0,391,392,7,18,0,0,392,393, + 5,95,0,0,393,394,7,7,0,0,394,395,7,25,0,0,395,52,1,0,0,0,396,397, + 7,6,0,0,397,398,7,5,0,0,398,399,7,26,0,0,399,400,7,9,0,0,400,401, + 7,22,0,0,401,402,7,14,0,0,402,403,7,8,0,0,403,404,7,17,0,0,404,405, + 7,19,0,0,405,54,1,0,0,0,406,407,7,23,0,0,407,408,7,17,0,0,408,409, + 7,19,0,0,409,410,7,14,0,0,410,411,7,8,0,0,411,412,7,17,0,0,412,413, + 7,19,0,0,413,56,1,0,0,0,414,415,7,6,0,0,415,416,7,5,0,0,416,417, + 7,26,0,0,417,418,7,9,0,0,418,419,7,22,0,0,419,420,7,15,0,0,420,421, + 7,5,0,0,421,422,7,10,0,0,422,423,7,17,0,0,423,424,7,19,0,0,424,425, + 7,21,0,0,425,58,1,0,0,0,426,427,7,12,0,0,427,428,7,7,0,0,428,429, + 7,19,0,0,429,430,7,13,0,0,430,431,7,14,0,0,431,432,7,7,0,0,432,60, + 1,0,0,0,433,434,7,10,0,0,434,435,7,12,0,0,435,436,7,7,0,0,436,437, + 7,19,0,0,437,438,7,13,0,0,438,439,7,14,0,0,439,440,7,7,0,0,440,62, + 1,0,0,0,441,442,7,11,0,0,442,443,7,5,0,0,443,444,7,12,0,0,444,445, + 7,7,0,0,445,64,1,0,0,0,446,447,7,24,0,0,447,448,7,17,0,0,448,449, + 7,18,0,0,449,66,1,0,0,0,450,451,7,13,0,0,451,452,5,33,0,0,452,68, + 1,0,0,0,453,454,7,15,0,0,454,455,7,16,0,0,455,456,7,16,0,0,456,457, + 7,11,0,0,457,70,1,0,0,0,458,459,7,12,0,0,459,460,7,7,0,0,460,461, + 7,19,0,0,461,72,1,0,0,0,462,463,7,23,0,0,463,464,7,15,0,0,464,465, + 7,5,0,0,465,466,7,10,0,0,466,74,1,0,0,0,467,468,7,5,0,0,468,469, + 7,21,0,0,469,470,7,9,0,0,470,471,7,17,0,0,471,472,7,19,0,0,472,76, + 1,0,0,0,473,474,7,5,0,0,474,475,7,22,0,0,475,476,7,17,0,0,476,477, + 7,21,0,0,477,78,1,0,0,0,478,479,7,5,0,0,479,480,7,14,0,0,480,481, + 7,16,0,0,481,482,7,24,0,0,482,483,7,18,0,0,483,484,7,16,0,0,484, + 485,7,13,0,0,485,486,7,10,0,0,486,487,7,22,0,0,487,80,1,0,0,0,488, + 489,7,22,0,0,489,490,7,9,0,0,490,491,7,14,0,0,491,82,1,0,0,0,492, + 493,7,18,0,0,493,494,7,7,0,0,494,84,1,0,0,0,495,496,7,18,0,0,496, + 497,7,7,0,0,497,498,7,12,0,0,498,86,1,0,0,0,499,500,7,18,0,0,500, + 501,7,7,0,0,501,502,7,12,0,0,502,503,7,7,0,0,503,504,7,25,0,0,504, + 88,1,0,0,0,505,506,7,6,0,0,506,507,7,14,0,0,507,508,7,8,0,0,508, + 509,7,17,0,0,509,510,7,19,0,0,510,90,1,0,0,0,511,512,7,23,0,0,512, + 513,7,14,0,0,513,514,7,8,0,0,514,515,7,17,0,0,515,516,7,19,0,0,516, + 92,1,0,0,0,517,518,7,6,0,0,518,519,7,15,0,0,519,520,7,5,0,0,520, + 521,7,10,0,0,521,94,1,0,0,0,522,523,7,17,0,0,523,524,7,10,0,0,524, + 525,7,21,0,0,525,96,1,0,0,0,526,527,3,95,47,0,527,528,7,4,0,0,528, + 98,1,0,0,0,529,530,5,58,0,0,530,531,5,58,0,0,531,100,1,0,0,0,532, + 533,5,43,0,0,533,102,1,0,0,0,534,535,5,45,0,0,535,104,1,0,0,0,536, + 537,5,42,0,0,537,106,1,0,0,0,538,539,5,47,0,0,539,108,1,0,0,0,540, + 541,5,37,0,0,541,110,1,0,0,0,542,543,5,61,0,0,543,112,1,0,0,0,544, + 545,5,33,0,0,545,546,5,61,0,0,546,114,1,0,0,0,547,548,5,62,0,0,548, + 549,5,61,0,0,549,116,1,0,0,0,550,551,5,60,0,0,551,552,5,61,0,0,552, + 118,1,0,0,0,553,554,5,62,0,0,554,120,1,0,0,0,555,556,5,60,0,0,556, + 122,1,0,0,0,557,558,5,33,0,0,558,124,1,0,0,0,559,560,3,121,60,0, + 560,126,1,0,0,0,561,562,3,119,59,0,562,128,1,0,0,0,563,564,5,40, + 0,0,564,130,1,0,0,0,565,566,5,41,0,0,566,132,1,0,0,0,567,568,5,91, + 0,0,568,134,1,0,0,0,569,570,5,93,0,0,570,136,1,0,0,0,571,572,5,44, + 0,0,572,138,1,0,0,0,573,574,5,58,0,0,574,140,1,0,0,0,575,576,5,63, + 0,0,576,142,1,0,0,0,577,578,5,35,0,0,578,144,1,0,0,0,579,580,5,46, + 0,0,580,146,1,0,0,0,581,582,7,17,0,0,582,583,7,10,0,0,583,584,7, + 22,0,0,584,148,1,0,0,0,585,586,7,16,0,0,586,587,7,19,0,0,587,150, + 1,0,0,0,588,589,5,58,0,0,589,590,5,61,0,0,590,152,1,0,0,0,591,592, + 5,45,0,0,592,593,5,62,0,0,593,154,1,0,0,0,594,598,2,49,57,0,595, + 597,3,157,78,0,596,595,1,0,0,0,597,600,1,0,0,0,598,596,1,0,0,0,598, + 599,1,0,0,0,599,603,1,0,0,0,600,598,1,0,0,0,601,603,5,48,0,0,602, + 594,1,0,0,0,602,601,1,0,0,0,603,156,1,0,0,0,604,605,2,48,57,0,605, + 158,1,0,0,0,606,608,5,45,0,0,607,606,1,0,0,0,607,608,1,0,0,0,608, + 609,1,0,0,0,609,610,3,155,77,0,610,160,1,0,0,0,611,612,7,13,0,0, + 612,613,7,10,0,0,613,614,7,27,0,0,614,615,7,10,0,0,615,616,7,16, + 0,0,616,617,7,28,0,0,617,618,7,10,0,0,618,162,1,0,0,0,619,624,7, + 29,0,0,620,623,7,29,0,0,621,623,3,157,78,0,622,620,1,0,0,0,622,621, + 1,0,0,0,623,626,1,0,0,0,624,622,1,0,0,0,624,625,1,0,0,0,625,164, + 1,0,0,0,626,624,1,0,0,0,627,629,5,13,0,0,628,630,5,10,0,0,629,628, + 1,0,0,0,629,630,1,0,0,0,630,633,1,0,0,0,631,633,5,10,0,0,632,627, + 1,0,0,0,632,631,1,0,0,0,633,166,1,0,0,0,13,0,173,185,188,193,204, + 598,602,607,622,624,629,632,1,0,1,0 ] class SubstraitLexer(Lexer): @@ -315,8 +319,9 @@ class SubstraitLexer(Lexer): Assign = 75 Arrow = 76 Number = 77 - Identifier = 78 - Newline = 79 + Unknown = 78 + Identifier = 79 + Newline = 80 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -334,7 +339,7 @@ class SubstraitLexer(Lexer): "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", - "'->'" ] + "'->'", "'UNKNOWN'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", @@ -349,7 +354,7 @@ class SubstraitLexer(Lexer): "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", - "Identifier", "Newline" ] + "Unknown", "Identifier", "Newline" ] ruleNames = [ "LineComment", "BlockComment", "Whitespace", "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", @@ -365,7 +370,7 @@ class SubstraitLexer(Lexer): "OAngleBracket", "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Int", "Digit", - "Number", "Identifier", "Newline" ] + "Number", "Unknown", "Identifier", "Newline" ] grammarFileName = "SubstraitLexer.g4" diff --git a/tests/type/antlr_parser/SubstraitTypeLexer.py b/tests/type/antlr_parser/SubstraitTypeLexer.py index de89d481a..5c52c102e 100644 --- a/tests/type/antlr_parser/SubstraitTypeLexer.py +++ b/tests/type/antlr_parser/SubstraitTypeLexer.py @@ -11,7 +11,7 @@ def serializedATN(): return [ - 4,0,79,624,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, + 4,0,80,634,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,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, @@ -23,213 +23,217 @@ def serializedATN(): 58,2,59,7,59,2,60,7,60,2,61,7,61,2,62,7,62,2,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,1,0,1,0,1,0,1,0,5,0,170,8, - 0,10,0,12,0,173,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,182,8,1,11,1, - 12,1,183,1,1,3,1,187,8,1,1,1,5,1,190,8,1,10,1,12,1,193,9,1,1,1,1, - 1,1,1,1,1,1,1,1,2,4,2,201,8,2,11,2,12,2,202,1,2,1,2,1,3,1,3,1,4, - 1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1,7,1,7,1,7, - 1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,10,1, - 10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1, - 13,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,17,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,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,20,1,20,1,20,1,20,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,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1, - 23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 78,7,78,2,79,7,79,2,80,7,80,2,81,7,81,2,82,7,82,1,0,1,0,1,0,1,0, + 5,0,172,8,0,10,0,12,0,175,9,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,4,1,184, + 8,1,11,1,12,1,185,1,1,3,1,189,8,1,1,1,5,1,192,8,1,10,1,12,1,195, + 9,1,1,1,1,1,1,1,1,1,1,1,1,2,4,2,203,8,2,11,2,12,2,204,1,2,1,2,1, + 3,1,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,1,5,1,6,1,6,1,6,1,6,1,6,1,7,1, + 7,1,7,1,7,1,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,9,1,9,1,9,1,10,1, + 10,1,10,1,10,1,11,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13,1,13,1, + 13,1,13,1,13,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,17,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,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,20,1,20,1,20,1,20,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,23,1,23,1,23,1,23,1,23,1,23,1, + 23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1, 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, - 24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, - 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,26,1,26,1, - 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1,27,1,27,1, - 27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, - 28,1,28,1,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,31,1,31,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, - 33,1,33,1,33,1,34,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,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1,38,1,38,1, - 38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,40,1, - 40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1,43,1,43,1, - 43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,1, - 45,1,45,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1,48,1,48,1, - 48,1,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1,53,1,54,1, - 54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1,58,1,59,1, - 59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1,65,1,65,1, - 66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1,71,1,72,1, - 72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1,76,1,76,1, - 76,1,77,1,77,5,77,595,8,77,10,77,12,77,598,9,77,1,77,3,77,601,8, - 77,1,78,1,78,1,79,3,79,606,8,79,1,79,1,79,1,80,1,80,1,80,5,80,613, - 8,80,10,80,12,80,616,9,80,1,81,1,81,3,81,620,8,81,1,81,3,81,623, - 8,81,0,0,82,1,1,3,2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23, - 11,25,12,27,13,29,14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45, - 22,47,23,49,24,51,25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67, - 33,69,34,71,35,73,36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89, - 44,91,45,93,46,95,47,97,48,99,49,101,50,103,51,105,52,107,53,109, - 54,111,55,113,56,115,57,117,58,119,59,121,60,123,61,125,62,127,63, - 129,64,131,65,133,66,135,67,137,68,139,69,141,70,143,71,145,72,147, - 73,149,74,151,75,153,76,155,0,157,0,159,77,161,78,163,79,1,0,28, - 2,0,10,10,13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1, - 0,48,57,2,0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2, - 0,72,72,104,104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108, - 108,2,0,83,83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66, - 98,98,2,0,79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82, - 82,114,114,2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100, - 2,0,86,86,118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88, - 120,120,4,0,36,36,65,90,95,95,97,122,632,0,1,1,0,0,0,0,3,1,0,0,0, - 0,5,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,55,1,0,0,0,0, - 57,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,91,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,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,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,1,165, - 1,0,0,0,3,176,1,0,0,0,5,200,1,0,0,0,7,206,1,0,0,0,9,208,1,0,0,0, - 11,211,1,0,0,0,13,216,1,0,0,0,15,221,1,0,0,0,17,226,1,0,0,0,19,234, - 1,0,0,0,21,237,1,0,0,0,23,241,1,0,0,0,25,245,1,0,0,0,27,249,1,0, - 0,0,29,254,1,0,0,0,31,259,1,0,0,0,33,266,1,0,0,0,35,273,1,0,0,0, - 37,278,1,0,0,0,39,292,1,0,0,0,41,305,1,0,0,0,43,323,1,0,0,0,45,328, - 1,0,0,0,47,336,1,0,0,0,49,351,1,0,0,0,51,371,1,0,0,0,53,394,1,0, - 0,0,55,404,1,0,0,0,57,412,1,0,0,0,59,424,1,0,0,0,61,431,1,0,0,0, - 63,439,1,0,0,0,65,444,1,0,0,0,67,448,1,0,0,0,69,451,1,0,0,0,71,456, - 1,0,0,0,73,460,1,0,0,0,75,465,1,0,0,0,77,471,1,0,0,0,79,476,1,0, - 0,0,81,486,1,0,0,0,83,490,1,0,0,0,85,493,1,0,0,0,87,497,1,0,0,0, - 89,503,1,0,0,0,91,509,1,0,0,0,93,515,1,0,0,0,95,520,1,0,0,0,97,524, - 1,0,0,0,99,527,1,0,0,0,101,530,1,0,0,0,103,532,1,0,0,0,105,534,1, - 0,0,0,107,536,1,0,0,0,109,538,1,0,0,0,111,540,1,0,0,0,113,542,1, - 0,0,0,115,545,1,0,0,0,117,548,1,0,0,0,119,551,1,0,0,0,121,553,1, - 0,0,0,123,555,1,0,0,0,125,557,1,0,0,0,127,559,1,0,0,0,129,561,1, - 0,0,0,131,563,1,0,0,0,133,565,1,0,0,0,135,567,1,0,0,0,137,569,1, - 0,0,0,139,571,1,0,0,0,141,573,1,0,0,0,143,575,1,0,0,0,145,577,1, - 0,0,0,147,579,1,0,0,0,149,583,1,0,0,0,151,586,1,0,0,0,153,589,1, - 0,0,0,155,600,1,0,0,0,157,602,1,0,0,0,159,605,1,0,0,0,161,609,1, - 0,0,0,163,622,1,0,0,0,165,166,5,47,0,0,166,167,5,47,0,0,167,171, - 1,0,0,0,168,170,8,0,0,0,169,168,1,0,0,0,170,173,1,0,0,0,171,169, - 1,0,0,0,171,172,1,0,0,0,172,174,1,0,0,0,173,171,1,0,0,0,174,175, - 6,0,0,0,175,2,1,0,0,0,176,177,5,47,0,0,177,178,5,42,0,0,178,186, - 1,0,0,0,179,187,8,1,0,0,180,182,5,42,0,0,181,180,1,0,0,0,182,183, - 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,185,1,0,0,0,185,187, - 8,2,0,0,186,179,1,0,0,0,186,181,1,0,0,0,187,191,1,0,0,0,188,190, - 5,42,0,0,189,188,1,0,0,0,190,193,1,0,0,0,191,189,1,0,0,0,191,192, - 1,0,0,0,192,194,1,0,0,0,193,191,1,0,0,0,194,195,5,42,0,0,195,196, - 5,47,0,0,196,197,1,0,0,0,197,198,6,1,0,0,198,4,1,0,0,0,199,201,7, - 3,0,0,200,199,1,0,0,0,201,202,1,0,0,0,202,200,1,0,0,0,202,203,1, - 0,0,0,203,204,1,0,0,0,204,205,6,2,0,0,205,6,1,0,0,0,206,207,7,4, - 0,0,207,8,1,0,0,0,208,209,7,5,0,0,209,210,7,6,0,0,210,10,1,0,0,0, - 211,212,7,7,0,0,212,213,7,8,0,0,213,214,7,9,0,0,214,215,7,10,0,0, - 215,12,1,0,0,0,216,217,7,9,0,0,217,218,7,11,0,0,218,219,7,12,0,0, - 219,220,7,9,0,0,220,14,1,0,0,0,221,222,7,6,0,0,222,223,7,13,0,0, - 223,224,7,10,0,0,224,225,7,14,0,0,225,16,1,0,0,0,226,227,7,15,0, - 0,227,228,7,16,0,0,228,229,7,16,0,0,229,230,7,11,0,0,230,231,7,9, - 0,0,231,232,7,17,0,0,232,233,7,10,0,0,233,18,1,0,0,0,234,235,7,5, - 0,0,235,236,5,56,0,0,236,20,1,0,0,0,237,238,7,5,0,0,238,239,5,49, - 0,0,239,240,5,54,0,0,240,22,1,0,0,0,241,242,7,5,0,0,242,243,5,51, - 0,0,243,244,5,50,0,0,244,24,1,0,0,0,245,246,7,5,0,0,246,247,5,54, - 0,0,247,248,5,52,0,0,248,26,1,0,0,0,249,250,7,6,0,0,250,251,7,18, - 0,0,251,252,5,51,0,0,252,253,5,50,0,0,253,28,1,0,0,0,254,255,7,6, - 0,0,255,256,7,18,0,0,256,257,5,54,0,0,257,258,5,52,0,0,258,30,1, - 0,0,0,259,260,7,12,0,0,260,261,7,7,0,0,261,262,7,19,0,0,262,263, - 7,5,0,0,263,264,7,10,0,0,264,265,7,20,0,0,265,32,1,0,0,0,266,267, - 7,15,0,0,267,268,7,5,0,0,268,269,7,10,0,0,269,270,7,17,0,0,270,271, - 7,19,0,0,271,272,7,21,0,0,272,34,1,0,0,0,273,274,7,22,0,0,274,275, - 7,17,0,0,275,276,7,7,0,0,276,277,7,9,0,0,277,36,1,0,0,0,278,279, - 7,5,0,0,279,280,7,10,0,0,280,281,7,7,0,0,281,282,7,9,0,0,282,283, - 7,19,0,0,283,284,7,23,0,0,284,285,7,17,0,0,285,286,7,11,0,0,286, - 287,5,95,0,0,287,288,7,21,0,0,288,289,7,9,0,0,289,290,7,17,0,0,290, - 291,7,19,0,0,291,38,1,0,0,0,292,293,7,5,0,0,293,294,7,10,0,0,294, - 295,7,7,0,0,295,296,7,9,0,0,296,297,7,19,0,0,297,298,7,23,0,0,298, - 299,7,17,0,0,299,300,7,11,0,0,300,301,5,95,0,0,301,302,7,22,0,0, - 302,303,7,17,0,0,303,304,7,21,0,0,304,40,1,0,0,0,305,306,7,5,0,0, - 306,307,7,10,0,0,307,308,7,7,0,0,308,309,7,9,0,0,309,310,7,19,0, - 0,310,311,7,23,0,0,311,312,7,17,0,0,312,313,7,11,0,0,313,314,5,95, - 0,0,314,315,7,14,0,0,315,316,7,16,0,0,316,317,7,24,0,0,317,318,7, - 18,0,0,318,319,7,16,0,0,319,320,7,13,0,0,320,321,7,10,0,0,321,322, - 7,22,0,0,322,42,1,0,0,0,323,324,7,13,0,0,324,325,7,13,0,0,325,326, - 7,5,0,0,326,327,7,22,0,0,327,44,1,0,0,0,328,329,7,22,0,0,329,330, - 7,9,0,0,330,331,7,14,0,0,331,332,7,5,0,0,332,333,7,24,0,0,333,334, - 7,17,0,0,334,335,7,11,0,0,335,46,1,0,0,0,336,337,7,18,0,0,337,338, - 7,19,0,0,338,339,7,9,0,0,339,340,7,14,0,0,340,341,7,5,0,0,341,342, - 7,12,0,0,342,343,7,5,0,0,343,344,7,16,0,0,344,345,7,10,0,0,345,346, - 5,95,0,0,346,347,7,7,0,0,347,348,7,5,0,0,348,349,7,24,0,0,349,350, - 7,9,0,0,350,48,1,0,0,0,351,352,7,18,0,0,352,353,7,19,0,0,353,354, - 7,9,0,0,354,355,7,14,0,0,355,356,7,5,0,0,356,357,7,12,0,0,357,358, - 7,5,0,0,358,359,7,16,0,0,359,360,7,10,0,0,360,361,5,95,0,0,361,362, - 7,7,0,0,362,363,7,5,0,0,363,364,7,24,0,0,364,365,7,9,0,0,365,366, - 7,12,0,0,366,367,7,7,0,0,367,368,7,17,0,0,368,369,7,24,0,0,369,370, - 7,18,0,0,370,50,1,0,0,0,371,372,7,18,0,0,372,373,7,19,0,0,373,374, - 7,9,0,0,374,375,7,14,0,0,375,376,7,5,0,0,376,377,7,12,0,0,377,378, - 7,5,0,0,378,379,7,16,0,0,379,380,7,10,0,0,380,381,5,95,0,0,381,382, - 7,7,0,0,382,383,7,5,0,0,383,384,7,24,0,0,384,385,7,9,0,0,385,386, - 7,12,0,0,386,387,7,7,0,0,387,388,7,17,0,0,388,389,7,24,0,0,389,390, - 7,18,0,0,390,391,5,95,0,0,391,392,7,7,0,0,392,393,7,25,0,0,393,52, - 1,0,0,0,394,395,7,6,0,0,395,396,7,5,0,0,396,397,7,26,0,0,397,398, - 7,9,0,0,398,399,7,22,0,0,399,400,7,14,0,0,400,401,7,8,0,0,401,402, - 7,17,0,0,402,403,7,19,0,0,403,54,1,0,0,0,404,405,7,23,0,0,405,406, - 7,17,0,0,406,407,7,19,0,0,407,408,7,14,0,0,408,409,7,8,0,0,409,410, - 7,17,0,0,410,411,7,19,0,0,411,56,1,0,0,0,412,413,7,6,0,0,413,414, - 7,5,0,0,414,415,7,26,0,0,415,416,7,9,0,0,416,417,7,22,0,0,417,418, - 7,15,0,0,418,419,7,5,0,0,419,420,7,10,0,0,420,421,7,17,0,0,421,422, - 7,19,0,0,422,423,7,21,0,0,423,58,1,0,0,0,424,425,7,12,0,0,425,426, - 7,7,0,0,426,427,7,19,0,0,427,428,7,13,0,0,428,429,7,14,0,0,429,430, - 7,7,0,0,430,60,1,0,0,0,431,432,7,10,0,0,432,433,7,12,0,0,433,434, - 7,7,0,0,434,435,7,19,0,0,435,436,7,13,0,0,436,437,7,14,0,0,437,438, - 7,7,0,0,438,62,1,0,0,0,439,440,7,11,0,0,440,441,7,5,0,0,441,442, - 7,12,0,0,442,443,7,7,0,0,443,64,1,0,0,0,444,445,7,24,0,0,445,446, - 7,17,0,0,446,447,7,18,0,0,447,66,1,0,0,0,448,449,7,13,0,0,449,450, - 5,33,0,0,450,68,1,0,0,0,451,452,7,15,0,0,452,453,7,16,0,0,453,454, - 7,16,0,0,454,455,7,11,0,0,455,70,1,0,0,0,456,457,7,12,0,0,457,458, - 7,7,0,0,458,459,7,19,0,0,459,72,1,0,0,0,460,461,7,23,0,0,461,462, - 7,15,0,0,462,463,7,5,0,0,463,464,7,10,0,0,464,74,1,0,0,0,465,466, - 7,5,0,0,466,467,7,21,0,0,467,468,7,9,0,0,468,469,7,17,0,0,469,470, - 7,19,0,0,470,76,1,0,0,0,471,472,7,5,0,0,472,473,7,22,0,0,473,474, - 7,17,0,0,474,475,7,21,0,0,475,78,1,0,0,0,476,477,7,5,0,0,477,478, - 7,14,0,0,478,479,7,16,0,0,479,480,7,24,0,0,480,481,7,18,0,0,481, - 482,7,16,0,0,482,483,7,13,0,0,483,484,7,10,0,0,484,485,7,22,0,0, - 485,80,1,0,0,0,486,487,7,22,0,0,487,488,7,9,0,0,488,489,7,14,0,0, - 489,82,1,0,0,0,490,491,7,18,0,0,491,492,7,7,0,0,492,84,1,0,0,0,493, - 494,7,18,0,0,494,495,7,7,0,0,495,496,7,12,0,0,496,86,1,0,0,0,497, - 498,7,18,0,0,498,499,7,7,0,0,499,500,7,12,0,0,500,501,7,7,0,0,501, - 502,7,25,0,0,502,88,1,0,0,0,503,504,7,6,0,0,504,505,7,14,0,0,505, - 506,7,8,0,0,506,507,7,17,0,0,507,508,7,19,0,0,508,90,1,0,0,0,509, - 510,7,23,0,0,510,511,7,14,0,0,511,512,7,8,0,0,512,513,7,17,0,0,513, - 514,7,19,0,0,514,92,1,0,0,0,515,516,7,6,0,0,516,517,7,15,0,0,517, - 518,7,5,0,0,518,519,7,10,0,0,519,94,1,0,0,0,520,521,7,17,0,0,521, - 522,7,10,0,0,522,523,7,21,0,0,523,96,1,0,0,0,524,525,3,95,47,0,525, - 526,7,4,0,0,526,98,1,0,0,0,527,528,5,58,0,0,528,529,5,58,0,0,529, - 100,1,0,0,0,530,531,5,43,0,0,531,102,1,0,0,0,532,533,5,45,0,0,533, - 104,1,0,0,0,534,535,5,42,0,0,535,106,1,0,0,0,536,537,5,47,0,0,537, - 108,1,0,0,0,538,539,5,37,0,0,539,110,1,0,0,0,540,541,5,61,0,0,541, - 112,1,0,0,0,542,543,5,33,0,0,543,544,5,61,0,0,544,114,1,0,0,0,545, - 546,5,62,0,0,546,547,5,61,0,0,547,116,1,0,0,0,548,549,5,60,0,0,549, - 550,5,61,0,0,550,118,1,0,0,0,551,552,5,62,0,0,552,120,1,0,0,0,553, - 554,5,60,0,0,554,122,1,0,0,0,555,556,5,33,0,0,556,124,1,0,0,0,557, - 558,3,121,60,0,558,126,1,0,0,0,559,560,3,119,59,0,560,128,1,0,0, - 0,561,562,5,40,0,0,562,130,1,0,0,0,563,564,5,41,0,0,564,132,1,0, - 0,0,565,566,5,91,0,0,566,134,1,0,0,0,567,568,5,93,0,0,568,136,1, - 0,0,0,569,570,5,44,0,0,570,138,1,0,0,0,571,572,5,58,0,0,572,140, - 1,0,0,0,573,574,5,63,0,0,574,142,1,0,0,0,575,576,5,35,0,0,576,144, - 1,0,0,0,577,578,5,46,0,0,578,146,1,0,0,0,579,580,7,17,0,0,580,581, - 7,10,0,0,581,582,7,22,0,0,582,148,1,0,0,0,583,584,7,16,0,0,584,585, - 7,19,0,0,585,150,1,0,0,0,586,587,5,58,0,0,587,588,5,61,0,0,588,152, - 1,0,0,0,589,590,5,45,0,0,590,591,5,62,0,0,591,154,1,0,0,0,592,596, - 2,49,57,0,593,595,3,157,78,0,594,593,1,0,0,0,595,598,1,0,0,0,596, - 594,1,0,0,0,596,597,1,0,0,0,597,601,1,0,0,0,598,596,1,0,0,0,599, - 601,5,48,0,0,600,592,1,0,0,0,600,599,1,0,0,0,601,156,1,0,0,0,602, - 603,2,48,57,0,603,158,1,0,0,0,604,606,5,45,0,0,605,604,1,0,0,0,605, - 606,1,0,0,0,606,607,1,0,0,0,607,608,3,155,77,0,608,160,1,0,0,0,609, - 614,7,27,0,0,610,613,7,27,0,0,611,613,3,157,78,0,612,610,1,0,0,0, - 612,611,1,0,0,0,613,616,1,0,0,0,614,612,1,0,0,0,614,615,1,0,0,0, - 615,162,1,0,0,0,616,614,1,0,0,0,617,619,5,13,0,0,618,620,5,10,0, - 0,619,618,1,0,0,0,619,620,1,0,0,0,620,623,1,0,0,0,621,623,5,10,0, - 0,622,617,1,0,0,0,622,621,1,0,0,0,623,164,1,0,0,0,13,0,171,183,186, - 191,202,596,600,605,612,614,619,622,1,0,1,0 + 24,1,24,1,24,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1,25,1, + 26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,26,1,27,1,27,1,27,1, + 27,1,27,1,27,1,27,1,27,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1,28,1, + 28,1,28,1,28,1,28,1,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,31,1,31,1,31,1,31,1,31,1,32,1,32,1, + 32,1,32,1,33,1,33,1,33,1,34,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,36,1,37,1,37,1,37,1,37,1,37,1,37,1,38,1, + 38,1,38,1,38,1,38,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1,39,1, + 39,1,40,1,40,1,40,1,40,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,43,1, + 43,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,44,1,44,1,45,1,45,1, + 45,1,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,47,1,47,1,47,1,47,1, + 48,1,48,1,48,1,49,1,49,1,49,1,50,1,50,1,51,1,51,1,52,1,52,1,53,1, + 53,1,54,1,54,1,55,1,55,1,56,1,56,1,56,1,57,1,57,1,57,1,58,1,58,1, + 58,1,59,1,59,1,60,1,60,1,61,1,61,1,62,1,62,1,63,1,63,1,64,1,64,1, + 65,1,65,1,66,1,66,1,67,1,67,1,68,1,68,1,69,1,69,1,70,1,70,1,71,1, + 71,1,72,1,72,1,73,1,73,1,73,1,73,1,74,1,74,1,74,1,75,1,75,1,75,1, + 76,1,76,1,76,1,77,1,77,5,77,597,8,77,10,77,12,77,600,9,77,1,77,3, + 77,603,8,77,1,78,1,78,1,79,3,79,608,8,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,5,81,623,8,81,10,81,12,81, + 626,9,81,1,82,1,82,3,82,630,8,82,1,82,3,82,633,8,82,0,0,83,1,1,3, + 2,5,3,7,0,9,4,11,5,13,6,15,7,17,8,19,9,21,10,23,11,25,12,27,13,29, + 14,31,15,33,16,35,17,37,18,39,19,41,20,43,21,45,22,47,23,49,24,51, + 25,53,26,55,27,57,28,59,29,61,30,63,31,65,32,67,33,69,34,71,35,73, + 36,75,37,77,38,79,39,81,40,83,41,85,42,87,43,89,44,91,45,93,46,95, + 47,97,48,99,49,101,50,103,51,105,52,107,53,109,54,111,55,113,56, + 115,57,117,58,119,59,121,60,123,61,125,62,127,63,129,64,131,65,133, + 66,135,67,137,68,139,69,141,70,143,71,145,72,147,73,149,74,151,75, + 153,76,155,0,157,0,159,77,161,78,163,79,165,80,1,0,30,2,0,10,10, + 13,13,1,0,42,42,2,0,42,42,47,47,3,0,9,9,13,13,32,32,1,0,48,57,2, + 0,73,73,105,105,2,0,70,70,102,102,2,0,84,84,116,116,2,0,72,72,104, + 104,2,0,69,69,101,101,2,0,78,78,110,110,2,0,76,76,108,108,2,0,83, + 83,115,115,2,0,85,85,117,117,2,0,67,67,99,99,2,0,66,66,98,98,2,0, + 79,79,111,111,2,0,65,65,97,97,2,0,80,80,112,112,2,0,82,82,114,114, + 2,0,71,71,103,103,2,0,89,89,121,121,2,0,68,68,100,100,2,0,86,86, + 118,118,2,0,77,77,109,109,2,0,90,90,122,122,2,0,88,88,120,120,2, + 0,75,75,107,107,2,0,87,87,119,119,4,0,36,36,65,90,95,95,97,122,642, + 0,1,1,0,0,0,0,3,1,0,0,0,0,5,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,55,1,0,0,0,0,57,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,91,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,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,159,1,0,0,0,0,161,1,0,0,0, + 0,163,1,0,0,0,0,165,1,0,0,0,1,167,1,0,0,0,3,178,1,0,0,0,5,202,1, + 0,0,0,7,208,1,0,0,0,9,210,1,0,0,0,11,213,1,0,0,0,13,218,1,0,0,0, + 15,223,1,0,0,0,17,228,1,0,0,0,19,236,1,0,0,0,21,239,1,0,0,0,23,243, + 1,0,0,0,25,247,1,0,0,0,27,251,1,0,0,0,29,256,1,0,0,0,31,261,1,0, + 0,0,33,268,1,0,0,0,35,275,1,0,0,0,37,280,1,0,0,0,39,294,1,0,0,0, + 41,307,1,0,0,0,43,325,1,0,0,0,45,330,1,0,0,0,47,338,1,0,0,0,49,353, + 1,0,0,0,51,373,1,0,0,0,53,396,1,0,0,0,55,406,1,0,0,0,57,414,1,0, + 0,0,59,426,1,0,0,0,61,433,1,0,0,0,63,441,1,0,0,0,65,446,1,0,0,0, + 67,450,1,0,0,0,69,453,1,0,0,0,71,458,1,0,0,0,73,462,1,0,0,0,75,467, + 1,0,0,0,77,473,1,0,0,0,79,478,1,0,0,0,81,488,1,0,0,0,83,492,1,0, + 0,0,85,495,1,0,0,0,87,499,1,0,0,0,89,505,1,0,0,0,91,511,1,0,0,0, + 93,517,1,0,0,0,95,522,1,0,0,0,97,526,1,0,0,0,99,529,1,0,0,0,101, + 532,1,0,0,0,103,534,1,0,0,0,105,536,1,0,0,0,107,538,1,0,0,0,109, + 540,1,0,0,0,111,542,1,0,0,0,113,544,1,0,0,0,115,547,1,0,0,0,117, + 550,1,0,0,0,119,553,1,0,0,0,121,555,1,0,0,0,123,557,1,0,0,0,125, + 559,1,0,0,0,127,561,1,0,0,0,129,563,1,0,0,0,131,565,1,0,0,0,133, + 567,1,0,0,0,135,569,1,0,0,0,137,571,1,0,0,0,139,573,1,0,0,0,141, + 575,1,0,0,0,143,577,1,0,0,0,145,579,1,0,0,0,147,581,1,0,0,0,149, + 585,1,0,0,0,151,588,1,0,0,0,153,591,1,0,0,0,155,602,1,0,0,0,157, + 604,1,0,0,0,159,607,1,0,0,0,161,611,1,0,0,0,163,619,1,0,0,0,165, + 632,1,0,0,0,167,168,5,47,0,0,168,169,5,47,0,0,169,173,1,0,0,0,170, + 172,8,0,0,0,171,170,1,0,0,0,172,175,1,0,0,0,173,171,1,0,0,0,173, + 174,1,0,0,0,174,176,1,0,0,0,175,173,1,0,0,0,176,177,6,0,0,0,177, + 2,1,0,0,0,178,179,5,47,0,0,179,180,5,42,0,0,180,188,1,0,0,0,181, + 189,8,1,0,0,182,184,5,42,0,0,183,182,1,0,0,0,184,185,1,0,0,0,185, + 183,1,0,0,0,185,186,1,0,0,0,186,187,1,0,0,0,187,189,8,2,0,0,188, + 181,1,0,0,0,188,183,1,0,0,0,189,193,1,0,0,0,190,192,5,42,0,0,191, + 190,1,0,0,0,192,195,1,0,0,0,193,191,1,0,0,0,193,194,1,0,0,0,194, + 196,1,0,0,0,195,193,1,0,0,0,196,197,5,42,0,0,197,198,5,47,0,0,198, + 199,1,0,0,0,199,200,6,1,0,0,200,4,1,0,0,0,201,203,7,3,0,0,202,201, + 1,0,0,0,203,204,1,0,0,0,204,202,1,0,0,0,204,205,1,0,0,0,205,206, + 1,0,0,0,206,207,6,2,0,0,207,6,1,0,0,0,208,209,7,4,0,0,209,8,1,0, + 0,0,210,211,7,5,0,0,211,212,7,6,0,0,212,10,1,0,0,0,213,214,7,7,0, + 0,214,215,7,8,0,0,215,216,7,9,0,0,216,217,7,10,0,0,217,12,1,0,0, + 0,218,219,7,9,0,0,219,220,7,11,0,0,220,221,7,12,0,0,221,222,7,9, + 0,0,222,14,1,0,0,0,223,224,7,6,0,0,224,225,7,13,0,0,225,226,7,10, + 0,0,226,227,7,14,0,0,227,16,1,0,0,0,228,229,7,15,0,0,229,230,7,16, + 0,0,230,231,7,16,0,0,231,232,7,11,0,0,232,233,7,9,0,0,233,234,7, + 17,0,0,234,235,7,10,0,0,235,18,1,0,0,0,236,237,7,5,0,0,237,238,5, + 56,0,0,238,20,1,0,0,0,239,240,7,5,0,0,240,241,5,49,0,0,241,242,5, + 54,0,0,242,22,1,0,0,0,243,244,7,5,0,0,244,245,5,51,0,0,245,246,5, + 50,0,0,246,24,1,0,0,0,247,248,7,5,0,0,248,249,5,54,0,0,249,250,5, + 52,0,0,250,26,1,0,0,0,251,252,7,6,0,0,252,253,7,18,0,0,253,254,5, + 51,0,0,254,255,5,50,0,0,255,28,1,0,0,0,256,257,7,6,0,0,257,258,7, + 18,0,0,258,259,5,54,0,0,259,260,5,52,0,0,260,30,1,0,0,0,261,262, + 7,12,0,0,262,263,7,7,0,0,263,264,7,19,0,0,264,265,7,5,0,0,265,266, + 7,10,0,0,266,267,7,20,0,0,267,32,1,0,0,0,268,269,7,15,0,0,269,270, + 7,5,0,0,270,271,7,10,0,0,271,272,7,17,0,0,272,273,7,19,0,0,273,274, + 7,21,0,0,274,34,1,0,0,0,275,276,7,22,0,0,276,277,7,17,0,0,277,278, + 7,7,0,0,278,279,7,9,0,0,279,36,1,0,0,0,280,281,7,5,0,0,281,282,7, + 10,0,0,282,283,7,7,0,0,283,284,7,9,0,0,284,285,7,19,0,0,285,286, + 7,23,0,0,286,287,7,17,0,0,287,288,7,11,0,0,288,289,5,95,0,0,289, + 290,7,21,0,0,290,291,7,9,0,0,291,292,7,17,0,0,292,293,7,19,0,0,293, + 38,1,0,0,0,294,295,7,5,0,0,295,296,7,10,0,0,296,297,7,7,0,0,297, + 298,7,9,0,0,298,299,7,19,0,0,299,300,7,23,0,0,300,301,7,17,0,0,301, + 302,7,11,0,0,302,303,5,95,0,0,303,304,7,22,0,0,304,305,7,17,0,0, + 305,306,7,21,0,0,306,40,1,0,0,0,307,308,7,5,0,0,308,309,7,10,0,0, + 309,310,7,7,0,0,310,311,7,9,0,0,311,312,7,19,0,0,312,313,7,23,0, + 0,313,314,7,17,0,0,314,315,7,11,0,0,315,316,5,95,0,0,316,317,7,14, + 0,0,317,318,7,16,0,0,318,319,7,24,0,0,319,320,7,18,0,0,320,321,7, + 16,0,0,321,322,7,13,0,0,322,323,7,10,0,0,323,324,7,22,0,0,324,42, + 1,0,0,0,325,326,7,13,0,0,326,327,7,13,0,0,327,328,7,5,0,0,328,329, + 7,22,0,0,329,44,1,0,0,0,330,331,7,22,0,0,331,332,7,9,0,0,332,333, + 7,14,0,0,333,334,7,5,0,0,334,335,7,24,0,0,335,336,7,17,0,0,336,337, + 7,11,0,0,337,46,1,0,0,0,338,339,7,18,0,0,339,340,7,19,0,0,340,341, + 7,9,0,0,341,342,7,14,0,0,342,343,7,5,0,0,343,344,7,12,0,0,344,345, + 7,5,0,0,345,346,7,16,0,0,346,347,7,10,0,0,347,348,5,95,0,0,348,349, + 7,7,0,0,349,350,7,5,0,0,350,351,7,24,0,0,351,352,7,9,0,0,352,48, + 1,0,0,0,353,354,7,18,0,0,354,355,7,19,0,0,355,356,7,9,0,0,356,357, + 7,14,0,0,357,358,7,5,0,0,358,359,7,12,0,0,359,360,7,5,0,0,360,361, + 7,16,0,0,361,362,7,10,0,0,362,363,5,95,0,0,363,364,7,7,0,0,364,365, + 7,5,0,0,365,366,7,24,0,0,366,367,7,9,0,0,367,368,7,12,0,0,368,369, + 7,7,0,0,369,370,7,17,0,0,370,371,7,24,0,0,371,372,7,18,0,0,372,50, + 1,0,0,0,373,374,7,18,0,0,374,375,7,19,0,0,375,376,7,9,0,0,376,377, + 7,14,0,0,377,378,7,5,0,0,378,379,7,12,0,0,379,380,7,5,0,0,380,381, + 7,16,0,0,381,382,7,10,0,0,382,383,5,95,0,0,383,384,7,7,0,0,384,385, + 7,5,0,0,385,386,7,24,0,0,386,387,7,9,0,0,387,388,7,12,0,0,388,389, + 7,7,0,0,389,390,7,17,0,0,390,391,7,24,0,0,391,392,7,18,0,0,392,393, + 5,95,0,0,393,394,7,7,0,0,394,395,7,25,0,0,395,52,1,0,0,0,396,397, + 7,6,0,0,397,398,7,5,0,0,398,399,7,26,0,0,399,400,7,9,0,0,400,401, + 7,22,0,0,401,402,7,14,0,0,402,403,7,8,0,0,403,404,7,17,0,0,404,405, + 7,19,0,0,405,54,1,0,0,0,406,407,7,23,0,0,407,408,7,17,0,0,408,409, + 7,19,0,0,409,410,7,14,0,0,410,411,7,8,0,0,411,412,7,17,0,0,412,413, + 7,19,0,0,413,56,1,0,0,0,414,415,7,6,0,0,415,416,7,5,0,0,416,417, + 7,26,0,0,417,418,7,9,0,0,418,419,7,22,0,0,419,420,7,15,0,0,420,421, + 7,5,0,0,421,422,7,10,0,0,422,423,7,17,0,0,423,424,7,19,0,0,424,425, + 7,21,0,0,425,58,1,0,0,0,426,427,7,12,0,0,427,428,7,7,0,0,428,429, + 7,19,0,0,429,430,7,13,0,0,430,431,7,14,0,0,431,432,7,7,0,0,432,60, + 1,0,0,0,433,434,7,10,0,0,434,435,7,12,0,0,435,436,7,7,0,0,436,437, + 7,19,0,0,437,438,7,13,0,0,438,439,7,14,0,0,439,440,7,7,0,0,440,62, + 1,0,0,0,441,442,7,11,0,0,442,443,7,5,0,0,443,444,7,12,0,0,444,445, + 7,7,0,0,445,64,1,0,0,0,446,447,7,24,0,0,447,448,7,17,0,0,448,449, + 7,18,0,0,449,66,1,0,0,0,450,451,7,13,0,0,451,452,5,33,0,0,452,68, + 1,0,0,0,453,454,7,15,0,0,454,455,7,16,0,0,455,456,7,16,0,0,456,457, + 7,11,0,0,457,70,1,0,0,0,458,459,7,12,0,0,459,460,7,7,0,0,460,461, + 7,19,0,0,461,72,1,0,0,0,462,463,7,23,0,0,463,464,7,15,0,0,464,465, + 7,5,0,0,465,466,7,10,0,0,466,74,1,0,0,0,467,468,7,5,0,0,468,469, + 7,21,0,0,469,470,7,9,0,0,470,471,7,17,0,0,471,472,7,19,0,0,472,76, + 1,0,0,0,473,474,7,5,0,0,474,475,7,22,0,0,475,476,7,17,0,0,476,477, + 7,21,0,0,477,78,1,0,0,0,478,479,7,5,0,0,479,480,7,14,0,0,480,481, + 7,16,0,0,481,482,7,24,0,0,482,483,7,18,0,0,483,484,7,16,0,0,484, + 485,7,13,0,0,485,486,7,10,0,0,486,487,7,22,0,0,487,80,1,0,0,0,488, + 489,7,22,0,0,489,490,7,9,0,0,490,491,7,14,0,0,491,82,1,0,0,0,492, + 493,7,18,0,0,493,494,7,7,0,0,494,84,1,0,0,0,495,496,7,18,0,0,496, + 497,7,7,0,0,497,498,7,12,0,0,498,86,1,0,0,0,499,500,7,18,0,0,500, + 501,7,7,0,0,501,502,7,12,0,0,502,503,7,7,0,0,503,504,7,25,0,0,504, + 88,1,0,0,0,505,506,7,6,0,0,506,507,7,14,0,0,507,508,7,8,0,0,508, + 509,7,17,0,0,509,510,7,19,0,0,510,90,1,0,0,0,511,512,7,23,0,0,512, + 513,7,14,0,0,513,514,7,8,0,0,514,515,7,17,0,0,515,516,7,19,0,0,516, + 92,1,0,0,0,517,518,7,6,0,0,518,519,7,15,0,0,519,520,7,5,0,0,520, + 521,7,10,0,0,521,94,1,0,0,0,522,523,7,17,0,0,523,524,7,10,0,0,524, + 525,7,21,0,0,525,96,1,0,0,0,526,527,3,95,47,0,527,528,7,4,0,0,528, + 98,1,0,0,0,529,530,5,58,0,0,530,531,5,58,0,0,531,100,1,0,0,0,532, + 533,5,43,0,0,533,102,1,0,0,0,534,535,5,45,0,0,535,104,1,0,0,0,536, + 537,5,42,0,0,537,106,1,0,0,0,538,539,5,47,0,0,539,108,1,0,0,0,540, + 541,5,37,0,0,541,110,1,0,0,0,542,543,5,61,0,0,543,112,1,0,0,0,544, + 545,5,33,0,0,545,546,5,61,0,0,546,114,1,0,0,0,547,548,5,62,0,0,548, + 549,5,61,0,0,549,116,1,0,0,0,550,551,5,60,0,0,551,552,5,61,0,0,552, + 118,1,0,0,0,553,554,5,62,0,0,554,120,1,0,0,0,555,556,5,60,0,0,556, + 122,1,0,0,0,557,558,5,33,0,0,558,124,1,0,0,0,559,560,3,121,60,0, + 560,126,1,0,0,0,561,562,3,119,59,0,562,128,1,0,0,0,563,564,5,40, + 0,0,564,130,1,0,0,0,565,566,5,41,0,0,566,132,1,0,0,0,567,568,5,91, + 0,0,568,134,1,0,0,0,569,570,5,93,0,0,570,136,1,0,0,0,571,572,5,44, + 0,0,572,138,1,0,0,0,573,574,5,58,0,0,574,140,1,0,0,0,575,576,5,63, + 0,0,576,142,1,0,0,0,577,578,5,35,0,0,578,144,1,0,0,0,579,580,5,46, + 0,0,580,146,1,0,0,0,581,582,7,17,0,0,582,583,7,10,0,0,583,584,7, + 22,0,0,584,148,1,0,0,0,585,586,7,16,0,0,586,587,7,19,0,0,587,150, + 1,0,0,0,588,589,5,58,0,0,589,590,5,61,0,0,590,152,1,0,0,0,591,592, + 5,45,0,0,592,593,5,62,0,0,593,154,1,0,0,0,594,598,2,49,57,0,595, + 597,3,157,78,0,596,595,1,0,0,0,597,600,1,0,0,0,598,596,1,0,0,0,598, + 599,1,0,0,0,599,603,1,0,0,0,600,598,1,0,0,0,601,603,5,48,0,0,602, + 594,1,0,0,0,602,601,1,0,0,0,603,156,1,0,0,0,604,605,2,48,57,0,605, + 158,1,0,0,0,606,608,5,45,0,0,607,606,1,0,0,0,607,608,1,0,0,0,608, + 609,1,0,0,0,609,610,3,155,77,0,610,160,1,0,0,0,611,612,7,13,0,0, + 612,613,7,10,0,0,613,614,7,27,0,0,614,615,7,10,0,0,615,616,7,16, + 0,0,616,617,7,28,0,0,617,618,7,10,0,0,618,162,1,0,0,0,619,624,7, + 29,0,0,620,623,7,29,0,0,621,623,3,157,78,0,622,620,1,0,0,0,622,621, + 1,0,0,0,623,626,1,0,0,0,624,622,1,0,0,0,624,625,1,0,0,0,625,164, + 1,0,0,0,626,624,1,0,0,0,627,629,5,13,0,0,628,630,5,10,0,0,629,628, + 1,0,0,0,629,630,1,0,0,0,630,633,1,0,0,0,631,633,5,10,0,0,632,627, + 1,0,0,0,632,631,1,0,0,0,633,166,1,0,0,0,13,0,173,185,188,193,204, + 598,602,607,622,624,629,632,1,0,1,0 ] class SubstraitTypeLexer(Lexer): @@ -315,8 +319,9 @@ class SubstraitTypeLexer(Lexer): Assign = 75 Arrow = 76 Number = 77 - Identifier = 78 - Newline = 79 + Unknown = 78 + Identifier = 79 + Newline = 80 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -334,7 +339,7 @@ class SubstraitTypeLexer(Lexer): "'ANY'", "'::'", "'+'", "'-'", "'*'", "'/'", "'%'", "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", "':='", - "'->'" ] + "'->'", "'UNKNOWN'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", @@ -349,7 +354,7 @@ class SubstraitTypeLexer(Lexer): "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Number", - "Identifier", "Newline" ] + "Unknown", "Identifier", "Newline" ] ruleNames = [ "LineComment", "BlockComment", "Whitespace", "DIGIT", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", @@ -365,7 +370,7 @@ class SubstraitTypeLexer(Lexer): "OAngleBracket", "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", "Assign", "Arrow", "Int", "Digit", - "Number", "Identifier", "Newline" ] + "Number", "Unknown", "Identifier", "Newline" ] grammarFileName = "SubstraitType.g4" diff --git a/tests/type/antlr_parser/SubstraitTypeListener.py b/tests/type/antlr_parser/SubstraitTypeListener.py index 68a7561fd..7fd34667f 100644 --- a/tests/type/antlr_parser/SubstraitTypeListener.py +++ b/tests/type/antlr_parser/SubstraitTypeListener.py @@ -135,6 +135,15 @@ def exitUuid(self, ctx:SubstraitTypeParser.UuidContext): pass + # Enter a parse tree produced by SubstraitTypeParser#unknown. + def enterUnknown(self, ctx:SubstraitTypeParser.UnknownContext): + pass + + # Exit a parse tree produced by SubstraitTypeParser#unknown. + def exitUnknown(self, ctx:SubstraitTypeParser.UnknownContext): + pass + + # Enter a parse tree produced by SubstraitTypeParser#fixedChar. def enterFixedChar(self, ctx:SubstraitTypeParser.FixedCharContext): pass diff --git a/tests/type/antlr_parser/SubstraitTypeParser.py b/tests/type/antlr_parser/SubstraitTypeParser.py index a43f99d09..832e227c7 100644 --- a/tests/type/antlr_parser/SubstraitTypeParser.py +++ b/tests/type/antlr_parser/SubstraitTypeParser.py @@ -11,121 +11,122 @@ def serializedATN(): return [ - 4,1,79,307,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, + 4,1,80,308,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,1,0,1,0,1,0,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,3,2,37,8,2,1,3,1,3,3,3,41,8,3,1,3,1,3, - 1,3,1,3,1,3,1,3,3,3,49,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,57,8,3,1, - 3,1,3,1,3,1,3,1,3,1,3,3,3,65,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, - 3,3,75,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,83,8,3,1,3,1,3,1,3,1,3,1, - 3,1,3,3,3,91,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,99,8,3,1,3,1,3,1,3, - 1,3,1,3,1,3,3,3,107,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,115,8,3,1,3, - 1,3,1,3,1,3,5,3,121,8,3,10,3,12,3,124,9,3,1,3,1,3,1,3,1,3,3,3,130, - 8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,138,8,3,10,3,12,3,141,9,3,1,3,1, - 3,1,3,1,3,3,3,147,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,155,8,3,1,3,1, - 3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,165,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1, - 3,1,3,1,3,3,3,176,8,3,1,3,1,3,1,3,1,3,5,3,182,8,3,10,3,12,3,185, - 9,3,1,3,1,3,3,3,189,8,3,3,3,191,8,3,1,4,1,4,1,4,1,4,1,4,5,4,198, - 8,4,10,4,12,4,201,9,4,1,4,1,4,3,4,205,8,4,1,5,1,5,1,5,3,5,210,8, - 5,1,6,1,6,3,6,214,8,6,1,6,1,6,3,6,218,8,6,3,6,220,8,6,1,7,1,7,3, - 7,224,8,7,1,7,1,7,3,7,228,8,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,4,8,239,8,8,11,8,12,8,240,1,8,1,8,1,8,1,8,4,8,247,8,8,11,8,12, - 8,248,5,8,251,8,8,10,8,12,8,254,9,8,1,8,1,8,5,8,258,8,8,10,8,12, - 8,261,9,8,1,8,1,8,1,8,1,8,3,8,267,8,8,1,8,1,8,1,8,1,8,1,8,5,8,274, - 8,8,10,8,12,8,277,9,8,3,8,279,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1, - 8,1,8,1,8,3,8,291,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,5,8,302, - 8,8,10,8,12,8,305,9,8,1,8,0,1,16,9,0,2,4,6,8,10,12,14,16,0,1,3,0, - 50,53,55,60,73,74,367,0,18,1,0,0,0,2,21,1,0,0,0,4,36,1,0,0,0,6,190, - 1,0,0,0,8,204,1,0,0,0,10,209,1,0,0,0,12,219,1,0,0,0,14,227,1,0,0, - 0,16,290,1,0,0,0,18,19,3,16,8,0,19,20,5,0,0,1,20,1,1,0,0,0,21,22, - 3,14,7,0,22,23,5,0,0,1,23,3,1,0,0,0,24,37,5,8,0,0,25,37,5,9,0,0, - 26,37,5,10,0,0,27,37,5,11,0,0,28,37,5,12,0,0,29,37,5,13,0,0,30,37, - 5,14,0,0,31,37,5,15,0,0,32,37,5,16,0,0,33,37,5,17,0,0,34,37,5,18, - 0,0,35,37,5,21,0,0,36,24,1,0,0,0,36,25,1,0,0,0,36,26,1,0,0,0,36, - 27,1,0,0,0,36,28,1,0,0,0,36,29,1,0,0,0,36,30,1,0,0,0,36,31,1,0,0, - 0,36,32,1,0,0,0,36,33,1,0,0,0,36,34,1,0,0,0,36,35,1,0,0,0,37,5,1, - 0,0,0,38,40,5,26,0,0,39,41,5,70,0,0,40,39,1,0,0,0,40,41,1,0,0,0, - 41,42,1,0,0,0,42,43,5,60,0,0,43,44,3,10,5,0,44,45,5,59,0,0,45,191, - 1,0,0,0,46,48,5,27,0,0,47,49,5,70,0,0,48,47,1,0,0,0,48,49,1,0,0, - 0,49,50,1,0,0,0,50,51,5,60,0,0,51,52,3,10,5,0,52,53,5,59,0,0,53, - 191,1,0,0,0,54,56,5,28,0,0,55,57,5,70,0,0,56,55,1,0,0,0,56,57,1, - 0,0,0,57,58,1,0,0,0,58,59,5,60,0,0,59,60,3,10,5,0,60,61,5,59,0,0, - 61,191,1,0,0,0,62,64,5,22,0,0,63,65,5,70,0,0,64,63,1,0,0,0,64,65, - 1,0,0,0,65,66,1,0,0,0,66,67,5,60,0,0,67,68,3,10,5,0,68,69,5,68,0, - 0,69,70,3,10,5,0,70,71,5,59,0,0,71,191,1,0,0,0,72,74,5,19,0,0,73, - 75,5,70,0,0,74,73,1,0,0,0,74,75,1,0,0,0,75,76,1,0,0,0,76,77,5,60, - 0,0,77,78,3,10,5,0,78,79,5,59,0,0,79,191,1,0,0,0,80,82,5,20,0,0, - 81,83,5,70,0,0,82,81,1,0,0,0,82,83,1,0,0,0,83,84,1,0,0,0,84,85,5, - 60,0,0,85,86,3,10,5,0,86,87,5,59,0,0,87,191,1,0,0,0,88,90,5,23,0, - 0,89,91,5,70,0,0,90,89,1,0,0,0,90,91,1,0,0,0,91,92,1,0,0,0,92,93, - 5,60,0,0,93,94,3,10,5,0,94,95,5,59,0,0,95,191,1,0,0,0,96,98,5,24, - 0,0,97,99,5,70,0,0,98,97,1,0,0,0,98,99,1,0,0,0,99,100,1,0,0,0,100, - 101,5,60,0,0,101,102,3,10,5,0,102,103,5,59,0,0,103,191,1,0,0,0,104, - 106,5,25,0,0,105,107,5,70,0,0,106,105,1,0,0,0,106,107,1,0,0,0,107, - 108,1,0,0,0,108,109,5,60,0,0,109,110,3,10,5,0,110,111,5,59,0,0,111, - 191,1,0,0,0,112,114,5,29,0,0,113,115,5,70,0,0,114,113,1,0,0,0,114, - 115,1,0,0,0,115,116,1,0,0,0,116,117,5,60,0,0,117,122,3,16,8,0,118, - 119,5,68,0,0,119,121,3,16,8,0,120,118,1,0,0,0,121,124,1,0,0,0,122, - 120,1,0,0,0,122,123,1,0,0,0,123,125,1,0,0,0,124,122,1,0,0,0,125, - 126,5,59,0,0,126,191,1,0,0,0,127,129,5,30,0,0,128,130,5,70,0,0,129, - 128,1,0,0,0,129,130,1,0,0,0,130,131,1,0,0,0,131,132,5,60,0,0,132, - 133,5,78,0,0,133,139,3,16,8,0,134,135,5,68,0,0,135,136,5,78,0,0, - 136,138,3,16,8,0,137,134,1,0,0,0,138,141,1,0,0,0,139,137,1,0,0,0, - 139,140,1,0,0,0,140,142,1,0,0,0,141,139,1,0,0,0,142,143,5,59,0,0, - 143,191,1,0,0,0,144,146,5,31,0,0,145,147,5,70,0,0,146,145,1,0,0, - 0,146,147,1,0,0,0,147,148,1,0,0,0,148,149,5,60,0,0,149,150,3,16, - 8,0,150,151,5,59,0,0,151,191,1,0,0,0,152,154,5,32,0,0,153,155,5, - 70,0,0,154,153,1,0,0,0,154,155,1,0,0,0,155,156,1,0,0,0,156,157,5, - 60,0,0,157,158,3,16,8,0,158,159,5,68,0,0,159,160,3,16,8,0,160,161, - 5,59,0,0,161,191,1,0,0,0,162,164,5,7,0,0,163,165,5,70,0,0,164,163, - 1,0,0,0,164,165,1,0,0,0,165,166,1,0,0,0,166,167,5,60,0,0,167,168, - 3,8,4,0,168,169,5,76,0,0,169,170,3,16,8,0,170,171,5,59,0,0,171,191, - 1,0,0,0,172,173,5,33,0,0,173,175,5,78,0,0,174,176,5,70,0,0,175,174, - 1,0,0,0,175,176,1,0,0,0,176,188,1,0,0,0,177,178,5,60,0,0,178,183, - 3,16,8,0,179,180,5,68,0,0,180,182,3,16,8,0,181,179,1,0,0,0,182,185, - 1,0,0,0,183,181,1,0,0,0,183,184,1,0,0,0,184,186,1,0,0,0,185,183, - 1,0,0,0,186,187,5,59,0,0,187,189,1,0,0,0,188,177,1,0,0,0,188,189, - 1,0,0,0,189,191,1,0,0,0,190,38,1,0,0,0,190,46,1,0,0,0,190,54,1,0, - 0,0,190,62,1,0,0,0,190,72,1,0,0,0,190,80,1,0,0,0,190,88,1,0,0,0, - 190,96,1,0,0,0,190,104,1,0,0,0,190,112,1,0,0,0,190,127,1,0,0,0,190, - 144,1,0,0,0,190,152,1,0,0,0,190,162,1,0,0,0,190,172,1,0,0,0,191, - 7,1,0,0,0,192,205,3,16,8,0,193,194,5,64,0,0,194,199,3,16,8,0,195, - 196,5,68,0,0,196,198,3,16,8,0,197,195,1,0,0,0,198,201,1,0,0,0,199, - 197,1,0,0,0,199,200,1,0,0,0,200,202,1,0,0,0,201,199,1,0,0,0,202, - 203,5,65,0,0,203,205,1,0,0,0,204,192,1,0,0,0,204,193,1,0,0,0,205, - 9,1,0,0,0,206,210,5,77,0,0,207,210,5,78,0,0,208,210,3,16,8,0,209, - 206,1,0,0,0,209,207,1,0,0,0,209,208,1,0,0,0,210,11,1,0,0,0,211,213, - 5,47,0,0,212,214,5,70,0,0,213,212,1,0,0,0,213,214,1,0,0,0,214,220, - 1,0,0,0,215,217,5,48,0,0,216,218,5,70,0,0,217,216,1,0,0,0,217,218, - 1,0,0,0,218,220,1,0,0,0,219,211,1,0,0,0,219,215,1,0,0,0,220,13,1, - 0,0,0,221,223,3,4,2,0,222,224,5,70,0,0,223,222,1,0,0,0,223,224,1, - 0,0,0,224,228,1,0,0,0,225,228,3,6,3,0,226,228,3,12,6,0,227,221,1, - 0,0,0,227,225,1,0,0,0,227,226,1,0,0,0,228,15,1,0,0,0,229,230,6,8, - -1,0,230,231,5,64,0,0,231,232,3,16,8,0,232,233,5,65,0,0,233,291, - 1,0,0,0,234,235,5,78,0,0,235,236,5,55,0,0,236,238,3,16,8,0,237,239, - 5,79,0,0,238,237,1,0,0,0,239,240,1,0,0,0,240,238,1,0,0,0,240,241, - 1,0,0,0,241,252,1,0,0,0,242,243,5,78,0,0,243,244,5,55,0,0,244,246, - 3,16,8,0,245,247,5,79,0,0,246,245,1,0,0,0,247,248,1,0,0,0,248,246, - 1,0,0,0,248,249,1,0,0,0,249,251,1,0,0,0,250,242,1,0,0,0,251,254, - 1,0,0,0,252,250,1,0,0,0,252,253,1,0,0,0,253,255,1,0,0,0,254,252, - 1,0,0,0,255,259,3,14,7,0,256,258,5,79,0,0,257,256,1,0,0,0,258,261, - 1,0,0,0,259,257,1,0,0,0,259,260,1,0,0,0,260,291,1,0,0,0,261,259, - 1,0,0,0,262,291,3,14,7,0,263,291,5,77,0,0,264,266,5,78,0,0,265,267, - 5,70,0,0,266,265,1,0,0,0,266,267,1,0,0,0,267,291,1,0,0,0,268,269, - 5,78,0,0,269,278,5,64,0,0,270,275,3,16,8,0,271,272,5,68,0,0,272, - 274,3,16,8,0,273,271,1,0,0,0,274,277,1,0,0,0,275,273,1,0,0,0,275, - 276,1,0,0,0,276,279,1,0,0,0,277,275,1,0,0,0,278,270,1,0,0,0,278, - 279,1,0,0,0,279,280,1,0,0,0,280,291,5,65,0,0,281,282,5,4,0,0,282, - 283,3,16,8,0,283,284,5,5,0,0,284,285,3,16,8,0,285,286,5,6,0,0,286, - 287,3,16,8,3,287,291,1,0,0,0,288,289,5,61,0,0,289,291,3,16,8,2,290, - 229,1,0,0,0,290,234,1,0,0,0,290,262,1,0,0,0,290,263,1,0,0,0,290, - 264,1,0,0,0,290,268,1,0,0,0,290,281,1,0,0,0,290,288,1,0,0,0,291, - 303,1,0,0,0,292,293,10,4,0,0,293,294,7,0,0,0,294,302,3,16,8,5,295, - 296,10,1,0,0,296,297,5,70,0,0,297,298,3,16,8,0,298,299,5,69,0,0, - 299,300,3,16,8,2,300,302,1,0,0,0,301,292,1,0,0,0,301,295,1,0,0,0, - 302,305,1,0,0,0,303,301,1,0,0,0,303,304,1,0,0,0,304,17,1,0,0,0,305, - 303,1,0,0,0,39,36,40,48,56,64,74,82,90,98,106,114,122,129,139,146, - 154,164,175,183,188,190,199,204,209,213,217,219,223,227,240,248, - 252,259,266,275,278,290,301,303 + 2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,3,2,38,8,2,1,3,1,3,3,3,42,8,3,1,3, + 1,3,1,3,1,3,1,3,1,3,3,3,50,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,58,8, + 3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,66,8,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3, + 1,3,3,3,76,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,84,8,3,1,3,1,3,1,3,1, + 3,1,3,1,3,3,3,92,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,100,8,3,1,3,1,3, + 1,3,1,3,1,3,1,3,3,3,108,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,116,8,3, + 1,3,1,3,1,3,1,3,5,3,122,8,3,10,3,12,3,125,9,3,1,3,1,3,1,3,1,3,3, + 3,131,8,3,1,3,1,3,1,3,1,3,1,3,1,3,5,3,139,8,3,10,3,12,3,142,9,3, + 1,3,1,3,1,3,1,3,3,3,148,8,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,156,8,3, + 1,3,1,3,1,3,1,3,1,3,1,3,1,3,1,3,3,3,166,8,3,1,3,1,3,1,3,1,3,1,3, + 1,3,1,3,1,3,1,3,3,3,177,8,3,1,3,1,3,1,3,1,3,5,3,183,8,3,10,3,12, + 3,186,9,3,1,3,1,3,3,3,190,8,3,3,3,192,8,3,1,4,1,4,1,4,1,4,1,4,5, + 4,199,8,4,10,4,12,4,202,9,4,1,4,1,4,3,4,206,8,4,1,5,1,5,1,5,3,5, + 211,8,5,1,6,1,6,3,6,215,8,6,1,6,1,6,3,6,219,8,6,3,6,221,8,6,1,7, + 1,7,3,7,225,8,7,1,7,1,7,3,7,229,8,7,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,4,8,240,8,8,11,8,12,8,241,1,8,1,8,1,8,1,8,4,8,248,8,8,11, + 8,12,8,249,5,8,252,8,8,10,8,12,8,255,9,8,1,8,1,8,5,8,259,8,8,10, + 8,12,8,262,9,8,1,8,1,8,1,8,1,8,3,8,268,8,8,1,8,1,8,1,8,1,8,1,8,5, + 8,275,8,8,10,8,12,8,278,9,8,3,8,280,8,8,1,8,1,8,1,8,1,8,1,8,1,8, + 1,8,1,8,1,8,1,8,3,8,292,8,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8,1,8, + 5,8,303,8,8,10,8,12,8,306,9,8,1,8,0,1,16,9,0,2,4,6,8,10,12,14,16, + 0,1,3,0,50,53,55,60,73,74,369,0,18,1,0,0,0,2,21,1,0,0,0,4,37,1,0, + 0,0,6,191,1,0,0,0,8,205,1,0,0,0,10,210,1,0,0,0,12,220,1,0,0,0,14, + 228,1,0,0,0,16,291,1,0,0,0,18,19,3,16,8,0,19,20,5,0,0,1,20,1,1,0, + 0,0,21,22,3,14,7,0,22,23,5,0,0,1,23,3,1,0,0,0,24,38,5,8,0,0,25,38, + 5,9,0,0,26,38,5,10,0,0,27,38,5,11,0,0,28,38,5,12,0,0,29,38,5,13, + 0,0,30,38,5,14,0,0,31,38,5,15,0,0,32,38,5,16,0,0,33,38,5,17,0,0, + 34,38,5,18,0,0,35,38,5,21,0,0,36,38,5,78,0,0,37,24,1,0,0,0,37,25, + 1,0,0,0,37,26,1,0,0,0,37,27,1,0,0,0,37,28,1,0,0,0,37,29,1,0,0,0, + 37,30,1,0,0,0,37,31,1,0,0,0,37,32,1,0,0,0,37,33,1,0,0,0,37,34,1, + 0,0,0,37,35,1,0,0,0,37,36,1,0,0,0,38,5,1,0,0,0,39,41,5,26,0,0,40, + 42,5,70,0,0,41,40,1,0,0,0,41,42,1,0,0,0,42,43,1,0,0,0,43,44,5,60, + 0,0,44,45,3,10,5,0,45,46,5,59,0,0,46,192,1,0,0,0,47,49,5,27,0,0, + 48,50,5,70,0,0,49,48,1,0,0,0,49,50,1,0,0,0,50,51,1,0,0,0,51,52,5, + 60,0,0,52,53,3,10,5,0,53,54,5,59,0,0,54,192,1,0,0,0,55,57,5,28,0, + 0,56,58,5,70,0,0,57,56,1,0,0,0,57,58,1,0,0,0,58,59,1,0,0,0,59,60, + 5,60,0,0,60,61,3,10,5,0,61,62,5,59,0,0,62,192,1,0,0,0,63,65,5,22, + 0,0,64,66,5,70,0,0,65,64,1,0,0,0,65,66,1,0,0,0,66,67,1,0,0,0,67, + 68,5,60,0,0,68,69,3,10,5,0,69,70,5,68,0,0,70,71,3,10,5,0,71,72,5, + 59,0,0,72,192,1,0,0,0,73,75,5,19,0,0,74,76,5,70,0,0,75,74,1,0,0, + 0,75,76,1,0,0,0,76,77,1,0,0,0,77,78,5,60,0,0,78,79,3,10,5,0,79,80, + 5,59,0,0,80,192,1,0,0,0,81,83,5,20,0,0,82,84,5,70,0,0,83,82,1,0, + 0,0,83,84,1,0,0,0,84,85,1,0,0,0,85,86,5,60,0,0,86,87,3,10,5,0,87, + 88,5,59,0,0,88,192,1,0,0,0,89,91,5,23,0,0,90,92,5,70,0,0,91,90,1, + 0,0,0,91,92,1,0,0,0,92,93,1,0,0,0,93,94,5,60,0,0,94,95,3,10,5,0, + 95,96,5,59,0,0,96,192,1,0,0,0,97,99,5,24,0,0,98,100,5,70,0,0,99, + 98,1,0,0,0,99,100,1,0,0,0,100,101,1,0,0,0,101,102,5,60,0,0,102,103, + 3,10,5,0,103,104,5,59,0,0,104,192,1,0,0,0,105,107,5,25,0,0,106,108, + 5,70,0,0,107,106,1,0,0,0,107,108,1,0,0,0,108,109,1,0,0,0,109,110, + 5,60,0,0,110,111,3,10,5,0,111,112,5,59,0,0,112,192,1,0,0,0,113,115, + 5,29,0,0,114,116,5,70,0,0,115,114,1,0,0,0,115,116,1,0,0,0,116,117, + 1,0,0,0,117,118,5,60,0,0,118,123,3,16,8,0,119,120,5,68,0,0,120,122, + 3,16,8,0,121,119,1,0,0,0,122,125,1,0,0,0,123,121,1,0,0,0,123,124, + 1,0,0,0,124,126,1,0,0,0,125,123,1,0,0,0,126,127,5,59,0,0,127,192, + 1,0,0,0,128,130,5,30,0,0,129,131,5,70,0,0,130,129,1,0,0,0,130,131, + 1,0,0,0,131,132,1,0,0,0,132,133,5,60,0,0,133,134,5,79,0,0,134,140, + 3,16,8,0,135,136,5,68,0,0,136,137,5,79,0,0,137,139,3,16,8,0,138, + 135,1,0,0,0,139,142,1,0,0,0,140,138,1,0,0,0,140,141,1,0,0,0,141, + 143,1,0,0,0,142,140,1,0,0,0,143,144,5,59,0,0,144,192,1,0,0,0,145, + 147,5,31,0,0,146,148,5,70,0,0,147,146,1,0,0,0,147,148,1,0,0,0,148, + 149,1,0,0,0,149,150,5,60,0,0,150,151,3,16,8,0,151,152,5,59,0,0,152, + 192,1,0,0,0,153,155,5,32,0,0,154,156,5,70,0,0,155,154,1,0,0,0,155, + 156,1,0,0,0,156,157,1,0,0,0,157,158,5,60,0,0,158,159,3,16,8,0,159, + 160,5,68,0,0,160,161,3,16,8,0,161,162,5,59,0,0,162,192,1,0,0,0,163, + 165,5,7,0,0,164,166,5,70,0,0,165,164,1,0,0,0,165,166,1,0,0,0,166, + 167,1,0,0,0,167,168,5,60,0,0,168,169,3,8,4,0,169,170,5,76,0,0,170, + 171,3,16,8,0,171,172,5,59,0,0,172,192,1,0,0,0,173,174,5,33,0,0,174, + 176,5,79,0,0,175,177,5,70,0,0,176,175,1,0,0,0,176,177,1,0,0,0,177, + 189,1,0,0,0,178,179,5,60,0,0,179,184,3,16,8,0,180,181,5,68,0,0,181, + 183,3,16,8,0,182,180,1,0,0,0,183,186,1,0,0,0,184,182,1,0,0,0,184, + 185,1,0,0,0,185,187,1,0,0,0,186,184,1,0,0,0,187,188,5,59,0,0,188, + 190,1,0,0,0,189,178,1,0,0,0,189,190,1,0,0,0,190,192,1,0,0,0,191, + 39,1,0,0,0,191,47,1,0,0,0,191,55,1,0,0,0,191,63,1,0,0,0,191,73,1, + 0,0,0,191,81,1,0,0,0,191,89,1,0,0,0,191,97,1,0,0,0,191,105,1,0,0, + 0,191,113,1,0,0,0,191,128,1,0,0,0,191,145,1,0,0,0,191,153,1,0,0, + 0,191,163,1,0,0,0,191,173,1,0,0,0,192,7,1,0,0,0,193,206,3,16,8,0, + 194,195,5,64,0,0,195,200,3,16,8,0,196,197,5,68,0,0,197,199,3,16, + 8,0,198,196,1,0,0,0,199,202,1,0,0,0,200,198,1,0,0,0,200,201,1,0, + 0,0,201,203,1,0,0,0,202,200,1,0,0,0,203,204,5,65,0,0,204,206,1,0, + 0,0,205,193,1,0,0,0,205,194,1,0,0,0,206,9,1,0,0,0,207,211,5,77,0, + 0,208,211,5,79,0,0,209,211,3,16,8,0,210,207,1,0,0,0,210,208,1,0, + 0,0,210,209,1,0,0,0,211,11,1,0,0,0,212,214,5,47,0,0,213,215,5,70, + 0,0,214,213,1,0,0,0,214,215,1,0,0,0,215,221,1,0,0,0,216,218,5,48, + 0,0,217,219,5,70,0,0,218,217,1,0,0,0,218,219,1,0,0,0,219,221,1,0, + 0,0,220,212,1,0,0,0,220,216,1,0,0,0,221,13,1,0,0,0,222,224,3,4,2, + 0,223,225,5,70,0,0,224,223,1,0,0,0,224,225,1,0,0,0,225,229,1,0,0, + 0,226,229,3,6,3,0,227,229,3,12,6,0,228,222,1,0,0,0,228,226,1,0,0, + 0,228,227,1,0,0,0,229,15,1,0,0,0,230,231,6,8,-1,0,231,232,5,64,0, + 0,232,233,3,16,8,0,233,234,5,65,0,0,234,292,1,0,0,0,235,236,5,79, + 0,0,236,237,5,55,0,0,237,239,3,16,8,0,238,240,5,80,0,0,239,238,1, + 0,0,0,240,241,1,0,0,0,241,239,1,0,0,0,241,242,1,0,0,0,242,253,1, + 0,0,0,243,244,5,79,0,0,244,245,5,55,0,0,245,247,3,16,8,0,246,248, + 5,80,0,0,247,246,1,0,0,0,248,249,1,0,0,0,249,247,1,0,0,0,249,250, + 1,0,0,0,250,252,1,0,0,0,251,243,1,0,0,0,252,255,1,0,0,0,253,251, + 1,0,0,0,253,254,1,0,0,0,254,256,1,0,0,0,255,253,1,0,0,0,256,260, + 3,14,7,0,257,259,5,80,0,0,258,257,1,0,0,0,259,262,1,0,0,0,260,258, + 1,0,0,0,260,261,1,0,0,0,261,292,1,0,0,0,262,260,1,0,0,0,263,292, + 3,14,7,0,264,292,5,77,0,0,265,267,5,79,0,0,266,268,5,70,0,0,267, + 266,1,0,0,0,267,268,1,0,0,0,268,292,1,0,0,0,269,270,5,79,0,0,270, + 279,5,64,0,0,271,276,3,16,8,0,272,273,5,68,0,0,273,275,3,16,8,0, + 274,272,1,0,0,0,275,278,1,0,0,0,276,274,1,0,0,0,276,277,1,0,0,0, + 277,280,1,0,0,0,278,276,1,0,0,0,279,271,1,0,0,0,279,280,1,0,0,0, + 280,281,1,0,0,0,281,292,5,65,0,0,282,283,5,4,0,0,283,284,3,16,8, + 0,284,285,5,5,0,0,285,286,3,16,8,0,286,287,5,6,0,0,287,288,3,16, + 8,3,288,292,1,0,0,0,289,290,5,61,0,0,290,292,3,16,8,2,291,230,1, + 0,0,0,291,235,1,0,0,0,291,263,1,0,0,0,291,264,1,0,0,0,291,265,1, + 0,0,0,291,269,1,0,0,0,291,282,1,0,0,0,291,289,1,0,0,0,292,304,1, + 0,0,0,293,294,10,4,0,0,294,295,7,0,0,0,295,303,3,16,8,5,296,297, + 10,1,0,0,297,298,5,70,0,0,298,299,3,16,8,0,299,300,5,69,0,0,300, + 301,3,16,8,2,301,303,1,0,0,0,302,293,1,0,0,0,302,296,1,0,0,0,303, + 306,1,0,0,0,304,302,1,0,0,0,304,305,1,0,0,0,305,17,1,0,0,0,306,304, + 1,0,0,0,39,37,41,49,57,65,75,83,91,99,107,115,123,130,140,147,155, + 165,176,184,189,191,200,205,210,214,218,220,224,228,241,249,253, + 260,267,276,279,291,302,304 ] class SubstraitTypeParser ( Parser ): @@ -153,7 +154,7 @@ class SubstraitTypeParser ( Parser ): "'='", "'!='", "'>='", "'<='", "'>'", "'<'", "'!'", "", "", "'('", "')'", "'['", "']'", "','", "':'", "'?'", "'#'", "'.'", "'AND'", "'OR'", - "':='", "'->'" ] + "':='", "'->'", "", "'UNKNOWN'" ] symbolicNames = [ "", "LineComment", "BlockComment", "Whitespace", "If", "Then", "Else", "Func", "Boolean", "I8", "I16", @@ -169,7 +170,8 @@ class SubstraitTypeParser ( Parser ): "Ne", "Gte", "Lte", "Gt", "Lt", "Bang", "OAngleBracket", "CAngleBracket", "OParen", "CParen", "OBracket", "CBracket", "Comma", "Colon", "QMark", "Hash", "Dot", "And", "Or", - "Assign", "Arrow", "Number", "Identifier", "Newline" ] + "Assign", "Arrow", "Number", "Unknown", "Identifier", + "Newline" ] RULE_startRule = 0 RULE_typeStatement = 1 @@ -263,8 +265,9 @@ class SubstraitTypeParser ( Parser ): Assign=75 Arrow=76 Number=77 - Identifier=78 - Newline=79 + Unknown=78 + Identifier=79 + Newline=80 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -422,30 +425,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class BooleanContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def Boolean(self): - return self.getToken(SubstraitTypeParser.Boolean, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBoolean" ): - listener.enterBoolean(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBoolean" ): - listener.exitBoolean(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBoolean" ): - return visitor.visitBoolean(self) - else: - return visitor.visitChildren(self) - - class StringContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext @@ -494,54 +473,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class BinaryContext(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def Binary(self): - return self.getToken(SubstraitTypeParser.Binary, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterBinary" ): - listener.enterBinary(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitBinary" ): - listener.exitBinary(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitBinary" ): - return visitor.visitBinary(self) - else: - return visitor.visitChildren(self) - - - class Fp64Context(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def FP64(self): - return self.getToken(SubstraitTypeParser.FP64, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFp64" ): - listener.enterFp64(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFp64" ): - listener.exitFp64(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFp64" ): - return visitor.visitFp64(self) - else: - return visitor.visitChildren(self) - - class I32Context(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext @@ -566,30 +497,6 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) - class Fp32Context(ScalarTypeContext): - - def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext - super().__init__(parser) - self.copyFrom(ctx) - - def FP32(self): - return self.getToken(SubstraitTypeParser.FP32, 0) - - def enterRule(self, listener:ParseTreeListener): - if hasattr( listener, "enterFp32" ): - listener.enterFp32(self) - - def exitRule(self, listener:ParseTreeListener): - if hasattr( listener, "exitFp32" ): - listener.exitFp32(self) - - def accept(self, visitor:ParseTreeVisitor): - if hasattr( visitor, "visitFp32" ): - return visitor.visitFp32(self) - else: - return visitor.visitChildren(self) - - class IntervalYearContext(ScalarTypeContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext @@ -686,13 +593,133 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class UnknownContext(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Unknown(self): + return self.getToken(SubstraitTypeParser.Unknown, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterUnknown" ): + listener.enterUnknown(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitUnknown" ): + listener.exitUnknown(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitUnknown" ): + return visitor.visitUnknown(self) + else: + return visitor.visitChildren(self) + + + class BooleanContext(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Boolean(self): + return self.getToken(SubstraitTypeParser.Boolean, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBoolean" ): + listener.enterBoolean(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBoolean" ): + listener.exitBoolean(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBoolean" ): + return visitor.visitBoolean(self) + else: + return visitor.visitChildren(self) + + + class BinaryContext(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def Binary(self): + return self.getToken(SubstraitTypeParser.Binary, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterBinary" ): + listener.enterBinary(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitBinary" ): + listener.exitBinary(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitBinary" ): + return visitor.visitBinary(self) + else: + return visitor.visitChildren(self) + + + class Fp64Context(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def FP64(self): + return self.getToken(SubstraitTypeParser.FP64, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFp64" ): + listener.enterFp64(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFp64" ): + listener.exitFp64(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFp64" ): + return visitor.visitFp64(self) + else: + return visitor.visitChildren(self) + + + class Fp32Context(ScalarTypeContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a SubstraitTypeParser.ScalarTypeContext + super().__init__(parser) + self.copyFrom(ctx) + + def FP32(self): + return self.getToken(SubstraitTypeParser.FP32, 0) + + def enterRule(self, listener:ParseTreeListener): + if hasattr( listener, "enterFp32" ): + listener.enterFp32(self) + + def exitRule(self, listener:ParseTreeListener): + if hasattr( listener, "exitFp32" ): + listener.exitFp32(self) + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitFp32" ): + return visitor.visitFp32(self) + else: + return visitor.visitChildren(self) + + def scalarType(self): localctx = SubstraitTypeParser.ScalarTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_scalarType) try: - self.state = 36 + self.state = 37 self._errHandler.sync(self) token = self._input.LA(1) if token in [8]: @@ -767,6 +794,12 @@ def scalarType(self): self.state = 35 self.match(SubstraitTypeParser.UUID) pass + elif token in [78]: + localctx = SubstraitTypeParser.UnknownContext(self, localctx) + self.enterOuterAlt(localctx, 13) + self.state = 36 + self.match(SubstraitTypeParser.Unknown) + pass else: raise NoViableAltException(self) @@ -1373,365 +1406,365 @@ def parameterizedType(self): self.enterRule(localctx, 6, self.RULE_parameterizedType) self._la = 0 # Token type try: - self.state = 190 + self.state = 191 self._errHandler.sync(self) token = self._input.LA(1) if token in [26]: localctx = SubstraitTypeParser.FixedCharContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 38 + self.state = 39 self.match(SubstraitTypeParser.FixedChar) - self.state = 40 + self.state = 41 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 39 + self.state = 40 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 42 - self.match(SubstraitTypeParser.Lt) self.state = 43 - localctx.length = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 44 + localctx.length = self.numericParameter() + self.state = 45 self.match(SubstraitTypeParser.Gt) pass elif token in [27]: localctx = SubstraitTypeParser.VarCharContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 46 + self.state = 47 self.match(SubstraitTypeParser.VarChar) - self.state = 48 + self.state = 49 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 47 + self.state = 48 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 50 - self.match(SubstraitTypeParser.Lt) self.state = 51 - localctx.length = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 52 + localctx.length = self.numericParameter() + self.state = 53 self.match(SubstraitTypeParser.Gt) pass elif token in [28]: localctx = SubstraitTypeParser.FixedBinaryContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 54 + self.state = 55 self.match(SubstraitTypeParser.FixedBinary) - self.state = 56 + self.state = 57 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 55 + self.state = 56 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 58 - self.match(SubstraitTypeParser.Lt) self.state = 59 - localctx.length = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 60 + localctx.length = self.numericParameter() + self.state = 61 self.match(SubstraitTypeParser.Gt) pass elif token in [22]: localctx = SubstraitTypeParser.DecimalContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 62 + self.state = 63 self.match(SubstraitTypeParser.Decimal) - self.state = 64 + self.state = 65 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 63 + self.state = 64 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 66 - self.match(SubstraitTypeParser.Lt) self.state = 67 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 68 - self.match(SubstraitTypeParser.Comma) + localctx.precision = self.numericParameter() self.state = 69 - localctx.scale = self.numericParameter() + self.match(SubstraitTypeParser.Comma) self.state = 70 + localctx.scale = self.numericParameter() + self.state = 71 self.match(SubstraitTypeParser.Gt) pass elif token in [19]: localctx = SubstraitTypeParser.PrecisionIntervalDayContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 72 + self.state = 73 self.match(SubstraitTypeParser.Interval_Day) - self.state = 74 + self.state = 75 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 73 + self.state = 74 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 76 - self.match(SubstraitTypeParser.Lt) self.state = 77 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 78 + localctx.precision = self.numericParameter() + self.state = 79 self.match(SubstraitTypeParser.Gt) pass elif token in [20]: localctx = SubstraitTypeParser.PrecisionIntervalCompoundContext(self, localctx) self.enterOuterAlt(localctx, 6) - self.state = 80 + self.state = 81 self.match(SubstraitTypeParser.Interval_Compound) - self.state = 82 + self.state = 83 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 81 + self.state = 82 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 84 - self.match(SubstraitTypeParser.Lt) self.state = 85 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 86 + localctx.precision = self.numericParameter() + self.state = 87 self.match(SubstraitTypeParser.Gt) pass elif token in [23]: localctx = SubstraitTypeParser.PrecisionTimeContext(self, localctx) self.enterOuterAlt(localctx, 7) - self.state = 88 + self.state = 89 self.match(SubstraitTypeParser.Precision_Time) - self.state = 90 + self.state = 91 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 89 + self.state = 90 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 92 - self.match(SubstraitTypeParser.Lt) self.state = 93 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 94 + localctx.precision = self.numericParameter() + self.state = 95 self.match(SubstraitTypeParser.Gt) pass elif token in [24]: localctx = SubstraitTypeParser.PrecisionTimestampContext(self, localctx) self.enterOuterAlt(localctx, 8) - self.state = 96 + self.state = 97 self.match(SubstraitTypeParser.Precision_Timestamp) - self.state = 98 + self.state = 99 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 97 + self.state = 98 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 100 - self.match(SubstraitTypeParser.Lt) self.state = 101 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 102 + localctx.precision = self.numericParameter() + self.state = 103 self.match(SubstraitTypeParser.Gt) pass elif token in [25]: localctx = SubstraitTypeParser.PrecisionTimestampTZContext(self, localctx) self.enterOuterAlt(localctx, 9) - self.state = 104 + self.state = 105 self.match(SubstraitTypeParser.Precision_Timestamp_TZ) - self.state = 106 + self.state = 107 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 105 + self.state = 106 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 108 - self.match(SubstraitTypeParser.Lt) self.state = 109 - localctx.precision = self.numericParameter() + self.match(SubstraitTypeParser.Lt) self.state = 110 + localctx.precision = self.numericParameter() + self.state = 111 self.match(SubstraitTypeParser.Gt) pass elif token in [29]: localctx = SubstraitTypeParser.StructContext(self, localctx) self.enterOuterAlt(localctx, 10) - self.state = 112 + self.state = 113 self.match(SubstraitTypeParser.Struct) - self.state = 114 + self.state = 115 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 113 + self.state = 114 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 116 - self.match(SubstraitTypeParser.Lt) self.state = 117 + self.match(SubstraitTypeParser.Lt) + self.state = 118 self.expr(0) - self.state = 122 + self.state = 123 self._errHandler.sync(self) _la = self._input.LA(1) while _la==68: - self.state = 118 - self.match(SubstraitTypeParser.Comma) self.state = 119 + self.match(SubstraitTypeParser.Comma) + self.state = 120 self.expr(0) - self.state = 124 + self.state = 125 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 125 + self.state = 126 self.match(SubstraitTypeParser.Gt) pass elif token in [30]: localctx = SubstraitTypeParser.NStructContext(self, localctx) self.enterOuterAlt(localctx, 11) - self.state = 127 + self.state = 128 self.match(SubstraitTypeParser.NStruct) - self.state = 129 + self.state = 130 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 128 + self.state = 129 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 131 - self.match(SubstraitTypeParser.Lt) self.state = 132 - self.match(SubstraitTypeParser.Identifier) + self.match(SubstraitTypeParser.Lt) self.state = 133 + self.match(SubstraitTypeParser.Identifier) + self.state = 134 self.expr(0) - self.state = 139 + self.state = 140 self._errHandler.sync(self) _la = self._input.LA(1) while _la==68: - self.state = 134 - self.match(SubstraitTypeParser.Comma) self.state = 135 - self.match(SubstraitTypeParser.Identifier) + self.match(SubstraitTypeParser.Comma) self.state = 136 + self.match(SubstraitTypeParser.Identifier) + self.state = 137 self.expr(0) - self.state = 141 + self.state = 142 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 142 + self.state = 143 self.match(SubstraitTypeParser.Gt) pass elif token in [31]: localctx = SubstraitTypeParser.ListContext(self, localctx) self.enterOuterAlt(localctx, 12) - self.state = 144 + self.state = 145 self.match(SubstraitTypeParser.List) - self.state = 146 + self.state = 147 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 145 + self.state = 146 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 148 - self.match(SubstraitTypeParser.Lt) self.state = 149 - self.expr(0) + self.match(SubstraitTypeParser.Lt) self.state = 150 + self.expr(0) + self.state = 151 self.match(SubstraitTypeParser.Gt) pass elif token in [32]: localctx = SubstraitTypeParser.MapContext(self, localctx) self.enterOuterAlt(localctx, 13) - self.state = 152 + self.state = 153 self.match(SubstraitTypeParser.Map) - self.state = 154 + self.state = 155 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 153 + self.state = 154 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 156 - self.match(SubstraitTypeParser.Lt) self.state = 157 - localctx.key = self.expr(0) + self.match(SubstraitTypeParser.Lt) self.state = 158 - self.match(SubstraitTypeParser.Comma) + localctx.key = self.expr(0) self.state = 159 - localctx.value = self.expr(0) + self.match(SubstraitTypeParser.Comma) self.state = 160 + localctx.value = self.expr(0) + self.state = 161 self.match(SubstraitTypeParser.Gt) pass elif token in [7]: localctx = SubstraitTypeParser.FuncContext(self, localctx) self.enterOuterAlt(localctx, 14) - self.state = 162 + self.state = 163 self.match(SubstraitTypeParser.Func) - self.state = 164 + self.state = 165 self._errHandler.sync(self) _la = self._input.LA(1) if _la==70: - self.state = 163 + self.state = 164 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 166 - self.match(SubstraitTypeParser.Lt) self.state = 167 - localctx.params = self.funcParams() + self.match(SubstraitTypeParser.Lt) self.state = 168 - self.match(SubstraitTypeParser.Arrow) + localctx.params = self.funcParams() self.state = 169 - localctx.returnType = self.expr(0) + self.match(SubstraitTypeParser.Arrow) self.state = 170 + localctx.returnType = self.expr(0) + self.state = 171 self.match(SubstraitTypeParser.Gt) pass elif token in [33]: localctx = SubstraitTypeParser.UserDefinedContext(self, localctx) self.enterOuterAlt(localctx, 15) - self.state = 172 - self.match(SubstraitTypeParser.UserDefined) self.state = 173 + self.match(SubstraitTypeParser.UserDefined) + self.state = 174 self.match(SubstraitTypeParser.Identifier) - self.state = 175 + self.state = 176 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,17,self._ctx) if la_ == 1: - self.state = 174 + self.state = 175 localctx.isnull = self.match(SubstraitTypeParser.QMark) - self.state = 188 + self.state = 189 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,19,self._ctx) if la_ == 1: - self.state = 177 - self.match(SubstraitTypeParser.Lt) self.state = 178 + self.match(SubstraitTypeParser.Lt) + self.state = 179 self.expr(0) - self.state = 183 + self.state = 184 self._errHandler.sync(self) _la = self._input.LA(1) while _la==68: - self.state = 179 - self.match(SubstraitTypeParser.Comma) self.state = 180 + self.match(SubstraitTypeParser.Comma) + self.state = 181 self.expr(0) - self.state = 185 + self.state = 186 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 186 + self.state = 187 self.match(SubstraitTypeParser.Gt) @@ -1834,36 +1867,36 @@ def funcParams(self): self.enterRule(localctx, 8, self.RULE_funcParams) self._la = 0 # Token type try: - self.state = 204 + self.state = 205 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,22,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.SingleFuncParamContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 192 + self.state = 193 self.expr(0) pass elif la_ == 2: localctx = SubstraitTypeParser.FuncParamsWithParensContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 193 - self.match(SubstraitTypeParser.OParen) self.state = 194 + self.match(SubstraitTypeParser.OParen) + self.state = 195 self.expr(0) - self.state = 199 + self.state = 200 self._errHandler.sync(self) _la = self._input.LA(1) while _la==68: - self.state = 195 - self.match(SubstraitTypeParser.Comma) self.state = 196 + self.match(SubstraitTypeParser.Comma) + self.state = 197 self.expr(0) - self.state = 201 + self.state = 202 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 202 + self.state = 203 self.match(SubstraitTypeParser.CParen) pass @@ -1973,27 +2006,27 @@ def numericParameter(self): localctx = SubstraitTypeParser.NumericParameterContext(self, self._ctx, self.state) self.enterRule(localctx, 10, self.RULE_numericParameter) try: - self.state = 209 + self.state = 210 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,23,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.NumericLiteralContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 206 + self.state = 207 self.match(SubstraitTypeParser.Number) pass elif la_ == 2: localctx = SubstraitTypeParser.NumericParameterNameContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 207 + self.state = 208 self.match(SubstraitTypeParser.Identifier) pass elif la_ == 3: localctx = SubstraitTypeParser.NumericExpressionContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 208 + self.state = 209 self.expr(0) pass @@ -2049,31 +2082,31 @@ def anyType(self): localctx = SubstraitTypeParser.AnyTypeContext(self, self._ctx, self.state) self.enterRule(localctx, 12, self.RULE_anyType) try: - self.state = 219 + self.state = 220 self._errHandler.sync(self) token = self._input.LA(1) if token in [47]: self.enterOuterAlt(localctx, 1) - self.state = 211 + self.state = 212 self.match(SubstraitTypeParser.Any) - self.state = 213 + self.state = 214 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,24,self._ctx) if la_ == 1: - self.state = 212 + self.state = 213 localctx.isnull = self.match(SubstraitTypeParser.QMark) pass elif token in [48]: self.enterOuterAlt(localctx, 2) - self.state = 215 + self.state = 216 self.match(SubstraitTypeParser.AnyVar) - self.state = 217 + self.state = 218 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,25,self._ctx) if la_ == 1: - self.state = 216 + self.state = 217 localctx.isnull = self.match(SubstraitTypeParser.QMark) @@ -2138,30 +2171,30 @@ def typeDef(self): localctx = SubstraitTypeParser.TypeDefContext(self, self._ctx, self.state) self.enterRule(localctx, 14, self.RULE_typeDef) try: - self.state = 227 + self.state = 228 self._errHandler.sync(self) token = self._input.LA(1) - if token in [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21]: + if token in [8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 21, 78]: self.enterOuterAlt(localctx, 1) - self.state = 221 + self.state = 222 self.scalarType() - self.state = 223 + self.state = 224 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 222 + self.state = 223 localctx.isnull = self.match(SubstraitTypeParser.QMark) pass elif token in [7, 19, 20, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33]: self.enterOuterAlt(localctx, 2) - self.state = 225 + self.state = 226 self.parameterizedType() pass elif token in [47, 48]: self.enterOuterAlt(localctx, 3) - self.state = 226 + self.state = 227 self.anyType() pass else: @@ -2548,7 +2581,7 @@ def expr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 290 + self.state = 291 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,36,self._ctx) if la_ == 1: @@ -2556,11 +2589,11 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 230 - self.match(SubstraitTypeParser.OParen) self.state = 231 - self.expr(0) + self.match(SubstraitTypeParser.OParen) self.state = 232 + self.expr(0) + self.state = 233 self.match(SubstraitTypeParser.CParen) pass @@ -2568,60 +2601,60 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.MultilineDefinitionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 234 - self.match(SubstraitTypeParser.Identifier) self.state = 235 - self.match(SubstraitTypeParser.Eq) + self.match(SubstraitTypeParser.Identifier) self.state = 236 + self.match(SubstraitTypeParser.Eq) + self.state = 237 self.expr(0) - self.state = 238 + self.state = 239 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 237 + self.state = 238 self.match(SubstraitTypeParser.Newline) - self.state = 240 + self.state = 241 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==79): + if not (_la==80): break - self.state = 252 + self.state = 253 self._errHandler.sync(self) _la = self._input.LA(1) - while _la==78: - self.state = 242 - self.match(SubstraitTypeParser.Identifier) + while _la==79: self.state = 243 - self.match(SubstraitTypeParser.Eq) + self.match(SubstraitTypeParser.Identifier) self.state = 244 + self.match(SubstraitTypeParser.Eq) + self.state = 245 self.expr(0) - self.state = 246 + self.state = 247 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 245 + self.state = 246 self.match(SubstraitTypeParser.Newline) - self.state = 248 + self.state = 249 self._errHandler.sync(self) _la = self._input.LA(1) - if not (_la==79): + if not (_la==80): break - self.state = 254 + self.state = 255 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 255 + self.state = 256 localctx.finalType = self.typeDef() - self.state = 259 + self.state = 260 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 256 + self.state = 257 self.match(SubstraitTypeParser.Newline) - self.state = 261 + self.state = 262 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) @@ -2631,7 +2664,7 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.TypeLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 262 + self.state = 263 self.typeDef() pass @@ -2639,7 +2672,7 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.LiteralNumberContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 263 + self.state = 264 self.match(SubstraitTypeParser.Number) pass @@ -2647,13 +2680,13 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.ParameterNameContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 264 + self.state = 265 self.match(SubstraitTypeParser.Identifier) - self.state = 266 + self.state = 267 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,33,self._ctx) if la_ == 1: - self.state = 265 + self.state = 266 localctx.isnull = self.match(SubstraitTypeParser.QMark) @@ -2663,31 +2696,31 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.FunctionCallContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 268 - self.match(SubstraitTypeParser.Identifier) self.state = 269 + self.match(SubstraitTypeParser.Identifier) + self.state = 270 self.match(SubstraitTypeParser.OParen) - self.state = 278 + self.state = 279 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & 2306265238858629008) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 24577) != 0): - self.state = 270 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & 2306265238858629008) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & 57345) != 0): + self.state = 271 self.expr(0) - self.state = 275 + self.state = 276 self._errHandler.sync(self) _la = self._input.LA(1) while _la==68: - self.state = 271 - self.match(SubstraitTypeParser.Comma) self.state = 272 + self.match(SubstraitTypeParser.Comma) + self.state = 273 self.expr(0) - self.state = 277 + self.state = 278 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 280 + self.state = 281 self.match(SubstraitTypeParser.CParen) pass @@ -2695,17 +2728,17 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.IfExprContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 281 - self.match(SubstraitTypeParser.If) self.state = 282 - localctx.ifExpr = self.expr(0) + self.match(SubstraitTypeParser.If) self.state = 283 - self.match(SubstraitTypeParser.Then) + localctx.ifExpr = self.expr(0) self.state = 284 - localctx.thenExpr = self.expr(0) + self.match(SubstraitTypeParser.Then) self.state = 285 - self.match(SubstraitTypeParser.Else) + localctx.thenExpr = self.expr(0) self.state = 286 + self.match(SubstraitTypeParser.Else) + self.state = 287 localctx.elseExpr = self.expr(3) pass @@ -2714,15 +2747,15 @@ def expr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 288 - self.match(SubstraitTypeParser.Bang) self.state = 289 + self.match(SubstraitTypeParser.Bang) + self.state = 290 self.expr(2) pass self._ctx.stop = self._input.LT(-1) - self.state = 303 + self.state = 304 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2730,18 +2763,18 @@ def expr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 301 + self.state = 302 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,37,self._ctx) if la_ == 1: localctx = SubstraitTypeParser.BinaryExprContext(self, SubstraitTypeParser.ExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 292 + self.state = 293 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 293 + self.state = 294 localctx.op = self._input.LT(1) _la = self._input.LA(1) if not(((((_la - 50)) & ~0x3f) == 0 and ((1 << (_la - 50)) & 25167855) != 0)): @@ -2749,7 +2782,7 @@ def expr(self, _p:int=0): else: self._errHandler.reportMatch(self) self.consume() - self.state = 294 + self.state = 295 localctx.right = self.expr(5) pass @@ -2757,22 +2790,22 @@ def expr(self, _p:int=0): localctx = SubstraitTypeParser.TernaryContext(self, SubstraitTypeParser.ExprContext(self, _parentctx, _parentState)) localctx.ifExpr = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_expr) - self.state = 295 + self.state = 296 if not self.precpred(self._ctx, 1): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 1)") - self.state = 296 - self.match(SubstraitTypeParser.QMark) self.state = 297 - localctx.thenExpr = self.expr(0) + self.match(SubstraitTypeParser.QMark) self.state = 298 - self.match(SubstraitTypeParser.Colon) + localctx.thenExpr = self.expr(0) self.state = 299 + self.match(SubstraitTypeParser.Colon) + self.state = 300 localctx.elseExpr = self.expr(2) pass - self.state = 305 + self.state = 306 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,38,self._ctx) diff --git a/tests/type/antlr_parser/SubstraitTypeVisitor.py b/tests/type/antlr_parser/SubstraitTypeVisitor.py index 6671f1388..c00b77a70 100644 --- a/tests/type/antlr_parser/SubstraitTypeVisitor.py +++ b/tests/type/antlr_parser/SubstraitTypeVisitor.py @@ -80,6 +80,11 @@ def visitUuid(self, ctx:SubstraitTypeParser.UuidContext): return self.visitChildren(ctx) + # Visit a parse tree produced by SubstraitTypeParser#unknown. + def visitUnknown(self, ctx:SubstraitTypeParser.UnknownContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by SubstraitTypeParser#fixedChar. def visitFixedChar(self, ctx:SubstraitTypeParser.FixedCharContext): return self.visitChildren(ctx) diff --git a/text/dialect_schema.yaml b/text/dialect_schema.yaml index 3dbf0deec..3134959b1 100644 --- a/text/dialect_schema.yaml +++ b/text/dialect_schema.yaml @@ -58,6 +58,7 @@ properties: - STRUCT - LIST - MAP + - UNKNOWN - $ref: "#/definitions/type_bool" - $ref: "#/definitions/type_i8" - $ref: "#/definitions/type_i16" @@ -82,6 +83,7 @@ properties: - $ref: "#/definitions/type_struct" - $ref: "#/definitions/type_list" - $ref: "#/definitions/type_map" + - $ref: "#/definitions/type_unknown" - $ref: "#/definitions/type_user_defined" supported_relations: @@ -156,6 +158,7 @@ properties: - SUBQUERY - NESTED - DYNAMIC_PARAMETER + - NAMED_EXPRESSION - EXECUTION_CONTEXT_VARIABLE - $ref: "#/definitions/literal_expression" - $ref: "#/definitions/selection_expression" @@ -169,6 +172,7 @@ properties: - $ref: "#/definitions/subquery_expression" - $ref: "#/definitions/nested_expression" - $ref: "#/definitions/dynamic_parameter_expression" + - $ref: "#/definitions/named_expression_expression" - $ref: "#/definitions/execution_context_variable" supported_scalar_functions: @@ -704,6 +708,18 @@ definitions: description: Arbitrary data created by the dialect author. system_metadata: $ref: "#/definitions/system_type_metadata" + type_unknown: + type: object + additionalProperties: false + required: [type] + properties: + type: + const: UNKNOWN + metadata: + type: object + description: Arbitrary data created by the dialect author. + system_metadata: + $ref: "#/definitions/system_type_metadata" type_user_defined: type: object additionalProperties: false @@ -1207,6 +1223,16 @@ definitions: type: object description: Arbitrary data created by the dialect author. required: [expression] + named_expression_expression: + type: object + additionalProperties: false + properties: + expression: + const: NAMED_EXPRESSION + metadata: + type: object + description: Arbitrary data created by the dialect author. + required: [expression] execution_context_variable: type: object additionalProperties: false