From 4b824fb50004c0938171d887a21e761fdb62df89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=8E=E8=BF=82=E8=BF=82?= Date: Tue, 23 May 2023 10:12:05 +0800 Subject: [PATCH] feat(flink): support NOT NULL syntax (#103) * feat(flink): support NOT NULL syntax * feat(flinksql): support NULL --- src/grammar/flinksql/FlinkSqlParser.g4 | 2 +- src/lib/flinksql/FlinkSqlLexer.ts | 2 +- src/lib/flinksql/FlinkSqlParser.interp | 2 +- src/lib/flinksql/FlinkSqlParser.ts | 3941 +++++++++-------- src/lib/flinksql/FlinkSqlParserListener.ts | 2 +- src/lib/flinksql/FlinkSqlParserVisitor.ts | 2 +- .../flinksql/syntax/fixtures/createTable.sql | 70 + .../flinksql/syntax/fixtures/createView.sql | 21 +- 8 files changed, 2086 insertions(+), 1956 deletions(-) diff --git a/src/grammar/flinksql/FlinkSqlParser.g4 b/src/grammar/flinksql/FlinkSqlParser.g4 index 01ed32b..7109cc2 100644 --- a/src/grammar/flinksql/FlinkSqlParser.g4 +++ b/src/grammar/flinksql/FlinkSqlParser.g4 @@ -180,7 +180,7 @@ rowTypeDimension ; columnConstraint - :(KW_CONSTRAINT constraintName)? KW_PRIMARY KW_KEY KW_NOT KW_ENFORCED + :(KW_CONSTRAINT constraintName)? KW_PRIMARY KW_KEY (KW_NOT KW_ENFORCED)? | KW_NOT? KW_NULL ; commentSpec diff --git a/src/lib/flinksql/FlinkSqlLexer.ts b/src/lib/flinksql/FlinkSqlLexer.ts index 3ac14ff..70d9a2f 100644 --- a/src/lib/flinksql/FlinkSqlLexer.ts +++ b/src/lib/flinksql/FlinkSqlLexer.ts @@ -1,4 +1,4 @@ -// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0 +// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlLexer.g4 by ANTLR 4.12.0 // noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols import { ATN, diff --git a/src/lib/flinksql/FlinkSqlParser.interp b/src/lib/flinksql/FlinkSqlParser.interp index b7b72fa..d35507d 100644 --- a/src/lib/flinksql/FlinkSqlParser.interp +++ b/src/lib/flinksql/FlinkSqlParser.interp @@ -988,4 +988,4 @@ nonReservedKeywords atn: -[4, 1, 402, 2121, 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, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 361, 8, 2, 1, 2, 5, 2, 364, 8, 2, 10, 2, 12, 2, 367, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 381, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 399, 8, 5, 1, 6, 1, 6, 3, 6, 403, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 412, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 417, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 422, 8, 9, 10, 9, 12, 9, 425, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 431, 8, 11, 1, 11, 1, 11, 3, 11, 435, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 442, 8, 12, 10, 12, 12, 12, 445, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 456, 8, 13, 1, 13, 3, 13, 459, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 466, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 474, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 479, 8, 13, 1, 13, 3, 13, 482, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 489, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 497, 8, 16, 1, 17, 1, 17, 3, 17, 501, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 513, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 521, 8, 19, 1, 19, 1, 19, 3, 19, 525, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 546, 8, 19, 1, 20, 1, 20, 3, 20, 550, 8, 20, 1, 21, 1, 21, 3, 21, 554, 8, 21, 1, 21, 1, 21, 3, 21, 558, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 565, 8, 21, 10, 21, 12, 21, 568, 9, 21, 1, 21, 1, 21, 3, 21, 572, 8, 21, 1, 21, 1, 21, 3, 21, 576, 8, 21, 1, 21, 1, 21, 3, 21, 580, 8, 21, 1, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 3, 21, 587, 8, 21, 1, 21, 1, 21, 3, 21, 591, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 596, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 602, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 607, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 612, 8, 24, 1, 24, 3, 24, 615, 8, 24, 1, 25, 1, 25, 3, 25, 619, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 625, 8, 26, 10, 26, 12, 26, 628, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 635, 8, 27, 1, 27, 1, 27, 3, 27, 639, 8, 27, 1, 27, 1, 27, 3, 27, 643, 8, 27, 1, 27, 1, 27, 3, 27, 647, 8, 27, 1, 27, 1, 27, 3, 27, 651, 8, 27, 1, 27, 1, 27, 3, 27, 655, 8, 27, 1, 27, 1, 27, 3, 27, 659, 8, 27, 1, 27, 1, 27, 3, 27, 663, 8, 27, 1, 27, 1, 27, 3, 27, 667, 8, 27, 3, 27, 669, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 679, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 687, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 709, 8, 33, 10, 33, 12, 33, 712, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 718, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 733, 8, 36, 1, 36, 3, 36, 736, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 744, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 756, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 778, 8, 45, 10, 45, 12, 45, 781, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 791, 8, 46, 10, 46, 12, 46, 794, 9, 46, 1, 46, 1, 46, 3, 46, 798, 8, 46, 1, 47, 1, 47, 3, 47, 802, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 808, 8, 48, 10, 48, 12, 48, 811, 9, 48, 1, 48, 3, 48, 814, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 822, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 832, 8, 52, 1, 52, 1, 52, 3, 52, 836, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 842, 8, 53, 1, 53, 1, 53, 3, 53, 846, 8, 53, 1, 53, 1, 53, 3, 53, 850, 8, 53, 1, 53, 3, 53, 853, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 862, 8, 54, 1, 54, 1, 54, 3, 54, 866, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 873, 8, 54, 1, 54, 3, 54, 876, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 884, 8, 55, 10, 55, 12, 55, 887, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 894, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 902, 8, 57, 1, 58, 1, 58, 3, 58, 906, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 921, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 940, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 951, 8, 66, 1, 66, 1, 66, 3, 66, 955, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 962, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 967, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 973, 8, 68, 1, 68, 1, 68, 3, 68, 977, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 984, 8, 69, 1, 69, 1, 69, 3, 69, 988, 8, 69, 1, 70, 1, 70, 3, 70, 992, 8, 70, 1, 70, 1, 70, 3, 70, 996, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1004, 8, 71, 1, 71, 1, 71, 3, 71, 1008, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1013, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1018, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1024, 8, 73, 1, 73, 3, 73, 1027, 8, 73, 1, 73, 1, 73, 3, 73, 1031, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1040, 8, 75, 10, 75, 12, 75, 1043, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1049, 8, 76, 10, 76, 12, 76, 1052, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1062, 8, 77, 11, 77, 12, 77, 1063, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1079, 8, 78, 1, 78, 3, 78, 1082, 8, 78, 1, 78, 1, 78, 3, 78, 1086, 8, 78, 1, 78, 3, 78, 1089, 8, 78, 3, 78, 1091, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1096, 8, 78, 1, 78, 1, 78, 3, 78, 1100, 8, 78, 1, 78, 3, 78, 1103, 8, 78, 5, 78, 1105, 8, 78, 10, 78, 12, 78, 1108, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1114, 8, 79, 10, 79, 12, 79, 1117, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1123, 8, 80, 10, 80, 12, 80, 1126, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1133, 8, 81, 10, 81, 12, 81, 1136, 9, 81, 1, 81, 1, 81, 3, 81, 1140, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 3, 83, 1152, 8, 83, 1, 83, 3, 83, 1155, 8, 83, 1, 83, 3, 83, 1158, 8, 83, 1, 83, 3, 83, 1161, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1167, 8, 83, 1, 84, 1, 84, 3, 84, 1171, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1177, 8, 84, 10, 84, 12, 84, 1180, 9, 84, 3, 84, 1182, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1187, 8, 85, 1, 85, 3, 85, 1190, 8, 85, 3, 85, 1192, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1206, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1215, 8, 88, 10, 88, 12, 88, 1218, 9, 88, 1, 88, 1, 88, 3, 88, 1222, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1230, 8, 88, 1, 88, 3, 88, 1233, 8, 88, 1, 88, 3, 88, 1236, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1241, 8, 88, 5, 88, 1243, 8, 88, 10, 88, 12, 88, 1246, 9, 88, 1, 89, 1, 89, 3, 89, 1250, 8, 89, 1, 90, 3, 90, 1253, 8, 90, 1, 90, 1, 90, 3, 90, 1257, 8, 90, 1, 90, 3, 90, 1260, 8, 90, 1, 90, 3, 90, 1263, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1273, 8, 90, 10, 90, 12, 90, 1276, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1282, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1293, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1320, 8, 96, 10, 96, 12, 96, 1323, 9, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1344, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1360, 8, 101, 10, 101, 12, 101, 1363, 9, 101, 1, 101, 1, 101, 3, 101, 1367, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1377, 8, 103, 10, 103, 12, 103, 1380, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1390, 8, 104, 10, 104, 12, 104, 1393, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1402, 8, 104, 10, 104, 12, 104, 1405, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1414, 8, 104, 10, 104, 12, 104, 1417, 9, 104, 1, 104, 1, 104, 3, 104, 1421, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1446, 8, 111, 10, 111, 12, 111, 1449, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1456, 8, 113, 1, 113, 1, 113, 3, 113, 1460, 8, 113, 1, 113, 3, 113, 1463, 8, 113, 1, 113, 3, 113, 1466, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1473, 8, 114, 1, 114, 3, 114, 1476, 8, 114, 1, 114, 3, 114, 1479, 8, 114, 1, 114, 3, 114, 1482, 8, 114, 1, 114, 3, 114, 1485, 8, 114, 1, 114, 3, 114, 1488, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1493, 8, 114, 1, 114, 3, 114, 1496, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1503, 8, 115, 10, 115, 12, 115, 1506, 9, 115, 1, 116, 1, 116, 3, 116, 1510, 8, 116, 1, 116, 1, 116, 3, 116, 1514, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1519, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1526, 8, 118, 10, 118, 12, 118, 1529, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1547, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1553, 8, 120, 10, 120, 12, 120, 1556, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1561, 8, 121, 11, 121, 12, 121, 1562, 1, 121, 1, 121, 3, 121, 1567, 8, 121, 1, 122, 1, 122, 3, 122, 1571, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1581, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1607, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1613, 8, 125, 10, 125, 12, 125, 1616, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1627, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1649, 8, 130, 3, 130, 1651, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 1659, 8, 130, 10, 130, 12, 130, 1662, 9, 130, 1, 131, 3, 131, 1665, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1673, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1680, 8, 131, 10, 131, 12, 131, 1683, 9, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1688, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1701, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1706, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1716, 8, 131, 10, 131, 12, 131, 1719, 9, 131, 1, 131, 1, 131, 3, 131, 1723, 8, 131, 1, 131, 3, 131, 1726, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1732, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1737, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1742, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1747, 8, 131, 1, 132, 3, 132, 1750, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1760, 8, 132, 10, 132, 12, 132, 1763, 9, 132, 1, 132, 1, 132, 3, 132, 1767, 8, 132, 1, 132, 3, 132, 1770, 8, 132, 1, 132, 1, 132, 3, 132, 1774, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1780, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1801, 8, 133, 10, 133, 12, 133, 1804, 9, 133, 1, 134, 1, 134, 1, 134, 4, 134, 1809, 8, 134, 11, 134, 12, 134, 1810, 1, 134, 1, 134, 3, 134, 1815, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1822, 8, 134, 11, 134, 12, 134, 1823, 1, 134, 1, 134, 3, 134, 1828, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1844, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1853, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1877, 8, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1882, 8, 134, 10, 134, 12, 134, 1885, 9, 134, 3, 134, 1887, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1897, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1904, 8, 134, 10, 134, 12, 134, 1907, 9, 134, 1, 135, 1, 135, 1, 135, 3, 135, 1912, 8, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 1920, 8, 138, 1, 139, 1, 139, 1, 139, 3, 139, 1925, 8, 139, 1, 140, 1, 140, 3, 140, 1929, 8, 140, 1, 141, 1, 141, 1, 141, 4, 141, 1934, 8, 141, 11, 141, 12, 141, 1935, 1, 142, 1, 142, 1, 142, 3, 142, 1941, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 3, 144, 1949, 8, 144, 1, 144, 1, 144, 3, 144, 1953, 8, 144, 1, 145, 1, 145, 3, 145, 1957, 8, 145, 1, 146, 3, 146, 1960, 8, 146, 1, 146, 1, 146, 3, 146, 1964, 8, 146, 1, 147, 3, 147, 1967, 8, 147, 1, 147, 1, 147, 3, 147, 1971, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1978, 8, 149, 11, 149, 12, 149, 1979, 1, 149, 3, 149, 1983, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 1992, 8, 151, 10, 151, 12, 151, 1995, 9, 151, 1, 152, 1, 152, 1, 152, 3, 152, 2000, 8, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 5, 156, 2014, 8, 156, 10, 156, 12, 156, 2017, 9, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 2033, 8, 160, 10, 160, 12, 160, 2036, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 3, 161, 2042, 8, 161, 1, 161, 3, 161, 2045, 8, 161, 1, 162, 1, 162, 1, 162, 3, 162, 2050, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2056, 8, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 2064, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2080, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2089, 8, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2104, 8, 169, 1, 169, 3, 169, 2107, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 2015, 5, 156, 176, 260, 266, 268, 176, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 0, 41, 2, 0, 30, 30, 231, 231, 3, 0, 16, 16, 37, 37, 67, 67, 4, 0, 13, 13, 26, 26, 64, 64, 166, 166, 2, 0, 12, 12, 25, 25, 2, 0, 248, 248, 259, 259, 2, 0, 165, 165, 337, 337, 2, 0, 4, 4, 117, 117, 1, 0, 107, 111, 3, 0, 192, 192, 222, 222, 295, 295, 11, 0, 10, 10, 145, 145, 151, 151, 188, 189, 201, 201, 223, 223, 264, 265, 329, 329, 340, 340, 342, 342, 356, 357, 2, 0, 361, 361, 363, 363, 4, 0, 225, 226, 233, 233, 246, 246, 296, 296, 2, 0, 182, 182, 289, 289, 2, 0, 40, 40, 260, 260, 3, 0, 21, 21, 95, 95, 176, 176, 3, 0, 40, 40, 93, 93, 260, 260, 3, 0, 52, 52, 89, 89, 169, 169, 3, 0, 65, 65, 106, 106, 125, 125, 2, 0, 11, 11, 122, 122, 2, 0, 92, 92, 268, 268, 3, 0, 239, 239, 266, 266, 346, 346, 4, 0, 249, 249, 261, 261, 275, 275, 318, 318, 3, 0, 23, 23, 56, 56, 155, 155, 5, 0, 24, 24, 138, 139, 144, 144, 150, 150, 298, 298, 2, 0, 218, 218, 321, 321, 3, 0, 56, 56, 135, 135, 155, 155, 2, 0, 8, 8, 30, 30, 2, 0, 44, 44, 72, 72, 2, 0, 176, 176, 180, 180, 2, 0, 245, 245, 344, 344, 2, 0, 369, 369, 389, 390, 4, 0, 32, 32, 387, 387, 391, 391, 394, 394, 2, 0, 389, 390, 392, 392, 1, 0, 389, 390, 1, 0, 398, 399, 2, 0, 398, 398, 401, 401, 4, 0, 32, 32, 387, 387, 389, 391, 393, 394, 3, 0, 294, 294, 368, 369, 389, 390, 2, 0, 176, 176, 232, 232, 1, 0, 175, 364, 1, 0, 4, 174, 2302, 0, 352, 1, 0, 0, 0, 2, 355, 1, 0, 0, 0, 4, 365, 1, 0, 0, 0, 6, 380, 1, 0, 0, 0, 8, 382, 1, 0, 0, 0, 10, 398, 1, 0, 0, 0, 12, 402, 1, 0, 0, 0, 14, 404, 1, 0, 0, 0, 16, 407, 1, 0, 0, 0, 18, 418, 1, 0, 0, 0, 20, 426, 1, 0, 0, 0, 22, 434, 1, 0, 0, 0, 24, 436, 1, 0, 0, 0, 26, 481, 1, 0, 0, 0, 28, 483, 1, 0, 0, 0, 30, 490, 1, 0, 0, 0, 32, 494, 1, 0, 0, 0, 34, 498, 1, 0, 0, 0, 36, 502, 1, 0, 0, 0, 38, 545, 1, 0, 0, 0, 40, 549, 1, 0, 0, 0, 42, 551, 1, 0, 0, 0, 44, 592, 1, 0, 0, 0, 46, 606, 1, 0, 0, 0, 48, 608, 1, 0, 0, 0, 50, 618, 1, 0, 0, 0, 52, 620, 1, 0, 0, 0, 54, 668, 1, 0, 0, 0, 56, 670, 1, 0, 0, 0, 58, 674, 1, 0, 0, 0, 60, 682, 1, 0, 0, 0, 62, 690, 1, 0, 0, 0, 64, 694, 1, 0, 0, 0, 66, 701, 1, 0, 0, 0, 68, 717, 1, 0, 0, 0, 70, 724, 1, 0, 0, 0, 72, 727, 1, 0, 0, 0, 74, 737, 1, 0, 0, 0, 76, 739, 1, 0, 0, 0, 78, 745, 1, 0, 0, 0, 80, 747, 1, 0, 0, 0, 82, 755, 1, 0, 0, 0, 84, 763, 1, 0, 0, 0, 86, 765, 1, 0, 0, 0, 88, 769, 1, 0, 0, 0, 90, 773, 1, 0, 0, 0, 92, 797, 1, 0, 0, 0, 94, 801, 1, 0, 0, 0, 96, 803, 1, 0, 0, 0, 98, 815, 1, 0, 0, 0, 100, 821, 1, 0, 0, 0, 102, 823, 1, 0, 0, 0, 104, 828, 1, 0, 0, 0, 106, 839, 1, 0, 0, 0, 108, 857, 1, 0, 0, 0, 110, 877, 1, 0, 0, 0, 112, 888, 1, 0, 0, 0, 114, 890, 1, 0, 0, 0, 116, 903, 1, 0, 0, 0, 118, 910, 1, 0, 0, 0, 120, 913, 1, 0, 0, 0, 122, 922, 1, 0, 0, 0, 124, 926, 1, 0, 0, 0, 126, 930, 1, 0, 0, 0, 128, 933, 1, 0, 0, 0, 130, 941, 1, 0, 0, 0, 132, 946, 1, 0, 0, 0, 134, 963, 1, 0, 0, 0, 136, 970, 1, 0, 0, 0, 138, 980, 1, 0, 0, 0, 140, 989, 1, 0, 0, 0, 142, 999, 1, 0, 0, 0, 144, 1017, 1, 0, 0, 0, 146, 1019, 1, 0, 0, 0, 148, 1032, 1, 0, 0, 0, 150, 1035, 1, 0, 0, 0, 152, 1044, 1, 0, 0, 0, 154, 1055, 1, 0, 0, 0, 156, 1090, 1, 0, 0, 0, 158, 1109, 1, 0, 0, 0, 160, 1118, 1, 0, 0, 0, 162, 1127, 1, 0, 0, 0, 164, 1146, 1, 0, 0, 0, 166, 1166, 1, 0, 0, 0, 168, 1168, 1, 0, 0, 0, 170, 1191, 1, 0, 0, 0, 172, 1205, 1, 0, 0, 0, 174, 1207, 1, 0, 0, 0, 176, 1221, 1, 0, 0, 0, 178, 1247, 1, 0, 0, 0, 180, 1292, 1, 0, 0, 0, 182, 1294, 1, 0, 0, 0, 184, 1296, 1, 0, 0, 0, 186, 1302, 1, 0, 0, 0, 188, 1304, 1, 0, 0, 0, 190, 1309, 1, 0, 0, 0, 192, 1314, 1, 0, 0, 0, 194, 1326, 1, 0, 0, 0, 196, 1343, 1, 0, 0, 0, 198, 1345, 1, 0, 0, 0, 200, 1347, 1, 0, 0, 0, 202, 1366, 1, 0, 0, 0, 204, 1368, 1, 0, 0, 0, 206, 1371, 1, 0, 0, 0, 208, 1420, 1, 0, 0, 0, 210, 1422, 1, 0, 0, 0, 212, 1425, 1, 0, 0, 0, 214, 1427, 1, 0, 0, 0, 216, 1434, 1, 0, 0, 0, 218, 1436, 1, 0, 0, 0, 220, 1438, 1, 0, 0, 0, 222, 1441, 1, 0, 0, 0, 224, 1450, 1, 0, 0, 0, 226, 1455, 1, 0, 0, 0, 228, 1469, 1, 0, 0, 0, 230, 1497, 1, 0, 0, 0, 232, 1507, 1, 0, 0, 0, 234, 1515, 1, 0, 0, 0, 236, 1520, 1, 0, 0, 0, 238, 1546, 1, 0, 0, 0, 240, 1548, 1, 0, 0, 0, 242, 1557, 1, 0, 0, 0, 244, 1568, 1, 0, 0, 0, 246, 1580, 1, 0, 0, 0, 248, 1606, 1, 0, 0, 0, 250, 1608, 1, 0, 0, 0, 252, 1626, 1, 0, 0, 0, 254, 1628, 1, 0, 0, 0, 256, 1633, 1, 0, 0, 0, 258, 1636, 1, 0, 0, 0, 260, 1650, 1, 0, 0, 0, 262, 1746, 1, 0, 0, 0, 264, 1773, 1, 0, 0, 0, 266, 1779, 1, 0, 0, 0, 268, 1896, 1, 0, 0, 0, 270, 1911, 1, 0, 0, 0, 272, 1913, 1, 0, 0, 0, 274, 1915, 1, 0, 0, 0, 276, 1919, 1, 0, 0, 0, 278, 1921, 1, 0, 0, 0, 280, 1926, 1, 0, 0, 0, 282, 1933, 1, 0, 0, 0, 284, 1937, 1, 0, 0, 0, 286, 1942, 1, 0, 0, 0, 288, 1952, 1, 0, 0, 0, 290, 1956, 1, 0, 0, 0, 292, 1959, 1, 0, 0, 0, 294, 1966, 1, 0, 0, 0, 296, 1972, 1, 0, 0, 0, 298, 1982, 1, 0, 0, 0, 300, 1984, 1, 0, 0, 0, 302, 1988, 1, 0, 0, 0, 304, 1999, 1, 0, 0, 0, 306, 2001, 1, 0, 0, 0, 308, 2003, 1, 0, 0, 0, 310, 2005, 1, 0, 0, 0, 312, 2010, 1, 0, 0, 0, 314, 2018, 1, 0, 0, 0, 316, 2021, 1, 0, 0, 0, 318, 2025, 1, 0, 0, 0, 320, 2028, 1, 0, 0, 0, 322, 2039, 1, 0, 0, 0, 324, 2049, 1, 0, 0, 0, 326, 2055, 1, 0, 0, 0, 328, 2063, 1, 0, 0, 0, 330, 2079, 1, 0, 0, 0, 332, 2088, 1, 0, 0, 0, 334, 2090, 1, 0, 0, 0, 336, 2092, 1, 0, 0, 0, 338, 2106, 1, 0, 0, 0, 340, 2108, 1, 0, 0, 0, 342, 2110, 1, 0, 0, 0, 344, 2112, 1, 0, 0, 0, 346, 2114, 1, 0, 0, 0, 348, 2116, 1, 0, 0, 0, 350, 2118, 1, 0, 0, 0, 352, 353, 3, 2, 1, 0, 353, 354, 5, 0, 0, 1, 354, 1, 1, 0, 0, 0, 355, 356, 3, 4, 2, 0, 356, 357, 5, 0, 0, 1, 357, 3, 1, 0, 0, 0, 358, 360, 3, 6, 3, 0, 359, 361, 5, 381, 0, 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 364, 3, 8, 4, 0, 363, 358, 1, 0, 0, 0, 363, 362, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 5, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 381, 3, 10, 5, 0, 369, 381, 3, 12, 6, 0, 370, 381, 3, 14, 7, 0, 371, 381, 3, 16, 8, 0, 372, 381, 3, 22, 11, 0, 373, 381, 3, 26, 13, 0, 374, 381, 3, 28, 14, 0, 375, 381, 3, 30, 15, 0, 376, 381, 3, 32, 16, 0, 377, 381, 3, 34, 17, 0, 378, 381, 3, 36, 18, 0, 379, 381, 3, 38, 19, 0, 380, 368, 1, 0, 0, 0, 380, 369, 1, 0, 0, 0, 380, 370, 1, 0, 0, 0, 380, 371, 1, 0, 0, 0, 380, 372, 1, 0, 0, 0, 380, 373, 1, 0, 0, 0, 380, 374, 1, 0, 0, 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, 7, 1, 0, 0, 0, 382, 383, 5, 381, 0, 0, 383, 9, 1, 0, 0, 0, 384, 399, 3, 40, 20, 0, 385, 399, 3, 104, 52, 0, 386, 399, 3, 106, 53, 0, 387, 399, 3, 108, 54, 0, 388, 399, 3, 102, 51, 0, 389, 399, 3, 114, 57, 0, 390, 399, 3, 128, 64, 0, 391, 399, 3, 130, 65, 0, 392, 399, 3, 132, 66, 0, 393, 399, 3, 134, 67, 0, 394, 399, 3, 136, 68, 0, 395, 399, 3, 138, 69, 0, 396, 399, 3, 140, 70, 0, 397, 399, 3, 142, 71, 0, 398, 384, 1, 0, 0, 0, 398, 385, 1, 0, 0, 0, 398, 386, 1, 0, 0, 0, 398, 387, 1, 0, 0, 0, 398, 388, 1, 0, 0, 0, 398, 389, 1, 0, 0, 0, 398, 390, 1, 0, 0, 0, 398, 391, 1, 0, 0, 0, 398, 392, 1, 0, 0, 0, 398, 393, 1, 0, 0, 0, 398, 394, 1, 0, 0, 0, 398, 395, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 397, 1, 0, 0, 0, 399, 11, 1, 0, 0, 0, 400, 403, 3, 156, 78, 0, 401, 403, 3, 144, 72, 0, 402, 400, 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 13, 1, 0, 0, 0, 404, 405, 7, 0, 0, 0, 405, 406, 3, 312, 156, 0, 406, 15, 1, 0, 0, 0, 407, 411, 5, 242, 0, 0, 408, 412, 3, 18, 9, 0, 409, 410, 5, 100, 0, 0, 410, 412, 5, 247, 0, 0, 411, 408, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 416, 1, 0, 0, 0, 413, 417, 3, 12, 6, 0, 414, 417, 3, 146, 73, 0, 415, 417, 3, 154, 77, 0, 416, 413, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 17, 1, 0, 0, 0, 418, 423, 3, 20, 10, 0, 419, 420, 5, 380, 0, 0, 420, 422, 3, 20, 10, 0, 421, 419, 1, 0, 0, 0, 422, 425, 1, 0, 0, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 19, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 427, 7, 1, 0, 0, 427, 21, 1, 0, 0, 0, 428, 430, 5, 160, 0, 0, 429, 431, 5, 12, 0, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 435, 3, 312, 156, 0, 433, 435, 3, 24, 12, 0, 434, 428, 1, 0, 0, 0, 434, 433, 1, 0, 0, 0, 435, 23, 1, 0, 0, 0, 436, 437, 5, 160, 0, 0, 437, 438, 5, 83, 0, 0, 438, 443, 3, 312, 156, 0, 439, 440, 5, 380, 0, 0, 440, 442, 3, 312, 156, 0, 441, 439, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 25, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 327, 0, 0, 447, 482, 7, 2, 0, 0, 448, 449, 5, 327, 0, 0, 449, 450, 5, 219, 0, 0, 450, 482, 7, 3, 0, 0, 451, 452, 5, 327, 0, 0, 452, 455, 5, 148, 0, 0, 453, 454, 7, 4, 0, 0, 454, 456, 3, 312, 156, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 458, 1, 0, 0, 0, 457, 459, 3, 264, 132, 0, 458, 457, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 482, 1, 0, 0, 0, 460, 461, 5, 327, 0, 0, 461, 462, 5, 20, 0, 0, 462, 463, 7, 4, 0, 0, 463, 465, 3, 312, 156, 0, 464, 466, 3, 264, 132, 0, 465, 464, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 482, 1, 0, 0, 0, 467, 468, 5, 327, 0, 0, 468, 469, 5, 216, 0, 0, 469, 470, 7, 5, 0, 0, 470, 482, 3, 312, 156, 0, 471, 473, 5, 327, 0, 0, 472, 474, 5, 352, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 482, 5, 50, 0, 0, 476, 478, 5, 327, 0, 0, 477, 479, 5, 249, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 482, 5, 83, 0, 0, 481, 446, 1, 0, 0, 0, 481, 448, 1, 0, 0, 0, 481, 451, 1, 0, 0, 0, 481, 460, 1, 0, 0, 0, 481, 467, 1, 0, 0, 0, 481, 471, 1, 0, 0, 0, 481, 476, 1, 0, 0, 0, 482, 27, 1, 0, 0, 0, 483, 484, 5, 75, 0, 0, 484, 485, 5, 287, 0, 0, 485, 488, 3, 312, 156, 0, 486, 487, 5, 361, 0, 0, 487, 489, 3, 320, 160, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 29, 1, 0, 0, 0, 490, 491, 5, 158, 0, 0, 491, 492, 5, 287, 0, 0, 492, 493, 3, 312, 156, 0, 493, 31, 1, 0, 0, 0, 494, 496, 5, 326, 0, 0, 495, 497, 3, 322, 161, 0, 496, 495, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 33, 1, 0, 0, 0, 498, 500, 5, 316, 0, 0, 499, 501, 3, 324, 162, 0, 500, 499, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 35, 1, 0, 0, 0, 502, 503, 7, 6, 0, 0, 503, 504, 5, 63, 0, 0, 504, 505, 3, 112, 56, 0, 505, 37, 1, 0, 0, 0, 506, 507, 5, 4, 0, 0, 507, 508, 5, 63, 0, 0, 508, 509, 5, 361, 0, 0, 509, 512, 5, 402, 0, 0, 510, 511, 5, 183, 0, 0, 511, 513, 3, 312, 156, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 546, 1, 0, 0, 0, 514, 515, 5, 4, 0, 0, 515, 516, 5, 42, 0, 0, 516, 517, 5, 361, 0, 0, 517, 520, 5, 402, 0, 0, 518, 519, 5, 183, 0, 0, 519, 521, 3, 312, 156, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 523, 5, 118, 0, 0, 523, 525, 3, 312, 156, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 546, 1, 0, 0, 0, 526, 527, 5, 4, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 5, 361, 0, 0, 529, 530, 5, 402, 0, 0, 530, 531, 5, 118, 0, 0, 531, 546, 3, 312, 156, 0, 532, 533, 5, 4, 0, 0, 533, 534, 5, 112, 0, 0, 534, 546, 5, 402, 0, 0, 535, 536, 5, 4, 0, 0, 536, 537, 5, 35, 0, 0, 537, 538, 5, 42, 0, 0, 538, 539, 5, 361, 0, 0, 539, 540, 5, 402, 0, 0, 540, 541, 5, 118, 0, 0, 541, 542, 3, 312, 156, 0, 542, 543, 5, 68, 0, 0, 543, 544, 3, 312, 156, 0, 544, 546, 1, 0, 0, 0, 545, 506, 1, 0, 0, 0, 545, 514, 1, 0, 0, 0, 545, 526, 1, 0, 0, 0, 545, 532, 1, 0, 0, 0, 545, 535, 1, 0, 0, 0, 546, 39, 1, 0, 0, 0, 547, 550, 3, 42, 21, 0, 548, 550, 3, 44, 22, 0, 549, 547, 1, 0, 0, 0, 549, 548, 1, 0, 0, 0, 550, 41, 1, 0, 0, 0, 551, 553, 5, 216, 0, 0, 552, 554, 5, 149, 0, 0, 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 5, 337, 0, 0, 556, 558, 3, 316, 158, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 98, 49, 0, 560, 561, 5, 376, 0, 0, 561, 566, 3, 46, 23, 0, 562, 563, 5, 380, 0, 0, 563, 565, 3, 46, 23, 0, 564, 562, 1, 0, 0, 0, 565, 568, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 571, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 569, 570, 5, 380, 0, 0, 570, 572, 3, 80, 40, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 574, 5, 380, 0, 0, 574, 576, 3, 82, 41, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 579, 1, 0, 0, 0, 577, 578, 5, 380, 0, 0, 578, 580, 3, 86, 43, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 5, 377, 0, 0, 582, 584, 3, 70, 35, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, 1, 0, 0, 0, 585, 587, 3, 88, 44, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 590, 3, 314, 157, 0, 589, 591, 3, 96, 48, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 43, 1, 0, 0, 0, 592, 593, 5, 216, 0, 0, 593, 595, 5, 337, 0, 0, 594, 596, 3, 316, 158, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 3, 98, 49, 0, 598, 601, 3, 314, 157, 0, 599, 600, 5, 183, 0, 0, 600, 602, 3, 156, 78, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 45, 1, 0, 0, 0, 603, 607, 3, 48, 24, 0, 604, 607, 3, 72, 36, 0, 605, 607, 3, 76, 38, 0, 606, 603, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 605, 1, 0, 0, 0, 607, 47, 1, 0, 0, 0, 608, 609, 3, 50, 25, 0, 609, 611, 3, 54, 27, 0, 610, 612, 3, 68, 34, 0, 611, 610, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 1, 0, 0, 0, 613, 615, 3, 70, 35, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 49, 1, 0, 0, 0, 616, 619, 3, 312, 156, 0, 617, 619, 3, 258, 129, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 51, 1, 0, 0, 0, 620, 621, 5, 376, 0, 0, 621, 626, 3, 50, 25, 0, 622, 623, 5, 380, 0, 0, 623, 625, 3, 50, 25, 0, 624, 622, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 5, 377, 0, 0, 630, 53, 1, 0, 0, 0, 631, 669, 7, 8, 0, 0, 632, 634, 7, 9, 0, 0, 633, 635, 3, 56, 28, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 669, 1, 0, 0, 0, 636, 638, 5, 341, 0, 0, 637, 639, 3, 56, 28, 0, 638, 637, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 646, 1, 0, 0, 0, 640, 642, 7, 10, 0, 0, 641, 643, 5, 278, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 645, 5, 340, 0, 0, 645, 647, 5, 174, 0, 0, 646, 640, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 669, 1, 0, 0, 0, 648, 650, 7, 11, 0, 0, 649, 651, 3, 58, 29, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 669, 1, 0, 0, 0, 652, 654, 7, 12, 0, 0, 653, 655, 3, 62, 31, 0, 654, 653, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 669, 1, 0, 0, 0, 656, 658, 5, 76, 0, 0, 657, 659, 3, 64, 32, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 669, 1, 0, 0, 0, 660, 662, 5, 322, 0, 0, 661, 663, 3, 66, 33, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 669, 1, 0, 0, 0, 664, 666, 5, 114, 0, 0, 665, 667, 3, 60, 30, 0, 666, 665, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 669, 1, 0, 0, 0, 668, 631, 1, 0, 0, 0, 668, 632, 1, 0, 0, 0, 668, 636, 1, 0, 0, 0, 668, 648, 1, 0, 0, 0, 668, 652, 1, 0, 0, 0, 668, 656, 1, 0, 0, 0, 668, 660, 1, 0, 0, 0, 668, 664, 1, 0, 0, 0, 669, 55, 1, 0, 0, 0, 670, 671, 5, 376, 0, 0, 671, 672, 3, 342, 171, 0, 672, 673, 5, 377, 0, 0, 673, 57, 1, 0, 0, 0, 674, 675, 5, 376, 0, 0, 675, 678, 3, 342, 171, 0, 676, 677, 5, 380, 0, 0, 677, 679, 3, 342, 171, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 681, 5, 377, 0, 0, 681, 59, 1, 0, 0, 0, 682, 683, 5, 376, 0, 0, 683, 686, 3, 340, 170, 0, 684, 685, 5, 380, 0, 0, 685, 687, 3, 340, 170, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 377, 0, 0, 689, 61, 1, 0, 0, 0, 690, 691, 5, 367, 0, 0, 691, 692, 3, 54, 27, 0, 692, 693, 5, 366, 0, 0, 693, 63, 1, 0, 0, 0, 694, 695, 5, 367, 0, 0, 695, 696, 3, 54, 27, 0, 696, 697, 5, 380, 0, 0, 697, 698, 3, 54, 27, 0, 698, 699, 1, 0, 0, 0, 699, 700, 5, 366, 0, 0, 700, 65, 1, 0, 0, 0, 701, 702, 5, 367, 0, 0, 702, 703, 3, 50, 25, 0, 703, 710, 3, 54, 27, 0, 704, 705, 5, 380, 0, 0, 705, 706, 3, 50, 25, 0, 706, 707, 3, 54, 27, 0, 707, 709, 1, 0, 0, 0, 708, 704, 1, 0, 0, 0, 709, 712, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 713, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 713, 714, 5, 366, 0, 0, 714, 67, 1, 0, 0, 0, 715, 716, 5, 212, 0, 0, 716, 718, 3, 84, 42, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 313, 0, 0, 720, 721, 5, 68, 0, 0, 721, 722, 5, 294, 0, 0, 722, 723, 5, 34, 0, 0, 723, 69, 1, 0, 0, 0, 724, 725, 5, 18, 0, 0, 725, 726, 5, 397, 0, 0, 726, 71, 1, 0, 0, 0, 727, 728, 3, 50, 25, 0, 728, 729, 3, 54, 27, 0, 729, 732, 5, 283, 0, 0, 730, 731, 5, 248, 0, 0, 731, 733, 3, 74, 37, 0, 732, 730, 1, 0, 0, 0, 732, 733, 1, 0, 0, 0, 733, 735, 1, 0, 0, 0, 734, 736, 5, 167, 0, 0, 735, 734, 1, 0, 0, 0, 735, 736, 1, 0, 0, 0, 736, 73, 1, 0, 0, 0, 737, 738, 5, 397, 0, 0, 738, 75, 1, 0, 0, 0, 739, 740, 3, 50, 25, 0, 740, 741, 5, 183, 0, 0, 741, 743, 3, 78, 39, 0, 742, 744, 3, 70, 35, 0, 743, 742, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 77, 1, 0, 0, 0, 745, 746, 3, 258, 129, 0, 746, 79, 1, 0, 0, 0, 747, 748, 5, 168, 0, 0, 748, 749, 5, 247, 0, 0, 749, 750, 3, 258, 129, 0, 750, 751, 5, 183, 0, 0, 751, 752, 3, 258, 129, 0, 752, 81, 1, 0, 0, 0, 753, 754, 5, 212, 0, 0, 754, 756, 3, 84, 42, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 757, 1, 0, 0, 0, 757, 758, 5, 313, 0, 0, 758, 759, 5, 68, 0, 0, 759, 760, 3, 52, 26, 0, 760, 761, 5, 294, 0, 0, 761, 762, 5, 34, 0, 0, 762, 83, 1, 0, 0, 0, 763, 764, 3, 304, 152, 0, 764, 85, 1, 0, 0, 0, 765, 766, 5, 311, 0, 0, 766, 767, 5, 247, 0, 0, 767, 768, 5, 335, 0, 0, 768, 87, 1, 0, 0, 0, 769, 770, 5, 94, 0, 0, 770, 771, 5, 194, 0, 0, 771, 772, 3, 90, 45, 0, 772, 89, 1, 0, 0, 0, 773, 774, 5, 376, 0, 0, 774, 779, 3, 92, 46, 0, 775, 776, 5, 380, 0, 0, 776, 778, 3, 92, 46, 0, 777, 775, 1, 0, 0, 0, 778, 781, 1, 0, 0, 0, 779, 777, 1, 0, 0, 0, 779, 780, 1, 0, 0, 0, 780, 782, 1, 0, 0, 0, 781, 779, 1, 0, 0, 0, 782, 783, 5, 377, 0, 0, 783, 91, 1, 0, 0, 0, 784, 798, 3, 276, 138, 0, 785, 786, 3, 304, 152, 0, 786, 787, 5, 376, 0, 0, 787, 792, 3, 94, 47, 0, 788, 789, 5, 380, 0, 0, 789, 791, 3, 94, 47, 0, 790, 788, 1, 0, 0, 0, 791, 794, 1, 0, 0, 0, 792, 790, 1, 0, 0, 0, 792, 793, 1, 0, 0, 0, 793, 795, 1, 0, 0, 0, 794, 792, 1, 0, 0, 0, 795, 796, 5, 377, 0, 0, 796, 798, 1, 0, 0, 0, 797, 784, 1, 0, 0, 0, 797, 785, 1, 0, 0, 0, 798, 93, 1, 0, 0, 0, 799, 802, 3, 276, 138, 0, 800, 802, 3, 338, 169, 0, 801, 799, 1, 0, 0, 0, 801, 800, 1, 0, 0, 0, 802, 95, 1, 0, 0, 0, 803, 804, 5, 276, 0, 0, 804, 813, 3, 98, 49, 0, 805, 809, 5, 376, 0, 0, 806, 808, 3, 100, 50, 0, 807, 806, 1, 0, 0, 0, 808, 811, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 809, 810, 1, 0, 0, 0, 810, 812, 1, 0, 0, 0, 811, 809, 1, 0, 0, 0, 812, 814, 5, 377, 0, 0, 813, 805, 1, 0, 0, 0, 813, 814, 1, 0, 0, 0, 814, 97, 1, 0, 0, 0, 815, 816, 3, 312, 156, 0, 816, 99, 1, 0, 0, 0, 817, 818, 7, 13, 0, 0, 818, 822, 7, 14, 0, 0, 819, 820, 7, 15, 0, 0, 820, 822, 7, 16, 0, 0, 821, 817, 1, 0, 0, 0, 821, 819, 1, 0, 0, 0, 822, 101, 1, 0, 0, 0, 823, 824, 5, 216, 0, 0, 824, 825, 5, 12, 0, 0, 825, 826, 3, 312, 156, 0, 826, 827, 3, 314, 157, 0, 827, 103, 1, 0, 0, 0, 828, 829, 5, 216, 0, 0, 829, 831, 5, 25, 0, 0, 830, 832, 3, 316, 158, 0, 831, 830, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 833, 1, 0, 0, 0, 833, 835, 3, 312, 156, 0, 834, 836, 3, 70, 35, 0, 835, 834, 1, 0, 0, 0, 835, 836, 1, 0, 0, 0, 836, 837, 1, 0, 0, 0, 837, 838, 3, 314, 157, 0, 838, 105, 1, 0, 0, 0, 839, 841, 5, 216, 0, 0, 840, 842, 5, 149, 0, 0, 841, 840, 1, 0, 0, 0, 841, 842, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 845, 5, 165, 0, 0, 844, 846, 3, 316, 158, 0, 845, 844, 1, 0, 0, 0, 845, 846, 1, 0, 0, 0, 846, 847, 1, 0, 0, 0, 847, 849, 3, 312, 156, 0, 848, 850, 3, 52, 26, 0, 849, 848, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 1, 0, 0, 0, 851, 853, 3, 70, 35, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 855, 5, 183, 0, 0, 855, 856, 3, 156, 78, 0, 856, 107, 1, 0, 0, 0, 857, 861, 5, 216, 0, 0, 858, 862, 5, 149, 0, 0, 859, 860, 5, 149, 0, 0, 860, 862, 5, 334, 0, 0, 861, 858, 1, 0, 0, 0, 861, 859, 1, 0, 0, 0, 861, 862, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 865, 5, 250, 0, 0, 864, 866, 3, 316, 158, 0, 865, 864, 1, 0, 0, 0, 865, 866, 1, 0, 0, 0, 866, 867, 1, 0, 0, 0, 867, 868, 3, 312, 156, 0, 868, 869, 5, 183, 0, 0, 869, 872, 3, 304, 152, 0, 870, 871, 5, 272, 0, 0, 871, 873, 7, 17, 0, 0, 872, 870, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 875, 1, 0, 0, 0, 874, 876, 3, 110, 55, 0, 875, 874, 1, 0, 0, 0, 875, 876, 1, 0, 0, 0, 876, 109, 1, 0, 0, 0, 877, 878, 5, 353, 0, 0, 878, 879, 5, 63, 0, 0, 879, 885, 3, 112, 56, 0, 880, 881, 5, 380, 0, 0, 881, 882, 5, 63, 0, 0, 882, 884, 3, 112, 56, 0, 883, 880, 1, 0, 0, 0, 884, 887, 1, 0, 0, 0, 885, 883, 1, 0, 0, 0, 885, 886, 1, 0, 0, 0, 886, 111, 1, 0, 0, 0, 887, 885, 1, 0, 0, 0, 888, 889, 5, 397, 0, 0, 889, 113, 1, 0, 0, 0, 890, 891, 5, 178, 0, 0, 891, 893, 5, 337, 0, 0, 892, 894, 3, 318, 159, 0, 893, 892, 1, 0, 0, 0, 893, 894, 1, 0, 0, 0, 894, 895, 1, 0, 0, 0, 895, 901, 3, 312, 156, 0, 896, 902, 3, 116, 58, 0, 897, 902, 3, 118, 59, 0, 898, 902, 3, 120, 60, 0, 899, 902, 3, 122, 61, 0, 900, 902, 3, 124, 62, 0, 901, 896, 1, 0, 0, 0, 901, 897, 1, 0, 0, 0, 901, 898, 1, 0, 0, 0, 901, 899, 1, 0, 0, 0, 901, 900, 1, 0, 0, 0, 902, 115, 1, 0, 0, 0, 903, 905, 5, 118, 0, 0, 904, 906, 3, 312, 156, 0, 905, 904, 1, 0, 0, 0, 905, 906, 1, 0, 0, 0, 906, 907, 1, 0, 0, 0, 907, 908, 5, 343, 0, 0, 908, 909, 3, 312, 156, 0, 909, 117, 1, 0, 0, 0, 910, 911, 5, 326, 0, 0, 911, 912, 3, 320, 160, 0, 912, 119, 1, 0, 0, 0, 913, 914, 5, 4, 0, 0, 914, 915, 5, 212, 0, 0, 915, 916, 3, 84, 42, 0, 916, 917, 5, 313, 0, 0, 917, 918, 5, 68, 0, 0, 918, 920, 3, 52, 26, 0, 919, 921, 3, 126, 63, 0, 920, 919, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 121, 1, 0, 0, 0, 922, 923, 5, 234, 0, 0, 923, 924, 5, 212, 0, 0, 924, 925, 3, 84, 42, 0, 925, 123, 1, 0, 0, 0, 926, 927, 5, 4, 0, 0, 927, 928, 5, 347, 0, 0, 928, 929, 3, 52, 26, 0, 929, 125, 1, 0, 0, 0, 930, 931, 5, 294, 0, 0, 931, 932, 5, 34, 0, 0, 932, 127, 1, 0, 0, 0, 933, 934, 5, 178, 0, 0, 934, 935, 5, 165, 0, 0, 935, 939, 3, 312, 156, 0, 936, 940, 3, 116, 58, 0, 937, 938, 5, 183, 0, 0, 938, 940, 3, 156, 78, 0, 939, 936, 1, 0, 0, 0, 939, 937, 1, 0, 0, 0, 940, 129, 1, 0, 0, 0, 941, 942, 5, 178, 0, 0, 942, 943, 5, 25, 0, 0, 943, 944, 3, 312, 156, 0, 944, 945, 3, 118, 59, 0, 945, 131, 1, 0, 0, 0, 946, 950, 5, 178, 0, 0, 947, 951, 5, 149, 0, 0, 948, 949, 5, 149, 0, 0, 949, 951, 5, 334, 0, 0, 950, 947, 1, 0, 0, 0, 950, 948, 1, 0, 0, 0, 950, 951, 1, 0, 0, 0, 951, 952, 1, 0, 0, 0, 952, 954, 5, 250, 0, 0, 953, 955, 3, 318, 159, 0, 954, 953, 1, 0, 0, 0, 954, 955, 1, 0, 0, 0, 955, 956, 1, 0, 0, 0, 956, 957, 3, 312, 156, 0, 957, 958, 5, 183, 0, 0, 958, 961, 3, 304, 152, 0, 959, 960, 5, 272, 0, 0, 960, 962, 7, 17, 0, 0, 961, 959, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 133, 1, 0, 0, 0, 963, 964, 5, 234, 0, 0, 964, 966, 5, 12, 0, 0, 965, 967, 3, 318, 159, 0, 966, 965, 1, 0, 0, 0, 966, 967, 1, 0, 0, 0, 967, 968, 1, 0, 0, 0, 968, 969, 3, 312, 156, 0, 969, 135, 1, 0, 0, 0, 970, 972, 5, 234, 0, 0, 971, 973, 5, 149, 0, 0, 972, 971, 1, 0, 0, 0, 972, 973, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 976, 5, 337, 0, 0, 975, 977, 3, 318, 159, 0, 976, 975, 1, 0, 0, 0, 976, 977, 1, 0, 0, 0, 977, 978, 1, 0, 0, 0, 978, 979, 3, 312, 156, 0, 979, 137, 1, 0, 0, 0, 980, 981, 5, 234, 0, 0, 981, 983, 5, 25, 0, 0, 982, 984, 3, 318, 159, 0, 983, 982, 1, 0, 0, 0, 983, 984, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 987, 3, 312, 156, 0, 986, 988, 7, 18, 0, 0, 987, 986, 1, 0, 0, 0, 987, 988, 1, 0, 0, 0, 988, 139, 1, 0, 0, 0, 989, 991, 5, 234, 0, 0, 990, 992, 5, 149, 0, 0, 991, 990, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 993, 1, 0, 0, 0, 993, 995, 5, 165, 0, 0, 994, 996, 3, 318, 159, 0, 995, 994, 1, 0, 0, 0, 995, 996, 1, 0, 0, 0, 996, 997, 1, 0, 0, 0, 997, 998, 3, 312, 156, 0, 998, 141, 1, 0, 0, 0, 999, 1003, 5, 234, 0, 0, 1000, 1004, 5, 149, 0, 0, 1001, 1002, 5, 149, 0, 0, 1002, 1004, 5, 334, 0, 0, 1003, 1000, 1, 0, 0, 0, 1003, 1001, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 1, 0, 0, 0, 1005, 1007, 5, 250, 0, 0, 1006, 1008, 3, 318, 159, 0, 1007, 1006, 1, 0, 0, 0, 1007, 1008, 1, 0, 0, 0, 1008, 1009, 1, 0, 0, 0, 1009, 1010, 3, 312, 156, 0, 1010, 143, 1, 0, 0, 0, 1011, 1013, 5, 240, 0, 0, 1012, 1011, 1, 0, 0, 0, 1012, 1013, 1, 0, 0, 0, 1013, 1014, 1, 0, 0, 0, 1014, 1018, 3, 146, 73, 0, 1015, 1016, 5, 240, 0, 0, 1016, 1018, 3, 154, 77, 0, 1017, 1012, 1, 0, 0, 0, 1017, 1015, 1, 0, 0, 0, 1018, 145, 1, 0, 0, 0, 1019, 1020, 5, 263, 0, 0, 1020, 1021, 7, 19, 0, 0, 1021, 1030, 3, 312, 156, 0, 1022, 1024, 3, 148, 74, 0, 1023, 1022, 1, 0, 0, 0, 1023, 1024, 1, 0, 0, 0, 1024, 1026, 1, 0, 0, 0, 1025, 1027, 3, 52, 26, 0, 1026, 1025, 1, 0, 0, 0, 1026, 1027, 1, 0, 0, 0, 1027, 1028, 1, 0, 0, 0, 1028, 1031, 3, 156, 78, 0, 1029, 1031, 3, 150, 75, 0, 1030, 1023, 1, 0, 0, 0, 1030, 1029, 1, 0, 0, 0, 1031, 147, 1, 0, 0, 0, 1032, 1033, 5, 307, 0, 0, 1033, 1034, 3, 320, 160, 0, 1034, 149, 1, 0, 0, 0, 1035, 1036, 5, 355, 0, 0, 1036, 1041, 3, 152, 76, 0, 1037, 1038, 5, 380, 0, 0, 1038, 1040, 3, 152, 76, 0, 1039, 1037, 1, 0, 0, 0, 1040, 1043, 1, 0, 0, 0, 1041, 1039, 1, 0, 0, 0, 1041, 1042, 1, 0, 0, 0, 1042, 151, 1, 0, 0, 0, 1043, 1041, 1, 0, 0, 0, 1044, 1045, 5, 376, 0, 0, 1045, 1050, 3, 338, 169, 0, 1046, 1047, 5, 380, 0, 0, 1047, 1049, 3, 338, 169, 0, 1048, 1046, 1, 0, 0, 0, 1049, 1052, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, 0, 1050, 1051, 1, 0, 0, 0, 1051, 1053, 1, 0, 0, 0, 1052, 1050, 1, 0, 0, 0, 1053, 1054, 5, 377, 0, 0, 1054, 153, 1, 0, 0, 0, 1055, 1056, 5, 143, 0, 0, 1056, 1057, 5, 326, 0, 0, 1057, 1061, 5, 186, 0, 0, 1058, 1059, 3, 146, 73, 0, 1059, 1060, 5, 381, 0, 0, 1060, 1062, 1, 0, 0, 0, 1061, 1058, 1, 0, 0, 0, 1062, 1063, 1, 0, 0, 0, 1063, 1061, 1, 0, 0, 0, 1063, 1064, 1, 0, 0, 0, 1064, 1065, 1, 0, 0, 0, 1065, 1066, 5, 237, 0, 0, 1066, 155, 1, 0, 0, 0, 1067, 1068, 6, 78, -1, 0, 1068, 1091, 3, 158, 79, 0, 1069, 1070, 3, 160, 80, 0, 1070, 1071, 3, 156, 78, 5, 1071, 1091, 1, 0, 0, 0, 1072, 1073, 5, 376, 0, 0, 1073, 1074, 3, 156, 78, 0, 1074, 1075, 5, 377, 0, 0, 1075, 1091, 1, 0, 0, 0, 1076, 1078, 3, 168, 84, 0, 1077, 1079, 3, 230, 115, 0, 1078, 1077, 1, 0, 0, 0, 1078, 1079, 1, 0, 0, 0, 1079, 1081, 1, 0, 0, 0, 1080, 1082, 3, 234, 117, 0, 1081, 1080, 1, 0, 0, 0, 1081, 1082, 1, 0, 0, 0, 1082, 1091, 1, 0, 0, 0, 1083, 1085, 3, 166, 83, 0, 1084, 1086, 3, 230, 115, 0, 1085, 1084, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1088, 1, 0, 0, 0, 1087, 1089, 3, 234, 117, 0, 1088, 1087, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1091, 1, 0, 0, 0, 1090, 1067, 1, 0, 0, 0, 1090, 1069, 1, 0, 0, 0, 1090, 1072, 1, 0, 0, 0, 1090, 1076, 1, 0, 0, 0, 1090, 1083, 1, 0, 0, 0, 1091, 1106, 1, 0, 0, 0, 1092, 1093, 10, 3, 0, 0, 1093, 1095, 7, 20, 0, 0, 1094, 1096, 5, 176, 0, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1097, 1, 0, 0, 0, 1097, 1099, 3, 156, 78, 0, 1098, 1100, 3, 230, 115, 0, 1099, 1098, 1, 0, 0, 0, 1099, 1100, 1, 0, 0, 0, 1100, 1102, 1, 0, 0, 0, 1101, 1103, 3, 234, 117, 0, 1102, 1101, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1105, 1, 0, 0, 0, 1104, 1092, 1, 0, 0, 0, 1105, 1108, 1, 0, 0, 0, 1106, 1104, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 157, 1, 0, 0, 0, 1108, 1106, 1, 0, 0, 0, 1109, 1110, 5, 355, 0, 0, 1110, 1115, 3, 258, 129, 0, 1111, 1112, 5, 380, 0, 0, 1112, 1114, 3, 258, 129, 0, 1113, 1111, 1, 0, 0, 0, 1114, 1117, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1115, 1116, 1, 0, 0, 0, 1116, 159, 1, 0, 0, 0, 1117, 1115, 1, 0, 0, 0, 1118, 1119, 5, 361, 0, 0, 1119, 1124, 3, 162, 81, 0, 1120, 1121, 5, 380, 0, 0, 1121, 1123, 3, 162, 81, 0, 1122, 1120, 1, 0, 0, 0, 1123, 1126, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1124, 1125, 1, 0, 0, 0, 1125, 161, 1, 0, 0, 0, 1126, 1124, 1, 0, 0, 0, 1127, 1139, 3, 164, 82, 0, 1128, 1129, 5, 376, 0, 0, 1129, 1134, 3, 50, 25, 0, 1130, 1131, 5, 380, 0, 0, 1131, 1133, 3, 50, 25, 0, 1132, 1130, 1, 0, 0, 0, 1133, 1136, 1, 0, 0, 0, 1134, 1132, 1, 0, 0, 0, 1134, 1135, 1, 0, 0, 0, 1135, 1137, 1, 0, 0, 0, 1136, 1134, 1, 0, 0, 0, 1137, 1138, 5, 377, 0, 0, 1138, 1140, 1, 0, 0, 0, 1139, 1128, 1, 0, 0, 0, 1139, 1140, 1, 0, 0, 0, 1140, 1141, 1, 0, 0, 0, 1141, 1142, 5, 183, 0, 0, 1142, 1143, 5, 376, 0, 0, 1143, 1144, 3, 156, 78, 0, 1144, 1145, 5, 377, 0, 0, 1145, 163, 1, 0, 0, 0, 1146, 1147, 3, 304, 152, 0, 1147, 165, 1, 0, 0, 0, 1148, 1149, 3, 168, 84, 0, 1149, 1151, 3, 174, 87, 0, 1150, 1152, 3, 204, 102, 0, 1151, 1150, 1, 0, 0, 0, 1151, 1152, 1, 0, 0, 0, 1152, 1154, 1, 0, 0, 0, 1153, 1155, 3, 206, 103, 0, 1154, 1153, 1, 0, 0, 0, 1154, 1155, 1, 0, 0, 0, 1155, 1157, 1, 0, 0, 0, 1156, 1158, 3, 220, 110, 0, 1157, 1156, 1, 0, 0, 0, 1157, 1158, 1, 0, 0, 0, 1158, 1160, 1, 0, 0, 0, 1159, 1161, 3, 222, 111, 0, 1160, 1159, 1, 0, 0, 0, 1160, 1161, 1, 0, 0, 0, 1161, 1167, 1, 0, 0, 0, 1162, 1163, 3, 168, 84, 0, 1163, 1164, 3, 174, 87, 0, 1164, 1165, 3, 228, 114, 0, 1165, 1167, 1, 0, 0, 0, 1166, 1148, 1, 0, 0, 0, 1166, 1162, 1, 0, 0, 0, 1167, 167, 1, 0, 0, 0, 1168, 1170, 5, 325, 0, 0, 1169, 1171, 3, 346, 173, 0, 1170, 1169, 1, 0, 0, 0, 1170, 1171, 1, 0, 0, 0, 1171, 1181, 1, 0, 0, 0, 1172, 1182, 5, 387, 0, 0, 1173, 1178, 3, 170, 85, 0, 1174, 1175, 5, 380, 0, 0, 1175, 1177, 3, 170, 85, 0, 1176, 1174, 1, 0, 0, 0, 1177, 1180, 1, 0, 0, 0, 1178, 1176, 1, 0, 0, 0, 1178, 1179, 1, 0, 0, 0, 1179, 1182, 1, 0, 0, 0, 1180, 1178, 1, 0, 0, 0, 1181, 1172, 1, 0, 0, 0, 1181, 1173, 1, 0, 0, 0, 1182, 169, 1, 0, 0, 0, 1183, 1192, 3, 172, 86, 0, 1184, 1189, 3, 258, 129, 0, 1185, 1187, 5, 183, 0, 0, 1186, 1185, 1, 0, 0, 0, 1186, 1187, 1, 0, 0, 0, 1187, 1188, 1, 0, 0, 0, 1188, 1190, 3, 258, 129, 0, 1189, 1186, 1, 0, 0, 0, 1189, 1190, 1, 0, 0, 0, 1190, 1192, 1, 0, 0, 0, 1191, 1183, 1, 0, 0, 0, 1191, 1184, 1, 0, 0, 0, 1192, 171, 1, 0, 0, 0, 1193, 1194, 3, 268, 134, 0, 1194, 1195, 5, 305, 0, 0, 1195, 1196, 3, 226, 113, 0, 1196, 1197, 5, 183, 0, 0, 1197, 1198, 3, 304, 152, 0, 1198, 1206, 1, 0, 0, 0, 1199, 1200, 3, 268, 134, 0, 1200, 1201, 5, 305, 0, 0, 1201, 1202, 3, 296, 148, 0, 1202, 1203, 5, 183, 0, 0, 1203, 1204, 3, 304, 152, 0, 1204, 1206, 1, 0, 0, 0, 1205, 1193, 1, 0, 0, 0, 1205, 1199, 1, 0, 0, 0, 1206, 173, 1, 0, 0, 0, 1207, 1208, 5, 248, 0, 0, 1208, 1209, 3, 176, 88, 0, 1209, 175, 1, 0, 0, 0, 1210, 1211, 6, 88, -1, 0, 1211, 1216, 3, 178, 89, 0, 1212, 1213, 5, 380, 0, 0, 1213, 1215, 3, 178, 89, 0, 1214, 1212, 1, 0, 0, 0, 1215, 1218, 1, 0, 0, 0, 1216, 1214, 1, 0, 0, 0, 1216, 1217, 1, 0, 0, 0, 1217, 1222, 1, 0, 0, 0, 1218, 1216, 1, 0, 0, 0, 1219, 1222, 3, 188, 94, 0, 1220, 1222, 3, 190, 95, 0, 1221, 1210, 1, 0, 0, 0, 1221, 1219, 1, 0, 0, 0, 1221, 1220, 1, 0, 0, 0, 1222, 1244, 1, 0, 0, 0, 1223, 1224, 10, 3, 0, 0, 1224, 1225, 5, 217, 0, 0, 1225, 1226, 5, 270, 0, 0, 1226, 1243, 3, 176, 88, 4, 1227, 1229, 10, 4, 0, 0, 1228, 1230, 5, 290, 0, 0, 1229, 1228, 1, 0, 0, 0, 1229, 1230, 1, 0, 0, 0, 1230, 1232, 1, 0, 0, 0, 1231, 1233, 7, 21, 0, 0, 1232, 1231, 1, 0, 0, 0, 1232, 1233, 1, 0, 0, 0, 1233, 1235, 1, 0, 0, 0, 1234, 1236, 5, 304, 0, 0, 1235, 1234, 1, 0, 0, 0, 1235, 1236, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1238, 5, 270, 0, 0, 1238, 1240, 3, 176, 88, 0, 1239, 1241, 3, 202, 101, 0, 1240, 1239, 1, 0, 0, 0, 1240, 1241, 1, 0, 0, 0, 1241, 1243, 1, 0, 0, 0, 1242, 1223, 1, 0, 0, 0, 1242, 1227, 1, 0, 0, 0, 1243, 1246, 1, 0, 0, 0, 1244, 1242, 1, 0, 0, 0, 1244, 1245, 1, 0, 0, 0, 1245, 177, 1, 0, 0, 0, 1246, 1244, 1, 0, 0, 0, 1247, 1249, 3, 180, 90, 0, 1248, 1250, 3, 294, 147, 0, 1249, 1248, 1, 0, 0, 0, 1249, 1250, 1, 0, 0, 0, 1250, 179, 1, 0, 0, 0, 1251, 1253, 5, 337, 0, 0, 1252, 1251, 1, 0, 0, 0, 1252, 1253, 1, 0, 0, 0, 1253, 1254, 1, 0, 0, 0, 1254, 1256, 3, 182, 91, 0, 1255, 1257, 3, 184, 92, 0, 1256, 1255, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 1262, 1, 0, 0, 0, 1258, 1260, 5, 183, 0, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1263, 3, 274, 137, 0, 1262, 1259, 1, 0, 0, 0, 1262, 1263, 1, 0, 0, 0, 1263, 1293, 1, 0, 0, 0, 1264, 1265, 5, 273, 0, 0, 1265, 1266, 5, 337, 0, 0, 1266, 1267, 5, 376, 0, 0, 1267, 1268, 3, 270, 135, 0, 1268, 1269, 5, 376, 0, 0, 1269, 1274, 3, 258, 129, 0, 1270, 1271, 5, 380, 0, 0, 1271, 1273, 3, 258, 129, 0, 1272, 1270, 1, 0, 0, 0, 1273, 1276, 1, 0, 0, 0, 1274, 1272, 1, 0, 0, 0, 1274, 1275, 1, 0, 0, 0, 1275, 1277, 1, 0, 0, 0, 1276, 1274, 1, 0, 0, 0, 1277, 1278, 5, 377, 0, 0, 1278, 1279, 5, 377, 0, 0, 1279, 1293, 1, 0, 0, 0, 1280, 1282, 5, 273, 0, 0, 1281, 1280, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1283, 1, 0, 0, 0, 1283, 1284, 5, 376, 0, 0, 1284, 1285, 3, 156, 78, 0, 1285, 1286, 5, 377, 0, 0, 1286, 1293, 1, 0, 0, 0, 1287, 1288, 5, 349, 0, 0, 1288, 1289, 5, 376, 0, 0, 1289, 1290, 3, 258, 129, 0, 1290, 1291, 5, 377, 0, 0, 1291, 1293, 1, 0, 0, 0, 1292, 1252, 1, 0, 0, 0, 1292, 1264, 1, 0, 0, 0, 1292, 1281, 1, 0, 0, 0, 1292, 1287, 1, 0, 0, 0, 1293, 181, 1, 0, 0, 0, 1294, 1295, 3, 312, 156, 0, 1295, 183, 1, 0, 0, 0, 1296, 1297, 5, 247, 0, 0, 1297, 1298, 5, 335, 0, 0, 1298, 1299, 5, 183, 0, 0, 1299, 1300, 5, 297, 0, 0, 1300, 1301, 3, 186, 93, 0, 1301, 185, 1, 0, 0, 0, 1302, 1303, 3, 258, 129, 0, 1303, 187, 1, 0, 0, 0, 1304, 1305, 5, 376, 0, 0, 1305, 1306, 3, 150, 75, 0, 1306, 1307, 5, 377, 0, 0, 1307, 1308, 3, 294, 147, 0, 1308, 189, 1, 0, 0, 0, 1309, 1310, 5, 337, 0, 0, 1310, 1311, 5, 376, 0, 0, 1311, 1312, 3, 192, 96, 0, 1312, 1313, 5, 377, 0, 0, 1313, 191, 1, 0, 0, 0, 1314, 1315, 3, 194, 97, 0, 1315, 1316, 5, 376, 0, 0, 1316, 1321, 3, 196, 98, 0, 1317, 1318, 5, 380, 0, 0, 1318, 1320, 3, 196, 98, 0, 1319, 1317, 1, 0, 0, 0, 1320, 1323, 1, 0, 0, 0, 1321, 1319, 1, 0, 0, 0, 1321, 1322, 1, 0, 0, 0, 1322, 1324, 1, 0, 0, 0, 1323, 1321, 1, 0, 0, 0, 1324, 1325, 5, 377, 0, 0, 1325, 193, 1, 0, 0, 0, 1326, 1327, 7, 22, 0, 0, 1327, 195, 1, 0, 0, 0, 1328, 1329, 5, 337, 0, 0, 1329, 1344, 3, 218, 109, 0, 1330, 1344, 3, 200, 100, 0, 1331, 1344, 3, 278, 139, 0, 1332, 1333, 5, 24, 0, 0, 1333, 1334, 5, 396, 0, 0, 1334, 1335, 5, 337, 0, 0, 1335, 1344, 3, 218, 109, 0, 1336, 1337, 5, 150, 0, 0, 1337, 1338, 5, 396, 0, 0, 1338, 1344, 3, 200, 100, 0, 1339, 1340, 3, 198, 99, 0, 1340, 1341, 5, 396, 0, 0, 1341, 1342, 3, 278, 139, 0, 1342, 1344, 1, 0, 0, 0, 1343, 1328, 1, 0, 0, 0, 1343, 1330, 1, 0, 0, 0, 1343, 1331, 1, 0, 0, 0, 1343, 1332, 1, 0, 0, 0, 1343, 1336, 1, 0, 0, 0, 1343, 1339, 1, 0, 0, 0, 1344, 197, 1, 0, 0, 0, 1345, 1346, 7, 23, 0, 0, 1346, 199, 1, 0, 0, 0, 1347, 1348, 5, 31, 0, 0, 1348, 1349, 5, 376, 0, 0, 1349, 1350, 3, 312, 156, 0, 1350, 1351, 5, 377, 0, 0, 1351, 201, 1, 0, 0, 0, 1352, 1353, 5, 299, 0, 0, 1353, 1367, 3, 260, 130, 0, 1354, 1355, 5, 353, 0, 0, 1355, 1356, 5, 376, 0, 0, 1356, 1361, 3, 312, 156, 0, 1357, 1358, 5, 380, 0, 0, 1358, 1360, 3, 312, 156, 0, 1359, 1357, 1, 0, 0, 0, 1360, 1363, 1, 0, 0, 0, 1361, 1359, 1, 0, 0, 0, 1361, 1362, 1, 0, 0, 0, 1362, 1364, 1, 0, 0, 0, 1363, 1361, 1, 0, 0, 0, 1364, 1365, 5, 377, 0, 0, 1365, 1367, 1, 0, 0, 0, 1366, 1352, 1, 0, 0, 0, 1366, 1354, 1, 0, 0, 0, 1367, 203, 1, 0, 0, 0, 1368, 1369, 5, 359, 0, 0, 1369, 1370, 3, 260, 130, 0, 1370, 205, 1, 0, 0, 0, 1371, 1372, 5, 253, 0, 0, 1372, 1373, 5, 194, 0, 0, 1373, 1378, 3, 208, 104, 0, 1374, 1375, 5, 380, 0, 0, 1375, 1377, 3, 208, 104, 0, 1376, 1374, 1, 0, 0, 0, 1377, 1380, 1, 0, 0, 0, 1378, 1376, 1, 0, 0, 0, 1378, 1379, 1, 0, 0, 0, 1379, 207, 1, 0, 0, 0, 1380, 1378, 1, 0, 0, 0, 1381, 1421, 3, 258, 129, 0, 1382, 1421, 3, 214, 107, 0, 1383, 1384, 5, 376, 0, 0, 1384, 1421, 5, 377, 0, 0, 1385, 1386, 5, 376, 0, 0, 1386, 1391, 3, 258, 129, 0, 1387, 1388, 5, 380, 0, 0, 1388, 1390, 3, 258, 129, 0, 1389, 1387, 1, 0, 0, 0, 1390, 1393, 1, 0, 0, 0, 1391, 1389, 1, 0, 0, 0, 1391, 1392, 1, 0, 0, 0, 1392, 1394, 1, 0, 0, 0, 1393, 1391, 1, 0, 0, 0, 1394, 1395, 5, 377, 0, 0, 1395, 1421, 1, 0, 0, 0, 1396, 1397, 3, 212, 106, 0, 1397, 1398, 5, 376, 0, 0, 1398, 1403, 3, 258, 129, 0, 1399, 1400, 5, 380, 0, 0, 1400, 1402, 3, 258, 129, 0, 1401, 1399, 1, 0, 0, 0, 1402, 1405, 1, 0, 0, 0, 1403, 1401, 1, 0, 0, 0, 1403, 1404, 1, 0, 0, 0, 1404, 1406, 1, 0, 0, 0, 1405, 1403, 1, 0, 0, 0, 1406, 1407, 5, 377, 0, 0, 1407, 1421, 1, 0, 0, 0, 1408, 1409, 3, 210, 105, 0, 1409, 1410, 5, 376, 0, 0, 1410, 1415, 3, 208, 104, 0, 1411, 1412, 5, 380, 0, 0, 1412, 1414, 3, 208, 104, 0, 1413, 1411, 1, 0, 0, 0, 1414, 1417, 1, 0, 0, 0, 1415, 1413, 1, 0, 0, 0, 1415, 1416, 1, 0, 0, 0, 1416, 1418, 1, 0, 0, 0, 1417, 1415, 1, 0, 0, 0, 1418, 1419, 5, 377, 0, 0, 1419, 1421, 1, 0, 0, 0, 1420, 1381, 1, 0, 0, 0, 1420, 1382, 1, 0, 0, 0, 1420, 1383, 1, 0, 0, 0, 1420, 1385, 1, 0, 0, 0, 1420, 1396, 1, 0, 0, 0, 1420, 1408, 1, 0, 0, 0, 1421, 209, 1, 0, 0, 0, 1422, 1423, 5, 254, 0, 0, 1423, 1424, 5, 136, 0, 0, 1424, 211, 1, 0, 0, 0, 1425, 1426, 7, 24, 0, 0, 1426, 213, 1, 0, 0, 0, 1427, 1428, 3, 216, 108, 0, 1428, 1429, 5, 376, 0, 0, 1429, 1430, 3, 218, 109, 0, 1430, 1431, 5, 380, 0, 0, 1431, 1432, 3, 278, 139, 0, 1432, 1433, 5, 377, 0, 0, 1433, 215, 1, 0, 0, 0, 1434, 1435, 7, 25, 0, 0, 1435, 217, 1, 0, 0, 0, 1436, 1437, 3, 312, 156, 0, 1437, 219, 1, 0, 0, 0, 1438, 1439, 5, 256, 0, 0, 1439, 1440, 3, 260, 130, 0, 1440, 221, 1, 0, 0, 0, 1441, 1442, 5, 360, 0, 0, 1442, 1447, 3, 224, 112, 0, 1443, 1444, 5, 380, 0, 0, 1444, 1446, 3, 224, 112, 0, 1445, 1443, 1, 0, 0, 0, 1446, 1449, 1, 0, 0, 0, 1447, 1445, 1, 0, 0, 0, 1447, 1448, 1, 0, 0, 0, 1448, 223, 1, 0, 0, 0, 1449, 1447, 1, 0, 0, 0, 1450, 1451, 3, 296, 148, 0, 1451, 1452, 5, 183, 0, 0, 1452, 1453, 3, 226, 113, 0, 1453, 225, 1, 0, 0, 0, 1454, 1456, 3, 296, 148, 0, 1455, 1454, 1, 0, 0, 0, 1455, 1456, 1, 0, 0, 0, 1456, 1457, 1, 0, 0, 0, 1457, 1459, 5, 376, 0, 0, 1458, 1460, 3, 236, 118, 0, 1459, 1458, 1, 0, 0, 0, 1459, 1460, 1, 0, 0, 0, 1460, 1462, 1, 0, 0, 0, 1461, 1463, 3, 230, 115, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1465, 1, 0, 0, 0, 1464, 1466, 3, 252, 126, 0, 1465, 1464, 1, 0, 0, 0, 1465, 1466, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1468, 5, 377, 0, 0, 1468, 227, 1, 0, 0, 0, 1469, 1470, 5, 280, 0, 0, 1470, 1472, 5, 376, 0, 0, 1471, 1473, 3, 236, 118, 0, 1472, 1471, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1475, 1, 0, 0, 0, 1474, 1476, 3, 230, 115, 0, 1475, 1474, 1, 0, 0, 0, 1475, 1476, 1, 0, 0, 0, 1476, 1478, 1, 0, 0, 0, 1477, 1479, 3, 240, 120, 0, 1478, 1477, 1, 0, 0, 0, 1478, 1479, 1, 0, 0, 0, 1479, 1481, 1, 0, 0, 0, 1480, 1482, 3, 246, 123, 0, 1481, 1480, 1, 0, 0, 0, 1481, 1482, 1, 0, 0, 0, 1482, 1484, 1, 0, 0, 0, 1483, 1485, 3, 248, 124, 0, 1484, 1483, 1, 0, 0, 0, 1484, 1485, 1, 0, 0, 0, 1485, 1487, 1, 0, 0, 0, 1486, 1488, 3, 242, 121, 0, 1487, 1486, 1, 0, 0, 0, 1487, 1488, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1490, 3, 250, 125, 0, 1490, 1495, 5, 377, 0, 0, 1491, 1493, 5, 183, 0, 0, 1492, 1491, 1, 0, 0, 0, 1492, 1493, 1, 0, 0, 0, 1493, 1494, 1, 0, 0, 0, 1494, 1496, 3, 304, 152, 0, 1495, 1492, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 229, 1, 0, 0, 0, 1497, 1498, 5, 302, 0, 0, 1498, 1499, 5, 194, 0, 0, 1499, 1504, 3, 232, 116, 0, 1500, 1501, 5, 380, 0, 0, 1501, 1503, 3, 232, 116, 0, 1502, 1500, 1, 0, 0, 0, 1503, 1506, 1, 0, 0, 0, 1504, 1502, 1, 0, 0, 0, 1504, 1505, 1, 0, 0, 0, 1505, 231, 1, 0, 0, 0, 1506, 1504, 1, 0, 0, 0, 1507, 1509, 3, 258, 129, 0, 1508, 1510, 7, 26, 0, 0, 1509, 1508, 1, 0, 0, 0, 1509, 1510, 1, 0, 0, 0, 1510, 1513, 1, 0, 0, 0, 1511, 1512, 5, 86, 0, 0, 1512, 1514, 7, 27, 0, 0, 1513, 1511, 1, 0, 0, 0, 1513, 1514, 1, 0, 0, 0, 1514, 233, 1, 0, 0, 0, 1515, 1518, 5, 277, 0, 0, 1516, 1519, 5, 176, 0, 0, 1517, 1519, 3, 258, 129, 0, 1518, 1516, 1, 0, 0, 0, 1518, 1517, 1, 0, 0, 0, 1519, 235, 1, 0, 0, 0, 1520, 1521, 5, 307, 0, 0, 1521, 1522, 5, 194, 0, 0, 1522, 1527, 3, 258, 129, 0, 1523, 1524, 5, 380, 0, 0, 1524, 1526, 3, 258, 129, 0, 1525, 1523, 1, 0, 0, 0, 1526, 1529, 1, 0, 0, 0, 1527, 1525, 1, 0, 0, 0, 1527, 1528, 1, 0, 0, 0, 1528, 237, 1, 0, 0, 0, 1529, 1527, 1, 0, 0, 0, 1530, 1547, 5, 387, 0, 0, 1531, 1547, 5, 390, 0, 0, 1532, 1547, 5, 395, 0, 0, 1533, 1534, 5, 378, 0, 0, 1534, 1535, 5, 398, 0, 0, 1535, 1536, 5, 380, 0, 0, 1536, 1537, 5, 398, 0, 0, 1537, 1547, 5, 379, 0, 0, 1538, 1539, 5, 378, 0, 0, 1539, 1540, 5, 398, 0, 0, 1540, 1541, 5, 380, 0, 0, 1541, 1547, 5, 379, 0, 0, 1542, 1543, 5, 378, 0, 0, 1543, 1544, 5, 380, 0, 0, 1544, 1545, 5, 398, 0, 0, 1545, 1547, 5, 379, 0, 0, 1546, 1530, 1, 0, 0, 0, 1546, 1531, 1, 0, 0, 0, 1546, 1532, 1, 0, 0, 0, 1546, 1533, 1, 0, 0, 0, 1546, 1538, 1, 0, 0, 0, 1546, 1542, 1, 0, 0, 0, 1547, 239, 1, 0, 0, 0, 1548, 1549, 5, 281, 0, 0, 1549, 1554, 3, 170, 85, 0, 1550, 1551, 5, 380, 0, 0, 1551, 1553, 3, 170, 85, 0, 1552, 1550, 1, 0, 0, 0, 1553, 1556, 1, 0, 0, 0, 1554, 1552, 1, 0, 0, 0, 1554, 1555, 1, 0, 0, 0, 1555, 241, 1, 0, 0, 0, 1556, 1554, 1, 0, 0, 0, 1557, 1558, 5, 308, 0, 0, 1558, 1560, 5, 376, 0, 0, 1559, 1561, 3, 244, 122, 0, 1560, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 1560, 1, 0, 0, 0, 1562, 1563, 1, 0, 0, 0, 1563, 1564, 1, 0, 0, 0, 1564, 1566, 5, 377, 0, 0, 1565, 1567, 3, 256, 128, 0, 1566, 1565, 1, 0, 0, 0, 1566, 1567, 1, 0, 0, 0, 1567, 243, 1, 0, 0, 0, 1568, 1570, 3, 306, 153, 0, 1569, 1571, 3, 238, 119, 0, 1570, 1569, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 245, 1, 0, 0, 0, 1572, 1573, 5, 176, 0, 0, 1573, 1574, 5, 323, 0, 0, 1574, 1575, 5, 309, 0, 0, 1575, 1581, 5, 279, 0, 0, 1576, 1577, 5, 300, 0, 0, 1577, 1578, 5, 322, 0, 0, 1578, 1579, 5, 309, 0, 0, 1579, 1581, 5, 279, 0, 0, 1580, 1572, 1, 0, 0, 0, 1580, 1576, 1, 0, 0, 0, 1581, 247, 1, 0, 0, 0, 1582, 1583, 5, 6, 0, 0, 1583, 1584, 5, 279, 0, 0, 1584, 1585, 5, 328, 0, 0, 1585, 1586, 5, 97, 0, 0, 1586, 1587, 5, 72, 0, 0, 1587, 1607, 5, 322, 0, 0, 1588, 1589, 5, 6, 0, 0, 1589, 1590, 5, 279, 0, 0, 1590, 1591, 5, 328, 0, 0, 1591, 1592, 5, 343, 0, 0, 1592, 1593, 5, 291, 0, 0, 1593, 1607, 5, 322, 0, 0, 1594, 1595, 5, 6, 0, 0, 1595, 1596, 5, 279, 0, 0, 1596, 1597, 5, 328, 0, 0, 1597, 1598, 5, 343, 0, 0, 1598, 1599, 5, 72, 0, 0, 1599, 1607, 3, 306, 153, 0, 1600, 1601, 5, 6, 0, 0, 1601, 1602, 5, 279, 0, 0, 1602, 1603, 5, 328, 0, 0, 1603, 1604, 5, 343, 0, 0, 1604, 1605, 5, 44, 0, 0, 1605, 1607, 3, 306, 153, 0, 1606, 1582, 1, 0, 0, 0, 1606, 1588, 1, 0, 0, 0, 1606, 1594, 1, 0, 0, 0, 1606, 1600, 1, 0, 0, 0, 1607, 249, 1, 0, 0, 0, 1608, 1609, 5, 229, 0, 0, 1609, 1614, 3, 170, 85, 0, 1610, 1611, 5, 380, 0, 0, 1611, 1613, 3, 170, 85, 0, 1612, 1610, 1, 0, 0, 0, 1613, 1616, 1, 0, 0, 0, 1614, 1612, 1, 0, 0, 0, 1614, 1615, 1, 0, 0, 0, 1615, 251, 1, 0, 0, 0, 1616, 1614, 1, 0, 0, 0, 1617, 1618, 5, 314, 0, 0, 1618, 1619, 5, 187, 0, 0, 1619, 1620, 3, 278, 139, 0, 1620, 1621, 3, 254, 127, 0, 1621, 1627, 1, 0, 0, 0, 1622, 1623, 5, 323, 0, 0, 1623, 1624, 5, 187, 0, 0, 1624, 1625, 5, 398, 0, 0, 1625, 1627, 3, 254, 127, 0, 1626, 1617, 1, 0, 0, 0, 1626, 1622, 1, 0, 0, 0, 1627, 253, 1, 0, 0, 0, 1628, 1629, 5, 101, 0, 0, 1629, 1630, 5, 179, 0, 0, 1630, 1631, 5, 219, 0, 0, 1631, 1632, 5, 322, 0, 0, 1632, 255, 1, 0, 0, 0, 1633, 1634, 5, 362, 0, 0, 1634, 1635, 3, 278, 139, 0, 1635, 257, 1, 0, 0, 0, 1636, 1637, 3, 260, 130, 0, 1637, 259, 1, 0, 0, 0, 1638, 1639, 6, 130, -1, 0, 1639, 1640, 5, 294, 0, 0, 1640, 1651, 3, 260, 130, 5, 1641, 1642, 5, 241, 0, 0, 1642, 1643, 5, 376, 0, 0, 1643, 1644, 3, 156, 78, 0, 1644, 1645, 5, 377, 0, 0, 1645, 1651, 1, 0, 0, 0, 1646, 1648, 3, 266, 133, 0, 1647, 1649, 3, 262, 131, 0, 1648, 1647, 1, 0, 0, 0, 1648, 1649, 1, 0, 0, 0, 1649, 1651, 1, 0, 0, 0, 1650, 1638, 1, 0, 0, 0, 1650, 1641, 1, 0, 0, 0, 1650, 1646, 1, 0, 0, 0, 1651, 1660, 1, 0, 0, 0, 1652, 1653, 10, 2, 0, 0, 1653, 1654, 5, 179, 0, 0, 1654, 1659, 3, 260, 130, 3, 1655, 1656, 10, 1, 0, 0, 1656, 1657, 5, 301, 0, 0, 1657, 1659, 3, 260, 130, 2, 1658, 1652, 1, 0, 0, 0, 1658, 1655, 1, 0, 0, 0, 1659, 1662, 1, 0, 0, 0, 1660, 1658, 1, 0, 0, 0, 1660, 1661, 1, 0, 0, 0, 1661, 261, 1, 0, 0, 0, 1662, 1660, 1, 0, 0, 0, 1663, 1665, 5, 294, 0, 0, 1664, 1663, 1, 0, 0, 0, 1664, 1665, 1, 0, 0, 0, 1665, 1666, 1, 0, 0, 0, 1666, 1667, 5, 187, 0, 0, 1667, 1668, 3, 266, 133, 0, 1668, 1669, 5, 179, 0, 0, 1669, 1670, 3, 266, 133, 0, 1670, 1747, 1, 0, 0, 0, 1671, 1673, 5, 294, 0, 0, 1672, 1671, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 1674, 1, 0, 0, 0, 1674, 1675, 5, 259, 0, 0, 1675, 1676, 5, 376, 0, 0, 1676, 1681, 3, 258, 129, 0, 1677, 1678, 5, 380, 0, 0, 1678, 1680, 3, 258, 129, 0, 1679, 1677, 1, 0, 0, 0, 1680, 1683, 1, 0, 0, 0, 1681, 1679, 1, 0, 0, 0, 1681, 1682, 1, 0, 0, 0, 1682, 1684, 1, 0, 0, 0, 1683, 1681, 1, 0, 0, 0, 1684, 1685, 5, 377, 0, 0, 1685, 1747, 1, 0, 0, 0, 1686, 1688, 5, 294, 0, 0, 1687, 1686, 1, 0, 0, 0, 1687, 1688, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1690, 5, 259, 0, 0, 1690, 1691, 5, 376, 0, 0, 1691, 1692, 3, 156, 78, 0, 1692, 1693, 5, 377, 0, 0, 1693, 1747, 1, 0, 0, 0, 1694, 1695, 5, 241, 0, 0, 1695, 1696, 5, 376, 0, 0, 1696, 1697, 3, 156, 78, 0, 1697, 1698, 5, 377, 0, 0, 1698, 1747, 1, 0, 0, 0, 1699, 1701, 5, 294, 0, 0, 1700, 1699, 1, 0, 0, 0, 1700, 1701, 1, 0, 0, 0, 1701, 1702, 1, 0, 0, 0, 1702, 1703, 5, 319, 0, 0, 1703, 1747, 3, 266, 133, 0, 1704, 1706, 5, 294, 0, 0, 1705, 1704, 1, 0, 0, 0, 1705, 1706, 1, 0, 0, 0, 1706, 1707, 1, 0, 0, 0, 1707, 1708, 5, 276, 0, 0, 1708, 1722, 7, 28, 0, 0, 1709, 1710, 5, 376, 0, 0, 1710, 1723, 5, 377, 0, 0, 1711, 1712, 5, 376, 0, 0, 1712, 1717, 3, 258, 129, 0, 1713, 1714, 5, 380, 0, 0, 1714, 1716, 3, 258, 129, 0, 1715, 1713, 1, 0, 0, 0, 1716, 1719, 1, 0, 0, 0, 1717, 1715, 1, 0, 0, 0, 1717, 1718, 1, 0, 0, 0, 1718, 1720, 1, 0, 0, 0, 1719, 1717, 1, 0, 0, 0, 1720, 1721, 5, 377, 0, 0, 1721, 1723, 1, 0, 0, 0, 1722, 1709, 1, 0, 0, 0, 1722, 1711, 1, 0, 0, 0, 1723, 1747, 1, 0, 0, 0, 1724, 1726, 5, 294, 0, 0, 1725, 1724, 1, 0, 0, 0, 1725, 1726, 1, 0, 0, 0, 1726, 1727, 1, 0, 0, 0, 1727, 1728, 5, 276, 0, 0, 1728, 1747, 3, 266, 133, 0, 1729, 1731, 5, 269, 0, 0, 1730, 1732, 5, 294, 0, 0, 1731, 1730, 1, 0, 0, 0, 1731, 1732, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1747, 5, 295, 0, 0, 1734, 1736, 5, 269, 0, 0, 1735, 1737, 5, 294, 0, 0, 1736, 1735, 1, 0, 0, 0, 1736, 1737, 1, 0, 0, 0, 1737, 1738, 1, 0, 0, 0, 1738, 1747, 7, 29, 0, 0, 1739, 1741, 5, 269, 0, 0, 1740, 1742, 5, 294, 0, 0, 1741, 1740, 1, 0, 0, 0, 1741, 1742, 1, 0, 0, 0, 1742, 1743, 1, 0, 0, 0, 1743, 1744, 5, 232, 0, 0, 1744, 1745, 5, 248, 0, 0, 1745, 1747, 3, 266, 133, 0, 1746, 1664, 1, 0, 0, 0, 1746, 1672, 1, 0, 0, 0, 1746, 1687, 1, 0, 0, 0, 1746, 1694, 1, 0, 0, 0, 1746, 1700, 1, 0, 0, 0, 1746, 1705, 1, 0, 0, 0, 1746, 1725, 1, 0, 0, 0, 1746, 1729, 1, 0, 0, 0, 1746, 1734, 1, 0, 0, 0, 1746, 1739, 1, 0, 0, 0, 1747, 263, 1, 0, 0, 0, 1748, 1750, 5, 294, 0, 0, 1749, 1748, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1751, 1, 0, 0, 0, 1751, 1752, 5, 276, 0, 0, 1752, 1766, 7, 28, 0, 0, 1753, 1754, 5, 376, 0, 0, 1754, 1767, 5, 377, 0, 0, 1755, 1756, 5, 376, 0, 0, 1756, 1761, 3, 258, 129, 0, 1757, 1758, 5, 380, 0, 0, 1758, 1760, 3, 258, 129, 0, 1759, 1757, 1, 0, 0, 0, 1760, 1763, 1, 0, 0, 0, 1761, 1759, 1, 0, 0, 0, 1761, 1762, 1, 0, 0, 0, 1762, 1764, 1, 0, 0, 0, 1763, 1761, 1, 0, 0, 0, 1764, 1765, 5, 377, 0, 0, 1765, 1767, 1, 0, 0, 0, 1766, 1753, 1, 0, 0, 0, 1766, 1755, 1, 0, 0, 0, 1767, 1774, 1, 0, 0, 0, 1768, 1770, 5, 294, 0, 0, 1769, 1768, 1, 0, 0, 0, 1769, 1770, 1, 0, 0, 0, 1770, 1771, 1, 0, 0, 0, 1771, 1772, 5, 276, 0, 0, 1772, 1774, 3, 266, 133, 0, 1773, 1749, 1, 0, 0, 0, 1773, 1769, 1, 0, 0, 0, 1774, 265, 1, 0, 0, 0, 1775, 1776, 6, 133, -1, 0, 1776, 1780, 3, 268, 134, 0, 1777, 1778, 7, 30, 0, 0, 1778, 1780, 3, 266, 133, 7, 1779, 1775, 1, 0, 0, 0, 1779, 1777, 1, 0, 0, 0, 1780, 1802, 1, 0, 0, 0, 1781, 1782, 10, 6, 0, 0, 1782, 1783, 7, 31, 0, 0, 1783, 1801, 3, 266, 133, 7, 1784, 1785, 10, 5, 0, 0, 1785, 1786, 7, 32, 0, 0, 1786, 1801, 3, 266, 133, 6, 1787, 1788, 10, 4, 0, 0, 1788, 1789, 5, 371, 0, 0, 1789, 1801, 3, 266, 133, 5, 1790, 1791, 10, 3, 0, 0, 1791, 1792, 5, 372, 0, 0, 1792, 1801, 3, 266, 133, 4, 1793, 1794, 10, 2, 0, 0, 1794, 1795, 5, 370, 0, 0, 1795, 1801, 3, 266, 133, 3, 1796, 1797, 10, 1, 0, 0, 1797, 1798, 3, 330, 165, 0, 1798, 1799, 3, 266, 133, 2, 1799, 1801, 1, 0, 0, 0, 1800, 1781, 1, 0, 0, 0, 1800, 1784, 1, 0, 0, 0, 1800, 1787, 1, 0, 0, 0, 1800, 1790, 1, 0, 0, 0, 1800, 1793, 1, 0, 0, 0, 1800, 1796, 1, 0, 0, 0, 1801, 1804, 1, 0, 0, 0, 1802, 1800, 1, 0, 0, 0, 1802, 1803, 1, 0, 0, 0, 1803, 267, 1, 0, 0, 0, 1804, 1802, 1, 0, 0, 0, 1805, 1806, 6, 134, -1, 0, 1806, 1808, 5, 198, 0, 0, 1807, 1809, 3, 310, 155, 0, 1808, 1807, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 1808, 1, 0, 0, 0, 1810, 1811, 1, 0, 0, 0, 1811, 1814, 1, 0, 0, 0, 1812, 1813, 5, 236, 0, 0, 1813, 1815, 3, 258, 129, 0, 1814, 1812, 1, 0, 0, 0, 1814, 1815, 1, 0, 0, 0, 1815, 1816, 1, 0, 0, 0, 1816, 1817, 5, 237, 0, 0, 1817, 1897, 1, 0, 0, 0, 1818, 1819, 5, 198, 0, 0, 1819, 1821, 3, 258, 129, 0, 1820, 1822, 3, 310, 155, 0, 1821, 1820, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1821, 1, 0, 0, 0, 1823, 1824, 1, 0, 0, 0, 1824, 1827, 1, 0, 0, 0, 1825, 1826, 5, 236, 0, 0, 1826, 1828, 3, 258, 129, 0, 1827, 1825, 1, 0, 0, 0, 1827, 1828, 1, 0, 0, 0, 1828, 1829, 1, 0, 0, 0, 1829, 1830, 5, 237, 0, 0, 1830, 1897, 1, 0, 0, 0, 1831, 1832, 5, 199, 0, 0, 1832, 1833, 5, 376, 0, 0, 1833, 1834, 3, 258, 129, 0, 1834, 1835, 5, 183, 0, 0, 1835, 1836, 3, 54, 27, 0, 1836, 1837, 5, 377, 0, 0, 1837, 1897, 1, 0, 0, 0, 1838, 1839, 5, 44, 0, 0, 1839, 1840, 5, 376, 0, 0, 1840, 1843, 3, 258, 129, 0, 1841, 1842, 5, 59, 0, 0, 1842, 1844, 5, 86, 0, 0, 1843, 1841, 1, 0, 0, 0, 1843, 1844, 1, 0, 0, 0, 1844, 1845, 1, 0, 0, 0, 1845, 1846, 5, 377, 0, 0, 1846, 1897, 1, 0, 0, 0, 1847, 1848, 5, 72, 0, 0, 1848, 1849, 5, 376, 0, 0, 1849, 1852, 3, 258, 129, 0, 1850, 1851, 5, 59, 0, 0, 1851, 1853, 5, 86, 0, 0, 1852, 1850, 1, 0, 0, 0, 1852, 1853, 1, 0, 0, 0, 1853, 1854, 1, 0, 0, 0, 1854, 1855, 5, 377, 0, 0, 1855, 1897, 1, 0, 0, 0, 1856, 1857, 5, 312, 0, 0, 1857, 1858, 5, 376, 0, 0, 1858, 1859, 3, 266, 133, 0, 1859, 1860, 5, 259, 0, 0, 1860, 1861, 3, 266, 133, 0, 1861, 1862, 5, 377, 0, 0, 1862, 1897, 1, 0, 0, 0, 1863, 1897, 3, 338, 169, 0, 1864, 1897, 5, 387, 0, 0, 1865, 1866, 3, 312, 156, 0, 1866, 1867, 5, 373, 0, 0, 1867, 1868, 5, 387, 0, 0, 1868, 1897, 1, 0, 0, 0, 1869, 1870, 5, 376, 0, 0, 1870, 1871, 3, 156, 78, 0, 1871, 1872, 5, 377, 0, 0, 1872, 1897, 1, 0, 0, 0, 1873, 1874, 3, 270, 135, 0, 1874, 1886, 5, 376, 0, 0, 1875, 1877, 3, 346, 173, 0, 1876, 1875, 1, 0, 0, 0, 1876, 1877, 1, 0, 0, 0, 1877, 1878, 1, 0, 0, 0, 1878, 1883, 3, 258, 129, 0, 1879, 1880, 5, 380, 0, 0, 1880, 1882, 3, 258, 129, 0, 1881, 1879, 1, 0, 0, 0, 1882, 1885, 1, 0, 0, 0, 1883, 1881, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 1887, 1, 0, 0, 0, 1885, 1883, 1, 0, 0, 0, 1886, 1876, 1, 0, 0, 0, 1886, 1887, 1, 0, 0, 0, 1887, 1888, 1, 0, 0, 0, 1888, 1889, 5, 377, 0, 0, 1889, 1897, 1, 0, 0, 0, 1890, 1897, 3, 304, 152, 0, 1891, 1897, 3, 272, 136, 0, 1892, 1893, 5, 376, 0, 0, 1893, 1894, 3, 258, 129, 0, 1894, 1895, 5, 377, 0, 0, 1895, 1897, 1, 0, 0, 0, 1896, 1805, 1, 0, 0, 0, 1896, 1818, 1, 0, 0, 0, 1896, 1831, 1, 0, 0, 0, 1896, 1838, 1, 0, 0, 0, 1896, 1847, 1, 0, 0, 0, 1896, 1856, 1, 0, 0, 0, 1896, 1863, 1, 0, 0, 0, 1896, 1864, 1, 0, 0, 0, 1896, 1865, 1, 0, 0, 0, 1896, 1869, 1, 0, 0, 0, 1896, 1873, 1, 0, 0, 0, 1896, 1890, 1, 0, 0, 0, 1896, 1891, 1, 0, 0, 0, 1896, 1892, 1, 0, 0, 0, 1897, 1905, 1, 0, 0, 0, 1898, 1899, 10, 4, 0, 0, 1899, 1900, 5, 374, 0, 0, 1900, 1901, 3, 266, 133, 0, 1901, 1902, 5, 375, 0, 0, 1902, 1904, 1, 0, 0, 0, 1903, 1898, 1, 0, 0, 0, 1904, 1907, 1, 0, 0, 0, 1905, 1903, 1, 0, 0, 0, 1905, 1906, 1, 0, 0, 0, 1906, 269, 1, 0, 0, 0, 1907, 1905, 1, 0, 0, 0, 1908, 1912, 3, 348, 174, 0, 1909, 1912, 3, 350, 175, 0, 1910, 1912, 3, 312, 156, 0, 1911, 1908, 1, 0, 0, 0, 1911, 1909, 1, 0, 0, 0, 1911, 1910, 1, 0, 0, 0, 1912, 271, 1, 0, 0, 0, 1913, 1914, 3, 312, 156, 0, 1914, 273, 1, 0, 0, 0, 1915, 1916, 3, 304, 152, 0, 1916, 275, 1, 0, 0, 0, 1917, 1920, 3, 304, 152, 0, 1918, 1920, 3, 272, 136, 0, 1919, 1917, 1, 0, 0, 0, 1919, 1918, 1, 0, 0, 0, 1920, 277, 1, 0, 0, 0, 1921, 1924, 5, 267, 0, 0, 1922, 1925, 3, 280, 140, 0, 1923, 1925, 3, 284, 142, 0, 1924, 1922, 1, 0, 0, 0, 1924, 1923, 1, 0, 0, 0, 1924, 1925, 1, 0, 0, 0, 1925, 279, 1, 0, 0, 0, 1926, 1928, 3, 282, 141, 0, 1927, 1929, 3, 286, 143, 0, 1928, 1927, 1, 0, 0, 0, 1928, 1929, 1, 0, 0, 0, 1929, 281, 1, 0, 0, 0, 1930, 1931, 3, 288, 144, 0, 1931, 1932, 3, 290, 145, 0, 1932, 1934, 1, 0, 0, 0, 1933, 1930, 1, 0, 0, 0, 1934, 1935, 1, 0, 0, 0, 1935, 1933, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 283, 1, 0, 0, 0, 1937, 1940, 3, 286, 143, 0, 1938, 1941, 3, 282, 141, 0, 1939, 1941, 3, 286, 143, 0, 1940, 1938, 1, 0, 0, 0, 1940, 1939, 1, 0, 0, 0, 1940, 1941, 1, 0, 0, 0, 1941, 285, 1, 0, 0, 0, 1942, 1943, 3, 288, 144, 0, 1943, 1944, 3, 290, 145, 0, 1944, 1945, 5, 343, 0, 0, 1945, 1946, 3, 290, 145, 0, 1946, 287, 1, 0, 0, 0, 1947, 1949, 7, 33, 0, 0, 1948, 1947, 1, 0, 0, 0, 1948, 1949, 1, 0, 0, 0, 1949, 1950, 1, 0, 0, 0, 1950, 1953, 7, 34, 0, 0, 1951, 1953, 5, 397, 0, 0, 1952, 1948, 1, 0, 0, 0, 1952, 1951, 1, 0, 0, 0, 1953, 289, 1, 0, 0, 0, 1954, 1957, 3, 304, 152, 0, 1955, 1957, 3, 348, 174, 0, 1956, 1954, 1, 0, 0, 0, 1956, 1955, 1, 0, 0, 0, 1957, 291, 1, 0, 0, 0, 1958, 1960, 5, 183, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1961, 1, 0, 0, 0, 1961, 1963, 3, 304, 152, 0, 1962, 1964, 3, 300, 150, 0, 1963, 1962, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 293, 1, 0, 0, 0, 1965, 1967, 5, 183, 0, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 3, 304, 152, 0, 1969, 1971, 3, 300, 150, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 295, 1, 0, 0, 0, 1972, 1973, 3, 304, 152, 0, 1973, 1974, 3, 298, 149, 0, 1974, 297, 1, 0, 0, 0, 1975, 1976, 5, 284, 0, 0, 1976, 1978, 3, 304, 152, 0, 1977, 1975, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 1977, 1, 0, 0, 0, 1979, 1980, 1, 0, 0, 0, 1980, 1983, 1, 0, 0, 0, 1981, 1983, 1, 0, 0, 0, 1982, 1977, 1, 0, 0, 0, 1982, 1981, 1, 0, 0, 0, 1983, 299, 1, 0, 0, 0, 1984, 1985, 5, 376, 0, 0, 1985, 1986, 3, 302, 151, 0, 1986, 1987, 5, 377, 0, 0, 1987, 301, 1, 0, 0, 0, 1988, 1993, 3, 304, 152, 0, 1989, 1990, 5, 380, 0, 0, 1990, 1992, 3, 304, 152, 0, 1991, 1989, 1, 0, 0, 0, 1992, 1995, 1, 0, 0, 0, 1993, 1991, 1, 0, 0, 0, 1993, 1994, 1, 0, 0, 0, 1994, 303, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1996, 2000, 3, 306, 153, 0, 1997, 2000, 3, 308, 154, 0, 1998, 2000, 3, 350, 175, 0, 1999, 1996, 1, 0, 0, 0, 1999, 1997, 1, 0, 0, 0, 1999, 1998, 1, 0, 0, 0, 2000, 305, 1, 0, 0, 0, 2001, 2002, 7, 35, 0, 0, 2002, 307, 1, 0, 0, 0, 2003, 2004, 5, 397, 0, 0, 2004, 309, 1, 0, 0, 0, 2005, 2006, 5, 358, 0, 0, 2006, 2007, 3, 258, 129, 0, 2007, 2008, 5, 339, 0, 0, 2008, 2009, 3, 258, 129, 0, 2009, 311, 1, 0, 0, 0, 2010, 2015, 3, 304, 152, 0, 2011, 2012, 5, 373, 0, 0, 2012, 2014, 3, 304, 152, 0, 2013, 2011, 1, 0, 0, 0, 2014, 2017, 1, 0, 0, 0, 2015, 2016, 1, 0, 0, 0, 2015, 2013, 1, 0, 0, 0, 2016, 313, 1, 0, 0, 0, 2017, 2015, 1, 0, 0, 0, 2018, 2019, 5, 361, 0, 0, 2019, 2020, 3, 320, 160, 0, 2020, 315, 1, 0, 0, 0, 2021, 2022, 5, 58, 0, 0, 2022, 2023, 5, 294, 0, 0, 2023, 2024, 5, 241, 0, 0, 2024, 317, 1, 0, 0, 0, 2025, 2026, 5, 58, 0, 0, 2026, 2027, 5, 241, 0, 0, 2027, 319, 1, 0, 0, 0, 2028, 2029, 5, 376, 0, 0, 2029, 2034, 3, 322, 161, 0, 2030, 2031, 5, 380, 0, 0, 2031, 2033, 3, 322, 161, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2036, 1, 0, 0, 0, 2034, 2032, 1, 0, 0, 0, 2034, 2035, 1, 0, 0, 0, 2035, 2037, 1, 0, 0, 0, 2036, 2034, 1, 0, 0, 0, 2037, 2038, 5, 377, 0, 0, 2038, 321, 1, 0, 0, 0, 2039, 2044, 3, 324, 162, 0, 2040, 2042, 5, 365, 0, 0, 2041, 2040, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2043, 1, 0, 0, 0, 2043, 2045, 3, 326, 163, 0, 2044, 2041, 1, 0, 0, 0, 2044, 2045, 1, 0, 0, 0, 2045, 323, 1, 0, 0, 0, 2046, 2050, 3, 304, 152, 0, 2047, 2050, 3, 272, 136, 0, 2048, 2050, 5, 397, 0, 0, 2049, 2046, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2049, 2048, 1, 0, 0, 0, 2050, 325, 1, 0, 0, 0, 2051, 2056, 5, 398, 0, 0, 2052, 2056, 5, 399, 0, 0, 2053, 2056, 3, 344, 172, 0, 2054, 2056, 5, 397, 0, 0, 2055, 2051, 1, 0, 0, 0, 2055, 2052, 1, 0, 0, 0, 2055, 2053, 1, 0, 0, 0, 2055, 2054, 1, 0, 0, 0, 2056, 327, 1, 0, 0, 0, 2057, 2064, 5, 179, 0, 0, 2058, 2059, 5, 371, 0, 0, 2059, 2064, 5, 371, 0, 0, 2060, 2064, 5, 301, 0, 0, 2061, 2062, 5, 370, 0, 0, 2062, 2064, 5, 370, 0, 0, 2063, 2057, 1, 0, 0, 0, 2063, 2058, 1, 0, 0, 0, 2063, 2060, 1, 0, 0, 0, 2063, 2061, 1, 0, 0, 0, 2064, 329, 1, 0, 0, 0, 2065, 2080, 5, 365, 0, 0, 2066, 2080, 5, 366, 0, 0, 2067, 2080, 5, 367, 0, 0, 2068, 2069, 5, 367, 0, 0, 2069, 2080, 5, 365, 0, 0, 2070, 2071, 5, 366, 0, 0, 2071, 2080, 5, 365, 0, 0, 2072, 2073, 5, 367, 0, 0, 2073, 2080, 5, 366, 0, 0, 2074, 2075, 5, 368, 0, 0, 2075, 2080, 5, 365, 0, 0, 2076, 2077, 5, 367, 0, 0, 2077, 2078, 5, 365, 0, 0, 2078, 2080, 5, 366, 0, 0, 2079, 2065, 1, 0, 0, 0, 2079, 2066, 1, 0, 0, 0, 2079, 2067, 1, 0, 0, 0, 2079, 2068, 1, 0, 0, 0, 2079, 2070, 1, 0, 0, 0, 2079, 2072, 1, 0, 0, 0, 2079, 2074, 1, 0, 0, 0, 2079, 2076, 1, 0, 0, 0, 2080, 331, 1, 0, 0, 0, 2081, 2082, 5, 367, 0, 0, 2082, 2089, 5, 367, 0, 0, 2083, 2084, 5, 366, 0, 0, 2084, 2089, 5, 366, 0, 0, 2085, 2089, 5, 371, 0, 0, 2086, 2089, 5, 372, 0, 0, 2087, 2089, 5, 370, 0, 0, 2088, 2081, 1, 0, 0, 0, 2088, 2083, 1, 0, 0, 0, 2088, 2085, 1, 0, 0, 0, 2088, 2086, 1, 0, 0, 0, 2088, 2087, 1, 0, 0, 0, 2089, 333, 1, 0, 0, 0, 2090, 2091, 7, 36, 0, 0, 2091, 335, 1, 0, 0, 0, 2092, 2093, 7, 37, 0, 0, 2093, 337, 1, 0, 0, 0, 2094, 2107, 3, 340, 170, 0, 2095, 2107, 3, 342, 171, 0, 2096, 2107, 3, 278, 139, 0, 2097, 2098, 5, 389, 0, 0, 2098, 2107, 3, 342, 171, 0, 2099, 2107, 3, 344, 172, 0, 2100, 2107, 5, 399, 0, 0, 2101, 2107, 5, 400, 0, 0, 2102, 2104, 5, 294, 0, 0, 2103, 2102, 1, 0, 0, 0, 2103, 2104, 1, 0, 0, 0, 2104, 2105, 1, 0, 0, 0, 2105, 2107, 5, 295, 0, 0, 2106, 2094, 1, 0, 0, 0, 2106, 2095, 1, 0, 0, 0, 2106, 2096, 1, 0, 0, 0, 2106, 2097, 1, 0, 0, 0, 2106, 2099, 1, 0, 0, 0, 2106, 2100, 1, 0, 0, 0, 2106, 2101, 1, 0, 0, 0, 2106, 2103, 1, 0, 0, 0, 2107, 339, 1, 0, 0, 0, 2108, 2109, 5, 397, 0, 0, 2109, 341, 1, 0, 0, 0, 2110, 2111, 5, 398, 0, 0, 2111, 343, 1, 0, 0, 0, 2112, 2113, 7, 29, 0, 0, 2113, 345, 1, 0, 0, 0, 2114, 2115, 7, 38, 0, 0, 2115, 347, 1, 0, 0, 0, 2116, 2117, 7, 39, 0, 0, 2117, 349, 1, 0, 0, 0, 2118, 2119, 7, 40, 0, 0, 2119, 351, 1, 0, 0, 0, 244, 360, 363, 365, 380, 398, 402, 411, 416, 423, 430, 434, 443, 455, 458, 465, 473, 478, 481, 488, 496, 500, 512, 520, 524, 545, 549, 553, 557, 566, 571, 575, 579, 583, 586, 590, 595, 601, 606, 611, 614, 618, 626, 634, 638, 642, 646, 650, 654, 658, 662, 666, 668, 678, 686, 710, 717, 732, 735, 743, 755, 779, 792, 797, 801, 809, 813, 821, 831, 835, 841, 845, 849, 852, 861, 865, 872, 875, 885, 893, 901, 905, 920, 939, 950, 954, 961, 966, 972, 976, 983, 987, 991, 995, 1003, 1007, 1012, 1017, 1023, 1026, 1030, 1041, 1050, 1063, 1078, 1081, 1085, 1088, 1090, 1095, 1099, 1102, 1106, 1115, 1124, 1134, 1139, 1151, 1154, 1157, 1160, 1166, 1170, 1178, 1181, 1186, 1189, 1191, 1205, 1216, 1221, 1229, 1232, 1235, 1240, 1242, 1244, 1249, 1252, 1256, 1259, 1262, 1274, 1281, 1292, 1321, 1343, 1361, 1366, 1378, 1391, 1403, 1415, 1420, 1447, 1455, 1459, 1462, 1465, 1472, 1475, 1478, 1481, 1484, 1487, 1492, 1495, 1504, 1509, 1513, 1518, 1527, 1546, 1554, 1562, 1566, 1570, 1580, 1606, 1614, 1626, 1648, 1650, 1658, 1660, 1664, 1672, 1681, 1687, 1700, 1705, 1717, 1722, 1725, 1731, 1736, 1741, 1746, 1749, 1761, 1766, 1769, 1773, 1779, 1800, 1802, 1810, 1814, 1823, 1827, 1843, 1852, 1876, 1883, 1886, 1896, 1905, 1911, 1919, 1924, 1928, 1935, 1940, 1948, 1952, 1956, 1959, 1963, 1966, 1970, 1979, 1982, 1993, 1999, 2015, 2034, 2041, 2044, 2049, 2055, 2063, 2079, 2088, 2103, 2106] \ No newline at end of file +[4, 1, 402, 2128, 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, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 3, 2, 361, 8, 2, 1, 2, 5, 2, 364, 8, 2, 10, 2, 12, 2, 367, 9, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 381, 8, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 399, 8, 5, 1, 6, 1, 6, 3, 6, 403, 8, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 3, 8, 412, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 417, 8, 8, 1, 9, 1, 9, 1, 9, 5, 9, 422, 8, 9, 10, 9, 12, 9, 425, 9, 9, 1, 10, 1, 10, 1, 11, 1, 11, 3, 11, 431, 8, 11, 1, 11, 1, 11, 3, 11, 435, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 442, 8, 12, 10, 12, 12, 12, 445, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 456, 8, 13, 1, 13, 3, 13, 459, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 466, 8, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 3, 13, 474, 8, 13, 1, 13, 1, 13, 1, 13, 3, 13, 479, 8, 13, 1, 13, 3, 13, 482, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 489, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 3, 16, 497, 8, 16, 1, 17, 1, 17, 3, 17, 501, 8, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 513, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 521, 8, 19, 1, 19, 1, 19, 3, 19, 525, 8, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 546, 8, 19, 1, 20, 1, 20, 3, 20, 550, 8, 20, 1, 21, 1, 21, 3, 21, 554, 8, 21, 1, 21, 1, 21, 3, 21, 558, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 5, 21, 565, 8, 21, 10, 21, 12, 21, 568, 9, 21, 1, 21, 1, 21, 3, 21, 572, 8, 21, 1, 21, 1, 21, 3, 21, 576, 8, 21, 1, 21, 1, 21, 3, 21, 580, 8, 21, 1, 21, 1, 21, 3, 21, 584, 8, 21, 1, 21, 3, 21, 587, 8, 21, 1, 21, 1, 21, 3, 21, 591, 8, 21, 1, 22, 1, 22, 1, 22, 3, 22, 596, 8, 22, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 602, 8, 22, 1, 23, 1, 23, 1, 23, 3, 23, 607, 8, 23, 1, 24, 1, 24, 1, 24, 3, 24, 612, 8, 24, 1, 24, 3, 24, 615, 8, 24, 1, 25, 1, 25, 3, 25, 619, 8, 25, 1, 26, 1, 26, 1, 26, 1, 26, 5, 26, 625, 8, 26, 10, 26, 12, 26, 628, 9, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 3, 27, 635, 8, 27, 1, 27, 1, 27, 3, 27, 639, 8, 27, 1, 27, 1, 27, 3, 27, 643, 8, 27, 1, 27, 1, 27, 3, 27, 647, 8, 27, 1, 27, 1, 27, 3, 27, 651, 8, 27, 1, 27, 1, 27, 3, 27, 655, 8, 27, 1, 27, 1, 27, 3, 27, 659, 8, 27, 1, 27, 1, 27, 3, 27, 663, 8, 27, 1, 27, 1, 27, 3, 27, 667, 8, 27, 3, 27, 669, 8, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 3, 29, 679, 8, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 3, 30, 687, 8, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 5, 33, 709, 8, 33, 10, 33, 12, 33, 712, 9, 33, 1, 33, 1, 33, 1, 34, 1, 34, 3, 34, 718, 8, 34, 1, 34, 1, 34, 1, 34, 1, 34, 3, 34, 724, 8, 34, 1, 34, 3, 34, 727, 8, 34, 1, 34, 3, 34, 730, 8, 34, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 36, 3, 36, 740, 8, 36, 1, 36, 3, 36, 743, 8, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 3, 38, 751, 8, 38, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 3, 41, 763, 8, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 5, 45, 785, 8, 45, 10, 45, 12, 45, 788, 9, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 5, 46, 798, 8, 46, 10, 46, 12, 46, 801, 9, 46, 1, 46, 1, 46, 3, 46, 805, 8, 46, 1, 47, 1, 47, 3, 47, 809, 8, 47, 1, 48, 1, 48, 1, 48, 1, 48, 5, 48, 815, 8, 48, 10, 48, 12, 48, 818, 9, 48, 1, 48, 3, 48, 821, 8, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 829, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 3, 52, 839, 8, 52, 1, 52, 1, 52, 3, 52, 843, 8, 52, 1, 52, 1, 52, 1, 53, 1, 53, 3, 53, 849, 8, 53, 1, 53, 1, 53, 3, 53, 853, 8, 53, 1, 53, 1, 53, 3, 53, 857, 8, 53, 1, 53, 3, 53, 860, 8, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 869, 8, 54, 1, 54, 1, 54, 3, 54, 873, 8, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 3, 54, 880, 8, 54, 1, 54, 3, 54, 883, 8, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 5, 55, 891, 8, 55, 10, 55, 12, 55, 894, 9, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 3, 57, 901, 8, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 909, 8, 57, 1, 58, 1, 58, 3, 58, 913, 8, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 3, 60, 928, 8, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 1, 64, 3, 64, 947, 8, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 958, 8, 66, 1, 66, 1, 66, 3, 66, 962, 8, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 3, 66, 969, 8, 66, 1, 67, 1, 67, 1, 67, 3, 67, 974, 8, 67, 1, 67, 1, 67, 1, 68, 1, 68, 3, 68, 980, 8, 68, 1, 68, 1, 68, 3, 68, 984, 8, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 3, 69, 991, 8, 69, 1, 69, 1, 69, 3, 69, 995, 8, 69, 1, 70, 1, 70, 3, 70, 999, 8, 70, 1, 70, 1, 70, 3, 70, 1003, 8, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 3, 71, 1011, 8, 71, 1, 71, 1, 71, 3, 71, 1015, 8, 71, 1, 71, 1, 71, 1, 72, 3, 72, 1020, 8, 72, 1, 72, 1, 72, 1, 72, 3, 72, 1025, 8, 72, 1, 73, 1, 73, 1, 73, 1, 73, 3, 73, 1031, 8, 73, 1, 73, 3, 73, 1034, 8, 73, 1, 73, 1, 73, 3, 73, 1038, 8, 73, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 5, 75, 1047, 8, 75, 10, 75, 12, 75, 1050, 9, 75, 1, 76, 1, 76, 1, 76, 1, 76, 5, 76, 1056, 8, 76, 10, 76, 12, 76, 1059, 9, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 1, 77, 4, 77, 1069, 8, 77, 11, 77, 12, 77, 1070, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1086, 8, 78, 1, 78, 3, 78, 1089, 8, 78, 1, 78, 1, 78, 3, 78, 1093, 8, 78, 1, 78, 3, 78, 1096, 8, 78, 3, 78, 1098, 8, 78, 1, 78, 1, 78, 1, 78, 3, 78, 1103, 8, 78, 1, 78, 1, 78, 3, 78, 1107, 8, 78, 1, 78, 3, 78, 1110, 8, 78, 5, 78, 1112, 8, 78, 10, 78, 12, 78, 1115, 9, 78, 1, 79, 1, 79, 1, 79, 1, 79, 5, 79, 1121, 8, 79, 10, 79, 12, 79, 1124, 9, 79, 1, 80, 1, 80, 1, 80, 1, 80, 5, 80, 1130, 8, 80, 10, 80, 12, 80, 1133, 9, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 5, 81, 1140, 8, 81, 10, 81, 12, 81, 1143, 9, 81, 1, 81, 1, 81, 3, 81, 1147, 8, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 3, 83, 1159, 8, 83, 1, 83, 3, 83, 1162, 8, 83, 1, 83, 3, 83, 1165, 8, 83, 1, 83, 3, 83, 1168, 8, 83, 1, 83, 1, 83, 1, 83, 1, 83, 3, 83, 1174, 8, 83, 1, 84, 1, 84, 3, 84, 1178, 8, 84, 1, 84, 1, 84, 1, 84, 1, 84, 5, 84, 1184, 8, 84, 10, 84, 12, 84, 1187, 9, 84, 3, 84, 1189, 8, 84, 1, 85, 1, 85, 1, 85, 3, 85, 1194, 8, 85, 1, 85, 3, 85, 1197, 8, 85, 3, 85, 1199, 8, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 3, 86, 1213, 8, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 5, 88, 1222, 8, 88, 10, 88, 12, 88, 1225, 9, 88, 1, 88, 1, 88, 3, 88, 1229, 8, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1237, 8, 88, 1, 88, 3, 88, 1240, 8, 88, 1, 88, 3, 88, 1243, 8, 88, 1, 88, 1, 88, 1, 88, 3, 88, 1248, 8, 88, 5, 88, 1250, 8, 88, 10, 88, 12, 88, 1253, 9, 88, 1, 89, 1, 89, 3, 89, 1257, 8, 89, 1, 90, 3, 90, 1260, 8, 90, 1, 90, 1, 90, 3, 90, 1264, 8, 90, 1, 90, 3, 90, 1267, 8, 90, 1, 90, 3, 90, 1270, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 5, 90, 1280, 8, 90, 10, 90, 12, 90, 1283, 9, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1289, 8, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 1, 90, 3, 90, 1300, 8, 90, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 5, 96, 1327, 8, 96, 10, 96, 12, 96, 1330, 9, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 3, 98, 1351, 8, 98, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 5, 101, 1367, 8, 101, 10, 101, 12, 101, 1370, 9, 101, 1, 101, 1, 101, 3, 101, 1374, 8, 101, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 5, 103, 1384, 8, 103, 10, 103, 12, 103, 1387, 9, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1397, 8, 104, 10, 104, 12, 104, 1400, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1409, 8, 104, 10, 104, 12, 104, 1412, 9, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 1, 104, 5, 104, 1421, 8, 104, 10, 104, 12, 104, 1424, 9, 104, 1, 104, 1, 104, 3, 104, 1428, 8, 104, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 5, 111, 1453, 8, 111, 10, 111, 12, 111, 1456, 9, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 3, 113, 1463, 8, 113, 1, 113, 1, 113, 3, 113, 1467, 8, 113, 1, 113, 3, 113, 1470, 8, 113, 1, 113, 3, 113, 1473, 8, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 3, 114, 1480, 8, 114, 1, 114, 3, 114, 1483, 8, 114, 1, 114, 3, 114, 1486, 8, 114, 1, 114, 3, 114, 1489, 8, 114, 1, 114, 3, 114, 1492, 8, 114, 1, 114, 3, 114, 1495, 8, 114, 1, 114, 1, 114, 1, 114, 3, 114, 1500, 8, 114, 1, 114, 3, 114, 1503, 8, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 5, 115, 1510, 8, 115, 10, 115, 12, 115, 1513, 9, 115, 1, 116, 1, 116, 3, 116, 1517, 8, 116, 1, 116, 1, 116, 3, 116, 1521, 8, 116, 1, 117, 1, 117, 1, 117, 3, 117, 1526, 8, 117, 1, 118, 1, 118, 1, 118, 1, 118, 1, 118, 5, 118, 1533, 8, 118, 10, 118, 12, 118, 1536, 9, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 3, 119, 1554, 8, 119, 1, 120, 1, 120, 1, 120, 1, 120, 5, 120, 1560, 8, 120, 10, 120, 12, 120, 1563, 9, 120, 1, 121, 1, 121, 1, 121, 4, 121, 1568, 8, 121, 11, 121, 12, 121, 1569, 1, 121, 1, 121, 3, 121, 1574, 8, 121, 1, 122, 1, 122, 3, 122, 1578, 8, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 3, 123, 1588, 8, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 3, 124, 1614, 8, 124, 1, 125, 1, 125, 1, 125, 1, 125, 5, 125, 1620, 8, 125, 10, 125, 12, 125, 1623, 9, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 3, 126, 1634, 8, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 3, 130, 1656, 8, 130, 3, 130, 1658, 8, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 5, 130, 1666, 8, 130, 10, 130, 12, 130, 1669, 9, 130, 1, 131, 3, 131, 1672, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1680, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1687, 8, 131, 10, 131, 12, 131, 1690, 9, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1695, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1708, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1713, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 5, 131, 1723, 8, 131, 10, 131, 12, 131, 1726, 9, 131, 1, 131, 1, 131, 3, 131, 1730, 8, 131, 1, 131, 3, 131, 1733, 8, 131, 1, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1739, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1744, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1749, 8, 131, 1, 131, 1, 131, 1, 131, 3, 131, 1754, 8, 131, 1, 132, 3, 132, 1757, 8, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 5, 132, 1767, 8, 132, 10, 132, 12, 132, 1770, 9, 132, 1, 132, 1, 132, 3, 132, 1774, 8, 132, 1, 132, 3, 132, 1777, 8, 132, 1, 132, 1, 132, 3, 132, 1781, 8, 132, 1, 133, 1, 133, 1, 133, 1, 133, 3, 133, 1787, 8, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 5, 133, 1808, 8, 133, 10, 133, 12, 133, 1811, 9, 133, 1, 134, 1, 134, 1, 134, 4, 134, 1816, 8, 134, 11, 134, 12, 134, 1817, 1, 134, 1, 134, 3, 134, 1822, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 4, 134, 1829, 8, 134, 11, 134, 12, 134, 1830, 1, 134, 1, 134, 3, 134, 1835, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1851, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1860, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1884, 8, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1889, 8, 134, 10, 134, 12, 134, 1892, 9, 134, 3, 134, 1894, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 3, 134, 1904, 8, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 5, 134, 1911, 8, 134, 10, 134, 12, 134, 1914, 9, 134, 1, 135, 1, 135, 1, 135, 3, 135, 1919, 8, 135, 1, 136, 1, 136, 1, 137, 1, 137, 1, 138, 1, 138, 3, 138, 1927, 8, 138, 1, 139, 1, 139, 1, 139, 3, 139, 1932, 8, 139, 1, 140, 1, 140, 3, 140, 1936, 8, 140, 1, 141, 1, 141, 1, 141, 4, 141, 1941, 8, 141, 11, 141, 12, 141, 1942, 1, 142, 1, 142, 1, 142, 3, 142, 1948, 8, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 3, 144, 1956, 8, 144, 1, 144, 1, 144, 3, 144, 1960, 8, 144, 1, 145, 1, 145, 3, 145, 1964, 8, 145, 1, 146, 3, 146, 1967, 8, 146, 1, 146, 1, 146, 3, 146, 1971, 8, 146, 1, 147, 3, 147, 1974, 8, 147, 1, 147, 1, 147, 3, 147, 1978, 8, 147, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 4, 149, 1985, 8, 149, 11, 149, 12, 149, 1986, 1, 149, 3, 149, 1990, 8, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 5, 151, 1999, 8, 151, 10, 151, 12, 151, 2002, 9, 151, 1, 152, 1, 152, 1, 152, 3, 152, 2007, 8, 152, 1, 153, 1, 153, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 5, 156, 2021, 8, 156, 10, 156, 12, 156, 2024, 9, 156, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 5, 160, 2040, 8, 160, 10, 160, 12, 160, 2043, 9, 160, 1, 160, 1, 160, 1, 161, 1, 161, 3, 161, 2049, 8, 161, 1, 161, 3, 161, 2052, 8, 161, 1, 162, 1, 162, 1, 162, 3, 162, 2057, 8, 162, 1, 163, 1, 163, 1, 163, 1, 163, 3, 163, 2063, 8, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 3, 164, 2071, 8, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 3, 165, 2087, 8, 165, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 1, 166, 3, 166, 2096, 8, 166, 1, 167, 1, 167, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 3, 169, 2111, 8, 169, 1, 169, 3, 169, 2114, 8, 169, 1, 170, 1, 170, 1, 171, 1, 171, 1, 172, 1, 172, 1, 173, 1, 173, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 2022, 5, 156, 176, 260, 266, 268, 176, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 0, 41, 2, 0, 30, 30, 231, 231, 3, 0, 16, 16, 37, 37, 67, 67, 4, 0, 13, 13, 26, 26, 64, 64, 166, 166, 2, 0, 12, 12, 25, 25, 2, 0, 248, 248, 259, 259, 2, 0, 165, 165, 337, 337, 2, 0, 4, 4, 117, 117, 1, 0, 107, 111, 3, 0, 192, 192, 222, 222, 295, 295, 11, 0, 10, 10, 145, 145, 151, 151, 188, 189, 201, 201, 223, 223, 264, 265, 329, 329, 340, 340, 342, 342, 356, 357, 2, 0, 361, 361, 363, 363, 4, 0, 225, 226, 233, 233, 246, 246, 296, 296, 2, 0, 182, 182, 289, 289, 2, 0, 40, 40, 260, 260, 3, 0, 21, 21, 95, 95, 176, 176, 3, 0, 40, 40, 93, 93, 260, 260, 3, 0, 52, 52, 89, 89, 169, 169, 3, 0, 65, 65, 106, 106, 125, 125, 2, 0, 11, 11, 122, 122, 2, 0, 92, 92, 268, 268, 3, 0, 239, 239, 266, 266, 346, 346, 4, 0, 249, 249, 261, 261, 275, 275, 318, 318, 3, 0, 23, 23, 56, 56, 155, 155, 5, 0, 24, 24, 138, 139, 144, 144, 150, 150, 298, 298, 2, 0, 218, 218, 321, 321, 3, 0, 56, 56, 135, 135, 155, 155, 2, 0, 8, 8, 30, 30, 2, 0, 44, 44, 72, 72, 2, 0, 176, 176, 180, 180, 2, 0, 245, 245, 344, 344, 2, 0, 369, 369, 389, 390, 4, 0, 32, 32, 387, 387, 391, 391, 394, 394, 2, 0, 389, 390, 392, 392, 1, 0, 389, 390, 1, 0, 398, 399, 2, 0, 398, 398, 401, 401, 4, 0, 32, 32, 387, 387, 389, 391, 393, 394, 3, 0, 294, 294, 368, 369, 389, 390, 2, 0, 176, 176, 232, 232, 1, 0, 175, 364, 1, 0, 4, 174, 2312, 0, 352, 1, 0, 0, 0, 2, 355, 1, 0, 0, 0, 4, 365, 1, 0, 0, 0, 6, 380, 1, 0, 0, 0, 8, 382, 1, 0, 0, 0, 10, 398, 1, 0, 0, 0, 12, 402, 1, 0, 0, 0, 14, 404, 1, 0, 0, 0, 16, 407, 1, 0, 0, 0, 18, 418, 1, 0, 0, 0, 20, 426, 1, 0, 0, 0, 22, 434, 1, 0, 0, 0, 24, 436, 1, 0, 0, 0, 26, 481, 1, 0, 0, 0, 28, 483, 1, 0, 0, 0, 30, 490, 1, 0, 0, 0, 32, 494, 1, 0, 0, 0, 34, 498, 1, 0, 0, 0, 36, 502, 1, 0, 0, 0, 38, 545, 1, 0, 0, 0, 40, 549, 1, 0, 0, 0, 42, 551, 1, 0, 0, 0, 44, 592, 1, 0, 0, 0, 46, 606, 1, 0, 0, 0, 48, 608, 1, 0, 0, 0, 50, 618, 1, 0, 0, 0, 52, 620, 1, 0, 0, 0, 54, 668, 1, 0, 0, 0, 56, 670, 1, 0, 0, 0, 58, 674, 1, 0, 0, 0, 60, 682, 1, 0, 0, 0, 62, 690, 1, 0, 0, 0, 64, 694, 1, 0, 0, 0, 66, 701, 1, 0, 0, 0, 68, 729, 1, 0, 0, 0, 70, 731, 1, 0, 0, 0, 72, 734, 1, 0, 0, 0, 74, 744, 1, 0, 0, 0, 76, 746, 1, 0, 0, 0, 78, 752, 1, 0, 0, 0, 80, 754, 1, 0, 0, 0, 82, 762, 1, 0, 0, 0, 84, 770, 1, 0, 0, 0, 86, 772, 1, 0, 0, 0, 88, 776, 1, 0, 0, 0, 90, 780, 1, 0, 0, 0, 92, 804, 1, 0, 0, 0, 94, 808, 1, 0, 0, 0, 96, 810, 1, 0, 0, 0, 98, 822, 1, 0, 0, 0, 100, 828, 1, 0, 0, 0, 102, 830, 1, 0, 0, 0, 104, 835, 1, 0, 0, 0, 106, 846, 1, 0, 0, 0, 108, 864, 1, 0, 0, 0, 110, 884, 1, 0, 0, 0, 112, 895, 1, 0, 0, 0, 114, 897, 1, 0, 0, 0, 116, 910, 1, 0, 0, 0, 118, 917, 1, 0, 0, 0, 120, 920, 1, 0, 0, 0, 122, 929, 1, 0, 0, 0, 124, 933, 1, 0, 0, 0, 126, 937, 1, 0, 0, 0, 128, 940, 1, 0, 0, 0, 130, 948, 1, 0, 0, 0, 132, 953, 1, 0, 0, 0, 134, 970, 1, 0, 0, 0, 136, 977, 1, 0, 0, 0, 138, 987, 1, 0, 0, 0, 140, 996, 1, 0, 0, 0, 142, 1006, 1, 0, 0, 0, 144, 1024, 1, 0, 0, 0, 146, 1026, 1, 0, 0, 0, 148, 1039, 1, 0, 0, 0, 150, 1042, 1, 0, 0, 0, 152, 1051, 1, 0, 0, 0, 154, 1062, 1, 0, 0, 0, 156, 1097, 1, 0, 0, 0, 158, 1116, 1, 0, 0, 0, 160, 1125, 1, 0, 0, 0, 162, 1134, 1, 0, 0, 0, 164, 1153, 1, 0, 0, 0, 166, 1173, 1, 0, 0, 0, 168, 1175, 1, 0, 0, 0, 170, 1198, 1, 0, 0, 0, 172, 1212, 1, 0, 0, 0, 174, 1214, 1, 0, 0, 0, 176, 1228, 1, 0, 0, 0, 178, 1254, 1, 0, 0, 0, 180, 1299, 1, 0, 0, 0, 182, 1301, 1, 0, 0, 0, 184, 1303, 1, 0, 0, 0, 186, 1309, 1, 0, 0, 0, 188, 1311, 1, 0, 0, 0, 190, 1316, 1, 0, 0, 0, 192, 1321, 1, 0, 0, 0, 194, 1333, 1, 0, 0, 0, 196, 1350, 1, 0, 0, 0, 198, 1352, 1, 0, 0, 0, 200, 1354, 1, 0, 0, 0, 202, 1373, 1, 0, 0, 0, 204, 1375, 1, 0, 0, 0, 206, 1378, 1, 0, 0, 0, 208, 1427, 1, 0, 0, 0, 210, 1429, 1, 0, 0, 0, 212, 1432, 1, 0, 0, 0, 214, 1434, 1, 0, 0, 0, 216, 1441, 1, 0, 0, 0, 218, 1443, 1, 0, 0, 0, 220, 1445, 1, 0, 0, 0, 222, 1448, 1, 0, 0, 0, 224, 1457, 1, 0, 0, 0, 226, 1462, 1, 0, 0, 0, 228, 1476, 1, 0, 0, 0, 230, 1504, 1, 0, 0, 0, 232, 1514, 1, 0, 0, 0, 234, 1522, 1, 0, 0, 0, 236, 1527, 1, 0, 0, 0, 238, 1553, 1, 0, 0, 0, 240, 1555, 1, 0, 0, 0, 242, 1564, 1, 0, 0, 0, 244, 1575, 1, 0, 0, 0, 246, 1587, 1, 0, 0, 0, 248, 1613, 1, 0, 0, 0, 250, 1615, 1, 0, 0, 0, 252, 1633, 1, 0, 0, 0, 254, 1635, 1, 0, 0, 0, 256, 1640, 1, 0, 0, 0, 258, 1643, 1, 0, 0, 0, 260, 1657, 1, 0, 0, 0, 262, 1753, 1, 0, 0, 0, 264, 1780, 1, 0, 0, 0, 266, 1786, 1, 0, 0, 0, 268, 1903, 1, 0, 0, 0, 270, 1918, 1, 0, 0, 0, 272, 1920, 1, 0, 0, 0, 274, 1922, 1, 0, 0, 0, 276, 1926, 1, 0, 0, 0, 278, 1928, 1, 0, 0, 0, 280, 1933, 1, 0, 0, 0, 282, 1940, 1, 0, 0, 0, 284, 1944, 1, 0, 0, 0, 286, 1949, 1, 0, 0, 0, 288, 1959, 1, 0, 0, 0, 290, 1963, 1, 0, 0, 0, 292, 1966, 1, 0, 0, 0, 294, 1973, 1, 0, 0, 0, 296, 1979, 1, 0, 0, 0, 298, 1989, 1, 0, 0, 0, 300, 1991, 1, 0, 0, 0, 302, 1995, 1, 0, 0, 0, 304, 2006, 1, 0, 0, 0, 306, 2008, 1, 0, 0, 0, 308, 2010, 1, 0, 0, 0, 310, 2012, 1, 0, 0, 0, 312, 2017, 1, 0, 0, 0, 314, 2025, 1, 0, 0, 0, 316, 2028, 1, 0, 0, 0, 318, 2032, 1, 0, 0, 0, 320, 2035, 1, 0, 0, 0, 322, 2046, 1, 0, 0, 0, 324, 2056, 1, 0, 0, 0, 326, 2062, 1, 0, 0, 0, 328, 2070, 1, 0, 0, 0, 330, 2086, 1, 0, 0, 0, 332, 2095, 1, 0, 0, 0, 334, 2097, 1, 0, 0, 0, 336, 2099, 1, 0, 0, 0, 338, 2113, 1, 0, 0, 0, 340, 2115, 1, 0, 0, 0, 342, 2117, 1, 0, 0, 0, 344, 2119, 1, 0, 0, 0, 346, 2121, 1, 0, 0, 0, 348, 2123, 1, 0, 0, 0, 350, 2125, 1, 0, 0, 0, 352, 353, 3, 2, 1, 0, 353, 354, 5, 0, 0, 1, 354, 1, 1, 0, 0, 0, 355, 356, 3, 4, 2, 0, 356, 357, 5, 0, 0, 1, 357, 3, 1, 0, 0, 0, 358, 360, 3, 6, 3, 0, 359, 361, 5, 381, 0, 0, 360, 359, 1, 0, 0, 0, 360, 361, 1, 0, 0, 0, 361, 364, 1, 0, 0, 0, 362, 364, 3, 8, 4, 0, 363, 358, 1, 0, 0, 0, 363, 362, 1, 0, 0, 0, 364, 367, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 5, 1, 0, 0, 0, 367, 365, 1, 0, 0, 0, 368, 381, 3, 10, 5, 0, 369, 381, 3, 12, 6, 0, 370, 381, 3, 14, 7, 0, 371, 381, 3, 16, 8, 0, 372, 381, 3, 22, 11, 0, 373, 381, 3, 26, 13, 0, 374, 381, 3, 28, 14, 0, 375, 381, 3, 30, 15, 0, 376, 381, 3, 32, 16, 0, 377, 381, 3, 34, 17, 0, 378, 381, 3, 36, 18, 0, 379, 381, 3, 38, 19, 0, 380, 368, 1, 0, 0, 0, 380, 369, 1, 0, 0, 0, 380, 370, 1, 0, 0, 0, 380, 371, 1, 0, 0, 0, 380, 372, 1, 0, 0, 0, 380, 373, 1, 0, 0, 0, 380, 374, 1, 0, 0, 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, 7, 1, 0, 0, 0, 382, 383, 5, 381, 0, 0, 383, 9, 1, 0, 0, 0, 384, 399, 3, 40, 20, 0, 385, 399, 3, 104, 52, 0, 386, 399, 3, 106, 53, 0, 387, 399, 3, 108, 54, 0, 388, 399, 3, 102, 51, 0, 389, 399, 3, 114, 57, 0, 390, 399, 3, 128, 64, 0, 391, 399, 3, 130, 65, 0, 392, 399, 3, 132, 66, 0, 393, 399, 3, 134, 67, 0, 394, 399, 3, 136, 68, 0, 395, 399, 3, 138, 69, 0, 396, 399, 3, 140, 70, 0, 397, 399, 3, 142, 71, 0, 398, 384, 1, 0, 0, 0, 398, 385, 1, 0, 0, 0, 398, 386, 1, 0, 0, 0, 398, 387, 1, 0, 0, 0, 398, 388, 1, 0, 0, 0, 398, 389, 1, 0, 0, 0, 398, 390, 1, 0, 0, 0, 398, 391, 1, 0, 0, 0, 398, 392, 1, 0, 0, 0, 398, 393, 1, 0, 0, 0, 398, 394, 1, 0, 0, 0, 398, 395, 1, 0, 0, 0, 398, 396, 1, 0, 0, 0, 398, 397, 1, 0, 0, 0, 399, 11, 1, 0, 0, 0, 400, 403, 3, 156, 78, 0, 401, 403, 3, 144, 72, 0, 402, 400, 1, 0, 0, 0, 402, 401, 1, 0, 0, 0, 403, 13, 1, 0, 0, 0, 404, 405, 7, 0, 0, 0, 405, 406, 3, 312, 156, 0, 406, 15, 1, 0, 0, 0, 407, 411, 5, 242, 0, 0, 408, 412, 3, 18, 9, 0, 409, 410, 5, 100, 0, 0, 410, 412, 5, 247, 0, 0, 411, 408, 1, 0, 0, 0, 411, 409, 1, 0, 0, 0, 411, 412, 1, 0, 0, 0, 412, 416, 1, 0, 0, 0, 413, 417, 3, 12, 6, 0, 414, 417, 3, 146, 73, 0, 415, 417, 3, 154, 77, 0, 416, 413, 1, 0, 0, 0, 416, 414, 1, 0, 0, 0, 416, 415, 1, 0, 0, 0, 417, 17, 1, 0, 0, 0, 418, 423, 3, 20, 10, 0, 419, 420, 5, 380, 0, 0, 420, 422, 3, 20, 10, 0, 421, 419, 1, 0, 0, 0, 422, 425, 1, 0, 0, 0, 423, 421, 1, 0, 0, 0, 423, 424, 1, 0, 0, 0, 424, 19, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 427, 7, 1, 0, 0, 427, 21, 1, 0, 0, 0, 428, 430, 5, 160, 0, 0, 429, 431, 5, 12, 0, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 435, 3, 312, 156, 0, 433, 435, 3, 24, 12, 0, 434, 428, 1, 0, 0, 0, 434, 433, 1, 0, 0, 0, 435, 23, 1, 0, 0, 0, 436, 437, 5, 160, 0, 0, 437, 438, 5, 83, 0, 0, 438, 443, 3, 312, 156, 0, 439, 440, 5, 380, 0, 0, 440, 442, 3, 312, 156, 0, 441, 439, 1, 0, 0, 0, 442, 445, 1, 0, 0, 0, 443, 441, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 25, 1, 0, 0, 0, 445, 443, 1, 0, 0, 0, 446, 447, 5, 327, 0, 0, 447, 482, 7, 2, 0, 0, 448, 449, 5, 327, 0, 0, 449, 450, 5, 219, 0, 0, 450, 482, 7, 3, 0, 0, 451, 452, 5, 327, 0, 0, 452, 455, 5, 148, 0, 0, 453, 454, 7, 4, 0, 0, 454, 456, 3, 312, 156, 0, 455, 453, 1, 0, 0, 0, 455, 456, 1, 0, 0, 0, 456, 458, 1, 0, 0, 0, 457, 459, 3, 264, 132, 0, 458, 457, 1, 0, 0, 0, 458, 459, 1, 0, 0, 0, 459, 482, 1, 0, 0, 0, 460, 461, 5, 327, 0, 0, 461, 462, 5, 20, 0, 0, 462, 463, 7, 4, 0, 0, 463, 465, 3, 312, 156, 0, 464, 466, 3, 264, 132, 0, 465, 464, 1, 0, 0, 0, 465, 466, 1, 0, 0, 0, 466, 482, 1, 0, 0, 0, 467, 468, 5, 327, 0, 0, 468, 469, 5, 216, 0, 0, 469, 470, 7, 5, 0, 0, 470, 482, 3, 312, 156, 0, 471, 473, 5, 327, 0, 0, 472, 474, 5, 352, 0, 0, 473, 472, 1, 0, 0, 0, 473, 474, 1, 0, 0, 0, 474, 475, 1, 0, 0, 0, 475, 482, 5, 50, 0, 0, 476, 478, 5, 327, 0, 0, 477, 479, 5, 249, 0, 0, 478, 477, 1, 0, 0, 0, 478, 479, 1, 0, 0, 0, 479, 480, 1, 0, 0, 0, 480, 482, 5, 83, 0, 0, 481, 446, 1, 0, 0, 0, 481, 448, 1, 0, 0, 0, 481, 451, 1, 0, 0, 0, 481, 460, 1, 0, 0, 0, 481, 467, 1, 0, 0, 0, 481, 471, 1, 0, 0, 0, 481, 476, 1, 0, 0, 0, 482, 27, 1, 0, 0, 0, 483, 484, 5, 75, 0, 0, 484, 485, 5, 287, 0, 0, 485, 488, 3, 312, 156, 0, 486, 487, 5, 361, 0, 0, 487, 489, 3, 320, 160, 0, 488, 486, 1, 0, 0, 0, 488, 489, 1, 0, 0, 0, 489, 29, 1, 0, 0, 0, 490, 491, 5, 158, 0, 0, 491, 492, 5, 287, 0, 0, 492, 493, 3, 312, 156, 0, 493, 31, 1, 0, 0, 0, 494, 496, 5, 326, 0, 0, 495, 497, 3, 322, 161, 0, 496, 495, 1, 0, 0, 0, 496, 497, 1, 0, 0, 0, 497, 33, 1, 0, 0, 0, 498, 500, 5, 316, 0, 0, 499, 501, 3, 324, 162, 0, 500, 499, 1, 0, 0, 0, 500, 501, 1, 0, 0, 0, 501, 35, 1, 0, 0, 0, 502, 503, 7, 6, 0, 0, 503, 504, 5, 63, 0, 0, 504, 505, 3, 112, 56, 0, 505, 37, 1, 0, 0, 0, 506, 507, 5, 4, 0, 0, 507, 508, 5, 63, 0, 0, 508, 509, 5, 361, 0, 0, 509, 512, 5, 402, 0, 0, 510, 511, 5, 183, 0, 0, 511, 513, 3, 312, 156, 0, 512, 510, 1, 0, 0, 0, 512, 513, 1, 0, 0, 0, 513, 546, 1, 0, 0, 0, 514, 515, 5, 4, 0, 0, 515, 516, 5, 42, 0, 0, 516, 517, 5, 361, 0, 0, 517, 520, 5, 402, 0, 0, 518, 519, 5, 183, 0, 0, 519, 521, 3, 312, 156, 0, 520, 518, 1, 0, 0, 0, 520, 521, 1, 0, 0, 0, 521, 524, 1, 0, 0, 0, 522, 523, 5, 118, 0, 0, 523, 525, 3, 312, 156, 0, 524, 522, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 546, 1, 0, 0, 0, 526, 527, 5, 4, 0, 0, 527, 528, 7, 7, 0, 0, 528, 529, 5, 361, 0, 0, 529, 530, 5, 402, 0, 0, 530, 531, 5, 118, 0, 0, 531, 546, 3, 312, 156, 0, 532, 533, 5, 4, 0, 0, 533, 534, 5, 112, 0, 0, 534, 546, 5, 402, 0, 0, 535, 536, 5, 4, 0, 0, 536, 537, 5, 35, 0, 0, 537, 538, 5, 42, 0, 0, 538, 539, 5, 361, 0, 0, 539, 540, 5, 402, 0, 0, 540, 541, 5, 118, 0, 0, 541, 542, 3, 312, 156, 0, 542, 543, 5, 68, 0, 0, 543, 544, 3, 312, 156, 0, 544, 546, 1, 0, 0, 0, 545, 506, 1, 0, 0, 0, 545, 514, 1, 0, 0, 0, 545, 526, 1, 0, 0, 0, 545, 532, 1, 0, 0, 0, 545, 535, 1, 0, 0, 0, 546, 39, 1, 0, 0, 0, 547, 550, 3, 42, 21, 0, 548, 550, 3, 44, 22, 0, 549, 547, 1, 0, 0, 0, 549, 548, 1, 0, 0, 0, 550, 41, 1, 0, 0, 0, 551, 553, 5, 216, 0, 0, 552, 554, 5, 149, 0, 0, 553, 552, 1, 0, 0, 0, 553, 554, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 557, 5, 337, 0, 0, 556, 558, 3, 316, 158, 0, 557, 556, 1, 0, 0, 0, 557, 558, 1, 0, 0, 0, 558, 559, 1, 0, 0, 0, 559, 560, 3, 98, 49, 0, 560, 561, 5, 376, 0, 0, 561, 566, 3, 46, 23, 0, 562, 563, 5, 380, 0, 0, 563, 565, 3, 46, 23, 0, 564, 562, 1, 0, 0, 0, 565, 568, 1, 0, 0, 0, 566, 564, 1, 0, 0, 0, 566, 567, 1, 0, 0, 0, 567, 571, 1, 0, 0, 0, 568, 566, 1, 0, 0, 0, 569, 570, 5, 380, 0, 0, 570, 572, 3, 80, 40, 0, 571, 569, 1, 0, 0, 0, 571, 572, 1, 0, 0, 0, 572, 575, 1, 0, 0, 0, 573, 574, 5, 380, 0, 0, 574, 576, 3, 82, 41, 0, 575, 573, 1, 0, 0, 0, 575, 576, 1, 0, 0, 0, 576, 579, 1, 0, 0, 0, 577, 578, 5, 380, 0, 0, 578, 580, 3, 86, 43, 0, 579, 577, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 1, 0, 0, 0, 581, 583, 5, 377, 0, 0, 582, 584, 3, 70, 35, 0, 583, 582, 1, 0, 0, 0, 583, 584, 1, 0, 0, 0, 584, 586, 1, 0, 0, 0, 585, 587, 3, 88, 44, 0, 586, 585, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 1, 0, 0, 0, 588, 590, 3, 314, 157, 0, 589, 591, 3, 96, 48, 0, 590, 589, 1, 0, 0, 0, 590, 591, 1, 0, 0, 0, 591, 43, 1, 0, 0, 0, 592, 593, 5, 216, 0, 0, 593, 595, 5, 337, 0, 0, 594, 596, 3, 316, 158, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 3, 98, 49, 0, 598, 601, 3, 314, 157, 0, 599, 600, 5, 183, 0, 0, 600, 602, 3, 156, 78, 0, 601, 599, 1, 0, 0, 0, 601, 602, 1, 0, 0, 0, 602, 45, 1, 0, 0, 0, 603, 607, 3, 48, 24, 0, 604, 607, 3, 72, 36, 0, 605, 607, 3, 76, 38, 0, 606, 603, 1, 0, 0, 0, 606, 604, 1, 0, 0, 0, 606, 605, 1, 0, 0, 0, 607, 47, 1, 0, 0, 0, 608, 609, 3, 50, 25, 0, 609, 611, 3, 54, 27, 0, 610, 612, 3, 68, 34, 0, 611, 610, 1, 0, 0, 0, 611, 612, 1, 0, 0, 0, 612, 614, 1, 0, 0, 0, 613, 615, 3, 70, 35, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 49, 1, 0, 0, 0, 616, 619, 3, 312, 156, 0, 617, 619, 3, 258, 129, 0, 618, 616, 1, 0, 0, 0, 618, 617, 1, 0, 0, 0, 619, 51, 1, 0, 0, 0, 620, 621, 5, 376, 0, 0, 621, 626, 3, 50, 25, 0, 622, 623, 5, 380, 0, 0, 623, 625, 3, 50, 25, 0, 624, 622, 1, 0, 0, 0, 625, 628, 1, 0, 0, 0, 626, 624, 1, 0, 0, 0, 626, 627, 1, 0, 0, 0, 627, 629, 1, 0, 0, 0, 628, 626, 1, 0, 0, 0, 629, 630, 5, 377, 0, 0, 630, 53, 1, 0, 0, 0, 631, 669, 7, 8, 0, 0, 632, 634, 7, 9, 0, 0, 633, 635, 3, 56, 28, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 669, 1, 0, 0, 0, 636, 638, 5, 341, 0, 0, 637, 639, 3, 56, 28, 0, 638, 637, 1, 0, 0, 0, 638, 639, 1, 0, 0, 0, 639, 646, 1, 0, 0, 0, 640, 642, 7, 10, 0, 0, 641, 643, 5, 278, 0, 0, 642, 641, 1, 0, 0, 0, 642, 643, 1, 0, 0, 0, 643, 644, 1, 0, 0, 0, 644, 645, 5, 340, 0, 0, 645, 647, 5, 174, 0, 0, 646, 640, 1, 0, 0, 0, 646, 647, 1, 0, 0, 0, 647, 669, 1, 0, 0, 0, 648, 650, 7, 11, 0, 0, 649, 651, 3, 58, 29, 0, 650, 649, 1, 0, 0, 0, 650, 651, 1, 0, 0, 0, 651, 669, 1, 0, 0, 0, 652, 654, 7, 12, 0, 0, 653, 655, 3, 62, 31, 0, 654, 653, 1, 0, 0, 0, 654, 655, 1, 0, 0, 0, 655, 669, 1, 0, 0, 0, 656, 658, 5, 76, 0, 0, 657, 659, 3, 64, 32, 0, 658, 657, 1, 0, 0, 0, 658, 659, 1, 0, 0, 0, 659, 669, 1, 0, 0, 0, 660, 662, 5, 322, 0, 0, 661, 663, 3, 66, 33, 0, 662, 661, 1, 0, 0, 0, 662, 663, 1, 0, 0, 0, 663, 669, 1, 0, 0, 0, 664, 666, 5, 114, 0, 0, 665, 667, 3, 60, 30, 0, 666, 665, 1, 0, 0, 0, 666, 667, 1, 0, 0, 0, 667, 669, 1, 0, 0, 0, 668, 631, 1, 0, 0, 0, 668, 632, 1, 0, 0, 0, 668, 636, 1, 0, 0, 0, 668, 648, 1, 0, 0, 0, 668, 652, 1, 0, 0, 0, 668, 656, 1, 0, 0, 0, 668, 660, 1, 0, 0, 0, 668, 664, 1, 0, 0, 0, 669, 55, 1, 0, 0, 0, 670, 671, 5, 376, 0, 0, 671, 672, 3, 342, 171, 0, 672, 673, 5, 377, 0, 0, 673, 57, 1, 0, 0, 0, 674, 675, 5, 376, 0, 0, 675, 678, 3, 342, 171, 0, 676, 677, 5, 380, 0, 0, 677, 679, 3, 342, 171, 0, 678, 676, 1, 0, 0, 0, 678, 679, 1, 0, 0, 0, 679, 680, 1, 0, 0, 0, 680, 681, 5, 377, 0, 0, 681, 59, 1, 0, 0, 0, 682, 683, 5, 376, 0, 0, 683, 686, 3, 340, 170, 0, 684, 685, 5, 380, 0, 0, 685, 687, 3, 340, 170, 0, 686, 684, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 688, 1, 0, 0, 0, 688, 689, 5, 377, 0, 0, 689, 61, 1, 0, 0, 0, 690, 691, 5, 367, 0, 0, 691, 692, 3, 54, 27, 0, 692, 693, 5, 366, 0, 0, 693, 63, 1, 0, 0, 0, 694, 695, 5, 367, 0, 0, 695, 696, 3, 54, 27, 0, 696, 697, 5, 380, 0, 0, 697, 698, 3, 54, 27, 0, 698, 699, 1, 0, 0, 0, 699, 700, 5, 366, 0, 0, 700, 65, 1, 0, 0, 0, 701, 702, 5, 367, 0, 0, 702, 703, 3, 50, 25, 0, 703, 710, 3, 54, 27, 0, 704, 705, 5, 380, 0, 0, 705, 706, 3, 50, 25, 0, 706, 707, 3, 54, 27, 0, 707, 709, 1, 0, 0, 0, 708, 704, 1, 0, 0, 0, 709, 712, 1, 0, 0, 0, 710, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 713, 1, 0, 0, 0, 712, 710, 1, 0, 0, 0, 713, 714, 5, 366, 0, 0, 714, 67, 1, 0, 0, 0, 715, 716, 5, 212, 0, 0, 716, 718, 3, 84, 42, 0, 717, 715, 1, 0, 0, 0, 717, 718, 1, 0, 0, 0, 718, 719, 1, 0, 0, 0, 719, 720, 5, 313, 0, 0, 720, 723, 5, 68, 0, 0, 721, 722, 5, 294, 0, 0, 722, 724, 5, 34, 0, 0, 723, 721, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 730, 1, 0, 0, 0, 725, 727, 5, 294, 0, 0, 726, 725, 1, 0, 0, 0, 726, 727, 1, 0, 0, 0, 727, 728, 1, 0, 0, 0, 728, 730, 5, 295, 0, 0, 729, 717, 1, 0, 0, 0, 729, 726, 1, 0, 0, 0, 730, 69, 1, 0, 0, 0, 731, 732, 5, 18, 0, 0, 732, 733, 5, 397, 0, 0, 733, 71, 1, 0, 0, 0, 734, 735, 3, 50, 25, 0, 735, 736, 3, 54, 27, 0, 736, 739, 5, 283, 0, 0, 737, 738, 5, 248, 0, 0, 738, 740, 3, 74, 37, 0, 739, 737, 1, 0, 0, 0, 739, 740, 1, 0, 0, 0, 740, 742, 1, 0, 0, 0, 741, 743, 5, 167, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 73, 1, 0, 0, 0, 744, 745, 5, 397, 0, 0, 745, 75, 1, 0, 0, 0, 746, 747, 3, 50, 25, 0, 747, 748, 5, 183, 0, 0, 748, 750, 3, 78, 39, 0, 749, 751, 3, 70, 35, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 77, 1, 0, 0, 0, 752, 753, 3, 258, 129, 0, 753, 79, 1, 0, 0, 0, 754, 755, 5, 168, 0, 0, 755, 756, 5, 247, 0, 0, 756, 757, 3, 258, 129, 0, 757, 758, 5, 183, 0, 0, 758, 759, 3, 258, 129, 0, 759, 81, 1, 0, 0, 0, 760, 761, 5, 212, 0, 0, 761, 763, 3, 84, 42, 0, 762, 760, 1, 0, 0, 0, 762, 763, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 765, 5, 313, 0, 0, 765, 766, 5, 68, 0, 0, 766, 767, 3, 52, 26, 0, 767, 768, 5, 294, 0, 0, 768, 769, 5, 34, 0, 0, 769, 83, 1, 0, 0, 0, 770, 771, 3, 304, 152, 0, 771, 85, 1, 0, 0, 0, 772, 773, 5, 311, 0, 0, 773, 774, 5, 247, 0, 0, 774, 775, 5, 335, 0, 0, 775, 87, 1, 0, 0, 0, 776, 777, 5, 94, 0, 0, 777, 778, 5, 194, 0, 0, 778, 779, 3, 90, 45, 0, 779, 89, 1, 0, 0, 0, 780, 781, 5, 376, 0, 0, 781, 786, 3, 92, 46, 0, 782, 783, 5, 380, 0, 0, 783, 785, 3, 92, 46, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 789, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 790, 5, 377, 0, 0, 790, 91, 1, 0, 0, 0, 791, 805, 3, 276, 138, 0, 792, 793, 3, 304, 152, 0, 793, 794, 5, 376, 0, 0, 794, 799, 3, 94, 47, 0, 795, 796, 5, 380, 0, 0, 796, 798, 3, 94, 47, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 802, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 5, 377, 0, 0, 803, 805, 1, 0, 0, 0, 804, 791, 1, 0, 0, 0, 804, 792, 1, 0, 0, 0, 805, 93, 1, 0, 0, 0, 806, 809, 3, 276, 138, 0, 807, 809, 3, 338, 169, 0, 808, 806, 1, 0, 0, 0, 808, 807, 1, 0, 0, 0, 809, 95, 1, 0, 0, 0, 810, 811, 5, 276, 0, 0, 811, 820, 3, 98, 49, 0, 812, 816, 5, 376, 0, 0, 813, 815, 3, 100, 50, 0, 814, 813, 1, 0, 0, 0, 815, 818, 1, 0, 0, 0, 816, 814, 1, 0, 0, 0, 816, 817, 1, 0, 0, 0, 817, 819, 1, 0, 0, 0, 818, 816, 1, 0, 0, 0, 819, 821, 5, 377, 0, 0, 820, 812, 1, 0, 0, 0, 820, 821, 1, 0, 0, 0, 821, 97, 1, 0, 0, 0, 822, 823, 3, 312, 156, 0, 823, 99, 1, 0, 0, 0, 824, 825, 7, 13, 0, 0, 825, 829, 7, 14, 0, 0, 826, 827, 7, 15, 0, 0, 827, 829, 7, 16, 0, 0, 828, 824, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 829, 101, 1, 0, 0, 0, 830, 831, 5, 216, 0, 0, 831, 832, 5, 12, 0, 0, 832, 833, 3, 312, 156, 0, 833, 834, 3, 314, 157, 0, 834, 103, 1, 0, 0, 0, 835, 836, 5, 216, 0, 0, 836, 838, 5, 25, 0, 0, 837, 839, 3, 316, 158, 0, 838, 837, 1, 0, 0, 0, 838, 839, 1, 0, 0, 0, 839, 840, 1, 0, 0, 0, 840, 842, 3, 312, 156, 0, 841, 843, 3, 70, 35, 0, 842, 841, 1, 0, 0, 0, 842, 843, 1, 0, 0, 0, 843, 844, 1, 0, 0, 0, 844, 845, 3, 314, 157, 0, 845, 105, 1, 0, 0, 0, 846, 848, 5, 216, 0, 0, 847, 849, 5, 149, 0, 0, 848, 847, 1, 0, 0, 0, 848, 849, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 852, 5, 165, 0, 0, 851, 853, 3, 316, 158, 0, 852, 851, 1, 0, 0, 0, 852, 853, 1, 0, 0, 0, 853, 854, 1, 0, 0, 0, 854, 856, 3, 312, 156, 0, 855, 857, 3, 52, 26, 0, 856, 855, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 859, 1, 0, 0, 0, 858, 860, 3, 70, 35, 0, 859, 858, 1, 0, 0, 0, 859, 860, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 862, 5, 183, 0, 0, 862, 863, 3, 156, 78, 0, 863, 107, 1, 0, 0, 0, 864, 868, 5, 216, 0, 0, 865, 869, 5, 149, 0, 0, 866, 867, 5, 149, 0, 0, 867, 869, 5, 334, 0, 0, 868, 865, 1, 0, 0, 0, 868, 866, 1, 0, 0, 0, 868, 869, 1, 0, 0, 0, 869, 870, 1, 0, 0, 0, 870, 872, 5, 250, 0, 0, 871, 873, 3, 316, 158, 0, 872, 871, 1, 0, 0, 0, 872, 873, 1, 0, 0, 0, 873, 874, 1, 0, 0, 0, 874, 875, 3, 312, 156, 0, 875, 876, 5, 183, 0, 0, 876, 879, 3, 304, 152, 0, 877, 878, 5, 272, 0, 0, 878, 880, 7, 17, 0, 0, 879, 877, 1, 0, 0, 0, 879, 880, 1, 0, 0, 0, 880, 882, 1, 0, 0, 0, 881, 883, 3, 110, 55, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 109, 1, 0, 0, 0, 884, 885, 5, 353, 0, 0, 885, 886, 5, 63, 0, 0, 886, 892, 3, 112, 56, 0, 887, 888, 5, 380, 0, 0, 888, 889, 5, 63, 0, 0, 889, 891, 3, 112, 56, 0, 890, 887, 1, 0, 0, 0, 891, 894, 1, 0, 0, 0, 892, 890, 1, 0, 0, 0, 892, 893, 1, 0, 0, 0, 893, 111, 1, 0, 0, 0, 894, 892, 1, 0, 0, 0, 895, 896, 5, 397, 0, 0, 896, 113, 1, 0, 0, 0, 897, 898, 5, 178, 0, 0, 898, 900, 5, 337, 0, 0, 899, 901, 3, 318, 159, 0, 900, 899, 1, 0, 0, 0, 900, 901, 1, 0, 0, 0, 901, 902, 1, 0, 0, 0, 902, 908, 3, 312, 156, 0, 903, 909, 3, 116, 58, 0, 904, 909, 3, 118, 59, 0, 905, 909, 3, 120, 60, 0, 906, 909, 3, 122, 61, 0, 907, 909, 3, 124, 62, 0, 908, 903, 1, 0, 0, 0, 908, 904, 1, 0, 0, 0, 908, 905, 1, 0, 0, 0, 908, 906, 1, 0, 0, 0, 908, 907, 1, 0, 0, 0, 909, 115, 1, 0, 0, 0, 910, 912, 5, 118, 0, 0, 911, 913, 3, 312, 156, 0, 912, 911, 1, 0, 0, 0, 912, 913, 1, 0, 0, 0, 913, 914, 1, 0, 0, 0, 914, 915, 5, 343, 0, 0, 915, 916, 3, 312, 156, 0, 916, 117, 1, 0, 0, 0, 917, 918, 5, 326, 0, 0, 918, 919, 3, 320, 160, 0, 919, 119, 1, 0, 0, 0, 920, 921, 5, 4, 0, 0, 921, 922, 5, 212, 0, 0, 922, 923, 3, 84, 42, 0, 923, 924, 5, 313, 0, 0, 924, 925, 5, 68, 0, 0, 925, 927, 3, 52, 26, 0, 926, 928, 3, 126, 63, 0, 927, 926, 1, 0, 0, 0, 927, 928, 1, 0, 0, 0, 928, 121, 1, 0, 0, 0, 929, 930, 5, 234, 0, 0, 930, 931, 5, 212, 0, 0, 931, 932, 3, 84, 42, 0, 932, 123, 1, 0, 0, 0, 933, 934, 5, 4, 0, 0, 934, 935, 5, 347, 0, 0, 935, 936, 3, 52, 26, 0, 936, 125, 1, 0, 0, 0, 937, 938, 5, 294, 0, 0, 938, 939, 5, 34, 0, 0, 939, 127, 1, 0, 0, 0, 940, 941, 5, 178, 0, 0, 941, 942, 5, 165, 0, 0, 942, 946, 3, 312, 156, 0, 943, 947, 3, 116, 58, 0, 944, 945, 5, 183, 0, 0, 945, 947, 3, 156, 78, 0, 946, 943, 1, 0, 0, 0, 946, 944, 1, 0, 0, 0, 947, 129, 1, 0, 0, 0, 948, 949, 5, 178, 0, 0, 949, 950, 5, 25, 0, 0, 950, 951, 3, 312, 156, 0, 951, 952, 3, 118, 59, 0, 952, 131, 1, 0, 0, 0, 953, 957, 5, 178, 0, 0, 954, 958, 5, 149, 0, 0, 955, 956, 5, 149, 0, 0, 956, 958, 5, 334, 0, 0, 957, 954, 1, 0, 0, 0, 957, 955, 1, 0, 0, 0, 957, 958, 1, 0, 0, 0, 958, 959, 1, 0, 0, 0, 959, 961, 5, 250, 0, 0, 960, 962, 3, 318, 159, 0, 961, 960, 1, 0, 0, 0, 961, 962, 1, 0, 0, 0, 962, 963, 1, 0, 0, 0, 963, 964, 3, 312, 156, 0, 964, 965, 5, 183, 0, 0, 965, 968, 3, 304, 152, 0, 966, 967, 5, 272, 0, 0, 967, 969, 7, 17, 0, 0, 968, 966, 1, 0, 0, 0, 968, 969, 1, 0, 0, 0, 969, 133, 1, 0, 0, 0, 970, 971, 5, 234, 0, 0, 971, 973, 5, 12, 0, 0, 972, 974, 3, 318, 159, 0, 973, 972, 1, 0, 0, 0, 973, 974, 1, 0, 0, 0, 974, 975, 1, 0, 0, 0, 975, 976, 3, 312, 156, 0, 976, 135, 1, 0, 0, 0, 977, 979, 5, 234, 0, 0, 978, 980, 5, 149, 0, 0, 979, 978, 1, 0, 0, 0, 979, 980, 1, 0, 0, 0, 980, 981, 1, 0, 0, 0, 981, 983, 5, 337, 0, 0, 982, 984, 3, 318, 159, 0, 983, 982, 1, 0, 0, 0, 983, 984, 1, 0, 0, 0, 984, 985, 1, 0, 0, 0, 985, 986, 3, 312, 156, 0, 986, 137, 1, 0, 0, 0, 987, 988, 5, 234, 0, 0, 988, 990, 5, 25, 0, 0, 989, 991, 3, 318, 159, 0, 990, 989, 1, 0, 0, 0, 990, 991, 1, 0, 0, 0, 991, 992, 1, 0, 0, 0, 992, 994, 3, 312, 156, 0, 993, 995, 7, 18, 0, 0, 994, 993, 1, 0, 0, 0, 994, 995, 1, 0, 0, 0, 995, 139, 1, 0, 0, 0, 996, 998, 5, 234, 0, 0, 997, 999, 5, 149, 0, 0, 998, 997, 1, 0, 0, 0, 998, 999, 1, 0, 0, 0, 999, 1000, 1, 0, 0, 0, 1000, 1002, 5, 165, 0, 0, 1001, 1003, 3, 318, 159, 0, 1002, 1001, 1, 0, 0, 0, 1002, 1003, 1, 0, 0, 0, 1003, 1004, 1, 0, 0, 0, 1004, 1005, 3, 312, 156, 0, 1005, 141, 1, 0, 0, 0, 1006, 1010, 5, 234, 0, 0, 1007, 1011, 5, 149, 0, 0, 1008, 1009, 5, 149, 0, 0, 1009, 1011, 5, 334, 0, 0, 1010, 1007, 1, 0, 0, 0, 1010, 1008, 1, 0, 0, 0, 1010, 1011, 1, 0, 0, 0, 1011, 1012, 1, 0, 0, 0, 1012, 1014, 5, 250, 0, 0, 1013, 1015, 3, 318, 159, 0, 1014, 1013, 1, 0, 0, 0, 1014, 1015, 1, 0, 0, 0, 1015, 1016, 1, 0, 0, 0, 1016, 1017, 3, 312, 156, 0, 1017, 143, 1, 0, 0, 0, 1018, 1020, 5, 240, 0, 0, 1019, 1018, 1, 0, 0, 0, 1019, 1020, 1, 0, 0, 0, 1020, 1021, 1, 0, 0, 0, 1021, 1025, 3, 146, 73, 0, 1022, 1023, 5, 240, 0, 0, 1023, 1025, 3, 154, 77, 0, 1024, 1019, 1, 0, 0, 0, 1024, 1022, 1, 0, 0, 0, 1025, 145, 1, 0, 0, 0, 1026, 1027, 5, 263, 0, 0, 1027, 1028, 7, 19, 0, 0, 1028, 1037, 3, 312, 156, 0, 1029, 1031, 3, 148, 74, 0, 1030, 1029, 1, 0, 0, 0, 1030, 1031, 1, 0, 0, 0, 1031, 1033, 1, 0, 0, 0, 1032, 1034, 3, 52, 26, 0, 1033, 1032, 1, 0, 0, 0, 1033, 1034, 1, 0, 0, 0, 1034, 1035, 1, 0, 0, 0, 1035, 1038, 3, 156, 78, 0, 1036, 1038, 3, 150, 75, 0, 1037, 1030, 1, 0, 0, 0, 1037, 1036, 1, 0, 0, 0, 1038, 147, 1, 0, 0, 0, 1039, 1040, 5, 307, 0, 0, 1040, 1041, 3, 320, 160, 0, 1041, 149, 1, 0, 0, 0, 1042, 1043, 5, 355, 0, 0, 1043, 1048, 3, 152, 76, 0, 1044, 1045, 5, 380, 0, 0, 1045, 1047, 3, 152, 76, 0, 1046, 1044, 1, 0, 0, 0, 1047, 1050, 1, 0, 0, 0, 1048, 1046, 1, 0, 0, 0, 1048, 1049, 1, 0, 0, 0, 1049, 151, 1, 0, 0, 0, 1050, 1048, 1, 0, 0, 0, 1051, 1052, 5, 376, 0, 0, 1052, 1057, 3, 338, 169, 0, 1053, 1054, 5, 380, 0, 0, 1054, 1056, 3, 338, 169, 0, 1055, 1053, 1, 0, 0, 0, 1056, 1059, 1, 0, 0, 0, 1057, 1055, 1, 0, 0, 0, 1057, 1058, 1, 0, 0, 0, 1058, 1060, 1, 0, 0, 0, 1059, 1057, 1, 0, 0, 0, 1060, 1061, 5, 377, 0, 0, 1061, 153, 1, 0, 0, 0, 1062, 1063, 5, 143, 0, 0, 1063, 1064, 5, 326, 0, 0, 1064, 1068, 5, 186, 0, 0, 1065, 1066, 3, 146, 73, 0, 1066, 1067, 5, 381, 0, 0, 1067, 1069, 1, 0, 0, 0, 1068, 1065, 1, 0, 0, 0, 1069, 1070, 1, 0, 0, 0, 1070, 1068, 1, 0, 0, 0, 1070, 1071, 1, 0, 0, 0, 1071, 1072, 1, 0, 0, 0, 1072, 1073, 5, 237, 0, 0, 1073, 155, 1, 0, 0, 0, 1074, 1075, 6, 78, -1, 0, 1075, 1098, 3, 158, 79, 0, 1076, 1077, 3, 160, 80, 0, 1077, 1078, 3, 156, 78, 5, 1078, 1098, 1, 0, 0, 0, 1079, 1080, 5, 376, 0, 0, 1080, 1081, 3, 156, 78, 0, 1081, 1082, 5, 377, 0, 0, 1082, 1098, 1, 0, 0, 0, 1083, 1085, 3, 168, 84, 0, 1084, 1086, 3, 230, 115, 0, 1085, 1084, 1, 0, 0, 0, 1085, 1086, 1, 0, 0, 0, 1086, 1088, 1, 0, 0, 0, 1087, 1089, 3, 234, 117, 0, 1088, 1087, 1, 0, 0, 0, 1088, 1089, 1, 0, 0, 0, 1089, 1098, 1, 0, 0, 0, 1090, 1092, 3, 166, 83, 0, 1091, 1093, 3, 230, 115, 0, 1092, 1091, 1, 0, 0, 0, 1092, 1093, 1, 0, 0, 0, 1093, 1095, 1, 0, 0, 0, 1094, 1096, 3, 234, 117, 0, 1095, 1094, 1, 0, 0, 0, 1095, 1096, 1, 0, 0, 0, 1096, 1098, 1, 0, 0, 0, 1097, 1074, 1, 0, 0, 0, 1097, 1076, 1, 0, 0, 0, 1097, 1079, 1, 0, 0, 0, 1097, 1083, 1, 0, 0, 0, 1097, 1090, 1, 0, 0, 0, 1098, 1113, 1, 0, 0, 0, 1099, 1100, 10, 3, 0, 0, 1100, 1102, 7, 20, 0, 0, 1101, 1103, 5, 176, 0, 0, 1102, 1101, 1, 0, 0, 0, 1102, 1103, 1, 0, 0, 0, 1103, 1104, 1, 0, 0, 0, 1104, 1106, 3, 156, 78, 0, 1105, 1107, 3, 230, 115, 0, 1106, 1105, 1, 0, 0, 0, 1106, 1107, 1, 0, 0, 0, 1107, 1109, 1, 0, 0, 0, 1108, 1110, 3, 234, 117, 0, 1109, 1108, 1, 0, 0, 0, 1109, 1110, 1, 0, 0, 0, 1110, 1112, 1, 0, 0, 0, 1111, 1099, 1, 0, 0, 0, 1112, 1115, 1, 0, 0, 0, 1113, 1111, 1, 0, 0, 0, 1113, 1114, 1, 0, 0, 0, 1114, 157, 1, 0, 0, 0, 1115, 1113, 1, 0, 0, 0, 1116, 1117, 5, 355, 0, 0, 1117, 1122, 3, 258, 129, 0, 1118, 1119, 5, 380, 0, 0, 1119, 1121, 3, 258, 129, 0, 1120, 1118, 1, 0, 0, 0, 1121, 1124, 1, 0, 0, 0, 1122, 1120, 1, 0, 0, 0, 1122, 1123, 1, 0, 0, 0, 1123, 159, 1, 0, 0, 0, 1124, 1122, 1, 0, 0, 0, 1125, 1126, 5, 361, 0, 0, 1126, 1131, 3, 162, 81, 0, 1127, 1128, 5, 380, 0, 0, 1128, 1130, 3, 162, 81, 0, 1129, 1127, 1, 0, 0, 0, 1130, 1133, 1, 0, 0, 0, 1131, 1129, 1, 0, 0, 0, 1131, 1132, 1, 0, 0, 0, 1132, 161, 1, 0, 0, 0, 1133, 1131, 1, 0, 0, 0, 1134, 1146, 3, 164, 82, 0, 1135, 1136, 5, 376, 0, 0, 1136, 1141, 3, 50, 25, 0, 1137, 1138, 5, 380, 0, 0, 1138, 1140, 3, 50, 25, 0, 1139, 1137, 1, 0, 0, 0, 1140, 1143, 1, 0, 0, 0, 1141, 1139, 1, 0, 0, 0, 1141, 1142, 1, 0, 0, 0, 1142, 1144, 1, 0, 0, 0, 1143, 1141, 1, 0, 0, 0, 1144, 1145, 5, 377, 0, 0, 1145, 1147, 1, 0, 0, 0, 1146, 1135, 1, 0, 0, 0, 1146, 1147, 1, 0, 0, 0, 1147, 1148, 1, 0, 0, 0, 1148, 1149, 5, 183, 0, 0, 1149, 1150, 5, 376, 0, 0, 1150, 1151, 3, 156, 78, 0, 1151, 1152, 5, 377, 0, 0, 1152, 163, 1, 0, 0, 0, 1153, 1154, 3, 304, 152, 0, 1154, 165, 1, 0, 0, 0, 1155, 1156, 3, 168, 84, 0, 1156, 1158, 3, 174, 87, 0, 1157, 1159, 3, 204, 102, 0, 1158, 1157, 1, 0, 0, 0, 1158, 1159, 1, 0, 0, 0, 1159, 1161, 1, 0, 0, 0, 1160, 1162, 3, 206, 103, 0, 1161, 1160, 1, 0, 0, 0, 1161, 1162, 1, 0, 0, 0, 1162, 1164, 1, 0, 0, 0, 1163, 1165, 3, 220, 110, 0, 1164, 1163, 1, 0, 0, 0, 1164, 1165, 1, 0, 0, 0, 1165, 1167, 1, 0, 0, 0, 1166, 1168, 3, 222, 111, 0, 1167, 1166, 1, 0, 0, 0, 1167, 1168, 1, 0, 0, 0, 1168, 1174, 1, 0, 0, 0, 1169, 1170, 3, 168, 84, 0, 1170, 1171, 3, 174, 87, 0, 1171, 1172, 3, 228, 114, 0, 1172, 1174, 1, 0, 0, 0, 1173, 1155, 1, 0, 0, 0, 1173, 1169, 1, 0, 0, 0, 1174, 167, 1, 0, 0, 0, 1175, 1177, 5, 325, 0, 0, 1176, 1178, 3, 346, 173, 0, 1177, 1176, 1, 0, 0, 0, 1177, 1178, 1, 0, 0, 0, 1178, 1188, 1, 0, 0, 0, 1179, 1189, 5, 387, 0, 0, 1180, 1185, 3, 170, 85, 0, 1181, 1182, 5, 380, 0, 0, 1182, 1184, 3, 170, 85, 0, 1183, 1181, 1, 0, 0, 0, 1184, 1187, 1, 0, 0, 0, 1185, 1183, 1, 0, 0, 0, 1185, 1186, 1, 0, 0, 0, 1186, 1189, 1, 0, 0, 0, 1187, 1185, 1, 0, 0, 0, 1188, 1179, 1, 0, 0, 0, 1188, 1180, 1, 0, 0, 0, 1189, 169, 1, 0, 0, 0, 1190, 1199, 3, 172, 86, 0, 1191, 1196, 3, 258, 129, 0, 1192, 1194, 5, 183, 0, 0, 1193, 1192, 1, 0, 0, 0, 1193, 1194, 1, 0, 0, 0, 1194, 1195, 1, 0, 0, 0, 1195, 1197, 3, 258, 129, 0, 1196, 1193, 1, 0, 0, 0, 1196, 1197, 1, 0, 0, 0, 1197, 1199, 1, 0, 0, 0, 1198, 1190, 1, 0, 0, 0, 1198, 1191, 1, 0, 0, 0, 1199, 171, 1, 0, 0, 0, 1200, 1201, 3, 268, 134, 0, 1201, 1202, 5, 305, 0, 0, 1202, 1203, 3, 226, 113, 0, 1203, 1204, 5, 183, 0, 0, 1204, 1205, 3, 304, 152, 0, 1205, 1213, 1, 0, 0, 0, 1206, 1207, 3, 268, 134, 0, 1207, 1208, 5, 305, 0, 0, 1208, 1209, 3, 296, 148, 0, 1209, 1210, 5, 183, 0, 0, 1210, 1211, 3, 304, 152, 0, 1211, 1213, 1, 0, 0, 0, 1212, 1200, 1, 0, 0, 0, 1212, 1206, 1, 0, 0, 0, 1213, 173, 1, 0, 0, 0, 1214, 1215, 5, 248, 0, 0, 1215, 1216, 3, 176, 88, 0, 1216, 175, 1, 0, 0, 0, 1217, 1218, 6, 88, -1, 0, 1218, 1223, 3, 178, 89, 0, 1219, 1220, 5, 380, 0, 0, 1220, 1222, 3, 178, 89, 0, 1221, 1219, 1, 0, 0, 0, 1222, 1225, 1, 0, 0, 0, 1223, 1221, 1, 0, 0, 0, 1223, 1224, 1, 0, 0, 0, 1224, 1229, 1, 0, 0, 0, 1225, 1223, 1, 0, 0, 0, 1226, 1229, 3, 188, 94, 0, 1227, 1229, 3, 190, 95, 0, 1228, 1217, 1, 0, 0, 0, 1228, 1226, 1, 0, 0, 0, 1228, 1227, 1, 0, 0, 0, 1229, 1251, 1, 0, 0, 0, 1230, 1231, 10, 3, 0, 0, 1231, 1232, 5, 217, 0, 0, 1232, 1233, 5, 270, 0, 0, 1233, 1250, 3, 176, 88, 4, 1234, 1236, 10, 4, 0, 0, 1235, 1237, 5, 290, 0, 0, 1236, 1235, 1, 0, 0, 0, 1236, 1237, 1, 0, 0, 0, 1237, 1239, 1, 0, 0, 0, 1238, 1240, 7, 21, 0, 0, 1239, 1238, 1, 0, 0, 0, 1239, 1240, 1, 0, 0, 0, 1240, 1242, 1, 0, 0, 0, 1241, 1243, 5, 304, 0, 0, 1242, 1241, 1, 0, 0, 0, 1242, 1243, 1, 0, 0, 0, 1243, 1244, 1, 0, 0, 0, 1244, 1245, 5, 270, 0, 0, 1245, 1247, 3, 176, 88, 0, 1246, 1248, 3, 202, 101, 0, 1247, 1246, 1, 0, 0, 0, 1247, 1248, 1, 0, 0, 0, 1248, 1250, 1, 0, 0, 0, 1249, 1230, 1, 0, 0, 0, 1249, 1234, 1, 0, 0, 0, 1250, 1253, 1, 0, 0, 0, 1251, 1249, 1, 0, 0, 0, 1251, 1252, 1, 0, 0, 0, 1252, 177, 1, 0, 0, 0, 1253, 1251, 1, 0, 0, 0, 1254, 1256, 3, 180, 90, 0, 1255, 1257, 3, 294, 147, 0, 1256, 1255, 1, 0, 0, 0, 1256, 1257, 1, 0, 0, 0, 1257, 179, 1, 0, 0, 0, 1258, 1260, 5, 337, 0, 0, 1259, 1258, 1, 0, 0, 0, 1259, 1260, 1, 0, 0, 0, 1260, 1261, 1, 0, 0, 0, 1261, 1263, 3, 182, 91, 0, 1262, 1264, 3, 184, 92, 0, 1263, 1262, 1, 0, 0, 0, 1263, 1264, 1, 0, 0, 0, 1264, 1269, 1, 0, 0, 0, 1265, 1267, 5, 183, 0, 0, 1266, 1265, 1, 0, 0, 0, 1266, 1267, 1, 0, 0, 0, 1267, 1268, 1, 0, 0, 0, 1268, 1270, 3, 274, 137, 0, 1269, 1266, 1, 0, 0, 0, 1269, 1270, 1, 0, 0, 0, 1270, 1300, 1, 0, 0, 0, 1271, 1272, 5, 273, 0, 0, 1272, 1273, 5, 337, 0, 0, 1273, 1274, 5, 376, 0, 0, 1274, 1275, 3, 270, 135, 0, 1275, 1276, 5, 376, 0, 0, 1276, 1281, 3, 258, 129, 0, 1277, 1278, 5, 380, 0, 0, 1278, 1280, 3, 258, 129, 0, 1279, 1277, 1, 0, 0, 0, 1280, 1283, 1, 0, 0, 0, 1281, 1279, 1, 0, 0, 0, 1281, 1282, 1, 0, 0, 0, 1282, 1284, 1, 0, 0, 0, 1283, 1281, 1, 0, 0, 0, 1284, 1285, 5, 377, 0, 0, 1285, 1286, 5, 377, 0, 0, 1286, 1300, 1, 0, 0, 0, 1287, 1289, 5, 273, 0, 0, 1288, 1287, 1, 0, 0, 0, 1288, 1289, 1, 0, 0, 0, 1289, 1290, 1, 0, 0, 0, 1290, 1291, 5, 376, 0, 0, 1291, 1292, 3, 156, 78, 0, 1292, 1293, 5, 377, 0, 0, 1293, 1300, 1, 0, 0, 0, 1294, 1295, 5, 349, 0, 0, 1295, 1296, 5, 376, 0, 0, 1296, 1297, 3, 258, 129, 0, 1297, 1298, 5, 377, 0, 0, 1298, 1300, 1, 0, 0, 0, 1299, 1259, 1, 0, 0, 0, 1299, 1271, 1, 0, 0, 0, 1299, 1288, 1, 0, 0, 0, 1299, 1294, 1, 0, 0, 0, 1300, 181, 1, 0, 0, 0, 1301, 1302, 3, 312, 156, 0, 1302, 183, 1, 0, 0, 0, 1303, 1304, 5, 247, 0, 0, 1304, 1305, 5, 335, 0, 0, 1305, 1306, 5, 183, 0, 0, 1306, 1307, 5, 297, 0, 0, 1307, 1308, 3, 186, 93, 0, 1308, 185, 1, 0, 0, 0, 1309, 1310, 3, 258, 129, 0, 1310, 187, 1, 0, 0, 0, 1311, 1312, 5, 376, 0, 0, 1312, 1313, 3, 150, 75, 0, 1313, 1314, 5, 377, 0, 0, 1314, 1315, 3, 294, 147, 0, 1315, 189, 1, 0, 0, 0, 1316, 1317, 5, 337, 0, 0, 1317, 1318, 5, 376, 0, 0, 1318, 1319, 3, 192, 96, 0, 1319, 1320, 5, 377, 0, 0, 1320, 191, 1, 0, 0, 0, 1321, 1322, 3, 194, 97, 0, 1322, 1323, 5, 376, 0, 0, 1323, 1328, 3, 196, 98, 0, 1324, 1325, 5, 380, 0, 0, 1325, 1327, 3, 196, 98, 0, 1326, 1324, 1, 0, 0, 0, 1327, 1330, 1, 0, 0, 0, 1328, 1326, 1, 0, 0, 0, 1328, 1329, 1, 0, 0, 0, 1329, 1331, 1, 0, 0, 0, 1330, 1328, 1, 0, 0, 0, 1331, 1332, 5, 377, 0, 0, 1332, 193, 1, 0, 0, 0, 1333, 1334, 7, 22, 0, 0, 1334, 195, 1, 0, 0, 0, 1335, 1336, 5, 337, 0, 0, 1336, 1351, 3, 218, 109, 0, 1337, 1351, 3, 200, 100, 0, 1338, 1351, 3, 278, 139, 0, 1339, 1340, 5, 24, 0, 0, 1340, 1341, 5, 396, 0, 0, 1341, 1342, 5, 337, 0, 0, 1342, 1351, 3, 218, 109, 0, 1343, 1344, 5, 150, 0, 0, 1344, 1345, 5, 396, 0, 0, 1345, 1351, 3, 200, 100, 0, 1346, 1347, 3, 198, 99, 0, 1347, 1348, 5, 396, 0, 0, 1348, 1349, 3, 278, 139, 0, 1349, 1351, 1, 0, 0, 0, 1350, 1335, 1, 0, 0, 0, 1350, 1337, 1, 0, 0, 0, 1350, 1338, 1, 0, 0, 0, 1350, 1339, 1, 0, 0, 0, 1350, 1343, 1, 0, 0, 0, 1350, 1346, 1, 0, 0, 0, 1351, 197, 1, 0, 0, 0, 1352, 1353, 7, 23, 0, 0, 1353, 199, 1, 0, 0, 0, 1354, 1355, 5, 31, 0, 0, 1355, 1356, 5, 376, 0, 0, 1356, 1357, 3, 312, 156, 0, 1357, 1358, 5, 377, 0, 0, 1358, 201, 1, 0, 0, 0, 1359, 1360, 5, 299, 0, 0, 1360, 1374, 3, 260, 130, 0, 1361, 1362, 5, 353, 0, 0, 1362, 1363, 5, 376, 0, 0, 1363, 1368, 3, 312, 156, 0, 1364, 1365, 5, 380, 0, 0, 1365, 1367, 3, 312, 156, 0, 1366, 1364, 1, 0, 0, 0, 1367, 1370, 1, 0, 0, 0, 1368, 1366, 1, 0, 0, 0, 1368, 1369, 1, 0, 0, 0, 1369, 1371, 1, 0, 0, 0, 1370, 1368, 1, 0, 0, 0, 1371, 1372, 5, 377, 0, 0, 1372, 1374, 1, 0, 0, 0, 1373, 1359, 1, 0, 0, 0, 1373, 1361, 1, 0, 0, 0, 1374, 203, 1, 0, 0, 0, 1375, 1376, 5, 359, 0, 0, 1376, 1377, 3, 260, 130, 0, 1377, 205, 1, 0, 0, 0, 1378, 1379, 5, 253, 0, 0, 1379, 1380, 5, 194, 0, 0, 1380, 1385, 3, 208, 104, 0, 1381, 1382, 5, 380, 0, 0, 1382, 1384, 3, 208, 104, 0, 1383, 1381, 1, 0, 0, 0, 1384, 1387, 1, 0, 0, 0, 1385, 1383, 1, 0, 0, 0, 1385, 1386, 1, 0, 0, 0, 1386, 207, 1, 0, 0, 0, 1387, 1385, 1, 0, 0, 0, 1388, 1428, 3, 258, 129, 0, 1389, 1428, 3, 214, 107, 0, 1390, 1391, 5, 376, 0, 0, 1391, 1428, 5, 377, 0, 0, 1392, 1393, 5, 376, 0, 0, 1393, 1398, 3, 258, 129, 0, 1394, 1395, 5, 380, 0, 0, 1395, 1397, 3, 258, 129, 0, 1396, 1394, 1, 0, 0, 0, 1397, 1400, 1, 0, 0, 0, 1398, 1396, 1, 0, 0, 0, 1398, 1399, 1, 0, 0, 0, 1399, 1401, 1, 0, 0, 0, 1400, 1398, 1, 0, 0, 0, 1401, 1402, 5, 377, 0, 0, 1402, 1428, 1, 0, 0, 0, 1403, 1404, 3, 212, 106, 0, 1404, 1405, 5, 376, 0, 0, 1405, 1410, 3, 258, 129, 0, 1406, 1407, 5, 380, 0, 0, 1407, 1409, 3, 258, 129, 0, 1408, 1406, 1, 0, 0, 0, 1409, 1412, 1, 0, 0, 0, 1410, 1408, 1, 0, 0, 0, 1410, 1411, 1, 0, 0, 0, 1411, 1413, 1, 0, 0, 0, 1412, 1410, 1, 0, 0, 0, 1413, 1414, 5, 377, 0, 0, 1414, 1428, 1, 0, 0, 0, 1415, 1416, 3, 210, 105, 0, 1416, 1417, 5, 376, 0, 0, 1417, 1422, 3, 208, 104, 0, 1418, 1419, 5, 380, 0, 0, 1419, 1421, 3, 208, 104, 0, 1420, 1418, 1, 0, 0, 0, 1421, 1424, 1, 0, 0, 0, 1422, 1420, 1, 0, 0, 0, 1422, 1423, 1, 0, 0, 0, 1423, 1425, 1, 0, 0, 0, 1424, 1422, 1, 0, 0, 0, 1425, 1426, 5, 377, 0, 0, 1426, 1428, 1, 0, 0, 0, 1427, 1388, 1, 0, 0, 0, 1427, 1389, 1, 0, 0, 0, 1427, 1390, 1, 0, 0, 0, 1427, 1392, 1, 0, 0, 0, 1427, 1403, 1, 0, 0, 0, 1427, 1415, 1, 0, 0, 0, 1428, 209, 1, 0, 0, 0, 1429, 1430, 5, 254, 0, 0, 1430, 1431, 5, 136, 0, 0, 1431, 211, 1, 0, 0, 0, 1432, 1433, 7, 24, 0, 0, 1433, 213, 1, 0, 0, 0, 1434, 1435, 3, 216, 108, 0, 1435, 1436, 5, 376, 0, 0, 1436, 1437, 3, 218, 109, 0, 1437, 1438, 5, 380, 0, 0, 1438, 1439, 3, 278, 139, 0, 1439, 1440, 5, 377, 0, 0, 1440, 215, 1, 0, 0, 0, 1441, 1442, 7, 25, 0, 0, 1442, 217, 1, 0, 0, 0, 1443, 1444, 3, 312, 156, 0, 1444, 219, 1, 0, 0, 0, 1445, 1446, 5, 256, 0, 0, 1446, 1447, 3, 260, 130, 0, 1447, 221, 1, 0, 0, 0, 1448, 1449, 5, 360, 0, 0, 1449, 1454, 3, 224, 112, 0, 1450, 1451, 5, 380, 0, 0, 1451, 1453, 3, 224, 112, 0, 1452, 1450, 1, 0, 0, 0, 1453, 1456, 1, 0, 0, 0, 1454, 1452, 1, 0, 0, 0, 1454, 1455, 1, 0, 0, 0, 1455, 223, 1, 0, 0, 0, 1456, 1454, 1, 0, 0, 0, 1457, 1458, 3, 296, 148, 0, 1458, 1459, 5, 183, 0, 0, 1459, 1460, 3, 226, 113, 0, 1460, 225, 1, 0, 0, 0, 1461, 1463, 3, 296, 148, 0, 1462, 1461, 1, 0, 0, 0, 1462, 1463, 1, 0, 0, 0, 1463, 1464, 1, 0, 0, 0, 1464, 1466, 5, 376, 0, 0, 1465, 1467, 3, 236, 118, 0, 1466, 1465, 1, 0, 0, 0, 1466, 1467, 1, 0, 0, 0, 1467, 1469, 1, 0, 0, 0, 1468, 1470, 3, 230, 115, 0, 1469, 1468, 1, 0, 0, 0, 1469, 1470, 1, 0, 0, 0, 1470, 1472, 1, 0, 0, 0, 1471, 1473, 3, 252, 126, 0, 1472, 1471, 1, 0, 0, 0, 1472, 1473, 1, 0, 0, 0, 1473, 1474, 1, 0, 0, 0, 1474, 1475, 5, 377, 0, 0, 1475, 227, 1, 0, 0, 0, 1476, 1477, 5, 280, 0, 0, 1477, 1479, 5, 376, 0, 0, 1478, 1480, 3, 236, 118, 0, 1479, 1478, 1, 0, 0, 0, 1479, 1480, 1, 0, 0, 0, 1480, 1482, 1, 0, 0, 0, 1481, 1483, 3, 230, 115, 0, 1482, 1481, 1, 0, 0, 0, 1482, 1483, 1, 0, 0, 0, 1483, 1485, 1, 0, 0, 0, 1484, 1486, 3, 240, 120, 0, 1485, 1484, 1, 0, 0, 0, 1485, 1486, 1, 0, 0, 0, 1486, 1488, 1, 0, 0, 0, 1487, 1489, 3, 246, 123, 0, 1488, 1487, 1, 0, 0, 0, 1488, 1489, 1, 0, 0, 0, 1489, 1491, 1, 0, 0, 0, 1490, 1492, 3, 248, 124, 0, 1491, 1490, 1, 0, 0, 0, 1491, 1492, 1, 0, 0, 0, 1492, 1494, 1, 0, 0, 0, 1493, 1495, 3, 242, 121, 0, 1494, 1493, 1, 0, 0, 0, 1494, 1495, 1, 0, 0, 0, 1495, 1496, 1, 0, 0, 0, 1496, 1497, 3, 250, 125, 0, 1497, 1502, 5, 377, 0, 0, 1498, 1500, 5, 183, 0, 0, 1499, 1498, 1, 0, 0, 0, 1499, 1500, 1, 0, 0, 0, 1500, 1501, 1, 0, 0, 0, 1501, 1503, 3, 304, 152, 0, 1502, 1499, 1, 0, 0, 0, 1502, 1503, 1, 0, 0, 0, 1503, 229, 1, 0, 0, 0, 1504, 1505, 5, 302, 0, 0, 1505, 1506, 5, 194, 0, 0, 1506, 1511, 3, 232, 116, 0, 1507, 1508, 5, 380, 0, 0, 1508, 1510, 3, 232, 116, 0, 1509, 1507, 1, 0, 0, 0, 1510, 1513, 1, 0, 0, 0, 1511, 1509, 1, 0, 0, 0, 1511, 1512, 1, 0, 0, 0, 1512, 231, 1, 0, 0, 0, 1513, 1511, 1, 0, 0, 0, 1514, 1516, 3, 258, 129, 0, 1515, 1517, 7, 26, 0, 0, 1516, 1515, 1, 0, 0, 0, 1516, 1517, 1, 0, 0, 0, 1517, 1520, 1, 0, 0, 0, 1518, 1519, 5, 86, 0, 0, 1519, 1521, 7, 27, 0, 0, 1520, 1518, 1, 0, 0, 0, 1520, 1521, 1, 0, 0, 0, 1521, 233, 1, 0, 0, 0, 1522, 1525, 5, 277, 0, 0, 1523, 1526, 5, 176, 0, 0, 1524, 1526, 3, 258, 129, 0, 1525, 1523, 1, 0, 0, 0, 1525, 1524, 1, 0, 0, 0, 1526, 235, 1, 0, 0, 0, 1527, 1528, 5, 307, 0, 0, 1528, 1529, 5, 194, 0, 0, 1529, 1534, 3, 258, 129, 0, 1530, 1531, 5, 380, 0, 0, 1531, 1533, 3, 258, 129, 0, 1532, 1530, 1, 0, 0, 0, 1533, 1536, 1, 0, 0, 0, 1534, 1532, 1, 0, 0, 0, 1534, 1535, 1, 0, 0, 0, 1535, 237, 1, 0, 0, 0, 1536, 1534, 1, 0, 0, 0, 1537, 1554, 5, 387, 0, 0, 1538, 1554, 5, 390, 0, 0, 1539, 1554, 5, 395, 0, 0, 1540, 1541, 5, 378, 0, 0, 1541, 1542, 5, 398, 0, 0, 1542, 1543, 5, 380, 0, 0, 1543, 1544, 5, 398, 0, 0, 1544, 1554, 5, 379, 0, 0, 1545, 1546, 5, 378, 0, 0, 1546, 1547, 5, 398, 0, 0, 1547, 1548, 5, 380, 0, 0, 1548, 1554, 5, 379, 0, 0, 1549, 1550, 5, 378, 0, 0, 1550, 1551, 5, 380, 0, 0, 1551, 1552, 5, 398, 0, 0, 1552, 1554, 5, 379, 0, 0, 1553, 1537, 1, 0, 0, 0, 1553, 1538, 1, 0, 0, 0, 1553, 1539, 1, 0, 0, 0, 1553, 1540, 1, 0, 0, 0, 1553, 1545, 1, 0, 0, 0, 1553, 1549, 1, 0, 0, 0, 1554, 239, 1, 0, 0, 0, 1555, 1556, 5, 281, 0, 0, 1556, 1561, 3, 170, 85, 0, 1557, 1558, 5, 380, 0, 0, 1558, 1560, 3, 170, 85, 0, 1559, 1557, 1, 0, 0, 0, 1560, 1563, 1, 0, 0, 0, 1561, 1559, 1, 0, 0, 0, 1561, 1562, 1, 0, 0, 0, 1562, 241, 1, 0, 0, 0, 1563, 1561, 1, 0, 0, 0, 1564, 1565, 5, 308, 0, 0, 1565, 1567, 5, 376, 0, 0, 1566, 1568, 3, 244, 122, 0, 1567, 1566, 1, 0, 0, 0, 1568, 1569, 1, 0, 0, 0, 1569, 1567, 1, 0, 0, 0, 1569, 1570, 1, 0, 0, 0, 1570, 1571, 1, 0, 0, 0, 1571, 1573, 5, 377, 0, 0, 1572, 1574, 3, 256, 128, 0, 1573, 1572, 1, 0, 0, 0, 1573, 1574, 1, 0, 0, 0, 1574, 243, 1, 0, 0, 0, 1575, 1577, 3, 306, 153, 0, 1576, 1578, 3, 238, 119, 0, 1577, 1576, 1, 0, 0, 0, 1577, 1578, 1, 0, 0, 0, 1578, 245, 1, 0, 0, 0, 1579, 1580, 5, 176, 0, 0, 1580, 1581, 5, 323, 0, 0, 1581, 1582, 5, 309, 0, 0, 1582, 1588, 5, 279, 0, 0, 1583, 1584, 5, 300, 0, 0, 1584, 1585, 5, 322, 0, 0, 1585, 1586, 5, 309, 0, 0, 1586, 1588, 5, 279, 0, 0, 1587, 1579, 1, 0, 0, 0, 1587, 1583, 1, 0, 0, 0, 1588, 247, 1, 0, 0, 0, 1589, 1590, 5, 6, 0, 0, 1590, 1591, 5, 279, 0, 0, 1591, 1592, 5, 328, 0, 0, 1592, 1593, 5, 97, 0, 0, 1593, 1594, 5, 72, 0, 0, 1594, 1614, 5, 322, 0, 0, 1595, 1596, 5, 6, 0, 0, 1596, 1597, 5, 279, 0, 0, 1597, 1598, 5, 328, 0, 0, 1598, 1599, 5, 343, 0, 0, 1599, 1600, 5, 291, 0, 0, 1600, 1614, 5, 322, 0, 0, 1601, 1602, 5, 6, 0, 0, 1602, 1603, 5, 279, 0, 0, 1603, 1604, 5, 328, 0, 0, 1604, 1605, 5, 343, 0, 0, 1605, 1606, 5, 72, 0, 0, 1606, 1614, 3, 306, 153, 0, 1607, 1608, 5, 6, 0, 0, 1608, 1609, 5, 279, 0, 0, 1609, 1610, 5, 328, 0, 0, 1610, 1611, 5, 343, 0, 0, 1611, 1612, 5, 44, 0, 0, 1612, 1614, 3, 306, 153, 0, 1613, 1589, 1, 0, 0, 0, 1613, 1595, 1, 0, 0, 0, 1613, 1601, 1, 0, 0, 0, 1613, 1607, 1, 0, 0, 0, 1614, 249, 1, 0, 0, 0, 1615, 1616, 5, 229, 0, 0, 1616, 1621, 3, 170, 85, 0, 1617, 1618, 5, 380, 0, 0, 1618, 1620, 3, 170, 85, 0, 1619, 1617, 1, 0, 0, 0, 1620, 1623, 1, 0, 0, 0, 1621, 1619, 1, 0, 0, 0, 1621, 1622, 1, 0, 0, 0, 1622, 251, 1, 0, 0, 0, 1623, 1621, 1, 0, 0, 0, 1624, 1625, 5, 314, 0, 0, 1625, 1626, 5, 187, 0, 0, 1626, 1627, 3, 278, 139, 0, 1627, 1628, 3, 254, 127, 0, 1628, 1634, 1, 0, 0, 0, 1629, 1630, 5, 323, 0, 0, 1630, 1631, 5, 187, 0, 0, 1631, 1632, 5, 398, 0, 0, 1632, 1634, 3, 254, 127, 0, 1633, 1624, 1, 0, 0, 0, 1633, 1629, 1, 0, 0, 0, 1634, 253, 1, 0, 0, 0, 1635, 1636, 5, 101, 0, 0, 1636, 1637, 5, 179, 0, 0, 1637, 1638, 5, 219, 0, 0, 1638, 1639, 5, 322, 0, 0, 1639, 255, 1, 0, 0, 0, 1640, 1641, 5, 362, 0, 0, 1641, 1642, 3, 278, 139, 0, 1642, 257, 1, 0, 0, 0, 1643, 1644, 3, 260, 130, 0, 1644, 259, 1, 0, 0, 0, 1645, 1646, 6, 130, -1, 0, 1646, 1647, 5, 294, 0, 0, 1647, 1658, 3, 260, 130, 5, 1648, 1649, 5, 241, 0, 0, 1649, 1650, 5, 376, 0, 0, 1650, 1651, 3, 156, 78, 0, 1651, 1652, 5, 377, 0, 0, 1652, 1658, 1, 0, 0, 0, 1653, 1655, 3, 266, 133, 0, 1654, 1656, 3, 262, 131, 0, 1655, 1654, 1, 0, 0, 0, 1655, 1656, 1, 0, 0, 0, 1656, 1658, 1, 0, 0, 0, 1657, 1645, 1, 0, 0, 0, 1657, 1648, 1, 0, 0, 0, 1657, 1653, 1, 0, 0, 0, 1658, 1667, 1, 0, 0, 0, 1659, 1660, 10, 2, 0, 0, 1660, 1661, 5, 179, 0, 0, 1661, 1666, 3, 260, 130, 3, 1662, 1663, 10, 1, 0, 0, 1663, 1664, 5, 301, 0, 0, 1664, 1666, 3, 260, 130, 2, 1665, 1659, 1, 0, 0, 0, 1665, 1662, 1, 0, 0, 0, 1666, 1669, 1, 0, 0, 0, 1667, 1665, 1, 0, 0, 0, 1667, 1668, 1, 0, 0, 0, 1668, 261, 1, 0, 0, 0, 1669, 1667, 1, 0, 0, 0, 1670, 1672, 5, 294, 0, 0, 1671, 1670, 1, 0, 0, 0, 1671, 1672, 1, 0, 0, 0, 1672, 1673, 1, 0, 0, 0, 1673, 1674, 5, 187, 0, 0, 1674, 1675, 3, 266, 133, 0, 1675, 1676, 5, 179, 0, 0, 1676, 1677, 3, 266, 133, 0, 1677, 1754, 1, 0, 0, 0, 1678, 1680, 5, 294, 0, 0, 1679, 1678, 1, 0, 0, 0, 1679, 1680, 1, 0, 0, 0, 1680, 1681, 1, 0, 0, 0, 1681, 1682, 5, 259, 0, 0, 1682, 1683, 5, 376, 0, 0, 1683, 1688, 3, 258, 129, 0, 1684, 1685, 5, 380, 0, 0, 1685, 1687, 3, 258, 129, 0, 1686, 1684, 1, 0, 0, 0, 1687, 1690, 1, 0, 0, 0, 1688, 1686, 1, 0, 0, 0, 1688, 1689, 1, 0, 0, 0, 1689, 1691, 1, 0, 0, 0, 1690, 1688, 1, 0, 0, 0, 1691, 1692, 5, 377, 0, 0, 1692, 1754, 1, 0, 0, 0, 1693, 1695, 5, 294, 0, 0, 1694, 1693, 1, 0, 0, 0, 1694, 1695, 1, 0, 0, 0, 1695, 1696, 1, 0, 0, 0, 1696, 1697, 5, 259, 0, 0, 1697, 1698, 5, 376, 0, 0, 1698, 1699, 3, 156, 78, 0, 1699, 1700, 5, 377, 0, 0, 1700, 1754, 1, 0, 0, 0, 1701, 1702, 5, 241, 0, 0, 1702, 1703, 5, 376, 0, 0, 1703, 1704, 3, 156, 78, 0, 1704, 1705, 5, 377, 0, 0, 1705, 1754, 1, 0, 0, 0, 1706, 1708, 5, 294, 0, 0, 1707, 1706, 1, 0, 0, 0, 1707, 1708, 1, 0, 0, 0, 1708, 1709, 1, 0, 0, 0, 1709, 1710, 5, 319, 0, 0, 1710, 1754, 3, 266, 133, 0, 1711, 1713, 5, 294, 0, 0, 1712, 1711, 1, 0, 0, 0, 1712, 1713, 1, 0, 0, 0, 1713, 1714, 1, 0, 0, 0, 1714, 1715, 5, 276, 0, 0, 1715, 1729, 7, 28, 0, 0, 1716, 1717, 5, 376, 0, 0, 1717, 1730, 5, 377, 0, 0, 1718, 1719, 5, 376, 0, 0, 1719, 1724, 3, 258, 129, 0, 1720, 1721, 5, 380, 0, 0, 1721, 1723, 3, 258, 129, 0, 1722, 1720, 1, 0, 0, 0, 1723, 1726, 1, 0, 0, 0, 1724, 1722, 1, 0, 0, 0, 1724, 1725, 1, 0, 0, 0, 1725, 1727, 1, 0, 0, 0, 1726, 1724, 1, 0, 0, 0, 1727, 1728, 5, 377, 0, 0, 1728, 1730, 1, 0, 0, 0, 1729, 1716, 1, 0, 0, 0, 1729, 1718, 1, 0, 0, 0, 1730, 1754, 1, 0, 0, 0, 1731, 1733, 5, 294, 0, 0, 1732, 1731, 1, 0, 0, 0, 1732, 1733, 1, 0, 0, 0, 1733, 1734, 1, 0, 0, 0, 1734, 1735, 5, 276, 0, 0, 1735, 1754, 3, 266, 133, 0, 1736, 1738, 5, 269, 0, 0, 1737, 1739, 5, 294, 0, 0, 1738, 1737, 1, 0, 0, 0, 1738, 1739, 1, 0, 0, 0, 1739, 1740, 1, 0, 0, 0, 1740, 1754, 5, 295, 0, 0, 1741, 1743, 5, 269, 0, 0, 1742, 1744, 5, 294, 0, 0, 1743, 1742, 1, 0, 0, 0, 1743, 1744, 1, 0, 0, 0, 1744, 1745, 1, 0, 0, 0, 1745, 1754, 7, 29, 0, 0, 1746, 1748, 5, 269, 0, 0, 1747, 1749, 5, 294, 0, 0, 1748, 1747, 1, 0, 0, 0, 1748, 1749, 1, 0, 0, 0, 1749, 1750, 1, 0, 0, 0, 1750, 1751, 5, 232, 0, 0, 1751, 1752, 5, 248, 0, 0, 1752, 1754, 3, 266, 133, 0, 1753, 1671, 1, 0, 0, 0, 1753, 1679, 1, 0, 0, 0, 1753, 1694, 1, 0, 0, 0, 1753, 1701, 1, 0, 0, 0, 1753, 1707, 1, 0, 0, 0, 1753, 1712, 1, 0, 0, 0, 1753, 1732, 1, 0, 0, 0, 1753, 1736, 1, 0, 0, 0, 1753, 1741, 1, 0, 0, 0, 1753, 1746, 1, 0, 0, 0, 1754, 263, 1, 0, 0, 0, 1755, 1757, 5, 294, 0, 0, 1756, 1755, 1, 0, 0, 0, 1756, 1757, 1, 0, 0, 0, 1757, 1758, 1, 0, 0, 0, 1758, 1759, 5, 276, 0, 0, 1759, 1773, 7, 28, 0, 0, 1760, 1761, 5, 376, 0, 0, 1761, 1774, 5, 377, 0, 0, 1762, 1763, 5, 376, 0, 0, 1763, 1768, 3, 258, 129, 0, 1764, 1765, 5, 380, 0, 0, 1765, 1767, 3, 258, 129, 0, 1766, 1764, 1, 0, 0, 0, 1767, 1770, 1, 0, 0, 0, 1768, 1766, 1, 0, 0, 0, 1768, 1769, 1, 0, 0, 0, 1769, 1771, 1, 0, 0, 0, 1770, 1768, 1, 0, 0, 0, 1771, 1772, 5, 377, 0, 0, 1772, 1774, 1, 0, 0, 0, 1773, 1760, 1, 0, 0, 0, 1773, 1762, 1, 0, 0, 0, 1774, 1781, 1, 0, 0, 0, 1775, 1777, 5, 294, 0, 0, 1776, 1775, 1, 0, 0, 0, 1776, 1777, 1, 0, 0, 0, 1777, 1778, 1, 0, 0, 0, 1778, 1779, 5, 276, 0, 0, 1779, 1781, 3, 266, 133, 0, 1780, 1756, 1, 0, 0, 0, 1780, 1776, 1, 0, 0, 0, 1781, 265, 1, 0, 0, 0, 1782, 1783, 6, 133, -1, 0, 1783, 1787, 3, 268, 134, 0, 1784, 1785, 7, 30, 0, 0, 1785, 1787, 3, 266, 133, 7, 1786, 1782, 1, 0, 0, 0, 1786, 1784, 1, 0, 0, 0, 1787, 1809, 1, 0, 0, 0, 1788, 1789, 10, 6, 0, 0, 1789, 1790, 7, 31, 0, 0, 1790, 1808, 3, 266, 133, 7, 1791, 1792, 10, 5, 0, 0, 1792, 1793, 7, 32, 0, 0, 1793, 1808, 3, 266, 133, 6, 1794, 1795, 10, 4, 0, 0, 1795, 1796, 5, 371, 0, 0, 1796, 1808, 3, 266, 133, 5, 1797, 1798, 10, 3, 0, 0, 1798, 1799, 5, 372, 0, 0, 1799, 1808, 3, 266, 133, 4, 1800, 1801, 10, 2, 0, 0, 1801, 1802, 5, 370, 0, 0, 1802, 1808, 3, 266, 133, 3, 1803, 1804, 10, 1, 0, 0, 1804, 1805, 3, 330, 165, 0, 1805, 1806, 3, 266, 133, 2, 1806, 1808, 1, 0, 0, 0, 1807, 1788, 1, 0, 0, 0, 1807, 1791, 1, 0, 0, 0, 1807, 1794, 1, 0, 0, 0, 1807, 1797, 1, 0, 0, 0, 1807, 1800, 1, 0, 0, 0, 1807, 1803, 1, 0, 0, 0, 1808, 1811, 1, 0, 0, 0, 1809, 1807, 1, 0, 0, 0, 1809, 1810, 1, 0, 0, 0, 1810, 267, 1, 0, 0, 0, 1811, 1809, 1, 0, 0, 0, 1812, 1813, 6, 134, -1, 0, 1813, 1815, 5, 198, 0, 0, 1814, 1816, 3, 310, 155, 0, 1815, 1814, 1, 0, 0, 0, 1816, 1817, 1, 0, 0, 0, 1817, 1815, 1, 0, 0, 0, 1817, 1818, 1, 0, 0, 0, 1818, 1821, 1, 0, 0, 0, 1819, 1820, 5, 236, 0, 0, 1820, 1822, 3, 258, 129, 0, 1821, 1819, 1, 0, 0, 0, 1821, 1822, 1, 0, 0, 0, 1822, 1823, 1, 0, 0, 0, 1823, 1824, 5, 237, 0, 0, 1824, 1904, 1, 0, 0, 0, 1825, 1826, 5, 198, 0, 0, 1826, 1828, 3, 258, 129, 0, 1827, 1829, 3, 310, 155, 0, 1828, 1827, 1, 0, 0, 0, 1829, 1830, 1, 0, 0, 0, 1830, 1828, 1, 0, 0, 0, 1830, 1831, 1, 0, 0, 0, 1831, 1834, 1, 0, 0, 0, 1832, 1833, 5, 236, 0, 0, 1833, 1835, 3, 258, 129, 0, 1834, 1832, 1, 0, 0, 0, 1834, 1835, 1, 0, 0, 0, 1835, 1836, 1, 0, 0, 0, 1836, 1837, 5, 237, 0, 0, 1837, 1904, 1, 0, 0, 0, 1838, 1839, 5, 199, 0, 0, 1839, 1840, 5, 376, 0, 0, 1840, 1841, 3, 258, 129, 0, 1841, 1842, 5, 183, 0, 0, 1842, 1843, 3, 54, 27, 0, 1843, 1844, 5, 377, 0, 0, 1844, 1904, 1, 0, 0, 0, 1845, 1846, 5, 44, 0, 0, 1846, 1847, 5, 376, 0, 0, 1847, 1850, 3, 258, 129, 0, 1848, 1849, 5, 59, 0, 0, 1849, 1851, 5, 86, 0, 0, 1850, 1848, 1, 0, 0, 0, 1850, 1851, 1, 0, 0, 0, 1851, 1852, 1, 0, 0, 0, 1852, 1853, 5, 377, 0, 0, 1853, 1904, 1, 0, 0, 0, 1854, 1855, 5, 72, 0, 0, 1855, 1856, 5, 376, 0, 0, 1856, 1859, 3, 258, 129, 0, 1857, 1858, 5, 59, 0, 0, 1858, 1860, 5, 86, 0, 0, 1859, 1857, 1, 0, 0, 0, 1859, 1860, 1, 0, 0, 0, 1860, 1861, 1, 0, 0, 0, 1861, 1862, 5, 377, 0, 0, 1862, 1904, 1, 0, 0, 0, 1863, 1864, 5, 312, 0, 0, 1864, 1865, 5, 376, 0, 0, 1865, 1866, 3, 266, 133, 0, 1866, 1867, 5, 259, 0, 0, 1867, 1868, 3, 266, 133, 0, 1868, 1869, 5, 377, 0, 0, 1869, 1904, 1, 0, 0, 0, 1870, 1904, 3, 338, 169, 0, 1871, 1904, 5, 387, 0, 0, 1872, 1873, 3, 312, 156, 0, 1873, 1874, 5, 373, 0, 0, 1874, 1875, 5, 387, 0, 0, 1875, 1904, 1, 0, 0, 0, 1876, 1877, 5, 376, 0, 0, 1877, 1878, 3, 156, 78, 0, 1878, 1879, 5, 377, 0, 0, 1879, 1904, 1, 0, 0, 0, 1880, 1881, 3, 270, 135, 0, 1881, 1893, 5, 376, 0, 0, 1882, 1884, 3, 346, 173, 0, 1883, 1882, 1, 0, 0, 0, 1883, 1884, 1, 0, 0, 0, 1884, 1885, 1, 0, 0, 0, 1885, 1890, 3, 258, 129, 0, 1886, 1887, 5, 380, 0, 0, 1887, 1889, 3, 258, 129, 0, 1888, 1886, 1, 0, 0, 0, 1889, 1892, 1, 0, 0, 0, 1890, 1888, 1, 0, 0, 0, 1890, 1891, 1, 0, 0, 0, 1891, 1894, 1, 0, 0, 0, 1892, 1890, 1, 0, 0, 0, 1893, 1883, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1895, 1, 0, 0, 0, 1895, 1896, 5, 377, 0, 0, 1896, 1904, 1, 0, 0, 0, 1897, 1904, 3, 304, 152, 0, 1898, 1904, 3, 272, 136, 0, 1899, 1900, 5, 376, 0, 0, 1900, 1901, 3, 258, 129, 0, 1901, 1902, 5, 377, 0, 0, 1902, 1904, 1, 0, 0, 0, 1903, 1812, 1, 0, 0, 0, 1903, 1825, 1, 0, 0, 0, 1903, 1838, 1, 0, 0, 0, 1903, 1845, 1, 0, 0, 0, 1903, 1854, 1, 0, 0, 0, 1903, 1863, 1, 0, 0, 0, 1903, 1870, 1, 0, 0, 0, 1903, 1871, 1, 0, 0, 0, 1903, 1872, 1, 0, 0, 0, 1903, 1876, 1, 0, 0, 0, 1903, 1880, 1, 0, 0, 0, 1903, 1897, 1, 0, 0, 0, 1903, 1898, 1, 0, 0, 0, 1903, 1899, 1, 0, 0, 0, 1904, 1912, 1, 0, 0, 0, 1905, 1906, 10, 4, 0, 0, 1906, 1907, 5, 374, 0, 0, 1907, 1908, 3, 266, 133, 0, 1908, 1909, 5, 375, 0, 0, 1909, 1911, 1, 0, 0, 0, 1910, 1905, 1, 0, 0, 0, 1911, 1914, 1, 0, 0, 0, 1912, 1910, 1, 0, 0, 0, 1912, 1913, 1, 0, 0, 0, 1913, 269, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1915, 1919, 3, 348, 174, 0, 1916, 1919, 3, 350, 175, 0, 1917, 1919, 3, 312, 156, 0, 1918, 1915, 1, 0, 0, 0, 1918, 1916, 1, 0, 0, 0, 1918, 1917, 1, 0, 0, 0, 1919, 271, 1, 0, 0, 0, 1920, 1921, 3, 312, 156, 0, 1921, 273, 1, 0, 0, 0, 1922, 1923, 3, 304, 152, 0, 1923, 275, 1, 0, 0, 0, 1924, 1927, 3, 304, 152, 0, 1925, 1927, 3, 272, 136, 0, 1926, 1924, 1, 0, 0, 0, 1926, 1925, 1, 0, 0, 0, 1927, 277, 1, 0, 0, 0, 1928, 1931, 5, 267, 0, 0, 1929, 1932, 3, 280, 140, 0, 1930, 1932, 3, 284, 142, 0, 1931, 1929, 1, 0, 0, 0, 1931, 1930, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 279, 1, 0, 0, 0, 1933, 1935, 3, 282, 141, 0, 1934, 1936, 3, 286, 143, 0, 1935, 1934, 1, 0, 0, 0, 1935, 1936, 1, 0, 0, 0, 1936, 281, 1, 0, 0, 0, 1937, 1938, 3, 288, 144, 0, 1938, 1939, 3, 290, 145, 0, 1939, 1941, 1, 0, 0, 0, 1940, 1937, 1, 0, 0, 0, 1941, 1942, 1, 0, 0, 0, 1942, 1940, 1, 0, 0, 0, 1942, 1943, 1, 0, 0, 0, 1943, 283, 1, 0, 0, 0, 1944, 1947, 3, 286, 143, 0, 1945, 1948, 3, 282, 141, 0, 1946, 1948, 3, 286, 143, 0, 1947, 1945, 1, 0, 0, 0, 1947, 1946, 1, 0, 0, 0, 1947, 1948, 1, 0, 0, 0, 1948, 285, 1, 0, 0, 0, 1949, 1950, 3, 288, 144, 0, 1950, 1951, 3, 290, 145, 0, 1951, 1952, 5, 343, 0, 0, 1952, 1953, 3, 290, 145, 0, 1953, 287, 1, 0, 0, 0, 1954, 1956, 7, 33, 0, 0, 1955, 1954, 1, 0, 0, 0, 1955, 1956, 1, 0, 0, 0, 1956, 1957, 1, 0, 0, 0, 1957, 1960, 7, 34, 0, 0, 1958, 1960, 5, 397, 0, 0, 1959, 1955, 1, 0, 0, 0, 1959, 1958, 1, 0, 0, 0, 1960, 289, 1, 0, 0, 0, 1961, 1964, 3, 304, 152, 0, 1962, 1964, 3, 348, 174, 0, 1963, 1961, 1, 0, 0, 0, 1963, 1962, 1, 0, 0, 0, 1964, 291, 1, 0, 0, 0, 1965, 1967, 5, 183, 0, 0, 1966, 1965, 1, 0, 0, 0, 1966, 1967, 1, 0, 0, 0, 1967, 1968, 1, 0, 0, 0, 1968, 1970, 3, 304, 152, 0, 1969, 1971, 3, 300, 150, 0, 1970, 1969, 1, 0, 0, 0, 1970, 1971, 1, 0, 0, 0, 1971, 293, 1, 0, 0, 0, 1972, 1974, 5, 183, 0, 0, 1973, 1972, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1975, 1, 0, 0, 0, 1975, 1977, 3, 304, 152, 0, 1976, 1978, 3, 300, 150, 0, 1977, 1976, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 295, 1, 0, 0, 0, 1979, 1980, 3, 304, 152, 0, 1980, 1981, 3, 298, 149, 0, 1981, 297, 1, 0, 0, 0, 1982, 1983, 5, 284, 0, 0, 1983, 1985, 3, 304, 152, 0, 1984, 1982, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1984, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1990, 1, 0, 0, 0, 1988, 1990, 1, 0, 0, 0, 1989, 1984, 1, 0, 0, 0, 1989, 1988, 1, 0, 0, 0, 1990, 299, 1, 0, 0, 0, 1991, 1992, 5, 376, 0, 0, 1992, 1993, 3, 302, 151, 0, 1993, 1994, 5, 377, 0, 0, 1994, 301, 1, 0, 0, 0, 1995, 2000, 3, 304, 152, 0, 1996, 1997, 5, 380, 0, 0, 1997, 1999, 3, 304, 152, 0, 1998, 1996, 1, 0, 0, 0, 1999, 2002, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 303, 1, 0, 0, 0, 2002, 2000, 1, 0, 0, 0, 2003, 2007, 3, 306, 153, 0, 2004, 2007, 3, 308, 154, 0, 2005, 2007, 3, 350, 175, 0, 2006, 2003, 1, 0, 0, 0, 2006, 2004, 1, 0, 0, 0, 2006, 2005, 1, 0, 0, 0, 2007, 305, 1, 0, 0, 0, 2008, 2009, 7, 35, 0, 0, 2009, 307, 1, 0, 0, 0, 2010, 2011, 5, 397, 0, 0, 2011, 309, 1, 0, 0, 0, 2012, 2013, 5, 358, 0, 0, 2013, 2014, 3, 258, 129, 0, 2014, 2015, 5, 339, 0, 0, 2015, 2016, 3, 258, 129, 0, 2016, 311, 1, 0, 0, 0, 2017, 2022, 3, 304, 152, 0, 2018, 2019, 5, 373, 0, 0, 2019, 2021, 3, 304, 152, 0, 2020, 2018, 1, 0, 0, 0, 2021, 2024, 1, 0, 0, 0, 2022, 2023, 1, 0, 0, 0, 2022, 2020, 1, 0, 0, 0, 2023, 313, 1, 0, 0, 0, 2024, 2022, 1, 0, 0, 0, 2025, 2026, 5, 361, 0, 0, 2026, 2027, 3, 320, 160, 0, 2027, 315, 1, 0, 0, 0, 2028, 2029, 5, 58, 0, 0, 2029, 2030, 5, 294, 0, 0, 2030, 2031, 5, 241, 0, 0, 2031, 317, 1, 0, 0, 0, 2032, 2033, 5, 58, 0, 0, 2033, 2034, 5, 241, 0, 0, 2034, 319, 1, 0, 0, 0, 2035, 2036, 5, 376, 0, 0, 2036, 2041, 3, 322, 161, 0, 2037, 2038, 5, 380, 0, 0, 2038, 2040, 3, 322, 161, 0, 2039, 2037, 1, 0, 0, 0, 2040, 2043, 1, 0, 0, 0, 2041, 2039, 1, 0, 0, 0, 2041, 2042, 1, 0, 0, 0, 2042, 2044, 1, 0, 0, 0, 2043, 2041, 1, 0, 0, 0, 2044, 2045, 5, 377, 0, 0, 2045, 321, 1, 0, 0, 0, 2046, 2051, 3, 324, 162, 0, 2047, 2049, 5, 365, 0, 0, 2048, 2047, 1, 0, 0, 0, 2048, 2049, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2052, 3, 326, 163, 0, 2051, 2048, 1, 0, 0, 0, 2051, 2052, 1, 0, 0, 0, 2052, 323, 1, 0, 0, 0, 2053, 2057, 3, 304, 152, 0, 2054, 2057, 3, 272, 136, 0, 2055, 2057, 5, 397, 0, 0, 2056, 2053, 1, 0, 0, 0, 2056, 2054, 1, 0, 0, 0, 2056, 2055, 1, 0, 0, 0, 2057, 325, 1, 0, 0, 0, 2058, 2063, 5, 398, 0, 0, 2059, 2063, 5, 399, 0, 0, 2060, 2063, 3, 344, 172, 0, 2061, 2063, 5, 397, 0, 0, 2062, 2058, 1, 0, 0, 0, 2062, 2059, 1, 0, 0, 0, 2062, 2060, 1, 0, 0, 0, 2062, 2061, 1, 0, 0, 0, 2063, 327, 1, 0, 0, 0, 2064, 2071, 5, 179, 0, 0, 2065, 2066, 5, 371, 0, 0, 2066, 2071, 5, 371, 0, 0, 2067, 2071, 5, 301, 0, 0, 2068, 2069, 5, 370, 0, 0, 2069, 2071, 5, 370, 0, 0, 2070, 2064, 1, 0, 0, 0, 2070, 2065, 1, 0, 0, 0, 2070, 2067, 1, 0, 0, 0, 2070, 2068, 1, 0, 0, 0, 2071, 329, 1, 0, 0, 0, 2072, 2087, 5, 365, 0, 0, 2073, 2087, 5, 366, 0, 0, 2074, 2087, 5, 367, 0, 0, 2075, 2076, 5, 367, 0, 0, 2076, 2087, 5, 365, 0, 0, 2077, 2078, 5, 366, 0, 0, 2078, 2087, 5, 365, 0, 0, 2079, 2080, 5, 367, 0, 0, 2080, 2087, 5, 366, 0, 0, 2081, 2082, 5, 368, 0, 0, 2082, 2087, 5, 365, 0, 0, 2083, 2084, 5, 367, 0, 0, 2084, 2085, 5, 365, 0, 0, 2085, 2087, 5, 366, 0, 0, 2086, 2072, 1, 0, 0, 0, 2086, 2073, 1, 0, 0, 0, 2086, 2074, 1, 0, 0, 0, 2086, 2075, 1, 0, 0, 0, 2086, 2077, 1, 0, 0, 0, 2086, 2079, 1, 0, 0, 0, 2086, 2081, 1, 0, 0, 0, 2086, 2083, 1, 0, 0, 0, 2087, 331, 1, 0, 0, 0, 2088, 2089, 5, 367, 0, 0, 2089, 2096, 5, 367, 0, 0, 2090, 2091, 5, 366, 0, 0, 2091, 2096, 5, 366, 0, 0, 2092, 2096, 5, 371, 0, 0, 2093, 2096, 5, 372, 0, 0, 2094, 2096, 5, 370, 0, 0, 2095, 2088, 1, 0, 0, 0, 2095, 2090, 1, 0, 0, 0, 2095, 2092, 1, 0, 0, 0, 2095, 2093, 1, 0, 0, 0, 2095, 2094, 1, 0, 0, 0, 2096, 333, 1, 0, 0, 0, 2097, 2098, 7, 36, 0, 0, 2098, 335, 1, 0, 0, 0, 2099, 2100, 7, 37, 0, 0, 2100, 337, 1, 0, 0, 0, 2101, 2114, 3, 340, 170, 0, 2102, 2114, 3, 342, 171, 0, 2103, 2114, 3, 278, 139, 0, 2104, 2105, 5, 389, 0, 0, 2105, 2114, 3, 342, 171, 0, 2106, 2114, 3, 344, 172, 0, 2107, 2114, 5, 399, 0, 0, 2108, 2114, 5, 400, 0, 0, 2109, 2111, 5, 294, 0, 0, 2110, 2109, 1, 0, 0, 0, 2110, 2111, 1, 0, 0, 0, 2111, 2112, 1, 0, 0, 0, 2112, 2114, 5, 295, 0, 0, 2113, 2101, 1, 0, 0, 0, 2113, 2102, 1, 0, 0, 0, 2113, 2103, 1, 0, 0, 0, 2113, 2104, 1, 0, 0, 0, 2113, 2106, 1, 0, 0, 0, 2113, 2107, 1, 0, 0, 0, 2113, 2108, 1, 0, 0, 0, 2113, 2110, 1, 0, 0, 0, 2114, 339, 1, 0, 0, 0, 2115, 2116, 5, 397, 0, 0, 2116, 341, 1, 0, 0, 0, 2117, 2118, 5, 398, 0, 0, 2118, 343, 1, 0, 0, 0, 2119, 2120, 7, 29, 0, 0, 2120, 345, 1, 0, 0, 0, 2121, 2122, 7, 38, 0, 0, 2122, 347, 1, 0, 0, 0, 2123, 2124, 7, 39, 0, 0, 2124, 349, 1, 0, 0, 0, 2125, 2126, 7, 40, 0, 0, 2126, 351, 1, 0, 0, 0, 247, 360, 363, 365, 380, 398, 402, 411, 416, 423, 430, 434, 443, 455, 458, 465, 473, 478, 481, 488, 496, 500, 512, 520, 524, 545, 549, 553, 557, 566, 571, 575, 579, 583, 586, 590, 595, 601, 606, 611, 614, 618, 626, 634, 638, 642, 646, 650, 654, 658, 662, 666, 668, 678, 686, 710, 717, 723, 726, 729, 739, 742, 750, 762, 786, 799, 804, 808, 816, 820, 828, 838, 842, 848, 852, 856, 859, 868, 872, 879, 882, 892, 900, 908, 912, 927, 946, 957, 961, 968, 973, 979, 983, 990, 994, 998, 1002, 1010, 1014, 1019, 1024, 1030, 1033, 1037, 1048, 1057, 1070, 1085, 1088, 1092, 1095, 1097, 1102, 1106, 1109, 1113, 1122, 1131, 1141, 1146, 1158, 1161, 1164, 1167, 1173, 1177, 1185, 1188, 1193, 1196, 1198, 1212, 1223, 1228, 1236, 1239, 1242, 1247, 1249, 1251, 1256, 1259, 1263, 1266, 1269, 1281, 1288, 1299, 1328, 1350, 1368, 1373, 1385, 1398, 1410, 1422, 1427, 1454, 1462, 1466, 1469, 1472, 1479, 1482, 1485, 1488, 1491, 1494, 1499, 1502, 1511, 1516, 1520, 1525, 1534, 1553, 1561, 1569, 1573, 1577, 1587, 1613, 1621, 1633, 1655, 1657, 1665, 1667, 1671, 1679, 1688, 1694, 1707, 1712, 1724, 1729, 1732, 1738, 1743, 1748, 1753, 1756, 1768, 1773, 1776, 1780, 1786, 1807, 1809, 1817, 1821, 1830, 1834, 1850, 1859, 1883, 1890, 1893, 1903, 1912, 1918, 1926, 1931, 1935, 1942, 1947, 1955, 1959, 1963, 1966, 1970, 1973, 1977, 1986, 1989, 2000, 2006, 2022, 2041, 2048, 2051, 2056, 2062, 2070, 2086, 2095, 2110, 2113] \ No newline at end of file diff --git a/src/lib/flinksql/FlinkSqlParser.ts b/src/lib/flinksql/FlinkSqlParser.ts index d8b8a0b..692614a 100644 --- a/src/lib/flinksql/FlinkSqlParser.ts +++ b/src/lib/flinksql/FlinkSqlParser.ts @@ -1,4 +1,4 @@ -// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 // noinspection ES6UnusedImports,JSUnusedGlobalSymbols,JSUnusedLocalSymbols import { @@ -2814,7 +2814,7 @@ export default class FlinkSqlParser extends Parser { this.state = 611; this._errHandler.sync(this); _la = this._input.LA(1); - if (_la===212 || _la===313) { + if (_la===212 || ((((_la - 294)) & ~0x1F) === 0 && ((1 << (_la - 294)) & 524291) !== 0)) { { this.state = 610; this.columnConstraint(); @@ -3400,28 +3400,63 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 68, FlinkSqlParser.RULE_columnConstraint); let _la: number; try { - this.enterOuterAlt(localctx, 1); - { - this.state = 717; + this.state = 729; this._errHandler.sync(this); - _la = this._input.LA(1); - if (_la===212) { + switch (this._input.LA(1)) { + case 212: + case 313: + this.enterOuterAlt(localctx, 1); { - this.state = 715; - this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 716; - this.constraintName(); + this.state = 717; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===212) { + { + this.state = 715; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 716; + this.constraintName(); + } } - } - this.state = 719; - this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 720; - this.match(FlinkSqlParser.KW_KEY); - this.state = 721; - this.match(FlinkSqlParser.KW_NOT); - this.state = 722; - this.match(FlinkSqlParser.KW_ENFORCED); + this.state = 719; + this.match(FlinkSqlParser.KW_PRIMARY); + this.state = 720; + this.match(FlinkSqlParser.KW_KEY); + this.state = 723; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===294) { + { + this.state = 721; + this.match(FlinkSqlParser.KW_NOT); + this.state = 722; + this.match(FlinkSqlParser.KW_ENFORCED); + } + } + + } + break; + case 294: + case 295: + this.enterOuterAlt(localctx, 2); + { + this.state = 726; + this._errHandler.sync(this); + _la = this._input.LA(1); + if (_la===294) { + { + this.state = 725; + this.match(FlinkSqlParser.KW_NOT); + } + } + + this.state = 728; + this.match(FlinkSqlParser.KW_NULL); + } + break; + default: + throw new NoViableAltException(this); } } catch (re) { @@ -3445,9 +3480,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 724; + this.state = 731; this.match(FlinkSqlParser.KW_COMMENT); - this.state = 725; + this.state = 732; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3473,30 +3508,30 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 727; + this.state = 734; this.columnName(); - this.state = 728; + this.state = 735; this.columnType(); - this.state = 729; + this.state = 736; this.match(FlinkSqlParser.KW_METADATA); - this.state = 732; + this.state = 739; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===248) { { - this.state = 730; + this.state = 737; this.match(FlinkSqlParser.KW_FROM); - this.state = 731; + this.state = 738; this.metadataKey(); } } - this.state = 735; + this.state = 742; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===167) { { - this.state = 734; + this.state = 741; this.match(FlinkSqlParser.KW_VIRTUAL); } } @@ -3524,7 +3559,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 737; + this.state = 744; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -3550,18 +3585,18 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 739; + this.state = 746; this.columnName(); - this.state = 740; + this.state = 747; this.match(FlinkSqlParser.KW_AS); - this.state = 741; + this.state = 748; this.computedColumnExpression(); - this.state = 743; + this.state = 750; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===18) { { - this.state = 742; + this.state = 749; this.commentSpec(); } } @@ -3589,7 +3624,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 745; + this.state = 752; this.expression(); } } @@ -3614,15 +3649,15 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 747; + this.state = 754; this.match(FlinkSqlParser.KW_WATERMARK); - this.state = 748; + this.state = 755; this.match(FlinkSqlParser.KW_FOR); - this.state = 749; + this.state = 756; this.expression(); - this.state = 750; + this.state = 757; this.match(FlinkSqlParser.KW_AS); - this.state = 751; + this.state = 758; this.expression(); } } @@ -3648,27 +3683,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 755; + this.state = 762; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===212) { { - this.state = 753; + this.state = 760; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 754; + this.state = 761; this.constraintName(); } } - this.state = 757; + this.state = 764; this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 758; + this.state = 765; this.match(FlinkSqlParser.KW_KEY); - this.state = 759; + this.state = 766; this.columnNameList(); - this.state = 760; + this.state = 767; this.match(FlinkSqlParser.KW_NOT); - this.state = 761; + this.state = 768; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -3693,7 +3728,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 763; + this.state = 770; this.identifier(); } } @@ -3718,11 +3753,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 765; + this.state = 772; this.match(FlinkSqlParser.KW_PERIOD); - this.state = 766; + this.state = 773; this.match(FlinkSqlParser.KW_FOR); - this.state = 767; + this.state = 774; this.match(FlinkSqlParser.KW_SYSTEM_TIME); } } @@ -3747,11 +3782,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 769; + this.state = 776; this.match(FlinkSqlParser.KW_PARTITIONED); - this.state = 770; + this.state = 777; this.match(FlinkSqlParser.KW_BY); - this.state = 771; + this.state = 778; this.transformList(); } } @@ -3777,27 +3812,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 773; + this.state = 780; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 774; + this.state = 781; this.transform(); - this.state = 779; + this.state = 786; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 775; + this.state = 782; this.match(FlinkSqlParser.COMMA); - this.state = 776; + this.state = 783; this.transform(); } } - this.state = 781; + this.state = 788; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 782; + this.state = 789; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -3821,14 +3856,14 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 92, FlinkSqlParser.RULE_transform); let _la: number; try { - this.state = 797; + this.state = 804; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 62, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 65, this._ctx) ) { case 1: localctx = new IdentityTransformContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 784; + this.state = 791; this.qualifiedName(); } break; @@ -3836,29 +3871,29 @@ export default class FlinkSqlParser extends Parser { localctx = new ApplyTransformContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 785; - (localctx as ApplyTransformContext)._transformName = this.identifier(); - this.state = 786; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 787; - this.transformArgument(); this.state = 792; + (localctx as ApplyTransformContext)._transformName = this.identifier(); + this.state = 793; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 794; + this.transformArgument(); + this.state = 799; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 788; + this.state = 795; this.match(FlinkSqlParser.COMMA); - this.state = 789; + this.state = 796; this.transformArgument(); } } - this.state = 794; + this.state = 801; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 795; + this.state = 802; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3883,20 +3918,20 @@ export default class FlinkSqlParser extends Parser { let localctx: TransformArgumentContext = new TransformArgumentContext(this, this._ctx, this.state); this.enterRule(localctx, 94, FlinkSqlParser.RULE_transformArgument); try { - this.state = 801; + this.state = 808; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 63, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 799; + this.state = 806; this.qualifiedName(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 800; + this.state = 807; this.constant(); } break; @@ -3924,32 +3959,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 803; + this.state = 810; this.match(FlinkSqlParser.KW_LIKE); - this.state = 804; + this.state = 811; this.sourceTable(); - this.state = 813; + this.state = 820; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 65, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 68, this._ctx) ) { case 1: { - this.state = 805; + this.state = 812; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 809; + this.state = 816; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===40 || _la===93 || _la===260) { { { - this.state = 806; + this.state = 813; this.likeOption(); } } - this.state = 811; + this.state = 818; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 812; + this.state = 819; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -3977,7 +4012,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 815; + this.state = 822; this.uid(); } } @@ -4001,14 +4036,14 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 100, FlinkSqlParser.RULE_likeOption); let _la: number; try { - this.state = 821; + this.state = 828; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 66, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 69, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 817; + this.state = 824; _la = this._input.LA(1); if(!(_la===40 || _la===260)) { this._errHandler.recoverInline(this); @@ -4017,7 +4052,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 818; + this.state = 825; _la = this._input.LA(1); if(!(_la===21 || _la===95 || _la===176)) { this._errHandler.recoverInline(this); @@ -4033,7 +4068,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 819; + this.state = 826; _la = this._input.LA(1); if(!(_la===40 || _la===93 || _la===260)) { this._errHandler.recoverInline(this); @@ -4042,7 +4077,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 820; + this.state = 827; _la = this._input.LA(1); if(!(_la===52 || _la===89 || _la===169)) { this._errHandler.recoverInline(this); @@ -4077,13 +4112,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 823; + this.state = 830; this.match(FlinkSqlParser.KW_CREATE); - this.state = 824; + this.state = 831; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 825; + this.state = 832; this.uid(); - this.state = 826; + this.state = 833; this.withOption(); } } @@ -4109,33 +4144,33 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 828; + this.state = 835; this.match(FlinkSqlParser.KW_CREATE); - this.state = 829; + this.state = 836; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 831; + this.state = 838; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 67, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 70, this._ctx) ) { case 1: { - this.state = 830; + this.state = 837; this.ifNotExists(); } break; } - this.state = 833; + this.state = 840; this.uid(); - this.state = 835; + this.state = 842; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===18) { { - this.state = 834; + this.state = 841; this.commentSpec(); } } - this.state = 837; + this.state = 844; this.withOption(); } } @@ -4161,55 +4196,55 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 839; + this.state = 846; this.match(FlinkSqlParser.KW_CREATE); - this.state = 841; + this.state = 848; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===149) { { - this.state = 840; + this.state = 847; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 843; + this.state = 850; this.match(FlinkSqlParser.KW_VIEW); - this.state = 845; + this.state = 852; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 70, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 73, this._ctx) ) { case 1: { - this.state = 844; + this.state = 851; this.ifNotExists(); } break; } - this.state = 847; + this.state = 854; this.uid(); - this.state = 849; + this.state = 856; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===376) { { - this.state = 848; + this.state = 855; this.columnNameList(); } } - this.state = 852; + this.state = 859; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===18) { { - this.state = 851; + this.state = 858; this.commentSpec(); } } - this.state = 854; + this.state = 861; this.match(FlinkSqlParser.KW_AS); - this.state = 855; + this.state = 862; this.queryStatement(0); } } @@ -4235,52 +4270,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 857; + this.state = 864; this.match(FlinkSqlParser.KW_CREATE); - this.state = 861; + this.state = 868; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 73, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 76, this._ctx) ) { case 1: { - this.state = 858; + this.state = 865; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 859; + this.state = 866; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 860; + this.state = 867; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 863; + this.state = 870; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 865; + this.state = 872; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 74, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 77, this._ctx) ) { case 1: { - this.state = 864; + this.state = 871; this.ifNotExists(); } break; } - this.state = 867; + this.state = 874; this.uid(); - this.state = 868; + this.state = 875; this.match(FlinkSqlParser.KW_AS); - this.state = 869; + this.state = 876; this.identifier(); - this.state = 872; + this.state = 879; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===272) { { - this.state = 870; + this.state = 877; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 871; + this.state = 878; _la = this._input.LA(1); if(!(_la===65 || _la===106 || _la===125)) { this._errHandler.recoverInline(this); @@ -4292,12 +4327,12 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 875; + this.state = 882; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===353) { { - this.state = 874; + this.state = 881; this.usingClause(); } } @@ -4326,27 +4361,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 877; + this.state = 884; this.match(FlinkSqlParser.KW_USING); - this.state = 878; - this.match(FlinkSqlParser.KW_JAR); - this.state = 879; - this.jarFileName(); this.state = 885; + this.match(FlinkSqlParser.KW_JAR); + this.state = 886; + this.jarFileName(); + this.state = 892; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 880; + this.state = 887; this.match(FlinkSqlParser.COMMA); - this.state = 881; + this.state = 888; this.match(FlinkSqlParser.KW_JAR); - this.state = 882; + this.state = 889; this.jarFileName(); } } - this.state = 887; + this.state = 894; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -4373,7 +4408,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 888; + this.state = 895; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -4398,52 +4433,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 890; + this.state = 897; this.match(FlinkSqlParser.KW_ALTER); - this.state = 891; + this.state = 898; this.match(FlinkSqlParser.KW_TABLE); - this.state = 893; + this.state = 900; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 78, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 81, this._ctx) ) { case 1: { - this.state = 892; + this.state = 899; this.ifExists(); } break; } - this.state = 895; + this.state = 902; this.uid(); - this.state = 901; + this.state = 908; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 79, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 82, this._ctx) ) { case 1: { - this.state = 896; + this.state = 903; this.renameDefinition(); } break; case 2: { - this.state = 897; + this.state = 904; this.setKeyValueDefinition(); } break; case 3: { - this.state = 898; + this.state = 905; this.addConstraint(); } break; case 4: { - this.state = 899; + this.state = 906; this.dropConstraint(); } break; case 5: { - this.state = 900; + this.state = 907; this.addUnique(); } break; @@ -4472,21 +4507,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 903; + this.state = 910; this.match(FlinkSqlParser.KW_RENAME); - this.state = 905; + this.state = 912; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0) || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 19) !== 0)) { { - this.state = 904; + this.state = 911; this.uid(); } } - this.state = 907; + this.state = 914; this.match(FlinkSqlParser.KW_TO); - this.state = 908; + this.state = 915; this.uid(); } } @@ -4511,9 +4546,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 910; + this.state = 917; this.match(FlinkSqlParser.KW_SET); - this.state = 911; + this.state = 918; this.tablePropertyList(); } } @@ -4539,24 +4574,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 913; - this.match(FlinkSqlParser.KW_ADD); - this.state = 914; - this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 915; - this.constraintName(); - this.state = 916; - this.match(FlinkSqlParser.KW_PRIMARY); - this.state = 917; - this.match(FlinkSqlParser.KW_KEY); - this.state = 918; - this.columnNameList(); this.state = 920; + this.match(FlinkSqlParser.KW_ADD); + this.state = 921; + this.match(FlinkSqlParser.KW_CONSTRAINT); + this.state = 922; + this.constraintName(); + this.state = 923; + this.match(FlinkSqlParser.KW_PRIMARY); + this.state = 924; + this.match(FlinkSqlParser.KW_KEY); + this.state = 925; + this.columnNameList(); + this.state = 927; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 919; + this.state = 926; this.notForced(); } } @@ -4584,11 +4619,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 922; + this.state = 929; this.match(FlinkSqlParser.KW_DROP); - this.state = 923; + this.state = 930; this.match(FlinkSqlParser.KW_CONSTRAINT); - this.state = 924; + this.state = 931; this.constraintName(); } } @@ -4613,11 +4648,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 926; + this.state = 933; this.match(FlinkSqlParser.KW_ADD); - this.state = 927; + this.state = 934; this.match(FlinkSqlParser.KW_UNIQUE); - this.state = 928; + this.state = 935; this.columnNameList(); } } @@ -4642,9 +4677,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 930; + this.state = 937; this.match(FlinkSqlParser.KW_NOT); - this.state = 931; + this.state = 938; this.match(FlinkSqlParser.KW_ENFORCED); } } @@ -4669,26 +4704,26 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 933; + this.state = 940; this.match(FlinkSqlParser.KW_ALTER); - this.state = 934; + this.state = 941; this.match(FlinkSqlParser.KW_VIEW); - this.state = 935; + this.state = 942; this.uid(); - this.state = 939; + this.state = 946; this._errHandler.sync(this); switch (this._input.LA(1)) { case 118: { - this.state = 936; + this.state = 943; this.renameDefinition(); } break; case 183: { - this.state = 937; + this.state = 944; this.match(FlinkSqlParser.KW_AS); - this.state = 938; + this.state = 945; this.queryStatement(0); } break; @@ -4718,13 +4753,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 941; + this.state = 948; this.match(FlinkSqlParser.KW_ALTER); - this.state = 942; + this.state = 949; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 943; + this.state = 950; this.uid(); - this.state = 944; + this.state = 951; this.setKeyValueDefinition(); } } @@ -4750,52 +4785,52 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 946; + this.state = 953; this.match(FlinkSqlParser.KW_ALTER); - this.state = 950; + this.state = 957; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 83, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 86, this._ctx) ) { case 1: { - this.state = 947; + this.state = 954; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 948; + this.state = 955; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 949; + this.state = 956; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 952; + this.state = 959; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 954; + this.state = 961; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 84, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 87, this._ctx) ) { case 1: { - this.state = 953; + this.state = 960; this.ifExists(); } break; } - this.state = 956; + this.state = 963; this.uid(); - this.state = 957; + this.state = 964; this.match(FlinkSqlParser.KW_AS); - this.state = 958; + this.state = 965; this.identifier(); - this.state = 961; + this.state = 968; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===272) { { - this.state = 959; + this.state = 966; this.match(FlinkSqlParser.KW_LANGUAGE); - this.state = 960; + this.state = 967; _la = this._input.LA(1); if(!(_la===65 || _la===106 || _la===125)) { this._errHandler.recoverInline(this); @@ -4830,21 +4865,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 963; + this.state = 970; this.match(FlinkSqlParser.KW_DROP); - this.state = 964; + this.state = 971; this.match(FlinkSqlParser.KW_CATALOG); - this.state = 966; + this.state = 973; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 86, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 89, this._ctx) ) { case 1: { - this.state = 965; + this.state = 972; this.ifExists(); } break; } - this.state = 968; + this.state = 975; this.uid(); } } @@ -4870,31 +4905,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 970; + this.state = 977; this.match(FlinkSqlParser.KW_DROP); - this.state = 972; + this.state = 979; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===149) { { - this.state = 971; + this.state = 978; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 974; + this.state = 981; this.match(FlinkSqlParser.KW_TABLE); - this.state = 976; + this.state = 983; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 88, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 91, this._ctx) ) { case 1: { - this.state = 975; + this.state = 982; this.ifExists(); } break; } - this.state = 978; + this.state = 985; this.uid(); } } @@ -4920,28 +4955,28 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 980; + this.state = 987; this.match(FlinkSqlParser.KW_DROP); - this.state = 981; + this.state = 988; this.match(FlinkSqlParser.KW_DATABASE); - this.state = 983; + this.state = 990; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 89, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 92, this._ctx) ) { case 1: { - this.state = 982; + this.state = 989; this.ifExists(); } break; } - this.state = 985; + this.state = 992; this.uid(); - this.state = 987; + this.state = 994; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===11 || _la===122) { { - this.state = 986; + this.state = 993; localctx._dropType = this._input.LT(1); _la = this._input.LA(1); if(!(_la===11 || _la===122)) { @@ -4978,31 +5013,31 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 989; + this.state = 996; this.match(FlinkSqlParser.KW_DROP); - this.state = 991; + this.state = 998; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===149) { { - this.state = 990; + this.state = 997; this.match(FlinkSqlParser.KW_TEMPORARY); } } - this.state = 993; + this.state = 1000; this.match(FlinkSqlParser.KW_VIEW); - this.state = 995; + this.state = 1002; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 92, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 95, this._ctx) ) { case 1: { - this.state = 994; + this.state = 1001; this.ifExists(); } break; } - this.state = 997; + this.state = 1004; this.uid(); } } @@ -5027,39 +5062,39 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 999; + this.state = 1006; this.match(FlinkSqlParser.KW_DROP); - this.state = 1003; + this.state = 1010; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 93, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 96, this._ctx) ) { case 1: { - this.state = 1000; + this.state = 1007; this.match(FlinkSqlParser.KW_TEMPORARY); } break; case 2: { - this.state = 1001; + this.state = 1008; this.match(FlinkSqlParser.KW_TEMPORARY); - this.state = 1002; + this.state = 1009; this.match(FlinkSqlParser.KW_SYSTEM); } break; } - this.state = 1005; + this.state = 1012; this.match(FlinkSqlParser.KW_FUNCTION); - this.state = 1007; + this.state = 1014; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 94, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 97, this._ctx) ) { case 1: { - this.state = 1006; + this.state = 1013; this.ifExists(); } break; } - this.state = 1009; + this.state = 1016; this.uid(); } } @@ -5083,24 +5118,24 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 144, FlinkSqlParser.RULE_insertStatement); let _la: number; try { - this.state = 1017; + this.state = 1024; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 96, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 99, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 1012; + this.state = 1019; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===240) { { - this.state = 1011; + this.state = 1018; this.match(FlinkSqlParser.KW_EXECUTE); } } - this.state = 1014; + this.state = 1021; this.insertSimpleStatement(); } } @@ -5109,9 +5144,9 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 1015; + this.state = 1022; this.match(FlinkSqlParser.KW_EXECUTE); - this.state = 1016; + this.state = 1023; this.insertMulStatement(); } } @@ -5140,9 +5175,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1019; + this.state = 1026; this.match(FlinkSqlParser.KW_INSERT); - this.state = 1020; + this.state = 1027; _la = this._input.LA(1); if(!(_la===92 || _la===268)) { this._errHandler.recoverInline(this); @@ -5151,40 +5186,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1021; + this.state = 1028; this.uid(); - this.state = 1030; + this.state = 1037; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 99, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 102, this._ctx) ) { case 1: { - this.state = 1023; + this.state = 1030; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===307) { { - this.state = 1022; + this.state = 1029; this.insertPartitionDefinition(); } } - this.state = 1026; + this.state = 1033; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 98, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 101, this._ctx) ) { case 1: { - this.state = 1025; + this.state = 1032; this.columnNameList(); } break; } - this.state = 1028; + this.state = 1035; this.queryStatement(0); } break; case 2: { - this.state = 1029; + this.state = 1036; this.valuesDefinition(); } break; @@ -5212,9 +5247,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1032; + this.state = 1039; this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1033; + this.state = 1040; this.tablePropertyList(); } } @@ -5240,23 +5275,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1035; + this.state = 1042; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1036; + this.state = 1043; this.valuesRowDefinition(); - this.state = 1041; + this.state = 1048; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1037; + this.state = 1044; this.match(FlinkSqlParser.COMMA); - this.state = 1038; + this.state = 1045; this.valuesRowDefinition(); } } - this.state = 1043; + this.state = 1050; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5284,27 +5319,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1044; + this.state = 1051; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1045; + this.state = 1052; this.constant(); - this.state = 1050; + this.state = 1057; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1046; + this.state = 1053; this.match(FlinkSqlParser.COMMA); - this.state = 1047; + this.state = 1054; this.constant(); } } - this.state = 1052; + this.state = 1059; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1053; + this.state = 1060; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5330,29 +5365,29 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1055; + this.state = 1062; this.match(FlinkSqlParser.KW_STATEMENT); - this.state = 1056; + this.state = 1063; this.match(FlinkSqlParser.KW_SET); - this.state = 1057; + this.state = 1064; this.match(FlinkSqlParser.KW_BEGIN); - this.state = 1061; + this.state = 1068; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1058; + this.state = 1065; this.insertSimpleStatement(); - this.state = 1059; + this.state = 1066; this.match(FlinkSqlParser.SEMICOLON); } } - this.state = 1063; + this.state = 1070; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===263); - this.state = 1065; + this.state = 1072; this.match(FlinkSqlParser.KW_END); } } @@ -5390,66 +5425,40 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1090; + this.state = 1097; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 107, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) { case 1: { - this.state = 1068; + this.state = 1075; this.valuesCaluse(); } break; case 2: { - this.state = 1069; + this.state = 1076; this.withClause(); - this.state = 1070; + this.state = 1077; this.queryStatement(5); } break; case 3: { - this.state = 1072; + this.state = 1079; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1073; + this.state = 1080; this.queryStatement(0); - this.state = 1074; + this.state = 1081; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: - { - this.state = 1076; - this.selectClause(); - this.state = 1078; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 103, this._ctx) ) { - case 1: - { - this.state = 1077; - this.orderByCaluse(); - } - break; - } - this.state = 1081; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 104, this._ctx) ) { - case 1: - { - this.state = 1080; - this.limitClause(); - } - break; - } - } - break; - case 5: { this.state = 1083; - this.selectStatement(); + this.selectClause(); this.state = 1085; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 105, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 106, this._ctx) ) { case 1: { this.state = 1084; @@ -5459,7 +5468,7 @@ export default class FlinkSqlParser extends Parser { } this.state = 1088; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 106, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 107, this._ctx) ) { case 1: { this.state = 1087; @@ -5469,11 +5478,37 @@ export default class FlinkSqlParser extends Parser { } } break; + case 5: + { + this.state = 1090; + this.selectStatement(); + this.state = 1092; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 108, this._ctx) ) { + case 1: + { + this.state = 1091; + this.orderByCaluse(); + } + break; + } + this.state = 1095; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 109, this._ctx) ) { + case 1: + { + this.state = 1094; + this.limitClause(); + } + break; + } + } + break; } this._ctx.stop = this._input.LT(-1); - this.state = 1106; + this.state = 1113; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 114, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -5485,11 +5520,11 @@ export default class FlinkSqlParser extends Parser { localctx = new QueryStatementContext(this, _parentctx, _parentState); localctx._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_queryStatement); - this.state = 1092; + this.state = 1099; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1093; + this.state = 1100; localctx._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===239 || _la===266 || _la===346)) { @@ -5499,34 +5534,34 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1095; + this.state = 1102; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===176) { { - this.state = 1094; + this.state = 1101; this.match(FlinkSqlParser.KW_ALL); } } - this.state = 1097; + this.state = 1104; localctx._right = this.queryStatement(0); - this.state = 1099; + this.state = 1106; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 109, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 112, this._ctx) ) { case 1: { - this.state = 1098; + this.state = 1105; this.orderByCaluse(); } break; } - this.state = 1102; + this.state = 1109; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 110, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 113, this._ctx) ) { case 1: { - this.state = 1101; + this.state = 1108; this.limitClause(); } break; @@ -5534,9 +5569,9 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1108; + this.state = 1115; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 111, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 114, this._ctx); } } } @@ -5562,27 +5597,27 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1109; + this.state = 1116; this.match(FlinkSqlParser.KW_VALUES); - this.state = 1110; + this.state = 1117; this.expression(); - this.state = 1115; + this.state = 1122; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 115, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1111; + this.state = 1118; this.match(FlinkSqlParser.COMMA); - this.state = 1112; + this.state = 1119; this.expression(); } } } - this.state = 1117; + this.state = 1124; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 112, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 115, this._ctx); } } } @@ -5608,23 +5643,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1118; + this.state = 1125; this.match(FlinkSqlParser.KW_WITH); - this.state = 1119; + this.state = 1126; this.withItem(); - this.state = 1124; + this.state = 1131; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1120; + this.state = 1127; this.match(FlinkSqlParser.COMMA); - this.state = 1121; + this.state = 1128; this.withItem(); } } - this.state = 1126; + this.state = 1133; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -5652,45 +5687,45 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1127; + this.state = 1134; this.withItemName(); - this.state = 1139; + this.state = 1146; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===376) { { - this.state = 1128; + this.state = 1135; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1129; + this.state = 1136; this.columnName(); - this.state = 1134; + this.state = 1141; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1130; + this.state = 1137; this.match(FlinkSqlParser.COMMA); - this.state = 1131; + this.state = 1138; this.columnName(); } } - this.state = 1136; + this.state = 1143; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1137; + this.state = 1144; this.match(FlinkSqlParser.RR_BRACKET); } } - this.state = 1141; + this.state = 1148; this.match(FlinkSqlParser.KW_AS); - this.state = 1142; + this.state = 1149; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1143; + this.state = 1150; this.queryStatement(0); - this.state = 1144; + this.state = 1151; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -5715,7 +5750,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1146; + this.state = 1153; this.identifier(); } } @@ -5738,52 +5773,52 @@ export default class FlinkSqlParser extends Parser { let localctx: SelectStatementContext = new SelectStatementContext(this, this._ctx, this.state); this.enterRule(localctx, 166, FlinkSqlParser.RULE_selectStatement); try { - this.state = 1166; + this.state = 1173; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 120, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1148; + this.state = 1155; this.selectClause(); - this.state = 1149; + this.state = 1156; this.fromClause(); - this.state = 1151; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 116, this._ctx) ) { - case 1: - { - this.state = 1150; - this.whereClause(); - } - break; - } - this.state = 1154; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 117, this._ctx) ) { - case 1: - { - this.state = 1153; - this.groupByClause(); - } - break; - } - this.state = 1157; - this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 118, this._ctx) ) { - case 1: - { - this.state = 1156; - this.havingClause(); - } - break; - } - this.state = 1160; + this.state = 1158; this._errHandler.sync(this); switch ( this._interp.adaptivePredict(this._input, 119, this._ctx) ) { case 1: { - this.state = 1159; + this.state = 1157; + this.whereClause(); + } + break; + } + this.state = 1161; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 120, this._ctx) ) { + case 1: + { + this.state = 1160; + this.groupByClause(); + } + break; + } + this.state = 1164; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 121, this._ctx) ) { + case 1: + { + this.state = 1163; + this.havingClause(); + } + break; + } + this.state = 1167; + this._errHandler.sync(this); + switch ( this._interp.adaptivePredict(this._input, 122, this._ctx) ) { + case 1: + { + this.state = 1166; this.windowClause(); } break; @@ -5793,11 +5828,11 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1162; + this.state = 1169; this.selectClause(); - this.state = 1163; + this.state = 1170; this.fromClause(); - this.state = 1164; + this.state = 1171; this.matchRecognizeClause(); } break; @@ -5825,48 +5860,48 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1168; + this.state = 1175; this.match(FlinkSqlParser.KW_SELECT); - this.state = 1170; + this.state = 1177; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 121, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { case 1: { - this.state = 1169; + this.state = 1176; this.setQuantifier(); } break; } - this.state = 1181; + this.state = 1188; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 123, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 126, this._ctx) ) { case 1: { - this.state = 1172; + this.state = 1179; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; case 2: { - this.state = 1173; + this.state = 1180; this.projectItemDefinition(); - this.state = 1178; + this.state = 1185; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 125, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1174; + this.state = 1181; this.match(FlinkSqlParser.COMMA); - this.state = 1175; + this.state = 1182; this.projectItemDefinition(); } } } - this.state = 1180; + this.state = 1187; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 122, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 125, this._ctx); } } break; @@ -5892,37 +5927,37 @@ export default class FlinkSqlParser extends Parser { let localctx: ProjectItemDefinitionContext = new ProjectItemDefinitionContext(this, this._ctx, this.state); this.enterRule(localctx, 170, FlinkSqlParser.RULE_projectItemDefinition); try { - this.state = 1191; + this.state = 1198; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 126, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1183; + this.state = 1190; this.overWindowItem(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1184; + this.state = 1191; this.expression(); - this.state = 1189; + this.state = 1196; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 125, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 128, this._ctx) ) { case 1: { - this.state = 1186; + this.state = 1193; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 124, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 127, this._ctx) ) { case 1: { - this.state = 1185; + this.state = 1192; this.match(FlinkSqlParser.KW_AS); } break; } - this.state = 1188; + this.state = 1195; this.expression(); } break; @@ -5950,36 +5985,36 @@ export default class FlinkSqlParser extends Parser { let localctx: OverWindowItemContext = new OverWindowItemContext(this, this._ctx, this.state); this.enterRule(localctx, 172, FlinkSqlParser.RULE_overWindowItem); try { - this.state = 1205; + this.state = 1212; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 127, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 130, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1193; + this.state = 1200; this.primaryExpression(0); - this.state = 1194; + this.state = 1201; this.match(FlinkSqlParser.KW_OVER); - this.state = 1195; + this.state = 1202; this.windowSpec(); - this.state = 1196; + this.state = 1203; this.match(FlinkSqlParser.KW_AS); - this.state = 1197; + this.state = 1204; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1199; + this.state = 1206; this.primaryExpression(0); - this.state = 1200; + this.state = 1207; this.match(FlinkSqlParser.KW_OVER); - this.state = 1201; + this.state = 1208; this.errorCapturingIdentifier(); - this.state = 1202; + this.state = 1209; this.match(FlinkSqlParser.KW_AS); - this.state = 1203; + this.state = 1210; this.identifier(); } break; @@ -6006,9 +6041,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1207; + this.state = 1214; this.match(FlinkSqlParser.KW_FROM); - this.state = 1208; + this.state = 1215; this.tableExpression(0); } } @@ -6046,50 +6081,50 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1221; + this.state = 1228; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 129, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 132, this._ctx) ) { case 1: { - this.state = 1211; + this.state = 1218; this.tableReference(); - this.state = 1216; + this.state = 1223; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 131, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1212; + this.state = 1219; this.match(FlinkSqlParser.COMMA); - this.state = 1213; + this.state = 1220; this.tableReference(); } } } - this.state = 1218; + this.state = 1225; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 128, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 131, this._ctx); } } break; case 2: { - this.state = 1219; + this.state = 1226; this.inlineDataValueClause(); } break; case 3: { - this.state = 1220; + this.state = 1227; this.windoTVFClause(); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1244; + this.state = 1251; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 138, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -6097,22 +6132,22 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1242; + this.state = 1249; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 134, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 137, this._ctx) ) { case 1: { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1223; + this.state = 1230; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1224; + this.state = 1231; this.match(FlinkSqlParser.KW_CROSS); - this.state = 1225; + this.state = 1232; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1226; + this.state = 1233; this.tableExpression(4); } break; @@ -6120,26 +6155,26 @@ export default class FlinkSqlParser extends Parser { { localctx = new TableExpressionContext(this, _parentctx, _parentState); this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_tableExpression); - this.state = 1227; + this.state = 1234; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1229; + this.state = 1236; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===290) { { - this.state = 1228; + this.state = 1235; this.match(FlinkSqlParser.KW_NATURAL); } } - this.state = 1232; + this.state = 1239; this._errHandler.sync(this); _la = this._input.LA(1); if (((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 67112961) !== 0) || _la===318) { { - this.state = 1231; + this.state = 1238; _la = this._input.LA(1); if(!(((((_la - 249)) & ~0x1F) === 0 && ((1 << (_la - 249)) & 67112961) !== 0) || _la===318)) { this._errHandler.recoverInline(this); @@ -6151,26 +6186,26 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1235; + this.state = 1242; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===304) { { - this.state = 1234; + this.state = 1241; this.match(FlinkSqlParser.KW_OUTER); } } - this.state = 1237; + this.state = 1244; this.match(FlinkSqlParser.KW_JOIN); - this.state = 1238; + this.state = 1245; this.tableExpression(0); - this.state = 1240; + this.state = 1247; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 133, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { case 1: { - this.state = 1239; + this.state = 1246; this.joinCondition(); } break; @@ -6180,9 +6215,9 @@ export default class FlinkSqlParser extends Parser { } } } - this.state = 1246; + this.state = 1253; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 135, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 138, this._ctx); } } } @@ -6207,14 +6242,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1247; + this.state = 1254; this.tablePrimary(); - this.state = 1249; + this.state = 1256; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 136, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 139, this._ctx) ) { case 1: { - this.state = 1248; + this.state = 1255; this.tableAlias(); } break; @@ -6241,50 +6276,50 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 180, FlinkSqlParser.RULE_tablePrimary); let _la: number; try { - this.state = 1292; + this.state = 1299; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 143, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 146, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1252; + this.state = 1259; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===337) { { - this.state = 1251; + this.state = 1258; this.match(FlinkSqlParser.KW_TABLE); } } - this.state = 1254; + this.state = 1261; this.tablePath(); - this.state = 1256; + this.state = 1263; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 138, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 141, this._ctx) ) { case 1: { - this.state = 1255; + this.state = 1262; this.systemTimePeriod(); } break; } - this.state = 1262; + this.state = 1269; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 140, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 143, this._ctx) ) { case 1: { - this.state = 1259; + this.state = 1266; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===183) { { - this.state = 1258; + this.state = 1265; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1261; + this.state = 1268; this.correlationName(); } break; @@ -6294,71 +6329,71 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1264; + this.state = 1271; this.match(FlinkSqlParser.KW_LATERAL); - this.state = 1265; + this.state = 1272; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1266; + this.state = 1273; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1267; - this.functionName(); - this.state = 1268; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1269; - this.expression(); this.state = 1274; + this.functionName(); + this.state = 1275; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1276; + this.expression(); + this.state = 1281; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1270; + this.state = 1277; this.match(FlinkSqlParser.COMMA); - this.state = 1271; + this.state = 1278; this.expression(); } } - this.state = 1276; + this.state = 1283; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1277; + this.state = 1284; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1278; + this.state = 1285; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1281; + this.state = 1288; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===273) { { - this.state = 1280; + this.state = 1287; this.match(FlinkSqlParser.KW_LATERAL); } } - this.state = 1283; + this.state = 1290; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1284; + this.state = 1291; this.queryStatement(0); - this.state = 1285; + this.state = 1292; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1287; + this.state = 1294; this.match(FlinkSqlParser.KW_UNNEST); - this.state = 1288; + this.state = 1295; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1289; + this.state = 1296; this.expression(); - this.state = 1290; + this.state = 1297; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6385,7 +6420,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1294; + this.state = 1301; this.uid(); } } @@ -6410,15 +6445,15 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1296; + this.state = 1303; this.match(FlinkSqlParser.KW_FOR); - this.state = 1297; + this.state = 1304; this.match(FlinkSqlParser.KW_SYSTEM_TIME); - this.state = 1298; + this.state = 1305; this.match(FlinkSqlParser.KW_AS); - this.state = 1299; + this.state = 1306; this.match(FlinkSqlParser.KW_OF); - this.state = 1300; + this.state = 1307; this.dateTimeExpression(); } } @@ -6443,7 +6478,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1302; + this.state = 1309; this.expression(); } } @@ -6468,13 +6503,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1304; + this.state = 1311; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1305; + this.state = 1312; this.valuesDefinition(); - this.state = 1306; + this.state = 1313; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1307; + this.state = 1314; this.tableAlias(); } } @@ -6499,13 +6534,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1309; + this.state = 1316; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1310; + this.state = 1317; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1311; + this.state = 1318; this.windowTVFExression(); - this.state = 1312; + this.state = 1319; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6531,29 +6566,29 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1314; - this.windoTVFName(); - this.state = 1315; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1316; - this.windowTVFParam(); this.state = 1321; + this.windoTVFName(); + this.state = 1322; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1323; + this.windowTVFParam(); + this.state = 1328; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1317; + this.state = 1324; this.match(FlinkSqlParser.COMMA); - this.state = 1318; + this.state = 1325; this.windowTVFParam(); } } - this.state = 1323; + this.state = 1330; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1324; + this.state = 1331; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6579,7 +6614,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1326; + this.state = 1333; _la = this._input.LA(1); if(!(_la===23 || _la===56 || _la===155)) { this._errHandler.recoverInline(this); @@ -6609,64 +6644,64 @@ export default class FlinkSqlParser extends Parser { let localctx: WindowTVFParamContext = new WindowTVFParamContext(this, this._ctx, this.state); this.enterRule(localctx, 196, FlinkSqlParser.RULE_windowTVFParam); try { - this.state = 1343; + this.state = 1350; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 145, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 148, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1328; + this.state = 1335; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1329; + this.state = 1336; this.timeAttrColumn(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1330; + this.state = 1337; this.columnDescriptor(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1331; + this.state = 1338; this.timeIntervalExpression(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1332; + this.state = 1339; this.match(FlinkSqlParser.KW_DATA); - this.state = 1333; + this.state = 1340; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1334; + this.state = 1341; this.match(FlinkSqlParser.KW_TABLE); - this.state = 1335; + this.state = 1342; this.timeAttrColumn(); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1336; + this.state = 1343; this.match(FlinkSqlParser.KW_TIMECOL); - this.state = 1337; + this.state = 1344; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1338; + this.state = 1345; this.columnDescriptor(); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1339; + this.state = 1346; this.timeIntervalParamName(); - this.state = 1340; + this.state = 1347; this.match(FlinkSqlParser.DOUBLE_RIGHT_ARROW); - this.state = 1341; + this.state = 1348; this.timeIntervalExpression(); } break; @@ -6694,7 +6729,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1345; + this.state = 1352; _la = this._input.LA(1); if(!(_la===24 || ((((_la - 138)) & ~0x1F) === 0 && ((1 << (_la - 138)) & 4163) !== 0) || _la===298)) { this._errHandler.recoverInline(this); @@ -6726,13 +6761,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1347; + this.state = 1354; this.match(FlinkSqlParser.KW_DESCRIPTOR); - this.state = 1348; + this.state = 1355; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1349; + this.state = 1356; this.uid(); - this.state = 1350; + this.state = 1357; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -6756,44 +6791,44 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 202, FlinkSqlParser.RULE_joinCondition); let _la: number; try { - this.state = 1366; + this.state = 1373; this._errHandler.sync(this); switch (this._input.LA(1)) { case 299: this.enterOuterAlt(localctx, 1); { - this.state = 1352; + this.state = 1359; this.match(FlinkSqlParser.KW_ON); - this.state = 1353; + this.state = 1360; this.booleanExpression(0); } break; case 353: this.enterOuterAlt(localctx, 2); { - this.state = 1354; - this.match(FlinkSqlParser.KW_USING); - this.state = 1355; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1356; - this.uid(); this.state = 1361; + this.match(FlinkSqlParser.KW_USING); + this.state = 1362; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1363; + this.uid(); + this.state = 1368; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1357; + this.state = 1364; this.match(FlinkSqlParser.COMMA); - this.state = 1358; + this.state = 1365; this.uid(); } } - this.state = 1363; + this.state = 1370; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1364; + this.state = 1371; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -6822,9 +6857,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1368; + this.state = 1375; this.match(FlinkSqlParser.KW_WHERE); - this.state = 1369; + this.state = 1376; this.booleanExpression(0); } } @@ -6850,29 +6885,29 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1371; - this.match(FlinkSqlParser.KW_GROUP); - this.state = 1372; - this.match(FlinkSqlParser.KW_BY); - this.state = 1373; - this.groupItemDefinition(); this.state = 1378; + this.match(FlinkSqlParser.KW_GROUP); + this.state = 1379; + this.match(FlinkSqlParser.KW_BY); + this.state = 1380; + this.groupItemDefinition(); + this.state = 1385; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 151, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1374; + this.state = 1381; this.match(FlinkSqlParser.COMMA); - this.state = 1375; + this.state = 1382; this.groupItemDefinition(); } } } - this.state = 1380; + this.state = 1387; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 148, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 151, this._ctx); } } } @@ -6896,114 +6931,114 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 208, FlinkSqlParser.RULE_groupItemDefinition); let _la: number; try { - this.state = 1420; + this.state = 1427; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 152, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 155, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1381; + this.state = 1388; this.expression(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1382; + this.state = 1389; this.groupWindowFunction(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1383; + this.state = 1390; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1384; + this.state = 1391; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1385; + this.state = 1392; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1386; + this.state = 1393; this.expression(); - this.state = 1391; + this.state = 1398; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1387; + this.state = 1394; this.match(FlinkSqlParser.COMMA); - this.state = 1388; + this.state = 1395; this.expression(); } } - this.state = 1393; + this.state = 1400; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1394; + this.state = 1401; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1396; - this.groupingSetsNotaionName(); - this.state = 1397; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1398; - this.expression(); this.state = 1403; + this.groupingSetsNotaionName(); + this.state = 1404; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1405; + this.expression(); + this.state = 1410; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1399; + this.state = 1406; this.match(FlinkSqlParser.COMMA); - this.state = 1400; + this.state = 1407; this.expression(); } } - this.state = 1405; + this.state = 1412; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1406; + this.state = 1413; this.match(FlinkSqlParser.RR_BRACKET); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1408; - this.groupingSets(); - this.state = 1409; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1410; - this.groupItemDefinition(); this.state = 1415; + this.groupingSets(); + this.state = 1416; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1417; + this.groupItemDefinition(); + this.state = 1422; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1411; + this.state = 1418; this.match(FlinkSqlParser.COMMA); - this.state = 1412; + this.state = 1419; this.groupItemDefinition(); } } - this.state = 1417; + this.state = 1424; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1418; + this.state = 1425; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -7030,9 +7065,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1422; + this.state = 1429; this.match(FlinkSqlParser.KW_GROUPING); - this.state = 1423; + this.state = 1430; this.match(FlinkSqlParser.KW_SETS); } } @@ -7058,7 +7093,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1425; + this.state = 1432; _la = this._input.LA(1); if(!(_la===218 || _la===321)) { this._errHandler.recoverInline(this); @@ -7090,17 +7125,17 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1427; + this.state = 1434; this.groupWindowFunctionName(); - this.state = 1428; + this.state = 1435; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1429; + this.state = 1436; this.timeAttrColumn(); - this.state = 1430; + this.state = 1437; this.match(FlinkSqlParser.COMMA); - this.state = 1431; + this.state = 1438; this.timeIntervalExpression(); - this.state = 1432; + this.state = 1439; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -7126,7 +7161,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1434; + this.state = 1441; _la = this._input.LA(1); if(!(_la===56 || _la===135 || _la===155)) { this._errHandler.recoverInline(this); @@ -7158,7 +7193,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1436; + this.state = 1443; this.uid(); } } @@ -7183,9 +7218,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1438; + this.state = 1445; this.match(FlinkSqlParser.KW_HAVING); - this.state = 1439; + this.state = 1446; this.booleanExpression(0); } } @@ -7211,27 +7246,27 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1441; + this.state = 1448; this.match(FlinkSqlParser.KW_WINDOW); - this.state = 1442; + this.state = 1449; this.namedWindow(); - this.state = 1447; + this.state = 1454; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 156, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1443; + this.state = 1450; this.match(FlinkSqlParser.COMMA); - this.state = 1444; + this.state = 1451; this.namedWindow(); } } } - this.state = 1449; + this.state = 1456; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 153, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 156, this._ctx); } } } @@ -7256,11 +7291,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1450; + this.state = 1457; localctx._name = this.errorCapturingIdentifier(); - this.state = 1451; + this.state = 1458; this.match(FlinkSqlParser.KW_AS); - this.state = 1452; + this.state = 1459; this.windowSpec(); } } @@ -7286,49 +7321,49 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1455; + this.state = 1462; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0) || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 19) !== 0)) { { - this.state = 1454; + this.state = 1461; localctx._name = this.errorCapturingIdentifier(); } } - this.state = 1457; + this.state = 1464; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1459; + this.state = 1466; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===307) { { - this.state = 1458; + this.state = 1465; this.partitionByClause(); } } - this.state = 1462; + this.state = 1469; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===302) { { - this.state = 1461; + this.state = 1468; this.orderByCaluse(); } } - this.state = 1465; + this.state = 1472; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===314 || _la===323) { { - this.state = 1464; + this.state = 1471; this.windowFrame(); } } - this.state = 1467; + this.state = 1474; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -7354,90 +7389,90 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1469; + this.state = 1476; this.match(FlinkSqlParser.KW_MATCH_RECOGNIZE); - this.state = 1470; + this.state = 1477; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1472; + this.state = 1479; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===307) { { - this.state = 1471; + this.state = 1478; this.partitionByClause(); } } - this.state = 1475; + this.state = 1482; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===302) { { - this.state = 1474; + this.state = 1481; this.orderByCaluse(); } } - this.state = 1478; + this.state = 1485; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===281) { { - this.state = 1477; + this.state = 1484; this.measuresClause(); } } - this.state = 1481; + this.state = 1488; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===176 || _la===300) { { - this.state = 1480; + this.state = 1487; this.outputMode(); } } - this.state = 1484; + this.state = 1491; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===6) { { - this.state = 1483; + this.state = 1490; this.afterMatchStrategy(); } } - this.state = 1487; + this.state = 1494; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===308) { { - this.state = 1486; + this.state = 1493; this.patternDefination(); } } - this.state = 1489; + this.state = 1496; this.patternVariablesDefination(); - this.state = 1490; + this.state = 1497; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1495; + this.state = 1502; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 165, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 168, this._ctx) ) { case 1: { - this.state = 1492; + this.state = 1499; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===183) { { - this.state = 1491; + this.state = 1498; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1494; + this.state = 1501; this.identifier(); } break; @@ -7466,29 +7501,29 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1497; - this.match(FlinkSqlParser.KW_ORDER); - this.state = 1498; - this.match(FlinkSqlParser.KW_BY); - this.state = 1499; - this.orderItemDefition(); this.state = 1504; + this.match(FlinkSqlParser.KW_ORDER); + this.state = 1505; + this.match(FlinkSqlParser.KW_BY); + this.state = 1506; + this.orderItemDefition(); + this.state = 1511; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 169, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { - this.state = 1500; + this.state = 1507; this.match(FlinkSqlParser.COMMA); - this.state = 1501; + this.state = 1508; this.orderItemDefition(); } } } - this.state = 1506; + this.state = 1513; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 166, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 169, this._ctx); } } } @@ -7514,14 +7549,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1507; + this.state = 1514; this.expression(); - this.state = 1509; + this.state = 1516; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 167, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 170, this._ctx) ) { case 1: { - this.state = 1508; + this.state = 1515; localctx._ordering = this._input.LT(1); _la = this._input.LA(1); if(!(_la===8 || _la===30)) { @@ -7534,14 +7569,14 @@ export default class FlinkSqlParser extends Parser { } break; } - this.state = 1513; + this.state = 1520; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 168, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 171, this._ctx) ) { case 1: { - this.state = 1511; + this.state = 1518; this.match(FlinkSqlParser.KW_NULLS); - this.state = 1512; + this.state = 1519; localctx._nullOrder = this._input.LT(1); _la = this._input.LA(1); if(!(_la===44 || _la===72)) { @@ -7577,20 +7612,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1515; + this.state = 1522; this.match(FlinkSqlParser.KW_LIMIT); - this.state = 1518; + this.state = 1525; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 169, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 172, this._ctx) ) { case 1: { - this.state = 1516; + this.state = 1523; this.match(FlinkSqlParser.KW_ALL); } break; case 2: { - this.state = 1517; + this.state = 1524; localctx._limit = this.expression(); } break; @@ -7619,25 +7654,25 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1520; - this.match(FlinkSqlParser.KW_PARTITION); - this.state = 1521; - this.match(FlinkSqlParser.KW_BY); - this.state = 1522; - this.expression(); this.state = 1527; + this.match(FlinkSqlParser.KW_PARTITION); + this.state = 1528; + this.match(FlinkSqlParser.KW_BY); + this.state = 1529; + this.expression(); + this.state = 1534; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1523; + this.state = 1530; this.match(FlinkSqlParser.COMMA); - this.state = 1524; + this.state = 1531; this.expression(); } } - this.state = 1529; + this.state = 1536; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7662,14 +7697,14 @@ export default class FlinkSqlParser extends Parser { let localctx: QuantifiersContext = new QuantifiersContext(this, this._ctx, this.state); this.enterRule(localctx, 238, FlinkSqlParser.RULE_quantifiers); try { - this.state = 1546; + this.state = 1553; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 171, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 174, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { { - this.state = 1530; + this.state = 1537; this.match(FlinkSqlParser.ASTERISK_SIGN); } } @@ -7678,7 +7713,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 2); { { - this.state = 1531; + this.state = 1538; this.match(FlinkSqlParser.ADD_SIGN); } } @@ -7687,7 +7722,7 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 3); { { - this.state = 1532; + this.state = 1539; this.match(FlinkSqlParser.QUESTION_MARK_SIGN); } } @@ -7696,15 +7731,15 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 4); { { - this.state = 1533; + this.state = 1540; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1534; + this.state = 1541; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1535; + this.state = 1542; this.match(FlinkSqlParser.COMMA); - this.state = 1536; + this.state = 1543; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1537; + this.state = 1544; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7713,13 +7748,13 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 5); { { - this.state = 1538; + this.state = 1545; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1539; + this.state = 1546; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1540; + this.state = 1547; this.match(FlinkSqlParser.COMMA); - this.state = 1541; + this.state = 1548; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7728,13 +7763,13 @@ export default class FlinkSqlParser extends Parser { this.enterOuterAlt(localctx, 6); { { - this.state = 1542; + this.state = 1549; this.match(FlinkSqlParser.LB_BRACKET); - this.state = 1543; + this.state = 1550; this.match(FlinkSqlParser.COMMA); - this.state = 1544; + this.state = 1551; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1545; + this.state = 1552; this.match(FlinkSqlParser.RB_BRACKET); } } @@ -7763,23 +7798,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1548; + this.state = 1555; this.match(FlinkSqlParser.KW_MEASURES); - this.state = 1549; + this.state = 1556; this.projectItemDefinition(); - this.state = 1554; + this.state = 1561; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1550; + this.state = 1557; this.match(FlinkSqlParser.COMMA); - this.state = 1551; + this.state = 1558; this.projectItemDefinition(); } } - this.state = 1556; + this.state = 1563; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -7807,32 +7842,32 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1557; + this.state = 1564; this.match(FlinkSqlParser.KW_PATTERN); - this.state = 1558; + this.state = 1565; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1560; + this.state = 1567; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1559; + this.state = 1566; this.patternVariable(); } } - this.state = 1562; + this.state = 1569; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===398 || _la===401); - this.state = 1564; + this.state = 1571; this.match(FlinkSqlParser.RR_BRACKET); - this.state = 1566; + this.state = 1573; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===362) { { - this.state = 1565; + this.state = 1572; this.withinClause(); } } @@ -7861,14 +7896,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1568; + this.state = 1575; this.unquotedIdentifier(); - this.state = 1570; + this.state = 1577; this._errHandler.sync(this); _la = this._input.LA(1); if (((((_la - 378)) & ~0x1F) === 0 && ((1 << (_la - 378)) & 135681) !== 0)) { { - this.state = 1569; + this.state = 1576; this.quantifiers(); } } @@ -7894,32 +7929,32 @@ export default class FlinkSqlParser extends Parser { let localctx: OutputModeContext = new OutputModeContext(this, this._ctx, this.state); this.enterRule(localctx, 246, FlinkSqlParser.RULE_outputMode); try { - this.state = 1580; + this.state = 1587; this._errHandler.sync(this); switch (this._input.LA(1)) { case 176: this.enterOuterAlt(localctx, 1); { - this.state = 1572; + this.state = 1579; this.match(FlinkSqlParser.KW_ALL); - this.state = 1573; + this.state = 1580; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1574; + this.state = 1581; this.match(FlinkSqlParser.KW_PER); - this.state = 1575; + this.state = 1582; this.match(FlinkSqlParser.KW_MATCH); } break; case 300: this.enterOuterAlt(localctx, 2); { - this.state = 1576; + this.state = 1583; this.match(FlinkSqlParser.KW_ONE); - this.state = 1577; + this.state = 1584; this.match(FlinkSqlParser.KW_ROW); - this.state = 1578; + this.state = 1585; this.match(FlinkSqlParser.KW_PER); - this.state = 1579; + this.state = 1586; this.match(FlinkSqlParser.KW_MATCH); } break; @@ -7946,74 +7981,74 @@ export default class FlinkSqlParser extends Parser { let localctx: AfterMatchStrategyContext = new AfterMatchStrategyContext(this, this._ctx, this.state); this.enterRule(localctx, 248, FlinkSqlParser.RULE_afterMatchStrategy); try { - this.state = 1606; + this.state = 1613; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 177, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 180, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1582; + this.state = 1589; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1583; + this.state = 1590; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1584; + this.state = 1591; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1585; + this.state = 1592; this.match(FlinkSqlParser.KW_PAST); - this.state = 1586; + this.state = 1593; this.match(FlinkSqlParser.KW_LAST); - this.state = 1587; + this.state = 1594; this.match(FlinkSqlParser.KW_ROW); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1588; + this.state = 1595; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1589; + this.state = 1596; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1590; + this.state = 1597; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1591; + this.state = 1598; this.match(FlinkSqlParser.KW_TO); - this.state = 1592; + this.state = 1599; this.match(FlinkSqlParser.KW_NEXT); - this.state = 1593; + this.state = 1600; this.match(FlinkSqlParser.KW_ROW); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1594; + this.state = 1601; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1595; + this.state = 1602; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1596; + this.state = 1603; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1597; + this.state = 1604; this.match(FlinkSqlParser.KW_TO); - this.state = 1598; + this.state = 1605; this.match(FlinkSqlParser.KW_LAST); - this.state = 1599; + this.state = 1606; this.unquotedIdentifier(); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1600; + this.state = 1607; this.match(FlinkSqlParser.KW_AFTER); - this.state = 1601; + this.state = 1608; this.match(FlinkSqlParser.KW_MATCH); - this.state = 1602; + this.state = 1609; this.match(FlinkSqlParser.KW_SKIP); - this.state = 1603; + this.state = 1610; this.match(FlinkSqlParser.KW_TO); - this.state = 1604; + this.state = 1611; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1605; + this.state = 1612; this.unquotedIdentifier(); } break; @@ -8041,23 +8076,23 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1608; + this.state = 1615; this.match(FlinkSqlParser.KW_DEFINE); - this.state = 1609; + this.state = 1616; this.projectItemDefinition(); - this.state = 1614; + this.state = 1621; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1610; + this.state = 1617; this.match(FlinkSqlParser.COMMA); - this.state = 1611; + this.state = 1618; this.projectItemDefinition(); } } - this.state = 1616; + this.state = 1623; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -8082,32 +8117,32 @@ export default class FlinkSqlParser extends Parser { let localctx: WindowFrameContext = new WindowFrameContext(this, this._ctx, this.state); this.enterRule(localctx, 252, FlinkSqlParser.RULE_windowFrame); try { - this.state = 1626; + this.state = 1633; this._errHandler.sync(this); switch (this._input.LA(1)) { case 314: this.enterOuterAlt(localctx, 1); { - this.state = 1617; + this.state = 1624; this.match(FlinkSqlParser.KW_RANGE); - this.state = 1618; + this.state = 1625; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1619; + this.state = 1626; this.timeIntervalExpression(); - this.state = 1620; + this.state = 1627; this.frameBound(); } break; case 323: this.enterOuterAlt(localctx, 2); { - this.state = 1622; + this.state = 1629; this.match(FlinkSqlParser.KW_ROWS); - this.state = 1623; + this.state = 1630; this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1624; + this.state = 1631; this.match(FlinkSqlParser.DIG_LITERAL); - this.state = 1625; + this.state = 1632; this.frameBound(); } break; @@ -8136,13 +8171,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1628; + this.state = 1635; this.match(FlinkSqlParser.KW_PRECEDING); - this.state = 1629; + this.state = 1636; this.match(FlinkSqlParser.KW_AND); - this.state = 1630; + this.state = 1637; this.match(FlinkSqlParser.KW_CURRENT); - this.state = 1631; + this.state = 1638; this.match(FlinkSqlParser.KW_ROW); } } @@ -8167,9 +8202,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1633; + this.state = 1640; this.match(FlinkSqlParser.KW_WITHIN); - this.state = 1634; + this.state = 1641; this.timeIntervalExpression(); } } @@ -8194,7 +8229,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1636; + this.state = 1643; this.booleanExpression(0); } } @@ -8231,18 +8266,18 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1650; + this.state = 1657; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 181, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 184, this._ctx) ) { case 1: { localctx = new LogicalNotContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1639; + this.state = 1646; this.match(FlinkSqlParser.KW_NOT); - this.state = 1640; + this.state = 1647; this.booleanExpression(5); } break; @@ -8251,13 +8286,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ExistsContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1641; + this.state = 1648; this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1642; + this.state = 1649; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1643; + this.state = 1650; this.queryStatement(0); - this.state = 1644; + this.state = 1651; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8266,14 +8301,14 @@ export default class FlinkSqlParser extends Parser { localctx = new PredicatedContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1646; + this.state = 1653; this.valueExpression(0); - this.state = 1648; + this.state = 1655; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 180, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 183, this._ctx) ) { case 1: { - this.state = 1647; + this.state = 1654; this.predicate(); } break; @@ -8282,9 +8317,9 @@ export default class FlinkSqlParser extends Parser { break; } this._ctx.stop = this._input.LT(-1); - this.state = 1660; + this.state = 1667; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 186, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -8292,21 +8327,21 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1658; + this.state = 1665; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 182, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 185, this._ctx) ) { case 1: { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1652; + this.state = 1659; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1653; + this.state = 1660; (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_AND); - this.state = 1654; + this.state = 1661; (localctx as LogicalBinaryContext)._right = this.booleanExpression(3); } break; @@ -8315,22 +8350,22 @@ export default class FlinkSqlParser extends Parser { localctx = new LogicalBinaryContext(this, new BooleanExpressionContext(this, _parentctx, _parentState)); (localctx as LogicalBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_booleanExpression); - this.state = 1655; + this.state = 1662; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1656; + this.state = 1663; (localctx as LogicalBinaryContext)._operator = this.match(FlinkSqlParser.KW_OR); - this.state = 1657; + this.state = 1664; (localctx as LogicalBinaryContext)._right = this.booleanExpression(2); } break; } } } - this.state = 1662; + this.state = 1669; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 183, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 186, this._ctx); } } } @@ -8354,142 +8389,142 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 262, FlinkSqlParser.RULE_predicate); let _la: number; try { - this.state = 1746; + this.state = 1753; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 196, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 199, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1664; + this.state = 1671; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1663; + this.state = 1670; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1666; + this.state = 1673; localctx._kind = this.match(FlinkSqlParser.KW_BETWEEN); - this.state = 1667; + this.state = 1674; localctx._lower = this.valueExpression(0); - this.state = 1668; + this.state = 1675; this.match(FlinkSqlParser.KW_AND); - this.state = 1669; + this.state = 1676; localctx._upper = this.valueExpression(0); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1672; + this.state = 1679; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1671; + this.state = 1678; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1674; - localctx._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1675; - this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1676; - this.expression(); this.state = 1681; + localctx._kind = this.match(FlinkSqlParser.KW_IN); + this.state = 1682; + this.match(FlinkSqlParser.LR_BRACKET); + this.state = 1683; + this.expression(); + this.state = 1688; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1677; + this.state = 1684; this.match(FlinkSqlParser.COMMA); - this.state = 1678; + this.state = 1685; this.expression(); } } - this.state = 1683; + this.state = 1690; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1684; + this.state = 1691; this.match(FlinkSqlParser.RR_BRACKET); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1687; + this.state = 1694; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1686; + this.state = 1693; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1689; + this.state = 1696; localctx._kind = this.match(FlinkSqlParser.KW_IN); - this.state = 1690; + this.state = 1697; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1691; + this.state = 1698; this.queryStatement(0); - this.state = 1692; + this.state = 1699; this.match(FlinkSqlParser.RR_BRACKET); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 1694; + this.state = 1701; localctx._kind = this.match(FlinkSqlParser.KW_EXISTS); - this.state = 1695; + this.state = 1702; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1696; + this.state = 1703; this.queryStatement(0); - this.state = 1697; + this.state = 1704; this.match(FlinkSqlParser.RR_BRACKET); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 1700; + this.state = 1707; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1699; + this.state = 1706; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1702; + this.state = 1709; localctx._kind = this.match(FlinkSqlParser.KW_RLIKE); - this.state = 1703; + this.state = 1710; localctx._pattern = this.valueExpression(0); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 1705; + this.state = 1712; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1704; + this.state = 1711; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1707; + this.state = 1714; localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1708; + this.state = 1715; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); if(!(_la===176 || _la===180)) { @@ -8499,40 +8534,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1722; + this.state = 1729; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 191, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 194, this._ctx) ) { case 1: { - this.state = 1709; + this.state = 1716; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1710; + this.state = 1717; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1711; + this.state = 1718; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1712; + this.state = 1719; this.expression(); - this.state = 1717; + this.state = 1724; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1713; + this.state = 1720; this.match(FlinkSqlParser.COMMA); - this.state = 1714; + this.state = 1721; this.expression(); } } - this.state = 1719; + this.state = 1726; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1720; + this.state = 1727; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8542,57 +8577,57 @@ export default class FlinkSqlParser extends Parser { case 7: this.enterOuterAlt(localctx, 7); { - this.state = 1725; + this.state = 1732; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1724; + this.state = 1731; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1727; + this.state = 1734; localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1728; + this.state = 1735; localctx._pattern = this.valueExpression(0); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 1729; + this.state = 1736; this.match(FlinkSqlParser.KW_IS); - this.state = 1731; + this.state = 1738; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1730; + this.state = 1737; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1733; + this.state = 1740; localctx._kind = this.match(FlinkSqlParser.KW_NULL); } break; case 9: this.enterOuterAlt(localctx, 9); { - this.state = 1734; + this.state = 1741; this.match(FlinkSqlParser.KW_IS); - this.state = 1736; + this.state = 1743; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1735; + this.state = 1742; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1738; + this.state = 1745; localctx._kind = this._input.LT(1); _la = this._input.LA(1); if(!(_la===245 || _la===344)) { @@ -8607,23 +8642,23 @@ export default class FlinkSqlParser extends Parser { case 10: this.enterOuterAlt(localctx, 10); { - this.state = 1739; + this.state = 1746; this.match(FlinkSqlParser.KW_IS); - this.state = 1741; + this.state = 1748; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1740; + this.state = 1747; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1743; + this.state = 1750; localctx._kind = this.match(FlinkSqlParser.KW_DISTINCT); - this.state = 1744; + this.state = 1751; this.match(FlinkSqlParser.KW_FROM); - this.state = 1745; + this.state = 1752; localctx._right = this.valueExpression(0); } break; @@ -8649,25 +8684,25 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 264, FlinkSqlParser.RULE_likePredicate); let _la: number; try { - this.state = 1773; + this.state = 1780; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 201, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 204, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1749; + this.state = 1756; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1748; + this.state = 1755; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1751; + this.state = 1758; localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1752; + this.state = 1759; localctx._quantifier = this._input.LT(1); _la = this._input.LA(1); if(!(_la===176 || _la===180)) { @@ -8677,40 +8712,40 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1766; + this.state = 1773; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 199, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 202, this._ctx) ) { case 1: { - this.state = 1753; + this.state = 1760; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1754; + this.state = 1761; this.match(FlinkSqlParser.RR_BRACKET); } break; case 2: { - this.state = 1755; + this.state = 1762; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1756; + this.state = 1763; this.expression(); - this.state = 1761; + this.state = 1768; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1757; + this.state = 1764; this.match(FlinkSqlParser.COMMA); - this.state = 1758; + this.state = 1765; this.expression(); } } - this.state = 1763; + this.state = 1770; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 1764; + this.state = 1771; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -8720,19 +8755,19 @@ export default class FlinkSqlParser extends Parser { case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1769; + this.state = 1776; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 1768; + this.state = 1775; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 1771; + this.state = 1778; localctx._kind = this.match(FlinkSqlParser.KW_LIKE); - this.state = 1772; + this.state = 1779; localctx._pattern = this.valueExpression(0); } break; @@ -8772,16 +8807,16 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1779; + this.state = 1786; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 202, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 205, this._ctx) ) { case 1: { localctx = new ValueExpressionDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1776; + this.state = 1783; this.primaryExpression(0); } break; @@ -8790,7 +8825,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticUnaryContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1777; + this.state = 1784; (localctx as ArithmeticUnaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 369)) & ~0x1F) === 0 && ((1 << (_la - 369)) & 3145729) !== 0))) { @@ -8800,15 +8835,15 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1778; + this.state = 1785; this.valueExpression(7); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1802; + this.state = 1809; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 207, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -8816,19 +8851,19 @@ export default class FlinkSqlParser extends Parser { } _prevctx = localctx; { - this.state = 1800; + this.state = 1807; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 203, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 206, this._ctx) ) { case 1: { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1781; + this.state = 1788; if (!(this.precpred(this._ctx, 6))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } - this.state = 1782; + this.state = 1789; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(_la===32 || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 145) !== 0))) { @@ -8838,7 +8873,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1783; + this.state = 1790; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(7); } break; @@ -8847,11 +8882,11 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1784; + this.state = 1791; if (!(this.precpred(this._ctx, 5))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 5)"); } - this.state = 1785; + this.state = 1792; (localctx as ArithmeticBinaryContext)._operator = this._input.LT(1); _la = this._input.LA(1); if(!(((((_la - 389)) & ~0x1F) === 0 && ((1 << (_la - 389)) & 11) !== 0))) { @@ -8861,7 +8896,7 @@ export default class FlinkSqlParser extends Parser { this._errHandler.reportMatch(this); this.consume(); } - this.state = 1786; + this.state = 1793; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(6); } break; @@ -8870,13 +8905,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1787; + this.state = 1794; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1788; + this.state = 1795; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 1789; + this.state = 1796; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(5); } break; @@ -8885,13 +8920,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1790; + this.state = 1797; if (!(this.precpred(this._ctx, 3))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 3)"); } - this.state = 1791; + this.state = 1798; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_XOR_OP); - this.state = 1792; + this.state = 1799; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(4); } break; @@ -8900,13 +8935,13 @@ export default class FlinkSqlParser extends Parser { localctx = new ArithmeticBinaryContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ArithmeticBinaryContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1793; + this.state = 1800; if (!(this.precpred(this._ctx, 2))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 2)"); } - this.state = 1794; + this.state = 1801; (localctx as ArithmeticBinaryContext)._operator = this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 1795; + this.state = 1802; (localctx as ArithmeticBinaryContext)._right = this.valueExpression(3); } break; @@ -8915,22 +8950,22 @@ export default class FlinkSqlParser extends Parser { localctx = new ComparisonContext(this, new ValueExpressionContext(this, _parentctx, _parentState)); (localctx as ComparisonContext)._left = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_valueExpression); - this.state = 1796; + this.state = 1803; if (!(this.precpred(this._ctx, 1))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 1)"); } - this.state = 1797; + this.state = 1804; this.comparisonOperator(); - this.state = 1798; + this.state = 1805; (localctx as ComparisonContext)._right = this.valueExpression(2); } break; } } } - this.state = 1804; + this.state = 1811; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 204, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 207, this._ctx); } } } @@ -8968,44 +9003,44 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1896; + this.state = 1903; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 214, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) { case 1: { localctx = new SearchedCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1806; + this.state = 1813; this.match(FlinkSqlParser.KW_CASE); - this.state = 1808; + this.state = 1815; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1807; + this.state = 1814; this.whenClause(); } } - this.state = 1810; + this.state = 1817; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===358); - this.state = 1814; + this.state = 1821; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===236) { { - this.state = 1812; + this.state = 1819; this.match(FlinkSqlParser.KW_ELSE); - this.state = 1813; + this.state = 1820; (localctx as SearchedCaseContext)._elseExpression = this.expression(); } } - this.state = 1816; + this.state = 1823; this.match(FlinkSqlParser.KW_END); } break; @@ -9014,37 +9049,37 @@ export default class FlinkSqlParser extends Parser { localctx = new SimpleCaseContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1818; + this.state = 1825; this.match(FlinkSqlParser.KW_CASE); - this.state = 1819; + this.state = 1826; (localctx as SimpleCaseContext)._value = this.expression(); - this.state = 1821; + this.state = 1828; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1820; + this.state = 1827; this.whenClause(); } } - this.state = 1823; + this.state = 1830; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===358); - this.state = 1827; + this.state = 1834; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===236) { { - this.state = 1825; + this.state = 1832; this.match(FlinkSqlParser.KW_ELSE); - this.state = 1826; + this.state = 1833; (localctx as SimpleCaseContext)._elseExpression = this.expression(); } } - this.state = 1829; + this.state = 1836; this.match(FlinkSqlParser.KW_END); } break; @@ -9053,17 +9088,17 @@ export default class FlinkSqlParser extends Parser { localctx = new CastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1831; + this.state = 1838; this.match(FlinkSqlParser.KW_CAST); - this.state = 1832; + this.state = 1839; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1833; + this.state = 1840; this.expression(); - this.state = 1834; + this.state = 1841; this.match(FlinkSqlParser.KW_AS); - this.state = 1835; + this.state = 1842; this.columnType(); - this.state = 1836; + this.state = 1843; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9072,25 +9107,25 @@ export default class FlinkSqlParser extends Parser { localctx = new FirstContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1838; + this.state = 1845; this.match(FlinkSqlParser.KW_FIRST); - this.state = 1839; + this.state = 1846; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1840; + this.state = 1847; this.expression(); - this.state = 1843; + this.state = 1850; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===59) { { - this.state = 1841; + this.state = 1848; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1842; + this.state = 1849; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1845; + this.state = 1852; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9099,25 +9134,25 @@ export default class FlinkSqlParser extends Parser { localctx = new LastContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1847; + this.state = 1854; this.match(FlinkSqlParser.KW_LAST); - this.state = 1848; + this.state = 1855; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1849; + this.state = 1856; this.expression(); - this.state = 1852; + this.state = 1859; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===59) { { - this.state = 1850; + this.state = 1857; this.match(FlinkSqlParser.KW_IGNORE); - this.state = 1851; + this.state = 1858; this.match(FlinkSqlParser.KW_NULLS); } } - this.state = 1854; + this.state = 1861; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9126,17 +9161,17 @@ export default class FlinkSqlParser extends Parser { localctx = new PositionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1856; + this.state = 1863; this.match(FlinkSqlParser.KW_POSITION); - this.state = 1857; + this.state = 1864; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1858; + this.state = 1865; (localctx as PositionContext)._substr = this.valueExpression(0); - this.state = 1859; + this.state = 1866; this.match(FlinkSqlParser.KW_IN); - this.state = 1860; + this.state = 1867; (localctx as PositionContext)._str = this.valueExpression(0); - this.state = 1861; + this.state = 1868; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9145,7 +9180,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ConstantDefaultContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1863; + this.state = 1870; this.constant(); } break; @@ -9154,7 +9189,7 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1864; + this.state = 1871; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9163,11 +9198,11 @@ export default class FlinkSqlParser extends Parser { localctx = new StarContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1865; + this.state = 1872; this.uid(); - this.state = 1866; + this.state = 1873; this.match(FlinkSqlParser.DOT); - this.state = 1867; + this.state = 1874; this.match(FlinkSqlParser.ASTERISK_SIGN); } break; @@ -9176,11 +9211,11 @@ export default class FlinkSqlParser extends Parser { localctx = new SubqueryExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1869; + this.state = 1876; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1870; + this.state = 1877; this.queryStatement(0); - this.state = 1871; + this.state = 1878; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9189,47 +9224,47 @@ export default class FlinkSqlParser extends Parser { localctx = new FunctionCallContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1873; + this.state = 1880; this.functionName(); - this.state = 1874; + this.state = 1881; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1886; + this.state = 1893; this._errHandler.sync(this); _la = this._input.LA(1); if ((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 4294967295) !== 0) || ((((_la - 192)) & ~0x1F) === 0 && ((1 << (_la - 192)) & 4294967295) !== 0) || ((((_la - 224)) & ~0x1F) === 0 && ((1 << (_la - 224)) & 4294967295) !== 0) || ((((_la - 256)) & ~0x1F) === 0 && ((1 << (_la - 256)) & 4294967295) !== 0) || ((((_la - 288)) & ~0x1F) === 0 && ((1 << (_la - 288)) & 4294967295) !== 0) || ((((_la - 320)) & ~0x1F) === 0 && ((1 << (_la - 320)) & 4294967295) !== 0) || ((((_la - 352)) & ~0x1F) === 0 && ((1 << (_la - 352)) & 16916479) !== 0) || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 31757) !== 0)) { { - this.state = 1876; + this.state = 1883; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 211, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 214, this._ctx) ) { case 1: { - this.state = 1875; + this.state = 1882; this.setQuantifier(); } break; } - this.state = 1878; + this.state = 1885; this.expression(); - this.state = 1883; + this.state = 1890; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1879; + this.state = 1886; this.match(FlinkSqlParser.COMMA); - this.state = 1880; + this.state = 1887; this.expression(); } } - this.state = 1885; + this.state = 1892; this._errHandler.sync(this); _la = this._input.LA(1); } } } - this.state = 1888; + this.state = 1895; this.match(FlinkSqlParser.RR_BRACKET); } break; @@ -9238,7 +9273,7 @@ export default class FlinkSqlParser extends Parser { localctx = new ColumnReferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1890; + this.state = 1897; this.identifier(); } break; @@ -9247,7 +9282,7 @@ export default class FlinkSqlParser extends Parser { localctx = new DereferenceContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1891; + this.state = 1898; this.dereferenceDefinition(); } break; @@ -9256,19 +9291,19 @@ export default class FlinkSqlParser extends Parser { localctx = new ParenthesizedExpressionContext(this, localctx); this._ctx = localctx; _prevctx = localctx; - this.state = 1892; + this.state = 1899; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1893; + this.state = 1900; this.expression(); - this.state = 1894; + this.state = 1901; this.match(FlinkSqlParser.RR_BRACKET); } break; } this._ctx.stop = this._input.LT(-1); - this.state = 1905; + this.state = 1912; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 218, this._ctx); while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { @@ -9280,22 +9315,22 @@ export default class FlinkSqlParser extends Parser { localctx = new SubscriptContext(this, new PrimaryExpressionContext(this, _parentctx, _parentState)); (localctx as SubscriptContext)._value = _prevctx; this.pushNewRecursionContext(localctx, _startState, FlinkSqlParser.RULE_primaryExpression); - this.state = 1898; + this.state = 1905; if (!(this.precpred(this._ctx, 4))) { throw this.createFailedPredicateException("this.precpred(this._ctx, 4)"); } - this.state = 1899; + this.state = 1906; this.match(FlinkSqlParser.LS_BRACKET); - this.state = 1900; + this.state = 1907; (localctx as SubscriptContext)._index = this.valueExpression(0); - this.state = 1901; + this.state = 1908; this.match(FlinkSqlParser.RS_BRACKET); } } } - this.state = 1907; + this.state = 1914; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 215, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 218, this._ctx); } } } @@ -9318,27 +9353,27 @@ export default class FlinkSqlParser extends Parser { let localctx: FunctionNameContext = new FunctionNameContext(this, this._ctx, this.state); this.enterRule(localctx, 270, FlinkSqlParser.RULE_functionName); try { - this.state = 1911; + this.state = 1918; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 216, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1908; + this.state = 1915; this.reservedKeywords(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1909; + this.state = 1916; this.nonReservedKeywords(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 1910; + this.state = 1917; this.uid(); } break; @@ -9365,7 +9400,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1913; + this.state = 1920; this.uid(); } } @@ -9390,7 +9425,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1915; + this.state = 1922; this.identifier(); } } @@ -9413,20 +9448,20 @@ export default class FlinkSqlParser extends Parser { let localctx: QualifiedNameContext = new QualifiedNameContext(this, this._ctx, this.state); this.enterRule(localctx, 276, FlinkSqlParser.RULE_qualifiedName); try { - this.state = 1919; + this.state = 1926; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 217, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 220, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 1917; + this.state = 1924; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 1918; + this.state = 1925; this.dereferenceDefinition(); } break; @@ -9453,20 +9488,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1921; + this.state = 1928; this.match(FlinkSqlParser.KW_INTERVAL); - this.state = 1924; + this.state = 1931; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 218, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 221, this._ctx) ) { case 1: { - this.state = 1922; + this.state = 1929; this.errorCapturingMultiUnitsInterval(); } break; case 2: { - this.state = 1923; + this.state = 1930; this.errorCapturingUnitToUnitInterval(); } break; @@ -9494,14 +9529,14 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1926; + this.state = 1933; this.multiUnitsInterval(); - this.state = 1928; + this.state = 1935; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 219, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 222, this._ctx) ) { case 1: { - this.state = 1927; + this.state = 1934; this.unitToUnitInterval(); } break; @@ -9530,7 +9565,7 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 1933; + this.state = 1940; this._errHandler.sync(this); _alt = 1; do { @@ -9538,9 +9573,9 @@ export default class FlinkSqlParser extends Parser { case 1: { { - this.state = 1930; + this.state = 1937; this.intervalValue(); - this.state = 1931; + this.state = 1938; this.intervalTimeUnit(); } } @@ -9548,9 +9583,9 @@ export default class FlinkSqlParser extends Parser { default: throw new NoViableAltException(this); } - this.state = 1935; + this.state = 1942; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 220, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 223, this._ctx); } while (_alt !== 2 && _alt !== ATN.INVALID_ALT_NUMBER); } } @@ -9575,20 +9610,20 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1937; + this.state = 1944; localctx._body = this.unitToUnitInterval(); - this.state = 1940; + this.state = 1947; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 221, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 224, this._ctx) ) { case 1: { - this.state = 1938; + this.state = 1945; localctx._error1 = this.multiUnitsInterval(); } break; case 2: { - this.state = 1939; + this.state = 1946; localctx._error2 = this.unitToUnitInterval(); } break; @@ -9616,13 +9651,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1942; + this.state = 1949; localctx._value = this.intervalValue(); - this.state = 1943; + this.state = 1950; localctx._from_ = this.intervalTimeUnit(); - this.state = 1944; + this.state = 1951; this.match(FlinkSqlParser.KW_TO); - this.state = 1945; + this.state = 1952; localctx._to = this.intervalTimeUnit(); } } @@ -9646,7 +9681,7 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 288, FlinkSqlParser.RULE_intervalValue); let _la: number; try { - this.state = 1952; + this.state = 1959; this._errHandler.sync(this); switch (this._input.LA(1)) { case 389: @@ -9655,12 +9690,12 @@ export default class FlinkSqlParser extends Parser { case 399: this.enterOuterAlt(localctx, 1); { - this.state = 1948; + this.state = 1955; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===389 || _la===390) { { - this.state = 1947; + this.state = 1954; _la = this._input.LA(1); if(!(_la===389 || _la===390)) { this._errHandler.recoverInline(this); @@ -9672,7 +9707,7 @@ export default class FlinkSqlParser extends Parser { } } - this.state = 1950; + this.state = 1957; _la = this._input.LA(1); if(!(_la===398 || _la===399)) { this._errHandler.recoverInline(this); @@ -9686,7 +9721,7 @@ export default class FlinkSqlParser extends Parser { case 397: this.enterOuterAlt(localctx, 2); { - this.state = 1951; + this.state = 1958; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -9713,7 +9748,7 @@ export default class FlinkSqlParser extends Parser { let localctx: IntervalTimeUnitContext = new IntervalTimeUnitContext(this, this._ctx, this.state); this.enterRule(localctx, 290, FlinkSqlParser.RULE_intervalTimeUnit); try { - this.state = 1956; + this.state = 1963; this._errHandler.sync(this); switch (this._input.LA(1)) { case 4: @@ -9892,7 +9927,7 @@ export default class FlinkSqlParser extends Parser { case 401: this.enterOuterAlt(localctx, 1); { - this.state = 1954; + this.state = 1961; this.identifier(); } break; @@ -10088,7 +10123,7 @@ export default class FlinkSqlParser extends Parser { case 364: this.enterOuterAlt(localctx, 2); { - this.state = 1955; + this.state = 1962; this.reservedKeywords(); } break; @@ -10118,24 +10153,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1959; + this.state = 1966; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===183) { { - this.state = 1958; + this.state = 1965; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1961; + this.state = 1968; this.identifier(); - this.state = 1963; + this.state = 1970; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===376) { { - this.state = 1962; + this.state = 1969; this.identifierList(); } } @@ -10164,24 +10199,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1966; + this.state = 1973; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===183) { { - this.state = 1965; + this.state = 1972; this.match(FlinkSqlParser.KW_AS); } } - this.state = 1968; + this.state = 1975; this.identifier(); - this.state = 1970; + this.state = 1977; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 228, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 231, this._ctx) ) { case 1: { - this.state = 1969; + this.state = 1976; this.identifierList(); } break; @@ -10209,9 +10244,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1972; + this.state = 1979; this.identifier(); - this.state = 1973; + this.state = 1980; this.errorCapturingIdentifierExtra(); } } @@ -10235,26 +10270,26 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 298, FlinkSqlParser.RULE_errorCapturingIdentifierExtra); let _la: number; try { - this.state = 1982; + this.state = 1989; this._errHandler.sync(this); switch (this._input.LA(1)) { case 284: localctx = new ErrorIdentContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 1977; + this.state = 1984; this._errHandler.sync(this); _la = this._input.LA(1); do { { { - this.state = 1975; + this.state = 1982; this.match(FlinkSqlParser.KW_MINUS); - this.state = 1976; + this.state = 1983; this.identifier(); } } - this.state = 1979; + this.state = 1986; this._errHandler.sync(this); _la = this._input.LA(1); } while (_la===284); @@ -10293,11 +10328,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1984; + this.state = 1991; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 1985; + this.state = 1992; this.identifierSeq(); - this.state = 1986; + this.state = 1993; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10323,21 +10358,21 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 1988; + this.state = 1995; this.identifier(); - this.state = 1993; + this.state = 2000; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 1989; + this.state = 1996; this.match(FlinkSqlParser.COMMA); - this.state = 1990; + this.state = 1997; this.identifier(); } } - this.state = 1995; + this.state = 2002; this._errHandler.sync(this); _la = this._input.LA(1); } @@ -10362,7 +10397,7 @@ export default class FlinkSqlParser extends Parser { let localctx: IdentifierContext = new IdentifierContext(this, this._ctx, this.state); this.enterRule(localctx, 304, FlinkSqlParser.RULE_identifier); try { - this.state = 1999; + this.state = 2006; this._errHandler.sync(this); switch (this._input.LA(1)) { case 398: @@ -10370,7 +10405,7 @@ export default class FlinkSqlParser extends Parser { localctx = new UnquotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 1); { - this.state = 1996; + this.state = 2003; this.unquotedIdentifier(); } break; @@ -10378,7 +10413,7 @@ export default class FlinkSqlParser extends Parser { localctx = new QuotedIdentifierAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 2); { - this.state = 1997; + this.state = 2004; this.quotedIdentifier(); } break; @@ -10556,7 +10591,7 @@ export default class FlinkSqlParser extends Parser { localctx = new NonReservedKeywordsAlternativeContext(this, localctx); this.enterOuterAlt(localctx, 3); { - this.state = 1998; + this.state = 2005; this.nonReservedKeywords(); } break; @@ -10586,7 +10621,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2001; + this.state = 2008; _la = this._input.LA(1); if(!(_la===398 || _la===401)) { this._errHandler.recoverInline(this); @@ -10618,7 +10653,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2003; + this.state = 2010; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -10643,13 +10678,13 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2005; + this.state = 2012; this.match(FlinkSqlParser.KW_WHEN); - this.state = 2006; + this.state = 2013; localctx._condition = this.expression(); - this.state = 2007; + this.state = 2014; this.match(FlinkSqlParser.KW_THEN); - this.state = 2008; + this.state = 2015; localctx._result = this.expression(); } } @@ -10675,25 +10710,25 @@ export default class FlinkSqlParser extends Parser { let _alt: number; this.enterOuterAlt(localctx, 1); { - this.state = 2010; + this.state = 2017; this.identifier(); - this.state = 2015; + this.state = 2022; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 236, this._ctx); while (_alt !== 1 && _alt !== ATN.INVALID_ALT_NUMBER) { if (_alt === 1 + 1) { { { - this.state = 2011; + this.state = 2018; this.match(FlinkSqlParser.DOT); - this.state = 2012; + this.state = 2019; this.identifier(); } } } - this.state = 2017; + this.state = 2024; this._errHandler.sync(this); - _alt = this._interp.adaptivePredict(this._input, 233, this._ctx); + _alt = this._interp.adaptivePredict(this._input, 236, this._ctx); } } } @@ -10718,9 +10753,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2018; + this.state = 2025; this.match(FlinkSqlParser.KW_WITH); - this.state = 2019; + this.state = 2026; this.tablePropertyList(); } } @@ -10745,11 +10780,11 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2021; + this.state = 2028; this.match(FlinkSqlParser.KW_IF); - this.state = 2022; + this.state = 2029; this.match(FlinkSqlParser.KW_NOT); - this.state = 2023; + this.state = 2030; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10774,9 +10809,9 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2025; + this.state = 2032; this.match(FlinkSqlParser.KW_IF); - this.state = 2026; + this.state = 2033; this.match(FlinkSqlParser.KW_EXISTS); } } @@ -10802,27 +10837,27 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2028; + this.state = 2035; this.match(FlinkSqlParser.LR_BRACKET); - this.state = 2029; + this.state = 2036; this.tableProperty(); - this.state = 2034; + this.state = 2041; this._errHandler.sync(this); _la = this._input.LA(1); while (_la===380) { { { - this.state = 2030; + this.state = 2037; this.match(FlinkSqlParser.COMMA); - this.state = 2031; + this.state = 2038; this.tableProperty(); } } - this.state = 2036; + this.state = 2043; this._errHandler.sync(this); _la = this._input.LA(1); } - this.state = 2037; + this.state = 2044; this.match(FlinkSqlParser.RR_BRACKET); } } @@ -10848,24 +10883,24 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2039; + this.state = 2046; localctx._key = this.tablePropertyKey(); - this.state = 2044; + this.state = 2051; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===245 || _la===344 || _la===365 || ((((_la - 397)) & ~0x1F) === 0 && ((1 << (_la - 397)) & 7) !== 0)) { { - this.state = 2041; + this.state = 2048; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===365) { { - this.state = 2040; + this.state = 2047; this.match(FlinkSqlParser.EQUAL_SYMBOL); } } - this.state = 2043; + this.state = 2050; localctx._value = this.tablePropertyValue(); } } @@ -10891,27 +10926,27 @@ export default class FlinkSqlParser extends Parser { let localctx: TablePropertyKeyContext = new TablePropertyKeyContext(this, this._ctx, this.state); this.enterRule(localctx, 324, FlinkSqlParser.RULE_tablePropertyKey); try { - this.state = 2049; + this.state = 2056; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 237, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 240, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 2046; + this.state = 2053; this.identifier(); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 2047; + this.state = 2054; this.dereferenceDefinition(); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 2048; + this.state = 2055; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10936,20 +10971,20 @@ export default class FlinkSqlParser extends Parser { let localctx: TablePropertyValueContext = new TablePropertyValueContext(this, this._ctx, this.state); this.enterRule(localctx, 326, FlinkSqlParser.RULE_tablePropertyValue); try { - this.state = 2055; + this.state = 2062; this._errHandler.sync(this); switch (this._input.LA(1)) { case 398: this.enterOuterAlt(localctx, 1); { - this.state = 2051; + this.state = 2058; this.match(FlinkSqlParser.DIG_LITERAL); } break; case 399: this.enterOuterAlt(localctx, 2); { - this.state = 2052; + this.state = 2059; this.match(FlinkSqlParser.REAL_LITERAL); } break; @@ -10957,14 +10992,14 @@ export default class FlinkSqlParser extends Parser { case 344: this.enterOuterAlt(localctx, 3); { - this.state = 2053; + this.state = 2060; this.booleanLiteral(); } break; case 397: this.enterOuterAlt(localctx, 4); { - this.state = 2054; + this.state = 2061; this.match(FlinkSqlParser.STRING_LITERAL); } break; @@ -10991,38 +11026,38 @@ export default class FlinkSqlParser extends Parser { let localctx: LogicalOperatorContext = new LogicalOperatorContext(this, this._ctx, this.state); this.enterRule(localctx, 328, FlinkSqlParser.RULE_logicalOperator); try { - this.state = 2063; + this.state = 2070; this._errHandler.sync(this); switch (this._input.LA(1)) { case 179: this.enterOuterAlt(localctx, 1); { - this.state = 2057; + this.state = 2064; this.match(FlinkSqlParser.KW_AND); } break; case 371: this.enterOuterAlt(localctx, 2); { - this.state = 2058; + this.state = 2065; this.match(FlinkSqlParser.BIT_AND_OP); - this.state = 2059; + this.state = 2066; this.match(FlinkSqlParser.BIT_AND_OP); } break; case 301: this.enterOuterAlt(localctx, 3); { - this.state = 2060; + this.state = 2067; this.match(FlinkSqlParser.KW_OR); } break; case 370: this.enterOuterAlt(localctx, 4); { - this.state = 2061; + this.state = 2068; this.match(FlinkSqlParser.BIT_OR_OP); - this.state = 2062; + this.state = 2069; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -11049,74 +11084,74 @@ export default class FlinkSqlParser extends Parser { let localctx: ComparisonOperatorContext = new ComparisonOperatorContext(this, this._ctx, this.state); this.enterRule(localctx, 330, FlinkSqlParser.RULE_comparisonOperator); try { - this.state = 2079; + this.state = 2086; this._errHandler.sync(this); - switch ( this._interp.adaptivePredict(this._input, 240, this._ctx) ) { + switch ( this._interp.adaptivePredict(this._input, 243, this._ctx) ) { case 1: this.enterOuterAlt(localctx, 1); { - this.state = 2065; + this.state = 2072; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 2: this.enterOuterAlt(localctx, 2); { - this.state = 2066; + this.state = 2073; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 3: this.enterOuterAlt(localctx, 3); { - this.state = 2067; + this.state = 2074; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case 4: this.enterOuterAlt(localctx, 4); { - this.state = 2068; + this.state = 2075; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2069; + this.state = 2076; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 5: this.enterOuterAlt(localctx, 5); { - this.state = 2070; + this.state = 2077; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2071; + this.state = 2078; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 6: this.enterOuterAlt(localctx, 6); { - this.state = 2072; + this.state = 2079; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2073; + this.state = 2080; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 7: this.enterOuterAlt(localctx, 7); { - this.state = 2074; + this.state = 2081; this.match(FlinkSqlParser.EXCLAMATION_SYMBOL); - this.state = 2075; + this.state = 2082; this.match(FlinkSqlParser.EQUAL_SYMBOL); } break; case 8: this.enterOuterAlt(localctx, 8); { - this.state = 2076; + this.state = 2083; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2077; + this.state = 2084; this.match(FlinkSqlParser.EQUAL_SYMBOL); - this.state = 2078; + this.state = 2085; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; @@ -11141,45 +11176,45 @@ export default class FlinkSqlParser extends Parser { let localctx: BitOperatorContext = new BitOperatorContext(this, this._ctx, this.state); this.enterRule(localctx, 332, FlinkSqlParser.RULE_bitOperator); try { - this.state = 2088; + this.state = 2095; this._errHandler.sync(this); switch (this._input.LA(1)) { case 367: this.enterOuterAlt(localctx, 1); { - this.state = 2081; + this.state = 2088; this.match(FlinkSqlParser.LESS_SYMBOL); - this.state = 2082; + this.state = 2089; this.match(FlinkSqlParser.LESS_SYMBOL); } break; case 366: this.enterOuterAlt(localctx, 2); { - this.state = 2083; + this.state = 2090; this.match(FlinkSqlParser.GREATER_SYMBOL); - this.state = 2084; + this.state = 2091; this.match(FlinkSqlParser.GREATER_SYMBOL); } break; case 371: this.enterOuterAlt(localctx, 3); { - this.state = 2085; + this.state = 2092; this.match(FlinkSqlParser.BIT_AND_OP); } break; case 372: this.enterOuterAlt(localctx, 4); { - this.state = 2086; + this.state = 2093; this.match(FlinkSqlParser.BIT_XOR_OP); } break; case 370: this.enterOuterAlt(localctx, 5); { - this.state = 2087; + this.state = 2094; this.match(FlinkSqlParser.BIT_OR_OP); } break; @@ -11209,7 +11244,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2090; + this.state = 2097; _la = this._input.LA(1); if(!(_la===32 || ((((_la - 387)) & ~0x1F) === 0 && ((1 << (_la - 387)) & 221) !== 0))) { this._errHandler.recoverInline(this); @@ -11242,7 +11277,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2092; + this.state = 2099; _la = this._input.LA(1); if(!(_la===294 || ((((_la - 368)) & ~0x1F) === 0 && ((1 << (_la - 368)) & 6291459) !== 0))) { this._errHandler.recoverInline(this); @@ -11273,36 +11308,36 @@ export default class FlinkSqlParser extends Parser { this.enterRule(localctx, 338, FlinkSqlParser.RULE_constant); let _la: number; try { - this.state = 2106; + this.state = 2113; this._errHandler.sync(this); switch (this._input.LA(1)) { case 397: this.enterOuterAlt(localctx, 1); { - this.state = 2094; + this.state = 2101; this.stringLiteral(); } break; case 398: this.enterOuterAlt(localctx, 2); { - this.state = 2095; + this.state = 2102; this.decimalLiteral(); } break; case 267: this.enterOuterAlt(localctx, 3); { - this.state = 2096; + this.state = 2103; this.timeIntervalExpression(); } break; case 389: this.enterOuterAlt(localctx, 4); { - this.state = 2097; + this.state = 2104; this.match(FlinkSqlParser.HYPNEN_SIGN); - this.state = 2098; + this.state = 2105; this.decimalLiteral(); } break; @@ -11310,21 +11345,21 @@ export default class FlinkSqlParser extends Parser { case 344: this.enterOuterAlt(localctx, 5); { - this.state = 2099; + this.state = 2106; this.booleanLiteral(); } break; case 399: this.enterOuterAlt(localctx, 6); { - this.state = 2100; + this.state = 2107; this.match(FlinkSqlParser.REAL_LITERAL); } break; case 400: this.enterOuterAlt(localctx, 7); { - this.state = 2101; + this.state = 2108; this.match(FlinkSqlParser.BIT_STRING); } break; @@ -11332,17 +11367,17 @@ export default class FlinkSqlParser extends Parser { case 295: this.enterOuterAlt(localctx, 8); { - this.state = 2103; + this.state = 2110; this._errHandler.sync(this); _la = this._input.LA(1); if (_la===294) { { - this.state = 2102; + this.state = 2109; this.match(FlinkSqlParser.KW_NOT); } } - this.state = 2105; + this.state = 2112; this.match(FlinkSqlParser.KW_NULL); } break; @@ -11371,7 +11406,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2108; + this.state = 2115; this.match(FlinkSqlParser.STRING_LITERAL); } } @@ -11396,7 +11431,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2110; + this.state = 2117; this.match(FlinkSqlParser.DIG_LITERAL); } } @@ -11422,7 +11457,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2112; + this.state = 2119; _la = this._input.LA(1); if(!(_la===245 || _la===344)) { this._errHandler.recoverInline(this); @@ -11455,7 +11490,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2114; + this.state = 2121; _la = this._input.LA(1); if(!(_la===176 || _la===232)) { this._errHandler.recoverInline(this); @@ -11488,7 +11523,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2116; + this.state = 2123; _la = this._input.LA(1); if(!(((((_la - 175)) & ~0x1F) === 0 && ((1 << (_la - 175)) & 4294967295) !== 0) || ((((_la - 207)) & ~0x1F) === 0 && ((1 << (_la - 207)) & 4294967295) !== 0) || ((((_la - 239)) & ~0x1F) === 0 && ((1 << (_la - 239)) & 4294967295) !== 0) || ((((_la - 271)) & ~0x1F) === 0 && ((1 << (_la - 271)) & 4294967295) !== 0) || ((((_la - 303)) & ~0x1F) === 0 && ((1 << (_la - 303)) & 4294967295) !== 0) || ((((_la - 335)) & ~0x1F) === 0 && ((1 << (_la - 335)) & 1073741823) !== 0))) { this._errHandler.recoverInline(this); @@ -11521,7 +11556,7 @@ export default class FlinkSqlParser extends Parser { try { this.enterOuterAlt(localctx, 1); { - this.state = 2118; + this.state = 2125; _la = this._input.LA(1); if(!((((_la) & ~0x1F) === 0 && ((1 << _la) & 4294967280) !== 0) || ((((_la - 32)) & ~0x1F) === 0 && ((1 << (_la - 32)) & 4294967295) !== 0) || ((((_la - 64)) & ~0x1F) === 0 && ((1 << (_la - 64)) & 4294967295) !== 0) || ((((_la - 96)) & ~0x1F) === 0 && ((1 << (_la - 96)) & 4294967295) !== 0) || ((((_la - 128)) & ~0x1F) === 0 && ((1 << (_la - 128)) & 4294967295) !== 0) || ((((_la - 160)) & ~0x1F) === 0 && ((1 << (_la - 160)) & 32767) !== 0))) { this._errHandler.recoverInline(this); @@ -11612,7 +11647,7 @@ export default class FlinkSqlParser extends Parser { return true; } - public static readonly _serializedATN: number[] = [4,1,402,2121,2,0,7,0, + public static readonly _serializedATN: number[] = [4,1,402,2128,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, @@ -11667,749 +11702,752 @@ export default class FlinkSqlParser extends Parser { 679,8,29,1,29,1,29,1,30,1,30,1,30,1,30,3,30,687,8,30,1,30,1,30,1,31,1,31, 1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,1,32,1,33,1,33,1,33,1,33,1,33,1, 33,1,33,5,33,709,8,33,10,33,12,33,712,9,33,1,33,1,33,1,34,1,34,3,34,718, - 8,34,1,34,1,34,1,34,1,34,1,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3, - 36,733,8,36,1,36,3,36,736,8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,744,8, - 38,1,39,1,39,1,40,1,40,1,40,1,40,1,40,1,40,1,41,1,41,3,41,756,8,41,1,41, - 1,41,1,41,1,41,1,41,1,41,1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1, - 44,1,45,1,45,1,45,1,45,5,45,778,8,45,10,45,12,45,781,9,45,1,45,1,45,1,46, - 1,46,1,46,1,46,1,46,1,46,5,46,791,8,46,10,46,12,46,794,9,46,1,46,1,46,3, - 46,798,8,46,1,47,1,47,3,47,802,8,47,1,48,1,48,1,48,1,48,5,48,808,8,48,10, - 48,12,48,811,9,48,1,48,3,48,814,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50, - 822,8,50,1,51,1,51,1,51,1,51,1,51,1,52,1,52,1,52,3,52,832,8,52,1,52,1,52, - 3,52,836,8,52,1,52,1,52,1,53,1,53,3,53,842,8,53,1,53,1,53,3,53,846,8,53, - 1,53,1,53,3,53,850,8,53,1,53,3,53,853,8,53,1,53,1,53,1,53,1,54,1,54,1,54, - 1,54,3,54,862,8,54,1,54,1,54,3,54,866,8,54,1,54,1,54,1,54,1,54,1,54,3,54, - 873,8,54,1,54,3,54,876,8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,884,8,55, - 10,55,12,55,887,9,55,1,56,1,56,1,57,1,57,1,57,3,57,894,8,57,1,57,1,57,1, - 57,1,57,1,57,1,57,3,57,902,8,57,1,58,1,58,3,58,906,8,58,1,58,1,58,1,58, - 1,59,1,59,1,59,1,60,1,60,1,60,1,60,1,60,1,60,1,60,3,60,921,8,60,1,61,1, - 61,1,61,1,61,1,62,1,62,1,62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64, - 1,64,3,64,940,8,64,1,65,1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,951, - 8,66,1,66,1,66,3,66,955,8,66,1,66,1,66,1,66,1,66,1,66,3,66,962,8,66,1,67, - 1,67,1,67,3,67,967,8,67,1,67,1,67,1,68,1,68,3,68,973,8,68,1,68,1,68,3,68, - 977,8,68,1,68,1,68,1,69,1,69,1,69,3,69,984,8,69,1,69,1,69,3,69,988,8,69, - 1,70,1,70,3,70,992,8,70,1,70,1,70,3,70,996,8,70,1,70,1,70,1,71,1,71,1,71, - 1,71,3,71,1004,8,71,1,71,1,71,3,71,1008,8,71,1,71,1,71,1,72,3,72,1013,8, - 72,1,72,1,72,1,72,3,72,1018,8,72,1,73,1,73,1,73,1,73,3,73,1024,8,73,1,73, - 3,73,1027,8,73,1,73,1,73,3,73,1031,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1, - 75,5,75,1040,8,75,10,75,12,75,1043,9,75,1,76,1,76,1,76,1,76,5,76,1049,8, - 76,10,76,12,76,1052,9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1062, - 8,77,11,77,12,77,1063,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78, - 1,78,1,78,1,78,3,78,1079,8,78,1,78,3,78,1082,8,78,1,78,1,78,3,78,1086,8, - 78,1,78,3,78,1089,8,78,3,78,1091,8,78,1,78,1,78,1,78,3,78,1096,8,78,1,78, - 1,78,3,78,1100,8,78,1,78,3,78,1103,8,78,5,78,1105,8,78,10,78,12,78,1108, - 9,78,1,79,1,79,1,79,1,79,5,79,1114,8,79,10,79,12,79,1117,9,79,1,80,1,80, - 1,80,1,80,5,80,1123,8,80,10,80,12,80,1126,9,80,1,81,1,81,1,81,1,81,1,81, - 5,81,1133,8,81,10,81,12,81,1136,9,81,1,81,1,81,3,81,1140,8,81,1,81,1,81, - 1,81,1,81,1,81,1,82,1,82,1,83,1,83,1,83,3,83,1152,8,83,1,83,3,83,1155,8, - 83,1,83,3,83,1158,8,83,1,83,3,83,1161,8,83,1,83,1,83,1,83,1,83,3,83,1167, - 8,83,1,84,1,84,3,84,1171,8,84,1,84,1,84,1,84,1,84,5,84,1177,8,84,10,84, - 12,84,1180,9,84,3,84,1182,8,84,1,85,1,85,1,85,3,85,1187,8,85,1,85,3,85, - 1190,8,85,3,85,1192,8,85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1, - 86,1,86,1,86,3,86,1206,8,86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1215, - 8,88,10,88,12,88,1218,9,88,1,88,1,88,3,88,1222,8,88,1,88,1,88,1,88,1,88, - 1,88,1,88,3,88,1230,8,88,1,88,3,88,1233,8,88,1,88,3,88,1236,8,88,1,88,1, - 88,1,88,3,88,1241,8,88,5,88,1243,8,88,10,88,12,88,1246,9,88,1,89,1,89,3, - 89,1250,8,89,1,90,3,90,1253,8,90,1,90,1,90,3,90,1257,8,90,1,90,3,90,1260, - 8,90,1,90,3,90,1263,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,1273, - 8,90,10,90,12,90,1276,9,90,1,90,1,90,1,90,1,90,3,90,1282,8,90,1,90,1,90, - 1,90,1,90,1,90,1,90,1,90,1,90,1,90,3,90,1293,8,90,1,91,1,91,1,92,1,92,1, - 92,1,92,1,92,1,92,1,93,1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95, - 1,95,1,96,1,96,1,96,1,96,1,96,5,96,1320,8,96,10,96,12,96,1323,9,96,1,96, - 1,96,1,97,1,97,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1, - 98,1,98,1,98,1,98,3,98,1344,8,98,1,99,1,99,1,100,1,100,1,100,1,100,1,100, - 1,101,1,101,1,101,1,101,1,101,1,101,1,101,5,101,1360,8,101,10,101,12,101, - 1363,9,101,1,101,1,101,3,101,1367,8,101,1,102,1,102,1,102,1,103,1,103,1, - 103,1,103,1,103,5,103,1377,8,103,10,103,12,103,1380,9,103,1,104,1,104,1, - 104,1,104,1,104,1,104,1,104,1,104,5,104,1390,8,104,10,104,12,104,1393,9, - 104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1402,8,104,10,104,12, - 104,1405,9,104,1,104,1,104,1,104,1,104,1,104,1,104,1,104,5,104,1414,8,104, - 10,104,12,104,1417,9,104,1,104,1,104,3,104,1421,8,104,1,105,1,105,1,105, - 1,106,1,106,1,107,1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,109, - 1,109,1,110,1,110,1,110,1,111,1,111,1,111,1,111,5,111,1446,8,111,10,111, - 12,111,1449,9,111,1,112,1,112,1,112,1,112,1,113,3,113,1456,8,113,1,113, - 1,113,3,113,1460,8,113,1,113,3,113,1463,8,113,1,113,3,113,1466,8,113,1, - 113,1,113,1,114,1,114,1,114,3,114,1473,8,114,1,114,3,114,1476,8,114,1,114, - 3,114,1479,8,114,1,114,3,114,1482,8,114,1,114,3,114,1485,8,114,1,114,3, - 114,1488,8,114,1,114,1,114,1,114,3,114,1493,8,114,1,114,3,114,1496,8,114, - 1,115,1,115,1,115,1,115,1,115,5,115,1503,8,115,10,115,12,115,1506,9,115, - 1,116,1,116,3,116,1510,8,116,1,116,1,116,3,116,1514,8,116,1,117,1,117,1, - 117,3,117,1519,8,117,1,118,1,118,1,118,1,118,1,118,5,118,1526,8,118,10, - 118,12,118,1529,9,118,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, - 119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,3,119,1547,8,119,1,120,1, - 120,1,120,1,120,5,120,1553,8,120,10,120,12,120,1556,9,120,1,121,1,121,1, - 121,4,121,1561,8,121,11,121,12,121,1562,1,121,1,121,3,121,1567,8,121,1, - 122,1,122,3,122,1571,8,122,1,123,1,123,1,123,1,123,1,123,1,123,1,123,1, - 123,3,123,1581,8,123,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1, + 8,34,1,34,1,34,1,34,1,34,3,34,724,8,34,1,34,3,34,727,8,34,1,34,3,34,730, + 8,34,1,35,1,35,1,35,1,36,1,36,1,36,1,36,1,36,3,36,740,8,36,1,36,3,36,743, + 8,36,1,37,1,37,1,38,1,38,1,38,1,38,3,38,751,8,38,1,39,1,39,1,40,1,40,1, + 40,1,40,1,40,1,40,1,41,1,41,3,41,763,8,41,1,41,1,41,1,41,1,41,1,41,1,41, + 1,42,1,42,1,43,1,43,1,43,1,43,1,44,1,44,1,44,1,44,1,45,1,45,1,45,1,45,5, + 45,785,8,45,10,45,12,45,788,9,45,1,45,1,45,1,46,1,46,1,46,1,46,1,46,1,46, + 5,46,798,8,46,10,46,12,46,801,9,46,1,46,1,46,3,46,805,8,46,1,47,1,47,3, + 47,809,8,47,1,48,1,48,1,48,1,48,5,48,815,8,48,10,48,12,48,818,9,48,1,48, + 3,48,821,8,48,1,49,1,49,1,50,1,50,1,50,1,50,3,50,829,8,50,1,51,1,51,1,51, + 1,51,1,51,1,52,1,52,1,52,3,52,839,8,52,1,52,1,52,3,52,843,8,52,1,52,1,52, + 1,53,1,53,3,53,849,8,53,1,53,1,53,3,53,853,8,53,1,53,1,53,3,53,857,8,53, + 1,53,3,53,860,8,53,1,53,1,53,1,53,1,54,1,54,1,54,1,54,3,54,869,8,54,1,54, + 1,54,3,54,873,8,54,1,54,1,54,1,54,1,54,1,54,3,54,880,8,54,1,54,3,54,883, + 8,54,1,55,1,55,1,55,1,55,1,55,1,55,5,55,891,8,55,10,55,12,55,894,9,55,1, + 56,1,56,1,57,1,57,1,57,3,57,901,8,57,1,57,1,57,1,57,1,57,1,57,1,57,3,57, + 909,8,57,1,58,1,58,3,58,913,8,58,1,58,1,58,1,58,1,59,1,59,1,59,1,60,1,60, + 1,60,1,60,1,60,1,60,1,60,3,60,928,8,60,1,61,1,61,1,61,1,61,1,62,1,62,1, + 62,1,62,1,63,1,63,1,63,1,64,1,64,1,64,1,64,1,64,1,64,3,64,947,8,64,1,65, + 1,65,1,65,1,65,1,65,1,66,1,66,1,66,1,66,3,66,958,8,66,1,66,1,66,3,66,962, + 8,66,1,66,1,66,1,66,1,66,1,66,3,66,969,8,66,1,67,1,67,1,67,3,67,974,8,67, + 1,67,1,67,1,68,1,68,3,68,980,8,68,1,68,1,68,3,68,984,8,68,1,68,1,68,1,69, + 1,69,1,69,3,69,991,8,69,1,69,1,69,3,69,995,8,69,1,70,1,70,3,70,999,8,70, + 1,70,1,70,3,70,1003,8,70,1,70,1,70,1,71,1,71,1,71,1,71,3,71,1011,8,71,1, + 71,1,71,3,71,1015,8,71,1,71,1,71,1,72,3,72,1020,8,72,1,72,1,72,1,72,3,72, + 1025,8,72,1,73,1,73,1,73,1,73,3,73,1031,8,73,1,73,3,73,1034,8,73,1,73,1, + 73,3,73,1038,8,73,1,74,1,74,1,74,1,75,1,75,1,75,1,75,5,75,1047,8,75,10, + 75,12,75,1050,9,75,1,76,1,76,1,76,1,76,5,76,1056,8,76,10,76,12,76,1059, + 9,76,1,76,1,76,1,77,1,77,1,77,1,77,1,77,1,77,4,77,1069,8,77,11,77,12,77, + 1070,1,77,1,77,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,1,78,3, + 78,1086,8,78,1,78,3,78,1089,8,78,1,78,1,78,3,78,1093,8,78,1,78,3,78,1096, + 8,78,3,78,1098,8,78,1,78,1,78,1,78,3,78,1103,8,78,1,78,1,78,3,78,1107,8, + 78,1,78,3,78,1110,8,78,5,78,1112,8,78,10,78,12,78,1115,9,78,1,79,1,79,1, + 79,1,79,5,79,1121,8,79,10,79,12,79,1124,9,79,1,80,1,80,1,80,1,80,5,80,1130, + 8,80,10,80,12,80,1133,9,80,1,81,1,81,1,81,1,81,1,81,5,81,1140,8,81,10,81, + 12,81,1143,9,81,1,81,1,81,3,81,1147,8,81,1,81,1,81,1,81,1,81,1,81,1,82, + 1,82,1,83,1,83,1,83,3,83,1159,8,83,1,83,3,83,1162,8,83,1,83,3,83,1165,8, + 83,1,83,3,83,1168,8,83,1,83,1,83,1,83,1,83,3,83,1174,8,83,1,84,1,84,3,84, + 1178,8,84,1,84,1,84,1,84,1,84,5,84,1184,8,84,10,84,12,84,1187,9,84,3,84, + 1189,8,84,1,85,1,85,1,85,3,85,1194,8,85,1,85,3,85,1197,8,85,3,85,1199,8, + 85,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,1,86,3,86,1213, + 8,86,1,87,1,87,1,87,1,88,1,88,1,88,1,88,5,88,1222,8,88,10,88,12,88,1225, + 9,88,1,88,1,88,3,88,1229,8,88,1,88,1,88,1,88,1,88,1,88,1,88,3,88,1237,8, + 88,1,88,3,88,1240,8,88,1,88,3,88,1243,8,88,1,88,1,88,1,88,3,88,1248,8,88, + 5,88,1250,8,88,10,88,12,88,1253,9,88,1,89,1,89,3,89,1257,8,89,1,90,3,90, + 1260,8,90,1,90,1,90,3,90,1264,8,90,1,90,3,90,1267,8,90,1,90,3,90,1270,8, + 90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,1,90,5,90,1280,8,90,10,90,12,90,1283, + 9,90,1,90,1,90,1,90,1,90,3,90,1289,8,90,1,90,1,90,1,90,1,90,1,90,1,90,1, + 90,1,90,1,90,3,90,1300,8,90,1,91,1,91,1,92,1,92,1,92,1,92,1,92,1,92,1,93, + 1,93,1,94,1,94,1,94,1,94,1,94,1,95,1,95,1,95,1,95,1,95,1,96,1,96,1,96,1, + 96,1,96,5,96,1327,8,96,10,96,12,96,1330,9,96,1,96,1,96,1,97,1,97,1,98,1, + 98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,1,98,3,98, + 1351,8,98,1,99,1,99,1,100,1,100,1,100,1,100,1,100,1,101,1,101,1,101,1,101, + 1,101,1,101,1,101,5,101,1367,8,101,10,101,12,101,1370,9,101,1,101,1,101, + 3,101,1374,8,101,1,102,1,102,1,102,1,103,1,103,1,103,1,103,1,103,5,103, + 1384,8,103,10,103,12,103,1387,9,103,1,104,1,104,1,104,1,104,1,104,1,104, + 1,104,1,104,5,104,1397,8,104,10,104,12,104,1400,9,104,1,104,1,104,1,104, + 1,104,1,104,1,104,1,104,5,104,1409,8,104,10,104,12,104,1412,9,104,1,104, + 1,104,1,104,1,104,1,104,1,104,1,104,5,104,1421,8,104,10,104,12,104,1424, + 9,104,1,104,1,104,3,104,1428,8,104,1,105,1,105,1,105,1,106,1,106,1,107, + 1,107,1,107,1,107,1,107,1,107,1,107,1,108,1,108,1,109,1,109,1,110,1,110, + 1,110,1,111,1,111,1,111,1,111,5,111,1453,8,111,10,111,12,111,1456,9,111, + 1,112,1,112,1,112,1,112,1,113,3,113,1463,8,113,1,113,1,113,3,113,1467,8, + 113,1,113,3,113,1470,8,113,1,113,3,113,1473,8,113,1,113,1,113,1,114,1,114, + 1,114,3,114,1480,8,114,1,114,3,114,1483,8,114,1,114,3,114,1486,8,114,1, + 114,3,114,1489,8,114,1,114,3,114,1492,8,114,1,114,3,114,1495,8,114,1,114, + 1,114,1,114,3,114,1500,8,114,1,114,3,114,1503,8,114,1,115,1,115,1,115,1, + 115,1,115,5,115,1510,8,115,10,115,12,115,1513,9,115,1,116,1,116,3,116,1517, + 8,116,1,116,1,116,3,116,1521,8,116,1,117,1,117,1,117,3,117,1526,8,117,1, + 118,1,118,1,118,1,118,1,118,5,118,1533,8,118,10,118,12,118,1536,9,118,1, + 119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1,119,1, + 119,1,119,1,119,1,119,3,119,1554,8,119,1,120,1,120,1,120,1,120,5,120,1560, + 8,120,10,120,12,120,1563,9,120,1,121,1,121,1,121,4,121,1568,8,121,11,121, + 12,121,1569,1,121,1,121,3,121,1574,8,121,1,122,1,122,3,122,1578,8,122,1, + 123,1,123,1,123,1,123,1,123,1,123,1,123,1,123,3,123,1588,8,123,1,124,1, 124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1, - 124,1,124,1,124,1,124,3,124,1607,8,124,1,125,1,125,1,125,1,125,5,125,1613, - 8,125,10,125,12,125,1616,9,125,1,126,1,126,1,126,1,126,1,126,1,126,1,126, - 1,126,1,126,3,126,1627,8,126,1,127,1,127,1,127,1,127,1,127,1,128,1,128, - 1,128,1,129,1,129,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130, - 1,130,3,130,1649,8,130,3,130,1651,8,130,1,130,1,130,1,130,1,130,1,130,1, - 130,5,130,1659,8,130,10,130,12,130,1662,9,130,1,131,3,131,1665,8,131,1, - 131,1,131,1,131,1,131,1,131,1,131,3,131,1673,8,131,1,131,1,131,1,131,1, - 131,1,131,5,131,1680,8,131,10,131,12,131,1683,9,131,1,131,1,131,1,131,3, - 131,1688,8,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1, - 131,1,131,3,131,1701,8,131,1,131,1,131,1,131,3,131,1706,8,131,1,131,1,131, - 1,131,1,131,1,131,1,131,1,131,1,131,5,131,1716,8,131,10,131,12,131,1719, - 9,131,1,131,1,131,3,131,1723,8,131,1,131,3,131,1726,8,131,1,131,1,131,1, - 131,1,131,3,131,1732,8,131,1,131,1,131,1,131,3,131,1737,8,131,1,131,1,131, - 1,131,3,131,1742,8,131,1,131,1,131,1,131,3,131,1747,8,131,1,132,3,132,1750, - 8,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,1,132,5,132,1760,8,132, - 10,132,12,132,1763,9,132,1,132,1,132,3,132,1767,8,132,1,132,3,132,1770, - 8,132,1,132,1,132,3,132,1774,8,132,1,133,1,133,1,133,1,133,3,133,1780,8, - 133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1, - 133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,5,133,1801,8,133,10,133,12, - 133,1804,9,133,1,134,1,134,1,134,4,134,1809,8,134,11,134,12,134,1810,1, - 134,1,134,3,134,1815,8,134,1,134,1,134,1,134,1,134,1,134,4,134,1822,8,134, - 11,134,12,134,1823,1,134,1,134,3,134,1828,8,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1844, - 8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1853,8,134,1,134, + 124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,1,124,3,124,1614, + 8,124,1,125,1,125,1,125,1,125,5,125,1620,8,125,10,125,12,125,1623,9,125, + 1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,1,126,3,126,1634,8,126, + 1,127,1,127,1,127,1,127,1,127,1,128,1,128,1,128,1,129,1,129,1,130,1,130, + 1,130,1,130,1,130,1,130,1,130,1,130,1,130,1,130,3,130,1656,8,130,3,130, + 1658,8,130,1,130,1,130,1,130,1,130,1,130,1,130,5,130,1666,8,130,10,130, + 12,130,1669,9,130,1,131,3,131,1672,8,131,1,131,1,131,1,131,1,131,1,131, + 1,131,3,131,1680,8,131,1,131,1,131,1,131,1,131,1,131,5,131,1687,8,131,10, + 131,12,131,1690,9,131,1,131,1,131,1,131,3,131,1695,8,131,1,131,1,131,1, + 131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,1,131,3,131,1708,8,131,1, + 131,1,131,1,131,3,131,1713,8,131,1,131,1,131,1,131,1,131,1,131,1,131,1, + 131,1,131,5,131,1723,8,131,10,131,12,131,1726,9,131,1,131,1,131,3,131,1730, + 8,131,1,131,3,131,1733,8,131,1,131,1,131,1,131,1,131,3,131,1739,8,131,1, + 131,1,131,1,131,3,131,1744,8,131,1,131,1,131,1,131,3,131,1749,8,131,1,131, + 1,131,1,131,3,131,1754,8,131,1,132,3,132,1757,8,132,1,132,1,132,1,132,1, + 132,1,132,1,132,1,132,1,132,5,132,1767,8,132,10,132,12,132,1770,9,132,1, + 132,1,132,3,132,1774,8,132,1,132,3,132,1777,8,132,1,132,1,132,3,132,1781, + 8,132,1,133,1,133,1,133,1,133,3,133,1787,8,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133,1,133, + 1,133,1,133,1,133,5,133,1808,8,133,10,133,12,133,1811,9,133,1,134,1,134, + 1,134,4,134,1816,8,134,11,134,12,134,1817,1,134,1,134,3,134,1822,8,134, + 1,134,1,134,1,134,1,134,1,134,4,134,1829,8,134,11,134,12,134,1830,1,134, + 1,134,3,134,1835,8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,1,134,3,134,1851,8,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,3,134,1860,8,134,1,134,1,134,1,134,1,134,1,134, 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134, - 1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1877,8,134, - 1,134,1,134,1,134,5,134,1882,8,134,10,134,12,134,1885,9,134,3,134,1887, - 8,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,1,134,3,134,1897,8,134, - 1,134,1,134,1,134,1,134,1,134,5,134,1904,8,134,10,134,12,134,1907,9,134, - 1,135,1,135,1,135,3,135,1912,8,135,1,136,1,136,1,137,1,137,1,138,1,138, - 3,138,1920,8,138,1,139,1,139,1,139,3,139,1925,8,139,1,140,1,140,3,140,1929, - 8,140,1,141,1,141,1,141,4,141,1934,8,141,11,141,12,141,1935,1,142,1,142, - 1,142,3,142,1941,8,142,1,143,1,143,1,143,1,143,1,143,1,144,3,144,1949,8, - 144,1,144,1,144,3,144,1953,8,144,1,145,1,145,3,145,1957,8,145,1,146,3,146, - 1960,8,146,1,146,1,146,3,146,1964,8,146,1,147,3,147,1967,8,147,1,147,1, - 147,3,147,1971,8,147,1,148,1,148,1,148,1,149,1,149,4,149,1978,8,149,11, - 149,12,149,1979,1,149,3,149,1983,8,149,1,150,1,150,1,150,1,150,1,151,1, - 151,1,151,5,151,1992,8,151,10,151,12,151,1995,9,151,1,152,1,152,1,152,3, - 152,2000,8,152,1,153,1,153,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1, - 156,1,156,1,156,5,156,2014,8,156,10,156,12,156,2017,9,156,1,157,1,157,1, - 157,1,158,1,158,1,158,1,158,1,159,1,159,1,159,1,160,1,160,1,160,1,160,5, - 160,2033,8,160,10,160,12,160,2036,9,160,1,160,1,160,1,161,1,161,3,161,2042, - 8,161,1,161,3,161,2045,8,161,1,162,1,162,1,162,3,162,2050,8,162,1,163,1, - 163,1,163,1,163,3,163,2056,8,163,1,164,1,164,1,164,1,164,1,164,1,164,3, - 164,2064,8,164,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1, - 165,1,165,1,165,1,165,1,165,3,165,2080,8,165,1,166,1,166,1,166,1,166,1, - 166,1,166,1,166,3,166,2089,8,166,1,167,1,167,1,168,1,168,1,169,1,169,1, - 169,1,169,1,169,1,169,1,169,1,169,1,169,3,169,2104,8,169,1,169,3,169,2107, - 8,169,1,170,1,170,1,171,1,171,1,172,1,172,1,173,1,173,1,174,1,174,1,175, - 1,175,1,175,1,2015,5,156,176,260,266,268,176,0,2,4,6,8,10,12,14,16,18,20, - 22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68, - 70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, - 114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148, - 150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184, - 186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220, - 222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256, - 258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292, - 294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328, - 330,332,334,336,338,340,342,344,346,348,350,0,41,2,0,30,30,231,231,3,0, - 16,16,37,37,67,67,4,0,13,13,26,26,64,64,166,166,2,0,12,12,25,25,2,0,248, - 248,259,259,2,0,165,165,337,337,2,0,4,4,117,117,1,0,107,111,3,0,192,192, - 222,222,295,295,11,0,10,10,145,145,151,151,188,189,201,201,223,223,264, - 265,329,329,340,340,342,342,356,357,2,0,361,361,363,363,4,0,225,226,233, - 233,246,246,296,296,2,0,182,182,289,289,2,0,40,40,260,260,3,0,21,21,95, - 95,176,176,3,0,40,40,93,93,260,260,3,0,52,52,89,89,169,169,3,0,65,65,106, - 106,125,125,2,0,11,11,122,122,2,0,92,92,268,268,3,0,239,239,266,266,346, - 346,4,0,249,249,261,261,275,275,318,318,3,0,23,23,56,56,155,155,5,0,24, - 24,138,139,144,144,150,150,298,298,2,0,218,218,321,321,3,0,56,56,135,135, - 155,155,2,0,8,8,30,30,2,0,44,44,72,72,2,0,176,176,180,180,2,0,245,245,344, - 344,2,0,369,369,389,390,4,0,32,32,387,387,391,391,394,394,2,0,389,390,392, - 392,1,0,389,390,1,0,398,399,2,0,398,398,401,401,4,0,32,32,387,387,389,391, - 393,394,3,0,294,294,368,369,389,390,2,0,176,176,232,232,1,0,175,364,1,0, - 4,174,2302,0,352,1,0,0,0,2,355,1,0,0,0,4,365,1,0,0,0,6,380,1,0,0,0,8,382, - 1,0,0,0,10,398,1,0,0,0,12,402,1,0,0,0,14,404,1,0,0,0,16,407,1,0,0,0,18, - 418,1,0,0,0,20,426,1,0,0,0,22,434,1,0,0,0,24,436,1,0,0,0,26,481,1,0,0,0, - 28,483,1,0,0,0,30,490,1,0,0,0,32,494,1,0,0,0,34,498,1,0,0,0,36,502,1,0, - 0,0,38,545,1,0,0,0,40,549,1,0,0,0,42,551,1,0,0,0,44,592,1,0,0,0,46,606, - 1,0,0,0,48,608,1,0,0,0,50,618,1,0,0,0,52,620,1,0,0,0,54,668,1,0,0,0,56, - 670,1,0,0,0,58,674,1,0,0,0,60,682,1,0,0,0,62,690,1,0,0,0,64,694,1,0,0,0, - 66,701,1,0,0,0,68,717,1,0,0,0,70,724,1,0,0,0,72,727,1,0,0,0,74,737,1,0, - 0,0,76,739,1,0,0,0,78,745,1,0,0,0,80,747,1,0,0,0,82,755,1,0,0,0,84,763, - 1,0,0,0,86,765,1,0,0,0,88,769,1,0,0,0,90,773,1,0,0,0,92,797,1,0,0,0,94, - 801,1,0,0,0,96,803,1,0,0,0,98,815,1,0,0,0,100,821,1,0,0,0,102,823,1,0,0, - 0,104,828,1,0,0,0,106,839,1,0,0,0,108,857,1,0,0,0,110,877,1,0,0,0,112,888, - 1,0,0,0,114,890,1,0,0,0,116,903,1,0,0,0,118,910,1,0,0,0,120,913,1,0,0,0, - 122,922,1,0,0,0,124,926,1,0,0,0,126,930,1,0,0,0,128,933,1,0,0,0,130,941, - 1,0,0,0,132,946,1,0,0,0,134,963,1,0,0,0,136,970,1,0,0,0,138,980,1,0,0,0, - 140,989,1,0,0,0,142,999,1,0,0,0,144,1017,1,0,0,0,146,1019,1,0,0,0,148,1032, - 1,0,0,0,150,1035,1,0,0,0,152,1044,1,0,0,0,154,1055,1,0,0,0,156,1090,1,0, - 0,0,158,1109,1,0,0,0,160,1118,1,0,0,0,162,1127,1,0,0,0,164,1146,1,0,0,0, - 166,1166,1,0,0,0,168,1168,1,0,0,0,170,1191,1,0,0,0,172,1205,1,0,0,0,174, - 1207,1,0,0,0,176,1221,1,0,0,0,178,1247,1,0,0,0,180,1292,1,0,0,0,182,1294, - 1,0,0,0,184,1296,1,0,0,0,186,1302,1,0,0,0,188,1304,1,0,0,0,190,1309,1,0, - 0,0,192,1314,1,0,0,0,194,1326,1,0,0,0,196,1343,1,0,0,0,198,1345,1,0,0,0, - 200,1347,1,0,0,0,202,1366,1,0,0,0,204,1368,1,0,0,0,206,1371,1,0,0,0,208, - 1420,1,0,0,0,210,1422,1,0,0,0,212,1425,1,0,0,0,214,1427,1,0,0,0,216,1434, - 1,0,0,0,218,1436,1,0,0,0,220,1438,1,0,0,0,222,1441,1,0,0,0,224,1450,1,0, - 0,0,226,1455,1,0,0,0,228,1469,1,0,0,0,230,1497,1,0,0,0,232,1507,1,0,0,0, - 234,1515,1,0,0,0,236,1520,1,0,0,0,238,1546,1,0,0,0,240,1548,1,0,0,0,242, - 1557,1,0,0,0,244,1568,1,0,0,0,246,1580,1,0,0,0,248,1606,1,0,0,0,250,1608, - 1,0,0,0,252,1626,1,0,0,0,254,1628,1,0,0,0,256,1633,1,0,0,0,258,1636,1,0, - 0,0,260,1650,1,0,0,0,262,1746,1,0,0,0,264,1773,1,0,0,0,266,1779,1,0,0,0, - 268,1896,1,0,0,0,270,1911,1,0,0,0,272,1913,1,0,0,0,274,1915,1,0,0,0,276, - 1919,1,0,0,0,278,1921,1,0,0,0,280,1926,1,0,0,0,282,1933,1,0,0,0,284,1937, - 1,0,0,0,286,1942,1,0,0,0,288,1952,1,0,0,0,290,1956,1,0,0,0,292,1959,1,0, - 0,0,294,1966,1,0,0,0,296,1972,1,0,0,0,298,1982,1,0,0,0,300,1984,1,0,0,0, - 302,1988,1,0,0,0,304,1999,1,0,0,0,306,2001,1,0,0,0,308,2003,1,0,0,0,310, - 2005,1,0,0,0,312,2010,1,0,0,0,314,2018,1,0,0,0,316,2021,1,0,0,0,318,2025, - 1,0,0,0,320,2028,1,0,0,0,322,2039,1,0,0,0,324,2049,1,0,0,0,326,2055,1,0, - 0,0,328,2063,1,0,0,0,330,2079,1,0,0,0,332,2088,1,0,0,0,334,2090,1,0,0,0, - 336,2092,1,0,0,0,338,2106,1,0,0,0,340,2108,1,0,0,0,342,2110,1,0,0,0,344, - 2112,1,0,0,0,346,2114,1,0,0,0,348,2116,1,0,0,0,350,2118,1,0,0,0,352,353, - 3,2,1,0,353,354,5,0,0,1,354,1,1,0,0,0,355,356,3,4,2,0,356,357,5,0,0,1,357, - 3,1,0,0,0,358,360,3,6,3,0,359,361,5,381,0,0,360,359,1,0,0,0,360,361,1,0, - 0,0,361,364,1,0,0,0,362,364,3,8,4,0,363,358,1,0,0,0,363,362,1,0,0,0,364, - 367,1,0,0,0,365,363,1,0,0,0,365,366,1,0,0,0,366,5,1,0,0,0,367,365,1,0,0, - 0,368,381,3,10,5,0,369,381,3,12,6,0,370,381,3,14,7,0,371,381,3,16,8,0,372, - 381,3,22,11,0,373,381,3,26,13,0,374,381,3,28,14,0,375,381,3,30,15,0,376, - 381,3,32,16,0,377,381,3,34,17,0,378,381,3,36,18,0,379,381,3,38,19,0,380, - 368,1,0,0,0,380,369,1,0,0,0,380,370,1,0,0,0,380,371,1,0,0,0,380,372,1,0, - 0,0,380,373,1,0,0,0,380,374,1,0,0,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,7,1,0,0,0,382,383,5,381, - 0,0,383,9,1,0,0,0,384,399,3,40,20,0,385,399,3,104,52,0,386,399,3,106,53, - 0,387,399,3,108,54,0,388,399,3,102,51,0,389,399,3,114,57,0,390,399,3,128, - 64,0,391,399,3,130,65,0,392,399,3,132,66,0,393,399,3,134,67,0,394,399,3, - 136,68,0,395,399,3,138,69,0,396,399,3,140,70,0,397,399,3,142,71,0,398,384, - 1,0,0,0,398,385,1,0,0,0,398,386,1,0,0,0,398,387,1,0,0,0,398,388,1,0,0,0, - 398,389,1,0,0,0,398,390,1,0,0,0,398,391,1,0,0,0,398,392,1,0,0,0,398,393, - 1,0,0,0,398,394,1,0,0,0,398,395,1,0,0,0,398,396,1,0,0,0,398,397,1,0,0,0, - 399,11,1,0,0,0,400,403,3,156,78,0,401,403,3,144,72,0,402,400,1,0,0,0,402, - 401,1,0,0,0,403,13,1,0,0,0,404,405,7,0,0,0,405,406,3,312,156,0,406,15,1, - 0,0,0,407,411,5,242,0,0,408,412,3,18,9,0,409,410,5,100,0,0,410,412,5,247, - 0,0,411,408,1,0,0,0,411,409,1,0,0,0,411,412,1,0,0,0,412,416,1,0,0,0,413, - 417,3,12,6,0,414,417,3,146,73,0,415,417,3,154,77,0,416,413,1,0,0,0,416, - 414,1,0,0,0,416,415,1,0,0,0,417,17,1,0,0,0,418,423,3,20,10,0,419,420,5, - 380,0,0,420,422,3,20,10,0,421,419,1,0,0,0,422,425,1,0,0,0,423,421,1,0,0, - 0,423,424,1,0,0,0,424,19,1,0,0,0,425,423,1,0,0,0,426,427,7,1,0,0,427,21, - 1,0,0,0,428,430,5,160,0,0,429,431,5,12,0,0,430,429,1,0,0,0,430,431,1,0, - 0,0,431,432,1,0,0,0,432,435,3,312,156,0,433,435,3,24,12,0,434,428,1,0,0, - 0,434,433,1,0,0,0,435,23,1,0,0,0,436,437,5,160,0,0,437,438,5,83,0,0,438, - 443,3,312,156,0,439,440,5,380,0,0,440,442,3,312,156,0,441,439,1,0,0,0,442, - 445,1,0,0,0,443,441,1,0,0,0,443,444,1,0,0,0,444,25,1,0,0,0,445,443,1,0, - 0,0,446,447,5,327,0,0,447,482,7,2,0,0,448,449,5,327,0,0,449,450,5,219,0, - 0,450,482,7,3,0,0,451,452,5,327,0,0,452,455,5,148,0,0,453,454,7,4,0,0,454, - 456,3,312,156,0,455,453,1,0,0,0,455,456,1,0,0,0,456,458,1,0,0,0,457,459, - 3,264,132,0,458,457,1,0,0,0,458,459,1,0,0,0,459,482,1,0,0,0,460,461,5,327, - 0,0,461,462,5,20,0,0,462,463,7,4,0,0,463,465,3,312,156,0,464,466,3,264, - 132,0,465,464,1,0,0,0,465,466,1,0,0,0,466,482,1,0,0,0,467,468,5,327,0,0, - 468,469,5,216,0,0,469,470,7,5,0,0,470,482,3,312,156,0,471,473,5,327,0,0, - 472,474,5,352,0,0,473,472,1,0,0,0,473,474,1,0,0,0,474,475,1,0,0,0,475,482, - 5,50,0,0,476,478,5,327,0,0,477,479,5,249,0,0,478,477,1,0,0,0,478,479,1, - 0,0,0,479,480,1,0,0,0,480,482,5,83,0,0,481,446,1,0,0,0,481,448,1,0,0,0, - 481,451,1,0,0,0,481,460,1,0,0,0,481,467,1,0,0,0,481,471,1,0,0,0,481,476, - 1,0,0,0,482,27,1,0,0,0,483,484,5,75,0,0,484,485,5,287,0,0,485,488,3,312, - 156,0,486,487,5,361,0,0,487,489,3,320,160,0,488,486,1,0,0,0,488,489,1,0, - 0,0,489,29,1,0,0,0,490,491,5,158,0,0,491,492,5,287,0,0,492,493,3,312,156, - 0,493,31,1,0,0,0,494,496,5,326,0,0,495,497,3,322,161,0,496,495,1,0,0,0, - 496,497,1,0,0,0,497,33,1,0,0,0,498,500,5,316,0,0,499,501,3,324,162,0,500, - 499,1,0,0,0,500,501,1,0,0,0,501,35,1,0,0,0,502,503,7,6,0,0,503,504,5,63, - 0,0,504,505,3,112,56,0,505,37,1,0,0,0,506,507,5,4,0,0,507,508,5,63,0,0, - 508,509,5,361,0,0,509,512,5,402,0,0,510,511,5,183,0,0,511,513,3,312,156, - 0,512,510,1,0,0,0,512,513,1,0,0,0,513,546,1,0,0,0,514,515,5,4,0,0,515,516, - 5,42,0,0,516,517,5,361,0,0,517,520,5,402,0,0,518,519,5,183,0,0,519,521, - 3,312,156,0,520,518,1,0,0,0,520,521,1,0,0,0,521,524,1,0,0,0,522,523,5,118, - 0,0,523,525,3,312,156,0,524,522,1,0,0,0,524,525,1,0,0,0,525,546,1,0,0,0, - 526,527,5,4,0,0,527,528,7,7,0,0,528,529,5,361,0,0,529,530,5,402,0,0,530, - 531,5,118,0,0,531,546,3,312,156,0,532,533,5,4,0,0,533,534,5,112,0,0,534, - 546,5,402,0,0,535,536,5,4,0,0,536,537,5,35,0,0,537,538,5,42,0,0,538,539, - 5,361,0,0,539,540,5,402,0,0,540,541,5,118,0,0,541,542,3,312,156,0,542,543, - 5,68,0,0,543,544,3,312,156,0,544,546,1,0,0,0,545,506,1,0,0,0,545,514,1, - 0,0,0,545,526,1,0,0,0,545,532,1,0,0,0,545,535,1,0,0,0,546,39,1,0,0,0,547, - 550,3,42,21,0,548,550,3,44,22,0,549,547,1,0,0,0,549,548,1,0,0,0,550,41, - 1,0,0,0,551,553,5,216,0,0,552,554,5,149,0,0,553,552,1,0,0,0,553,554,1,0, - 0,0,554,555,1,0,0,0,555,557,5,337,0,0,556,558,3,316,158,0,557,556,1,0,0, - 0,557,558,1,0,0,0,558,559,1,0,0,0,559,560,3,98,49,0,560,561,5,376,0,0,561, - 566,3,46,23,0,562,563,5,380,0,0,563,565,3,46,23,0,564,562,1,0,0,0,565,568, - 1,0,0,0,566,564,1,0,0,0,566,567,1,0,0,0,567,571,1,0,0,0,568,566,1,0,0,0, - 569,570,5,380,0,0,570,572,3,80,40,0,571,569,1,0,0,0,571,572,1,0,0,0,572, - 575,1,0,0,0,573,574,5,380,0,0,574,576,3,82,41,0,575,573,1,0,0,0,575,576, - 1,0,0,0,576,579,1,0,0,0,577,578,5,380,0,0,578,580,3,86,43,0,579,577,1,0, - 0,0,579,580,1,0,0,0,580,581,1,0,0,0,581,583,5,377,0,0,582,584,3,70,35,0, - 583,582,1,0,0,0,583,584,1,0,0,0,584,586,1,0,0,0,585,587,3,88,44,0,586,585, - 1,0,0,0,586,587,1,0,0,0,587,588,1,0,0,0,588,590,3,314,157,0,589,591,3,96, - 48,0,590,589,1,0,0,0,590,591,1,0,0,0,591,43,1,0,0,0,592,593,5,216,0,0,593, - 595,5,337,0,0,594,596,3,316,158,0,595,594,1,0,0,0,595,596,1,0,0,0,596,597, - 1,0,0,0,597,598,3,98,49,0,598,601,3,314,157,0,599,600,5,183,0,0,600,602, - 3,156,78,0,601,599,1,0,0,0,601,602,1,0,0,0,602,45,1,0,0,0,603,607,3,48, - 24,0,604,607,3,72,36,0,605,607,3,76,38,0,606,603,1,0,0,0,606,604,1,0,0, - 0,606,605,1,0,0,0,607,47,1,0,0,0,608,609,3,50,25,0,609,611,3,54,27,0,610, - 612,3,68,34,0,611,610,1,0,0,0,611,612,1,0,0,0,612,614,1,0,0,0,613,615,3, - 70,35,0,614,613,1,0,0,0,614,615,1,0,0,0,615,49,1,0,0,0,616,619,3,312,156, - 0,617,619,3,258,129,0,618,616,1,0,0,0,618,617,1,0,0,0,619,51,1,0,0,0,620, - 621,5,376,0,0,621,626,3,50,25,0,622,623,5,380,0,0,623,625,3,50,25,0,624, - 622,1,0,0,0,625,628,1,0,0,0,626,624,1,0,0,0,626,627,1,0,0,0,627,629,1,0, - 0,0,628,626,1,0,0,0,629,630,5,377,0,0,630,53,1,0,0,0,631,669,7,8,0,0,632, - 634,7,9,0,0,633,635,3,56,28,0,634,633,1,0,0,0,634,635,1,0,0,0,635,669,1, - 0,0,0,636,638,5,341,0,0,637,639,3,56,28,0,638,637,1,0,0,0,638,639,1,0,0, - 0,639,646,1,0,0,0,640,642,7,10,0,0,641,643,5,278,0,0,642,641,1,0,0,0,642, - 643,1,0,0,0,643,644,1,0,0,0,644,645,5,340,0,0,645,647,5,174,0,0,646,640, - 1,0,0,0,646,647,1,0,0,0,647,669,1,0,0,0,648,650,7,11,0,0,649,651,3,58,29, - 0,650,649,1,0,0,0,650,651,1,0,0,0,651,669,1,0,0,0,652,654,7,12,0,0,653, - 655,3,62,31,0,654,653,1,0,0,0,654,655,1,0,0,0,655,669,1,0,0,0,656,658,5, - 76,0,0,657,659,3,64,32,0,658,657,1,0,0,0,658,659,1,0,0,0,659,669,1,0,0, - 0,660,662,5,322,0,0,661,663,3,66,33,0,662,661,1,0,0,0,662,663,1,0,0,0,663, - 669,1,0,0,0,664,666,5,114,0,0,665,667,3,60,30,0,666,665,1,0,0,0,666,667, - 1,0,0,0,667,669,1,0,0,0,668,631,1,0,0,0,668,632,1,0,0,0,668,636,1,0,0,0, - 668,648,1,0,0,0,668,652,1,0,0,0,668,656,1,0,0,0,668,660,1,0,0,0,668,664, - 1,0,0,0,669,55,1,0,0,0,670,671,5,376,0,0,671,672,3,342,171,0,672,673,5, - 377,0,0,673,57,1,0,0,0,674,675,5,376,0,0,675,678,3,342,171,0,676,677,5, - 380,0,0,677,679,3,342,171,0,678,676,1,0,0,0,678,679,1,0,0,0,679,680,1,0, - 0,0,680,681,5,377,0,0,681,59,1,0,0,0,682,683,5,376,0,0,683,686,3,340,170, - 0,684,685,5,380,0,0,685,687,3,340,170,0,686,684,1,0,0,0,686,687,1,0,0,0, - 687,688,1,0,0,0,688,689,5,377,0,0,689,61,1,0,0,0,690,691,5,367,0,0,691, - 692,3,54,27,0,692,693,5,366,0,0,693,63,1,0,0,0,694,695,5,367,0,0,695,696, - 3,54,27,0,696,697,5,380,0,0,697,698,3,54,27,0,698,699,1,0,0,0,699,700,5, - 366,0,0,700,65,1,0,0,0,701,702,5,367,0,0,702,703,3,50,25,0,703,710,3,54, - 27,0,704,705,5,380,0,0,705,706,3,50,25,0,706,707,3,54,27,0,707,709,1,0, - 0,0,708,704,1,0,0,0,709,712,1,0,0,0,710,708,1,0,0,0,710,711,1,0,0,0,711, - 713,1,0,0,0,712,710,1,0,0,0,713,714,5,366,0,0,714,67,1,0,0,0,715,716,5, - 212,0,0,716,718,3,84,42,0,717,715,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0, - 0,719,720,5,313,0,0,720,721,5,68,0,0,721,722,5,294,0,0,722,723,5,34,0,0, - 723,69,1,0,0,0,724,725,5,18,0,0,725,726,5,397,0,0,726,71,1,0,0,0,727,728, - 3,50,25,0,728,729,3,54,27,0,729,732,5,283,0,0,730,731,5,248,0,0,731,733, - 3,74,37,0,732,730,1,0,0,0,732,733,1,0,0,0,733,735,1,0,0,0,734,736,5,167, - 0,0,735,734,1,0,0,0,735,736,1,0,0,0,736,73,1,0,0,0,737,738,5,397,0,0,738, - 75,1,0,0,0,739,740,3,50,25,0,740,741,5,183,0,0,741,743,3,78,39,0,742,744, - 3,70,35,0,743,742,1,0,0,0,743,744,1,0,0,0,744,77,1,0,0,0,745,746,3,258, - 129,0,746,79,1,0,0,0,747,748,5,168,0,0,748,749,5,247,0,0,749,750,3,258, - 129,0,750,751,5,183,0,0,751,752,3,258,129,0,752,81,1,0,0,0,753,754,5,212, - 0,0,754,756,3,84,42,0,755,753,1,0,0,0,755,756,1,0,0,0,756,757,1,0,0,0,757, - 758,5,313,0,0,758,759,5,68,0,0,759,760,3,52,26,0,760,761,5,294,0,0,761, - 762,5,34,0,0,762,83,1,0,0,0,763,764,3,304,152,0,764,85,1,0,0,0,765,766, - 5,311,0,0,766,767,5,247,0,0,767,768,5,335,0,0,768,87,1,0,0,0,769,770,5, - 94,0,0,770,771,5,194,0,0,771,772,3,90,45,0,772,89,1,0,0,0,773,774,5,376, - 0,0,774,779,3,92,46,0,775,776,5,380,0,0,776,778,3,92,46,0,777,775,1,0,0, - 0,778,781,1,0,0,0,779,777,1,0,0,0,779,780,1,0,0,0,780,782,1,0,0,0,781,779, - 1,0,0,0,782,783,5,377,0,0,783,91,1,0,0,0,784,798,3,276,138,0,785,786,3, - 304,152,0,786,787,5,376,0,0,787,792,3,94,47,0,788,789,5,380,0,0,789,791, - 3,94,47,0,790,788,1,0,0,0,791,794,1,0,0,0,792,790,1,0,0,0,792,793,1,0,0, - 0,793,795,1,0,0,0,794,792,1,0,0,0,795,796,5,377,0,0,796,798,1,0,0,0,797, - 784,1,0,0,0,797,785,1,0,0,0,798,93,1,0,0,0,799,802,3,276,138,0,800,802, - 3,338,169,0,801,799,1,0,0,0,801,800,1,0,0,0,802,95,1,0,0,0,803,804,5,276, - 0,0,804,813,3,98,49,0,805,809,5,376,0,0,806,808,3,100,50,0,807,806,1,0, - 0,0,808,811,1,0,0,0,809,807,1,0,0,0,809,810,1,0,0,0,810,812,1,0,0,0,811, - 809,1,0,0,0,812,814,5,377,0,0,813,805,1,0,0,0,813,814,1,0,0,0,814,97,1, - 0,0,0,815,816,3,312,156,0,816,99,1,0,0,0,817,818,7,13,0,0,818,822,7,14, - 0,0,819,820,7,15,0,0,820,822,7,16,0,0,821,817,1,0,0,0,821,819,1,0,0,0,822, - 101,1,0,0,0,823,824,5,216,0,0,824,825,5,12,0,0,825,826,3,312,156,0,826, - 827,3,314,157,0,827,103,1,0,0,0,828,829,5,216,0,0,829,831,5,25,0,0,830, - 832,3,316,158,0,831,830,1,0,0,0,831,832,1,0,0,0,832,833,1,0,0,0,833,835, - 3,312,156,0,834,836,3,70,35,0,835,834,1,0,0,0,835,836,1,0,0,0,836,837,1, - 0,0,0,837,838,3,314,157,0,838,105,1,0,0,0,839,841,5,216,0,0,840,842,5,149, - 0,0,841,840,1,0,0,0,841,842,1,0,0,0,842,843,1,0,0,0,843,845,5,165,0,0,844, - 846,3,316,158,0,845,844,1,0,0,0,845,846,1,0,0,0,846,847,1,0,0,0,847,849, - 3,312,156,0,848,850,3,52,26,0,849,848,1,0,0,0,849,850,1,0,0,0,850,852,1, - 0,0,0,851,853,3,70,35,0,852,851,1,0,0,0,852,853,1,0,0,0,853,854,1,0,0,0, - 854,855,5,183,0,0,855,856,3,156,78,0,856,107,1,0,0,0,857,861,5,216,0,0, - 858,862,5,149,0,0,859,860,5,149,0,0,860,862,5,334,0,0,861,858,1,0,0,0,861, - 859,1,0,0,0,861,862,1,0,0,0,862,863,1,0,0,0,863,865,5,250,0,0,864,866,3, - 316,158,0,865,864,1,0,0,0,865,866,1,0,0,0,866,867,1,0,0,0,867,868,3,312, - 156,0,868,869,5,183,0,0,869,872,3,304,152,0,870,871,5,272,0,0,871,873,7, - 17,0,0,872,870,1,0,0,0,872,873,1,0,0,0,873,875,1,0,0,0,874,876,3,110,55, - 0,875,874,1,0,0,0,875,876,1,0,0,0,876,109,1,0,0,0,877,878,5,353,0,0,878, - 879,5,63,0,0,879,885,3,112,56,0,880,881,5,380,0,0,881,882,5,63,0,0,882, - 884,3,112,56,0,883,880,1,0,0,0,884,887,1,0,0,0,885,883,1,0,0,0,885,886, - 1,0,0,0,886,111,1,0,0,0,887,885,1,0,0,0,888,889,5,397,0,0,889,113,1,0,0, - 0,890,891,5,178,0,0,891,893,5,337,0,0,892,894,3,318,159,0,893,892,1,0,0, - 0,893,894,1,0,0,0,894,895,1,0,0,0,895,901,3,312,156,0,896,902,3,116,58, - 0,897,902,3,118,59,0,898,902,3,120,60,0,899,902,3,122,61,0,900,902,3,124, - 62,0,901,896,1,0,0,0,901,897,1,0,0,0,901,898,1,0,0,0,901,899,1,0,0,0,901, - 900,1,0,0,0,902,115,1,0,0,0,903,905,5,118,0,0,904,906,3,312,156,0,905,904, - 1,0,0,0,905,906,1,0,0,0,906,907,1,0,0,0,907,908,5,343,0,0,908,909,3,312, - 156,0,909,117,1,0,0,0,910,911,5,326,0,0,911,912,3,320,160,0,912,119,1,0, - 0,0,913,914,5,4,0,0,914,915,5,212,0,0,915,916,3,84,42,0,916,917,5,313,0, - 0,917,918,5,68,0,0,918,920,3,52,26,0,919,921,3,126,63,0,920,919,1,0,0,0, - 920,921,1,0,0,0,921,121,1,0,0,0,922,923,5,234,0,0,923,924,5,212,0,0,924, - 925,3,84,42,0,925,123,1,0,0,0,926,927,5,4,0,0,927,928,5,347,0,0,928,929, - 3,52,26,0,929,125,1,0,0,0,930,931,5,294,0,0,931,932,5,34,0,0,932,127,1, - 0,0,0,933,934,5,178,0,0,934,935,5,165,0,0,935,939,3,312,156,0,936,940,3, - 116,58,0,937,938,5,183,0,0,938,940,3,156,78,0,939,936,1,0,0,0,939,937,1, - 0,0,0,940,129,1,0,0,0,941,942,5,178,0,0,942,943,5,25,0,0,943,944,3,312, - 156,0,944,945,3,118,59,0,945,131,1,0,0,0,946,950,5,178,0,0,947,951,5,149, - 0,0,948,949,5,149,0,0,949,951,5,334,0,0,950,947,1,0,0,0,950,948,1,0,0,0, - 950,951,1,0,0,0,951,952,1,0,0,0,952,954,5,250,0,0,953,955,3,318,159,0,954, - 953,1,0,0,0,954,955,1,0,0,0,955,956,1,0,0,0,956,957,3,312,156,0,957,958, - 5,183,0,0,958,961,3,304,152,0,959,960,5,272,0,0,960,962,7,17,0,0,961,959, - 1,0,0,0,961,962,1,0,0,0,962,133,1,0,0,0,963,964,5,234,0,0,964,966,5,12, - 0,0,965,967,3,318,159,0,966,965,1,0,0,0,966,967,1,0,0,0,967,968,1,0,0,0, - 968,969,3,312,156,0,969,135,1,0,0,0,970,972,5,234,0,0,971,973,5,149,0,0, - 972,971,1,0,0,0,972,973,1,0,0,0,973,974,1,0,0,0,974,976,5,337,0,0,975,977, - 3,318,159,0,976,975,1,0,0,0,976,977,1,0,0,0,977,978,1,0,0,0,978,979,3,312, - 156,0,979,137,1,0,0,0,980,981,5,234,0,0,981,983,5,25,0,0,982,984,3,318, - 159,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985,1,0,0,0,985,987,3,312,156, - 0,986,988,7,18,0,0,987,986,1,0,0,0,987,988,1,0,0,0,988,139,1,0,0,0,989, - 991,5,234,0,0,990,992,5,149,0,0,991,990,1,0,0,0,991,992,1,0,0,0,992,993, - 1,0,0,0,993,995,5,165,0,0,994,996,3,318,159,0,995,994,1,0,0,0,995,996,1, - 0,0,0,996,997,1,0,0,0,997,998,3,312,156,0,998,141,1,0,0,0,999,1003,5,234, - 0,0,1000,1004,5,149,0,0,1001,1002,5,149,0,0,1002,1004,5,334,0,0,1003,1000, - 1,0,0,0,1003,1001,1,0,0,0,1003,1004,1,0,0,0,1004,1005,1,0,0,0,1005,1007, - 5,250,0,0,1006,1008,3,318,159,0,1007,1006,1,0,0,0,1007,1008,1,0,0,0,1008, - 1009,1,0,0,0,1009,1010,3,312,156,0,1010,143,1,0,0,0,1011,1013,5,240,0,0, - 1012,1011,1,0,0,0,1012,1013,1,0,0,0,1013,1014,1,0,0,0,1014,1018,3,146,73, - 0,1015,1016,5,240,0,0,1016,1018,3,154,77,0,1017,1012,1,0,0,0,1017,1015, - 1,0,0,0,1018,145,1,0,0,0,1019,1020,5,263,0,0,1020,1021,7,19,0,0,1021,1030, - 3,312,156,0,1022,1024,3,148,74,0,1023,1022,1,0,0,0,1023,1024,1,0,0,0,1024, - 1026,1,0,0,0,1025,1027,3,52,26,0,1026,1025,1,0,0,0,1026,1027,1,0,0,0,1027, - 1028,1,0,0,0,1028,1031,3,156,78,0,1029,1031,3,150,75,0,1030,1023,1,0,0, - 0,1030,1029,1,0,0,0,1031,147,1,0,0,0,1032,1033,5,307,0,0,1033,1034,3,320, - 160,0,1034,149,1,0,0,0,1035,1036,5,355,0,0,1036,1041,3,152,76,0,1037,1038, - 5,380,0,0,1038,1040,3,152,76,0,1039,1037,1,0,0,0,1040,1043,1,0,0,0,1041, - 1039,1,0,0,0,1041,1042,1,0,0,0,1042,151,1,0,0,0,1043,1041,1,0,0,0,1044, - 1045,5,376,0,0,1045,1050,3,338,169,0,1046,1047,5,380,0,0,1047,1049,3,338, - 169,0,1048,1046,1,0,0,0,1049,1052,1,0,0,0,1050,1048,1,0,0,0,1050,1051,1, - 0,0,0,1051,1053,1,0,0,0,1052,1050,1,0,0,0,1053,1054,5,377,0,0,1054,153, - 1,0,0,0,1055,1056,5,143,0,0,1056,1057,5,326,0,0,1057,1061,5,186,0,0,1058, - 1059,3,146,73,0,1059,1060,5,381,0,0,1060,1062,1,0,0,0,1061,1058,1,0,0,0, - 1062,1063,1,0,0,0,1063,1061,1,0,0,0,1063,1064,1,0,0,0,1064,1065,1,0,0,0, - 1065,1066,5,237,0,0,1066,155,1,0,0,0,1067,1068,6,78,-1,0,1068,1091,3,158, - 79,0,1069,1070,3,160,80,0,1070,1071,3,156,78,5,1071,1091,1,0,0,0,1072,1073, - 5,376,0,0,1073,1074,3,156,78,0,1074,1075,5,377,0,0,1075,1091,1,0,0,0,1076, - 1078,3,168,84,0,1077,1079,3,230,115,0,1078,1077,1,0,0,0,1078,1079,1,0,0, - 0,1079,1081,1,0,0,0,1080,1082,3,234,117,0,1081,1080,1,0,0,0,1081,1082,1, - 0,0,0,1082,1091,1,0,0,0,1083,1085,3,166,83,0,1084,1086,3,230,115,0,1085, - 1084,1,0,0,0,1085,1086,1,0,0,0,1086,1088,1,0,0,0,1087,1089,3,234,117,0, - 1088,1087,1,0,0,0,1088,1089,1,0,0,0,1089,1091,1,0,0,0,1090,1067,1,0,0,0, - 1090,1069,1,0,0,0,1090,1072,1,0,0,0,1090,1076,1,0,0,0,1090,1083,1,0,0,0, - 1091,1106,1,0,0,0,1092,1093,10,3,0,0,1093,1095,7,20,0,0,1094,1096,5,176, - 0,0,1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1097,1,0,0,0,1097,1099,3,156, - 78,0,1098,1100,3,230,115,0,1099,1098,1,0,0,0,1099,1100,1,0,0,0,1100,1102, - 1,0,0,0,1101,1103,3,234,117,0,1102,1101,1,0,0,0,1102,1103,1,0,0,0,1103, - 1105,1,0,0,0,1104,1092,1,0,0,0,1105,1108,1,0,0,0,1106,1104,1,0,0,0,1106, - 1107,1,0,0,0,1107,157,1,0,0,0,1108,1106,1,0,0,0,1109,1110,5,355,0,0,1110, - 1115,3,258,129,0,1111,1112,5,380,0,0,1112,1114,3,258,129,0,1113,1111,1, - 0,0,0,1114,1117,1,0,0,0,1115,1113,1,0,0,0,1115,1116,1,0,0,0,1116,159,1, - 0,0,0,1117,1115,1,0,0,0,1118,1119,5,361,0,0,1119,1124,3,162,81,0,1120,1121, - 5,380,0,0,1121,1123,3,162,81,0,1122,1120,1,0,0,0,1123,1126,1,0,0,0,1124, - 1122,1,0,0,0,1124,1125,1,0,0,0,1125,161,1,0,0,0,1126,1124,1,0,0,0,1127, - 1139,3,164,82,0,1128,1129,5,376,0,0,1129,1134,3,50,25,0,1130,1131,5,380, - 0,0,1131,1133,3,50,25,0,1132,1130,1,0,0,0,1133,1136,1,0,0,0,1134,1132,1, - 0,0,0,1134,1135,1,0,0,0,1135,1137,1,0,0,0,1136,1134,1,0,0,0,1137,1138,5, - 377,0,0,1138,1140,1,0,0,0,1139,1128,1,0,0,0,1139,1140,1,0,0,0,1140,1141, - 1,0,0,0,1141,1142,5,183,0,0,1142,1143,5,376,0,0,1143,1144,3,156,78,0,1144, - 1145,5,377,0,0,1145,163,1,0,0,0,1146,1147,3,304,152,0,1147,165,1,0,0,0, - 1148,1149,3,168,84,0,1149,1151,3,174,87,0,1150,1152,3,204,102,0,1151,1150, - 1,0,0,0,1151,1152,1,0,0,0,1152,1154,1,0,0,0,1153,1155,3,206,103,0,1154, - 1153,1,0,0,0,1154,1155,1,0,0,0,1155,1157,1,0,0,0,1156,1158,3,220,110,0, - 1157,1156,1,0,0,0,1157,1158,1,0,0,0,1158,1160,1,0,0,0,1159,1161,3,222,111, - 0,1160,1159,1,0,0,0,1160,1161,1,0,0,0,1161,1167,1,0,0,0,1162,1163,3,168, - 84,0,1163,1164,3,174,87,0,1164,1165,3,228,114,0,1165,1167,1,0,0,0,1166, - 1148,1,0,0,0,1166,1162,1,0,0,0,1167,167,1,0,0,0,1168,1170,5,325,0,0,1169, - 1171,3,346,173,0,1170,1169,1,0,0,0,1170,1171,1,0,0,0,1171,1181,1,0,0,0, - 1172,1182,5,387,0,0,1173,1178,3,170,85,0,1174,1175,5,380,0,0,1175,1177, - 3,170,85,0,1176,1174,1,0,0,0,1177,1180,1,0,0,0,1178,1176,1,0,0,0,1178,1179, - 1,0,0,0,1179,1182,1,0,0,0,1180,1178,1,0,0,0,1181,1172,1,0,0,0,1181,1173, - 1,0,0,0,1182,169,1,0,0,0,1183,1192,3,172,86,0,1184,1189,3,258,129,0,1185, - 1187,5,183,0,0,1186,1185,1,0,0,0,1186,1187,1,0,0,0,1187,1188,1,0,0,0,1188, - 1190,3,258,129,0,1189,1186,1,0,0,0,1189,1190,1,0,0,0,1190,1192,1,0,0,0, - 1191,1183,1,0,0,0,1191,1184,1,0,0,0,1192,171,1,0,0,0,1193,1194,3,268,134, - 0,1194,1195,5,305,0,0,1195,1196,3,226,113,0,1196,1197,5,183,0,0,1197,1198, - 3,304,152,0,1198,1206,1,0,0,0,1199,1200,3,268,134,0,1200,1201,5,305,0,0, - 1201,1202,3,296,148,0,1202,1203,5,183,0,0,1203,1204,3,304,152,0,1204,1206, - 1,0,0,0,1205,1193,1,0,0,0,1205,1199,1,0,0,0,1206,173,1,0,0,0,1207,1208, - 5,248,0,0,1208,1209,3,176,88,0,1209,175,1,0,0,0,1210,1211,6,88,-1,0,1211, - 1216,3,178,89,0,1212,1213,5,380,0,0,1213,1215,3,178,89,0,1214,1212,1,0, - 0,0,1215,1218,1,0,0,0,1216,1214,1,0,0,0,1216,1217,1,0,0,0,1217,1222,1,0, - 0,0,1218,1216,1,0,0,0,1219,1222,3,188,94,0,1220,1222,3,190,95,0,1221,1210, - 1,0,0,0,1221,1219,1,0,0,0,1221,1220,1,0,0,0,1222,1244,1,0,0,0,1223,1224, - 10,3,0,0,1224,1225,5,217,0,0,1225,1226,5,270,0,0,1226,1243,3,176,88,4,1227, - 1229,10,4,0,0,1228,1230,5,290,0,0,1229,1228,1,0,0,0,1229,1230,1,0,0,0,1230, - 1232,1,0,0,0,1231,1233,7,21,0,0,1232,1231,1,0,0,0,1232,1233,1,0,0,0,1233, - 1235,1,0,0,0,1234,1236,5,304,0,0,1235,1234,1,0,0,0,1235,1236,1,0,0,0,1236, - 1237,1,0,0,0,1237,1238,5,270,0,0,1238,1240,3,176,88,0,1239,1241,3,202,101, - 0,1240,1239,1,0,0,0,1240,1241,1,0,0,0,1241,1243,1,0,0,0,1242,1223,1,0,0, - 0,1242,1227,1,0,0,0,1243,1246,1,0,0,0,1244,1242,1,0,0,0,1244,1245,1,0,0, - 0,1245,177,1,0,0,0,1246,1244,1,0,0,0,1247,1249,3,180,90,0,1248,1250,3,294, - 147,0,1249,1248,1,0,0,0,1249,1250,1,0,0,0,1250,179,1,0,0,0,1251,1253,5, - 337,0,0,1252,1251,1,0,0,0,1252,1253,1,0,0,0,1253,1254,1,0,0,0,1254,1256, - 3,182,91,0,1255,1257,3,184,92,0,1256,1255,1,0,0,0,1256,1257,1,0,0,0,1257, - 1262,1,0,0,0,1258,1260,5,183,0,0,1259,1258,1,0,0,0,1259,1260,1,0,0,0,1260, - 1261,1,0,0,0,1261,1263,3,274,137,0,1262,1259,1,0,0,0,1262,1263,1,0,0,0, - 1263,1293,1,0,0,0,1264,1265,5,273,0,0,1265,1266,5,337,0,0,1266,1267,5,376, - 0,0,1267,1268,3,270,135,0,1268,1269,5,376,0,0,1269,1274,3,258,129,0,1270, - 1271,5,380,0,0,1271,1273,3,258,129,0,1272,1270,1,0,0,0,1273,1276,1,0,0, - 0,1274,1272,1,0,0,0,1274,1275,1,0,0,0,1275,1277,1,0,0,0,1276,1274,1,0,0, - 0,1277,1278,5,377,0,0,1278,1279,5,377,0,0,1279,1293,1,0,0,0,1280,1282,5, - 273,0,0,1281,1280,1,0,0,0,1281,1282,1,0,0,0,1282,1283,1,0,0,0,1283,1284, - 5,376,0,0,1284,1285,3,156,78,0,1285,1286,5,377,0,0,1286,1293,1,0,0,0,1287, - 1288,5,349,0,0,1288,1289,5,376,0,0,1289,1290,3,258,129,0,1290,1291,5,377, - 0,0,1291,1293,1,0,0,0,1292,1252,1,0,0,0,1292,1264,1,0,0,0,1292,1281,1,0, - 0,0,1292,1287,1,0,0,0,1293,181,1,0,0,0,1294,1295,3,312,156,0,1295,183,1, - 0,0,0,1296,1297,5,247,0,0,1297,1298,5,335,0,0,1298,1299,5,183,0,0,1299, - 1300,5,297,0,0,1300,1301,3,186,93,0,1301,185,1,0,0,0,1302,1303,3,258,129, - 0,1303,187,1,0,0,0,1304,1305,5,376,0,0,1305,1306,3,150,75,0,1306,1307,5, - 377,0,0,1307,1308,3,294,147,0,1308,189,1,0,0,0,1309,1310,5,337,0,0,1310, - 1311,5,376,0,0,1311,1312,3,192,96,0,1312,1313,5,377,0,0,1313,191,1,0,0, - 0,1314,1315,3,194,97,0,1315,1316,5,376,0,0,1316,1321,3,196,98,0,1317,1318, - 5,380,0,0,1318,1320,3,196,98,0,1319,1317,1,0,0,0,1320,1323,1,0,0,0,1321, - 1319,1,0,0,0,1321,1322,1,0,0,0,1322,1324,1,0,0,0,1323,1321,1,0,0,0,1324, - 1325,5,377,0,0,1325,193,1,0,0,0,1326,1327,7,22,0,0,1327,195,1,0,0,0,1328, - 1329,5,337,0,0,1329,1344,3,218,109,0,1330,1344,3,200,100,0,1331,1344,3, - 278,139,0,1332,1333,5,24,0,0,1333,1334,5,396,0,0,1334,1335,5,337,0,0,1335, - 1344,3,218,109,0,1336,1337,5,150,0,0,1337,1338,5,396,0,0,1338,1344,3,200, - 100,0,1339,1340,3,198,99,0,1340,1341,5,396,0,0,1341,1342,3,278,139,0,1342, - 1344,1,0,0,0,1343,1328,1,0,0,0,1343,1330,1,0,0,0,1343,1331,1,0,0,0,1343, - 1332,1,0,0,0,1343,1336,1,0,0,0,1343,1339,1,0,0,0,1344,197,1,0,0,0,1345, - 1346,7,23,0,0,1346,199,1,0,0,0,1347,1348,5,31,0,0,1348,1349,5,376,0,0,1349, - 1350,3,312,156,0,1350,1351,5,377,0,0,1351,201,1,0,0,0,1352,1353,5,299,0, - 0,1353,1367,3,260,130,0,1354,1355,5,353,0,0,1355,1356,5,376,0,0,1356,1361, - 3,312,156,0,1357,1358,5,380,0,0,1358,1360,3,312,156,0,1359,1357,1,0,0,0, - 1360,1363,1,0,0,0,1361,1359,1,0,0,0,1361,1362,1,0,0,0,1362,1364,1,0,0,0, - 1363,1361,1,0,0,0,1364,1365,5,377,0,0,1365,1367,1,0,0,0,1366,1352,1,0,0, - 0,1366,1354,1,0,0,0,1367,203,1,0,0,0,1368,1369,5,359,0,0,1369,1370,3,260, - 130,0,1370,205,1,0,0,0,1371,1372,5,253,0,0,1372,1373,5,194,0,0,1373,1378, - 3,208,104,0,1374,1375,5,380,0,0,1375,1377,3,208,104,0,1376,1374,1,0,0,0, - 1377,1380,1,0,0,0,1378,1376,1,0,0,0,1378,1379,1,0,0,0,1379,207,1,0,0,0, - 1380,1378,1,0,0,0,1381,1421,3,258,129,0,1382,1421,3,214,107,0,1383,1384, - 5,376,0,0,1384,1421,5,377,0,0,1385,1386,5,376,0,0,1386,1391,3,258,129,0, - 1387,1388,5,380,0,0,1388,1390,3,258,129,0,1389,1387,1,0,0,0,1390,1393,1, - 0,0,0,1391,1389,1,0,0,0,1391,1392,1,0,0,0,1392,1394,1,0,0,0,1393,1391,1, - 0,0,0,1394,1395,5,377,0,0,1395,1421,1,0,0,0,1396,1397,3,212,106,0,1397, - 1398,5,376,0,0,1398,1403,3,258,129,0,1399,1400,5,380,0,0,1400,1402,3,258, - 129,0,1401,1399,1,0,0,0,1402,1405,1,0,0,0,1403,1401,1,0,0,0,1403,1404,1, - 0,0,0,1404,1406,1,0,0,0,1405,1403,1,0,0,0,1406,1407,5,377,0,0,1407,1421, - 1,0,0,0,1408,1409,3,210,105,0,1409,1410,5,376,0,0,1410,1415,3,208,104,0, - 1411,1412,5,380,0,0,1412,1414,3,208,104,0,1413,1411,1,0,0,0,1414,1417,1, - 0,0,0,1415,1413,1,0,0,0,1415,1416,1,0,0,0,1416,1418,1,0,0,0,1417,1415,1, - 0,0,0,1418,1419,5,377,0,0,1419,1421,1,0,0,0,1420,1381,1,0,0,0,1420,1382, - 1,0,0,0,1420,1383,1,0,0,0,1420,1385,1,0,0,0,1420,1396,1,0,0,0,1420,1408, - 1,0,0,0,1421,209,1,0,0,0,1422,1423,5,254,0,0,1423,1424,5,136,0,0,1424,211, - 1,0,0,0,1425,1426,7,24,0,0,1426,213,1,0,0,0,1427,1428,3,216,108,0,1428, - 1429,5,376,0,0,1429,1430,3,218,109,0,1430,1431,5,380,0,0,1431,1432,3,278, - 139,0,1432,1433,5,377,0,0,1433,215,1,0,0,0,1434,1435,7,25,0,0,1435,217, - 1,0,0,0,1436,1437,3,312,156,0,1437,219,1,0,0,0,1438,1439,5,256,0,0,1439, - 1440,3,260,130,0,1440,221,1,0,0,0,1441,1442,5,360,0,0,1442,1447,3,224,112, - 0,1443,1444,5,380,0,0,1444,1446,3,224,112,0,1445,1443,1,0,0,0,1446,1449, - 1,0,0,0,1447,1445,1,0,0,0,1447,1448,1,0,0,0,1448,223,1,0,0,0,1449,1447, - 1,0,0,0,1450,1451,3,296,148,0,1451,1452,5,183,0,0,1452,1453,3,226,113,0, - 1453,225,1,0,0,0,1454,1456,3,296,148,0,1455,1454,1,0,0,0,1455,1456,1,0, - 0,0,1456,1457,1,0,0,0,1457,1459,5,376,0,0,1458,1460,3,236,118,0,1459,1458, - 1,0,0,0,1459,1460,1,0,0,0,1460,1462,1,0,0,0,1461,1463,3,230,115,0,1462, - 1461,1,0,0,0,1462,1463,1,0,0,0,1463,1465,1,0,0,0,1464,1466,3,252,126,0, - 1465,1464,1,0,0,0,1465,1466,1,0,0,0,1466,1467,1,0,0,0,1467,1468,5,377,0, - 0,1468,227,1,0,0,0,1469,1470,5,280,0,0,1470,1472,5,376,0,0,1471,1473,3, - 236,118,0,1472,1471,1,0,0,0,1472,1473,1,0,0,0,1473,1475,1,0,0,0,1474,1476, - 3,230,115,0,1475,1474,1,0,0,0,1475,1476,1,0,0,0,1476,1478,1,0,0,0,1477, - 1479,3,240,120,0,1478,1477,1,0,0,0,1478,1479,1,0,0,0,1479,1481,1,0,0,0, - 1480,1482,3,246,123,0,1481,1480,1,0,0,0,1481,1482,1,0,0,0,1482,1484,1,0, - 0,0,1483,1485,3,248,124,0,1484,1483,1,0,0,0,1484,1485,1,0,0,0,1485,1487, - 1,0,0,0,1486,1488,3,242,121,0,1487,1486,1,0,0,0,1487,1488,1,0,0,0,1488, - 1489,1,0,0,0,1489,1490,3,250,125,0,1490,1495,5,377,0,0,1491,1493,5,183, - 0,0,1492,1491,1,0,0,0,1492,1493,1,0,0,0,1493,1494,1,0,0,0,1494,1496,3,304, - 152,0,1495,1492,1,0,0,0,1495,1496,1,0,0,0,1496,229,1,0,0,0,1497,1498,5, - 302,0,0,1498,1499,5,194,0,0,1499,1504,3,232,116,0,1500,1501,5,380,0,0,1501, - 1503,3,232,116,0,1502,1500,1,0,0,0,1503,1506,1,0,0,0,1504,1502,1,0,0,0, - 1504,1505,1,0,0,0,1505,231,1,0,0,0,1506,1504,1,0,0,0,1507,1509,3,258,129, - 0,1508,1510,7,26,0,0,1509,1508,1,0,0,0,1509,1510,1,0,0,0,1510,1513,1,0, - 0,0,1511,1512,5,86,0,0,1512,1514,7,27,0,0,1513,1511,1,0,0,0,1513,1514,1, - 0,0,0,1514,233,1,0,0,0,1515,1518,5,277,0,0,1516,1519,5,176,0,0,1517,1519, - 3,258,129,0,1518,1516,1,0,0,0,1518,1517,1,0,0,0,1519,235,1,0,0,0,1520,1521, - 5,307,0,0,1521,1522,5,194,0,0,1522,1527,3,258,129,0,1523,1524,5,380,0,0, - 1524,1526,3,258,129,0,1525,1523,1,0,0,0,1526,1529,1,0,0,0,1527,1525,1,0, - 0,0,1527,1528,1,0,0,0,1528,237,1,0,0,0,1529,1527,1,0,0,0,1530,1547,5,387, - 0,0,1531,1547,5,390,0,0,1532,1547,5,395,0,0,1533,1534,5,378,0,0,1534,1535, - 5,398,0,0,1535,1536,5,380,0,0,1536,1537,5,398,0,0,1537,1547,5,379,0,0,1538, - 1539,5,378,0,0,1539,1540,5,398,0,0,1540,1541,5,380,0,0,1541,1547,5,379, - 0,0,1542,1543,5,378,0,0,1543,1544,5,380,0,0,1544,1545,5,398,0,0,1545,1547, - 5,379,0,0,1546,1530,1,0,0,0,1546,1531,1,0,0,0,1546,1532,1,0,0,0,1546,1533, - 1,0,0,0,1546,1538,1,0,0,0,1546,1542,1,0,0,0,1547,239,1,0,0,0,1548,1549, - 5,281,0,0,1549,1554,3,170,85,0,1550,1551,5,380,0,0,1551,1553,3,170,85,0, - 1552,1550,1,0,0,0,1553,1556,1,0,0,0,1554,1552,1,0,0,0,1554,1555,1,0,0,0, - 1555,241,1,0,0,0,1556,1554,1,0,0,0,1557,1558,5,308,0,0,1558,1560,5,376, - 0,0,1559,1561,3,244,122,0,1560,1559,1,0,0,0,1561,1562,1,0,0,0,1562,1560, - 1,0,0,0,1562,1563,1,0,0,0,1563,1564,1,0,0,0,1564,1566,5,377,0,0,1565,1567, - 3,256,128,0,1566,1565,1,0,0,0,1566,1567,1,0,0,0,1567,243,1,0,0,0,1568,1570, - 3,306,153,0,1569,1571,3,238,119,0,1570,1569,1,0,0,0,1570,1571,1,0,0,0,1571, - 245,1,0,0,0,1572,1573,5,176,0,0,1573,1574,5,323,0,0,1574,1575,5,309,0,0, - 1575,1581,5,279,0,0,1576,1577,5,300,0,0,1577,1578,5,322,0,0,1578,1579,5, - 309,0,0,1579,1581,5,279,0,0,1580,1572,1,0,0,0,1580,1576,1,0,0,0,1581,247, - 1,0,0,0,1582,1583,5,6,0,0,1583,1584,5,279,0,0,1584,1585,5,328,0,0,1585, - 1586,5,97,0,0,1586,1587,5,72,0,0,1587,1607,5,322,0,0,1588,1589,5,6,0,0, - 1589,1590,5,279,0,0,1590,1591,5,328,0,0,1591,1592,5,343,0,0,1592,1593,5, - 291,0,0,1593,1607,5,322,0,0,1594,1595,5,6,0,0,1595,1596,5,279,0,0,1596, - 1597,5,328,0,0,1597,1598,5,343,0,0,1598,1599,5,72,0,0,1599,1607,3,306,153, - 0,1600,1601,5,6,0,0,1601,1602,5,279,0,0,1602,1603,5,328,0,0,1603,1604,5, - 343,0,0,1604,1605,5,44,0,0,1605,1607,3,306,153,0,1606,1582,1,0,0,0,1606, - 1588,1,0,0,0,1606,1594,1,0,0,0,1606,1600,1,0,0,0,1607,249,1,0,0,0,1608, - 1609,5,229,0,0,1609,1614,3,170,85,0,1610,1611,5,380,0,0,1611,1613,3,170, - 85,0,1612,1610,1,0,0,0,1613,1616,1,0,0,0,1614,1612,1,0,0,0,1614,1615,1, - 0,0,0,1615,251,1,0,0,0,1616,1614,1,0,0,0,1617,1618,5,314,0,0,1618,1619, - 5,187,0,0,1619,1620,3,278,139,0,1620,1621,3,254,127,0,1621,1627,1,0,0,0, - 1622,1623,5,323,0,0,1623,1624,5,187,0,0,1624,1625,5,398,0,0,1625,1627,3, - 254,127,0,1626,1617,1,0,0,0,1626,1622,1,0,0,0,1627,253,1,0,0,0,1628,1629, - 5,101,0,0,1629,1630,5,179,0,0,1630,1631,5,219,0,0,1631,1632,5,322,0,0,1632, - 255,1,0,0,0,1633,1634,5,362,0,0,1634,1635,3,278,139,0,1635,257,1,0,0,0, - 1636,1637,3,260,130,0,1637,259,1,0,0,0,1638,1639,6,130,-1,0,1639,1640,5, - 294,0,0,1640,1651,3,260,130,5,1641,1642,5,241,0,0,1642,1643,5,376,0,0,1643, - 1644,3,156,78,0,1644,1645,5,377,0,0,1645,1651,1,0,0,0,1646,1648,3,266,133, - 0,1647,1649,3,262,131,0,1648,1647,1,0,0,0,1648,1649,1,0,0,0,1649,1651,1, - 0,0,0,1650,1638,1,0,0,0,1650,1641,1,0,0,0,1650,1646,1,0,0,0,1651,1660,1, - 0,0,0,1652,1653,10,2,0,0,1653,1654,5,179,0,0,1654,1659,3,260,130,3,1655, - 1656,10,1,0,0,1656,1657,5,301,0,0,1657,1659,3,260,130,2,1658,1652,1,0,0, - 0,1658,1655,1,0,0,0,1659,1662,1,0,0,0,1660,1658,1,0,0,0,1660,1661,1,0,0, - 0,1661,261,1,0,0,0,1662,1660,1,0,0,0,1663,1665,5,294,0,0,1664,1663,1,0, - 0,0,1664,1665,1,0,0,0,1665,1666,1,0,0,0,1666,1667,5,187,0,0,1667,1668,3, - 266,133,0,1668,1669,5,179,0,0,1669,1670,3,266,133,0,1670,1747,1,0,0,0,1671, - 1673,5,294,0,0,1672,1671,1,0,0,0,1672,1673,1,0,0,0,1673,1674,1,0,0,0,1674, - 1675,5,259,0,0,1675,1676,5,376,0,0,1676,1681,3,258,129,0,1677,1678,5,380, - 0,0,1678,1680,3,258,129,0,1679,1677,1,0,0,0,1680,1683,1,0,0,0,1681,1679, - 1,0,0,0,1681,1682,1,0,0,0,1682,1684,1,0,0,0,1683,1681,1,0,0,0,1684,1685, - 5,377,0,0,1685,1747,1,0,0,0,1686,1688,5,294,0,0,1687,1686,1,0,0,0,1687, - 1688,1,0,0,0,1688,1689,1,0,0,0,1689,1690,5,259,0,0,1690,1691,5,376,0,0, - 1691,1692,3,156,78,0,1692,1693,5,377,0,0,1693,1747,1,0,0,0,1694,1695,5, - 241,0,0,1695,1696,5,376,0,0,1696,1697,3,156,78,0,1697,1698,5,377,0,0,1698, - 1747,1,0,0,0,1699,1701,5,294,0,0,1700,1699,1,0,0,0,1700,1701,1,0,0,0,1701, - 1702,1,0,0,0,1702,1703,5,319,0,0,1703,1747,3,266,133,0,1704,1706,5,294, - 0,0,1705,1704,1,0,0,0,1705,1706,1,0,0,0,1706,1707,1,0,0,0,1707,1708,5,276, - 0,0,1708,1722,7,28,0,0,1709,1710,5,376,0,0,1710,1723,5,377,0,0,1711,1712, - 5,376,0,0,1712,1717,3,258,129,0,1713,1714,5,380,0,0,1714,1716,3,258,129, - 0,1715,1713,1,0,0,0,1716,1719,1,0,0,0,1717,1715,1,0,0,0,1717,1718,1,0,0, - 0,1718,1720,1,0,0,0,1719,1717,1,0,0,0,1720,1721,5,377,0,0,1721,1723,1,0, - 0,0,1722,1709,1,0,0,0,1722,1711,1,0,0,0,1723,1747,1,0,0,0,1724,1726,5,294, - 0,0,1725,1724,1,0,0,0,1725,1726,1,0,0,0,1726,1727,1,0,0,0,1727,1728,5,276, - 0,0,1728,1747,3,266,133,0,1729,1731,5,269,0,0,1730,1732,5,294,0,0,1731, - 1730,1,0,0,0,1731,1732,1,0,0,0,1732,1733,1,0,0,0,1733,1747,5,295,0,0,1734, - 1736,5,269,0,0,1735,1737,5,294,0,0,1736,1735,1,0,0,0,1736,1737,1,0,0,0, - 1737,1738,1,0,0,0,1738,1747,7,29,0,0,1739,1741,5,269,0,0,1740,1742,5,294, - 0,0,1741,1740,1,0,0,0,1741,1742,1,0,0,0,1742,1743,1,0,0,0,1743,1744,5,232, - 0,0,1744,1745,5,248,0,0,1745,1747,3,266,133,0,1746,1664,1,0,0,0,1746,1672, - 1,0,0,0,1746,1687,1,0,0,0,1746,1694,1,0,0,0,1746,1700,1,0,0,0,1746,1705, - 1,0,0,0,1746,1725,1,0,0,0,1746,1729,1,0,0,0,1746,1734,1,0,0,0,1746,1739, - 1,0,0,0,1747,263,1,0,0,0,1748,1750,5,294,0,0,1749,1748,1,0,0,0,1749,1750, - 1,0,0,0,1750,1751,1,0,0,0,1751,1752,5,276,0,0,1752,1766,7,28,0,0,1753,1754, - 5,376,0,0,1754,1767,5,377,0,0,1755,1756,5,376,0,0,1756,1761,3,258,129,0, - 1757,1758,5,380,0,0,1758,1760,3,258,129,0,1759,1757,1,0,0,0,1760,1763,1, - 0,0,0,1761,1759,1,0,0,0,1761,1762,1,0,0,0,1762,1764,1,0,0,0,1763,1761,1, - 0,0,0,1764,1765,5,377,0,0,1765,1767,1,0,0,0,1766,1753,1,0,0,0,1766,1755, - 1,0,0,0,1767,1774,1,0,0,0,1768,1770,5,294,0,0,1769,1768,1,0,0,0,1769,1770, - 1,0,0,0,1770,1771,1,0,0,0,1771,1772,5,276,0,0,1772,1774,3,266,133,0,1773, - 1749,1,0,0,0,1773,1769,1,0,0,0,1774,265,1,0,0,0,1775,1776,6,133,-1,0,1776, - 1780,3,268,134,0,1777,1778,7,30,0,0,1778,1780,3,266,133,7,1779,1775,1,0, - 0,0,1779,1777,1,0,0,0,1780,1802,1,0,0,0,1781,1782,10,6,0,0,1782,1783,7, - 31,0,0,1783,1801,3,266,133,7,1784,1785,10,5,0,0,1785,1786,7,32,0,0,1786, - 1801,3,266,133,6,1787,1788,10,4,0,0,1788,1789,5,371,0,0,1789,1801,3,266, - 133,5,1790,1791,10,3,0,0,1791,1792,5,372,0,0,1792,1801,3,266,133,4,1793, - 1794,10,2,0,0,1794,1795,5,370,0,0,1795,1801,3,266,133,3,1796,1797,10,1, - 0,0,1797,1798,3,330,165,0,1798,1799,3,266,133,2,1799,1801,1,0,0,0,1800, - 1781,1,0,0,0,1800,1784,1,0,0,0,1800,1787,1,0,0,0,1800,1790,1,0,0,0,1800, - 1793,1,0,0,0,1800,1796,1,0,0,0,1801,1804,1,0,0,0,1802,1800,1,0,0,0,1802, - 1803,1,0,0,0,1803,267,1,0,0,0,1804,1802,1,0,0,0,1805,1806,6,134,-1,0,1806, - 1808,5,198,0,0,1807,1809,3,310,155,0,1808,1807,1,0,0,0,1809,1810,1,0,0, - 0,1810,1808,1,0,0,0,1810,1811,1,0,0,0,1811,1814,1,0,0,0,1812,1813,5,236, - 0,0,1813,1815,3,258,129,0,1814,1812,1,0,0,0,1814,1815,1,0,0,0,1815,1816, - 1,0,0,0,1816,1817,5,237,0,0,1817,1897,1,0,0,0,1818,1819,5,198,0,0,1819, - 1821,3,258,129,0,1820,1822,3,310,155,0,1821,1820,1,0,0,0,1822,1823,1,0, - 0,0,1823,1821,1,0,0,0,1823,1824,1,0,0,0,1824,1827,1,0,0,0,1825,1826,5,236, - 0,0,1826,1828,3,258,129,0,1827,1825,1,0,0,0,1827,1828,1,0,0,0,1828,1829, - 1,0,0,0,1829,1830,5,237,0,0,1830,1897,1,0,0,0,1831,1832,5,199,0,0,1832, - 1833,5,376,0,0,1833,1834,3,258,129,0,1834,1835,5,183,0,0,1835,1836,3,54, - 27,0,1836,1837,5,377,0,0,1837,1897,1,0,0,0,1838,1839,5,44,0,0,1839,1840, - 5,376,0,0,1840,1843,3,258,129,0,1841,1842,5,59,0,0,1842,1844,5,86,0,0,1843, - 1841,1,0,0,0,1843,1844,1,0,0,0,1844,1845,1,0,0,0,1845,1846,5,377,0,0,1846, - 1897,1,0,0,0,1847,1848,5,72,0,0,1848,1849,5,376,0,0,1849,1852,3,258,129, - 0,1850,1851,5,59,0,0,1851,1853,5,86,0,0,1852,1850,1,0,0,0,1852,1853,1,0, - 0,0,1853,1854,1,0,0,0,1854,1855,5,377,0,0,1855,1897,1,0,0,0,1856,1857,5, - 312,0,0,1857,1858,5,376,0,0,1858,1859,3,266,133,0,1859,1860,5,259,0,0,1860, - 1861,3,266,133,0,1861,1862,5,377,0,0,1862,1897,1,0,0,0,1863,1897,3,338, - 169,0,1864,1897,5,387,0,0,1865,1866,3,312,156,0,1866,1867,5,373,0,0,1867, - 1868,5,387,0,0,1868,1897,1,0,0,0,1869,1870,5,376,0,0,1870,1871,3,156,78, - 0,1871,1872,5,377,0,0,1872,1897,1,0,0,0,1873,1874,3,270,135,0,1874,1886, - 5,376,0,0,1875,1877,3,346,173,0,1876,1875,1,0,0,0,1876,1877,1,0,0,0,1877, - 1878,1,0,0,0,1878,1883,3,258,129,0,1879,1880,5,380,0,0,1880,1882,3,258, - 129,0,1881,1879,1,0,0,0,1882,1885,1,0,0,0,1883,1881,1,0,0,0,1883,1884,1, - 0,0,0,1884,1887,1,0,0,0,1885,1883,1,0,0,0,1886,1876,1,0,0,0,1886,1887,1, - 0,0,0,1887,1888,1,0,0,0,1888,1889,5,377,0,0,1889,1897,1,0,0,0,1890,1897, - 3,304,152,0,1891,1897,3,272,136,0,1892,1893,5,376,0,0,1893,1894,3,258,129, - 0,1894,1895,5,377,0,0,1895,1897,1,0,0,0,1896,1805,1,0,0,0,1896,1818,1,0, - 0,0,1896,1831,1,0,0,0,1896,1838,1,0,0,0,1896,1847,1,0,0,0,1896,1856,1,0, - 0,0,1896,1863,1,0,0,0,1896,1864,1,0,0,0,1896,1865,1,0,0,0,1896,1869,1,0, - 0,0,1896,1873,1,0,0,0,1896,1890,1,0,0,0,1896,1891,1,0,0,0,1896,1892,1,0, - 0,0,1897,1905,1,0,0,0,1898,1899,10,4,0,0,1899,1900,5,374,0,0,1900,1901, - 3,266,133,0,1901,1902,5,375,0,0,1902,1904,1,0,0,0,1903,1898,1,0,0,0,1904, - 1907,1,0,0,0,1905,1903,1,0,0,0,1905,1906,1,0,0,0,1906,269,1,0,0,0,1907, - 1905,1,0,0,0,1908,1912,3,348,174,0,1909,1912,3,350,175,0,1910,1912,3,312, - 156,0,1911,1908,1,0,0,0,1911,1909,1,0,0,0,1911,1910,1,0,0,0,1912,271,1, - 0,0,0,1913,1914,3,312,156,0,1914,273,1,0,0,0,1915,1916,3,304,152,0,1916, - 275,1,0,0,0,1917,1920,3,304,152,0,1918,1920,3,272,136,0,1919,1917,1,0,0, - 0,1919,1918,1,0,0,0,1920,277,1,0,0,0,1921,1924,5,267,0,0,1922,1925,3,280, - 140,0,1923,1925,3,284,142,0,1924,1922,1,0,0,0,1924,1923,1,0,0,0,1924,1925, - 1,0,0,0,1925,279,1,0,0,0,1926,1928,3,282,141,0,1927,1929,3,286,143,0,1928, - 1927,1,0,0,0,1928,1929,1,0,0,0,1929,281,1,0,0,0,1930,1931,3,288,144,0,1931, - 1932,3,290,145,0,1932,1934,1,0,0,0,1933,1930,1,0,0,0,1934,1935,1,0,0,0, - 1935,1933,1,0,0,0,1935,1936,1,0,0,0,1936,283,1,0,0,0,1937,1940,3,286,143, - 0,1938,1941,3,282,141,0,1939,1941,3,286,143,0,1940,1938,1,0,0,0,1940,1939, - 1,0,0,0,1940,1941,1,0,0,0,1941,285,1,0,0,0,1942,1943,3,288,144,0,1943,1944, - 3,290,145,0,1944,1945,5,343,0,0,1945,1946,3,290,145,0,1946,287,1,0,0,0, - 1947,1949,7,33,0,0,1948,1947,1,0,0,0,1948,1949,1,0,0,0,1949,1950,1,0,0, - 0,1950,1953,7,34,0,0,1951,1953,5,397,0,0,1952,1948,1,0,0,0,1952,1951,1, - 0,0,0,1953,289,1,0,0,0,1954,1957,3,304,152,0,1955,1957,3,348,174,0,1956, - 1954,1,0,0,0,1956,1955,1,0,0,0,1957,291,1,0,0,0,1958,1960,5,183,0,0,1959, - 1958,1,0,0,0,1959,1960,1,0,0,0,1960,1961,1,0,0,0,1961,1963,3,304,152,0, - 1962,1964,3,300,150,0,1963,1962,1,0,0,0,1963,1964,1,0,0,0,1964,293,1,0, - 0,0,1965,1967,5,183,0,0,1966,1965,1,0,0,0,1966,1967,1,0,0,0,1967,1968,1, - 0,0,0,1968,1970,3,304,152,0,1969,1971,3,300,150,0,1970,1969,1,0,0,0,1970, - 1971,1,0,0,0,1971,295,1,0,0,0,1972,1973,3,304,152,0,1973,1974,3,298,149, - 0,1974,297,1,0,0,0,1975,1976,5,284,0,0,1976,1978,3,304,152,0,1977,1975, - 1,0,0,0,1978,1979,1,0,0,0,1979,1977,1,0,0,0,1979,1980,1,0,0,0,1980,1983, - 1,0,0,0,1981,1983,1,0,0,0,1982,1977,1,0,0,0,1982,1981,1,0,0,0,1983,299, - 1,0,0,0,1984,1985,5,376,0,0,1985,1986,3,302,151,0,1986,1987,5,377,0,0,1987, - 301,1,0,0,0,1988,1993,3,304,152,0,1989,1990,5,380,0,0,1990,1992,3,304,152, - 0,1991,1989,1,0,0,0,1992,1995,1,0,0,0,1993,1991,1,0,0,0,1993,1994,1,0,0, - 0,1994,303,1,0,0,0,1995,1993,1,0,0,0,1996,2000,3,306,153,0,1997,2000,3, - 308,154,0,1998,2000,3,350,175,0,1999,1996,1,0,0,0,1999,1997,1,0,0,0,1999, - 1998,1,0,0,0,2000,305,1,0,0,0,2001,2002,7,35,0,0,2002,307,1,0,0,0,2003, - 2004,5,397,0,0,2004,309,1,0,0,0,2005,2006,5,358,0,0,2006,2007,3,258,129, - 0,2007,2008,5,339,0,0,2008,2009,3,258,129,0,2009,311,1,0,0,0,2010,2015, - 3,304,152,0,2011,2012,5,373,0,0,2012,2014,3,304,152,0,2013,2011,1,0,0,0, - 2014,2017,1,0,0,0,2015,2016,1,0,0,0,2015,2013,1,0,0,0,2016,313,1,0,0,0, - 2017,2015,1,0,0,0,2018,2019,5,361,0,0,2019,2020,3,320,160,0,2020,315,1, - 0,0,0,2021,2022,5,58,0,0,2022,2023,5,294,0,0,2023,2024,5,241,0,0,2024,317, - 1,0,0,0,2025,2026,5,58,0,0,2026,2027,5,241,0,0,2027,319,1,0,0,0,2028,2029, - 5,376,0,0,2029,2034,3,322,161,0,2030,2031,5,380,0,0,2031,2033,3,322,161, - 0,2032,2030,1,0,0,0,2033,2036,1,0,0,0,2034,2032,1,0,0,0,2034,2035,1,0,0, - 0,2035,2037,1,0,0,0,2036,2034,1,0,0,0,2037,2038,5,377,0,0,2038,321,1,0, - 0,0,2039,2044,3,324,162,0,2040,2042,5,365,0,0,2041,2040,1,0,0,0,2041,2042, - 1,0,0,0,2042,2043,1,0,0,0,2043,2045,3,326,163,0,2044,2041,1,0,0,0,2044, - 2045,1,0,0,0,2045,323,1,0,0,0,2046,2050,3,304,152,0,2047,2050,3,272,136, - 0,2048,2050,5,397,0,0,2049,2046,1,0,0,0,2049,2047,1,0,0,0,2049,2048,1,0, - 0,0,2050,325,1,0,0,0,2051,2056,5,398,0,0,2052,2056,5,399,0,0,2053,2056, - 3,344,172,0,2054,2056,5,397,0,0,2055,2051,1,0,0,0,2055,2052,1,0,0,0,2055, - 2053,1,0,0,0,2055,2054,1,0,0,0,2056,327,1,0,0,0,2057,2064,5,179,0,0,2058, - 2059,5,371,0,0,2059,2064,5,371,0,0,2060,2064,5,301,0,0,2061,2062,5,370, - 0,0,2062,2064,5,370,0,0,2063,2057,1,0,0,0,2063,2058,1,0,0,0,2063,2060,1, - 0,0,0,2063,2061,1,0,0,0,2064,329,1,0,0,0,2065,2080,5,365,0,0,2066,2080, - 5,366,0,0,2067,2080,5,367,0,0,2068,2069,5,367,0,0,2069,2080,5,365,0,0,2070, - 2071,5,366,0,0,2071,2080,5,365,0,0,2072,2073,5,367,0,0,2073,2080,5,366, - 0,0,2074,2075,5,368,0,0,2075,2080,5,365,0,0,2076,2077,5,367,0,0,2077,2078, - 5,365,0,0,2078,2080,5,366,0,0,2079,2065,1,0,0,0,2079,2066,1,0,0,0,2079, - 2067,1,0,0,0,2079,2068,1,0,0,0,2079,2070,1,0,0,0,2079,2072,1,0,0,0,2079, - 2074,1,0,0,0,2079,2076,1,0,0,0,2080,331,1,0,0,0,2081,2082,5,367,0,0,2082, - 2089,5,367,0,0,2083,2084,5,366,0,0,2084,2089,5,366,0,0,2085,2089,5,371, - 0,0,2086,2089,5,372,0,0,2087,2089,5,370,0,0,2088,2081,1,0,0,0,2088,2083, - 1,0,0,0,2088,2085,1,0,0,0,2088,2086,1,0,0,0,2088,2087,1,0,0,0,2089,333, - 1,0,0,0,2090,2091,7,36,0,0,2091,335,1,0,0,0,2092,2093,7,37,0,0,2093,337, - 1,0,0,0,2094,2107,3,340,170,0,2095,2107,3,342,171,0,2096,2107,3,278,139, - 0,2097,2098,5,389,0,0,2098,2107,3,342,171,0,2099,2107,3,344,172,0,2100, - 2107,5,399,0,0,2101,2107,5,400,0,0,2102,2104,5,294,0,0,2103,2102,1,0,0, - 0,2103,2104,1,0,0,0,2104,2105,1,0,0,0,2105,2107,5,295,0,0,2106,2094,1,0, - 0,0,2106,2095,1,0,0,0,2106,2096,1,0,0,0,2106,2097,1,0,0,0,2106,2099,1,0, - 0,0,2106,2100,1,0,0,0,2106,2101,1,0,0,0,2106,2103,1,0,0,0,2107,339,1,0, - 0,0,2108,2109,5,397,0,0,2109,341,1,0,0,0,2110,2111,5,398,0,0,2111,343,1, - 0,0,0,2112,2113,7,29,0,0,2113,345,1,0,0,0,2114,2115,7,38,0,0,2115,347,1, - 0,0,0,2116,2117,7,39,0,0,2117,349,1,0,0,0,2118,2119,7,40,0,0,2119,351,1, - 0,0,0,244,360,363,365,380,398,402,411,416,423,430,434,443,455,458,465,473, - 478,481,488,496,500,512,520,524,545,549,553,557,566,571,575,579,583,586, - 590,595,601,606,611,614,618,626,634,638,642,646,650,654,658,662,666,668, - 678,686,710,717,732,735,743,755,779,792,797,801,809,813,821,831,835,841, - 845,849,852,861,865,872,875,885,893,901,905,920,939,950,954,961,966,972, - 976,983,987,991,995,1003,1007,1012,1017,1023,1026,1030,1041,1050,1063,1078, - 1081,1085,1088,1090,1095,1099,1102,1106,1115,1124,1134,1139,1151,1154,1157, - 1160,1166,1170,1178,1181,1186,1189,1191,1205,1216,1221,1229,1232,1235,1240, - 1242,1244,1249,1252,1256,1259,1262,1274,1281,1292,1321,1343,1361,1366,1378, - 1391,1403,1415,1420,1447,1455,1459,1462,1465,1472,1475,1478,1481,1484,1487, - 1492,1495,1504,1509,1513,1518,1527,1546,1554,1562,1566,1570,1580,1606,1614, - 1626,1648,1650,1658,1660,1664,1672,1681,1687,1700,1705,1717,1722,1725,1731, - 1736,1741,1746,1749,1761,1766,1769,1773,1779,1800,1802,1810,1814,1823,1827, - 1843,1852,1876,1883,1886,1896,1905,1911,1919,1924,1928,1935,1940,1948,1952, - 1956,1959,1963,1966,1970,1979,1982,1993,1999,2015,2034,2041,2044,2049,2055, - 2063,2079,2088,2103,2106]; + 1,134,1,134,1,134,1,134,1,134,3,134,1884,8,134,1,134,1,134,1,134,5,134, + 1889,8,134,10,134,12,134,1892,9,134,3,134,1894,8,134,1,134,1,134,1,134, + 1,134,1,134,1,134,1,134,1,134,3,134,1904,8,134,1,134,1,134,1,134,1,134, + 1,134,5,134,1911,8,134,10,134,12,134,1914,9,134,1,135,1,135,1,135,3,135, + 1919,8,135,1,136,1,136,1,137,1,137,1,138,1,138,3,138,1927,8,138,1,139,1, + 139,1,139,3,139,1932,8,139,1,140,1,140,3,140,1936,8,140,1,141,1,141,1,141, + 4,141,1941,8,141,11,141,12,141,1942,1,142,1,142,1,142,3,142,1948,8,142, + 1,143,1,143,1,143,1,143,1,143,1,144,3,144,1956,8,144,1,144,1,144,3,144, + 1960,8,144,1,145,1,145,3,145,1964,8,145,1,146,3,146,1967,8,146,1,146,1, + 146,3,146,1971,8,146,1,147,3,147,1974,8,147,1,147,1,147,3,147,1978,8,147, + 1,148,1,148,1,148,1,149,1,149,4,149,1985,8,149,11,149,12,149,1986,1,149, + 3,149,1990,8,149,1,150,1,150,1,150,1,150,1,151,1,151,1,151,5,151,1999,8, + 151,10,151,12,151,2002,9,151,1,152,1,152,1,152,3,152,2007,8,152,1,153,1, + 153,1,154,1,154,1,155,1,155,1,155,1,155,1,155,1,156,1,156,1,156,5,156,2021, + 8,156,10,156,12,156,2024,9,156,1,157,1,157,1,157,1,158,1,158,1,158,1,158, + 1,159,1,159,1,159,1,160,1,160,1,160,1,160,5,160,2040,8,160,10,160,12,160, + 2043,9,160,1,160,1,160,1,161,1,161,3,161,2049,8,161,1,161,3,161,2052,8, + 161,1,162,1,162,1,162,3,162,2057,8,162,1,163,1,163,1,163,1,163,3,163,2063, + 8,163,1,164,1,164,1,164,1,164,1,164,1,164,3,164,2071,8,164,1,165,1,165, + 1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165,1,165, + 3,165,2087,8,165,1,166,1,166,1,166,1,166,1,166,1,166,1,166,3,166,2096,8, + 166,1,167,1,167,1,168,1,168,1,169,1,169,1,169,1,169,1,169,1,169,1,169,1, + 169,1,169,3,169,2111,8,169,1,169,3,169,2114,8,169,1,170,1,170,1,171,1,171, + 1,172,1,172,1,173,1,173,1,174,1,174,1,175,1,175,1,175,1,2022,5,156,176, + 260,266,268,176,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38, + 40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86, + 88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126, + 128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162, + 164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198, + 200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234, + 236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270, + 272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306, + 308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342, + 344,346,348,350,0,41,2,0,30,30,231,231,3,0,16,16,37,37,67,67,4,0,13,13, + 26,26,64,64,166,166,2,0,12,12,25,25,2,0,248,248,259,259,2,0,165,165,337, + 337,2,0,4,4,117,117,1,0,107,111,3,0,192,192,222,222,295,295,11,0,10,10, + 145,145,151,151,188,189,201,201,223,223,264,265,329,329,340,340,342,342, + 356,357,2,0,361,361,363,363,4,0,225,226,233,233,246,246,296,296,2,0,182, + 182,289,289,2,0,40,40,260,260,3,0,21,21,95,95,176,176,3,0,40,40,93,93,260, + 260,3,0,52,52,89,89,169,169,3,0,65,65,106,106,125,125,2,0,11,11,122,122, + 2,0,92,92,268,268,3,0,239,239,266,266,346,346,4,0,249,249,261,261,275,275, + 318,318,3,0,23,23,56,56,155,155,5,0,24,24,138,139,144,144,150,150,298,298, + 2,0,218,218,321,321,3,0,56,56,135,135,155,155,2,0,8,8,30,30,2,0,44,44,72, + 72,2,0,176,176,180,180,2,0,245,245,344,344,2,0,369,369,389,390,4,0,32,32, + 387,387,391,391,394,394,2,0,389,390,392,392,1,0,389,390,1,0,398,399,2,0, + 398,398,401,401,4,0,32,32,387,387,389,391,393,394,3,0,294,294,368,369,389, + 390,2,0,176,176,232,232,1,0,175,364,1,0,4,174,2312,0,352,1,0,0,0,2,355, + 1,0,0,0,4,365,1,0,0,0,6,380,1,0,0,0,8,382,1,0,0,0,10,398,1,0,0,0,12,402, + 1,0,0,0,14,404,1,0,0,0,16,407,1,0,0,0,18,418,1,0,0,0,20,426,1,0,0,0,22, + 434,1,0,0,0,24,436,1,0,0,0,26,481,1,0,0,0,28,483,1,0,0,0,30,490,1,0,0,0, + 32,494,1,0,0,0,34,498,1,0,0,0,36,502,1,0,0,0,38,545,1,0,0,0,40,549,1,0, + 0,0,42,551,1,0,0,0,44,592,1,0,0,0,46,606,1,0,0,0,48,608,1,0,0,0,50,618, + 1,0,0,0,52,620,1,0,0,0,54,668,1,0,0,0,56,670,1,0,0,0,58,674,1,0,0,0,60, + 682,1,0,0,0,62,690,1,0,0,0,64,694,1,0,0,0,66,701,1,0,0,0,68,729,1,0,0,0, + 70,731,1,0,0,0,72,734,1,0,0,0,74,744,1,0,0,0,76,746,1,0,0,0,78,752,1,0, + 0,0,80,754,1,0,0,0,82,762,1,0,0,0,84,770,1,0,0,0,86,772,1,0,0,0,88,776, + 1,0,0,0,90,780,1,0,0,0,92,804,1,0,0,0,94,808,1,0,0,0,96,810,1,0,0,0,98, + 822,1,0,0,0,100,828,1,0,0,0,102,830,1,0,0,0,104,835,1,0,0,0,106,846,1,0, + 0,0,108,864,1,0,0,0,110,884,1,0,0,0,112,895,1,0,0,0,114,897,1,0,0,0,116, + 910,1,0,0,0,118,917,1,0,0,0,120,920,1,0,0,0,122,929,1,0,0,0,124,933,1,0, + 0,0,126,937,1,0,0,0,128,940,1,0,0,0,130,948,1,0,0,0,132,953,1,0,0,0,134, + 970,1,0,0,0,136,977,1,0,0,0,138,987,1,0,0,0,140,996,1,0,0,0,142,1006,1, + 0,0,0,144,1024,1,0,0,0,146,1026,1,0,0,0,148,1039,1,0,0,0,150,1042,1,0,0, + 0,152,1051,1,0,0,0,154,1062,1,0,0,0,156,1097,1,0,0,0,158,1116,1,0,0,0,160, + 1125,1,0,0,0,162,1134,1,0,0,0,164,1153,1,0,0,0,166,1173,1,0,0,0,168,1175, + 1,0,0,0,170,1198,1,0,0,0,172,1212,1,0,0,0,174,1214,1,0,0,0,176,1228,1,0, + 0,0,178,1254,1,0,0,0,180,1299,1,0,0,0,182,1301,1,0,0,0,184,1303,1,0,0,0, + 186,1309,1,0,0,0,188,1311,1,0,0,0,190,1316,1,0,0,0,192,1321,1,0,0,0,194, + 1333,1,0,0,0,196,1350,1,0,0,0,198,1352,1,0,0,0,200,1354,1,0,0,0,202,1373, + 1,0,0,0,204,1375,1,0,0,0,206,1378,1,0,0,0,208,1427,1,0,0,0,210,1429,1,0, + 0,0,212,1432,1,0,0,0,214,1434,1,0,0,0,216,1441,1,0,0,0,218,1443,1,0,0,0, + 220,1445,1,0,0,0,222,1448,1,0,0,0,224,1457,1,0,0,0,226,1462,1,0,0,0,228, + 1476,1,0,0,0,230,1504,1,0,0,0,232,1514,1,0,0,0,234,1522,1,0,0,0,236,1527, + 1,0,0,0,238,1553,1,0,0,0,240,1555,1,0,0,0,242,1564,1,0,0,0,244,1575,1,0, + 0,0,246,1587,1,0,0,0,248,1613,1,0,0,0,250,1615,1,0,0,0,252,1633,1,0,0,0, + 254,1635,1,0,0,0,256,1640,1,0,0,0,258,1643,1,0,0,0,260,1657,1,0,0,0,262, + 1753,1,0,0,0,264,1780,1,0,0,0,266,1786,1,0,0,0,268,1903,1,0,0,0,270,1918, + 1,0,0,0,272,1920,1,0,0,0,274,1922,1,0,0,0,276,1926,1,0,0,0,278,1928,1,0, + 0,0,280,1933,1,0,0,0,282,1940,1,0,0,0,284,1944,1,0,0,0,286,1949,1,0,0,0, + 288,1959,1,0,0,0,290,1963,1,0,0,0,292,1966,1,0,0,0,294,1973,1,0,0,0,296, + 1979,1,0,0,0,298,1989,1,0,0,0,300,1991,1,0,0,0,302,1995,1,0,0,0,304,2006, + 1,0,0,0,306,2008,1,0,0,0,308,2010,1,0,0,0,310,2012,1,0,0,0,312,2017,1,0, + 0,0,314,2025,1,0,0,0,316,2028,1,0,0,0,318,2032,1,0,0,0,320,2035,1,0,0,0, + 322,2046,1,0,0,0,324,2056,1,0,0,0,326,2062,1,0,0,0,328,2070,1,0,0,0,330, + 2086,1,0,0,0,332,2095,1,0,0,0,334,2097,1,0,0,0,336,2099,1,0,0,0,338,2113, + 1,0,0,0,340,2115,1,0,0,0,342,2117,1,0,0,0,344,2119,1,0,0,0,346,2121,1,0, + 0,0,348,2123,1,0,0,0,350,2125,1,0,0,0,352,353,3,2,1,0,353,354,5,0,0,1,354, + 1,1,0,0,0,355,356,3,4,2,0,356,357,5,0,0,1,357,3,1,0,0,0,358,360,3,6,3,0, + 359,361,5,381,0,0,360,359,1,0,0,0,360,361,1,0,0,0,361,364,1,0,0,0,362,364, + 3,8,4,0,363,358,1,0,0,0,363,362,1,0,0,0,364,367,1,0,0,0,365,363,1,0,0,0, + 365,366,1,0,0,0,366,5,1,0,0,0,367,365,1,0,0,0,368,381,3,10,5,0,369,381, + 3,12,6,0,370,381,3,14,7,0,371,381,3,16,8,0,372,381,3,22,11,0,373,381,3, + 26,13,0,374,381,3,28,14,0,375,381,3,30,15,0,376,381,3,32,16,0,377,381,3, + 34,17,0,378,381,3,36,18,0,379,381,3,38,19,0,380,368,1,0,0,0,380,369,1,0, + 0,0,380,370,1,0,0,0,380,371,1,0,0,0,380,372,1,0,0,0,380,373,1,0,0,0,380, + 374,1,0,0,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,7,1,0,0,0,382,383,5,381,0,0,383,9,1,0,0,0,384,399, + 3,40,20,0,385,399,3,104,52,0,386,399,3,106,53,0,387,399,3,108,54,0,388, + 399,3,102,51,0,389,399,3,114,57,0,390,399,3,128,64,0,391,399,3,130,65,0, + 392,399,3,132,66,0,393,399,3,134,67,0,394,399,3,136,68,0,395,399,3,138, + 69,0,396,399,3,140,70,0,397,399,3,142,71,0,398,384,1,0,0,0,398,385,1,0, + 0,0,398,386,1,0,0,0,398,387,1,0,0,0,398,388,1,0,0,0,398,389,1,0,0,0,398, + 390,1,0,0,0,398,391,1,0,0,0,398,392,1,0,0,0,398,393,1,0,0,0,398,394,1,0, + 0,0,398,395,1,0,0,0,398,396,1,0,0,0,398,397,1,0,0,0,399,11,1,0,0,0,400, + 403,3,156,78,0,401,403,3,144,72,0,402,400,1,0,0,0,402,401,1,0,0,0,403,13, + 1,0,0,0,404,405,7,0,0,0,405,406,3,312,156,0,406,15,1,0,0,0,407,411,5,242, + 0,0,408,412,3,18,9,0,409,410,5,100,0,0,410,412,5,247,0,0,411,408,1,0,0, + 0,411,409,1,0,0,0,411,412,1,0,0,0,412,416,1,0,0,0,413,417,3,12,6,0,414, + 417,3,146,73,0,415,417,3,154,77,0,416,413,1,0,0,0,416,414,1,0,0,0,416,415, + 1,0,0,0,417,17,1,0,0,0,418,423,3,20,10,0,419,420,5,380,0,0,420,422,3,20, + 10,0,421,419,1,0,0,0,422,425,1,0,0,0,423,421,1,0,0,0,423,424,1,0,0,0,424, + 19,1,0,0,0,425,423,1,0,0,0,426,427,7,1,0,0,427,21,1,0,0,0,428,430,5,160, + 0,0,429,431,5,12,0,0,430,429,1,0,0,0,430,431,1,0,0,0,431,432,1,0,0,0,432, + 435,3,312,156,0,433,435,3,24,12,0,434,428,1,0,0,0,434,433,1,0,0,0,435,23, + 1,0,0,0,436,437,5,160,0,0,437,438,5,83,0,0,438,443,3,312,156,0,439,440, + 5,380,0,0,440,442,3,312,156,0,441,439,1,0,0,0,442,445,1,0,0,0,443,441,1, + 0,0,0,443,444,1,0,0,0,444,25,1,0,0,0,445,443,1,0,0,0,446,447,5,327,0,0, + 447,482,7,2,0,0,448,449,5,327,0,0,449,450,5,219,0,0,450,482,7,3,0,0,451, + 452,5,327,0,0,452,455,5,148,0,0,453,454,7,4,0,0,454,456,3,312,156,0,455, + 453,1,0,0,0,455,456,1,0,0,0,456,458,1,0,0,0,457,459,3,264,132,0,458,457, + 1,0,0,0,458,459,1,0,0,0,459,482,1,0,0,0,460,461,5,327,0,0,461,462,5,20, + 0,0,462,463,7,4,0,0,463,465,3,312,156,0,464,466,3,264,132,0,465,464,1,0, + 0,0,465,466,1,0,0,0,466,482,1,0,0,0,467,468,5,327,0,0,468,469,5,216,0,0, + 469,470,7,5,0,0,470,482,3,312,156,0,471,473,5,327,0,0,472,474,5,352,0,0, + 473,472,1,0,0,0,473,474,1,0,0,0,474,475,1,0,0,0,475,482,5,50,0,0,476,478, + 5,327,0,0,477,479,5,249,0,0,478,477,1,0,0,0,478,479,1,0,0,0,479,480,1,0, + 0,0,480,482,5,83,0,0,481,446,1,0,0,0,481,448,1,0,0,0,481,451,1,0,0,0,481, + 460,1,0,0,0,481,467,1,0,0,0,481,471,1,0,0,0,481,476,1,0,0,0,482,27,1,0, + 0,0,483,484,5,75,0,0,484,485,5,287,0,0,485,488,3,312,156,0,486,487,5,361, + 0,0,487,489,3,320,160,0,488,486,1,0,0,0,488,489,1,0,0,0,489,29,1,0,0,0, + 490,491,5,158,0,0,491,492,5,287,0,0,492,493,3,312,156,0,493,31,1,0,0,0, + 494,496,5,326,0,0,495,497,3,322,161,0,496,495,1,0,0,0,496,497,1,0,0,0,497, + 33,1,0,0,0,498,500,5,316,0,0,499,501,3,324,162,0,500,499,1,0,0,0,500,501, + 1,0,0,0,501,35,1,0,0,0,502,503,7,6,0,0,503,504,5,63,0,0,504,505,3,112,56, + 0,505,37,1,0,0,0,506,507,5,4,0,0,507,508,5,63,0,0,508,509,5,361,0,0,509, + 512,5,402,0,0,510,511,5,183,0,0,511,513,3,312,156,0,512,510,1,0,0,0,512, + 513,1,0,0,0,513,546,1,0,0,0,514,515,5,4,0,0,515,516,5,42,0,0,516,517,5, + 361,0,0,517,520,5,402,0,0,518,519,5,183,0,0,519,521,3,312,156,0,520,518, + 1,0,0,0,520,521,1,0,0,0,521,524,1,0,0,0,522,523,5,118,0,0,523,525,3,312, + 156,0,524,522,1,0,0,0,524,525,1,0,0,0,525,546,1,0,0,0,526,527,5,4,0,0,527, + 528,7,7,0,0,528,529,5,361,0,0,529,530,5,402,0,0,530,531,5,118,0,0,531,546, + 3,312,156,0,532,533,5,4,0,0,533,534,5,112,0,0,534,546,5,402,0,0,535,536, + 5,4,0,0,536,537,5,35,0,0,537,538,5,42,0,0,538,539,5,361,0,0,539,540,5,402, + 0,0,540,541,5,118,0,0,541,542,3,312,156,0,542,543,5,68,0,0,543,544,3,312, + 156,0,544,546,1,0,0,0,545,506,1,0,0,0,545,514,1,0,0,0,545,526,1,0,0,0,545, + 532,1,0,0,0,545,535,1,0,0,0,546,39,1,0,0,0,547,550,3,42,21,0,548,550,3, + 44,22,0,549,547,1,0,0,0,549,548,1,0,0,0,550,41,1,0,0,0,551,553,5,216,0, + 0,552,554,5,149,0,0,553,552,1,0,0,0,553,554,1,0,0,0,554,555,1,0,0,0,555, + 557,5,337,0,0,556,558,3,316,158,0,557,556,1,0,0,0,557,558,1,0,0,0,558,559, + 1,0,0,0,559,560,3,98,49,0,560,561,5,376,0,0,561,566,3,46,23,0,562,563,5, + 380,0,0,563,565,3,46,23,0,564,562,1,0,0,0,565,568,1,0,0,0,566,564,1,0,0, + 0,566,567,1,0,0,0,567,571,1,0,0,0,568,566,1,0,0,0,569,570,5,380,0,0,570, + 572,3,80,40,0,571,569,1,0,0,0,571,572,1,0,0,0,572,575,1,0,0,0,573,574,5, + 380,0,0,574,576,3,82,41,0,575,573,1,0,0,0,575,576,1,0,0,0,576,579,1,0,0, + 0,577,578,5,380,0,0,578,580,3,86,43,0,579,577,1,0,0,0,579,580,1,0,0,0,580, + 581,1,0,0,0,581,583,5,377,0,0,582,584,3,70,35,0,583,582,1,0,0,0,583,584, + 1,0,0,0,584,586,1,0,0,0,585,587,3,88,44,0,586,585,1,0,0,0,586,587,1,0,0, + 0,587,588,1,0,0,0,588,590,3,314,157,0,589,591,3,96,48,0,590,589,1,0,0,0, + 590,591,1,0,0,0,591,43,1,0,0,0,592,593,5,216,0,0,593,595,5,337,0,0,594, + 596,3,316,158,0,595,594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598, + 3,98,49,0,598,601,3,314,157,0,599,600,5,183,0,0,600,602,3,156,78,0,601, + 599,1,0,0,0,601,602,1,0,0,0,602,45,1,0,0,0,603,607,3,48,24,0,604,607,3, + 72,36,0,605,607,3,76,38,0,606,603,1,0,0,0,606,604,1,0,0,0,606,605,1,0,0, + 0,607,47,1,0,0,0,608,609,3,50,25,0,609,611,3,54,27,0,610,612,3,68,34,0, + 611,610,1,0,0,0,611,612,1,0,0,0,612,614,1,0,0,0,613,615,3,70,35,0,614,613, + 1,0,0,0,614,615,1,0,0,0,615,49,1,0,0,0,616,619,3,312,156,0,617,619,3,258, + 129,0,618,616,1,0,0,0,618,617,1,0,0,0,619,51,1,0,0,0,620,621,5,376,0,0, + 621,626,3,50,25,0,622,623,5,380,0,0,623,625,3,50,25,0,624,622,1,0,0,0,625, + 628,1,0,0,0,626,624,1,0,0,0,626,627,1,0,0,0,627,629,1,0,0,0,628,626,1,0, + 0,0,629,630,5,377,0,0,630,53,1,0,0,0,631,669,7,8,0,0,632,634,7,9,0,0,633, + 635,3,56,28,0,634,633,1,0,0,0,634,635,1,0,0,0,635,669,1,0,0,0,636,638,5, + 341,0,0,637,639,3,56,28,0,638,637,1,0,0,0,638,639,1,0,0,0,639,646,1,0,0, + 0,640,642,7,10,0,0,641,643,5,278,0,0,642,641,1,0,0,0,642,643,1,0,0,0,643, + 644,1,0,0,0,644,645,5,340,0,0,645,647,5,174,0,0,646,640,1,0,0,0,646,647, + 1,0,0,0,647,669,1,0,0,0,648,650,7,11,0,0,649,651,3,58,29,0,650,649,1,0, + 0,0,650,651,1,0,0,0,651,669,1,0,0,0,652,654,7,12,0,0,653,655,3,62,31,0, + 654,653,1,0,0,0,654,655,1,0,0,0,655,669,1,0,0,0,656,658,5,76,0,0,657,659, + 3,64,32,0,658,657,1,0,0,0,658,659,1,0,0,0,659,669,1,0,0,0,660,662,5,322, + 0,0,661,663,3,66,33,0,662,661,1,0,0,0,662,663,1,0,0,0,663,669,1,0,0,0,664, + 666,5,114,0,0,665,667,3,60,30,0,666,665,1,0,0,0,666,667,1,0,0,0,667,669, + 1,0,0,0,668,631,1,0,0,0,668,632,1,0,0,0,668,636,1,0,0,0,668,648,1,0,0,0, + 668,652,1,0,0,0,668,656,1,0,0,0,668,660,1,0,0,0,668,664,1,0,0,0,669,55, + 1,0,0,0,670,671,5,376,0,0,671,672,3,342,171,0,672,673,5,377,0,0,673,57, + 1,0,0,0,674,675,5,376,0,0,675,678,3,342,171,0,676,677,5,380,0,0,677,679, + 3,342,171,0,678,676,1,0,0,0,678,679,1,0,0,0,679,680,1,0,0,0,680,681,5,377, + 0,0,681,59,1,0,0,0,682,683,5,376,0,0,683,686,3,340,170,0,684,685,5,380, + 0,0,685,687,3,340,170,0,686,684,1,0,0,0,686,687,1,0,0,0,687,688,1,0,0,0, + 688,689,5,377,0,0,689,61,1,0,0,0,690,691,5,367,0,0,691,692,3,54,27,0,692, + 693,5,366,0,0,693,63,1,0,0,0,694,695,5,367,0,0,695,696,3,54,27,0,696,697, + 5,380,0,0,697,698,3,54,27,0,698,699,1,0,0,0,699,700,5,366,0,0,700,65,1, + 0,0,0,701,702,5,367,0,0,702,703,3,50,25,0,703,710,3,54,27,0,704,705,5,380, + 0,0,705,706,3,50,25,0,706,707,3,54,27,0,707,709,1,0,0,0,708,704,1,0,0,0, + 709,712,1,0,0,0,710,708,1,0,0,0,710,711,1,0,0,0,711,713,1,0,0,0,712,710, + 1,0,0,0,713,714,5,366,0,0,714,67,1,0,0,0,715,716,5,212,0,0,716,718,3,84, + 42,0,717,715,1,0,0,0,717,718,1,0,0,0,718,719,1,0,0,0,719,720,5,313,0,0, + 720,723,5,68,0,0,721,722,5,294,0,0,722,724,5,34,0,0,723,721,1,0,0,0,723, + 724,1,0,0,0,724,730,1,0,0,0,725,727,5,294,0,0,726,725,1,0,0,0,726,727,1, + 0,0,0,727,728,1,0,0,0,728,730,5,295,0,0,729,717,1,0,0,0,729,726,1,0,0,0, + 730,69,1,0,0,0,731,732,5,18,0,0,732,733,5,397,0,0,733,71,1,0,0,0,734,735, + 3,50,25,0,735,736,3,54,27,0,736,739,5,283,0,0,737,738,5,248,0,0,738,740, + 3,74,37,0,739,737,1,0,0,0,739,740,1,0,0,0,740,742,1,0,0,0,741,743,5,167, + 0,0,742,741,1,0,0,0,742,743,1,0,0,0,743,73,1,0,0,0,744,745,5,397,0,0,745, + 75,1,0,0,0,746,747,3,50,25,0,747,748,5,183,0,0,748,750,3,78,39,0,749,751, + 3,70,35,0,750,749,1,0,0,0,750,751,1,0,0,0,751,77,1,0,0,0,752,753,3,258, + 129,0,753,79,1,0,0,0,754,755,5,168,0,0,755,756,5,247,0,0,756,757,3,258, + 129,0,757,758,5,183,0,0,758,759,3,258,129,0,759,81,1,0,0,0,760,761,5,212, + 0,0,761,763,3,84,42,0,762,760,1,0,0,0,762,763,1,0,0,0,763,764,1,0,0,0,764, + 765,5,313,0,0,765,766,5,68,0,0,766,767,3,52,26,0,767,768,5,294,0,0,768, + 769,5,34,0,0,769,83,1,0,0,0,770,771,3,304,152,0,771,85,1,0,0,0,772,773, + 5,311,0,0,773,774,5,247,0,0,774,775,5,335,0,0,775,87,1,0,0,0,776,777,5, + 94,0,0,777,778,5,194,0,0,778,779,3,90,45,0,779,89,1,0,0,0,780,781,5,376, + 0,0,781,786,3,92,46,0,782,783,5,380,0,0,783,785,3,92,46,0,784,782,1,0,0, + 0,785,788,1,0,0,0,786,784,1,0,0,0,786,787,1,0,0,0,787,789,1,0,0,0,788,786, + 1,0,0,0,789,790,5,377,0,0,790,91,1,0,0,0,791,805,3,276,138,0,792,793,3, + 304,152,0,793,794,5,376,0,0,794,799,3,94,47,0,795,796,5,380,0,0,796,798, + 3,94,47,0,797,795,1,0,0,0,798,801,1,0,0,0,799,797,1,0,0,0,799,800,1,0,0, + 0,800,802,1,0,0,0,801,799,1,0,0,0,802,803,5,377,0,0,803,805,1,0,0,0,804, + 791,1,0,0,0,804,792,1,0,0,0,805,93,1,0,0,0,806,809,3,276,138,0,807,809, + 3,338,169,0,808,806,1,0,0,0,808,807,1,0,0,0,809,95,1,0,0,0,810,811,5,276, + 0,0,811,820,3,98,49,0,812,816,5,376,0,0,813,815,3,100,50,0,814,813,1,0, + 0,0,815,818,1,0,0,0,816,814,1,0,0,0,816,817,1,0,0,0,817,819,1,0,0,0,818, + 816,1,0,0,0,819,821,5,377,0,0,820,812,1,0,0,0,820,821,1,0,0,0,821,97,1, + 0,0,0,822,823,3,312,156,0,823,99,1,0,0,0,824,825,7,13,0,0,825,829,7,14, + 0,0,826,827,7,15,0,0,827,829,7,16,0,0,828,824,1,0,0,0,828,826,1,0,0,0,829, + 101,1,0,0,0,830,831,5,216,0,0,831,832,5,12,0,0,832,833,3,312,156,0,833, + 834,3,314,157,0,834,103,1,0,0,0,835,836,5,216,0,0,836,838,5,25,0,0,837, + 839,3,316,158,0,838,837,1,0,0,0,838,839,1,0,0,0,839,840,1,0,0,0,840,842, + 3,312,156,0,841,843,3,70,35,0,842,841,1,0,0,0,842,843,1,0,0,0,843,844,1, + 0,0,0,844,845,3,314,157,0,845,105,1,0,0,0,846,848,5,216,0,0,847,849,5,149, + 0,0,848,847,1,0,0,0,848,849,1,0,0,0,849,850,1,0,0,0,850,852,5,165,0,0,851, + 853,3,316,158,0,852,851,1,0,0,0,852,853,1,0,0,0,853,854,1,0,0,0,854,856, + 3,312,156,0,855,857,3,52,26,0,856,855,1,0,0,0,856,857,1,0,0,0,857,859,1, + 0,0,0,858,860,3,70,35,0,859,858,1,0,0,0,859,860,1,0,0,0,860,861,1,0,0,0, + 861,862,5,183,0,0,862,863,3,156,78,0,863,107,1,0,0,0,864,868,5,216,0,0, + 865,869,5,149,0,0,866,867,5,149,0,0,867,869,5,334,0,0,868,865,1,0,0,0,868, + 866,1,0,0,0,868,869,1,0,0,0,869,870,1,0,0,0,870,872,5,250,0,0,871,873,3, + 316,158,0,872,871,1,0,0,0,872,873,1,0,0,0,873,874,1,0,0,0,874,875,3,312, + 156,0,875,876,5,183,0,0,876,879,3,304,152,0,877,878,5,272,0,0,878,880,7, + 17,0,0,879,877,1,0,0,0,879,880,1,0,0,0,880,882,1,0,0,0,881,883,3,110,55, + 0,882,881,1,0,0,0,882,883,1,0,0,0,883,109,1,0,0,0,884,885,5,353,0,0,885, + 886,5,63,0,0,886,892,3,112,56,0,887,888,5,380,0,0,888,889,5,63,0,0,889, + 891,3,112,56,0,890,887,1,0,0,0,891,894,1,0,0,0,892,890,1,0,0,0,892,893, + 1,0,0,0,893,111,1,0,0,0,894,892,1,0,0,0,895,896,5,397,0,0,896,113,1,0,0, + 0,897,898,5,178,0,0,898,900,5,337,0,0,899,901,3,318,159,0,900,899,1,0,0, + 0,900,901,1,0,0,0,901,902,1,0,0,0,902,908,3,312,156,0,903,909,3,116,58, + 0,904,909,3,118,59,0,905,909,3,120,60,0,906,909,3,122,61,0,907,909,3,124, + 62,0,908,903,1,0,0,0,908,904,1,0,0,0,908,905,1,0,0,0,908,906,1,0,0,0,908, + 907,1,0,0,0,909,115,1,0,0,0,910,912,5,118,0,0,911,913,3,312,156,0,912,911, + 1,0,0,0,912,913,1,0,0,0,913,914,1,0,0,0,914,915,5,343,0,0,915,916,3,312, + 156,0,916,117,1,0,0,0,917,918,5,326,0,0,918,919,3,320,160,0,919,119,1,0, + 0,0,920,921,5,4,0,0,921,922,5,212,0,0,922,923,3,84,42,0,923,924,5,313,0, + 0,924,925,5,68,0,0,925,927,3,52,26,0,926,928,3,126,63,0,927,926,1,0,0,0, + 927,928,1,0,0,0,928,121,1,0,0,0,929,930,5,234,0,0,930,931,5,212,0,0,931, + 932,3,84,42,0,932,123,1,0,0,0,933,934,5,4,0,0,934,935,5,347,0,0,935,936, + 3,52,26,0,936,125,1,0,0,0,937,938,5,294,0,0,938,939,5,34,0,0,939,127,1, + 0,0,0,940,941,5,178,0,0,941,942,5,165,0,0,942,946,3,312,156,0,943,947,3, + 116,58,0,944,945,5,183,0,0,945,947,3,156,78,0,946,943,1,0,0,0,946,944,1, + 0,0,0,947,129,1,0,0,0,948,949,5,178,0,0,949,950,5,25,0,0,950,951,3,312, + 156,0,951,952,3,118,59,0,952,131,1,0,0,0,953,957,5,178,0,0,954,958,5,149, + 0,0,955,956,5,149,0,0,956,958,5,334,0,0,957,954,1,0,0,0,957,955,1,0,0,0, + 957,958,1,0,0,0,958,959,1,0,0,0,959,961,5,250,0,0,960,962,3,318,159,0,961, + 960,1,0,0,0,961,962,1,0,0,0,962,963,1,0,0,0,963,964,3,312,156,0,964,965, + 5,183,0,0,965,968,3,304,152,0,966,967,5,272,0,0,967,969,7,17,0,0,968,966, + 1,0,0,0,968,969,1,0,0,0,969,133,1,0,0,0,970,971,5,234,0,0,971,973,5,12, + 0,0,972,974,3,318,159,0,973,972,1,0,0,0,973,974,1,0,0,0,974,975,1,0,0,0, + 975,976,3,312,156,0,976,135,1,0,0,0,977,979,5,234,0,0,978,980,5,149,0,0, + 979,978,1,0,0,0,979,980,1,0,0,0,980,981,1,0,0,0,981,983,5,337,0,0,982,984, + 3,318,159,0,983,982,1,0,0,0,983,984,1,0,0,0,984,985,1,0,0,0,985,986,3,312, + 156,0,986,137,1,0,0,0,987,988,5,234,0,0,988,990,5,25,0,0,989,991,3,318, + 159,0,990,989,1,0,0,0,990,991,1,0,0,0,991,992,1,0,0,0,992,994,3,312,156, + 0,993,995,7,18,0,0,994,993,1,0,0,0,994,995,1,0,0,0,995,139,1,0,0,0,996, + 998,5,234,0,0,997,999,5,149,0,0,998,997,1,0,0,0,998,999,1,0,0,0,999,1000, + 1,0,0,0,1000,1002,5,165,0,0,1001,1003,3,318,159,0,1002,1001,1,0,0,0,1002, + 1003,1,0,0,0,1003,1004,1,0,0,0,1004,1005,3,312,156,0,1005,141,1,0,0,0,1006, + 1010,5,234,0,0,1007,1011,5,149,0,0,1008,1009,5,149,0,0,1009,1011,5,334, + 0,0,1010,1007,1,0,0,0,1010,1008,1,0,0,0,1010,1011,1,0,0,0,1011,1012,1,0, + 0,0,1012,1014,5,250,0,0,1013,1015,3,318,159,0,1014,1013,1,0,0,0,1014,1015, + 1,0,0,0,1015,1016,1,0,0,0,1016,1017,3,312,156,0,1017,143,1,0,0,0,1018,1020, + 5,240,0,0,1019,1018,1,0,0,0,1019,1020,1,0,0,0,1020,1021,1,0,0,0,1021,1025, + 3,146,73,0,1022,1023,5,240,0,0,1023,1025,3,154,77,0,1024,1019,1,0,0,0,1024, + 1022,1,0,0,0,1025,145,1,0,0,0,1026,1027,5,263,0,0,1027,1028,7,19,0,0,1028, + 1037,3,312,156,0,1029,1031,3,148,74,0,1030,1029,1,0,0,0,1030,1031,1,0,0, + 0,1031,1033,1,0,0,0,1032,1034,3,52,26,0,1033,1032,1,0,0,0,1033,1034,1,0, + 0,0,1034,1035,1,0,0,0,1035,1038,3,156,78,0,1036,1038,3,150,75,0,1037,1030, + 1,0,0,0,1037,1036,1,0,0,0,1038,147,1,0,0,0,1039,1040,5,307,0,0,1040,1041, + 3,320,160,0,1041,149,1,0,0,0,1042,1043,5,355,0,0,1043,1048,3,152,76,0,1044, + 1045,5,380,0,0,1045,1047,3,152,76,0,1046,1044,1,0,0,0,1047,1050,1,0,0,0, + 1048,1046,1,0,0,0,1048,1049,1,0,0,0,1049,151,1,0,0,0,1050,1048,1,0,0,0, + 1051,1052,5,376,0,0,1052,1057,3,338,169,0,1053,1054,5,380,0,0,1054,1056, + 3,338,169,0,1055,1053,1,0,0,0,1056,1059,1,0,0,0,1057,1055,1,0,0,0,1057, + 1058,1,0,0,0,1058,1060,1,0,0,0,1059,1057,1,0,0,0,1060,1061,5,377,0,0,1061, + 153,1,0,0,0,1062,1063,5,143,0,0,1063,1064,5,326,0,0,1064,1068,5,186,0,0, + 1065,1066,3,146,73,0,1066,1067,5,381,0,0,1067,1069,1,0,0,0,1068,1065,1, + 0,0,0,1069,1070,1,0,0,0,1070,1068,1,0,0,0,1070,1071,1,0,0,0,1071,1072,1, + 0,0,0,1072,1073,5,237,0,0,1073,155,1,0,0,0,1074,1075,6,78,-1,0,1075,1098, + 3,158,79,0,1076,1077,3,160,80,0,1077,1078,3,156,78,5,1078,1098,1,0,0,0, + 1079,1080,5,376,0,0,1080,1081,3,156,78,0,1081,1082,5,377,0,0,1082,1098, + 1,0,0,0,1083,1085,3,168,84,0,1084,1086,3,230,115,0,1085,1084,1,0,0,0,1085, + 1086,1,0,0,0,1086,1088,1,0,0,0,1087,1089,3,234,117,0,1088,1087,1,0,0,0, + 1088,1089,1,0,0,0,1089,1098,1,0,0,0,1090,1092,3,166,83,0,1091,1093,3,230, + 115,0,1092,1091,1,0,0,0,1092,1093,1,0,0,0,1093,1095,1,0,0,0,1094,1096,3, + 234,117,0,1095,1094,1,0,0,0,1095,1096,1,0,0,0,1096,1098,1,0,0,0,1097,1074, + 1,0,0,0,1097,1076,1,0,0,0,1097,1079,1,0,0,0,1097,1083,1,0,0,0,1097,1090, + 1,0,0,0,1098,1113,1,0,0,0,1099,1100,10,3,0,0,1100,1102,7,20,0,0,1101,1103, + 5,176,0,0,1102,1101,1,0,0,0,1102,1103,1,0,0,0,1103,1104,1,0,0,0,1104,1106, + 3,156,78,0,1105,1107,3,230,115,0,1106,1105,1,0,0,0,1106,1107,1,0,0,0,1107, + 1109,1,0,0,0,1108,1110,3,234,117,0,1109,1108,1,0,0,0,1109,1110,1,0,0,0, + 1110,1112,1,0,0,0,1111,1099,1,0,0,0,1112,1115,1,0,0,0,1113,1111,1,0,0,0, + 1113,1114,1,0,0,0,1114,157,1,0,0,0,1115,1113,1,0,0,0,1116,1117,5,355,0, + 0,1117,1122,3,258,129,0,1118,1119,5,380,0,0,1119,1121,3,258,129,0,1120, + 1118,1,0,0,0,1121,1124,1,0,0,0,1122,1120,1,0,0,0,1122,1123,1,0,0,0,1123, + 159,1,0,0,0,1124,1122,1,0,0,0,1125,1126,5,361,0,0,1126,1131,3,162,81,0, + 1127,1128,5,380,0,0,1128,1130,3,162,81,0,1129,1127,1,0,0,0,1130,1133,1, + 0,0,0,1131,1129,1,0,0,0,1131,1132,1,0,0,0,1132,161,1,0,0,0,1133,1131,1, + 0,0,0,1134,1146,3,164,82,0,1135,1136,5,376,0,0,1136,1141,3,50,25,0,1137, + 1138,5,380,0,0,1138,1140,3,50,25,0,1139,1137,1,0,0,0,1140,1143,1,0,0,0, + 1141,1139,1,0,0,0,1141,1142,1,0,0,0,1142,1144,1,0,0,0,1143,1141,1,0,0,0, + 1144,1145,5,377,0,0,1145,1147,1,0,0,0,1146,1135,1,0,0,0,1146,1147,1,0,0, + 0,1147,1148,1,0,0,0,1148,1149,5,183,0,0,1149,1150,5,376,0,0,1150,1151,3, + 156,78,0,1151,1152,5,377,0,0,1152,163,1,0,0,0,1153,1154,3,304,152,0,1154, + 165,1,0,0,0,1155,1156,3,168,84,0,1156,1158,3,174,87,0,1157,1159,3,204,102, + 0,1158,1157,1,0,0,0,1158,1159,1,0,0,0,1159,1161,1,0,0,0,1160,1162,3,206, + 103,0,1161,1160,1,0,0,0,1161,1162,1,0,0,0,1162,1164,1,0,0,0,1163,1165,3, + 220,110,0,1164,1163,1,0,0,0,1164,1165,1,0,0,0,1165,1167,1,0,0,0,1166,1168, + 3,222,111,0,1167,1166,1,0,0,0,1167,1168,1,0,0,0,1168,1174,1,0,0,0,1169, + 1170,3,168,84,0,1170,1171,3,174,87,0,1171,1172,3,228,114,0,1172,1174,1, + 0,0,0,1173,1155,1,0,0,0,1173,1169,1,0,0,0,1174,167,1,0,0,0,1175,1177,5, + 325,0,0,1176,1178,3,346,173,0,1177,1176,1,0,0,0,1177,1178,1,0,0,0,1178, + 1188,1,0,0,0,1179,1189,5,387,0,0,1180,1185,3,170,85,0,1181,1182,5,380,0, + 0,1182,1184,3,170,85,0,1183,1181,1,0,0,0,1184,1187,1,0,0,0,1185,1183,1, + 0,0,0,1185,1186,1,0,0,0,1186,1189,1,0,0,0,1187,1185,1,0,0,0,1188,1179,1, + 0,0,0,1188,1180,1,0,0,0,1189,169,1,0,0,0,1190,1199,3,172,86,0,1191,1196, + 3,258,129,0,1192,1194,5,183,0,0,1193,1192,1,0,0,0,1193,1194,1,0,0,0,1194, + 1195,1,0,0,0,1195,1197,3,258,129,0,1196,1193,1,0,0,0,1196,1197,1,0,0,0, + 1197,1199,1,0,0,0,1198,1190,1,0,0,0,1198,1191,1,0,0,0,1199,171,1,0,0,0, + 1200,1201,3,268,134,0,1201,1202,5,305,0,0,1202,1203,3,226,113,0,1203,1204, + 5,183,0,0,1204,1205,3,304,152,0,1205,1213,1,0,0,0,1206,1207,3,268,134,0, + 1207,1208,5,305,0,0,1208,1209,3,296,148,0,1209,1210,5,183,0,0,1210,1211, + 3,304,152,0,1211,1213,1,0,0,0,1212,1200,1,0,0,0,1212,1206,1,0,0,0,1213, + 173,1,0,0,0,1214,1215,5,248,0,0,1215,1216,3,176,88,0,1216,175,1,0,0,0,1217, + 1218,6,88,-1,0,1218,1223,3,178,89,0,1219,1220,5,380,0,0,1220,1222,3,178, + 89,0,1221,1219,1,0,0,0,1222,1225,1,0,0,0,1223,1221,1,0,0,0,1223,1224,1, + 0,0,0,1224,1229,1,0,0,0,1225,1223,1,0,0,0,1226,1229,3,188,94,0,1227,1229, + 3,190,95,0,1228,1217,1,0,0,0,1228,1226,1,0,0,0,1228,1227,1,0,0,0,1229,1251, + 1,0,0,0,1230,1231,10,3,0,0,1231,1232,5,217,0,0,1232,1233,5,270,0,0,1233, + 1250,3,176,88,4,1234,1236,10,4,0,0,1235,1237,5,290,0,0,1236,1235,1,0,0, + 0,1236,1237,1,0,0,0,1237,1239,1,0,0,0,1238,1240,7,21,0,0,1239,1238,1,0, + 0,0,1239,1240,1,0,0,0,1240,1242,1,0,0,0,1241,1243,5,304,0,0,1242,1241,1, + 0,0,0,1242,1243,1,0,0,0,1243,1244,1,0,0,0,1244,1245,5,270,0,0,1245,1247, + 3,176,88,0,1246,1248,3,202,101,0,1247,1246,1,0,0,0,1247,1248,1,0,0,0,1248, + 1250,1,0,0,0,1249,1230,1,0,0,0,1249,1234,1,0,0,0,1250,1253,1,0,0,0,1251, + 1249,1,0,0,0,1251,1252,1,0,0,0,1252,177,1,0,0,0,1253,1251,1,0,0,0,1254, + 1256,3,180,90,0,1255,1257,3,294,147,0,1256,1255,1,0,0,0,1256,1257,1,0,0, + 0,1257,179,1,0,0,0,1258,1260,5,337,0,0,1259,1258,1,0,0,0,1259,1260,1,0, + 0,0,1260,1261,1,0,0,0,1261,1263,3,182,91,0,1262,1264,3,184,92,0,1263,1262, + 1,0,0,0,1263,1264,1,0,0,0,1264,1269,1,0,0,0,1265,1267,5,183,0,0,1266,1265, + 1,0,0,0,1266,1267,1,0,0,0,1267,1268,1,0,0,0,1268,1270,3,274,137,0,1269, + 1266,1,0,0,0,1269,1270,1,0,0,0,1270,1300,1,0,0,0,1271,1272,5,273,0,0,1272, + 1273,5,337,0,0,1273,1274,5,376,0,0,1274,1275,3,270,135,0,1275,1276,5,376, + 0,0,1276,1281,3,258,129,0,1277,1278,5,380,0,0,1278,1280,3,258,129,0,1279, + 1277,1,0,0,0,1280,1283,1,0,0,0,1281,1279,1,0,0,0,1281,1282,1,0,0,0,1282, + 1284,1,0,0,0,1283,1281,1,0,0,0,1284,1285,5,377,0,0,1285,1286,5,377,0,0, + 1286,1300,1,0,0,0,1287,1289,5,273,0,0,1288,1287,1,0,0,0,1288,1289,1,0,0, + 0,1289,1290,1,0,0,0,1290,1291,5,376,0,0,1291,1292,3,156,78,0,1292,1293, + 5,377,0,0,1293,1300,1,0,0,0,1294,1295,5,349,0,0,1295,1296,5,376,0,0,1296, + 1297,3,258,129,0,1297,1298,5,377,0,0,1298,1300,1,0,0,0,1299,1259,1,0,0, + 0,1299,1271,1,0,0,0,1299,1288,1,0,0,0,1299,1294,1,0,0,0,1300,181,1,0,0, + 0,1301,1302,3,312,156,0,1302,183,1,0,0,0,1303,1304,5,247,0,0,1304,1305, + 5,335,0,0,1305,1306,5,183,0,0,1306,1307,5,297,0,0,1307,1308,3,186,93,0, + 1308,185,1,0,0,0,1309,1310,3,258,129,0,1310,187,1,0,0,0,1311,1312,5,376, + 0,0,1312,1313,3,150,75,0,1313,1314,5,377,0,0,1314,1315,3,294,147,0,1315, + 189,1,0,0,0,1316,1317,5,337,0,0,1317,1318,5,376,0,0,1318,1319,3,192,96, + 0,1319,1320,5,377,0,0,1320,191,1,0,0,0,1321,1322,3,194,97,0,1322,1323,5, + 376,0,0,1323,1328,3,196,98,0,1324,1325,5,380,0,0,1325,1327,3,196,98,0,1326, + 1324,1,0,0,0,1327,1330,1,0,0,0,1328,1326,1,0,0,0,1328,1329,1,0,0,0,1329, + 1331,1,0,0,0,1330,1328,1,0,0,0,1331,1332,5,377,0,0,1332,193,1,0,0,0,1333, + 1334,7,22,0,0,1334,195,1,0,0,0,1335,1336,5,337,0,0,1336,1351,3,218,109, + 0,1337,1351,3,200,100,0,1338,1351,3,278,139,0,1339,1340,5,24,0,0,1340,1341, + 5,396,0,0,1341,1342,5,337,0,0,1342,1351,3,218,109,0,1343,1344,5,150,0,0, + 1344,1345,5,396,0,0,1345,1351,3,200,100,0,1346,1347,3,198,99,0,1347,1348, + 5,396,0,0,1348,1349,3,278,139,0,1349,1351,1,0,0,0,1350,1335,1,0,0,0,1350, + 1337,1,0,0,0,1350,1338,1,0,0,0,1350,1339,1,0,0,0,1350,1343,1,0,0,0,1350, + 1346,1,0,0,0,1351,197,1,0,0,0,1352,1353,7,23,0,0,1353,199,1,0,0,0,1354, + 1355,5,31,0,0,1355,1356,5,376,0,0,1356,1357,3,312,156,0,1357,1358,5,377, + 0,0,1358,201,1,0,0,0,1359,1360,5,299,0,0,1360,1374,3,260,130,0,1361,1362, + 5,353,0,0,1362,1363,5,376,0,0,1363,1368,3,312,156,0,1364,1365,5,380,0,0, + 1365,1367,3,312,156,0,1366,1364,1,0,0,0,1367,1370,1,0,0,0,1368,1366,1,0, + 0,0,1368,1369,1,0,0,0,1369,1371,1,0,0,0,1370,1368,1,0,0,0,1371,1372,5,377, + 0,0,1372,1374,1,0,0,0,1373,1359,1,0,0,0,1373,1361,1,0,0,0,1374,203,1,0, + 0,0,1375,1376,5,359,0,0,1376,1377,3,260,130,0,1377,205,1,0,0,0,1378,1379, + 5,253,0,0,1379,1380,5,194,0,0,1380,1385,3,208,104,0,1381,1382,5,380,0,0, + 1382,1384,3,208,104,0,1383,1381,1,0,0,0,1384,1387,1,0,0,0,1385,1383,1,0, + 0,0,1385,1386,1,0,0,0,1386,207,1,0,0,0,1387,1385,1,0,0,0,1388,1428,3,258, + 129,0,1389,1428,3,214,107,0,1390,1391,5,376,0,0,1391,1428,5,377,0,0,1392, + 1393,5,376,0,0,1393,1398,3,258,129,0,1394,1395,5,380,0,0,1395,1397,3,258, + 129,0,1396,1394,1,0,0,0,1397,1400,1,0,0,0,1398,1396,1,0,0,0,1398,1399,1, + 0,0,0,1399,1401,1,0,0,0,1400,1398,1,0,0,0,1401,1402,5,377,0,0,1402,1428, + 1,0,0,0,1403,1404,3,212,106,0,1404,1405,5,376,0,0,1405,1410,3,258,129,0, + 1406,1407,5,380,0,0,1407,1409,3,258,129,0,1408,1406,1,0,0,0,1409,1412,1, + 0,0,0,1410,1408,1,0,0,0,1410,1411,1,0,0,0,1411,1413,1,0,0,0,1412,1410,1, + 0,0,0,1413,1414,5,377,0,0,1414,1428,1,0,0,0,1415,1416,3,210,105,0,1416, + 1417,5,376,0,0,1417,1422,3,208,104,0,1418,1419,5,380,0,0,1419,1421,3,208, + 104,0,1420,1418,1,0,0,0,1421,1424,1,0,0,0,1422,1420,1,0,0,0,1422,1423,1, + 0,0,0,1423,1425,1,0,0,0,1424,1422,1,0,0,0,1425,1426,5,377,0,0,1426,1428, + 1,0,0,0,1427,1388,1,0,0,0,1427,1389,1,0,0,0,1427,1390,1,0,0,0,1427,1392, + 1,0,0,0,1427,1403,1,0,0,0,1427,1415,1,0,0,0,1428,209,1,0,0,0,1429,1430, + 5,254,0,0,1430,1431,5,136,0,0,1431,211,1,0,0,0,1432,1433,7,24,0,0,1433, + 213,1,0,0,0,1434,1435,3,216,108,0,1435,1436,5,376,0,0,1436,1437,3,218,109, + 0,1437,1438,5,380,0,0,1438,1439,3,278,139,0,1439,1440,5,377,0,0,1440,215, + 1,0,0,0,1441,1442,7,25,0,0,1442,217,1,0,0,0,1443,1444,3,312,156,0,1444, + 219,1,0,0,0,1445,1446,5,256,0,0,1446,1447,3,260,130,0,1447,221,1,0,0,0, + 1448,1449,5,360,0,0,1449,1454,3,224,112,0,1450,1451,5,380,0,0,1451,1453, + 3,224,112,0,1452,1450,1,0,0,0,1453,1456,1,0,0,0,1454,1452,1,0,0,0,1454, + 1455,1,0,0,0,1455,223,1,0,0,0,1456,1454,1,0,0,0,1457,1458,3,296,148,0,1458, + 1459,5,183,0,0,1459,1460,3,226,113,0,1460,225,1,0,0,0,1461,1463,3,296,148, + 0,1462,1461,1,0,0,0,1462,1463,1,0,0,0,1463,1464,1,0,0,0,1464,1466,5,376, + 0,0,1465,1467,3,236,118,0,1466,1465,1,0,0,0,1466,1467,1,0,0,0,1467,1469, + 1,0,0,0,1468,1470,3,230,115,0,1469,1468,1,0,0,0,1469,1470,1,0,0,0,1470, + 1472,1,0,0,0,1471,1473,3,252,126,0,1472,1471,1,0,0,0,1472,1473,1,0,0,0, + 1473,1474,1,0,0,0,1474,1475,5,377,0,0,1475,227,1,0,0,0,1476,1477,5,280, + 0,0,1477,1479,5,376,0,0,1478,1480,3,236,118,0,1479,1478,1,0,0,0,1479,1480, + 1,0,0,0,1480,1482,1,0,0,0,1481,1483,3,230,115,0,1482,1481,1,0,0,0,1482, + 1483,1,0,0,0,1483,1485,1,0,0,0,1484,1486,3,240,120,0,1485,1484,1,0,0,0, + 1485,1486,1,0,0,0,1486,1488,1,0,0,0,1487,1489,3,246,123,0,1488,1487,1,0, + 0,0,1488,1489,1,0,0,0,1489,1491,1,0,0,0,1490,1492,3,248,124,0,1491,1490, + 1,0,0,0,1491,1492,1,0,0,0,1492,1494,1,0,0,0,1493,1495,3,242,121,0,1494, + 1493,1,0,0,0,1494,1495,1,0,0,0,1495,1496,1,0,0,0,1496,1497,3,250,125,0, + 1497,1502,5,377,0,0,1498,1500,5,183,0,0,1499,1498,1,0,0,0,1499,1500,1,0, + 0,0,1500,1501,1,0,0,0,1501,1503,3,304,152,0,1502,1499,1,0,0,0,1502,1503, + 1,0,0,0,1503,229,1,0,0,0,1504,1505,5,302,0,0,1505,1506,5,194,0,0,1506,1511, + 3,232,116,0,1507,1508,5,380,0,0,1508,1510,3,232,116,0,1509,1507,1,0,0,0, + 1510,1513,1,0,0,0,1511,1509,1,0,0,0,1511,1512,1,0,0,0,1512,231,1,0,0,0, + 1513,1511,1,0,0,0,1514,1516,3,258,129,0,1515,1517,7,26,0,0,1516,1515,1, + 0,0,0,1516,1517,1,0,0,0,1517,1520,1,0,0,0,1518,1519,5,86,0,0,1519,1521, + 7,27,0,0,1520,1518,1,0,0,0,1520,1521,1,0,0,0,1521,233,1,0,0,0,1522,1525, + 5,277,0,0,1523,1526,5,176,0,0,1524,1526,3,258,129,0,1525,1523,1,0,0,0,1525, + 1524,1,0,0,0,1526,235,1,0,0,0,1527,1528,5,307,0,0,1528,1529,5,194,0,0,1529, + 1534,3,258,129,0,1530,1531,5,380,0,0,1531,1533,3,258,129,0,1532,1530,1, + 0,0,0,1533,1536,1,0,0,0,1534,1532,1,0,0,0,1534,1535,1,0,0,0,1535,237,1, + 0,0,0,1536,1534,1,0,0,0,1537,1554,5,387,0,0,1538,1554,5,390,0,0,1539,1554, + 5,395,0,0,1540,1541,5,378,0,0,1541,1542,5,398,0,0,1542,1543,5,380,0,0,1543, + 1544,5,398,0,0,1544,1554,5,379,0,0,1545,1546,5,378,0,0,1546,1547,5,398, + 0,0,1547,1548,5,380,0,0,1548,1554,5,379,0,0,1549,1550,5,378,0,0,1550,1551, + 5,380,0,0,1551,1552,5,398,0,0,1552,1554,5,379,0,0,1553,1537,1,0,0,0,1553, + 1538,1,0,0,0,1553,1539,1,0,0,0,1553,1540,1,0,0,0,1553,1545,1,0,0,0,1553, + 1549,1,0,0,0,1554,239,1,0,0,0,1555,1556,5,281,0,0,1556,1561,3,170,85,0, + 1557,1558,5,380,0,0,1558,1560,3,170,85,0,1559,1557,1,0,0,0,1560,1563,1, + 0,0,0,1561,1559,1,0,0,0,1561,1562,1,0,0,0,1562,241,1,0,0,0,1563,1561,1, + 0,0,0,1564,1565,5,308,0,0,1565,1567,5,376,0,0,1566,1568,3,244,122,0,1567, + 1566,1,0,0,0,1568,1569,1,0,0,0,1569,1567,1,0,0,0,1569,1570,1,0,0,0,1570, + 1571,1,0,0,0,1571,1573,5,377,0,0,1572,1574,3,256,128,0,1573,1572,1,0,0, + 0,1573,1574,1,0,0,0,1574,243,1,0,0,0,1575,1577,3,306,153,0,1576,1578,3, + 238,119,0,1577,1576,1,0,0,0,1577,1578,1,0,0,0,1578,245,1,0,0,0,1579,1580, + 5,176,0,0,1580,1581,5,323,0,0,1581,1582,5,309,0,0,1582,1588,5,279,0,0,1583, + 1584,5,300,0,0,1584,1585,5,322,0,0,1585,1586,5,309,0,0,1586,1588,5,279, + 0,0,1587,1579,1,0,0,0,1587,1583,1,0,0,0,1588,247,1,0,0,0,1589,1590,5,6, + 0,0,1590,1591,5,279,0,0,1591,1592,5,328,0,0,1592,1593,5,97,0,0,1593,1594, + 5,72,0,0,1594,1614,5,322,0,0,1595,1596,5,6,0,0,1596,1597,5,279,0,0,1597, + 1598,5,328,0,0,1598,1599,5,343,0,0,1599,1600,5,291,0,0,1600,1614,5,322, + 0,0,1601,1602,5,6,0,0,1602,1603,5,279,0,0,1603,1604,5,328,0,0,1604,1605, + 5,343,0,0,1605,1606,5,72,0,0,1606,1614,3,306,153,0,1607,1608,5,6,0,0,1608, + 1609,5,279,0,0,1609,1610,5,328,0,0,1610,1611,5,343,0,0,1611,1612,5,44,0, + 0,1612,1614,3,306,153,0,1613,1589,1,0,0,0,1613,1595,1,0,0,0,1613,1601,1, + 0,0,0,1613,1607,1,0,0,0,1614,249,1,0,0,0,1615,1616,5,229,0,0,1616,1621, + 3,170,85,0,1617,1618,5,380,0,0,1618,1620,3,170,85,0,1619,1617,1,0,0,0,1620, + 1623,1,0,0,0,1621,1619,1,0,0,0,1621,1622,1,0,0,0,1622,251,1,0,0,0,1623, + 1621,1,0,0,0,1624,1625,5,314,0,0,1625,1626,5,187,0,0,1626,1627,3,278,139, + 0,1627,1628,3,254,127,0,1628,1634,1,0,0,0,1629,1630,5,323,0,0,1630,1631, + 5,187,0,0,1631,1632,5,398,0,0,1632,1634,3,254,127,0,1633,1624,1,0,0,0,1633, + 1629,1,0,0,0,1634,253,1,0,0,0,1635,1636,5,101,0,0,1636,1637,5,179,0,0,1637, + 1638,5,219,0,0,1638,1639,5,322,0,0,1639,255,1,0,0,0,1640,1641,5,362,0,0, + 1641,1642,3,278,139,0,1642,257,1,0,0,0,1643,1644,3,260,130,0,1644,259,1, + 0,0,0,1645,1646,6,130,-1,0,1646,1647,5,294,0,0,1647,1658,3,260,130,5,1648, + 1649,5,241,0,0,1649,1650,5,376,0,0,1650,1651,3,156,78,0,1651,1652,5,377, + 0,0,1652,1658,1,0,0,0,1653,1655,3,266,133,0,1654,1656,3,262,131,0,1655, + 1654,1,0,0,0,1655,1656,1,0,0,0,1656,1658,1,0,0,0,1657,1645,1,0,0,0,1657, + 1648,1,0,0,0,1657,1653,1,0,0,0,1658,1667,1,0,0,0,1659,1660,10,2,0,0,1660, + 1661,5,179,0,0,1661,1666,3,260,130,3,1662,1663,10,1,0,0,1663,1664,5,301, + 0,0,1664,1666,3,260,130,2,1665,1659,1,0,0,0,1665,1662,1,0,0,0,1666,1669, + 1,0,0,0,1667,1665,1,0,0,0,1667,1668,1,0,0,0,1668,261,1,0,0,0,1669,1667, + 1,0,0,0,1670,1672,5,294,0,0,1671,1670,1,0,0,0,1671,1672,1,0,0,0,1672,1673, + 1,0,0,0,1673,1674,5,187,0,0,1674,1675,3,266,133,0,1675,1676,5,179,0,0,1676, + 1677,3,266,133,0,1677,1754,1,0,0,0,1678,1680,5,294,0,0,1679,1678,1,0,0, + 0,1679,1680,1,0,0,0,1680,1681,1,0,0,0,1681,1682,5,259,0,0,1682,1683,5,376, + 0,0,1683,1688,3,258,129,0,1684,1685,5,380,0,0,1685,1687,3,258,129,0,1686, + 1684,1,0,0,0,1687,1690,1,0,0,0,1688,1686,1,0,0,0,1688,1689,1,0,0,0,1689, + 1691,1,0,0,0,1690,1688,1,0,0,0,1691,1692,5,377,0,0,1692,1754,1,0,0,0,1693, + 1695,5,294,0,0,1694,1693,1,0,0,0,1694,1695,1,0,0,0,1695,1696,1,0,0,0,1696, + 1697,5,259,0,0,1697,1698,5,376,0,0,1698,1699,3,156,78,0,1699,1700,5,377, + 0,0,1700,1754,1,0,0,0,1701,1702,5,241,0,0,1702,1703,5,376,0,0,1703,1704, + 3,156,78,0,1704,1705,5,377,0,0,1705,1754,1,0,0,0,1706,1708,5,294,0,0,1707, + 1706,1,0,0,0,1707,1708,1,0,0,0,1708,1709,1,0,0,0,1709,1710,5,319,0,0,1710, + 1754,3,266,133,0,1711,1713,5,294,0,0,1712,1711,1,0,0,0,1712,1713,1,0,0, + 0,1713,1714,1,0,0,0,1714,1715,5,276,0,0,1715,1729,7,28,0,0,1716,1717,5, + 376,0,0,1717,1730,5,377,0,0,1718,1719,5,376,0,0,1719,1724,3,258,129,0,1720, + 1721,5,380,0,0,1721,1723,3,258,129,0,1722,1720,1,0,0,0,1723,1726,1,0,0, + 0,1724,1722,1,0,0,0,1724,1725,1,0,0,0,1725,1727,1,0,0,0,1726,1724,1,0,0, + 0,1727,1728,5,377,0,0,1728,1730,1,0,0,0,1729,1716,1,0,0,0,1729,1718,1,0, + 0,0,1730,1754,1,0,0,0,1731,1733,5,294,0,0,1732,1731,1,0,0,0,1732,1733,1, + 0,0,0,1733,1734,1,0,0,0,1734,1735,5,276,0,0,1735,1754,3,266,133,0,1736, + 1738,5,269,0,0,1737,1739,5,294,0,0,1738,1737,1,0,0,0,1738,1739,1,0,0,0, + 1739,1740,1,0,0,0,1740,1754,5,295,0,0,1741,1743,5,269,0,0,1742,1744,5,294, + 0,0,1743,1742,1,0,0,0,1743,1744,1,0,0,0,1744,1745,1,0,0,0,1745,1754,7,29, + 0,0,1746,1748,5,269,0,0,1747,1749,5,294,0,0,1748,1747,1,0,0,0,1748,1749, + 1,0,0,0,1749,1750,1,0,0,0,1750,1751,5,232,0,0,1751,1752,5,248,0,0,1752, + 1754,3,266,133,0,1753,1671,1,0,0,0,1753,1679,1,0,0,0,1753,1694,1,0,0,0, + 1753,1701,1,0,0,0,1753,1707,1,0,0,0,1753,1712,1,0,0,0,1753,1732,1,0,0,0, + 1753,1736,1,0,0,0,1753,1741,1,0,0,0,1753,1746,1,0,0,0,1754,263,1,0,0,0, + 1755,1757,5,294,0,0,1756,1755,1,0,0,0,1756,1757,1,0,0,0,1757,1758,1,0,0, + 0,1758,1759,5,276,0,0,1759,1773,7,28,0,0,1760,1761,5,376,0,0,1761,1774, + 5,377,0,0,1762,1763,5,376,0,0,1763,1768,3,258,129,0,1764,1765,5,380,0,0, + 1765,1767,3,258,129,0,1766,1764,1,0,0,0,1767,1770,1,0,0,0,1768,1766,1,0, + 0,0,1768,1769,1,0,0,0,1769,1771,1,0,0,0,1770,1768,1,0,0,0,1771,1772,5,377, + 0,0,1772,1774,1,0,0,0,1773,1760,1,0,0,0,1773,1762,1,0,0,0,1774,1781,1,0, + 0,0,1775,1777,5,294,0,0,1776,1775,1,0,0,0,1776,1777,1,0,0,0,1777,1778,1, + 0,0,0,1778,1779,5,276,0,0,1779,1781,3,266,133,0,1780,1756,1,0,0,0,1780, + 1776,1,0,0,0,1781,265,1,0,0,0,1782,1783,6,133,-1,0,1783,1787,3,268,134, + 0,1784,1785,7,30,0,0,1785,1787,3,266,133,7,1786,1782,1,0,0,0,1786,1784, + 1,0,0,0,1787,1809,1,0,0,0,1788,1789,10,6,0,0,1789,1790,7,31,0,0,1790,1808, + 3,266,133,7,1791,1792,10,5,0,0,1792,1793,7,32,0,0,1793,1808,3,266,133,6, + 1794,1795,10,4,0,0,1795,1796,5,371,0,0,1796,1808,3,266,133,5,1797,1798, + 10,3,0,0,1798,1799,5,372,0,0,1799,1808,3,266,133,4,1800,1801,10,2,0,0,1801, + 1802,5,370,0,0,1802,1808,3,266,133,3,1803,1804,10,1,0,0,1804,1805,3,330, + 165,0,1805,1806,3,266,133,2,1806,1808,1,0,0,0,1807,1788,1,0,0,0,1807,1791, + 1,0,0,0,1807,1794,1,0,0,0,1807,1797,1,0,0,0,1807,1800,1,0,0,0,1807,1803, + 1,0,0,0,1808,1811,1,0,0,0,1809,1807,1,0,0,0,1809,1810,1,0,0,0,1810,267, + 1,0,0,0,1811,1809,1,0,0,0,1812,1813,6,134,-1,0,1813,1815,5,198,0,0,1814, + 1816,3,310,155,0,1815,1814,1,0,0,0,1816,1817,1,0,0,0,1817,1815,1,0,0,0, + 1817,1818,1,0,0,0,1818,1821,1,0,0,0,1819,1820,5,236,0,0,1820,1822,3,258, + 129,0,1821,1819,1,0,0,0,1821,1822,1,0,0,0,1822,1823,1,0,0,0,1823,1824,5, + 237,0,0,1824,1904,1,0,0,0,1825,1826,5,198,0,0,1826,1828,3,258,129,0,1827, + 1829,3,310,155,0,1828,1827,1,0,0,0,1829,1830,1,0,0,0,1830,1828,1,0,0,0, + 1830,1831,1,0,0,0,1831,1834,1,0,0,0,1832,1833,5,236,0,0,1833,1835,3,258, + 129,0,1834,1832,1,0,0,0,1834,1835,1,0,0,0,1835,1836,1,0,0,0,1836,1837,5, + 237,0,0,1837,1904,1,0,0,0,1838,1839,5,199,0,0,1839,1840,5,376,0,0,1840, + 1841,3,258,129,0,1841,1842,5,183,0,0,1842,1843,3,54,27,0,1843,1844,5,377, + 0,0,1844,1904,1,0,0,0,1845,1846,5,44,0,0,1846,1847,5,376,0,0,1847,1850, + 3,258,129,0,1848,1849,5,59,0,0,1849,1851,5,86,0,0,1850,1848,1,0,0,0,1850, + 1851,1,0,0,0,1851,1852,1,0,0,0,1852,1853,5,377,0,0,1853,1904,1,0,0,0,1854, + 1855,5,72,0,0,1855,1856,5,376,0,0,1856,1859,3,258,129,0,1857,1858,5,59, + 0,0,1858,1860,5,86,0,0,1859,1857,1,0,0,0,1859,1860,1,0,0,0,1860,1861,1, + 0,0,0,1861,1862,5,377,0,0,1862,1904,1,0,0,0,1863,1864,5,312,0,0,1864,1865, + 5,376,0,0,1865,1866,3,266,133,0,1866,1867,5,259,0,0,1867,1868,3,266,133, + 0,1868,1869,5,377,0,0,1869,1904,1,0,0,0,1870,1904,3,338,169,0,1871,1904, + 5,387,0,0,1872,1873,3,312,156,0,1873,1874,5,373,0,0,1874,1875,5,387,0,0, + 1875,1904,1,0,0,0,1876,1877,5,376,0,0,1877,1878,3,156,78,0,1878,1879,5, + 377,0,0,1879,1904,1,0,0,0,1880,1881,3,270,135,0,1881,1893,5,376,0,0,1882, + 1884,3,346,173,0,1883,1882,1,0,0,0,1883,1884,1,0,0,0,1884,1885,1,0,0,0, + 1885,1890,3,258,129,0,1886,1887,5,380,0,0,1887,1889,3,258,129,0,1888,1886, + 1,0,0,0,1889,1892,1,0,0,0,1890,1888,1,0,0,0,1890,1891,1,0,0,0,1891,1894, + 1,0,0,0,1892,1890,1,0,0,0,1893,1883,1,0,0,0,1893,1894,1,0,0,0,1894,1895, + 1,0,0,0,1895,1896,5,377,0,0,1896,1904,1,0,0,0,1897,1904,3,304,152,0,1898, + 1904,3,272,136,0,1899,1900,5,376,0,0,1900,1901,3,258,129,0,1901,1902,5, + 377,0,0,1902,1904,1,0,0,0,1903,1812,1,0,0,0,1903,1825,1,0,0,0,1903,1838, + 1,0,0,0,1903,1845,1,0,0,0,1903,1854,1,0,0,0,1903,1863,1,0,0,0,1903,1870, + 1,0,0,0,1903,1871,1,0,0,0,1903,1872,1,0,0,0,1903,1876,1,0,0,0,1903,1880, + 1,0,0,0,1903,1897,1,0,0,0,1903,1898,1,0,0,0,1903,1899,1,0,0,0,1904,1912, + 1,0,0,0,1905,1906,10,4,0,0,1906,1907,5,374,0,0,1907,1908,3,266,133,0,1908, + 1909,5,375,0,0,1909,1911,1,0,0,0,1910,1905,1,0,0,0,1911,1914,1,0,0,0,1912, + 1910,1,0,0,0,1912,1913,1,0,0,0,1913,269,1,0,0,0,1914,1912,1,0,0,0,1915, + 1919,3,348,174,0,1916,1919,3,350,175,0,1917,1919,3,312,156,0,1918,1915, + 1,0,0,0,1918,1916,1,0,0,0,1918,1917,1,0,0,0,1919,271,1,0,0,0,1920,1921, + 3,312,156,0,1921,273,1,0,0,0,1922,1923,3,304,152,0,1923,275,1,0,0,0,1924, + 1927,3,304,152,0,1925,1927,3,272,136,0,1926,1924,1,0,0,0,1926,1925,1,0, + 0,0,1927,277,1,0,0,0,1928,1931,5,267,0,0,1929,1932,3,280,140,0,1930,1932, + 3,284,142,0,1931,1929,1,0,0,0,1931,1930,1,0,0,0,1931,1932,1,0,0,0,1932, + 279,1,0,0,0,1933,1935,3,282,141,0,1934,1936,3,286,143,0,1935,1934,1,0,0, + 0,1935,1936,1,0,0,0,1936,281,1,0,0,0,1937,1938,3,288,144,0,1938,1939,3, + 290,145,0,1939,1941,1,0,0,0,1940,1937,1,0,0,0,1941,1942,1,0,0,0,1942,1940, + 1,0,0,0,1942,1943,1,0,0,0,1943,283,1,0,0,0,1944,1947,3,286,143,0,1945,1948, + 3,282,141,0,1946,1948,3,286,143,0,1947,1945,1,0,0,0,1947,1946,1,0,0,0,1947, + 1948,1,0,0,0,1948,285,1,0,0,0,1949,1950,3,288,144,0,1950,1951,3,290,145, + 0,1951,1952,5,343,0,0,1952,1953,3,290,145,0,1953,287,1,0,0,0,1954,1956, + 7,33,0,0,1955,1954,1,0,0,0,1955,1956,1,0,0,0,1956,1957,1,0,0,0,1957,1960, + 7,34,0,0,1958,1960,5,397,0,0,1959,1955,1,0,0,0,1959,1958,1,0,0,0,1960,289, + 1,0,0,0,1961,1964,3,304,152,0,1962,1964,3,348,174,0,1963,1961,1,0,0,0,1963, + 1962,1,0,0,0,1964,291,1,0,0,0,1965,1967,5,183,0,0,1966,1965,1,0,0,0,1966, + 1967,1,0,0,0,1967,1968,1,0,0,0,1968,1970,3,304,152,0,1969,1971,3,300,150, + 0,1970,1969,1,0,0,0,1970,1971,1,0,0,0,1971,293,1,0,0,0,1972,1974,5,183, + 0,0,1973,1972,1,0,0,0,1973,1974,1,0,0,0,1974,1975,1,0,0,0,1975,1977,3,304, + 152,0,1976,1978,3,300,150,0,1977,1976,1,0,0,0,1977,1978,1,0,0,0,1978,295, + 1,0,0,0,1979,1980,3,304,152,0,1980,1981,3,298,149,0,1981,297,1,0,0,0,1982, + 1983,5,284,0,0,1983,1985,3,304,152,0,1984,1982,1,0,0,0,1985,1986,1,0,0, + 0,1986,1984,1,0,0,0,1986,1987,1,0,0,0,1987,1990,1,0,0,0,1988,1990,1,0,0, + 0,1989,1984,1,0,0,0,1989,1988,1,0,0,0,1990,299,1,0,0,0,1991,1992,5,376, + 0,0,1992,1993,3,302,151,0,1993,1994,5,377,0,0,1994,301,1,0,0,0,1995,2000, + 3,304,152,0,1996,1997,5,380,0,0,1997,1999,3,304,152,0,1998,1996,1,0,0,0, + 1999,2002,1,0,0,0,2000,1998,1,0,0,0,2000,2001,1,0,0,0,2001,303,1,0,0,0, + 2002,2000,1,0,0,0,2003,2007,3,306,153,0,2004,2007,3,308,154,0,2005,2007, + 3,350,175,0,2006,2003,1,0,0,0,2006,2004,1,0,0,0,2006,2005,1,0,0,0,2007, + 305,1,0,0,0,2008,2009,7,35,0,0,2009,307,1,0,0,0,2010,2011,5,397,0,0,2011, + 309,1,0,0,0,2012,2013,5,358,0,0,2013,2014,3,258,129,0,2014,2015,5,339,0, + 0,2015,2016,3,258,129,0,2016,311,1,0,0,0,2017,2022,3,304,152,0,2018,2019, + 5,373,0,0,2019,2021,3,304,152,0,2020,2018,1,0,0,0,2021,2024,1,0,0,0,2022, + 2023,1,0,0,0,2022,2020,1,0,0,0,2023,313,1,0,0,0,2024,2022,1,0,0,0,2025, + 2026,5,361,0,0,2026,2027,3,320,160,0,2027,315,1,0,0,0,2028,2029,5,58,0, + 0,2029,2030,5,294,0,0,2030,2031,5,241,0,0,2031,317,1,0,0,0,2032,2033,5, + 58,0,0,2033,2034,5,241,0,0,2034,319,1,0,0,0,2035,2036,5,376,0,0,2036,2041, + 3,322,161,0,2037,2038,5,380,0,0,2038,2040,3,322,161,0,2039,2037,1,0,0,0, + 2040,2043,1,0,0,0,2041,2039,1,0,0,0,2041,2042,1,0,0,0,2042,2044,1,0,0,0, + 2043,2041,1,0,0,0,2044,2045,5,377,0,0,2045,321,1,0,0,0,2046,2051,3,324, + 162,0,2047,2049,5,365,0,0,2048,2047,1,0,0,0,2048,2049,1,0,0,0,2049,2050, + 1,0,0,0,2050,2052,3,326,163,0,2051,2048,1,0,0,0,2051,2052,1,0,0,0,2052, + 323,1,0,0,0,2053,2057,3,304,152,0,2054,2057,3,272,136,0,2055,2057,5,397, + 0,0,2056,2053,1,0,0,0,2056,2054,1,0,0,0,2056,2055,1,0,0,0,2057,325,1,0, + 0,0,2058,2063,5,398,0,0,2059,2063,5,399,0,0,2060,2063,3,344,172,0,2061, + 2063,5,397,0,0,2062,2058,1,0,0,0,2062,2059,1,0,0,0,2062,2060,1,0,0,0,2062, + 2061,1,0,0,0,2063,327,1,0,0,0,2064,2071,5,179,0,0,2065,2066,5,371,0,0,2066, + 2071,5,371,0,0,2067,2071,5,301,0,0,2068,2069,5,370,0,0,2069,2071,5,370, + 0,0,2070,2064,1,0,0,0,2070,2065,1,0,0,0,2070,2067,1,0,0,0,2070,2068,1,0, + 0,0,2071,329,1,0,0,0,2072,2087,5,365,0,0,2073,2087,5,366,0,0,2074,2087, + 5,367,0,0,2075,2076,5,367,0,0,2076,2087,5,365,0,0,2077,2078,5,366,0,0,2078, + 2087,5,365,0,0,2079,2080,5,367,0,0,2080,2087,5,366,0,0,2081,2082,5,368, + 0,0,2082,2087,5,365,0,0,2083,2084,5,367,0,0,2084,2085,5,365,0,0,2085,2087, + 5,366,0,0,2086,2072,1,0,0,0,2086,2073,1,0,0,0,2086,2074,1,0,0,0,2086,2075, + 1,0,0,0,2086,2077,1,0,0,0,2086,2079,1,0,0,0,2086,2081,1,0,0,0,2086,2083, + 1,0,0,0,2087,331,1,0,0,0,2088,2089,5,367,0,0,2089,2096,5,367,0,0,2090,2091, + 5,366,0,0,2091,2096,5,366,0,0,2092,2096,5,371,0,0,2093,2096,5,372,0,0,2094, + 2096,5,370,0,0,2095,2088,1,0,0,0,2095,2090,1,0,0,0,2095,2092,1,0,0,0,2095, + 2093,1,0,0,0,2095,2094,1,0,0,0,2096,333,1,0,0,0,2097,2098,7,36,0,0,2098, + 335,1,0,0,0,2099,2100,7,37,0,0,2100,337,1,0,0,0,2101,2114,3,340,170,0,2102, + 2114,3,342,171,0,2103,2114,3,278,139,0,2104,2105,5,389,0,0,2105,2114,3, + 342,171,0,2106,2114,3,344,172,0,2107,2114,5,399,0,0,2108,2114,5,400,0,0, + 2109,2111,5,294,0,0,2110,2109,1,0,0,0,2110,2111,1,0,0,0,2111,2112,1,0,0, + 0,2112,2114,5,295,0,0,2113,2101,1,0,0,0,2113,2102,1,0,0,0,2113,2103,1,0, + 0,0,2113,2104,1,0,0,0,2113,2106,1,0,0,0,2113,2107,1,0,0,0,2113,2108,1,0, + 0,0,2113,2110,1,0,0,0,2114,339,1,0,0,0,2115,2116,5,397,0,0,2116,341,1,0, + 0,0,2117,2118,5,398,0,0,2118,343,1,0,0,0,2119,2120,7,29,0,0,2120,345,1, + 0,0,0,2121,2122,7,38,0,0,2122,347,1,0,0,0,2123,2124,7,39,0,0,2124,349,1, + 0,0,0,2125,2126,7,40,0,0,2126,351,1,0,0,0,247,360,363,365,380,398,402,411, + 416,423,430,434,443,455,458,465,473,478,481,488,496,500,512,520,524,545, + 549,553,557,566,571,575,579,583,586,590,595,601,606,611,614,618,626,634, + 638,642,646,650,654,658,662,666,668,678,686,710,717,723,726,729,739,742, + 750,762,786,799,804,808,816,820,828,838,842,848,852,856,859,868,872,879, + 882,892,900,908,912,927,946,957,961,968,973,979,983,990,994,998,1002,1010, + 1014,1019,1024,1030,1033,1037,1048,1057,1070,1085,1088,1092,1095,1097,1102, + 1106,1109,1113,1122,1131,1141,1146,1158,1161,1164,1167,1173,1177,1185,1188, + 1193,1196,1198,1212,1223,1228,1236,1239,1242,1247,1249,1251,1256,1259,1263, + 1266,1269,1281,1288,1299,1328,1350,1368,1373,1385,1398,1410,1422,1427,1454, + 1462,1466,1469,1472,1479,1482,1485,1488,1491,1494,1499,1502,1511,1516,1520, + 1525,1534,1553,1561,1569,1573,1577,1587,1613,1621,1633,1655,1657,1665,1667, + 1671,1679,1688,1694,1707,1712,1724,1729,1732,1738,1743,1748,1753,1756,1768, + 1773,1776,1780,1786,1807,1809,1817,1821,1830,1834,1850,1859,1883,1890,1893, + 1903,1912,1918,1926,1931,1935,1942,1947,1955,1959,1963,1966,1970,1973,1977, + 1986,1989,2000,2006,2022,2041,2048,2051,2056,2062,2070,2086,2095,2110,2113]; private static __ATN: ATN; public static get _ATN(): ATN { @@ -14111,17 +14149,20 @@ export class ColumnConstraintContext extends ParserRuleContext { public KW_KEY(): TerminalNode { return this.getToken(FlinkSqlParser.KW_KEY, 0); } + public KW_CONSTRAINT(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); + } + public constraintName(): ConstraintNameContext { + return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; + } public KW_NOT(): TerminalNode { return this.getToken(FlinkSqlParser.KW_NOT, 0); } public KW_ENFORCED(): TerminalNode { return this.getToken(FlinkSqlParser.KW_ENFORCED, 0); } - public KW_CONSTRAINT(): TerminalNode { - return this.getToken(FlinkSqlParser.KW_CONSTRAINT, 0); - } - public constraintName(): ConstraintNameContext { - return this.getTypedRuleContext(ConstraintNameContext, 0) as ConstraintNameContext; + public KW_NULL(): TerminalNode { + return this.getToken(FlinkSqlParser.KW_NULL, 0); } public get ruleIndex(): number { return FlinkSqlParser.RULE_columnConstraint; diff --git a/src/lib/flinksql/FlinkSqlParserListener.ts b/src/lib/flinksql/FlinkSqlParserListener.ts index 7b7b16f..8c51d18 100644 --- a/src/lib/flinksql/FlinkSqlParserListener.ts +++ b/src/lib/flinksql/FlinkSqlParserListener.ts @@ -1,4 +1,4 @@ -// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 import {ParseTreeListener} from "antlr4"; diff --git a/src/lib/flinksql/FlinkSqlParserVisitor.ts b/src/lib/flinksql/FlinkSqlParserVisitor.ts index 9674e7f..d834d9d 100644 --- a/src/lib/flinksql/FlinkSqlParserVisitor.ts +++ b/src/lib/flinksql/FlinkSqlParserVisitor.ts @@ -1,4 +1,4 @@ -// Generated from /Users/hayden/Desktop/dt-works/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 +// Generated from /Users/mortalYoung/Projects/dt-sql-parser/src/grammar/flinksql/FlinkSqlParser.g4 by ANTLR 4.12.0 import {ParseTreeVisitor} from 'antlr4'; diff --git a/test/parser/flinksql/syntax/fixtures/createTable.sql b/test/parser/flinksql/syntax/fixtures/createTable.sql index ac51a98..9f9d5d8 100644 --- a/test/parser/flinksql/syntax/fixtures/createTable.sql +++ b/test/parser/flinksql/syntax/fixtures/createTable.sql @@ -2,6 +2,15 @@ CREATE TABLE MyTable ('user_id' BIGINT, 'name' STRING) WITH ('connector' = 'orac CREATE TABLE MyTable WITH ('connector' = 'oracle-x'); +CREATE TEMPORARY TABLE client_errors ( + log_time TIMESTAMP(3), + request_line STRING, + status_code STRING, + size INT +) WITH ( + 'connector' = 'stream-x' +); + -- 尽管官方文档的 BNF 里没有支持创建临时表,但实际上是支持的 CREATE TEMPORARY TABLE MyTable ('user_id' BIGINT, 'name' STRING) WITH ('connector' = 'oracle-x'); @@ -231,4 +240,65 @@ CREATE TABLE tbl1 ( ) LIKE Orders ( OVERWRITING OPTIONS EXCLUDING CONSTRAINTS +); + +CREATE TEMPORARY TABLE server_logs ( + client_ip STRING, + client_identity STRING, + userid STRING, + user_agent STRING, + log_time TIMESTAMP(3), + request_line STRING, + status_code STRING, + size INT +) WITH ( + 'connector' = 'faker' +); + +CREATE TEMPORARY TABLE aggregations1 ( + `browser` STRING, + `status_code` STRING, + `end_time` TIMESTAMP(3), + `requests` BIGINT NOT NULL +) WITH ( + 'connector' = 'blackhole' +); + +CREATE TABLE dt_catalog.dt_db.doctor_sightings ( + doctor STRING, + sighting_time TIMESTAMP(3), + WATERMARK FOR sighting_time AS sighting_time - INTERVAL '15' SECONDS +) WITH ( + 'connector' = 'faker' +); + + +CREATE TABLE dt_catalog.dt_db.bids ( + bid_id STRING, + currency_code STRING, + bid_price DOUBLE, + transaction_time TIMESTAMP(3), + WATERMARK FOR transaction_time AS transaction_time - INTERVAL '5' SECONDS -- 定义事件时间,允许的最大窗口延迟为5s +) WITH ( + 'connector' = 'faker' +); + + +CREATE TABLE dt_catalog.dt_db.currency_rates ( + `currency_code` STRING, + `eur_rate` DECIMAL(6,4), + `rate_time` TIMESTAMP(3), + WATERMARK FOR `rate_time` AS rate_time - INTERVAL '15' SECONDS, -- 定义事件时间 + PRIMARY KEY (currency_code) NOT ENFORCED -- 定义主键 +) WITH ( + 'connector' = 'faker' +); + +CREATE TABLE dt_catalog.dt_db.users ( + -- That was weird, NOT ENFORCED should have been necessary but we got a demo like the following and it could work! + user_id INT PRIMARY KEY, + user_name VARCHAR(255) NOT NULL, + age INT NULL +) WITH ( + 'connector' = 'faker' ); \ No newline at end of file diff --git a/test/parser/flinksql/syntax/fixtures/createView.sql b/test/parser/flinksql/syntax/fixtures/createView.sql index 4c8d4ea..bf26db0 100644 --- a/test/parser/flinksql/syntax/fixtures/createView.sql +++ b/test/parser/flinksql/syntax/fixtures/createView.sql @@ -34,4 +34,23 @@ CREATE TEMPORARY VIEW IF NOT EXISTS v AS SELECT col1 FROM - tbl; \ No newline at end of file + tbl; + +CREATE TEMPORARY VIEW browsers AS +SELECT + REGEXP_EXTRACT(user_agent,'[^\/]+') AS browser, + status_code, + log_time +FROM + server_logs; + +CREATE VIEW server_logs_window_1m AS +SELECT + TUMBLE_START(log_time, INTERVAL '1' MINUTE) AS window_start, + TUMBLE_ROWTIME(log_time, INTERVAL '1' MINUTE) AS window_end, + SUM(size) AS total_size, + COUNT(*) AS num_requests +FROM + server_logs +GROUP BY + TUMBLE(log_time, INTERVAL '1' MINUTE); \ No newline at end of file