diff --git a/pkg/parser/antlr/FqlLexer.g4 b/pkg/parser/antlr/FqlLexer.g4 index 9ed16a74..7c729a9d 100644 --- a/pkg/parser/antlr/FqlLexer.g4 +++ b/pkg/parser/antlr/FqlLexer.g4 @@ -60,6 +60,9 @@ Sort: 'SORT'; Limit: 'LIMIT'; Let: 'LET'; Collect: 'COLLECT'; +Do: 'DO'; +While: 'WHILE'; +Step: 'STEP'; SortDirection: 'ASC' | 'DESC'; None: 'NONE'; Null: 'NULL'; @@ -81,8 +84,6 @@ Event: 'EVENT'; Like: 'LIKE'; Not: 'NOT' | '!'; In: 'IN'; -Do: 'DO'; -While: 'WHILE'; // Literals Param: '@'; diff --git a/pkg/parser/antlr/FqlParser.g4 b/pkg/parser/antlr/FqlParser.g4 index 94886839..4e527448 100644 --- a/pkg/parser/antlr/FqlParser.g4 +++ b/pkg/parser/antlr/FqlParser.g4 @@ -46,10 +46,13 @@ returnExpression forExpression : For valueVariable=(Identifier | IgnoreIdentifier) (Comma counterVariable=Identifier)? In forExpressionSource - forExpressionBody* + forExpressionBody* forExpressionReturn - | For counterVariable=(Identifier | IgnoreIdentifier) Do? While expression - forExpressionBody* + | For counterVariable=(Identifier | IgnoreIdentifier) Do? While expression Step forExpressionStepAssignment + forExpressionBody* + forExpressionReturn + | For counterVariable=(Identifier | IgnoreIdentifier) Do? While expression // Backwards compatibility + forExpressionBody* forExpressionReturn ; @@ -85,6 +88,10 @@ forExpressionReturn | forExpression ; +forExpressionStepAssignment + : Identifier Assign expression + ; + filterClause : Filter expression ; @@ -316,6 +323,7 @@ unsafeReservedWord | Waitfor | While | Do + | Step | In | Like | Not diff --git a/pkg/parser/fql/FqlLexer.interp b/pkg/parser/fql/FqlLexer.interp index c1127b89..65499dea 100644 --- a/pkg/parser/fql/FqlLexer.interp +++ b/pkg/parser/fql/FqlLexer.interp @@ -46,6 +46,9 @@ null 'LIMIT' 'LET' 'COLLECT' +'DO' +'WHILE' +'STEP' null 'NONE' 'NULL' @@ -61,8 +64,6 @@ null 'LIKE' null 'IN' -'DO' -'WHILE' '@' null null @@ -120,6 +121,9 @@ Sort Limit Let Collect +Do +While +Step SortDirection None Null @@ -135,8 +139,6 @@ Event Like Not In -Do -While Param Identifier IgnoreIdentifier @@ -193,6 +195,9 @@ Sort Limit Let Collect +Do +While +Step SortDirection None Null @@ -208,8 +213,6 @@ Event Like Not In -Do -While Param Identifier IgnoreIdentifier @@ -239,4 +242,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 71, 613, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 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, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 172, 8, 0, 10, 0, 12, 0, 175, 9, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 186, 8, 1, 10, 1, 12, 1, 189, 9, 1, 1, 1, 1, 1, 1, 2, 4, 2, 194, 8, 2, 11, 2, 12, 2, 195, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 261, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 267, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 371, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 401, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 455, 8, 59, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 64, 4, 64, 472, 8, 64, 11, 64, 12, 64, 473, 1, 64, 1, 64, 5, 64, 478, 8, 64, 10, 64, 12, 64, 481, 9, 64, 5, 64, 483, 8, 64, 10, 64, 12, 64, 486, 9, 64, 1, 64, 1, 64, 5, 64, 490, 8, 64, 10, 64, 12, 64, 493, 9, 64, 5, 64, 495, 8, 64, 10, 64, 12, 64, 498, 9, 64, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 506, 8, 66, 1, 67, 4, 67, 509, 8, 67, 11, 67, 12, 67, 510, 1, 68, 1, 68, 1, 68, 4, 68, 516, 8, 68, 11, 68, 12, 68, 517, 1, 68, 3, 68, 521, 8, 68, 1, 68, 1, 68, 3, 68, 525, 8, 68, 3, 68, 527, 8, 68, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 5, 72, 539, 8, 72, 10, 72, 12, 72, 542, 9, 72, 3, 72, 544, 8, 72, 1, 73, 1, 73, 3, 73, 548, 8, 73, 1, 73, 4, 73, 551, 8, 73, 11, 73, 12, 73, 552, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 569, 8, 78, 10, 78, 12, 78, 572, 9, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 582, 8, 79, 10, 79, 12, 79, 585, 9, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 593, 8, 80, 10, 80, 12, 80, 596, 9, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 604, 8, 81, 10, 81, 12, 81, 607, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 173, 0, 83, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 0, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 1, 0, 12, 3, 0, 10, 10, 13, 13, 8232, 8233, 4, 0, 9, 9, 11, 12, 32, 32, 160, 160, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 96, 96, 1, 0, 180, 180, 637, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 1, 167, 1, 0, 0, 0, 3, 181, 1, 0, 0, 0, 5, 193, 1, 0, 0, 0, 7, 199, 1, 0, 0, 0, 9, 203, 1, 0, 0, 0, 11, 205, 1, 0, 0, 0, 13, 207, 1, 0, 0, 0, 15, 209, 1, 0, 0, 0, 17, 211, 1, 0, 0, 0, 19, 213, 1, 0, 0, 0, 21, 215, 1, 0, 0, 0, 23, 217, 1, 0, 0, 0, 25, 219, 1, 0, 0, 0, 27, 221, 1, 0, 0, 0, 29, 223, 1, 0, 0, 0, 31, 225, 1, 0, 0, 0, 33, 227, 1, 0, 0, 0, 35, 230, 1, 0, 0, 0, 37, 233, 1, 0, 0, 0, 39, 236, 1, 0, 0, 0, 41, 239, 1, 0, 0, 0, 43, 241, 1, 0, 0, 0, 45, 243, 1, 0, 0, 0, 47, 245, 1, 0, 0, 0, 49, 247, 1, 0, 0, 0, 51, 249, 1, 0, 0, 0, 53, 252, 1, 0, 0, 0, 55, 260, 1, 0, 0, 0, 57, 266, 1, 0, 0, 0, 59, 268, 1, 0, 0, 0, 61, 271, 1, 0, 0, 0, 63, 273, 1, 0, 0, 0, 65, 275, 1, 0, 0, 0, 67, 278, 1, 0, 0, 0, 69, 281, 1, 0, 0, 0, 71, 285, 1, 0, 0, 0, 73, 292, 1, 0, 0, 0, 75, 300, 1, 0, 0, 0, 77, 308, 1, 0, 0, 0, 79, 316, 1, 0, 0, 0, 81, 325, 1, 0, 0, 0, 83, 332, 1, 0, 0, 0, 85, 340, 1, 0, 0, 0, 87, 345, 1, 0, 0, 0, 89, 351, 1, 0, 0, 0, 91, 355, 1, 0, 0, 0, 93, 370, 1, 0, 0, 0, 95, 372, 1, 0, 0, 0, 97, 377, 1, 0, 0, 0, 99, 400, 1, 0, 0, 0, 101, 402, 1, 0, 0, 0, 103, 406, 1, 0, 0, 0, 105, 411, 1, 0, 0, 0, 107, 416, 1, 0, 0, 0, 109, 421, 1, 0, 0, 0, 111, 425, 1, 0, 0, 0, 113, 429, 1, 0, 0, 0, 115, 439, 1, 0, 0, 0, 117, 445, 1, 0, 0, 0, 119, 454, 1, 0, 0, 0, 121, 456, 1, 0, 0, 0, 123, 459, 1, 0, 0, 0, 125, 462, 1, 0, 0, 0, 127, 468, 1, 0, 0, 0, 129, 471, 1, 0, 0, 0, 131, 499, 1, 0, 0, 0, 133, 505, 1, 0, 0, 0, 135, 508, 1, 0, 0, 0, 137, 526, 1, 0, 0, 0, 139, 528, 1, 0, 0, 0, 141, 531, 1, 0, 0, 0, 143, 533, 1, 0, 0, 0, 145, 543, 1, 0, 0, 0, 147, 545, 1, 0, 0, 0, 149, 554, 1, 0, 0, 0, 151, 556, 1, 0, 0, 0, 153, 558, 1, 0, 0, 0, 155, 560, 1, 0, 0, 0, 157, 562, 1, 0, 0, 0, 159, 575, 1, 0, 0, 0, 161, 588, 1, 0, 0, 0, 163, 599, 1, 0, 0, 0, 165, 610, 1, 0, 0, 0, 167, 168, 5, 47, 0, 0, 168, 169, 5, 42, 0, 0, 169, 173, 1, 0, 0, 0, 170, 172, 9, 0, 0, 0, 171, 170, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, 176, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 42, 0, 0, 177, 178, 5, 47, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 6, 0, 0, 0, 180, 2, 1, 0, 0, 0, 181, 182, 5, 47, 0, 0, 182, 183, 5, 47, 0, 0, 183, 187, 1, 0, 0, 0, 184, 186, 8, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 6, 1, 0, 0, 191, 4, 1, 0, 0, 0, 192, 194, 7, 1, 0, 0, 193, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 198, 6, 2, 0, 0, 198, 6, 1, 0, 0, 0, 199, 200, 7, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 202, 6, 3, 0, 0, 202, 8, 1, 0, 0, 0, 203, 204, 5, 58, 0, 0, 204, 10, 1, 0, 0, 0, 205, 206, 5, 59, 0, 0, 206, 12, 1, 0, 0, 0, 207, 208, 5, 46, 0, 0, 208, 14, 1, 0, 0, 0, 209, 210, 5, 44, 0, 0, 210, 16, 1, 0, 0, 0, 211, 212, 5, 91, 0, 0, 212, 18, 1, 0, 0, 0, 213, 214, 5, 93, 0, 0, 214, 20, 1, 0, 0, 0, 215, 216, 5, 40, 0, 0, 216, 22, 1, 0, 0, 0, 217, 218, 5, 41, 0, 0, 218, 24, 1, 0, 0, 0, 219, 220, 5, 123, 0, 0, 220, 26, 1, 0, 0, 0, 221, 222, 5, 125, 0, 0, 222, 28, 1, 0, 0, 0, 223, 224, 5, 62, 0, 0, 224, 30, 1, 0, 0, 0, 225, 226, 5, 60, 0, 0, 226, 32, 1, 0, 0, 0, 227, 228, 5, 61, 0, 0, 228, 229, 5, 61, 0, 0, 229, 34, 1, 0, 0, 0, 230, 231, 5, 62, 0, 0, 231, 232, 5, 61, 0, 0, 232, 36, 1, 0, 0, 0, 233, 234, 5, 60, 0, 0, 234, 235, 5, 61, 0, 0, 235, 38, 1, 0, 0, 0, 236, 237, 5, 33, 0, 0, 237, 238, 5, 61, 0, 0, 238, 40, 1, 0, 0, 0, 239, 240, 5, 42, 0, 0, 240, 42, 1, 0, 0, 0, 241, 242, 5, 47, 0, 0, 242, 44, 1, 0, 0, 0, 243, 244, 5, 37, 0, 0, 244, 46, 1, 0, 0, 0, 245, 246, 5, 43, 0, 0, 246, 48, 1, 0, 0, 0, 247, 248, 5, 45, 0, 0, 248, 50, 1, 0, 0, 0, 249, 250, 5, 45, 0, 0, 250, 251, 5, 45, 0, 0, 251, 52, 1, 0, 0, 0, 252, 253, 5, 43, 0, 0, 253, 254, 5, 43, 0, 0, 254, 54, 1, 0, 0, 0, 255, 256, 5, 65, 0, 0, 256, 257, 5, 78, 0, 0, 257, 261, 5, 68, 0, 0, 258, 259, 5, 38, 0, 0, 259, 261, 5, 38, 0, 0, 260, 255, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 56, 1, 0, 0, 0, 262, 263, 5, 79, 0, 0, 263, 267, 5, 82, 0, 0, 264, 265, 5, 124, 0, 0, 265, 267, 5, 124, 0, 0, 266, 262, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 267, 58, 1, 0, 0, 0, 268, 269, 3, 13, 6, 0, 269, 270, 3, 13, 6, 0, 270, 60, 1, 0, 0, 0, 271, 272, 5, 61, 0, 0, 272, 62, 1, 0, 0, 0, 273, 274, 5, 63, 0, 0, 274, 64, 1, 0, 0, 0, 275, 276, 5, 33, 0, 0, 276, 277, 5, 126, 0, 0, 277, 66, 1, 0, 0, 0, 278, 279, 5, 61, 0, 0, 279, 280, 5, 126, 0, 0, 280, 68, 1, 0, 0, 0, 281, 282, 5, 70, 0, 0, 282, 283, 5, 79, 0, 0, 283, 284, 5, 82, 0, 0, 284, 70, 1, 0, 0, 0, 285, 286, 5, 82, 0, 0, 286, 287, 5, 69, 0, 0, 287, 288, 5, 84, 0, 0, 288, 289, 5, 85, 0, 0, 289, 290, 5, 82, 0, 0, 290, 291, 5, 78, 0, 0, 291, 72, 1, 0, 0, 0, 292, 293, 5, 87, 0, 0, 293, 294, 5, 65, 0, 0, 294, 295, 5, 73, 0, 0, 295, 296, 5, 84, 0, 0, 296, 297, 5, 70, 0, 0, 297, 298, 5, 79, 0, 0, 298, 299, 5, 82, 0, 0, 299, 74, 1, 0, 0, 0, 300, 301, 5, 79, 0, 0, 301, 302, 5, 80, 0, 0, 302, 303, 5, 84, 0, 0, 303, 304, 5, 73, 0, 0, 304, 305, 5, 79, 0, 0, 305, 306, 5, 78, 0, 0, 306, 307, 5, 83, 0, 0, 307, 76, 1, 0, 0, 0, 308, 309, 5, 84, 0, 0, 309, 310, 5, 73, 0, 0, 310, 311, 5, 77, 0, 0, 311, 312, 5, 69, 0, 0, 312, 313, 5, 79, 0, 0, 313, 314, 5, 85, 0, 0, 314, 315, 5, 84, 0, 0, 315, 78, 1, 0, 0, 0, 316, 317, 5, 68, 0, 0, 317, 318, 5, 73, 0, 0, 318, 319, 5, 83, 0, 0, 319, 320, 5, 84, 0, 0, 320, 321, 5, 73, 0, 0, 321, 322, 5, 78, 0, 0, 322, 323, 5, 67, 0, 0, 323, 324, 5, 84, 0, 0, 324, 80, 1, 0, 0, 0, 325, 326, 5, 70, 0, 0, 326, 327, 5, 73, 0, 0, 327, 328, 5, 76, 0, 0, 328, 329, 5, 84, 0, 0, 329, 330, 5, 69, 0, 0, 330, 331, 5, 82, 0, 0, 331, 82, 1, 0, 0, 0, 332, 333, 5, 67, 0, 0, 333, 334, 5, 85, 0, 0, 334, 335, 5, 82, 0, 0, 335, 336, 5, 82, 0, 0, 336, 337, 5, 69, 0, 0, 337, 338, 5, 78, 0, 0, 338, 339, 5, 84, 0, 0, 339, 84, 1, 0, 0, 0, 340, 341, 5, 83, 0, 0, 341, 342, 5, 79, 0, 0, 342, 343, 5, 82, 0, 0, 343, 344, 5, 84, 0, 0, 344, 86, 1, 0, 0, 0, 345, 346, 5, 76, 0, 0, 346, 347, 5, 73, 0, 0, 347, 348, 5, 77, 0, 0, 348, 349, 5, 73, 0, 0, 349, 350, 5, 84, 0, 0, 350, 88, 1, 0, 0, 0, 351, 352, 5, 76, 0, 0, 352, 353, 5, 69, 0, 0, 353, 354, 5, 84, 0, 0, 354, 90, 1, 0, 0, 0, 355, 356, 5, 67, 0, 0, 356, 357, 5, 79, 0, 0, 357, 358, 5, 76, 0, 0, 358, 359, 5, 76, 0, 0, 359, 360, 5, 69, 0, 0, 360, 361, 5, 67, 0, 0, 361, 362, 5, 84, 0, 0, 362, 92, 1, 0, 0, 0, 363, 364, 5, 65, 0, 0, 364, 365, 5, 83, 0, 0, 365, 371, 5, 67, 0, 0, 366, 367, 5, 68, 0, 0, 367, 368, 5, 69, 0, 0, 368, 369, 5, 83, 0, 0, 369, 371, 5, 67, 0, 0, 370, 363, 1, 0, 0, 0, 370, 366, 1, 0, 0, 0, 371, 94, 1, 0, 0, 0, 372, 373, 5, 78, 0, 0, 373, 374, 5, 79, 0, 0, 374, 375, 5, 78, 0, 0, 375, 376, 5, 69, 0, 0, 376, 96, 1, 0, 0, 0, 377, 378, 5, 78, 0, 0, 378, 379, 5, 85, 0, 0, 379, 380, 5, 76, 0, 0, 380, 381, 5, 76, 0, 0, 381, 98, 1, 0, 0, 0, 382, 383, 5, 84, 0, 0, 383, 384, 5, 82, 0, 0, 384, 385, 5, 85, 0, 0, 385, 401, 5, 69, 0, 0, 386, 387, 5, 116, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, 117, 0, 0, 389, 401, 5, 101, 0, 0, 390, 391, 5, 70, 0, 0, 391, 392, 5, 65, 0, 0, 392, 393, 5, 76, 0, 0, 393, 394, 5, 83, 0, 0, 394, 401, 5, 69, 0, 0, 395, 396, 5, 102, 0, 0, 396, 397, 5, 97, 0, 0, 397, 398, 5, 108, 0, 0, 398, 399, 5, 115, 0, 0, 399, 401, 5, 101, 0, 0, 400, 382, 1, 0, 0, 0, 400, 386, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 395, 1, 0, 0, 0, 401, 100, 1, 0, 0, 0, 402, 403, 5, 85, 0, 0, 403, 404, 5, 83, 0, 0, 404, 405, 5, 69, 0, 0, 405, 102, 1, 0, 0, 0, 406, 407, 5, 73, 0, 0, 407, 408, 5, 78, 0, 0, 408, 409, 5, 84, 0, 0, 409, 410, 5, 79, 0, 0, 410, 104, 1, 0, 0, 0, 411, 412, 5, 75, 0, 0, 412, 413, 5, 69, 0, 0, 413, 414, 5, 69, 0, 0, 414, 415, 5, 80, 0, 0, 415, 106, 1, 0, 0, 0, 416, 417, 5, 87, 0, 0, 417, 418, 5, 73, 0, 0, 418, 419, 5, 84, 0, 0, 419, 420, 5, 72, 0, 0, 420, 108, 1, 0, 0, 0, 421, 422, 5, 65, 0, 0, 422, 423, 5, 76, 0, 0, 423, 424, 5, 76, 0, 0, 424, 110, 1, 0, 0, 0, 425, 426, 5, 65, 0, 0, 426, 427, 5, 78, 0, 0, 427, 428, 5, 89, 0, 0, 428, 112, 1, 0, 0, 0, 429, 430, 5, 65, 0, 0, 430, 431, 5, 71, 0, 0, 431, 432, 5, 71, 0, 0, 432, 433, 5, 82, 0, 0, 433, 434, 5, 69, 0, 0, 434, 435, 5, 71, 0, 0, 435, 436, 5, 65, 0, 0, 436, 437, 5, 84, 0, 0, 437, 438, 5, 69, 0, 0, 438, 114, 1, 0, 0, 0, 439, 440, 5, 69, 0, 0, 440, 441, 5, 86, 0, 0, 441, 442, 5, 69, 0, 0, 442, 443, 5, 78, 0, 0, 443, 444, 5, 84, 0, 0, 444, 116, 1, 0, 0, 0, 445, 446, 5, 76, 0, 0, 446, 447, 5, 73, 0, 0, 447, 448, 5, 75, 0, 0, 448, 449, 5, 69, 0, 0, 449, 118, 1, 0, 0, 0, 450, 451, 5, 78, 0, 0, 451, 452, 5, 79, 0, 0, 452, 455, 5, 84, 0, 0, 453, 455, 5, 33, 0, 0, 454, 450, 1, 0, 0, 0, 454, 453, 1, 0, 0, 0, 455, 120, 1, 0, 0, 0, 456, 457, 5, 73, 0, 0, 457, 458, 5, 78, 0, 0, 458, 122, 1, 0, 0, 0, 459, 460, 5, 68, 0, 0, 460, 461, 5, 79, 0, 0, 461, 124, 1, 0, 0, 0, 462, 463, 5, 87, 0, 0, 463, 464, 5, 72, 0, 0, 464, 465, 5, 73, 0, 0, 465, 466, 5, 76, 0, 0, 466, 467, 5, 69, 0, 0, 467, 126, 1, 0, 0, 0, 468, 469, 5, 64, 0, 0, 469, 128, 1, 0, 0, 0, 470, 472, 3, 149, 74, 0, 471, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, 471, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 484, 1, 0, 0, 0, 475, 479, 3, 151, 75, 0, 476, 478, 3, 129, 64, 0, 477, 476, 1, 0, 0, 0, 478, 481, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 483, 1, 0, 0, 0, 481, 479, 1, 0, 0, 0, 482, 475, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 496, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 487, 491, 3, 155, 77, 0, 488, 490, 3, 129, 64, 0, 489, 488, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 487, 1, 0, 0, 0, 495, 498, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 130, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 3, 153, 76, 0, 500, 132, 1, 0, 0, 0, 501, 506, 3, 159, 79, 0, 502, 506, 3, 157, 78, 0, 503, 506, 3, 161, 80, 0, 504, 506, 3, 163, 81, 0, 505, 501, 1, 0, 0, 0, 505, 502, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 504, 1, 0, 0, 0, 506, 134, 1, 0, 0, 0, 507, 509, 7, 2, 0, 0, 508, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 508, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 136, 1, 0, 0, 0, 512, 513, 3, 145, 72, 0, 513, 515, 3, 13, 6, 0, 514, 516, 7, 2, 0, 0, 515, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 521, 3, 147, 73, 0, 520, 519, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 527, 1, 0, 0, 0, 522, 524, 3, 145, 72, 0, 523, 525, 3, 147, 73, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 512, 1, 0, 0, 0, 526, 522, 1, 0, 0, 0, 527, 138, 1, 0, 0, 0, 528, 529, 3, 129, 64, 0, 529, 530, 3, 165, 82, 0, 530, 140, 1, 0, 0, 0, 531, 532, 9, 0, 0, 0, 532, 142, 1, 0, 0, 0, 533, 534, 7, 3, 0, 0, 534, 144, 1, 0, 0, 0, 535, 544, 5, 48, 0, 0, 536, 540, 7, 4, 0, 0, 537, 539, 7, 2, 0, 0, 538, 537, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, 540, 1, 0, 0, 0, 543, 535, 1, 0, 0, 0, 543, 536, 1, 0, 0, 0, 544, 146, 1, 0, 0, 0, 545, 547, 7, 5, 0, 0, 546, 548, 7, 6, 0, 0, 547, 546, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, 551, 7, 2, 0, 0, 550, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 148, 1, 0, 0, 0, 554, 555, 7, 7, 0, 0, 555, 150, 1, 0, 0, 0, 556, 557, 3, 153, 76, 0, 557, 152, 1, 0, 0, 0, 558, 559, 5, 95, 0, 0, 559, 154, 1, 0, 0, 0, 560, 561, 2, 48, 57, 0, 561, 156, 1, 0, 0, 0, 562, 570, 5, 34, 0, 0, 563, 564, 5, 92, 0, 0, 564, 569, 9, 0, 0, 0, 565, 566, 5, 34, 0, 0, 566, 569, 5, 34, 0, 0, 567, 569, 8, 8, 0, 0, 568, 563, 1, 0, 0, 0, 568, 565, 1, 0, 0, 0, 568, 567, 1, 0, 0, 0, 569, 572, 1, 0, 0, 0, 570, 568, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 573, 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 573, 574, 5, 34, 0, 0, 574, 158, 1, 0, 0, 0, 575, 583, 5, 39, 0, 0, 576, 577, 5, 92, 0, 0, 577, 582, 9, 0, 0, 0, 578, 579, 5, 39, 0, 0, 579, 582, 5, 39, 0, 0, 580, 582, 8, 9, 0, 0, 581, 576, 1, 0, 0, 0, 581, 578, 1, 0, 0, 0, 581, 580, 1, 0, 0, 0, 582, 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 5, 39, 0, 0, 587, 160, 1, 0, 0, 0, 588, 594, 5, 96, 0, 0, 589, 590, 5, 92, 0, 0, 590, 593, 5, 96, 0, 0, 591, 593, 8, 10, 0, 0, 592, 589, 1, 0, 0, 0, 592, 591, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 597, 598, 5, 96, 0, 0, 598, 162, 1, 0, 0, 0, 599, 605, 5, 180, 0, 0, 600, 601, 5, 92, 0, 0, 601, 604, 5, 180, 0, 0, 602, 604, 8, 11, 0, 0, 603, 600, 1, 0, 0, 0, 603, 602, 1, 0, 0, 0, 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, 608, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 609, 5, 180, 0, 0, 609, 164, 1, 0, 0, 0, 610, 611, 5, 58, 0, 0, 611, 612, 5, 58, 0, 0, 612, 166, 1, 0, 0, 0, 32, 0, 173, 187, 195, 260, 266, 370, 400, 454, 473, 479, 484, 491, 496, 505, 510, 517, 520, 524, 526, 540, 543, 547, 552, 568, 570, 581, 583, 592, 594, 603, 605, 1, 0, 1, 0] \ No newline at end of file +[4, 0, 72, 620, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 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, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 174, 8, 0, 10, 0, 12, 0, 177, 9, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 188, 8, 1, 10, 1, 12, 1, 191, 9, 1, 1, 1, 1, 1, 1, 2, 4, 2, 196, 8, 2, 11, 2, 12, 2, 197, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 263, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 269, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 387, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 417, 8, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 471, 8, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 4, 65, 479, 8, 65, 11, 65, 12, 65, 480, 1, 65, 1, 65, 5, 65, 485, 8, 65, 10, 65, 12, 65, 488, 9, 65, 5, 65, 490, 8, 65, 10, 65, 12, 65, 493, 9, 65, 1, 65, 1, 65, 5, 65, 497, 8, 65, 10, 65, 12, 65, 500, 9, 65, 5, 65, 502, 8, 65, 10, 65, 12, 65, 505, 9, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, 513, 8, 67, 1, 68, 4, 68, 516, 8, 68, 11, 68, 12, 68, 517, 1, 69, 1, 69, 1, 69, 4, 69, 523, 8, 69, 11, 69, 12, 69, 524, 1, 69, 3, 69, 528, 8, 69, 1, 69, 1, 69, 3, 69, 532, 8, 69, 3, 69, 534, 8, 69, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 5, 73, 546, 8, 73, 10, 73, 12, 73, 549, 9, 73, 3, 73, 551, 8, 73, 1, 74, 1, 74, 3, 74, 555, 8, 74, 1, 74, 4, 74, 558, 8, 74, 11, 74, 12, 74, 559, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 576, 8, 79, 10, 79, 12, 79, 579, 9, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 589, 8, 80, 10, 80, 12, 80, 592, 9, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 600, 8, 81, 10, 81, 12, 81, 603, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, 611, 8, 82, 10, 82, 12, 82, 614, 9, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 175, 0, 84, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 1, 0, 12, 3, 0, 10, 10, 13, 13, 8232, 8233, 4, 0, 9, 9, 11, 12, 32, 32, 160, 160, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 96, 96, 1, 0, 180, 180, 644, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 1, 169, 1, 0, 0, 0, 3, 183, 1, 0, 0, 0, 5, 195, 1, 0, 0, 0, 7, 201, 1, 0, 0, 0, 9, 205, 1, 0, 0, 0, 11, 207, 1, 0, 0, 0, 13, 209, 1, 0, 0, 0, 15, 211, 1, 0, 0, 0, 17, 213, 1, 0, 0, 0, 19, 215, 1, 0, 0, 0, 21, 217, 1, 0, 0, 0, 23, 219, 1, 0, 0, 0, 25, 221, 1, 0, 0, 0, 27, 223, 1, 0, 0, 0, 29, 225, 1, 0, 0, 0, 31, 227, 1, 0, 0, 0, 33, 229, 1, 0, 0, 0, 35, 232, 1, 0, 0, 0, 37, 235, 1, 0, 0, 0, 39, 238, 1, 0, 0, 0, 41, 241, 1, 0, 0, 0, 43, 243, 1, 0, 0, 0, 45, 245, 1, 0, 0, 0, 47, 247, 1, 0, 0, 0, 49, 249, 1, 0, 0, 0, 51, 251, 1, 0, 0, 0, 53, 254, 1, 0, 0, 0, 55, 262, 1, 0, 0, 0, 57, 268, 1, 0, 0, 0, 59, 270, 1, 0, 0, 0, 61, 273, 1, 0, 0, 0, 63, 275, 1, 0, 0, 0, 65, 277, 1, 0, 0, 0, 67, 280, 1, 0, 0, 0, 69, 283, 1, 0, 0, 0, 71, 287, 1, 0, 0, 0, 73, 294, 1, 0, 0, 0, 75, 302, 1, 0, 0, 0, 77, 310, 1, 0, 0, 0, 79, 318, 1, 0, 0, 0, 81, 327, 1, 0, 0, 0, 83, 334, 1, 0, 0, 0, 85, 342, 1, 0, 0, 0, 87, 347, 1, 0, 0, 0, 89, 353, 1, 0, 0, 0, 91, 357, 1, 0, 0, 0, 93, 365, 1, 0, 0, 0, 95, 368, 1, 0, 0, 0, 97, 374, 1, 0, 0, 0, 99, 386, 1, 0, 0, 0, 101, 388, 1, 0, 0, 0, 103, 393, 1, 0, 0, 0, 105, 416, 1, 0, 0, 0, 107, 418, 1, 0, 0, 0, 109, 422, 1, 0, 0, 0, 111, 427, 1, 0, 0, 0, 113, 432, 1, 0, 0, 0, 115, 437, 1, 0, 0, 0, 117, 441, 1, 0, 0, 0, 119, 445, 1, 0, 0, 0, 121, 455, 1, 0, 0, 0, 123, 461, 1, 0, 0, 0, 125, 470, 1, 0, 0, 0, 127, 472, 1, 0, 0, 0, 129, 475, 1, 0, 0, 0, 131, 478, 1, 0, 0, 0, 133, 506, 1, 0, 0, 0, 135, 512, 1, 0, 0, 0, 137, 515, 1, 0, 0, 0, 139, 533, 1, 0, 0, 0, 141, 535, 1, 0, 0, 0, 143, 538, 1, 0, 0, 0, 145, 540, 1, 0, 0, 0, 147, 550, 1, 0, 0, 0, 149, 552, 1, 0, 0, 0, 151, 561, 1, 0, 0, 0, 153, 563, 1, 0, 0, 0, 155, 565, 1, 0, 0, 0, 157, 567, 1, 0, 0, 0, 159, 569, 1, 0, 0, 0, 161, 582, 1, 0, 0, 0, 163, 595, 1, 0, 0, 0, 165, 606, 1, 0, 0, 0, 167, 617, 1, 0, 0, 0, 169, 170, 5, 47, 0, 0, 170, 171, 5, 42, 0, 0, 171, 175, 1, 0, 0, 0, 172, 174, 9, 0, 0, 0, 173, 172, 1, 0, 0, 0, 174, 177, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 178, 179, 5, 42, 0, 0, 179, 180, 5, 47, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 6, 0, 0, 0, 182, 2, 1, 0, 0, 0, 183, 184, 5, 47, 0, 0, 184, 185, 5, 47, 0, 0, 185, 189, 1, 0, 0, 0, 186, 188, 8, 0, 0, 0, 187, 186, 1, 0, 0, 0, 188, 191, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 189, 1, 0, 0, 0, 192, 193, 6, 1, 0, 0, 193, 4, 1, 0, 0, 0, 194, 196, 7, 1, 0, 0, 195, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 200, 6, 2, 0, 0, 200, 6, 1, 0, 0, 0, 201, 202, 7, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 204, 6, 3, 0, 0, 204, 8, 1, 0, 0, 0, 205, 206, 5, 58, 0, 0, 206, 10, 1, 0, 0, 0, 207, 208, 5, 59, 0, 0, 208, 12, 1, 0, 0, 0, 209, 210, 5, 46, 0, 0, 210, 14, 1, 0, 0, 0, 211, 212, 5, 44, 0, 0, 212, 16, 1, 0, 0, 0, 213, 214, 5, 91, 0, 0, 214, 18, 1, 0, 0, 0, 215, 216, 5, 93, 0, 0, 216, 20, 1, 0, 0, 0, 217, 218, 5, 40, 0, 0, 218, 22, 1, 0, 0, 0, 219, 220, 5, 41, 0, 0, 220, 24, 1, 0, 0, 0, 221, 222, 5, 123, 0, 0, 222, 26, 1, 0, 0, 0, 223, 224, 5, 125, 0, 0, 224, 28, 1, 0, 0, 0, 225, 226, 5, 62, 0, 0, 226, 30, 1, 0, 0, 0, 227, 228, 5, 60, 0, 0, 228, 32, 1, 0, 0, 0, 229, 230, 5, 61, 0, 0, 230, 231, 5, 61, 0, 0, 231, 34, 1, 0, 0, 0, 232, 233, 5, 62, 0, 0, 233, 234, 5, 61, 0, 0, 234, 36, 1, 0, 0, 0, 235, 236, 5, 60, 0, 0, 236, 237, 5, 61, 0, 0, 237, 38, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, 0, 0, 240, 40, 1, 0, 0, 0, 241, 242, 5, 42, 0, 0, 242, 42, 1, 0, 0, 0, 243, 244, 5, 47, 0, 0, 244, 44, 1, 0, 0, 0, 245, 246, 5, 37, 0, 0, 246, 46, 1, 0, 0, 0, 247, 248, 5, 43, 0, 0, 248, 48, 1, 0, 0, 0, 249, 250, 5, 45, 0, 0, 250, 50, 1, 0, 0, 0, 251, 252, 5, 45, 0, 0, 252, 253, 5, 45, 0, 0, 253, 52, 1, 0, 0, 0, 254, 255, 5, 43, 0, 0, 255, 256, 5, 43, 0, 0, 256, 54, 1, 0, 0, 0, 257, 258, 5, 65, 0, 0, 258, 259, 5, 78, 0, 0, 259, 263, 5, 68, 0, 0, 260, 261, 5, 38, 0, 0, 261, 263, 5, 38, 0, 0, 262, 257, 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 263, 56, 1, 0, 0, 0, 264, 265, 5, 79, 0, 0, 265, 269, 5, 82, 0, 0, 266, 267, 5, 124, 0, 0, 267, 269, 5, 124, 0, 0, 268, 264, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 58, 1, 0, 0, 0, 270, 271, 3, 13, 6, 0, 271, 272, 3, 13, 6, 0, 272, 60, 1, 0, 0, 0, 273, 274, 5, 61, 0, 0, 274, 62, 1, 0, 0, 0, 275, 276, 5, 63, 0, 0, 276, 64, 1, 0, 0, 0, 277, 278, 5, 33, 0, 0, 278, 279, 5, 126, 0, 0, 279, 66, 1, 0, 0, 0, 280, 281, 5, 61, 0, 0, 281, 282, 5, 126, 0, 0, 282, 68, 1, 0, 0, 0, 283, 284, 5, 70, 0, 0, 284, 285, 5, 79, 0, 0, 285, 286, 5, 82, 0, 0, 286, 70, 1, 0, 0, 0, 287, 288, 5, 82, 0, 0, 288, 289, 5, 69, 0, 0, 289, 290, 5, 84, 0, 0, 290, 291, 5, 85, 0, 0, 291, 292, 5, 82, 0, 0, 292, 293, 5, 78, 0, 0, 293, 72, 1, 0, 0, 0, 294, 295, 5, 87, 0, 0, 295, 296, 5, 65, 0, 0, 296, 297, 5, 73, 0, 0, 297, 298, 5, 84, 0, 0, 298, 299, 5, 70, 0, 0, 299, 300, 5, 79, 0, 0, 300, 301, 5, 82, 0, 0, 301, 74, 1, 0, 0, 0, 302, 303, 5, 79, 0, 0, 303, 304, 5, 80, 0, 0, 304, 305, 5, 84, 0, 0, 305, 306, 5, 73, 0, 0, 306, 307, 5, 79, 0, 0, 307, 308, 5, 78, 0, 0, 308, 309, 5, 83, 0, 0, 309, 76, 1, 0, 0, 0, 310, 311, 5, 84, 0, 0, 311, 312, 5, 73, 0, 0, 312, 313, 5, 77, 0, 0, 313, 314, 5, 69, 0, 0, 314, 315, 5, 79, 0, 0, 315, 316, 5, 85, 0, 0, 316, 317, 5, 84, 0, 0, 317, 78, 1, 0, 0, 0, 318, 319, 5, 68, 0, 0, 319, 320, 5, 73, 0, 0, 320, 321, 5, 83, 0, 0, 321, 322, 5, 84, 0, 0, 322, 323, 5, 73, 0, 0, 323, 324, 5, 78, 0, 0, 324, 325, 5, 67, 0, 0, 325, 326, 5, 84, 0, 0, 326, 80, 1, 0, 0, 0, 327, 328, 5, 70, 0, 0, 328, 329, 5, 73, 0, 0, 329, 330, 5, 76, 0, 0, 330, 331, 5, 84, 0, 0, 331, 332, 5, 69, 0, 0, 332, 333, 5, 82, 0, 0, 333, 82, 1, 0, 0, 0, 334, 335, 5, 67, 0, 0, 335, 336, 5, 85, 0, 0, 336, 337, 5, 82, 0, 0, 337, 338, 5, 82, 0, 0, 338, 339, 5, 69, 0, 0, 339, 340, 5, 78, 0, 0, 340, 341, 5, 84, 0, 0, 341, 84, 1, 0, 0, 0, 342, 343, 5, 83, 0, 0, 343, 344, 5, 79, 0, 0, 344, 345, 5, 82, 0, 0, 345, 346, 5, 84, 0, 0, 346, 86, 1, 0, 0, 0, 347, 348, 5, 76, 0, 0, 348, 349, 5, 73, 0, 0, 349, 350, 5, 77, 0, 0, 350, 351, 5, 73, 0, 0, 351, 352, 5, 84, 0, 0, 352, 88, 1, 0, 0, 0, 353, 354, 5, 76, 0, 0, 354, 355, 5, 69, 0, 0, 355, 356, 5, 84, 0, 0, 356, 90, 1, 0, 0, 0, 357, 358, 5, 67, 0, 0, 358, 359, 5, 79, 0, 0, 359, 360, 5, 76, 0, 0, 360, 361, 5, 76, 0, 0, 361, 362, 5, 69, 0, 0, 362, 363, 5, 67, 0, 0, 363, 364, 5, 84, 0, 0, 364, 92, 1, 0, 0, 0, 365, 366, 5, 68, 0, 0, 366, 367, 5, 79, 0, 0, 367, 94, 1, 0, 0, 0, 368, 369, 5, 87, 0, 0, 369, 370, 5, 72, 0, 0, 370, 371, 5, 73, 0, 0, 371, 372, 5, 76, 0, 0, 372, 373, 5, 69, 0, 0, 373, 96, 1, 0, 0, 0, 374, 375, 5, 83, 0, 0, 375, 376, 5, 84, 0, 0, 376, 377, 5, 69, 0, 0, 377, 378, 5, 80, 0, 0, 378, 98, 1, 0, 0, 0, 379, 380, 5, 65, 0, 0, 380, 381, 5, 83, 0, 0, 381, 387, 5, 67, 0, 0, 382, 383, 5, 68, 0, 0, 383, 384, 5, 69, 0, 0, 384, 385, 5, 83, 0, 0, 385, 387, 5, 67, 0, 0, 386, 379, 1, 0, 0, 0, 386, 382, 1, 0, 0, 0, 387, 100, 1, 0, 0, 0, 388, 389, 5, 78, 0, 0, 389, 390, 5, 79, 0, 0, 390, 391, 5, 78, 0, 0, 391, 392, 5, 69, 0, 0, 392, 102, 1, 0, 0, 0, 393, 394, 5, 78, 0, 0, 394, 395, 5, 85, 0, 0, 395, 396, 5, 76, 0, 0, 396, 397, 5, 76, 0, 0, 397, 104, 1, 0, 0, 0, 398, 399, 5, 84, 0, 0, 399, 400, 5, 82, 0, 0, 400, 401, 5, 85, 0, 0, 401, 417, 5, 69, 0, 0, 402, 403, 5, 116, 0, 0, 403, 404, 5, 114, 0, 0, 404, 405, 5, 117, 0, 0, 405, 417, 5, 101, 0, 0, 406, 407, 5, 70, 0, 0, 407, 408, 5, 65, 0, 0, 408, 409, 5, 76, 0, 0, 409, 410, 5, 83, 0, 0, 410, 417, 5, 69, 0, 0, 411, 412, 5, 102, 0, 0, 412, 413, 5, 97, 0, 0, 413, 414, 5, 108, 0, 0, 414, 415, 5, 115, 0, 0, 415, 417, 5, 101, 0, 0, 416, 398, 1, 0, 0, 0, 416, 402, 1, 0, 0, 0, 416, 406, 1, 0, 0, 0, 416, 411, 1, 0, 0, 0, 417, 106, 1, 0, 0, 0, 418, 419, 5, 85, 0, 0, 419, 420, 5, 83, 0, 0, 420, 421, 5, 69, 0, 0, 421, 108, 1, 0, 0, 0, 422, 423, 5, 73, 0, 0, 423, 424, 5, 78, 0, 0, 424, 425, 5, 84, 0, 0, 425, 426, 5, 79, 0, 0, 426, 110, 1, 0, 0, 0, 427, 428, 5, 75, 0, 0, 428, 429, 5, 69, 0, 0, 429, 430, 5, 69, 0, 0, 430, 431, 5, 80, 0, 0, 431, 112, 1, 0, 0, 0, 432, 433, 5, 87, 0, 0, 433, 434, 5, 73, 0, 0, 434, 435, 5, 84, 0, 0, 435, 436, 5, 72, 0, 0, 436, 114, 1, 0, 0, 0, 437, 438, 5, 65, 0, 0, 438, 439, 5, 76, 0, 0, 439, 440, 5, 76, 0, 0, 440, 116, 1, 0, 0, 0, 441, 442, 5, 65, 0, 0, 442, 443, 5, 78, 0, 0, 443, 444, 5, 89, 0, 0, 444, 118, 1, 0, 0, 0, 445, 446, 5, 65, 0, 0, 446, 447, 5, 71, 0, 0, 447, 448, 5, 71, 0, 0, 448, 449, 5, 82, 0, 0, 449, 450, 5, 69, 0, 0, 450, 451, 5, 71, 0, 0, 451, 452, 5, 65, 0, 0, 452, 453, 5, 84, 0, 0, 453, 454, 5, 69, 0, 0, 454, 120, 1, 0, 0, 0, 455, 456, 5, 69, 0, 0, 456, 457, 5, 86, 0, 0, 457, 458, 5, 69, 0, 0, 458, 459, 5, 78, 0, 0, 459, 460, 5, 84, 0, 0, 460, 122, 1, 0, 0, 0, 461, 462, 5, 76, 0, 0, 462, 463, 5, 73, 0, 0, 463, 464, 5, 75, 0, 0, 464, 465, 5, 69, 0, 0, 465, 124, 1, 0, 0, 0, 466, 467, 5, 78, 0, 0, 467, 468, 5, 79, 0, 0, 468, 471, 5, 84, 0, 0, 469, 471, 5, 33, 0, 0, 470, 466, 1, 0, 0, 0, 470, 469, 1, 0, 0, 0, 471, 126, 1, 0, 0, 0, 472, 473, 5, 73, 0, 0, 473, 474, 5, 78, 0, 0, 474, 128, 1, 0, 0, 0, 475, 476, 5, 64, 0, 0, 476, 130, 1, 0, 0, 0, 477, 479, 3, 151, 75, 0, 478, 477, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, 0, 481, 491, 1, 0, 0, 0, 482, 486, 3, 153, 76, 0, 483, 485, 3, 131, 65, 0, 484, 483, 1, 0, 0, 0, 485, 488, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 486, 487, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 489, 482, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 492, 1, 0, 0, 0, 492, 503, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 498, 3, 157, 78, 0, 495, 497, 3, 131, 65, 0, 496, 495, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 501, 494, 1, 0, 0, 0, 502, 505, 1, 0, 0, 0, 503, 501, 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 132, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 506, 507, 3, 155, 77, 0, 507, 134, 1, 0, 0, 0, 508, 513, 3, 161, 80, 0, 509, 513, 3, 159, 79, 0, 510, 513, 3, 163, 81, 0, 511, 513, 3, 165, 82, 0, 512, 508, 1, 0, 0, 0, 512, 509, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, 512, 511, 1, 0, 0, 0, 513, 136, 1, 0, 0, 0, 514, 516, 7, 2, 0, 0, 515, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 138, 1, 0, 0, 0, 519, 520, 3, 147, 73, 0, 520, 522, 3, 13, 6, 0, 521, 523, 7, 2, 0, 0, 522, 521, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, 528, 3, 149, 74, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 534, 1, 0, 0, 0, 529, 531, 3, 147, 73, 0, 530, 532, 3, 149, 74, 0, 531, 530, 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, 1, 0, 0, 0, 533, 519, 1, 0, 0, 0, 533, 529, 1, 0, 0, 0, 534, 140, 1, 0, 0, 0, 535, 536, 3, 131, 65, 0, 536, 537, 3, 167, 83, 0, 537, 142, 1, 0, 0, 0, 538, 539, 9, 0, 0, 0, 539, 144, 1, 0, 0, 0, 540, 541, 7, 3, 0, 0, 541, 146, 1, 0, 0, 0, 542, 551, 5, 48, 0, 0, 543, 547, 7, 4, 0, 0, 544, 546, 7, 2, 0, 0, 545, 544, 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 542, 1, 0, 0, 0, 550, 543, 1, 0, 0, 0, 551, 148, 1, 0, 0, 0, 552, 554, 7, 5, 0, 0, 553, 555, 7, 6, 0, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 1, 0, 0, 0, 556, 558, 7, 2, 0, 0, 557, 556, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 150, 1, 0, 0, 0, 561, 562, 7, 7, 0, 0, 562, 152, 1, 0, 0, 0, 563, 564, 3, 155, 77, 0, 564, 154, 1, 0, 0, 0, 565, 566, 5, 95, 0, 0, 566, 156, 1, 0, 0, 0, 567, 568, 2, 48, 57, 0, 568, 158, 1, 0, 0, 0, 569, 577, 5, 34, 0, 0, 570, 571, 5, 92, 0, 0, 571, 576, 9, 0, 0, 0, 572, 573, 5, 34, 0, 0, 573, 576, 5, 34, 0, 0, 574, 576, 8, 8, 0, 0, 575, 570, 1, 0, 0, 0, 575, 572, 1, 0, 0, 0, 575, 574, 1, 0, 0, 0, 576, 579, 1, 0, 0, 0, 577, 575, 1, 0, 0, 0, 577, 578, 1, 0, 0, 0, 578, 580, 1, 0, 0, 0, 579, 577, 1, 0, 0, 0, 580, 581, 5, 34, 0, 0, 581, 160, 1, 0, 0, 0, 582, 590, 5, 39, 0, 0, 583, 584, 5, 92, 0, 0, 584, 589, 9, 0, 0, 0, 585, 586, 5, 39, 0, 0, 586, 589, 5, 39, 0, 0, 587, 589, 8, 9, 0, 0, 588, 583, 1, 0, 0, 0, 588, 585, 1, 0, 0, 0, 588, 587, 1, 0, 0, 0, 589, 592, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 593, 1, 0, 0, 0, 592, 590, 1, 0, 0, 0, 593, 594, 5, 39, 0, 0, 594, 162, 1, 0, 0, 0, 595, 601, 5, 96, 0, 0, 596, 597, 5, 92, 0, 0, 597, 600, 5, 96, 0, 0, 598, 600, 8, 10, 0, 0, 599, 596, 1, 0, 0, 0, 599, 598, 1, 0, 0, 0, 600, 603, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 604, 605, 5, 96, 0, 0, 605, 164, 1, 0, 0, 0, 606, 612, 5, 180, 0, 0, 607, 608, 5, 92, 0, 0, 608, 611, 5, 180, 0, 0, 609, 611, 8, 11, 0, 0, 610, 607, 1, 0, 0, 0, 610, 609, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 610, 1, 0, 0, 0, 612, 613, 1, 0, 0, 0, 613, 615, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, 616, 5, 180, 0, 0, 616, 166, 1, 0, 0, 0, 617, 618, 5, 58, 0, 0, 618, 619, 5, 58, 0, 0, 619, 168, 1, 0, 0, 0, 32, 0, 175, 189, 197, 262, 268, 386, 416, 470, 480, 486, 491, 498, 503, 512, 517, 524, 527, 531, 533, 547, 550, 554, 559, 575, 577, 588, 590, 599, 601, 610, 612, 1, 0, 1, 0] \ No newline at end of file diff --git a/pkg/parser/fql/FqlLexer.tokens b/pkg/parser/fql/FqlLexer.tokens index 52d70539..cf5fd02f 100644 --- a/pkg/parser/fql/FqlLexer.tokens +++ b/pkg/parser/fql/FqlLexer.tokens @@ -44,31 +44,32 @@ Sort=43 Limit=44 Let=45 Collect=46 -SortDirection=47 -None=48 -Null=49 -BooleanLiteral=50 -Use=51 -Into=52 -Keep=53 -With=54 -All=55 -Any=56 -Aggregate=57 -Event=58 -Like=59 -Not=60 -In=61 -Do=62 -While=63 -Param=64 -Identifier=65 -IgnoreIdentifier=66 -StringLiteral=67 -IntegerLiteral=68 -FloatLiteral=69 -NamespaceSegment=70 -UnknownIdentifier=71 +Do=47 +While=48 +Step=49 +SortDirection=50 +None=51 +Null=52 +BooleanLiteral=53 +Use=54 +Into=55 +Keep=56 +With=57 +All=58 +Any=59 +Aggregate=60 +Event=61 +Like=62 +Not=63 +In=64 +Param=65 +Identifier=66 +IgnoreIdentifier=67 +StringLiteral=68 +IntegerLiteral=69 +FloatLiteral=70 +NamespaceSegment=71 +UnknownIdentifier=72 ':'=5 ';'=6 '.'=7 @@ -108,18 +109,19 @@ UnknownIdentifier=71 'LIMIT'=44 'LET'=45 'COLLECT'=46 -'NONE'=48 -'NULL'=49 -'USE'=51 -'INTO'=52 -'KEEP'=53 -'WITH'=54 -'ALL'=55 -'ANY'=56 -'AGGREGATE'=57 -'EVENT'=58 -'LIKE'=59 -'IN'=61 -'DO'=62 -'WHILE'=63 -'@'=64 +'DO'=47 +'WHILE'=48 +'STEP'=49 +'NONE'=51 +'NULL'=52 +'USE'=54 +'INTO'=55 +'KEEP'=56 +'WITH'=57 +'ALL'=58 +'ANY'=59 +'AGGREGATE'=60 +'EVENT'=61 +'LIKE'=62 +'IN'=64 +'@'=65 diff --git a/pkg/parser/fql/FqlParser.interp b/pkg/parser/fql/FqlParser.interp index 323806e6..dd261029 100644 --- a/pkg/parser/fql/FqlParser.interp +++ b/pkg/parser/fql/FqlParser.interp @@ -46,6 +46,9 @@ null 'LIMIT' 'LET' 'COLLECT' +'DO' +'WHILE' +'STEP' null 'NONE' 'NULL' @@ -61,8 +64,6 @@ null 'LIKE' null 'IN' -'DO' -'WHILE' '@' null null @@ -120,6 +121,9 @@ Sort Limit Let Collect +Do +While +Step SortDirection None Null @@ -135,8 +139,6 @@ Event Like Not In -Do -While Param Identifier IgnoreIdentifier @@ -162,6 +164,7 @@ forExpressionClause forExpressionStatement forExpressionBody forExpressionReturn +forExpressionStepAssignment filterClause limitClause limitClauseValue @@ -223,4 +226,4 @@ errorOperator atn: -[4, 1, 71, 666, 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, 2, 72, 7, 72, 1, 0, 5, 0, 148, 8, 0, 10, 0, 12, 0, 151, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 163, 8, 4, 10, 4, 12, 4, 166, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 173, 8, 5, 1, 6, 1, 6, 3, 6, 177, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 188, 8, 7, 1, 8, 1, 8, 3, 8, 192, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 200, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 205, 8, 9, 10, 9, 12, 9, 208, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 215, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 220, 8, 9, 10, 9, 12, 9, 223, 9, 9, 1, 9, 1, 9, 3, 9, 227, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 236, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 3, 12, 246, 8, 12, 1, 13, 1, 13, 3, 13, 250, 8, 13, 1, 14, 1, 14, 3, 14, 254, 8, 14, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 263, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 270, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 276, 8, 18, 10, 18, 12, 18, 279, 9, 18, 1, 19, 1, 19, 3, 19, 283, 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, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 312, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 321, 8, 22, 10, 22, 12, 22, 324, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 5, 24, 334, 8, 24, 10, 24, 12, 24, 337, 9, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 344, 8, 25, 3, 25, 346, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 352, 8, 26, 10, 26, 12, 26, 355, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 368, 8, 28, 1, 28, 3, 28, 371, 8, 28, 1, 28, 3, 28, 374, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 381, 8, 29, 1, 30, 1, 30, 1, 30, 3, 30, 386, 8, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 397, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 403, 8, 33, 1, 34, 1, 34, 3, 34, 407, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 416, 8, 35, 1, 36, 1, 36, 3, 36, 420, 8, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 5, 37, 428, 8, 37, 10, 37, 12, 37, 431, 9, 37, 1, 37, 3, 37, 434, 8, 37, 3, 37, 436, 8, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 459, 8, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 470, 8, 45, 1, 46, 1, 46, 1, 46, 1, 47, 5, 47, 476, 8, 47, 10, 47, 12, 47, 479, 9, 47, 1, 48, 1, 48, 4, 48, 483, 8, 48, 11, 48, 12, 48, 484, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 492, 8, 49, 1, 50, 1, 50, 3, 50, 496, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 502, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 509, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 514, 8, 53, 10, 53, 12, 53, 517, 9, 53, 1, 53, 3, 53, 520, 8, 53, 1, 54, 3, 54, 523, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 530, 8, 54, 1, 54, 3, 54, 533, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 3, 58, 546, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 553, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 566, 8, 59, 1, 59, 1, 59, 5, 59, 570, 8, 59, 10, 59, 12, 59, 573, 9, 59, 1, 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, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 5, 60, 594, 8, 60, 10, 60, 12, 60, 597, 9, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 610, 8, 61, 1, 61, 1, 61, 3, 61, 614, 8, 61, 3, 61, 616, 8, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 630, 8, 61, 10, 61, 12, 61, 633, 9, 61, 1, 62, 1, 62, 1, 62, 3, 62, 638, 8, 62, 1, 63, 1, 63, 1, 64, 3, 64, 643, 8, 64, 1, 64, 1, 64, 1, 65, 3, 65, 648, 8, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 0, 3, 118, 120, 122, 73, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 0, 10, 1, 0, 65, 66, 1, 0, 48, 49, 4, 0, 28, 29, 38, 44, 46, 47, 52, 58, 4, 0, 35, 37, 45, 45, 48, 51, 59, 63, 2, 0, 48, 48, 55, 56, 1, 0, 15, 20, 2, 0, 24, 25, 60, 60, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, 25, 707, 0, 149, 1, 0, 0, 0, 2, 154, 1, 0, 0, 0, 4, 156, 1, 0, 0, 0, 6, 158, 1, 0, 0, 0, 8, 164, 1, 0, 0, 0, 10, 172, 1, 0, 0, 0, 12, 176, 1, 0, 0, 0, 14, 187, 1, 0, 0, 0, 16, 189, 1, 0, 0, 0, 18, 226, 1, 0, 0, 0, 20, 235, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 245, 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 253, 1, 0, 0, 0, 30, 255, 1, 0, 0, 0, 32, 258, 1, 0, 0, 0, 34, 269, 1, 0, 0, 0, 36, 271, 1, 0, 0, 0, 38, 280, 1, 0, 0, 0, 40, 311, 1, 0, 0, 0, 42, 313, 1, 0, 0, 0, 44, 317, 1, 0, 0, 0, 46, 325, 1, 0, 0, 0, 48, 329, 1, 0, 0, 0, 50, 345, 1, 0, 0, 0, 52, 347, 1, 0, 0, 0, 54, 356, 1, 0, 0, 0, 56, 361, 1, 0, 0, 0, 58, 380, 1, 0, 0, 0, 60, 385, 1, 0, 0, 0, 62, 387, 1, 0, 0, 0, 64, 390, 1, 0, 0, 0, 66, 402, 1, 0, 0, 0, 68, 406, 1, 0, 0, 0, 70, 415, 1, 0, 0, 0, 72, 417, 1, 0, 0, 0, 74, 423, 1, 0, 0, 0, 76, 439, 1, 0, 0, 0, 78, 441, 1, 0, 0, 0, 80, 443, 1, 0, 0, 0, 82, 445, 1, 0, 0, 0, 84, 447, 1, 0, 0, 0, 86, 458, 1, 0, 0, 0, 88, 460, 1, 0, 0, 0, 90, 469, 1, 0, 0, 0, 92, 471, 1, 0, 0, 0, 94, 477, 1, 0, 0, 0, 96, 480, 1, 0, 0, 0, 98, 491, 1, 0, 0, 0, 100, 493, 1, 0, 0, 0, 102, 497, 1, 0, 0, 0, 104, 508, 1, 0, 0, 0, 106, 510, 1, 0, 0, 0, 108, 532, 1, 0, 0, 0, 110, 534, 1, 0, 0, 0, 112, 536, 1, 0, 0, 0, 114, 538, 1, 0, 0, 0, 116, 545, 1, 0, 0, 0, 118, 552, 1, 0, 0, 0, 120, 574, 1, 0, 0, 0, 122, 615, 1, 0, 0, 0, 124, 634, 1, 0, 0, 0, 126, 639, 1, 0, 0, 0, 128, 642, 1, 0, 0, 0, 130, 647, 1, 0, 0, 0, 132, 651, 1, 0, 0, 0, 134, 653, 1, 0, 0, 0, 136, 655, 1, 0, 0, 0, 138, 657, 1, 0, 0, 0, 140, 659, 1, 0, 0, 0, 142, 661, 1, 0, 0, 0, 144, 663, 1, 0, 0, 0, 146, 148, 3, 2, 1, 0, 147, 146, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, 153, 3, 8, 4, 0, 153, 1, 1, 0, 0, 0, 154, 155, 3, 4, 2, 0, 155, 3, 1, 0, 0, 0, 156, 157, 3, 6, 3, 0, 157, 5, 1, 0, 0, 0, 158, 159, 5, 51, 0, 0, 159, 160, 3, 92, 46, 0, 160, 7, 1, 0, 0, 0, 161, 163, 3, 10, 5, 0, 162, 161, 1, 0, 0, 0, 163, 166, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 167, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 168, 3, 12, 6, 0, 168, 9, 1, 0, 0, 0, 169, 173, 3, 14, 7, 0, 170, 173, 3, 100, 50, 0, 171, 173, 3, 56, 28, 0, 172, 169, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 171, 1, 0, 0, 0, 173, 11, 1, 0, 0, 0, 174, 177, 3, 16, 8, 0, 175, 177, 3, 18, 9, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, 0, 0, 0, 177, 13, 1, 0, 0, 0, 178, 179, 5, 45, 0, 0, 179, 180, 7, 0, 0, 0, 180, 181, 5, 31, 0, 0, 181, 188, 3, 118, 59, 0, 182, 183, 5, 45, 0, 0, 183, 184, 3, 110, 55, 0, 184, 185, 5, 31, 0, 0, 185, 186, 3, 118, 59, 0, 186, 188, 1, 0, 0, 0, 187, 178, 1, 0, 0, 0, 187, 182, 1, 0, 0, 0, 188, 15, 1, 0, 0, 0, 189, 191, 5, 36, 0, 0, 190, 192, 5, 40, 0, 0, 191, 190, 1, 0, 0, 0, 191, 192, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 194, 3, 118, 59, 0, 194, 17, 1, 0, 0, 0, 195, 196, 5, 35, 0, 0, 196, 199, 7, 0, 0, 0, 197, 198, 5, 8, 0, 0, 198, 200, 5, 65, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 202, 5, 61, 0, 0, 202, 206, 3, 20, 10, 0, 203, 205, 3, 26, 13, 0, 204, 203, 1, 0, 0, 0, 205, 208, 1, 0, 0, 0, 206, 204, 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 209, 1, 0, 0, 0, 208, 206, 1, 0, 0, 0, 209, 210, 3, 28, 14, 0, 210, 227, 1, 0, 0, 0, 211, 212, 5, 35, 0, 0, 212, 214, 7, 0, 0, 0, 213, 215, 5, 62, 0, 0, 214, 213, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 217, 5, 63, 0, 0, 217, 221, 3, 118, 59, 0, 218, 220, 3, 26, 13, 0, 219, 218, 1, 0, 0, 0, 220, 223, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 224, 1, 0, 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 3, 28, 14, 0, 225, 227, 1, 0, 0, 0, 226, 195, 1, 0, 0, 0, 226, 211, 1, 0, 0, 0, 227, 19, 1, 0, 0, 0, 228, 236, 3, 100, 50, 0, 229, 236, 3, 72, 36, 0, 230, 236, 3, 74, 37, 0, 231, 236, 3, 68, 34, 0, 232, 236, 3, 96, 48, 0, 233, 236, 3, 114, 57, 0, 234, 236, 3, 66, 33, 0, 235, 228, 1, 0, 0, 0, 235, 229, 1, 0, 0, 0, 235, 230, 1, 0, 0, 0, 235, 231, 1, 0, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, 0, 0, 235, 234, 1, 0, 0, 0, 236, 21, 1, 0, 0, 0, 237, 242, 3, 32, 16, 0, 238, 242, 3, 36, 18, 0, 239, 242, 3, 30, 15, 0, 240, 242, 3, 40, 20, 0, 241, 237, 1, 0, 0, 0, 241, 238, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 246, 3, 14, 7, 0, 244, 246, 3, 100, 50, 0, 245, 243, 1, 0, 0, 0, 245, 244, 1, 0, 0, 0, 246, 25, 1, 0, 0, 0, 247, 250, 3, 24, 12, 0, 248, 250, 3, 22, 11, 0, 249, 247, 1, 0, 0, 0, 249, 248, 1, 0, 0, 0, 250, 27, 1, 0, 0, 0, 251, 254, 3, 16, 8, 0, 252, 254, 3, 18, 9, 0, 253, 251, 1, 0, 0, 0, 253, 252, 1, 0, 0, 0, 254, 29, 1, 0, 0, 0, 255, 256, 5, 41, 0, 0, 256, 257, 3, 118, 59, 0, 257, 31, 1, 0, 0, 0, 258, 259, 5, 44, 0, 0, 259, 262, 3, 34, 17, 0, 260, 261, 5, 8, 0, 0, 261, 263, 3, 34, 17, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 33, 1, 0, 0, 0, 264, 270, 3, 82, 41, 0, 265, 270, 3, 66, 33, 0, 266, 270, 3, 68, 34, 0, 267, 270, 3, 100, 50, 0, 268, 270, 3, 96, 48, 0, 269, 264, 1, 0, 0, 0, 269, 265, 1, 0, 0, 0, 269, 266, 1, 0, 0, 0, 269, 267, 1, 0, 0, 0, 269, 268, 1, 0, 0, 0, 270, 35, 1, 0, 0, 0, 271, 272, 5, 43, 0, 0, 272, 277, 3, 38, 19, 0, 273, 274, 5, 8, 0, 0, 274, 276, 3, 38, 19, 0, 275, 273, 1, 0, 0, 0, 276, 279, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 37, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 280, 282, 3, 118, 59, 0, 281, 283, 5, 47, 0, 0, 282, 281, 1, 0, 0, 0, 282, 283, 1, 0, 0, 0, 283, 39, 1, 0, 0, 0, 284, 285, 5, 46, 0, 0, 285, 286, 3, 44, 22, 0, 286, 287, 3, 48, 24, 0, 287, 288, 3, 50, 25, 0, 288, 312, 1, 0, 0, 0, 289, 290, 5, 46, 0, 0, 290, 291, 3, 44, 22, 0, 291, 292, 3, 48, 24, 0, 292, 312, 1, 0, 0, 0, 293, 294, 5, 46, 0, 0, 294, 295, 3, 44, 22, 0, 295, 296, 3, 50, 25, 0, 296, 312, 1, 0, 0, 0, 297, 298, 5, 46, 0, 0, 298, 299, 3, 44, 22, 0, 299, 300, 3, 54, 27, 0, 300, 312, 1, 0, 0, 0, 301, 302, 5, 46, 0, 0, 302, 312, 3, 44, 22, 0, 303, 304, 5, 46, 0, 0, 304, 305, 3, 48, 24, 0, 305, 306, 3, 50, 25, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 46, 0, 0, 308, 312, 3, 48, 24, 0, 309, 310, 5, 46, 0, 0, 310, 312, 3, 54, 27, 0, 311, 284, 1, 0, 0, 0, 311, 289, 1, 0, 0, 0, 311, 293, 1, 0, 0, 0, 311, 297, 1, 0, 0, 0, 311, 301, 1, 0, 0, 0, 311, 303, 1, 0, 0, 0, 311, 307, 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 41, 1, 0, 0, 0, 313, 314, 5, 65, 0, 0, 314, 315, 5, 31, 0, 0, 315, 316, 3, 118, 59, 0, 316, 43, 1, 0, 0, 0, 317, 322, 3, 42, 21, 0, 318, 319, 5, 8, 0, 0, 319, 321, 3, 42, 21, 0, 320, 318, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, 323, 1, 0, 0, 0, 323, 45, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 326, 5, 65, 0, 0, 326, 327, 5, 31, 0, 0, 327, 328, 3, 100, 50, 0, 328, 47, 1, 0, 0, 0, 329, 330, 5, 57, 0, 0, 330, 335, 3, 46, 23, 0, 331, 332, 5, 8, 0, 0, 332, 334, 3, 46, 23, 0, 333, 331, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, 335, 333, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 49, 1, 0, 0, 0, 337, 335, 1, 0, 0, 0, 338, 339, 5, 52, 0, 0, 339, 346, 3, 42, 21, 0, 340, 341, 5, 52, 0, 0, 341, 343, 5, 65, 0, 0, 342, 344, 3, 52, 26, 0, 343, 342, 1, 0, 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 1, 0, 0, 0, 345, 338, 1, 0, 0, 0, 345, 340, 1, 0, 0, 0, 346, 51, 1, 0, 0, 0, 347, 348, 5, 53, 0, 0, 348, 353, 5, 65, 0, 0, 349, 350, 5, 8, 0, 0, 350, 352, 5, 65, 0, 0, 351, 349, 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, 0, 0, 354, 53, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 357, 5, 54, 0, 0, 357, 358, 5, 65, 0, 0, 358, 359, 5, 52, 0, 0, 359, 360, 5, 65, 0, 0, 360, 55, 1, 0, 0, 0, 361, 362, 5, 37, 0, 0, 362, 363, 5, 58, 0, 0, 363, 364, 3, 58, 29, 0, 364, 365, 5, 61, 0, 0, 365, 367, 3, 60, 30, 0, 366, 368, 3, 62, 31, 0, 367, 366, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 370, 1, 0, 0, 0, 369, 371, 3, 30, 15, 0, 370, 369, 1, 0, 0, 0, 370, 371, 1, 0, 0, 0, 371, 373, 1, 0, 0, 0, 372, 374, 3, 64, 32, 0, 373, 372, 1, 0, 0, 0, 373, 374, 1, 0, 0, 0, 374, 57, 1, 0, 0, 0, 375, 381, 3, 78, 39, 0, 376, 381, 3, 68, 34, 0, 377, 381, 3, 66, 33, 0, 378, 381, 3, 100, 50, 0, 379, 381, 3, 96, 48, 0, 380, 375, 1, 0, 0, 0, 380, 376, 1, 0, 0, 0, 380, 377, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 59, 1, 0, 0, 0, 382, 386, 3, 100, 50, 0, 383, 386, 3, 68, 34, 0, 384, 386, 3, 96, 48, 0, 385, 382, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 384, 1, 0, 0, 0, 386, 61, 1, 0, 0, 0, 387, 388, 5, 38, 0, 0, 388, 389, 3, 74, 37, 0, 389, 63, 1, 0, 0, 0, 390, 396, 5, 39, 0, 0, 391, 397, 3, 82, 41, 0, 392, 397, 3, 68, 34, 0, 393, 397, 3, 66, 33, 0, 394, 397, 3, 96, 48, 0, 395, 397, 3, 102, 51, 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, 65, 1, 0, 0, 0, 398, 399, 5, 64, 0, 0, 399, 403, 5, 65, 0, 0, 400, 401, 5, 64, 0, 0, 401, 403, 3, 110, 55, 0, 402, 398, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, 67, 1, 0, 0, 0, 404, 407, 5, 65, 0, 0, 405, 407, 3, 110, 55, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 69, 1, 0, 0, 0, 408, 416, 3, 72, 36, 0, 409, 416, 3, 74, 37, 0, 410, 416, 3, 76, 38, 0, 411, 416, 3, 78, 39, 0, 412, 416, 3, 80, 40, 0, 413, 416, 3, 82, 41, 0, 414, 416, 3, 84, 42, 0, 415, 408, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, 415, 411, 1, 0, 0, 0, 415, 412, 1, 0, 0, 0, 415, 413, 1, 0, 0, 0, 415, 414, 1, 0, 0, 0, 416, 71, 1, 0, 0, 0, 417, 419, 5, 9, 0, 0, 418, 420, 3, 106, 53, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 422, 5, 10, 0, 0, 422, 73, 1, 0, 0, 0, 423, 435, 5, 13, 0, 0, 424, 429, 3, 86, 43, 0, 425, 426, 5, 8, 0, 0, 426, 428, 3, 86, 43, 0, 427, 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 434, 5, 8, 0, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 424, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 438, 5, 14, 0, 0, 438, 75, 1, 0, 0, 0, 439, 440, 5, 50, 0, 0, 440, 77, 1, 0, 0, 0, 441, 442, 5, 67, 0, 0, 442, 79, 1, 0, 0, 0, 443, 444, 5, 69, 0, 0, 444, 81, 1, 0, 0, 0, 445, 446, 5, 68, 0, 0, 446, 83, 1, 0, 0, 0, 447, 448, 7, 1, 0, 0, 448, 85, 1, 0, 0, 0, 449, 450, 3, 90, 45, 0, 450, 451, 5, 5, 0, 0, 451, 452, 3, 118, 59, 0, 452, 459, 1, 0, 0, 0, 453, 454, 3, 88, 44, 0, 454, 455, 5, 5, 0, 0, 455, 456, 3, 118, 59, 0, 456, 459, 1, 0, 0, 0, 457, 459, 3, 68, 34, 0, 458, 449, 1, 0, 0, 0, 458, 453, 1, 0, 0, 0, 458, 457, 1, 0, 0, 0, 459, 87, 1, 0, 0, 0, 460, 461, 5, 9, 0, 0, 461, 462, 3, 118, 59, 0, 462, 463, 5, 10, 0, 0, 463, 89, 1, 0, 0, 0, 464, 470, 5, 65, 0, 0, 465, 470, 3, 78, 39, 0, 466, 470, 3, 66, 33, 0, 467, 470, 3, 110, 55, 0, 468, 470, 3, 112, 56, 0, 469, 464, 1, 0, 0, 0, 469, 465, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 469, 468, 1, 0, 0, 0, 470, 91, 1, 0, 0, 0, 471, 472, 3, 94, 47, 0, 472, 473, 5, 65, 0, 0, 473, 93, 1, 0, 0, 0, 474, 476, 5, 70, 0, 0, 475, 474, 1, 0, 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, 478, 95, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 482, 3, 98, 49, 0, 481, 483, 3, 108, 54, 0, 482, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 97, 1, 0, 0, 0, 486, 492, 3, 68, 34, 0, 487, 492, 3, 66, 33, 0, 488, 492, 3, 72, 36, 0, 489, 492, 3, 74, 37, 0, 490, 492, 3, 102, 51, 0, 491, 486, 1, 0, 0, 0, 491, 487, 1, 0, 0, 0, 491, 488, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 490, 1, 0, 0, 0, 492, 99, 1, 0, 0, 0, 493, 495, 3, 102, 51, 0, 494, 496, 3, 144, 72, 0, 495, 494, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 101, 1, 0, 0, 0, 497, 498, 3, 94, 47, 0, 498, 499, 3, 104, 52, 0, 499, 501, 5, 11, 0, 0, 500, 502, 3, 106, 53, 0, 501, 500, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 503, 1, 0, 0, 0, 503, 504, 5, 12, 0, 0, 504, 103, 1, 0, 0, 0, 505, 509, 5, 65, 0, 0, 506, 509, 3, 110, 55, 0, 507, 509, 3, 112, 56, 0, 508, 505, 1, 0, 0, 0, 508, 506, 1, 0, 0, 0, 508, 507, 1, 0, 0, 0, 509, 105, 1, 0, 0, 0, 510, 515, 3, 118, 59, 0, 511, 512, 5, 8, 0, 0, 512, 514, 3, 118, 59, 0, 513, 511, 1, 0, 0, 0, 514, 517, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, 516, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 520, 5, 8, 0, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 107, 1, 0, 0, 0, 521, 523, 3, 144, 72, 0, 522, 521, 1, 0, 0, 0, 522, 523, 1, 0, 0, 0, 523, 524, 1, 0, 0, 0, 524, 525, 5, 7, 0, 0, 525, 533, 3, 90, 45, 0, 526, 527, 3, 144, 72, 0, 527, 528, 5, 7, 0, 0, 528, 530, 1, 0, 0, 0, 529, 526, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, 3, 88, 44, 0, 532, 522, 1, 0, 0, 0, 532, 529, 1, 0, 0, 0, 533, 109, 1, 0, 0, 0, 534, 535, 7, 2, 0, 0, 535, 111, 1, 0, 0, 0, 536, 537, 7, 3, 0, 0, 537, 113, 1, 0, 0, 0, 538, 539, 3, 116, 58, 0, 539, 540, 5, 30, 0, 0, 540, 541, 3, 116, 58, 0, 541, 115, 1, 0, 0, 0, 542, 546, 3, 82, 41, 0, 543, 546, 3, 68, 34, 0, 544, 546, 3, 66, 33, 0, 545, 542, 1, 0, 0, 0, 545, 543, 1, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 117, 1, 0, 0, 0, 547, 548, 6, 59, -1, 0, 548, 549, 3, 132, 66, 0, 549, 550, 3, 118, 59, 5, 550, 553, 1, 0, 0, 0, 551, 553, 3, 120, 60, 0, 552, 547, 1, 0, 0, 0, 552, 551, 1, 0, 0, 0, 553, 571, 1, 0, 0, 0, 554, 555, 10, 4, 0, 0, 555, 556, 3, 136, 68, 0, 556, 557, 3, 118, 59, 5, 557, 570, 1, 0, 0, 0, 558, 559, 10, 3, 0, 0, 559, 560, 3, 138, 69, 0, 560, 561, 3, 118, 59, 4, 561, 570, 1, 0, 0, 0, 562, 563, 10, 2, 0, 0, 563, 565, 5, 32, 0, 0, 564, 566, 3, 118, 59, 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 568, 5, 5, 0, 0, 568, 570, 3, 118, 59, 3, 569, 554, 1, 0, 0, 0, 569, 558, 1, 0, 0, 0, 569, 562, 1, 0, 0, 0, 570, 573, 1, 0, 0, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 119, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, 574, 575, 6, 60, -1, 0, 575, 576, 3, 122, 61, 0, 576, 595, 1, 0, 0, 0, 577, 578, 10, 5, 0, 0, 578, 579, 3, 126, 63, 0, 579, 580, 3, 120, 60, 6, 580, 594, 1, 0, 0, 0, 581, 582, 10, 4, 0, 0, 582, 583, 3, 124, 62, 0, 583, 584, 3, 120, 60, 5, 584, 594, 1, 0, 0, 0, 585, 586, 10, 3, 0, 0, 586, 587, 3, 128, 64, 0, 587, 588, 3, 120, 60, 4, 588, 594, 1, 0, 0, 0, 589, 590, 10, 2, 0, 0, 590, 591, 3, 130, 65, 0, 591, 592, 3, 120, 60, 3, 592, 594, 1, 0, 0, 0, 593, 577, 1, 0, 0, 0, 593, 581, 1, 0, 0, 0, 593, 585, 1, 0, 0, 0, 593, 589, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 121, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, 599, 6, 61, -1, 0, 599, 616, 3, 100, 50, 0, 600, 616, 3, 114, 57, 0, 601, 616, 3, 70, 35, 0, 602, 616, 3, 68, 34, 0, 603, 616, 3, 96, 48, 0, 604, 616, 3, 66, 33, 0, 605, 609, 5, 11, 0, 0, 606, 610, 3, 18, 9, 0, 607, 610, 3, 56, 28, 0, 608, 610, 3, 118, 59, 0, 609, 606, 1, 0, 0, 0, 609, 607, 1, 0, 0, 0, 609, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 613, 5, 12, 0, 0, 612, 614, 3, 144, 72, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, 0, 614, 616, 1, 0, 0, 0, 615, 598, 1, 0, 0, 0, 615, 600, 1, 0, 0, 0, 615, 601, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 603, 1, 0, 0, 0, 615, 604, 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 616, 631, 1, 0, 0, 0, 617, 618, 10, 10, 0, 0, 618, 619, 3, 140, 70, 0, 619, 620, 3, 122, 61, 11, 620, 630, 1, 0, 0, 0, 621, 622, 10, 9, 0, 0, 622, 623, 3, 142, 71, 0, 623, 624, 3, 122, 61, 10, 624, 630, 1, 0, 0, 0, 625, 626, 10, 8, 0, 0, 626, 627, 3, 134, 67, 0, 627, 628, 3, 122, 61, 9, 628, 630, 1, 0, 0, 0, 629, 617, 1, 0, 0, 0, 629, 621, 1, 0, 0, 0, 629, 625, 1, 0, 0, 0, 630, 633, 1, 0, 0, 0, 631, 629, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 123, 1, 0, 0, 0, 633, 631, 1, 0, 0, 0, 634, 637, 7, 4, 0, 0, 635, 638, 3, 128, 64, 0, 636, 638, 3, 126, 63, 0, 637, 635, 1, 0, 0, 0, 637, 636, 1, 0, 0, 0, 638, 125, 1, 0, 0, 0, 639, 640, 7, 5, 0, 0, 640, 127, 1, 0, 0, 0, 641, 643, 5, 60, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 645, 5, 61, 0, 0, 645, 129, 1, 0, 0, 0, 646, 648, 5, 60, 0, 0, 647, 646, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 5, 59, 0, 0, 650, 131, 1, 0, 0, 0, 651, 652, 7, 6, 0, 0, 652, 133, 1, 0, 0, 0, 653, 654, 7, 7, 0, 0, 654, 135, 1, 0, 0, 0, 655, 656, 5, 28, 0, 0, 656, 137, 1, 0, 0, 0, 657, 658, 5, 29, 0, 0, 658, 139, 1, 0, 0, 0, 659, 660, 7, 8, 0, 0, 660, 141, 1, 0, 0, 0, 661, 662, 7, 9, 0, 0, 662, 143, 1, 0, 0, 0, 663, 664, 5, 32, 0, 0, 664, 145, 1, 0, 0, 0, 67, 149, 164, 172, 176, 187, 191, 199, 206, 214, 221, 226, 235, 241, 245, 249, 253, 262, 269, 277, 282, 311, 322, 335, 343, 345, 353, 367, 370, 373, 380, 385, 396, 402, 406, 415, 419, 429, 433, 435, 458, 469, 477, 484, 491, 495, 501, 508, 515, 519, 522, 529, 532, 545, 552, 565, 569, 571, 593, 595, 609, 613, 615, 629, 631, 637, 642, 647] \ No newline at end of file +[4, 1, 72, 689, 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, 2, 72, 7, 72, 2, 73, 7, 73, 1, 0, 5, 0, 150, 8, 0, 10, 0, 12, 0, 153, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 165, 8, 4, 10, 4, 12, 4, 168, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 175, 8, 5, 1, 6, 1, 6, 3, 6, 179, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 190, 8, 7, 1, 8, 1, 8, 3, 8, 194, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 202, 8, 9, 1, 9, 1, 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, 1, 9, 1, 9, 5, 9, 224, 8, 9, 10, 9, 12, 9, 227, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 234, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 239, 8, 9, 10, 9, 12, 9, 242, 9, 9, 1, 9, 1, 9, 3, 9, 246, 8, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 255, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 261, 8, 11, 1, 12, 1, 12, 3, 12, 265, 8, 12, 1, 13, 1, 13, 3, 13, 269, 8, 13, 1, 14, 1, 14, 3, 14, 273, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 286, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 293, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 299, 8, 19, 10, 19, 12, 19, 302, 9, 19, 1, 20, 1, 20, 3, 20, 306, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 335, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 5, 23, 344, 8, 23, 10, 23, 12, 23, 347, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 25, 5, 25, 357, 8, 25, 10, 25, 12, 25, 360, 9, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 3, 26, 367, 8, 26, 3, 26, 369, 8, 26, 1, 27, 1, 27, 1, 27, 1, 27, 5, 27, 375, 8, 27, 10, 27, 12, 27, 378, 9, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 391, 8, 29, 1, 29, 3, 29, 394, 8, 29, 1, 29, 3, 29, 397, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 404, 8, 30, 1, 31, 1, 31, 1, 31, 3, 31, 409, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 420, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 426, 8, 34, 1, 35, 1, 35, 3, 35, 430, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 3, 37, 443, 8, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 451, 8, 38, 10, 38, 12, 38, 454, 9, 38, 1, 38, 3, 38, 457, 8, 38, 3, 38, 459, 8, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 482, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 493, 8, 46, 1, 47, 1, 47, 1, 47, 1, 48, 5, 48, 499, 8, 48, 10, 48, 12, 48, 502, 9, 48, 1, 49, 1, 49, 4, 49, 506, 8, 49, 11, 49, 12, 49, 507, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 515, 8, 50, 1, 51, 1, 51, 3, 51, 519, 8, 51, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 525, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 3, 53, 532, 8, 53, 1, 54, 1, 54, 1, 54, 5, 54, 537, 8, 54, 10, 54, 12, 54, 540, 9, 54, 1, 54, 3, 54, 543, 8, 54, 1, 55, 3, 55, 546, 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 553, 8, 55, 1, 55, 3, 55, 556, 8, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 3, 59, 569, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 576, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 589, 8, 60, 1, 60, 1, 60, 5, 60, 593, 8, 60, 10, 60, 12, 60, 596, 9, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, 61, 617, 8, 61, 10, 61, 12, 61, 620, 9, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 3, 62, 633, 8, 62, 1, 62, 1, 62, 3, 62, 637, 8, 62, 3, 62, 639, 8, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 5, 62, 653, 8, 62, 10, 62, 12, 62, 656, 9, 62, 1, 63, 1, 63, 1, 63, 3, 63, 661, 8, 63, 1, 64, 1, 64, 1, 65, 3, 65, 666, 8, 65, 1, 65, 1, 65, 1, 66, 3, 66, 671, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 0, 3, 120, 122, 124, 74, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 0, 10, 1, 0, 66, 67, 1, 0, 51, 52, 5, 0, 28, 29, 38, 44, 46, 46, 50, 50, 55, 61, 5, 0, 35, 37, 45, 45, 47, 49, 51, 54, 62, 64, 2, 0, 51, 51, 58, 59, 1, 0, 15, 20, 2, 0, 24, 25, 63, 63, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, 25, 732, 0, 151, 1, 0, 0, 0, 2, 156, 1, 0, 0, 0, 4, 158, 1, 0, 0, 0, 6, 160, 1, 0, 0, 0, 8, 166, 1, 0, 0, 0, 10, 174, 1, 0, 0, 0, 12, 178, 1, 0, 0, 0, 14, 189, 1, 0, 0, 0, 16, 191, 1, 0, 0, 0, 18, 245, 1, 0, 0, 0, 20, 254, 1, 0, 0, 0, 22, 260, 1, 0, 0, 0, 24, 264, 1, 0, 0, 0, 26, 268, 1, 0, 0, 0, 28, 272, 1, 0, 0, 0, 30, 274, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 281, 1, 0, 0, 0, 36, 292, 1, 0, 0, 0, 38, 294, 1, 0, 0, 0, 40, 303, 1, 0, 0, 0, 42, 334, 1, 0, 0, 0, 44, 336, 1, 0, 0, 0, 46, 340, 1, 0, 0, 0, 48, 348, 1, 0, 0, 0, 50, 352, 1, 0, 0, 0, 52, 368, 1, 0, 0, 0, 54, 370, 1, 0, 0, 0, 56, 379, 1, 0, 0, 0, 58, 384, 1, 0, 0, 0, 60, 403, 1, 0, 0, 0, 62, 408, 1, 0, 0, 0, 64, 410, 1, 0, 0, 0, 66, 413, 1, 0, 0, 0, 68, 425, 1, 0, 0, 0, 70, 429, 1, 0, 0, 0, 72, 438, 1, 0, 0, 0, 74, 440, 1, 0, 0, 0, 76, 446, 1, 0, 0, 0, 78, 462, 1, 0, 0, 0, 80, 464, 1, 0, 0, 0, 82, 466, 1, 0, 0, 0, 84, 468, 1, 0, 0, 0, 86, 470, 1, 0, 0, 0, 88, 481, 1, 0, 0, 0, 90, 483, 1, 0, 0, 0, 92, 492, 1, 0, 0, 0, 94, 494, 1, 0, 0, 0, 96, 500, 1, 0, 0, 0, 98, 503, 1, 0, 0, 0, 100, 514, 1, 0, 0, 0, 102, 516, 1, 0, 0, 0, 104, 520, 1, 0, 0, 0, 106, 531, 1, 0, 0, 0, 108, 533, 1, 0, 0, 0, 110, 555, 1, 0, 0, 0, 112, 557, 1, 0, 0, 0, 114, 559, 1, 0, 0, 0, 116, 561, 1, 0, 0, 0, 118, 568, 1, 0, 0, 0, 120, 575, 1, 0, 0, 0, 122, 597, 1, 0, 0, 0, 124, 638, 1, 0, 0, 0, 126, 657, 1, 0, 0, 0, 128, 662, 1, 0, 0, 0, 130, 665, 1, 0, 0, 0, 132, 670, 1, 0, 0, 0, 134, 674, 1, 0, 0, 0, 136, 676, 1, 0, 0, 0, 138, 678, 1, 0, 0, 0, 140, 680, 1, 0, 0, 0, 142, 682, 1, 0, 0, 0, 144, 684, 1, 0, 0, 0, 146, 686, 1, 0, 0, 0, 148, 150, 3, 2, 1, 0, 149, 148, 1, 0, 0, 0, 150, 153, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 154, 1, 0, 0, 0, 153, 151, 1, 0, 0, 0, 154, 155, 3, 8, 4, 0, 155, 1, 1, 0, 0, 0, 156, 157, 3, 4, 2, 0, 157, 3, 1, 0, 0, 0, 158, 159, 3, 6, 3, 0, 159, 5, 1, 0, 0, 0, 160, 161, 5, 54, 0, 0, 161, 162, 3, 94, 47, 0, 162, 7, 1, 0, 0, 0, 163, 165, 3, 10, 5, 0, 164, 163, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 166, 167, 1, 0, 0, 0, 167, 169, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 169, 170, 3, 12, 6, 0, 170, 9, 1, 0, 0, 0, 171, 175, 3, 14, 7, 0, 172, 175, 3, 102, 51, 0, 173, 175, 3, 58, 29, 0, 174, 171, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 173, 1, 0, 0, 0, 175, 11, 1, 0, 0, 0, 176, 179, 3, 16, 8, 0, 177, 179, 3, 18, 9, 0, 178, 176, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 13, 1, 0, 0, 0, 180, 181, 5, 45, 0, 0, 181, 182, 7, 0, 0, 0, 182, 183, 5, 31, 0, 0, 183, 190, 3, 120, 60, 0, 184, 185, 5, 45, 0, 0, 185, 186, 3, 112, 56, 0, 186, 187, 5, 31, 0, 0, 187, 188, 3, 120, 60, 0, 188, 190, 1, 0, 0, 0, 189, 180, 1, 0, 0, 0, 189, 184, 1, 0, 0, 0, 190, 15, 1, 0, 0, 0, 191, 193, 5, 36, 0, 0, 192, 194, 5, 40, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 196, 3, 120, 60, 0, 196, 17, 1, 0, 0, 0, 197, 198, 5, 35, 0, 0, 198, 201, 7, 0, 0, 0, 199, 200, 5, 8, 0, 0, 200, 202, 5, 66, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 204, 5, 64, 0, 0, 204, 208, 3, 20, 10, 0, 205, 207, 3, 26, 13, 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, 28, 14, 0, 212, 246, 1, 0, 0, 0, 213, 214, 5, 35, 0, 0, 214, 216, 7, 0, 0, 0, 215, 217, 5, 47, 0, 0, 216, 215, 1, 0, 0, 0, 216, 217, 1, 0, 0, 0, 217, 218, 1, 0, 0, 0, 218, 219, 5, 48, 0, 0, 219, 220, 3, 120, 60, 0, 220, 221, 5, 49, 0, 0, 221, 225, 3, 30, 15, 0, 222, 224, 3, 26, 13, 0, 223, 222, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 228, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 228, 229, 3, 28, 14, 0, 229, 246, 1, 0, 0, 0, 230, 231, 5, 35, 0, 0, 231, 233, 7, 0, 0, 0, 232, 234, 5, 47, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, 0, 234, 235, 1, 0, 0, 0, 235, 236, 5, 48, 0, 0, 236, 240, 3, 120, 60, 0, 237, 239, 3, 26, 13, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, 238, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 243, 1, 0, 0, 0, 242, 240, 1, 0, 0, 0, 243, 244, 3, 28, 14, 0, 244, 246, 1, 0, 0, 0, 245, 197, 1, 0, 0, 0, 245, 213, 1, 0, 0, 0, 245, 230, 1, 0, 0, 0, 246, 19, 1, 0, 0, 0, 247, 255, 3, 102, 51, 0, 248, 255, 3, 74, 37, 0, 249, 255, 3, 76, 38, 0, 250, 255, 3, 70, 35, 0, 251, 255, 3, 98, 49, 0, 252, 255, 3, 116, 58, 0, 253, 255, 3, 68, 34, 0, 254, 247, 1, 0, 0, 0, 254, 248, 1, 0, 0, 0, 254, 249, 1, 0, 0, 0, 254, 250, 1, 0, 0, 0, 254, 251, 1, 0, 0, 0, 254, 252, 1, 0, 0, 0, 254, 253, 1, 0, 0, 0, 255, 21, 1, 0, 0, 0, 256, 261, 3, 34, 17, 0, 257, 261, 3, 38, 19, 0, 258, 261, 3, 32, 16, 0, 259, 261, 3, 42, 21, 0, 260, 256, 1, 0, 0, 0, 260, 257, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 260, 259, 1, 0, 0, 0, 261, 23, 1, 0, 0, 0, 262, 265, 3, 14, 7, 0, 263, 265, 3, 102, 51, 0, 264, 262, 1, 0, 0, 0, 264, 263, 1, 0, 0, 0, 265, 25, 1, 0, 0, 0, 266, 269, 3, 24, 12, 0, 267, 269, 3, 22, 11, 0, 268, 266, 1, 0, 0, 0, 268, 267, 1, 0, 0, 0, 269, 27, 1, 0, 0, 0, 270, 273, 3, 16, 8, 0, 271, 273, 3, 18, 9, 0, 272, 270, 1, 0, 0, 0, 272, 271, 1, 0, 0, 0, 273, 29, 1, 0, 0, 0, 274, 275, 5, 66, 0, 0, 275, 276, 5, 31, 0, 0, 276, 277, 3, 120, 60, 0, 277, 31, 1, 0, 0, 0, 278, 279, 5, 41, 0, 0, 279, 280, 3, 120, 60, 0, 280, 33, 1, 0, 0, 0, 281, 282, 5, 44, 0, 0, 282, 285, 3, 36, 18, 0, 283, 284, 5, 8, 0, 0, 284, 286, 3, 36, 18, 0, 285, 283, 1, 0, 0, 0, 285, 286, 1, 0, 0, 0, 286, 35, 1, 0, 0, 0, 287, 293, 3, 84, 42, 0, 288, 293, 3, 68, 34, 0, 289, 293, 3, 70, 35, 0, 290, 293, 3, 102, 51, 0, 291, 293, 3, 98, 49, 0, 292, 287, 1, 0, 0, 0, 292, 288, 1, 0, 0, 0, 292, 289, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 291, 1, 0, 0, 0, 293, 37, 1, 0, 0, 0, 294, 295, 5, 43, 0, 0, 295, 300, 3, 40, 20, 0, 296, 297, 5, 8, 0, 0, 297, 299, 3, 40, 20, 0, 298, 296, 1, 0, 0, 0, 299, 302, 1, 0, 0, 0, 300, 298, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 39, 1, 0, 0, 0, 302, 300, 1, 0, 0, 0, 303, 305, 3, 120, 60, 0, 304, 306, 5, 50, 0, 0, 305, 304, 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 41, 1, 0, 0, 0, 307, 308, 5, 46, 0, 0, 308, 309, 3, 46, 23, 0, 309, 310, 3, 50, 25, 0, 310, 311, 3, 52, 26, 0, 311, 335, 1, 0, 0, 0, 312, 313, 5, 46, 0, 0, 313, 314, 3, 46, 23, 0, 314, 315, 3, 50, 25, 0, 315, 335, 1, 0, 0, 0, 316, 317, 5, 46, 0, 0, 317, 318, 3, 46, 23, 0, 318, 319, 3, 52, 26, 0, 319, 335, 1, 0, 0, 0, 320, 321, 5, 46, 0, 0, 321, 322, 3, 46, 23, 0, 322, 323, 3, 56, 28, 0, 323, 335, 1, 0, 0, 0, 324, 325, 5, 46, 0, 0, 325, 335, 3, 46, 23, 0, 326, 327, 5, 46, 0, 0, 327, 328, 3, 50, 25, 0, 328, 329, 3, 52, 26, 0, 329, 335, 1, 0, 0, 0, 330, 331, 5, 46, 0, 0, 331, 335, 3, 50, 25, 0, 332, 333, 5, 46, 0, 0, 333, 335, 3, 56, 28, 0, 334, 307, 1, 0, 0, 0, 334, 312, 1, 0, 0, 0, 334, 316, 1, 0, 0, 0, 334, 320, 1, 0, 0, 0, 334, 324, 1, 0, 0, 0, 334, 326, 1, 0, 0, 0, 334, 330, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 335, 43, 1, 0, 0, 0, 336, 337, 5, 66, 0, 0, 337, 338, 5, 31, 0, 0, 338, 339, 3, 120, 60, 0, 339, 45, 1, 0, 0, 0, 340, 345, 3, 44, 22, 0, 341, 342, 5, 8, 0, 0, 342, 344, 3, 44, 22, 0, 343, 341, 1, 0, 0, 0, 344, 347, 1, 0, 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 47, 1, 0, 0, 0, 347, 345, 1, 0, 0, 0, 348, 349, 5, 66, 0, 0, 349, 350, 5, 31, 0, 0, 350, 351, 3, 102, 51, 0, 351, 49, 1, 0, 0, 0, 352, 353, 5, 60, 0, 0, 353, 358, 3, 48, 24, 0, 354, 355, 5, 8, 0, 0, 355, 357, 3, 48, 24, 0, 356, 354, 1, 0, 0, 0, 357, 360, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 51, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 361, 362, 5, 55, 0, 0, 362, 369, 3, 44, 22, 0, 363, 364, 5, 55, 0, 0, 364, 366, 5, 66, 0, 0, 365, 367, 3, 54, 27, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, 0, 0, 0, 368, 361, 1, 0, 0, 0, 368, 363, 1, 0, 0, 0, 369, 53, 1, 0, 0, 0, 370, 371, 5, 56, 0, 0, 371, 376, 5, 66, 0, 0, 372, 373, 5, 8, 0, 0, 373, 375, 5, 66, 0, 0, 374, 372, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 55, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 379, 380, 5, 57, 0, 0, 380, 381, 5, 66, 0, 0, 381, 382, 5, 55, 0, 0, 382, 383, 5, 66, 0, 0, 383, 57, 1, 0, 0, 0, 384, 385, 5, 37, 0, 0, 385, 386, 5, 61, 0, 0, 386, 387, 3, 60, 30, 0, 387, 388, 5, 64, 0, 0, 388, 390, 3, 62, 31, 0, 389, 391, 3, 64, 32, 0, 390, 389, 1, 0, 0, 0, 390, 391, 1, 0, 0, 0, 391, 393, 1, 0, 0, 0, 392, 394, 3, 32, 16, 0, 393, 392, 1, 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 396, 1, 0, 0, 0, 395, 397, 3, 66, 33, 0, 396, 395, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 59, 1, 0, 0, 0, 398, 404, 3, 80, 40, 0, 399, 404, 3, 70, 35, 0, 400, 404, 3, 68, 34, 0, 401, 404, 3, 102, 51, 0, 402, 404, 3, 98, 49, 0, 403, 398, 1, 0, 0, 0, 403, 399, 1, 0, 0, 0, 403, 400, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 402, 1, 0, 0, 0, 404, 61, 1, 0, 0, 0, 405, 409, 3, 102, 51, 0, 406, 409, 3, 70, 35, 0, 407, 409, 3, 98, 49, 0, 408, 405, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 407, 1, 0, 0, 0, 409, 63, 1, 0, 0, 0, 410, 411, 5, 38, 0, 0, 411, 412, 3, 76, 38, 0, 412, 65, 1, 0, 0, 0, 413, 419, 5, 39, 0, 0, 414, 420, 3, 84, 42, 0, 415, 420, 3, 70, 35, 0, 416, 420, 3, 68, 34, 0, 417, 420, 3, 98, 49, 0, 418, 420, 3, 104, 52, 0, 419, 414, 1, 0, 0, 0, 419, 415, 1, 0, 0, 0, 419, 416, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 418, 1, 0, 0, 0, 420, 67, 1, 0, 0, 0, 421, 422, 5, 65, 0, 0, 422, 426, 5, 66, 0, 0, 423, 424, 5, 65, 0, 0, 424, 426, 3, 112, 56, 0, 425, 421, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 69, 1, 0, 0, 0, 427, 430, 5, 66, 0, 0, 428, 430, 3, 112, 56, 0, 429, 427, 1, 0, 0, 0, 429, 428, 1, 0, 0, 0, 430, 71, 1, 0, 0, 0, 431, 439, 3, 74, 37, 0, 432, 439, 3, 76, 38, 0, 433, 439, 3, 78, 39, 0, 434, 439, 3, 80, 40, 0, 435, 439, 3, 82, 41, 0, 436, 439, 3, 84, 42, 0, 437, 439, 3, 86, 43, 0, 438, 431, 1, 0, 0, 0, 438, 432, 1, 0, 0, 0, 438, 433, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 435, 1, 0, 0, 0, 438, 436, 1, 0, 0, 0, 438, 437, 1, 0, 0, 0, 439, 73, 1, 0, 0, 0, 440, 442, 5, 9, 0, 0, 441, 443, 3, 108, 54, 0, 442, 441, 1, 0, 0, 0, 442, 443, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 445, 5, 10, 0, 0, 445, 75, 1, 0, 0, 0, 446, 458, 5, 13, 0, 0, 447, 452, 3, 88, 44, 0, 448, 449, 5, 8, 0, 0, 449, 451, 3, 88, 44, 0, 450, 448, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, 1, 0, 0, 0, 455, 457, 5, 8, 0, 0, 456, 455, 1, 0, 0, 0, 456, 457, 1, 0, 0, 0, 457, 459, 1, 0, 0, 0, 458, 447, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 460, 1, 0, 0, 0, 460, 461, 5, 14, 0, 0, 461, 77, 1, 0, 0, 0, 462, 463, 5, 53, 0, 0, 463, 79, 1, 0, 0, 0, 464, 465, 5, 68, 0, 0, 465, 81, 1, 0, 0, 0, 466, 467, 5, 70, 0, 0, 467, 83, 1, 0, 0, 0, 468, 469, 5, 69, 0, 0, 469, 85, 1, 0, 0, 0, 470, 471, 7, 1, 0, 0, 471, 87, 1, 0, 0, 0, 472, 473, 3, 92, 46, 0, 473, 474, 5, 5, 0, 0, 474, 475, 3, 120, 60, 0, 475, 482, 1, 0, 0, 0, 476, 477, 3, 90, 45, 0, 477, 478, 5, 5, 0, 0, 478, 479, 3, 120, 60, 0, 479, 482, 1, 0, 0, 0, 480, 482, 3, 70, 35, 0, 481, 472, 1, 0, 0, 0, 481, 476, 1, 0, 0, 0, 481, 480, 1, 0, 0, 0, 482, 89, 1, 0, 0, 0, 483, 484, 5, 9, 0, 0, 484, 485, 3, 120, 60, 0, 485, 486, 5, 10, 0, 0, 486, 91, 1, 0, 0, 0, 487, 493, 5, 66, 0, 0, 488, 493, 3, 80, 40, 0, 489, 493, 3, 68, 34, 0, 490, 493, 3, 112, 56, 0, 491, 493, 3, 114, 57, 0, 492, 487, 1, 0, 0, 0, 492, 488, 1, 0, 0, 0, 492, 489, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 491, 1, 0, 0, 0, 493, 93, 1, 0, 0, 0, 494, 495, 3, 96, 48, 0, 495, 496, 5, 66, 0, 0, 496, 95, 1, 0, 0, 0, 497, 499, 5, 71, 0, 0, 498, 497, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 97, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 503, 505, 3, 100, 50, 0, 504, 506, 3, 110, 55, 0, 505, 504, 1, 0, 0, 0, 506, 507, 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 99, 1, 0, 0, 0, 509, 515, 3, 70, 35, 0, 510, 515, 3, 68, 34, 0, 511, 515, 3, 74, 37, 0, 512, 515, 3, 76, 38, 0, 513, 515, 3, 104, 52, 0, 514, 509, 1, 0, 0, 0, 514, 510, 1, 0, 0, 0, 514, 511, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, 514, 513, 1, 0, 0, 0, 515, 101, 1, 0, 0, 0, 516, 518, 3, 104, 52, 0, 517, 519, 3, 146, 73, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 103, 1, 0, 0, 0, 520, 521, 3, 96, 48, 0, 521, 522, 3, 106, 53, 0, 522, 524, 5, 11, 0, 0, 523, 525, 3, 108, 54, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 5, 12, 0, 0, 527, 105, 1, 0, 0, 0, 528, 532, 5, 66, 0, 0, 529, 532, 3, 112, 56, 0, 530, 532, 3, 114, 57, 0, 531, 528, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 531, 530, 1, 0, 0, 0, 532, 107, 1, 0, 0, 0, 533, 538, 3, 120, 60, 0, 534, 535, 5, 8, 0, 0, 535, 537, 3, 120, 60, 0, 536, 534, 1, 0, 0, 0, 537, 540, 1, 0, 0, 0, 538, 536, 1, 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, 0, 541, 543, 5, 8, 0, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 109, 1, 0, 0, 0, 544, 546, 3, 146, 73, 0, 545, 544, 1, 0, 0, 0, 545, 546, 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 5, 7, 0, 0, 548, 556, 3, 92, 46, 0, 549, 550, 3, 146, 73, 0, 550, 551, 5, 7, 0, 0, 551, 553, 1, 0, 0, 0, 552, 549, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 556, 3, 90, 45, 0, 555, 545, 1, 0, 0, 0, 555, 552, 1, 0, 0, 0, 556, 111, 1, 0, 0, 0, 557, 558, 7, 2, 0, 0, 558, 113, 1, 0, 0, 0, 559, 560, 7, 3, 0, 0, 560, 115, 1, 0, 0, 0, 561, 562, 3, 118, 59, 0, 562, 563, 5, 30, 0, 0, 563, 564, 3, 118, 59, 0, 564, 117, 1, 0, 0, 0, 565, 569, 3, 84, 42, 0, 566, 569, 3, 70, 35, 0, 567, 569, 3, 68, 34, 0, 568, 565, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 568, 567, 1, 0, 0, 0, 569, 119, 1, 0, 0, 0, 570, 571, 6, 60, -1, 0, 571, 572, 3, 134, 67, 0, 572, 573, 3, 120, 60, 5, 573, 576, 1, 0, 0, 0, 574, 576, 3, 122, 61, 0, 575, 570, 1, 0, 0, 0, 575, 574, 1, 0, 0, 0, 576, 594, 1, 0, 0, 0, 577, 578, 10, 4, 0, 0, 578, 579, 3, 138, 69, 0, 579, 580, 3, 120, 60, 5, 580, 593, 1, 0, 0, 0, 581, 582, 10, 3, 0, 0, 582, 583, 3, 140, 70, 0, 583, 584, 3, 120, 60, 4, 584, 593, 1, 0, 0, 0, 585, 586, 10, 2, 0, 0, 586, 588, 5, 32, 0, 0, 587, 589, 3, 120, 60, 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, 591, 5, 5, 0, 0, 591, 593, 3, 120, 60, 3, 592, 577, 1, 0, 0, 0, 592, 581, 1, 0, 0, 0, 592, 585, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 121, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 597, 598, 6, 61, -1, 0, 598, 599, 3, 124, 62, 0, 599, 618, 1, 0, 0, 0, 600, 601, 10, 5, 0, 0, 601, 602, 3, 128, 64, 0, 602, 603, 3, 122, 61, 6, 603, 617, 1, 0, 0, 0, 604, 605, 10, 4, 0, 0, 605, 606, 3, 126, 63, 0, 606, 607, 3, 122, 61, 5, 607, 617, 1, 0, 0, 0, 608, 609, 10, 3, 0, 0, 609, 610, 3, 130, 65, 0, 610, 611, 3, 122, 61, 4, 611, 617, 1, 0, 0, 0, 612, 613, 10, 2, 0, 0, 613, 614, 3, 132, 66, 0, 614, 615, 3, 122, 61, 3, 615, 617, 1, 0, 0, 0, 616, 600, 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, 123, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, 622, 6, 62, -1, 0, 622, 639, 3, 102, 51, 0, 623, 639, 3, 116, 58, 0, 624, 639, 3, 72, 36, 0, 625, 639, 3, 70, 35, 0, 626, 639, 3, 98, 49, 0, 627, 639, 3, 68, 34, 0, 628, 632, 5, 11, 0, 0, 629, 633, 3, 18, 9, 0, 630, 633, 3, 58, 29, 0, 631, 633, 3, 120, 60, 0, 632, 629, 1, 0, 0, 0, 632, 630, 1, 0, 0, 0, 632, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 636, 5, 12, 0, 0, 635, 637, 3, 146, 73, 0, 636, 635, 1, 0, 0, 0, 636, 637, 1, 0, 0, 0, 637, 639, 1, 0, 0, 0, 638, 621, 1, 0, 0, 0, 638, 623, 1, 0, 0, 0, 638, 624, 1, 0, 0, 0, 638, 625, 1, 0, 0, 0, 638, 626, 1, 0, 0, 0, 638, 627, 1, 0, 0, 0, 638, 628, 1, 0, 0, 0, 639, 654, 1, 0, 0, 0, 640, 641, 10, 10, 0, 0, 641, 642, 3, 142, 71, 0, 642, 643, 3, 124, 62, 11, 643, 653, 1, 0, 0, 0, 644, 645, 10, 9, 0, 0, 645, 646, 3, 144, 72, 0, 646, 647, 3, 124, 62, 10, 647, 653, 1, 0, 0, 0, 648, 649, 10, 8, 0, 0, 649, 650, 3, 136, 68, 0, 650, 651, 3, 124, 62, 9, 651, 653, 1, 0, 0, 0, 652, 640, 1, 0, 0, 0, 652, 644, 1, 0, 0, 0, 652, 648, 1, 0, 0, 0, 653, 656, 1, 0, 0, 0, 654, 652, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 125, 1, 0, 0, 0, 656, 654, 1, 0, 0, 0, 657, 660, 7, 4, 0, 0, 658, 661, 3, 130, 65, 0, 659, 661, 3, 128, 64, 0, 660, 658, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 127, 1, 0, 0, 0, 662, 663, 7, 5, 0, 0, 663, 129, 1, 0, 0, 0, 664, 666, 5, 63, 0, 0, 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 668, 5, 64, 0, 0, 668, 131, 1, 0, 0, 0, 669, 671, 5, 63, 0, 0, 670, 669, 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 673, 5, 62, 0, 0, 673, 133, 1, 0, 0, 0, 674, 675, 7, 6, 0, 0, 675, 135, 1, 0, 0, 0, 676, 677, 7, 7, 0, 0, 677, 137, 1, 0, 0, 0, 678, 679, 5, 28, 0, 0, 679, 139, 1, 0, 0, 0, 680, 681, 5, 29, 0, 0, 681, 141, 1, 0, 0, 0, 682, 683, 7, 8, 0, 0, 683, 143, 1, 0, 0, 0, 684, 685, 7, 9, 0, 0, 685, 145, 1, 0, 0, 0, 686, 687, 5, 32, 0, 0, 687, 147, 1, 0, 0, 0, 69, 151, 166, 174, 178, 189, 193, 201, 208, 216, 225, 233, 240, 245, 254, 260, 264, 268, 272, 285, 292, 300, 305, 334, 345, 358, 366, 368, 376, 390, 393, 396, 403, 408, 419, 425, 429, 438, 442, 452, 456, 458, 481, 492, 500, 507, 514, 518, 524, 531, 538, 542, 545, 552, 555, 568, 575, 588, 592, 594, 616, 618, 632, 636, 638, 652, 654, 660, 665, 670] \ No newline at end of file diff --git a/pkg/parser/fql/FqlParser.tokens b/pkg/parser/fql/FqlParser.tokens index 52d70539..cf5fd02f 100644 --- a/pkg/parser/fql/FqlParser.tokens +++ b/pkg/parser/fql/FqlParser.tokens @@ -44,31 +44,32 @@ Sort=43 Limit=44 Let=45 Collect=46 -SortDirection=47 -None=48 -Null=49 -BooleanLiteral=50 -Use=51 -Into=52 -Keep=53 -With=54 -All=55 -Any=56 -Aggregate=57 -Event=58 -Like=59 -Not=60 -In=61 -Do=62 -While=63 -Param=64 -Identifier=65 -IgnoreIdentifier=66 -StringLiteral=67 -IntegerLiteral=68 -FloatLiteral=69 -NamespaceSegment=70 -UnknownIdentifier=71 +Do=47 +While=48 +Step=49 +SortDirection=50 +None=51 +Null=52 +BooleanLiteral=53 +Use=54 +Into=55 +Keep=56 +With=57 +All=58 +Any=59 +Aggregate=60 +Event=61 +Like=62 +Not=63 +In=64 +Param=65 +Identifier=66 +IgnoreIdentifier=67 +StringLiteral=68 +IntegerLiteral=69 +FloatLiteral=70 +NamespaceSegment=71 +UnknownIdentifier=72 ':'=5 ';'=6 '.'=7 @@ -108,18 +109,19 @@ UnknownIdentifier=71 'LIMIT'=44 'LET'=45 'COLLECT'=46 -'NONE'=48 -'NULL'=49 -'USE'=51 -'INTO'=52 -'KEEP'=53 -'WITH'=54 -'ALL'=55 -'ANY'=56 -'AGGREGATE'=57 -'EVENT'=58 -'LIKE'=59 -'IN'=61 -'DO'=62 -'WHILE'=63 -'@'=64 +'DO'=47 +'WHILE'=48 +'STEP'=49 +'NONE'=51 +'NULL'=52 +'USE'=54 +'INTO'=55 +'KEEP'=56 +'WITH'=57 +'ALL'=58 +'ANY'=59 +'AGGREGATE'=60 +'EVENT'=61 +'LIKE'=62 +'IN'=64 +'@'=65 diff --git a/pkg/parser/fql/fql_lexer.go b/pkg/parser/fql/fql_lexer.go index 83aa2149..0a8830fd 100644 --- a/pkg/parser/fql/fql_lexer.go +++ b/pkg/parser/fql/fql_lexer.go @@ -48,9 +48,9 @@ func fqllexerLexerInit() { "'/'", "'%'", "'+'", "'-'", "'--'", "'++'", "", "", "", "'='", "'?'", "'!~'", "'=~'", "'FOR'", "'RETURN'", "'WAITFOR'", "'OPTIONS'", "'TIMEOUT'", "'DISTINCT'", "'FILTER'", "'CURRENT'", "'SORT'", "'LIMIT'", "'LET'", - "'COLLECT'", "", "'NONE'", "'NULL'", "", "'USE'", "'INTO'", "'KEEP'", - "'WITH'", "'ALL'", "'ANY'", "'AGGREGATE'", "'EVENT'", "'LIKE'", "", - "'IN'", "'DO'", "'WHILE'", "'@'", + "'COLLECT'", "'DO'", "'WHILE'", "'STEP'", "", "'NONE'", "'NULL'", "", + "'USE'", "'INTO'", "'KEEP'", "'WITH'", "'ALL'", "'ANY'", "'AGGREGATE'", + "'EVENT'", "'LIKE'", "", "'IN'", "'@'", } staticData.SymbolicNames = []string{ "", "MultiLineComment", "SingleLineComment", "WhiteSpaces", "LineTerminator", @@ -59,10 +59,10 @@ func fqllexerLexerInit() { "Gte", "Lte", "Neq", "Multi", "Div", "Mod", "Plus", "Minus", "MinusMinus", "PlusPlus", "And", "Or", "Range", "Assign", "QuestionMark", "RegexNotMatch", "RegexMatch", "For", "Return", "Waitfor", "Options", "Timeout", "Distinct", - "Filter", "Current", "Sort", "Limit", "Let", "Collect", "SortDirection", - "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "All", - "Any", "Aggregate", "Event", "Like", "Not", "In", "Do", "While", "Param", - "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", + "Filter", "Current", "Sort", "Limit", "Let", "Collect", "Do", "While", + "Step", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", + "Keep", "With", "All", "Any", "Aggregate", "Event", "Like", "Not", "In", + "Param", "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", } staticData.RuleNames = []string{ @@ -72,17 +72,17 @@ func fqllexerLexerInit() { "Gte", "Lte", "Neq", "Multi", "Div", "Mod", "Plus", "Minus", "MinusMinus", "PlusPlus", "And", "Or", "Range", "Assign", "QuestionMark", "RegexNotMatch", "RegexMatch", "For", "Return", "Waitfor", "Options", "Timeout", "Distinct", - "Filter", "Current", "Sort", "Limit", "Let", "Collect", "SortDirection", - "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "All", - "Any", "Aggregate", "Event", "Like", "Not", "In", "Do", "While", "Param", - "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", + "Filter", "Current", "Sort", "Limit", "Let", "Collect", "Do", "While", + "Step", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", + "Keep", "With", "All", "Any", "Aggregate", "Event", "Like", "Not", "In", + "Param", "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", "HexDigit", "DecimalIntegerLiteral", "ExponentPart", "Letter", "Symbols", "Underscore", "Digit", "DQSring", "SQString", "BacktickString", "TickString", "NamespaceSeparator", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 0, 71, 613, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, + 4, 0, 72, 620, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, @@ -97,263 +97,265 @@ func fqllexerLexerInit() { 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, - 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 1, 0, 1, - 0, 1, 0, 1, 0, 5, 0, 172, 8, 0, 10, 0, 12, 0, 175, 9, 0, 1, 0, 1, 0, 1, - 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 186, 8, 1, 10, 1, 12, 1, 189, - 9, 1, 1, 1, 1, 1, 1, 2, 4, 2, 194, 8, 2, 11, 2, 12, 2, 195, 1, 2, 1, 2, - 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, - 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, 1, 12, 1, 13, - 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, - 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, - 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, - 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 261, 8, 27, 1, 28, - 1, 28, 1, 28, 1, 28, 3, 28, 267, 8, 28, 1, 29, 1, 29, 1, 29, 1, 30, 1, - 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, - 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, - 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, - 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, - 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, - 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, - 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, - 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, - 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, - 1, 46, 1, 46, 1, 46, 3, 46, 371, 8, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, - 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, - 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, - 49, 1, 49, 1, 49, 3, 49, 401, 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, - 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, - 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, - 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, - 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, - 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, 455, 8, 59, 1, 60, 1, 60, 1, - 60, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, - 1, 63, 1, 64, 4, 64, 472, 8, 64, 11, 64, 12, 64, 473, 1, 64, 1, 64, 5, - 64, 478, 8, 64, 10, 64, 12, 64, 481, 9, 64, 5, 64, 483, 8, 64, 10, 64, - 12, 64, 486, 9, 64, 1, 64, 1, 64, 5, 64, 490, 8, 64, 10, 64, 12, 64, 493, - 9, 64, 5, 64, 495, 8, 64, 10, 64, 12, 64, 498, 9, 64, 1, 65, 1, 65, 1, - 66, 1, 66, 1, 66, 1, 66, 3, 66, 506, 8, 66, 1, 67, 4, 67, 509, 8, 67, 11, - 67, 12, 67, 510, 1, 68, 1, 68, 1, 68, 4, 68, 516, 8, 68, 11, 68, 12, 68, - 517, 1, 68, 3, 68, 521, 8, 68, 1, 68, 1, 68, 3, 68, 525, 8, 68, 3, 68, - 527, 8, 68, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, - 72, 1, 72, 5, 72, 539, 8, 72, 10, 72, 12, 72, 542, 9, 72, 3, 72, 544, 8, - 72, 1, 73, 1, 73, 3, 73, 548, 8, 73, 1, 73, 4, 73, 551, 8, 73, 11, 73, - 12, 73, 552, 1, 74, 1, 74, 1, 75, 1, 75, 1, 76, 1, 76, 1, 77, 1, 77, 1, - 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 5, 78, 569, 8, 78, 10, 78, 12, 78, - 572, 9, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 5, - 79, 582, 8, 79, 10, 79, 12, 79, 585, 9, 79, 1, 79, 1, 79, 1, 80, 1, 80, - 1, 80, 1, 80, 5, 80, 593, 8, 80, 10, 80, 12, 80, 596, 9, 80, 1, 80, 1, - 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 604, 8, 81, 10, 81, 12, 81, 607, - 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 173, 0, 83, 1, 1, 3, 2, 5, - 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, - 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, - 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, - 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, - 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, - 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, - 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, - 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 0, 145, - 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, 0, 157, 0, 159, 0, 161, 0, 163, - 0, 165, 0, 1, 0, 12, 3, 0, 10, 10, 13, 13, 8232, 8233, 4, 0, 9, 9, 11, - 12, 32, 32, 160, 160, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, - 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 2, 0, 65, 90, 97, - 122, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 1, 0, 96, 96, 1, 0, 180, - 180, 637, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, - 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, - 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, - 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, - 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, - 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, - 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, - 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, - 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, - 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, - 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, - 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, - 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, - 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, - 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, - 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, - 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, - 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, - 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 1, - 167, 1, 0, 0, 0, 3, 181, 1, 0, 0, 0, 5, 193, 1, 0, 0, 0, 7, 199, 1, 0, - 0, 0, 9, 203, 1, 0, 0, 0, 11, 205, 1, 0, 0, 0, 13, 207, 1, 0, 0, 0, 15, - 209, 1, 0, 0, 0, 17, 211, 1, 0, 0, 0, 19, 213, 1, 0, 0, 0, 21, 215, 1, - 0, 0, 0, 23, 217, 1, 0, 0, 0, 25, 219, 1, 0, 0, 0, 27, 221, 1, 0, 0, 0, - 29, 223, 1, 0, 0, 0, 31, 225, 1, 0, 0, 0, 33, 227, 1, 0, 0, 0, 35, 230, - 1, 0, 0, 0, 37, 233, 1, 0, 0, 0, 39, 236, 1, 0, 0, 0, 41, 239, 1, 0, 0, - 0, 43, 241, 1, 0, 0, 0, 45, 243, 1, 0, 0, 0, 47, 245, 1, 0, 0, 0, 49, 247, - 1, 0, 0, 0, 51, 249, 1, 0, 0, 0, 53, 252, 1, 0, 0, 0, 55, 260, 1, 0, 0, - 0, 57, 266, 1, 0, 0, 0, 59, 268, 1, 0, 0, 0, 61, 271, 1, 0, 0, 0, 63, 273, - 1, 0, 0, 0, 65, 275, 1, 0, 0, 0, 67, 278, 1, 0, 0, 0, 69, 281, 1, 0, 0, - 0, 71, 285, 1, 0, 0, 0, 73, 292, 1, 0, 0, 0, 75, 300, 1, 0, 0, 0, 77, 308, - 1, 0, 0, 0, 79, 316, 1, 0, 0, 0, 81, 325, 1, 0, 0, 0, 83, 332, 1, 0, 0, - 0, 85, 340, 1, 0, 0, 0, 87, 345, 1, 0, 0, 0, 89, 351, 1, 0, 0, 0, 91, 355, - 1, 0, 0, 0, 93, 370, 1, 0, 0, 0, 95, 372, 1, 0, 0, 0, 97, 377, 1, 0, 0, - 0, 99, 400, 1, 0, 0, 0, 101, 402, 1, 0, 0, 0, 103, 406, 1, 0, 0, 0, 105, - 411, 1, 0, 0, 0, 107, 416, 1, 0, 0, 0, 109, 421, 1, 0, 0, 0, 111, 425, - 1, 0, 0, 0, 113, 429, 1, 0, 0, 0, 115, 439, 1, 0, 0, 0, 117, 445, 1, 0, - 0, 0, 119, 454, 1, 0, 0, 0, 121, 456, 1, 0, 0, 0, 123, 459, 1, 0, 0, 0, - 125, 462, 1, 0, 0, 0, 127, 468, 1, 0, 0, 0, 129, 471, 1, 0, 0, 0, 131, - 499, 1, 0, 0, 0, 133, 505, 1, 0, 0, 0, 135, 508, 1, 0, 0, 0, 137, 526, - 1, 0, 0, 0, 139, 528, 1, 0, 0, 0, 141, 531, 1, 0, 0, 0, 143, 533, 1, 0, - 0, 0, 145, 543, 1, 0, 0, 0, 147, 545, 1, 0, 0, 0, 149, 554, 1, 0, 0, 0, - 151, 556, 1, 0, 0, 0, 153, 558, 1, 0, 0, 0, 155, 560, 1, 0, 0, 0, 157, - 562, 1, 0, 0, 0, 159, 575, 1, 0, 0, 0, 161, 588, 1, 0, 0, 0, 163, 599, - 1, 0, 0, 0, 165, 610, 1, 0, 0, 0, 167, 168, 5, 47, 0, 0, 168, 169, 5, 42, - 0, 0, 169, 173, 1, 0, 0, 0, 170, 172, 9, 0, 0, 0, 171, 170, 1, 0, 0, 0, - 172, 175, 1, 0, 0, 0, 173, 174, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, - 176, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, 177, 5, 42, 0, 0, 177, 178, - 5, 47, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 6, 0, 0, 0, 180, 2, 1, 0, - 0, 0, 181, 182, 5, 47, 0, 0, 182, 183, 5, 47, 0, 0, 183, 187, 1, 0, 0, - 0, 184, 186, 8, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, - 185, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 187, - 1, 0, 0, 0, 190, 191, 6, 1, 0, 0, 191, 4, 1, 0, 0, 0, 192, 194, 7, 1, 0, - 0, 193, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 195, - 196, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 198, 6, 2, 0, 0, 198, 6, 1, - 0, 0, 0, 199, 200, 7, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 202, 6, 3, 0, - 0, 202, 8, 1, 0, 0, 0, 203, 204, 5, 58, 0, 0, 204, 10, 1, 0, 0, 0, 205, - 206, 5, 59, 0, 0, 206, 12, 1, 0, 0, 0, 207, 208, 5, 46, 0, 0, 208, 14, - 1, 0, 0, 0, 209, 210, 5, 44, 0, 0, 210, 16, 1, 0, 0, 0, 211, 212, 5, 91, - 0, 0, 212, 18, 1, 0, 0, 0, 213, 214, 5, 93, 0, 0, 214, 20, 1, 0, 0, 0, - 215, 216, 5, 40, 0, 0, 216, 22, 1, 0, 0, 0, 217, 218, 5, 41, 0, 0, 218, - 24, 1, 0, 0, 0, 219, 220, 5, 123, 0, 0, 220, 26, 1, 0, 0, 0, 221, 222, - 5, 125, 0, 0, 222, 28, 1, 0, 0, 0, 223, 224, 5, 62, 0, 0, 224, 30, 1, 0, - 0, 0, 225, 226, 5, 60, 0, 0, 226, 32, 1, 0, 0, 0, 227, 228, 5, 61, 0, 0, - 228, 229, 5, 61, 0, 0, 229, 34, 1, 0, 0, 0, 230, 231, 5, 62, 0, 0, 231, - 232, 5, 61, 0, 0, 232, 36, 1, 0, 0, 0, 233, 234, 5, 60, 0, 0, 234, 235, - 5, 61, 0, 0, 235, 38, 1, 0, 0, 0, 236, 237, 5, 33, 0, 0, 237, 238, 5, 61, - 0, 0, 238, 40, 1, 0, 0, 0, 239, 240, 5, 42, 0, 0, 240, 42, 1, 0, 0, 0, - 241, 242, 5, 47, 0, 0, 242, 44, 1, 0, 0, 0, 243, 244, 5, 37, 0, 0, 244, - 46, 1, 0, 0, 0, 245, 246, 5, 43, 0, 0, 246, 48, 1, 0, 0, 0, 247, 248, 5, - 45, 0, 0, 248, 50, 1, 0, 0, 0, 249, 250, 5, 45, 0, 0, 250, 251, 5, 45, - 0, 0, 251, 52, 1, 0, 0, 0, 252, 253, 5, 43, 0, 0, 253, 254, 5, 43, 0, 0, - 254, 54, 1, 0, 0, 0, 255, 256, 5, 65, 0, 0, 256, 257, 5, 78, 0, 0, 257, - 261, 5, 68, 0, 0, 258, 259, 5, 38, 0, 0, 259, 261, 5, 38, 0, 0, 260, 255, - 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 56, 1, 0, 0, 0, 262, 263, 5, 79, - 0, 0, 263, 267, 5, 82, 0, 0, 264, 265, 5, 124, 0, 0, 265, 267, 5, 124, - 0, 0, 266, 262, 1, 0, 0, 0, 266, 264, 1, 0, 0, 0, 267, 58, 1, 0, 0, 0, - 268, 269, 3, 13, 6, 0, 269, 270, 3, 13, 6, 0, 270, 60, 1, 0, 0, 0, 271, - 272, 5, 61, 0, 0, 272, 62, 1, 0, 0, 0, 273, 274, 5, 63, 0, 0, 274, 64, - 1, 0, 0, 0, 275, 276, 5, 33, 0, 0, 276, 277, 5, 126, 0, 0, 277, 66, 1, - 0, 0, 0, 278, 279, 5, 61, 0, 0, 279, 280, 5, 126, 0, 0, 280, 68, 1, 0, - 0, 0, 281, 282, 5, 70, 0, 0, 282, 283, 5, 79, 0, 0, 283, 284, 5, 82, 0, - 0, 284, 70, 1, 0, 0, 0, 285, 286, 5, 82, 0, 0, 286, 287, 5, 69, 0, 0, 287, - 288, 5, 84, 0, 0, 288, 289, 5, 85, 0, 0, 289, 290, 5, 82, 0, 0, 290, 291, - 5, 78, 0, 0, 291, 72, 1, 0, 0, 0, 292, 293, 5, 87, 0, 0, 293, 294, 5, 65, - 0, 0, 294, 295, 5, 73, 0, 0, 295, 296, 5, 84, 0, 0, 296, 297, 5, 70, 0, - 0, 297, 298, 5, 79, 0, 0, 298, 299, 5, 82, 0, 0, 299, 74, 1, 0, 0, 0, 300, - 301, 5, 79, 0, 0, 301, 302, 5, 80, 0, 0, 302, 303, 5, 84, 0, 0, 303, 304, - 5, 73, 0, 0, 304, 305, 5, 79, 0, 0, 305, 306, 5, 78, 0, 0, 306, 307, 5, - 83, 0, 0, 307, 76, 1, 0, 0, 0, 308, 309, 5, 84, 0, 0, 309, 310, 5, 73, - 0, 0, 310, 311, 5, 77, 0, 0, 311, 312, 5, 69, 0, 0, 312, 313, 5, 79, 0, - 0, 313, 314, 5, 85, 0, 0, 314, 315, 5, 84, 0, 0, 315, 78, 1, 0, 0, 0, 316, - 317, 5, 68, 0, 0, 317, 318, 5, 73, 0, 0, 318, 319, 5, 83, 0, 0, 319, 320, - 5, 84, 0, 0, 320, 321, 5, 73, 0, 0, 321, 322, 5, 78, 0, 0, 322, 323, 5, - 67, 0, 0, 323, 324, 5, 84, 0, 0, 324, 80, 1, 0, 0, 0, 325, 326, 5, 70, - 0, 0, 326, 327, 5, 73, 0, 0, 327, 328, 5, 76, 0, 0, 328, 329, 5, 84, 0, - 0, 329, 330, 5, 69, 0, 0, 330, 331, 5, 82, 0, 0, 331, 82, 1, 0, 0, 0, 332, - 333, 5, 67, 0, 0, 333, 334, 5, 85, 0, 0, 334, 335, 5, 82, 0, 0, 335, 336, - 5, 82, 0, 0, 336, 337, 5, 69, 0, 0, 337, 338, 5, 78, 0, 0, 338, 339, 5, - 84, 0, 0, 339, 84, 1, 0, 0, 0, 340, 341, 5, 83, 0, 0, 341, 342, 5, 79, - 0, 0, 342, 343, 5, 82, 0, 0, 343, 344, 5, 84, 0, 0, 344, 86, 1, 0, 0, 0, - 345, 346, 5, 76, 0, 0, 346, 347, 5, 73, 0, 0, 347, 348, 5, 77, 0, 0, 348, - 349, 5, 73, 0, 0, 349, 350, 5, 84, 0, 0, 350, 88, 1, 0, 0, 0, 351, 352, - 5, 76, 0, 0, 352, 353, 5, 69, 0, 0, 353, 354, 5, 84, 0, 0, 354, 90, 1, - 0, 0, 0, 355, 356, 5, 67, 0, 0, 356, 357, 5, 79, 0, 0, 357, 358, 5, 76, - 0, 0, 358, 359, 5, 76, 0, 0, 359, 360, 5, 69, 0, 0, 360, 361, 5, 67, 0, - 0, 361, 362, 5, 84, 0, 0, 362, 92, 1, 0, 0, 0, 363, 364, 5, 65, 0, 0, 364, - 365, 5, 83, 0, 0, 365, 371, 5, 67, 0, 0, 366, 367, 5, 68, 0, 0, 367, 368, - 5, 69, 0, 0, 368, 369, 5, 83, 0, 0, 369, 371, 5, 67, 0, 0, 370, 363, 1, - 0, 0, 0, 370, 366, 1, 0, 0, 0, 371, 94, 1, 0, 0, 0, 372, 373, 5, 78, 0, - 0, 373, 374, 5, 79, 0, 0, 374, 375, 5, 78, 0, 0, 375, 376, 5, 69, 0, 0, - 376, 96, 1, 0, 0, 0, 377, 378, 5, 78, 0, 0, 378, 379, 5, 85, 0, 0, 379, - 380, 5, 76, 0, 0, 380, 381, 5, 76, 0, 0, 381, 98, 1, 0, 0, 0, 382, 383, - 5, 84, 0, 0, 383, 384, 5, 82, 0, 0, 384, 385, 5, 85, 0, 0, 385, 401, 5, - 69, 0, 0, 386, 387, 5, 116, 0, 0, 387, 388, 5, 114, 0, 0, 388, 389, 5, - 117, 0, 0, 389, 401, 5, 101, 0, 0, 390, 391, 5, 70, 0, 0, 391, 392, 5, - 65, 0, 0, 392, 393, 5, 76, 0, 0, 393, 394, 5, 83, 0, 0, 394, 401, 5, 69, - 0, 0, 395, 396, 5, 102, 0, 0, 396, 397, 5, 97, 0, 0, 397, 398, 5, 108, - 0, 0, 398, 399, 5, 115, 0, 0, 399, 401, 5, 101, 0, 0, 400, 382, 1, 0, 0, - 0, 400, 386, 1, 0, 0, 0, 400, 390, 1, 0, 0, 0, 400, 395, 1, 0, 0, 0, 401, - 100, 1, 0, 0, 0, 402, 403, 5, 85, 0, 0, 403, 404, 5, 83, 0, 0, 404, 405, - 5, 69, 0, 0, 405, 102, 1, 0, 0, 0, 406, 407, 5, 73, 0, 0, 407, 408, 5, - 78, 0, 0, 408, 409, 5, 84, 0, 0, 409, 410, 5, 79, 0, 0, 410, 104, 1, 0, - 0, 0, 411, 412, 5, 75, 0, 0, 412, 413, 5, 69, 0, 0, 413, 414, 5, 69, 0, - 0, 414, 415, 5, 80, 0, 0, 415, 106, 1, 0, 0, 0, 416, 417, 5, 87, 0, 0, - 417, 418, 5, 73, 0, 0, 418, 419, 5, 84, 0, 0, 419, 420, 5, 72, 0, 0, 420, - 108, 1, 0, 0, 0, 421, 422, 5, 65, 0, 0, 422, 423, 5, 76, 0, 0, 423, 424, - 5, 76, 0, 0, 424, 110, 1, 0, 0, 0, 425, 426, 5, 65, 0, 0, 426, 427, 5, - 78, 0, 0, 427, 428, 5, 89, 0, 0, 428, 112, 1, 0, 0, 0, 429, 430, 5, 65, - 0, 0, 430, 431, 5, 71, 0, 0, 431, 432, 5, 71, 0, 0, 432, 433, 5, 82, 0, - 0, 433, 434, 5, 69, 0, 0, 434, 435, 5, 71, 0, 0, 435, 436, 5, 65, 0, 0, - 436, 437, 5, 84, 0, 0, 437, 438, 5, 69, 0, 0, 438, 114, 1, 0, 0, 0, 439, - 440, 5, 69, 0, 0, 440, 441, 5, 86, 0, 0, 441, 442, 5, 69, 0, 0, 442, 443, - 5, 78, 0, 0, 443, 444, 5, 84, 0, 0, 444, 116, 1, 0, 0, 0, 445, 446, 5, - 76, 0, 0, 446, 447, 5, 73, 0, 0, 447, 448, 5, 75, 0, 0, 448, 449, 5, 69, - 0, 0, 449, 118, 1, 0, 0, 0, 450, 451, 5, 78, 0, 0, 451, 452, 5, 79, 0, - 0, 452, 455, 5, 84, 0, 0, 453, 455, 5, 33, 0, 0, 454, 450, 1, 0, 0, 0, - 454, 453, 1, 0, 0, 0, 455, 120, 1, 0, 0, 0, 456, 457, 5, 73, 0, 0, 457, - 458, 5, 78, 0, 0, 458, 122, 1, 0, 0, 0, 459, 460, 5, 68, 0, 0, 460, 461, - 5, 79, 0, 0, 461, 124, 1, 0, 0, 0, 462, 463, 5, 87, 0, 0, 463, 464, 5, - 72, 0, 0, 464, 465, 5, 73, 0, 0, 465, 466, 5, 76, 0, 0, 466, 467, 5, 69, - 0, 0, 467, 126, 1, 0, 0, 0, 468, 469, 5, 64, 0, 0, 469, 128, 1, 0, 0, 0, - 470, 472, 3, 149, 74, 0, 471, 470, 1, 0, 0, 0, 472, 473, 1, 0, 0, 0, 473, - 471, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 484, 1, 0, 0, 0, 475, 479, - 3, 151, 75, 0, 476, 478, 3, 129, 64, 0, 477, 476, 1, 0, 0, 0, 478, 481, - 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 483, 1, 0, - 0, 0, 481, 479, 1, 0, 0, 0, 482, 475, 1, 0, 0, 0, 483, 486, 1, 0, 0, 0, - 484, 482, 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 496, 1, 0, 0, 0, 486, - 484, 1, 0, 0, 0, 487, 491, 3, 155, 77, 0, 488, 490, 3, 129, 64, 0, 489, - 488, 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 492, - 1, 0, 0, 0, 492, 495, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 487, 1, 0, - 0, 0, 495, 498, 1, 0, 0, 0, 496, 494, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, - 497, 130, 1, 0, 0, 0, 498, 496, 1, 0, 0, 0, 499, 500, 3, 153, 76, 0, 500, - 132, 1, 0, 0, 0, 501, 506, 3, 159, 79, 0, 502, 506, 3, 157, 78, 0, 503, - 506, 3, 161, 80, 0, 504, 506, 3, 163, 81, 0, 505, 501, 1, 0, 0, 0, 505, - 502, 1, 0, 0, 0, 505, 503, 1, 0, 0, 0, 505, 504, 1, 0, 0, 0, 506, 134, - 1, 0, 0, 0, 507, 509, 7, 2, 0, 0, 508, 507, 1, 0, 0, 0, 509, 510, 1, 0, - 0, 0, 510, 508, 1, 0, 0, 0, 510, 511, 1, 0, 0, 0, 511, 136, 1, 0, 0, 0, - 512, 513, 3, 145, 72, 0, 513, 515, 3, 13, 6, 0, 514, 516, 7, 2, 0, 0, 515, + 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, + 83, 1, 0, 1, 0, 1, 0, 1, 0, 5, 0, 174, 8, 0, 10, 0, 12, 0, 177, 9, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 188, 8, 1, 10, + 1, 12, 1, 191, 9, 1, 1, 1, 1, 1, 1, 2, 4, 2, 196, 8, 2, 11, 2, 12, 2, 197, + 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 6, 1, 6, + 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 12, + 1, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, + 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, + 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, + 25, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 3, 27, 263, + 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 269, 8, 28, 1, 29, 1, 29, 1, + 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, + 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, + 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, + 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, + 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, + 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, + 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, + 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, + 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, + 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, + 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 3, 49, 387, + 8, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, + 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, + 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 417, 8, + 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, + 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, + 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, + 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, + 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, + 3, 62, 471, 8, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 65, 4, 65, 479, + 8, 65, 11, 65, 12, 65, 480, 1, 65, 1, 65, 5, 65, 485, 8, 65, 10, 65, 12, + 65, 488, 9, 65, 5, 65, 490, 8, 65, 10, 65, 12, 65, 493, 9, 65, 1, 65, 1, + 65, 5, 65, 497, 8, 65, 10, 65, 12, 65, 500, 9, 65, 5, 65, 502, 8, 65, 10, + 65, 12, 65, 505, 9, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 3, 67, + 513, 8, 67, 1, 68, 4, 68, 516, 8, 68, 11, 68, 12, 68, 517, 1, 69, 1, 69, + 1, 69, 4, 69, 523, 8, 69, 11, 69, 12, 69, 524, 1, 69, 3, 69, 528, 8, 69, + 1, 69, 1, 69, 3, 69, 532, 8, 69, 3, 69, 534, 8, 69, 1, 70, 1, 70, 1, 70, + 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 5, 73, 546, 8, 73, 10, + 73, 12, 73, 549, 9, 73, 3, 73, 551, 8, 73, 1, 74, 1, 74, 3, 74, 555, 8, + 74, 1, 74, 4, 74, 558, 8, 74, 11, 74, 12, 74, 559, 1, 75, 1, 75, 1, 76, + 1, 76, 1, 77, 1, 77, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 79, 1, 79, 1, + 79, 5, 79, 576, 8, 79, 10, 79, 12, 79, 579, 9, 79, 1, 79, 1, 79, 1, 80, + 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 589, 8, 80, 10, 80, 12, 80, 592, + 9, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 600, 8, 81, 10, + 81, 12, 81, 603, 9, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 82, 1, 82, 5, 82, + 611, 8, 82, 10, 82, 12, 82, 614, 9, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, + 83, 1, 175, 0, 84, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, + 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, + 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, + 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, + 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, + 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, + 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, + 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, + 139, 70, 141, 71, 143, 72, 145, 0, 147, 0, 149, 0, 151, 0, 153, 0, 155, + 0, 157, 0, 159, 0, 161, 0, 163, 0, 165, 0, 167, 0, 1, 0, 12, 3, 0, 10, + 10, 13, 13, 8232, 8233, 4, 0, 9, 9, 11, 12, 32, 32, 160, 160, 1, 0, 48, + 57, 3, 0, 48, 57, 65, 70, 97, 102, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, + 2, 0, 43, 43, 45, 45, 2, 0, 65, 90, 97, 122, 2, 0, 34, 34, 92, 92, 2, 0, + 39, 39, 92, 92, 1, 0, 96, 96, 1, 0, 180, 180, 644, 0, 1, 1, 0, 0, 0, 0, + 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, + 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, + 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, + 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, + 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, + 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, + 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, + 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, + 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, + 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, + 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, + 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, + 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, + 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, + 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, + 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, + 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, + 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, + 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 1, 169, 1, 0, + 0, 0, 3, 183, 1, 0, 0, 0, 5, 195, 1, 0, 0, 0, 7, 201, 1, 0, 0, 0, 9, 205, + 1, 0, 0, 0, 11, 207, 1, 0, 0, 0, 13, 209, 1, 0, 0, 0, 15, 211, 1, 0, 0, + 0, 17, 213, 1, 0, 0, 0, 19, 215, 1, 0, 0, 0, 21, 217, 1, 0, 0, 0, 23, 219, + 1, 0, 0, 0, 25, 221, 1, 0, 0, 0, 27, 223, 1, 0, 0, 0, 29, 225, 1, 0, 0, + 0, 31, 227, 1, 0, 0, 0, 33, 229, 1, 0, 0, 0, 35, 232, 1, 0, 0, 0, 37, 235, + 1, 0, 0, 0, 39, 238, 1, 0, 0, 0, 41, 241, 1, 0, 0, 0, 43, 243, 1, 0, 0, + 0, 45, 245, 1, 0, 0, 0, 47, 247, 1, 0, 0, 0, 49, 249, 1, 0, 0, 0, 51, 251, + 1, 0, 0, 0, 53, 254, 1, 0, 0, 0, 55, 262, 1, 0, 0, 0, 57, 268, 1, 0, 0, + 0, 59, 270, 1, 0, 0, 0, 61, 273, 1, 0, 0, 0, 63, 275, 1, 0, 0, 0, 65, 277, + 1, 0, 0, 0, 67, 280, 1, 0, 0, 0, 69, 283, 1, 0, 0, 0, 71, 287, 1, 0, 0, + 0, 73, 294, 1, 0, 0, 0, 75, 302, 1, 0, 0, 0, 77, 310, 1, 0, 0, 0, 79, 318, + 1, 0, 0, 0, 81, 327, 1, 0, 0, 0, 83, 334, 1, 0, 0, 0, 85, 342, 1, 0, 0, + 0, 87, 347, 1, 0, 0, 0, 89, 353, 1, 0, 0, 0, 91, 357, 1, 0, 0, 0, 93, 365, + 1, 0, 0, 0, 95, 368, 1, 0, 0, 0, 97, 374, 1, 0, 0, 0, 99, 386, 1, 0, 0, + 0, 101, 388, 1, 0, 0, 0, 103, 393, 1, 0, 0, 0, 105, 416, 1, 0, 0, 0, 107, + 418, 1, 0, 0, 0, 109, 422, 1, 0, 0, 0, 111, 427, 1, 0, 0, 0, 113, 432, + 1, 0, 0, 0, 115, 437, 1, 0, 0, 0, 117, 441, 1, 0, 0, 0, 119, 445, 1, 0, + 0, 0, 121, 455, 1, 0, 0, 0, 123, 461, 1, 0, 0, 0, 125, 470, 1, 0, 0, 0, + 127, 472, 1, 0, 0, 0, 129, 475, 1, 0, 0, 0, 131, 478, 1, 0, 0, 0, 133, + 506, 1, 0, 0, 0, 135, 512, 1, 0, 0, 0, 137, 515, 1, 0, 0, 0, 139, 533, + 1, 0, 0, 0, 141, 535, 1, 0, 0, 0, 143, 538, 1, 0, 0, 0, 145, 540, 1, 0, + 0, 0, 147, 550, 1, 0, 0, 0, 149, 552, 1, 0, 0, 0, 151, 561, 1, 0, 0, 0, + 153, 563, 1, 0, 0, 0, 155, 565, 1, 0, 0, 0, 157, 567, 1, 0, 0, 0, 159, + 569, 1, 0, 0, 0, 161, 582, 1, 0, 0, 0, 163, 595, 1, 0, 0, 0, 165, 606, + 1, 0, 0, 0, 167, 617, 1, 0, 0, 0, 169, 170, 5, 47, 0, 0, 170, 171, 5, 42, + 0, 0, 171, 175, 1, 0, 0, 0, 172, 174, 9, 0, 0, 0, 173, 172, 1, 0, 0, 0, + 174, 177, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 175, 173, 1, 0, 0, 0, 176, + 178, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 178, 179, 5, 42, 0, 0, 179, 180, + 5, 47, 0, 0, 180, 181, 1, 0, 0, 0, 181, 182, 6, 0, 0, 0, 182, 2, 1, 0, + 0, 0, 183, 184, 5, 47, 0, 0, 184, 185, 5, 47, 0, 0, 185, 189, 1, 0, 0, + 0, 186, 188, 8, 0, 0, 0, 187, 186, 1, 0, 0, 0, 188, 191, 1, 0, 0, 0, 189, + 187, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 192, 1, 0, 0, 0, 191, 189, + 1, 0, 0, 0, 192, 193, 6, 1, 0, 0, 193, 4, 1, 0, 0, 0, 194, 196, 7, 1, 0, + 0, 195, 194, 1, 0, 0, 0, 196, 197, 1, 0, 0, 0, 197, 195, 1, 0, 0, 0, 197, + 198, 1, 0, 0, 0, 198, 199, 1, 0, 0, 0, 199, 200, 6, 2, 0, 0, 200, 6, 1, + 0, 0, 0, 201, 202, 7, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 204, 6, 3, 0, + 0, 204, 8, 1, 0, 0, 0, 205, 206, 5, 58, 0, 0, 206, 10, 1, 0, 0, 0, 207, + 208, 5, 59, 0, 0, 208, 12, 1, 0, 0, 0, 209, 210, 5, 46, 0, 0, 210, 14, + 1, 0, 0, 0, 211, 212, 5, 44, 0, 0, 212, 16, 1, 0, 0, 0, 213, 214, 5, 91, + 0, 0, 214, 18, 1, 0, 0, 0, 215, 216, 5, 93, 0, 0, 216, 20, 1, 0, 0, 0, + 217, 218, 5, 40, 0, 0, 218, 22, 1, 0, 0, 0, 219, 220, 5, 41, 0, 0, 220, + 24, 1, 0, 0, 0, 221, 222, 5, 123, 0, 0, 222, 26, 1, 0, 0, 0, 223, 224, + 5, 125, 0, 0, 224, 28, 1, 0, 0, 0, 225, 226, 5, 62, 0, 0, 226, 30, 1, 0, + 0, 0, 227, 228, 5, 60, 0, 0, 228, 32, 1, 0, 0, 0, 229, 230, 5, 61, 0, 0, + 230, 231, 5, 61, 0, 0, 231, 34, 1, 0, 0, 0, 232, 233, 5, 62, 0, 0, 233, + 234, 5, 61, 0, 0, 234, 36, 1, 0, 0, 0, 235, 236, 5, 60, 0, 0, 236, 237, + 5, 61, 0, 0, 237, 38, 1, 0, 0, 0, 238, 239, 5, 33, 0, 0, 239, 240, 5, 61, + 0, 0, 240, 40, 1, 0, 0, 0, 241, 242, 5, 42, 0, 0, 242, 42, 1, 0, 0, 0, + 243, 244, 5, 47, 0, 0, 244, 44, 1, 0, 0, 0, 245, 246, 5, 37, 0, 0, 246, + 46, 1, 0, 0, 0, 247, 248, 5, 43, 0, 0, 248, 48, 1, 0, 0, 0, 249, 250, 5, + 45, 0, 0, 250, 50, 1, 0, 0, 0, 251, 252, 5, 45, 0, 0, 252, 253, 5, 45, + 0, 0, 253, 52, 1, 0, 0, 0, 254, 255, 5, 43, 0, 0, 255, 256, 5, 43, 0, 0, + 256, 54, 1, 0, 0, 0, 257, 258, 5, 65, 0, 0, 258, 259, 5, 78, 0, 0, 259, + 263, 5, 68, 0, 0, 260, 261, 5, 38, 0, 0, 261, 263, 5, 38, 0, 0, 262, 257, + 1, 0, 0, 0, 262, 260, 1, 0, 0, 0, 263, 56, 1, 0, 0, 0, 264, 265, 5, 79, + 0, 0, 265, 269, 5, 82, 0, 0, 266, 267, 5, 124, 0, 0, 267, 269, 5, 124, + 0, 0, 268, 264, 1, 0, 0, 0, 268, 266, 1, 0, 0, 0, 269, 58, 1, 0, 0, 0, + 270, 271, 3, 13, 6, 0, 271, 272, 3, 13, 6, 0, 272, 60, 1, 0, 0, 0, 273, + 274, 5, 61, 0, 0, 274, 62, 1, 0, 0, 0, 275, 276, 5, 63, 0, 0, 276, 64, + 1, 0, 0, 0, 277, 278, 5, 33, 0, 0, 278, 279, 5, 126, 0, 0, 279, 66, 1, + 0, 0, 0, 280, 281, 5, 61, 0, 0, 281, 282, 5, 126, 0, 0, 282, 68, 1, 0, + 0, 0, 283, 284, 5, 70, 0, 0, 284, 285, 5, 79, 0, 0, 285, 286, 5, 82, 0, + 0, 286, 70, 1, 0, 0, 0, 287, 288, 5, 82, 0, 0, 288, 289, 5, 69, 0, 0, 289, + 290, 5, 84, 0, 0, 290, 291, 5, 85, 0, 0, 291, 292, 5, 82, 0, 0, 292, 293, + 5, 78, 0, 0, 293, 72, 1, 0, 0, 0, 294, 295, 5, 87, 0, 0, 295, 296, 5, 65, + 0, 0, 296, 297, 5, 73, 0, 0, 297, 298, 5, 84, 0, 0, 298, 299, 5, 70, 0, + 0, 299, 300, 5, 79, 0, 0, 300, 301, 5, 82, 0, 0, 301, 74, 1, 0, 0, 0, 302, + 303, 5, 79, 0, 0, 303, 304, 5, 80, 0, 0, 304, 305, 5, 84, 0, 0, 305, 306, + 5, 73, 0, 0, 306, 307, 5, 79, 0, 0, 307, 308, 5, 78, 0, 0, 308, 309, 5, + 83, 0, 0, 309, 76, 1, 0, 0, 0, 310, 311, 5, 84, 0, 0, 311, 312, 5, 73, + 0, 0, 312, 313, 5, 77, 0, 0, 313, 314, 5, 69, 0, 0, 314, 315, 5, 79, 0, + 0, 315, 316, 5, 85, 0, 0, 316, 317, 5, 84, 0, 0, 317, 78, 1, 0, 0, 0, 318, + 319, 5, 68, 0, 0, 319, 320, 5, 73, 0, 0, 320, 321, 5, 83, 0, 0, 321, 322, + 5, 84, 0, 0, 322, 323, 5, 73, 0, 0, 323, 324, 5, 78, 0, 0, 324, 325, 5, + 67, 0, 0, 325, 326, 5, 84, 0, 0, 326, 80, 1, 0, 0, 0, 327, 328, 5, 70, + 0, 0, 328, 329, 5, 73, 0, 0, 329, 330, 5, 76, 0, 0, 330, 331, 5, 84, 0, + 0, 331, 332, 5, 69, 0, 0, 332, 333, 5, 82, 0, 0, 333, 82, 1, 0, 0, 0, 334, + 335, 5, 67, 0, 0, 335, 336, 5, 85, 0, 0, 336, 337, 5, 82, 0, 0, 337, 338, + 5, 82, 0, 0, 338, 339, 5, 69, 0, 0, 339, 340, 5, 78, 0, 0, 340, 341, 5, + 84, 0, 0, 341, 84, 1, 0, 0, 0, 342, 343, 5, 83, 0, 0, 343, 344, 5, 79, + 0, 0, 344, 345, 5, 82, 0, 0, 345, 346, 5, 84, 0, 0, 346, 86, 1, 0, 0, 0, + 347, 348, 5, 76, 0, 0, 348, 349, 5, 73, 0, 0, 349, 350, 5, 77, 0, 0, 350, + 351, 5, 73, 0, 0, 351, 352, 5, 84, 0, 0, 352, 88, 1, 0, 0, 0, 353, 354, + 5, 76, 0, 0, 354, 355, 5, 69, 0, 0, 355, 356, 5, 84, 0, 0, 356, 90, 1, + 0, 0, 0, 357, 358, 5, 67, 0, 0, 358, 359, 5, 79, 0, 0, 359, 360, 5, 76, + 0, 0, 360, 361, 5, 76, 0, 0, 361, 362, 5, 69, 0, 0, 362, 363, 5, 67, 0, + 0, 363, 364, 5, 84, 0, 0, 364, 92, 1, 0, 0, 0, 365, 366, 5, 68, 0, 0, 366, + 367, 5, 79, 0, 0, 367, 94, 1, 0, 0, 0, 368, 369, 5, 87, 0, 0, 369, 370, + 5, 72, 0, 0, 370, 371, 5, 73, 0, 0, 371, 372, 5, 76, 0, 0, 372, 373, 5, + 69, 0, 0, 373, 96, 1, 0, 0, 0, 374, 375, 5, 83, 0, 0, 375, 376, 5, 84, + 0, 0, 376, 377, 5, 69, 0, 0, 377, 378, 5, 80, 0, 0, 378, 98, 1, 0, 0, 0, + 379, 380, 5, 65, 0, 0, 380, 381, 5, 83, 0, 0, 381, 387, 5, 67, 0, 0, 382, + 383, 5, 68, 0, 0, 383, 384, 5, 69, 0, 0, 384, 385, 5, 83, 0, 0, 385, 387, + 5, 67, 0, 0, 386, 379, 1, 0, 0, 0, 386, 382, 1, 0, 0, 0, 387, 100, 1, 0, + 0, 0, 388, 389, 5, 78, 0, 0, 389, 390, 5, 79, 0, 0, 390, 391, 5, 78, 0, + 0, 391, 392, 5, 69, 0, 0, 392, 102, 1, 0, 0, 0, 393, 394, 5, 78, 0, 0, + 394, 395, 5, 85, 0, 0, 395, 396, 5, 76, 0, 0, 396, 397, 5, 76, 0, 0, 397, + 104, 1, 0, 0, 0, 398, 399, 5, 84, 0, 0, 399, 400, 5, 82, 0, 0, 400, 401, + 5, 85, 0, 0, 401, 417, 5, 69, 0, 0, 402, 403, 5, 116, 0, 0, 403, 404, 5, + 114, 0, 0, 404, 405, 5, 117, 0, 0, 405, 417, 5, 101, 0, 0, 406, 407, 5, + 70, 0, 0, 407, 408, 5, 65, 0, 0, 408, 409, 5, 76, 0, 0, 409, 410, 5, 83, + 0, 0, 410, 417, 5, 69, 0, 0, 411, 412, 5, 102, 0, 0, 412, 413, 5, 97, 0, + 0, 413, 414, 5, 108, 0, 0, 414, 415, 5, 115, 0, 0, 415, 417, 5, 101, 0, + 0, 416, 398, 1, 0, 0, 0, 416, 402, 1, 0, 0, 0, 416, 406, 1, 0, 0, 0, 416, + 411, 1, 0, 0, 0, 417, 106, 1, 0, 0, 0, 418, 419, 5, 85, 0, 0, 419, 420, + 5, 83, 0, 0, 420, 421, 5, 69, 0, 0, 421, 108, 1, 0, 0, 0, 422, 423, 5, + 73, 0, 0, 423, 424, 5, 78, 0, 0, 424, 425, 5, 84, 0, 0, 425, 426, 5, 79, + 0, 0, 426, 110, 1, 0, 0, 0, 427, 428, 5, 75, 0, 0, 428, 429, 5, 69, 0, + 0, 429, 430, 5, 69, 0, 0, 430, 431, 5, 80, 0, 0, 431, 112, 1, 0, 0, 0, + 432, 433, 5, 87, 0, 0, 433, 434, 5, 73, 0, 0, 434, 435, 5, 84, 0, 0, 435, + 436, 5, 72, 0, 0, 436, 114, 1, 0, 0, 0, 437, 438, 5, 65, 0, 0, 438, 439, + 5, 76, 0, 0, 439, 440, 5, 76, 0, 0, 440, 116, 1, 0, 0, 0, 441, 442, 5, + 65, 0, 0, 442, 443, 5, 78, 0, 0, 443, 444, 5, 89, 0, 0, 444, 118, 1, 0, + 0, 0, 445, 446, 5, 65, 0, 0, 446, 447, 5, 71, 0, 0, 447, 448, 5, 71, 0, + 0, 448, 449, 5, 82, 0, 0, 449, 450, 5, 69, 0, 0, 450, 451, 5, 71, 0, 0, + 451, 452, 5, 65, 0, 0, 452, 453, 5, 84, 0, 0, 453, 454, 5, 69, 0, 0, 454, + 120, 1, 0, 0, 0, 455, 456, 5, 69, 0, 0, 456, 457, 5, 86, 0, 0, 457, 458, + 5, 69, 0, 0, 458, 459, 5, 78, 0, 0, 459, 460, 5, 84, 0, 0, 460, 122, 1, + 0, 0, 0, 461, 462, 5, 76, 0, 0, 462, 463, 5, 73, 0, 0, 463, 464, 5, 75, + 0, 0, 464, 465, 5, 69, 0, 0, 465, 124, 1, 0, 0, 0, 466, 467, 5, 78, 0, + 0, 467, 468, 5, 79, 0, 0, 468, 471, 5, 84, 0, 0, 469, 471, 5, 33, 0, 0, + 470, 466, 1, 0, 0, 0, 470, 469, 1, 0, 0, 0, 471, 126, 1, 0, 0, 0, 472, + 473, 5, 73, 0, 0, 473, 474, 5, 78, 0, 0, 474, 128, 1, 0, 0, 0, 475, 476, + 5, 64, 0, 0, 476, 130, 1, 0, 0, 0, 477, 479, 3, 151, 75, 0, 478, 477, 1, + 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 478, 1, 0, 0, 0, 480, 481, 1, 0, 0, + 0, 481, 491, 1, 0, 0, 0, 482, 486, 3, 153, 76, 0, 483, 485, 3, 131, 65, + 0, 484, 483, 1, 0, 0, 0, 485, 488, 1, 0, 0, 0, 486, 484, 1, 0, 0, 0, 486, + 487, 1, 0, 0, 0, 487, 490, 1, 0, 0, 0, 488, 486, 1, 0, 0, 0, 489, 482, + 1, 0, 0, 0, 490, 493, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 492, 1, 0, + 0, 0, 492, 503, 1, 0, 0, 0, 493, 491, 1, 0, 0, 0, 494, 498, 3, 157, 78, + 0, 495, 497, 3, 131, 65, 0, 496, 495, 1, 0, 0, 0, 497, 500, 1, 0, 0, 0, + 498, 496, 1, 0, 0, 0, 498, 499, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, + 498, 1, 0, 0, 0, 501, 494, 1, 0, 0, 0, 502, 505, 1, 0, 0, 0, 503, 501, + 1, 0, 0, 0, 503, 504, 1, 0, 0, 0, 504, 132, 1, 0, 0, 0, 505, 503, 1, 0, + 0, 0, 506, 507, 3, 155, 77, 0, 507, 134, 1, 0, 0, 0, 508, 513, 3, 161, + 80, 0, 509, 513, 3, 159, 79, 0, 510, 513, 3, 163, 81, 0, 511, 513, 3, 165, + 82, 0, 512, 508, 1, 0, 0, 0, 512, 509, 1, 0, 0, 0, 512, 510, 1, 0, 0, 0, + 512, 511, 1, 0, 0, 0, 513, 136, 1, 0, 0, 0, 514, 516, 7, 2, 0, 0, 515, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 517, 518, - 1, 0, 0, 0, 518, 520, 1, 0, 0, 0, 519, 521, 3, 147, 73, 0, 520, 519, 1, - 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 527, 1, 0, 0, 0, 522, 524, 3, 145, - 72, 0, 523, 525, 3, 147, 73, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, - 0, 525, 527, 1, 0, 0, 0, 526, 512, 1, 0, 0, 0, 526, 522, 1, 0, 0, 0, 527, - 138, 1, 0, 0, 0, 528, 529, 3, 129, 64, 0, 529, 530, 3, 165, 82, 0, 530, - 140, 1, 0, 0, 0, 531, 532, 9, 0, 0, 0, 532, 142, 1, 0, 0, 0, 533, 534, - 7, 3, 0, 0, 534, 144, 1, 0, 0, 0, 535, 544, 5, 48, 0, 0, 536, 540, 7, 4, - 0, 0, 537, 539, 7, 2, 0, 0, 538, 537, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, - 540, 538, 1, 0, 0, 0, 540, 541, 1, 0, 0, 0, 541, 544, 1, 0, 0, 0, 542, - 540, 1, 0, 0, 0, 543, 535, 1, 0, 0, 0, 543, 536, 1, 0, 0, 0, 544, 146, - 1, 0, 0, 0, 545, 547, 7, 5, 0, 0, 546, 548, 7, 6, 0, 0, 547, 546, 1, 0, - 0, 0, 547, 548, 1, 0, 0, 0, 548, 550, 1, 0, 0, 0, 549, 551, 7, 2, 0, 0, - 550, 549, 1, 0, 0, 0, 551, 552, 1, 0, 0, 0, 552, 550, 1, 0, 0, 0, 552, - 553, 1, 0, 0, 0, 553, 148, 1, 0, 0, 0, 554, 555, 7, 7, 0, 0, 555, 150, - 1, 0, 0, 0, 556, 557, 3, 153, 76, 0, 557, 152, 1, 0, 0, 0, 558, 559, 5, - 95, 0, 0, 559, 154, 1, 0, 0, 0, 560, 561, 2, 48, 57, 0, 561, 156, 1, 0, - 0, 0, 562, 570, 5, 34, 0, 0, 563, 564, 5, 92, 0, 0, 564, 569, 9, 0, 0, - 0, 565, 566, 5, 34, 0, 0, 566, 569, 5, 34, 0, 0, 567, 569, 8, 8, 0, 0, - 568, 563, 1, 0, 0, 0, 568, 565, 1, 0, 0, 0, 568, 567, 1, 0, 0, 0, 569, - 572, 1, 0, 0, 0, 570, 568, 1, 0, 0, 0, 570, 571, 1, 0, 0, 0, 571, 573, - 1, 0, 0, 0, 572, 570, 1, 0, 0, 0, 573, 574, 5, 34, 0, 0, 574, 158, 1, 0, - 0, 0, 575, 583, 5, 39, 0, 0, 576, 577, 5, 92, 0, 0, 577, 582, 9, 0, 0, - 0, 578, 579, 5, 39, 0, 0, 579, 582, 5, 39, 0, 0, 580, 582, 8, 9, 0, 0, - 581, 576, 1, 0, 0, 0, 581, 578, 1, 0, 0, 0, 581, 580, 1, 0, 0, 0, 582, - 585, 1, 0, 0, 0, 583, 581, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, - 1, 0, 0, 0, 585, 583, 1, 0, 0, 0, 586, 587, 5, 39, 0, 0, 587, 160, 1, 0, - 0, 0, 588, 594, 5, 96, 0, 0, 589, 590, 5, 92, 0, 0, 590, 593, 5, 96, 0, - 0, 591, 593, 8, 10, 0, 0, 592, 589, 1, 0, 0, 0, 592, 591, 1, 0, 0, 0, 593, - 596, 1, 0, 0, 0, 594, 592, 1, 0, 0, 0, 594, 595, 1, 0, 0, 0, 595, 597, - 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, 597, 598, 5, 96, 0, 0, 598, 162, 1, 0, - 0, 0, 599, 605, 5, 180, 0, 0, 600, 601, 5, 92, 0, 0, 601, 604, 5, 180, - 0, 0, 602, 604, 8, 11, 0, 0, 603, 600, 1, 0, 0, 0, 603, 602, 1, 0, 0, 0, - 604, 607, 1, 0, 0, 0, 605, 603, 1, 0, 0, 0, 605, 606, 1, 0, 0, 0, 606, - 608, 1, 0, 0, 0, 607, 605, 1, 0, 0, 0, 608, 609, 5, 180, 0, 0, 609, 164, - 1, 0, 0, 0, 610, 611, 5, 58, 0, 0, 611, 612, 5, 58, 0, 0, 612, 166, 1, - 0, 0, 0, 32, 0, 173, 187, 195, 260, 266, 370, 400, 454, 473, 479, 484, - 491, 496, 505, 510, 517, 520, 524, 526, 540, 543, 547, 552, 568, 570, 581, - 583, 592, 594, 603, 605, 1, 0, 1, 0, + 1, 0, 0, 0, 518, 138, 1, 0, 0, 0, 519, 520, 3, 147, 73, 0, 520, 522, 3, + 13, 6, 0, 521, 523, 7, 2, 0, 0, 522, 521, 1, 0, 0, 0, 523, 524, 1, 0, 0, + 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 527, 1, 0, 0, 0, 526, + 528, 3, 149, 74, 0, 527, 526, 1, 0, 0, 0, 527, 528, 1, 0, 0, 0, 528, 534, + 1, 0, 0, 0, 529, 531, 3, 147, 73, 0, 530, 532, 3, 149, 74, 0, 531, 530, + 1, 0, 0, 0, 531, 532, 1, 0, 0, 0, 532, 534, 1, 0, 0, 0, 533, 519, 1, 0, + 0, 0, 533, 529, 1, 0, 0, 0, 534, 140, 1, 0, 0, 0, 535, 536, 3, 131, 65, + 0, 536, 537, 3, 167, 83, 0, 537, 142, 1, 0, 0, 0, 538, 539, 9, 0, 0, 0, + 539, 144, 1, 0, 0, 0, 540, 541, 7, 3, 0, 0, 541, 146, 1, 0, 0, 0, 542, + 551, 5, 48, 0, 0, 543, 547, 7, 4, 0, 0, 544, 546, 7, 2, 0, 0, 545, 544, + 1, 0, 0, 0, 546, 549, 1, 0, 0, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, + 0, 0, 548, 551, 1, 0, 0, 0, 549, 547, 1, 0, 0, 0, 550, 542, 1, 0, 0, 0, + 550, 543, 1, 0, 0, 0, 551, 148, 1, 0, 0, 0, 552, 554, 7, 5, 0, 0, 553, + 555, 7, 6, 0, 0, 554, 553, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, + 1, 0, 0, 0, 556, 558, 7, 2, 0, 0, 557, 556, 1, 0, 0, 0, 558, 559, 1, 0, + 0, 0, 559, 557, 1, 0, 0, 0, 559, 560, 1, 0, 0, 0, 560, 150, 1, 0, 0, 0, + 561, 562, 7, 7, 0, 0, 562, 152, 1, 0, 0, 0, 563, 564, 3, 155, 77, 0, 564, + 154, 1, 0, 0, 0, 565, 566, 5, 95, 0, 0, 566, 156, 1, 0, 0, 0, 567, 568, + 2, 48, 57, 0, 568, 158, 1, 0, 0, 0, 569, 577, 5, 34, 0, 0, 570, 571, 5, + 92, 0, 0, 571, 576, 9, 0, 0, 0, 572, 573, 5, 34, 0, 0, 573, 576, 5, 34, + 0, 0, 574, 576, 8, 8, 0, 0, 575, 570, 1, 0, 0, 0, 575, 572, 1, 0, 0, 0, + 575, 574, 1, 0, 0, 0, 576, 579, 1, 0, 0, 0, 577, 575, 1, 0, 0, 0, 577, + 578, 1, 0, 0, 0, 578, 580, 1, 0, 0, 0, 579, 577, 1, 0, 0, 0, 580, 581, + 5, 34, 0, 0, 581, 160, 1, 0, 0, 0, 582, 590, 5, 39, 0, 0, 583, 584, 5, + 92, 0, 0, 584, 589, 9, 0, 0, 0, 585, 586, 5, 39, 0, 0, 586, 589, 5, 39, + 0, 0, 587, 589, 8, 9, 0, 0, 588, 583, 1, 0, 0, 0, 588, 585, 1, 0, 0, 0, + 588, 587, 1, 0, 0, 0, 589, 592, 1, 0, 0, 0, 590, 588, 1, 0, 0, 0, 590, + 591, 1, 0, 0, 0, 591, 593, 1, 0, 0, 0, 592, 590, 1, 0, 0, 0, 593, 594, + 5, 39, 0, 0, 594, 162, 1, 0, 0, 0, 595, 601, 5, 96, 0, 0, 596, 597, 5, + 92, 0, 0, 597, 600, 5, 96, 0, 0, 598, 600, 8, 10, 0, 0, 599, 596, 1, 0, + 0, 0, 599, 598, 1, 0, 0, 0, 600, 603, 1, 0, 0, 0, 601, 599, 1, 0, 0, 0, + 601, 602, 1, 0, 0, 0, 602, 604, 1, 0, 0, 0, 603, 601, 1, 0, 0, 0, 604, + 605, 5, 96, 0, 0, 605, 164, 1, 0, 0, 0, 606, 612, 5, 180, 0, 0, 607, 608, + 5, 92, 0, 0, 608, 611, 5, 180, 0, 0, 609, 611, 8, 11, 0, 0, 610, 607, 1, + 0, 0, 0, 610, 609, 1, 0, 0, 0, 611, 614, 1, 0, 0, 0, 612, 610, 1, 0, 0, + 0, 612, 613, 1, 0, 0, 0, 613, 615, 1, 0, 0, 0, 614, 612, 1, 0, 0, 0, 615, + 616, 5, 180, 0, 0, 616, 166, 1, 0, 0, 0, 617, 618, 5, 58, 0, 0, 618, 619, + 5, 58, 0, 0, 619, 168, 1, 0, 0, 0, 32, 0, 175, 189, 197, 262, 268, 386, + 416, 470, 480, 486, 491, 498, 503, 512, 517, 524, 527, 531, 533, 547, 550, + 554, 559, 575, 577, 588, 590, 599, 601, 610, 612, 1, 0, 1, 0, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -440,29 +442,30 @@ const ( FqlLexerLimit = 44 FqlLexerLet = 45 FqlLexerCollect = 46 - FqlLexerSortDirection = 47 - FqlLexerNone = 48 - FqlLexerNull = 49 - FqlLexerBooleanLiteral = 50 - FqlLexerUse = 51 - FqlLexerInto = 52 - FqlLexerKeep = 53 - FqlLexerWith = 54 - FqlLexerAll = 55 - FqlLexerAny = 56 - FqlLexerAggregate = 57 - FqlLexerEvent = 58 - FqlLexerLike = 59 - FqlLexerNot = 60 - FqlLexerIn = 61 - FqlLexerDo = 62 - FqlLexerWhile = 63 - FqlLexerParam = 64 - FqlLexerIdentifier = 65 - FqlLexerIgnoreIdentifier = 66 - FqlLexerStringLiteral = 67 - FqlLexerIntegerLiteral = 68 - FqlLexerFloatLiteral = 69 - FqlLexerNamespaceSegment = 70 - FqlLexerUnknownIdentifier = 71 + FqlLexerDo = 47 + FqlLexerWhile = 48 + FqlLexerStep = 49 + FqlLexerSortDirection = 50 + FqlLexerNone = 51 + FqlLexerNull = 52 + FqlLexerBooleanLiteral = 53 + FqlLexerUse = 54 + FqlLexerInto = 55 + FqlLexerKeep = 56 + FqlLexerWith = 57 + FqlLexerAll = 58 + FqlLexerAny = 59 + FqlLexerAggregate = 60 + FqlLexerEvent = 61 + FqlLexerLike = 62 + FqlLexerNot = 63 + FqlLexerIn = 64 + FqlLexerParam = 65 + FqlLexerIdentifier = 66 + FqlLexerIgnoreIdentifier = 67 + FqlLexerStringLiteral = 68 + FqlLexerIntegerLiteral = 69 + FqlLexerFloatLiteral = 70 + FqlLexerNamespaceSegment = 71 + FqlLexerUnknownIdentifier = 72 ) diff --git a/pkg/parser/fql/fql_parser.go b/pkg/parser/fql/fql_parser.go index a89bb9bc..9a53b1ab 100644 --- a/pkg/parser/fql/fql_parser.go +++ b/pkg/parser/fql/fql_parser.go @@ -37,9 +37,9 @@ func fqlparserParserInit() { "'/'", "'%'", "'+'", "'-'", "'--'", "'++'", "", "", "", "'='", "'?'", "'!~'", "'=~'", "'FOR'", "'RETURN'", "'WAITFOR'", "'OPTIONS'", "'TIMEOUT'", "'DISTINCT'", "'FILTER'", "'CURRENT'", "'SORT'", "'LIMIT'", "'LET'", - "'COLLECT'", "", "'NONE'", "'NULL'", "", "'USE'", "'INTO'", "'KEEP'", - "'WITH'", "'ALL'", "'ANY'", "'AGGREGATE'", "'EVENT'", "'LIKE'", "", - "'IN'", "'DO'", "'WHILE'", "'@'", + "'COLLECT'", "'DO'", "'WHILE'", "'STEP'", "", "'NONE'", "'NULL'", "", + "'USE'", "'INTO'", "'KEEP'", "'WITH'", "'ALL'", "'ANY'", "'AGGREGATE'", + "'EVENT'", "'LIKE'", "", "'IN'", "'@'", } staticData.SymbolicNames = []string{ "", "MultiLineComment", "SingleLineComment", "WhiteSpaces", "LineTerminator", @@ -48,35 +48,35 @@ func fqlparserParserInit() { "Gte", "Lte", "Neq", "Multi", "Div", "Mod", "Plus", "Minus", "MinusMinus", "PlusPlus", "And", "Or", "Range", "Assign", "QuestionMark", "RegexNotMatch", "RegexMatch", "For", "Return", "Waitfor", "Options", "Timeout", "Distinct", - "Filter", "Current", "Sort", "Limit", "Let", "Collect", "SortDirection", - "None", "Null", "BooleanLiteral", "Use", "Into", "Keep", "With", "All", - "Any", "Aggregate", "Event", "Like", "Not", "In", "Do", "While", "Param", - "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", + "Filter", "Current", "Sort", "Limit", "Let", "Collect", "Do", "While", + "Step", "SortDirection", "None", "Null", "BooleanLiteral", "Use", "Into", + "Keep", "With", "All", "Any", "Aggregate", "Event", "Like", "Not", "In", + "Param", "Identifier", "IgnoreIdentifier", "StringLiteral", "IntegerLiteral", "FloatLiteral", "NamespaceSegment", "UnknownIdentifier", } staticData.RuleNames = []string{ "program", "head", "useExpression", "use", "body", "bodyStatement", "bodyExpression", "variableDeclaration", "returnExpression", "forExpression", "forExpressionSource", "forExpressionClause", "forExpressionStatement", - "forExpressionBody", "forExpressionReturn", "filterClause", "limitClause", - "limitClauseValue", "sortClause", "sortClauseExpression", "collectClause", - "collectSelector", "collectGrouping", "collectAggregateSelector", "collectAggregator", - "collectGroupProjection", "collectGroupProjectionFilter", "collectCounter", - "waitForExpression", "waitForEventName", "waitForEventSource", "optionsClause", - "timeoutClause", "param", "variable", "literal", "arrayLiteral", "objectLiteral", - "booleanLiteral", "stringLiteral", "floatLiteral", "integerLiteral", - "noneLiteral", "propertyAssignment", "computedPropertyName", "propertyName", - "namespaceIdentifier", "namespace", "memberExpression", "memberExpressionSource", - "functionCallExpression", "functionCall", "functionName", "argumentList", - "memberExpressionPath", "safeReservedWord", "unsafeReservedWord", "rangeOperator", - "rangeOperand", "expression", "predicate", "expressionAtom", "arrayOperator", - "equalityOperator", "inOperator", "likeOperator", "unaryOperator", "regexpOperator", - "logicalAndOperator", "logicalOrOperator", "multiplicativeOperator", - "additiveOperator", "errorOperator", + "forExpressionBody", "forExpressionReturn", "forExpressionStepAssignment", + "filterClause", "limitClause", "limitClauseValue", "sortClause", "sortClauseExpression", + "collectClause", "collectSelector", "collectGrouping", "collectAggregateSelector", + "collectAggregator", "collectGroupProjection", "collectGroupProjectionFilter", + "collectCounter", "waitForExpression", "waitForEventName", "waitForEventSource", + "optionsClause", "timeoutClause", "param", "variable", "literal", "arrayLiteral", + "objectLiteral", "booleanLiteral", "stringLiteral", "floatLiteral", + "integerLiteral", "noneLiteral", "propertyAssignment", "computedPropertyName", + "propertyName", "namespaceIdentifier", "namespace", "memberExpression", + "memberExpressionSource", "functionCallExpression", "functionCall", + "functionName", "argumentList", "memberExpressionPath", "safeReservedWord", + "unsafeReservedWord", "rangeOperator", "rangeOperand", "expression", + "predicate", "expressionAtom", "arrayOperator", "equalityOperator", + "inOperator", "likeOperator", "unaryOperator", "regexpOperator", "logicalAndOperator", + "logicalOrOperator", "multiplicativeOperator", "additiveOperator", "errorOperator", } staticData.PredictionContextCache = antlr.NewPredictionContextCache() staticData.serializedATN = []int32{ - 4, 1, 71, 666, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, + 4, 1, 72, 689, 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, @@ -89,295 +89,305 @@ 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, 2, 71, 7, 71, 2, 72, 7, 72, 1, 0, 5, - 0, 148, 8, 0, 10, 0, 12, 0, 151, 9, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, - 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 163, 8, 4, 10, 4, 12, 4, 166, 9, 4, 1, - 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 173, 8, 5, 1, 6, 1, 6, 3, 6, 177, 8, 6, - 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 188, 8, 7, - 1, 8, 1, 8, 3, 8, 192, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, - 200, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 205, 8, 9, 10, 9, 12, 9, 208, 9, 9, - 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 215, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, - 220, 8, 9, 10, 9, 12, 9, 223, 9, 9, 1, 9, 1, 9, 3, 9, 227, 8, 9, 1, 10, - 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 236, 8, 10, 1, 11, 1, - 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 3, 12, 246, 8, 12, 1, - 13, 1, 13, 3, 13, 250, 8, 13, 1, 14, 1, 14, 3, 14, 254, 8, 14, 1, 15, 1, - 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 263, 8, 16, 1, 17, 1, 17, - 1, 17, 1, 17, 1, 17, 3, 17, 270, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 5, - 18, 276, 8, 18, 10, 18, 12, 18, 279, 9, 18, 1, 19, 1, 19, 3, 19, 283, 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, 1, 20, 1, 20, 1, - 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 3, 20, 312, 8, 20, 1, 21, - 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 5, 22, 321, 8, 22, 10, 22, 12, - 22, 324, 9, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, - 5, 24, 334, 8, 24, 10, 24, 12, 24, 337, 9, 24, 1, 25, 1, 25, 1, 25, 1, - 25, 1, 25, 3, 25, 344, 8, 25, 3, 25, 346, 8, 25, 1, 26, 1, 26, 1, 26, 1, - 26, 5, 26, 352, 8, 26, 10, 26, 12, 26, 355, 9, 26, 1, 27, 1, 27, 1, 27, - 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 3, 28, 368, 8, - 28, 1, 28, 3, 28, 371, 8, 28, 1, 28, 3, 28, 374, 8, 28, 1, 29, 1, 29, 1, - 29, 1, 29, 1, 29, 3, 29, 381, 8, 29, 1, 30, 1, 30, 1, 30, 3, 30, 386, 8, - 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, - 397, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 403, 8, 33, 1, 34, 1, 34, - 3, 34, 407, 8, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, - 35, 416, 8, 35, 1, 36, 1, 36, 3, 36, 420, 8, 36, 1, 36, 1, 36, 1, 37, 1, - 37, 1, 37, 1, 37, 5, 37, 428, 8, 37, 10, 37, 12, 37, 431, 9, 37, 1, 37, - 3, 37, 434, 8, 37, 3, 37, 436, 8, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, - 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, - 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 459, 8, 43, 1, 44, 1, 44, - 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 470, 8, 45, 1, - 46, 1, 46, 1, 46, 1, 47, 5, 47, 476, 8, 47, 10, 47, 12, 47, 479, 9, 47, - 1, 48, 1, 48, 4, 48, 483, 8, 48, 11, 48, 12, 48, 484, 1, 49, 1, 49, 1, - 49, 1, 49, 1, 49, 3, 49, 492, 8, 49, 1, 50, 1, 50, 3, 50, 496, 8, 50, 1, - 51, 1, 51, 1, 51, 1, 51, 3, 51, 502, 8, 51, 1, 51, 1, 51, 1, 52, 1, 52, - 1, 52, 3, 52, 509, 8, 52, 1, 53, 1, 53, 1, 53, 5, 53, 514, 8, 53, 10, 53, - 12, 53, 517, 9, 53, 1, 53, 3, 53, 520, 8, 53, 1, 54, 3, 54, 523, 8, 54, - 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 530, 8, 54, 1, 54, 3, 54, 533, - 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, - 58, 1, 58, 3, 58, 546, 8, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 3, 59, - 553, 8, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, - 59, 1, 59, 1, 59, 3, 59, 566, 8, 59, 1, 59, 1, 59, 5, 59, 570, 8, 59, 10, - 59, 12, 59, 573, 9, 59, 1, 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, 1, 60, 1, 60, 1, 60, 1, 60, 1, - 60, 1, 60, 5, 60, 594, 8, 60, 10, 60, 12, 60, 597, 9, 60, 1, 61, 1, 61, - 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 3, 61, 610, - 8, 61, 1, 61, 1, 61, 3, 61, 614, 8, 61, 3, 61, 616, 8, 61, 1, 61, 1, 61, - 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 5, - 61, 630, 8, 61, 10, 61, 12, 61, 633, 9, 61, 1, 62, 1, 62, 1, 62, 3, 62, - 638, 8, 62, 1, 63, 1, 63, 1, 64, 3, 64, 643, 8, 64, 1, 64, 1, 64, 1, 65, - 3, 65, 648, 8, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, - 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 0, 3, - 118, 120, 122, 73, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, - 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, - 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, - 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, - 132, 134, 136, 138, 140, 142, 144, 0, 10, 1, 0, 65, 66, 1, 0, 48, 49, 4, - 0, 28, 29, 38, 44, 46, 47, 52, 58, 4, 0, 35, 37, 45, 45, 48, 51, 59, 63, - 2, 0, 48, 48, 55, 56, 1, 0, 15, 20, 2, 0, 24, 25, 60, 60, 1, 0, 33, 34, - 1, 0, 21, 23, 1, 0, 24, 25, 707, 0, 149, 1, 0, 0, 0, 2, 154, 1, 0, 0, 0, - 4, 156, 1, 0, 0, 0, 6, 158, 1, 0, 0, 0, 8, 164, 1, 0, 0, 0, 10, 172, 1, - 0, 0, 0, 12, 176, 1, 0, 0, 0, 14, 187, 1, 0, 0, 0, 16, 189, 1, 0, 0, 0, - 18, 226, 1, 0, 0, 0, 20, 235, 1, 0, 0, 0, 22, 241, 1, 0, 0, 0, 24, 245, - 1, 0, 0, 0, 26, 249, 1, 0, 0, 0, 28, 253, 1, 0, 0, 0, 30, 255, 1, 0, 0, - 0, 32, 258, 1, 0, 0, 0, 34, 269, 1, 0, 0, 0, 36, 271, 1, 0, 0, 0, 38, 280, - 1, 0, 0, 0, 40, 311, 1, 0, 0, 0, 42, 313, 1, 0, 0, 0, 44, 317, 1, 0, 0, - 0, 46, 325, 1, 0, 0, 0, 48, 329, 1, 0, 0, 0, 50, 345, 1, 0, 0, 0, 52, 347, - 1, 0, 0, 0, 54, 356, 1, 0, 0, 0, 56, 361, 1, 0, 0, 0, 58, 380, 1, 0, 0, - 0, 60, 385, 1, 0, 0, 0, 62, 387, 1, 0, 0, 0, 64, 390, 1, 0, 0, 0, 66, 402, - 1, 0, 0, 0, 68, 406, 1, 0, 0, 0, 70, 415, 1, 0, 0, 0, 72, 417, 1, 0, 0, - 0, 74, 423, 1, 0, 0, 0, 76, 439, 1, 0, 0, 0, 78, 441, 1, 0, 0, 0, 80, 443, - 1, 0, 0, 0, 82, 445, 1, 0, 0, 0, 84, 447, 1, 0, 0, 0, 86, 458, 1, 0, 0, - 0, 88, 460, 1, 0, 0, 0, 90, 469, 1, 0, 0, 0, 92, 471, 1, 0, 0, 0, 94, 477, - 1, 0, 0, 0, 96, 480, 1, 0, 0, 0, 98, 491, 1, 0, 0, 0, 100, 493, 1, 0, 0, - 0, 102, 497, 1, 0, 0, 0, 104, 508, 1, 0, 0, 0, 106, 510, 1, 0, 0, 0, 108, - 532, 1, 0, 0, 0, 110, 534, 1, 0, 0, 0, 112, 536, 1, 0, 0, 0, 114, 538, - 1, 0, 0, 0, 116, 545, 1, 0, 0, 0, 118, 552, 1, 0, 0, 0, 120, 574, 1, 0, - 0, 0, 122, 615, 1, 0, 0, 0, 124, 634, 1, 0, 0, 0, 126, 639, 1, 0, 0, 0, - 128, 642, 1, 0, 0, 0, 130, 647, 1, 0, 0, 0, 132, 651, 1, 0, 0, 0, 134, - 653, 1, 0, 0, 0, 136, 655, 1, 0, 0, 0, 138, 657, 1, 0, 0, 0, 140, 659, - 1, 0, 0, 0, 142, 661, 1, 0, 0, 0, 144, 663, 1, 0, 0, 0, 146, 148, 3, 2, - 1, 0, 147, 146, 1, 0, 0, 0, 148, 151, 1, 0, 0, 0, 149, 147, 1, 0, 0, 0, - 149, 150, 1, 0, 0, 0, 150, 152, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 152, - 153, 3, 8, 4, 0, 153, 1, 1, 0, 0, 0, 154, 155, 3, 4, 2, 0, 155, 3, 1, 0, - 0, 0, 156, 157, 3, 6, 3, 0, 157, 5, 1, 0, 0, 0, 158, 159, 5, 51, 0, 0, - 159, 160, 3, 92, 46, 0, 160, 7, 1, 0, 0, 0, 161, 163, 3, 10, 5, 0, 162, - 161, 1, 0, 0, 0, 163, 166, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 164, 165, - 1, 0, 0, 0, 165, 167, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 168, 3, 12, - 6, 0, 168, 9, 1, 0, 0, 0, 169, 173, 3, 14, 7, 0, 170, 173, 3, 100, 50, - 0, 171, 173, 3, 56, 28, 0, 172, 169, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, - 172, 171, 1, 0, 0, 0, 173, 11, 1, 0, 0, 0, 174, 177, 3, 16, 8, 0, 175, - 177, 3, 18, 9, 0, 176, 174, 1, 0, 0, 0, 176, 175, 1, 0, 0, 0, 177, 13, - 1, 0, 0, 0, 178, 179, 5, 45, 0, 0, 179, 180, 7, 0, 0, 0, 180, 181, 5, 31, - 0, 0, 181, 188, 3, 118, 59, 0, 182, 183, 5, 45, 0, 0, 183, 184, 3, 110, - 55, 0, 184, 185, 5, 31, 0, 0, 185, 186, 3, 118, 59, 0, 186, 188, 1, 0, - 0, 0, 187, 178, 1, 0, 0, 0, 187, 182, 1, 0, 0, 0, 188, 15, 1, 0, 0, 0, - 189, 191, 5, 36, 0, 0, 190, 192, 5, 40, 0, 0, 191, 190, 1, 0, 0, 0, 191, - 192, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 194, 3, 118, 59, 0, 194, 17, - 1, 0, 0, 0, 195, 196, 5, 35, 0, 0, 196, 199, 7, 0, 0, 0, 197, 198, 5, 8, - 0, 0, 198, 200, 5, 65, 0, 0, 199, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, - 200, 201, 1, 0, 0, 0, 201, 202, 5, 61, 0, 0, 202, 206, 3, 20, 10, 0, 203, - 205, 3, 26, 13, 0, 204, 203, 1, 0, 0, 0, 205, 208, 1, 0, 0, 0, 206, 204, - 1, 0, 0, 0, 206, 207, 1, 0, 0, 0, 207, 209, 1, 0, 0, 0, 208, 206, 1, 0, - 0, 0, 209, 210, 3, 28, 14, 0, 210, 227, 1, 0, 0, 0, 211, 212, 5, 35, 0, - 0, 212, 214, 7, 0, 0, 0, 213, 215, 5, 62, 0, 0, 214, 213, 1, 0, 0, 0, 214, - 215, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 217, 5, 63, 0, 0, 217, 221, - 3, 118, 59, 0, 218, 220, 3, 26, 13, 0, 219, 218, 1, 0, 0, 0, 220, 223, - 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 224, 1, 0, - 0, 0, 223, 221, 1, 0, 0, 0, 224, 225, 3, 28, 14, 0, 225, 227, 1, 0, 0, - 0, 226, 195, 1, 0, 0, 0, 226, 211, 1, 0, 0, 0, 227, 19, 1, 0, 0, 0, 228, - 236, 3, 100, 50, 0, 229, 236, 3, 72, 36, 0, 230, 236, 3, 74, 37, 0, 231, - 236, 3, 68, 34, 0, 232, 236, 3, 96, 48, 0, 233, 236, 3, 114, 57, 0, 234, - 236, 3, 66, 33, 0, 235, 228, 1, 0, 0, 0, 235, 229, 1, 0, 0, 0, 235, 230, - 1, 0, 0, 0, 235, 231, 1, 0, 0, 0, 235, 232, 1, 0, 0, 0, 235, 233, 1, 0, - 0, 0, 235, 234, 1, 0, 0, 0, 236, 21, 1, 0, 0, 0, 237, 242, 3, 32, 16, 0, - 238, 242, 3, 36, 18, 0, 239, 242, 3, 30, 15, 0, 240, 242, 3, 40, 20, 0, - 241, 237, 1, 0, 0, 0, 241, 238, 1, 0, 0, 0, 241, 239, 1, 0, 0, 0, 241, - 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 246, 3, 14, 7, 0, 244, 246, - 3, 100, 50, 0, 245, 243, 1, 0, 0, 0, 245, 244, 1, 0, 0, 0, 246, 25, 1, - 0, 0, 0, 247, 250, 3, 24, 12, 0, 248, 250, 3, 22, 11, 0, 249, 247, 1, 0, - 0, 0, 249, 248, 1, 0, 0, 0, 250, 27, 1, 0, 0, 0, 251, 254, 3, 16, 8, 0, - 252, 254, 3, 18, 9, 0, 253, 251, 1, 0, 0, 0, 253, 252, 1, 0, 0, 0, 254, - 29, 1, 0, 0, 0, 255, 256, 5, 41, 0, 0, 256, 257, 3, 118, 59, 0, 257, 31, - 1, 0, 0, 0, 258, 259, 5, 44, 0, 0, 259, 262, 3, 34, 17, 0, 260, 261, 5, - 8, 0, 0, 261, 263, 3, 34, 17, 0, 262, 260, 1, 0, 0, 0, 262, 263, 1, 0, - 0, 0, 263, 33, 1, 0, 0, 0, 264, 270, 3, 82, 41, 0, 265, 270, 3, 66, 33, - 0, 266, 270, 3, 68, 34, 0, 267, 270, 3, 100, 50, 0, 268, 270, 3, 96, 48, - 0, 269, 264, 1, 0, 0, 0, 269, 265, 1, 0, 0, 0, 269, 266, 1, 0, 0, 0, 269, - 267, 1, 0, 0, 0, 269, 268, 1, 0, 0, 0, 270, 35, 1, 0, 0, 0, 271, 272, 5, - 43, 0, 0, 272, 277, 3, 38, 19, 0, 273, 274, 5, 8, 0, 0, 274, 276, 3, 38, - 19, 0, 275, 273, 1, 0, 0, 0, 276, 279, 1, 0, 0, 0, 277, 275, 1, 0, 0, 0, - 277, 278, 1, 0, 0, 0, 278, 37, 1, 0, 0, 0, 279, 277, 1, 0, 0, 0, 280, 282, - 3, 118, 59, 0, 281, 283, 5, 47, 0, 0, 282, 281, 1, 0, 0, 0, 282, 283, 1, - 0, 0, 0, 283, 39, 1, 0, 0, 0, 284, 285, 5, 46, 0, 0, 285, 286, 3, 44, 22, - 0, 286, 287, 3, 48, 24, 0, 287, 288, 3, 50, 25, 0, 288, 312, 1, 0, 0, 0, - 289, 290, 5, 46, 0, 0, 290, 291, 3, 44, 22, 0, 291, 292, 3, 48, 24, 0, - 292, 312, 1, 0, 0, 0, 293, 294, 5, 46, 0, 0, 294, 295, 3, 44, 22, 0, 295, - 296, 3, 50, 25, 0, 296, 312, 1, 0, 0, 0, 297, 298, 5, 46, 0, 0, 298, 299, - 3, 44, 22, 0, 299, 300, 3, 54, 27, 0, 300, 312, 1, 0, 0, 0, 301, 302, 5, - 46, 0, 0, 302, 312, 3, 44, 22, 0, 303, 304, 5, 46, 0, 0, 304, 305, 3, 48, - 24, 0, 305, 306, 3, 50, 25, 0, 306, 312, 1, 0, 0, 0, 307, 308, 5, 46, 0, - 0, 308, 312, 3, 48, 24, 0, 309, 310, 5, 46, 0, 0, 310, 312, 3, 54, 27, - 0, 311, 284, 1, 0, 0, 0, 311, 289, 1, 0, 0, 0, 311, 293, 1, 0, 0, 0, 311, - 297, 1, 0, 0, 0, 311, 301, 1, 0, 0, 0, 311, 303, 1, 0, 0, 0, 311, 307, - 1, 0, 0, 0, 311, 309, 1, 0, 0, 0, 312, 41, 1, 0, 0, 0, 313, 314, 5, 65, - 0, 0, 314, 315, 5, 31, 0, 0, 315, 316, 3, 118, 59, 0, 316, 43, 1, 0, 0, - 0, 317, 322, 3, 42, 21, 0, 318, 319, 5, 8, 0, 0, 319, 321, 3, 42, 21, 0, - 320, 318, 1, 0, 0, 0, 321, 324, 1, 0, 0, 0, 322, 320, 1, 0, 0, 0, 322, - 323, 1, 0, 0, 0, 323, 45, 1, 0, 0, 0, 324, 322, 1, 0, 0, 0, 325, 326, 5, - 65, 0, 0, 326, 327, 5, 31, 0, 0, 327, 328, 3, 100, 50, 0, 328, 47, 1, 0, - 0, 0, 329, 330, 5, 57, 0, 0, 330, 335, 3, 46, 23, 0, 331, 332, 5, 8, 0, - 0, 332, 334, 3, 46, 23, 0, 333, 331, 1, 0, 0, 0, 334, 337, 1, 0, 0, 0, - 335, 333, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 49, 1, 0, 0, 0, 337, 335, - 1, 0, 0, 0, 338, 339, 5, 52, 0, 0, 339, 346, 3, 42, 21, 0, 340, 341, 5, - 52, 0, 0, 341, 343, 5, 65, 0, 0, 342, 344, 3, 52, 26, 0, 343, 342, 1, 0, - 0, 0, 343, 344, 1, 0, 0, 0, 344, 346, 1, 0, 0, 0, 345, 338, 1, 0, 0, 0, - 345, 340, 1, 0, 0, 0, 346, 51, 1, 0, 0, 0, 347, 348, 5, 53, 0, 0, 348, - 353, 5, 65, 0, 0, 349, 350, 5, 8, 0, 0, 350, 352, 5, 65, 0, 0, 351, 349, - 1, 0, 0, 0, 352, 355, 1, 0, 0, 0, 353, 351, 1, 0, 0, 0, 353, 354, 1, 0, - 0, 0, 354, 53, 1, 0, 0, 0, 355, 353, 1, 0, 0, 0, 356, 357, 5, 54, 0, 0, - 357, 358, 5, 65, 0, 0, 358, 359, 5, 52, 0, 0, 359, 360, 5, 65, 0, 0, 360, - 55, 1, 0, 0, 0, 361, 362, 5, 37, 0, 0, 362, 363, 5, 58, 0, 0, 363, 364, - 3, 58, 29, 0, 364, 365, 5, 61, 0, 0, 365, 367, 3, 60, 30, 0, 366, 368, - 3, 62, 31, 0, 367, 366, 1, 0, 0, 0, 367, 368, 1, 0, 0, 0, 368, 370, 1, - 0, 0, 0, 369, 371, 3, 30, 15, 0, 370, 369, 1, 0, 0, 0, 370, 371, 1, 0, - 0, 0, 371, 373, 1, 0, 0, 0, 372, 374, 3, 64, 32, 0, 373, 372, 1, 0, 0, - 0, 373, 374, 1, 0, 0, 0, 374, 57, 1, 0, 0, 0, 375, 381, 3, 78, 39, 0, 376, - 381, 3, 68, 34, 0, 377, 381, 3, 66, 33, 0, 378, 381, 3, 100, 50, 0, 379, - 381, 3, 96, 48, 0, 380, 375, 1, 0, 0, 0, 380, 376, 1, 0, 0, 0, 380, 377, - 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 380, 379, 1, 0, 0, 0, 381, 59, 1, 0, - 0, 0, 382, 386, 3, 100, 50, 0, 383, 386, 3, 68, 34, 0, 384, 386, 3, 96, - 48, 0, 385, 382, 1, 0, 0, 0, 385, 383, 1, 0, 0, 0, 385, 384, 1, 0, 0, 0, - 386, 61, 1, 0, 0, 0, 387, 388, 5, 38, 0, 0, 388, 389, 3, 74, 37, 0, 389, - 63, 1, 0, 0, 0, 390, 396, 5, 39, 0, 0, 391, 397, 3, 82, 41, 0, 392, 397, - 3, 68, 34, 0, 393, 397, 3, 66, 33, 0, 394, 397, 3, 96, 48, 0, 395, 397, - 3, 102, 51, 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, 65, 1, 0, 0, - 0, 398, 399, 5, 64, 0, 0, 399, 403, 5, 65, 0, 0, 400, 401, 5, 64, 0, 0, - 401, 403, 3, 110, 55, 0, 402, 398, 1, 0, 0, 0, 402, 400, 1, 0, 0, 0, 403, - 67, 1, 0, 0, 0, 404, 407, 5, 65, 0, 0, 405, 407, 3, 110, 55, 0, 406, 404, - 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 69, 1, 0, 0, 0, 408, 416, 3, 72, - 36, 0, 409, 416, 3, 74, 37, 0, 410, 416, 3, 76, 38, 0, 411, 416, 3, 78, - 39, 0, 412, 416, 3, 80, 40, 0, 413, 416, 3, 82, 41, 0, 414, 416, 3, 84, - 42, 0, 415, 408, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, - 415, 411, 1, 0, 0, 0, 415, 412, 1, 0, 0, 0, 415, 413, 1, 0, 0, 0, 415, - 414, 1, 0, 0, 0, 416, 71, 1, 0, 0, 0, 417, 419, 5, 9, 0, 0, 418, 420, 3, - 106, 53, 0, 419, 418, 1, 0, 0, 0, 419, 420, 1, 0, 0, 0, 420, 421, 1, 0, - 0, 0, 421, 422, 5, 10, 0, 0, 422, 73, 1, 0, 0, 0, 423, 435, 5, 13, 0, 0, - 424, 429, 3, 86, 43, 0, 425, 426, 5, 8, 0, 0, 426, 428, 3, 86, 43, 0, 427, - 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, - 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 434, 5, 8, - 0, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, - 435, 424, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, - 438, 5, 14, 0, 0, 438, 75, 1, 0, 0, 0, 439, 440, 5, 50, 0, 0, 440, 77, - 1, 0, 0, 0, 441, 442, 5, 67, 0, 0, 442, 79, 1, 0, 0, 0, 443, 444, 5, 69, - 0, 0, 444, 81, 1, 0, 0, 0, 445, 446, 5, 68, 0, 0, 446, 83, 1, 0, 0, 0, - 447, 448, 7, 1, 0, 0, 448, 85, 1, 0, 0, 0, 449, 450, 3, 90, 45, 0, 450, - 451, 5, 5, 0, 0, 451, 452, 3, 118, 59, 0, 452, 459, 1, 0, 0, 0, 453, 454, - 3, 88, 44, 0, 454, 455, 5, 5, 0, 0, 455, 456, 3, 118, 59, 0, 456, 459, - 1, 0, 0, 0, 457, 459, 3, 68, 34, 0, 458, 449, 1, 0, 0, 0, 458, 453, 1, - 0, 0, 0, 458, 457, 1, 0, 0, 0, 459, 87, 1, 0, 0, 0, 460, 461, 5, 9, 0, - 0, 461, 462, 3, 118, 59, 0, 462, 463, 5, 10, 0, 0, 463, 89, 1, 0, 0, 0, - 464, 470, 5, 65, 0, 0, 465, 470, 3, 78, 39, 0, 466, 470, 3, 66, 33, 0, - 467, 470, 3, 110, 55, 0, 468, 470, 3, 112, 56, 0, 469, 464, 1, 0, 0, 0, - 469, 465, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 469, 467, 1, 0, 0, 0, 469, - 468, 1, 0, 0, 0, 470, 91, 1, 0, 0, 0, 471, 472, 3, 94, 47, 0, 472, 473, - 5, 65, 0, 0, 473, 93, 1, 0, 0, 0, 474, 476, 5, 70, 0, 0, 475, 474, 1, 0, - 0, 0, 476, 479, 1, 0, 0, 0, 477, 475, 1, 0, 0, 0, 477, 478, 1, 0, 0, 0, - 478, 95, 1, 0, 0, 0, 479, 477, 1, 0, 0, 0, 480, 482, 3, 98, 49, 0, 481, - 483, 3, 108, 54, 0, 482, 481, 1, 0, 0, 0, 483, 484, 1, 0, 0, 0, 484, 482, - 1, 0, 0, 0, 484, 485, 1, 0, 0, 0, 485, 97, 1, 0, 0, 0, 486, 492, 3, 68, - 34, 0, 487, 492, 3, 66, 33, 0, 488, 492, 3, 72, 36, 0, 489, 492, 3, 74, - 37, 0, 490, 492, 3, 102, 51, 0, 491, 486, 1, 0, 0, 0, 491, 487, 1, 0, 0, - 0, 491, 488, 1, 0, 0, 0, 491, 489, 1, 0, 0, 0, 491, 490, 1, 0, 0, 0, 492, - 99, 1, 0, 0, 0, 493, 495, 3, 102, 51, 0, 494, 496, 3, 144, 72, 0, 495, - 494, 1, 0, 0, 0, 495, 496, 1, 0, 0, 0, 496, 101, 1, 0, 0, 0, 497, 498, - 3, 94, 47, 0, 498, 499, 3, 104, 52, 0, 499, 501, 5, 11, 0, 0, 500, 502, - 3, 106, 53, 0, 501, 500, 1, 0, 0, 0, 501, 502, 1, 0, 0, 0, 502, 503, 1, - 0, 0, 0, 503, 504, 5, 12, 0, 0, 504, 103, 1, 0, 0, 0, 505, 509, 5, 65, - 0, 0, 506, 509, 3, 110, 55, 0, 507, 509, 3, 112, 56, 0, 508, 505, 1, 0, - 0, 0, 508, 506, 1, 0, 0, 0, 508, 507, 1, 0, 0, 0, 509, 105, 1, 0, 0, 0, - 510, 515, 3, 118, 59, 0, 511, 512, 5, 8, 0, 0, 512, 514, 3, 118, 59, 0, - 513, 511, 1, 0, 0, 0, 514, 517, 1, 0, 0, 0, 515, 513, 1, 0, 0, 0, 515, - 516, 1, 0, 0, 0, 516, 519, 1, 0, 0, 0, 517, 515, 1, 0, 0, 0, 518, 520, - 5, 8, 0, 0, 519, 518, 1, 0, 0, 0, 519, 520, 1, 0, 0, 0, 520, 107, 1, 0, - 0, 0, 521, 523, 3, 144, 72, 0, 522, 521, 1, 0, 0, 0, 522, 523, 1, 0, 0, - 0, 523, 524, 1, 0, 0, 0, 524, 525, 5, 7, 0, 0, 525, 533, 3, 90, 45, 0, - 526, 527, 3, 144, 72, 0, 527, 528, 5, 7, 0, 0, 528, 530, 1, 0, 0, 0, 529, - 526, 1, 0, 0, 0, 529, 530, 1, 0, 0, 0, 530, 531, 1, 0, 0, 0, 531, 533, - 3, 88, 44, 0, 532, 522, 1, 0, 0, 0, 532, 529, 1, 0, 0, 0, 533, 109, 1, - 0, 0, 0, 534, 535, 7, 2, 0, 0, 535, 111, 1, 0, 0, 0, 536, 537, 7, 3, 0, - 0, 537, 113, 1, 0, 0, 0, 538, 539, 3, 116, 58, 0, 539, 540, 5, 30, 0, 0, - 540, 541, 3, 116, 58, 0, 541, 115, 1, 0, 0, 0, 542, 546, 3, 82, 41, 0, - 543, 546, 3, 68, 34, 0, 544, 546, 3, 66, 33, 0, 545, 542, 1, 0, 0, 0, 545, - 543, 1, 0, 0, 0, 545, 544, 1, 0, 0, 0, 546, 117, 1, 0, 0, 0, 547, 548, - 6, 59, -1, 0, 548, 549, 3, 132, 66, 0, 549, 550, 3, 118, 59, 5, 550, 553, - 1, 0, 0, 0, 551, 553, 3, 120, 60, 0, 552, 547, 1, 0, 0, 0, 552, 551, 1, - 0, 0, 0, 553, 571, 1, 0, 0, 0, 554, 555, 10, 4, 0, 0, 555, 556, 3, 136, - 68, 0, 556, 557, 3, 118, 59, 5, 557, 570, 1, 0, 0, 0, 558, 559, 10, 3, - 0, 0, 559, 560, 3, 138, 69, 0, 560, 561, 3, 118, 59, 4, 561, 570, 1, 0, - 0, 0, 562, 563, 10, 2, 0, 0, 563, 565, 5, 32, 0, 0, 564, 566, 3, 118, 59, - 0, 565, 564, 1, 0, 0, 0, 565, 566, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, - 568, 5, 5, 0, 0, 568, 570, 3, 118, 59, 3, 569, 554, 1, 0, 0, 0, 569, 558, - 1, 0, 0, 0, 569, 562, 1, 0, 0, 0, 570, 573, 1, 0, 0, 0, 571, 569, 1, 0, - 0, 0, 571, 572, 1, 0, 0, 0, 572, 119, 1, 0, 0, 0, 573, 571, 1, 0, 0, 0, - 574, 575, 6, 60, -1, 0, 575, 576, 3, 122, 61, 0, 576, 595, 1, 0, 0, 0, - 577, 578, 10, 5, 0, 0, 578, 579, 3, 126, 63, 0, 579, 580, 3, 120, 60, 6, - 580, 594, 1, 0, 0, 0, 581, 582, 10, 4, 0, 0, 582, 583, 3, 124, 62, 0, 583, - 584, 3, 120, 60, 5, 584, 594, 1, 0, 0, 0, 585, 586, 10, 3, 0, 0, 586, 587, - 3, 128, 64, 0, 587, 588, 3, 120, 60, 4, 588, 594, 1, 0, 0, 0, 589, 590, - 10, 2, 0, 0, 590, 591, 3, 130, 65, 0, 591, 592, 3, 120, 60, 3, 592, 594, - 1, 0, 0, 0, 593, 577, 1, 0, 0, 0, 593, 581, 1, 0, 0, 0, 593, 585, 1, 0, - 0, 0, 593, 589, 1, 0, 0, 0, 594, 597, 1, 0, 0, 0, 595, 593, 1, 0, 0, 0, - 595, 596, 1, 0, 0, 0, 596, 121, 1, 0, 0, 0, 597, 595, 1, 0, 0, 0, 598, - 599, 6, 61, -1, 0, 599, 616, 3, 100, 50, 0, 600, 616, 3, 114, 57, 0, 601, - 616, 3, 70, 35, 0, 602, 616, 3, 68, 34, 0, 603, 616, 3, 96, 48, 0, 604, - 616, 3, 66, 33, 0, 605, 609, 5, 11, 0, 0, 606, 610, 3, 18, 9, 0, 607, 610, - 3, 56, 28, 0, 608, 610, 3, 118, 59, 0, 609, 606, 1, 0, 0, 0, 609, 607, - 1, 0, 0, 0, 609, 608, 1, 0, 0, 0, 610, 611, 1, 0, 0, 0, 611, 613, 5, 12, - 0, 0, 612, 614, 3, 144, 72, 0, 613, 612, 1, 0, 0, 0, 613, 614, 1, 0, 0, - 0, 614, 616, 1, 0, 0, 0, 615, 598, 1, 0, 0, 0, 615, 600, 1, 0, 0, 0, 615, - 601, 1, 0, 0, 0, 615, 602, 1, 0, 0, 0, 615, 603, 1, 0, 0, 0, 615, 604, - 1, 0, 0, 0, 615, 605, 1, 0, 0, 0, 616, 631, 1, 0, 0, 0, 617, 618, 10, 10, - 0, 0, 618, 619, 3, 140, 70, 0, 619, 620, 3, 122, 61, 11, 620, 630, 1, 0, - 0, 0, 621, 622, 10, 9, 0, 0, 622, 623, 3, 142, 71, 0, 623, 624, 3, 122, - 61, 10, 624, 630, 1, 0, 0, 0, 625, 626, 10, 8, 0, 0, 626, 627, 3, 134, - 67, 0, 627, 628, 3, 122, 61, 9, 628, 630, 1, 0, 0, 0, 629, 617, 1, 0, 0, - 0, 629, 621, 1, 0, 0, 0, 629, 625, 1, 0, 0, 0, 630, 633, 1, 0, 0, 0, 631, - 629, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 123, 1, 0, 0, 0, 633, 631, - 1, 0, 0, 0, 634, 637, 7, 4, 0, 0, 635, 638, 3, 128, 64, 0, 636, 638, 3, - 126, 63, 0, 637, 635, 1, 0, 0, 0, 637, 636, 1, 0, 0, 0, 638, 125, 1, 0, - 0, 0, 639, 640, 7, 5, 0, 0, 640, 127, 1, 0, 0, 0, 641, 643, 5, 60, 0, 0, - 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, - 645, 5, 61, 0, 0, 645, 129, 1, 0, 0, 0, 646, 648, 5, 60, 0, 0, 647, 646, - 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 650, 5, 59, - 0, 0, 650, 131, 1, 0, 0, 0, 651, 652, 7, 6, 0, 0, 652, 133, 1, 0, 0, 0, - 653, 654, 7, 7, 0, 0, 654, 135, 1, 0, 0, 0, 655, 656, 5, 28, 0, 0, 656, - 137, 1, 0, 0, 0, 657, 658, 5, 29, 0, 0, 658, 139, 1, 0, 0, 0, 659, 660, - 7, 8, 0, 0, 660, 141, 1, 0, 0, 0, 661, 662, 7, 9, 0, 0, 662, 143, 1, 0, - 0, 0, 663, 664, 5, 32, 0, 0, 664, 145, 1, 0, 0, 0, 67, 149, 164, 172, 176, - 187, 191, 199, 206, 214, 221, 226, 235, 241, 245, 249, 253, 262, 269, 277, - 282, 311, 322, 335, 343, 345, 353, 367, 370, 373, 380, 385, 396, 402, 406, - 415, 419, 429, 433, 435, 458, 469, 477, 484, 491, 495, 501, 508, 515, 519, - 522, 529, 532, 545, 552, 565, 569, 571, 593, 595, 609, 613, 615, 629, 631, - 637, 642, 647, + 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, + 73, 1, 0, 5, 0, 150, 8, 0, 10, 0, 12, 0, 153, 9, 0, 1, 0, 1, 0, 1, 1, 1, + 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 5, 4, 165, 8, 4, 10, 4, 12, 4, 168, + 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 3, 5, 175, 8, 5, 1, 6, 1, 6, 3, 6, + 179, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, + 190, 8, 7, 1, 8, 1, 8, 3, 8, 194, 8, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, + 9, 3, 9, 202, 8, 9, 1, 9, 1, 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, + 1, 9, 1, 9, 5, 9, 224, 8, 9, 10, 9, 12, 9, 227, 9, 9, 1, 9, 1, 9, 1, 9, + 1, 9, 1, 9, 3, 9, 234, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 239, 8, 9, 10, 9, + 12, 9, 242, 9, 9, 1, 9, 1, 9, 3, 9, 246, 8, 9, 1, 10, 1, 10, 1, 10, 1, + 10, 1, 10, 1, 10, 1, 10, 3, 10, 255, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, + 3, 11, 261, 8, 11, 1, 12, 1, 12, 3, 12, 265, 8, 12, 1, 13, 1, 13, 3, 13, + 269, 8, 13, 1, 14, 1, 14, 3, 14, 273, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, + 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 286, 8, 17, 1, + 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 293, 8, 18, 1, 19, 1, 19, 1, 19, + 1, 19, 5, 19, 299, 8, 19, 10, 19, 12, 19, 302, 9, 19, 1, 20, 1, 20, 3, + 20, 306, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, + 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, + 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 335, + 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 5, 23, 344, 8, + 23, 10, 23, 12, 23, 347, 9, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, + 1, 25, 1, 25, 5, 25, 357, 8, 25, 10, 25, 12, 25, 360, 9, 25, 1, 26, 1, + 26, 1, 26, 1, 26, 1, 26, 3, 26, 367, 8, 26, 3, 26, 369, 8, 26, 1, 27, 1, + 27, 1, 27, 1, 27, 5, 27, 375, 8, 27, 10, 27, 12, 27, 378, 9, 27, 1, 28, + 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 3, + 29, 391, 8, 29, 1, 29, 3, 29, 394, 8, 29, 1, 29, 3, 29, 397, 8, 29, 1, + 30, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 404, 8, 30, 1, 31, 1, 31, 1, 31, + 3, 31, 409, 8, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, + 33, 1, 33, 3, 33, 420, 8, 33, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 426, 8, + 34, 1, 35, 1, 35, 3, 35, 430, 8, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, + 1, 36, 1, 36, 3, 36, 439, 8, 36, 1, 37, 1, 37, 3, 37, 443, 8, 37, 1, 37, + 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 5, 38, 451, 8, 38, 10, 38, 12, 38, 454, + 9, 38, 1, 38, 3, 38, 457, 8, 38, 3, 38, 459, 8, 38, 1, 38, 1, 38, 1, 39, + 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 44, 1, + 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 482, 8, 44, + 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 3, 46, 493, + 8, 46, 1, 47, 1, 47, 1, 47, 1, 48, 5, 48, 499, 8, 48, 10, 48, 12, 48, 502, + 9, 48, 1, 49, 1, 49, 4, 49, 506, 8, 49, 11, 49, 12, 49, 507, 1, 50, 1, + 50, 1, 50, 1, 50, 1, 50, 3, 50, 515, 8, 50, 1, 51, 1, 51, 3, 51, 519, 8, + 51, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 525, 8, 52, 1, 52, 1, 52, 1, 53, + 1, 53, 1, 53, 3, 53, 532, 8, 53, 1, 54, 1, 54, 1, 54, 5, 54, 537, 8, 54, + 10, 54, 12, 54, 540, 9, 54, 1, 54, 3, 54, 543, 8, 54, 1, 55, 3, 55, 546, + 8, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 3, 55, 553, 8, 55, 1, 55, 3, + 55, 556, 8, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, + 1, 59, 1, 59, 1, 59, 3, 59, 569, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, + 60, 3, 60, 576, 8, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, + 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 589, 8, 60, 1, 60, 1, 60, 5, 60, 593, + 8, 60, 10, 60, 12, 60, 596, 9, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, + 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, + 1, 61, 1, 61, 1, 61, 5, 61, 617, 8, 61, 10, 61, 12, 61, 620, 9, 61, 1, + 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, + 3, 62, 633, 8, 62, 1, 62, 1, 62, 3, 62, 637, 8, 62, 3, 62, 639, 8, 62, + 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, + 62, 1, 62, 5, 62, 653, 8, 62, 10, 62, 12, 62, 656, 9, 62, 1, 63, 1, 63, + 1, 63, 3, 63, 661, 8, 63, 1, 64, 1, 64, 1, 65, 3, 65, 666, 8, 65, 1, 65, + 1, 65, 1, 66, 3, 66, 671, 8, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 68, 1, + 68, 1, 69, 1, 69, 1, 70, 1, 70, 1, 71, 1, 71, 1, 72, 1, 72, 1, 73, 1, 73, + 1, 73, 0, 3, 120, 122, 124, 74, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, + 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, + 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, + 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, + 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 0, 10, 1, 0, + 66, 67, 1, 0, 51, 52, 5, 0, 28, 29, 38, 44, 46, 46, 50, 50, 55, 61, 5, + 0, 35, 37, 45, 45, 47, 49, 51, 54, 62, 64, 2, 0, 51, 51, 58, 59, 1, 0, + 15, 20, 2, 0, 24, 25, 63, 63, 1, 0, 33, 34, 1, 0, 21, 23, 1, 0, 24, 25, + 732, 0, 151, 1, 0, 0, 0, 2, 156, 1, 0, 0, 0, 4, 158, 1, 0, 0, 0, 6, 160, + 1, 0, 0, 0, 8, 166, 1, 0, 0, 0, 10, 174, 1, 0, 0, 0, 12, 178, 1, 0, 0, + 0, 14, 189, 1, 0, 0, 0, 16, 191, 1, 0, 0, 0, 18, 245, 1, 0, 0, 0, 20, 254, + 1, 0, 0, 0, 22, 260, 1, 0, 0, 0, 24, 264, 1, 0, 0, 0, 26, 268, 1, 0, 0, + 0, 28, 272, 1, 0, 0, 0, 30, 274, 1, 0, 0, 0, 32, 278, 1, 0, 0, 0, 34, 281, + 1, 0, 0, 0, 36, 292, 1, 0, 0, 0, 38, 294, 1, 0, 0, 0, 40, 303, 1, 0, 0, + 0, 42, 334, 1, 0, 0, 0, 44, 336, 1, 0, 0, 0, 46, 340, 1, 0, 0, 0, 48, 348, + 1, 0, 0, 0, 50, 352, 1, 0, 0, 0, 52, 368, 1, 0, 0, 0, 54, 370, 1, 0, 0, + 0, 56, 379, 1, 0, 0, 0, 58, 384, 1, 0, 0, 0, 60, 403, 1, 0, 0, 0, 62, 408, + 1, 0, 0, 0, 64, 410, 1, 0, 0, 0, 66, 413, 1, 0, 0, 0, 68, 425, 1, 0, 0, + 0, 70, 429, 1, 0, 0, 0, 72, 438, 1, 0, 0, 0, 74, 440, 1, 0, 0, 0, 76, 446, + 1, 0, 0, 0, 78, 462, 1, 0, 0, 0, 80, 464, 1, 0, 0, 0, 82, 466, 1, 0, 0, + 0, 84, 468, 1, 0, 0, 0, 86, 470, 1, 0, 0, 0, 88, 481, 1, 0, 0, 0, 90, 483, + 1, 0, 0, 0, 92, 492, 1, 0, 0, 0, 94, 494, 1, 0, 0, 0, 96, 500, 1, 0, 0, + 0, 98, 503, 1, 0, 0, 0, 100, 514, 1, 0, 0, 0, 102, 516, 1, 0, 0, 0, 104, + 520, 1, 0, 0, 0, 106, 531, 1, 0, 0, 0, 108, 533, 1, 0, 0, 0, 110, 555, + 1, 0, 0, 0, 112, 557, 1, 0, 0, 0, 114, 559, 1, 0, 0, 0, 116, 561, 1, 0, + 0, 0, 118, 568, 1, 0, 0, 0, 120, 575, 1, 0, 0, 0, 122, 597, 1, 0, 0, 0, + 124, 638, 1, 0, 0, 0, 126, 657, 1, 0, 0, 0, 128, 662, 1, 0, 0, 0, 130, + 665, 1, 0, 0, 0, 132, 670, 1, 0, 0, 0, 134, 674, 1, 0, 0, 0, 136, 676, + 1, 0, 0, 0, 138, 678, 1, 0, 0, 0, 140, 680, 1, 0, 0, 0, 142, 682, 1, 0, + 0, 0, 144, 684, 1, 0, 0, 0, 146, 686, 1, 0, 0, 0, 148, 150, 3, 2, 1, 0, + 149, 148, 1, 0, 0, 0, 150, 153, 1, 0, 0, 0, 151, 149, 1, 0, 0, 0, 151, + 152, 1, 0, 0, 0, 152, 154, 1, 0, 0, 0, 153, 151, 1, 0, 0, 0, 154, 155, + 3, 8, 4, 0, 155, 1, 1, 0, 0, 0, 156, 157, 3, 4, 2, 0, 157, 3, 1, 0, 0, + 0, 158, 159, 3, 6, 3, 0, 159, 5, 1, 0, 0, 0, 160, 161, 5, 54, 0, 0, 161, + 162, 3, 94, 47, 0, 162, 7, 1, 0, 0, 0, 163, 165, 3, 10, 5, 0, 164, 163, + 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 166, 167, 1, 0, + 0, 0, 167, 169, 1, 0, 0, 0, 168, 166, 1, 0, 0, 0, 169, 170, 3, 12, 6, 0, + 170, 9, 1, 0, 0, 0, 171, 175, 3, 14, 7, 0, 172, 175, 3, 102, 51, 0, 173, + 175, 3, 58, 29, 0, 174, 171, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 174, 173, + 1, 0, 0, 0, 175, 11, 1, 0, 0, 0, 176, 179, 3, 16, 8, 0, 177, 179, 3, 18, + 9, 0, 178, 176, 1, 0, 0, 0, 178, 177, 1, 0, 0, 0, 179, 13, 1, 0, 0, 0, + 180, 181, 5, 45, 0, 0, 181, 182, 7, 0, 0, 0, 182, 183, 5, 31, 0, 0, 183, + 190, 3, 120, 60, 0, 184, 185, 5, 45, 0, 0, 185, 186, 3, 112, 56, 0, 186, + 187, 5, 31, 0, 0, 187, 188, 3, 120, 60, 0, 188, 190, 1, 0, 0, 0, 189, 180, + 1, 0, 0, 0, 189, 184, 1, 0, 0, 0, 190, 15, 1, 0, 0, 0, 191, 193, 5, 36, + 0, 0, 192, 194, 5, 40, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, + 194, 195, 1, 0, 0, 0, 195, 196, 3, 120, 60, 0, 196, 17, 1, 0, 0, 0, 197, + 198, 5, 35, 0, 0, 198, 201, 7, 0, 0, 0, 199, 200, 5, 8, 0, 0, 200, 202, + 5, 66, 0, 0, 201, 199, 1, 0, 0, 0, 201, 202, 1, 0, 0, 0, 202, 203, 1, 0, + 0, 0, 203, 204, 5, 64, 0, 0, 204, 208, 3, 20, 10, 0, 205, 207, 3, 26, 13, + 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, 28, 14, 0, 212, 246, 1, 0, 0, 0, 213, 214, 5, 35, 0, 0, 214, 216, 7, + 0, 0, 0, 215, 217, 5, 47, 0, 0, 216, 215, 1, 0, 0, 0, 216, 217, 1, 0, 0, + 0, 217, 218, 1, 0, 0, 0, 218, 219, 5, 48, 0, 0, 219, 220, 3, 120, 60, 0, + 220, 221, 5, 49, 0, 0, 221, 225, 3, 30, 15, 0, 222, 224, 3, 26, 13, 0, + 223, 222, 1, 0, 0, 0, 224, 227, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 225, + 226, 1, 0, 0, 0, 226, 228, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 228, 229, + 3, 28, 14, 0, 229, 246, 1, 0, 0, 0, 230, 231, 5, 35, 0, 0, 231, 233, 7, + 0, 0, 0, 232, 234, 5, 47, 0, 0, 233, 232, 1, 0, 0, 0, 233, 234, 1, 0, 0, + 0, 234, 235, 1, 0, 0, 0, 235, 236, 5, 48, 0, 0, 236, 240, 3, 120, 60, 0, + 237, 239, 3, 26, 13, 0, 238, 237, 1, 0, 0, 0, 239, 242, 1, 0, 0, 0, 240, + 238, 1, 0, 0, 0, 240, 241, 1, 0, 0, 0, 241, 243, 1, 0, 0, 0, 242, 240, + 1, 0, 0, 0, 243, 244, 3, 28, 14, 0, 244, 246, 1, 0, 0, 0, 245, 197, 1, + 0, 0, 0, 245, 213, 1, 0, 0, 0, 245, 230, 1, 0, 0, 0, 246, 19, 1, 0, 0, + 0, 247, 255, 3, 102, 51, 0, 248, 255, 3, 74, 37, 0, 249, 255, 3, 76, 38, + 0, 250, 255, 3, 70, 35, 0, 251, 255, 3, 98, 49, 0, 252, 255, 3, 116, 58, + 0, 253, 255, 3, 68, 34, 0, 254, 247, 1, 0, 0, 0, 254, 248, 1, 0, 0, 0, + 254, 249, 1, 0, 0, 0, 254, 250, 1, 0, 0, 0, 254, 251, 1, 0, 0, 0, 254, + 252, 1, 0, 0, 0, 254, 253, 1, 0, 0, 0, 255, 21, 1, 0, 0, 0, 256, 261, 3, + 34, 17, 0, 257, 261, 3, 38, 19, 0, 258, 261, 3, 32, 16, 0, 259, 261, 3, + 42, 21, 0, 260, 256, 1, 0, 0, 0, 260, 257, 1, 0, 0, 0, 260, 258, 1, 0, + 0, 0, 260, 259, 1, 0, 0, 0, 261, 23, 1, 0, 0, 0, 262, 265, 3, 14, 7, 0, + 263, 265, 3, 102, 51, 0, 264, 262, 1, 0, 0, 0, 264, 263, 1, 0, 0, 0, 265, + 25, 1, 0, 0, 0, 266, 269, 3, 24, 12, 0, 267, 269, 3, 22, 11, 0, 268, 266, + 1, 0, 0, 0, 268, 267, 1, 0, 0, 0, 269, 27, 1, 0, 0, 0, 270, 273, 3, 16, + 8, 0, 271, 273, 3, 18, 9, 0, 272, 270, 1, 0, 0, 0, 272, 271, 1, 0, 0, 0, + 273, 29, 1, 0, 0, 0, 274, 275, 5, 66, 0, 0, 275, 276, 5, 31, 0, 0, 276, + 277, 3, 120, 60, 0, 277, 31, 1, 0, 0, 0, 278, 279, 5, 41, 0, 0, 279, 280, + 3, 120, 60, 0, 280, 33, 1, 0, 0, 0, 281, 282, 5, 44, 0, 0, 282, 285, 3, + 36, 18, 0, 283, 284, 5, 8, 0, 0, 284, 286, 3, 36, 18, 0, 285, 283, 1, 0, + 0, 0, 285, 286, 1, 0, 0, 0, 286, 35, 1, 0, 0, 0, 287, 293, 3, 84, 42, 0, + 288, 293, 3, 68, 34, 0, 289, 293, 3, 70, 35, 0, 290, 293, 3, 102, 51, 0, + 291, 293, 3, 98, 49, 0, 292, 287, 1, 0, 0, 0, 292, 288, 1, 0, 0, 0, 292, + 289, 1, 0, 0, 0, 292, 290, 1, 0, 0, 0, 292, 291, 1, 0, 0, 0, 293, 37, 1, + 0, 0, 0, 294, 295, 5, 43, 0, 0, 295, 300, 3, 40, 20, 0, 296, 297, 5, 8, + 0, 0, 297, 299, 3, 40, 20, 0, 298, 296, 1, 0, 0, 0, 299, 302, 1, 0, 0, + 0, 300, 298, 1, 0, 0, 0, 300, 301, 1, 0, 0, 0, 301, 39, 1, 0, 0, 0, 302, + 300, 1, 0, 0, 0, 303, 305, 3, 120, 60, 0, 304, 306, 5, 50, 0, 0, 305, 304, + 1, 0, 0, 0, 305, 306, 1, 0, 0, 0, 306, 41, 1, 0, 0, 0, 307, 308, 5, 46, + 0, 0, 308, 309, 3, 46, 23, 0, 309, 310, 3, 50, 25, 0, 310, 311, 3, 52, + 26, 0, 311, 335, 1, 0, 0, 0, 312, 313, 5, 46, 0, 0, 313, 314, 3, 46, 23, + 0, 314, 315, 3, 50, 25, 0, 315, 335, 1, 0, 0, 0, 316, 317, 5, 46, 0, 0, + 317, 318, 3, 46, 23, 0, 318, 319, 3, 52, 26, 0, 319, 335, 1, 0, 0, 0, 320, + 321, 5, 46, 0, 0, 321, 322, 3, 46, 23, 0, 322, 323, 3, 56, 28, 0, 323, + 335, 1, 0, 0, 0, 324, 325, 5, 46, 0, 0, 325, 335, 3, 46, 23, 0, 326, 327, + 5, 46, 0, 0, 327, 328, 3, 50, 25, 0, 328, 329, 3, 52, 26, 0, 329, 335, + 1, 0, 0, 0, 330, 331, 5, 46, 0, 0, 331, 335, 3, 50, 25, 0, 332, 333, 5, + 46, 0, 0, 333, 335, 3, 56, 28, 0, 334, 307, 1, 0, 0, 0, 334, 312, 1, 0, + 0, 0, 334, 316, 1, 0, 0, 0, 334, 320, 1, 0, 0, 0, 334, 324, 1, 0, 0, 0, + 334, 326, 1, 0, 0, 0, 334, 330, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 335, + 43, 1, 0, 0, 0, 336, 337, 5, 66, 0, 0, 337, 338, 5, 31, 0, 0, 338, 339, + 3, 120, 60, 0, 339, 45, 1, 0, 0, 0, 340, 345, 3, 44, 22, 0, 341, 342, 5, + 8, 0, 0, 342, 344, 3, 44, 22, 0, 343, 341, 1, 0, 0, 0, 344, 347, 1, 0, + 0, 0, 345, 343, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 47, 1, 0, 0, 0, + 347, 345, 1, 0, 0, 0, 348, 349, 5, 66, 0, 0, 349, 350, 5, 31, 0, 0, 350, + 351, 3, 102, 51, 0, 351, 49, 1, 0, 0, 0, 352, 353, 5, 60, 0, 0, 353, 358, + 3, 48, 24, 0, 354, 355, 5, 8, 0, 0, 355, 357, 3, 48, 24, 0, 356, 354, 1, + 0, 0, 0, 357, 360, 1, 0, 0, 0, 358, 356, 1, 0, 0, 0, 358, 359, 1, 0, 0, + 0, 359, 51, 1, 0, 0, 0, 360, 358, 1, 0, 0, 0, 361, 362, 5, 55, 0, 0, 362, + 369, 3, 44, 22, 0, 363, 364, 5, 55, 0, 0, 364, 366, 5, 66, 0, 0, 365, 367, + 3, 54, 27, 0, 366, 365, 1, 0, 0, 0, 366, 367, 1, 0, 0, 0, 367, 369, 1, + 0, 0, 0, 368, 361, 1, 0, 0, 0, 368, 363, 1, 0, 0, 0, 369, 53, 1, 0, 0, + 0, 370, 371, 5, 56, 0, 0, 371, 376, 5, 66, 0, 0, 372, 373, 5, 8, 0, 0, + 373, 375, 5, 66, 0, 0, 374, 372, 1, 0, 0, 0, 375, 378, 1, 0, 0, 0, 376, + 374, 1, 0, 0, 0, 376, 377, 1, 0, 0, 0, 377, 55, 1, 0, 0, 0, 378, 376, 1, + 0, 0, 0, 379, 380, 5, 57, 0, 0, 380, 381, 5, 66, 0, 0, 381, 382, 5, 55, + 0, 0, 382, 383, 5, 66, 0, 0, 383, 57, 1, 0, 0, 0, 384, 385, 5, 37, 0, 0, + 385, 386, 5, 61, 0, 0, 386, 387, 3, 60, 30, 0, 387, 388, 5, 64, 0, 0, 388, + 390, 3, 62, 31, 0, 389, 391, 3, 64, 32, 0, 390, 389, 1, 0, 0, 0, 390, 391, + 1, 0, 0, 0, 391, 393, 1, 0, 0, 0, 392, 394, 3, 32, 16, 0, 393, 392, 1, + 0, 0, 0, 393, 394, 1, 0, 0, 0, 394, 396, 1, 0, 0, 0, 395, 397, 3, 66, 33, + 0, 396, 395, 1, 0, 0, 0, 396, 397, 1, 0, 0, 0, 397, 59, 1, 0, 0, 0, 398, + 404, 3, 80, 40, 0, 399, 404, 3, 70, 35, 0, 400, 404, 3, 68, 34, 0, 401, + 404, 3, 102, 51, 0, 402, 404, 3, 98, 49, 0, 403, 398, 1, 0, 0, 0, 403, + 399, 1, 0, 0, 0, 403, 400, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 403, 402, + 1, 0, 0, 0, 404, 61, 1, 0, 0, 0, 405, 409, 3, 102, 51, 0, 406, 409, 3, + 70, 35, 0, 407, 409, 3, 98, 49, 0, 408, 405, 1, 0, 0, 0, 408, 406, 1, 0, + 0, 0, 408, 407, 1, 0, 0, 0, 409, 63, 1, 0, 0, 0, 410, 411, 5, 38, 0, 0, + 411, 412, 3, 76, 38, 0, 412, 65, 1, 0, 0, 0, 413, 419, 5, 39, 0, 0, 414, + 420, 3, 84, 42, 0, 415, 420, 3, 70, 35, 0, 416, 420, 3, 68, 34, 0, 417, + 420, 3, 98, 49, 0, 418, 420, 3, 104, 52, 0, 419, 414, 1, 0, 0, 0, 419, + 415, 1, 0, 0, 0, 419, 416, 1, 0, 0, 0, 419, 417, 1, 0, 0, 0, 419, 418, + 1, 0, 0, 0, 420, 67, 1, 0, 0, 0, 421, 422, 5, 65, 0, 0, 422, 426, 5, 66, + 0, 0, 423, 424, 5, 65, 0, 0, 424, 426, 3, 112, 56, 0, 425, 421, 1, 0, 0, + 0, 425, 423, 1, 0, 0, 0, 426, 69, 1, 0, 0, 0, 427, 430, 5, 66, 0, 0, 428, + 430, 3, 112, 56, 0, 429, 427, 1, 0, 0, 0, 429, 428, 1, 0, 0, 0, 430, 71, + 1, 0, 0, 0, 431, 439, 3, 74, 37, 0, 432, 439, 3, 76, 38, 0, 433, 439, 3, + 78, 39, 0, 434, 439, 3, 80, 40, 0, 435, 439, 3, 82, 41, 0, 436, 439, 3, + 84, 42, 0, 437, 439, 3, 86, 43, 0, 438, 431, 1, 0, 0, 0, 438, 432, 1, 0, + 0, 0, 438, 433, 1, 0, 0, 0, 438, 434, 1, 0, 0, 0, 438, 435, 1, 0, 0, 0, + 438, 436, 1, 0, 0, 0, 438, 437, 1, 0, 0, 0, 439, 73, 1, 0, 0, 0, 440, 442, + 5, 9, 0, 0, 441, 443, 3, 108, 54, 0, 442, 441, 1, 0, 0, 0, 442, 443, 1, + 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 445, 5, 10, 0, 0, 445, 75, 1, 0, 0, + 0, 446, 458, 5, 13, 0, 0, 447, 452, 3, 88, 44, 0, 448, 449, 5, 8, 0, 0, + 449, 451, 3, 88, 44, 0, 450, 448, 1, 0, 0, 0, 451, 454, 1, 0, 0, 0, 452, + 450, 1, 0, 0, 0, 452, 453, 1, 0, 0, 0, 453, 456, 1, 0, 0, 0, 454, 452, + 1, 0, 0, 0, 455, 457, 5, 8, 0, 0, 456, 455, 1, 0, 0, 0, 456, 457, 1, 0, + 0, 0, 457, 459, 1, 0, 0, 0, 458, 447, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, + 459, 460, 1, 0, 0, 0, 460, 461, 5, 14, 0, 0, 461, 77, 1, 0, 0, 0, 462, + 463, 5, 53, 0, 0, 463, 79, 1, 0, 0, 0, 464, 465, 5, 68, 0, 0, 465, 81, + 1, 0, 0, 0, 466, 467, 5, 70, 0, 0, 467, 83, 1, 0, 0, 0, 468, 469, 5, 69, + 0, 0, 469, 85, 1, 0, 0, 0, 470, 471, 7, 1, 0, 0, 471, 87, 1, 0, 0, 0, 472, + 473, 3, 92, 46, 0, 473, 474, 5, 5, 0, 0, 474, 475, 3, 120, 60, 0, 475, + 482, 1, 0, 0, 0, 476, 477, 3, 90, 45, 0, 477, 478, 5, 5, 0, 0, 478, 479, + 3, 120, 60, 0, 479, 482, 1, 0, 0, 0, 480, 482, 3, 70, 35, 0, 481, 472, + 1, 0, 0, 0, 481, 476, 1, 0, 0, 0, 481, 480, 1, 0, 0, 0, 482, 89, 1, 0, + 0, 0, 483, 484, 5, 9, 0, 0, 484, 485, 3, 120, 60, 0, 485, 486, 5, 10, 0, + 0, 486, 91, 1, 0, 0, 0, 487, 493, 5, 66, 0, 0, 488, 493, 3, 80, 40, 0, + 489, 493, 3, 68, 34, 0, 490, 493, 3, 112, 56, 0, 491, 493, 3, 114, 57, + 0, 492, 487, 1, 0, 0, 0, 492, 488, 1, 0, 0, 0, 492, 489, 1, 0, 0, 0, 492, + 490, 1, 0, 0, 0, 492, 491, 1, 0, 0, 0, 493, 93, 1, 0, 0, 0, 494, 495, 3, + 96, 48, 0, 495, 496, 5, 66, 0, 0, 496, 95, 1, 0, 0, 0, 497, 499, 5, 71, + 0, 0, 498, 497, 1, 0, 0, 0, 499, 502, 1, 0, 0, 0, 500, 498, 1, 0, 0, 0, + 500, 501, 1, 0, 0, 0, 501, 97, 1, 0, 0, 0, 502, 500, 1, 0, 0, 0, 503, 505, + 3, 100, 50, 0, 504, 506, 3, 110, 55, 0, 505, 504, 1, 0, 0, 0, 506, 507, + 1, 0, 0, 0, 507, 505, 1, 0, 0, 0, 507, 508, 1, 0, 0, 0, 508, 99, 1, 0, + 0, 0, 509, 515, 3, 70, 35, 0, 510, 515, 3, 68, 34, 0, 511, 515, 3, 74, + 37, 0, 512, 515, 3, 76, 38, 0, 513, 515, 3, 104, 52, 0, 514, 509, 1, 0, + 0, 0, 514, 510, 1, 0, 0, 0, 514, 511, 1, 0, 0, 0, 514, 512, 1, 0, 0, 0, + 514, 513, 1, 0, 0, 0, 515, 101, 1, 0, 0, 0, 516, 518, 3, 104, 52, 0, 517, + 519, 3, 146, 73, 0, 518, 517, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 103, + 1, 0, 0, 0, 520, 521, 3, 96, 48, 0, 521, 522, 3, 106, 53, 0, 522, 524, + 5, 11, 0, 0, 523, 525, 3, 108, 54, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, + 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 5, 12, 0, 0, 527, 105, 1, 0, 0, + 0, 528, 532, 5, 66, 0, 0, 529, 532, 3, 112, 56, 0, 530, 532, 3, 114, 57, + 0, 531, 528, 1, 0, 0, 0, 531, 529, 1, 0, 0, 0, 531, 530, 1, 0, 0, 0, 532, + 107, 1, 0, 0, 0, 533, 538, 3, 120, 60, 0, 534, 535, 5, 8, 0, 0, 535, 537, + 3, 120, 60, 0, 536, 534, 1, 0, 0, 0, 537, 540, 1, 0, 0, 0, 538, 536, 1, + 0, 0, 0, 538, 539, 1, 0, 0, 0, 539, 542, 1, 0, 0, 0, 540, 538, 1, 0, 0, + 0, 541, 543, 5, 8, 0, 0, 542, 541, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, + 109, 1, 0, 0, 0, 544, 546, 3, 146, 73, 0, 545, 544, 1, 0, 0, 0, 545, 546, + 1, 0, 0, 0, 546, 547, 1, 0, 0, 0, 547, 548, 5, 7, 0, 0, 548, 556, 3, 92, + 46, 0, 549, 550, 3, 146, 73, 0, 550, 551, 5, 7, 0, 0, 551, 553, 1, 0, 0, + 0, 552, 549, 1, 0, 0, 0, 552, 553, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, + 556, 3, 90, 45, 0, 555, 545, 1, 0, 0, 0, 555, 552, 1, 0, 0, 0, 556, 111, + 1, 0, 0, 0, 557, 558, 7, 2, 0, 0, 558, 113, 1, 0, 0, 0, 559, 560, 7, 3, + 0, 0, 560, 115, 1, 0, 0, 0, 561, 562, 3, 118, 59, 0, 562, 563, 5, 30, 0, + 0, 563, 564, 3, 118, 59, 0, 564, 117, 1, 0, 0, 0, 565, 569, 3, 84, 42, + 0, 566, 569, 3, 70, 35, 0, 567, 569, 3, 68, 34, 0, 568, 565, 1, 0, 0, 0, + 568, 566, 1, 0, 0, 0, 568, 567, 1, 0, 0, 0, 569, 119, 1, 0, 0, 0, 570, + 571, 6, 60, -1, 0, 571, 572, 3, 134, 67, 0, 572, 573, 3, 120, 60, 5, 573, + 576, 1, 0, 0, 0, 574, 576, 3, 122, 61, 0, 575, 570, 1, 0, 0, 0, 575, 574, + 1, 0, 0, 0, 576, 594, 1, 0, 0, 0, 577, 578, 10, 4, 0, 0, 578, 579, 3, 138, + 69, 0, 579, 580, 3, 120, 60, 5, 580, 593, 1, 0, 0, 0, 581, 582, 10, 3, + 0, 0, 582, 583, 3, 140, 70, 0, 583, 584, 3, 120, 60, 4, 584, 593, 1, 0, + 0, 0, 585, 586, 10, 2, 0, 0, 586, 588, 5, 32, 0, 0, 587, 589, 3, 120, 60, + 0, 588, 587, 1, 0, 0, 0, 588, 589, 1, 0, 0, 0, 589, 590, 1, 0, 0, 0, 590, + 591, 5, 5, 0, 0, 591, 593, 3, 120, 60, 3, 592, 577, 1, 0, 0, 0, 592, 581, + 1, 0, 0, 0, 592, 585, 1, 0, 0, 0, 593, 596, 1, 0, 0, 0, 594, 592, 1, 0, + 0, 0, 594, 595, 1, 0, 0, 0, 595, 121, 1, 0, 0, 0, 596, 594, 1, 0, 0, 0, + 597, 598, 6, 61, -1, 0, 598, 599, 3, 124, 62, 0, 599, 618, 1, 0, 0, 0, + 600, 601, 10, 5, 0, 0, 601, 602, 3, 128, 64, 0, 602, 603, 3, 122, 61, 6, + 603, 617, 1, 0, 0, 0, 604, 605, 10, 4, 0, 0, 605, 606, 3, 126, 63, 0, 606, + 607, 3, 122, 61, 5, 607, 617, 1, 0, 0, 0, 608, 609, 10, 3, 0, 0, 609, 610, + 3, 130, 65, 0, 610, 611, 3, 122, 61, 4, 611, 617, 1, 0, 0, 0, 612, 613, + 10, 2, 0, 0, 613, 614, 3, 132, 66, 0, 614, 615, 3, 122, 61, 3, 615, 617, + 1, 0, 0, 0, 616, 600, 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, 123, 1, 0, 0, 0, 620, 618, 1, 0, 0, 0, 621, + 622, 6, 62, -1, 0, 622, 639, 3, 102, 51, 0, 623, 639, 3, 116, 58, 0, 624, + 639, 3, 72, 36, 0, 625, 639, 3, 70, 35, 0, 626, 639, 3, 98, 49, 0, 627, + 639, 3, 68, 34, 0, 628, 632, 5, 11, 0, 0, 629, 633, 3, 18, 9, 0, 630, 633, + 3, 58, 29, 0, 631, 633, 3, 120, 60, 0, 632, 629, 1, 0, 0, 0, 632, 630, + 1, 0, 0, 0, 632, 631, 1, 0, 0, 0, 633, 634, 1, 0, 0, 0, 634, 636, 5, 12, + 0, 0, 635, 637, 3, 146, 73, 0, 636, 635, 1, 0, 0, 0, 636, 637, 1, 0, 0, + 0, 637, 639, 1, 0, 0, 0, 638, 621, 1, 0, 0, 0, 638, 623, 1, 0, 0, 0, 638, + 624, 1, 0, 0, 0, 638, 625, 1, 0, 0, 0, 638, 626, 1, 0, 0, 0, 638, 627, + 1, 0, 0, 0, 638, 628, 1, 0, 0, 0, 639, 654, 1, 0, 0, 0, 640, 641, 10, 10, + 0, 0, 641, 642, 3, 142, 71, 0, 642, 643, 3, 124, 62, 11, 643, 653, 1, 0, + 0, 0, 644, 645, 10, 9, 0, 0, 645, 646, 3, 144, 72, 0, 646, 647, 3, 124, + 62, 10, 647, 653, 1, 0, 0, 0, 648, 649, 10, 8, 0, 0, 649, 650, 3, 136, + 68, 0, 650, 651, 3, 124, 62, 9, 651, 653, 1, 0, 0, 0, 652, 640, 1, 0, 0, + 0, 652, 644, 1, 0, 0, 0, 652, 648, 1, 0, 0, 0, 653, 656, 1, 0, 0, 0, 654, + 652, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 125, 1, 0, 0, 0, 656, 654, + 1, 0, 0, 0, 657, 660, 7, 4, 0, 0, 658, 661, 3, 130, 65, 0, 659, 661, 3, + 128, 64, 0, 660, 658, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 127, 1, 0, + 0, 0, 662, 663, 7, 5, 0, 0, 663, 129, 1, 0, 0, 0, 664, 666, 5, 63, 0, 0, + 665, 664, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, + 668, 5, 64, 0, 0, 668, 131, 1, 0, 0, 0, 669, 671, 5, 63, 0, 0, 670, 669, + 1, 0, 0, 0, 670, 671, 1, 0, 0, 0, 671, 672, 1, 0, 0, 0, 672, 673, 5, 62, + 0, 0, 673, 133, 1, 0, 0, 0, 674, 675, 7, 6, 0, 0, 675, 135, 1, 0, 0, 0, + 676, 677, 7, 7, 0, 0, 677, 137, 1, 0, 0, 0, 678, 679, 5, 28, 0, 0, 679, + 139, 1, 0, 0, 0, 680, 681, 5, 29, 0, 0, 681, 141, 1, 0, 0, 0, 682, 683, + 7, 8, 0, 0, 683, 143, 1, 0, 0, 0, 684, 685, 7, 9, 0, 0, 685, 145, 1, 0, + 0, 0, 686, 687, 5, 32, 0, 0, 687, 147, 1, 0, 0, 0, 69, 151, 166, 174, 178, + 189, 193, 201, 208, 216, 225, 233, 240, 245, 254, 260, 264, 268, 272, 285, + 292, 300, 305, 334, 345, 358, 366, 368, 376, 390, 393, 396, 403, 408, 419, + 425, 429, 438, 442, 452, 456, 458, 481, 492, 500, 507, 514, 518, 524, 531, + 538, 542, 545, 552, 555, 568, 575, 588, 592, 594, 616, 618, 632, 636, 638, + 652, 654, 660, 665, 670, } deserializer := antlr.NewATNDeserializer(nil) staticData.atn = deserializer.Deserialize(staticData.serializedATN) @@ -462,31 +472,32 @@ const ( FqlParserLimit = 44 FqlParserLet = 45 FqlParserCollect = 46 - FqlParserSortDirection = 47 - FqlParserNone = 48 - FqlParserNull = 49 - FqlParserBooleanLiteral = 50 - FqlParserUse = 51 - FqlParserInto = 52 - FqlParserKeep = 53 - FqlParserWith = 54 - FqlParserAll = 55 - FqlParserAny = 56 - FqlParserAggregate = 57 - FqlParserEvent = 58 - FqlParserLike = 59 - FqlParserNot = 60 - FqlParserIn = 61 - FqlParserDo = 62 - FqlParserWhile = 63 - FqlParserParam = 64 - FqlParserIdentifier = 65 - FqlParserIgnoreIdentifier = 66 - FqlParserStringLiteral = 67 - FqlParserIntegerLiteral = 68 - FqlParserFloatLiteral = 69 - FqlParserNamespaceSegment = 70 - FqlParserUnknownIdentifier = 71 + FqlParserDo = 47 + FqlParserWhile = 48 + FqlParserStep = 49 + FqlParserSortDirection = 50 + FqlParserNone = 51 + FqlParserNull = 52 + FqlParserBooleanLiteral = 53 + FqlParserUse = 54 + FqlParserInto = 55 + FqlParserKeep = 56 + FqlParserWith = 57 + FqlParserAll = 58 + FqlParserAny = 59 + FqlParserAggregate = 60 + FqlParserEvent = 61 + FqlParserLike = 62 + FqlParserNot = 63 + FqlParserIn = 64 + FqlParserParam = 65 + FqlParserIdentifier = 66 + FqlParserIgnoreIdentifier = 67 + FqlParserStringLiteral = 68 + FqlParserIntegerLiteral = 69 + FqlParserFloatLiteral = 70 + FqlParserNamespaceSegment = 71 + FqlParserUnknownIdentifier = 72 ) // FqlParser rules. @@ -506,64 +517,65 @@ const ( FqlParserRULE_forExpressionStatement = 12 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_collectAggregateSelector = 23 - FqlParserRULE_collectAggregator = 24 - FqlParserRULE_collectGroupProjection = 25 - FqlParserRULE_collectGroupProjectionFilter = 26 - FqlParserRULE_collectCounter = 27 - FqlParserRULE_waitForExpression = 28 - FqlParserRULE_waitForEventName = 29 - FqlParserRULE_waitForEventSource = 30 - FqlParserRULE_optionsClause = 31 - FqlParserRULE_timeoutClause = 32 - FqlParserRULE_param = 33 - FqlParserRULE_variable = 34 - FqlParserRULE_literal = 35 - FqlParserRULE_arrayLiteral = 36 - FqlParserRULE_objectLiteral = 37 - FqlParserRULE_booleanLiteral = 38 - FqlParserRULE_stringLiteral = 39 - FqlParserRULE_floatLiteral = 40 - FqlParserRULE_integerLiteral = 41 - FqlParserRULE_noneLiteral = 42 - FqlParserRULE_propertyAssignment = 43 - FqlParserRULE_computedPropertyName = 44 - FqlParserRULE_propertyName = 45 - FqlParserRULE_namespaceIdentifier = 46 - FqlParserRULE_namespace = 47 - FqlParserRULE_memberExpression = 48 - FqlParserRULE_memberExpressionSource = 49 - FqlParserRULE_functionCallExpression = 50 - FqlParserRULE_functionCall = 51 - FqlParserRULE_functionName = 52 - FqlParserRULE_argumentList = 53 - FqlParserRULE_memberExpressionPath = 54 - FqlParserRULE_safeReservedWord = 55 - FqlParserRULE_unsafeReservedWord = 56 - FqlParserRULE_rangeOperator = 57 - FqlParserRULE_rangeOperand = 58 - FqlParserRULE_expression = 59 - FqlParserRULE_predicate = 60 - FqlParserRULE_expressionAtom = 61 - FqlParserRULE_arrayOperator = 62 - FqlParserRULE_equalityOperator = 63 - FqlParserRULE_inOperator = 64 - FqlParserRULE_likeOperator = 65 - FqlParserRULE_unaryOperator = 66 - FqlParserRULE_regexpOperator = 67 - FqlParserRULE_logicalAndOperator = 68 - FqlParserRULE_logicalOrOperator = 69 - FqlParserRULE_multiplicativeOperator = 70 - FqlParserRULE_additiveOperator = 71 - FqlParserRULE_errorOperator = 72 + FqlParserRULE_forExpressionStepAssignment = 15 + FqlParserRULE_filterClause = 16 + FqlParserRULE_limitClause = 17 + FqlParserRULE_limitClauseValue = 18 + FqlParserRULE_sortClause = 19 + FqlParserRULE_sortClauseExpression = 20 + FqlParserRULE_collectClause = 21 + FqlParserRULE_collectSelector = 22 + FqlParserRULE_collectGrouping = 23 + FqlParserRULE_collectAggregateSelector = 24 + FqlParserRULE_collectAggregator = 25 + FqlParserRULE_collectGroupProjection = 26 + FqlParserRULE_collectGroupProjectionFilter = 27 + FqlParserRULE_collectCounter = 28 + FqlParserRULE_waitForExpression = 29 + FqlParserRULE_waitForEventName = 30 + FqlParserRULE_waitForEventSource = 31 + FqlParserRULE_optionsClause = 32 + FqlParserRULE_timeoutClause = 33 + FqlParserRULE_param = 34 + FqlParserRULE_variable = 35 + FqlParserRULE_literal = 36 + FqlParserRULE_arrayLiteral = 37 + FqlParserRULE_objectLiteral = 38 + FqlParserRULE_booleanLiteral = 39 + FqlParserRULE_stringLiteral = 40 + FqlParserRULE_floatLiteral = 41 + FqlParserRULE_integerLiteral = 42 + FqlParserRULE_noneLiteral = 43 + FqlParserRULE_propertyAssignment = 44 + FqlParserRULE_computedPropertyName = 45 + FqlParserRULE_propertyName = 46 + FqlParserRULE_namespaceIdentifier = 47 + FqlParserRULE_namespace = 48 + FqlParserRULE_memberExpression = 49 + FqlParserRULE_memberExpressionSource = 50 + FqlParserRULE_functionCallExpression = 51 + FqlParserRULE_functionCall = 52 + FqlParserRULE_functionName = 53 + FqlParserRULE_argumentList = 54 + FqlParserRULE_memberExpressionPath = 55 + FqlParserRULE_safeReservedWord = 56 + FqlParserRULE_unsafeReservedWord = 57 + FqlParserRULE_rangeOperator = 58 + FqlParserRULE_rangeOperand = 59 + FqlParserRULE_expression = 60 + FqlParserRULE_predicate = 61 + FqlParserRULE_expressionAtom = 62 + FqlParserRULE_arrayOperator = 63 + FqlParserRULE_equalityOperator = 64 + FqlParserRULE_inOperator = 65 + FqlParserRULE_likeOperator = 66 + FqlParserRULE_unaryOperator = 67 + FqlParserRULE_regexpOperator = 68 + FqlParserRULE_logicalAndOperator = 69 + FqlParserRULE_logicalOrOperator = 70 + FqlParserRULE_multiplicativeOperator = 71 + FqlParserRULE_additiveOperator = 72 + FqlParserRULE_errorOperator = 73 ) // IProgramContext is an interface to support dynamic dispatch. @@ -707,7 +719,7 @@ func (p *FqlParser) Program() (localctx IProgramContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(149) + p.SetState(151) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -719,12 +731,12 @@ func (p *FqlParser) Program() (localctx IProgramContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(146) + p.SetState(148) p.Head() } } - p.SetState(151) + p.SetState(153) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -735,7 +747,7 @@ func (p *FqlParser) Program() (localctx IProgramContext) { } } { - p.SetState(152) + p.SetState(154) p.Body() } @@ -849,7 +861,7 @@ func (p *FqlParser) Head() (localctx IHeadContext) { p.EnterRule(localctx, 2, FqlParserRULE_head) p.EnterOuterAlt(localctx, 1) { - p.SetState(154) + p.SetState(156) p.UseExpression() } @@ -963,7 +975,7 @@ func (p *FqlParser) UseExpression() (localctx IUseExpressionContext) { p.EnterRule(localctx, 4, FqlParserRULE_useExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(156) + p.SetState(158) p.Use() } @@ -1082,7 +1094,7 @@ func (p *FqlParser) Use() (localctx IUseContext) { p.EnterRule(localctx, 6, FqlParserRULE_use) p.EnterOuterAlt(localctx, 1) { - p.SetState(158) + p.SetState(160) p.Match(FqlParserUse) if p.HasError() { // Recognition error - abort rule @@ -1090,7 +1102,7 @@ func (p *FqlParser) Use() (localctx IUseContext) { } } { - p.SetState(159) + p.SetState(161) p.NamespaceIdentifier() } @@ -1248,7 +1260,7 @@ func (p *FqlParser) Body() (localctx IBodyContext) { var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(164) + p.SetState(166) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1260,12 +1272,12 @@ func (p *FqlParser) Body() (localctx IBodyContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(161) + p.SetState(163) p.BodyStatement() } } - p.SetState(166) + p.SetState(168) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1276,7 +1288,7 @@ func (p *FqlParser) Body() (localctx IBodyContext) { } } { - p.SetState(167) + p.SetState(169) p.BodyExpression() } @@ -1422,7 +1434,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(172) + p.SetState(174) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1432,21 +1444,21 @@ func (p *FqlParser) BodyStatement() (localctx IBodyStatementContext) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(169) + p.SetState(171) p.VariableDeclaration() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(170) + p.SetState(172) p.FunctionCallExpression() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(171) + p.SetState(173) p.WaitForExpression() } @@ -1579,7 +1591,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(176) + p.SetState(178) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1589,14 +1601,14 @@ func (p *FqlParser) BodyExpression() (localctx IBodyExpressionContext) { case FqlParserReturn: p.EnterOuterAlt(localctx, 1) { - p.SetState(174) + p.SetState(176) p.ReturnExpression() } case FqlParserFor: p.EnterOuterAlt(localctx, 2) { - p.SetState(175) + p.SetState(177) p.ForExpression() } @@ -1763,7 +1775,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) p.EnterRule(localctx, 14, FqlParserRULE_variableDeclaration) var _la int - p.SetState(187) + p.SetState(189) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -1773,7 +1785,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(178) + p.SetState(180) p.Match(FqlParserLet) if p.HasError() { // Recognition error - abort rule @@ -1781,7 +1793,7 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } } { - p.SetState(179) + p.SetState(181) var _lt = p.GetTokenStream().LT(1) @@ -1798,24 +1810,9 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) p.Consume() } } - { - p.SetState(180) - p.Match(FqlParserAssign) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(181) - p.expression(0) - } - - case 2: - p.EnterOuterAlt(localctx, 2) { p.SetState(182) - p.Match(FqlParserLet) + p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -1823,11 +1820,14 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } { p.SetState(183) - p.SafeReservedWord() + p.expression(0) } + + case 2: + p.EnterOuterAlt(localctx, 2) { p.SetState(184) - p.Match(FqlParserAssign) + p.Match(FqlParserLet) if p.HasError() { // Recognition error - abort rule goto errorExit @@ -1835,6 +1835,18 @@ func (p *FqlParser) VariableDeclaration() (localctx IVariableDeclarationContext) } { p.SetState(185) + p.SafeReservedWord() + } + { + p.SetState(186) + p.Match(FqlParserAssign) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(187) p.expression(0) } @@ -1962,19 +1974,19 @@ func (p *FqlParser) ReturnExpression() (localctx IReturnExpressionContext) { p.EnterRule(localctx, 16, FqlParserRULE_returnExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(189) + p.SetState(191) p.Match(FqlParserReturn) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(191) + p.SetState(193) p.GetErrorHandler().Sync(p) if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 5, p.GetParserRuleContext()) == 1 { { - p.SetState(190) + p.SetState(192) p.Match(FqlParserDistinct) if p.HasError() { // Recognition error - abort rule @@ -1986,7 +1998,7 @@ func (p *FqlParser) ReturnExpression() (localctx IReturnExpressionContext) { goto errorExit } { - p.SetState(193) + p.SetState(195) p.expression(0) } @@ -2035,6 +2047,8 @@ type IForExpressionContext interface { ForExpressionBody(i int) IForExpressionBodyContext While() antlr.TerminalNode Expression() IExpressionContext + Step() antlr.TerminalNode + ForExpressionStepAssignment() IForExpressionStepAssignmentContext Do() antlr.TerminalNode // IsForExpressionContext differentiates from other interfaces. @@ -2200,6 +2214,26 @@ func (s *ForExpressionContext) Expression() IExpressionContext { return t.(IExpressionContext) } +func (s *ForExpressionContext) Step() antlr.TerminalNode { + return s.GetToken(FqlParserStep, 0) +} + +func (s *ForExpressionContext) ForExpressionStepAssignment() IForExpressionStepAssignmentContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IForExpressionStepAssignmentContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IForExpressionStepAssignmentContext) +} + func (s *ForExpressionContext) Do() antlr.TerminalNode { return s.GetToken(FqlParserDo, 0) } @@ -2241,17 +2275,17 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { var _alt int - p.SetState(226) + p.SetState(245) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 10, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 12, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(195) + p.SetState(197) p.Match(FqlParserFor) if p.HasError() { // Recognition error - abort rule @@ -2259,7 +2293,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(196) + p.SetState(198) var _lt = p.GetTokenStream().LT(1) @@ -2276,7 +2310,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { p.Consume() } } - p.SetState(199) + p.SetState(201) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2285,7 +2319,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { if _la == FqlParserComma { { - p.SetState(197) + p.SetState(199) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -2293,7 +2327,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(198) + p.SetState(200) var _m = p.Match(FqlParserIdentifier) @@ -2306,7 +2340,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } { - p.SetState(201) + p.SetState(203) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -2314,10 +2348,10 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(202) + p.SetState(204) p.ForExpressionSource() } - p.SetState(206) + p.SetState(208) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2329,12 +2363,12 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(203) + p.SetState(205) p.ForExpressionBody() } } - p.SetState(208) + p.SetState(210) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2345,14 +2379,14 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(209) + p.SetState(211) p.ForExpressionReturn() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(211) + p.SetState(213) p.Match(FqlParserFor) if p.HasError() { // Recognition error - abort rule @@ -2360,7 +2394,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(212) + p.SetState(214) var _lt = p.GetTokenStream().LT(1) @@ -2377,7 +2411,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { p.Consume() } } - p.SetState(214) + p.SetState(216) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2386,7 +2420,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { if _la == FqlParserDo { { - p.SetState(213) + p.SetState(215) p.Match(FqlParserDo) if p.HasError() { // Recognition error - abort rule @@ -2396,7 +2430,7 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } { - p.SetState(216) + p.SetState(218) p.Match(FqlParserWhile) if p.HasError() { // Recognition error - abort rule @@ -2404,10 +2438,22 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(217) + p.SetState(219) p.expression(0) } - p.SetState(221) + { + p.SetState(220) + p.Match(FqlParserStep) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(221) + p.ForExpressionStepAssignment() + } + p.SetState(225) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2419,12 +2465,12 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(218) + p.SetState(222) p.ForExpressionBody() } } - p.SetState(223) + p.SetState(227) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2435,7 +2481,97 @@ func (p *FqlParser) ForExpression() (localctx IForExpressionContext) { } } { - p.SetState(224) + p.SetState(228) + p.ForExpressionReturn() + } + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(230) + p.Match(FqlParserFor) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(231) + + var _lt = p.GetTokenStream().LT(1) + + localctx.(*ForExpressionContext).counterVariable = _lt + + _la = p.GetTokenStream().LA(1) + + if !(_la == FqlParserIdentifier || _la == FqlParserIgnoreIdentifier) { + var _ri = p.GetErrorHandler().RecoverInline(p) + + localctx.(*ForExpressionContext).counterVariable = _ri + } else { + p.GetErrorHandler().ReportMatch(p) + p.Consume() + } + } + p.SetState(233) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _la = p.GetTokenStream().LA(1) + + if _la == FqlParserDo { + { + p.SetState(232) + p.Match(FqlParserDo) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + + } + { + p.SetState(235) + p.Match(FqlParserWhile) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(236) + p.expression(0) + } + p.SetState(240) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { + if _alt == 1 { + { + p.SetState(237) + p.ForExpressionBody() + } + + } + p.SetState(242) + p.GetErrorHandler().Sync(p) + if p.HasError() { + goto errorExit + } + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) + if p.HasError() { + goto errorExit + } + } + { + p.SetState(243) p.ForExpressionReturn() } @@ -2653,59 +2789,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(235) + p.SetState(254) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 11, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 13, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(228) + p.SetState(247) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(229) + p.SetState(248) p.ArrayLiteral() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(230) + p.SetState(249) p.ObjectLiteral() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(231) + p.SetState(250) p.Variable() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(232) + p.SetState(251) p.MemberExpression() } case 6: p.EnterOuterAlt(localctx, 6) { - p.SetState(233) + p.SetState(252) p.RangeOperator() } case 7: p.EnterOuterAlt(localctx, 7) { - p.SetState(234) + p.SetState(253) p.Param() } @@ -2872,7 +3008,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(241) + p.SetState(260) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -2882,28 +3018,28 @@ func (p *FqlParser) ForExpressionClause() (localctx IForExpressionClauseContext) case FqlParserLimit: p.EnterOuterAlt(localctx, 1) { - p.SetState(237) + p.SetState(256) p.LimitClause() } case FqlParserSort: p.EnterOuterAlt(localctx, 2) { - p.SetState(238) + p.SetState(257) p.SortClause() } case FqlParserFilter: p.EnterOuterAlt(localctx, 3) { - p.SetState(239) + p.SetState(258) p.FilterClause() } case FqlParserCollect: p.EnterOuterAlt(localctx, 4) { - p.SetState(240) + p.SetState(259) p.CollectClause() } @@ -3037,24 +3173,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(245) + p.SetState(264) 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(), 15, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(243) + p.SetState(262) p.VariableDeclaration() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(244) + p.SetState(263) p.FunctionCallExpression() } @@ -3187,24 +3323,24 @@ func (s *ForExpressionBodyContext) Accept(visitor antlr.ParseTreeVisitor) interf func (p *FqlParser) ForExpressionBody() (localctx IForExpressionBodyContext) { localctx = NewForExpressionBodyContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 26, FqlParserRULE_forExpressionBody) - p.SetState(249) + p.SetState(268) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 14, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 16, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(247) + p.SetState(266) p.ForExpressionStatement() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(248) + p.SetState(267) p.ForExpressionClause() } @@ -3337,7 +3473,7 @@ func (s *ForExpressionReturnContext) Accept(visitor antlr.ParseTreeVisitor) inte func (p *FqlParser) ForExpressionReturn() (localctx IForExpressionReturnContext) { localctx = NewForExpressionReturnContext(p, p.GetParserRuleContext(), p.GetState()) p.EnterRule(localctx, 28, FqlParserRULE_forExpressionReturn) - p.SetState(253) + p.SetState(272) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3347,14 +3483,14 @@ func (p *FqlParser) ForExpressionReturn() (localctx IForExpressionReturnContext) case FqlParserReturn: p.EnterOuterAlt(localctx, 1) { - p.SetState(251) + p.SetState(270) p.ReturnExpression() } case FqlParserFor: p.EnterOuterAlt(localctx, 2) { - p.SetState(252) + p.SetState(271) p.ForExpression() } @@ -3376,6 +3512,146 @@ errorExit: goto errorExit // Trick to prevent compiler error if the label is not used } +// IForExpressionStepAssignmentContext is an interface to support dynamic dispatch. +type IForExpressionStepAssignmentContext interface { + antlr.ParserRuleContext + + // GetParser returns the parser. + GetParser() antlr.Parser + + // Getter signatures + Identifier() antlr.TerminalNode + Assign() antlr.TerminalNode + Expression() IExpressionContext + + // IsForExpressionStepAssignmentContext differentiates from other interfaces. + IsForExpressionStepAssignmentContext() +} + +type ForExpressionStepAssignmentContext struct { + antlr.BaseParserRuleContext + parser antlr.Parser +} + +func NewEmptyForExpressionStepAssignmentContext() *ForExpressionStepAssignmentContext { + var p = new(ForExpressionStepAssignmentContext) + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FqlParserRULE_forExpressionStepAssignment + return p +} + +func InitEmptyForExpressionStepAssignmentContext(p *ForExpressionStepAssignmentContext) { + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, nil, -1) + p.RuleIndex = FqlParserRULE_forExpressionStepAssignment +} + +func (*ForExpressionStepAssignmentContext) IsForExpressionStepAssignmentContext() {} + +func NewForExpressionStepAssignmentContext(parser antlr.Parser, parent antlr.ParserRuleContext, invokingState int) *ForExpressionStepAssignmentContext { + var p = new(ForExpressionStepAssignmentContext) + + antlr.InitBaseParserRuleContext(&p.BaseParserRuleContext, parent, invokingState) + + p.parser = parser + p.RuleIndex = FqlParserRULE_forExpressionStepAssignment + + return p +} + +func (s *ForExpressionStepAssignmentContext) GetParser() antlr.Parser { return s.parser } + +func (s *ForExpressionStepAssignmentContext) Identifier() antlr.TerminalNode { + return s.GetToken(FqlParserIdentifier, 0) +} + +func (s *ForExpressionStepAssignmentContext) Assign() antlr.TerminalNode { + return s.GetToken(FqlParserAssign, 0) +} + +func (s *ForExpressionStepAssignmentContext) Expression() IExpressionContext { + var t antlr.RuleContext + for _, ctx := range s.GetChildren() { + if _, ok := ctx.(IExpressionContext); ok { + t = ctx.(antlr.RuleContext) + break + } + } + + if t == nil { + return nil + } + + return t.(IExpressionContext) +} + +func (s *ForExpressionStepAssignmentContext) GetRuleContext() antlr.RuleContext { + return s +} + +func (s *ForExpressionStepAssignmentContext) ToStringTree(ruleNames []string, recog antlr.Recognizer) string { + return antlr.TreesStringTree(s, ruleNames, recog) +} + +func (s *ForExpressionStepAssignmentContext) EnterRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FqlParserListener); ok { + listenerT.EnterForExpressionStepAssignment(s) + } +} + +func (s *ForExpressionStepAssignmentContext) ExitRule(listener antlr.ParseTreeListener) { + if listenerT, ok := listener.(FqlParserListener); ok { + listenerT.ExitForExpressionStepAssignment(s) + } +} + +func (s *ForExpressionStepAssignmentContext) Accept(visitor antlr.ParseTreeVisitor) interface{} { + switch t := visitor.(type) { + case FqlParserVisitor: + return t.VisitForExpressionStepAssignment(s) + + default: + return t.VisitChildren(s) + } +} + +func (p *FqlParser) ForExpressionStepAssignment() (localctx IForExpressionStepAssignmentContext) { + localctx = NewForExpressionStepAssignmentContext(p, p.GetParserRuleContext(), p.GetState()) + p.EnterRule(localctx, 30, FqlParserRULE_forExpressionStepAssignment) + p.EnterOuterAlt(localctx, 1) + { + p.SetState(274) + p.Match(FqlParserIdentifier) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(275) + p.Match(FqlParserAssign) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(276) + p.expression(0) + } + +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 +} + // IFilterClauseContext is an interface to support dynamic dispatch. type IFilterClauseContext interface { antlr.ParserRuleContext @@ -3475,10 +3751,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, 30, FqlParserRULE_filterClause) + p.EnterRule(localctx, 32, FqlParserRULE_filterClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(255) + p.SetState(278) p.Match(FqlParserFilter) if p.HasError() { // Recognition error - abort rule @@ -3486,7 +3762,7 @@ func (p *FqlParser) FilterClause() (localctx IFilterClauseContext) { } } { - p.SetState(256) + p.SetState(279) p.expression(0) } @@ -3633,12 +3909,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, 32, FqlParserRULE_limitClause) + p.EnterRule(localctx, 34, FqlParserRULE_limitClause) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(258) + p.SetState(281) p.Match(FqlParserLimit) if p.HasError() { // Recognition error - abort rule @@ -3646,10 +3922,10 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { } } { - p.SetState(259) + p.SetState(282) p.LimitClauseValue() } - p.SetState(262) + p.SetState(285) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -3658,7 +3934,7 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { if _la == FqlParserComma { { - p.SetState(260) + p.SetState(283) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -3666,7 +3942,7 @@ func (p *FqlParser) LimitClause() (localctx ILimitClauseContext) { } } { - p.SetState(261) + p.SetState(284) p.LimitClauseValue() } @@ -3847,46 +4123,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, 34, FqlParserRULE_limitClauseValue) - p.SetState(269) + p.EnterRule(localctx, 36, FqlParserRULE_limitClauseValue) + p.SetState(292) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 17, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 19, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(264) + p.SetState(287) p.IntegerLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(265) + p.SetState(288) p.Param() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(266) + p.SetState(289) p.Variable() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(267) + p.SetState(290) p.FunctionCallExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(268) + p.SetState(291) p.MemberExpression() } @@ -4042,12 +4318,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, 36, FqlParserRULE_sortClause) + p.EnterRule(localctx, 38, FqlParserRULE_sortClause) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(271) + p.SetState(294) p.Match(FqlParserSort) if p.HasError() { // Recognition error - abort rule @@ -4055,10 +4331,10 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { } } { - p.SetState(272) + p.SetState(295) p.SortClauseExpression() } - p.SetState(277) + p.SetState(300) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4067,7 +4343,7 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { for _la == FqlParserComma { { - p.SetState(273) + p.SetState(296) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -4075,11 +4351,11 @@ func (p *FqlParser) SortClause() (localctx ISortClauseContext) { } } { - p.SetState(274) + p.SetState(297) p.SortClauseExpression() } - p.SetState(279) + p.SetState(302) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4199,18 +4475,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, 38, FqlParserRULE_sortClauseExpression) + p.EnterRule(localctx, 40, FqlParserRULE_sortClauseExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(280) + p.SetState(303) p.expression(0) } - p.SetState(282) + p.SetState(305) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 19, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 21, p.GetParserRuleContext()) == 1 { { - p.SetState(281) + p.SetState(304) p.Match(FqlParserSortDirection) if p.HasError() { // Recognition error - abort rule @@ -4385,130 +4661,16 @@ func (s *CollectClauseContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { localctx = NewCollectClauseContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 40, FqlParserRULE_collectClause) - p.SetState(311) + p.EnterRule(localctx, 42, FqlParserRULE_collectClause) + p.SetState(334) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 20, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 22, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) - { - p.SetState(284) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(285) - p.CollectGrouping() - } - { - p.SetState(286) - p.CollectAggregator() - } - { - p.SetState(287) - p.CollectGroupProjection() - } - - case 2: - p.EnterOuterAlt(localctx, 2) - { - p.SetState(289) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(290) - p.CollectGrouping() - } - { - p.SetState(291) - p.CollectAggregator() - } - - case 3: - p.EnterOuterAlt(localctx, 3) - { - p.SetState(293) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(294) - p.CollectGrouping() - } - { - p.SetState(295) - p.CollectGroupProjection() - } - - case 4: - p.EnterOuterAlt(localctx, 4) - { - p.SetState(297) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(298) - p.CollectGrouping() - } - { - p.SetState(299) - p.CollectCounter() - } - - case 5: - p.EnterOuterAlt(localctx, 5) - { - p.SetState(301) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(302) - p.CollectGrouping() - } - - case 6: - p.EnterOuterAlt(localctx, 6) - { - p.SetState(303) - p.Match(FqlParserCollect) - if p.HasError() { - // Recognition error - abort rule - goto errorExit - } - } - { - p.SetState(304) - p.CollectAggregator() - } - { - p.SetState(305) - p.CollectGroupProjection() - } - - case 7: - p.EnterOuterAlt(localctx, 7) { p.SetState(307) p.Match(FqlParserCollect) @@ -4519,13 +4681,21 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } { p.SetState(308) - p.CollectAggregator() + p.CollectGrouping() } - - case 8: - p.EnterOuterAlt(localctx, 8) { p.SetState(309) + p.CollectAggregator() + } + { + p.SetState(310) + p.CollectGroupProjection() + } + + case 2: + p.EnterOuterAlt(localctx, 2) + { + p.SetState(312) p.Match(FqlParserCollect) if p.HasError() { // Recognition error - abort rule @@ -4533,7 +4703,113 @@ func (p *FqlParser) CollectClause() (localctx ICollectClauseContext) { } } { - p.SetState(310) + p.SetState(313) + p.CollectGrouping() + } + { + p.SetState(314) + p.CollectAggregator() + } + + case 3: + p.EnterOuterAlt(localctx, 3) + { + p.SetState(316) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(317) + p.CollectGrouping() + } + { + p.SetState(318) + p.CollectGroupProjection() + } + + case 4: + p.EnterOuterAlt(localctx, 4) + { + p.SetState(320) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(321) + p.CollectGrouping() + } + { + p.SetState(322) + p.CollectCounter() + } + + case 5: + p.EnterOuterAlt(localctx, 5) + { + p.SetState(324) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(325) + p.CollectGrouping() + } + + case 6: + p.EnterOuterAlt(localctx, 6) + { + p.SetState(326) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(327) + p.CollectAggregator() + } + { + p.SetState(328) + p.CollectGroupProjection() + } + + case 7: + p.EnterOuterAlt(localctx, 7) + { + p.SetState(330) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(331) + p.CollectAggregator() + } + + case 8: + p.EnterOuterAlt(localctx, 8) + { + p.SetState(332) + p.Match(FqlParserCollect) + if p.HasError() { + // Recognition error - abort rule + goto errorExit + } + } + { + p.SetState(333) p.CollectCounter() } @@ -4658,10 +4934,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, 42, FqlParserRULE_collectSelector) + p.EnterRule(localctx, 44, FqlParserRULE_collectSelector) p.EnterOuterAlt(localctx, 1) { - p.SetState(313) + p.SetState(336) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4669,7 +4945,7 @@ func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { } } { - p.SetState(314) + p.SetState(337) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -4677,7 +4953,7 @@ func (p *FqlParser) CollectSelector() (localctx ICollectSelectorContext) { } } { - p.SetState(315) + p.SetState(338) p.expression(0) } @@ -4824,15 +5100,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, 44, FqlParserRULE_collectGrouping) + p.EnterRule(localctx, 46, FqlParserRULE_collectGrouping) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(317) + p.SetState(340) p.CollectSelector() } - p.SetState(322) + p.SetState(345) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4841,7 +5117,7 @@ func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { for _la == FqlParserComma { { - p.SetState(318) + p.SetState(341) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -4849,11 +5125,11 @@ func (p *FqlParser) CollectGrouping() (localctx ICollectGroupingContext) { } } { - p.SetState(319) + p.SetState(342) p.CollectSelector() } - p.SetState(324) + p.SetState(347) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -4978,10 +5254,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(325) + p.SetState(348) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -4989,7 +5265,7 @@ func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelect } } { - p.SetState(326) + p.SetState(349) p.Match(FqlParserAssign) if p.HasError() { // Recognition error - abort rule @@ -4997,7 +5273,7 @@ func (p *FqlParser) CollectAggregateSelector() (localctx ICollectAggregateSelect } } { - p.SetState(327) + p.SetState(350) p.FunctionCallExpression() } @@ -5149,12 +5425,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, 48, FqlParserRULE_collectAggregator) + p.EnterRule(localctx, 50, FqlParserRULE_collectAggregator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(329) + p.SetState(352) p.Match(FqlParserAggregate) if p.HasError() { // Recognition error - abort rule @@ -5162,10 +5438,10 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { } } { - p.SetState(330) + p.SetState(353) p.CollectAggregateSelector() } - p.SetState(335) + p.SetState(358) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5174,7 +5450,7 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { for _la == FqlParserComma { { - p.SetState(331) + p.SetState(354) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -5182,11 +5458,11 @@ func (p *FqlParser) CollectAggregator() (localctx ICollectAggregatorContext) { } } { - p.SetState(332) + p.SetState(355) p.CollectAggregateSelector() } - p.SetState(337) + p.SetState(360) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5328,18 +5604,18 @@ func (s *CollectGroupProjectionContext) Accept(visitor antlr.ParseTreeVisitor) i func (p *FqlParser) CollectGroupProjection() (localctx ICollectGroupProjectionContext) { localctx = NewCollectGroupProjectionContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 50, FqlParserRULE_collectGroupProjection) - p.SetState(345) + p.EnterRule(localctx, 52, FqlParserRULE_collectGroupProjection) + p.SetState(368) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } - switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 24, p.GetParserRuleContext()) { + switch p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 26, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(338) + p.SetState(361) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5347,14 +5623,14 @@ func (p *FqlParser) CollectGroupProjection() (localctx ICollectGroupProjectionCo } } { - p.SetState(339) + p.SetState(362) p.CollectSelector() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(340) + p.SetState(363) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5362,19 +5638,19 @@ func (p *FqlParser) CollectGroupProjection() (localctx ICollectGroupProjectionCo } } { - p.SetState(341) + p.SetState(364) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(343) + p.SetState(366) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 23, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 25, p.GetParserRuleContext()) == 1 { { - p.SetState(342) + p.SetState(365) p.CollectGroupProjectionFilter() } @@ -5501,12 +5777,12 @@ func (s *CollectGroupProjectionFilterContext) Accept(visitor antlr.ParseTreeVisi func (p *FqlParser) CollectGroupProjectionFilter() (localctx ICollectGroupProjectionFilterContext) { localctx = NewCollectGroupProjectionFilterContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 52, FqlParserRULE_collectGroupProjectionFilter) + p.EnterRule(localctx, 54, FqlParserRULE_collectGroupProjectionFilter) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(347) + p.SetState(370) p.Match(FqlParserKeep) if p.HasError() { // Recognition error - abort rule @@ -5514,14 +5790,14 @@ func (p *FqlParser) CollectGroupProjectionFilter() (localctx ICollectGroupProjec } } { - p.SetState(348) + p.SetState(371) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(353) + p.SetState(376) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5530,7 +5806,7 @@ func (p *FqlParser) CollectGroupProjectionFilter() (localctx ICollectGroupProjec for _la == FqlParserComma { { - p.SetState(349) + p.SetState(372) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -5538,7 +5814,7 @@ func (p *FqlParser) CollectGroupProjectionFilter() (localctx ICollectGroupProjec } } { - p.SetState(350) + p.SetState(373) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5546,7 +5822,7 @@ func (p *FqlParser) CollectGroupProjectionFilter() (localctx ICollectGroupProjec } } - p.SetState(355) + p.SetState(378) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -5664,10 +5940,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, 54, FqlParserRULE_collectCounter) + p.EnterRule(localctx, 56, FqlParserRULE_collectCounter) p.EnterOuterAlt(localctx, 1) { - p.SetState(356) + p.SetState(379) p.Match(FqlParserWith) if p.HasError() { // Recognition error - abort rule @@ -5675,7 +5951,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(357) + p.SetState(380) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5683,7 +5959,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(358) + p.SetState(381) p.Match(FqlParserInto) if p.HasError() { // Recognition error - abort rule @@ -5691,7 +5967,7 @@ func (p *FqlParser) CollectCounter() (localctx ICollectCounterContext) { } } { - p.SetState(359) + p.SetState(382) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -5889,10 +6165,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, 56, FqlParserRULE_waitForExpression) + p.EnterRule(localctx, 58, FqlParserRULE_waitForExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(361) + p.SetState(384) p.Match(FqlParserWaitfor) if p.HasError() { // Recognition error - abort rule @@ -5900,7 +6176,7 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(362) + p.SetState(385) p.Match(FqlParserEvent) if p.HasError() { // Recognition error - abort rule @@ -5908,11 +6184,11 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(363) + p.SetState(386) p.WaitForEventName() } { - p.SetState(364) + p.SetState(387) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -5920,39 +6196,39 @@ func (p *FqlParser) WaitForExpression() (localctx IWaitForExpressionContext) { } } { - p.SetState(365) + p.SetState(388) p.WaitForEventSource() } - p.SetState(367) + p.SetState(390) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 26, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 28, p.GetParserRuleContext()) == 1 { { - p.SetState(366) + p.SetState(389) p.OptionsClause() } } else if p.HasError() { // JIM goto errorExit } - p.SetState(370) + p.SetState(393) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 27, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 29, p.GetParserRuleContext()) == 1 { { - p.SetState(369) + p.SetState(392) p.FilterClause() } } else if p.HasError() { // JIM goto errorExit } - p.SetState(373) + p.SetState(396) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 28, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 30, p.GetParserRuleContext()) == 1 { { - p.SetState(372) + p.SetState(395) p.TimeoutClause() } @@ -6135,46 +6411,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, 58, FqlParserRULE_waitForEventName) - p.SetState(380) + p.EnterRule(localctx, 60, FqlParserRULE_waitForEventName) + p.SetState(403) 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(), 31, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(375) + p.SetState(398) p.StringLiteral() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(376) + p.SetState(399) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(377) + p.SetState(400) p.Param() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(378) + p.SetState(401) p.FunctionCallExpression() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(379) + p.SetState(402) p.MemberExpression() } @@ -6323,32 +6599,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, 60, FqlParserRULE_waitForEventSource) - p.SetState(385) + p.EnterRule(localctx, 62, FqlParserRULE_waitForEventSource) + p.SetState(408) 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(), 32, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(382) + p.SetState(405) p.FunctionCallExpression() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(383) + p.SetState(406) p.Variable() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(384) + p.SetState(407) p.MemberExpression() } @@ -6468,10 +6744,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, 62, FqlParserRULE_optionsClause) + p.EnterRule(localctx, 64, FqlParserRULE_optionsClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(387) + p.SetState(410) p.Match(FqlParserOptions) if p.HasError() { // Recognition error - abort rule @@ -6479,7 +6755,7 @@ func (p *FqlParser) OptionsClause() (localctx IOptionsClauseContext) { } } { - p.SetState(388) + p.SetState(411) p.ObjectLiteral() } @@ -6663,50 +6939,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, 64, FqlParserRULE_timeoutClause) + p.EnterRule(localctx, 66, FqlParserRULE_timeoutClause) p.EnterOuterAlt(localctx, 1) { - p.SetState(390) + p.SetState(413) p.Match(FqlParserTimeout) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(396) + p.SetState(419) 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(), 33, p.GetParserRuleContext()) { case 1: { - p.SetState(391) + p.SetState(414) p.IntegerLiteral() } case 2: { - p.SetState(392) + p.SetState(415) p.Variable() } case 3: { - p.SetState(393) + p.SetState(416) p.Param() } case 4: { - p.SetState(394) + p.SetState(417) p.MemberExpression() } case 5: { - p.SetState(395) + p.SetState(418) p.FunctionCall() } @@ -6831,18 +7107,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, 66, FqlParserRULE_param) - p.SetState(402) + p.EnterRule(localctx, 68, FqlParserRULE_param) + p.SetState(425) 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(), 34, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(398) + p.SetState(421) p.Match(FqlParserParam) if p.HasError() { // Recognition error - abort rule @@ -6850,7 +7126,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { } } { - p.SetState(399) + p.SetState(422) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -6861,7 +7137,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(400) + p.SetState(423) p.Match(FqlParserParam) if p.HasError() { // Recognition error - abort rule @@ -6869,7 +7145,7 @@ func (p *FqlParser) Param() (localctx IParamContext) { } } { - p.SetState(401) + p.SetState(424) p.SafeReservedWord() } @@ -6989,8 +7265,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, 68, FqlParserRULE_variable) - p.SetState(406) + p.EnterRule(localctx, 70, FqlParserRULE_variable) + p.SetState(429) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7000,7 +7276,7 @@ func (p *FqlParser) Variable() (localctx IVariableContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(404) + p.SetState(427) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -7011,7 +7287,7 @@ func (p *FqlParser) Variable() (localctx IVariableContext) { case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 2) { - p.SetState(405) + p.SetState(428) p.SafeReservedWord() } @@ -7229,8 +7505,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, 70, FqlParserRULE_literal) - p.SetState(415) + p.EnterRule(localctx, 72, FqlParserRULE_literal) + p.SetState(438) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7240,49 +7516,49 @@ func (p *FqlParser) Literal() (localctx ILiteralContext) { case FqlParserOpenBracket: p.EnterOuterAlt(localctx, 1) { - p.SetState(408) + p.SetState(431) p.ArrayLiteral() } case FqlParserOpenBrace: p.EnterOuterAlt(localctx, 2) { - p.SetState(409) + p.SetState(432) p.ObjectLiteral() } case FqlParserBooleanLiteral: p.EnterOuterAlt(localctx, 3) { - p.SetState(410) + p.SetState(433) p.BooleanLiteral() } case FqlParserStringLiteral: p.EnterOuterAlt(localctx, 4) { - p.SetState(411) + p.SetState(434) p.StringLiteral() } case FqlParserFloatLiteral: p.EnterOuterAlt(localctx, 5) { - p.SetState(412) + p.SetState(435) p.FloatLiteral() } case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 6) { - p.SetState(413) + p.SetState(436) p.IntegerLiteral() } case FqlParserNone, FqlParserNull: p.EnterOuterAlt(localctx, 7) { - p.SetState(414) + p.SetState(437) p.NoneLiteral() } @@ -7408,34 +7684,34 @@ func (s *ArrayLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) ArrayLiteral() (localctx IArrayLiteralContext) { localctx = NewArrayLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 72, FqlParserRULE_arrayLiteral) + p.EnterRule(localctx, 74, FqlParserRULE_arrayLiteral) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(417) + p.SetState(440) p.Match(FqlParserOpenBracket) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(419) + p.SetState(442) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&4467570830286094357) != 0 { + if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(418) + p.SetState(441) p.ArgumentList() } } { - p.SetState(421) + p.SetState(444) p.Match(FqlParserCloseBracket) if p.HasError() { // Recognition error - abort rule @@ -7596,45 +7872,45 @@ func (s *ObjectLiteralContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { localctx = NewObjectLiteralContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 74, FqlParserRULE_objectLiteral) + p.EnterRule(localctx, 76, FqlParserRULE_objectLiteral) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(423) + p.SetState(446) p.Match(FqlParserOpenBrace) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(435) + p.SetState(458) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&432345564162031617) != 0 { + if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&864691128389599233) != 0 { { - p.SetState(424) + p.SetState(447) p.PropertyAssignment() } - p.SetState(429) + p.SetState(452) 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(), 38, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(425) + p.SetState(448) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -7642,22 +7918,22 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { } } { - p.SetState(426) + p.SetState(449) p.PropertyAssignment() } } - p.SetState(431) + p.SetState(454) 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(), 38, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(433) + p.SetState(456) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -7666,7 +7942,7 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { if _la == FqlParserComma { { - p.SetState(432) + p.SetState(455) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -7678,7 +7954,7 @@ func (p *FqlParser) ObjectLiteral() (localctx IObjectLiteralContext) { } { - p.SetState(437) + p.SetState(460) p.Match(FqlParserCloseBrace) if p.HasError() { // Recognition error - abort rule @@ -7781,10 +8057,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, 76, FqlParserRULE_booleanLiteral) + p.EnterRule(localctx, 78, FqlParserRULE_booleanLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(439) + p.SetState(462) p.Match(FqlParserBooleanLiteral) if p.HasError() { // Recognition error - abort rule @@ -7887,10 +8163,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, 78, FqlParserRULE_stringLiteral) + p.EnterRule(localctx, 80, FqlParserRULE_stringLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(441) + p.SetState(464) p.Match(FqlParserStringLiteral) if p.HasError() { // Recognition error - abort rule @@ -7993,10 +8269,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, 80, FqlParserRULE_floatLiteral) + p.EnterRule(localctx, 82, FqlParserRULE_floatLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(443) + p.SetState(466) p.Match(FqlParserFloatLiteral) if p.HasError() { // Recognition error - abort rule @@ -8099,10 +8375,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, 82, FqlParserRULE_integerLiteral) + p.EnterRule(localctx, 84, FqlParserRULE_integerLiteral) p.EnterOuterAlt(localctx, 1) { - p.SetState(445) + p.SetState(468) p.Match(FqlParserIntegerLiteral) if p.HasError() { // Recognition error - abort rule @@ -8210,12 +8486,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, 84, FqlParserRULE_noneLiteral) + p.EnterRule(localctx, 86, FqlParserRULE_noneLiteral) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(447) + p.SetState(470) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserNone || _la == FqlParserNull) { @@ -8389,22 +8665,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, 86, FqlParserRULE_propertyAssignment) - p.SetState(458) + p.EnterRule(localctx, 88, FqlParserRULE_propertyAssignment) + p.SetState(481) 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(), 41, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(449) + p.SetState(472) p.PropertyName() } { - p.SetState(450) + p.SetState(473) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -8412,18 +8688,18 @@ func (p *FqlParser) PropertyAssignment() (localctx IPropertyAssignmentContext) { } } { - p.SetState(451) + p.SetState(474) p.expression(0) } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(453) + p.SetState(476) p.ComputedPropertyName() } { - p.SetState(454) + p.SetState(477) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -8431,14 +8707,14 @@ func (p *FqlParser) PropertyAssignment() (localctx IPropertyAssignmentContext) { } } { - p.SetState(455) + p.SetState(478) p.expression(0) } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(457) + p.SetState(480) p.Variable() } @@ -8563,10 +8839,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, 88, FqlParserRULE_computedPropertyName) + p.EnterRule(localctx, 90, FqlParserRULE_computedPropertyName) p.EnterOuterAlt(localctx, 1) { - p.SetState(460) + p.SetState(483) p.Match(FqlParserOpenBracket) if p.HasError() { // Recognition error - abort rule @@ -8574,11 +8850,11 @@ func (p *FqlParser) ComputedPropertyName() (localctx IComputedPropertyNameContex } } { - p.SetState(461) + p.SetState(484) p.expression(0) } { - p.SetState(462) + p.SetState(485) p.Match(FqlParserCloseBracket) if p.HasError() { // Recognition error - abort rule @@ -8749,8 +9025,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, 90, FqlParserRULE_propertyName) - p.SetState(469) + p.EnterRule(localctx, 92, FqlParserRULE_propertyName) + p.SetState(492) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -8760,7 +9036,7 @@ func (p *FqlParser) PropertyName() (localctx IPropertyNameContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(464) + p.SetState(487) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -8771,28 +9047,28 @@ func (p *FqlParser) PropertyName() (localctx IPropertyNameContext) { case FqlParserStringLiteral: p.EnterOuterAlt(localctx, 2) { - p.SetState(465) + p.SetState(488) p.StringLiteral() } case FqlParserParam: p.EnterOuterAlt(localctx, 3) { - p.SetState(466) + p.SetState(489) p.Param() } case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 4) { - p.SetState(467) + p.SetState(490) p.SafeReservedWord() } - case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn, FqlParserDo, FqlParserWhile: + case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserDo, FqlParserWhile, FqlParserStep, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn: p.EnterOuterAlt(localctx, 5) { - p.SetState(468) + p.SetState(491) p.UnsafeReservedWord() } @@ -8913,14 +9189,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, 92, FqlParserRULE_namespaceIdentifier) + p.EnterRule(localctx, 94, FqlParserRULE_namespaceIdentifier) p.EnterOuterAlt(localctx, 1) { - p.SetState(471) + p.SetState(494) p.Namespace() } { - p.SetState(472) + p.SetState(495) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -9028,11 +9304,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, 94, FqlParserRULE_namespace) + p.EnterRule(localctx, 96, FqlParserRULE_namespace) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(477) + p.SetState(500) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9041,7 +9317,7 @@ func (p *FqlParser) Namespace() (localctx INamespaceContext) { for _la == FqlParserNamespaceSegment { { - p.SetState(474) + p.SetState(497) p.Match(FqlParserNamespaceSegment) if p.HasError() { // Recognition error - abort rule @@ -9049,7 +9325,7 @@ func (p *FqlParser) Namespace() (localctx INamespaceContext) { } } - p.SetState(479) + p.SetState(502) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9207,15 +9483,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, 96, FqlParserRULE_memberExpression) + p.EnterRule(localctx, 98, FqlParserRULE_memberExpression) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(480) + p.SetState(503) p.MemberExpressionSource() } - p.SetState(482) + p.SetState(505) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9225,7 +9501,7 @@ func (p *FqlParser) MemberExpression() (localctx IMemberExpressionContext) { switch _alt { case 1: { - p.SetState(481) + p.SetState(504) p.MemberExpressionPath() } @@ -9234,9 +9510,9 @@ func (p *FqlParser) MemberExpression() (localctx IMemberExpressionContext) { goto errorExit } - p.SetState(484) + p.SetState(507) p.GetErrorHandler().Sync(p) - _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 42, p.GetParserRuleContext()) + _alt = p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 44, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -9417,46 +9693,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, 98, FqlParserRULE_memberExpressionSource) - p.SetState(491) + p.EnterRule(localctx, 100, FqlParserRULE_memberExpressionSource) + p.SetState(514) 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(), 45, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) { - p.SetState(486) + p.SetState(509) p.Variable() } case 2: p.EnterOuterAlt(localctx, 2) { - p.SetState(487) + p.SetState(510) p.Param() } case 3: p.EnterOuterAlt(localctx, 3) { - p.SetState(488) + p.SetState(511) p.ArrayLiteral() } case 4: p.EnterOuterAlt(localctx, 4) { - p.SetState(489) + p.SetState(512) p.ObjectLiteral() } case 5: p.EnterOuterAlt(localctx, 5) { - p.SetState(490) + p.SetState(513) p.FunctionCall() } @@ -9588,18 +9864,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, 100, FqlParserRULE_functionCallExpression) + p.EnterRule(localctx, 102, FqlParserRULE_functionCallExpression) p.EnterOuterAlt(localctx, 1) { - p.SetState(493) + p.SetState(516) p.FunctionCall() } - p.SetState(495) + p.SetState(518) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 44, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 46, p.GetParserRuleContext()) == 1 { { - p.SetState(494) + p.SetState(517) p.ErrorOperator() } @@ -9758,42 +10034,42 @@ func (s *FunctionCallContext) Accept(visitor antlr.ParseTreeVisitor) interface{} func (p *FqlParser) FunctionCall() (localctx IFunctionCallContext) { localctx = NewFunctionCallContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 102, FqlParserRULE_functionCall) + p.EnterRule(localctx, 104, FqlParserRULE_functionCall) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(497) + p.SetState(520) p.Namespace() } { - p.SetState(498) + p.SetState(521) p.FunctionName() } { - p.SetState(499) + p.SetState(522) p.Match(FqlParserOpenParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(501) + p.SetState(524) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&4467570830286094357) != 0 { + if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(500) + p.SetState(523) p.ArgumentList() } } { - p.SetState(503) + p.SetState(526) p.Match(FqlParserCloseParen) if p.HasError() { // Recognition error - abort rule @@ -9930,8 +10206,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, 104, FqlParserRULE_functionName) - p.SetState(508) + p.EnterRule(localctx, 106, FqlParserRULE_functionName) + p.SetState(531) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -9941,7 +10217,7 @@ func (p *FqlParser) FunctionName() (localctx IFunctionNameContext) { case FqlParserIdentifier: p.EnterOuterAlt(localctx, 1) { - p.SetState(505) + p.SetState(528) p.Match(FqlParserIdentifier) if p.HasError() { // Recognition error - abort rule @@ -9952,14 +10228,14 @@ func (p *FqlParser) FunctionName() (localctx IFunctionNameContext) { case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent: p.EnterOuterAlt(localctx, 2) { - p.SetState(506) + p.SetState(529) p.SafeReservedWord() } - case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn, FqlParserDo, FqlParserWhile: + case FqlParserFor, FqlParserReturn, FqlParserWaitfor, FqlParserLet, FqlParserDo, FqlParserWhile, FqlParserStep, FqlParserNone, FqlParserNull, FqlParserBooleanLiteral, FqlParserUse, FqlParserLike, FqlParserNot, FqlParserIn: p.EnterOuterAlt(localctx, 3) { - p.SetState(507) + p.SetState(530) p.UnsafeReservedWord() } @@ -10111,29 +10387,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, 106, FqlParserRULE_argumentList) + p.EnterRule(localctx, 108, FqlParserRULE_argumentList) var _la int var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(510) + p.SetState(533) p.expression(0) } - p.SetState(515) + p.SetState(538) 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(), 49, p.GetParserRuleContext()) if p.HasError() { goto errorExit } for _alt != 2 && _alt != antlr.ATNInvalidAltNumber { if _alt == 1 { { - p.SetState(511) + p.SetState(534) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -10141,22 +10417,22 @@ func (p *FqlParser) ArgumentList() (localctx IArgumentListContext) { } } { - p.SetState(512) + p.SetState(535) p.expression(0) } } - p.SetState(517) + p.SetState(540) 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(), 49, p.GetParserRuleContext()) if p.HasError() { goto errorExit } } - p.SetState(519) + p.SetState(542) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10165,7 +10441,7 @@ func (p *FqlParser) ArgumentList() (localctx IArgumentListContext) { if _la == FqlParserComma { { - p.SetState(518) + p.SetState(541) p.Match(FqlParserComma) if p.HasError() { // Recognition error - abort rule @@ -10321,19 +10597,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, 108, FqlParserRULE_memberExpressionPath) + p.EnterRule(localctx, 110, FqlParserRULE_memberExpressionPath) var _la int - p.SetState(532) + p.SetState(555) 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(), 53, p.GetParserRuleContext()) { case 1: p.EnterOuterAlt(localctx, 1) - p.SetState(522) + p.SetState(545) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10342,13 +10618,13 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex if _la == FqlParserQuestionMark { { - p.SetState(521) + p.SetState(544) p.ErrorOperator() } } { - p.SetState(524) + p.SetState(547) p.Match(FqlParserDot) if p.HasError() { // Recognition error - abort rule @@ -10356,13 +10632,13 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex } } { - p.SetState(525) + p.SetState(548) p.PropertyName() } case 2: p.EnterOuterAlt(localctx, 2) - p.SetState(529) + p.SetState(552) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -10371,11 +10647,11 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex if _la == FqlParserQuestionMark { { - p.SetState(526) + p.SetState(549) p.ErrorOperator() } { - p.SetState(527) + p.SetState(550) p.Match(FqlParserDot) if p.HasError() { // Recognition error - abort rule @@ -10385,7 +10661,7 @@ func (p *FqlParser) MemberExpressionPath() (localctx IMemberExpressionPathContex } { - p.SetState(531) + p.SetState(554) p.ComputedPropertyName() } @@ -10573,15 +10849,15 @@ func (s *SafeReservedWordContext) Accept(visitor antlr.ParseTreeVisitor) interfa func (p *FqlParser) SafeReservedWord() (localctx ISafeReservedWordContext) { localctx = NewSafeReservedWordContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 110, FqlParserRULE_safeReservedWord) + p.EnterRule(localctx, 112, FqlParserRULE_safeReservedWord) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(534) + p.SetState(557) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&572203169208074240) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&4576888400358932480) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -10618,6 +10894,7 @@ type IUnsafeReservedWordContext interface { Waitfor() antlr.TerminalNode While() antlr.TerminalNode Do() antlr.TerminalNode + Step() antlr.TerminalNode In() antlr.TerminalNode Like() antlr.TerminalNode Not() antlr.TerminalNode @@ -10692,6 +10969,10 @@ func (s *UnsafeReservedWordContext) Do() antlr.TerminalNode { return s.GetToken(FqlParserDo, 0) } +func (s *UnsafeReservedWordContext) Step() antlr.TerminalNode { + return s.GetToken(FqlParserStep, 0) +} + func (s *UnsafeReservedWordContext) In() antlr.TerminalNode { return s.GetToken(FqlParserIn, 0) } @@ -10744,15 +11025,15 @@ func (s *UnsafeReservedWordContext) Accept(visitor antlr.ParseTreeVisitor) inter func (p *FqlParser) UnsafeReservedWord() (localctx IUnsafeReservedWordContext) { localctx = NewUnsafeReservedWordContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 112, FqlParserRULE_unsafeReservedWord) + p.EnterRule(localctx, 114, FqlParserRULE_unsafeReservedWord) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(536) + p.SetState(559) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-572203202762506240) != 0) { + if !((int64((_la-35)) & ^0x3f) == 0 && ((int64(1)<<(_la-35))&940536839) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -10920,17 +11201,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, 114, FqlParserRULE_rangeOperator) + p.EnterRule(localctx, 116, FqlParserRULE_rangeOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(538) + p.SetState(561) var _x = p.RangeOperand() localctx.(*RangeOperatorContext).left = _x } { - p.SetState(539) + p.SetState(562) p.Match(FqlParserRange) if p.HasError() { // Recognition error - abort rule @@ -10938,7 +11219,7 @@ func (p *FqlParser) RangeOperator() (localctx IRangeOperatorContext) { } } { - p.SetState(540) + p.SetState(563) var _x = p.RangeOperand() @@ -11086,8 +11367,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, 116, FqlParserRULE_rangeOperand) - p.SetState(545) + p.EnterRule(localctx, 118, FqlParserRULE_rangeOperand) + p.SetState(568) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -11097,21 +11378,21 @@ func (p *FqlParser) RangeOperand() (localctx IRangeOperandContext) { case FqlParserIntegerLiteral: p.EnterOuterAlt(localctx, 1) { - p.SetState(542) + p.SetState(565) p.IntegerLiteral() } case FqlParserAnd, FqlParserOr, FqlParserOptions, FqlParserTimeout, FqlParserDistinct, FqlParserFilter, FqlParserCurrent, FqlParserSort, FqlParserLimit, FqlParserCollect, FqlParserSortDirection, FqlParserInto, FqlParserKeep, FqlParserWith, FqlParserAll, FqlParserAny, FqlParserAggregate, FqlParserEvent, FqlParserIdentifier: p.EnterOuterAlt(localctx, 2) { - p.SetState(543) + p.SetState(566) p.Variable() } case FqlParserParam: p.EnterOuterAlt(localctx, 3) { - p.SetState(544) + p.SetState(567) p.Param() } @@ -11406,27 +11687,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 := 118 - p.EnterRecursionRule(localctx, 118, FqlParserRULE_expression, _p) + _startState := 120 + p.EnterRecursionRule(localctx, 120, FqlParserRULE_expression, _p) var _la int var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(552) + p.SetState(575) 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(), 55, p.GetParserRuleContext()) { case 1: { - p.SetState(548) + p.SetState(571) p.UnaryOperator() } { - p.SetState(549) + p.SetState(572) var _x = p.expression(5) @@ -11435,7 +11716,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { case 2: { - p.SetState(551) + p.SetState(574) p.predicate(0) } @@ -11443,12 +11724,12 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(571) + p.SetState(594) 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(), 58, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11458,29 +11739,29 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(569) + p.SetState(592) 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(), 57, p.GetParserRuleContext()) { case 1: localctx = NewExpressionContext(p, _parentctx, _parentState) localctx.(*ExpressionContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expression) - p.SetState(554) + p.SetState(577) if !(p.Precpred(p.GetParserRuleContext(), 4)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) goto errorExit } { - p.SetState(555) + p.SetState(578) p.LogicalAndOperator() } { - p.SetState(556) + p.SetState(579) var _x = p.expression(5) @@ -11491,18 +11772,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(558) + p.SetState(581) if !(p.Precpred(p.GetParserRuleContext(), 3)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) goto errorExit } { - p.SetState(559) + p.SetState(582) p.LogicalOrOperator() } { - p.SetState(560) + p.SetState(583) var _x = p.expression(4) @@ -11513,14 +11794,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(562) + p.SetState(585) if !(p.Precpred(p.GetParserRuleContext(), 2)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) goto errorExit } { - p.SetState(563) + p.SetState(586) var _m = p.Match(FqlParserQuestionMark) @@ -11530,16 +11811,16 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { goto errorExit } } - p.SetState(565) + p.SetState(588) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit } _la = p.GetTokenStream().LA(1) - if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&4467570830286094357) != 0 { + if (int64((_la-9)) & ^0x3f) == 0 && ((int64(1)<<(_la-9))&8935141660637626389) != 0 { { - p.SetState(564) + p.SetState(587) var _x = p.expression(0) @@ -11548,7 +11829,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } { - p.SetState(567) + p.SetState(590) p.Match(FqlParserColon) if p.HasError() { // Recognition error - abort rule @@ -11556,7 +11837,7 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } } { - p.SetState(568) + p.SetState(591) var _x = p.expression(3) @@ -11568,12 +11849,12 @@ func (p *FqlParser) expression(_p int) (localctx IExpressionContext) { } } - p.SetState(573) + p.SetState(596) 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(), 58, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11828,23 +12109,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 := 120 - p.EnterRecursionRule(localctx, 120, FqlParserRULE_predicate, _p) + _startState := 122 + p.EnterRecursionRule(localctx, 122, FqlParserRULE_predicate, _p) var _alt int p.EnterOuterAlt(localctx, 1) { - p.SetState(575) + p.SetState(598) p.expressionAtom(0) } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(595) + p.SetState(618) 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(), 60, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -11854,29 +12135,29 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(593) + p.SetState(616) 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(), 59, p.GetParserRuleContext()) { case 1: localctx = NewPredicateContext(p, _parentctx, _parentState) localctx.(*PredicateContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_predicate) - p.SetState(577) + p.SetState(600) if !(p.Precpred(p.GetParserRuleContext(), 5)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 5)", "")) goto errorExit } { - p.SetState(578) + p.SetState(601) p.EqualityOperator() } { - p.SetState(579) + p.SetState(602) var _x = p.predicate(6) @@ -11887,18 +12168,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(581) + p.SetState(604) if !(p.Precpred(p.GetParserRuleContext(), 4)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 4)", "")) goto errorExit } { - p.SetState(582) + p.SetState(605) p.ArrayOperator() } { - p.SetState(583) + p.SetState(606) var _x = p.predicate(5) @@ -11909,18 +12190,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(585) + p.SetState(608) if !(p.Precpred(p.GetParserRuleContext(), 3)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 3)", "")) goto errorExit } { - p.SetState(586) + p.SetState(609) p.InOperator() } { - p.SetState(587) + p.SetState(610) var _x = p.predicate(4) @@ -11931,18 +12212,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(589) + p.SetState(612) if !(p.Precpred(p.GetParserRuleContext(), 2)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 2)", "")) goto errorExit } { - p.SetState(590) + p.SetState(613) p.LikeOperator() } { - p.SetState(591) + p.SetState(614) var _x = p.predicate(3) @@ -11954,12 +12235,12 @@ func (p *FqlParser) predicate(_p int) (localctx IPredicateContext) { } } - p.SetState(597) + p.SetState(620) 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(), 60, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12360,85 +12641,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 := 122 - p.EnterRecursionRule(localctx, 122, FqlParserRULE_expressionAtom, _p) + _startState := 124 + p.EnterRecursionRule(localctx, 124, FqlParserRULE_expressionAtom, _p) var _alt int p.EnterOuterAlt(localctx, 1) - p.SetState(615) + p.SetState(638) 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(), 63, p.GetParserRuleContext()) { case 1: { - p.SetState(599) + p.SetState(622) p.FunctionCallExpression() } case 2: { - p.SetState(600) + p.SetState(623) p.RangeOperator() } case 3: { - p.SetState(601) + p.SetState(624) p.Literal() } case 4: { - p.SetState(602) + p.SetState(625) p.Variable() } case 5: { - p.SetState(603) + p.SetState(626) p.MemberExpression() } case 6: { - p.SetState(604) + p.SetState(627) p.Param() } case 7: { - p.SetState(605) + p.SetState(628) p.Match(FqlParserOpenParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(609) + p.SetState(632) 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(), 61, p.GetParserRuleContext()) { case 1: { - p.SetState(606) + p.SetState(629) p.ForExpression() } case 2: { - p.SetState(607) + p.SetState(630) p.WaitForExpression() } case 3: { - p.SetState(608) + p.SetState(631) p.expression(0) } @@ -12446,19 +12727,19 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { goto errorExit } { - p.SetState(611) + p.SetState(634) p.Match(FqlParserCloseParen) if p.HasError() { // Recognition error - abort rule goto errorExit } } - p.SetState(613) + p.SetState(636) p.GetErrorHandler().Sync(p) - if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 60, p.GetParserRuleContext()) == 1 { + if p.GetInterpreter().AdaptivePredict(p.BaseParser, p.GetTokenStream(), 62, p.GetParserRuleContext()) == 1 { { - p.SetState(612) + p.SetState(635) p.ErrorOperator() } @@ -12470,12 +12751,12 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { goto errorExit } p.GetParserRuleContext().SetStop(p.GetTokenStream().LT(-1)) - p.SetState(631) + p.SetState(654) 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(), 65, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12485,29 +12766,29 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { p.TriggerExitRuleEvent() } _prevctx = localctx - p.SetState(629) + p.SetState(652) 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(), 64, p.GetParserRuleContext()) { case 1: localctx = NewExpressionAtomContext(p, _parentctx, _parentState) localctx.(*ExpressionAtomContext).left = _prevctx p.PushNewRecursionContext(localctx, _startState, FqlParserRULE_expressionAtom) - p.SetState(617) + p.SetState(640) if !(p.Precpred(p.GetParserRuleContext(), 10)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 10)", "")) goto errorExit } { - p.SetState(618) + p.SetState(641) p.MultiplicativeOperator() } { - p.SetState(619) + p.SetState(642) var _x = p.expressionAtom(11) @@ -12518,18 +12799,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(621) + p.SetState(644) if !(p.Precpred(p.GetParserRuleContext(), 9)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 9)", "")) goto errorExit } { - p.SetState(622) + p.SetState(645) p.AdditiveOperator() } { - p.SetState(623) + p.SetState(646) var _x = p.expressionAtom(10) @@ -12540,18 +12821,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(625) + p.SetState(648) if !(p.Precpred(p.GetParserRuleContext(), 8)) { p.SetError(antlr.NewFailedPredicateException(p, "p.Precpred(p.GetParserRuleContext(), 8)", "")) goto errorExit } { - p.SetState(626) + p.SetState(649) p.RegexpOperator() } { - p.SetState(627) + p.SetState(650) var _x = p.expressionAtom(9) @@ -12563,12 +12844,12 @@ func (p *FqlParser) expressionAtom(_p int) (localctx IExpressionAtomContext) { } } - p.SetState(633) + p.SetState(656) 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(), 65, p.GetParserRuleContext()) if p.HasError() { goto errorExit } @@ -12724,12 +13005,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, 124, FqlParserRULE_arrayOperator) + p.EnterRule(localctx, 126, FqlParserRULE_arrayOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(634) + p.SetState(657) var _lt = p.GetTokenStream().LT(1) @@ -12737,7 +13018,7 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&108367866033602560) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&866942928268820480) != 0) { var _ri = p.GetErrorHandler().RecoverInline(p) localctx.(*ArrayOperatorContext).operator = _ri @@ -12746,7 +13027,7 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { p.Consume() } } - p.SetState(637) + p.SetState(660) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -12755,13 +13036,13 @@ func (p *FqlParser) ArrayOperator() (localctx IArrayOperatorContext) { switch p.GetTokenStream().LA(1) { case FqlParserNot, FqlParserIn: { - p.SetState(635) + p.SetState(658) p.InOperator() } case FqlParserGt, FqlParserLt, FqlParserEq, FqlParserGte, FqlParserLte, FqlParserNeq: { - p.SetState(636) + p.SetState(659) p.EqualityOperator() } @@ -12890,12 +13171,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, 126, FqlParserRULE_equalityOperator) + p.EnterRule(localctx, 128, FqlParserRULE_equalityOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(639) + p.SetState(662) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&2064384) != 0) { @@ -13006,11 +13287,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, 128, FqlParserRULE_inOperator) + p.EnterRule(localctx, 130, FqlParserRULE_inOperator) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(642) + p.SetState(665) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13019,7 +13300,7 @@ func (p *FqlParser) InOperator() (localctx IInOperatorContext) { if _la == FqlParserNot { { - p.SetState(641) + p.SetState(664) p.Match(FqlParserNot) if p.HasError() { // Recognition error - abort rule @@ -13029,7 +13310,7 @@ func (p *FqlParser) InOperator() (localctx IInOperatorContext) { } { - p.SetState(644) + p.SetState(667) p.Match(FqlParserIn) if p.HasError() { // Recognition error - abort rule @@ -13137,11 +13418,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, 130, FqlParserRULE_likeOperator) + p.EnterRule(localctx, 132, FqlParserRULE_likeOperator) var _la int p.EnterOuterAlt(localctx, 1) - p.SetState(647) + p.SetState(670) p.GetErrorHandler().Sync(p) if p.HasError() { goto errorExit @@ -13150,7 +13431,7 @@ func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) { if _la == FqlParserNot { { - p.SetState(646) + p.SetState(669) p.Match(FqlParserNot) if p.HasError() { // Recognition error - abort rule @@ -13160,7 +13441,7 @@ func (p *FqlParser) LikeOperator() (localctx ILikeOperatorContext) { } { - p.SetState(649) + p.SetState(672) p.Match(FqlParserLike) if p.HasError() { // Recognition error - abort rule @@ -13273,15 +13554,15 @@ func (s *UnaryOperatorContext) Accept(visitor antlr.ParseTreeVisitor) interface{ func (p *FqlParser) UnaryOperator() (localctx IUnaryOperatorContext) { localctx = NewUnaryOperatorContext(p, p.GetParserRuleContext(), p.GetState()) - p.EnterRule(localctx, 132, FqlParserRULE_unaryOperator) + p.EnterRule(localctx, 134, FqlParserRULE_unaryOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(651) + p.SetState(674) _la = p.GetTokenStream().LA(1) - if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&1152921504657178624) != 0) { + if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&-9223372036804444160) != 0) { p.GetErrorHandler().RecoverInline(p) } else { p.GetErrorHandler().ReportMatch(p) @@ -13389,12 +13670,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, 134, FqlParserRULE_regexpOperator) + p.EnterRule(localctx, 136, FqlParserRULE_regexpOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(653) + p.SetState(676) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserRegexNotMatch || _la == FqlParserRegexMatch) { @@ -13500,10 +13781,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, 136, FqlParserRULE_logicalAndOperator) + p.EnterRule(localctx, 138, FqlParserRULE_logicalAndOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(655) + p.SetState(678) p.Match(FqlParserAnd) if p.HasError() { // Recognition error - abort rule @@ -13606,10 +13887,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, 138, FqlParserRULE_logicalOrOperator) + p.EnterRule(localctx, 140, FqlParserRULE_logicalOrOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(657) + p.SetState(680) p.Match(FqlParserOr) if p.HasError() { // Recognition error - abort rule @@ -13722,12 +14003,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, 140, FqlParserRULE_multiplicativeOperator) + p.EnterRule(localctx, 142, FqlParserRULE_multiplicativeOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(659) + p.SetState(682) _la = p.GetTokenStream().LA(1) if !((int64(_la) & ^0x3f) == 0 && ((int64(1)<<_la)&14680064) != 0) { @@ -13838,12 +14119,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, 142, FqlParserRULE_additiveOperator) + p.EnterRule(localctx, 144, FqlParserRULE_additiveOperator) var _la int p.EnterOuterAlt(localctx, 1) { - p.SetState(661) + p.SetState(684) _la = p.GetTokenStream().LA(1) if !(_la == FqlParserPlus || _la == FqlParserMinus) { @@ -13949,10 +14230,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, 144, FqlParserRULE_errorOperator) + p.EnterRule(localctx, 146, FqlParserRULE_errorOperator) p.EnterOuterAlt(localctx, 1) { - p.SetState(663) + p.SetState(686) p.Match(FqlParserQuestionMark) if p.HasError() { // Recognition error - abort rule @@ -13975,21 +14256,21 @@ errorExit: func (p *FqlParser) Sempred(localctx antlr.RuleContext, ruleIndex, predIndex int) bool { switch ruleIndex { - case 59: + case 60: var t *ExpressionContext = nil if localctx != nil { t = localctx.(*ExpressionContext) } return p.Expression_Sempred(t, predIndex) - case 60: + case 61: var t *PredicateContext = nil if localctx != nil { t = localctx.(*PredicateContext) } return p.Predicate_Sempred(t, predIndex) - case 61: + case 62: 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 33fe7914..60f21046 100644 --- a/pkg/parser/fql/fqlparser_base_listener.go +++ b/pkg/parser/fql/fqlparser_base_listener.go @@ -110,6 +110,14 @@ func (s *BaseFqlParserListener) EnterForExpressionReturn(ctx *ForExpressionRetur // ExitForExpressionReturn is called when production forExpressionReturn is exited. func (s *BaseFqlParserListener) ExitForExpressionReturn(ctx *ForExpressionReturnContext) {} +// EnterForExpressionStepAssignment is called when production forExpressionStepAssignment is entered. +func (s *BaseFqlParserListener) EnterForExpressionStepAssignment(ctx *ForExpressionStepAssignmentContext) { +} + +// ExitForExpressionStepAssignment is called when production forExpressionStepAssignment is exited. +func (s *BaseFqlParserListener) ExitForExpressionStepAssignment(ctx *ForExpressionStepAssignmentContext) { +} + // EnterFilterClause is called when production filterClause is entered. func (s *BaseFqlParserListener) EnterFilterClause(ctx *FilterClauseContext) {} diff --git a/pkg/parser/fql/fqlparser_base_visitor.go b/pkg/parser/fql/fqlparser_base_visitor.go index 269cc284..5818a6a8 100644 --- a/pkg/parser/fql/fqlparser_base_visitor.go +++ b/pkg/parser/fql/fqlparser_base_visitor.go @@ -67,6 +67,10 @@ func (v *BaseFqlParserVisitor) VisitForExpressionReturn(ctx *ForExpressionReturn return v.VisitChildren(ctx) } +func (v *BaseFqlParserVisitor) VisitForExpressionStepAssignment(ctx *ForExpressionStepAssignmentContext) interface{} { + return v.VisitChildren(ctx) +} + func (v *BaseFqlParserVisitor) VisitFilterClause(ctx *FilterClauseContext) interface{} { return v.VisitChildren(ctx) } diff --git a/pkg/parser/fql/fqlparser_listener.go b/pkg/parser/fql/fqlparser_listener.go index 9c48c728..a5004949 100644 --- a/pkg/parser/fql/fqlparser_listener.go +++ b/pkg/parser/fql/fqlparser_listener.go @@ -52,6 +52,9 @@ type FqlParserListener interface { // EnterForExpressionReturn is called when entering the forExpressionReturn production. EnterForExpressionReturn(c *ForExpressionReturnContext) + // EnterForExpressionStepAssignment is called when entering the forExpressionStepAssignment production. + EnterForExpressionStepAssignment(c *ForExpressionStepAssignmentContext) + // EnterFilterClause is called when entering the filterClause production. EnterFilterClause(c *FilterClauseContext) @@ -271,6 +274,9 @@ type FqlParserListener interface { // ExitForExpressionReturn is called when exiting the forExpressionReturn production. ExitForExpressionReturn(c *ForExpressionReturnContext) + // ExitForExpressionStepAssignment is called when exiting the forExpressionStepAssignment production. + ExitForExpressionStepAssignment(c *ForExpressionStepAssignmentContext) + // ExitFilterClause is called when exiting the filterClause production. ExitFilterClause(c *FilterClauseContext) diff --git a/pkg/parser/fql/fqlparser_visitor.go b/pkg/parser/fql/fqlparser_visitor.go index 600fbe55..06c48a87 100644 --- a/pkg/parser/fql/fqlparser_visitor.go +++ b/pkg/parser/fql/fqlparser_visitor.go @@ -52,6 +52,9 @@ type FqlParserVisitor interface { // Visit a parse tree produced by FqlParser#forExpressionReturn. VisitForExpressionReturn(ctx *ForExpressionReturnContext) interface{} + // Visit a parse tree produced by FqlParser#forExpressionStepAssignment. + VisitForExpressionStepAssignment(ctx *ForExpressionStepAssignmentContext) interface{} + // Visit a parse tree produced by FqlParser#filterClause. VisitFilterClause(ctx *FilterClauseContext) interface{} diff --git a/test/integration/vm/vm_for_while_collect_test.go b/test/integration/vm/vm_for_while_collect_test.go index c40c29d9..53095774 100644 --- a/test/integration/vm/vm_for_while_collect_test.go +++ b/test/integration/vm/vm_for_while_collect_test.go @@ -420,7 +420,8 @@ LET users = [ } ] FOR i WHILE UNTIL(LENGTH(users)) - COLLECT gender = users[i].gender, age = users[i].age INTO genders = { active: users[i].active } + LET user = users[i] + COLLECT gender = user.gender, age = user.age INTO genders = { active: user.active } RETURN { age, gender, diff --git a/test/integration/vm/vm_for_while_distinct_test.go b/test/integration/vm/vm_for_while_distinct_test.go index 5271232d..da67fa3f 100644 --- a/test/integration/vm/vm_for_while_distinct_test.go +++ b/test/integration/vm/vm_for_while_distinct_test.go @@ -140,7 +140,7 @@ func TestForWhileDistinct(t *testing.T) { `, []any{ map[string]any{"active": true}, }), - SkipCaseArray(` + CaseArray(` LET users = [ { active: true, @@ -208,7 +208,7 @@ func TestForWhileDistinct(t *testing.T) { `, []any{nil, 25, 45}, "Should handle null values with DISTINCT"), // Test DISTINCT with nested FOR loops - SkipCaseArray(` + CaseArray(` LET departments = ["IT", "Marketing", "HR"] LET genders = ["m", "f"]