From 3fc21afc318f00f9c1403f0587991e09d0c047c3 Mon Sep 17 00:00:00 2001 From: Tim Voronov Date: Wed, 20 Nov 2024 16:42:45 -0500 Subject: [PATCH] Revert "Work on sorting" This reverts commit c67aa0a3c85869554961e4f3dfa973e6b849fdce. --- pkg/compiler/compiler.go | 3 +- pkg/compiler/compiler_exec_test.go | 196 +-- pkg/compiler/loops.go | 4 +- pkg/compiler/visitor.go | 39 +- pkg/parser/antlr/FqlParser.g4 | 11 +- pkg/parser/fql/FqlParser.interp | 3 +- pkg/parser/fql/fql_parser.go | 1875 +++++++++++---------- pkg/parser/fql/fqlparser_base_listener.go | 6 + pkg/parser/fql/fqlparser_base_visitor.go | 4 + pkg/parser/fql/fqlparser_listener.go | 6 + pkg/parser/fql/fqlparser_visitor.go | 3 + pkg/runtime/opcode.go | 10 +- pkg/runtime/values/noop_iter.go | 1 - pkg/runtime/vm.go | 9 +- 14 files changed, 1023 insertions(+), 1147 deletions(-) diff --git a/pkg/compiler/compiler.go b/pkg/compiler/compiler.go index 3a4b018f3..3cdd32531 100644 --- a/pkg/compiler/compiler.go +++ b/pkg/compiler/compiler.go @@ -3,11 +3,10 @@ package compiler import ( "errors" - goruntime "runtime" - "github.com/MontFerret/ferret/pkg/parser" "github.com/MontFerret/ferret/pkg/runtime" "github.com/MontFerret/ferret/pkg/stdlib" + goruntime "runtime" ) type Compiler struct { diff --git a/pkg/compiler/compiler_exec_test.go b/pkg/compiler/compiler_exec_test.go index b31b86227..3b64fbd37 100644 --- a/pkg/compiler/compiler_exec_test.go +++ b/pkg/compiler/compiler_exec_test.go @@ -3,13 +3,12 @@ package compiler_test import ( "context" "fmt" + "github.com/MontFerret/ferret/pkg/parser" "regexp" "strconv" "strings" "testing" - "github.com/MontFerret/ferret/pkg/parser" - "github.com/MontFerret/ferret/pkg/compiler" "github.com/MontFerret/ferret/pkg/runtime" "github.com/MontFerret/ferret/pkg/runtime/core" @@ -1308,196 +1307,3 @@ func TestForLimit(t *testing.T) { return values.NewInt(2), nil })) } - -func TestForSort(t *testing.T) { - RunUseCases(t, []UseCase{ - CaseArray(` - LET users = [ - { - active: true, - age: 31, - gender: "m" - }, - { - active: true, - age: 29, - gender: "f" - }, - { - active: true, - age: 36, - gender: "m" - } - ] - FOR u IN users - SORT u.age - RETURN u - `, []any{map[string]any{"active": true, "age": 29, "gender": "f"}, map[string]any{"active": true, "age": 31, "gender": "m"}, map[string]any{"active": true, "age": 36, "gender": "m"}}), - }) - // - // - //Convey("Should compile query with SORT DESC statement", t, func() { - // c := compiler.New() - // - // p, err := c.Compile(` - // LET users = [ - // { - // active: true, - // age: 31, - // gender: "m" - // }, - // { - // active: true, - // age: 29, - // gender: "f" - // }, - // { - // active: true, - // age: 36, - // gender: "m" - // } - // ] - // FOR u IN users - // SORT u.age DESC - // RETURN u - // `) - // - // So(err, ShouldBeNil) - // - // out, err := p.Run(context.Background()) - // - // So(err, ShouldBeNil) - // - // So(string(out), ShouldEqual, `[{"active":true,"age":36,"gender":"m"},{"active":true,"age":31,"gender":"m"},{"active":true,"age":29,"gender":"f"}]`) - //}) - // - //Convey("Should compile query with SORT statement with multiple expressions", t, func() { - // c := compiler.New() - // - // p, err := c.Compile(` - // LET users = [ - // { - // active: true, - // age: 31, - // gender: "m" - // }, - // { - // active: true, - // age: 29, - // gender: "f" - // }, - // { - // active: true, - // age: 31, - // gender: "f" - // }, - // { - // active: true, - // age: 36, - // gender: "m" - // } - // ] - // FOR u IN users - // SORT u.age, u.gender - // RETURN u - // `) - // - // So(err, ShouldBeNil) - // - // out, err := p.Run(context.Background()) - // - // So(err, ShouldBeNil) - // - // So(string(out), ShouldEqual, `[{"active":true,"age":29,"gender":"f"},{"active":true,"age":31,"gender":"f"},{"active":true,"age":31,"gender":"m"},{"active":true,"age":36,"gender":"m"}]`) - //}) - // - //Convey("Should define variables and call functions", t, func() { - // c := compiler.New() - // counter := 0 - // c.RegisterFunction("TEST", func(ctx context.Context, args ...core.Value) (core.Value, error) { - // counter++ - // - // So(args[0], ShouldEqual, "foo") - // - // return values.None, nil - // }) - // - // p, err := c.Compile(` - // LET users = [ - // { - // active: true, - // age: 31, - // gender: "m" - // }, - // { - // active: true, - // age: 29, - // gender: "f" - // }, - // { - // active: true, - // age: 31, - // gender: "f" - // }, - // { - // active: true, - // age: 36, - // gender: "m" - // } - // ] - // FOR u IN users - // LET x = "foo" - // TEST(x) - // SORT u.age, u.gender - // RETURN u - // `) - // - // So(err, ShouldBeNil) - // - // out, err := p.Run(context.Background()) - // - // So(err, ShouldBeNil) - // So(counter, ShouldEqual, 4) - // So(string(out), ShouldEqual, `[{"active":true,"age":29,"gender":"f"},{"active":true,"age":31,"gender":"f"},{"active":true,"age":31,"gender":"m"},{"active":true,"age":36,"gender":"m"}]`) - //}) - // - //Convey("Should be able to reuse values from a source", t, func() { - // c := compiler.New() - // - // p, err := c.Compile(` - // LET users = [ - // { - // active: true, - // age: 31, - // gender: "m" - // }, - // { - // active: true, - // age: 29, - // gender: "f" - // }, - // { - // active: true, - // age: 31, - // gender: "f" - // }, - // { - // active: true, - // age: 36, - // gender: "m" - // } - // ] - // FOR u IN users - // LET x = u.gender - // SORT u.age, u.gender - // RETURN {u,x} - // `) - // - // So(err, ShouldBeNil) - // - // out, err := p.Run(context.Background()) - // - // So(err, ShouldBeNil) - // So(string(out), ShouldEqual, `[{"u":{"active":true,"age":29,"gender":"f"},"x":"f"},{"u":{"active":true,"age":31,"gender":"f"},"x":"f"},{"u":{"active":true,"age":31,"gender":"m"},"x":"m"},{"u":{"active":true,"age":36,"gender":"m"},"x":"m"}]`) - //}) -} diff --git a/pkg/compiler/loops.go b/pkg/compiler/loops.go index 05694fc8e..4aac23dd0 100644 --- a/pkg/compiler/loops.go +++ b/pkg/compiler/loops.go @@ -8,8 +8,8 @@ type ( Distinct bool Result runtime.Operand Iterator runtime.Operand - Allocate bool - Next int + Allocate bool + Next int } LoopTable struct { diff --git a/pkg/compiler/visitor.go b/pkg/compiler/visitor.go index 43b573a18..89a7b404b 100644 --- a/pkg/compiler/visitor.go +++ b/pkg/compiler/visitor.go @@ -123,7 +123,7 @@ func (v *visitor) VisitForExpression(ctx *fql.ForExpressionContext) interface{} dsReg := loop.Result if loop.Allocate { - v.emitter.EmitAb(runtime.OpLoopInit, dsReg, distinct) + v.emitter.EmitAb(runtime.OpLoopBegin, dsReg, distinct) } if isForLoop { @@ -132,7 +132,7 @@ func (v *visitor) VisitForExpression(ctx *fql.ForExpressionContext) interface{} iterReg := v.registers.Allocate(State) - v.emitter.EmitAB(runtime.OpForLoopStart, iterReg, src1) + v.emitter.EmitAB(runtime.OpForLoopInit, iterReg, src1) // jumpPlaceholder is a placeholder for the exit jump position loop.Next = v.emitter.EmitJumpc(runtime.OpForLoopNext, jumpPlaceholder, iterReg) @@ -168,7 +168,7 @@ func (v *visitor) VisitForExpression(ctx *fql.ForExpressionContext) interface{} srcExpr := ctx.Expression() // Create initial value for the loop counter - v.emitter.EmitA(runtime.OpWhileLoopStart, counterReg) + v.emitter.EmitA(runtime.OpWhileLoopInit, counterReg) beforeExp := v.emitter.Size() // Loop data source to iterate over cond := srcExpr.Accept(v).(runtime.Operand) @@ -187,15 +187,8 @@ func (v *visitor) VisitForExpression(ctx *fql.ForExpressionContext) interface{} jumpIndex := loop.Next loop.Next -= jumpOffset - // Clauses - if clauses := ctx.AllForExpressionClause(); clauses != nil && len(clauses) > 0 { - for _, clause := range clauses { - clause.Accept(v) - } - } - // body - if body := ctx.AllForExpressionStatement(); body != nil && len(body) > 0 { + if body := ctx.AllForExpressionBody(); body != nil && len(body) > 0 { for _, b := range body { b.Accept(v) } @@ -218,7 +211,7 @@ func (v *visitor) VisitForExpression(ctx *fql.ForExpressionContext) interface{} if loop.Allocate { // TODO: Reuse the dsReg register - v.emitter.EmitAB(runtime.OpLoopFin, dst, dsReg) + v.emitter.EmitAB(runtime.OpLoopEnd, dst, dsReg) if isForLoop { v.emitter.PatchJump(jumpIndex) @@ -271,12 +264,12 @@ func (v *visitor) VisitForExpressionSource(ctx *fql.ForExpressionSourceContext) panic(core.Error(ErrUnexpectedToken, ctx.GetText())) } -func (v *visitor) VisitForExpressionStatement(ctx *fql.ForExpressionStatementContext) interface{} { - if c := ctx.VariableDeclaration(); c != nil { +func (v *visitor) VisitForExpressionBody(ctx *fql.ForExpressionBodyContext) interface{} { + if c := ctx.ForExpressionClause(); c != nil { return c.Accept(v) } - if c := ctx.FunctionCallExpression(); c != nil { + if c := ctx.ForExpressionStatement(); c != nil { return c.Accept(v) } @@ -305,10 +298,6 @@ func (v *visitor) VisitForExpressionClause(ctx *fql.ForExpressionClauseContext) panic(core.Error(ErrUnexpectedToken, ctx.GetText())) } -func (v *visitor) VisitSortClause(ctx *fql.SortClauseContext) interface{} { - return nil -} - func (v *visitor) VisitFilterClause(ctx *fql.FilterClauseContext) interface{} { src1 := ctx.Expression().Accept(v).(runtime.Operand) v.emitter.EmitJumpc(runtime.OpJumpIfFalse, v.loops.Loop().Next, src1) @@ -375,6 +364,18 @@ func (v *visitor) VisitLimitClauseValue(ctx *fql.LimitClauseValueContext) interf panic(core.Error(ErrUnexpectedToken, ctx.GetText())) } +func (v *visitor) VisitForExpressionStatement(ctx *fql.ForExpressionStatementContext) interface{} { + if c := ctx.VariableDeclaration(); c != nil { + return c.Accept(v) + } + + if c := ctx.FunctionCallExpression(); c != nil { + return c.Accept(v) + } + + panic(core.Error(ErrUnexpectedToken, ctx.GetText())) +} + func (v *visitor) VisitFunctionCallExpression(ctx *fql.FunctionCallExpressionContext) interface{} { return v.visitFunctionCall(ctx.FunctionCall().(*fql.FunctionCallContext), ctx.ErrorOperator() != nil) } diff --git a/pkg/parser/antlr/FqlParser.g4 b/pkg/parser/antlr/FqlParser.g4 index c2e74d486..4e0bb7ae6 100644 --- a/pkg/parser/antlr/FqlParser.g4 +++ b/pkg/parser/antlr/FqlParser.g4 @@ -46,12 +46,10 @@ returnExpression forExpression : For valueVariable=(Identifier | IgnoreIdentifier) (Comma counterVariable=Identifier)? In forExpressionSource - forExpressionClause* - forExpressionStatement* + forExpressionBody* forExpressionReturn | For counterVariable=(Identifier | IgnoreIdentifier) Do? While expression - forExpressionClause* - forExpressionStatement* + forExpressionBody* forExpressionReturn ; @@ -77,6 +75,11 @@ forExpressionStatement | functionCallExpression ; +forExpressionBody + : forExpressionStatement + | forExpressionClause + ; + forExpressionReturn : returnExpression | forExpression diff --git a/pkg/parser/fql/FqlParser.interp b/pkg/parser/fql/FqlParser.interp index 64b7dbc68..422263978 100644 --- a/pkg/parser/fql/FqlParser.interp +++ b/pkg/parser/fql/FqlParser.interp @@ -162,6 +162,7 @@ forExpression forExpressionSource forExpressionClause forExpressionStatement +forExpressionBody forExpressionReturn filterClause limitClause @@ -223,4 +224,4 @@ errorOperator atn: -[4, 1, 72, 653, 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, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 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, 1, 0, 5, 0, 144, 8, 0, 10, 0, 12, 0, 147, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 159, 8, 4, 10, 4, 12, 4, 162, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 169, 8, 5, 1, 6, 1, 6, 3, 6, 173, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 184, 8, 7, 1, 8, 1, 8, 3, 8, 188, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 196, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 201, 8, 9, 10, 9, 12, 9, 204, 9, 9, 1, 9, 5, 9, 207, 8, 9, 10, 9, 12, 9, 210, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 217, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 222, 8, 9, 10, 9, 12, 9, 225, 9, 9, 1, 9, 5, 9, 228, 8, 9, 10, 9, 12, 9, 231, 9, 9, 1, 9, 1, 9, 3, 9, 235, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 244, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 3, 12, 254, 8, 12, 1, 13, 1, 13, 3, 13, 258, 8, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 267, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 274, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 280, 8, 17, 10, 17, 12, 17, 283, 9, 17, 1, 18, 1, 18, 3, 18, 287, 8, 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, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 307, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 5, 21, 316, 8, 21, 10, 21, 12, 21, 319, 9, 21, 1, 22, 1, 22, 1, 22, 1, 22, 5, 22, 325, 8, 22, 10, 22, 12, 22, 328, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 340, 8, 24, 3, 24, 342, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 355, 8, 26, 1, 26, 3, 26, 358, 8, 26, 1, 26, 3, 26, 361, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 368, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 373, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 384, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 390, 8, 31, 1, 32, 1, 32, 3, 32, 394, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 403, 8, 33, 1, 34, 1, 34, 3, 34, 407, 8, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 415, 8, 35, 10, 35, 12, 35, 418, 9, 35, 1, 35, 3, 35, 421, 8, 35, 3, 35, 423, 8, 35, 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, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 3, 41, 446, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 457, 8, 43, 1, 44, 1, 44, 1, 44, 1, 45, 5, 45, 463, 8, 45, 10, 45, 12, 45, 466, 9, 45, 1, 46, 1, 46, 4, 46, 470, 8, 46, 11, 46, 12, 46, 471, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 479, 8, 47, 1, 48, 1, 48, 3, 48, 483, 8, 48, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 489, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 3, 50, 496, 8, 50, 1, 51, 1, 51, 1, 51, 5, 51, 501, 8, 51, 10, 51, 12, 51, 504, 9, 51, 1, 51, 3, 51, 507, 8, 51, 1, 52, 3, 52, 510, 8, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 517, 8, 52, 1, 52, 3, 52, 520, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 3, 56, 533, 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 540, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 553, 8, 57, 1, 57, 1, 57, 5, 57, 557, 8, 57, 10, 57, 12, 57, 560, 9, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 581, 8, 58, 10, 58, 12, 58, 584, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 597, 8, 59, 1, 59, 1, 59, 3, 59, 601, 8, 59, 3, 59, 603, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 617, 8, 59, 10, 59, 12, 59, 620, 9, 59, 1, 60, 1, 60, 1, 60, 3, 60, 625, 8, 60, 1, 61, 1, 61, 1, 62, 3, 62, 630, 8, 62, 1, 62, 1, 62, 1, 63, 3, 63, 635, 8, 63, 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, 70, 0, 3, 114, 116, 118, 71, 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, 0, 10, 1, 0, 66, 67, 1, 0, 48, 49, 4, 0, 28, 29, 38, 44, 46, 47, 52, 59, 4, 0, 35, 37, 45, 45, 48, 51, 60, 64, 2, 0, 48, 48, 56, 57, 1, 0, 15, 20, 2, 0, 24, 25, 61, 61, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, 25, 694, 0, 145, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, 154, 1, 0, 0, 0, 8, 160, 1, 0, 0, 0, 10, 168, 1, 0, 0, 0, 12, 172, 1, 0, 0, 0, 14, 183, 1, 0, 0, 0, 16, 185, 1, 0, 0, 0, 18, 234, 1, 0, 0, 0, 20, 243, 1, 0, 0, 0, 22, 249, 1, 0, 0, 0, 24, 253, 1, 0, 0, 0, 26, 257, 1, 0, 0, 0, 28, 259, 1, 0, 0, 0, 30, 262, 1, 0, 0, 0, 32, 273, 1, 0, 0, 0, 34, 275, 1, 0, 0, 0, 36, 284, 1, 0, 0, 0, 38, 306, 1, 0, 0, 0, 40, 308, 1, 0, 0, 0, 42, 312, 1, 0, 0, 0, 44, 320, 1, 0, 0, 0, 46, 329, 1, 0, 0, 0, 48, 341, 1, 0, 0, 0, 50, 343, 1, 0, 0, 0, 52, 348, 1, 0, 0, 0, 54, 367, 1, 0, 0, 0, 56, 372, 1, 0, 0, 0, 58, 374, 1, 0, 0, 0, 60, 377, 1, 0, 0, 0, 62, 389, 1, 0, 0, 0, 64, 393, 1, 0, 0, 0, 66, 402, 1, 0, 0, 0, 68, 404, 1, 0, 0, 0, 70, 410, 1, 0, 0, 0, 72, 426, 1, 0, 0, 0, 74, 428, 1, 0, 0, 0, 76, 430, 1, 0, 0, 0, 78, 432, 1, 0, 0, 0, 80, 434, 1, 0, 0, 0, 82, 445, 1, 0, 0, 0, 84, 447, 1, 0, 0, 0, 86, 456, 1, 0, 0, 0, 88, 458, 1, 0, 0, 0, 90, 464, 1, 0, 0, 0, 92, 467, 1, 0, 0, 0, 94, 478, 1, 0, 0, 0, 96, 480, 1, 0, 0, 0, 98, 484, 1, 0, 0, 0, 100, 495, 1, 0, 0, 0, 102, 497, 1, 0, 0, 0, 104, 519, 1, 0, 0, 0, 106, 521, 1, 0, 0, 0, 108, 523, 1, 0, 0, 0, 110, 525, 1, 0, 0, 0, 112, 532, 1, 0, 0, 0, 114, 539, 1, 0, 0, 0, 116, 561, 1, 0, 0, 0, 118, 602, 1, 0, 0, 0, 120, 621, 1, 0, 0, 0, 122, 626, 1, 0, 0, 0, 124, 629, 1, 0, 0, 0, 126, 634, 1, 0, 0, 0, 128, 638, 1, 0, 0, 0, 130, 640, 1, 0, 0, 0, 132, 642, 1, 0, 0, 0, 134, 644, 1, 0, 0, 0, 136, 646, 1, 0, 0, 0, 138, 648, 1, 0, 0, 0, 140, 650, 1, 0, 0, 0, 142, 144, 3, 2, 1, 0, 143, 142, 1, 0, 0, 0, 144, 147, 1, 0, 0, 0, 145, 143, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 148, 149, 3, 8, 4, 0, 149, 1, 1, 0, 0, 0, 150, 151, 3, 4, 2, 0, 151, 3, 1, 0, 0, 0, 152, 153, 3, 6, 3, 0, 153, 5, 1, 0, 0, 0, 154, 155, 5, 51, 0, 0, 155, 156, 3, 88, 44, 0, 156, 7, 1, 0, 0, 0, 157, 159, 3, 10, 5, 0, 158, 157, 1, 0, 0, 0, 159, 162, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 160, 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 163, 164, 3, 12, 6, 0, 164, 9, 1, 0, 0, 0, 165, 169, 3, 14, 7, 0, 166, 169, 3, 96, 48, 0, 167, 169, 3, 52, 26, 0, 168, 165, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 167, 1, 0, 0, 0, 169, 11, 1, 0, 0, 0, 170, 173, 3, 16, 8, 0, 171, 173, 3, 18, 9, 0, 172, 170, 1, 0, 0, 0, 172, 171, 1, 0, 0, 0, 173, 13, 1, 0, 0, 0, 174, 175, 5, 45, 0, 0, 175, 176, 7, 0, 0, 0, 176, 177, 5, 31, 0, 0, 177, 184, 3, 114, 57, 0, 178, 179, 5, 45, 0, 0, 179, 180, 3, 106, 53, 0, 180, 181, 5, 31, 0, 0, 181, 182, 3, 114, 57, 0, 182, 184, 1, 0, 0, 0, 183, 174, 1, 0, 0, 0, 183, 178, 1, 0, 0, 0, 184, 15, 1, 0, 0, 0, 185, 187, 5, 36, 0, 0, 186, 188, 5, 40, 0, 0, 187, 186, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 3, 114, 57, 0, 190, 17, 1, 0, 0, 0, 191, 192, 5, 35, 0, 0, 192, 195, 7, 0, 0, 0, 193, 194, 5, 8, 0, 0, 194, 196, 5, 66, 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 198, 5, 62, 0, 0, 198, 202, 3, 20, 10, 0, 199, 201, 3, 22, 11, 0, 200, 199, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 208, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 205, 207, 3, 24, 12, 0, 206, 205, 1, 0, 0, 0, 207, 210, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 211, 1, 0, 0, 0, 210, 208, 1, 0, 0, 0, 211, 212, 3, 26, 13, 0, 212, 235, 1, 0, 0, 0, 213, 214, 5, 35, 0, 0, 214, 216, 7, 0, 0, 0, 215, 217, 5, 63, 0, 0, 216, 215, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 5, 64, 0, 0, 219, 223, 3, 114, 57, 0, 220, 222, 3, 22, 11, 0, 221, 220, 1, 0, 0, 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, 229, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 228, 3, 24, 12, 0, 227, 226, 1, 0, 0, 0, 228, 231, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, 0, 0, 230, 232, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 232, 233, 3, 26, 13, 0, 233, 235, 1, 0, 0, 0, 234, 191, 1, 0, 0, 0, 234, 213, 1, 0, 0, 0, 235, 19, 1, 0, 0, 0, 236, 244, 3, 96, 48, 0, 237, 244, 3, 68, 34, 0, 238, 244, 3, 70, 35, 0, 239, 244, 3, 64, 32, 0, 240, 244, 3, 92, 46, 0, 241, 244, 3, 110, 55, 0, 242, 244, 3, 62, 31, 0, 243, 236, 1, 0, 0, 0, 243, 237, 1, 0, 0, 0, 243, 238, 1, 0, 0, 0, 243, 239, 1, 0, 0, 0, 243, 240, 1, 0, 0, 0, 243, 241, 1, 0, 0, 0, 243, 242, 1, 0, 0, 0, 244, 21, 1, 0, 0, 0, 245, 250, 3, 30, 15, 0, 246, 250, 3, 34, 17, 0, 247, 250, 3, 28, 14, 0, 248, 250, 3, 38, 19, 0, 249, 245, 1, 0, 0, 0, 249, 246, 1, 0, 0, 0, 249, 247, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 254, 3, 14, 7, 0, 252, 254, 3, 96, 48, 0, 253, 251, 1, 0, 0, 0, 253, 252, 1, 0, 0, 0, 254, 25, 1, 0, 0, 0, 255, 258, 3, 16, 8, 0, 256, 258, 3, 18, 9, 0, 257, 255, 1, 0, 0, 0, 257, 256, 1, 0, 0, 0, 258, 27, 1, 0, 0, 0, 259, 260, 5, 41, 0, 0, 260, 261, 3, 114, 57, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, 44, 0, 0, 263, 266, 3, 32, 16, 0, 264, 265, 5, 8, 0, 0, 265, 267, 3, 32, 16, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 31, 1, 0, 0, 0, 268, 274, 3, 78, 39, 0, 269, 274, 3, 62, 31, 0, 270, 274, 3, 64, 32, 0, 271, 274, 3, 96, 48, 0, 272, 274, 3, 92, 46, 0, 273, 268, 1, 0, 0, 0, 273, 269, 1, 0, 0, 0, 273, 270, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 272, 1, 0, 0, 0, 274, 33, 1, 0, 0, 0, 275, 276, 5, 43, 0, 0, 276, 281, 3, 36, 18, 0, 277, 278, 5, 8, 0, 0, 278, 280, 3, 36, 18, 0, 279, 277, 1, 0, 0, 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 35, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 286, 3, 114, 57, 0, 285, 287, 5, 47, 0, 0, 286, 285, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 37, 1, 0, 0, 0, 288, 289, 5, 46, 0, 0, 289, 307, 3, 50, 25, 0, 290, 291, 5, 46, 0, 0, 291, 307, 3, 44, 22, 0, 292, 293, 5, 46, 0, 0, 293, 294, 3, 42, 21, 0, 294, 295, 3, 44, 22, 0, 295, 307, 1, 0, 0, 0, 296, 297, 5, 46, 0, 0, 297, 298, 3, 42, 21, 0, 298, 299, 3, 48, 24, 0, 299, 307, 1, 0, 0, 0, 300, 301, 5, 46, 0, 0, 301, 302, 3, 42, 21, 0, 302, 303, 3, 50, 25, 0, 303, 307, 1, 0, 0, 0, 304, 305, 5, 46, 0, 0, 305, 307, 3, 42, 21, 0, 306, 288, 1, 0, 0, 0, 306, 290, 1, 0, 0, 0, 306, 292, 1, 0, 0, 0, 306, 296, 1, 0, 0, 0, 306, 300, 1, 0, 0, 0, 306, 304, 1, 0, 0, 0, 307, 39, 1, 0, 0, 0, 308, 309, 5, 66, 0, 0, 309, 310, 5, 31, 0, 0, 310, 311, 3, 114, 57, 0, 311, 41, 1, 0, 0, 0, 312, 317, 3, 40, 20, 0, 313, 314, 5, 8, 0, 0, 314, 316, 3, 40, 20, 0, 315, 313, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 43, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, 321, 5, 58, 0, 0, 321, 326, 3, 46, 23, 0, 322, 323, 5, 8, 0, 0, 323, 325, 3, 46, 23, 0, 324, 322, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 45, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 330, 5, 66, 0, 0, 330, 331, 5, 31, 0, 0, 331, 332, 3, 96, 48, 0, 332, 47, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 342, 3, 40, 20, 0, 335, 336, 5, 52, 0, 0, 336, 339, 5, 66, 0, 0, 337, 338, 5, 53, 0, 0, 338, 340, 5, 66, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, 342, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 342, 49, 1, 0, 0, 0, 343, 344, 5, 54, 0, 0, 344, 345, 5, 55, 0, 0, 345, 346, 5, 52, 0, 0, 346, 347, 5, 66, 0, 0, 347, 51, 1, 0, 0, 0, 348, 349, 5, 37, 0, 0, 349, 350, 5, 59, 0, 0, 350, 351, 3, 54, 27, 0, 351, 352, 5, 62, 0, 0, 352, 354, 3, 56, 28, 0, 353, 355, 3, 58, 29, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 358, 3, 28, 14, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 360, 1, 0, 0, 0, 359, 361, 3, 60, 30, 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 53, 1, 0, 0, 0, 362, 368, 3, 74, 37, 0, 363, 368, 3, 64, 32, 0, 364, 368, 3, 62, 31, 0, 365, 368, 3, 96, 48, 0, 366, 368, 3, 92, 46, 0, 367, 362, 1, 0, 0, 0, 367, 363, 1, 0, 0, 0, 367, 364, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 366, 1, 0, 0, 0, 368, 55, 1, 0, 0, 0, 369, 373, 3, 96, 48, 0, 370, 373, 3, 64, 32, 0, 371, 373, 3, 92, 46, 0, 372, 369, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 372, 371, 1, 0, 0, 0, 373, 57, 1, 0, 0, 0, 374, 375, 5, 38, 0, 0, 375, 376, 3, 70, 35, 0, 376, 59, 1, 0, 0, 0, 377, 383, 5, 39, 0, 0, 378, 384, 3, 78, 39, 0, 379, 384, 3, 64, 32, 0, 380, 384, 3, 62, 31, 0, 381, 384, 3, 92, 46, 0, 382, 384, 3, 98, 49, 0, 383, 378, 1, 0, 0, 0, 383, 379, 1, 0, 0, 0, 383, 380, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 382, 1, 0, 0, 0, 384, 61, 1, 0, 0, 0, 385, 386, 5, 65, 0, 0, 386, 390, 5, 66, 0, 0, 387, 388, 5, 65, 0, 0, 388, 390, 3, 106, 53, 0, 389, 385, 1, 0, 0, 0, 389, 387, 1, 0, 0, 0, 390, 63, 1, 0, 0, 0, 391, 394, 5, 66, 0, 0, 392, 394, 3, 106, 53, 0, 393, 391, 1, 0, 0, 0, 393, 392, 1, 0, 0, 0, 394, 65, 1, 0, 0, 0, 395, 403, 3, 68, 34, 0, 396, 403, 3, 70, 35, 0, 397, 403, 3, 72, 36, 0, 398, 403, 3, 74, 37, 0, 399, 403, 3, 76, 38, 0, 400, 403, 3, 78, 39, 0, 401, 403, 3, 80, 40, 0, 402, 395, 1, 0, 0, 0, 402, 396, 1, 0, 0, 0, 402, 397, 1, 0, 0, 0, 402, 398, 1, 0, 0, 0, 402, 399, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 67, 1, 0, 0, 0, 404, 406, 5, 9, 0, 0, 405, 407, 3, 102, 51, 0, 406, 405, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 409, 5, 10, 0, 0, 409, 69, 1, 0, 0, 0, 410, 422, 5, 13, 0, 0, 411, 416, 3, 82, 41, 0, 412, 413, 5, 8, 0, 0, 413, 415, 3, 82, 41, 0, 414, 412, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 416, 1, 0, 0, 0, 419, 421, 5, 8, 0, 0, 420, 419, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 423, 1, 0, 0, 0, 422, 411, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 425, 5, 14, 0, 0, 425, 71, 1, 0, 0, 0, 426, 427, 5, 50, 0, 0, 427, 73, 1, 0, 0, 0, 428, 429, 5, 68, 0, 0, 429, 75, 1, 0, 0, 0, 430, 431, 5, 70, 0, 0, 431, 77, 1, 0, 0, 0, 432, 433, 5, 69, 0, 0, 433, 79, 1, 0, 0, 0, 434, 435, 7, 1, 0, 0, 435, 81, 1, 0, 0, 0, 436, 437, 3, 86, 43, 0, 437, 438, 5, 5, 0, 0, 438, 439, 3, 114, 57, 0, 439, 446, 1, 0, 0, 0, 440, 441, 3, 84, 42, 0, 441, 442, 5, 5, 0, 0, 442, 443, 3, 114, 57, 0, 443, 446, 1, 0, 0, 0, 444, 446, 3, 64, 32, 0, 445, 436, 1, 0, 0, 0, 445, 440, 1, 0, 0, 0, 445, 444, 1, 0, 0, 0, 446, 83, 1, 0, 0, 0, 447, 448, 5, 9, 0, 0, 448, 449, 3, 114, 57, 0, 449, 450, 5, 10, 0, 0, 450, 85, 1, 0, 0, 0, 451, 457, 5, 66, 0, 0, 452, 457, 3, 74, 37, 0, 453, 457, 3, 62, 31, 0, 454, 457, 3, 106, 53, 0, 455, 457, 3, 108, 54, 0, 456, 451, 1, 0, 0, 0, 456, 452, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 456, 454, 1, 0, 0, 0, 456, 455, 1, 0, 0, 0, 457, 87, 1, 0, 0, 0, 458, 459, 3, 90, 45, 0, 459, 460, 5, 66, 0, 0, 460, 89, 1, 0, 0, 0, 461, 463, 5, 71, 0, 0, 462, 461, 1, 0, 0, 0, 463, 466, 1, 0, 0, 0, 464, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 91, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 467, 469, 3, 94, 47, 0, 468, 470, 3, 104, 52, 0, 469, 468, 1, 0, 0, 0, 470, 471, 1, 0, 0, 0, 471, 469, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 93, 1, 0, 0, 0, 473, 479, 3, 64, 32, 0, 474, 479, 3, 62, 31, 0, 475, 479, 3, 68, 34, 0, 476, 479, 3, 70, 35, 0, 477, 479, 3, 98, 49, 0, 478, 473, 1, 0, 0, 0, 478, 474, 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 477, 1, 0, 0, 0, 479, 95, 1, 0, 0, 0, 480, 482, 3, 98, 49, 0, 481, 483, 3, 140, 70, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 97, 1, 0, 0, 0, 484, 485, 3, 90, 45, 0, 485, 486, 3, 100, 50, 0, 486, 488, 5, 11, 0, 0, 487, 489, 3, 102, 51, 0, 488, 487, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, 1, 0, 0, 0, 490, 491, 5, 12, 0, 0, 491, 99, 1, 0, 0, 0, 492, 496, 5, 66, 0, 0, 493, 496, 3, 106, 53, 0, 494, 496, 3, 108, 54, 0, 495, 492, 1, 0, 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 101, 1, 0, 0, 0, 497, 502, 3, 114, 57, 0, 498, 499, 5, 8, 0, 0, 499, 501, 3, 114, 57, 0, 500, 498, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 507, 5, 8, 0, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 103, 1, 0, 0, 0, 508, 510, 3, 140, 70, 0, 509, 508, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 5, 7, 0, 0, 512, 520, 3, 86, 43, 0, 513, 514, 3, 140, 70, 0, 514, 515, 5, 7, 0, 0, 515, 517, 1, 0, 0, 0, 516, 513, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 3, 84, 42, 0, 519, 509, 1, 0, 0, 0, 519, 516, 1, 0, 0, 0, 520, 105, 1, 0, 0, 0, 521, 522, 7, 2, 0, 0, 522, 107, 1, 0, 0, 0, 523, 524, 7, 3, 0, 0, 524, 109, 1, 0, 0, 0, 525, 526, 3, 112, 56, 0, 526, 527, 5, 30, 0, 0, 527, 528, 3, 112, 56, 0, 528, 111, 1, 0, 0, 0, 529, 533, 3, 78, 39, 0, 530, 533, 3, 64, 32, 0, 531, 533, 3, 62, 31, 0, 532, 529, 1, 0, 0, 0, 532, 530, 1, 0, 0, 0, 532, 531, 1, 0, 0, 0, 533, 113, 1, 0, 0, 0, 534, 535, 6, 57, -1, 0, 535, 536, 3, 128, 64, 0, 536, 537, 3, 114, 57, 5, 537, 540, 1, 0, 0, 0, 538, 540, 3, 116, 58, 0, 539, 534, 1, 0, 0, 0, 539, 538, 1, 0, 0, 0, 540, 558, 1, 0, 0, 0, 541, 542, 10, 4, 0, 0, 542, 543, 3, 132, 66, 0, 543, 544, 3, 114, 57, 5, 544, 557, 1, 0, 0, 0, 545, 546, 10, 3, 0, 0, 546, 547, 3, 134, 67, 0, 547, 548, 3, 114, 57, 4, 548, 557, 1, 0, 0, 0, 549, 550, 10, 2, 0, 0, 550, 552, 5, 32, 0, 0, 551, 553, 3, 114, 57, 0, 552, 551, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 5, 5, 0, 0, 555, 557, 3, 114, 57, 3, 556, 541, 1, 0, 0, 0, 556, 545, 1, 0, 0, 0, 556, 549, 1, 0, 0, 0, 557, 560, 1, 0, 0, 0, 558, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 115, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, 561, 562, 6, 58, -1, 0, 562, 563, 3, 118, 59, 0, 563, 582, 1, 0, 0, 0, 564, 565, 10, 5, 0, 0, 565, 566, 3, 122, 61, 0, 566, 567, 3, 116, 58, 6, 567, 581, 1, 0, 0, 0, 568, 569, 10, 4, 0, 0, 569, 570, 3, 120, 60, 0, 570, 571, 3, 116, 58, 5, 571, 581, 1, 0, 0, 0, 572, 573, 10, 3, 0, 0, 573, 574, 3, 124, 62, 0, 574, 575, 3, 116, 58, 4, 575, 581, 1, 0, 0, 0, 576, 577, 10, 2, 0, 0, 577, 578, 3, 126, 63, 0, 578, 579, 3, 116, 58, 3, 579, 581, 1, 0, 0, 0, 580, 564, 1, 0, 0, 0, 580, 568, 1, 0, 0, 0, 580, 572, 1, 0, 0, 0, 580, 576, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, 582, 583, 1, 0, 0, 0, 583, 117, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, 586, 6, 59, -1, 0, 586, 603, 3, 96, 48, 0, 587, 603, 3, 110, 55, 0, 588, 603, 3, 66, 33, 0, 589, 603, 3, 64, 32, 0, 590, 603, 3, 92, 46, 0, 591, 603, 3, 62, 31, 0, 592, 596, 5, 11, 0, 0, 593, 597, 3, 18, 9, 0, 594, 597, 3, 52, 26, 0, 595, 597, 3, 114, 57, 0, 596, 593, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 596, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 5, 12, 0, 0, 599, 601, 3, 140, 70, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, 0, 601, 603, 1, 0, 0, 0, 602, 585, 1, 0, 0, 0, 602, 587, 1, 0, 0, 0, 602, 588, 1, 0, 0, 0, 602, 589, 1, 0, 0, 0, 602, 590, 1, 0, 0, 0, 602, 591, 1, 0, 0, 0, 602, 592, 1, 0, 0, 0, 603, 618, 1, 0, 0, 0, 604, 605, 10, 10, 0, 0, 605, 606, 3, 136, 68, 0, 606, 607, 3, 118, 59, 11, 607, 617, 1, 0, 0, 0, 608, 609, 10, 9, 0, 0, 609, 610, 3, 138, 69, 0, 610, 611, 3, 118, 59, 10, 611, 617, 1, 0, 0, 0, 612, 613, 10, 8, 0, 0, 613, 614, 3, 130, 65, 0, 614, 615, 3, 118, 59, 9, 615, 617, 1, 0, 0, 0, 616, 604, 1, 0, 0, 0, 616, 608, 1, 0, 0, 0, 616, 612, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 119, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 624, 7, 4, 0, 0, 622, 625, 3, 124, 62, 0, 623, 625, 3, 122, 61, 0, 624, 622, 1, 0, 0, 0, 624, 623, 1, 0, 0, 0, 625, 121, 1, 0, 0, 0, 626, 627, 7, 5, 0, 0, 627, 123, 1, 0, 0, 0, 628, 630, 5, 61, 0, 0, 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, 632, 5, 62, 0, 0, 632, 125, 1, 0, 0, 0, 633, 635, 5, 61, 0, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 60, 0, 0, 637, 127, 1, 0, 0, 0, 638, 639, 7, 6, 0, 0, 639, 129, 1, 0, 0, 0, 640, 641, 7, 7, 0, 0, 641, 131, 1, 0, 0, 0, 642, 643, 5, 28, 0, 0, 643, 133, 1, 0, 0, 0, 644, 645, 5, 29, 0, 0, 645, 135, 1, 0, 0, 0, 646, 647, 7, 8, 0, 0, 647, 137, 1, 0, 0, 0, 648, 649, 7, 9, 0, 0, 649, 139, 1, 0, 0, 0, 650, 651, 5, 32, 0, 0, 651, 141, 1, 0, 0, 0, 67, 145, 160, 168, 172, 183, 187, 195, 202, 208, 216, 223, 229, 234, 243, 249, 253, 257, 266, 273, 281, 286, 306, 317, 326, 339, 341, 354, 357, 360, 367, 372, 383, 389, 393, 402, 406, 416, 420, 422, 445, 456, 464, 471, 478, 482, 488, 495, 502, 506, 509, 516, 519, 532, 539, 552, 556, 558, 580, 582, 596, 600, 602, 616, 618, 624, 629, 634] \ No newline at end of file +[4, 1, 72, 647, 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, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 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, 1, 0, 5, 0, 146, 8, 0, 10, 0, 12, 0, 149, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 161, 8, 4, 10, 4, 12, 4, 164, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 171, 8, 5, 1, 6, 1, 6, 3, 6, 175, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 186, 8, 7, 1, 8, 1, 8, 3, 8, 190, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 198, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 203, 8, 9, 10, 9, 12, 9, 206, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 213, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 218, 8, 9, 10, 9, 12, 9, 221, 9, 9, 1, 9, 1, 9, 3, 9, 225, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 234, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 240, 8, 11, 1, 12, 1, 12, 3, 12, 244, 8, 12, 1, 13, 1, 13, 3, 13, 248, 8, 13, 1, 14, 1, 14, 3, 14, 252, 8, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 261, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 268, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 274, 8, 18, 10, 18, 12, 18, 277, 9, 18, 1, 19, 1, 19, 3, 19, 281, 8, 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, 3, 20, 301, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 310, 8, 22, 10, 22, 12, 22, 313, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 319, 8, 23, 10, 23, 12, 23, 322, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 334, 8, 25, 3, 25, 336, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 349, 8, 27, 1, 27, 3, 27, 352, 8, 27, 1, 27, 3, 27, 355, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 362, 8, 28, 1, 29, 1, 29, 1, 29, 3, 29, 367, 8, 29, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 378, 8, 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 384, 8, 32, 1, 33, 1, 33, 3, 33, 388, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 397, 8, 34, 1, 35, 1, 35, 3, 35, 401, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 5, 36, 409, 8, 36, 10, 36, 12, 36, 412, 9, 36, 1, 36, 3, 36, 415, 8, 36, 3, 36, 417, 8, 36, 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, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 440, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 451, 8, 44, 1, 45, 1, 45, 1, 45, 1, 46, 5, 46, 457, 8, 46, 10, 46, 12, 46, 460, 9, 46, 1, 47, 1, 47, 4, 47, 464, 8, 47, 11, 47, 12, 47, 465, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 3, 48, 473, 8, 48, 1, 49, 1, 49, 3, 49, 477, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 483, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 3, 51, 490, 8, 51, 1, 52, 1, 52, 1, 52, 5, 52, 495, 8, 52, 10, 52, 12, 52, 498, 9, 52, 1, 52, 3, 52, 501, 8, 52, 1, 53, 3, 53, 504, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 511, 8, 53, 1, 53, 3, 53, 514, 8, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 527, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 534, 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 547, 8, 58, 1, 58, 1, 58, 5, 58, 551, 8, 58, 10, 58, 12, 58, 554, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 575, 8, 59, 10, 59, 12, 59, 578, 9, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 591, 8, 60, 1, 60, 1, 60, 3, 60, 595, 8, 60, 3, 60, 597, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 611, 8, 60, 10, 60, 12, 60, 614, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, 619, 8, 61, 1, 62, 1, 62, 1, 63, 3, 63, 624, 8, 63, 1, 63, 1, 63, 1, 64, 3, 64, 629, 8, 64, 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, 71, 0, 3, 116, 118, 120, 72, 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, 0, 10, 1, 0, 66, 67, 1, 0, 48, 49, 4, 0, 28, 29, 38, 44, 46, 47, 52, 59, 4, 0, 35, 37, 45, 45, 48, 51, 60, 64, 2, 0, 48, 48, 56, 57, 1, 0, 15, 20, 2, 0, 24, 25, 61, 61, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, 25, 686, 0, 147, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 4, 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 170, 1, 0, 0, 0, 12, 174, 1, 0, 0, 0, 14, 185, 1, 0, 0, 0, 16, 187, 1, 0, 0, 0, 18, 224, 1, 0, 0, 0, 20, 233, 1, 0, 0, 0, 22, 239, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 247, 1, 0, 0, 0, 28, 251, 1, 0, 0, 0, 30, 253, 1, 0, 0, 0, 32, 256, 1, 0, 0, 0, 34, 267, 1, 0, 0, 0, 36, 269, 1, 0, 0, 0, 38, 278, 1, 0, 0, 0, 40, 300, 1, 0, 0, 0, 42, 302, 1, 0, 0, 0, 44, 306, 1, 0, 0, 0, 46, 314, 1, 0, 0, 0, 48, 323, 1, 0, 0, 0, 50, 335, 1, 0, 0, 0, 52, 337, 1, 0, 0, 0, 54, 342, 1, 0, 0, 0, 56, 361, 1, 0, 0, 0, 58, 366, 1, 0, 0, 0, 60, 368, 1, 0, 0, 0, 62, 371, 1, 0, 0, 0, 64, 383, 1, 0, 0, 0, 66, 387, 1, 0, 0, 0, 68, 396, 1, 0, 0, 0, 70, 398, 1, 0, 0, 0, 72, 404, 1, 0, 0, 0, 74, 420, 1, 0, 0, 0, 76, 422, 1, 0, 0, 0, 78, 424, 1, 0, 0, 0, 80, 426, 1, 0, 0, 0, 82, 428, 1, 0, 0, 0, 84, 439, 1, 0, 0, 0, 86, 441, 1, 0, 0, 0, 88, 450, 1, 0, 0, 0, 90, 452, 1, 0, 0, 0, 92, 458, 1, 0, 0, 0, 94, 461, 1, 0, 0, 0, 96, 472, 1, 0, 0, 0, 98, 474, 1, 0, 0, 0, 100, 478, 1, 0, 0, 0, 102, 489, 1, 0, 0, 0, 104, 491, 1, 0, 0, 0, 106, 513, 1, 0, 0, 0, 108, 515, 1, 0, 0, 0, 110, 517, 1, 0, 0, 0, 112, 519, 1, 0, 0, 0, 114, 526, 1, 0, 0, 0, 116, 533, 1, 0, 0, 0, 118, 555, 1, 0, 0, 0, 120, 596, 1, 0, 0, 0, 122, 615, 1, 0, 0, 0, 124, 620, 1, 0, 0, 0, 126, 623, 1, 0, 0, 0, 128, 628, 1, 0, 0, 0, 130, 632, 1, 0, 0, 0, 132, 634, 1, 0, 0, 0, 134, 636, 1, 0, 0, 0, 136, 638, 1, 0, 0, 0, 138, 640, 1, 0, 0, 0, 140, 642, 1, 0, 0, 0, 142, 644, 1, 0, 0, 0, 144, 146, 3, 2, 1, 0, 145, 144, 1, 0, 0, 0, 146, 149, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 147, 148, 1, 0, 0, 0, 148, 150, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 150, 151, 3, 8, 4, 0, 151, 1, 1, 0, 0, 0, 152, 153, 3, 4, 2, 0, 153, 3, 1, 0, 0, 0, 154, 155, 3, 6, 3, 0, 155, 5, 1, 0, 0, 0, 156, 157, 5, 51, 0, 0, 157, 158, 3, 90, 45, 0, 158, 7, 1, 0, 0, 0, 159, 161, 3, 10, 5, 0, 160, 159, 1, 0, 0, 0, 161, 164, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 165, 166, 3, 12, 6, 0, 166, 9, 1, 0, 0, 0, 167, 171, 3, 14, 7, 0, 168, 171, 3, 98, 49, 0, 169, 171, 3, 54, 27, 0, 170, 167, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, 11, 1, 0, 0, 0, 172, 175, 3, 16, 8, 0, 173, 175, 3, 18, 9, 0, 174, 172, 1, 0, 0, 0, 174, 173, 1, 0, 0, 0, 175, 13, 1, 0, 0, 0, 176, 177, 5, 45, 0, 0, 177, 178, 7, 0, 0, 0, 178, 179, 5, 31, 0, 0, 179, 186, 3, 116, 58, 0, 180, 181, 5, 45, 0, 0, 181, 182, 3, 108, 54, 0, 182, 183, 5, 31, 0, 0, 183, 184, 3, 116, 58, 0, 184, 186, 1, 0, 0, 0, 185, 176, 1, 0, 0, 0, 185, 180, 1, 0, 0, 0, 186, 15, 1, 0, 0, 0, 187, 189, 5, 36, 0, 0, 188, 190, 5, 40, 0, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 191, 1, 0, 0, 0, 191, 192, 3, 116, 58, 0, 192, 17, 1, 0, 0, 0, 193, 194, 5, 35, 0, 0, 194, 197, 7, 0, 0, 0, 195, 196, 5, 8, 0, 0, 196, 198, 5, 66, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 200, 5, 62, 0, 0, 200, 204, 3, 20, 10, 0, 201, 203, 3, 26, 13, 0, 202, 201, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 207, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 207, 208, 3, 28, 14, 0, 208, 225, 1, 0, 0, 0, 209, 210, 5, 35, 0, 0, 210, 212, 7, 0, 0, 0, 211, 213, 5, 63, 0, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 214, 1, 0, 0, 0, 214, 215, 5, 64, 0, 0, 215, 219, 3, 116, 58, 0, 216, 218, 3, 26, 13, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 222, 223, 3, 28, 14, 0, 223, 225, 1, 0, 0, 0, 224, 193, 1, 0, 0, 0, 224, 209, 1, 0, 0, 0, 225, 19, 1, 0, 0, 0, 226, 234, 3, 98, 49, 0, 227, 234, 3, 70, 35, 0, 228, 234, 3, 72, 36, 0, 229, 234, 3, 66, 33, 0, 230, 234, 3, 94, 47, 0, 231, 234, 3, 112, 56, 0, 232, 234, 3, 64, 32, 0, 233, 226, 1, 0, 0, 0, 233, 227, 1, 0, 0, 0, 233, 228, 1, 0, 0, 0, 233, 229, 1, 0, 0, 0, 233, 230, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 233, 232, 1, 0, 0, 0, 234, 21, 1, 0, 0, 0, 235, 240, 3, 32, 16, 0, 236, 240, 3, 36, 18, 0, 237, 240, 3, 30, 15, 0, 238, 240, 3, 40, 20, 0, 239, 235, 1, 0, 0, 0, 239, 236, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 238, 1, 0, 0, 0, 240, 23, 1, 0, 0, 0, 241, 244, 3, 14, 7, 0, 242, 244, 3, 98, 49, 0, 243, 241, 1, 0, 0, 0, 243, 242, 1, 0, 0, 0, 244, 25, 1, 0, 0, 0, 245, 248, 3, 24, 12, 0, 246, 248, 3, 22, 11, 0, 247, 245, 1, 0, 0, 0, 247, 246, 1, 0, 0, 0, 248, 27, 1, 0, 0, 0, 249, 252, 3, 16, 8, 0, 250, 252, 3, 18, 9, 0, 251, 249, 1, 0, 0, 0, 251, 250, 1, 0, 0, 0, 252, 29, 1, 0, 0, 0, 253, 254, 5, 41, 0, 0, 254, 255, 3, 116, 58, 0, 255, 31, 1, 0, 0, 0, 256, 257, 5, 44, 0, 0, 257, 260, 3, 34, 17, 0, 258, 259, 5, 8, 0, 0, 259, 261, 3, 34, 17, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 33, 1, 0, 0, 0, 262, 268, 3, 80, 40, 0, 263, 268, 3, 64, 32, 0, 264, 268, 3, 66, 33, 0, 265, 268, 3, 98, 49, 0, 266, 268, 3, 94, 47, 0, 267, 262, 1, 0, 0, 0, 267, 263, 1, 0, 0, 0, 267, 264, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 266, 1, 0, 0, 0, 268, 35, 1, 0, 0, 0, 269, 270, 5, 43, 0, 0, 270, 275, 3, 38, 19, 0, 271, 272, 5, 8, 0, 0, 272, 274, 3, 38, 19, 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, 37, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 280, 3, 116, 58, 0, 279, 281, 5, 47, 0, 0, 280, 279, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 39, 1, 0, 0, 0, 282, 283, 5, 46, 0, 0, 283, 301, 3, 52, 26, 0, 284, 285, 5, 46, 0, 0, 285, 301, 3, 46, 23, 0, 286, 287, 5, 46, 0, 0, 287, 288, 3, 44, 22, 0, 288, 289, 3, 46, 23, 0, 289, 301, 1, 0, 0, 0, 290, 291, 5, 46, 0, 0, 291, 292, 3, 44, 22, 0, 292, 293, 3, 50, 25, 0, 293, 301, 1, 0, 0, 0, 294, 295, 5, 46, 0, 0, 295, 296, 3, 44, 22, 0, 296, 297, 3, 52, 26, 0, 297, 301, 1, 0, 0, 0, 298, 299, 5, 46, 0, 0, 299, 301, 3, 44, 22, 0, 300, 282, 1, 0, 0, 0, 300, 284, 1, 0, 0, 0, 300, 286, 1, 0, 0, 0, 300, 290, 1, 0, 0, 0, 300, 294, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 41, 1, 0, 0, 0, 302, 303, 5, 66, 0, 0, 303, 304, 5, 31, 0, 0, 304, 305, 3, 116, 58, 0, 305, 43, 1, 0, 0, 0, 306, 311, 3, 42, 21, 0, 307, 308, 5, 8, 0, 0, 308, 310, 3, 42, 21, 0, 309, 307, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 45, 1, 0, 0, 0, 313, 311, 1, 0, 0, 0, 314, 315, 5, 58, 0, 0, 315, 320, 3, 48, 24, 0, 316, 317, 5, 8, 0, 0, 317, 319, 3, 48, 24, 0, 318, 316, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 47, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 323, 324, 5, 66, 0, 0, 324, 325, 5, 31, 0, 0, 325, 326, 3, 98, 49, 0, 326, 49, 1, 0, 0, 0, 327, 328, 5, 52, 0, 0, 328, 336, 3, 42, 21, 0, 329, 330, 5, 52, 0, 0, 330, 333, 5, 66, 0, 0, 331, 332, 5, 53, 0, 0, 332, 334, 5, 66, 0, 0, 333, 331, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, 336, 1, 0, 0, 0, 335, 327, 1, 0, 0, 0, 335, 329, 1, 0, 0, 0, 336, 51, 1, 0, 0, 0, 337, 338, 5, 54, 0, 0, 338, 339, 5, 55, 0, 0, 339, 340, 5, 52, 0, 0, 340, 341, 5, 66, 0, 0, 341, 53, 1, 0, 0, 0, 342, 343, 5, 37, 0, 0, 343, 344, 5, 59, 0, 0, 344, 345, 3, 56, 28, 0, 345, 346, 5, 62, 0, 0, 346, 348, 3, 58, 29, 0, 347, 349, 3, 60, 30, 0, 348, 347, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 351, 1, 0, 0, 0, 350, 352, 3, 30, 15, 0, 351, 350, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 1, 0, 0, 0, 353, 355, 3, 62, 31, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 55, 1, 0, 0, 0, 356, 362, 3, 76, 38, 0, 357, 362, 3, 66, 33, 0, 358, 362, 3, 64, 32, 0, 359, 362, 3, 98, 49, 0, 360, 362, 3, 94, 47, 0, 361, 356, 1, 0, 0, 0, 361, 357, 1, 0, 0, 0, 361, 358, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 360, 1, 0, 0, 0, 362, 57, 1, 0, 0, 0, 363, 367, 3, 98, 49, 0, 364, 367, 3, 66, 33, 0, 365, 367, 3, 94, 47, 0, 366, 363, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, 366, 365, 1, 0, 0, 0, 367, 59, 1, 0, 0, 0, 368, 369, 5, 38, 0, 0, 369, 370, 3, 72, 36, 0, 370, 61, 1, 0, 0, 0, 371, 377, 5, 39, 0, 0, 372, 378, 3, 80, 40, 0, 373, 378, 3, 66, 33, 0, 374, 378, 3, 64, 32, 0, 375, 378, 3, 94, 47, 0, 376, 378, 3, 100, 50, 0, 377, 372, 1, 0, 0, 0, 377, 373, 1, 0, 0, 0, 377, 374, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 377, 376, 1, 0, 0, 0, 378, 63, 1, 0, 0, 0, 379, 380, 5, 65, 0, 0, 380, 384, 5, 66, 0, 0, 381, 382, 5, 65, 0, 0, 382, 384, 3, 108, 54, 0, 383, 379, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 384, 65, 1, 0, 0, 0, 385, 388, 5, 66, 0, 0, 386, 388, 3, 108, 54, 0, 387, 385, 1, 0, 0, 0, 387, 386, 1, 0, 0, 0, 388, 67, 1, 0, 0, 0, 389, 397, 3, 70, 35, 0, 390, 397, 3, 72, 36, 0, 391, 397, 3, 74, 37, 0, 392, 397, 3, 76, 38, 0, 393, 397, 3, 78, 39, 0, 394, 397, 3, 80, 40, 0, 395, 397, 3, 82, 41, 0, 396, 389, 1, 0, 0, 0, 396, 390, 1, 0, 0, 0, 396, 391, 1, 0, 0, 0, 396, 392, 1, 0, 0, 0, 396, 393, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 396, 395, 1, 0, 0, 0, 397, 69, 1, 0, 0, 0, 398, 400, 5, 9, 0, 0, 399, 401, 3, 104, 52, 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, 71, 1, 0, 0, 0, 404, 416, 5, 13, 0, 0, 405, 410, 3, 84, 42, 0, 406, 407, 5, 8, 0, 0, 407, 409, 3, 84, 42, 0, 408, 406, 1, 0, 0, 0, 409, 412, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 413, 415, 5, 8, 0, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 417, 1, 0, 0, 0, 416, 405, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 1, 0, 0, 0, 418, 419, 5, 14, 0, 0, 419, 73, 1, 0, 0, 0, 420, 421, 5, 50, 0, 0, 421, 75, 1, 0, 0, 0, 422, 423, 5, 68, 0, 0, 423, 77, 1, 0, 0, 0, 424, 425, 5, 70, 0, 0, 425, 79, 1, 0, 0, 0, 426, 427, 5, 69, 0, 0, 427, 81, 1, 0, 0, 0, 428, 429, 7, 1, 0, 0, 429, 83, 1, 0, 0, 0, 430, 431, 3, 88, 44, 0, 431, 432, 5, 5, 0, 0, 432, 433, 3, 116, 58, 0, 433, 440, 1, 0, 0, 0, 434, 435, 3, 86, 43, 0, 435, 436, 5, 5, 0, 0, 436, 437, 3, 116, 58, 0, 437, 440, 1, 0, 0, 0, 438, 440, 3, 66, 33, 0, 439, 430, 1, 0, 0, 0, 439, 434, 1, 0, 0, 0, 439, 438, 1, 0, 0, 0, 440, 85, 1, 0, 0, 0, 441, 442, 5, 9, 0, 0, 442, 443, 3, 116, 58, 0, 443, 444, 5, 10, 0, 0, 444, 87, 1, 0, 0, 0, 445, 451, 5, 66, 0, 0, 446, 451, 3, 76, 38, 0, 447, 451, 3, 64, 32, 0, 448, 451, 3, 108, 54, 0, 449, 451, 3, 110, 55, 0, 450, 445, 1, 0, 0, 0, 450, 446, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 450, 448, 1, 0, 0, 0, 450, 449, 1, 0, 0, 0, 451, 89, 1, 0, 0, 0, 452, 453, 3, 92, 46, 0, 453, 454, 5, 66, 0, 0, 454, 91, 1, 0, 0, 0, 455, 457, 5, 71, 0, 0, 456, 455, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 93, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 463, 3, 96, 48, 0, 462, 464, 3, 106, 53, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, 0, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 95, 1, 0, 0, 0, 467, 473, 3, 66, 33, 0, 468, 473, 3, 64, 32, 0, 469, 473, 3, 70, 35, 0, 470, 473, 3, 72, 36, 0, 471, 473, 3, 100, 50, 0, 472, 467, 1, 0, 0, 0, 472, 468, 1, 0, 0, 0, 472, 469, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, 471, 1, 0, 0, 0, 473, 97, 1, 0, 0, 0, 474, 476, 3, 100, 50, 0, 475, 477, 3, 142, 71, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 99, 1, 0, 0, 0, 478, 479, 3, 92, 46, 0, 479, 480, 3, 102, 51, 0, 480, 482, 5, 11, 0, 0, 481, 483, 3, 104, 52, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 5, 12, 0, 0, 485, 101, 1, 0, 0, 0, 486, 490, 5, 66, 0, 0, 487, 490, 3, 108, 54, 0, 488, 490, 3, 110, 55, 0, 489, 486, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, 103, 1, 0, 0, 0, 491, 496, 3, 116, 58, 0, 492, 493, 5, 8, 0, 0, 493, 495, 3, 116, 58, 0, 494, 492, 1, 0, 0, 0, 495, 498, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 501, 5, 8, 0, 0, 500, 499, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 105, 1, 0, 0, 0, 502, 504, 3, 142, 71, 0, 503, 502, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 5, 7, 0, 0, 506, 514, 3, 88, 44, 0, 507, 508, 3, 142, 71, 0, 508, 509, 5, 7, 0, 0, 509, 511, 1, 0, 0, 0, 510, 507, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, 514, 3, 86, 43, 0, 513, 503, 1, 0, 0, 0, 513, 510, 1, 0, 0, 0, 514, 107, 1, 0, 0, 0, 515, 516, 7, 2, 0, 0, 516, 109, 1, 0, 0, 0, 517, 518, 7, 3, 0, 0, 518, 111, 1, 0, 0, 0, 519, 520, 3, 114, 57, 0, 520, 521, 5, 30, 0, 0, 521, 522, 3, 114, 57, 0, 522, 113, 1, 0, 0, 0, 523, 527, 3, 80, 40, 0, 524, 527, 3, 66, 33, 0, 525, 527, 3, 64, 32, 0, 526, 523, 1, 0, 0, 0, 526, 524, 1, 0, 0, 0, 526, 525, 1, 0, 0, 0, 527, 115, 1, 0, 0, 0, 528, 529, 6, 58, -1, 0, 529, 530, 3, 130, 65, 0, 530, 531, 3, 116, 58, 5, 531, 534, 1, 0, 0, 0, 532, 534, 3, 118, 59, 0, 533, 528, 1, 0, 0, 0, 533, 532, 1, 0, 0, 0, 534, 552, 1, 0, 0, 0, 535, 536, 10, 4, 0, 0, 536, 537, 3, 134, 67, 0, 537, 538, 3, 116, 58, 5, 538, 551, 1, 0, 0, 0, 539, 540, 10, 3, 0, 0, 540, 541, 3, 136, 68, 0, 541, 542, 3, 116, 58, 4, 542, 551, 1, 0, 0, 0, 543, 544, 10, 2, 0, 0, 544, 546, 5, 32, 0, 0, 545, 547, 3, 116, 58, 0, 546, 545, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 5, 5, 0, 0, 549, 551, 3, 116, 58, 3, 550, 535, 1, 0, 0, 0, 550, 539, 1, 0, 0, 0, 550, 543, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 117, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, 555, 556, 6, 59, -1, 0, 556, 557, 3, 120, 60, 0, 557, 576, 1, 0, 0, 0, 558, 559, 10, 5, 0, 0, 559, 560, 3, 124, 62, 0, 560, 561, 3, 118, 59, 6, 561, 575, 1, 0, 0, 0, 562, 563, 10, 4, 0, 0, 563, 564, 3, 122, 61, 0, 564, 565, 3, 118, 59, 5, 565, 575, 1, 0, 0, 0, 566, 567, 10, 3, 0, 0, 567, 568, 3, 126, 63, 0, 568, 569, 3, 118, 59, 4, 569, 575, 1, 0, 0, 0, 570, 571, 10, 2, 0, 0, 571, 572, 3, 128, 64, 0, 572, 573, 3, 118, 59, 3, 573, 575, 1, 0, 0, 0, 574, 558, 1, 0, 0, 0, 574, 562, 1, 0, 0, 0, 574, 566, 1, 0, 0, 0, 574, 570, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, 576, 577, 1, 0, 0, 0, 577, 119, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, 580, 6, 60, -1, 0, 580, 597, 3, 98, 49, 0, 581, 597, 3, 112, 56, 0, 582, 597, 3, 68, 34, 0, 583, 597, 3, 66, 33, 0, 584, 597, 3, 94, 47, 0, 585, 597, 3, 64, 32, 0, 586, 590, 5, 11, 0, 0, 587, 591, 3, 18, 9, 0, 588, 591, 3, 54, 27, 0, 589, 591, 3, 116, 58, 0, 590, 587, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 590, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 5, 12, 0, 0, 593, 595, 3, 142, 71, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 1, 0, 0, 0, 596, 579, 1, 0, 0, 0, 596, 581, 1, 0, 0, 0, 596, 582, 1, 0, 0, 0, 596, 583, 1, 0, 0, 0, 596, 584, 1, 0, 0, 0, 596, 585, 1, 0, 0, 0, 596, 586, 1, 0, 0, 0, 597, 612, 1, 0, 0, 0, 598, 599, 10, 10, 0, 0, 599, 600, 3, 138, 69, 0, 600, 601, 3, 120, 60, 11, 601, 611, 1, 0, 0, 0, 602, 603, 10, 9, 0, 0, 603, 604, 3, 140, 70, 0, 604, 605, 3, 120, 60, 10, 605, 611, 1, 0, 0, 0, 606, 607, 10, 8, 0, 0, 607, 608, 3, 132, 66, 0, 608, 609, 3, 120, 60, 9, 609, 611, 1, 0, 0, 0, 610, 598, 1, 0, 0, 0, 610, 602, 1, 0, 0, 0, 610, 606, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 121, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, 618, 7, 4, 0, 0, 616, 619, 3, 126, 63, 0, 617, 619, 3, 124, 62, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 123, 1, 0, 0, 0, 620, 621, 7, 5, 0, 0, 621, 125, 1, 0, 0, 0, 622, 624, 5, 61, 0, 0, 623, 622, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 5, 62, 0, 0, 626, 127, 1, 0, 0, 0, 627, 629, 5, 61, 0, 0, 628, 627, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 5, 60, 0, 0, 631, 129, 1, 0, 0, 0, 632, 633, 7, 6, 0, 0, 633, 131, 1, 0, 0, 0, 634, 635, 7, 7, 0, 0, 635, 133, 1, 0, 0, 0, 636, 637, 5, 28, 0, 0, 637, 135, 1, 0, 0, 0, 638, 639, 5, 29, 0, 0, 639, 137, 1, 0, 0, 0, 640, 641, 7, 8, 0, 0, 641, 139, 1, 0, 0, 0, 642, 643, 7, 9, 0, 0, 643, 141, 1, 0, 0, 0, 644, 645, 5, 32, 0, 0, 645, 143, 1, 0, 0, 0, 66, 147, 162, 170, 174, 185, 189, 197, 204, 212, 219, 224, 233, 239, 243, 247, 251, 260, 267, 275, 280, 300, 311, 320, 333, 335, 348, 351, 354, 361, 366, 377, 383, 387, 396, 400, 410, 414, 416, 439, 450, 458, 465, 472, 476, 482, 489, 496, 500, 503, 510, 513, 526, 533, 546, 550, 552, 574, 576, 590, 594, 596, 610, 612, 618, 623, 628] \ No newline at end of file diff --git a/pkg/parser/fql/fql_parser.go b/pkg/parser/fql/fql_parser.go index fd399060b..d8f0a3328 100644 --- a/pkg/parser/fql/fql_parser.go +++ b/pkg/parser/fql/fql_parser.go @@ -58,9 +58,9 @@ func fqlparserParserInit() { "program", "head", "useExpression", "use", "body", "bodyStatement", "bodyExpression", "variableDeclaration", "returnExpression", "forExpression", "forExpressionSource", "forExpressionClause", "forExpressionStatement", - "forExpressionReturn", "filterClause", "limitClause", "limitClauseValue", - "sortClause", "sortClauseExpression", "collectClause", "collectSelector", - "collectGrouping", "collectAggregator", "collectAggregateSelector", + "forExpressionBody", "forExpressionReturn", "filterClause", "limitClause", + "limitClauseValue", "sortClause", "sortClauseExpression", "collectClause", + "collectSelector", "collectGrouping", "collectAggregator", "collectAggregateSelector", "collectGroupVariable", "collectCounter", "waitForExpression", "waitForEventName", "waitForEventSource", "optionsClause", "timeoutClause", "param", "variable", "literal", "arrayLiteral", "objectLiteral", "booleanLiteral", "stringLiteral", @@ -75,7 +75,7 @@ func fqlparserParserInit() { } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 72, 653, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 72, 647, 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, @@ -88,289 +88,286 @@ func fqlparserParserInit() { 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 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, 1, 0, 5, 0, 144, 8, 0, 10, 0, 12, 0, - 147, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, - 5, 4, 159, 8, 4, 10, 4, 12, 4, 162, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, - 3, 5, 169, 8, 5, 1, 6, 1, 6, 3, 6, 173, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, - 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 184, 8, 7, 1, 8, 1, 8, 3, 8, 188, 8, 8, - 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 196, 8, 9, 1, 9, 1, 9, 1, 9, - 5, 9, 201, 8, 9, 10, 9, 12, 9, 204, 9, 9, 1, 9, 5, 9, 207, 8, 9, 10, 9, - 12, 9, 210, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 217, 8, 9, 1, 9, - 1, 9, 1, 9, 5, 9, 222, 8, 9, 10, 9, 12, 9, 225, 9, 9, 1, 9, 5, 9, 228, - 8, 9, 10, 9, 12, 9, 231, 9, 9, 1, 9, 1, 9, 3, 9, 235, 8, 9, 1, 10, 1, 10, - 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 244, 8, 10, 1, 11, 1, 11, 1, - 11, 1, 11, 3, 11, 250, 8, 11, 1, 12, 1, 12, 3, 12, 254, 8, 12, 1, 13, 1, - 13, 3, 13, 258, 8, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, - 3, 15, 267, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 274, 8, 16, - 1, 17, 1, 17, 1, 17, 1, 17, 5, 17, 280, 8, 17, 10, 17, 12, 17, 283, 9, - 17, 1, 18, 1, 18, 3, 18, 287, 8, 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, 19, 1, 19, 1, - 19, 1, 19, 1, 19, 3, 19, 307, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, - 1, 21, 1, 21, 5, 21, 316, 8, 21, 10, 21, 12, 21, 319, 9, 21, 1, 22, 1, - 22, 1, 22, 1, 22, 5, 22, 325, 8, 22, 10, 22, 12, 22, 328, 9, 22, 1, 23, - 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 340, - 8, 24, 3, 24, 342, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, - 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 355, 8, 26, 1, 26, 3, 26, 358, 8, - 26, 1, 26, 3, 26, 361, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, - 368, 8, 27, 1, 28, 1, 28, 1, 28, 3, 28, 373, 8, 28, 1, 29, 1, 29, 1, 29, - 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 384, 8, 30, 1, 31, 1, - 31, 1, 31, 1, 31, 3, 31, 390, 8, 31, 1, 32, 1, 32, 3, 32, 394, 8, 32, 1, - 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 403, 8, 33, 1, 34, - 1, 34, 3, 34, 407, 8, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 5, - 35, 415, 8, 35, 10, 35, 12, 35, 418, 9, 35, 1, 35, 3, 35, 421, 8, 35, 3, - 35, 423, 8, 35, 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, 41, 1, 41, 1, 41, 1, 41, 1, - 41, 1, 41, 1, 41, 3, 41, 446, 8, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, - 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 457, 8, 43, 1, 44, 1, 44, 1, 44, 1, - 45, 5, 45, 463, 8, 45, 10, 45, 12, 45, 466, 9, 45, 1, 46, 1, 46, 4, 46, - 470, 8, 46, 11, 46, 12, 46, 471, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, - 47, 479, 8, 47, 1, 48, 1, 48, 3, 48, 483, 8, 48, 1, 49, 1, 49, 1, 49, 1, - 49, 3, 49, 489, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 3, 50, 496, 8, - 50, 1, 51, 1, 51, 1, 51, 5, 51, 501, 8, 51, 10, 51, 12, 51, 504, 9, 51, - 1, 51, 3, 51, 507, 8, 51, 1, 52, 3, 52, 510, 8, 52, 1, 52, 1, 52, 1, 52, - 1, 52, 1, 52, 3, 52, 517, 8, 52, 1, 52, 3, 52, 520, 8, 52, 1, 53, 1, 53, - 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 3, 56, 533, - 8, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 540, 8, 57, 1, 57, 1, - 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, - 553, 8, 57, 1, 57, 1, 57, 5, 57, 557, 8, 57, 10, 57, 12, 57, 560, 9, 57, - 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, - 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 5, 58, 581, - 8, 58, 10, 58, 12, 58, 584, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, - 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 597, 8, 59, 1, 59, 1, 59, - 3, 59, 601, 8, 59, 3, 59, 603, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, - 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 5, 59, 617, 8, 59, 10, - 59, 12, 59, 620, 9, 59, 1, 60, 1, 60, 1, 60, 3, 60, 625, 8, 60, 1, 61, - 1, 61, 1, 62, 3, 62, 630, 8, 62, 1, 62, 1, 62, 1, 63, 3, 63, 635, 8, 63, - 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, 70, 0, 3, 114, 116, 118, 71, - 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, 0, 10, 1, 0, 66, 67, 1, 0, 48, 49, 4, 0, 28, 29, 38, 44, 46, - 47, 52, 59, 4, 0, 35, 37, 45, 45, 48, 51, 60, 64, 2, 0, 48, 48, 56, 57, - 1, 0, 15, 20, 2, 0, 24, 25, 61, 61, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, - 25, 694, 0, 145, 1, 0, 0, 0, 2, 150, 1, 0, 0, 0, 4, 152, 1, 0, 0, 0, 6, - 154, 1, 0, 0, 0, 8, 160, 1, 0, 0, 0, 10, 168, 1, 0, 0, 0, 12, 172, 1, 0, - 0, 0, 14, 183, 1, 0, 0, 0, 16, 185, 1, 0, 0, 0, 18, 234, 1, 0, 0, 0, 20, - 243, 1, 0, 0, 0, 22, 249, 1, 0, 0, 0, 24, 253, 1, 0, 0, 0, 26, 257, 1, - 0, 0, 0, 28, 259, 1, 0, 0, 0, 30, 262, 1, 0, 0, 0, 32, 273, 1, 0, 0, 0, - 34, 275, 1, 0, 0, 0, 36, 284, 1, 0, 0, 0, 38, 306, 1, 0, 0, 0, 40, 308, - 1, 0, 0, 0, 42, 312, 1, 0, 0, 0, 44, 320, 1, 0, 0, 0, 46, 329, 1, 0, 0, - 0, 48, 341, 1, 0, 0, 0, 50, 343, 1, 0, 0, 0, 52, 348, 1, 0, 0, 0, 54, 367, - 1, 0, 0, 0, 56, 372, 1, 0, 0, 0, 58, 374, 1, 0, 0, 0, 60, 377, 1, 0, 0, - 0, 62, 389, 1, 0, 0, 0, 64, 393, 1, 0, 0, 0, 66, 402, 1, 0, 0, 0, 68, 404, - 1, 0, 0, 0, 70, 410, 1, 0, 0, 0, 72, 426, 1, 0, 0, 0, 74, 428, 1, 0, 0, - 0, 76, 430, 1, 0, 0, 0, 78, 432, 1, 0, 0, 0, 80, 434, 1, 0, 0, 0, 82, 445, - 1, 0, 0, 0, 84, 447, 1, 0, 0, 0, 86, 456, 1, 0, 0, 0, 88, 458, 1, 0, 0, - 0, 90, 464, 1, 0, 0, 0, 92, 467, 1, 0, 0, 0, 94, 478, 1, 0, 0, 0, 96, 480, - 1, 0, 0, 0, 98, 484, 1, 0, 0, 0, 100, 495, 1, 0, 0, 0, 102, 497, 1, 0, - 0, 0, 104, 519, 1, 0, 0, 0, 106, 521, 1, 0, 0, 0, 108, 523, 1, 0, 0, 0, - 110, 525, 1, 0, 0, 0, 112, 532, 1, 0, 0, 0, 114, 539, 1, 0, 0, 0, 116, - 561, 1, 0, 0, 0, 118, 602, 1, 0, 0, 0, 120, 621, 1, 0, 0, 0, 122, 626, - 1, 0, 0, 0, 124, 629, 1, 0, 0, 0, 126, 634, 1, 0, 0, 0, 128, 638, 1, 0, - 0, 0, 130, 640, 1, 0, 0, 0, 132, 642, 1, 0, 0, 0, 134, 644, 1, 0, 0, 0, - 136, 646, 1, 0, 0, 0, 138, 648, 1, 0, 0, 0, 140, 650, 1, 0, 0, 0, 142, - 144, 3, 2, 1, 0, 143, 142, 1, 0, 0, 0, 144, 147, 1, 0, 0, 0, 145, 143, - 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 145, 1, 0, - 0, 0, 148, 149, 3, 8, 4, 0, 149, 1, 1, 0, 0, 0, 150, 151, 3, 4, 2, 0, 151, - 3, 1, 0, 0, 0, 152, 153, 3, 6, 3, 0, 153, 5, 1, 0, 0, 0, 154, 155, 5, 51, - 0, 0, 155, 156, 3, 88, 44, 0, 156, 7, 1, 0, 0, 0, 157, 159, 3, 10, 5, 0, - 158, 157, 1, 0, 0, 0, 159, 162, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 160, - 161, 1, 0, 0, 0, 161, 163, 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 163, 164, - 3, 12, 6, 0, 164, 9, 1, 0, 0, 0, 165, 169, 3, 14, 7, 0, 166, 169, 3, 96, - 48, 0, 167, 169, 3, 52, 26, 0, 168, 165, 1, 0, 0, 0, 168, 166, 1, 0, 0, - 0, 168, 167, 1, 0, 0, 0, 169, 11, 1, 0, 0, 0, 170, 173, 3, 16, 8, 0, 171, - 173, 3, 18, 9, 0, 172, 170, 1, 0, 0, 0, 172, 171, 1, 0, 0, 0, 173, 13, - 1, 0, 0, 0, 174, 175, 5, 45, 0, 0, 175, 176, 7, 0, 0, 0, 176, 177, 5, 31, - 0, 0, 177, 184, 3, 114, 57, 0, 178, 179, 5, 45, 0, 0, 179, 180, 3, 106, - 53, 0, 180, 181, 5, 31, 0, 0, 181, 182, 3, 114, 57, 0, 182, 184, 1, 0, - 0, 0, 183, 174, 1, 0, 0, 0, 183, 178, 1, 0, 0, 0, 184, 15, 1, 0, 0, 0, - 185, 187, 5, 36, 0, 0, 186, 188, 5, 40, 0, 0, 187, 186, 1, 0, 0, 0, 187, - 188, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 3, 114, 57, 0, 190, 17, - 1, 0, 0, 0, 191, 192, 5, 35, 0, 0, 192, 195, 7, 0, 0, 0, 193, 194, 5, 8, - 0, 0, 194, 196, 5, 66, 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, - 196, 197, 1, 0, 0, 0, 197, 198, 5, 62, 0, 0, 198, 202, 3, 20, 10, 0, 199, - 201, 3, 22, 11, 0, 200, 199, 1, 0, 0, 0, 201, 204, 1, 0, 0, 0, 202, 200, - 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 208, 1, 0, 0, 0, 204, 202, 1, 0, - 0, 0, 205, 207, 3, 24, 12, 0, 206, 205, 1, 0, 0, 0, 207, 210, 1, 0, 0, - 0, 208, 206, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 211, 1, 0, 0, 0, 210, - 208, 1, 0, 0, 0, 211, 212, 3, 26, 13, 0, 212, 235, 1, 0, 0, 0, 213, 214, - 5, 35, 0, 0, 214, 216, 7, 0, 0, 0, 215, 217, 5, 63, 0, 0, 216, 215, 1, - 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 5, 64, 0, - 0, 219, 223, 3, 114, 57, 0, 220, 222, 3, 22, 11, 0, 221, 220, 1, 0, 0, - 0, 222, 225, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 223, 224, 1, 0, 0, 0, 224, - 229, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 228, 3, 24, 12, 0, 227, 226, - 1, 0, 0, 0, 228, 231, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 229, 230, 1, 0, - 0, 0, 230, 232, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 232, 233, 3, 26, 13, - 0, 233, 235, 1, 0, 0, 0, 234, 191, 1, 0, 0, 0, 234, 213, 1, 0, 0, 0, 235, - 19, 1, 0, 0, 0, 236, 244, 3, 96, 48, 0, 237, 244, 3, 68, 34, 0, 238, 244, - 3, 70, 35, 0, 239, 244, 3, 64, 32, 0, 240, 244, 3, 92, 46, 0, 241, 244, - 3, 110, 55, 0, 242, 244, 3, 62, 31, 0, 243, 236, 1, 0, 0, 0, 243, 237, - 1, 0, 0, 0, 243, 238, 1, 0, 0, 0, 243, 239, 1, 0, 0, 0, 243, 240, 1, 0, - 0, 0, 243, 241, 1, 0, 0, 0, 243, 242, 1, 0, 0, 0, 244, 21, 1, 0, 0, 0, - 245, 250, 3, 30, 15, 0, 246, 250, 3, 34, 17, 0, 247, 250, 3, 28, 14, 0, - 248, 250, 3, 38, 19, 0, 249, 245, 1, 0, 0, 0, 249, 246, 1, 0, 0, 0, 249, - 247, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 23, 1, 0, 0, 0, 251, 254, 3, - 14, 7, 0, 252, 254, 3, 96, 48, 0, 253, 251, 1, 0, 0, 0, 253, 252, 1, 0, - 0, 0, 254, 25, 1, 0, 0, 0, 255, 258, 3, 16, 8, 0, 256, 258, 3, 18, 9, 0, - 257, 255, 1, 0, 0, 0, 257, 256, 1, 0, 0, 0, 258, 27, 1, 0, 0, 0, 259, 260, - 5, 41, 0, 0, 260, 261, 3, 114, 57, 0, 261, 29, 1, 0, 0, 0, 262, 263, 5, - 44, 0, 0, 263, 266, 3, 32, 16, 0, 264, 265, 5, 8, 0, 0, 265, 267, 3, 32, - 16, 0, 266, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 31, 1, 0, 0, 0, - 268, 274, 3, 78, 39, 0, 269, 274, 3, 62, 31, 0, 270, 274, 3, 64, 32, 0, - 271, 274, 3, 96, 48, 0, 272, 274, 3, 92, 46, 0, 273, 268, 1, 0, 0, 0, 273, - 269, 1, 0, 0, 0, 273, 270, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 272, - 1, 0, 0, 0, 274, 33, 1, 0, 0, 0, 275, 276, 5, 43, 0, 0, 276, 281, 3, 36, - 18, 0, 277, 278, 5, 8, 0, 0, 278, 280, 3, 36, 18, 0, 279, 277, 1, 0, 0, - 0, 280, 283, 1, 0, 0, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, - 35, 1, 0, 0, 0, 283, 281, 1, 0, 0, 0, 284, 286, 3, 114, 57, 0, 285, 287, - 5, 47, 0, 0, 286, 285, 1, 0, 0, 0, 286, 287, 1, 0, 0, 0, 287, 37, 1, 0, - 0, 0, 288, 289, 5, 46, 0, 0, 289, 307, 3, 50, 25, 0, 290, 291, 5, 46, 0, - 0, 291, 307, 3, 44, 22, 0, 292, 293, 5, 46, 0, 0, 293, 294, 3, 42, 21, - 0, 294, 295, 3, 44, 22, 0, 295, 307, 1, 0, 0, 0, 296, 297, 5, 46, 0, 0, - 297, 298, 3, 42, 21, 0, 298, 299, 3, 48, 24, 0, 299, 307, 1, 0, 0, 0, 300, - 301, 5, 46, 0, 0, 301, 302, 3, 42, 21, 0, 302, 303, 3, 50, 25, 0, 303, - 307, 1, 0, 0, 0, 304, 305, 5, 46, 0, 0, 305, 307, 3, 42, 21, 0, 306, 288, - 1, 0, 0, 0, 306, 290, 1, 0, 0, 0, 306, 292, 1, 0, 0, 0, 306, 296, 1, 0, - 0, 0, 306, 300, 1, 0, 0, 0, 306, 304, 1, 0, 0, 0, 307, 39, 1, 0, 0, 0, - 308, 309, 5, 66, 0, 0, 309, 310, 5, 31, 0, 0, 310, 311, 3, 114, 57, 0, - 311, 41, 1, 0, 0, 0, 312, 317, 3, 40, 20, 0, 313, 314, 5, 8, 0, 0, 314, - 316, 3, 40, 20, 0, 315, 313, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, - 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 43, 1, 0, 0, 0, 319, 317, 1, 0, - 0, 0, 320, 321, 5, 58, 0, 0, 321, 326, 3, 46, 23, 0, 322, 323, 5, 8, 0, - 0, 323, 325, 3, 46, 23, 0, 324, 322, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, - 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 45, 1, 0, 0, 0, 328, 326, - 1, 0, 0, 0, 329, 330, 5, 66, 0, 0, 330, 331, 5, 31, 0, 0, 331, 332, 3, - 96, 48, 0, 332, 47, 1, 0, 0, 0, 333, 334, 5, 52, 0, 0, 334, 342, 3, 40, - 20, 0, 335, 336, 5, 52, 0, 0, 336, 339, 5, 66, 0, 0, 337, 338, 5, 53, 0, - 0, 338, 340, 5, 66, 0, 0, 339, 337, 1, 0, 0, 0, 339, 340, 1, 0, 0, 0, 340, - 342, 1, 0, 0, 0, 341, 333, 1, 0, 0, 0, 341, 335, 1, 0, 0, 0, 342, 49, 1, - 0, 0, 0, 343, 344, 5, 54, 0, 0, 344, 345, 5, 55, 0, 0, 345, 346, 5, 52, - 0, 0, 346, 347, 5, 66, 0, 0, 347, 51, 1, 0, 0, 0, 348, 349, 5, 37, 0, 0, - 349, 350, 5, 59, 0, 0, 350, 351, 3, 54, 27, 0, 351, 352, 5, 62, 0, 0, 352, - 354, 3, 56, 28, 0, 353, 355, 3, 58, 29, 0, 354, 353, 1, 0, 0, 0, 354, 355, - 1, 0, 0, 0, 355, 357, 1, 0, 0, 0, 356, 358, 3, 28, 14, 0, 357, 356, 1, - 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 360, 1, 0, 0, 0, 359, 361, 3, 60, 30, - 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 53, 1, 0, 0, 0, 362, - 368, 3, 74, 37, 0, 363, 368, 3, 64, 32, 0, 364, 368, 3, 62, 31, 0, 365, - 368, 3, 96, 48, 0, 366, 368, 3, 92, 46, 0, 367, 362, 1, 0, 0, 0, 367, 363, - 1, 0, 0, 0, 367, 364, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 367, 366, 1, 0, - 0, 0, 368, 55, 1, 0, 0, 0, 369, 373, 3, 96, 48, 0, 370, 373, 3, 64, 32, - 0, 371, 373, 3, 92, 46, 0, 372, 369, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, - 372, 371, 1, 0, 0, 0, 373, 57, 1, 0, 0, 0, 374, 375, 5, 38, 0, 0, 375, - 376, 3, 70, 35, 0, 376, 59, 1, 0, 0, 0, 377, 383, 5, 39, 0, 0, 378, 384, - 3, 78, 39, 0, 379, 384, 3, 64, 32, 0, 380, 384, 3, 62, 31, 0, 381, 384, - 3, 92, 46, 0, 382, 384, 3, 98, 49, 0, 383, 378, 1, 0, 0, 0, 383, 379, 1, - 0, 0, 0, 383, 380, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 382, 1, 0, 0, - 0, 384, 61, 1, 0, 0, 0, 385, 386, 5, 65, 0, 0, 386, 390, 5, 66, 0, 0, 387, - 388, 5, 65, 0, 0, 388, 390, 3, 106, 53, 0, 389, 385, 1, 0, 0, 0, 389, 387, - 1, 0, 0, 0, 390, 63, 1, 0, 0, 0, 391, 394, 5, 66, 0, 0, 392, 394, 3, 106, - 53, 0, 393, 391, 1, 0, 0, 0, 393, 392, 1, 0, 0, 0, 394, 65, 1, 0, 0, 0, - 395, 403, 3, 68, 34, 0, 396, 403, 3, 70, 35, 0, 397, 403, 3, 72, 36, 0, - 398, 403, 3, 74, 37, 0, 399, 403, 3, 76, 38, 0, 400, 403, 3, 78, 39, 0, - 401, 403, 3, 80, 40, 0, 402, 395, 1, 0, 0, 0, 402, 396, 1, 0, 0, 0, 402, - 397, 1, 0, 0, 0, 402, 398, 1, 0, 0, 0, 402, 399, 1, 0, 0, 0, 402, 400, - 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 67, 1, 0, 0, 0, 404, 406, 5, 9, - 0, 0, 405, 407, 3, 102, 51, 0, 406, 405, 1, 0, 0, 0, 406, 407, 1, 0, 0, - 0, 407, 408, 1, 0, 0, 0, 408, 409, 5, 10, 0, 0, 409, 69, 1, 0, 0, 0, 410, - 422, 5, 13, 0, 0, 411, 416, 3, 82, 41, 0, 412, 413, 5, 8, 0, 0, 413, 415, - 3, 82, 41, 0, 414, 412, 1, 0, 0, 0, 415, 418, 1, 0, 0, 0, 416, 414, 1, - 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 420, 1, 0, 0, 0, 418, 416, 1, 0, 0, - 0, 419, 421, 5, 8, 0, 0, 420, 419, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, - 423, 1, 0, 0, 0, 422, 411, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 424, - 1, 0, 0, 0, 424, 425, 5, 14, 0, 0, 425, 71, 1, 0, 0, 0, 426, 427, 5, 50, - 0, 0, 427, 73, 1, 0, 0, 0, 428, 429, 5, 68, 0, 0, 429, 75, 1, 0, 0, 0, - 430, 431, 5, 70, 0, 0, 431, 77, 1, 0, 0, 0, 432, 433, 5, 69, 0, 0, 433, - 79, 1, 0, 0, 0, 434, 435, 7, 1, 0, 0, 435, 81, 1, 0, 0, 0, 436, 437, 3, - 86, 43, 0, 437, 438, 5, 5, 0, 0, 438, 439, 3, 114, 57, 0, 439, 446, 1, - 0, 0, 0, 440, 441, 3, 84, 42, 0, 441, 442, 5, 5, 0, 0, 442, 443, 3, 114, - 57, 0, 443, 446, 1, 0, 0, 0, 444, 446, 3, 64, 32, 0, 445, 436, 1, 0, 0, - 0, 445, 440, 1, 0, 0, 0, 445, 444, 1, 0, 0, 0, 446, 83, 1, 0, 0, 0, 447, - 448, 5, 9, 0, 0, 448, 449, 3, 114, 57, 0, 449, 450, 5, 10, 0, 0, 450, 85, - 1, 0, 0, 0, 451, 457, 5, 66, 0, 0, 452, 457, 3, 74, 37, 0, 453, 457, 3, - 62, 31, 0, 454, 457, 3, 106, 53, 0, 455, 457, 3, 108, 54, 0, 456, 451, - 1, 0, 0, 0, 456, 452, 1, 0, 0, 0, 456, 453, 1, 0, 0, 0, 456, 454, 1, 0, - 0, 0, 456, 455, 1, 0, 0, 0, 457, 87, 1, 0, 0, 0, 458, 459, 3, 90, 45, 0, - 459, 460, 5, 66, 0, 0, 460, 89, 1, 0, 0, 0, 461, 463, 5, 71, 0, 0, 462, - 461, 1, 0, 0, 0, 463, 466, 1, 0, 0, 0, 464, 462, 1, 0, 0, 0, 464, 465, - 1, 0, 0, 0, 465, 91, 1, 0, 0, 0, 466, 464, 1, 0, 0, 0, 467, 469, 3, 94, - 47, 0, 468, 470, 3, 104, 52, 0, 469, 468, 1, 0, 0, 0, 470, 471, 1, 0, 0, - 0, 471, 469, 1, 0, 0, 0, 471, 472, 1, 0, 0, 0, 472, 93, 1, 0, 0, 0, 473, - 479, 3, 64, 32, 0, 474, 479, 3, 62, 31, 0, 475, 479, 3, 68, 34, 0, 476, - 479, 3, 70, 35, 0, 477, 479, 3, 98, 49, 0, 478, 473, 1, 0, 0, 0, 478, 474, - 1, 0, 0, 0, 478, 475, 1, 0, 0, 0, 478, 476, 1, 0, 0, 0, 478, 477, 1, 0, - 0, 0, 479, 95, 1, 0, 0, 0, 480, 482, 3, 98, 49, 0, 481, 483, 3, 140, 70, - 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, 0, 0, 483, 97, 1, 0, 0, 0, 484, - 485, 3, 90, 45, 0, 485, 486, 3, 100, 50, 0, 486, 488, 5, 11, 0, 0, 487, - 489, 3, 102, 51, 0, 488, 487, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 490, - 1, 0, 0, 0, 490, 491, 5, 12, 0, 0, 491, 99, 1, 0, 0, 0, 492, 496, 5, 66, - 0, 0, 493, 496, 3, 106, 53, 0, 494, 496, 3, 108, 54, 0, 495, 492, 1, 0, - 0, 0, 495, 493, 1, 0, 0, 0, 495, 494, 1, 0, 0, 0, 496, 101, 1, 0, 0, 0, - 497, 502, 3, 114, 57, 0, 498, 499, 5, 8, 0, 0, 499, 501, 3, 114, 57, 0, - 500, 498, 1, 0, 0, 0, 501, 504, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 502, - 503, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 505, 507, - 5, 8, 0, 0, 506, 505, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 103, 1, 0, - 0, 0, 508, 510, 3, 140, 70, 0, 509, 508, 1, 0, 0, 0, 509, 510, 1, 0, 0, - 0, 510, 511, 1, 0, 0, 0, 511, 512, 5, 7, 0, 0, 512, 520, 3, 86, 43, 0, - 513, 514, 3, 140, 70, 0, 514, 515, 5, 7, 0, 0, 515, 517, 1, 0, 0, 0, 516, - 513, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, - 3, 84, 42, 0, 519, 509, 1, 0, 0, 0, 519, 516, 1, 0, 0, 0, 520, 105, 1, - 0, 0, 0, 521, 522, 7, 2, 0, 0, 522, 107, 1, 0, 0, 0, 523, 524, 7, 3, 0, - 0, 524, 109, 1, 0, 0, 0, 525, 526, 3, 112, 56, 0, 526, 527, 5, 30, 0, 0, - 527, 528, 3, 112, 56, 0, 528, 111, 1, 0, 0, 0, 529, 533, 3, 78, 39, 0, - 530, 533, 3, 64, 32, 0, 531, 533, 3, 62, 31, 0, 532, 529, 1, 0, 0, 0, 532, - 530, 1, 0, 0, 0, 532, 531, 1, 0, 0, 0, 533, 113, 1, 0, 0, 0, 534, 535, - 6, 57, -1, 0, 535, 536, 3, 128, 64, 0, 536, 537, 3, 114, 57, 5, 537, 540, - 1, 0, 0, 0, 538, 540, 3, 116, 58, 0, 539, 534, 1, 0, 0, 0, 539, 538, 1, - 0, 0, 0, 540, 558, 1, 0, 0, 0, 541, 542, 10, 4, 0, 0, 542, 543, 3, 132, - 66, 0, 543, 544, 3, 114, 57, 5, 544, 557, 1, 0, 0, 0, 545, 546, 10, 3, - 0, 0, 546, 547, 3, 134, 67, 0, 547, 548, 3, 114, 57, 4, 548, 557, 1, 0, - 0, 0, 549, 550, 10, 2, 0, 0, 550, 552, 5, 32, 0, 0, 551, 553, 3, 114, 57, - 0, 552, 551, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, - 555, 5, 5, 0, 0, 555, 557, 3, 114, 57, 3, 556, 541, 1, 0, 0, 0, 556, 545, - 1, 0, 0, 0, 556, 549, 1, 0, 0, 0, 557, 560, 1, 0, 0, 0, 558, 556, 1, 0, - 0, 0, 558, 559, 1, 0, 0, 0, 559, 115, 1, 0, 0, 0, 560, 558, 1, 0, 0, 0, - 561, 562, 6, 58, -1, 0, 562, 563, 3, 118, 59, 0, 563, 582, 1, 0, 0, 0, - 564, 565, 10, 5, 0, 0, 565, 566, 3, 122, 61, 0, 566, 567, 3, 116, 58, 6, - 567, 581, 1, 0, 0, 0, 568, 569, 10, 4, 0, 0, 569, 570, 3, 120, 60, 0, 570, - 571, 3, 116, 58, 5, 571, 581, 1, 0, 0, 0, 572, 573, 10, 3, 0, 0, 573, 574, - 3, 124, 62, 0, 574, 575, 3, 116, 58, 4, 575, 581, 1, 0, 0, 0, 576, 577, - 10, 2, 0, 0, 577, 578, 3, 126, 63, 0, 578, 579, 3, 116, 58, 3, 579, 581, - 1, 0, 0, 0, 580, 564, 1, 0, 0, 0, 580, 568, 1, 0, 0, 0, 580, 572, 1, 0, - 0, 0, 580, 576, 1, 0, 0, 0, 581, 584, 1, 0, 0, 0, 582, 580, 1, 0, 0, 0, - 582, 583, 1, 0, 0, 0, 583, 117, 1, 0, 0, 0, 584, 582, 1, 0, 0, 0, 585, - 586, 6, 59, -1, 0, 586, 603, 3, 96, 48, 0, 587, 603, 3, 110, 55, 0, 588, - 603, 3, 66, 33, 0, 589, 603, 3, 64, 32, 0, 590, 603, 3, 92, 46, 0, 591, - 603, 3, 62, 31, 0, 592, 596, 5, 11, 0, 0, 593, 597, 3, 18, 9, 0, 594, 597, - 3, 52, 26, 0, 595, 597, 3, 114, 57, 0, 596, 593, 1, 0, 0, 0, 596, 594, - 1, 0, 0, 0, 596, 595, 1, 0, 0, 0, 597, 598, 1, 0, 0, 0, 598, 600, 5, 12, - 0, 0, 599, 601, 3, 140, 70, 0, 600, 599, 1, 0, 0, 0, 600, 601, 1, 0, 0, - 0, 601, 603, 1, 0, 0, 0, 602, 585, 1, 0, 0, 0, 602, 587, 1, 0, 0, 0, 602, - 588, 1, 0, 0, 0, 602, 589, 1, 0, 0, 0, 602, 590, 1, 0, 0, 0, 602, 591, - 1, 0, 0, 0, 602, 592, 1, 0, 0, 0, 603, 618, 1, 0, 0, 0, 604, 605, 10, 10, - 0, 0, 605, 606, 3, 136, 68, 0, 606, 607, 3, 118, 59, 11, 607, 617, 1, 0, - 0, 0, 608, 609, 10, 9, 0, 0, 609, 610, 3, 138, 69, 0, 610, 611, 3, 118, - 59, 10, 611, 617, 1, 0, 0, 0, 612, 613, 10, 8, 0, 0, 613, 614, 3, 130, - 65, 0, 614, 615, 3, 118, 59, 9, 615, 617, 1, 0, 0, 0, 616, 604, 1, 0, 0, - 0, 616, 608, 1, 0, 0, 0, 616, 612, 1, 0, 0, 0, 617, 620, 1, 0, 0, 0, 618, - 616, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 119, 1, 0, 0, 0, 620, 618, - 1, 0, 0, 0, 621, 624, 7, 4, 0, 0, 622, 625, 3, 124, 62, 0, 623, 625, 3, - 122, 61, 0, 624, 622, 1, 0, 0, 0, 624, 623, 1, 0, 0, 0, 625, 121, 1, 0, - 0, 0, 626, 627, 7, 5, 0, 0, 627, 123, 1, 0, 0, 0, 628, 630, 5, 61, 0, 0, - 629, 628, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 1, 0, 0, 0, 631, - 632, 5, 62, 0, 0, 632, 125, 1, 0, 0, 0, 633, 635, 5, 61, 0, 0, 634, 633, - 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 60, - 0, 0, 637, 127, 1, 0, 0, 0, 638, 639, 7, 6, 0, 0, 639, 129, 1, 0, 0, 0, - 640, 641, 7, 7, 0, 0, 641, 131, 1, 0, 0, 0, 642, 643, 5, 28, 0, 0, 643, - 133, 1, 0, 0, 0, 644, 645, 5, 29, 0, 0, 645, 135, 1, 0, 0, 0, 646, 647, - 7, 8, 0, 0, 647, 137, 1, 0, 0, 0, 648, 649, 7, 9, 0, 0, 649, 139, 1, 0, - 0, 0, 650, 651, 5, 32, 0, 0, 651, 141, 1, 0, 0, 0, 67, 145, 160, 168, 172, - 183, 187, 195, 202, 208, 216, 223, 229, 234, 243, 249, 253, 257, 266, 273, - 281, 286, 306, 317, 326, 339, 341, 354, 357, 360, 367, 372, 383, 389, 393, - 402, 406, 416, 420, 422, 445, 456, 464, 471, 478, 482, 488, 495, 502, 506, - 509, 516, 519, 532, 539, 552, 556, 558, 580, 582, 596, 600, 602, 616, 618, - 624, 629, 634, + 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 1, 0, 5, 0, 146, 8, 0, + 10, 0, 12, 0, 149, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, + 1, 3, 1, 4, 5, 4, 161, 8, 4, 10, 4, 12, 4, 164, 9, 4, 1, 4, 1, 4, 1, 5, + 1, 5, 1, 5, 3, 5, 171, 8, 5, 1, 6, 1, 6, 3, 6, 175, 8, 6, 1, 7, 1, 7, 1, + 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 186, 8, 7, 1, 8, 1, 8, 3, + 8, 190, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 198, 8, 9, 1, 9, + 1, 9, 1, 9, 5, 9, 203, 8, 9, 10, 9, 12, 9, 206, 9, 9, 1, 9, 1, 9, 1, 9, + 1, 9, 1, 9, 3, 9, 213, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 218, 8, 9, 10, 9, + 12, 9, 221, 9, 9, 1, 9, 1, 9, 3, 9, 225, 8, 9, 1, 10, 1, 10, 1, 10, 1, + 10, 1, 10, 1, 10, 1, 10, 3, 10, 234, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, + 3, 11, 240, 8, 11, 1, 12, 1, 12, 3, 12, 244, 8, 12, 1, 13, 1, 13, 3, 13, + 248, 8, 13, 1, 14, 1, 14, 3, 14, 252, 8, 14, 1, 15, 1, 15, 1, 15, 1, 16, + 1, 16, 1, 16, 1, 16, 3, 16, 261, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, + 17, 3, 17, 268, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 274, 8, 18, 10, + 18, 12, 18, 277, 9, 18, 1, 19, 1, 19, 3, 19, 281, 8, 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, 3, 20, 301, 8, 20, 1, 21, 1, 21, + 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 310, 8, 22, 10, 22, 12, 22, 313, + 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 5, 23, 319, 8, 23, 10, 23, 12, 23, 322, + 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, + 25, 3, 25, 334, 8, 25, 3, 25, 336, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, + 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 349, 8, 27, 1, 27, + 3, 27, 352, 8, 27, 1, 27, 3, 27, 355, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, + 1, 28, 3, 28, 362, 8, 28, 1, 29, 1, 29, 1, 29, 3, 29, 367, 8, 29, 1, 30, + 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 3, 31, 378, 8, + 31, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 384, 8, 32, 1, 33, 1, 33, 3, 33, + 388, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 397, + 8, 34, 1, 35, 1, 35, 3, 35, 401, 8, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, + 36, 1, 36, 5, 36, 409, 8, 36, 10, 36, 12, 36, 412, 9, 36, 1, 36, 3, 36, + 415, 8, 36, 3, 36, 417, 8, 36, 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, 42, 1, 42, 1, + 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 440, 8, 42, 1, 43, 1, 43, 1, 43, + 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 451, 8, 44, 1, 45, 1, + 45, 1, 45, 1, 46, 5, 46, 457, 8, 46, 10, 46, 12, 46, 460, 9, 46, 1, 47, + 1, 47, 4, 47, 464, 8, 47, 11, 47, 12, 47, 465, 1, 48, 1, 48, 1, 48, 1, + 48, 1, 48, 3, 48, 473, 8, 48, 1, 49, 1, 49, 3, 49, 477, 8, 49, 1, 50, 1, + 50, 1, 50, 1, 50, 3, 50, 483, 8, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, + 3, 51, 490, 8, 51, 1, 52, 1, 52, 1, 52, 5, 52, 495, 8, 52, 10, 52, 12, + 52, 498, 9, 52, 1, 52, 3, 52, 501, 8, 52, 1, 53, 3, 53, 504, 8, 53, 1, + 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 511, 8, 53, 1, 53, 3, 53, 514, 8, + 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, + 1, 57, 3, 57, 527, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 3, 58, 534, + 8, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, + 58, 1, 58, 3, 58, 547, 8, 58, 1, 58, 1, 58, 5, 58, 551, 8, 58, 10, 58, + 12, 58, 554, 9, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, + 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, + 1, 59, 5, 59, 575, 8, 59, 10, 59, 12, 59, 578, 9, 59, 1, 60, 1, 60, 1, + 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 591, + 8, 60, 1, 60, 1, 60, 3, 60, 595, 8, 60, 3, 60, 597, 8, 60, 1, 60, 1, 60, + 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, + 60, 611, 8, 60, 10, 60, 12, 60, 614, 9, 60, 1, 61, 1, 61, 1, 61, 3, 61, + 619, 8, 61, 1, 62, 1, 62, 1, 63, 3, 63, 624, 8, 63, 1, 63, 1, 63, 1, 64, + 3, 64, 629, 8, 64, 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, 71, 0, 3, + 116, 118, 120, 72, 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, 0, 10, 1, 0, 66, 67, 1, 0, 48, 49, 4, 0, + 28, 29, 38, 44, 46, 47, 52, 59, 4, 0, 35, 37, 45, 45, 48, 51, 60, 64, 2, + 0, 48, 48, 56, 57, 1, 0, 15, 20, 2, 0, 24, 25, 61, 61, 1, 0, 33, 34, 1, + 0, 21, 23, 1, 0, 24, 25, 686, 0, 147, 1, 0, 0, 0, 2, 152, 1, 0, 0, 0, 4, + 154, 1, 0, 0, 0, 6, 156, 1, 0, 0, 0, 8, 162, 1, 0, 0, 0, 10, 170, 1, 0, + 0, 0, 12, 174, 1, 0, 0, 0, 14, 185, 1, 0, 0, 0, 16, 187, 1, 0, 0, 0, 18, + 224, 1, 0, 0, 0, 20, 233, 1, 0, 0, 0, 22, 239, 1, 0, 0, 0, 24, 243, 1, + 0, 0, 0, 26, 247, 1, 0, 0, 0, 28, 251, 1, 0, 0, 0, 30, 253, 1, 0, 0, 0, + 32, 256, 1, 0, 0, 0, 34, 267, 1, 0, 0, 0, 36, 269, 1, 0, 0, 0, 38, 278, + 1, 0, 0, 0, 40, 300, 1, 0, 0, 0, 42, 302, 1, 0, 0, 0, 44, 306, 1, 0, 0, + 0, 46, 314, 1, 0, 0, 0, 48, 323, 1, 0, 0, 0, 50, 335, 1, 0, 0, 0, 52, 337, + 1, 0, 0, 0, 54, 342, 1, 0, 0, 0, 56, 361, 1, 0, 0, 0, 58, 366, 1, 0, 0, + 0, 60, 368, 1, 0, 0, 0, 62, 371, 1, 0, 0, 0, 64, 383, 1, 0, 0, 0, 66, 387, + 1, 0, 0, 0, 68, 396, 1, 0, 0, 0, 70, 398, 1, 0, 0, 0, 72, 404, 1, 0, 0, + 0, 74, 420, 1, 0, 0, 0, 76, 422, 1, 0, 0, 0, 78, 424, 1, 0, 0, 0, 80, 426, + 1, 0, 0, 0, 82, 428, 1, 0, 0, 0, 84, 439, 1, 0, 0, 0, 86, 441, 1, 0, 0, + 0, 88, 450, 1, 0, 0, 0, 90, 452, 1, 0, 0, 0, 92, 458, 1, 0, 0, 0, 94, 461, + 1, 0, 0, 0, 96, 472, 1, 0, 0, 0, 98, 474, 1, 0, 0, 0, 100, 478, 1, 0, 0, + 0, 102, 489, 1, 0, 0, 0, 104, 491, 1, 0, 0, 0, 106, 513, 1, 0, 0, 0, 108, + 515, 1, 0, 0, 0, 110, 517, 1, 0, 0, 0, 112, 519, 1, 0, 0, 0, 114, 526, + 1, 0, 0, 0, 116, 533, 1, 0, 0, 0, 118, 555, 1, 0, 0, 0, 120, 596, 1, 0, + 0, 0, 122, 615, 1, 0, 0, 0, 124, 620, 1, 0, 0, 0, 126, 623, 1, 0, 0, 0, + 128, 628, 1, 0, 0, 0, 130, 632, 1, 0, 0, 0, 132, 634, 1, 0, 0, 0, 134, + 636, 1, 0, 0, 0, 136, 638, 1, 0, 0, 0, 138, 640, 1, 0, 0, 0, 140, 642, + 1, 0, 0, 0, 142, 644, 1, 0, 0, 0, 144, 146, 3, 2, 1, 0, 145, 144, 1, 0, + 0, 0, 146, 149, 1, 0, 0, 0, 147, 145, 1, 0, 0, 0, 147, 148, 1, 0, 0, 0, + 148, 150, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 150, 151, 3, 8, 4, 0, 151, + 1, 1, 0, 0, 0, 152, 153, 3, 4, 2, 0, 153, 3, 1, 0, 0, 0, 154, 155, 3, 6, + 3, 0, 155, 5, 1, 0, 0, 0, 156, 157, 5, 51, 0, 0, 157, 158, 3, 90, 45, 0, + 158, 7, 1, 0, 0, 0, 159, 161, 3, 10, 5, 0, 160, 159, 1, 0, 0, 0, 161, 164, + 1, 0, 0, 0, 162, 160, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, + 0, 0, 164, 162, 1, 0, 0, 0, 165, 166, 3, 12, 6, 0, 166, 9, 1, 0, 0, 0, + 167, 171, 3, 14, 7, 0, 168, 171, 3, 98, 49, 0, 169, 171, 3, 54, 27, 0, + 170, 167, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, + 11, 1, 0, 0, 0, 172, 175, 3, 16, 8, 0, 173, 175, 3, 18, 9, 0, 174, 172, + 1, 0, 0, 0, 174, 173, 1, 0, 0, 0, 175, 13, 1, 0, 0, 0, 176, 177, 5, 45, + 0, 0, 177, 178, 7, 0, 0, 0, 178, 179, 5, 31, 0, 0, 179, 186, 3, 116, 58, + 0, 180, 181, 5, 45, 0, 0, 181, 182, 3, 108, 54, 0, 182, 183, 5, 31, 0, + 0, 183, 184, 3, 116, 58, 0, 184, 186, 1, 0, 0, 0, 185, 176, 1, 0, 0, 0, + 185, 180, 1, 0, 0, 0, 186, 15, 1, 0, 0, 0, 187, 189, 5, 36, 0, 0, 188, + 190, 5, 40, 0, 0, 189, 188, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 191, + 1, 0, 0, 0, 191, 192, 3, 116, 58, 0, 192, 17, 1, 0, 0, 0, 193, 194, 5, + 35, 0, 0, 194, 197, 7, 0, 0, 0, 195, 196, 5, 8, 0, 0, 196, 198, 5, 66, + 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, + 199, 200, 5, 62, 0, 0, 200, 204, 3, 20, 10, 0, 201, 203, 3, 26, 13, 0, + 202, 201, 1, 0, 0, 0, 203, 206, 1, 0, 0, 0, 204, 202, 1, 0, 0, 0, 204, + 205, 1, 0, 0, 0, 205, 207, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 207, 208, + 3, 28, 14, 0, 208, 225, 1, 0, 0, 0, 209, 210, 5, 35, 0, 0, 210, 212, 7, + 0, 0, 0, 211, 213, 5, 63, 0, 0, 212, 211, 1, 0, 0, 0, 212, 213, 1, 0, 0, + 0, 213, 214, 1, 0, 0, 0, 214, 215, 5, 64, 0, 0, 215, 219, 3, 116, 58, 0, + 216, 218, 3, 26, 13, 0, 217, 216, 1, 0, 0, 0, 218, 221, 1, 0, 0, 0, 219, + 217, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 222, 1, 0, 0, 0, 221, 219, + 1, 0, 0, 0, 222, 223, 3, 28, 14, 0, 223, 225, 1, 0, 0, 0, 224, 193, 1, + 0, 0, 0, 224, 209, 1, 0, 0, 0, 225, 19, 1, 0, 0, 0, 226, 234, 3, 98, 49, + 0, 227, 234, 3, 70, 35, 0, 228, 234, 3, 72, 36, 0, 229, 234, 3, 66, 33, + 0, 230, 234, 3, 94, 47, 0, 231, 234, 3, 112, 56, 0, 232, 234, 3, 64, 32, + 0, 233, 226, 1, 0, 0, 0, 233, 227, 1, 0, 0, 0, 233, 228, 1, 0, 0, 0, 233, + 229, 1, 0, 0, 0, 233, 230, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 233, 232, + 1, 0, 0, 0, 234, 21, 1, 0, 0, 0, 235, 240, 3, 32, 16, 0, 236, 240, 3, 36, + 18, 0, 237, 240, 3, 30, 15, 0, 238, 240, 3, 40, 20, 0, 239, 235, 1, 0, + 0, 0, 239, 236, 1, 0, 0, 0, 239, 237, 1, 0, 0, 0, 239, 238, 1, 0, 0, 0, + 240, 23, 1, 0, 0, 0, 241, 244, 3, 14, 7, 0, 242, 244, 3, 98, 49, 0, 243, + 241, 1, 0, 0, 0, 243, 242, 1, 0, 0, 0, 244, 25, 1, 0, 0, 0, 245, 248, 3, + 24, 12, 0, 246, 248, 3, 22, 11, 0, 247, 245, 1, 0, 0, 0, 247, 246, 1, 0, + 0, 0, 248, 27, 1, 0, 0, 0, 249, 252, 3, 16, 8, 0, 250, 252, 3, 18, 9, 0, + 251, 249, 1, 0, 0, 0, 251, 250, 1, 0, 0, 0, 252, 29, 1, 0, 0, 0, 253, 254, + 5, 41, 0, 0, 254, 255, 3, 116, 58, 0, 255, 31, 1, 0, 0, 0, 256, 257, 5, + 44, 0, 0, 257, 260, 3, 34, 17, 0, 258, 259, 5, 8, 0, 0, 259, 261, 3, 34, + 17, 0, 260, 258, 1, 0, 0, 0, 260, 261, 1, 0, 0, 0, 261, 33, 1, 0, 0, 0, + 262, 268, 3, 80, 40, 0, 263, 268, 3, 64, 32, 0, 264, 268, 3, 66, 33, 0, + 265, 268, 3, 98, 49, 0, 266, 268, 3, 94, 47, 0, 267, 262, 1, 0, 0, 0, 267, + 263, 1, 0, 0, 0, 267, 264, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 266, + 1, 0, 0, 0, 268, 35, 1, 0, 0, 0, 269, 270, 5, 43, 0, 0, 270, 275, 3, 38, + 19, 0, 271, 272, 5, 8, 0, 0, 272, 274, 3, 38, 19, 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, + 37, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 278, 280, 3, 116, 58, 0, 279, 281, + 5, 47, 0, 0, 280, 279, 1, 0, 0, 0, 280, 281, 1, 0, 0, 0, 281, 39, 1, 0, + 0, 0, 282, 283, 5, 46, 0, 0, 283, 301, 3, 52, 26, 0, 284, 285, 5, 46, 0, + 0, 285, 301, 3, 46, 23, 0, 286, 287, 5, 46, 0, 0, 287, 288, 3, 44, 22, + 0, 288, 289, 3, 46, 23, 0, 289, 301, 1, 0, 0, 0, 290, 291, 5, 46, 0, 0, + 291, 292, 3, 44, 22, 0, 292, 293, 3, 50, 25, 0, 293, 301, 1, 0, 0, 0, 294, + 295, 5, 46, 0, 0, 295, 296, 3, 44, 22, 0, 296, 297, 3, 52, 26, 0, 297, + 301, 1, 0, 0, 0, 298, 299, 5, 46, 0, 0, 299, 301, 3, 44, 22, 0, 300, 282, + 1, 0, 0, 0, 300, 284, 1, 0, 0, 0, 300, 286, 1, 0, 0, 0, 300, 290, 1, 0, + 0, 0, 300, 294, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 301, 41, 1, 0, 0, 0, + 302, 303, 5, 66, 0, 0, 303, 304, 5, 31, 0, 0, 304, 305, 3, 116, 58, 0, + 305, 43, 1, 0, 0, 0, 306, 311, 3, 42, 21, 0, 307, 308, 5, 8, 0, 0, 308, + 310, 3, 42, 21, 0, 309, 307, 1, 0, 0, 0, 310, 313, 1, 0, 0, 0, 311, 309, + 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 45, 1, 0, 0, 0, 313, 311, 1, 0, + 0, 0, 314, 315, 5, 58, 0, 0, 315, 320, 3, 48, 24, 0, 316, 317, 5, 8, 0, + 0, 317, 319, 3, 48, 24, 0, 318, 316, 1, 0, 0, 0, 319, 322, 1, 0, 0, 0, + 320, 318, 1, 0, 0, 0, 320, 321, 1, 0, 0, 0, 321, 47, 1, 0, 0, 0, 322, 320, + 1, 0, 0, 0, 323, 324, 5, 66, 0, 0, 324, 325, 5, 31, 0, 0, 325, 326, 3, + 98, 49, 0, 326, 49, 1, 0, 0, 0, 327, 328, 5, 52, 0, 0, 328, 336, 3, 42, + 21, 0, 329, 330, 5, 52, 0, 0, 330, 333, 5, 66, 0, 0, 331, 332, 5, 53, 0, + 0, 332, 334, 5, 66, 0, 0, 333, 331, 1, 0, 0, 0, 333, 334, 1, 0, 0, 0, 334, + 336, 1, 0, 0, 0, 335, 327, 1, 0, 0, 0, 335, 329, 1, 0, 0, 0, 336, 51, 1, + 0, 0, 0, 337, 338, 5, 54, 0, 0, 338, 339, 5, 55, 0, 0, 339, 340, 5, 52, + 0, 0, 340, 341, 5, 66, 0, 0, 341, 53, 1, 0, 0, 0, 342, 343, 5, 37, 0, 0, + 343, 344, 5, 59, 0, 0, 344, 345, 3, 56, 28, 0, 345, 346, 5, 62, 0, 0, 346, + 348, 3, 58, 29, 0, 347, 349, 3, 60, 30, 0, 348, 347, 1, 0, 0, 0, 348, 349, + 1, 0, 0, 0, 349, 351, 1, 0, 0, 0, 350, 352, 3, 30, 15, 0, 351, 350, 1, + 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 1, 0, 0, 0, 353, 355, 3, 62, 31, + 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 55, 1, 0, 0, 0, 356, + 362, 3, 76, 38, 0, 357, 362, 3, 66, 33, 0, 358, 362, 3, 64, 32, 0, 359, + 362, 3, 98, 49, 0, 360, 362, 3, 94, 47, 0, 361, 356, 1, 0, 0, 0, 361, 357, + 1, 0, 0, 0, 361, 358, 1, 0, 0, 0, 361, 359, 1, 0, 0, 0, 361, 360, 1, 0, + 0, 0, 362, 57, 1, 0, 0, 0, 363, 367, 3, 98, 49, 0, 364, 367, 3, 66, 33, + 0, 365, 367, 3, 94, 47, 0, 366, 363, 1, 0, 0, 0, 366, 364, 1, 0, 0, 0, + 366, 365, 1, 0, 0, 0, 367, 59, 1, 0, 0, 0, 368, 369, 5, 38, 0, 0, 369, + 370, 3, 72, 36, 0, 370, 61, 1, 0, 0, 0, 371, 377, 5, 39, 0, 0, 372, 378, + 3, 80, 40, 0, 373, 378, 3, 66, 33, 0, 374, 378, 3, 64, 32, 0, 375, 378, + 3, 94, 47, 0, 376, 378, 3, 100, 50, 0, 377, 372, 1, 0, 0, 0, 377, 373, + 1, 0, 0, 0, 377, 374, 1, 0, 0, 0, 377, 375, 1, 0, 0, 0, 377, 376, 1, 0, + 0, 0, 378, 63, 1, 0, 0, 0, 379, 380, 5, 65, 0, 0, 380, 384, 5, 66, 0, 0, + 381, 382, 5, 65, 0, 0, 382, 384, 3, 108, 54, 0, 383, 379, 1, 0, 0, 0, 383, + 381, 1, 0, 0, 0, 384, 65, 1, 0, 0, 0, 385, 388, 5, 66, 0, 0, 386, 388, + 3, 108, 54, 0, 387, 385, 1, 0, 0, 0, 387, 386, 1, 0, 0, 0, 388, 67, 1, + 0, 0, 0, 389, 397, 3, 70, 35, 0, 390, 397, 3, 72, 36, 0, 391, 397, 3, 74, + 37, 0, 392, 397, 3, 76, 38, 0, 393, 397, 3, 78, 39, 0, 394, 397, 3, 80, + 40, 0, 395, 397, 3, 82, 41, 0, 396, 389, 1, 0, 0, 0, 396, 390, 1, 0, 0, + 0, 396, 391, 1, 0, 0, 0, 396, 392, 1, 0, 0, 0, 396, 393, 1, 0, 0, 0, 396, + 394, 1, 0, 0, 0, 396, 395, 1, 0, 0, 0, 397, 69, 1, 0, 0, 0, 398, 400, 5, + 9, 0, 0, 399, 401, 3, 104, 52, 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, 71, 1, 0, 0, 0, + 404, 416, 5, 13, 0, 0, 405, 410, 3, 84, 42, 0, 406, 407, 5, 8, 0, 0, 407, + 409, 3, 84, 42, 0, 408, 406, 1, 0, 0, 0, 409, 412, 1, 0, 0, 0, 410, 408, + 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, + 0, 0, 413, 415, 5, 8, 0, 0, 414, 413, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, + 415, 417, 1, 0, 0, 0, 416, 405, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, + 418, 1, 0, 0, 0, 418, 419, 5, 14, 0, 0, 419, 73, 1, 0, 0, 0, 420, 421, + 5, 50, 0, 0, 421, 75, 1, 0, 0, 0, 422, 423, 5, 68, 0, 0, 423, 77, 1, 0, + 0, 0, 424, 425, 5, 70, 0, 0, 425, 79, 1, 0, 0, 0, 426, 427, 5, 69, 0, 0, + 427, 81, 1, 0, 0, 0, 428, 429, 7, 1, 0, 0, 429, 83, 1, 0, 0, 0, 430, 431, + 3, 88, 44, 0, 431, 432, 5, 5, 0, 0, 432, 433, 3, 116, 58, 0, 433, 440, + 1, 0, 0, 0, 434, 435, 3, 86, 43, 0, 435, 436, 5, 5, 0, 0, 436, 437, 3, + 116, 58, 0, 437, 440, 1, 0, 0, 0, 438, 440, 3, 66, 33, 0, 439, 430, 1, + 0, 0, 0, 439, 434, 1, 0, 0, 0, 439, 438, 1, 0, 0, 0, 440, 85, 1, 0, 0, + 0, 441, 442, 5, 9, 0, 0, 442, 443, 3, 116, 58, 0, 443, 444, 5, 10, 0, 0, + 444, 87, 1, 0, 0, 0, 445, 451, 5, 66, 0, 0, 446, 451, 3, 76, 38, 0, 447, + 451, 3, 64, 32, 0, 448, 451, 3, 108, 54, 0, 449, 451, 3, 110, 55, 0, 450, + 445, 1, 0, 0, 0, 450, 446, 1, 0, 0, 0, 450, 447, 1, 0, 0, 0, 450, 448, + 1, 0, 0, 0, 450, 449, 1, 0, 0, 0, 451, 89, 1, 0, 0, 0, 452, 453, 3, 92, + 46, 0, 453, 454, 5, 66, 0, 0, 454, 91, 1, 0, 0, 0, 455, 457, 5, 71, 0, + 0, 456, 455, 1, 0, 0, 0, 457, 460, 1, 0, 0, 0, 458, 456, 1, 0, 0, 0, 458, + 459, 1, 0, 0, 0, 459, 93, 1, 0, 0, 0, 460, 458, 1, 0, 0, 0, 461, 463, 3, + 96, 48, 0, 462, 464, 3, 106, 53, 0, 463, 462, 1, 0, 0, 0, 464, 465, 1, + 0, 0, 0, 465, 463, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 95, 1, 0, 0, + 0, 467, 473, 3, 66, 33, 0, 468, 473, 3, 64, 32, 0, 469, 473, 3, 70, 35, + 0, 470, 473, 3, 72, 36, 0, 471, 473, 3, 100, 50, 0, 472, 467, 1, 0, 0, + 0, 472, 468, 1, 0, 0, 0, 472, 469, 1, 0, 0, 0, 472, 470, 1, 0, 0, 0, 472, + 471, 1, 0, 0, 0, 473, 97, 1, 0, 0, 0, 474, 476, 3, 100, 50, 0, 475, 477, + 3, 142, 71, 0, 476, 475, 1, 0, 0, 0, 476, 477, 1, 0, 0, 0, 477, 99, 1, + 0, 0, 0, 478, 479, 3, 92, 46, 0, 479, 480, 3, 102, 51, 0, 480, 482, 5, + 11, 0, 0, 481, 483, 3, 104, 52, 0, 482, 481, 1, 0, 0, 0, 482, 483, 1, 0, + 0, 0, 483, 484, 1, 0, 0, 0, 484, 485, 5, 12, 0, 0, 485, 101, 1, 0, 0, 0, + 486, 490, 5, 66, 0, 0, 487, 490, 3, 108, 54, 0, 488, 490, 3, 110, 55, 0, + 489, 486, 1, 0, 0, 0, 489, 487, 1, 0, 0, 0, 489, 488, 1, 0, 0, 0, 490, + 103, 1, 0, 0, 0, 491, 496, 3, 116, 58, 0, 492, 493, 5, 8, 0, 0, 493, 495, + 3, 116, 58, 0, 494, 492, 1, 0, 0, 0, 495, 498, 1, 0, 0, 0, 496, 494, 1, + 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, 498, 496, 1, 0, 0, + 0, 499, 501, 5, 8, 0, 0, 500, 499, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, + 105, 1, 0, 0, 0, 502, 504, 3, 142, 71, 0, 503, 502, 1, 0, 0, 0, 503, 504, + 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 506, 5, 7, 0, 0, 506, 514, 3, 88, + 44, 0, 507, 508, 3, 142, 71, 0, 508, 509, 5, 7, 0, 0, 509, 511, 1, 0, 0, + 0, 510, 507, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 512, 1, 0, 0, 0, 512, + 514, 3, 86, 43, 0, 513, 503, 1, 0, 0, 0, 513, 510, 1, 0, 0, 0, 514, 107, + 1, 0, 0, 0, 515, 516, 7, 2, 0, 0, 516, 109, 1, 0, 0, 0, 517, 518, 7, 3, + 0, 0, 518, 111, 1, 0, 0, 0, 519, 520, 3, 114, 57, 0, 520, 521, 5, 30, 0, + 0, 521, 522, 3, 114, 57, 0, 522, 113, 1, 0, 0, 0, 523, 527, 3, 80, 40, + 0, 524, 527, 3, 66, 33, 0, 525, 527, 3, 64, 32, 0, 526, 523, 1, 0, 0, 0, + 526, 524, 1, 0, 0, 0, 526, 525, 1, 0, 0, 0, 527, 115, 1, 0, 0, 0, 528, + 529, 6, 58, -1, 0, 529, 530, 3, 130, 65, 0, 530, 531, 3, 116, 58, 5, 531, + 534, 1, 0, 0, 0, 532, 534, 3, 118, 59, 0, 533, 528, 1, 0, 0, 0, 533, 532, + 1, 0, 0, 0, 534, 552, 1, 0, 0, 0, 535, 536, 10, 4, 0, 0, 536, 537, 3, 134, + 67, 0, 537, 538, 3, 116, 58, 5, 538, 551, 1, 0, 0, 0, 539, 540, 10, 3, + 0, 0, 540, 541, 3, 136, 68, 0, 541, 542, 3, 116, 58, 4, 542, 551, 1, 0, + 0, 0, 543, 544, 10, 2, 0, 0, 544, 546, 5, 32, 0, 0, 545, 547, 3, 116, 58, + 0, 546, 545, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, + 549, 5, 5, 0, 0, 549, 551, 3, 116, 58, 3, 550, 535, 1, 0, 0, 0, 550, 539, + 1, 0, 0, 0, 550, 543, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 550, 1, 0, + 0, 0, 552, 553, 1, 0, 0, 0, 553, 117, 1, 0, 0, 0, 554, 552, 1, 0, 0, 0, + 555, 556, 6, 59, -1, 0, 556, 557, 3, 120, 60, 0, 557, 576, 1, 0, 0, 0, + 558, 559, 10, 5, 0, 0, 559, 560, 3, 124, 62, 0, 560, 561, 3, 118, 59, 6, + 561, 575, 1, 0, 0, 0, 562, 563, 10, 4, 0, 0, 563, 564, 3, 122, 61, 0, 564, + 565, 3, 118, 59, 5, 565, 575, 1, 0, 0, 0, 566, 567, 10, 3, 0, 0, 567, 568, + 3, 126, 63, 0, 568, 569, 3, 118, 59, 4, 569, 575, 1, 0, 0, 0, 570, 571, + 10, 2, 0, 0, 571, 572, 3, 128, 64, 0, 572, 573, 3, 118, 59, 3, 573, 575, + 1, 0, 0, 0, 574, 558, 1, 0, 0, 0, 574, 562, 1, 0, 0, 0, 574, 566, 1, 0, + 0, 0, 574, 570, 1, 0, 0, 0, 575, 578, 1, 0, 0, 0, 576, 574, 1, 0, 0, 0, + 576, 577, 1, 0, 0, 0, 577, 119, 1, 0, 0, 0, 578, 576, 1, 0, 0, 0, 579, + 580, 6, 60, -1, 0, 580, 597, 3, 98, 49, 0, 581, 597, 3, 112, 56, 0, 582, + 597, 3, 68, 34, 0, 583, 597, 3, 66, 33, 0, 584, 597, 3, 94, 47, 0, 585, + 597, 3, 64, 32, 0, 586, 590, 5, 11, 0, 0, 587, 591, 3, 18, 9, 0, 588, 591, + 3, 54, 27, 0, 589, 591, 3, 116, 58, 0, 590, 587, 1, 0, 0, 0, 590, 588, + 1, 0, 0, 0, 590, 589, 1, 0, 0, 0, 591, 592, 1, 0, 0, 0, 592, 594, 5, 12, + 0, 0, 593, 595, 3, 142, 71, 0, 594, 593, 1, 0, 0, 0, 594, 595, 1, 0, 0, + 0, 595, 597, 1, 0, 0, 0, 596, 579, 1, 0, 0, 0, 596, 581, 1, 0, 0, 0, 596, + 582, 1, 0, 0, 0, 596, 583, 1, 0, 0, 0, 596, 584, 1, 0, 0, 0, 596, 585, + 1, 0, 0, 0, 596, 586, 1, 0, 0, 0, 597, 612, 1, 0, 0, 0, 598, 599, 10, 10, + 0, 0, 599, 600, 3, 138, 69, 0, 600, 601, 3, 120, 60, 11, 601, 611, 1, 0, + 0, 0, 602, 603, 10, 9, 0, 0, 603, 604, 3, 140, 70, 0, 604, 605, 3, 120, + 60, 10, 605, 611, 1, 0, 0, 0, 606, 607, 10, 8, 0, 0, 607, 608, 3, 132, + 66, 0, 608, 609, 3, 120, 60, 9, 609, 611, 1, 0, 0, 0, 610, 598, 1, 0, 0, + 0, 610, 602, 1, 0, 0, 0, 610, 606, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, + 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 121, 1, 0, 0, 0, 614, 612, + 1, 0, 0, 0, 615, 618, 7, 4, 0, 0, 616, 619, 3, 126, 63, 0, 617, 619, 3, + 124, 62, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 123, 1, 0, + 0, 0, 620, 621, 7, 5, 0, 0, 621, 125, 1, 0, 0, 0, 622, 624, 5, 61, 0, 0, + 623, 622, 1, 0, 0, 0, 623, 624, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, + 626, 5, 62, 0, 0, 626, 127, 1, 0, 0, 0, 627, 629, 5, 61, 0, 0, 628, 627, + 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 1, 0, 0, 0, 630, 631, 5, 60, + 0, 0, 631, 129, 1, 0, 0, 0, 632, 633, 7, 6, 0, 0, 633, 131, 1, 0, 0, 0, + 634, 635, 7, 7, 0, 0, 635, 133, 1, 0, 0, 0, 636, 637, 5, 28, 0, 0, 637, + 135, 1, 0, 0, 0, 638, 639, 5, 29, 0, 0, 639, 137, 1, 0, 0, 0, 640, 641, + 7, 8, 0, 0, 641, 139, 1, 0, 0, 0, 642, 643, 7, 9, 0, 0, 643, 141, 1, 0, + 0, 0, 644, 645, 5, 32, 0, 0, 645, 143, 1, 0, 0, 0, 66, 147, 162, 170, 174, + 185, 189, 197, 204, 212, 219, 224, 233, 239, 243, 247, 251, 260, 267, 275, + 280, 300, 311, 320, 333, 335, 348, 351, 354, 361, 366, 377, 383, 387, 396, + 400, 410, 414, 416, 439, 450, 458, 465, 472, 476, 482, 489, 496, 500, 503, + 510, 513, 526, 533, 546, 550, 552, 574, 576, 590, 594, 596, 610, 612, 618, + 623, 628, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -498,64 +495,65 @@ const ( FqlParserRULE_forExpressionSource = 10 FqlParserRULE_forExpressionClause = 11 FqlParserRULE_forExpressionStatement = 12 - FqlParserRULE_forExpressionReturn = 13 - FqlParserRULE_filterClause = 14 - FqlParserRULE_limitClause = 15 - FqlParserRULE_limitClauseValue = 16 - FqlParserRULE_sortClause = 17 - FqlParserRULE_sortClauseExpression = 18 - FqlParserRULE_collectClause = 19 - FqlParserRULE_collectSelector = 20 - FqlParserRULE_collectGrouping = 21 - FqlParserRULE_collectAggregator = 22 - FqlParserRULE_collectAggregateSelector = 23 - FqlParserRULE_collectGroupVariable = 24 - FqlParserRULE_collectCounter = 25 - FqlParserRULE_waitForExpression = 26 - FqlParserRULE_waitForEventName = 27 - FqlParserRULE_waitForEventSource = 28 - FqlParserRULE_optionsClause = 29 - FqlParserRULE_timeoutClause = 30 - FqlParserRULE_param = 31 - FqlParserRULE_variable = 32 - FqlParserRULE_literal = 33 - FqlParserRULE_arrayLiteral = 34 - FqlParserRULE_objectLiteral = 35 - FqlParserRULE_booleanLiteral = 36 - FqlParserRULE_stringLiteral = 37 - FqlParserRULE_floatLiteral = 38 - FqlParserRULE_integerLiteral = 39 - FqlParserRULE_noneLiteral = 40 - FqlParserRULE_propertyAssignment = 41 - FqlParserRULE_computedPropertyName = 42 - FqlParserRULE_propertyName = 43 - FqlParserRULE_namespaceIdentifier = 44 - FqlParserRULE_namespace = 45 - FqlParserRULE_memberExpression = 46 - FqlParserRULE_memberExpressionSource = 47 - FqlParserRULE_functionCallExpression = 48 - FqlParserRULE_functionCall = 49 - FqlParserRULE_functionName = 50 - FqlParserRULE_argumentList = 51 - FqlParserRULE_memberExpressionPath = 52 - FqlParserRULE_safeReservedWord = 53 - FqlParserRULE_unsafeReservedWord = 54 - FqlParserRULE_rangeOperator = 55 - FqlParserRULE_rangeOperand = 56 - FqlParserRULE_expression = 57 - FqlParserRULE_predicate = 58 - FqlParserRULE_expressionAtom = 59 - FqlParserRULE_arrayOperator = 60 - FqlParserRULE_equalityOperator = 61 - FqlParserRULE_inOperator = 62 - FqlParserRULE_likeOperator = 63 - FqlParserRULE_unaryOperator = 64 - FqlParserRULE_regexpOperator = 65 - FqlParserRULE_logicalAndOperator = 66 - FqlParserRULE_logicalOrOperator = 67 - FqlParserRULE_multiplicativeOperator = 68 - FqlParserRULE_additiveOperator = 69 - FqlParserRULE_errorOperator = 70 + FqlParserRULE_forExpressionBody = 13 + FqlParserRULE_forExpressionReturn = 14 + FqlParserRULE_filterClause = 15 + FqlParserRULE_limitClause = 16 + FqlParserRULE_limitClauseValue = 17 + FqlParserRULE_sortClause = 18 + FqlParserRULE_sortClauseExpression = 19 + FqlParserRULE_collectClause = 20 + FqlParserRULE_collectSelector = 21 + FqlParserRULE_collectGrouping = 22 + FqlParserRULE_collectAggregator = 23 + FqlParserRULE_collectAggregateSelector = 24 + FqlParserRULE_collectGroupVariable = 25 + FqlParserRULE_collectCounter = 26 + FqlParserRULE_waitForExpression = 27 + FqlParserRULE_waitForEventName = 28 + FqlParserRULE_waitForEventSource = 29 + FqlParserRULE_optionsClause = 30 + FqlParserRULE_timeoutClause = 31 + FqlParserRULE_param = 32 + FqlParserRULE_variable = 33 + FqlParserRULE_literal = 34 + FqlParserRULE_arrayLiteral = 35 + FqlParserRULE_objectLiteral = 36 + FqlParserRULE_booleanLiteral = 37 + FqlParserRULE_stringLiteral = 38 + FqlParserRULE_floatLiteral = 39 + FqlParserRULE_integerLiteral = 40 + FqlParserRULE_noneLiteral = 41 + FqlParserRULE_propertyAssignment = 42 + FqlParserRULE_computedPropertyName = 43 + FqlParserRULE_propertyName = 44 + FqlParserRULE_namespaceIdentifier = 45 + FqlParserRULE_namespace = 46 + FqlParserRULE_memberExpression = 47 + FqlParserRULE_memberExpressionSource = 48 + FqlParserRULE_functionCallExpression = 49 + FqlParserRULE_functionCall = 50 + FqlParserRULE_functionName = 51 + FqlParserRULE_argumentList = 52 + FqlParserRULE_memberExpressionPath = 53 + FqlParserRULE_safeReservedWord = 54 + FqlParserRULE_unsafeReservedWord = 55 + FqlParserRULE_rangeOperator = 56 + FqlParserRULE_rangeOperand = 57 + FqlParserRULE_expression = 58 + FqlParserRULE_predicate = 59 + FqlParserRULE_expressionAtom = 60 + FqlParserRULE_arrayOperator = 61 + FqlParserRULE_equalityOperator = 62 + FqlParserRULE_inOperator = 63 + FqlParserRULE_likeOperator = 64 + FqlParserRULE_unaryOperator = 65 + FqlParserRULE_regexpOperator = 66 + FqlParserRULE_logicalAndOperator = 67 + FqlParserRULE_logicalOrOperator = 68 + FqlParserRULE_multiplicativeOperator = 69 + FqlParserRULE_additiveOperator = 70 + FqlParserRULE_errorOperator = 71 ) // IProgramContext is an interface to support dynamic dispatch. @@ -699,7 +697,7 @@ func (p *FqlParser) Program() (localctx IProgramContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(145) + p.SetState(147) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -711,12 +709,12 @@ func (p *FqlParser) Program() (localctx IProgramContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(142) + p.SetState(144) p.Head() } } - p.SetState(147) + p.SetState(149) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -727,7 +725,7 @@ func (p *FqlParser) Program() (localctx IProgramContext) { } } { - p.SetState(148) + p.SetState(150) p.Body() } @@ -841,7 +839,7 @@ func (p *FqlParser) Head() (localctx IHeadContext) { p.EnterRule(localctx, 2, FqlParserRULE_head) p.EnterOuterAlt(localctx, 1) { - p.SetState(150) + p.SetState(152) p.UseExpression() } @@ -955,7 +953,7 @@ func (p *FqlParser) UseExpression() (localctx IUseExpressionContext) { p.EnterRule(localctx, 4, FqlParserRULE_useExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(152) + p.SetState(154) p.Use() } @@ -1074,7 +1072,7 @@ func (p *FqlParser) Use() (localctx IUseContext) { p.EnterRule(localctx, 6, FqlParserRULE_use) p.EnterOuterAlt(localctx, 1) { - p.SetState(154) + p.SetState(156) p.Match(FqlParserUse) if p.HasError() { // Recognition error - abort rule @@ -1082,7 +1080,7 @@ func (p *FqlParser) Use() (localctx IUseContext) { } } { - p.SetState(155) + p.SetState(157) p.NamespaceIdentifier() } @@ -1240,7 +1238,7 @@ func (p *FqlParser) Body() (localctx IBodyContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(160) + p.SetState(162) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1252,12 +1250,12 @@ func (p *FqlParser) Body() (localctx IBodyContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(157) + p.SetState(159) p.BodyStatement() } } - p.SetState(162) + p.SetState(164) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1268,7 +1266,7 @@ func (p *FqlParser) Body() (localctx IBodyContext) { } } { - p.SetState(163) + p.SetState(165) p.BodyExpression() } @@ -1414,7 +1412,7 @@ func (s *BodyStatementContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) BodyStatement() (localctx IBodyStatementContext) { localctx = NewBodyStatementContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 10, FqlParserRULE_bodyStatement) - p.SetState(168) + p.SetState(170) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1424,21 +1422,21 @@ func (p *FqlParser) BodyStatement() (localctx IBodyStatementContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(165) + p.SetState(167) p.VariableDeclaration() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(166) + p.SetState(168) p.FunctionCallExpression() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(167) + p.SetState(169) p.WaitForExpression() } @@ -1571,7 +1569,7 @@ func (s *BodyExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FqlParser) BodyExpression() (localctx IBodyExpressionContext) { localctx = NewBodyExpressionContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 12, FqlParserRULE_bodyExpression) - p.SetState(172) + p.SetState(174) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1581,14 +1579,14 @@ func (p *FqlParser) BodyExpression() (localctx IBodyExpressionContext) { case FqlParserReturn: p.EnterOuterAlt(localctx, 1) { - p.SetState(170) + p.SetState(172) p.ReturnExpression() } case FqlParserFor: p.EnterOuterAlt(localctx, 2) { - p.SetState(171) + p.SetState(173) p.ForExpression() } @@ -1755,7 +1753,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) p.EnterRule(localctx, 14, FqlParserRULE_variableDeclaration) var _la int - p.SetState(183) + p.SetState(185) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1765,7 +1763,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(174) + p.SetState(176) p.Match(FqlParserLet) if p.HasError() { // Recognition error - abort rule @@ -1773,7 +1771,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(175) + p.SetState(177) var _lt = p.GetTokenStream().LT(1) @@ -1791,7 +1789,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(176) + p.SetState(178) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -1799,14 +1797,14 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(177) + p.SetState(179) p.expression(0) } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(178) + p.SetState(180) p.Match(FqlParserLet) if p.HasError() { // Recognition error - abort rule @@ -1814,11 +1812,11 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(179) + p.SetState(181) p.SafeReservedWord() } { - p.SetState(180) + p.SetState(182) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -1826,7 +1824,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(181) + p.SetState(183) p.expression(0) } @@ -1954,19 +1952,19 @@ func (p *FqlParser) ReturnExpression() (localctx IReturnExpressionContext) { p.EnterRule(localctx, 16, FqlParserRULE_returnExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(185) + p.SetState(187) p.Match(FqlParserReturn) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(187) + p.SetState(189) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) == 1 { { - p.SetState(186) + p.SetState(188) p.Match(FqlParserDistinct) if p.HasError() { // Recognition error - abort rule @@ -1978,7 +1976,7 @@ func (p *FqlParser) ReturnExpression() (localctx IReturnExpressionContext) { goto errorExit } { - p.SetState(189) + p.SetState(191) p.expression(0) } @@ -2023,10 +2021,8 @@ type IForExpressionContext interface { Identifier(i int) antlr.TerminalNode IgnoreIdentifier() antlr.TerminalNode Comma() antlr.TerminalNode - AllForExpressionClause() []IForExpressionClauseContext - ForExpressionClause(i int) IForExpressionClauseContext - AllForExpressionStatement() []IForExpressionStatementContext - ForExpressionStatement(i int) IForExpressionStatementContext + AllForExpressionBody() []IForExpressionBodyContext + ForExpressionBody(i int) IForExpressionBodyContext While() antlr.TerminalNode Expression() IExpressionContext Do() antlr.TerminalNode @@ -2133,61 +2129,20 @@ func (s *ForExpressionContext) Comma() antlr.TerminalNode { return s.GetToken(FqlParserComma, 0) } -func (s *ForExpressionContext) AllForExpressionClause() []IForExpressionClauseContext { - children := s.GetChildren() - len := 0 - for _, ctx := range children { - if _, ok := ctx.(IForExpressionClauseContext); ok { - len++ - } - } - - tst := make([]IForExpressionClauseContext, len) - i := 0 - for _, ctx := range children { - if t, ok := ctx.(IForExpressionClauseContext); ok { - tst[i] = t.(IForExpressionClauseContext) - i++ - } - } - - return tst -} - -func (s *ForExpressionContext) ForExpressionClause(i int) IForExpressionClauseContext { - var t antlr.RuleContext - j := 0 - for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IForExpressionClauseContext); ok { - if j == i { - t = ctx.(antlr.RuleContext) - break - } - j++ - } - } - - if t == nil { - return nil - } - - return t.(IForExpressionClauseContext) -} - -func (s *ForExpressionContext) AllForExpressionStatement() []IForExpressionStatementContext { +func (s *ForExpressionContext) AllForExpressionBody() []IForExpressionBodyContext { children := s.GetChildren() len := 0 for _, ctx := range children { - if _, ok := ctx.(IForExpressionStatementContext); ok { + if _, ok := ctx.(IForExpressionBodyContext); ok { len++ } } - tst := make([]IForExpressionStatementContext, len) + tst := make([]IForExpressionBodyContext, len) i := 0 for _, ctx := range children { - if t, ok := ctx.(IForExpressionStatementContext); ok { - tst[i] = t.(IForExpressionStatementContext) + if t, ok := ctx.(IForExpressionBodyContext); ok { + tst[i] = t.(IForExpressionBodyContext) i++ } } @@ -2195,11 +2150,11 @@ func (s *ForExpressionContext) AllForExpressionStatement() []IForExpressionState return tst } -func (s *ForExpressionContext) ForExpressionStatement(i int) IForExpressionStatementContext { +func (s *ForExpressionContext) ForExpressionBody(i int) IForExpressionBodyContext { var t antlr.RuleContext j := 0 for _, ctx := range s.GetChildren() { - if _, ok := ctx.(IForExpressionStatementContext); ok { + if _, ok := ctx.(IForExpressionBodyContext); ok { if j == i { t = ctx.(antlr.RuleContext) break @@ -2212,7 +2167,7 @@ func (s *ForExpressionContext) ForExpressionStatement(i int) IForExpressionState return nil } - return t.(IForExpressionStatementContext) + return t.(IForExpressionBodyContext) } func (s *ForExpressionContext) While() antlr.TerminalNode { @@ -2276,17 +2231,17 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { var _alt int - p.SetState(234) + p.SetState(224) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 12, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 10, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(191) + p.SetState(193) p.Match(FqlParserFor) if p.HasError() { // Recognition error - abort rule @@ -2294,7 +2249,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(192) + p.SetState(194) var _lt = p.GetTokenStream().LT(1) @@ -2311,7 +2266,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { p.Consume() } } - p.SetState(195) + p.SetState(197) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2320,7 +2275,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { if _la == FqlParserComma { { - p.SetState(193) + p.SetState(195) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -2328,7 +2283,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(194) + p.SetState(196) var _m = p.Match(FqlParserIdentifier) @@ -2341,7 +2296,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } { - p.SetState(197) + p.SetState(199) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -2349,10 +2304,10 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(198) + p.SetState(200) p.ForExpressionSource() } - p.SetState(202) + p.SetState(204) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2364,12 +2319,12 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(199) - p.ForExpressionClause() + p.SetState(201) + p.ForExpressionBody() } } - p.SetState(204) + p.SetState(206) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2379,42 +2334,15 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { goto errorExit } } - p.SetState(208) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 8, p.GetParserRuleContext()) - if p.HasError() { - goto errorExit - } - for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { - if _alt == 1 { - { - p.SetState(205) - p.ForExpressionStatement() - } - - } - p.SetState(210) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 8, p.GetParserRuleContext()) - if p.HasError() { - goto errorExit - } - } { - p.SetState(211) + p.SetState(207) p.ForExpressionReturn() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(213) + p.SetState(209) p.Match(FqlParserFor) if p.HasError() { // Recognition error - abort rule @@ -2422,7 +2350,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(214) + p.SetState(210) var _lt = p.GetTokenStream().LT(1) @@ -2439,7 +2367,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { p.Consume() } } - p.SetState(216) + p.SetState(212) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2448,7 +2376,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { if _la == FqlParserDo { { - p.SetState(215) + p.SetState(211) p.Match(FqlParserDo) if p.HasError() { // Recognition error - abort rule @@ -2458,7 +2386,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } { - p.SetState(218) + p.SetState(214) p.Match(FqlParserWhile) if p.HasError() { // Recognition error - abort rule @@ -2466,65 +2394,38 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(219) + p.SetState(215) p.expression(0) } - p.SetState(223) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 10, p.GetParserRuleContext()) - if p.HasError() { - goto errorExit - } - for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { - if _alt == 1 { - { - p.SetState(220) - p.ForExpressionClause() - } - - } - p.SetState(225) - p.GetErrorHandler().Sync(p) - if p.HasError() { - goto errorExit - } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 10, p.GetParserRuleContext()) - if p.HasError() { - goto errorExit - } - } - p.SetState(229) + p.SetState(219) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 9, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(226) - p.ForExpressionStatement() + p.SetState(216) + p.ForExpressionBody() } } - p.SetState(231) + p.SetState(221) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 9, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } { - p.SetState(232) + p.SetState(222) p.ForExpressionReturn() } @@ -2742,59 +2643,59 @@ func (s *ForExpressionSourceContext) Accept(visitor antlr.ParseTreeVisitor) inte func (p *FqlParser) ForExpressionSource() (localctx IForExpressionSourceContext) { localctx = NewForExpressionSourceContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 20, FqlParserRULE_forExpressionSource) - p.SetState(243) + p.SetState(233) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 13, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(236) + p.SetState(226) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(237) + p.SetState(227) p.ArrayLiteral() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(238) + p.SetState(228) p.ObjectLiteral() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(239) + p.SetState(229) p.Variable() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(240) + p.SetState(230) p.MemberExpression() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(241) + p.SetState(231) p.RangeOperator() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(242) + p.SetState(232) p.Param() } @@ -2961,7 +2862,7 @@ func (s *ForExpressionClauseContext) Accept(visitor antlr.ParseTreeVisitor) inte func (p *FqlParser) ForExpressionClause() (localctx IForExpressionClauseContext) { localctx = NewForExpressionClauseContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 22, FqlParserRULE_forExpressionClause) - p.SetState(249) + p.SetState(239) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2971,28 +2872,28 @@ func (p *FqlParser) ForExpressionClause() (localctx IForExpressionClauseContext) case FqlParserLimit: p.EnterOuterAlt(localctx, 1) { - p.SetState(245) + p.SetState(235) p.LimitClause() } case FqlParserSort: p.EnterOuterAlt(localctx, 2) { - p.SetState(246) + p.SetState(236) p.SortClause() } case FqlParserFilter: p.EnterOuterAlt(localctx, 3) { - p.SetState(247) + p.SetState(237) p.FilterClause() } case FqlParserCollect: p.EnterOuterAlt(localctx, 4) { - p.SetState(248) + p.SetState(238) p.CollectClause() } @@ -3126,24 +3027,24 @@ func (s *ForExpressionStatementContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FqlParser) ForExpressionStatement() (localctx IForExpressionStatementContext) { localctx = NewForExpressionStatementContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 24, FqlParserRULE_forExpressionStatement) - p.SetState(253) + p.SetState(243) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 15, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 13, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(251) + p.SetState(241) p.VariableDeclaration() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(252) + p.SetState(242) p.FunctionCallExpression() } @@ -3164,6 +3065,156 @@ errorExit: goto errorExit // Trick to prevent compiler error if the label is not used } +// IForExpressionBodyContext is an interface to support dynamic dispatch. +type IForExpressionBodyContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + ForExpressionStatement() IForExpressionStatementContext + ForExpressionClause() IForExpressionClauseContext + + // IsForExpressionBodyContext differentiates from other interfaces. + IsForExpressionBodyContext() +} + +type ForExpressionBodyContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyForExpressionBodyContext() *ForExpressionBodyContext { + var p = new(ForExpressionBodyContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FqlParserRULE_forExpressionBody + return p +} + +func InitEmptyForExpressionBodyContext(p *ForExpressionBodyContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FqlParserRULE_forExpressionBody +} + +func (*ForExpressionBodyContext) IsForExpressionBodyContext() {} + +func NewForExpressionBodyContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ForExpressionBodyContext { + var p = new(ForExpressionBodyContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = FqlParserRULE_forExpressionBody + + return p +} + +func (s *ForExpressionBodyContext) GetParser() antlr.Parser { return s.parser } + +func (s *ForExpressionBodyContext) ForExpressionStatement() IForExpressionStatementContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IForExpressionStatementContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IForExpressionStatementContext) +} + +func (s *ForExpressionBodyContext) ForExpressionClause() IForExpressionClauseContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IForExpressionClauseContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IForExpressionClauseContext) +} + +func (s *ForExpressionBodyContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ForExpressionBodyContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ForExpressionBodyContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FqlParserListener); ok { + listenerT.EnterForExpressionBody(s) + } +} + +func (s *ForExpressionBodyContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FqlParserListener); ok { + listenerT.ExitForExpressionBody(s) + } +} + +func (s *ForExpressionBodyContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case FqlParserVisitor: + return t.VisitForExpressionBody(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *FqlParser) ForExpressionBody() (localctx IForExpressionBodyContext) { + localctx = NewForExpressionBodyContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 26, FqlParserRULE_forExpressionBody) + p.SetState(247) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 14, p.GetParserRuleContext()) { + case 1: + p.EnterOuterAlt(localctx, 1) + { + p.SetState(245) + p.ForExpressionStatement() + } + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(246) + p.ForExpressionClause() + } + + case antlr.ATNInvalidAltNumber: + goto errorExit + } + +errorExit: + if p.HasError() { + v := p.GetError() + localctx.SetException(v) + p.GetErrorHandler().ReportError(p, v) + p.GetErrorHandler().Recover(p, v) + p.SetError(nil) + } + p.ExitRule() + return localctx + goto errorExit // Trick to prevent compiler error if the label is not used +} + // IForExpressionReturnContext is an interface to support dynamic dispatch. type IForExpressionReturnContext interface { antlr.ParserRuleContext @@ -3275,8 +3326,8 @@ func (s *ForExpressionReturnContext) Accept(visitor antlr.ParseTreeVisitor) inte func (p *FqlParser) ForExpressionReturn() (localctx IForExpressionReturnContext) { localctx = NewForExpressionReturnContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 26, FqlParserRULE_forExpressionReturn) - p.SetState(257) + p.EnterRule(localctx, 28, FqlParserRULE_forExpressionReturn) + p.SetState(251) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3286,14 +3337,14 @@ func (p *FqlParser) ForExpressionReturn() (localctx IForExpressionReturnContext) case FqlParserReturn: p.EnterOuterAlt(localctx, 1) { - p.SetState(255) + p.SetState(249) p.ReturnExpression() } case FqlParserFor: p.EnterOuterAlt(localctx, 2) { - p.SetState(256) + p.SetState(250) p.ForExpression() } @@ -3414,10 +3465,10 @@ func (s *FilterClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) FilterClause() (localctx IFilterClauseContext) { localctx = NewFilterClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 28, FqlParserRULE_filterClause) + p.EnterRule(localctx, 30, FqlParserRULE_filterClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(259) + p.SetState(253) p.Match(FqlParserFilter) if p.HasError() { // Recognition error - abort rule @@ -3425,7 +3476,7 @@ func (p *FqlParser) FilterClause() (localctx IFilterClauseContext) { } } { - p.SetState(260) + p.SetState(254) p.expression(0) } @@ -3572,12 +3623,12 @@ func (s *LimitClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { localctx = NewLimitClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 30, FqlParserRULE_limitClause) + p.EnterRule(localctx, 32, FqlParserRULE_limitClause) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(262) + p.SetState(256) p.Match(FqlParserLimit) if p.HasError() { // Recognition error - abort rule @@ -3585,10 +3636,10 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { } } { - p.SetState(263) + p.SetState(257) p.LimitClauseValue() } - p.SetState(266) + p.SetState(260) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3597,7 +3648,7 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { if _la == FqlParserComma { { - p.SetState(264) + p.SetState(258) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -3605,7 +3656,7 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { } } { - p.SetState(265) + p.SetState(259) p.LimitClauseValue() } @@ -3786,46 +3837,46 @@ func (s *LimitClauseValueContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) LimitClauseValue() (localctx ILimitClauseValueContext) { localctx = NewLimitClauseValueContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 32, FqlParserRULE_limitClauseValue) - p.SetState(273) + p.EnterRule(localctx, 34, FqlParserRULE_limitClauseValue) + p.SetState(267) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 18, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 17, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(268) + p.SetState(262) p.IntegerLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(269) + p.SetState(263) p.Param() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(270) + p.SetState(264) p.Variable() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(271) + p.SetState(265) p.FunctionCallExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(272) + p.SetState(266) p.MemberExpression() } @@ -3981,12 +4032,12 @@ func (s *SortClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) SortClause() (localctx ISortClauseContext) { localctx = NewSortClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 34, FqlParserRULE_sortClause) + p.EnterRule(localctx, 36, FqlParserRULE_sortClause) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(275) + p.SetState(269) p.Match(FqlParserSort) if p.HasError() { // Recognition error - abort rule @@ -3994,10 +4045,10 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { } } { - p.SetState(276) + p.SetState(270) p.SortClauseExpression() } - p.SetState(281) + p.SetState(275) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4006,7 +4057,7 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { for _la == FqlParserComma { { - p.SetState(277) + p.SetState(271) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -4014,11 +4065,11 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { } } { - p.SetState(278) + p.SetState(272) p.SortClauseExpression() } - p.SetState(283) + p.SetState(277) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4138,18 +4189,18 @@ func (s *SortClauseExpressionContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FqlParser) SortClauseExpression() (localctx ISortClauseExpressionContext) { localctx = NewSortClauseExpressionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 36, FqlParserRULE_sortClauseExpression) + p.EnterRule(localctx, 38, FqlParserRULE_sortClauseExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(284) + p.SetState(278) p.expression(0) } - p.SetState(286) + p.SetState(280) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 20, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 19, p.GetParserRuleContext()) == 1 { { - p.SetState(285) + p.SetState(279) p.Match(FqlParserSortDirection) if p.HasError() { // Recognition error - abort rule @@ -4324,18 +4375,18 @@ func (s *CollectClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { localctx = NewCollectClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 38, FqlParserRULE_collectClause) - p.SetState(306) + p.EnterRule(localctx, 40, FqlParserRULE_collectClause) + p.SetState(300) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 21, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 20, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(288) + p.SetState(282) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4343,14 +4394,14 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(289) + p.SetState(283) p.CollectCounter() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(290) + p.SetState(284) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4358,14 +4409,14 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(291) + p.SetState(285) p.CollectAggregator() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(292) + p.SetState(286) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4373,18 +4424,18 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(293) + p.SetState(287) p.CollectGrouping() } { - p.SetState(294) + p.SetState(288) p.CollectAggregator() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(296) + p.SetState(290) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4392,18 +4443,18 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(297) + p.SetState(291) p.CollectGrouping() } { - p.SetState(298) + p.SetState(292) p.CollectGroupVariable() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(300) + p.SetState(294) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4411,18 +4462,18 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(301) + p.SetState(295) p.CollectGrouping() } { - p.SetState(302) + p.SetState(296) p.CollectCounter() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(304) + p.SetState(298) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4430,7 +4481,7 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(305) + p.SetState(299) p.CollectGrouping() } @@ -4555,10 +4606,10 @@ func (s *CollectSelectorContext) Accept(visitor antlr.ParseTreeVisitor) interfac func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { localctx = NewCollectSelectorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 40, FqlParserRULE_collectSelector) + p.EnterRule(localctx, 42, FqlParserRULE_collectSelector) p.EnterOuterAlt(localctx, 1) { - p.SetState(308) + p.SetState(302) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4566,7 +4617,7 @@ func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { } } { - p.SetState(309) + p.SetState(303) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -4574,7 +4625,7 @@ func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { } } { - p.SetState(310) + p.SetState(304) p.expression(0) } @@ -4721,15 +4772,15 @@ func (s *CollectGroupingContext) Accept(visitor antlr.ParseTreeVisitor) interfac func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { localctx = NewCollectGroupingContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 42, FqlParserRULE_collectGrouping) + p.EnterRule(localctx, 44, FqlParserRULE_collectGrouping) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(312) + p.SetState(306) p.CollectSelector() } - p.SetState(317) + p.SetState(311) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4738,7 +4789,7 @@ func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { for _la == FqlParserComma { { - p.SetState(313) + p.SetState(307) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -4746,11 +4797,11 @@ func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { } } { - p.SetState(314) + p.SetState(308) p.CollectSelector() } - p.SetState(319) + p.SetState(313) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4906,12 +4957,12 @@ func (s *CollectAggregatorContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { localctx = NewCollectAggregatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 44, FqlParserRULE_collectAggregator) + p.EnterRule(localctx, 46, FqlParserRULE_collectAggregator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(320) + p.SetState(314) p.Match(FqlParserAggregate) if p.HasError() { // Recognition error - abort rule @@ -4919,10 +4970,10 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { } } { - p.SetState(321) + p.SetState(315) p.CollectAggregateSelector() } - p.SetState(326) + p.SetState(320) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4931,7 +4982,7 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { for _la == FqlParserComma { { - p.SetState(322) + p.SetState(316) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -4939,11 +4990,11 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { } } { - p.SetState(323) + p.SetState(317) p.CollectAggregateSelector() } - p.SetState(328) + p.SetState(322) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5068,10 +5119,10 @@ func (s *CollectAggregateSelectorContext) Accept(visitor antlr.ParseTreeVisitor) func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelectorContext) { localctx = NewCollectAggregateSelectorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 46, FqlParserRULE_collectAggregateSelector) + p.EnterRule(localctx, 48, FqlParserRULE_collectAggregateSelector) p.EnterOuterAlt(localctx, 1) { - p.SetState(329) + p.SetState(323) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5079,7 +5130,7 @@ func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelect } } { - p.SetState(330) + p.SetState(324) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -5087,7 +5138,7 @@ func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelect } } { - p.SetState(331) + p.SetState(325) p.FunctionCallExpression() } @@ -5218,18 +5269,18 @@ func (s *CollectGroupVariableContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FqlParser) CollectGroupVariable() (localctx ICollectGroupVariableContext) { localctx = NewCollectGroupVariableContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 48, FqlParserRULE_collectGroupVariable) - p.SetState(341) + p.EnterRule(localctx, 50, FqlParserRULE_collectGroupVariable) + p.SetState(335) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 25, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 24, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(333) + p.SetState(327) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5237,14 +5288,14 @@ func (p *FqlParser) CollectGroupVariable() (localctx ICollectGroupVariableContex } } { - p.SetState(334) + p.SetState(328) p.CollectSelector() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(335) + p.SetState(329) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5252,19 +5303,19 @@ func (p *FqlParser) CollectGroupVariable() (localctx ICollectGroupVariableContex } } { - p.SetState(336) + p.SetState(330) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(339) + p.SetState(333) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 24, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 23, p.GetParserRuleContext()) == 1 { { - p.SetState(337) + p.SetState(331) p.Match(FqlParserKeep) if p.HasError() { // Recognition error - abort rule @@ -5272,7 +5323,7 @@ func (p *FqlParser) CollectGroupVariable() (localctx ICollectGroupVariableContex } } { - p.SetState(338) + p.SetState(332) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5398,10 +5449,10 @@ func (s *CollectCounterContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { localctx = NewCollectCounterContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 50, FqlParserRULE_collectCounter) + p.EnterRule(localctx, 52, FqlParserRULE_collectCounter) p.EnterOuterAlt(localctx, 1) { - p.SetState(343) + p.SetState(337) p.Match(FqlParserWith) if p.HasError() { // Recognition error - abort rule @@ -5409,7 +5460,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(344) + p.SetState(338) p.Match(FqlParserCount) if p.HasError() { // Recognition error - abort rule @@ -5417,7 +5468,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(345) + p.SetState(339) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5425,7 +5476,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(346) + p.SetState(340) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5623,10 +5674,10 @@ func (s *WaitForExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { localctx = NewWaitForExpressionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 52, FqlParserRULE_waitForExpression) + p.EnterRule(localctx, 54, FqlParserRULE_waitForExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(348) + p.SetState(342) p.Match(FqlParserWaitfor) if p.HasError() { // Recognition error - abort rule @@ -5634,7 +5685,7 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(349) + p.SetState(343) p.Match(FqlParserEvent) if p.HasError() { // Recognition error - abort rule @@ -5642,11 +5693,11 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(350) + p.SetState(344) p.WaitForEventName() } { - p.SetState(351) + p.SetState(345) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -5654,39 +5705,39 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(352) + p.SetState(346) p.WaitForEventSource() } - p.SetState(354) + p.SetState(348) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 26, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 25, p.GetParserRuleContext()) == 1 { { - p.SetState(353) + p.SetState(347) p.OptionsClause() } } else if p.HasError() { // JIM goto errorExit } - p.SetState(357) + p.SetState(351) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 27, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 26, p.GetParserRuleContext()) == 1 { { - p.SetState(356) + p.SetState(350) p.FilterClause() } } else if p.HasError() { // JIM goto errorExit } - p.SetState(360) + p.SetState(354) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 28, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 27, p.GetParserRuleContext()) == 1 { { - p.SetState(359) + p.SetState(353) p.TimeoutClause() } @@ -5869,46 +5920,46 @@ func (s *WaitForEventNameContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) WaitForEventName() (localctx IWaitForEventNameContext) { localctx = NewWaitForEventNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 54, FqlParserRULE_waitForEventName) - p.SetState(367) + p.EnterRule(localctx, 56, FqlParserRULE_waitForEventName) + p.SetState(361) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 29, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 28, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(362) + p.SetState(356) p.StringLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(363) + p.SetState(357) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(364) + p.SetState(358) p.Param() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(365) + p.SetState(359) p.FunctionCallExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(366) + p.SetState(360) p.MemberExpression() } @@ -6057,32 +6108,32 @@ func (s *WaitForEventSourceContext) Accept(visitor antlr.ParseTreeVisitor) inter func (p *FqlParser) WaitForEventSource() (localctx IWaitForEventSourceContext) { localctx = NewWaitForEventSourceContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 56, FqlParserRULE_waitForEventSource) - p.SetState(372) + p.EnterRule(localctx, 58, FqlParserRULE_waitForEventSource) + p.SetState(366) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 30, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 29, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(369) + p.SetState(363) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(370) + p.SetState(364) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(371) + p.SetState(365) p.MemberExpression() } @@ -6202,10 +6253,10 @@ func (s *OptionsClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) OptionsClause() (localctx IOptionsClauseContext) { localctx = NewOptionsClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 58, FqlParserRULE_optionsClause) + p.EnterRule(localctx, 60, FqlParserRULE_optionsClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(374) + p.SetState(368) p.Match(FqlParserOptions) if p.HasError() { // Recognition error - abort rule @@ -6213,7 +6264,7 @@ func (p *FqlParser) OptionsClause() (localctx IOptionsClauseContext) { } } { - p.SetState(375) + p.SetState(369) p.ObjectLiteral() } @@ -6397,50 +6448,50 @@ func (s *TimeoutClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) TimeoutClause() (localctx ITimeoutClauseContext) { localctx = NewTimeoutClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 60, FqlParserRULE_timeoutClause) + p.EnterRule(localctx, 62, FqlParserRULE_timeoutClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(377) + p.SetState(371) p.Match(FqlParserTimeout) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(383) + p.SetState(377) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 31, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 30, p.GetParserRuleContext()) { case 1: { - p.SetState(378) + p.SetState(372) p.IntegerLiteral() } case 2: { - p.SetState(379) + p.SetState(373) p.Variable() } case 3: { - p.SetState(380) + p.SetState(374) p.Param() } case 4: { - p.SetState(381) + p.SetState(375) p.MemberExpression() } case 5: { - p.SetState(382) + p.SetState(376) p.FunctionCall() } @@ -6565,18 +6616,18 @@ func (s *ParamContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) Param() (localctx IParamContext) { localctx = NewParamContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 62, FqlParserRULE_param) - p.SetState(389) + p.EnterRule(localctx, 64, FqlParserRULE_param) + p.SetState(383) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 32, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 31, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(385) + p.SetState(379) p.Match(FqlParserParam) if p.HasError() { // Recognition error - abort rule @@ -6584,7 +6635,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { } } { - p.SetState(386) + p.SetState(380) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -6595,7 +6646,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(387) + p.SetState(381) p.Match(FqlParserParam) if p.HasError() { // Recognition error - abort rule @@ -6603,7 +6654,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { } } { - p.SetState(388) + p.SetState(382) p.SafeReservedWord() } @@ -6723,8 +6774,8 @@ func (s *VariableContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) Variable() (localctx IVariableContext) { localctx = NewVariableContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 64, FqlParserRULE_variable) - p.SetState(393) + p.EnterRule(localctx, 66, FqlParserRULE_variable) + p.SetState(387) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6734,7 +6785,7 @@ func (p *FqlParser) Variable() (localctx IVariableContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(391) + p.SetState(385) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -6745,7 +6796,7 @@ func (p *FqlParser) Variable() (localctx IVariableContext) { case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserCount, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 2) { - p.SetState(392) + p.SetState(386) p.SafeReservedWord() } @@ -6963,8 +7014,8 @@ func (s *LiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) Literal() (localctx ILiteralContext) { localctx = NewLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 66, FqlParserRULE_literal) - p.SetState(402) + p.EnterRule(localctx, 68, FqlParserRULE_literal) + p.SetState(396) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -6974,49 +7025,49 @@ func (p *FqlParser) Literal() (localctx ILiteralContext) { case FqlParserOpenBracket: p.EnterOuterAlt(localctx, 1) { - p.SetState(395) + p.SetState(389) p.ArrayLiteral() } case FqlParserOpenBrace: p.EnterOuterAlt(localctx, 2) { - p.SetState(396) + p.SetState(390) p.ObjectLiteral() } case FqlParserBooleanLiteral: p.EnterOuterAlt(localctx, 3) { - p.SetState(397) + p.SetState(391) p.BooleanLiteral() } case FqlParserStringLiteral: p.EnterOuterAlt(localctx, 4) { - p.SetState(398) + p.SetState(392) p.StringLiteral() } case FqlParserFloatLiteral: p.EnterOuterAlt(localctx, 5) { - p.SetState(399) + p.SetState(393) p.FloatLiteral() } case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 6) { - p.SetState(400) + p.SetState(394) p.IntegerLiteral() } case FqlParserNone, FqlParserNull: p.EnterOuterAlt(localctx, 7) { - p.SetState(401) + p.SetState(395) p.NoneLiteral() } @@ -7142,19 +7193,19 @@ func (s *ArrayLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) ArrayLiteral() (localctx IArrayLiteralContext) { localctx = NewArrayLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 68, FqlParserRULE_arrayLiteral) + p.EnterRule(localctx, 70, FqlParserRULE_arrayLiteral) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(404) + p.SetState(398) p.Match(FqlParserOpenBracket) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(406) + p.SetState(400) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7163,13 +7214,13 @@ func (p *FqlParser) ArrayLiteral() (localctx IArrayLiteralContext) { if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(405) + p.SetState(399) p.ArgumentList() } } { - p.SetState(408) + p.SetState(402) p.Match(FqlParserCloseBracket) if p.HasError() { // Recognition error - abort rule @@ -7330,21 +7381,21 @@ func (s *ObjectLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { localctx = NewObjectLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 70, FqlParserRULE_objectLiteral) + p.EnterRule(localctx, 72, FqlParserRULE_objectLiteral) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(410) + p.SetState(404) p.Match(FqlParserOpenBrace) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(422) + p.SetState(416) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7353,22 +7404,22 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&864691128389599233) != 0 { { - p.SetState(411) + p.SetState(405) p.PropertyAssignment() } - p.SetState(416) + p.SetState(410) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 36, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 35, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(412) + p.SetState(406) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -7376,22 +7427,22 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { } } { - p.SetState(413) + p.SetState(407) p.PropertyAssignment() } } - p.SetState(418) + p.SetState(412) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 36, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 35, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(420) + p.SetState(414) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7400,7 +7451,7 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { if _la == FqlParserComma { { - p.SetState(419) + p.SetState(413) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -7412,7 +7463,7 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { } { - p.SetState(424) + p.SetState(418) p.Match(FqlParserCloseBrace) if p.HasError() { // Recognition error - abort rule @@ -7515,10 +7566,10 @@ func (s *BooleanLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FqlParser) BooleanLiteral() (localctx IBooleanLiteralContext) { localctx = NewBooleanLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 72, FqlParserRULE_booleanLiteral) + p.EnterRule(localctx, 74, FqlParserRULE_booleanLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(426) + p.SetState(420) p.Match(FqlParserBooleanLiteral) if p.HasError() { // Recognition error - abort rule @@ -7621,10 +7672,10 @@ func (s *StringLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) StringLiteral() (localctx IStringLiteralContext) { localctx = NewStringLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 74, FqlParserRULE_stringLiteral) + p.EnterRule(localctx, 76, FqlParserRULE_stringLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(428) + p.SetState(422) p.Match(FqlParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -7727,10 +7778,10 @@ func (s *FloatLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) FloatLiteral() (localctx IFloatLiteralContext) { localctx = NewFloatLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 76, FqlParserRULE_floatLiteral) + p.EnterRule(localctx, 78, FqlParserRULE_floatLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(430) + p.SetState(424) p.Match(FqlParserFloatLiteral) if p.HasError() { // Recognition error - abort rule @@ -7833,10 +7884,10 @@ func (s *IntegerLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FqlParser) IntegerLiteral() (localctx IIntegerLiteralContext) { localctx = NewIntegerLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 78, FqlParserRULE_integerLiteral) + p.EnterRule(localctx, 80, FqlParserRULE_integerLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(432) + p.SetState(426) p.Match(FqlParserIntegerLiteral) if p.HasError() { // Recognition error - abort rule @@ -7944,12 +7995,12 @@ func (s *NoneLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) NoneLiteral() (localctx INoneLiteralContext) { localctx = NewNoneLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 80, FqlParserRULE_noneLiteral) + p.EnterRule(localctx, 82, FqlParserRULE_noneLiteral) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(434) + p.SetState(428) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserNone || _la == FqlParserNull) { @@ -8123,22 +8174,22 @@ func (s *PropertyAssignmentContext) Accept(visitor antlr.ParseTreeVisitor) inter func (p *FqlParser) PropertyAssignment() (localctx IPropertyAssignmentContext) { localctx = NewPropertyAssignmentContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 82, FqlParserRULE_propertyAssignment) - p.SetState(445) + p.EnterRule(localctx, 84, FqlParserRULE_propertyAssignment) + p.SetState(439) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 39, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 38, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(436) + p.SetState(430) p.PropertyName() } { - p.SetState(437) + p.SetState(431) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -8146,18 +8197,18 @@ func (p *FqlParser) PropertyAssignment() (localctx IPropertyAssignmentContext) { } } { - p.SetState(438) + p.SetState(432) p.expression(0) } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(440) + p.SetState(434) p.ComputedPropertyName() } { - p.SetState(441) + p.SetState(435) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -8165,14 +8216,14 @@ func (p *FqlParser) PropertyAssignment() (localctx IPropertyAssignmentContext) { } } { - p.SetState(442) + p.SetState(436) p.expression(0) } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(444) + p.SetState(438) p.Variable() } @@ -8297,10 +8348,10 @@ func (s *ComputedPropertyNameContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FqlParser) ComputedPropertyName() (localctx IComputedPropertyNameContext) { localctx = NewComputedPropertyNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 84, FqlParserRULE_computedPropertyName) + p.EnterRule(localctx, 86, FqlParserRULE_computedPropertyName) p.EnterOuterAlt(localctx, 1) { - p.SetState(447) + p.SetState(441) p.Match(FqlParserOpenBracket) if p.HasError() { // Recognition error - abort rule @@ -8308,11 +8359,11 @@ func (p *FqlParser) ComputedPropertyName() (localctx IComputedPropertyNameContex } } { - p.SetState(448) + p.SetState(442) p.expression(0) } { - p.SetState(449) + p.SetState(443) p.Match(FqlParserCloseBracket) if p.HasError() { // Recognition error - abort rule @@ -8483,8 +8534,8 @@ func (s *PropertyNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) PropertyName() (localctx IPropertyNameContext) { localctx = NewPropertyNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 86, FqlParserRULE_propertyName) - p.SetState(456) + p.EnterRule(localctx, 88, FqlParserRULE_propertyName) + p.SetState(450) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8494,7 +8545,7 @@ func (p *FqlParser) PropertyName() (localctx IPropertyNameContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(451) + p.SetState(445) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -8505,28 +8556,28 @@ func (p *FqlParser) PropertyName() (localctx IPropertyNameContext) { case FqlParserStringLiteral: p.EnterOuterAlt(localctx, 2) { - p.SetState(452) + p.SetState(446) p.StringLiteral() } case FqlParserParam: p.EnterOuterAlt(localctx, 3) { - p.SetState(453) + p.SetState(447) p.Param() } case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserCount, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 4) { - p.SetState(454) + p.SetState(448) p.SafeReservedWord() } case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn, FqlParserDo, FqlParserWhile: p.EnterOuterAlt(localctx, 5) { - p.SetState(455) + p.SetState(449) p.UnsafeReservedWord() } @@ -8647,14 +8698,14 @@ func (s *NamespaceIdentifierContext) Accept(visitor antlr.ParseTreeVisitor) inte func (p *FqlParser) NamespaceIdentifier() (localctx INamespaceIdentifierContext) { localctx = NewNamespaceIdentifierContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 88, FqlParserRULE_namespaceIdentifier) + p.EnterRule(localctx, 90, FqlParserRULE_namespaceIdentifier) p.EnterOuterAlt(localctx, 1) { - p.SetState(458) + p.SetState(452) p.Namespace() } { - p.SetState(459) + p.SetState(453) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -8762,11 +8813,11 @@ func (s *NamespaceContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) Namespace() (localctx INamespaceContext) { localctx = NewNamespaceContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 90, FqlParserRULE_namespace) + p.EnterRule(localctx, 92, FqlParserRULE_namespace) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(464) + p.SetState(458) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8775,7 +8826,7 @@ func (p *FqlParser) Namespace() (localctx INamespaceContext) { for _la == FqlParserNamespaceSegment { { - p.SetState(461) + p.SetState(455) p.Match(FqlParserNamespaceSegment) if p.HasError() { // Recognition error - abort rule @@ -8783,7 +8834,7 @@ func (p *FqlParser) Namespace() (localctx INamespaceContext) { } } - p.SetState(466) + p.SetState(460) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8941,15 +8992,15 @@ func (s *MemberExpressionContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) MemberExpression() (localctx IMemberExpressionContext) { localctx = NewMemberExpressionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 92, FqlParserRULE_memberExpression) + p.EnterRule(localctx, 94, FqlParserRULE_memberExpression) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(467) + p.SetState(461) p.MemberExpressionSource() } - p.SetState(469) + p.SetState(463) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8959,7 +9010,7 @@ func (p *FqlParser) MemberExpression() (localctx IMemberExpressionContext) { switch _alt { case 1: { - p.SetState(468) + p.SetState(462) p.MemberExpressionPath() } @@ -8968,9 +9019,9 @@ func (p *FqlParser) MemberExpression() (localctx IMemberExpressionContext) { goto errorExit } - p.SetState(471) + p.SetState(465) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 42, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 41, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -9151,46 +9202,46 @@ func (s *MemberExpressionSourceContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FqlParser) MemberExpressionSource() (localctx IMemberExpressionSourceContext) { localctx = NewMemberExpressionSourceContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 94, FqlParserRULE_memberExpressionSource) - p.SetState(478) + p.EnterRule(localctx, 96, FqlParserRULE_memberExpressionSource) + p.SetState(472) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 43, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 42, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(473) + p.SetState(467) p.Variable() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(474) + p.SetState(468) p.Param() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(475) + p.SetState(469) p.ArrayLiteral() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(476) + p.SetState(470) p.ObjectLiteral() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(477) + p.SetState(471) p.FunctionCall() } @@ -9322,18 +9373,18 @@ func (s *FunctionCallExpressionContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FqlParser) FunctionCallExpression() (localctx IFunctionCallExpressionContext) { localctx = NewFunctionCallExpressionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 96, FqlParserRULE_functionCallExpression) + p.EnterRule(localctx, 98, FqlParserRULE_functionCallExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(480) + p.SetState(474) p.FunctionCall() } - p.SetState(482) + p.SetState(476) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 44, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 43, p.GetParserRuleContext()) == 1 { { - p.SetState(481) + p.SetState(475) p.ErrorOperator() } @@ -9492,27 +9543,27 @@ func (s *FunctionCallContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) FunctionCall() (localctx IFunctionCallContext) { localctx = NewFunctionCallContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 98, FqlParserRULE_functionCall) + p.EnterRule(localctx, 100, FqlParserRULE_functionCall) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(484) + p.SetState(478) p.Namespace() } { - p.SetState(485) + p.SetState(479) p.FunctionName() } { - p.SetState(486) + p.SetState(480) p.Match(FqlParserOpenParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(488) + p.SetState(482) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9521,13 +9572,13 @@ func (p *FqlParser) FunctionCall() (localctx IFunctionCallContext) { if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(487) + p.SetState(481) p.ArgumentList() } } { - p.SetState(490) + p.SetState(484) p.Match(FqlParserCloseParen) if p.HasError() { // Recognition error - abort rule @@ -9664,8 +9715,8 @@ func (s *FunctionNameContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) FunctionName() (localctx IFunctionNameContext) { localctx = NewFunctionNameContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 100, FqlParserRULE_functionName) - p.SetState(495) + p.EnterRule(localctx, 102, FqlParserRULE_functionName) + p.SetState(489) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9675,7 +9726,7 @@ func (p *FqlParser) FunctionName() (localctx IFunctionNameContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(492) + p.SetState(486) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -9686,14 +9737,14 @@ func (p *FqlParser) FunctionName() (localctx IFunctionNameContext) { case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserCount, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 2) { - p.SetState(493) + p.SetState(487) p.SafeReservedWord() } case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn, FqlParserDo, FqlParserWhile: p.EnterOuterAlt(localctx, 3) { - p.SetState(494) + p.SetState(488) p.UnsafeReservedWord() } @@ -9845,29 +9896,29 @@ func (s *ArgumentListContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) ArgumentList() (localctx IArgumentListContext) { localctx = NewArgumentListContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 102, FqlParserRULE_argumentList) + p.EnterRule(localctx, 104, FqlParserRULE_argumentList) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(497) + p.SetState(491) p.expression(0) } - p.SetState(502) + p.SetState(496) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 47, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 46, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(498) + p.SetState(492) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -9875,22 +9926,22 @@ func (p *FqlParser) ArgumentList() (localctx IArgumentListContext) { } } { - p.SetState(499) + p.SetState(493) p.expression(0) } } - p.SetState(504) + p.SetState(498) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 47, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 46, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(506) + p.SetState(500) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9899,7 +9950,7 @@ func (p *FqlParser) ArgumentList() (localctx IArgumentListContext) { if _la == FqlParserComma { { - p.SetState(505) + p.SetState(499) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -10055,19 +10106,19 @@ func (s *MemberExpressionPathContext) Accept(visitor antlr.ParseTreeVisitor) int func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContext) { localctx = NewMemberExpressionPathContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 104, FqlParserRULE_memberExpressionPath) + p.EnterRule(localctx, 106, FqlParserRULE_memberExpressionPath) var _la int - p.SetState(519) + p.SetState(513) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 51, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 50, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) - p.SetState(509) + p.SetState(503) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10076,13 +10127,13 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex if _la == FqlParserQuestionMark { { - p.SetState(508) + p.SetState(502) p.ErrorOperator() } } { - p.SetState(511) + p.SetState(505) p.Match(FqlParserDot) if p.HasError() { // Recognition error - abort rule @@ -10090,13 +10141,13 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex } } { - p.SetState(512) + p.SetState(506) p.PropertyName() } case 2: p.EnterOuterAlt(localctx, 2) - p.SetState(516) + p.SetState(510) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10105,11 +10156,11 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex if _la == FqlParserQuestionMark { { - p.SetState(513) + p.SetState(507) p.ErrorOperator() } { - p.SetState(514) + p.SetState(508) p.Match(FqlParserDot) if p.HasError() { // Recognition error - abort rule @@ -10119,7 +10170,7 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex } { - p.SetState(518) + p.SetState(512) p.ComputedPropertyName() } @@ -10312,12 +10363,12 @@ func (s *SafeReservedWordContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) SafeReservedWord() (localctx ISafeReservedWordContext) { localctx = NewSafeReservedWordContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 106, FqlParserRULE_safeReservedWord) + p.EnterRule(localctx, 108, FqlParserRULE_safeReservedWord) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(521) + p.SetState(515) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&1148663921511497728) != 0) { @@ -10483,12 +10534,12 @@ func (s *UnsafeReservedWordContext) Accept(visitor antlr.ParseTreeVisitor) inter func (p *FqlParser) UnsafeReservedWord() (localctx IUnsafeReservedWordContext) { localctx = NewUnsafeReservedWordContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 108, FqlParserRULE_unsafeReservedWord) + p.EnterRule(localctx, 110, FqlParserRULE_unsafeReservedWord) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(523) + p.SetState(517) _la = p.GetTokenStream().LA(1) if !((int64((_la-35)) & ^0x3f) == 0 && ((int64(1)<<(_la-35))&1040311303) != 0) { @@ -10659,17 +10710,17 @@ func (s *RangeOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) RangeOperator() (localctx IRangeOperatorContext) { localctx = NewRangeOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 110, FqlParserRULE_rangeOperator) + p.EnterRule(localctx, 112, FqlParserRULE_rangeOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(525) + p.SetState(519) var _x = p.RangeOperand() localctx.(*RangeOperatorContext).left = _x } { - p.SetState(526) + p.SetState(520) p.Match(FqlParserRange) if p.HasError() { // Recognition error - abort rule @@ -10677,7 +10728,7 @@ func (p *FqlParser) RangeOperator() (localctx IRangeOperatorContext) { } } { - p.SetState(527) + p.SetState(521) var _x = p.RangeOperand() @@ -10825,8 +10876,8 @@ func (s *RangeOperandContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) RangeOperand() (localctx IRangeOperandContext) { localctx = NewRangeOperandContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 112, FqlParserRULE_rangeOperand) - p.SetState(532) + p.EnterRule(localctx, 114, FqlParserRULE_rangeOperand) + p.SetState(526) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10836,21 +10887,21 @@ func (p *FqlParser) RangeOperand() (localctx IRangeOperandContext) { case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(529) + p.SetState(523) p.IntegerLiteral() } case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserCount, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent, FqlParserIdentifier: p.EnterOuterAlt(localctx, 2) { - p.SetState(530) + p.SetState(524) p.Variable() } case FqlParserParam: p.EnterOuterAlt(localctx, 3) { - p.SetState(531) + p.SetState(525) p.Param() } @@ -11145,27 +11196,27 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { localctx = NewExpressionContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IExpressionContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 114 - p.EnterRecursionRule(localctx, 114, FqlParserRULE_expression, _p) + _startState := 116 + p.EnterRecursionRule(localctx, 116, FqlParserRULE_expression, _p) var _la int var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(539) + p.SetState(533) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 53, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 52, p.GetParserRuleContext()) { case 1: { - p.SetState(535) + p.SetState(529) p.UnaryOperator() } { - p.SetState(536) + p.SetState(530) var _x = p.expression(5) @@ -11174,7 +11225,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { case 2: { - p.SetState(538) + p.SetState(532) p.predicate(0) } @@ -11182,12 +11233,12 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(558) + p.SetState(552) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 56, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 55, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11197,29 +11248,29 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(556) + p.SetState(550) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 55, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 54, p.GetParserRuleContext()) { case 1: localctx = NewExpressionContext(p, _parentctx, _parentState) localctx.(*ExpressionContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expression) - p.SetState(541) + p.SetState(535) if !(p.Precpred(p.GetParserRuleContext(), 4)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) goto errorExit } { - p.SetState(542) + p.SetState(536) p.LogicalAndOperator() } { - p.SetState(543) + p.SetState(537) var _x = p.expression(5) @@ -11230,18 +11281,18 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { localctx = NewExpressionContext(p, _parentctx, _parentState) localctx.(*ExpressionContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expression) - p.SetState(545) + p.SetState(539) if !(p.Precpred(p.GetParserRuleContext(), 3)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) goto errorExit } { - p.SetState(546) + p.SetState(540) p.LogicalOrOperator() } { - p.SetState(547) + p.SetState(541) var _x = p.expression(4) @@ -11252,14 +11303,14 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { localctx = NewExpressionContext(p, _parentctx, _parentState) localctx.(*ExpressionContext).condition = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expression) - p.SetState(549) + p.SetState(543) if !(p.Precpred(p.GetParserRuleContext(), 2)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) goto errorExit } { - p.SetState(550) + p.SetState(544) var _m = p.Match(FqlParserQuestionMark) @@ -11269,7 +11320,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { goto errorExit } } - p.SetState(552) + p.SetState(546) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11278,7 +11329,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(551) + p.SetState(545) var _x = p.expression(0) @@ -11287,7 +11338,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } { - p.SetState(554) + p.SetState(548) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -11295,7 +11346,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } } { - p.SetState(555) + p.SetState(549) var _x = p.expression(3) @@ -11307,12 +11358,12 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } } - p.SetState(560) + p.SetState(554) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 56, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 55, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11567,23 +11618,23 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { localctx = NewPredicateContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IPredicateContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 116 - p.EnterRecursionRule(localctx, 116, FqlParserRULE_predicate, _p) + _startState := 118 + p.EnterRecursionRule(localctx, 118, FqlParserRULE_predicate, _p) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(562) + p.SetState(556) p.expressionAtom(0) } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(582) + p.SetState(576) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 58, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 57, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11593,29 +11644,29 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(580) + p.SetState(574) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 57, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 56, p.GetParserRuleContext()) { case 1: localctx = NewPredicateContext(p, _parentctx, _parentState) localctx.(*PredicateContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_predicate) - p.SetState(564) + p.SetState(558) if !(p.Precpred(p.GetParserRuleContext(), 5)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", "")) goto errorExit } { - p.SetState(565) + p.SetState(559) p.EqualityOperator() } { - p.SetState(566) + p.SetState(560) var _x = p.predicate(6) @@ -11626,18 +11677,18 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { localctx = NewPredicateContext(p, _parentctx, _parentState) localctx.(*PredicateContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_predicate) - p.SetState(568) + p.SetState(562) if !(p.Precpred(p.GetParserRuleContext(), 4)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) goto errorExit } { - p.SetState(569) + p.SetState(563) p.ArrayOperator() } { - p.SetState(570) + p.SetState(564) var _x = p.predicate(5) @@ -11648,18 +11699,18 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { localctx = NewPredicateContext(p, _parentctx, _parentState) localctx.(*PredicateContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_predicate) - p.SetState(572) + p.SetState(566) if !(p.Precpred(p.GetParserRuleContext(), 3)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) goto errorExit } { - p.SetState(573) + p.SetState(567) p.InOperator() } { - p.SetState(574) + p.SetState(568) var _x = p.predicate(4) @@ -11670,18 +11721,18 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { localctx = NewPredicateContext(p, _parentctx, _parentState) localctx.(*PredicateContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_predicate) - p.SetState(576) + p.SetState(570) if !(p.Precpred(p.GetParserRuleContext(), 2)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) goto errorExit } { - p.SetState(577) + p.SetState(571) p.LikeOperator() } { - p.SetState(578) + p.SetState(572) var _x = p.predicate(3) @@ -11693,12 +11744,12 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { } } - p.SetState(584) + p.SetState(578) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 58, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 57, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12099,85 +12150,85 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { localctx = NewExpressionAtomContext(p, p.GetParserRuleContext(), _parentState) var _prevctx IExpressionAtomContext = localctx var _ antlr.ParserRuleContext = _prevctx // TODO: To prevent unused variable warning. - _startState := 118 - p.EnterRecursionRule(localctx, 118, FqlParserRULE_expressionAtom, _p) + _startState := 120 + p.EnterRecursionRule(localctx, 120, FqlParserRULE_expressionAtom, _p) var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(602) + p.SetState(596) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 61, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 60, p.GetParserRuleContext()) { case 1: { - p.SetState(586) + p.SetState(580) p.FunctionCallExpression() } case 2: { - p.SetState(587) + p.SetState(581) p.RangeOperator() } case 3: { - p.SetState(588) + p.SetState(582) p.Literal() } case 4: { - p.SetState(589) + p.SetState(583) p.Variable() } case 5: { - p.SetState(590) + p.SetState(584) p.MemberExpression() } case 6: { - p.SetState(591) + p.SetState(585) p.Param() } case 7: { - p.SetState(592) + p.SetState(586) p.Match(FqlParserOpenParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(596) + p.SetState(590) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 59, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 58, p.GetParserRuleContext()) { case 1: { - p.SetState(593) + p.SetState(587) p.ForExpression() } case 2: { - p.SetState(594) + p.SetState(588) p.WaitForExpression() } case 3: { - p.SetState(595) + p.SetState(589) p.expression(0) } @@ -12185,19 +12236,19 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { goto errorExit } { - p.SetState(598) + p.SetState(592) p.Match(FqlParserCloseParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(600) + p.SetState(594) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 60, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 59, p.GetParserRuleContext()) == 1 { { - p.SetState(599) + p.SetState(593) p.ErrorOperator() } @@ -12209,12 +12260,12 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(618) + p.SetState(612) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 63, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12224,29 +12275,29 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(616) + p.SetState(610) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 61, p.GetParserRuleContext()) { case 1: localctx = NewExpressionAtomContext(p, _parentctx, _parentState) localctx.(*ExpressionAtomContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expressionAtom) - p.SetState(604) + p.SetState(598) if !(p.Precpred(p.GetParserRuleContext(), 10)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) goto errorExit } { - p.SetState(605) + p.SetState(599) p.MultiplicativeOperator() } { - p.SetState(606) + p.SetState(600) var _x = p.expressionAtom(11) @@ -12257,18 +12308,18 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { localctx = NewExpressionAtomContext(p, _parentctx, _parentState) localctx.(*ExpressionAtomContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expressionAtom) - p.SetState(608) + p.SetState(602) if !(p.Precpred(p.GetParserRuleContext(), 9)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", "")) goto errorExit } { - p.SetState(609) + p.SetState(603) p.AdditiveOperator() } { - p.SetState(610) + p.SetState(604) var _x = p.expressionAtom(10) @@ -12279,18 +12330,18 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { localctx = NewExpressionAtomContext(p, _parentctx, _parentState) localctx.(*ExpressionAtomContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expressionAtom) - p.SetState(612) + p.SetState(606) if !(p.Precpred(p.GetParserRuleContext(), 8)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", "")) goto errorExit } { - p.SetState(613) + p.SetState(607) p.RegexpOperator() } { - p.SetState(614) + p.SetState(608) var _x = p.expressionAtom(9) @@ -12302,12 +12353,12 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { } } - p.SetState(620) + p.SetState(614) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 63, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12463,12 +12514,12 @@ func (s *ArrayOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { localctx = NewArrayOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 120, FqlParserRULE_arrayOperator) + p.EnterRule(localctx, 122, FqlParserRULE_arrayOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(621) + p.SetState(615) var _lt = p.GetTokenStream().LT(1) @@ -12485,7 +12536,7 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { p.Consume() } } - p.SetState(624) + p.SetState(618) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12494,13 +12545,13 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { switch p.GetTokenStream().LA(1) { case FqlParserNot, FqlParserIn: { - p.SetState(622) + p.SetState(616) p.InOperator() } case FqlParserGt, FqlParserLt, FqlParserEq, FqlParserGte, FqlParserLte, FqlParserNeq: { - p.SetState(623) + p.SetState(617) p.EqualityOperator() } @@ -12629,12 +12680,12 @@ func (s *EqualityOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) EqualityOperator() (localctx IEqualityOperatorContext) { localctx = NewEqualityOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 122, FqlParserRULE_equalityOperator) + p.EnterRule(localctx, 124, FqlParserRULE_equalityOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(626) + p.SetState(620) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&2064384) != 0) { @@ -12745,11 +12796,11 @@ func (s *InOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { func (p *FqlParser) InOperator() (localctx IInOperatorContext) { localctx = NewInOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 124, FqlParserRULE_inOperator) + p.EnterRule(localctx, 126, FqlParserRULE_inOperator) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(629) + p.SetState(623) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12758,7 +12809,7 @@ func (p *FqlParser) InOperator() (localctx IInOperatorContext) { if _la == FqlParserNot { { - p.SetState(628) + p.SetState(622) p.Match(FqlParserNot) if p.HasError() { // Recognition error - abort rule @@ -12768,7 +12819,7 @@ func (p *FqlParser) InOperator() (localctx IInOperatorContext) { } { - p.SetState(631) + p.SetState(625) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -12876,11 +12927,11 @@ func (s *LikeOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) { localctx = NewLikeOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 126, FqlParserRULE_likeOperator) + p.EnterRule(localctx, 128, FqlParserRULE_likeOperator) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(634) + p.SetState(628) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12889,7 +12940,7 @@ func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) { if _la == FqlParserNot { { - p.SetState(633) + p.SetState(627) p.Match(FqlParserNot) if p.HasError() { // Recognition error - abort rule @@ -12899,7 +12950,7 @@ func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) { } { - p.SetState(636) + p.SetState(630) p.Match(FqlParserLike) if p.HasError() { // Recognition error - abort rule @@ -13012,12 +13063,12 @@ func (s *UnaryOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) UnaryOperator() (localctx IUnaryOperatorContext) { localctx = NewUnaryOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 128, FqlParserRULE_unaryOperator) + p.EnterRule(localctx, 130, FqlParserRULE_unaryOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(638) + p.SetState(632) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&2305843009264025600) != 0) { @@ -13128,12 +13179,12 @@ func (s *RegexpOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface func (p *FqlParser) RegexpOperator() (localctx IRegexpOperatorContext) { localctx = NewRegexpOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 130, FqlParserRULE_regexpOperator) + p.EnterRule(localctx, 132, FqlParserRULE_regexpOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(640) + p.SetState(634) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserRegexNotMatch || _la == FqlParserRegexMatch) { @@ -13239,10 +13290,10 @@ func (s *LogicalAndOperatorContext) Accept(visitor antlr.ParseTreeVisitor) inter func (p *FqlParser) LogicalAndOperator() (localctx ILogicalAndOperatorContext) { localctx = NewLogicalAndOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 132, FqlParserRULE_logicalAndOperator) + p.EnterRule(localctx, 134, FqlParserRULE_logicalAndOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(642) + p.SetState(636) p.Match(FqlParserAnd) if p.HasError() { // Recognition error - abort rule @@ -13345,10 +13396,10 @@ func (s *LogicalOrOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FqlParser) LogicalOrOperator() (localctx ILogicalOrOperatorContext) { localctx = NewLogicalOrOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 134, FqlParserRULE_logicalOrOperator) + p.EnterRule(localctx, 136, FqlParserRULE_logicalOrOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(644) + p.SetState(638) p.Match(FqlParserOr) if p.HasError() { // Recognition error - abort rule @@ -13461,12 +13512,12 @@ func (s *MultiplicativeOperatorContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FqlParser) MultiplicativeOperator() (localctx IMultiplicativeOperatorContext) { localctx = NewMultiplicativeOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 136, FqlParserRULE_multiplicativeOperator) + p.EnterRule(localctx, 138, FqlParserRULE_multiplicativeOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(646) + p.SetState(640) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&14680064) != 0) { @@ -13577,12 +13628,12 @@ func (s *AdditiveOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) AdditiveOperator() (localctx IAdditiveOperatorContext) { localctx = NewAdditiveOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 138, FqlParserRULE_additiveOperator) + p.EnterRule(localctx, 140, FqlParserRULE_additiveOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(648) + p.SetState(642) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserPlus || _la == FqlParserMinus) { @@ -13688,10 +13739,10 @@ func (s *ErrorOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) ErrorOperator() (localctx IErrorOperatorContext) { localctx = NewErrorOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 140, FqlParserRULE_errorOperator) + p.EnterRule(localctx, 142, FqlParserRULE_errorOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(650) + p.SetState(644) p.Match(FqlParserQuestionMark) if p.HasError() { // Recognition error - abort rule @@ -13714,21 +13765,21 @@ errorExit: func (p *FqlParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool { switch ruleIndex { - case 57: + case 58: var t *ExpressionContext = nil if localctx != nil { t = localctx.(*ExpressionContext) } return p.Expression_Sempred(t, predIndex) - case 58: + case 59: var t *PredicateContext = nil if localctx != nil { t = localctx.(*PredicateContext) } return p.Predicate_Sempred(t, predIndex) - case 59: + case 60: var t *ExpressionAtomContext = nil if localctx != nil { t = localctx.(*ExpressionAtomContext) diff --git a/pkg/parser/fql/fqlparser_base_listener.go b/pkg/parser/fql/fqlparser_base_listener.go index 255e5b7ab..1cf07b353 100644 --- a/pkg/parser/fql/fqlparser_base_listener.go +++ b/pkg/parser/fql/fqlparser_base_listener.go @@ -98,6 +98,12 @@ func (s *BaseFqlParserListener) EnterForExpressionStatement(ctx *ForExpressionSt // ExitForExpressionStatement is called when production forExpressionStatement is exited. func (s *BaseFqlParserListener) ExitForExpressionStatement(ctx *ForExpressionStatementContext) {} +// EnterForExpressionBody is called when production forExpressionBody is entered. +func (s *BaseFqlParserListener) EnterForExpressionBody(ctx *ForExpressionBodyContext) {} + +// ExitForExpressionBody is called when production forExpressionBody is exited. +func (s *BaseFqlParserListener) ExitForExpressionBody(ctx *ForExpressionBodyContext) {} + // EnterForExpressionReturn is called when production forExpressionReturn is entered. func (s *BaseFqlParserListener) EnterForExpressionReturn(ctx *ForExpressionReturnContext) {} diff --git a/pkg/parser/fql/fqlparser_base_visitor.go b/pkg/parser/fql/fqlparser_base_visitor.go index 999bb5404..f7262d2d5 100644 --- a/pkg/parser/fql/fqlparser_base_visitor.go +++ b/pkg/parser/fql/fqlparser_base_visitor.go @@ -59,6 +59,10 @@ func (v *BaseFqlParserVisitor) VisitForExpressionStatement(ctx *ForExpressionSta return v.VisitChildren(ctx) } +func (v *BaseFqlParserVisitor) VisitForExpressionBody(ctx *ForExpressionBodyContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseFqlParserVisitor) VisitForExpressionReturn(ctx *ForExpressionReturnContext) interface{} { return v.VisitChildren(ctx) } diff --git a/pkg/parser/fql/fqlparser_listener.go b/pkg/parser/fql/fqlparser_listener.go index 0117b32f9..2e53e949a 100644 --- a/pkg/parser/fql/fqlparser_listener.go +++ b/pkg/parser/fql/fqlparser_listener.go @@ -46,6 +46,9 @@ type FqlParserListener interface { // EnterForExpressionStatement is called when entering the forExpressionStatement production. EnterForExpressionStatement(c *ForExpressionStatementContext) + // EnterForExpressionBody is called when entering the forExpressionBody production. + EnterForExpressionBody(c *ForExpressionBodyContext) + // EnterForExpressionReturn is called when entering the forExpressionReturn production. EnterForExpressionReturn(c *ForExpressionReturnContext) @@ -259,6 +262,9 @@ type FqlParserListener interface { // ExitForExpressionStatement is called when exiting the forExpressionStatement production. ExitForExpressionStatement(c *ForExpressionStatementContext) + // ExitForExpressionBody is called when exiting the forExpressionBody production. + ExitForExpressionBody(c *ForExpressionBodyContext) + // ExitForExpressionReturn is called when exiting the forExpressionReturn production. ExitForExpressionReturn(c *ForExpressionReturnContext) diff --git a/pkg/parser/fql/fqlparser_visitor.go b/pkg/parser/fql/fqlparser_visitor.go index 73500d47d..2f8000094 100644 --- a/pkg/parser/fql/fqlparser_visitor.go +++ b/pkg/parser/fql/fqlparser_visitor.go @@ -46,6 +46,9 @@ type FqlParserVisitor interface { // Visit a parse tree produced by FqlParser#forExpressionStatement. VisitForExpressionStatement(ctx *ForExpressionStatementContext) interface{} + // Visit a parse tree produced by FqlParser#forExpressionBody. + VisitForExpressionBody(ctx *ForExpressionBodyContext) interface{} + // Visit a parse tree produced by FqlParser#forExpressionReturn. VisitForExpressionReturn(ctx *ForExpressionReturnContext) interface{} diff --git a/pkg/runtime/opcode.go b/pkg/runtime/opcode.go index 2a246bb2d..8d054278a 100644 --- a/pkg/runtime/opcode.go +++ b/pkg/runtime/opcode.go @@ -54,18 +54,16 @@ const ( OpCall OpProtectedCall - OpSort - - OpLoopInit // Creates a loop result dataset + OpLoopBegin // Creates a loop result dataset OpLoopPush - OpLoopFin + OpLoopEnd - OpForLoopStart // Creates an iterator for a loop + OpForLoopInit // Creates an iterator for a loop OpForLoopNext OpForLoopValue OpForLoopKey - OpWhileLoopStart + OpWhileLoopInit OpWhileLoopNext OpWhileLoopValue ) diff --git a/pkg/runtime/values/noop_iter.go b/pkg/runtime/values/noop_iter.go index d2b06d490..dcc7f4232 100644 --- a/pkg/runtime/values/noop_iter.go +++ b/pkg/runtime/values/noop_iter.go @@ -2,7 +2,6 @@ package values import ( "context" - "github.com/MontFerret/ferret/pkg/runtime/core" ) diff --git a/pkg/runtime/vm.go b/pkg/runtime/vm.go index ac61c1d4b..7a15f2635 100644 --- a/pkg/runtime/vm.go +++ b/pkg/runtime/vm.go @@ -296,13 +296,12 @@ loop: } else { return nil, err } - case OpLoopInit: + case OpLoopBegin: reg[dst] = NewDataSet(src1 == 1) - case OpLoopFin: - // TODO: Close iterator if it's closeable + case OpLoopEnd: ds := reg[src1].(*DataSet) reg[dst] = ds.ToArray() - case OpForLoopStart: + case OpForLoopInit: input := reg[src1] switch src := input.(type) { @@ -347,7 +346,7 @@ loop: // TODO: Remove boxed value!!! iter := reg[src1].(*values.Boxed).Unwrap().(core.Iterator) reg[dst] = iter.Key() - case OpWhileLoopStart: + case OpWhileLoopInit: reg[dst] = values.Int(-1) case OpWhileLoopNext: cond := values.ToBoolean(reg[src1])