From 7fb310296d39bab9193a7f6a0fbf139e3a5db1c1 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 2 May 2021 21:11:03 +0200 Subject: [PATCH] Converted typedef to use declarator. #121 --- .../cache/fragment-cache-mos6502x.asm | 5 + .../dk/camelot64/kickc/parser/KickCParser.g4 | 8 +- .../camelot64/kickc/parser/KickCParser.interp | 2 +- .../camelot64/kickc/parser/KickCParser.java | 1776 ++++++++--------- .../camelot64/kickc/parser/KickCParser_new.g4 | 2 +- .../Pass0GenerateStatementSequence.java | 9 +- 6 files changed, 883 insertions(+), 919 deletions(-) diff --git a/src/main/fragment/cache/fragment-cache-mos6502x.asm b/src/main/fragment/cache/fragment-cache-mos6502x.asm index 191630a69..c8630e54d 100644 --- a/src/main/fragment/cache/fragment-cache-mos6502x.asm +++ b/src/main/fragment/cache/fragment-cache-mos6502x.asm @@ -19759,3 +19759,8 @@ lda {z2}+2 sta {z1} lda {z2}+3 sta {z1}+1 +//FRAGMENT _deref_qvoc1=pvoc2 +lda #<{c2} +sta {c1} +lda #>{c2} +sta {c1}+1 diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 index 5a3e72658..a36650c1f 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.g4 @@ -8,11 +8,15 @@ options { tokenVocab=KickCLexer; } @members { + // The C parser CParser cParser; + // true when a typedef is being created + boolean isTypedef; public KickCParser(TokenStream input, CParser cParser) { this(input); this.cParser = cParser; + this.isTypedef = false; } } @@ -53,7 +57,7 @@ declaratorInit ; typeDef - : TYPEDEF declType declPointer* NAME declArray* {cParser.addTypedef($NAME.text);} + : TYPEDEF declType { isTypedef=true; } declarator ; declType @@ -75,7 +79,7 @@ typeSpecifier ; declarator - : NAME #declaratorName // {if(isTypedef) Parser.addTypedef($NAME.text);} + : NAME {if(isTypedef) { cParser.addTypedef($NAME.text); isTypedef=false; } } #declaratorName | declarator BRACKET_BEGIN (expr)? BRACKET_END #declaratorArray | ASTERISK directive* declarator #declaratorPointer | PAR_BEGIN declarator PAR_END #declaratorPar diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp index e56f010ab..0f1a919b8 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.interp @@ -364,4 +364,4 @@ asmExpr atn: -[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 156, 865, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 7, 4, 106, 10, 4, 12, 4, 14, 4, 109, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 125, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 136, 10, 7, 12, 7, 14, 7, 139, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 144, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 150, 10, 8, 3, 9, 3, 9, 3, 9, 7, 9, 155, 10, 9, 12, 9, 14, 9, 158, 11, 9, 3, 9, 3, 9, 7, 9, 162, 10, 9, 12, 9, 14, 9, 165, 11, 9, 3, 9, 3, 9, 3, 10, 7, 10, 170, 10, 10, 12, 10, 14, 10, 173, 11, 10, 3, 10, 3, 10, 7, 10, 177, 10, 10, 12, 10, 14, 10, 180, 11, 10, 3, 11, 3, 11, 7, 11, 184, 10, 11, 12, 11, 14, 11, 187, 11, 11, 3, 12, 3, 12, 5, 12, 191, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 203, 10, 13, 3, 13, 7, 13, 206, 10, 13, 12, 13, 14, 13, 209, 11, 13, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 215, 10, 14, 12, 14, 14, 14, 218, 11, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 225, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 230, 10, 14, 3, 14, 7, 14, 233, 10, 14, 12, 14, 14, 14, 236, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 242, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 249, 10, 15, 3, 15, 3, 15, 3, 15, 7, 15, 254, 10, 15, 12, 15, 14, 15, 257, 11, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 5, 17, 264, 10, 17, 3, 17, 3, 17, 6, 17, 268, 10, 17, 13, 17, 14, 17, 269, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 282, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 294, 10, 21, 12, 21, 14, 21, 297, 11, 21, 3, 22, 3, 22, 3, 22, 5, 22, 302, 10, 22, 3, 23, 3, 23, 7, 23, 306, 10, 23, 12, 23, 14, 23, 309, 11, 23, 3, 23, 3, 23, 3, 23, 5, 23, 314, 10, 23, 3, 23, 3, 23, 3, 23, 5, 23, 319, 10, 23, 3, 24, 3, 24, 5, 24, 323, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 7, 25, 330, 10, 25, 12, 25, 14, 25, 333, 11, 25, 3, 26, 3, 26, 7, 26, 337, 10, 26, 12, 26, 14, 26, 340, 11, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 346, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 354, 10, 27, 12, 27, 14, 27, 357, 11, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 368, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 379, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 400, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 407, 10, 29, 12, 29, 14, 29, 410, 11, 29, 3, 29, 3, 29, 3, 29, 5, 29, 415, 10, 29, 3, 30, 6, 30, 418, 10, 30, 13, 30, 14, 30, 419, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 427, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 440, 10, 31, 3, 31, 7, 31, 443, 10, 31, 12, 31, 14, 31, 446, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 455, 10, 31, 12, 31, 14, 31, 458, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 469, 10, 31, 12, 31, 14, 31, 472, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 490, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 499, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 507, 10, 31, 3, 32, 6, 32, 510, 10, 32, 13, 32, 14, 32, 511, 3, 32, 3, 32, 3, 32, 5, 32, 517, 10, 32, 5, 32, 519, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 525, 10, 33, 3, 34, 3, 34, 3, 34, 5, 34, 530, 10, 34, 3, 34, 3, 34, 5, 34, 534, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 543, 10, 34, 3, 35, 5, 35, 546, 10, 35, 3, 35, 5, 35, 549, 10, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 559, 10, 37, 12, 37, 14, 37, 562, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 573, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 581, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 587, 10, 38, 3, 38, 3, 38, 5, 38, 591, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 610, 10, 38, 12, 38, 14, 38, 613, 11, 38, 3, 38, 5, 38, 616, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 6, 38, 623, 10, 38, 13, 38, 14, 38, 624, 3, 38, 3, 38, 5, 38, 629, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 679, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 689, 10, 38, 12, 38, 14, 38, 692, 11, 38, 3, 39, 3, 39, 3, 39, 7, 39, 697, 10, 39, 12, 39, 14, 39, 700, 11, 39, 3, 40, 3, 40, 5, 40, 704, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 712, 10, 41, 12, 41, 14, 41, 715, 11, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 729, 10, 42, 3, 43, 7, 43, 732, 10, 43, 12, 43, 14, 43, 735, 11, 43, 3, 44, 3, 44, 3, 44, 5, 44, 740, 10, 44, 3, 45, 3, 45, 3, 45, 7, 45, 745, 10, 45, 12, 45, 14, 45, 748, 11, 45, 3, 45, 3, 45, 3, 45, 7, 45, 753, 10, 45, 12, 45, 14, 45, 756, 11, 45, 5, 45, 758, 10, 45, 3, 46, 3, 46, 5, 46, 762, 10, 46, 3, 46, 7, 46, 765, 10, 46, 12, 46, 14, 46, 768, 11, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 774, 10, 47, 12, 47, 14, 47, 777, 11, 47, 3, 47, 7, 47, 780, 10, 47, 12, 47, 14, 47, 783, 11, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 830, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 846, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 860, 10, 49, 12, 49, 14, 49, 863, 11, 49, 3, 49, 2, 10, 12, 24, 26, 28, 40, 72, 74, 96, 50, 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, 2, 13, 3, 2, 23, 24, 5, 2, 18, 19, 25, 26, 82, 82, 4, 2, 33, 33, 36, 36, 3, 2, 29, 30, 3, 2, 20, 22, 3, 2, 18, 19, 3, 2, 31, 36, 3, 2, 127, 130, 3, 2, 125, 126, 3, 2, 131, 132, 3, 2, 127, 128, 2, 989, 2, 98, 3, 2, 2, 2, 4, 101, 3, 2, 2, 2, 6, 107, 3, 2, 2, 2, 8, 124, 3, 2, 2, 2, 10, 126, 3, 2, 2, 2, 12, 129, 3, 2, 2, 2, 14, 149, 3, 2, 2, 2, 16, 151, 3, 2, 2, 2, 18, 171, 3, 2, 2, 2, 20, 181, 3, 2, 2, 2, 22, 188, 3, 2, 2, 2, 24, 194, 3, 2, 2, 2, 26, 224, 3, 2, 2, 2, 28, 248, 3, 2, 2, 2, 30, 258, 3, 2, 2, 2, 32, 261, 3, 2, 2, 2, 34, 273, 3, 2, 2, 2, 36, 276, 3, 2, 2, 2, 38, 279, 3, 2, 2, 2, 40, 287, 3, 2, 2, 2, 42, 298, 3, 2, 2, 2, 44, 303, 3, 2, 2, 2, 46, 320, 3, 2, 2, 2, 48, 326, 3, 2, 2, 2, 50, 345, 3, 2, 2, 2, 52, 347, 3, 2, 2, 2, 54, 367, 3, 2, 2, 2, 56, 414, 3, 2, 2, 2, 58, 417, 3, 2, 2, 2, 60, 506, 3, 2, 2, 2, 62, 509, 3, 2, 2, 2, 64, 520, 3, 2, 2, 2, 66, 542, 3, 2, 2, 2, 68, 548, 3, 2, 2, 2, 70, 550, 3, 2, 2, 2, 72, 552, 3, 2, 2, 2, 74, 628, 3, 2, 2, 2, 76, 693, 3, 2, 2, 2, 78, 701, 3, 2, 2, 2, 80, 707, 3, 2, 2, 2, 82, 728, 3, 2, 2, 2, 84, 733, 3, 2, 2, 2, 86, 739, 3, 2, 2, 2, 88, 757, 3, 2, 2, 2, 90, 759, 3, 2, 2, 2, 92, 769, 3, 2, 2, 2, 94, 829, 3, 2, 2, 2, 96, 845, 3, 2, 2, 2, 98, 99, 5, 6, 4, 2, 99, 100, 7, 2, 2, 3, 100, 3, 3, 2, 2, 2, 101, 102, 5, 84, 43, 2, 102, 103, 7, 2, 2, 3, 103, 5, 3, 2, 2, 2, 104, 106, 5, 8, 5, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 7, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 5, 10, 6, 2, 111, 112, 7, 10, 2, 2, 112, 125, 3, 2, 2, 2, 113, 125, 5, 44, 23, 2, 114, 115, 5, 32, 17, 2, 115, 116, 7, 10, 2, 2, 116, 125, 3, 2, 2, 2, 117, 118, 5, 38, 20, 2, 118, 119, 7, 10, 2, 2, 119, 125, 3, 2, 2, 2, 120, 125, 5, 52, 27, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 10, 2, 2, 123, 125, 3, 2, 2, 2, 124, 110, 3, 2, 2, 2, 124, 113, 3, 2, 2, 2, 124, 114, 3, 2, 2, 2, 124, 117, 3, 2, 2, 2, 124, 120, 3, 2, 2, 2, 124, 121, 3, 2, 2, 2, 125, 9, 3, 2, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 5, 12, 7, 2, 128, 11, 3, 2, 2, 2, 129, 130, 8, 7, 1, 2, 130, 131, 5, 14, 8, 2, 131, 137, 3, 2, 2, 2, 132, 133, 12, 3, 2, 2, 133, 134, 7, 12, 2, 2, 134, 136, 5, 14, 8, 2, 135, 132, 3, 2, 2, 2, 136, 139, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 13, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 143, 5, 26, 14, 2, 141, 142, 7, 39, 2, 2, 142, 144, 5, 74, 38, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 150, 3, 2, 2, 2, 145, 146, 5, 26, 14, 2, 146, 147, 7, 39, 2, 2, 147, 148, 5, 78, 40, 2, 148, 150, 3, 2, 2, 2, 149, 140, 3, 2, 2, 2, 149, 145, 3, 2, 2, 2, 150, 15, 3, 2, 2, 2, 151, 152, 7, 41, 2, 2, 152, 156, 5, 18, 10, 2, 153, 155, 5, 20, 11, 2, 154, 153, 3, 2, 2, 2, 155, 158, 3, 2, 2, 2, 156, 154, 3, 2, 2, 2, 156, 157, 3, 2, 2, 2, 157, 159, 3, 2, 2, 2, 158, 156, 3, 2, 2, 2, 159, 163, 7, 109, 2, 2, 160, 162, 5, 22, 12, 2, 161, 160, 3, 2, 2, 2, 162, 165, 3, 2, 2, 2, 163, 161, 3, 2, 2, 2, 163, 164, 3, 2, 2, 2, 164, 166, 3, 2, 2, 2, 165, 163, 3, 2, 2, 2, 166, 167, 8, 9, 1, 2, 167, 17, 3, 2, 2, 2, 168, 170, 5, 56, 29, 2, 169, 168, 3, 2, 2, 2, 170, 173, 3, 2, 2, 2, 171, 169, 3, 2, 2, 2, 171, 172, 3, 2, 2, 2, 172, 174, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 174, 178, 5, 28, 15, 2, 175, 177, 5, 56, 29, 2, 176, 175, 3, 2, 2, 2, 177, 180, 3, 2, 2, 2, 178, 176, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 19, 3, 2, 2, 2, 180, 178, 3, 2, 2, 2, 181, 185, 7, 20, 2, 2, 182, 184, 5, 56, 29, 2, 183, 182, 3, 2, 2, 2, 184, 187, 3, 2, 2, 2, 185, 183, 3, 2, 2, 2, 185, 186, 3, 2, 2, 2, 186, 21, 3, 2, 2, 2, 187, 185, 3, 2, 2, 2, 188, 190, 7, 6, 2, 2, 189, 191, 5, 74, 38, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 193, 7, 7, 2, 2, 193, 23, 3, 2, 2, 2, 194, 195, 8, 13, 1, 2, 195, 196, 5, 28, 15, 2, 196, 207, 3, 2, 2, 2, 197, 198, 12, 4, 2, 2, 198, 206, 7, 20, 2, 2, 199, 200, 12, 3, 2, 2, 200, 202, 7, 6, 2, 2, 201, 203, 5, 74, 38, 2, 202, 201, 3, 2, 2, 2, 202, 203, 3, 2, 2, 2, 203, 204, 3, 2, 2, 2, 204, 206, 7, 7, 2, 2, 205, 197, 3, 2, 2, 2, 205, 199, 3, 2, 2, 2, 206, 209, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 207, 208, 3, 2, 2, 2, 208, 25, 3, 2, 2, 2, 209, 207, 3, 2, 2, 2, 210, 211, 8, 14, 1, 2, 211, 225, 7, 109, 2, 2, 212, 216, 7, 20, 2, 2, 213, 215, 5, 56, 29, 2, 214, 213, 3, 2, 2, 2, 215, 218, 3, 2, 2, 2, 216, 214, 3, 2, 2, 2, 216, 217, 3, 2, 2, 2, 217, 219, 3, 2, 2, 2, 218, 216, 3, 2, 2, 2, 219, 225, 5, 26, 14, 4, 220, 221, 7, 8, 2, 2, 221, 222, 5, 26, 14, 2, 222, 223, 7, 9, 2, 2, 223, 225, 3, 2, 2, 2, 224, 210, 3, 2, 2, 2, 224, 212, 3, 2, 2, 2, 224, 220, 3, 2, 2, 2, 225, 234, 3, 2, 2, 2, 226, 227, 12, 5, 2, 2, 227, 229, 7, 6, 2, 2, 228, 230, 5, 74, 38, 2, 229, 228, 3, 2, 2, 2, 229, 230, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 233, 7, 7, 2, 2, 232, 226, 3, 2, 2, 2, 233, 236, 3, 2, 2, 2, 234, 232, 3, 2, 2, 2, 234, 235, 3, 2, 2, 2, 235, 27, 3, 2, 2, 2, 236, 234, 3, 2, 2, 2, 237, 238, 8, 15, 1, 2, 238, 249, 7, 84, 2, 2, 239, 241, 7, 83, 2, 2, 240, 242, 7, 84, 2, 2, 241, 240, 3, 2, 2, 2, 241, 242, 3, 2, 2, 2, 242, 249, 3, 2, 2, 2, 243, 249, 5, 32, 17, 2, 244, 249, 5, 30, 16, 2, 245, 249, 5, 38, 20, 2, 246, 249, 5, 36, 19, 2, 247, 249, 7, 3, 2, 2, 248, 237, 3, 2, 2, 2, 248, 239, 3, 2, 2, 2, 248, 243, 3, 2, 2, 2, 248, 244, 3, 2, 2, 2, 248, 245, 3, 2, 2, 2, 248, 246, 3, 2, 2, 2, 248, 247, 3, 2, 2, 2, 249, 255, 3, 2, 2, 2, 250, 251, 12, 8, 2, 2, 251, 252, 7, 8, 2, 2, 252, 254, 7, 9, 2, 2, 253, 250, 3, 2, 2, 2, 254, 257, 3, 2, 2, 2, 255, 253, 3, 2, 2, 2, 255, 256, 3, 2, 2, 2, 256, 29, 3, 2, 2, 2, 257, 255, 3, 2, 2, 2, 258, 259, 7, 71, 2, 2, 259, 260, 7, 109, 2, 2, 260, 31, 3, 2, 2, 2, 261, 263, 7, 71, 2, 2, 262, 264, 7, 109, 2, 2, 263, 262, 3, 2, 2, 2, 263, 264, 3, 2, 2, 2, 264, 265, 3, 2, 2, 2, 265, 267, 7, 4, 2, 2, 266, 268, 5, 34, 18, 2, 267, 266, 3, 2, 2, 2, 268, 269, 3, 2, 2, 2, 269, 267, 3, 2, 2, 2, 269, 270, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 7, 5, 2, 2, 272, 33, 3, 2, 2, 2, 273, 274, 5, 10, 6, 2, 274, 275, 7, 10, 2, 2, 275, 35, 3, 2, 2, 2, 276, 277, 7, 72, 2, 2, 277, 278, 7, 109, 2, 2, 278, 37, 3, 2, 2, 2, 279, 281, 7, 72, 2, 2, 280, 282, 7, 109, 2, 2, 281, 280, 3, 2, 2, 2, 281, 282, 3, 2, 2, 2, 282, 283, 3, 2, 2, 2, 283, 284, 7, 4, 2, 2, 284, 285, 5, 40, 21, 2, 285, 286, 7, 5, 2, 2, 286, 39, 3, 2, 2, 2, 287, 288, 8, 21, 1, 2, 288, 289, 5, 42, 22, 2, 289, 295, 3, 2, 2, 2, 290, 291, 12, 3, 2, 2, 291, 292, 7, 12, 2, 2, 292, 294, 5, 42, 22, 2, 293, 290, 3, 2, 2, 2, 294, 297, 3, 2, 2, 2, 295, 293, 3, 2, 2, 2, 295, 296, 3, 2, 2, 2, 296, 41, 3, 2, 2, 2, 297, 295, 3, 2, 2, 2, 298, 301, 7, 109, 2, 2, 299, 300, 7, 39, 2, 2, 300, 302, 5, 74, 38, 2, 301, 299, 3, 2, 2, 2, 301, 302, 3, 2, 2, 2, 302, 43, 3, 2, 2, 2, 303, 307, 5, 18, 10, 2, 304, 306, 5, 20, 11, 2, 305, 304, 3, 2, 2, 2, 306, 309, 3, 2, 2, 2, 307, 305, 3, 2, 2, 2, 307, 308, 3, 2, 2, 2, 308, 310, 3, 2, 2, 2, 309, 307, 3, 2, 2, 2, 310, 311, 7, 109, 2, 2, 311, 313, 7, 8, 2, 2, 312, 314, 5, 48, 25, 2, 313, 312, 3, 2, 2, 2, 313, 314, 3, 2, 2, 2, 314, 315, 3, 2, 2, 2, 315, 318, 7, 9, 2, 2, 316, 319, 5, 46, 24, 2, 317, 319, 7, 10, 2, 2, 318, 316, 3, 2, 2, 2, 318, 317, 3, 2, 2, 2, 319, 45, 3, 2, 2, 2, 320, 322, 7, 4, 2, 2, 321, 323, 5, 58, 30, 2, 322, 321, 3, 2, 2, 2, 322, 323, 3, 2, 2, 2, 323, 324, 3, 2, 2, 2, 324, 325, 7, 5, 2, 2, 325, 47, 3, 2, 2, 2, 326, 331, 5, 50, 26, 2, 327, 328, 7, 12, 2, 2, 328, 330, 5, 50, 26, 2, 329, 327, 3, 2, 2, 2, 330, 333, 3, 2, 2, 2, 331, 329, 3, 2, 2, 2, 331, 332, 3, 2, 2, 2, 332, 49, 3, 2, 2, 2, 333, 331, 3, 2, 2, 2, 334, 338, 5, 18, 10, 2, 335, 337, 5, 20, 11, 2, 336, 335, 3, 2, 2, 2, 337, 340, 3, 2, 2, 2, 338, 336, 3, 2, 2, 2, 338, 339, 3, 2, 2, 2, 339, 341, 3, 2, 2, 2, 340, 338, 3, 2, 2, 2, 341, 342, 7, 109, 2, 2, 342, 346, 3, 2, 2, 2, 343, 346, 7, 84, 2, 2, 344, 346, 7, 14, 2, 2, 345, 334, 3, 2, 2, 2, 345, 343, 3, 2, 2, 2, 345, 344, 3, 2, 2, 2, 346, 51, 3, 2, 2, 2, 347, 348, 7, 89, 2, 2, 348, 349, 7, 109, 2, 2, 349, 350, 7, 8, 2, 2, 350, 355, 5, 54, 28, 2, 351, 352, 7, 12, 2, 2, 352, 354, 5, 54, 28, 2, 353, 351, 3, 2, 2, 2, 354, 357, 3, 2, 2, 2, 355, 353, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 358, 3, 2, 2, 2, 357, 355, 3, 2, 2, 2, 358, 359, 7, 9, 2, 2, 359, 53, 3, 2, 2, 2, 360, 368, 7, 100, 2, 2, 361, 362, 7, 100, 2, 2, 362, 363, 7, 13, 2, 2, 363, 368, 7, 100, 2, 2, 364, 368, 7, 109, 2, 2, 365, 368, 7, 110, 2, 2, 366, 368, 7, 58, 2, 2, 367, 360, 3, 2, 2, 2, 367, 361, 3, 2, 2, 2, 367, 364, 3, 2, 2, 2, 367, 365, 3, 2, 2, 2, 367, 366, 3, 2, 2, 2, 368, 55, 3, 2, 2, 2, 369, 415, 7, 42, 2, 2, 370, 371, 7, 45, 2, 2, 371, 372, 7, 8, 2, 2, 372, 373, 7, 100, 2, 2, 373, 415, 7, 9, 2, 2, 374, 378, 7, 50, 2, 2, 375, 376, 7, 8, 2, 2, 376, 377, 7, 109, 2, 2, 377, 379, 7, 9, 2, 2, 378, 375, 3, 2, 2, 2, 378, 379, 3, 2, 2, 2, 379, 415, 3, 2, 2, 2, 380, 415, 7, 53, 2, 2, 381, 415, 7, 54, 2, 2, 382, 383, 7, 52, 2, 2, 383, 384, 7, 8, 2, 2, 384, 385, 5, 74, 38, 2, 385, 386, 7, 9, 2, 2, 386, 415, 3, 2, 2, 2, 387, 415, 7, 47, 2, 2, 388, 415, 7, 48, 2, 2, 389, 415, 7, 55, 2, 2, 390, 415, 7, 56, 2, 2, 391, 415, 7, 43, 2, 2, 392, 415, 7, 44, 2, 2, 393, 415, 7, 46, 2, 2, 394, 415, 7, 57, 2, 2, 395, 399, 7, 49, 2, 2, 396, 397, 7, 8, 2, 2, 397, 398, 7, 109, 2, 2, 398, 400, 7, 9, 2, 2, 399, 396, 3, 2, 2, 2, 399, 400, 3, 2, 2, 2, 400, 415, 3, 2, 2, 2, 401, 402, 7, 51, 2, 2, 402, 403, 7, 8, 2, 2, 403, 408, 5, 54, 28, 2, 404, 405, 7, 12, 2, 2, 405, 407, 5, 54, 28, 2, 406, 404, 3, 2, 2, 2, 407, 410, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 411, 3, 2, 2, 2, 410, 408, 3, 2, 2, 2, 411, 412, 7, 9, 2, 2, 412, 415, 3, 2, 2, 2, 413, 415, 7, 58, 2, 2, 414, 369, 3, 2, 2, 2, 414, 370, 3, 2, 2, 2, 414, 374, 3, 2, 2, 2, 414, 380, 3, 2, 2, 2, 414, 381, 3, 2, 2, 2, 414, 382, 3, 2, 2, 2, 414, 387, 3, 2, 2, 2, 414, 388, 3, 2, 2, 2, 414, 389, 3, 2, 2, 2, 414, 390, 3, 2, 2, 2, 414, 391, 3, 2, 2, 2, 414, 392, 3, 2, 2, 2, 414, 393, 3, 2, 2, 2, 414, 394, 3, 2, 2, 2, 414, 395, 3, 2, 2, 2, 414, 401, 3, 2, 2, 2, 414, 413, 3, 2, 2, 2, 415, 57, 3, 2, 2, 2, 416, 418, 5, 60, 31, 2, 417, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 417, 3, 2, 2, 2, 419, 420, 3, 2, 2, 2, 420, 59, 3, 2, 2, 2, 421, 422, 5, 10, 6, 2, 422, 423, 7, 10, 2, 2, 423, 507, 3, 2, 2, 2, 424, 426, 7, 4, 2, 2, 425, 427, 5, 58, 30, 2, 426, 425, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 507, 7, 5, 2, 2, 429, 430, 5, 72, 37, 2, 430, 431, 7, 10, 2, 2, 431, 507, 3, 2, 2, 2, 432, 433, 7, 59, 2, 2, 433, 434, 7, 8, 2, 2, 434, 435, 5, 72, 37, 2, 435, 436, 7, 9, 2, 2, 436, 439, 5, 60, 31, 2, 437, 438, 7, 60, 2, 2, 438, 440, 5, 60, 31, 2, 439, 437, 3, 2, 2, 2, 439, 440, 3, 2, 2, 2, 440, 507, 3, 2, 2, 2, 441, 443, 5, 56, 29, 2, 442, 441, 3, 2, 2, 2, 443, 446, 3, 2, 2, 2, 444, 442, 3, 2, 2, 2, 444, 445, 3, 2, 2, 2, 445, 447, 3, 2, 2, 2, 446, 444, 3, 2, 2, 2, 447, 448, 7, 61, 2, 2, 448, 449, 7, 8, 2, 2, 449, 450, 5, 72, 37, 2, 450, 451, 7, 9, 2, 2, 451, 452, 5, 60, 31, 2, 452, 507, 3, 2, 2, 2, 453, 455, 5, 56, 29, 2, 454, 453, 3, 2, 2, 2, 455, 458, 3, 2, 2, 2, 456, 454, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 459, 3, 2, 2, 2, 458, 456, 3, 2, 2, 2, 459, 460, 7, 62, 2, 2, 460, 461, 5, 60, 31, 2, 461, 462, 7, 61, 2, 2, 462, 463, 7, 8, 2, 2, 463, 464, 5, 72, 37, 2, 464, 465, 7, 9, 2, 2, 465, 466, 7, 10, 2, 2, 466, 507, 3, 2, 2, 2, 467, 469, 5, 56, 29, 2, 468, 467, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 473, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 474, 7, 63, 2, 2, 474, 475, 7, 8, 2, 2, 475, 476, 5, 66, 34, 2, 476, 477, 7, 9, 2, 2, 477, 478, 5, 60, 31, 2, 478, 507, 3, 2, 2, 2, 479, 480, 7, 64, 2, 2, 480, 481, 7, 8, 2, 2, 481, 482, 5, 72, 37, 2, 482, 483, 7, 9, 2, 2, 483, 484, 7, 4, 2, 2, 484, 485, 5, 62, 32, 2, 485, 486, 7, 5, 2, 2, 486, 507, 3, 2, 2, 2, 487, 489, 7, 65, 2, 2, 488, 490, 5, 72, 37, 2, 489, 488, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 3, 2, 2, 2, 491, 507, 7, 10, 2, 2, 492, 493, 7, 66, 2, 2, 493, 507, 7, 10, 2, 2, 494, 495, 7, 67, 2, 2, 495, 507, 7, 10, 2, 2, 496, 498, 7, 68, 2, 2, 497, 499, 5, 80, 41, 2, 498, 497, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 501, 7, 4, 2, 2, 501, 502, 5, 84, 43, 2, 502, 503, 7, 134, 2, 2, 503, 507, 3, 2, 2, 2, 504, 507, 5, 78, 40, 2, 505, 507, 7, 10, 2, 2, 506, 421, 3, 2, 2, 2, 506, 424, 3, 2, 2, 2, 506, 429, 3, 2, 2, 2, 506, 432, 3, 2, 2, 2, 506, 444, 3, 2, 2, 2, 506, 456, 3, 2, 2, 2, 506, 470, 3, 2, 2, 2, 506, 479, 3, 2, 2, 2, 506, 487, 3, 2, 2, 2, 506, 492, 3, 2, 2, 2, 506, 494, 3, 2, 2, 2, 506, 496, 3, 2, 2, 2, 506, 504, 3, 2, 2, 2, 506, 505, 3, 2, 2, 2, 507, 61, 3, 2, 2, 2, 508, 510, 5, 64, 33, 2, 509, 508, 3, 2, 2, 2, 510, 511, 3, 2, 2, 2, 511, 509, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 518, 3, 2, 2, 2, 513, 514, 7, 69, 2, 2, 514, 516, 7, 11, 2, 2, 515, 517, 5, 58, 30, 2, 516, 515, 3, 2, 2, 2, 516, 517, 3, 2, 2, 2, 517, 519, 3, 2, 2, 2, 518, 513, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 63, 3, 2, 2, 2, 520, 521, 7, 70, 2, 2, 521, 522, 5, 74, 38, 2, 522, 524, 7, 11, 2, 2, 523, 525, 5, 58, 30, 2, 524, 523, 3, 2, 2, 2, 524, 525, 3, 2, 2, 2, 525, 65, 3, 2, 2, 2, 526, 527, 5, 68, 35, 2, 527, 529, 7, 10, 2, 2, 528, 530, 5, 70, 36, 2, 529, 528, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 531, 3, 2, 2, 2, 531, 533, 7, 10, 2, 2, 532, 534, 5, 72, 37, 2, 533, 532, 3, 2, 2, 2, 533, 534, 3, 2, 2, 2, 534, 543, 3, 2, 2, 2, 535, 536, 5, 18, 10, 2, 536, 537, 5, 26, 14, 2, 537, 538, 7, 11, 2, 2, 538, 539, 5, 74, 38, 2, 539, 540, 7, 13, 2, 2, 540, 541, 5, 74, 38, 2, 541, 543, 3, 2, 2, 2, 542, 526, 3, 2, 2, 2, 542, 535, 3, 2, 2, 2, 543, 67, 3, 2, 2, 2, 544, 546, 5, 10, 6, 2, 545, 544, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 549, 3, 2, 2, 2, 547, 549, 5, 72, 37, 2, 548, 545, 3, 2, 2, 2, 548, 547, 3, 2, 2, 2, 549, 69, 3, 2, 2, 2, 550, 551, 5, 72, 37, 2, 551, 71, 3, 2, 2, 2, 552, 553, 8, 37, 1, 2, 553, 554, 5, 74, 38, 2, 554, 560, 3, 2, 2, 2, 555, 556, 12, 3, 2, 2, 556, 557, 7, 12, 2, 2, 557, 559, 5, 74, 38, 2, 558, 555, 3, 2, 2, 2, 559, 562, 3, 2, 2, 2, 560, 558, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 73, 3, 2, 2, 2, 562, 560, 3, 2, 2, 2, 563, 564, 8, 38, 1, 2, 564, 565, 7, 8, 2, 2, 565, 566, 5, 72, 37, 2, 566, 567, 7, 9, 2, 2, 567, 629, 3, 2, 2, 2, 568, 569, 7, 73, 2, 2, 569, 572, 7, 8, 2, 2, 570, 573, 5, 74, 38, 2, 571, 573, 5, 24, 13, 2, 572, 570, 3, 2, 2, 2, 572, 571, 3, 2, 2, 2, 573, 574, 3, 2, 2, 2, 574, 575, 7, 9, 2, 2, 575, 629, 3, 2, 2, 2, 576, 577, 7, 74, 2, 2, 577, 580, 7, 8, 2, 2, 578, 581, 5, 74, 38, 2, 579, 581, 5, 24, 13, 2, 580, 578, 3, 2, 2, 2, 580, 579, 3, 2, 2, 2, 581, 582, 3, 2, 2, 2, 582, 583, 7, 9, 2, 2, 583, 629, 3, 2, 2, 2, 584, 586, 7, 75, 2, 2, 585, 587, 7, 8, 2, 2, 586, 585, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 588, 3, 2, 2, 2, 588, 590, 7, 109, 2, 2, 589, 591, 7, 9, 2, 2, 590, 589, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 629, 3, 2, 2, 2, 592, 593, 7, 8, 2, 2, 593, 594, 5, 24, 13, 2, 594, 595, 7, 9, 2, 2, 595, 596, 5, 74, 38, 26, 596, 629, 3, 2, 2, 2, 597, 598, 9, 2, 2, 2, 598, 629, 5, 74, 38, 25, 599, 600, 7, 20, 2, 2, 600, 629, 5, 74, 38, 23, 601, 602, 9, 3, 2, 2, 602, 629, 5, 74, 38, 22, 603, 604, 9, 4, 2, 2, 604, 629, 5, 74, 38, 18, 605, 606, 7, 4, 2, 2, 606, 611, 5, 74, 38, 2, 607, 608, 7, 12, 2, 2, 608, 610, 5, 74, 38, 2, 609, 607, 3, 2, 2, 2, 610, 613, 3, 2, 2, 2, 611, 609, 3, 2, 2, 2, 611, 612, 3, 2, 2, 2, 612, 615, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 614, 616, 7, 12, 2, 2, 615, 614, 3, 2, 2, 2, 615, 616, 3, 2, 2, 2, 616, 617, 3, 2, 2, 2, 617, 618, 7, 5, 2, 2, 618, 629, 3, 2, 2, 2, 619, 629, 7, 109, 2, 2, 620, 629, 7, 100, 2, 2, 621, 623, 7, 110, 2, 2, 622, 621, 3, 2, 2, 2, 623, 624, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 624, 625, 3, 2, 2, 2, 625, 629, 3, 2, 2, 2, 626, 629, 7, 111, 2, 2, 627, 629, 7, 85, 2, 2, 628, 563, 3, 2, 2, 2, 628, 568, 3, 2, 2, 2, 628, 576, 3, 2, 2, 2, 628, 584, 3, 2, 2, 2, 628, 592, 3, 2, 2, 2, 628, 597, 3, 2, 2, 2, 628, 599, 3, 2, 2, 2, 628, 601, 3, 2, 2, 2, 628, 603, 3, 2, 2, 2, 628, 605, 3, 2, 2, 2, 628, 619, 3, 2, 2, 2, 628, 620, 3, 2, 2, 2, 628, 622, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 628, 627, 3, 2, 2, 2, 629, 690, 3, 2, 2, 2, 630, 631, 12, 21, 2, 2, 631, 632, 9, 5, 2, 2, 632, 689, 5, 74, 38, 22, 633, 634, 12, 20, 2, 2, 634, 635, 9, 6, 2, 2, 635, 689, 5, 74, 38, 21, 636, 637, 12, 19, 2, 2, 637, 638, 9, 7, 2, 2, 638, 689, 5, 74, 38, 20, 639, 640, 12, 17, 2, 2, 640, 641, 9, 8, 2, 2, 641, 689, 5, 74, 38, 18, 642, 643, 12, 16, 2, 2, 643, 644, 7, 25, 2, 2, 644, 689, 5, 74, 38, 17, 645, 646, 12, 15, 2, 2, 646, 647, 7, 27, 2, 2, 647, 689, 5, 74, 38, 16, 648, 649, 12, 14, 2, 2, 649, 650, 7, 28, 2, 2, 650, 689, 5, 74, 38, 15, 651, 652, 12, 13, 2, 2, 652, 653, 7, 37, 2, 2, 653, 689, 5, 74, 38, 14, 654, 655, 12, 12, 2, 2, 655, 656, 7, 38, 2, 2, 656, 689, 5, 74, 38, 13, 657, 658, 12, 11, 2, 2, 658, 659, 7, 15, 2, 2, 659, 660, 5, 74, 38, 2, 660, 661, 7, 11, 2, 2, 661, 662, 5, 74, 38, 12, 662, 689, 3, 2, 2, 2, 663, 664, 12, 10, 2, 2, 664, 665, 7, 39, 2, 2, 665, 689, 5, 74, 38, 10, 666, 667, 12, 9, 2, 2, 667, 668, 7, 40, 2, 2, 668, 689, 5, 74, 38, 9, 669, 670, 12, 33, 2, 2, 670, 671, 7, 16, 2, 2, 671, 689, 7, 109, 2, 2, 672, 673, 12, 32, 2, 2, 673, 674, 7, 17, 2, 2, 674, 689, 7, 109, 2, 2, 675, 676, 12, 31, 2, 2, 676, 678, 7, 8, 2, 2, 677, 679, 5, 76, 39, 2, 678, 677, 3, 2, 2, 2, 678, 679, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 689, 7, 9, 2, 2, 681, 682, 12, 27, 2, 2, 682, 683, 7, 6, 2, 2, 683, 684, 5, 72, 37, 2, 684, 685, 7, 7, 2, 2, 685, 689, 3, 2, 2, 2, 686, 687, 12, 24, 2, 2, 687, 689, 9, 2, 2, 2, 688, 630, 3, 2, 2, 2, 688, 633, 3, 2, 2, 2, 688, 636, 3, 2, 2, 2, 688, 639, 3, 2, 2, 2, 688, 642, 3, 2, 2, 2, 688, 645, 3, 2, 2, 2, 688, 648, 3, 2, 2, 2, 688, 651, 3, 2, 2, 2, 688, 654, 3, 2, 2, 2, 688, 657, 3, 2, 2, 2, 688, 663, 3, 2, 2, 2, 688, 666, 3, 2, 2, 2, 688, 669, 3, 2, 2, 2, 688, 672, 3, 2, 2, 2, 688, 675, 3, 2, 2, 2, 688, 681, 3, 2, 2, 2, 688, 686, 3, 2, 2, 2, 689, 692, 3, 2, 2, 2, 690, 688, 3, 2, 2, 2, 690, 691, 3, 2, 2, 2, 691, 75, 3, 2, 2, 2, 692, 690, 3, 2, 2, 2, 693, 698, 5, 74, 38, 2, 694, 695, 7, 12, 2, 2, 695, 697, 5, 74, 38, 2, 696, 694, 3, 2, 2, 2, 697, 700, 3, 2, 2, 2, 698, 696, 3, 2, 2, 2, 698, 699, 3, 2, 2, 2, 699, 77, 3, 2, 2, 2, 700, 698, 3, 2, 2, 2, 701, 703, 7, 76, 2, 2, 702, 704, 5, 80, 41, 2, 703, 702, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 705, 3, 2, 2, 2, 705, 706, 7, 86, 2, 2, 706, 79, 3, 2, 2, 2, 707, 708, 7, 8, 2, 2, 708, 713, 5, 82, 42, 2, 709, 710, 7, 12, 2, 2, 710, 712, 5, 82, 42, 2, 711, 709, 3, 2, 2, 2, 712, 715, 3, 2, 2, 2, 713, 711, 3, 2, 2, 2, 713, 714, 3, 2, 2, 2, 714, 716, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 716, 717, 7, 9, 2, 2, 717, 81, 3, 2, 2, 2, 718, 719, 7, 77, 2, 2, 719, 729, 7, 110, 2, 2, 720, 721, 7, 78, 2, 2, 721, 729, 7, 109, 2, 2, 722, 723, 7, 79, 2, 2, 723, 729, 7, 110, 2, 2, 724, 725, 7, 80, 2, 2, 725, 729, 5, 74, 38, 2, 726, 727, 7, 81, 2, 2, 727, 729, 5, 74, 38, 2, 728, 718, 3, 2, 2, 2, 728, 720, 3, 2, 2, 2, 728, 722, 3, 2, 2, 2, 728, 724, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 729, 83, 3, 2, 2, 2, 730, 732, 5, 86, 44, 2, 731, 730, 3, 2, 2, 2, 732, 735, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 733, 734, 3, 2, 2, 2, 734, 85, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 736, 740, 5, 88, 45, 2, 737, 740, 5, 90, 46, 2, 738, 740, 5, 92, 47, 2, 739, 736, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 739, 738, 3, 2, 2, 2, 740, 87, 3, 2, 2, 2, 741, 742, 7, 147, 2, 2, 742, 746, 7, 118, 2, 2, 743, 745, 7, 148, 2, 2, 744, 743, 3, 2, 2, 2, 745, 748, 3, 2, 2, 2, 746, 744, 3, 2, 2, 2, 746, 747, 3, 2, 2, 2, 747, 758, 3, 2, 2, 2, 748, 746, 3, 2, 2, 2, 749, 750, 7, 146, 2, 2, 750, 754, 7, 118, 2, 2, 751, 753, 7, 148, 2, 2, 752, 751, 3, 2, 2, 2, 753, 756, 3, 2, 2, 2, 754, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 758, 3, 2, 2, 2, 756, 754, 3, 2, 2, 2, 757, 741, 3, 2, 2, 2, 757, 749, 3, 2, 2, 2, 758, 89, 3, 2, 2, 2, 759, 761, 7, 116, 2, 2, 760, 762, 5, 94, 48, 2, 761, 760, 3, 2, 2, 2, 761, 762, 3, 2, 2, 2, 762, 766, 3, 2, 2, 2, 763, 765, 7, 148, 2, 2, 764, 763, 3, 2, 2, 2, 765, 768, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 766, 767, 3, 2, 2, 2, 767, 91, 3, 2, 2, 2, 768, 766, 3, 2, 2, 2, 769, 770, 7, 115, 2, 2, 770, 775, 5, 96, 49, 2, 771, 772, 7, 119, 2, 2, 772, 774, 5, 96, 49, 2, 773, 771, 3, 2, 2, 2, 774, 777, 3, 2, 2, 2, 775, 773, 3, 2, 2, 2, 775, 776, 3, 2, 2, 2, 776, 781, 3, 2, 2, 2, 777, 775, 3, 2, 2, 2, 778, 780, 7, 148, 2, 2, 779, 778, 3, 2, 2, 2, 780, 783, 3, 2, 2, 2, 781, 779, 3, 2, 2, 2, 781, 782, 3, 2, 2, 2, 782, 93, 3, 2, 2, 2, 783, 781, 3, 2, 2, 2, 784, 830, 5, 96, 49, 2, 785, 786, 7, 117, 2, 2, 786, 830, 5, 96, 49, 2, 787, 788, 5, 96, 49, 2, 788, 789, 7, 119, 2, 2, 789, 790, 5, 96, 49, 2, 790, 830, 3, 2, 2, 2, 791, 792, 7, 120, 2, 2, 792, 793, 5, 96, 49, 2, 793, 794, 7, 121, 2, 2, 794, 795, 7, 119, 2, 2, 795, 796, 7, 147, 2, 2, 796, 830, 3, 2, 2, 2, 797, 798, 7, 120, 2, 2, 798, 799, 7, 120, 2, 2, 799, 800, 5, 96, 49, 2, 800, 801, 7, 121, 2, 2, 801, 802, 7, 121, 2, 2, 802, 803, 7, 119, 2, 2, 803, 804, 7, 147, 2, 2, 804, 830, 3, 2, 2, 2, 805, 806, 7, 120, 2, 2, 806, 807, 5, 96, 49, 2, 807, 808, 7, 119, 2, 2, 808, 809, 7, 147, 2, 2, 809, 810, 7, 121, 2, 2, 810, 811, 7, 119, 2, 2, 811, 812, 7, 147, 2, 2, 812, 830, 3, 2, 2, 2, 813, 814, 7, 120, 2, 2, 814, 815, 5, 96, 49, 2, 815, 816, 7, 119, 2, 2, 816, 817, 7, 147, 2, 2, 817, 818, 7, 121, 2, 2, 818, 830, 3, 2, 2, 2, 819, 820, 7, 120, 2, 2, 820, 821, 5, 96, 49, 2, 821, 822, 7, 121, 2, 2, 822, 830, 3, 2, 2, 2, 823, 824, 7, 120, 2, 2, 824, 825, 7, 120, 2, 2, 825, 826, 5, 96, 49, 2, 826, 827, 7, 121, 2, 2, 827, 828, 7, 121, 2, 2, 828, 830, 3, 2, 2, 2, 829, 784, 3, 2, 2, 2, 829, 785, 3, 2, 2, 2, 829, 787, 3, 2, 2, 2, 829, 791, 3, 2, 2, 2, 829, 797, 3, 2, 2, 2, 829, 805, 3, 2, 2, 2, 829, 813, 3, 2, 2, 2, 829, 819, 3, 2, 2, 2, 829, 823, 3, 2, 2, 2, 830, 95, 3, 2, 2, 2, 831, 832, 8, 49, 1, 2, 832, 833, 7, 122, 2, 2, 833, 834, 5, 96, 49, 2, 834, 835, 7, 123, 2, 2, 835, 846, 3, 2, 2, 2, 836, 837, 9, 9, 2, 2, 837, 846, 5, 96, 49, 10, 838, 846, 7, 147, 2, 2, 839, 846, 7, 145, 2, 2, 840, 841, 7, 133, 2, 2, 841, 842, 7, 147, 2, 2, 842, 846, 7, 134, 2, 2, 843, 846, 7, 135, 2, 2, 844, 846, 7, 144, 2, 2, 845, 831, 3, 2, 2, 2, 845, 836, 3, 2, 2, 2, 845, 838, 3, 2, 2, 2, 845, 839, 3, 2, 2, 2, 845, 840, 3, 2, 2, 2, 845, 843, 3, 2, 2, 2, 845, 844, 3, 2, 2, 2, 846, 861, 3, 2, 2, 2, 847, 848, 12, 12, 2, 2, 848, 849, 7, 124, 2, 2, 849, 860, 5, 96, 49, 13, 850, 851, 12, 11, 2, 2, 851, 852, 9, 10, 2, 2, 852, 860, 5, 96, 49, 12, 853, 854, 12, 9, 2, 2, 854, 855, 9, 11, 2, 2, 855, 860, 5, 96, 49, 10, 856, 857, 12, 8, 2, 2, 857, 858, 9, 12, 2, 2, 858, 860, 5, 96, 49, 9, 859, 847, 3, 2, 2, 2, 859, 850, 3, 2, 2, 2, 859, 853, 3, 2, 2, 2, 859, 856, 3, 2, 2, 2, 860, 863, 3, 2, 2, 2, 861, 859, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 97, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 88, 107, 124, 137, 143, 149, 156, 163, 171, 178, 185, 190, 202, 205, 207, 216, 224, 229, 234, 241, 248, 255, 263, 269, 281, 295, 301, 307, 313, 318, 322, 331, 338, 345, 355, 367, 378, 399, 408, 414, 419, 426, 439, 444, 456, 470, 489, 498, 506, 511, 516, 518, 524, 529, 533, 542, 545, 548, 560, 572, 580, 586, 590, 611, 615, 624, 628, 678, 688, 690, 698, 703, 713, 728, 733, 739, 746, 754, 757, 761, 766, 775, 781, 829, 845, 859, 861] \ No newline at end of file +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 156, 854, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, 3, 3, 4, 7, 4, 106, 10, 4, 12, 4, 14, 4, 109, 11, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 125, 10, 5, 3, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 7, 7, 136, 10, 7, 12, 7, 14, 7, 139, 11, 7, 3, 8, 3, 8, 3, 8, 5, 8, 144, 10, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 150, 10, 8, 3, 9, 3, 9, 3, 9, 3, 9, 3, 9, 3, 10, 7, 10, 158, 10, 10, 12, 10, 14, 10, 161, 11, 10, 3, 10, 3, 10, 7, 10, 165, 10, 10, 12, 10, 14, 10, 168, 11, 10, 3, 11, 3, 11, 7, 11, 172, 10, 11, 12, 11, 14, 11, 175, 11, 11, 3, 12, 3, 12, 5, 12, 179, 10, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 3, 13, 5, 13, 191, 10, 13, 3, 13, 7, 13, 194, 10, 13, 12, 13, 14, 13, 197, 11, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 7, 14, 204, 10, 14, 12, 14, 14, 14, 207, 11, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 5, 14, 214, 10, 14, 3, 14, 3, 14, 3, 14, 5, 14, 219, 10, 14, 3, 14, 7, 14, 222, 10, 14, 12, 14, 14, 14, 225, 11, 14, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 231, 10, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 5, 15, 238, 10, 15, 3, 15, 3, 15, 3, 15, 7, 15, 243, 10, 15, 12, 15, 14, 15, 246, 11, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 5, 17, 253, 10, 17, 3, 17, 3, 17, 6, 17, 257, 10, 17, 13, 17, 14, 17, 258, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 5, 20, 271, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 7, 21, 283, 10, 21, 12, 21, 14, 21, 286, 11, 21, 3, 22, 3, 22, 3, 22, 5, 22, 291, 10, 22, 3, 23, 3, 23, 7, 23, 295, 10, 23, 12, 23, 14, 23, 298, 11, 23, 3, 23, 3, 23, 3, 23, 5, 23, 303, 10, 23, 3, 23, 3, 23, 3, 23, 5, 23, 308, 10, 23, 3, 24, 3, 24, 5, 24, 312, 10, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 7, 25, 319, 10, 25, 12, 25, 14, 25, 322, 11, 25, 3, 26, 3, 26, 7, 26, 326, 10, 26, 12, 26, 14, 26, 329, 11, 26, 3, 26, 3, 26, 3, 26, 3, 26, 5, 26, 335, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 7, 27, 343, 10, 27, 12, 27, 14, 27, 346, 11, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 357, 10, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 368, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 5, 29, 389, 10, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 7, 29, 396, 10, 29, 12, 29, 14, 29, 399, 11, 29, 3, 29, 3, 29, 3, 29, 5, 29, 404, 10, 29, 3, 30, 6, 30, 407, 10, 30, 13, 30, 14, 30, 408, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 416, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 429, 10, 31, 3, 31, 7, 31, 432, 10, 31, 12, 31, 14, 31, 435, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 444, 10, 31, 12, 31, 14, 31, 447, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 7, 31, 458, 10, 31, 12, 31, 14, 31, 461, 11, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 479, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 488, 10, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 496, 10, 31, 3, 32, 6, 32, 499, 10, 32, 13, 32, 14, 32, 500, 3, 32, 3, 32, 3, 32, 5, 32, 506, 10, 32, 5, 32, 508, 10, 32, 3, 33, 3, 33, 3, 33, 3, 33, 5, 33, 514, 10, 33, 3, 34, 3, 34, 3, 34, 5, 34, 519, 10, 34, 3, 34, 3, 34, 5, 34, 523, 10, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 5, 34, 532, 10, 34, 3, 35, 5, 35, 535, 10, 35, 3, 35, 5, 35, 538, 10, 35, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 7, 37, 548, 10, 37, 12, 37, 14, 37, 551, 11, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 562, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 570, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 576, 10, 38, 3, 38, 3, 38, 5, 38, 580, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 599, 10, 38, 12, 38, 14, 38, 602, 11, 38, 3, 38, 5, 38, 605, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 6, 38, 612, 10, 38, 13, 38, 14, 38, 613, 3, 38, 3, 38, 5, 38, 618, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 5, 38, 668, 10, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 7, 38, 678, 10, 38, 12, 38, 14, 38, 681, 11, 38, 3, 39, 3, 39, 3, 39, 7, 39, 686, 10, 39, 12, 39, 14, 39, 689, 11, 39, 3, 40, 3, 40, 5, 40, 693, 10, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 7, 41, 701, 10, 41, 12, 41, 14, 41, 704, 11, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 5, 42, 718, 10, 42, 3, 43, 7, 43, 721, 10, 43, 12, 43, 14, 43, 724, 11, 43, 3, 44, 3, 44, 3, 44, 5, 44, 729, 10, 44, 3, 45, 3, 45, 3, 45, 7, 45, 734, 10, 45, 12, 45, 14, 45, 737, 11, 45, 3, 45, 3, 45, 3, 45, 7, 45, 742, 10, 45, 12, 45, 14, 45, 745, 11, 45, 5, 45, 747, 10, 45, 3, 46, 3, 46, 5, 46, 751, 10, 46, 3, 46, 7, 46, 754, 10, 46, 12, 46, 14, 46, 757, 11, 46, 3, 47, 3, 47, 3, 47, 3, 47, 7, 47, 763, 10, 47, 12, 47, 14, 47, 766, 11, 47, 3, 47, 7, 47, 769, 10, 47, 12, 47, 14, 47, 772, 11, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 5, 48, 819, 10, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 835, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 7, 49, 849, 10, 49, 12, 49, 14, 49, 852, 11, 49, 3, 49, 2, 10, 12, 24, 26, 28, 40, 72, 74, 96, 50, 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, 2, 13, 3, 2, 23, 24, 5, 2, 18, 19, 25, 26, 82, 82, 4, 2, 33, 33, 36, 36, 3, 2, 29, 30, 3, 2, 20, 22, 3, 2, 18, 19, 3, 2, 31, 36, 3, 2, 127, 130, 3, 2, 125, 126, 3, 2, 131, 132, 3, 2, 127, 128, 2, 976, 2, 98, 3, 2, 2, 2, 4, 101, 3, 2, 2, 2, 6, 107, 3, 2, 2, 2, 8, 124, 3, 2, 2, 2, 10, 126, 3, 2, 2, 2, 12, 129, 3, 2, 2, 2, 14, 149, 3, 2, 2, 2, 16, 151, 3, 2, 2, 2, 18, 159, 3, 2, 2, 2, 20, 169, 3, 2, 2, 2, 22, 176, 3, 2, 2, 2, 24, 182, 3, 2, 2, 2, 26, 213, 3, 2, 2, 2, 28, 237, 3, 2, 2, 2, 30, 247, 3, 2, 2, 2, 32, 250, 3, 2, 2, 2, 34, 262, 3, 2, 2, 2, 36, 265, 3, 2, 2, 2, 38, 268, 3, 2, 2, 2, 40, 276, 3, 2, 2, 2, 42, 287, 3, 2, 2, 2, 44, 292, 3, 2, 2, 2, 46, 309, 3, 2, 2, 2, 48, 315, 3, 2, 2, 2, 50, 334, 3, 2, 2, 2, 52, 336, 3, 2, 2, 2, 54, 356, 3, 2, 2, 2, 56, 403, 3, 2, 2, 2, 58, 406, 3, 2, 2, 2, 60, 495, 3, 2, 2, 2, 62, 498, 3, 2, 2, 2, 64, 509, 3, 2, 2, 2, 66, 531, 3, 2, 2, 2, 68, 537, 3, 2, 2, 2, 70, 539, 3, 2, 2, 2, 72, 541, 3, 2, 2, 2, 74, 617, 3, 2, 2, 2, 76, 682, 3, 2, 2, 2, 78, 690, 3, 2, 2, 2, 80, 696, 3, 2, 2, 2, 82, 717, 3, 2, 2, 2, 84, 722, 3, 2, 2, 2, 86, 728, 3, 2, 2, 2, 88, 746, 3, 2, 2, 2, 90, 748, 3, 2, 2, 2, 92, 758, 3, 2, 2, 2, 94, 818, 3, 2, 2, 2, 96, 834, 3, 2, 2, 2, 98, 99, 5, 6, 4, 2, 99, 100, 7, 2, 2, 3, 100, 3, 3, 2, 2, 2, 101, 102, 5, 84, 43, 2, 102, 103, 7, 2, 2, 3, 103, 5, 3, 2, 2, 2, 104, 106, 5, 8, 5, 2, 105, 104, 3, 2, 2, 2, 106, 109, 3, 2, 2, 2, 107, 105, 3, 2, 2, 2, 107, 108, 3, 2, 2, 2, 108, 7, 3, 2, 2, 2, 109, 107, 3, 2, 2, 2, 110, 111, 5, 10, 6, 2, 111, 112, 7, 10, 2, 2, 112, 125, 3, 2, 2, 2, 113, 125, 5, 44, 23, 2, 114, 115, 5, 32, 17, 2, 115, 116, 7, 10, 2, 2, 116, 125, 3, 2, 2, 2, 117, 118, 5, 38, 20, 2, 118, 119, 7, 10, 2, 2, 119, 125, 3, 2, 2, 2, 120, 125, 5, 52, 27, 2, 121, 122, 5, 16, 9, 2, 122, 123, 7, 10, 2, 2, 123, 125, 3, 2, 2, 2, 124, 110, 3, 2, 2, 2, 124, 113, 3, 2, 2, 2, 124, 114, 3, 2, 2, 2, 124, 117, 3, 2, 2, 2, 124, 120, 3, 2, 2, 2, 124, 121, 3, 2, 2, 2, 125, 9, 3, 2, 2, 2, 126, 127, 5, 18, 10, 2, 127, 128, 5, 12, 7, 2, 128, 11, 3, 2, 2, 2, 129, 130, 8, 7, 1, 2, 130, 131, 5, 14, 8, 2, 131, 137, 3, 2, 2, 2, 132, 133, 12, 3, 2, 2, 133, 134, 7, 12, 2, 2, 134, 136, 5, 14, 8, 2, 135, 132, 3, 2, 2, 2, 136, 139, 3, 2, 2, 2, 137, 135, 3, 2, 2, 2, 137, 138, 3, 2, 2, 2, 138, 13, 3, 2, 2, 2, 139, 137, 3, 2, 2, 2, 140, 143, 5, 26, 14, 2, 141, 142, 7, 39, 2, 2, 142, 144, 5, 74, 38, 2, 143, 141, 3, 2, 2, 2, 143, 144, 3, 2, 2, 2, 144, 150, 3, 2, 2, 2, 145, 146, 5, 26, 14, 2, 146, 147, 7, 39, 2, 2, 147, 148, 5, 78, 40, 2, 148, 150, 3, 2, 2, 2, 149, 140, 3, 2, 2, 2, 149, 145, 3, 2, 2, 2, 150, 15, 3, 2, 2, 2, 151, 152, 7, 41, 2, 2, 152, 153, 5, 18, 10, 2, 153, 154, 8, 9, 1, 2, 154, 155, 5, 26, 14, 2, 155, 17, 3, 2, 2, 2, 156, 158, 5, 56, 29, 2, 157, 156, 3, 2, 2, 2, 158, 161, 3, 2, 2, 2, 159, 157, 3, 2, 2, 2, 159, 160, 3, 2, 2, 2, 160, 162, 3, 2, 2, 2, 161, 159, 3, 2, 2, 2, 162, 166, 5, 28, 15, 2, 163, 165, 5, 56, 29, 2, 164, 163, 3, 2, 2, 2, 165, 168, 3, 2, 2, 2, 166, 164, 3, 2, 2, 2, 166, 167, 3, 2, 2, 2, 167, 19, 3, 2, 2, 2, 168, 166, 3, 2, 2, 2, 169, 173, 7, 20, 2, 2, 170, 172, 5, 56, 29, 2, 171, 170, 3, 2, 2, 2, 172, 175, 3, 2, 2, 2, 173, 171, 3, 2, 2, 2, 173, 174, 3, 2, 2, 2, 174, 21, 3, 2, 2, 2, 175, 173, 3, 2, 2, 2, 176, 178, 7, 6, 2, 2, 177, 179, 5, 74, 38, 2, 178, 177, 3, 2, 2, 2, 178, 179, 3, 2, 2, 2, 179, 180, 3, 2, 2, 2, 180, 181, 7, 7, 2, 2, 181, 23, 3, 2, 2, 2, 182, 183, 8, 13, 1, 2, 183, 184, 5, 28, 15, 2, 184, 195, 3, 2, 2, 2, 185, 186, 12, 4, 2, 2, 186, 194, 7, 20, 2, 2, 187, 188, 12, 3, 2, 2, 188, 190, 7, 6, 2, 2, 189, 191, 5, 74, 38, 2, 190, 189, 3, 2, 2, 2, 190, 191, 3, 2, 2, 2, 191, 192, 3, 2, 2, 2, 192, 194, 7, 7, 2, 2, 193, 185, 3, 2, 2, 2, 193, 187, 3, 2, 2, 2, 194, 197, 3, 2, 2, 2, 195, 193, 3, 2, 2, 2, 195, 196, 3, 2, 2, 2, 196, 25, 3, 2, 2, 2, 197, 195, 3, 2, 2, 2, 198, 199, 8, 14, 1, 2, 199, 200, 7, 109, 2, 2, 200, 214, 8, 14, 1, 2, 201, 205, 7, 20, 2, 2, 202, 204, 5, 56, 29, 2, 203, 202, 3, 2, 2, 2, 204, 207, 3, 2, 2, 2, 205, 203, 3, 2, 2, 2, 205, 206, 3, 2, 2, 2, 206, 208, 3, 2, 2, 2, 207, 205, 3, 2, 2, 2, 208, 214, 5, 26, 14, 4, 209, 210, 7, 8, 2, 2, 210, 211, 5, 26, 14, 2, 211, 212, 7, 9, 2, 2, 212, 214, 3, 2, 2, 2, 213, 198, 3, 2, 2, 2, 213, 201, 3, 2, 2, 2, 213, 209, 3, 2, 2, 2, 214, 223, 3, 2, 2, 2, 215, 216, 12, 5, 2, 2, 216, 218, 7, 6, 2, 2, 217, 219, 5, 74, 38, 2, 218, 217, 3, 2, 2, 2, 218, 219, 3, 2, 2, 2, 219, 220, 3, 2, 2, 2, 220, 222, 7, 7, 2, 2, 221, 215, 3, 2, 2, 2, 222, 225, 3, 2, 2, 2, 223, 221, 3, 2, 2, 2, 223, 224, 3, 2, 2, 2, 224, 27, 3, 2, 2, 2, 225, 223, 3, 2, 2, 2, 226, 227, 8, 15, 1, 2, 227, 238, 7, 84, 2, 2, 228, 230, 7, 83, 2, 2, 229, 231, 7, 84, 2, 2, 230, 229, 3, 2, 2, 2, 230, 231, 3, 2, 2, 2, 231, 238, 3, 2, 2, 2, 232, 238, 5, 32, 17, 2, 233, 238, 5, 30, 16, 2, 234, 238, 5, 38, 20, 2, 235, 238, 5, 36, 19, 2, 236, 238, 7, 3, 2, 2, 237, 226, 3, 2, 2, 2, 237, 228, 3, 2, 2, 2, 237, 232, 3, 2, 2, 2, 237, 233, 3, 2, 2, 2, 237, 234, 3, 2, 2, 2, 237, 235, 3, 2, 2, 2, 237, 236, 3, 2, 2, 2, 238, 244, 3, 2, 2, 2, 239, 240, 12, 8, 2, 2, 240, 241, 7, 8, 2, 2, 241, 243, 7, 9, 2, 2, 242, 239, 3, 2, 2, 2, 243, 246, 3, 2, 2, 2, 244, 242, 3, 2, 2, 2, 244, 245, 3, 2, 2, 2, 245, 29, 3, 2, 2, 2, 246, 244, 3, 2, 2, 2, 247, 248, 7, 71, 2, 2, 248, 249, 7, 109, 2, 2, 249, 31, 3, 2, 2, 2, 250, 252, 7, 71, 2, 2, 251, 253, 7, 109, 2, 2, 252, 251, 3, 2, 2, 2, 252, 253, 3, 2, 2, 2, 253, 254, 3, 2, 2, 2, 254, 256, 7, 4, 2, 2, 255, 257, 5, 34, 18, 2, 256, 255, 3, 2, 2, 2, 257, 258, 3, 2, 2, 2, 258, 256, 3, 2, 2, 2, 258, 259, 3, 2, 2, 2, 259, 260, 3, 2, 2, 2, 260, 261, 7, 5, 2, 2, 261, 33, 3, 2, 2, 2, 262, 263, 5, 10, 6, 2, 263, 264, 7, 10, 2, 2, 264, 35, 3, 2, 2, 2, 265, 266, 7, 72, 2, 2, 266, 267, 7, 109, 2, 2, 267, 37, 3, 2, 2, 2, 268, 270, 7, 72, 2, 2, 269, 271, 7, 109, 2, 2, 270, 269, 3, 2, 2, 2, 270, 271, 3, 2, 2, 2, 271, 272, 3, 2, 2, 2, 272, 273, 7, 4, 2, 2, 273, 274, 5, 40, 21, 2, 274, 275, 7, 5, 2, 2, 275, 39, 3, 2, 2, 2, 276, 277, 8, 21, 1, 2, 277, 278, 5, 42, 22, 2, 278, 284, 3, 2, 2, 2, 279, 280, 12, 3, 2, 2, 280, 281, 7, 12, 2, 2, 281, 283, 5, 42, 22, 2, 282, 279, 3, 2, 2, 2, 283, 286, 3, 2, 2, 2, 284, 282, 3, 2, 2, 2, 284, 285, 3, 2, 2, 2, 285, 41, 3, 2, 2, 2, 286, 284, 3, 2, 2, 2, 287, 290, 7, 109, 2, 2, 288, 289, 7, 39, 2, 2, 289, 291, 5, 74, 38, 2, 290, 288, 3, 2, 2, 2, 290, 291, 3, 2, 2, 2, 291, 43, 3, 2, 2, 2, 292, 296, 5, 18, 10, 2, 293, 295, 5, 20, 11, 2, 294, 293, 3, 2, 2, 2, 295, 298, 3, 2, 2, 2, 296, 294, 3, 2, 2, 2, 296, 297, 3, 2, 2, 2, 297, 299, 3, 2, 2, 2, 298, 296, 3, 2, 2, 2, 299, 300, 7, 109, 2, 2, 300, 302, 7, 8, 2, 2, 301, 303, 5, 48, 25, 2, 302, 301, 3, 2, 2, 2, 302, 303, 3, 2, 2, 2, 303, 304, 3, 2, 2, 2, 304, 307, 7, 9, 2, 2, 305, 308, 5, 46, 24, 2, 306, 308, 7, 10, 2, 2, 307, 305, 3, 2, 2, 2, 307, 306, 3, 2, 2, 2, 308, 45, 3, 2, 2, 2, 309, 311, 7, 4, 2, 2, 310, 312, 5, 58, 30, 2, 311, 310, 3, 2, 2, 2, 311, 312, 3, 2, 2, 2, 312, 313, 3, 2, 2, 2, 313, 314, 7, 5, 2, 2, 314, 47, 3, 2, 2, 2, 315, 320, 5, 50, 26, 2, 316, 317, 7, 12, 2, 2, 317, 319, 5, 50, 26, 2, 318, 316, 3, 2, 2, 2, 319, 322, 3, 2, 2, 2, 320, 318, 3, 2, 2, 2, 320, 321, 3, 2, 2, 2, 321, 49, 3, 2, 2, 2, 322, 320, 3, 2, 2, 2, 323, 327, 5, 18, 10, 2, 324, 326, 5, 20, 11, 2, 325, 324, 3, 2, 2, 2, 326, 329, 3, 2, 2, 2, 327, 325, 3, 2, 2, 2, 327, 328, 3, 2, 2, 2, 328, 330, 3, 2, 2, 2, 329, 327, 3, 2, 2, 2, 330, 331, 7, 109, 2, 2, 331, 335, 3, 2, 2, 2, 332, 335, 7, 84, 2, 2, 333, 335, 7, 14, 2, 2, 334, 323, 3, 2, 2, 2, 334, 332, 3, 2, 2, 2, 334, 333, 3, 2, 2, 2, 335, 51, 3, 2, 2, 2, 336, 337, 7, 89, 2, 2, 337, 338, 7, 109, 2, 2, 338, 339, 7, 8, 2, 2, 339, 344, 5, 54, 28, 2, 340, 341, 7, 12, 2, 2, 341, 343, 5, 54, 28, 2, 342, 340, 3, 2, 2, 2, 343, 346, 3, 2, 2, 2, 344, 342, 3, 2, 2, 2, 344, 345, 3, 2, 2, 2, 345, 347, 3, 2, 2, 2, 346, 344, 3, 2, 2, 2, 347, 348, 7, 9, 2, 2, 348, 53, 3, 2, 2, 2, 349, 357, 7, 100, 2, 2, 350, 351, 7, 100, 2, 2, 351, 352, 7, 13, 2, 2, 352, 357, 7, 100, 2, 2, 353, 357, 7, 109, 2, 2, 354, 357, 7, 110, 2, 2, 355, 357, 7, 58, 2, 2, 356, 349, 3, 2, 2, 2, 356, 350, 3, 2, 2, 2, 356, 353, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 356, 355, 3, 2, 2, 2, 357, 55, 3, 2, 2, 2, 358, 404, 7, 42, 2, 2, 359, 360, 7, 45, 2, 2, 360, 361, 7, 8, 2, 2, 361, 362, 7, 100, 2, 2, 362, 404, 7, 9, 2, 2, 363, 367, 7, 50, 2, 2, 364, 365, 7, 8, 2, 2, 365, 366, 7, 109, 2, 2, 366, 368, 7, 9, 2, 2, 367, 364, 3, 2, 2, 2, 367, 368, 3, 2, 2, 2, 368, 404, 3, 2, 2, 2, 369, 404, 7, 53, 2, 2, 370, 404, 7, 54, 2, 2, 371, 372, 7, 52, 2, 2, 372, 373, 7, 8, 2, 2, 373, 374, 5, 74, 38, 2, 374, 375, 7, 9, 2, 2, 375, 404, 3, 2, 2, 2, 376, 404, 7, 47, 2, 2, 377, 404, 7, 48, 2, 2, 378, 404, 7, 55, 2, 2, 379, 404, 7, 56, 2, 2, 380, 404, 7, 43, 2, 2, 381, 404, 7, 44, 2, 2, 382, 404, 7, 46, 2, 2, 383, 404, 7, 57, 2, 2, 384, 388, 7, 49, 2, 2, 385, 386, 7, 8, 2, 2, 386, 387, 7, 109, 2, 2, 387, 389, 7, 9, 2, 2, 388, 385, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 404, 3, 2, 2, 2, 390, 391, 7, 51, 2, 2, 391, 392, 7, 8, 2, 2, 392, 397, 5, 54, 28, 2, 393, 394, 7, 12, 2, 2, 394, 396, 5, 54, 28, 2, 395, 393, 3, 2, 2, 2, 396, 399, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 397, 398, 3, 2, 2, 2, 398, 400, 3, 2, 2, 2, 399, 397, 3, 2, 2, 2, 400, 401, 7, 9, 2, 2, 401, 404, 3, 2, 2, 2, 402, 404, 7, 58, 2, 2, 403, 358, 3, 2, 2, 2, 403, 359, 3, 2, 2, 2, 403, 363, 3, 2, 2, 2, 403, 369, 3, 2, 2, 2, 403, 370, 3, 2, 2, 2, 403, 371, 3, 2, 2, 2, 403, 376, 3, 2, 2, 2, 403, 377, 3, 2, 2, 2, 403, 378, 3, 2, 2, 2, 403, 379, 3, 2, 2, 2, 403, 380, 3, 2, 2, 2, 403, 381, 3, 2, 2, 2, 403, 382, 3, 2, 2, 2, 403, 383, 3, 2, 2, 2, 403, 384, 3, 2, 2, 2, 403, 390, 3, 2, 2, 2, 403, 402, 3, 2, 2, 2, 404, 57, 3, 2, 2, 2, 405, 407, 5, 60, 31, 2, 406, 405, 3, 2, 2, 2, 407, 408, 3, 2, 2, 2, 408, 406, 3, 2, 2, 2, 408, 409, 3, 2, 2, 2, 409, 59, 3, 2, 2, 2, 410, 411, 5, 10, 6, 2, 411, 412, 7, 10, 2, 2, 412, 496, 3, 2, 2, 2, 413, 415, 7, 4, 2, 2, 414, 416, 5, 58, 30, 2, 415, 414, 3, 2, 2, 2, 415, 416, 3, 2, 2, 2, 416, 417, 3, 2, 2, 2, 417, 496, 7, 5, 2, 2, 418, 419, 5, 72, 37, 2, 419, 420, 7, 10, 2, 2, 420, 496, 3, 2, 2, 2, 421, 422, 7, 59, 2, 2, 422, 423, 7, 8, 2, 2, 423, 424, 5, 72, 37, 2, 424, 425, 7, 9, 2, 2, 425, 428, 5, 60, 31, 2, 426, 427, 7, 60, 2, 2, 427, 429, 5, 60, 31, 2, 428, 426, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 496, 3, 2, 2, 2, 430, 432, 5, 56, 29, 2, 431, 430, 3, 2, 2, 2, 432, 435, 3, 2, 2, 2, 433, 431, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 436, 437, 7, 61, 2, 2, 437, 438, 7, 8, 2, 2, 438, 439, 5, 72, 37, 2, 439, 440, 7, 9, 2, 2, 440, 441, 5, 60, 31, 2, 441, 496, 3, 2, 2, 2, 442, 444, 5, 56, 29, 2, 443, 442, 3, 2, 2, 2, 444, 447, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 448, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 448, 449, 7, 62, 2, 2, 449, 450, 5, 60, 31, 2, 450, 451, 7, 61, 2, 2, 451, 452, 7, 8, 2, 2, 452, 453, 5, 72, 37, 2, 453, 454, 7, 9, 2, 2, 454, 455, 7, 10, 2, 2, 455, 496, 3, 2, 2, 2, 456, 458, 5, 56, 29, 2, 457, 456, 3, 2, 2, 2, 458, 461, 3, 2, 2, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 459, 3, 2, 2, 2, 462, 463, 7, 63, 2, 2, 463, 464, 7, 8, 2, 2, 464, 465, 5, 66, 34, 2, 465, 466, 7, 9, 2, 2, 466, 467, 5, 60, 31, 2, 467, 496, 3, 2, 2, 2, 468, 469, 7, 64, 2, 2, 469, 470, 7, 8, 2, 2, 470, 471, 5, 72, 37, 2, 471, 472, 7, 9, 2, 2, 472, 473, 7, 4, 2, 2, 473, 474, 5, 62, 32, 2, 474, 475, 7, 5, 2, 2, 475, 496, 3, 2, 2, 2, 476, 478, 7, 65, 2, 2, 477, 479, 5, 72, 37, 2, 478, 477, 3, 2, 2, 2, 478, 479, 3, 2, 2, 2, 479, 480, 3, 2, 2, 2, 480, 496, 7, 10, 2, 2, 481, 482, 7, 66, 2, 2, 482, 496, 7, 10, 2, 2, 483, 484, 7, 67, 2, 2, 484, 496, 7, 10, 2, 2, 485, 487, 7, 68, 2, 2, 486, 488, 5, 80, 41, 2, 487, 486, 3, 2, 2, 2, 487, 488, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 7, 4, 2, 2, 490, 491, 5, 84, 43, 2, 491, 492, 7, 134, 2, 2, 492, 496, 3, 2, 2, 2, 493, 496, 5, 78, 40, 2, 494, 496, 7, 10, 2, 2, 495, 410, 3, 2, 2, 2, 495, 413, 3, 2, 2, 2, 495, 418, 3, 2, 2, 2, 495, 421, 3, 2, 2, 2, 495, 433, 3, 2, 2, 2, 495, 445, 3, 2, 2, 2, 495, 459, 3, 2, 2, 2, 495, 468, 3, 2, 2, 2, 495, 476, 3, 2, 2, 2, 495, 481, 3, 2, 2, 2, 495, 483, 3, 2, 2, 2, 495, 485, 3, 2, 2, 2, 495, 493, 3, 2, 2, 2, 495, 494, 3, 2, 2, 2, 496, 61, 3, 2, 2, 2, 497, 499, 5, 64, 33, 2, 498, 497, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 500, 501, 3, 2, 2, 2, 501, 507, 3, 2, 2, 2, 502, 503, 7, 69, 2, 2, 503, 505, 7, 11, 2, 2, 504, 506, 5, 58, 30, 2, 505, 504, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 508, 3, 2, 2, 2, 507, 502, 3, 2, 2, 2, 507, 508, 3, 2, 2, 2, 508, 63, 3, 2, 2, 2, 509, 510, 7, 70, 2, 2, 510, 511, 5, 74, 38, 2, 511, 513, 7, 11, 2, 2, 512, 514, 5, 58, 30, 2, 513, 512, 3, 2, 2, 2, 513, 514, 3, 2, 2, 2, 514, 65, 3, 2, 2, 2, 515, 516, 5, 68, 35, 2, 516, 518, 7, 10, 2, 2, 517, 519, 5, 70, 36, 2, 518, 517, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 522, 7, 10, 2, 2, 521, 523, 5, 72, 37, 2, 522, 521, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 532, 3, 2, 2, 2, 524, 525, 5, 18, 10, 2, 525, 526, 5, 26, 14, 2, 526, 527, 7, 11, 2, 2, 527, 528, 5, 74, 38, 2, 528, 529, 7, 13, 2, 2, 529, 530, 5, 74, 38, 2, 530, 532, 3, 2, 2, 2, 531, 515, 3, 2, 2, 2, 531, 524, 3, 2, 2, 2, 532, 67, 3, 2, 2, 2, 533, 535, 5, 10, 6, 2, 534, 533, 3, 2, 2, 2, 534, 535, 3, 2, 2, 2, 535, 538, 3, 2, 2, 2, 536, 538, 5, 72, 37, 2, 537, 534, 3, 2, 2, 2, 537, 536, 3, 2, 2, 2, 538, 69, 3, 2, 2, 2, 539, 540, 5, 72, 37, 2, 540, 71, 3, 2, 2, 2, 541, 542, 8, 37, 1, 2, 542, 543, 5, 74, 38, 2, 543, 549, 3, 2, 2, 2, 544, 545, 12, 3, 2, 2, 545, 546, 7, 12, 2, 2, 546, 548, 5, 74, 38, 2, 547, 544, 3, 2, 2, 2, 548, 551, 3, 2, 2, 2, 549, 547, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 73, 3, 2, 2, 2, 551, 549, 3, 2, 2, 2, 552, 553, 8, 38, 1, 2, 553, 554, 7, 8, 2, 2, 554, 555, 5, 72, 37, 2, 555, 556, 7, 9, 2, 2, 556, 618, 3, 2, 2, 2, 557, 558, 7, 73, 2, 2, 558, 561, 7, 8, 2, 2, 559, 562, 5, 74, 38, 2, 560, 562, 5, 24, 13, 2, 561, 559, 3, 2, 2, 2, 561, 560, 3, 2, 2, 2, 562, 563, 3, 2, 2, 2, 563, 564, 7, 9, 2, 2, 564, 618, 3, 2, 2, 2, 565, 566, 7, 74, 2, 2, 566, 569, 7, 8, 2, 2, 567, 570, 5, 74, 38, 2, 568, 570, 5, 24, 13, 2, 569, 567, 3, 2, 2, 2, 569, 568, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 572, 7, 9, 2, 2, 572, 618, 3, 2, 2, 2, 573, 575, 7, 75, 2, 2, 574, 576, 7, 8, 2, 2, 575, 574, 3, 2, 2, 2, 575, 576, 3, 2, 2, 2, 576, 577, 3, 2, 2, 2, 577, 579, 7, 109, 2, 2, 578, 580, 7, 9, 2, 2, 579, 578, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 618, 3, 2, 2, 2, 581, 582, 7, 8, 2, 2, 582, 583, 5, 24, 13, 2, 583, 584, 7, 9, 2, 2, 584, 585, 5, 74, 38, 26, 585, 618, 3, 2, 2, 2, 586, 587, 9, 2, 2, 2, 587, 618, 5, 74, 38, 25, 588, 589, 7, 20, 2, 2, 589, 618, 5, 74, 38, 23, 590, 591, 9, 3, 2, 2, 591, 618, 5, 74, 38, 22, 592, 593, 9, 4, 2, 2, 593, 618, 5, 74, 38, 18, 594, 595, 7, 4, 2, 2, 595, 600, 5, 74, 38, 2, 596, 597, 7, 12, 2, 2, 597, 599, 5, 74, 38, 2, 598, 596, 3, 2, 2, 2, 599, 602, 3, 2, 2, 2, 600, 598, 3, 2, 2, 2, 600, 601, 3, 2, 2, 2, 601, 604, 3, 2, 2, 2, 602, 600, 3, 2, 2, 2, 603, 605, 7, 12, 2, 2, 604, 603, 3, 2, 2, 2, 604, 605, 3, 2, 2, 2, 605, 606, 3, 2, 2, 2, 606, 607, 7, 5, 2, 2, 607, 618, 3, 2, 2, 2, 608, 618, 7, 109, 2, 2, 609, 618, 7, 100, 2, 2, 610, 612, 7, 110, 2, 2, 611, 610, 3, 2, 2, 2, 612, 613, 3, 2, 2, 2, 613, 611, 3, 2, 2, 2, 613, 614, 3, 2, 2, 2, 614, 618, 3, 2, 2, 2, 615, 618, 7, 111, 2, 2, 616, 618, 7, 85, 2, 2, 617, 552, 3, 2, 2, 2, 617, 557, 3, 2, 2, 2, 617, 565, 3, 2, 2, 2, 617, 573, 3, 2, 2, 2, 617, 581, 3, 2, 2, 2, 617, 586, 3, 2, 2, 2, 617, 588, 3, 2, 2, 2, 617, 590, 3, 2, 2, 2, 617, 592, 3, 2, 2, 2, 617, 594, 3, 2, 2, 2, 617, 608, 3, 2, 2, 2, 617, 609, 3, 2, 2, 2, 617, 611, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 617, 616, 3, 2, 2, 2, 618, 679, 3, 2, 2, 2, 619, 620, 12, 21, 2, 2, 620, 621, 9, 5, 2, 2, 621, 678, 5, 74, 38, 22, 622, 623, 12, 20, 2, 2, 623, 624, 9, 6, 2, 2, 624, 678, 5, 74, 38, 21, 625, 626, 12, 19, 2, 2, 626, 627, 9, 7, 2, 2, 627, 678, 5, 74, 38, 20, 628, 629, 12, 17, 2, 2, 629, 630, 9, 8, 2, 2, 630, 678, 5, 74, 38, 18, 631, 632, 12, 16, 2, 2, 632, 633, 7, 25, 2, 2, 633, 678, 5, 74, 38, 17, 634, 635, 12, 15, 2, 2, 635, 636, 7, 27, 2, 2, 636, 678, 5, 74, 38, 16, 637, 638, 12, 14, 2, 2, 638, 639, 7, 28, 2, 2, 639, 678, 5, 74, 38, 15, 640, 641, 12, 13, 2, 2, 641, 642, 7, 37, 2, 2, 642, 678, 5, 74, 38, 14, 643, 644, 12, 12, 2, 2, 644, 645, 7, 38, 2, 2, 645, 678, 5, 74, 38, 13, 646, 647, 12, 11, 2, 2, 647, 648, 7, 15, 2, 2, 648, 649, 5, 74, 38, 2, 649, 650, 7, 11, 2, 2, 650, 651, 5, 74, 38, 12, 651, 678, 3, 2, 2, 2, 652, 653, 12, 10, 2, 2, 653, 654, 7, 39, 2, 2, 654, 678, 5, 74, 38, 10, 655, 656, 12, 9, 2, 2, 656, 657, 7, 40, 2, 2, 657, 678, 5, 74, 38, 9, 658, 659, 12, 33, 2, 2, 659, 660, 7, 16, 2, 2, 660, 678, 7, 109, 2, 2, 661, 662, 12, 32, 2, 2, 662, 663, 7, 17, 2, 2, 663, 678, 7, 109, 2, 2, 664, 665, 12, 31, 2, 2, 665, 667, 7, 8, 2, 2, 666, 668, 5, 76, 39, 2, 667, 666, 3, 2, 2, 2, 667, 668, 3, 2, 2, 2, 668, 669, 3, 2, 2, 2, 669, 678, 7, 9, 2, 2, 670, 671, 12, 27, 2, 2, 671, 672, 7, 6, 2, 2, 672, 673, 5, 72, 37, 2, 673, 674, 7, 7, 2, 2, 674, 678, 3, 2, 2, 2, 675, 676, 12, 24, 2, 2, 676, 678, 9, 2, 2, 2, 677, 619, 3, 2, 2, 2, 677, 622, 3, 2, 2, 2, 677, 625, 3, 2, 2, 2, 677, 628, 3, 2, 2, 2, 677, 631, 3, 2, 2, 2, 677, 634, 3, 2, 2, 2, 677, 637, 3, 2, 2, 2, 677, 640, 3, 2, 2, 2, 677, 643, 3, 2, 2, 2, 677, 646, 3, 2, 2, 2, 677, 652, 3, 2, 2, 2, 677, 655, 3, 2, 2, 2, 677, 658, 3, 2, 2, 2, 677, 661, 3, 2, 2, 2, 677, 664, 3, 2, 2, 2, 677, 670, 3, 2, 2, 2, 677, 675, 3, 2, 2, 2, 678, 681, 3, 2, 2, 2, 679, 677, 3, 2, 2, 2, 679, 680, 3, 2, 2, 2, 680, 75, 3, 2, 2, 2, 681, 679, 3, 2, 2, 2, 682, 687, 5, 74, 38, 2, 683, 684, 7, 12, 2, 2, 684, 686, 5, 74, 38, 2, 685, 683, 3, 2, 2, 2, 686, 689, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 687, 688, 3, 2, 2, 2, 688, 77, 3, 2, 2, 2, 689, 687, 3, 2, 2, 2, 690, 692, 7, 76, 2, 2, 691, 693, 5, 80, 41, 2, 692, 691, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 695, 7, 86, 2, 2, 695, 79, 3, 2, 2, 2, 696, 697, 7, 8, 2, 2, 697, 702, 5, 82, 42, 2, 698, 699, 7, 12, 2, 2, 699, 701, 5, 82, 42, 2, 700, 698, 3, 2, 2, 2, 701, 704, 3, 2, 2, 2, 702, 700, 3, 2, 2, 2, 702, 703, 3, 2, 2, 2, 703, 705, 3, 2, 2, 2, 704, 702, 3, 2, 2, 2, 705, 706, 7, 9, 2, 2, 706, 81, 3, 2, 2, 2, 707, 708, 7, 77, 2, 2, 708, 718, 7, 110, 2, 2, 709, 710, 7, 78, 2, 2, 710, 718, 7, 109, 2, 2, 711, 712, 7, 79, 2, 2, 712, 718, 7, 110, 2, 2, 713, 714, 7, 80, 2, 2, 714, 718, 5, 74, 38, 2, 715, 716, 7, 81, 2, 2, 716, 718, 5, 74, 38, 2, 717, 707, 3, 2, 2, 2, 717, 709, 3, 2, 2, 2, 717, 711, 3, 2, 2, 2, 717, 713, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 83, 3, 2, 2, 2, 719, 721, 5, 86, 44, 2, 720, 719, 3, 2, 2, 2, 721, 724, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 722, 723, 3, 2, 2, 2, 723, 85, 3, 2, 2, 2, 724, 722, 3, 2, 2, 2, 725, 729, 5, 88, 45, 2, 726, 729, 5, 90, 46, 2, 727, 729, 5, 92, 47, 2, 728, 725, 3, 2, 2, 2, 728, 726, 3, 2, 2, 2, 728, 727, 3, 2, 2, 2, 729, 87, 3, 2, 2, 2, 730, 731, 7, 147, 2, 2, 731, 735, 7, 118, 2, 2, 732, 734, 7, 148, 2, 2, 733, 732, 3, 2, 2, 2, 734, 737, 3, 2, 2, 2, 735, 733, 3, 2, 2, 2, 735, 736, 3, 2, 2, 2, 736, 747, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 738, 739, 7, 146, 2, 2, 739, 743, 7, 118, 2, 2, 740, 742, 7, 148, 2, 2, 741, 740, 3, 2, 2, 2, 742, 745, 3, 2, 2, 2, 743, 741, 3, 2, 2, 2, 743, 744, 3, 2, 2, 2, 744, 747, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 746, 730, 3, 2, 2, 2, 746, 738, 3, 2, 2, 2, 747, 89, 3, 2, 2, 2, 748, 750, 7, 116, 2, 2, 749, 751, 5, 94, 48, 2, 750, 749, 3, 2, 2, 2, 750, 751, 3, 2, 2, 2, 751, 755, 3, 2, 2, 2, 752, 754, 7, 148, 2, 2, 753, 752, 3, 2, 2, 2, 754, 757, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 91, 3, 2, 2, 2, 757, 755, 3, 2, 2, 2, 758, 759, 7, 115, 2, 2, 759, 764, 5, 96, 49, 2, 760, 761, 7, 119, 2, 2, 761, 763, 5, 96, 49, 2, 762, 760, 3, 2, 2, 2, 763, 766, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 764, 765, 3, 2, 2, 2, 765, 770, 3, 2, 2, 2, 766, 764, 3, 2, 2, 2, 767, 769, 7, 148, 2, 2, 768, 767, 3, 2, 2, 2, 769, 772, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 93, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 773, 819, 5, 96, 49, 2, 774, 775, 7, 117, 2, 2, 775, 819, 5, 96, 49, 2, 776, 777, 5, 96, 49, 2, 777, 778, 7, 119, 2, 2, 778, 779, 5, 96, 49, 2, 779, 819, 3, 2, 2, 2, 780, 781, 7, 120, 2, 2, 781, 782, 5, 96, 49, 2, 782, 783, 7, 121, 2, 2, 783, 784, 7, 119, 2, 2, 784, 785, 7, 147, 2, 2, 785, 819, 3, 2, 2, 2, 786, 787, 7, 120, 2, 2, 787, 788, 7, 120, 2, 2, 788, 789, 5, 96, 49, 2, 789, 790, 7, 121, 2, 2, 790, 791, 7, 121, 2, 2, 791, 792, 7, 119, 2, 2, 792, 793, 7, 147, 2, 2, 793, 819, 3, 2, 2, 2, 794, 795, 7, 120, 2, 2, 795, 796, 5, 96, 49, 2, 796, 797, 7, 119, 2, 2, 797, 798, 7, 147, 2, 2, 798, 799, 7, 121, 2, 2, 799, 800, 7, 119, 2, 2, 800, 801, 7, 147, 2, 2, 801, 819, 3, 2, 2, 2, 802, 803, 7, 120, 2, 2, 803, 804, 5, 96, 49, 2, 804, 805, 7, 119, 2, 2, 805, 806, 7, 147, 2, 2, 806, 807, 7, 121, 2, 2, 807, 819, 3, 2, 2, 2, 808, 809, 7, 120, 2, 2, 809, 810, 5, 96, 49, 2, 810, 811, 7, 121, 2, 2, 811, 819, 3, 2, 2, 2, 812, 813, 7, 120, 2, 2, 813, 814, 7, 120, 2, 2, 814, 815, 5, 96, 49, 2, 815, 816, 7, 121, 2, 2, 816, 817, 7, 121, 2, 2, 817, 819, 3, 2, 2, 2, 818, 773, 3, 2, 2, 2, 818, 774, 3, 2, 2, 2, 818, 776, 3, 2, 2, 2, 818, 780, 3, 2, 2, 2, 818, 786, 3, 2, 2, 2, 818, 794, 3, 2, 2, 2, 818, 802, 3, 2, 2, 2, 818, 808, 3, 2, 2, 2, 818, 812, 3, 2, 2, 2, 819, 95, 3, 2, 2, 2, 820, 821, 8, 49, 1, 2, 821, 822, 7, 122, 2, 2, 822, 823, 5, 96, 49, 2, 823, 824, 7, 123, 2, 2, 824, 835, 3, 2, 2, 2, 825, 826, 9, 9, 2, 2, 826, 835, 5, 96, 49, 10, 827, 835, 7, 147, 2, 2, 828, 835, 7, 145, 2, 2, 829, 830, 7, 133, 2, 2, 830, 831, 7, 147, 2, 2, 831, 835, 7, 134, 2, 2, 832, 835, 7, 135, 2, 2, 833, 835, 7, 144, 2, 2, 834, 820, 3, 2, 2, 2, 834, 825, 3, 2, 2, 2, 834, 827, 3, 2, 2, 2, 834, 828, 3, 2, 2, 2, 834, 829, 3, 2, 2, 2, 834, 832, 3, 2, 2, 2, 834, 833, 3, 2, 2, 2, 835, 850, 3, 2, 2, 2, 836, 837, 12, 12, 2, 2, 837, 838, 7, 124, 2, 2, 838, 849, 5, 96, 49, 13, 839, 840, 12, 11, 2, 2, 840, 841, 9, 10, 2, 2, 841, 849, 5, 96, 49, 12, 842, 843, 12, 9, 2, 2, 843, 844, 9, 11, 2, 2, 844, 849, 5, 96, 49, 10, 845, 846, 12, 8, 2, 2, 846, 847, 9, 12, 2, 2, 847, 849, 5, 96, 49, 9, 848, 836, 3, 2, 2, 2, 848, 839, 3, 2, 2, 2, 848, 842, 3, 2, 2, 2, 848, 845, 3, 2, 2, 2, 849, 852, 3, 2, 2, 2, 850, 848, 3, 2, 2, 2, 850, 851, 3, 2, 2, 2, 851, 97, 3, 2, 2, 2, 852, 850, 3, 2, 2, 2, 86, 107, 124, 137, 143, 149, 159, 166, 173, 178, 190, 193, 195, 205, 213, 218, 223, 230, 237, 244, 252, 258, 270, 284, 290, 296, 302, 307, 311, 320, 327, 334, 344, 356, 367, 388, 397, 403, 408, 415, 428, 433, 445, 459, 478, 487, 495, 500, 505, 507, 513, 518, 522, 531, 534, 537, 549, 561, 569, 575, 579, 600, 604, 613, 617, 667, 677, 679, 687, 692, 702, 717, 722, 728, 735, 743, 746, 750, 755, 764, 770, 818, 834, 848, 850] \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java index 37829e697..f330e42b8 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser.java +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser.java @@ -174,11 +174,15 @@ public class KickCParser extends Parser { public ATN getATN() { return _ATN; } + // The C parser CParser cParser; + // true when a typedef is being created + boolean isTypedef; public KickCParser(TokenStream input, CParser cParser) { this(input); this.cParser = cParser; + this.isTypedef = false; } @@ -694,23 +698,12 @@ public class KickCParser extends Parser { } public static class TypeDefContext extends ParserRuleContext { - public Token NAME; public TerminalNode TYPEDEF() { return getToken(KickCParser.TYPEDEF, 0); } public DeclTypeContext declType() { return getRuleContext(DeclTypeContext.class,0); } - public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } - public List declPointer() { - return getRuleContexts(DeclPointerContext.class); - } - public DeclPointerContext declPointer(int i) { - return getRuleContext(DeclPointerContext.class,i); - } - public List declArray() { - return getRuleContexts(DeclArrayContext.class); - } - public DeclArrayContext declArray(int i) { - return getRuleContext(DeclArrayContext.class,i); + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); } public TypeDefContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -734,7 +727,6 @@ public class KickCParser extends Parser { public final TypeDefContext typeDef() throws RecognitionException { TypeDefContext _localctx = new TypeDefContext(_ctx, getState()); enterRule(_localctx, 14, RULE_typeDef); - int _la; try { enterOuterAlt(_localctx, 1); { @@ -742,37 +734,9 @@ public class KickCParser extends Parser { match(TYPEDEF); setState(150); declType(); - setState(154); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==ASTERISK) { - { - { - setState(151); - declPointer(); - } - } - setState(156); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(157); - ((TypeDefContext)_localctx).NAME = match(NAME); - setState(161); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==BRACKET_BEGIN) { - { - { - setState(158); - declArray(); - } - } - setState(163); - _errHandler.sync(this); - _la = _input.LA(1); - } - cParser.addTypedef((((TypeDefContext)_localctx).NAME!=null?((TypeDefContext)_localctx).NAME.getText():null)); + isTypedef=true; + setState(152); + declarator(0); } } catch (RecognitionException re) { @@ -822,33 +786,33 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(169); + setState(157); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(166); + setState(154); directive(); } } - setState(171); + setState(159); _errHandler.sync(this); _la = _input.LA(1); } - setState(172); + setState(160); type(0); - setState(176); + setState(164); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(173); + setState(161); directive(); } } - setState(178); + setState(166); _errHandler.sync(this); _la = _input.LA(1); } @@ -899,19 +863,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(179); + setState(167); match(ASTERISK); - setState(183); + setState(171); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(180); + setState(168); directive(); } } - setState(185); + setState(173); _errHandler.sync(this); _la = _input.LA(1); } @@ -960,19 +924,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(186); + setState(174); match(BRACKET_BEGIN); - setState(188); + setState(176); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(187); + setState(175); expr(0); } } - setState(190); + setState(178); match(BRACKET_END); } } @@ -1083,28 +1047,28 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(193); + setState(181); type(0); } _ctx.stop = _input.LT(-1); - setState(205); + setState(193); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + _alt = getInterpreter().adaptivePredict(_input,11,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(203); + setState(191); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { case 1: { _localctx = new TypeSpecifierPointerContext(new TypeSpecifierContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeSpecifier); - setState(195); + setState(183); if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(196); + setState(184); match(ASTERISK); } break; @@ -1112,30 +1076,30 @@ public class KickCParser extends Parser { { _localctx = new TypeSpecifierArrayContext(new TypeSpecifierContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_typeSpecifier); - setState(197); + setState(185); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(198); + setState(186); match(BRACKET_BEGIN); - setState(200); + setState(188); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(199); + setState(187); expr(0); } } - setState(202); + setState(190); match(BRACKET_END); } break; } } } - setState(207); + setState(195); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,13,_ctx); + _alt = getInterpreter().adaptivePredict(_input,11,_ctx); } } } @@ -1233,6 +1197,7 @@ public class KickCParser extends Parser { } } public static class DeclaratorNameContext extends DeclaratorContext { + public Token NAME; public TerminalNode NAME() { return getToken(KickCParser.NAME, 0); } public DeclaratorNameContext(DeclaratorContext ctx) { copyFrom(ctx); } @Override @@ -1266,7 +1231,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(222); + setState(211); _errHandler.sync(this); switch (_input.LA(1)) { case NAME: @@ -1275,8 +1240,9 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(209); - match(NAME); + setState(197); + ((DeclaratorNameContext)_localctx).NAME = match(NAME); + if(isTypedef) { cParser.addTypedef((((DeclaratorNameContext)_localctx).NAME!=null?((DeclaratorNameContext)_localctx).NAME.getText():null)); isTypedef=false; } } break; case ASTERISK: @@ -1284,23 +1250,23 @@ public class KickCParser extends Parser { _localctx = new DeclaratorPointerContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(210); + setState(199); match(ASTERISK); - setState(214); + setState(203); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(211); + setState(200); directive(); } } - setState(216); + setState(205); _errHandler.sync(this); _la = _input.LA(1); } - setState(217); + setState(206); declarator(2); } break; @@ -1309,11 +1275,11 @@ public class KickCParser extends Parser { _localctx = new DeclaratorParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(218); + setState(207); match(PAR_BEGIN); - setState(219); + setState(208); declarator(0); - setState(220); + setState(209); match(PAR_END); } break; @@ -1321,9 +1287,9 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(232); + setState(221); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,17,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -1332,28 +1298,28 @@ public class KickCParser extends Parser { { _localctx = new DeclaratorArrayContext(new DeclaratorContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_declarator); - setState(224); + setState(213); if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(225); + setState(214); match(BRACKET_BEGIN); - setState(227); + setState(216); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(226); + setState(215); expr(0); } } - setState(229); + setState(218); match(BRACKET_END); } } } - setState(234); + setState(223); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,17,_ctx); + _alt = getInterpreter().adaptivePredict(_input,15,_ctx); } } } @@ -1544,16 +1510,16 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(246); + setState(235); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { case 1: { _localctx = new TypeSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(236); + setState(225); match(SIMPLETYPE); } break; @@ -1562,14 +1528,14 @@ public class KickCParser extends Parser { _localctx = new TypeSignedSimpleContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(237); + setState(226); match(SIGNEDNESS); - setState(239); + setState(228); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,16,_ctx) ) { case 1: { - setState(238); + setState(227); match(SIMPLETYPE); } break; @@ -1581,7 +1547,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(241); + setState(230); structDef(); } break; @@ -1590,7 +1556,7 @@ public class KickCParser extends Parser { _localctx = new TypeStructRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(242); + setState(231); structRef(); } break; @@ -1599,7 +1565,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumDefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(243); + setState(232); enumDef(); } break; @@ -1608,7 +1574,7 @@ public class KickCParser extends Parser { _localctx = new TypeEnumRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(244); + setState(233); enumRef(); } break; @@ -1617,15 +1583,15 @@ public class KickCParser extends Parser { _localctx = new TypeNamedRefContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(245); + setState(234); match(TYPEDEFNAME); } break; } _ctx.stop = _input.LT(-1); - setState(253); + setState(242); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,20,_ctx); + _alt = getInterpreter().adaptivePredict(_input,18,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -1634,18 +1600,18 @@ public class KickCParser extends Parser { { _localctx = new TypeProcedureContext(new TypeContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_type); - setState(248); + setState(237); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(249); + setState(238); match(PAR_BEGIN); - setState(250); + setState(239); match(PAR_END); } } } - setState(255); + setState(244); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,20,_ctx); + _alt = getInterpreter().adaptivePredict(_input,18,_ctx); } } } @@ -1688,9 +1654,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(256); + setState(245); match(STRUCT); - setState(257); + setState(246); match(NAME); } } @@ -1742,35 +1708,35 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(259); + setState(248); match(STRUCT); - setState(261); + setState(250); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(260); + setState(249); match(NAME); } } - setState(263); + setState(252); match(CURLY_BEGIN); - setState(265); + setState(254); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(264); + setState(253); structMembers(); } } - setState(267); + setState(256); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0) ); - setState(269); + setState(258); match(CURLY_END); } } @@ -1815,9 +1781,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(271); + setState(260); declVariables(); - setState(272); + setState(261); match(SEMICOLON); } } @@ -1860,9 +1826,9 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(274); + setState(263); match(ENUM); - setState(275); + setState(264); match(NAME); } } @@ -1911,23 +1877,23 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(277); + setState(266); match(ENUM); - setState(279); + setState(268); _errHandler.sync(this); _la = _input.LA(1); if (_la==NAME) { { - setState(278); + setState(267); match(NAME); } } - setState(281); + setState(270); match(CURLY_BEGIN); - setState(282); + setState(271); enumMemberList(0); - setState(283); + setState(272); match(CURLY_END); } } @@ -1985,13 +1951,13 @@ public class KickCParser extends Parser { enterOuterAlt(_localctx, 1); { { - setState(286); + setState(275); enumMember(); } _ctx.stop = _input.LT(-1); - setState(293); + setState(282); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,24,_ctx); + _alt = getInterpreter().adaptivePredict(_input,22,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -2000,18 +1966,18 @@ public class KickCParser extends Parser { { _localctx = new EnumMemberListContext(_parentctx, _parentState); pushNewRecursionContext(_localctx, _startState, RULE_enumMemberList); - setState(288); + setState(277); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(289); + setState(278); match(COMMA); - setState(290); + setState(279); enumMember(); } } } - setState(295); + setState(284); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,24,_ctx); + _alt = getInterpreter().adaptivePredict(_input,22,_ctx); } } } @@ -2057,16 +2023,16 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(296); + setState(285); match(NAME); - setState(299); + setState(288); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,25,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { case 1: { - setState(297); + setState(286); match(ASSIGN); - setState(298); + setState(287); expr(0); } break; @@ -2130,50 +2096,50 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(301); + setState(290); declType(); - setState(305); + setState(294); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASTERISK) { { { - setState(302); + setState(291); declPointer(); } } - setState(307); + setState(296); _errHandler.sync(this); _la = _input.LA(1); } - setState(308); + setState(297); match(NAME); - setState(309); + setState(298); match(PAR_BEGIN); - setState(311); + setState(300); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << PARAM_LIST) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { - setState(310); + setState(299); parameterListDecl(); } } - setState(313); + setState(302); match(PAR_END); - setState(316); + setState(305); _errHandler.sync(this); switch (_input.LA(1)) { case CURLY_BEGIN: { - setState(314); + setState(303); declFunctionBody(); } break; case SEMICOLON: { - setState(315); + setState(304); match(SEMICOLON); } break; @@ -2225,19 +2191,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(318); + setState(307); match(CURLY_BEGIN); - setState(320); + setState(309); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << SEMICOLON) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (DEFINED - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)))) != 0)) { { - setState(319); + setState(308); stmtSeq(); } } - setState(322); + setState(311); match(CURLY_END); } } @@ -2289,21 +2255,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(324); + setState(313); parameterDecl(); - setState(329); + setState(318); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(325); + setState(314); match(COMMA); - setState(326); + setState(315); parameterDecl(); } } - setState(331); + setState(320); _errHandler.sync(this); _la = _input.LA(1); } @@ -2397,30 +2363,30 @@ public class KickCParser extends Parser { enterRule(_localctx, 48, RULE_parameterDecl); int _la; try { - setState(343); + setState(332); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { case 1: _localctx = new ParameterDeclTypeContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(332); + setState(321); declType(); - setState(336); + setState(325); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASTERISK) { { { - setState(333); + setState(322); declPointer(); } } - setState(338); + setState(327); _errHandler.sync(this); _la = _input.LA(1); } - setState(339); + setState(328); match(NAME); } break; @@ -2428,7 +2394,7 @@ public class KickCParser extends Parser { _localctx = new ParameterDeclVoidContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(341); + setState(330); match(SIMPLETYPE); } break; @@ -2436,7 +2402,7 @@ public class KickCParser extends Parser { _localctx = new ParameterDeclListContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(342); + setState(331); match(PARAM_LIST); } break; @@ -2494,31 +2460,31 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(345); + setState(334); match(PRAGMA); - setState(346); + setState(335); match(NAME); - setState(347); + setState(336); match(PAR_BEGIN); - setState(348); + setState(337); pragmaParam(); - setState(353); + setState(342); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(349); + setState(338); match(COMMA); - setState(350); + setState(339); pragmaParam(); } } - setState(355); + setState(344); _errHandler.sync(this); _la = _input.LA(1); } - setState(356); + setState(345); match(PAR_END); } } @@ -2638,14 +2604,14 @@ public class KickCParser extends Parser { PragmaParamContext _localctx = new PragmaParamContext(_ctx, getState()); enterRule(_localctx, 52, RULE_pragmaParam); try { - setState(365); + setState(354); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,32,_ctx) ) { case 1: _localctx = new PragmaParamNumberContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(358); + setState(347); match(NUMBER); } break; @@ -2653,11 +2619,11 @@ public class KickCParser extends Parser { _localctx = new PragmaParamRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(359); + setState(348); match(NUMBER); - setState(360); + setState(349); match(RANGE); - setState(361); + setState(350); match(NUMBER); } break; @@ -2665,7 +2631,7 @@ public class KickCParser extends Parser { _localctx = new PragmaParamNameContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(362); + setState(351); match(NAME); } break; @@ -2673,7 +2639,7 @@ public class KickCParser extends Parser { _localctx = new PragmaParamStringContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(363); + setState(352); match(STRING); } break; @@ -2681,7 +2647,7 @@ public class KickCParser extends Parser { _localctx = new PragmaParamCallingConventionContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(364); + setState(353); match(CALLINGCONVENTION); } break; @@ -3030,14 +2996,14 @@ public class KickCParser extends Parser { enterRule(_localctx, 54, RULE_directive); int _la; try { - setState(412); + setState(401); _errHandler.sync(this); switch (_input.LA(1)) { case CONST: _localctx = new DirectiveConstContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(367); + setState(356); match(CONST); } break; @@ -3045,13 +3011,13 @@ public class KickCParser extends Parser { _localctx = new DirectiveAlignContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(368); + setState(357); match(ALIGN); - setState(369); + setState(358); match(PAR_BEGIN); - setState(370); + setState(359); match(NUMBER); - setState(371); + setState(360); match(PAR_END); } break; @@ -3059,20 +3025,20 @@ public class KickCParser extends Parser { _localctx = new DirectiveRegisterContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(372); + setState(361); match(REGISTER); - setState(376); + setState(365); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { case 1: { - setState(373); + setState(362); match(PAR_BEGIN); { - setState(374); + setState(363); match(NAME); } - setState(375); + setState(364); match(PAR_END); } break; @@ -3083,7 +3049,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaZpContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(378); + setState(367); match(ADDRESS_ZEROPAGE); } break; @@ -3091,7 +3057,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaMainContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(379); + setState(368); match(ADDRESS_MAINMEM); } break; @@ -3099,15 +3065,15 @@ public class KickCParser extends Parser { _localctx = new DirectiveMemoryAreaAddressContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(380); + setState(369); match(ADDRESS); - setState(381); + setState(370); match(PAR_BEGIN); { - setState(382); + setState(371); expr(0); } - setState(383); + setState(372); match(PAR_END); } break; @@ -3115,7 +3081,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveVolatileContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(385); + setState(374); match(VOLATILE); } break; @@ -3123,7 +3089,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveStaticContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(386); + setState(375); match(STATIC); } break; @@ -3131,7 +3097,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormSsaContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(387); + setState(376); match(FORM_SSA); } break; @@ -3139,7 +3105,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveFormMaContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(388); + setState(377); match(FORM_MA); } break; @@ -3147,7 +3113,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExternContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(389); + setState(378); match(EXTERN); } break; @@ -3155,7 +3121,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveExportContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(390); + setState(379); match(EXPORT); } break; @@ -3163,7 +3129,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveInlineContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(391); + setState(380); match(INLINE); } break; @@ -3171,7 +3137,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveIntrinsicContext(_localctx); enterOuterAlt(_localctx, 14); { - setState(392); + setState(381); match(INTRINSIC); } break; @@ -3179,18 +3145,18 @@ public class KickCParser extends Parser { _localctx = new DirectiveInterruptContext(_localctx); enterOuterAlt(_localctx, 15); { - setState(393); + setState(382); match(INTERRUPT); - setState(397); + setState(386); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { case 1: { - setState(394); + setState(383); match(PAR_BEGIN); - setState(395); + setState(384); match(NAME); - setState(396); + setState(385); match(PAR_END); } break; @@ -3201,29 +3167,29 @@ public class KickCParser extends Parser { _localctx = new DirectiveReserveZpContext(_localctx); enterOuterAlt(_localctx, 16); { - setState(399); + setState(388); match(LOCAL_RESERVE); - setState(400); + setState(389); match(PAR_BEGIN); - setState(401); + setState(390); pragmaParam(); - setState(406); + setState(395); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(402); + setState(391); match(COMMA); - setState(403); + setState(392); pragmaParam(); } } - setState(408); + setState(397); _errHandler.sync(this); _la = _input.LA(1); } - setState(409); + setState(398); match(PAR_END); } break; @@ -3231,7 +3197,7 @@ public class KickCParser extends Parser { _localctx = new DirectiveCallingConventionContext(_localctx); enterOuterAlt(_localctx, 17); { - setState(411); + setState(400); match(CALLINGCONVENTION); } break; @@ -3283,17 +3249,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(415); + setState(404); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(414); + setState(403); stmt(); } } - setState(417); + setState(406); _errHandler.sync(this); _la = _input.LA(1); } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << SEMICOLON) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (DEFINED - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)))) != 0) ); @@ -3657,16 +3623,16 @@ public class KickCParser extends Parser { enterRule(_localctx, 58, RULE_stmt); int _la; try { - setState(504); + setState(493); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,45,_ctx) ) { case 1: _localctx = new StmtDeclVarContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(419); + setState(408); declVariables(); - setState(420); + setState(409); match(SEMICOLON); } break; @@ -3674,19 +3640,19 @@ public class KickCParser extends Parser { _localctx = new StmtBlockContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(422); + setState(411); match(CURLY_BEGIN); - setState(424); + setState(413); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << SEMICOLON) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (DEFINED - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)))) != 0)) { { - setState(423); + setState(412); stmtSeq(); } } - setState(426); + setState(415); match(CURLY_END); } break; @@ -3694,9 +3660,9 @@ public class KickCParser extends Parser { _localctx = new StmtExprContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(427); + setState(416); commaExpr(0); - setState(428); + setState(417); match(SEMICOLON); } break; @@ -3704,24 +3670,24 @@ public class KickCParser extends Parser { _localctx = new StmtIfElseContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(430); + setState(419); match(IF); - setState(431); + setState(420); match(PAR_BEGIN); - setState(432); + setState(421); commaExpr(0); - setState(433); + setState(422); match(PAR_END); - setState(434); + setState(423); stmt(); - setState(437); + setState(426); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { case 1: { - setState(435); + setState(424); match(ELSE); - setState(436); + setState(425); stmt(); } break; @@ -3732,29 +3698,29 @@ public class KickCParser extends Parser { _localctx = new StmtWhileContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(442); + setState(431); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(439); + setState(428); directive(); } } - setState(444); + setState(433); _errHandler.sync(this); _la = _input.LA(1); } - setState(445); + setState(434); match(WHILE); - setState(446); + setState(435); match(PAR_BEGIN); - setState(447); + setState(436); commaExpr(0); - setState(448); + setState(437); match(PAR_END); - setState(449); + setState(438); stmt(); } break; @@ -3762,33 +3728,33 @@ public class KickCParser extends Parser { _localctx = new StmtDoWhileContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(454); + setState(443); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(451); + setState(440); directive(); } } - setState(456); + setState(445); _errHandler.sync(this); _la = _input.LA(1); } - setState(457); + setState(446); match(DO); - setState(458); + setState(447); stmt(); - setState(459); + setState(448); match(WHILE); - setState(460); + setState(449); match(PAR_BEGIN); - setState(461); + setState(450); commaExpr(0); - setState(462); + setState(451); match(PAR_END); - setState(463); + setState(452); match(SEMICOLON); } break; @@ -3796,29 +3762,29 @@ public class KickCParser extends Parser { _localctx = new StmtForContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(468); + setState(457); _errHandler.sync(this); _la = _input.LA(1); while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0)) { { { - setState(465); + setState(454); directive(); } } - setState(470); + setState(459); _errHandler.sync(this); _la = _input.LA(1); } - setState(471); + setState(460); match(FOR); - setState(472); + setState(461); match(PAR_BEGIN); - setState(473); + setState(462); forLoop(); - setState(474); + setState(463); match(PAR_END); - setState(475); + setState(464); stmt(); } break; @@ -3826,19 +3792,19 @@ public class KickCParser extends Parser { _localctx = new StmtSwitchContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(477); + setState(466); match(SWITCH); - setState(478); + setState(467); match(PAR_BEGIN); - setState(479); + setState(468); commaExpr(0); - setState(480); + setState(469); match(PAR_END); - setState(481); + setState(470); match(CURLY_BEGIN); - setState(482); + setState(471); switchCases(); - setState(483); + setState(472); match(CURLY_END); } break; @@ -3846,19 +3812,19 @@ public class KickCParser extends Parser { _localctx = new StmtReturnContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(485); + setState(474); match(RETURN); - setState(487); + setState(476); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(486); + setState(475); commaExpr(0); } } - setState(489); + setState(478); match(SEMICOLON); } break; @@ -3866,9 +3832,9 @@ public class KickCParser extends Parser { _localctx = new StmtBreakContext(_localctx); enterOuterAlt(_localctx, 10); { - setState(490); + setState(479); match(BREAK); - setState(491); + setState(480); match(SEMICOLON); } break; @@ -3876,9 +3842,9 @@ public class KickCParser extends Parser { _localctx = new StmtContinueContext(_localctx); enterOuterAlt(_localctx, 11); { - setState(492); + setState(481); match(CONTINUE); - setState(493); + setState(482); match(SEMICOLON); } break; @@ -3886,23 +3852,23 @@ public class KickCParser extends Parser { _localctx = new StmtAsmContext(_localctx); enterOuterAlt(_localctx, 12); { - setState(494); + setState(483); match(ASM); - setState(496); + setState(485); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(495); + setState(484); asmDirectives(); } } - setState(498); + setState(487); match(CURLY_BEGIN); - setState(499); + setState(488); asmLines(); - setState(500); + setState(489); match(ASM_CURLY_END); } break; @@ -3910,7 +3876,7 @@ public class KickCParser extends Parser { _localctx = new StmtDeclKasmContext(_localctx); enterOuterAlt(_localctx, 13); { - setState(502); + setState(491); kasmContent(); } break; @@ -3918,7 +3884,7 @@ public class KickCParser extends Parser { _localctx = new StmtEmptyContext(_localctx); enterOuterAlt(_localctx, 14); { - setState(503); + setState(492); match(SEMICOLON); } break; @@ -3973,35 +3939,35 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(507); + setState(496); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(506); + setState(495); switchCase(); } } - setState(509); + setState(498); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==CASE ); - setState(516); + setState(505); _errHandler.sync(this); _la = _input.LA(1); if (_la==DEFAULT) { { - setState(511); + setState(500); match(DEFAULT); - setState(512); + setState(501); match(COLON); - setState(514); + setState(503); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << SEMICOLON) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (DEFINED - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)))) != 0)) { { - setState(513); + setState(502); stmtSeq(); } } @@ -4057,18 +4023,18 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(518); + setState(507); match(CASE); - setState(519); + setState(508); expr(0); - setState(520); + setState(509); match(COLON); - setState(522); + setState(511); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << SEMICOLON) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION) | (1L << IF) | (1L << WHILE) | (1L << DO) | (1L << FOR) | (1L << SWITCH) | (1L << RETURN))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (BREAK - 64)) | (1L << (CONTINUE - 64)) | (1L << (ASM - 64)) | (1L << (STRUCT - 64)) | (1L << (ENUM - 64)) | (1L << (SIZEOF - 64)) | (1L << (TYPEID - 64)) | (1L << (DEFINED - 64)) | (1L << (KICKASM - 64)) | (1L << (LOGIC_NOT - 64)) | (1L << (SIGNEDNESS - 64)) | (1L << (SIMPLETYPE - 64)) | (1L << (BOOLEAN - 64)) | (1L << (NUMBER - 64)) | (1L << (NAME - 64)) | (1L << (STRING - 64)) | (1L << (CHAR - 64)))) != 0)) { { - setState(521); + setState(510); stmtSeq(); } } @@ -4162,35 +4128,35 @@ public class KickCParser extends Parser { enterRule(_localctx, 64, RULE_forLoop); int _la; try { - setState(540); + setState(529); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,52,_ctx) ) { case 1: _localctx = new ForClassicContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(524); + setState(513); forClassicInit(); - setState(525); + setState(514); match(SEMICOLON); - setState(527); + setState(516); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(526); + setState(515); forClassicCondition(); } } - setState(529); + setState(518); match(SEMICOLON); - setState(531); + setState(520); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(530); + setState(519); commaExpr(0); } } @@ -4201,17 +4167,17 @@ public class KickCParser extends Parser { _localctx = new ForRangeContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(533); + setState(522); declType(); - setState(534); + setState(523); declarator(0); - setState(535); + setState(524); match(COLON); - setState(536); + setState(525); expr(0); - setState(537); + setState(526); match(RANGE); - setState(538); + setState(527); expr(0); } break; @@ -4283,7 +4249,7 @@ public class KickCParser extends Parser { enterRule(_localctx, 66, RULE_forClassicInit); int _la; try { - setState(546); + setState(535); _errHandler.sync(this); switch (_input.LA(1)) { case TYPEDEFNAME: @@ -4312,12 +4278,12 @@ public class KickCParser extends Parser { _localctx = new ForClassicInitDeclContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(543); + setState(532); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << TYPEDEFNAME) | (1L << CONST) | (1L << EXTERN) | (1L << EXPORT) | (1L << ALIGN) | (1L << INLINE) | (1L << VOLATILE) | (1L << STATIC) | (1L << INTERRUPT) | (1L << REGISTER) | (1L << LOCAL_RESERVE) | (1L << ADDRESS) | (1L << ADDRESS_ZEROPAGE) | (1L << ADDRESS_MAINMEM) | (1L << FORM_SSA) | (1L << FORM_MA) | (1L << INTRINSIC) | (1L << CALLINGCONVENTION))) != 0) || ((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (STRUCT - 69)) | (1L << (ENUM - 69)) | (1L << (SIGNEDNESS - 69)) | (1L << (SIMPLETYPE - 69)))) != 0)) { { - setState(542); + setState(531); declVariables(); } } @@ -4347,7 +4313,7 @@ public class KickCParser extends Parser { _localctx = new ForClassicInitExprContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(545); + setState(534); commaExpr(0); } break; @@ -4395,7 +4361,7 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(548); + setState(537); commaExpr(0); } } @@ -4484,13 +4450,13 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(551); + setState(540); expr(0); } _ctx.stop = _input.LT(-1); - setState(558); + setState(547); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,57,_ctx); + _alt = getInterpreter().adaptivePredict(_input,55,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); @@ -4499,18 +4465,18 @@ public class KickCParser extends Parser { { _localctx = new CommaSimpleContext(new CommaExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_commaExpr); - setState(553); + setState(542); if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); - setState(554); + setState(543); match(COMMA); - setState(555); + setState(544); expr(0); } } } - setState(560); + setState(549); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,57,_ctx); + _alt = getInterpreter().adaptivePredict(_input,55,_ctx); } } } @@ -5072,20 +5038,20 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(626); + setState(615); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { case 1: { _localctx = new ExprParContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(562); + setState(551); match(PAR_BEGIN); - setState(563); + setState(552); commaExpr(0); - setState(564); + setState(553); match(PAR_END); } break; @@ -5094,11 +5060,11 @@ public class KickCParser extends Parser { _localctx = new ExprSizeOfContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(566); + setState(555); match(SIZEOF); - setState(567); + setState(556); match(PAR_BEGIN); - setState(570); + setState(559); _errHandler.sync(this); switch (_input.LA(1)) { case CURLY_BEGIN: @@ -5122,7 +5088,7 @@ public class KickCParser extends Parser { case STRING: case CHAR: { - setState(568); + setState(557); expr(0); } break; @@ -5132,14 +5098,14 @@ public class KickCParser extends Parser { case SIGNEDNESS: case SIMPLETYPE: { - setState(569); + setState(558); typeSpecifier(0); } break; default: throw new NoViableAltException(this); } - setState(572); + setState(561); match(PAR_END); } break; @@ -5148,11 +5114,11 @@ public class KickCParser extends Parser { _localctx = new ExprTypeIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(574); + setState(563); match(TYPEID); - setState(575); + setState(564); match(PAR_BEGIN); - setState(578); + setState(567); _errHandler.sync(this); switch (_input.LA(1)) { case CURLY_BEGIN: @@ -5176,7 +5142,7 @@ public class KickCParser extends Parser { case STRING: case CHAR: { - setState(576); + setState(565); expr(0); } break; @@ -5186,14 +5152,14 @@ public class KickCParser extends Parser { case SIGNEDNESS: case SIMPLETYPE: { - setState(577); + setState(566); typeSpecifier(0); } break; default: throw new NoViableAltException(this); } - setState(580); + setState(569); match(PAR_END); } break; @@ -5202,26 +5168,26 @@ public class KickCParser extends Parser { _localctx = new ExprDefinedContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(582); + setState(571); match(DEFINED); - setState(584); + setState(573); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(583); + setState(572); match(PAR_BEGIN); } } - setState(586); + setState(575); match(NAME); - setState(588); + setState(577); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,61,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,59,_ctx) ) { case 1: { - setState(587); + setState(576); match(PAR_END); } break; @@ -5233,13 +5199,13 @@ public class KickCParser extends Parser { _localctx = new ExprCastContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(590); + setState(579); match(PAR_BEGIN); - setState(591); + setState(580); typeSpecifier(0); - setState(592); + setState(581); match(PAR_END); - setState(593); + setState(582); expr(24); } break; @@ -5248,7 +5214,7 @@ public class KickCParser extends Parser { _localctx = new ExprPreModContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(595); + setState(584); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -5258,7 +5224,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(596); + setState(585); expr(23); } break; @@ -5267,9 +5233,9 @@ public class KickCParser extends Parser { _localctx = new ExprPtrContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(597); + setState(586); match(ASTERISK); - setState(598); + setState(587); expr(21); } break; @@ -5278,7 +5244,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(599); + setState(588); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << PLUS) | (1L << MINUS) | (1L << AND) | (1L << BIT_NOT))) != 0) || _la==LOGIC_NOT) ) { _errHandler.recoverInline(this); @@ -5288,7 +5254,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(600); + setState(589); expr(20); } break; @@ -5297,7 +5263,7 @@ public class KickCParser extends Parser { _localctx = new ExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(601); + setState(590); _la = _input.LA(1); if ( !(_la==LESS_THAN || _la==GREATER_THAN) ) { _errHandler.recoverInline(this); @@ -5307,7 +5273,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(602); + setState(591); expr(16); } break; @@ -5316,39 +5282,39 @@ public class KickCParser extends Parser { _localctx = new InitListContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(603); + setState(592); match(CURLY_BEGIN); - setState(604); + setState(593); expr(0); - setState(609); + setState(598); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,62,_ctx); + _alt = getInterpreter().adaptivePredict(_input,60,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(605); + setState(594); match(COMMA); - setState(606); + setState(595); expr(0); } } } - setState(611); + setState(600); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,62,_ctx); + _alt = getInterpreter().adaptivePredict(_input,60,_ctx); } - setState(613); + setState(602); _errHandler.sync(this); _la = _input.LA(1); if (_la==COMMA) { { - setState(612); + setState(601); match(COMMA); } } - setState(615); + setState(604); match(CURLY_END); } break; @@ -5357,7 +5323,7 @@ public class KickCParser extends Parser { _localctx = new ExprIdContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(617); + setState(606); match(NAME); } break; @@ -5366,7 +5332,7 @@ public class KickCParser extends Parser { _localctx = new ExprNumberContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(618); + setState(607); match(NUMBER); } break; @@ -5375,7 +5341,7 @@ public class KickCParser extends Parser { _localctx = new ExprStringContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(620); + setState(609); _errHandler.sync(this); _alt = 1; do { @@ -5383,7 +5349,7 @@ public class KickCParser extends Parser { case 1: { { - setState(619); + setState(608); match(STRING); } } @@ -5391,9 +5357,9 @@ public class KickCParser extends Parser { default: throw new NoViableAltException(this); } - setState(622); + setState(611); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,64,_ctx); + _alt = getInterpreter().adaptivePredict(_input,62,_ctx); } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); } break; @@ -5402,7 +5368,7 @@ public class KickCParser extends Parser { _localctx = new ExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(624); + setState(613); match(CHAR); } break; @@ -5411,30 +5377,30 @@ public class KickCParser extends Parser { _localctx = new ExprBoolContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(625); + setState(614); match(BOOLEAN); } break; } _ctx.stop = _input.LT(-1); - setState(688); + setState(677); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,68,_ctx); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(686); + setState(675); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,65,_ctx) ) { case 1: { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(628); + setState(617); if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(629); + setState(618); _la = _input.LA(1); if ( !(_la==SHIFT_LEFT || _la==SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -5444,7 +5410,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(630); + setState(619); expr(20); } break; @@ -5452,9 +5418,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(631); + setState(620); if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)"); - setState(632); + setState(621); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ASTERISK) | (1L << DIVIDE) | (1L << MODULO))) != 0)) ) { _errHandler.recoverInline(this); @@ -5464,7 +5430,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(633); + setState(622); expr(19); } break; @@ -5472,9 +5438,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(634); + setState(623); if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(635); + setState(624); _la = _input.LA(1); if ( !(_la==PLUS || _la==MINUS) ) { _errHandler.recoverInline(this); @@ -5484,7 +5450,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(636); + setState(625); expr(18); } break; @@ -5492,9 +5458,9 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(637); + setState(626); if (!(precpred(_ctx, 15))) throw new FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(638); + setState(627); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EQUAL) | (1L << NOT_EQUAL) | (1L << LESS_THAN) | (1L << LESS_THAN_EQUAL) | (1L << GREATER_THAN_EQUAL) | (1L << GREATER_THAN))) != 0)) ) { _errHandler.recoverInline(this); @@ -5504,7 +5470,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(639); + setState(628); expr(16); } break; @@ -5512,13 +5478,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(640); + setState(629); if (!(precpred(_ctx, 14))) throw new FailedPredicateException(this, "precpred(_ctx, 14)"); { - setState(641); + setState(630); match(AND); } - setState(642); + setState(631); expr(15); } break; @@ -5526,13 +5492,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(643); + setState(632); if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)"); { - setState(644); + setState(633); match(BIT_XOR); } - setState(645); + setState(634); expr(14); } break; @@ -5540,13 +5506,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(646); + setState(635); if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)"); { - setState(647); + setState(636); match(BIT_OR); } - setState(648); + setState(637); expr(13); } break; @@ -5554,13 +5520,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(649); + setState(638); if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)"); { - setState(650); + setState(639); match(LOGIC_AND); } - setState(651); + setState(640); expr(12); } break; @@ -5568,13 +5534,13 @@ public class KickCParser extends Parser { { _localctx = new ExprBinaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(652); + setState(641); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(653); + setState(642); match(LOGIC_OR); } - setState(654); + setState(643); expr(11); } break; @@ -5582,15 +5548,15 @@ public class KickCParser extends Parser { { _localctx = new ExprTernaryContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(655); + setState(644); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(656); + setState(645); match(CONDITION); - setState(657); + setState(646); expr(0); - setState(658); + setState(647); match(COLON); - setState(659); + setState(648); expr(10); } break; @@ -5598,11 +5564,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(661); + setState(650); if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(662); + setState(651); match(ASSIGN); - setState(663); + setState(652); expr(8); } break; @@ -5610,11 +5576,11 @@ public class KickCParser extends Parser { { _localctx = new ExprAssignmentCompoundContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(664); + setState(653); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(665); + setState(654); match(ASSIGN_COMPOUND); - setState(666); + setState(655); expr(7); } break; @@ -5622,11 +5588,11 @@ public class KickCParser extends Parser { { _localctx = new ExprDotContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(667); + setState(656); if (!(precpred(_ctx, 31))) throw new FailedPredicateException(this, "precpred(_ctx, 31)"); - setState(668); + setState(657); match(DOT); - setState(669); + setState(658); match(NAME); } break; @@ -5634,11 +5600,11 @@ public class KickCParser extends Parser { { _localctx = new ExprArrowContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(670); + setState(659); if (!(precpred(_ctx, 30))) throw new FailedPredicateException(this, "precpred(_ctx, 30)"); - setState(671); + setState(660); match(ARROW); - setState(672); + setState(661); match(NAME); } break; @@ -5646,21 +5612,21 @@ public class KickCParser extends Parser { { _localctx = new ExprCallContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(673); + setState(662); if (!(precpred(_ctx, 29))) throw new FailedPredicateException(this, "precpred(_ctx, 29)"); - setState(674); + setState(663); match(PAR_BEGIN); - setState(676); + setState(665); _errHandler.sync(this); _la = _input.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << CURLY_BEGIN) | (1L << PAR_BEGIN) | (1L << PLUS) | (1L << MINUS) | (1L << ASTERISK) | (1L << INC) | (1L << DEC) | (1L << AND) | (1L << BIT_NOT) | (1L << LESS_THAN) | (1L << GREATER_THAN))) != 0) || ((((_la - 71)) & ~0x3f) == 0 && ((1L << (_la - 71)) & ((1L << (SIZEOF - 71)) | (1L << (TYPEID - 71)) | (1L << (DEFINED - 71)) | (1L << (LOGIC_NOT - 71)) | (1L << (BOOLEAN - 71)) | (1L << (NUMBER - 71)) | (1L << (NAME - 71)) | (1L << (STRING - 71)) | (1L << (CHAR - 71)))) != 0)) { { - setState(675); + setState(664); parameterList(); } } - setState(678); + setState(667); match(PAR_END); } break; @@ -5668,13 +5634,13 @@ public class KickCParser extends Parser { { _localctx = new ExprArrayContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(679); + setState(668); if (!(precpred(_ctx, 25))) throw new FailedPredicateException(this, "precpred(_ctx, 25)"); - setState(680); + setState(669); match(BRACKET_BEGIN); - setState(681); + setState(670); commaExpr(0); - setState(682); + setState(671); match(BRACKET_END); } break; @@ -5682,9 +5648,9 @@ public class KickCParser extends Parser { { _localctx = new ExprPostModContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(684); + setState(673); if (!(precpred(_ctx, 22))) throw new FailedPredicateException(this, "precpred(_ctx, 22)"); - setState(685); + setState(674); _la = _input.LA(1); if ( !(_la==INC || _la==DEC) ) { _errHandler.recoverInline(this); @@ -5699,9 +5665,9 @@ public class KickCParser extends Parser { } } } - setState(690); + setState(679); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,68,_ctx); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); } } } @@ -5753,21 +5719,21 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(691); + setState(680); expr(0); - setState(696); + setState(685); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(692); + setState(681); match(COMMA); - setState(693); + setState(682); expr(0); } } - setState(698); + setState(687); _errHandler.sync(this); _la = _input.LA(1); } @@ -5816,19 +5782,19 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(699); + setState(688); match(KICKASM); - setState(701); + setState(690); _errHandler.sync(this); _la = _input.LA(1); if (_la==PAR_BEGIN) { { - setState(700); + setState(689); asmDirectives(); } } - setState(703); + setState(692); match(KICKASM_BODY); } } @@ -5882,27 +5848,27 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(705); + setState(694); match(PAR_BEGIN); - setState(706); + setState(695); asmDirective(); - setState(711); + setState(700); _errHandler.sync(this); _la = _input.LA(1); while (_la==COMMA) { { { - setState(707); + setState(696); match(COMMA); - setState(708); + setState(697); asmDirective(); } } - setState(713); + setState(702); _errHandler.sync(this); _la = _input.LA(1); } - setState(714); + setState(703); match(PAR_END); } } @@ -6027,16 +5993,16 @@ public class KickCParser extends Parser { AsmDirectiveContext _localctx = new AsmDirectiveContext(_ctx, getState()); enterRule(_localctx, 80, RULE_asmDirective); try { - setState(726); + setState(715); _errHandler.sync(this); switch (_input.LA(1)) { case RESOURCE: _localctx = new AsmDirectiveResourceContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(716); + setState(705); match(RESOURCE); - setState(717); + setState(706); match(STRING); } break; @@ -6044,9 +6010,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveUsesContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(718); + setState(707); match(USES); - setState(719); + setState(708); match(NAME); } break; @@ -6054,9 +6020,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveClobberContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(720); + setState(709); match(CLOBBERS); - setState(721); + setState(710); match(STRING); } break; @@ -6064,9 +6030,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveBytesContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(722); + setState(711); match(BYTES); - setState(723); + setState(712); expr(0); } break; @@ -6074,9 +6040,9 @@ public class KickCParser extends Parser { _localctx = new AsmDirectiveCyclesContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(724); + setState(713); match(CYCLES); - setState(725); + setState(714); expr(0); } break; @@ -6128,17 +6094,17 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(731); + setState(720); _errHandler.sync(this); _la = _input.LA(1); while (((((_la - 113)) & ~0x3f) == 0 && ((1L << (_la - 113)) & ((1L << (ASM_BYTE - 113)) | (1L << (ASM_MNEMONIC - 113)) | (1L << (ASM_MULTI_NAME - 113)) | (1L << (ASM_NAME - 113)))) != 0)) { { { - setState(728); + setState(717); asmLine(); } } - setState(733); + setState(722); _errHandler.sync(this); _la = _input.LA(1); } @@ -6188,28 +6154,28 @@ public class KickCParser extends Parser { AsmLineContext _localctx = new AsmLineContext(_ctx, getState()); enterRule(_localctx, 84, RULE_asmLine); try { - setState(737); + setState(726); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_MULTI_NAME: case ASM_NAME: enterOuterAlt(_localctx, 1); { - setState(734); + setState(723); asmLabel(); } break; case ASM_MNEMONIC: enterOuterAlt(_localctx, 2); { - setState(735); + setState(724); asmInstruction(); } break; case ASM_BYTE: enterOuterAlt(_localctx, 3); { - setState(736); + setState(725); asmBytes(); } break; @@ -6289,28 +6255,28 @@ public class KickCParser extends Parser { enterRule(_localctx, 86, RULE_asmLabel); int _la; try { - setState(755); + setState(744); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_NAME: _localctx = new AsmLabelNameContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(739); + setState(728); match(ASM_NAME); - setState(740); + setState(729); match(ASM_COLON); - setState(744); + setState(733); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_TAG) { { { - setState(741); + setState(730); match(ASM_TAG); } } - setState(746); + setState(735); _errHandler.sync(this); _la = _input.LA(1); } @@ -6320,21 +6286,21 @@ public class KickCParser extends Parser { _localctx = new AsmLabelMultiContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(747); + setState(736); match(ASM_MULTI_NAME); - setState(748); + setState(737); match(ASM_COLON); - setState(752); + setState(741); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_TAG) { { { - setState(749); + setState(738); match(ASM_TAG); } } - setState(754); + setState(743); _errHandler.sync(this); _la = _input.LA(1); } @@ -6390,29 +6356,29 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(757); + setState(746); match(ASM_MNEMONIC); - setState(759); + setState(748); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,76,_ctx) ) { case 1: { - setState(758); + setState(747); asmParamMode(); } break; } - setState(764); + setState(753); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_TAG) { { { - setState(761); + setState(750); match(ASM_TAG); } } - setState(766); + setState(755); _errHandler.sync(this); _la = _input.LA(1); } @@ -6471,37 +6437,37 @@ public class KickCParser extends Parser { try { enterOuterAlt(_localctx, 1); { - setState(767); + setState(756); match(ASM_BYTE); - setState(768); + setState(757); asmExpr(0); - setState(773); + setState(762); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_COMMA) { { { - setState(769); + setState(758); match(ASM_COMMA); - setState(770); + setState(759); asmExpr(0); } } - setState(775); + setState(764); _errHandler.sync(this); _la = _input.LA(1); } - setState(779); + setState(768); _errHandler.sync(this); _la = _input.LA(1); while (_la==ASM_TAG) { { { - setState(776); + setState(765); match(ASM_TAG); } } - setState(781); + setState(770); _errHandler.sync(this); _la = _input.LA(1); } @@ -6748,14 +6714,14 @@ public class KickCParser extends Parser { AsmParamModeContext _localctx = new AsmParamModeContext(_ctx, getState()); enterRule(_localctx, 92, RULE_asmParamMode); try { - setState(827); + setState(816); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { case 1: _localctx = new AsmModeAbsContext(_localctx); enterOuterAlt(_localctx, 1); { - setState(782); + setState(771); asmExpr(0); } break; @@ -6763,9 +6729,9 @@ public class KickCParser extends Parser { _localctx = new AsmModeImmContext(_localctx); enterOuterAlt(_localctx, 2); { - setState(783); + setState(772); match(ASM_IMM); - setState(784); + setState(773); asmExpr(0); } break; @@ -6773,11 +6739,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeAbsXYContext(_localctx); enterOuterAlt(_localctx, 3); { - setState(785); + setState(774); asmExpr(0); - setState(786); + setState(775); match(ASM_COMMA); - setState(787); + setState(776); asmExpr(0); } break; @@ -6785,15 +6751,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndIdxXYContext(_localctx); enterOuterAlt(_localctx, 4); { - setState(789); + setState(778); match(ASM_PAR_BEGIN); - setState(790); + setState(779); asmExpr(0); - setState(791); + setState(780); match(ASM_PAR_END); - setState(792); + setState(781); match(ASM_COMMA); - setState(793); + setState(782); match(ASM_NAME); } break; @@ -6801,19 +6767,19 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndLongIdxXYContext(_localctx); enterOuterAlt(_localctx, 5); { - setState(795); + setState(784); match(ASM_PAR_BEGIN); - setState(796); + setState(785); match(ASM_PAR_BEGIN); - setState(797); + setState(786); asmExpr(0); - setState(798); + setState(787); match(ASM_PAR_END); - setState(799); + setState(788); match(ASM_PAR_END); - setState(800); + setState(789); match(ASM_COMMA); - setState(801); + setState(790); match(ASM_NAME); } break; @@ -6821,19 +6787,19 @@ public class KickCParser extends Parser { _localctx = new AsmModeSPIndIdxContext(_localctx); enterOuterAlt(_localctx, 6); { - setState(803); + setState(792); match(ASM_PAR_BEGIN); - setState(804); + setState(793); asmExpr(0); - setState(805); + setState(794); match(ASM_COMMA); - setState(806); + setState(795); match(ASM_NAME); - setState(807); + setState(796); match(ASM_PAR_END); - setState(808); + setState(797); match(ASM_COMMA); - setState(809); + setState(798); match(ASM_NAME); } break; @@ -6841,15 +6807,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIdxIndXYContext(_localctx); enterOuterAlt(_localctx, 7); { - setState(811); + setState(800); match(ASM_PAR_BEGIN); - setState(812); + setState(801); asmExpr(0); - setState(813); + setState(802); match(ASM_COMMA); - setState(814); + setState(803); match(ASM_NAME); - setState(815); + setState(804); match(ASM_PAR_END); } break; @@ -6857,11 +6823,11 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndContext(_localctx); enterOuterAlt(_localctx, 8); { - setState(817); + setState(806); match(ASM_PAR_BEGIN); - setState(818); + setState(807); asmExpr(0); - setState(819); + setState(808); match(ASM_PAR_END); } break; @@ -6869,15 +6835,15 @@ public class KickCParser extends Parser { _localctx = new AsmModeIndLongContext(_localctx); enterOuterAlt(_localctx, 9); { - setState(821); + setState(810); match(ASM_PAR_BEGIN); - setState(822); + setState(811); match(ASM_PAR_BEGIN); - setState(823); + setState(812); asmExpr(0); - setState(824); + setState(813); match(ASM_PAR_END); - setState(825); + setState(814); match(ASM_PAR_END); } break; @@ -7082,7 +7048,7 @@ public class KickCParser extends Parser { int _alt; enterOuterAlt(_localctx, 1); { - setState(843); + setState(832); _errHandler.sync(this); switch (_input.LA(1)) { case ASM_BRACKET_BEGIN: @@ -7091,11 +7057,11 @@ public class KickCParser extends Parser { _ctx = _localctx; _prevctx = _localctx; - setState(830); + setState(819); match(ASM_BRACKET_BEGIN); - setState(831); + setState(820); asmExpr(0); - setState(832); + setState(821); match(ASM_BRACKET_END); } break; @@ -7107,7 +7073,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprUnaryContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(834); + setState(823); _la = _input.LA(1); if ( !(((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (ASM_PLUS - 125)) | (1L << (ASM_MINUS - 125)) | (1L << (ASM_LESS_THAN - 125)) | (1L << (ASM_GREATER_THAN - 125)))) != 0)) ) { _errHandler.recoverInline(this); @@ -7117,7 +7083,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(835); + setState(824); asmExpr(8); } break; @@ -7126,7 +7092,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(836); + setState(825); match(ASM_NAME); } break; @@ -7135,7 +7101,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprLabelRelContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(837); + setState(826); match(ASM_MULTI_REL); } break; @@ -7144,11 +7110,11 @@ public class KickCParser extends Parser { _localctx = new AsmExprReplaceContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(838); + setState(827); match(ASM_CURLY_BEGIN); - setState(839); + setState(828); match(ASM_NAME); - setState(840); + setState(829); match(ASM_CURLY_END); } break; @@ -7157,7 +7123,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprIntContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(841); + setState(830); match(ASM_NUMBER); } break; @@ -7166,7 +7132,7 @@ public class KickCParser extends Parser { _localctx = new AsmExprCharContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(842); + setState(831); match(ASM_CHAR); } break; @@ -7174,28 +7140,28 @@ public class KickCParser extends Parser { throw new NoViableAltException(this); } _ctx.stop = _input.LT(-1); - setState(859); + setState(848); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,85,_ctx); + _alt = getInterpreter().adaptivePredict(_input,83,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(857); + setState(846); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,82,_ctx) ) { case 1: { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(845); + setState(834); if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)"); { - setState(846); + setState(835); match(ASM_DOT); } - setState(847); + setState(836); asmExpr(11); } break; @@ -7203,9 +7169,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(848); + setState(837); if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(849); + setState(838); _la = _input.LA(1); if ( !(_la==ASM_SHIFT_LEFT || _la==ASM_SHIFT_RIGHT) ) { _errHandler.recoverInline(this); @@ -7215,7 +7181,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(850); + setState(839); asmExpr(10); } break; @@ -7223,9 +7189,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(851); + setState(840); if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(852); + setState(841); _la = _input.LA(1); if ( !(_la==ASM_MULTIPLY || _la==ASM_DIVIDE) ) { _errHandler.recoverInline(this); @@ -7235,7 +7201,7 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(853); + setState(842); asmExpr(8); } break; @@ -7243,9 +7209,9 @@ public class KickCParser extends Parser { { _localctx = new AsmExprBinaryContext(new AsmExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_asmExpr); - setState(854); + setState(843); if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); - setState(855); + setState(844); _la = _input.LA(1); if ( !(_la==ASM_PLUS || _la==ASM_MINUS) ) { _errHandler.recoverInline(this); @@ -7255,16 +7221,16 @@ public class KickCParser extends Parser { _errHandler.reportMatch(this); consume(); } - setState(856); + setState(845); asmExpr(7); } break; } } } - setState(861); + setState(850); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,85,_ctx); + _alt = getInterpreter().adaptivePredict(_input,83,_ctx); } } } @@ -7398,7 +7364,7 @@ public class KickCParser extends Parser { } public static final String _serializedATN = - "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u009c\u0361\4\2\t"+ + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u009c\u0356\4\2\t"+ "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ @@ -7408,74 +7374,73 @@ public class KickCParser extends Parser { "\7\4j\n\4\f\4\16\4m\13\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3\5\3"+ "\5\3\5\3\5\5\5}\n\5\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\7\7\7\u0088\n\7"+ "\f\7\16\7\u008b\13\7\3\b\3\b\3\b\5\b\u0090\n\b\3\b\3\b\3\b\3\b\5\b\u0096"+ - "\n\b\3\t\3\t\3\t\7\t\u009b\n\t\f\t\16\t\u009e\13\t\3\t\3\t\7\t\u00a2\n"+ - "\t\f\t\16\t\u00a5\13\t\3\t\3\t\3\n\7\n\u00aa\n\n\f\n\16\n\u00ad\13\n\3"+ - "\n\3\n\7\n\u00b1\n\n\f\n\16\n\u00b4\13\n\3\13\3\13\7\13\u00b8\n\13\f\13"+ - "\16\13\u00bb\13\13\3\f\3\f\5\f\u00bf\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3"+ - "\r\3\r\3\r\5\r\u00cb\n\r\3\r\7\r\u00ce\n\r\f\r\16\r\u00d1\13\r\3\16\3"+ - "\16\3\16\3\16\7\16\u00d7\n\16\f\16\16\16\u00da\13\16\3\16\3\16\3\16\3"+ - "\16\3\16\5\16\u00e1\n\16\3\16\3\16\3\16\5\16\u00e6\n\16\3\16\7\16\u00e9"+ - "\n\16\f\16\16\16\u00ec\13\16\3\17\3\17\3\17\3\17\5\17\u00f2\n\17\3\17"+ - "\3\17\3\17\3\17\3\17\5\17\u00f9\n\17\3\17\3\17\3\17\7\17\u00fe\n\17\f"+ - "\17\16\17\u0101\13\17\3\20\3\20\3\20\3\21\3\21\5\21\u0108\n\21\3\21\3"+ - "\21\6\21\u010c\n\21\r\21\16\21\u010d\3\21\3\21\3\22\3\22\3\22\3\23\3\23"+ - "\3\23\3\24\3\24\5\24\u011a\n\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25"+ - "\3\25\3\25\7\25\u0126\n\25\f\25\16\25\u0129\13\25\3\26\3\26\3\26\5\26"+ - "\u012e\n\26\3\27\3\27\7\27\u0132\n\27\f\27\16\27\u0135\13\27\3\27\3\27"+ - "\3\27\5\27\u013a\n\27\3\27\3\27\3\27\5\27\u013f\n\27\3\30\3\30\5\30\u0143"+ - "\n\30\3\30\3\30\3\31\3\31\3\31\7\31\u014a\n\31\f\31\16\31\u014d\13\31"+ - "\3\32\3\32\7\32\u0151\n\32\f\32\16\32\u0154\13\32\3\32\3\32\3\32\3\32"+ - "\5\32\u015a\n\32\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u0162\n\33\f\33\16"+ - "\33\u0165\13\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u0170"+ - "\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u017b\n\35\3\35"+ + "\n\b\3\t\3\t\3\t\3\t\3\t\3\n\7\n\u009e\n\n\f\n\16\n\u00a1\13\n\3\n\3\n"+ + "\7\n\u00a5\n\n\f\n\16\n\u00a8\13\n\3\13\3\13\7\13\u00ac\n\13\f\13\16\13"+ + "\u00af\13\13\3\f\3\f\5\f\u00b3\n\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r\3\r"+ + "\3\r\5\r\u00bf\n\r\3\r\7\r\u00c2\n\r\f\r\16\r\u00c5\13\r\3\16\3\16\3\16"+ + "\3\16\3\16\7\16\u00cc\n\16\f\16\16\16\u00cf\13\16\3\16\3\16\3\16\3\16"+ + "\3\16\5\16\u00d6\n\16\3\16\3\16\3\16\5\16\u00db\n\16\3\16\7\16\u00de\n"+ + "\16\f\16\16\16\u00e1\13\16\3\17\3\17\3\17\3\17\5\17\u00e7\n\17\3\17\3"+ + "\17\3\17\3\17\3\17\5\17\u00ee\n\17\3\17\3\17\3\17\7\17\u00f3\n\17\f\17"+ + "\16\17\u00f6\13\17\3\20\3\20\3\20\3\21\3\21\5\21\u00fd\n\21\3\21\3\21"+ + "\6\21\u0101\n\21\r\21\16\21\u0102\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3"+ + "\23\3\24\3\24\5\24\u010f\n\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25"+ + "\3\25\3\25\7\25\u011b\n\25\f\25\16\25\u011e\13\25\3\26\3\26\3\26\5\26"+ + "\u0123\n\26\3\27\3\27\7\27\u0127\n\27\f\27\16\27\u012a\13\27\3\27\3\27"+ + "\3\27\5\27\u012f\n\27\3\27\3\27\3\27\5\27\u0134\n\27\3\30\3\30\5\30\u0138"+ + "\n\30\3\30\3\30\3\31\3\31\3\31\7\31\u013f\n\31\f\31\16\31\u0142\13\31"+ + "\3\32\3\32\7\32\u0146\n\32\f\32\16\32\u0149\13\32\3\32\3\32\3\32\3\32"+ + "\5\32\u014f\n\32\3\33\3\33\3\33\3\33\3\33\3\33\7\33\u0157\n\33\f\33\16"+ + "\33\u015a\13\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34\3\34\5\34\u0165"+ + "\n\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\5\35\u0170\n\35\3\35"+ "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+ - "\3\35\3\35\3\35\3\35\5\35\u0190\n\35\3\35\3\35\3\35\3\35\3\35\7\35\u0197"+ - "\n\35\f\35\16\35\u019a\13\35\3\35\3\35\3\35\5\35\u019f\n\35\3\36\6\36"+ - "\u01a2\n\36\r\36\16\36\u01a3\3\37\3\37\3\37\3\37\3\37\5\37\u01ab\n\37"+ - "\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01b8\n\37"+ - "\3\37\7\37\u01bb\n\37\f\37\16\37\u01be\13\37\3\37\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\7\37\u01c7\n\37\f\37\16\37\u01ca\13\37\3\37\3\37\3\37\3\37"+ - "\3\37\3\37\3\37\3\37\3\37\7\37\u01d5\n\37\f\37\16\37\u01d8\13\37\3\37"+ + "\3\35\3\35\3\35\3\35\5\35\u0185\n\35\3\35\3\35\3\35\3\35\3\35\7\35\u018c"+ + "\n\35\f\35\16\35\u018f\13\35\3\35\3\35\3\35\5\35\u0194\n\35\3\36\6\36"+ + "\u0197\n\36\r\36\16\36\u0198\3\37\3\37\3\37\3\37\3\37\5\37\u01a0\n\37"+ + "\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01ad\n\37"+ + "\3\37\7\37\u01b0\n\37\f\37\16\37\u01b3\13\37\3\37\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\7\37\u01bc\n\37\f\37\16\37\u01bf\13\37\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\3\37\3\37\3\37\7\37\u01ca\n\37\f\37\16\37\u01cd\13\37\3\37"+ "\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37"+ - "\3\37\5\37\u01ea\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01f3\n"+ - "\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01fb\n\37\3 \6 \u01fe\n \r \16"+ - " \u01ff\3 \3 \3 \5 \u0205\n \5 \u0207\n \3!\3!\3!\3!\5!\u020d\n!\3\"\3"+ - "\"\3\"\5\"\u0212\n\"\3\"\3\"\5\"\u0216\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ - "\5\"\u021f\n\"\3#\5#\u0222\n#\3#\5#\u0225\n#\3$\3$\3%\3%\3%\3%\3%\3%\7"+ - "%\u022f\n%\f%\16%\u0232\13%\3&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u023d\n&\3&"+ - "\3&\3&\3&\3&\3&\5&\u0245\n&\3&\3&\3&\3&\5&\u024b\n&\3&\3&\5&\u024f\n&"+ - "\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\7&\u0262\n&\f&\16"+ - "&\u0265\13&\3&\5&\u0268\n&\3&\3&\3&\3&\3&\6&\u026f\n&\r&\16&\u0270\3&"+ - "\3&\5&\u0275\n&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&"+ + "\3\37\5\37\u01df\n\37\3\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01e8\n"+ + "\37\3\37\3\37\3\37\3\37\3\37\3\37\5\37\u01f0\n\37\3 \6 \u01f3\n \r \16"+ + " \u01f4\3 \3 \3 \5 \u01fa\n \5 \u01fc\n \3!\3!\3!\3!\5!\u0202\n!\3\"\3"+ + "\"\3\"\5\"\u0207\n\"\3\"\3\"\5\"\u020b\n\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+ + "\5\"\u0214\n\"\3#\5#\u0217\n#\3#\5#\u021a\n#\3$\3$\3%\3%\3%\3%\3%\3%\7"+ + "%\u0224\n%\f%\16%\u0227\13%\3&\3&\3&\3&\3&\3&\3&\3&\3&\5&\u0232\n&\3&"+ + "\3&\3&\3&\3&\3&\5&\u023a\n&\3&\3&\3&\3&\5&\u0240\n&\3&\3&\5&\u0244\n&"+ + "\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\7&\u0257\n&\f&\16"+ + "&\u025a\13&\3&\5&\u025d\n&\3&\3&\3&\3&\3&\6&\u0264\n&\r&\16&\u0265\3&"+ + "\3&\5&\u026a\n&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&"+ "\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&\3&"+ - "\3&\3&\3&\3&\3&\3&\3&\5&\u02a7\n&\3&\3&\3&\3&\3&\3&\3&\3&\7&\u02b1\n&"+ - "\f&\16&\u02b4\13&\3\'\3\'\3\'\7\'\u02b9\n\'\f\'\16\'\u02bc\13\'\3(\3("+ - "\5(\u02c0\n(\3(\3(\3)\3)\3)\3)\7)\u02c8\n)\f)\16)\u02cb\13)\3)\3)\3*\3"+ - "*\3*\3*\3*\3*\3*\3*\3*\3*\5*\u02d9\n*\3+\7+\u02dc\n+\f+\16+\u02df\13+"+ - "\3,\3,\3,\5,\u02e4\n,\3-\3-\3-\7-\u02e9\n-\f-\16-\u02ec\13-\3-\3-\3-\7"+ - "-\u02f1\n-\f-\16-\u02f4\13-\5-\u02f6\n-\3.\3.\5.\u02fa\n.\3.\7.\u02fd"+ - "\n.\f.\16.\u0300\13.\3/\3/\3/\3/\7/\u0306\n/\f/\16/\u0309\13/\3/\7/\u030c"+ - "\n/\f/\16/\u030f\13/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+ + "\3&\3&\3&\3&\3&\3&\3&\5&\u029c\n&\3&\3&\3&\3&\3&\3&\3&\3&\7&\u02a6\n&"+ + "\f&\16&\u02a9\13&\3\'\3\'\3\'\7\'\u02ae\n\'\f\'\16\'\u02b1\13\'\3(\3("+ + "\5(\u02b5\n(\3(\3(\3)\3)\3)\3)\7)\u02bd\n)\f)\16)\u02c0\13)\3)\3)\3*\3"+ + "*\3*\3*\3*\3*\3*\3*\3*\3*\5*\u02ce\n*\3+\7+\u02d1\n+\f+\16+\u02d4\13+"+ + "\3,\3,\3,\5,\u02d9\n,\3-\3-\3-\7-\u02de\n-\f-\16-\u02e1\13-\3-\3-\3-\7"+ + "-\u02e6\n-\f-\16-\u02e9\13-\5-\u02eb\n-\3.\3.\5.\u02ef\n.\3.\7.\u02f2"+ + "\n.\f.\16.\u02f5\13.\3/\3/\3/\3/\7/\u02fb\n/\f/\16/\u02fe\13/\3/\7/\u0301"+ + "\n/\f/\16/\u0304\13/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+ "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+ "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60"+ - "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\5\60\u033e\n\60\3\61\3\61\3\61\3\61"+ - "\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\5\61\u034e\n\61\3\61"+ - "\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\7\61\u035c\n\61"+ - "\f\61\16\61\u035f\13\61\3\61\2\n\f\30\32\34(HJ`\62\2\4\6\b\n\f\16\20\22"+ + "\3\60\3\60\3\60\3\60\3\60\3\60\3\60\5\60\u0333\n\60\3\61\3\61\3\61\3\61"+ + "\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\5\61\u0343\n\61\3\61"+ + "\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\3\61\7\61\u0351\n\61"+ + "\f\61\16\61\u0354\13\61\3\61\2\n\f\30\32\34(HJ`\62\2\4\6\b\n\f\16\20\22"+ "\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`\2\r\3\2"+ "\27\30\5\2\22\23\31\32RR\4\2!!$$\3\2\35\36\3\2\24\26\3\2\22\23\3\2\37"+ - "$\3\2\177\u0082\3\2}~\3\2\u0083\u0084\3\2\177\u0080\2\u03dd\2b\3\2\2\2"+ + "$\3\2\177\u0082\3\2}~\3\2\u0083\u0084\3\2\177\u0080\2\u03d0\2b\3\2\2\2"+ "\4e\3\2\2\2\6k\3\2\2\2\b|\3\2\2\2\n~\3\2\2\2\f\u0081\3\2\2\2\16\u0095"+ - "\3\2\2\2\20\u0097\3\2\2\2\22\u00ab\3\2\2\2\24\u00b5\3\2\2\2\26\u00bc\3"+ - "\2\2\2\30\u00c2\3\2\2\2\32\u00e0\3\2\2\2\34\u00f8\3\2\2\2\36\u0102\3\2"+ - "\2\2 \u0105\3\2\2\2\"\u0111\3\2\2\2$\u0114\3\2\2\2&\u0117\3\2\2\2(\u011f"+ - "\3\2\2\2*\u012a\3\2\2\2,\u012f\3\2\2\2.\u0140\3\2\2\2\60\u0146\3\2\2\2"+ - "\62\u0159\3\2\2\2\64\u015b\3\2\2\2\66\u016f\3\2\2\28\u019e\3\2\2\2:\u01a1"+ - "\3\2\2\2<\u01fa\3\2\2\2>\u01fd\3\2\2\2@\u0208\3\2\2\2B\u021e\3\2\2\2D"+ - "\u0224\3\2\2\2F\u0226\3\2\2\2H\u0228\3\2\2\2J\u0274\3\2\2\2L\u02b5\3\2"+ - "\2\2N\u02bd\3\2\2\2P\u02c3\3\2\2\2R\u02d8\3\2\2\2T\u02dd\3\2\2\2V\u02e3"+ - "\3\2\2\2X\u02f5\3\2\2\2Z\u02f7\3\2\2\2\\\u0301\3\2\2\2^\u033d\3\2\2\2"+ - "`\u034d\3\2\2\2bc\5\6\4\2cd\7\2\2\3d\3\3\2\2\2ef\5T+\2fg\7\2\2\3g\5\3"+ + "\3\2\2\2\20\u0097\3\2\2\2\22\u009f\3\2\2\2\24\u00a9\3\2\2\2\26\u00b0\3"+ + "\2\2\2\30\u00b6\3\2\2\2\32\u00d5\3\2\2\2\34\u00ed\3\2\2\2\36\u00f7\3\2"+ + "\2\2 \u00fa\3\2\2\2\"\u0106\3\2\2\2$\u0109\3\2\2\2&\u010c\3\2\2\2(\u0114"+ + "\3\2\2\2*\u011f\3\2\2\2,\u0124\3\2\2\2.\u0135\3\2\2\2\60\u013b\3\2\2\2"+ + "\62\u014e\3\2\2\2\64\u0150\3\2\2\2\66\u0164\3\2\2\28\u0193\3\2\2\2:\u0196"+ + "\3\2\2\2<\u01ef\3\2\2\2>\u01f2\3\2\2\2@\u01fd\3\2\2\2B\u0213\3\2\2\2D"+ + "\u0219\3\2\2\2F\u021b\3\2\2\2H\u021d\3\2\2\2J\u0269\3\2\2\2L\u02aa\3\2"+ + "\2\2N\u02b2\3\2\2\2P\u02b8\3\2\2\2R\u02cd\3\2\2\2T\u02d2\3\2\2\2V\u02d8"+ + "\3\2\2\2X\u02ea\3\2\2\2Z\u02ec\3\2\2\2\\\u02f6\3\2\2\2^\u0332\3\2\2\2"+ + "`\u0342\3\2\2\2bc\5\6\4\2cd\7\2\2\3d\3\3\2\2\2ef\5T+\2fg\7\2\2\3g\5\3"+ "\2\2\2hj\5\b\5\2ih\3\2\2\2jm\3\2\2\2ki\3\2\2\2kl\3\2\2\2l\7\3\2\2\2mk"+ "\3\2\2\2no\5\n\6\2op\7\n\2\2p}\3\2\2\2q}\5,\27\2rs\5 \21\2st\7\n\2\2t"+ "}\3\2\2\2uv\5&\24\2vw\7\n\2\2w}\3\2\2\2x}\5\64\33\2yz\5\20\t\2z{\7\n\2"+ @@ -7488,258 +7453,253 @@ public class KickCParser extends Parser { "J&\2\u008f\u008d\3\2\2\2\u008f\u0090\3\2\2\2\u0090\u0096\3\2\2\2\u0091"+ "\u0092\5\32\16\2\u0092\u0093\7\'\2\2\u0093\u0094\5N(\2\u0094\u0096\3\2"+ "\2\2\u0095\u008c\3\2\2\2\u0095\u0091\3\2\2\2\u0096\17\3\2\2\2\u0097\u0098"+ - "\7)\2\2\u0098\u009c\5\22\n\2\u0099\u009b\5\24\13\2\u009a\u0099\3\2\2\2"+ - "\u009b\u009e\3\2\2\2\u009c\u009a\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f"+ - "\3\2\2\2\u009e\u009c\3\2\2\2\u009f\u00a3\7m\2\2\u00a0\u00a2\5\26\f\2\u00a1"+ - "\u00a0\3\2\2\2\u00a2\u00a5\3\2\2\2\u00a3\u00a1\3\2\2\2\u00a3\u00a4\3\2"+ - "\2\2\u00a4\u00a6\3\2\2\2\u00a5\u00a3\3\2\2\2\u00a6\u00a7\b\t\1\2\u00a7"+ - "\21\3\2\2\2\u00a8\u00aa\58\35\2\u00a9\u00a8\3\2\2\2\u00aa\u00ad\3\2\2"+ - "\2\u00ab\u00a9\3\2\2\2\u00ab\u00ac\3\2\2\2\u00ac\u00ae\3\2\2\2\u00ad\u00ab"+ - "\3\2\2\2\u00ae\u00b2\5\34\17\2\u00af\u00b1\58\35\2\u00b0\u00af\3\2\2\2"+ - "\u00b1\u00b4\3\2\2\2\u00b2\u00b0\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\23"+ - "\3\2\2\2\u00b4\u00b2\3\2\2\2\u00b5\u00b9\7\24\2\2\u00b6\u00b8\58\35\2"+ - "\u00b7\u00b6\3\2\2\2\u00b8\u00bb\3\2\2\2\u00b9\u00b7\3\2\2\2\u00b9\u00ba"+ - "\3\2\2\2\u00ba\25\3\2\2\2\u00bb\u00b9\3\2\2\2\u00bc\u00be\7\6\2\2\u00bd"+ - "\u00bf\5J&\2\u00be\u00bd\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2"+ - "\2\u00c0\u00c1\7\7\2\2\u00c1\27\3\2\2\2\u00c2\u00c3\b\r\1\2\u00c3\u00c4"+ - "\5\34\17\2\u00c4\u00cf\3\2\2\2\u00c5\u00c6\f\4\2\2\u00c6\u00ce\7\24\2"+ - "\2\u00c7\u00c8\f\3\2\2\u00c8\u00ca\7\6\2\2\u00c9\u00cb\5J&\2\u00ca\u00c9"+ - "\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cc\3\2\2\2\u00cc\u00ce\7\7\2\2\u00cd"+ - "\u00c5\3\2\2\2\u00cd\u00c7\3\2\2\2\u00ce\u00d1\3\2\2\2\u00cf\u00cd\3\2"+ - "\2\2\u00cf\u00d0\3\2\2\2\u00d0\31\3\2\2\2\u00d1\u00cf\3\2\2\2\u00d2\u00d3"+ - "\b\16\1\2\u00d3\u00e1\7m\2\2\u00d4\u00d8\7\24\2\2\u00d5\u00d7\58\35\2"+ - "\u00d6\u00d5\3\2\2\2\u00d7\u00da\3\2\2\2\u00d8\u00d6\3\2\2\2\u00d8\u00d9"+ - "\3\2\2\2\u00d9\u00db\3\2\2\2\u00da\u00d8\3\2\2\2\u00db\u00e1\5\32\16\4"+ - "\u00dc\u00dd\7\b\2\2\u00dd\u00de\5\32\16\2\u00de\u00df\7\t\2\2\u00df\u00e1"+ - "\3\2\2\2\u00e0\u00d2\3\2\2\2\u00e0\u00d4\3\2\2\2\u00e0\u00dc\3\2\2\2\u00e1"+ - "\u00ea\3\2\2\2\u00e2\u00e3\f\5\2\2\u00e3\u00e5\7\6\2\2\u00e4\u00e6\5J"+ - "&\2\u00e5\u00e4\3\2\2\2\u00e5\u00e6\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7"+ - "\u00e9\7\7\2\2\u00e8\u00e2\3\2\2\2\u00e9\u00ec\3\2\2\2\u00ea\u00e8\3\2"+ - "\2\2\u00ea\u00eb\3\2\2\2\u00eb\33\3\2\2\2\u00ec\u00ea\3\2\2\2\u00ed\u00ee"+ - "\b\17\1\2\u00ee\u00f9\7T\2\2\u00ef\u00f1\7S\2\2\u00f0\u00f2\7T\2\2\u00f1"+ - "\u00f0\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f9\3\2\2\2\u00f3\u00f9\5 "+ - "\21\2\u00f4\u00f9\5\36\20\2\u00f5\u00f9\5&\24\2\u00f6\u00f9\5$\23\2\u00f7"+ - "\u00f9\7\3\2\2\u00f8\u00ed\3\2\2\2\u00f8\u00ef\3\2\2\2\u00f8\u00f3\3\2"+ - "\2\2\u00f8\u00f4\3\2\2\2\u00f8\u00f5\3\2\2\2\u00f8\u00f6\3\2\2\2\u00f8"+ - "\u00f7\3\2\2\2\u00f9\u00ff\3\2\2\2\u00fa\u00fb\f\b\2\2\u00fb\u00fc\7\b"+ - "\2\2\u00fc\u00fe\7\t\2\2\u00fd\u00fa\3\2\2\2\u00fe\u0101\3\2\2\2\u00ff"+ - "\u00fd\3\2\2\2\u00ff\u0100\3\2\2\2\u0100\35\3\2\2\2\u0101\u00ff\3\2\2"+ - "\2\u0102\u0103\7G\2\2\u0103\u0104\7m\2\2\u0104\37\3\2\2\2\u0105\u0107"+ - "\7G\2\2\u0106\u0108\7m\2\2\u0107\u0106\3\2\2\2\u0107\u0108\3\2\2\2\u0108"+ - "\u0109\3\2\2\2\u0109\u010b\7\4\2\2\u010a\u010c\5\"\22\2\u010b\u010a\3"+ - "\2\2\2\u010c\u010d\3\2\2\2\u010d\u010b\3\2\2\2\u010d\u010e\3\2\2\2\u010e"+ - "\u010f\3\2\2\2\u010f\u0110\7\5\2\2\u0110!\3\2\2\2\u0111\u0112\5\n\6\2"+ - "\u0112\u0113\7\n\2\2\u0113#\3\2\2\2\u0114\u0115\7H\2\2\u0115\u0116\7m"+ - "\2\2\u0116%\3\2\2\2\u0117\u0119\7H\2\2\u0118\u011a\7m\2\2\u0119\u0118"+ - "\3\2\2\2\u0119\u011a\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011c\7\4\2\2\u011c"+ - "\u011d\5(\25\2\u011d\u011e\7\5\2\2\u011e\'\3\2\2\2\u011f\u0120\b\25\1"+ - "\2\u0120\u0121\5*\26\2\u0121\u0127\3\2\2\2\u0122\u0123\f\3\2\2\u0123\u0124"+ - "\7\f\2\2\u0124\u0126\5*\26\2\u0125\u0122\3\2\2\2\u0126\u0129\3\2\2\2\u0127"+ - "\u0125\3\2\2\2\u0127\u0128\3\2\2\2\u0128)\3\2\2\2\u0129\u0127\3\2\2\2"+ - "\u012a\u012d\7m\2\2\u012b\u012c\7\'\2\2\u012c\u012e\5J&\2\u012d\u012b"+ - "\3\2\2\2\u012d\u012e\3\2\2\2\u012e+\3\2\2\2\u012f\u0133\5\22\n\2\u0130"+ - "\u0132\5\24\13\2\u0131\u0130\3\2\2\2\u0132\u0135\3\2\2\2\u0133\u0131\3"+ - "\2\2\2\u0133\u0134\3\2\2\2\u0134\u0136\3\2\2\2\u0135\u0133\3\2\2\2\u0136"+ - "\u0137\7m\2\2\u0137\u0139\7\b\2\2\u0138\u013a\5\60\31\2\u0139\u0138\3"+ - "\2\2\2\u0139\u013a\3\2\2\2\u013a\u013b\3\2\2\2\u013b\u013e\7\t\2\2\u013c"+ - "\u013f\5.\30\2\u013d\u013f\7\n\2\2\u013e\u013c\3\2\2\2\u013e\u013d\3\2"+ - "\2\2\u013f-\3\2\2\2\u0140\u0142\7\4\2\2\u0141\u0143\5:\36\2\u0142\u0141"+ - "\3\2\2\2\u0142\u0143\3\2\2\2\u0143\u0144\3\2\2\2\u0144\u0145\7\5\2\2\u0145"+ - "/\3\2\2\2\u0146\u014b\5\62\32\2\u0147\u0148\7\f\2\2\u0148\u014a\5\62\32"+ - "\2\u0149\u0147\3\2\2\2\u014a\u014d\3\2\2\2\u014b\u0149\3\2\2\2\u014b\u014c"+ - "\3\2\2\2\u014c\61\3\2\2\2\u014d\u014b\3\2\2\2\u014e\u0152\5\22\n\2\u014f"+ - "\u0151\5\24\13\2\u0150\u014f\3\2\2\2\u0151\u0154\3\2\2\2\u0152\u0150\3"+ - "\2\2\2\u0152\u0153\3\2\2\2\u0153\u0155\3\2\2\2\u0154\u0152\3\2\2\2\u0155"+ - "\u0156\7m\2\2\u0156\u015a\3\2\2\2\u0157\u015a\7T\2\2\u0158\u015a\7\16"+ - "\2\2\u0159\u014e\3\2\2\2\u0159\u0157\3\2\2\2\u0159\u0158\3\2\2\2\u015a"+ - "\63\3\2\2\2\u015b\u015c\7Y\2\2\u015c\u015d\7m\2\2\u015d\u015e\7\b\2\2"+ - "\u015e\u0163\5\66\34\2\u015f\u0160\7\f\2\2\u0160\u0162\5\66\34\2\u0161"+ - "\u015f\3\2\2\2\u0162\u0165\3\2\2\2\u0163\u0161\3\2\2\2\u0163\u0164\3\2"+ - "\2\2\u0164\u0166\3\2\2\2\u0165\u0163\3\2\2\2\u0166\u0167\7\t\2\2\u0167"+ - "\65\3\2\2\2\u0168\u0170\7d\2\2\u0169\u016a\7d\2\2\u016a\u016b\7\r\2\2"+ - "\u016b\u0170\7d\2\2\u016c\u0170\7m\2\2\u016d\u0170\7n\2\2\u016e\u0170"+ - "\7:\2\2\u016f\u0168\3\2\2\2\u016f\u0169\3\2\2\2\u016f\u016c\3\2\2\2\u016f"+ - "\u016d\3\2\2\2\u016f\u016e\3\2\2\2\u0170\67\3\2\2\2\u0171\u019f\7*\2\2"+ - "\u0172\u0173\7-\2\2\u0173\u0174\7\b\2\2\u0174\u0175\7d\2\2\u0175\u019f"+ - "\7\t\2\2\u0176\u017a\7\62\2\2\u0177\u0178\7\b\2\2\u0178\u0179\7m\2\2\u0179"+ - "\u017b\7\t\2\2\u017a\u0177\3\2\2\2\u017a\u017b\3\2\2\2\u017b\u019f\3\2"+ - "\2\2\u017c\u019f\7\65\2\2\u017d\u019f\7\66\2\2\u017e\u017f\7\64\2\2\u017f"+ - "\u0180\7\b\2\2\u0180\u0181\5J&\2\u0181\u0182\7\t\2\2\u0182\u019f\3\2\2"+ - "\2\u0183\u019f\7/\2\2\u0184\u019f\7\60\2\2\u0185\u019f\7\67\2\2\u0186"+ - "\u019f\78\2\2\u0187\u019f\7+\2\2\u0188\u019f\7,\2\2\u0189\u019f\7.\2\2"+ - "\u018a\u019f\79\2\2\u018b\u018f\7\61\2\2\u018c\u018d\7\b\2\2\u018d\u018e"+ - "\7m\2\2\u018e\u0190\7\t\2\2\u018f\u018c\3\2\2\2\u018f\u0190\3\2\2\2\u0190"+ - "\u019f\3\2\2\2\u0191\u0192\7\63\2\2\u0192\u0193\7\b\2\2\u0193\u0198\5"+ - "\66\34\2\u0194\u0195\7\f\2\2\u0195\u0197\5\66\34\2\u0196\u0194\3\2\2\2"+ - "\u0197\u019a\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019b"+ - "\3\2\2\2\u019a\u0198\3\2\2\2\u019b\u019c\7\t\2\2\u019c\u019f\3\2\2\2\u019d"+ - "\u019f\7:\2\2\u019e\u0171\3\2\2\2\u019e\u0172\3\2\2\2\u019e\u0176\3\2"+ - "\2\2\u019e\u017c\3\2\2\2\u019e\u017d\3\2\2\2\u019e\u017e\3\2\2\2\u019e"+ - "\u0183\3\2\2\2\u019e\u0184\3\2\2\2\u019e\u0185\3\2\2\2\u019e\u0186\3\2"+ - "\2\2\u019e\u0187\3\2\2\2\u019e\u0188\3\2\2\2\u019e\u0189\3\2\2\2\u019e"+ - "\u018a\3\2\2\2\u019e\u018b\3\2\2\2\u019e\u0191\3\2\2\2\u019e\u019d\3\2"+ - "\2\2\u019f9\3\2\2\2\u01a0\u01a2\5<\37\2\u01a1\u01a0\3\2\2\2\u01a2\u01a3"+ - "\3\2\2\2\u01a3\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4;\3\2\2\2\u01a5"+ - "\u01a6\5\n\6\2\u01a6\u01a7\7\n\2\2\u01a7\u01fb\3\2\2\2\u01a8\u01aa\7\4"+ - "\2\2\u01a9\u01ab\5:\36\2\u01aa\u01a9\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab"+ - "\u01ac\3\2\2\2\u01ac\u01fb\7\5\2\2\u01ad\u01ae\5H%\2\u01ae\u01af\7\n\2"+ - "\2\u01af\u01fb\3\2\2\2\u01b0\u01b1\7;\2\2\u01b1\u01b2\7\b\2\2\u01b2\u01b3"+ - "\5H%\2\u01b3\u01b4\7\t\2\2\u01b4\u01b7\5<\37\2\u01b5\u01b6\7<\2\2\u01b6"+ - "\u01b8\5<\37\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01fb\3\2"+ - "\2\2\u01b9\u01bb\58\35\2\u01ba\u01b9\3\2\2\2\u01bb\u01be\3\2\2\2\u01bc"+ - "\u01ba\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01bf\3\2\2\2\u01be\u01bc\3\2"+ - "\2\2\u01bf\u01c0\7=\2\2\u01c0\u01c1\7\b\2\2\u01c1\u01c2\5H%\2\u01c2\u01c3"+ - "\7\t\2\2\u01c3\u01c4\5<\37\2\u01c4\u01fb\3\2\2\2\u01c5\u01c7\58\35\2\u01c6"+ - "\u01c5\3\2\2\2\u01c7\u01ca\3\2\2\2\u01c8\u01c6\3\2\2\2\u01c8\u01c9\3\2"+ - "\2\2\u01c9\u01cb\3\2\2\2\u01ca\u01c8\3\2\2\2\u01cb\u01cc\7>\2\2\u01cc"+ - "\u01cd\5<\37\2\u01cd\u01ce\7=\2\2\u01ce\u01cf\7\b\2\2\u01cf\u01d0\5H%"+ - "\2\u01d0\u01d1\7\t\2\2\u01d1\u01d2\7\n\2\2\u01d2\u01fb\3\2\2\2\u01d3\u01d5"+ - "\58\35\2\u01d4\u01d3\3\2\2\2\u01d5\u01d8\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d6"+ - "\u01d7\3\2\2\2\u01d7\u01d9\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01da\7?"+ - "\2\2\u01da\u01db\7\b\2\2\u01db\u01dc\5B\"\2\u01dc\u01dd\7\t\2\2\u01dd"+ - "\u01de\5<\37\2\u01de\u01fb\3\2\2\2\u01df\u01e0\7@\2\2\u01e0\u01e1\7\b"+ - "\2\2\u01e1\u01e2\5H%\2\u01e2\u01e3\7\t\2\2\u01e3\u01e4\7\4\2\2\u01e4\u01e5"+ - "\5> \2\u01e5\u01e6\7\5\2\2\u01e6\u01fb\3\2\2\2\u01e7\u01e9\7A\2\2\u01e8"+ - "\u01ea\5H%\2\u01e9\u01e8\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea\u01eb\3\2\2"+ - "\2\u01eb\u01fb\7\n\2\2\u01ec\u01ed\7B\2\2\u01ed\u01fb\7\n\2\2\u01ee\u01ef"+ - "\7C\2\2\u01ef\u01fb\7\n\2\2\u01f0\u01f2\7D\2\2\u01f1\u01f3\5P)\2\u01f2"+ - "\u01f1\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f5\7\4"+ - "\2\2\u01f5\u01f6\5T+\2\u01f6\u01f7\7\u0086\2\2\u01f7\u01fb\3\2\2\2\u01f8"+ - "\u01fb\5N(\2\u01f9\u01fb\7\n\2\2\u01fa\u01a5\3\2\2\2\u01fa\u01a8\3\2\2"+ - "\2\u01fa\u01ad\3\2\2\2\u01fa\u01b0\3\2\2\2\u01fa\u01bc\3\2\2\2\u01fa\u01c8"+ - "\3\2\2\2\u01fa\u01d6\3\2\2\2\u01fa\u01df\3\2\2\2\u01fa\u01e7\3\2\2\2\u01fa"+ - "\u01ec\3\2\2\2\u01fa\u01ee\3\2\2\2\u01fa\u01f0\3\2\2\2\u01fa\u01f8\3\2"+ - "\2\2\u01fa\u01f9\3\2\2\2\u01fb=\3\2\2\2\u01fc\u01fe\5@!\2\u01fd\u01fc"+ - "\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff\u01fd\3\2\2\2\u01ff\u0200\3\2\2\2\u0200"+ - "\u0206\3\2\2\2\u0201\u0202\7E\2\2\u0202\u0204\7\13\2\2\u0203\u0205\5:"+ - "\36\2\u0204\u0203\3\2\2\2\u0204\u0205\3\2\2\2\u0205\u0207\3\2\2\2\u0206"+ - "\u0201\3\2\2\2\u0206\u0207\3\2\2\2\u0207?\3\2\2\2\u0208\u0209\7F\2\2\u0209"+ - "\u020a\5J&\2\u020a\u020c\7\13\2\2\u020b\u020d\5:\36\2\u020c\u020b\3\2"+ - "\2\2\u020c\u020d\3\2\2\2\u020dA\3\2\2\2\u020e\u020f\5D#\2\u020f\u0211"+ - "\7\n\2\2\u0210\u0212\5F$\2\u0211\u0210\3\2\2\2\u0211\u0212\3\2\2\2\u0212"+ - "\u0213\3\2\2\2\u0213\u0215\7\n\2\2\u0214\u0216\5H%\2\u0215\u0214\3\2\2"+ - "\2\u0215\u0216\3\2\2\2\u0216\u021f\3\2\2\2\u0217\u0218\5\22\n\2\u0218"+ - "\u0219\5\32\16\2\u0219\u021a\7\13\2\2\u021a\u021b\5J&\2\u021b\u021c\7"+ - "\r\2\2\u021c\u021d\5J&\2\u021d\u021f\3\2\2\2\u021e\u020e\3\2\2\2\u021e"+ - "\u0217\3\2\2\2\u021fC\3\2\2\2\u0220\u0222\5\n\6\2\u0221\u0220\3\2\2\2"+ - "\u0221\u0222\3\2\2\2\u0222\u0225\3\2\2\2\u0223\u0225\5H%\2\u0224\u0221"+ - "\3\2\2\2\u0224\u0223\3\2\2\2\u0225E\3\2\2\2\u0226\u0227\5H%\2\u0227G\3"+ - "\2\2\2\u0228\u0229\b%\1\2\u0229\u022a\5J&\2\u022a\u0230\3\2\2\2\u022b"+ - "\u022c\f\3\2\2\u022c\u022d\7\f\2\2\u022d\u022f\5J&\2\u022e\u022b\3\2\2"+ - "\2\u022f\u0232\3\2\2\2\u0230\u022e\3\2\2\2\u0230\u0231\3\2\2\2\u0231I"+ - "\3\2\2\2\u0232\u0230\3\2\2\2\u0233\u0234\b&\1\2\u0234\u0235\7\b\2\2\u0235"+ - "\u0236\5H%\2\u0236\u0237\7\t\2\2\u0237\u0275\3\2\2\2\u0238\u0239\7I\2"+ - "\2\u0239\u023c\7\b\2\2\u023a\u023d\5J&\2\u023b\u023d\5\30\r\2\u023c\u023a"+ - "\3\2\2\2\u023c\u023b\3\2\2\2\u023d\u023e\3\2\2\2\u023e\u023f\7\t\2\2\u023f"+ - "\u0275\3\2\2\2\u0240\u0241\7J\2\2\u0241\u0244\7\b\2\2\u0242\u0245\5J&"+ - "\2\u0243\u0245\5\30\r\2\u0244\u0242\3\2\2\2\u0244\u0243\3\2\2\2\u0245"+ - "\u0246\3\2\2\2\u0246\u0247\7\t\2\2\u0247\u0275\3\2\2\2\u0248\u024a\7K"+ - "\2\2\u0249\u024b\7\b\2\2\u024a\u0249\3\2\2\2\u024a\u024b\3\2\2\2\u024b"+ - "\u024c\3\2\2\2\u024c\u024e\7m\2\2\u024d\u024f\7\t\2\2\u024e\u024d\3\2"+ - "\2\2\u024e\u024f\3\2\2\2\u024f\u0275\3\2\2\2\u0250\u0251\7\b\2\2\u0251"+ - "\u0252\5\30\r\2\u0252\u0253\7\t\2\2\u0253\u0254\5J&\32\u0254\u0275\3\2"+ - "\2\2\u0255\u0256\t\2\2\2\u0256\u0275\5J&\31\u0257\u0258\7\24\2\2\u0258"+ - "\u0275\5J&\27\u0259\u025a\t\3\2\2\u025a\u0275\5J&\26\u025b\u025c\t\4\2"+ - "\2\u025c\u0275\5J&\22\u025d\u025e\7\4\2\2\u025e\u0263\5J&\2\u025f\u0260"+ - "\7\f\2\2\u0260\u0262\5J&\2\u0261\u025f\3\2\2\2\u0262\u0265\3\2\2\2\u0263"+ - "\u0261\3\2\2\2\u0263\u0264\3\2\2\2\u0264\u0267\3\2\2\2\u0265\u0263\3\2"+ - "\2\2\u0266\u0268\7\f\2\2\u0267\u0266\3\2\2\2\u0267\u0268\3\2\2\2\u0268"+ - "\u0269\3\2\2\2\u0269\u026a\7\5\2\2\u026a\u0275\3\2\2\2\u026b\u0275\7m"+ - "\2\2\u026c\u0275\7d\2\2\u026d\u026f\7n\2\2\u026e\u026d\3\2\2\2\u026f\u0270"+ - "\3\2\2\2\u0270\u026e\3\2\2\2\u0270\u0271\3\2\2\2\u0271\u0275\3\2\2\2\u0272"+ - "\u0275\7o\2\2\u0273\u0275\7U\2\2\u0274\u0233\3\2\2\2\u0274\u0238\3\2\2"+ - "\2\u0274\u0240\3\2\2\2\u0274\u0248\3\2\2\2\u0274\u0250\3\2\2\2\u0274\u0255"+ - "\3\2\2\2\u0274\u0257\3\2\2\2\u0274\u0259\3\2\2\2\u0274\u025b\3\2\2\2\u0274"+ - "\u025d\3\2\2\2\u0274\u026b\3\2\2\2\u0274\u026c\3\2\2\2\u0274\u026e\3\2"+ - "\2\2\u0274\u0272\3\2\2\2\u0274\u0273\3\2\2\2\u0275\u02b2\3\2\2\2\u0276"+ - "\u0277\f\25\2\2\u0277\u0278\t\5\2\2\u0278\u02b1\5J&\26\u0279\u027a\f\24"+ - "\2\2\u027a\u027b\t\6\2\2\u027b\u02b1\5J&\25\u027c\u027d\f\23\2\2\u027d"+ - "\u027e\t\7\2\2\u027e\u02b1\5J&\24\u027f\u0280\f\21\2\2\u0280\u0281\t\b"+ - "\2\2\u0281\u02b1\5J&\22\u0282\u0283\f\20\2\2\u0283\u0284\7\31\2\2\u0284"+ - "\u02b1\5J&\21\u0285\u0286\f\17\2\2\u0286\u0287\7\33\2\2\u0287\u02b1\5"+ - "J&\20\u0288\u0289\f\16\2\2\u0289\u028a\7\34\2\2\u028a\u02b1\5J&\17\u028b"+ - "\u028c\f\r\2\2\u028c\u028d\7%\2\2\u028d\u02b1\5J&\16\u028e\u028f\f\f\2"+ - "\2\u028f\u0290\7&\2\2\u0290\u02b1\5J&\r\u0291\u0292\f\13\2\2\u0292\u0293"+ - "\7\17\2\2\u0293\u0294\5J&\2\u0294\u0295\7\13\2\2\u0295\u0296\5J&\f\u0296"+ - "\u02b1\3\2\2\2\u0297\u0298\f\n\2\2\u0298\u0299\7\'\2\2\u0299\u02b1\5J"+ - "&\n\u029a\u029b\f\t\2\2\u029b\u029c\7(\2\2\u029c\u02b1\5J&\t\u029d\u029e"+ - "\f!\2\2\u029e\u029f\7\20\2\2\u029f\u02b1\7m\2\2\u02a0\u02a1\f \2\2\u02a1"+ - "\u02a2\7\21\2\2\u02a2\u02b1\7m\2\2\u02a3\u02a4\f\37\2\2\u02a4\u02a6\7"+ - "\b\2\2\u02a5\u02a7\5L\'\2\u02a6\u02a5\3\2\2\2\u02a6\u02a7\3\2\2\2\u02a7"+ - "\u02a8\3\2\2\2\u02a8\u02b1\7\t\2\2\u02a9\u02aa\f\33\2\2\u02aa\u02ab\7"+ - "\6\2\2\u02ab\u02ac\5H%\2\u02ac\u02ad\7\7\2\2\u02ad\u02b1\3\2\2\2\u02ae"+ - "\u02af\f\30\2\2\u02af\u02b1\t\2\2\2\u02b0\u0276\3\2\2\2\u02b0\u0279\3"+ - "\2\2\2\u02b0\u027c\3\2\2\2\u02b0\u027f\3\2\2\2\u02b0\u0282\3\2\2\2\u02b0"+ - "\u0285\3\2\2\2\u02b0\u0288\3\2\2\2\u02b0\u028b\3\2\2\2\u02b0\u028e\3\2"+ - "\2\2\u02b0\u0291\3\2\2\2\u02b0\u0297\3\2\2\2\u02b0\u029a\3\2\2\2\u02b0"+ - "\u029d\3\2\2\2\u02b0\u02a0\3\2\2\2\u02b0\u02a3\3\2\2\2\u02b0\u02a9\3\2"+ - "\2\2\u02b0\u02ae\3\2\2\2\u02b1\u02b4\3\2\2\2\u02b2\u02b0\3\2\2\2\u02b2"+ - "\u02b3\3\2\2\2\u02b3K\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b5\u02ba\5J&\2\u02b6"+ - "\u02b7\7\f\2\2\u02b7\u02b9\5J&\2\u02b8\u02b6\3\2\2\2\u02b9\u02bc\3\2\2"+ - "\2\u02ba\u02b8\3\2\2\2\u02ba\u02bb\3\2\2\2\u02bbM\3\2\2\2\u02bc\u02ba"+ - "\3\2\2\2\u02bd\u02bf\7L\2\2\u02be\u02c0\5P)\2\u02bf\u02be\3\2\2\2\u02bf"+ - "\u02c0\3\2\2\2\u02c0\u02c1\3\2\2\2\u02c1\u02c2\7V\2\2\u02c2O\3\2\2\2\u02c3"+ - "\u02c4\7\b\2\2\u02c4\u02c9\5R*\2\u02c5\u02c6\7\f\2\2\u02c6\u02c8\5R*\2"+ - "\u02c7\u02c5\3\2\2\2\u02c8\u02cb\3\2\2\2\u02c9\u02c7\3\2\2\2\u02c9\u02ca"+ - "\3\2\2\2\u02ca\u02cc\3\2\2\2\u02cb\u02c9\3\2\2\2\u02cc\u02cd\7\t\2\2\u02cd"+ - "Q\3\2\2\2\u02ce\u02cf\7M\2\2\u02cf\u02d9\7n\2\2\u02d0\u02d1\7N\2\2\u02d1"+ - "\u02d9\7m\2\2\u02d2\u02d3\7O\2\2\u02d3\u02d9\7n\2\2\u02d4\u02d5\7P\2\2"+ - "\u02d5\u02d9\5J&\2\u02d6\u02d7\7Q\2\2\u02d7\u02d9\5J&\2\u02d8\u02ce\3"+ - "\2\2\2\u02d8\u02d0\3\2\2\2\u02d8\u02d2\3\2\2\2\u02d8\u02d4\3\2\2\2\u02d8"+ - "\u02d6\3\2\2\2\u02d9S\3\2\2\2\u02da\u02dc\5V,\2\u02db\u02da\3\2\2\2\u02dc"+ - "\u02df\3\2\2\2\u02dd\u02db\3\2\2\2\u02dd\u02de\3\2\2\2\u02deU\3\2\2\2"+ - "\u02df\u02dd\3\2\2\2\u02e0\u02e4\5X-\2\u02e1\u02e4\5Z.\2\u02e2\u02e4\5"+ - "\\/\2\u02e3\u02e0\3\2\2\2\u02e3\u02e1\3\2\2\2\u02e3\u02e2\3\2\2\2\u02e4"+ - "W\3\2\2\2\u02e5\u02e6\7\u0093\2\2\u02e6\u02ea\7v\2\2\u02e7\u02e9\7\u0094"+ - "\2\2\u02e8\u02e7\3\2\2\2\u02e9\u02ec\3\2\2\2\u02ea\u02e8\3\2\2\2\u02ea"+ - "\u02eb\3\2\2\2\u02eb\u02f6\3\2\2\2\u02ec\u02ea\3\2\2\2\u02ed\u02ee\7\u0092"+ - "\2\2\u02ee\u02f2\7v\2\2\u02ef\u02f1\7\u0094\2\2\u02f0\u02ef\3\2\2\2\u02f1"+ - "\u02f4\3\2\2\2\u02f2\u02f0\3\2\2\2\u02f2\u02f3\3\2\2\2\u02f3\u02f6\3\2"+ - "\2\2\u02f4\u02f2\3\2\2\2\u02f5\u02e5\3\2\2\2\u02f5\u02ed\3\2\2\2\u02f6"+ - "Y\3\2\2\2\u02f7\u02f9\7t\2\2\u02f8\u02fa\5^\60\2\u02f9\u02f8\3\2\2\2\u02f9"+ - "\u02fa\3\2\2\2\u02fa\u02fe\3\2\2\2\u02fb\u02fd\7\u0094\2\2\u02fc\u02fb"+ - "\3\2\2\2\u02fd\u0300\3\2\2\2\u02fe\u02fc\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff"+ - "[\3\2\2\2\u0300\u02fe\3\2\2\2\u0301\u0302\7s\2\2\u0302\u0307\5`\61\2\u0303"+ - "\u0304\7w\2\2\u0304\u0306\5`\61\2\u0305\u0303\3\2\2\2\u0306\u0309\3\2"+ - "\2\2\u0307\u0305\3\2\2\2\u0307\u0308\3\2\2\2\u0308\u030d\3\2\2\2\u0309"+ - "\u0307\3\2\2\2\u030a\u030c\7\u0094\2\2\u030b\u030a\3\2\2\2\u030c\u030f"+ - "\3\2\2\2\u030d\u030b\3\2\2\2\u030d\u030e\3\2\2\2\u030e]\3\2\2\2\u030f"+ - "\u030d\3\2\2\2\u0310\u033e\5`\61\2\u0311\u0312\7u\2\2\u0312\u033e\5`\61"+ - "\2\u0313\u0314\5`\61\2\u0314\u0315\7w\2\2\u0315\u0316\5`\61\2\u0316\u033e"+ - "\3\2\2\2\u0317\u0318\7x\2\2\u0318\u0319\5`\61\2\u0319\u031a\7y\2\2\u031a"+ - "\u031b\7w\2\2\u031b\u031c\7\u0093\2\2\u031c\u033e\3\2\2\2\u031d\u031e"+ - "\7x\2\2\u031e\u031f\7x\2\2\u031f\u0320\5`\61\2\u0320\u0321\7y\2\2\u0321"+ - "\u0322\7y\2\2\u0322\u0323\7w\2\2\u0323\u0324\7\u0093\2\2\u0324\u033e\3"+ - "\2\2\2\u0325\u0326\7x\2\2\u0326\u0327\5`\61\2\u0327\u0328\7w\2\2\u0328"+ - "\u0329\7\u0093\2\2\u0329\u032a\7y\2\2\u032a\u032b\7w\2\2\u032b\u032c\7"+ - "\u0093\2\2\u032c\u033e\3\2\2\2\u032d\u032e\7x\2\2\u032e\u032f\5`\61\2"+ - "\u032f\u0330\7w\2\2\u0330\u0331\7\u0093\2\2\u0331\u0332\7y\2\2\u0332\u033e"+ - "\3\2\2\2\u0333\u0334\7x\2\2\u0334\u0335\5`\61\2\u0335\u0336\7y\2\2\u0336"+ - "\u033e\3\2\2\2\u0337\u0338\7x\2\2\u0338\u0339\7x\2\2\u0339\u033a\5`\61"+ - "\2\u033a\u033b\7y\2\2\u033b\u033c\7y\2\2\u033c\u033e\3\2\2\2\u033d\u0310"+ - "\3\2\2\2\u033d\u0311\3\2\2\2\u033d\u0313\3\2\2\2\u033d\u0317\3\2\2\2\u033d"+ - "\u031d\3\2\2\2\u033d\u0325\3\2\2\2\u033d\u032d\3\2\2\2\u033d\u0333\3\2"+ - "\2\2\u033d\u0337\3\2\2\2\u033e_\3\2\2\2\u033f\u0340\b\61\1\2\u0340\u0341"+ - "\7z\2\2\u0341\u0342\5`\61\2\u0342\u0343\7{\2\2\u0343\u034e\3\2\2\2\u0344"+ - "\u0345\t\t\2\2\u0345\u034e\5`\61\n\u0346\u034e\7\u0093\2\2\u0347\u034e"+ - "\7\u0091\2\2\u0348\u0349\7\u0085\2\2\u0349\u034a\7\u0093\2\2\u034a\u034e"+ - "\7\u0086\2\2\u034b\u034e\7\u0087\2\2\u034c\u034e\7\u0090\2\2\u034d\u033f"+ - "\3\2\2\2\u034d\u0344\3\2\2\2\u034d\u0346\3\2\2\2\u034d\u0347\3\2\2\2\u034d"+ - "\u0348\3\2\2\2\u034d\u034b\3\2\2\2\u034d\u034c\3\2\2\2\u034e\u035d\3\2"+ - "\2\2\u034f\u0350\f\f\2\2\u0350\u0351\7|\2\2\u0351\u035c\5`\61\r\u0352"+ - "\u0353\f\13\2\2\u0353\u0354\t\n\2\2\u0354\u035c\5`\61\f\u0355\u0356\f"+ - "\t\2\2\u0356\u0357\t\13\2\2\u0357\u035c\5`\61\n\u0358\u0359\f\b\2\2\u0359"+ - "\u035a\t\f\2\2\u035a\u035c\5`\61\t\u035b\u034f\3\2\2\2\u035b\u0352\3\2"+ - "\2\2\u035b\u0355\3\2\2\2\u035b\u0358\3\2\2\2\u035c\u035f\3\2\2\2\u035d"+ - "\u035b\3\2\2\2\u035d\u035e\3\2\2\2\u035ea\3\2\2\2\u035f\u035d\3\2\2\2"+ - "Xk|\u0089\u008f\u0095\u009c\u00a3\u00ab\u00b2\u00b9\u00be\u00ca\u00cd"+ - "\u00cf\u00d8\u00e0\u00e5\u00ea\u00f1\u00f8\u00ff\u0107\u010d\u0119\u0127"+ - "\u012d\u0133\u0139\u013e\u0142\u014b\u0152\u0159\u0163\u016f\u017a\u018f"+ - "\u0198\u019e\u01a3\u01aa\u01b7\u01bc\u01c8\u01d6\u01e9\u01f2\u01fa\u01ff"+ - "\u0204\u0206\u020c\u0211\u0215\u021e\u0221\u0224\u0230\u023c\u0244\u024a"+ - "\u024e\u0263\u0267\u0270\u0274\u02a6\u02b0\u02b2\u02ba\u02bf\u02c9\u02d8"+ - "\u02dd\u02e3\u02ea\u02f2\u02f5\u02f9\u02fe\u0307\u030d\u033d\u034d\u035b"+ - "\u035d"; + "\7)\2\2\u0098\u0099\5\22\n\2\u0099\u009a\b\t\1\2\u009a\u009b\5\32\16\2"+ + "\u009b\21\3\2\2\2\u009c\u009e\58\35\2\u009d\u009c\3\2\2\2\u009e\u00a1"+ + "\3\2\2\2\u009f\u009d\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a2\3\2\2\2\u00a1"+ + "\u009f\3\2\2\2\u00a2\u00a6\5\34\17\2\u00a3\u00a5\58\35\2\u00a4\u00a3\3"+ + "\2\2\2\u00a5\u00a8\3\2\2\2\u00a6\u00a4\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7"+ + "\23\3\2\2\2\u00a8\u00a6\3\2\2\2\u00a9\u00ad\7\24\2\2\u00aa\u00ac\58\35"+ + "\2\u00ab\u00aa\3\2\2\2\u00ac\u00af\3\2\2\2\u00ad\u00ab\3\2\2\2\u00ad\u00ae"+ + "\3\2\2\2\u00ae\25\3\2\2\2\u00af\u00ad\3\2\2\2\u00b0\u00b2\7\6\2\2\u00b1"+ + "\u00b3\5J&\2\u00b2\u00b1\3\2\2\2\u00b2\u00b3\3\2\2\2\u00b3\u00b4\3\2\2"+ + "\2\u00b4\u00b5\7\7\2\2\u00b5\27\3\2\2\2\u00b6\u00b7\b\r\1\2\u00b7\u00b8"+ + "\5\34\17\2\u00b8\u00c3\3\2\2\2\u00b9\u00ba\f\4\2\2\u00ba\u00c2\7\24\2"+ + "\2\u00bb\u00bc\f\3\2\2\u00bc\u00be\7\6\2\2\u00bd\u00bf\5J&\2\u00be\u00bd"+ + "\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0\3\2\2\2\u00c0\u00c2\7\7\2\2\u00c1"+ + "\u00b9\3\2\2\2\u00c1\u00bb\3\2\2\2\u00c2\u00c5\3\2\2\2\u00c3\u00c1\3\2"+ + "\2\2\u00c3\u00c4\3\2\2\2\u00c4\31\3\2\2\2\u00c5\u00c3\3\2\2\2\u00c6\u00c7"+ + "\b\16\1\2\u00c7\u00c8\7m\2\2\u00c8\u00d6\b\16\1\2\u00c9\u00cd\7\24\2\2"+ + "\u00ca\u00cc\58\35\2\u00cb\u00ca\3\2\2\2\u00cc\u00cf\3\2\2\2\u00cd\u00cb"+ + "\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\3\2\2\2\u00cf\u00cd\3\2\2\2\u00d0"+ + "\u00d6\5\32\16\4\u00d1\u00d2\7\b\2\2\u00d2\u00d3\5\32\16\2\u00d3\u00d4"+ + "\7\t\2\2\u00d4\u00d6\3\2\2\2\u00d5\u00c6\3\2\2\2\u00d5\u00c9\3\2\2\2\u00d5"+ + "\u00d1\3\2\2\2\u00d6\u00df\3\2\2\2\u00d7\u00d8\f\5\2\2\u00d8\u00da\7\6"+ + "\2\2\u00d9\u00db\5J&\2\u00da\u00d9\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00dc"+ + "\3\2\2\2\u00dc\u00de\7\7\2\2\u00dd\u00d7\3\2\2\2\u00de\u00e1\3\2\2\2\u00df"+ + "\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0\33\3\2\2\2\u00e1\u00df\3\2\2"+ + "\2\u00e2\u00e3\b\17\1\2\u00e3\u00ee\7T\2\2\u00e4\u00e6\7S\2\2\u00e5\u00e7"+ + "\7T\2\2\u00e6\u00e5\3\2\2\2\u00e6\u00e7\3\2\2\2\u00e7\u00ee\3\2\2\2\u00e8"+ + "\u00ee\5 \21\2\u00e9\u00ee\5\36\20\2\u00ea\u00ee\5&\24\2\u00eb\u00ee\5"+ + "$\23\2\u00ec\u00ee\7\3\2\2\u00ed\u00e2\3\2\2\2\u00ed\u00e4\3\2\2\2\u00ed"+ + "\u00e8\3\2\2\2\u00ed\u00e9\3\2\2\2\u00ed\u00ea\3\2\2\2\u00ed\u00eb\3\2"+ + "\2\2\u00ed\u00ec\3\2\2\2\u00ee\u00f4\3\2\2\2\u00ef\u00f0\f\b\2\2\u00f0"+ + "\u00f1\7\b\2\2\u00f1\u00f3\7\t\2\2\u00f2\u00ef\3\2\2\2\u00f3\u00f6\3\2"+ + "\2\2\u00f4\u00f2\3\2\2\2\u00f4\u00f5\3\2\2\2\u00f5\35\3\2\2\2\u00f6\u00f4"+ + "\3\2\2\2\u00f7\u00f8\7G\2\2\u00f8\u00f9\7m\2\2\u00f9\37\3\2\2\2\u00fa"+ + "\u00fc\7G\2\2\u00fb\u00fd\7m\2\2\u00fc\u00fb\3\2\2\2\u00fc\u00fd\3\2\2"+ + "\2\u00fd\u00fe\3\2\2\2\u00fe\u0100\7\4\2\2\u00ff\u0101\5\"\22\2\u0100"+ + "\u00ff\3\2\2\2\u0101\u0102\3\2\2\2\u0102\u0100\3\2\2\2\u0102\u0103\3\2"+ + "\2\2\u0103\u0104\3\2\2\2\u0104\u0105\7\5\2\2\u0105!\3\2\2\2\u0106\u0107"+ + "\5\n\6\2\u0107\u0108\7\n\2\2\u0108#\3\2\2\2\u0109\u010a\7H\2\2\u010a\u010b"+ + "\7m\2\2\u010b%\3\2\2\2\u010c\u010e\7H\2\2\u010d\u010f\7m\2\2\u010e\u010d"+ + "\3\2\2\2\u010e\u010f\3\2\2\2\u010f\u0110\3\2\2\2\u0110\u0111\7\4\2\2\u0111"+ + "\u0112\5(\25\2\u0112\u0113\7\5\2\2\u0113\'\3\2\2\2\u0114\u0115\b\25\1"+ + "\2\u0115\u0116\5*\26\2\u0116\u011c\3\2\2\2\u0117\u0118\f\3\2\2\u0118\u0119"+ + "\7\f\2\2\u0119\u011b\5*\26\2\u011a\u0117\3\2\2\2\u011b\u011e\3\2\2\2\u011c"+ + "\u011a\3\2\2\2\u011c\u011d\3\2\2\2\u011d)\3\2\2\2\u011e\u011c\3\2\2\2"+ + "\u011f\u0122\7m\2\2\u0120\u0121\7\'\2\2\u0121\u0123\5J&\2\u0122\u0120"+ + "\3\2\2\2\u0122\u0123\3\2\2\2\u0123+\3\2\2\2\u0124\u0128\5\22\n\2\u0125"+ + "\u0127\5\24\13\2\u0126\u0125\3\2\2\2\u0127\u012a\3\2\2\2\u0128\u0126\3"+ + "\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b\3\2\2\2\u012a\u0128\3\2\2\2\u012b"+ + "\u012c\7m\2\2\u012c\u012e\7\b\2\2\u012d\u012f\5\60\31\2\u012e\u012d\3"+ + "\2\2\2\u012e\u012f\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0133\7\t\2\2\u0131"+ + "\u0134\5.\30\2\u0132\u0134\7\n\2\2\u0133\u0131\3\2\2\2\u0133\u0132\3\2"+ + "\2\2\u0134-\3\2\2\2\u0135\u0137\7\4\2\2\u0136\u0138\5:\36\2\u0137\u0136"+ + "\3\2\2\2\u0137\u0138\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u013a\7\5\2\2\u013a"+ + "/\3\2\2\2\u013b\u0140\5\62\32\2\u013c\u013d\7\f\2\2\u013d\u013f\5\62\32"+ + "\2\u013e\u013c\3\2\2\2\u013f\u0142\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141"+ + "\3\2\2\2\u0141\61\3\2\2\2\u0142\u0140\3\2\2\2\u0143\u0147\5\22\n\2\u0144"+ + "\u0146\5\24\13\2\u0145\u0144\3\2\2\2\u0146\u0149\3\2\2\2\u0147\u0145\3"+ + "\2\2\2\u0147\u0148\3\2\2\2\u0148\u014a\3\2\2\2\u0149\u0147\3\2\2\2\u014a"+ + "\u014b\7m\2\2\u014b\u014f\3\2\2\2\u014c\u014f\7T\2\2\u014d\u014f\7\16"+ + "\2\2\u014e\u0143\3\2\2\2\u014e\u014c\3\2\2\2\u014e\u014d\3\2\2\2\u014f"+ + "\63\3\2\2\2\u0150\u0151\7Y\2\2\u0151\u0152\7m\2\2\u0152\u0153\7\b\2\2"+ + "\u0153\u0158\5\66\34\2\u0154\u0155\7\f\2\2\u0155\u0157\5\66\34\2\u0156"+ + "\u0154\3\2\2\2\u0157\u015a\3\2\2\2\u0158\u0156\3\2\2\2\u0158\u0159\3\2"+ + "\2\2\u0159\u015b\3\2\2\2\u015a\u0158\3\2\2\2\u015b\u015c\7\t\2\2\u015c"+ + "\65\3\2\2\2\u015d\u0165\7d\2\2\u015e\u015f\7d\2\2\u015f\u0160\7\r\2\2"+ + "\u0160\u0165\7d\2\2\u0161\u0165\7m\2\2\u0162\u0165\7n\2\2\u0163\u0165"+ + "\7:\2\2\u0164\u015d\3\2\2\2\u0164\u015e\3\2\2\2\u0164\u0161\3\2\2\2\u0164"+ + "\u0162\3\2\2\2\u0164\u0163\3\2\2\2\u0165\67\3\2\2\2\u0166\u0194\7*\2\2"+ + "\u0167\u0168\7-\2\2\u0168\u0169\7\b\2\2\u0169\u016a\7d\2\2\u016a\u0194"+ + "\7\t\2\2\u016b\u016f\7\62\2\2\u016c\u016d\7\b\2\2\u016d\u016e\7m\2\2\u016e"+ + "\u0170\7\t\2\2\u016f\u016c\3\2\2\2\u016f\u0170\3\2\2\2\u0170\u0194\3\2"+ + "\2\2\u0171\u0194\7\65\2\2\u0172\u0194\7\66\2\2\u0173\u0174\7\64\2\2\u0174"+ + "\u0175\7\b\2\2\u0175\u0176\5J&\2\u0176\u0177\7\t\2\2\u0177\u0194\3\2\2"+ + "\2\u0178\u0194\7/\2\2\u0179\u0194\7\60\2\2\u017a\u0194\7\67\2\2\u017b"+ + "\u0194\78\2\2\u017c\u0194\7+\2\2\u017d\u0194\7,\2\2\u017e\u0194\7.\2\2"+ + "\u017f\u0194\79\2\2\u0180\u0184\7\61\2\2\u0181\u0182\7\b\2\2\u0182\u0183"+ + "\7m\2\2\u0183\u0185\7\t\2\2\u0184\u0181\3\2\2\2\u0184\u0185\3\2\2\2\u0185"+ + "\u0194\3\2\2\2\u0186\u0187\7\63\2\2\u0187\u0188\7\b\2\2\u0188\u018d\5"+ + "\66\34\2\u0189\u018a\7\f\2\2\u018a\u018c\5\66\34\2\u018b\u0189\3\2\2\2"+ + "\u018c\u018f\3\2\2\2\u018d\u018b\3\2\2\2\u018d\u018e\3\2\2\2\u018e\u0190"+ + "\3\2\2\2\u018f\u018d\3\2\2\2\u0190\u0191\7\t\2\2\u0191\u0194\3\2\2\2\u0192"+ + "\u0194\7:\2\2\u0193\u0166\3\2\2\2\u0193\u0167\3\2\2\2\u0193\u016b\3\2"+ + "\2\2\u0193\u0171\3\2\2\2\u0193\u0172\3\2\2\2\u0193\u0173\3\2\2\2\u0193"+ + "\u0178\3\2\2\2\u0193\u0179\3\2\2\2\u0193\u017a\3\2\2\2\u0193\u017b\3\2"+ + "\2\2\u0193\u017c\3\2\2\2\u0193\u017d\3\2\2\2\u0193\u017e\3\2\2\2\u0193"+ + "\u017f\3\2\2\2\u0193\u0180\3\2\2\2\u0193\u0186\3\2\2\2\u0193\u0192\3\2"+ + "\2\2\u01949\3\2\2\2\u0195\u0197\5<\37\2\u0196\u0195\3\2\2\2\u0197\u0198"+ + "\3\2\2\2\u0198\u0196\3\2\2\2\u0198\u0199\3\2\2\2\u0199;\3\2\2\2\u019a"+ + "\u019b\5\n\6\2\u019b\u019c\7\n\2\2\u019c\u01f0\3\2\2\2\u019d\u019f\7\4"+ + "\2\2\u019e\u01a0\5:\36\2\u019f\u019e\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0"+ + "\u01a1\3\2\2\2\u01a1\u01f0\7\5\2\2\u01a2\u01a3\5H%\2\u01a3\u01a4\7\n\2"+ + "\2\u01a4\u01f0\3\2\2\2\u01a5\u01a6\7;\2\2\u01a6\u01a7\7\b\2\2\u01a7\u01a8"+ + "\5H%\2\u01a8\u01a9\7\t\2\2\u01a9\u01ac\5<\37\2\u01aa\u01ab\7<\2\2\u01ab"+ + "\u01ad\5<\37\2\u01ac\u01aa\3\2\2\2\u01ac\u01ad\3\2\2\2\u01ad\u01f0\3\2"+ + "\2\2\u01ae\u01b0\58\35\2\u01af\u01ae\3\2\2\2\u01b0\u01b3\3\2\2\2\u01b1"+ + "\u01af\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b4\3\2\2\2\u01b3\u01b1\3\2"+ + "\2\2\u01b4\u01b5\7=\2\2\u01b5\u01b6\7\b\2\2\u01b6\u01b7\5H%\2\u01b7\u01b8"+ + "\7\t\2\2\u01b8\u01b9\5<\37\2\u01b9\u01f0\3\2\2\2\u01ba\u01bc\58\35\2\u01bb"+ + "\u01ba\3\2\2\2\u01bc\u01bf\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2"+ + "\2\2\u01be\u01c0\3\2\2\2\u01bf\u01bd\3\2\2\2\u01c0\u01c1\7>\2\2\u01c1"+ + "\u01c2\5<\37\2\u01c2\u01c3\7=\2\2\u01c3\u01c4\7\b\2\2\u01c4\u01c5\5H%"+ + "\2\u01c5\u01c6\7\t\2\2\u01c6\u01c7\7\n\2\2\u01c7\u01f0\3\2\2\2\u01c8\u01ca"+ + "\58\35\2\u01c9\u01c8\3\2\2\2\u01ca\u01cd\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb"+ + "\u01cc\3\2\2\2\u01cc\u01ce\3\2\2\2\u01cd\u01cb\3\2\2\2\u01ce\u01cf\7?"+ + "\2\2\u01cf\u01d0\7\b\2\2\u01d0\u01d1\5B\"\2\u01d1\u01d2\7\t\2\2\u01d2"+ + "\u01d3\5<\37\2\u01d3\u01f0\3\2\2\2\u01d4\u01d5\7@\2\2\u01d5\u01d6\7\b"+ + "\2\2\u01d6\u01d7\5H%\2\u01d7\u01d8\7\t\2\2\u01d8\u01d9\7\4\2\2\u01d9\u01da"+ + "\5> \2\u01da\u01db\7\5\2\2\u01db\u01f0\3\2\2\2\u01dc\u01de\7A\2\2\u01dd"+ + "\u01df\5H%\2\u01de\u01dd\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01e0\3\2\2"+ + "\2\u01e0\u01f0\7\n\2\2\u01e1\u01e2\7B\2\2\u01e2\u01f0\7\n\2\2\u01e3\u01e4"+ + "\7C\2\2\u01e4\u01f0\7\n\2\2\u01e5\u01e7\7D\2\2\u01e6\u01e8\5P)\2\u01e7"+ + "\u01e6\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\7\4"+ + "\2\2\u01ea\u01eb\5T+\2\u01eb\u01ec\7\u0086\2\2\u01ec\u01f0\3\2\2\2\u01ed"+ + "\u01f0\5N(\2\u01ee\u01f0\7\n\2\2\u01ef\u019a\3\2\2\2\u01ef\u019d\3\2\2"+ + "\2\u01ef\u01a2\3\2\2\2\u01ef\u01a5\3\2\2\2\u01ef\u01b1\3\2\2\2\u01ef\u01bd"+ + "\3\2\2\2\u01ef\u01cb\3\2\2\2\u01ef\u01d4\3\2\2\2\u01ef\u01dc\3\2\2\2\u01ef"+ + "\u01e1\3\2\2\2\u01ef\u01e3\3\2\2\2\u01ef\u01e5\3\2\2\2\u01ef\u01ed\3\2"+ + "\2\2\u01ef\u01ee\3\2\2\2\u01f0=\3\2\2\2\u01f1\u01f3\5@!\2\u01f2\u01f1"+ + "\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f2\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f5"+ + "\u01fb\3\2\2\2\u01f6\u01f7\7E\2\2\u01f7\u01f9\7\13\2\2\u01f8\u01fa\5:"+ + "\36\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01fc\3\2\2\2\u01fb"+ + "\u01f6\3\2\2\2\u01fb\u01fc\3\2\2\2\u01fc?\3\2\2\2\u01fd\u01fe\7F\2\2\u01fe"+ + "\u01ff\5J&\2\u01ff\u0201\7\13\2\2\u0200\u0202\5:\36\2\u0201\u0200\3\2"+ + "\2\2\u0201\u0202\3\2\2\2\u0202A\3\2\2\2\u0203\u0204\5D#\2\u0204\u0206"+ + "\7\n\2\2\u0205\u0207\5F$\2\u0206\u0205\3\2\2\2\u0206\u0207\3\2\2\2\u0207"+ + "\u0208\3\2\2\2\u0208\u020a\7\n\2\2\u0209\u020b\5H%\2\u020a\u0209\3\2\2"+ + "\2\u020a\u020b\3\2\2\2\u020b\u0214\3\2\2\2\u020c\u020d\5\22\n\2\u020d"+ + "\u020e\5\32\16\2\u020e\u020f\7\13\2\2\u020f\u0210\5J&\2\u0210\u0211\7"+ + "\r\2\2\u0211\u0212\5J&\2\u0212\u0214\3\2\2\2\u0213\u0203\3\2\2\2\u0213"+ + "\u020c\3\2\2\2\u0214C\3\2\2\2\u0215\u0217\5\n\6\2\u0216\u0215\3\2\2\2"+ + "\u0216\u0217\3\2\2\2\u0217\u021a\3\2\2\2\u0218\u021a\5H%\2\u0219\u0216"+ + "\3\2\2\2\u0219\u0218\3\2\2\2\u021aE\3\2\2\2\u021b\u021c\5H%\2\u021cG\3"+ + "\2\2\2\u021d\u021e\b%\1\2\u021e\u021f\5J&\2\u021f\u0225\3\2\2\2\u0220"+ + "\u0221\f\3\2\2\u0221\u0222\7\f\2\2\u0222\u0224\5J&\2\u0223\u0220\3\2\2"+ + "\2\u0224\u0227\3\2\2\2\u0225\u0223\3\2\2\2\u0225\u0226\3\2\2\2\u0226I"+ + "\3\2\2\2\u0227\u0225\3\2\2\2\u0228\u0229\b&\1\2\u0229\u022a\7\b\2\2\u022a"+ + "\u022b\5H%\2\u022b\u022c\7\t\2\2\u022c\u026a\3\2\2\2\u022d\u022e\7I\2"+ + "\2\u022e\u0231\7\b\2\2\u022f\u0232\5J&\2\u0230\u0232\5\30\r\2\u0231\u022f"+ + "\3\2\2\2\u0231\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0234\7\t\2\2\u0234"+ + "\u026a\3\2\2\2\u0235\u0236\7J\2\2\u0236\u0239\7\b\2\2\u0237\u023a\5J&"+ + "\2\u0238\u023a\5\30\r\2\u0239\u0237\3\2\2\2\u0239\u0238\3\2\2\2\u023a"+ + "\u023b\3\2\2\2\u023b\u023c\7\t\2\2\u023c\u026a\3\2\2\2\u023d\u023f\7K"+ + "\2\2\u023e\u0240\7\b\2\2\u023f\u023e\3\2\2\2\u023f\u0240\3\2\2\2\u0240"+ + "\u0241\3\2\2\2\u0241\u0243\7m\2\2\u0242\u0244\7\t\2\2\u0243\u0242\3\2"+ + "\2\2\u0243\u0244\3\2\2\2\u0244\u026a\3\2\2\2\u0245\u0246\7\b\2\2\u0246"+ + "\u0247\5\30\r\2\u0247\u0248\7\t\2\2\u0248\u0249\5J&\32\u0249\u026a\3\2"+ + "\2\2\u024a\u024b\t\2\2\2\u024b\u026a\5J&\31\u024c\u024d\7\24\2\2\u024d"+ + "\u026a\5J&\27\u024e\u024f\t\3\2\2\u024f\u026a\5J&\26\u0250\u0251\t\4\2"+ + "\2\u0251\u026a\5J&\22\u0252\u0253\7\4\2\2\u0253\u0258\5J&\2\u0254\u0255"+ + "\7\f\2\2\u0255\u0257\5J&\2\u0256\u0254\3\2\2\2\u0257\u025a\3\2\2\2\u0258"+ + "\u0256\3\2\2\2\u0258\u0259\3\2\2\2\u0259\u025c\3\2\2\2\u025a\u0258\3\2"+ + "\2\2\u025b\u025d\7\f\2\2\u025c\u025b\3\2\2\2\u025c\u025d\3\2\2\2\u025d"+ + "\u025e\3\2\2\2\u025e\u025f\7\5\2\2\u025f\u026a\3\2\2\2\u0260\u026a\7m"+ + "\2\2\u0261\u026a\7d\2\2\u0262\u0264\7n\2\2\u0263\u0262\3\2\2\2\u0264\u0265"+ + "\3\2\2\2\u0265\u0263\3\2\2\2\u0265\u0266\3\2\2\2\u0266\u026a\3\2\2\2\u0267"+ + "\u026a\7o\2\2\u0268\u026a\7U\2\2\u0269\u0228\3\2\2\2\u0269\u022d\3\2\2"+ + "\2\u0269\u0235\3\2\2\2\u0269\u023d\3\2\2\2\u0269\u0245\3\2\2\2\u0269\u024a"+ + "\3\2\2\2\u0269\u024c\3\2\2\2\u0269\u024e\3\2\2\2\u0269\u0250\3\2\2\2\u0269"+ + "\u0252\3\2\2\2\u0269\u0260\3\2\2\2\u0269\u0261\3\2\2\2\u0269\u0263\3\2"+ + "\2\2\u0269\u0267\3\2\2\2\u0269\u0268\3\2\2\2\u026a\u02a7\3\2\2\2\u026b"+ + "\u026c\f\25\2\2\u026c\u026d\t\5\2\2\u026d\u02a6\5J&\26\u026e\u026f\f\24"+ + "\2\2\u026f\u0270\t\6\2\2\u0270\u02a6\5J&\25\u0271\u0272\f\23\2\2\u0272"+ + "\u0273\t\7\2\2\u0273\u02a6\5J&\24\u0274\u0275\f\21\2\2\u0275\u0276\t\b"+ + "\2\2\u0276\u02a6\5J&\22\u0277\u0278\f\20\2\2\u0278\u0279\7\31\2\2\u0279"+ + "\u02a6\5J&\21\u027a\u027b\f\17\2\2\u027b\u027c\7\33\2\2\u027c\u02a6\5"+ + "J&\20\u027d\u027e\f\16\2\2\u027e\u027f\7\34\2\2\u027f\u02a6\5J&\17\u0280"+ + "\u0281\f\r\2\2\u0281\u0282\7%\2\2\u0282\u02a6\5J&\16\u0283\u0284\f\f\2"+ + "\2\u0284\u0285\7&\2\2\u0285\u02a6\5J&\r\u0286\u0287\f\13\2\2\u0287\u0288"+ + "\7\17\2\2\u0288\u0289\5J&\2\u0289\u028a\7\13\2\2\u028a\u028b\5J&\f\u028b"+ + "\u02a6\3\2\2\2\u028c\u028d\f\n\2\2\u028d\u028e\7\'\2\2\u028e\u02a6\5J"+ + "&\n\u028f\u0290\f\t\2\2\u0290\u0291\7(\2\2\u0291\u02a6\5J&\t\u0292\u0293"+ + "\f!\2\2\u0293\u0294\7\20\2\2\u0294\u02a6\7m\2\2\u0295\u0296\f \2\2\u0296"+ + "\u0297\7\21\2\2\u0297\u02a6\7m\2\2\u0298\u0299\f\37\2\2\u0299\u029b\7"+ + "\b\2\2\u029a\u029c\5L\'\2\u029b\u029a\3\2\2\2\u029b\u029c\3\2\2\2\u029c"+ + "\u029d\3\2\2\2\u029d\u02a6\7\t\2\2\u029e\u029f\f\33\2\2\u029f\u02a0\7"+ + "\6\2\2\u02a0\u02a1\5H%\2\u02a1\u02a2\7\7\2\2\u02a2\u02a6\3\2\2\2\u02a3"+ + "\u02a4\f\30\2\2\u02a4\u02a6\t\2\2\2\u02a5\u026b\3\2\2\2\u02a5\u026e\3"+ + "\2\2\2\u02a5\u0271\3\2\2\2\u02a5\u0274\3\2\2\2\u02a5\u0277\3\2\2\2\u02a5"+ + "\u027a\3\2\2\2\u02a5\u027d\3\2\2\2\u02a5\u0280\3\2\2\2\u02a5\u0283\3\2"+ + "\2\2\u02a5\u0286\3\2\2\2\u02a5\u028c\3\2\2\2\u02a5\u028f\3\2\2\2\u02a5"+ + "\u0292\3\2\2\2\u02a5\u0295\3\2\2\2\u02a5\u0298\3\2\2\2\u02a5\u029e\3\2"+ + "\2\2\u02a5\u02a3\3\2\2\2\u02a6\u02a9\3\2\2\2\u02a7\u02a5\3\2\2\2\u02a7"+ + "\u02a8\3\2\2\2\u02a8K\3\2\2\2\u02a9\u02a7\3\2\2\2\u02aa\u02af\5J&\2\u02ab"+ + "\u02ac\7\f\2\2\u02ac\u02ae\5J&\2\u02ad\u02ab\3\2\2\2\u02ae\u02b1\3\2\2"+ + "\2\u02af\u02ad\3\2\2\2\u02af\u02b0\3\2\2\2\u02b0M\3\2\2\2\u02b1\u02af"+ + "\3\2\2\2\u02b2\u02b4\7L\2\2\u02b3\u02b5\5P)\2\u02b4\u02b3\3\2\2\2\u02b4"+ + "\u02b5\3\2\2\2\u02b5\u02b6\3\2\2\2\u02b6\u02b7\7V\2\2\u02b7O\3\2\2\2\u02b8"+ + "\u02b9\7\b\2\2\u02b9\u02be\5R*\2\u02ba\u02bb\7\f\2\2\u02bb\u02bd\5R*\2"+ + "\u02bc\u02ba\3\2\2\2\u02bd\u02c0\3\2\2\2\u02be\u02bc\3\2\2\2\u02be\u02bf"+ + "\3\2\2\2\u02bf\u02c1\3\2\2\2\u02c0\u02be\3\2\2\2\u02c1\u02c2\7\t\2\2\u02c2"+ + "Q\3\2\2\2\u02c3\u02c4\7M\2\2\u02c4\u02ce\7n\2\2\u02c5\u02c6\7N\2\2\u02c6"+ + "\u02ce\7m\2\2\u02c7\u02c8\7O\2\2\u02c8\u02ce\7n\2\2\u02c9\u02ca\7P\2\2"+ + "\u02ca\u02ce\5J&\2\u02cb\u02cc\7Q\2\2\u02cc\u02ce\5J&\2\u02cd\u02c3\3"+ + "\2\2\2\u02cd\u02c5\3\2\2\2\u02cd\u02c7\3\2\2\2\u02cd\u02c9\3\2\2\2\u02cd"+ + "\u02cb\3\2\2\2\u02ceS\3\2\2\2\u02cf\u02d1\5V,\2\u02d0\u02cf\3\2\2\2\u02d1"+ + "\u02d4\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d3\3\2\2\2\u02d3U\3\2\2\2"+ + "\u02d4\u02d2\3\2\2\2\u02d5\u02d9\5X-\2\u02d6\u02d9\5Z.\2\u02d7\u02d9\5"+ + "\\/\2\u02d8\u02d5\3\2\2\2\u02d8\u02d6\3\2\2\2\u02d8\u02d7\3\2\2\2\u02d9"+ + "W\3\2\2\2\u02da\u02db\7\u0093\2\2\u02db\u02df\7v\2\2\u02dc\u02de\7\u0094"+ + "\2\2\u02dd\u02dc\3\2\2\2\u02de\u02e1\3\2\2\2\u02df\u02dd\3\2\2\2\u02df"+ + "\u02e0\3\2\2\2\u02e0\u02eb\3\2\2\2\u02e1\u02df\3\2\2\2\u02e2\u02e3\7\u0092"+ + "\2\2\u02e3\u02e7\7v\2\2\u02e4\u02e6\7\u0094\2\2\u02e5\u02e4\3\2\2\2\u02e6"+ + "\u02e9\3\2\2\2\u02e7\u02e5\3\2\2\2\u02e7\u02e8\3\2\2\2\u02e8\u02eb\3\2"+ + "\2\2\u02e9\u02e7\3\2\2\2\u02ea\u02da\3\2\2\2\u02ea\u02e2\3\2\2\2\u02eb"+ + "Y\3\2\2\2\u02ec\u02ee\7t\2\2\u02ed\u02ef\5^\60\2\u02ee\u02ed\3\2\2\2\u02ee"+ + "\u02ef\3\2\2\2\u02ef\u02f3\3\2\2\2\u02f0\u02f2\7\u0094\2\2\u02f1\u02f0"+ + "\3\2\2\2\u02f2\u02f5\3\2\2\2\u02f3\u02f1\3\2\2\2\u02f3\u02f4\3\2\2\2\u02f4"+ + "[\3\2\2\2\u02f5\u02f3\3\2\2\2\u02f6\u02f7\7s\2\2\u02f7\u02fc\5`\61\2\u02f8"+ + "\u02f9\7w\2\2\u02f9\u02fb\5`\61\2\u02fa\u02f8\3\2\2\2\u02fb\u02fe\3\2"+ + "\2\2\u02fc\u02fa\3\2\2\2\u02fc\u02fd\3\2\2\2\u02fd\u0302\3\2\2\2\u02fe"+ + "\u02fc\3\2\2\2\u02ff\u0301\7\u0094\2\2\u0300\u02ff\3\2\2\2\u0301\u0304"+ + "\3\2\2\2\u0302\u0300\3\2\2\2\u0302\u0303\3\2\2\2\u0303]\3\2\2\2\u0304"+ + "\u0302\3\2\2\2\u0305\u0333\5`\61\2\u0306\u0307\7u\2\2\u0307\u0333\5`\61"+ + "\2\u0308\u0309\5`\61\2\u0309\u030a\7w\2\2\u030a\u030b\5`\61\2\u030b\u0333"+ + "\3\2\2\2\u030c\u030d\7x\2\2\u030d\u030e\5`\61\2\u030e\u030f\7y\2\2\u030f"+ + "\u0310\7w\2\2\u0310\u0311\7\u0093\2\2\u0311\u0333\3\2\2\2\u0312\u0313"+ + "\7x\2\2\u0313\u0314\7x\2\2\u0314\u0315\5`\61\2\u0315\u0316\7y\2\2\u0316"+ + "\u0317\7y\2\2\u0317\u0318\7w\2\2\u0318\u0319\7\u0093\2\2\u0319\u0333\3"+ + "\2\2\2\u031a\u031b\7x\2\2\u031b\u031c\5`\61\2\u031c\u031d\7w\2\2\u031d"+ + "\u031e\7\u0093\2\2\u031e\u031f\7y\2\2\u031f\u0320\7w\2\2\u0320\u0321\7"+ + "\u0093\2\2\u0321\u0333\3\2\2\2\u0322\u0323\7x\2\2\u0323\u0324\5`\61\2"+ + "\u0324\u0325\7w\2\2\u0325\u0326\7\u0093\2\2\u0326\u0327\7y\2\2\u0327\u0333"+ + "\3\2\2\2\u0328\u0329\7x\2\2\u0329\u032a\5`\61\2\u032a\u032b\7y\2\2\u032b"+ + "\u0333\3\2\2\2\u032c\u032d\7x\2\2\u032d\u032e\7x\2\2\u032e\u032f\5`\61"+ + "\2\u032f\u0330\7y\2\2\u0330\u0331\7y\2\2\u0331\u0333\3\2\2\2\u0332\u0305"+ + "\3\2\2\2\u0332\u0306\3\2\2\2\u0332\u0308\3\2\2\2\u0332\u030c\3\2\2\2\u0332"+ + "\u0312\3\2\2\2\u0332\u031a\3\2\2\2\u0332\u0322\3\2\2\2\u0332\u0328\3\2"+ + "\2\2\u0332\u032c\3\2\2\2\u0333_\3\2\2\2\u0334\u0335\b\61\1\2\u0335\u0336"+ + "\7z\2\2\u0336\u0337\5`\61\2\u0337\u0338\7{\2\2\u0338\u0343\3\2\2\2\u0339"+ + "\u033a\t\t\2\2\u033a\u0343\5`\61\n\u033b\u0343\7\u0093\2\2\u033c\u0343"+ + "\7\u0091\2\2\u033d\u033e\7\u0085\2\2\u033e\u033f\7\u0093\2\2\u033f\u0343"+ + "\7\u0086\2\2\u0340\u0343\7\u0087\2\2\u0341\u0343\7\u0090\2\2\u0342\u0334"+ + "\3\2\2\2\u0342\u0339\3\2\2\2\u0342\u033b\3\2\2\2\u0342\u033c\3\2\2\2\u0342"+ + "\u033d\3\2\2\2\u0342\u0340\3\2\2\2\u0342\u0341\3\2\2\2\u0343\u0352\3\2"+ + "\2\2\u0344\u0345\f\f\2\2\u0345\u0346\7|\2\2\u0346\u0351\5`\61\r\u0347"+ + "\u0348\f\13\2\2\u0348\u0349\t\n\2\2\u0349\u0351\5`\61\f\u034a\u034b\f"+ + "\t\2\2\u034b\u034c\t\13\2\2\u034c\u0351\5`\61\n\u034d\u034e\f\b\2\2\u034e"+ + "\u034f\t\f\2\2\u034f\u0351\5`\61\t\u0350\u0344\3\2\2\2\u0350\u0347\3\2"+ + "\2\2\u0350\u034a\3\2\2\2\u0350\u034d\3\2\2\2\u0351\u0354\3\2\2\2\u0352"+ + "\u0350\3\2\2\2\u0352\u0353\3\2\2\2\u0353a\3\2\2\2\u0354\u0352\3\2\2\2"+ + "Vk|\u0089\u008f\u0095\u009f\u00a6\u00ad\u00b2\u00be\u00c1\u00c3\u00cd"+ + "\u00d5\u00da\u00df\u00e6\u00ed\u00f4\u00fc\u0102\u010e\u011c\u0122\u0128"+ + "\u012e\u0133\u0137\u0140\u0147\u014e\u0158\u0164\u016f\u0184\u018d\u0193"+ + "\u0198\u019f\u01ac\u01b1\u01bd\u01cb\u01de\u01e7\u01ef\u01f4\u01f9\u01fb"+ + "\u0201\u0206\u020a\u0213\u0216\u0219\u0225\u0231\u0239\u023f\u0243\u0258"+ + "\u025c\u0265\u0269\u029b\u02a5\u02a7\u02af\u02b4\u02be\u02cd\u02d2\u02d8"+ + "\u02df\u02e7\u02ea\u02ee\u02f3\u02fc\u0302\u0332\u0342\u0350\u0352"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/src/main/java/dk/camelot64/kickc/parser/KickCParser_new.g4 b/src/main/java/dk/camelot64/kickc/parser/KickCParser_new.g4 index fd50428b9..63e8d16b6 100644 --- a/src/main/java/dk/camelot64/kickc/parser/KickCParser_new.g4 +++ b/src/main/java/dk/camelot64/kickc/parser/KickCParser_new.g4 @@ -70,7 +70,7 @@ typeSpecifier ; declarator - : NAME {if(isTypedef) Parser.addTypedef($NAME.text);} #declaratorName + : NAME {if(isTypedef) { Parser.addTypedef($NAME.text); isTypedef=false; } } #declaratorName | declarator PAR_BEGIN parameterListDecl? PAR_END #declaratorProcedure | declarator BRACKET_BEGIN (expr)? BRACKET_END #declaratorArray | ASTERISK directive* declarator #declaratorPointer diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 59d0587c6..8a766719e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -2030,13 +2030,8 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor