From f6e54b33274ba24daeec9fac7c663f0eae481eee Mon Sep 17 00:00:00 2001 From: parrt Date: Tue, 14 Jun 2011 16:29:02 -0800 Subject: [PATCH] add more [git-p4: depot-paths = "//depot/code/antlr4/main/": change = 8637] --- tool/playground/HTMLParser.g | 14 + tool/playground/JavaLexer.g | 204 + tool/playground/JavaLexer.java | 612 ++ tool/playground/JavaParser.g | 756 ++ tool/playground/JavaParser.java | 6448 +++++++++++++++++ tool/playground/JavaParser.orig.g | 756 ++ tool/playground/L.g | 7 + tool/playground/LL1.g | 14 + tool/playground/T.g | 11 + tool/playground/T.java | 79 + tool/playground/Test.java | 120 + tool/playground/TestJava.java | 117 + tool/playground/TestL.java | 8 + tool/playground/TestYang.java | 117 + tool/playground/YangJavaLexer.g | 1478 ++++ tool/playground/YangJavaLexer.java | 1414 ++++ tool/playground/YangJavaParser.g | 1238 ++++ tool/playground/YangJavaParser.java | 5530 ++++++++++++++ tool/playground/blort.java | 1 + .../v4/tool/templates/codegen/Java/Java.stg | 491 ++ .../org/antlr/v4/tool/templates/depend.stg | 12 + .../v4/tool/templates/dot/action-edge.st | 3 + .../org/antlr/v4/tool/templates/dot/atn.st | 8 + .../v4/tool/templates/dot/decision-rank.st | 4 + .../org/antlr/v4/tool/templates/dot/dfa.st | 8 + .../org/antlr/v4/tool/templates/dot/edge.st | 4 + .../v4/tool/templates/dot/epsilon-edge.st | 3 + .../org/antlr/v4/tool/templates/dot/state.st | 3 + .../antlr/v4/tool/templates/dot/stopstate.st | 3 + .../tool/templates/messages/formats/antlr.stg | 40 + .../tool/templates/messages/formats/gnu.stg | 40 + .../templates/messages/formats/vs2005.stg | 40 + .../tool/templates/messages/languages/en.stg | 316 + 33 files changed, 19899 insertions(+) create mode 100644 tool/playground/HTMLParser.g create mode 100644 tool/playground/JavaLexer.g create mode 100644 tool/playground/JavaLexer.java create mode 100644 tool/playground/JavaParser.g create mode 100644 tool/playground/JavaParser.java create mode 100644 tool/playground/JavaParser.orig.g create mode 100644 tool/playground/L.g create mode 100644 tool/playground/LL1.g create mode 100644 tool/playground/T.g create mode 100644 tool/playground/T.java create mode 100644 tool/playground/Test.java create mode 100644 tool/playground/TestJava.java create mode 100644 tool/playground/TestL.java create mode 100644 tool/playground/TestYang.java create mode 100644 tool/playground/YangJavaLexer.g create mode 100644 tool/playground/YangJavaLexer.java create mode 100644 tool/playground/YangJavaParser.g create mode 100644 tool/playground/YangJavaParser.java create mode 100644 tool/playground/blort.java create mode 100644 tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg create mode 100644 tool/resources/org/antlr/v4/tool/templates/depend.stg create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/action-edge.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/atn.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/decision-rank.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/dfa.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/edge.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/epsilon-edge.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/state.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/dot/stopstate.st create mode 100644 tool/resources/org/antlr/v4/tool/templates/messages/formats/antlr.stg create mode 100644 tool/resources/org/antlr/v4/tool/templates/messages/formats/gnu.stg create mode 100644 tool/resources/org/antlr/v4/tool/templates/messages/formats/vs2005.stg create mode 100644 tool/resources/org/antlr/v4/tool/templates/messages/languages/en.stg diff --git a/tool/playground/HTMLParser.g b/tool/playground/HTMLParser.g new file mode 100644 index 000000000..4f055b493 --- /dev/null +++ b/tool/playground/HTMLParser.g @@ -0,0 +1,14 @@ +parser grammar HTMLParser; + +options { tokenVocab=HTMLLexer; } + +file : ( TAG_START (starttag | endtag) | TEXT +{System.out.println("TEXT "+$TEXT);} )+ EOF ; + +starttag : ID attr* TAG_STOP ; + +attr : ID (EQ (ID|STRING))? ; + +endtag + : END_TAG {System.out.println("END tag "+$END_TAG);} + ; diff --git a/tool/playground/JavaLexer.g b/tool/playground/JavaLexer.g new file mode 100644 index 000000000..d2d50bc97 --- /dev/null +++ b/tool/playground/JavaLexer.g @@ -0,0 +1,204 @@ +lexer grammar JavaLexer; + +@members { + protected boolean enumIsKeyword = true; + protected boolean assertIsKeyword = true; +} + +T__25 : 'package' ; +T__26 : ';' ; +T__27 : 'import' ; +T__28 : 'static' ; +T__29 : '.' ; +T__30 : '*' ; +T__31 : 'public' ; +T__32 : 'protected' ; +T__33 : 'private' ; +T__34 : 'abstract' ; +T__35 : 'final' ; +T__36 : 'strictfp' ; +T__37 : 'class' ; +T__38 : 'extends' ; +T__39 : 'implements' ; +T__40 : '<' ; +T__41 : ',' ; +T__42 : '>' ; +T__43 : '&' ; +T__44 : '{' ; +T__45 : '}' ; +T__46 : 'interface' ; +T__47 : 'void' ; +T__48 : '[' ; +T__49 : ']' ; +T__50 : 'throws' ; +T__51 : '=' ; +T__52 : 'native' ; +T__53 : 'synchronized' ; +T__54 : 'transient' ; +T__55 : 'volatile' ; +T__56 : 'boolean' ; +T__57 : 'char' ; +T__58 : 'byte' ; +T__59 : 'short' ; +T__60 : 'int' ; +T__61 : 'long' ; +T__62 : 'float' ; +T__63 : 'double' ; +T__64 : '?' ; +T__65 : 'super' ; +T__66 : '(' ; +T__67 : ')' ; +T__68 : '...' ; +T__69 : 'this' ; +T__70 : 'null' ; +T__71 : 'true' ; +T__72 : 'false' ; +T__73 : '@' ; +T__74 : 'default' ; +T__75 : ':' ; +T__76 : 'if' ; +T__77 : 'else' ; +T__78 : 'for' ; +T__79 : 'while' ; +T__80 : 'do' ; +T__81 : 'try' ; +T__82 : 'finally' ; +T__83 : 'switch' ; +T__84 : 'return' ; +T__85 : 'throw' ; +T__86 : 'break' ; +T__87 : 'continue' ; +T__88 : 'catch' ; +T__89 : 'case' ; +T__90 : '+=' ; +T__91 : '-=' ; +T__92 : '*=' ; +T__93 : '/=' ; +T__94 : '&=' ; +T__95 : '|=' ; +T__96 : '^=' ; +T__97 : '%=' ; +T__98 : '||' ; +T__99 : '&&' ; +T__100 : '|' ; +T__101 : '^' ; +T__102 : '==' ; +T__103 : '!=' ; +T__104 : 'instanceof' ; +T__105 : '+' ; +T__106 : '-' ; +T__107 : '/' ; +T__108 : '%' ; +T__109 : '++' ; +T__110 : '--' ; +T__111 : '~' ; +T__112 : '!' ; +T__113 : 'new' ; + +// $ANTLR src "JavaCombined.g" 911 +HexLiteral : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 913 +DecimalLiteral : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 915 +OctalLiteral : '0' ('0'..'7')+ IntegerTypeSuffix? ;// $ANTLR src "JavaCombined.g" 917 +fragment +HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;// $ANTLR src "JavaCombined.g" 920 +fragment +IntegerTypeSuffix : ('l'|'L') ;// $ANTLR src "JavaCombined.g" 923 +FloatingPointLiteral + : ('0'..'9')+ '.' ('0'..'9')* Exponent? FloatTypeSuffix? + | '.' ('0'..'9')+ Exponent? FloatTypeSuffix? + | ('0'..'9')+ Exponent FloatTypeSuffix? + | ('0'..'9')+ FloatTypeSuffix + | ('0x' | '0X') (HexDigit )* + ('.' (HexDigit)*)? + ( 'p' | 'P' ) + ( '+' | '-' )? + ( '0' .. '9' )+ + FloatTypeSuffix? + ;// $ANTLR src "JavaCombined.g" 930 +fragment +Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+ ;// $ANTLR src "JavaCombined.g" 933 +fragment +FloatTypeSuffix : ('f'|'F'|'d'|'D') ;// $ANTLR src "JavaCombined.g" 936 +CharacterLiteral + : '\'' ( EscapeSequence | ~('\''|'\\') ) '\'' + ;// $ANTLR src "JavaCombined.g" 940 +StringLiteral + : '"' ( EscapeSequence | ~('\\'|'"') )* '"' + ;// $ANTLR src "JavaCombined.g" 944 +fragment +EscapeSequence + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | UnicodeEscape + | OctalEscape + ;// $ANTLR src "JavaCombined.g" 951 +fragment +OctalEscape + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ;// $ANTLR src "JavaCombined.g" 958 +fragment +UnicodeEscape + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ;// $ANTLR src "JavaCombined.g" 963 +ENUM: 'enum' {if (!enumIsKeyword) state.type=Identifier;} + ;// $ANTLR src "JavaCombined.g" 966 +ASSERT + : 'assert' {if (!assertIsKeyword) state.type=Identifier;} + ;// $ANTLR src "JavaCombined.g" 970 +Identifier + : Letter (Letter|JavaIDDigit)* + ;// $ANTLR src "JavaCombined.g" 974 +/**I found this char range in JavaCC's grammar, but Letter and Digit overlap. + Still works, but... + */ +fragment +Letter + : '\u0024' | + '\u0041'..'\u005a' | + '\u005f' | + '\u0061'..'\u007a' | + '\u00c0'..'\u00d6' | + '\u00d8'..'\u00f6' | + '\u00f8'..'\u00ff' | + '\u0100'..'\u1fff' | + '\u3040'..'\u318f' | + '\u3300'..'\u337f' | + '\u3400'..'\u3d2d' | + '\u4e00'..'\u9fff' | + '\uf900'..'\ufaff' + ;// $ANTLR src "JavaCombined.g" 994 +fragment +JavaIDDigit + : '\u0030'..'\u0039' | + '\u0660'..'\u0669' | + '\u06f0'..'\u06f9' | + '\u0966'..'\u096f' | + '\u09e6'..'\u09ef' | + '\u0a66'..'\u0a6f' | + '\u0ae6'..'\u0aef' | + '\u0b66'..'\u0b6f' | + '\u0be7'..'\u0bef' | + '\u0c66'..'\u0c6f' | + '\u0ce6'..'\u0cef' | + '\u0d66'..'\u0d6f' | + '\u0e50'..'\u0e59' | + '\u0ed0'..'\u0ed9' | + '\u1040'..'\u1049' + ;// $ANTLR src "JavaCombined.g" 1013 +WS : (' '|'\r'|'\t'|'\u000C'|'\n')+ {skip();} + ; + +LINE_COMMENT + : '//' ~('\n'|'\r')* '\r'? '\n' {skip();} + ; + +COMMENT_START + : '/*' {pushMode(COMMENT_MODE); more();} + ; + +mode COMMENT_MODE; + +COMMENT : '*/' {skip(); popMode();} ; + +COMMENT_INSIDE : . {more();} ; diff --git a/tool/playground/JavaLexer.java b/tool/playground/JavaLexer.java new file mode 100644 index 000000000..3a712472c --- /dev/null +++ b/tool/playground/JavaLexer.java @@ -0,0 +1,612 @@ +// $ANTLR ANTLRVersion> JavaLexer.java generatedTimestamp> +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.LexerSharedState; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + +public class JavaLexer extends Lexer { + public static final int + EOR=1, T__25=4, T__26=5, T__27=6, T__28=7, T__29=8, T__30=9, T__31=10, + T__32=11, T__33=12, T__34=13, T__35=14, T__36=15, T__37=16, T__38=17, + T__39=18, T__40=19, T__41=20, T__42=21, T__43=22, T__44=23, T__45=24, + T__46=25, T__47=26, T__48=27, T__49=28, T__50=29, T__51=30, T__52=31, + T__53=32, T__54=33, T__55=34, T__56=35, T__57=36, T__58=37, T__59=38, + T__60=39, T__61=40, T__62=41, T__63=42, T__64=43, T__65=44, T__66=45, + T__67=46, T__68=47, T__69=48, T__70=49, T__71=50, T__72=51, T__73=52, + T__74=53, T__75=54, T__76=55, T__77=56, T__78=57, T__79=58, T__80=59, + T__81=60, T__82=61, T__83=62, T__84=63, T__85=64, T__86=65, T__87=66, + T__88=67, T__89=68, T__90=69, T__91=70, T__92=71, T__93=72, T__94=73, + T__95=74, T__96=75, T__97=76, T__98=77, T__99=78, T__100=79, T__101=80, + T__102=81, T__103=82, T__104=83, T__105=84, T__106=85, T__107=86, + T__108=87, T__109=88, T__110=89, T__111=90, T__112=91, T__113=92, + HexLiteral=93, DecimalLiteral=94, OctalLiteral=95, FloatingPointLiteral=96, + CharacterLiteral=97, StringLiteral=98, ENUM=99, ASSERT=100, Identifier=101, + WS=102, LINE_COMMENT=103, COMMENT_START=104, COMMENT=105, COMMENT_INSIDE=106; + public static final int DEFAULT_MODE = 0; + public static final int COMMENT_MODE = 1; + + public static final String[] tokenNames = { + "", "", "", + "EOR", "'package'", "';'", "'import'", "'static'", "'.'", "'*'", + "'public'", "'protected'", "'private'", "'abstract'", "'final'", + "'strictfp'", "'class'", "'extends'", "'implements'", "'<'", "','", + "'>'", "'&'", "'{'", "'}'", "'interface'", "'void'", "'['", "']'", + "'throws'", "'='", "'native'", "'synchronized'", "'transient'", + "'volatile'", "'boolean'", "'char'", "'byte'", "'short'", "'int'", + "'long'", "'float'", "'double'", "'?'", "'super'", "'('", "')'", + "'...'", "'this'", "'null'", "'true'", "'false'", "'@'", "'default'", + "':'", "'if'", "'else'", "'for'", "'while'", "'do'", "'try'", "'finally'", + "'switch'", "'return'", "'throw'", "'break'", "'continue'", "'catch'", + "'case'", "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", + "'%='", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'instanceof'", + "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", "'~'", "'!'", "'new'", + "HexLiteral", "DecimalLiteral", "OctalLiteral", "FloatingPointLiteral", + "CharacterLiteral", "StringLiteral", "ENUM", "ASSERT", "Identifier", + "WS", "LINE_COMMENT", "COMMENT_START", "COMMENT", "COMMENT_INSIDE" + }; + public static final String[] ruleNames = { + "", + "T__25", "T__26", "T__27", "T__28", "T__29", "T__30", "T__31", "T__32", + "T__33", "T__34", "T__35", "T__36", "T__37", "T__38", "T__39", "T__40", + "T__41", "T__42", "T__43", "T__44", "T__45", "T__46", "T__47", "T__48", + "T__49", "T__50", "T__51", "T__52", "T__53", "T__54", "T__55", "T__56", + "T__57", "T__58", "T__59", "T__60", "T__61", "T__62", "T__63", "T__64", + "T__65", "T__66", "T__67", "T__68", "T__69", "T__70", "T__71", "T__72", + "T__73", "T__74", "T__75", "T__76", "T__77", "T__78", "T__79", "T__80", + "T__81", "T__82", "T__83", "T__84", "T__85", "T__86", "T__87", "T__88", + "T__89", "T__90", "T__91", "T__92", "T__93", "T__94", "T__95", "T__96", + "T__97", "T__98", "T__99", "T__100", "T__101", "T__102", "T__103", + "T__104", "T__105", "T__106", "T__107", "T__108", "T__109", "T__110", + "T__111", "T__112", "T__113", "HexLiteral", "DecimalLiteral", "OctalLiteral", + "HexDigit", "IntegerTypeSuffix", "FloatingPointLiteral", "Exponent", + "FloatTypeSuffix", "CharacterLiteral", "StringLiteral", "EscapeSequence", + "OctalEscape", "UnicodeEscape", "ENUM", "ASSERT", "Identifier", + "Letter", "JavaIDDigit", "WS", "LINE_COMMENT", "COMMENT_START", + "COMMENT", "COMMENT_INSIDE" + }; + + + protected boolean enumIsKeyword = true; + protected boolean assertIsKeyword = true; + + + public JavaLexer(CharStream input) { + this(input, new LexerSharedState()); + } + public JavaLexer(CharStream input, LexerSharedState state) { + super(input,state); + _interp = new LexerInterpreter(this,_ATN); + } + + public String getGrammarFileName() { return "JavaLexer.java"; } + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + + public void action(int ruleIndex, int actionIndex) { + switch ( actionIndex ) { + case 1 : if (!enumIsKeyword) state.type=Identifier; break; + case 2 : if (!assertIsKeyword) state.type=Identifier; break; + case 3 : skip(); break; + case 4 : skip(); break; + case 5 : pushMode(COMMENT_MODE); more(); break; + case 6 : skip(); popMode(); break; + case 7 : more(); break; + } + } + + public static final String _serializedATN = + "\030\155\u041e\06\00\06\00\02\01\07\01\02\02\07\02\02\03\07\03\02\04"+ + "\07\04\02\05\07\05\02\06\07\06\02\07\07\07\02\010\07\010\02\011\07"+ + "\011\02\012\07\012\02\013\07\013\02\014\07\014\02\015\07\015\02\016"+ + "\07\016\02\017\07\017\02\020\07\020\02\021\07\021\02\022\07\022\02"+ + "\023\07\023\02\024\07\024\02\025\07\025\02\026\07\026\02\027\07\027"+ + "\02\030\07\030\02\031\07\031\02\032\07\032\02\033\07\033\02\034\07"+ + "\034\02\035\07\035\02\036\07\036\02\037\07\037\02\040\07\040\02\041"+ + "\07\041\02\042\07\042\02\043\07\043\02\044\07\044\02\045\07\045\02"+ + "\046\07\046\02\047\07\047\02\050\07\050\02\051\07\051\02\052\07\052"+ + "\02\053\07\053\02\054\07\054\02\055\07\055\02\056\07\056\02\057\07"+ + "\057\02\060\07\060\02\061\07\061\02\062\07\062\02\063\07\063\02\064"+ + "\07\064\02\065\07\065\02\066\07\066\02\067\07\067\02\070\07\070\02"+ + "\071\07\071\02\072\07\072\02\073\07\073\02\074\07\074\02\075\07\075"+ + "\02\076\07\076\02\077\07\077\02\100\07\100\02\101\07\101\02\102\07"+ + "\102\02\103\07\103\02\104\07\104\02\105\07\105\02\106\07\106\02\107"+ + "\07\107\02\110\07\110\02\111\07\111\02\112\07\112\02\113\07\113\02"+ + "\114\07\114\02\115\07\115\02\116\07\116\02\117\07\117\02\120\07\120"+ + "\02\121\07\121\02\122\07\122\02\123\07\123\02\124\07\124\02\125\07"+ + "\125\02\126\07\126\02\127\07\127\02\130\07\130\02\131\07\131\02\132"+ + "\07\132\02\133\07\133\02\134\07\134\02\135\07\135\02\136\07\136\02"+ + "\137\07\137\02\140\07\140\02\141\07\141\02\142\07\142\02\143\07\143"+ + "\02\144\07\144\02\145\07\145\02\146\07\146\02\147\07\147\02\150\07"+ + "\150\02\151\07\151\02\152\07\152\02\153\07\153\02\154\07\154\02\155"+ + "\07\155\02\156\07\156\02\157\07\157\02\160\07\160\01\01\01\01\01\01"+ + "\01\01\01\01\01\01\01\01\01\01\01\02\01\02\01\03\01\03\01\03\01\03"+ + "\01\03\01\03\01\03\01\04\01\04\01\04\01\04\01\04\01\04\01\04\01\05"+ + "\01\05\01\06\01\06\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\010"+ + "\01\010\01\010\01\010\01\010\01\010\01\010\01\010\01\010\01\010\01"+ + "\011\01\011\01\011\01\011\01\011\01\011\01\011\01\011\01\012\01\012"+ + "\01\012\01\012\01\012\01\012\01\012\01\012\01\012\01\013\01\013\01"+ + "\013\01\013\01\013\01\013\01\014\01\014\01\014\01\014\01\014\01\014"+ + "\01\014\01\014\01\014\01\015\01\015\01\015\01\015\01\015\01\015\01"+ + "\016\01\016\01\016\01\016\01\016\01\016\01\016\01\016\01\017\01\017"+ + "\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01"+ + "\020\01\020\01\021\01\021\01\022\01\022\01\023\01\023\01\024\01\024"+ + "\01\025\01\025\01\026\01\026\01\026\01\026\01\026\01\026\01\026\01"+ + "\026\01\026\01\026\01\027\01\027\01\027\01\027\01\027\01\030\01\030"+ + "\01\031\01\031\01\032\01\032\01\032\01\032\01\032\01\032\01\032\01"+ + "\033\01\033\01\034\01\034\01\034\01\034\01\034\01\034\01\034\01\035"+ + "\01\035\01\035\01\035\01\035\01\035\01\035\01\035\01\035\01\035\01"+ + "\035\01\035\01\035\01\036\01\036\01\036\01\036\01\036\01\036\01\036"+ + "\01\036\01\036\01\036\01\037\01\037\01\037\01\037\01\037\01\037\01"+ + "\037\01\037\01\037\01\040\01\040\01\040\01\040\01\040\01\040\01\040"+ + "\01\040\01\041\01\041\01\041\01\041\01\041\01\042\01\042\01\042\01"+ + "\042\01\042\01\043\01\043\01\043\01\043\01\043\01\043\01\044\01\044"+ + "\01\044\01\044\01\045\01\045\01\045\01\045\01\045\01\046\01\046\01"+ + "\046\01\046\01\046\01\046\01\047\01\047\01\047\01\047\01\047\01\047"+ + "\01\047\01\050\01\050\01\051\01\051\01\051\01\051\01\051\01\051\01"+ + "\052\01\052\01\053\01\053\01\054\01\054\01\054\01\054\01\055\01\055"+ + "\01\055\01\055\01\055\01\056\01\056\01\056\01\056\01\056\01\057\01"+ + "\057\01\057\01\057\01\057\01\060\01\060\01\060\01\060\01\060\01\060"+ + "\01\061\01\061\01\062\01\062\01\062\01\062\01\062\01\062\01\062\01"+ + "\062\01\063\01\063\01\064\01\064\01\064\01\065\01\065\01\065\01\065"+ + "\01\065\01\066\01\066\01\066\01\066\01\067\01\067\01\067\01\067\01"+ + "\067\01\067\01\070\01\070\01\070\01\071\01\071\01\071\01\071\01\072"+ + "\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\073\01\073\01"+ + "\073\01\073\01\073\01\073\01\073\01\074\01\074\01\074\01\074\01\074"+ + "\01\074\01\074\01\075\01\075\01\075\01\075\01\075\01\075\01\076\01"+ + "\076\01\076\01\076\01\076\01\076\01\077\01\077\01\077\01\077\01\077"+ + "\01\077\01\077\01\077\01\077\01\100\01\100\01\100\01\100\01\100\01"+ + "\100\01\101\01\101\01\101\01\101\01\101\01\102\01\102\01\102\01\103"+ + "\01\103\01\103\01\104\01\104\01\104\01\105\01\105\01\105\01\106\01"+ + "\106\01\106\01\107\01\107\01\107\01\110\01\110\01\110\01\111\01\111"+ + "\01\111\01\112\01\112\01\112\01\113\01\113\01\113\01\114\01\114\01"+ + "\115\01\115\01\116\01\116\01\116\01\117\01\117\01\117\01\120\01\120"+ + "\01\120\01\120\01\120\01\120\01\120\01\120\01\120\01\120\01\120\01"+ + "\121\01\121\01\122\01\122\01\123\01\123\01\124\01\124\01\125\01\125"+ + "\01\125\01\126\01\126\01\126\01\127\01\127\01\130\01\130\01\131\01"+ + "\131\01\131\01\131\01\132\01\132\01\132\01\132\01\132\01\132\03\132"+ + "\010\132\01\132\01\132\04\132\010\132\012\132\01\132\01\132\01\132"+ + "\03\132\010\132\01\133\01\133\01\133\01\133\01\133\01\133\05\133\010"+ + "\133\011\133\01\133\03\133\010\133\01\133\01\133\03\133\010\133\01"+ + "\134\01\134\01\134\01\134\04\134\010\134\012\134\01\134\01\134\01"+ + "\134\03\134\010\134\01\135\01\135\01\135\01\135\01\135\01\135\03\135"+ + "\010\135\01\136\01\136\01\136\01\136\03\136\010\136\01\137\01\137"+ + "\04\137\010\137\012\137\01\137\01\137\01\137\01\137\01\137\05\137"+ + "\010\137\011\137\01\137\01\137\01\137\03\137\010\137\01\137\01\137"+ + "\03\137\010\137\01\137\01\137\01\137\01\137\04\137\010\137\012\137"+ + "\01\137\01\137\01\137\03\137\010\137\01\137\01\137\03\137\010\137"+ + "\01\137\01\137\04\137\010\137\012\137\01\137\01\137\01\137\01\137"+ + "\01\137\03\137\010\137\01\137\01\137\04\137\010\137\012\137\01\137"+ + "\01\137\01\137\01\137\01\137\01\137\01\137\01\137\01\137\03\137\010"+ + "\137\01\137\01\137\05\137\010\137\011\137\01\137\01\137\01\137\01"+ + "\137\01\137\05\137\010\137\011\137\01\137\03\137\010\137\01\137\01"+ + "\137\01\137\01\137\03\137\010\137\01\137\01\137\01\137\01\137\03\137"+ + "\010\137\01\137\01\137\04\137\010\137\012\137\01\137\01\137\01\137"+ + "\03\137\010\137\03\137\010\137\01\140\01\140\01\140\01\140\03\140"+ + "\010\140\01\140\01\140\01\140\01\140\03\140\010\140\01\140\01\140"+ + "\04\140\010\140\012\140\01\140\01\141\01\141\01\141\01\141\01\141"+ + "\01\141\01\141\01\141\03\141\010\141\01\142\01\142\01\142\01\142\01"+ + "\142\01\142\03\142\010\142\01\142\01\142\01\143\01\143\01\143\01\143"+ + "\01\143\01\143\05\143\010\143\011\143\01\143\01\143\01\143\01\144"+ + "\01\144\01\144\01\144\01\144\01\144\01\144\01\144\01\144\01\144\01"+ + "\144\01\144\01\144\01\144\01\144\01\144\01\144\01\144\03\144\010\144"+ + "\01\144\01\144\01\144\01\144\03\144\010\144\01\145\01\145\01\145\01"+ + "\145\01\145\01\145\01\145\01\145\01\145\01\145\01\145\01\145\01\145"+ + "\01\145\01\145\01\145\01\145\01\145\03\145\010\145\01\146\01\146\01"+ + "\146\01\146\01\146\01\146\01\146\01\146\01\146\01\146\01\146\01\146"+ + "\01\147\01\147\01\147\01\147\01\147\01\147\01\150\01\150\01\150\01"+ + "\150\01\150\01\150\01\150\01\150\01\151\01\151\01\151\01\151\01\151"+ + "\01\151\05\151\010\151\011\151\01\151\01\152\01\152\01\152\01\152"+ + "\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01"+ + "\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152"+ + "\01\152\01\152\01\152\03\152\010\152\01\153\01\153\01\153\01\153\01"+ + "\153\01\153\01\153\01\153\01\153\01\153\01\153\01\153\01\153\01\153"+ + "\01\153\01\153\01\153\01\153\01\153\01\153\01\153\01\153\01\153\01"+ + "\153\01\153\01\153\01\153\01\153\01\153\01\153\03\153\010\153\01\154"+ + "\01\154\01\154\01\154\01\154\01\154\01\154\01\154\01\154\01\154\04"+ + "\154\010\154\012\154\01\154\01\154\01\155\01\155\01\155\01\155\01"+ + "\155\05\155\010\155\011\155\01\155\01\155\01\155\03\155\010\155\01"+ + "\155\01\155\01\155\01\156\01\156\01\156\01\156\01\157\01\157\01\157"+ + "\01\157\01\160\01\160\01\160\160\02\04\00\04\05\00\06\06\00\010\07"+ + "\00\012\010\00\014\011\00\016\012\00\020\013\00\022\014\00\024\015"+ + "\00\026\016\00\030\017\00\032\020\00\034\021\00\036\022\00\040\023"+ + "\00\042\024\00\044\025\00\046\026\00\050\027\00\052\030\00\054\031"+ + "\00\056\032\00\060\033\00\062\034\00\064\035\00\066\036\00\070\037"+ + "\00\072\040\00\074\041\00\076\042\00\100\043\00\102\044\00\104\045"+ + "\00\106\046\00\110\047\00\112\050\00\114\051\00\116\052\00\120\053"+ + "\00\122\054\00\124\055\00\126\056\00\130\057\00\132\060\00\134\061"+ + "\00\136\062\00\140\063\00\142\064\00\144\065\00\146\066\00\150\067"+ + "\00\152\070\00\154\071\00\156\072\00\160\073\00\162\074\00\164\075"+ + "\00\166\076\00\170\077\00\172\100\00\174\101\00\176\102\00\u0080\103"+ + "\00\u0082\104\00\u0084\105\00\u0086\106\00\u0088\107\00\u008a\110"+ + "\00\u008c\111\00\u008e\112\00\u0090\113\00\u0092\114\00\u0094\115"+ + "\00\u0096\116\00\u0098\117\00\u009a\120\00\u009c\121\00\u009e\122"+ + "\00\u00a0\123\00\u00a2\124\00\u00a4\125\00\u00a6\126\00\u00a8\127"+ + "\00\u00aa\130\00\u00ac\131\00\u00ae\132\00\u00b0\133\00\u00b2\134"+ + "\00\u00b4\135\00\u00b6\136\00\u00b8\137\00\u00ba\uffff\00\u00bc\uffff"+ + "\00\u00be\140\00\u00c0\uffff\00\u00c2\uffff\00\u00c4\141\00\u00c6"+ + "\142\00\u00c8\uffff\00\u00ca\uffff\00\u00cc\uffff\00\u00ce\143\01"+ + "\u00d0\144\02\u00d2\145\00\u00d4\uffff\00\u00d6\uffff\00\u00d8\146"+ + "\03\u00da\147\04\u00dc\150\05\u00de\151\06\u00e0\152\07\02\00\01\03"+ + "\02\047\047\134\134\02\042\042\134\134\02\012\012\015\015\u0471\00"+ + "\02\01\00\00\00\04\01\00\00\00\06\01\00\00\00\010\01\00\00\00\012"+ + "\01\00\00\00\014\01\00\00\00\016\01\00\00\00\020\01\00\00\00\022\01"+ + "\00\00\00\024\01\00\00\00\026\01\00\00\00\030\01\00\00\00\032\01\00"+ + "\00\00\034\01\00\00\00\036\01\00\00\00\040\01\00\00\00\042\01\00\00"+ + "\00\044\01\00\00\00\046\01\00\00\00\050\01\00\00\00\052\01\00\00\00"+ + "\054\01\00\00\00\056\01\00\00\00\060\01\00\00\00\062\01\00\00\00\064"+ + "\01\00\00\00\066\01\00\00\00\070\01\00\00\00\072\01\00\00\00\074\01"+ + "\00\00\00\076\01\00\00\00\100\01\00\00\00\102\01\00\00\00\104\01\00"+ + "\00\00\106\01\00\00\00\110\01\00\00\00\112\01\00\00\00\114\01\00\00"+ + "\00\116\01\00\00\00\120\01\00\00\00\122\01\00\00\00\124\01\00\00\00"+ + "\126\01\00\00\00\130\01\00\00\00\132\01\00\00\00\134\01\00\00\00\136"+ + "\01\00\00\00\140\01\00\00\00\142\01\00\00\00\144\01\00\00\00\146\01"+ + "\00\00\00\150\01\00\00\00\152\01\00\00\00\154\01\00\00\00\156\01\00"+ + "\00\00\160\01\00\00\00\162\01\00\00\00\164\01\00\00\00\166\01\00\00"+ + "\00\170\01\00\00\00\172\01\00\00\00\174\01\00\00\00\176\01\00\00\00"+ + "\u0080\01\00\00\00\u0082\01\00\00\00\u0084\01\00\00\00\u0086\01\00"+ + "\00\00\u0088\01\00\00\00\u008a\01\00\00\00\u008c\01\00\00\00\u008e"+ + "\01\00\00\00\u0090\01\00\00\00\u0092\01\00\00\00\u0094\01\00\00\00"+ + "\u0096\01\00\00\00\u0098\01\00\00\00\u009a\01\00\00\00\u009c\01\00"+ + "\00\00\u009e\01\00\00\00\u00a0\01\00\00\00\u00a2\01\00\00\00\u00a4"+ + "\01\00\00\00\u00a6\01\00\00\00\u00a8\01\00\00\00\u00aa\01\00\00\00"+ + "\u00ac\01\00\00\00\u00ae\01\00\00\00\u00b0\01\00\00\00\u00b2\01\00"+ + "\00\00\u00b4\01\00\00\00\u00b6\01\00\00\00\u00b8\01\00\00\00\u00be"+ + "\01\00\00\00\u00c4\01\00\00\00\u00c6\01\00\00\00\u00ce\01\00\00\00"+ + "\u00d0\01\00\00\00\u00d2\01\00\00\00\u00d8\01\00\00\00\u00da\01\00"+ + "\00\00\u00dc\01\00\00\01\u00de\01\00\00\01\u00e0\01\00\00\02\u00e2"+ + "\01\00\00\04\u00ea\01\00\00\06\u00ec\01\00\00\010\u00f3\01\00\00\012"+ + "\u00fa\01\00\00\014\u00fc\01\00\00\016\u00fe\01\00\00\020\u0105\01"+ + "\00\00\022\u010f\01\00\00\024\u0117\01\00\00\026\u0120\01\00\00\030"+ + "\u0126\01\00\00\032\u012f\01\00\00\034\u0135\01\00\00\036\u013d\01"+ + "\00\00\040\u0148\01\00\00\042\u014a\01\00\00\044\u014c\01\00\00\046"+ + "\u014e\01\00\00\050\u0150\01\00\00\052\u0152\01\00\00\054\u0154\01"+ + "\00\00\056\u015e\01\00\00\060\u0163\01\00\00\062\u0165\01\00\00\064"+ + "\u0167\01\00\00\066\u016e\01\00\00\070\u0170\01\00\00\072\u0177\01"+ + "\00\00\074\u0184\01\00\00\076\u018e\01\00\00\100\u0197\01\00\00\102"+ + "\u019f\01\00\00\104\u01a4\01\00\00\106\u01a9\01\00\00\110\u01af\01"+ + "\00\00\112\u01b3\01\00\00\114\u01b8\01\00\00\116\u01be\01\00\00\120"+ + "\u01c5\01\00\00\122\u01c7\01\00\00\124\u01cd\01\00\00\126\u01cf\01"+ + "\00\00\130\u01d1\01\00\00\132\u01d5\01\00\00\134\u01da\01\00\00\136"+ + "\u01df\01\00\00\140\u01e4\01\00\00\142\u01ea\01\00\00\144\u01ec\01"+ + "\00\00\146\u01f4\01\00\00\150\u01f6\01\00\00\152\u01f9\01\00\00\154"+ + "\u01fe\01\00\00\156\u0202\01\00\00\160\u0208\01\00\00\162\u020b\01"+ + "\00\00\164\u020f\01\00\00\166\u0217\01\00\00\170\u021e\01\00\00\172"+ + "\u0225\01\00\00\174\u022b\01\00\00\176\u0231\01\00\00\u0080\u023a"+ + "\01\00\00\u0082\u0240\01\00\00\u0084\u0245\01\00\00\u0086\u0248\01"+ + "\00\00\u0088\u024b\01\00\00\u008a\u024e\01\00\00\u008c\u0251\01\00"+ + "\00\u008e\u0254\01\00\00\u0090\u0257\01\00\00\u0092\u025a\01\00\00"+ + "\u0094\u025d\01\00\00\u0096\u0260\01\00\00\u0098\u0263\01\00\00\u009a"+ + "\u0265\01\00\00\u009c\u0267\01\00\00\u009e\u026a\01\00\00\u00a0\u026d"+ + "\01\00\00\u00a2\u0278\01\00\00\u00a4\u027a\01\00\00\u00a6\u027c\01"+ + "\00\00\u00a8\u027e\01\00\00\u00aa\u0280\01\00\00\u00ac\u0283\01\00"+ + "\00\u00ae\u0286\01\00\00\u00b0\u0288\01\00\00\u00b2\u028a\01\00\00"+ + "\u00b4\u028e\01\00\00\u00b6\u02aa\01\00\00\u00b8\u02b0\01\00\00\u00ba"+ + "\u02c2\01\00\00\u00bc\u02c8\01\00\00\u00be\u0332\01\00\00\u00c0\u0338"+ + "\01\00\00\u00c2\u034e\01\00\00\u00c4\u0350\01\00\00\u00c6\u035a\01"+ + "\00\00\u00c8\u037e\01\00\00\u00ca\u0392\01\00\00\u00cc\u0394\01\00"+ + "\00\u00ce\u03a0\01\00\00\u00d0\u03a6\01\00\00\u00d2\u03ae\01\00\00"+ + "\u00d4\u03d2\01\00\00\u00d6\u03f2\01\00\00\u00d8\u03fe\01\00\00\u00da"+ + "\u0403\01\00\00\u00dc\u0413\01\00\00\u00de\u0417\01\00\00\u00e0\u041b"+ + "\01\00\00\u00e2\u00e3\05\160\00\u00e3\u00e4\05\141\00\u00e4\u00e5"+ + "\05\143\00\u00e5\u00e6\05\153\00\u00e6\u00e7\05\141\00\u00e7\u00e8"+ + "\05\147\00\u00e8\u00e9\05\145\00\u00e9\03\01\00\00\u00ea\u00eb\05"+ + "\073\00\u00eb\05\01\00\00\u00ec\u00ed\05\151\00\u00ed\u00ee\05\155"+ + "\00\u00ee\u00ef\05\160\00\u00ef\u00f0\05\157\00\u00f0\u00f1\05\162"+ + "\00\u00f1\u00f2\05\164\00\u00f2\07\01\00\00\u00f3\u00f4\05\163\00"+ + "\u00f4\u00f5\05\164\00\u00f5\u00f6\05\141\00\u00f6\u00f7\05\164\00"+ + "\u00f7\u00f8\05\151\00\u00f8\u00f9\05\143\00\u00f9\011\01\00\00\u00fa"+ + "\u00fb\05\056\00\u00fb\013\01\00\00\u00fc\u00fd\05\052\00\u00fd\015"+ + "\01\00\00\u00fe\u00ff\05\160\00\u00ff\u0100\05\165\00\u0100\u0101"+ + "\05\142\00\u0101\u0102\05\154\00\u0102\u0103\05\151\00\u0103\u0104"+ + "\05\143\00\u0104\017\01\00\00\u0105\u0106\05\160\00\u0106\u0107\05"+ + "\162\00\u0107\u0108\05\157\00\u0108\u0109\05\164\00\u0109\u010a\05"+ + "\145\00\u010a\u010b\05\143\00\u010b\u010c\05\164\00\u010c\u010d\05"+ + "\145\00\u010d\u010e\05\144\00\u010e\021\01\00\00\u010f\u0110\05\160"+ + "\00\u0110\u0111\05\162\00\u0111\u0112\05\151\00\u0112\u0113\05\166"+ + "\00\u0113\u0114\05\141\00\u0114\u0115\05\164\00\u0115\u0116\05\145"+ + "\00\u0116\023\01\00\00\u0117\u0118\05\141\00\u0118\u0119\05\142\00"+ + "\u0119\u011a\05\163\00\u011a\u011b\05\164\00\u011b\u011c\05\162\00"+ + "\u011c\u011d\05\141\00\u011d\u011e\05\143\00\u011e\u011f\05\164\00"+ + "\u011f\025\01\00\00\u0120\u0121\05\146\00\u0121\u0122\05\151\00\u0122"+ + "\u0123\05\156\00\u0123\u0124\05\141\00\u0124\u0125\05\154\00\u0125"+ + "\027\01\00\00\u0126\u0127\05\163\00\u0127\u0128\05\164\00\u0128\u0129"+ + "\05\162\00\u0129\u012a\05\151\00\u012a\u012b\05\143\00\u012b\u012c"+ + "\05\164\00\u012c\u012d\05\146\00\u012d\u012e\05\160\00\u012e\031\01"+ + "\00\00\u012f\u0130\05\143\00\u0130\u0131\05\154\00\u0131\u0132\05"+ + "\141\00\u0132\u0133\05\163\00\u0133\u0134\05\163\00\u0134\033\01\00"+ + "\00\u0135\u0136\05\145\00\u0136\u0137\05\170\00\u0137\u0138\05\164"+ + "\00\u0138\u0139\05\145\00\u0139\u013a\05\156\00\u013a\u013b\05\144"+ + "\00\u013b\u013c\05\163\00\u013c\035\01\00\00\u013d\u013e\05\151\00"+ + "\u013e\u013f\05\155\00\u013f\u0140\05\160\00\u0140\u0141\05\154\00"+ + "\u0141\u0142\05\145\00\u0142\u0143\05\155\00\u0143\u0144\05\145\00"+ + "\u0144\u0145\05\156\00\u0145\u0146\05\164\00\u0146\u0147\05\163\00"+ + "\u0147\037\01\00\00\u0148\u0149\05\074\00\u0149\041\01\00\00\u014a"+ + "\u014b\05\054\00\u014b\043\01\00\00\u014c\u014d\05\076\00\u014d\045"+ + "\01\00\00\u014e\u014f\05\046\00\u014f\047\01\00\00\u0150\u0151\05"+ + "\173\00\u0151\051\01\00\00\u0152\u0153\05\175\00\u0153\053\01\00\00"+ + "\u0154\u0155\05\151\00\u0155\u0156\05\156\00\u0156\u0157\05\164\00"+ + "\u0157\u0158\05\145\00\u0158\u0159\05\162\00\u0159\u015a\05\146\00"+ + "\u015a\u015b\05\141\00\u015b\u015c\05\143\00\u015c\u015d\05\145\00"+ + "\u015d\055\01\00\00\u015e\u015f\05\166\00\u015f\u0160\05\157\00\u0160"+ + "\u0161\05\151\00\u0161\u0162\05\144\00\u0162\057\01\00\00\u0163\u0164"+ + "\05\133\00\u0164\061\01\00\00\u0165\u0166\05\135\00\u0166\063\01\00"+ + "\00\u0167\u0168\05\164\00\u0168\u0169\05\150\00\u0169\u016a\05\162"+ + "\00\u016a\u016b\05\157\00\u016b\u016c\05\167\00\u016c\u016d\05\163"+ + "\00\u016d\065\01\00\00\u016e\u016f\05\075\00\u016f\067\01\00\00\u0170"+ + "\u0171\05\156\00\u0171\u0172\05\141\00\u0172\u0173\05\164\00\u0173"+ + "\u0174\05\151\00\u0174\u0175\05\166\00\u0175\u0176\05\145\00\u0176"+ + "\071\01\00\00\u0177\u0178\05\163\00\u0178\u0179\05\171\00\u0179\u017a"+ + "\05\156\00\u017a\u017b\05\143\00\u017b\u017c\05\150\00\u017c\u017d"+ + "\05\162\00\u017d\u017e\05\157\00\u017e\u017f\05\156\00\u017f\u0180"+ + "\05\151\00\u0180\u0181\05\172\00\u0181\u0182\05\145\00\u0182\u0183"+ + "\05\144\00\u0183\073\01\00\00\u0184\u0185\05\164\00\u0185\u0186\05"+ + "\162\00\u0186\u0187\05\141\00\u0187\u0188\05\156\00\u0188\u0189\05"+ + "\163\00\u0189\u018a\05\151\00\u018a\u018b\05\145\00\u018b\u018c\05"+ + "\156\00\u018c\u018d\05\164\00\u018d\075\01\00\00\u018e\u018f\05\166"+ + "\00\u018f\u0190\05\157\00\u0190\u0191\05\154\00\u0191\u0192\05\141"+ + "\00\u0192\u0193\05\164\00\u0193\u0194\05\151\00\u0194\u0195\05\154"+ + "\00\u0195\u0196\05\145\00\u0196\077\01\00\00\u0197\u0198\05\142\00"+ + "\u0198\u0199\05\157\00\u0199\u019a\05\157\00\u019a\u019b\05\154\00"+ + "\u019b\u019c\05\145\00\u019c\u019d\05\141\00\u019d\u019e\05\156\00"+ + "\u019e\101\01\00\00\u019f\u01a0\05\143\00\u01a0\u01a1\05\150\00\u01a1"+ + "\u01a2\05\141\00\u01a2\u01a3\05\162\00\u01a3\103\01\00\00\u01a4\u01a5"+ + "\05\142\00\u01a5\u01a6\05\171\00\u01a6\u01a7\05\164\00\u01a7\u01a8"+ + "\05\145\00\u01a8\105\01\00\00\u01a9\u01aa\05\163\00\u01aa\u01ab\05"+ + "\150\00\u01ab\u01ac\05\157\00\u01ac\u01ad\05\162\00\u01ad\u01ae\05"+ + "\164\00\u01ae\107\01\00\00\u01af\u01b0\05\151\00\u01b0\u01b1\05\156"+ + "\00\u01b1\u01b2\05\164\00\u01b2\111\01\00\00\u01b3\u01b4\05\154\00"+ + "\u01b4\u01b5\05\157\00\u01b5\u01b6\05\156\00\u01b6\u01b7\05\147\00"+ + "\u01b7\113\01\00\00\u01b8\u01b9\05\146\00\u01b9\u01ba\05\154\00\u01ba"+ + "\u01bb\05\157\00\u01bb\u01bc\05\141\00\u01bc\u01bd\05\164\00\u01bd"+ + "\115\01\00\00\u01be\u01bf\05\144\00\u01bf\u01c0\05\157\00\u01c0\u01c1"+ + "\05\165\00\u01c1\u01c2\05\142\00\u01c2\u01c3\05\154\00\u01c3\u01c4"+ + "\05\145\00\u01c4\117\01\00\00\u01c5\u01c6\05\077\00\u01c6\121\01\00"+ + "\00\u01c7\u01c8\05\163\00\u01c8\u01c9\05\165\00\u01c9\u01ca\05\160"+ + "\00\u01ca\u01cb\05\145\00\u01cb\u01cc\05\162\00\u01cc\123\01\00\00"+ + "\u01cd\u01ce\05\050\00\u01ce\125\01\00\00\u01cf\u01d0\05\051\00\u01d0"+ + "\127\01\00\00\u01d1\u01d2\05\056\00\u01d2\u01d3\05\056\00\u01d3\u01d4"+ + "\05\056\00\u01d4\131\01\00\00\u01d5\u01d6\05\164\00\u01d6\u01d7\05"+ + "\150\00\u01d7\u01d8\05\151\00\u01d8\u01d9\05\163\00\u01d9\133\01\00"+ + "\00\u01da\u01db\05\156\00\u01db\u01dc\05\165\00\u01dc\u01dd\05\154"+ + "\00\u01dd\u01de\05\154\00\u01de\135\01\00\00\u01df\u01e0\05\164\00"+ + "\u01e0\u01e1\05\162\00\u01e1\u01e2\05\165\00\u01e2\u01e3\05\145\00"+ + "\u01e3\137\01\00\00\u01e4\u01e5\05\146\00\u01e5\u01e6\05\141\00\u01e6"+ + "\u01e7\05\154\00\u01e7\u01e8\05\163\00\u01e8\u01e9\05\145\00\u01e9"+ + "\141\01\00\00\u01ea\u01eb\05\100\00\u01eb\143\01\00\00\u01ec\u01ed"+ + "\05\144\00\u01ed\u01ee\05\145\00\u01ee\u01ef\05\146\00\u01ef\u01f0"+ + "\05\141\00\u01f0\u01f1\05\165\00\u01f1\u01f2\05\154\00\u01f2\u01f3"+ + "\05\164\00\u01f3\145\01\00\00\u01f4\u01f5\05\072\00\u01f5\147\01\00"+ + "\00\u01f6\u01f7\05\151\00\u01f7\u01f8\05\146\00\u01f8\151\01\00\00"+ + "\u01f9\u01fa\05\145\00\u01fa\u01fb\05\154\00\u01fb\u01fc\05\163\00"+ + "\u01fc\u01fd\05\145\00\u01fd\153\01\00\00\u01fe\u01ff\05\146\00\u01ff"+ + "\u0200\05\157\00\u0200\u0201\05\162\00\u0201\155\01\00\00\u0202\u0203"+ + "\05\167\00\u0203\u0204\05\150\00\u0204\u0205\05\151\00\u0205\u0206"+ + "\05\154\00\u0206\u0207\05\145\00\u0207\157\01\00\00\u0208\u0209\05"+ + "\144\00\u0209\u020a\05\157\00\u020a\161\01\00\00\u020b\u020c\05\164"+ + "\00\u020c\u020d\05\162\00\u020d\u020e\05\171\00\u020e\163\01\00\00"+ + "\u020f\u0210\05\146\00\u0210\u0211\05\151\00\u0211\u0212\05\156\00"+ + "\u0212\u0213\05\141\00\u0213\u0214\05\154\00\u0214\u0215\05\154\00"+ + "\u0215\u0216\05\171\00\u0216\165\01\00\00\u0217\u0218\05\163\00\u0218"+ + "\u0219\05\167\00\u0219\u021a\05\151\00\u021a\u021b\05\164\00\u021b"+ + "\u021c\05\143\00\u021c\u021d\05\150\00\u021d\167\01\00\00\u021e\u021f"+ + "\05\162\00\u021f\u0220\05\145\00\u0220\u0221\05\164\00\u0221\u0222"+ + "\05\165\00\u0222\u0223\05\162\00\u0223\u0224\05\156\00\u0224\171\01"+ + "\00\00\u0225\u0226\05\164\00\u0226\u0227\05\150\00\u0227\u0228\05"+ + "\162\00\u0228\u0229\05\157\00\u0229\u022a\05\167\00\u022a\173\01\00"+ + "\00\u022b\u022c\05\142\00\u022c\u022d\05\162\00\u022d\u022e\05\145"+ + "\00\u022e\u022f\05\141\00\u022f\u0230\05\153\00\u0230\175\01\00\00"+ + "\u0231\u0232\05\143\00\u0232\u0233\05\157\00\u0233\u0234\05\156\00"+ + "\u0234\u0235\05\164\00\u0235\u0236\05\151\00\u0236\u0237\05\156\00"+ + "\u0237\u0238\05\165\00\u0238\u0239\05\145\00\u0239\177\01\00\00\u023a"+ + "\u023b\05\143\00\u023b\u023c\05\141\00\u023c\u023d\05\164\00\u023d"+ + "\u023e\05\143\00\u023e\u023f\05\150\00\u023f\u0081\01\00\00\u0240"+ + "\u0241\05\143\00\u0241\u0242\05\141\00\u0242\u0243\05\163\00\u0243"+ + "\u0244\05\145\00\u0244\u0083\01\00\00\u0245\u0246\05\053\00\u0246"+ + "\u0247\05\075\00\u0247\u0085\01\00\00\u0248\u0249\05\055\00\u0249"+ + "\u024a\05\075\00\u024a\u0087\01\00\00\u024b\u024c\05\052\00\u024c"+ + "\u024d\05\075\00\u024d\u0089\01\00\00\u024e\u024f\05\057\00\u024f"+ + "\u0250\05\075\00\u0250\u008b\01\00\00\u0251\u0252\05\046\00\u0252"+ + "\u0253\05\075\00\u0253\u008d\01\00\00\u0254\u0255\05\174\00\u0255"+ + "\u0256\05\075\00\u0256\u008f\01\00\00\u0257\u0258\05\136\00\u0258"+ + "\u0259\05\075\00\u0259\u0091\01\00\00\u025a\u025b\05\045\00\u025b"+ + "\u025c\05\075\00\u025c\u0093\01\00\00\u025d\u025e\05\174\00\u025e"+ + "\u025f\05\174\00\u025f\u0095\01\00\00\u0260\u0261\05\046\00\u0261"+ + "\u0262\05\046\00\u0262\u0097\01\00\00\u0263\u0264\05\174\00\u0264"+ + "\u0099\01\00\00\u0265\u0266\05\136\00\u0266\u009b\01\00\00\u0267\u0268"+ + "\05\075\00\u0268\u0269\05\075\00\u0269\u009d\01\00\00\u026a\u026b"+ + "\05\041\00\u026b\u026c\05\075\00\u026c\u009f\01\00\00\u026d\u026e"+ + "\05\151\00\u026e\u026f\05\156\00\u026f\u0270\05\163\00\u0270\u0271"+ + "\05\164\00\u0271\u0272\05\141\00\u0272\u0273\05\156\00\u0273\u0274"+ + "\05\143\00\u0274\u0275\05\145\00\u0275\u0276\05\157\00\u0276\u0277"+ + "\05\146\00\u0277\u00a1\01\00\00\u0278\u0279\05\053\00\u0279\u00a3"+ + "\01\00\00\u027a\u027b\05\055\00\u027b\u00a5\01\00\00\u027c\u027d\05"+ + "\057\00\u027d\u00a7\01\00\00\u027e\u027f\05\045\00\u027f\u00a9\01"+ + "\00\00\u0280\u0281\05\053\00\u0281\u0282\05\053\00\u0282\u00ab\01"+ + "\00\00\u0283\u0284\05\055\00\u0284\u0285\05\055\00\u0285\u00ad\01"+ + "\00\00\u0286\u0287\05\176\00\u0287\u00af\01\00\00\u0288\u0289\05\041"+ + "\00\u0289\u00b1\01\00\00\u028a\u028b\05\156\00\u028b\u028c\05\145"+ + "\00\u028c\u028d\05\167\00\u028d\u00b3\01\00\00\u028e\u028f\05\060"+ + "\00\u028f\u0294\01\00\00\u0290\u0291\05\170\00\u0291\u0295\01\00\00"+ + "\u0292\u0293\05\130\00\u0293\u0295\01\00\00\u0294\u0290\01\00\00\u0294"+ + "\u0292\01\00\00\u0295\u0298\01\00\00\u0296\u0297\03\u00ba\135\u0297"+ + "\u0299\01\00\00\u0298\u0296\01\00\00\u0299\u029a\01\00\00\u029a\u0296"+ + "\01\00\00\u029a\u029b\01\00\00\u029b\u029e\01\00\00\u029c\u029d\03"+ + "\u00bc\136\u029d\u029f\01\00\00\u029e\u029c\01\00\00\u029e\u029f\01"+ + "\00\00\u029f\u00b5\01\00\00\u02a0\u02a1\05\060\00\u02a1\u02ab\01\00"+ + "\00\u02a2\u02a3\02\061\071\u02a3\u02a6\01\00\00\u02a4\u02a5\02\060"+ + "\071\u02a5\u02a7\01\00\00\u02a6\u02a4\01\00\00\u02a6\u02a9\01\00\00"+ + "\u02a7\u02a8\01\00\00\u02a8\u02a6\01\00\00\u02a9\u02ab\01\00\00\u02aa"+ + "\u02a0\01\00\00\u02aa\u02a2\01\00\00\u02ab\u02ae\01\00\00\u02ac\u02ad"+ + "\03\u00bc\136\u02ad\u02af\01\00\00\u02ae\u02ac\01\00\00\u02ae\u02af"+ + "\01\00\00\u02af\u00b7\01\00\00\u02b0\u02b1\05\060\00\u02b1\u02b4\01"+ + "\00\00\u02b2\u02b3\02\060\067\u02b3\u02b5\01\00\00\u02b4\u02b2\01"+ + "\00\00\u02b5\u02b6\01\00\00\u02b6\u02b2\01\00\00\u02b6\u02b7\01\00"+ + "\00\u02b7\u02ba\01\00\00\u02b8\u02b9\03\u00bc\136\u02b9\u02bb\01\00"+ + "\00\u02ba\u02b8\01\00\00\u02ba\u02bb\01\00\00\u02bb\u00b9\01\00\00"+ + "\u02bc\u02bd\02\060\071\u02bd\u02c3\01\00\00\u02be\u02bf\02\141\146"+ + "\u02bf\u02c3\01\00\00\u02c0\u02c1\02\101\106\u02c1\u02c3\01\00\00"+ + "\u02c2\u02bc\01\00\00\u02c2\u02be\01\00\00\u02c2\u02c0\01\00\00\u02c3"+ + "\u00bb\01\00\00\u02c4\u02c5\05\154\00\u02c5\u02c9\01\00\00\u02c6\u02c7"+ + "\05\114\00\u02c7\u02c9\01\00\00\u02c8\u02c4\01\00\00\u02c8\u02c6\01"+ + "\00\00\u02c9\u00bd\01\00\00\u02ca\u02cb\02\060\071\u02cb\u02cd\01"+ + "\00\00\u02cc\u02ca\01\00\00\u02cd\u02ce\01\00\00\u02ce\u02ca\01\00"+ + "\00\u02ce\u02cf\01\00\00\u02cf\u02d0\01\00\00\u02d0\u02d1\05\056\00"+ + "\u02d1\u02d4\01\00\00\u02d2\u02d3\02\060\071\u02d3\u02d5\01\00\00"+ + "\u02d4\u02d2\01\00\00\u02d4\u02d7\01\00\00\u02d5\u02d6\01\00\00\u02d6"+ + "\u02d4\01\00\00\u02d7\u02da\01\00\00\u02d8\u02d9\03\u00c0\140\u02d9"+ + "\u02db\01\00\00\u02da\u02d8\01\00\00\u02da\u02db\01\00\00\u02db\u02de"+ + "\01\00\00\u02dc\u02dd\03\u00c2\141\u02dd\u02df\01\00\00\u02de\u02dc"+ + "\01\00\00\u02de\u02df\01\00\00\u02df\u0333\01\00\00\u02e0\u02e1\05"+ + "\056\00\u02e1\u02e4\01\00\00\u02e2\u02e3\02\060\071\u02e3\u02e5\01"+ + "\00\00\u02e4\u02e2\01\00\00\u02e5\u02e6\01\00\00\u02e6\u02e2\01\00"+ + "\00\u02e6\u02e7\01\00\00\u02e7\u02ea\01\00\00\u02e8\u02e9\03\u00c0"+ + "\140\u02e9\u02eb\01\00\00\u02ea\u02e8\01\00\00\u02ea\u02eb\01\00\00"+ + "\u02eb\u02ee\01\00\00\u02ec\u02ed\03\u00c2\141\u02ed\u02ef\01\00\00"+ + "\u02ee\u02ec\01\00\00\u02ee\u02ef\01\00\00\u02ef\u0333\01\00\00\u02f0"+ + "\u02f1\02\060\071\u02f1\u02f3\01\00\00\u02f2\u02f0\01\00\00\u02f3"+ + "\u02f4\01\00\00\u02f4\u02f0\01\00\00\u02f4\u02f5\01\00\00\u02f5\u02f6"+ + "\01\00\00\u02f6\u02f7\03\u00c0\140\u02f7\u02fa\01\00\00\u02f8\u02f9"+ + "\03\u00c2\141\u02f9\u02fb\01\00\00\u02fa\u02f8\01\00\00\u02fa\u02fb"+ + "\01\00\00\u02fb\u0333\01\00\00\u02fc\u02fd\02\060\071\u02fd\u02ff"+ + "\01\00\00\u02fe\u02fc\01\00\00\u02ff\u0300\01\00\00\u0300\u02fc\01"+ + "\00\00\u0300\u0301\01\00\00\u0301\u0302\01\00\00\u0302\u0303\03\u00c2"+ + "\141\u0303\u0333\01\00\00\u0304\u0305\05\060\00\u0305\u0306\05\170"+ + "\00\u0306\u030b\01\00\00\u0307\u0308\05\060\00\u0308\u0309\05\130"+ + "\00\u0309\u030b\01\00\00\u030a\u0304\01\00\00\u030a\u0307\01\00\00"+ + "\u030b\u030e\01\00\00\u030c\u030d\03\u00ba\135\u030d\u030f\01\00\00"+ + "\u030e\u030c\01\00\00\u030e\u0311\01\00\00\u030f\u0310\01\00\00\u0310"+ + "\u030e\01\00\00\u0311\u031a\01\00\00\u0312\u0313\05\056\00\u0313\u0316"+ + "\01\00\00\u0314\u0315\03\u00ba\135\u0315\u0317\01\00\00\u0316\u0314"+ + "\01\00\00\u0316\u0319\01\00\00\u0317\u0318\01\00\00\u0318\u0316\01"+ + "\00\00\u0319\u031b\01\00\00\u031a\u0312\01\00\00\u031a\u031b\01\00"+ + "\00\u031b\u0320\01\00\00\u031c\u031d\05\160\00\u031d\u0321\01\00\00"+ + "\u031e\u031f\05\120\00\u031f\u0321\01\00\00\u0320\u031c\01\00\00\u0320"+ + "\u031e\01\00\00\u0321\u0326\01\00\00\u0322\u0323\05\053\00\u0323\u0327"+ + "\01\00\00\u0324\u0325\05\055\00\u0325\u0327\01\00\00\u0326\u0322\01"+ + "\00\00\u0326\u0324\01\00\00\u0326\u0327\01\00\00\u0327\u032a\01\00"+ + "\00\u0328\u0329\02\060\071\u0329\u032b\01\00\00\u032a\u0328\01\00"+ + "\00\u032b\u032c\01\00\00\u032c\u0328\01\00\00\u032c\u032d\01\00\00"+ + "\u032d\u0330\01\00\00\u032e\u032f\03\u00c2\141\u032f\u0331\01\00\00"+ + "\u0330\u032e\01\00\00\u0330\u0331\01\00\00\u0331\u0333\01\00\00\u0332"+ + "\u02cc\01\00\00\u0332\u02e0\01\00\00\u0332\u02f2\01\00\00\u0332\u02fe"+ + "\01\00\00\u0332\u030a\01\00\00\u0333\u00bf\01\00\00\u0334\u0335\05"+ + "\145\00\u0335\u0339\01\00\00\u0336\u0337\05\105\00\u0337\u0339\01"+ + "\00\00\u0338\u0334\01\00\00\u0338\u0336\01\00\00\u0339\u033e\01\00"+ + "\00\u033a\u033b\05\053\00\u033b\u033f\01\00\00\u033c\u033d\05\055"+ + "\00\u033d\u033f\01\00\00\u033e\u033a\01\00\00\u033e\u033c\01\00\00"+ + "\u033e\u033f\01\00\00\u033f\u0342\01\00\00\u0340\u0341\02\060\071"+ + "\u0341\u0343\01\00\00\u0342\u0340\01\00\00\u0343\u0344\01\00\00\u0344"+ + "\u0340\01\00\00\u0344\u0345\01\00\00\u0345\u00c1\01\00\00\u0346\u0347"+ + "\05\146\00\u0347\u034f\01\00\00\u0348\u0349\05\106\00\u0349\u034f"+ + "\01\00\00\u034a\u034b\05\144\00\u034b\u034f\01\00\00\u034c\u034d\05"+ + "\104\00\u034d\u034f\01\00\00\u034e\u0346\01\00\00\u034e\u0348\01\00"+ + "\00\u034e\u034a\01\00\00\u034e\u034c\01\00\00\u034f\u00c3\01\00\00"+ + "\u0350\u0351\05\047\00\u0351\u0356\01\00\00\u0352\u0353\03\u00c8\144"+ + "\u0353\u0357\01\00\00\u0354\u0355\012\00\00\u0355\u0357\01\00\00\u0356"+ + "\u0352\01\00\00\u0356\u0354\01\00\00\u0357\u0358\01\00\00\u0358\u0359"+ + "\05\047\00\u0359\u00c5\01\00\00\u035a\u035b\05\042\00\u035b\u0360"+ + "\01\00\00\u035c\u035d\03\u00c8\144\u035d\u0361\01\00\00\u035e\u035f"+ + "\012\01\00\u035f\u0361\01\00\00\u0360\u035c\01\00\00\u0360\u035e\01"+ + "\00\00\u0360\u0363\01\00\00\u0361\u0362\01\00\00\u0362\u0360\01\00"+ + "\00\u0363\u0364\01\00\00\u0364\u0365\05\042\00\u0365\u00c7\01\00\00"+ + "\u0366\u0367\05\134\00\u0367\u0378\01\00\00\u0368\u0369\05\142\00"+ + "\u0369\u0379\01\00\00\u036a\u036b\05\164\00\u036b\u0379\01\00\00\u036c"+ + "\u036d\05\156\00\u036d\u0379\01\00\00\u036e\u036f\05\146\00\u036f"+ + "\u0379\01\00\00\u0370\u0371\05\162\00\u0371\u0379\01\00\00\u0372\u0373"+ + "\05\042\00\u0373\u0379\01\00\00\u0374\u0375\05\047\00\u0375\u0379"+ + "\01\00\00\u0376\u0377\05\134\00\u0377\u0379\01\00\00\u0378\u0368\01"+ + "\00\00\u0378\u036a\01\00\00\u0378\u036c\01\00\00\u0378\u036e\01\00"+ + "\00\u0378\u0370\01\00\00\u0378\u0372\01\00\00\u0378\u0374\01\00\00"+ + "\u0378\u0376\01\00\00\u0379\u037f\01\00\00\u037a\u037b\03\u00cc\146"+ + "\u037b\u037f\01\00\00\u037c\u037d\03\u00ca\145\u037d\u037f\01\00\00"+ + "\u037e\u0366\01\00\00\u037e\u037a\01\00\00\u037e\u037c\01\00\00\u037f"+ + "\u00c9\01\00\00\u0380\u0381\05\134\00\u0381\u0382\01\00\00\u0382\u0383"+ + "\02\060\063\u0383\u0384\01\00\00\u0384\u0385\02\060\067\u0385\u0386"+ + "\01\00\00\u0386\u0387\02\060\067\u0387\u0393\01\00\00\u0388\u0389"+ + "\05\134\00\u0389\u038a\01\00\00\u038a\u038b\02\060\067\u038b\u038c"+ + "\01\00\00\u038c\u038d\02\060\067\u038d\u0393\01\00\00\u038e\u038f"+ + "\05\134\00\u038f\u0390\01\00\00\u0390\u0391\02\060\067\u0391\u0393"+ + "\01\00\00\u0392\u0380\01\00\00\u0392\u0388\01\00\00\u0392\u038e\01"+ + "\00\00\u0393\u00cb\01\00\00\u0394\u0395\05\134\00\u0395\u0396\01\00"+ + "\00\u0396\u0397\05\165\00\u0397\u0398\01\00\00\u0398\u0399\03\u00ba"+ + "\135\u0399\u039a\01\00\00\u039a\u039b\03\u00ba\135\u039b\u039c\01"+ + "\00\00\u039c\u039d\03\u00ba\135\u039d\u039e\01\00\00\u039e\u039f\03"+ + "\u00ba\135\u039f\u00cd\01\00\00\u03a0\u03a1\05\145\00\u03a1\u03a2"+ + "\05\156\00\u03a2\u03a3\05\165\00\u03a3\u03a4\05\155\00\u03a4\u03a5"+ + "\01\00\00\u03a5\u00cf\01\00\00\u03a6\u03a7\05\141\00\u03a7\u03a8\05"+ + "\163\00\u03a8\u03a9\05\163\00\u03a9\u03aa\05\145\00\u03aa\u03ab\05"+ + "\162\00\u03ab\u03ac\05\164\00\u03ac\u03ad\01\00\00\u03ad\u00d1\01"+ + "\00\00\u03ae\u03af\03\u00d4\152\u03af\u03b4\01\00\00\u03b0\u03b1\03"+ + "\u00d4\152\u03b1\u03b5\01\00\00\u03b2\u03b3\03\u00d6\153\u03b3\u03b5"+ + "\01\00\00\u03b4\u03b0\01\00\00\u03b4\u03b2\01\00\00\u03b4\u03b7\01"+ + "\00\00\u03b5\u03b6\01\00\00\u03b6\u03b4\01\00\00\u03b7\u00d3\01\00"+ + "\00\u03b8\u03b9\05\044\00\u03b9\u03d3\01\00\00\u03ba\u03bb\02\101"+ + "\132\u03bb\u03d3\01\00\00\u03bc\u03bd\05\137\00\u03bd\u03d3\01\00"+ + "\00\u03be\u03bf\02\141\172\u03bf\u03d3\01\00\00\u03c0\u03c1\02\u00c0"+ + "\u00d6\u03c1\u03d3\01\00\00\u03c2\u03c3\02\u00d8\u00f6\u03c3\u03d3"+ + "\01\00\00\u03c4\u03c5\02\u00f8\u00ff\u03c5\u03d3\01\00\00\u03c6\u03c7"+ + "\02\u0100\u1fff\u03c7\u03d3\01\00\00\u03c8\u03c9\02\u3040\u318f\u03c9"+ + "\u03d3\01\00\00\u03ca\u03cb\02\u3300\u337f\u03cb\u03d3\01\00\00\u03cc"+ + "\u03cd\02\u3400\u3d2d\u03cd\u03d3\01\00\00\u03ce\u03cf\02\u4e00\u9fff"+ + "\u03cf\u03d3\01\00\00\u03d0\u03d1\02\uf900\ufaff\u03d1\u03d3\01\00"+ + "\00\u03d2\u03b8\01\00\00\u03d2\u03ba\01\00\00\u03d2\u03bc\01\00\00"+ + "\u03d2\u03be\01\00\00\u03d2\u03c0\01\00\00\u03d2\u03c2\01\00\00\u03d2"+ + "\u03c4\01\00\00\u03d2\u03c6\01\00\00\u03d2\u03c8\01\00\00\u03d2\u03ca"+ + "\01\00\00\u03d2\u03cc\01\00\00\u03d2\u03ce\01\00\00\u03d2\u03d0\01"+ + "\00\00\u03d3\u00d5\01\00\00\u03d4\u03d5\02\060\071\u03d5\u03f3\01"+ + "\00\00\u03d6\u03d7\02\u0660\u0669\u03d7\u03f3\01\00\00\u03d8\u03d9"+ + "\02\u06f0\u06f9\u03d9\u03f3\01\00\00\u03da\u03db\02\u0966\u096f\u03db"+ + "\u03f3\01\00\00\u03dc\u03dd\02\u09e6\u09ef\u03dd\u03f3\01\00\00\u03de"+ + "\u03df\02\u0a66\u0a6f\u03df\u03f3\01\00\00\u03e0\u03e1\02\u0ae6\u0aef"+ + "\u03e1\u03f3\01\00\00\u03e2\u03e3\02\u0b66\u0b6f\u03e3\u03f3\01\00"+ + "\00\u03e4\u03e5\02\u0be7\u0bef\u03e5\u03f3\01\00\00\u03e6\u03e7\02"+ + "\u0c66\u0c6f\u03e7\u03f3\01\00\00\u03e8\u03e9\02\u0ce6\u0cef\u03e9"+ + "\u03f3\01\00\00\u03ea\u03eb\02\u0d66\u0d6f\u03eb\u03f3\01\00\00\u03ec"+ + "\u03ed\02\u0e50\u0e59\u03ed\u03f3\01\00\00\u03ee\u03ef\02\u0ed0\u0ed9"+ + "\u03ef\u03f3\01\00\00\u03f0\u03f1\02\u1040\u1049\u03f1\u03f3\01\00"+ + "\00\u03f2\u03d4\01\00\00\u03f2\u03d6\01\00\00\u03f2\u03d8\01\00\00"+ + "\u03f2\u03da\01\00\00\u03f2\u03dc\01\00\00\u03f2\u03de\01\00\00\u03f2"+ + "\u03e0\01\00\00\u03f2\u03e2\01\00\00\u03f2\u03e4\01\00\00\u03f2\u03e6"+ + "\01\00\00\u03f2\u03e8\01\00\00\u03f2\u03ea\01\00\00\u03f2\u03ec\01"+ + "\00\00\u03f2\u03ee\01\00\00\u03f2\u03f0\01\00\00\u03f3\u00d7\01\00"+ + "\00\u03f4\u03f5\05\040\00\u03f5\u03ff\01\00\00\u03f6\u03f7\05\015"+ + "\00\u03f7\u03ff\01\00\00\u03f8\u03f9\05\011\00\u03f9\u03ff\01\00\00"+ + "\u03fa\u03fb\05\014\00\u03fb\u03ff\01\00\00\u03fc\u03fd\05\012\00"+ + "\u03fd\u03ff\01\00\00\u03fe\u03f4\01\00\00\u03fe\u03f6\01\00\00\u03fe"+ + "\u03f8\01\00\00\u03fe\u03fa\01\00\00\u03fe\u03fc\01\00\00\u03ff\u0400"+ + "\01\00\00\u0400\u03f4\01\00\00\u0400\u03f6\01\00\00\u0400\u03f8\01"+ + "\00\00\u0400\u03fa\01\00\00\u0400\u03fc\01\00\00\u0400\u0401\01\00"+ + "\00\u0401\u0402\01\00\00\u0402\u00d9\01\00\00\u0403\u0404\05\057\00"+ + "\u0404\u0405\05\057\00\u0405\u0408\01\00\00\u0406\u0407\012\02\00"+ + "\u0407\u0409\01\00\00\u0408\u0406\01\00\00\u0408\u040b\01\00\00\u0409"+ + "\u040a\01\00\00\u040a\u0408\01\00\00\u040b\u040e\01\00\00\u040c\u040d"+ + "\05\015\00\u040d\u040f\01\00\00\u040e\u040c\01\00\00\u040e\u040f\01"+ + "\00\00\u040f\u0410\01\00\00\u0410\u0411\05\012\00\u0411\u0412\01\00"+ + "\00\u0412\u00db\01\00\00\u0413\u0414\05\057\00\u0414\u0415\05\052"+ + "\00\u0415\u0416\01\00\00\u0416\u00dd\01\00\00\u0417\u0418\05\052\00"+ + "\u0418\u0419\05\057\00\u0419\u041a\01\00\00\u041a\u00df\01\00\00\u041b"+ + "\u041c\013\00\00\u041c\u041d\01\00\00\u041d\u00e1\01\00\00\100\00"+ + "\01\u0294\u0298\u0298\u029a\u029e\u02a6\u02aa\u02ae\u02b4\u02b4\u02b6"+ + "\u02ba\u02c2\u02c8\u02cc\u02cc\u02ce\u02d4\u02da\u02de\u02e4\u02e4"+ + "\u02e6\u02ea\u02ee\u02f2\u02f2\u02f4\u02fa\u02fe\u02fe\u0300\u030a"+ + "\u030e\u0316\u031a\u0320\u0326\u032a\u032a\u032c\u0330\u0332\u0338"+ + "\u033e\u0342\u0342\u0344\u034e\u0356\u0360\u0378\u037e\u0392\u03b4"+ + "\u03d2\u03f2\u03fe\u03fe\u0400\u0408\u040e"; + public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); + static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); + } +} \ No newline at end of file diff --git a/tool/playground/JavaParser.g b/tool/playground/JavaParser.g new file mode 100644 index 000000000..fdd6ccdb6 --- /dev/null +++ b/tool/playground/JavaParser.g @@ -0,0 +1,756 @@ +ūparser grammar JavaParser; +options {backtrack=true; memoize=true; tokenVocab=JavaLexer;} + +// starting point for parsing a java file +/* The annotations are separated out to make parsing faster, but must be associated with + a packageDeclaration or a typeDeclaration (and not an empty one). */ +compilationUnit + : annotations + ( packageDeclaration importDeclaration* typeDeclaration* + | classOrInterfaceDeclaration typeDeclaration* + ) + | packageDeclaration? importDeclaration* typeDeclaration* + ; + +packageDeclaration + : 'package' qualifiedName ';' + ; + +importDeclaration + : 'import' 'static'? qualifiedName ('.' '*')? ';' + ; + +typeDeclaration + : classOrInterfaceDeclaration + | ';' + ; + +classOrInterfaceDeclaration + : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) + ; + +classOrInterfaceModifiers + : classOrInterfaceModifier* + ; + +classOrInterfaceModifier + : annotation // class or interface + | 'public' // class or interface + | 'protected' // class or interface + | 'private' // class or interface + | 'abstract' // class or interface + | 'static' // class or interface + | 'final' // class only -- does not apply to interfaces + | 'strictfp' // class or interface + ; + +modifiers + : modifier* + ; + +classDeclaration + : normalClassDeclaration + | enumDeclaration + ; + +normalClassDeclaration + : 'class' Identifier typeParameters? + ('extends' type)? + ('implements' typeList)? + classBody + ; + +typeParameters + : '<' typeParameter (',' typeParameter)* '>' + ; + +typeParameter + : Identifier ('extends' typeBound)? + ; + +typeBound + : type ('&' type)* + ; + +enumDeclaration + : ENUM Identifier ('implements' typeList)? enumBody + ; + +enumBody + : '{' enumConstants? ','? enumBodyDeclarations? '}' + ; + +enumConstants + : enumConstant (',' enumConstant)* + ; + +enumConstant + : annotations? Identifier arguments? classBody? + ; + +enumBodyDeclarations + : ';' (classBodyDeclaration)* + ; + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationTypeDeclaration + ; + +normalInterfaceDeclaration + : 'interface' Identifier typeParameters? ('extends' typeList)? interfaceBody + ; + +typeList + : type (',' type)* + ; + +classBody + : '{' classBodyDeclaration* '}' + ; + +interfaceBody + : '{' interfaceBodyDeclaration* '}' + ; + +classBodyDeclaration + : ';' + | 'static'? block + | modifiers memberDecl + ; + +memberDecl + : genericMethodOrConstructorDecl + | memberDeclaration + | 'void' Identifier voidMethodDeclaratorRest + | Identifier constructorDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +memberDeclaration + : type (methodDeclaration | fieldDeclaration) + ; + +genericMethodOrConstructorDecl + : typeParameters genericMethodOrConstructorRest + ; + +genericMethodOrConstructorRest + : (type | 'void') Identifier methodDeclaratorRest + | Identifier constructorDeclaratorRest + ; + +methodDeclaration + : Identifier methodDeclaratorRest + ; + +fieldDeclaration + : variableDeclarators ';' + ; + +interfaceBodyDeclaration + : modifiers interfaceMemberDecl + | ';' + ; + +interfaceMemberDecl + : interfaceMethodOrFieldDecl + | interfaceGenericMethodDecl + | 'void' Identifier voidInterfaceMethodDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +interfaceMethodOrFieldDecl + : type Identifier interfaceMethodOrFieldRest + ; + +interfaceMethodOrFieldRest + : constantDeclaratorsRest ';' + | interfaceMethodDeclaratorRest + ; + +methodDeclaratorRest + : formalParameters ('[' ']')* + ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +voidMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +interfaceMethodDeclaratorRest + : formalParameters ('[' ']')* ('throws' qualifiedNameList)? ';' + ; + +interfaceGenericMethodDecl + : typeParameters (type | 'void') Identifier + interfaceMethodDeclaratorRest + ; + +voidInterfaceMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? ';' + ; + +constructorDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? constructorBody + ; + +constantDeclarator + : Identifier constantDeclaratorRest + ; + +variableDeclarators + : variableDeclarator (',' variableDeclarator)* + ; + +variableDeclarator + : variableDeclaratorId ('=' variableInitializer)? + ; + +constantDeclaratorsRest + : constantDeclaratorRest (',' constantDeclarator)* + ; + +constantDeclaratorRest + : ('[' ']')* '=' variableInitializer + ; + +variableDeclaratorId + : Identifier ('[' ']')* + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayInitializer + : '{' (variableInitializer (',' variableInitializer)* (',')? )? '}' + ; + +modifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'abstract' + | 'final' + | 'native' + | 'synchronized' + | 'transient' + | 'volatile' + | 'strictfp' + ; + +packageOrTypeName + : qualifiedName + ; + +enumConstantName + : Identifier + ; + +typeName + : qualifiedName + ; + +type + : classOrInterfaceType ('[' ']')* + | primitiveType ('[' ']')* + ; + +classOrInterfaceType + : Identifier typeArguments? ('.' Identifier typeArguments? )* + ; + +primitiveType + : 'boolean' + | 'char' + | 'byte' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + ; + +variableModifier + : 'final' + | annotation + ; + +typeArguments + : '<' typeArgument (',' typeArgument)* '>' + ; + +typeArgument + : type + | '?' (('extends' | 'super') type)? + ; + +qualifiedNameList + : qualifiedName (',' qualifiedName)* + ; + +formalParameters + : '(' formalParameterDecls? ')' + ; + +formalParameterDecls + : variableModifiers type formalParameterDeclsRest + ; + +formalParameterDeclsRest + : variableDeclaratorId (',' formalParameterDecls)? + | '...' variableDeclaratorId + ; + +methodBody + : block + ; + +constructorBody + : '{' explicitConstructorInvocation? blockStatement* '}' + ; + +explicitConstructorInvocation + : nonWildcardTypeArguments? ('this' | 'super') arguments ';' + | primary '.' nonWildcardTypeArguments? 'super' arguments ';' + ; + + +qualifiedName + : Identifier ('.' Identifier)* + ; + +literal + : integerLiteral + | FloatingPointLiteral + | CharacterLiteral + | StringLiteral + | booleanLiteral + | 'null' + ; + +integerLiteral + : HexLiteral + | OctalLiteral + | DecimalLiteral + ; + +booleanLiteral + : 'true' + | 'false' + ; + +// ANNOTATIONS + +annotations + : annotation+ + ; + +annotation + : '@' annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? + ; + +annotationName + : Identifier ('.' Identifier)* + ; + +elementValuePairs + : elementValuePair (',' elementValuePair)* + ; + +elementValuePair + : Identifier '=' elementValue + ; + +elementValue + : conditionalExpression + | annotation + | elementValueArrayInitializer + ; + +elementValueArrayInitializer + : '{' (elementValue (',' elementValue)*)? (',')? '}' + ; + +annotationTypeDeclaration + : '@' 'interface' Identifier annotationTypeBody + ; + +annotationTypeBody + : '{' (annotationTypeElementDeclaration)* '}' + ; + +annotationTypeElementDeclaration + : modifiers annotationTypeElementRest + ; + +annotationTypeElementRest + : type annotationMethodOrConstantRest ';' + | normalClassDeclaration ';'? + | normalInterfaceDeclaration ';'? + | enumDeclaration ';'? + | annotationTypeDeclaration ';'? + ; + +annotationMethodOrConstantRest + : annotationMethodRest + | annotationConstantRest + ; + +annotationMethodRest + : Identifier '(' ')' defaultValue? + ; + +annotationConstantRest + : variableDeclarators + ; + +defaultValue + : 'default' elementValue + ; + +// STATEMENTS / BLOCKS + +block + : '{' blockStatement* '}' + ; + +blockStatement + : localVariableDeclarationStatement + | classOrInterfaceDeclaration + | statement + ; + +localVariableDeclarationStatement + : localVariableDeclaration ';' + ; + +localVariableDeclaration + : variableModifiers type variableDeclarators + ; + +variableModifiers + : variableModifier* + ; + +statement + : block + | ASSERT expression (':' expression)? ';' + | 'if' parExpression statement (options {k=1;}:'else' statement)? + | 'for' '(' forControl ')' statement + | 'while' parExpression statement + | 'do' statement 'while' parExpression ';' + | 'try' block + ( catches 'finally' block + | catches + | 'finally' block + ) + | 'switch' parExpression '{' switchBlockStatementGroups '}' + | 'synchronized' parExpression block + | 'return' expression? ';' + | 'throw' expression ';' + | 'break' Identifier? ';' + | 'continue' Identifier? ';' + | ';' + | statementExpression ';' + | Identifier ':' statement + ; + +catches + : catchClause (catchClause)* + ; + +catchClause + : 'catch' '(' formalParameter ')' block + ; + +formalParameter + : variableModifiers type variableDeclaratorId + ; + +switchBlockStatementGroups + : (switchBlockStatementGroup)* + ; + +/* The change here (switchLabel -> switchLabel+) technically makes this grammar + ambiguous; but with appropriately greedy parsing it yields the most + appropriate AST, one in which each group, except possibly the last one, has + labels and statements. */ +switchBlockStatementGroup + : switchLabel+ blockStatement* + ; + +switchLabel + : 'case' constantExpression ':' + | 'case' enumConstantName ':' + | 'default' ':' + ; + +forControl +options {k=3;} // be efficient for common case: for (ID ID : ID) ... + : enhancedForControl + | forInit? ';' expression? ';' forUpdate? + ; + +forInit + : localVariableDeclaration + | expressionList + ; + +enhancedForControl + : variableModifiers type Identifier ':' expression + ; + +forUpdate + : expressionList + ; + +// EXPRESSIONS + +parExpression + : '(' expression ')' + ; + +expressionList + : expression (',' expression)* + ; + +statementExpression + : expression + ; + +constantExpression + : expression + ; + +expression + : conditionalExpression (assignmentOperator expression)? + ; + +assignmentOperator + : '=' + | '+=' + | '-=' + | '*=' + | '/=' + | '&=' + | '|=' + | '^=' + | '%=' + | '<' '<' '=' + | '>' '>' '>' '=' + | '>' '>' '=' +/* + | ('<' '<' '=')=> t1='<' t2='<' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>' '>' '=')=> t1='>' t2='>' t3='>' t4='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() && + $t3.getLine() == $t4.getLine() && + $t3.getCharPositionInLine() + 1 == $t4.getCharPositionInLine() }? + | ('>' '>' '=')=> t1='>' t2='>' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + */ + ; + +conditionalExpression + : conditionalOrExpression ( '?' conditionalExpression ':' conditionalExpression )? + ; + +conditionalOrExpression + : conditionalAndExpression ( '||' conditionalAndExpression )* + ; + +conditionalAndExpression + : inclusiveOrExpression ( '&&' inclusiveOrExpression )* + ; + +inclusiveOrExpression + : exclusiveOrExpression ( '|' exclusiveOrExpression )* + ; + +exclusiveOrExpression + : andExpression ( '^' andExpression )* + ; + +andExpression + : equalityExpression ( '&' equalityExpression )* + ; + +equalityExpression + : instanceOfExpression ( ('==' | '!=') instanceOfExpression )* + ; + +instanceOfExpression + : relationalExpression ('instanceof' type)? + ; + +relationalExpression + : shiftExpression ( relationalOp shiftExpression )* + ; + +relationalOp + : '<' '=' + | '>' '=' + | '<' + | '>' + ; +/* +relationalOp + : ('<' '=')=> t1='<' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '=')=> t1='>' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | '<' + | '>' + ; + */ + +shiftExpression + : additiveExpression ( shiftOp additiveExpression )* + ; + +shiftOp + : '<' '<' + | '>' '>' '>' + | '>' '>' + ; + +/* +shiftOp + : ('<' '<')=> t1='<' t2='<' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '>' '>')=> t1='>' t2='>' t3='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>')=> t1='>' t2='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + ; +*/ + +additiveExpression + : multiplicativeExpression ( ('+' | '-') multiplicativeExpression )* + ; + +multiplicativeExpression + : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* + ; + +unaryExpression + : '+' unaryExpression + | '-' unaryExpression + | '++' unaryExpression + | '--' unaryExpression + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : '~' unaryExpression + | '!' unaryExpression + | castExpression + | primary selector* ('++'|'--')? + ; + +castExpression + : '(' primitiveType ')' unaryExpression + | '(' (type | expression) ')' unaryExpressionNotPlusMinus + ; + +primary + : parExpression + | 'this' ('.' Identifier)* identifierSuffix? + | 'super' superSuffix + | literal + | 'new' creator + | Identifier ('.' Identifier)* identifierSuffix? + | primitiveType ('[' ']')* '.' 'class' + | 'void' '.' 'class' + ; + +identifierSuffix + : ('[' ']')+ '.' 'class' +// | ('[' expression ']')+ // can also be matched by selector, but do here + | arguments + | '.' 'class' + | '.' explicitGenericInvocation + | '.' 'this' + | '.' 'super' arguments + | '.' 'new' innerCreator + ; + +creator + : nonWildcardTypeArguments createdName classCreatorRest + | createdName (arrayCreatorRest | classCreatorRest) + ; + +createdName + : classOrInterfaceType + | primitiveType + ; + +innerCreator + : nonWildcardTypeArguments? Identifier classCreatorRest + ; + +arrayCreatorRest + : '[' + ( ']' ('[' ']')* arrayInitializer + | expression ']' ('[' expression ']')* ('[' ']')* + ) + ; + +classCreatorRest + : arguments classBody? + ; + +explicitGenericInvocation + : nonWildcardTypeArguments Identifier arguments + ; + +nonWildcardTypeArguments + : '<' typeList '>' + ; + +selector + : '.' Identifier arguments? + | '.' 'this' + | '.' 'super' superSuffix + | '.' 'new' innerCreator + | '[' expression ']' + ; + +superSuffix + : arguments + | '.' Identifier arguments? + ; + +arguments + : '(' expressionList? ')' + ; + diff --git a/tool/playground/JavaParser.java b/tool/playground/JavaParser.java new file mode 100644 index 000000000..7da319e55 --- /dev/null +++ b/tool/playground/JavaParser.java @@ -0,0 +1,6448 @@ +// $ANTLR ANTLRVersion> JavaParser.java generatedTimestamp> +import org.antlr.v4.runtime.NoViableAltException; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.EarlyExitException; +import org.antlr.v4.runtime.ParserSharedState; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.FailedPredicateException; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + +public class JavaParser extends Parser { + public static final int + EOR=1, T__29=8, T__28=7, T__27=6, T__26=5, T__25=4, OctalLiteral=95, + Identifier=101, T__93=72, T__94=73, T__91=70, T__92=71, T__90=69, + COMMENT=105, T__99=78, T__98=77, T__97=76, T__96=75, T__95=74, T__80=59, + T__81=60, T__82=61, T__83=62, LINE_COMMENT=103, T__85=64, T__84=63, + T__87=66, ASSERT=100, T__86=65, T__89=68, T__88=67, WS=102, T__71=50, + T__72=51, T__70=49, FloatingPointLiteral=96, T__76=55, T__75=54, + T__74=53, T__73=52, T__79=58, T__78=57, T__77=56, T__68=47, T__69=48, + T__66=45, T__67=46, T__64=43, T__65=44, T__62=41, T__63=42, CharacterLiteral=97, + T__61=40, T__60=39, COMMENT_START=104, T__55=34, T__56=35, T__57=36, + T__58=37, T__51=30, T__52=31, T__53=32, T__54=33, T__107=86, T__108=87, + T__109=88, T__59=38, T__103=82, T__104=83, T__105=84, T__106=85, + T__111=90, T__110=89, T__113=92, T__112=91, T__50=29, T__42=21, + T__43=22, HexLiteral=93, T__40=19, T__41=20, T__46=25, T__47=26, + T__44=23, T__45=24, T__48=27, T__49=28, T__102=81, T__101=80, T__100=79, + DecimalLiteral=94, StringLiteral=98, T__30=9, T__31=10, T__32=11, + T__33=12, T__34=13, ENUM=99, T__35=14, T__36=15, T__37=16, T__38=17, + T__39=18, COMMENT_INSIDE=106; + public static final String[] tokenNames = { + "", "", "", + "EOR", "'package'", "';'", "'import'", "'static'", "'.'", "'*'", + "'public'", "'protected'", "'private'", "'abstract'", "'final'", + "'strictfp'", "'class'", "'extends'", "'implements'", "'<'", "','", + "'>'", "'&'", "'{'", "'}'", "'interface'", "'void'", "'['", "']'", + "'throws'", "'='", "'native'", "'synchronized'", "'transient'", + "'volatile'", "'boolean'", "'char'", "'byte'", "'short'", "'int'", + "'long'", "'float'", "'double'", "'?'", "'super'", "'('", "')'", + "'...'", "'this'", "'null'", "'true'", "'false'", "'@'", "'default'", + "':'", "'if'", "'else'", "'for'", "'while'", "'do'", "'try'", "'finally'", + "'switch'", "'return'", "'throw'", "'break'", "'continue'", "'catch'", + "'case'", "'+='", "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", + "'%='", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'instanceof'", + "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", "'~'", "'!'", "'new'", + "HexLiteral", "DecimalLiteral", "OctalLiteral", "FloatingPointLiteral", + "CharacterLiteral", "StringLiteral", "ENUM", "ASSERT", "Identifier", + "WS", "LINE_COMMENT", "COMMENT_START", "COMMENT", "COMMENT_INSIDE" + }; + public static final String[] ruleNames = { + "", + "compilationUnit", "packageDeclaration", "importDeclaration", "typeDeclaration", + "classOrInterfaceDeclaration", "classOrInterfaceModifiers", "classOrInterfaceModifier", + "modifiers", "classDeclaration", "normalClassDeclaration", "typeParameters", + "typeParameter", "typeBound", "enumDeclaration", "enumBody", "enumConstants", + "enumConstant", "enumBodyDeclarations", "interfaceDeclaration", + "normalInterfaceDeclaration", "typeList", "classBody", "interfaceBody", + "classBodyDeclaration", "memberDecl", "memberDeclaration", "genericMethodOrConstructorDecl", + "genericMethodOrConstructorRest", "methodDeclaration", "fieldDeclaration", + "interfaceBodyDeclaration", "interfaceMemberDecl", "interfaceMethodOrFieldDecl", + "interfaceMethodOrFieldRest", "methodDeclaratorRest", "voidMethodDeclaratorRest", + "interfaceMethodDeclaratorRest", "interfaceGenericMethodDecl", "voidInterfaceMethodDeclaratorRest", + "constructorDeclaratorRest", "constantDeclarator", "variableDeclarators", + "variableDeclarator", "constantDeclaratorsRest", "constantDeclaratorRest", + "variableDeclaratorId", "variableInitializer", "arrayInitializer", + "modifier", "packageOrTypeName", "enumConstantName", "typeName", + "type", "classOrInterfaceType", "primitiveType", "variableModifier", + "typeArguments", "typeArgument", "qualifiedNameList", "formalParameters", + "formalParameterDecls", "formalParameterDeclsRest", "methodBody", + "constructorBody", "explicitConstructorInvocation", "qualifiedName", + "literal", "integerLiteral", "booleanLiteral", "annotations", "annotation", + "annotationName", "elementValuePairs", "elementValuePair", "elementValue", + "elementValueArrayInitializer", "annotationTypeDeclaration", "annotationTypeBody", + "annotationTypeElementDeclaration", "annotationTypeElementRest", + "annotationMethodOrConstantRest", "annotationMethodRest", "annotationConstantRest", + "defaultValue", "block", "blockStatement", "localVariableDeclarationStatement", + "localVariableDeclaration", "variableModifiers", "statement", "catches", + "catchClause", "formalParameter", "switchBlockStatementGroups", + "switchBlockStatementGroup", "switchLabel", "forControl", "forInit", + "enhancedForControl", "forUpdate", "parExpression", "expressionList", + "statementExpression", "constantExpression", "expression", "assignmentOperator", + "conditionalExpression", "conditionalOrExpression", "conditionalAndExpression", + "inclusiveOrExpression", "exclusiveOrExpression", "andExpression", + "equalityExpression", "instanceOfExpression", "relationalExpression", + "relationalOp", "shiftExpression", "shiftOp", "additiveExpression", + "multiplicativeExpression", "unaryExpression", "unaryExpressionNotPlusMinus", + "castExpression", "primary", "identifierSuffix", "creator", "createdName", + "innerCreator", "arrayCreatorRest", "classCreatorRest", "explicitGenericInvocation", + "nonWildcardTypeArguments", "selector", "superSuffix", "arguments" + }; + public JavaParser(TokenStream input) { + this(input, new ParserSharedState()); + } + public JavaParser(TokenStream input, ParserSharedState state) { + super(input, state); + _interp = new ParserInterpreter(this,_ATN); + } + + public final ParserRuleContext compilationUnit(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 0); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[1]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,7,_ctx) ) { + case 1: + _ctx.s = 270; + annotations(_ctx); + switch ( state.input.LA(1) ) { + case T__25: + _ctx.s = 272; + packageDeclaration(_ctx); + _la = state.input.LA(1); + while ( _la==T__27 ) { + _ctx.s = 274; + importDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_0); + } + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__46 || _la==T__73 || _la==ENUM ) { + _ctx.s = 280; + typeDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_1); + } + break; + case T__28: + case T__31: + case T__32: + case T__33: + case T__34: + case T__35: + case T__36: + case T__37: + case T__46: + case T__73: + case ENUM: + _ctx.s = 286; + classOrInterfaceDeclaration(_ctx); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__46 || _la==T__73 || _la==ENUM ) { + _ctx.s = 288; + typeDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_2); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + break; + case 2: + _la = state.input.LA(1); + if ( _la==T__25 ) { + _ctx.s = 296; + packageDeclaration(_ctx); + } + + _la = state.input.LA(1); + while ( _la==T__27 ) { + _ctx.s = 300; + importDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_5); + } + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__46 || _la==T__73 || _la==ENUM ) { + _ctx.s = 306; + typeDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_6); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[1]); + } + return _ctx; + } + + + public final ParserRuleContext packageDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 2); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[2]); + try { + _ctx.s = 314; + match(T__25); + _ctx.s = 316; + qualifiedName(_ctx); + _ctx.s = 318; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[2]); + } + return _ctx; + } + + + public final ParserRuleContext importDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 4); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[3]); + int _la; + try { + _ctx.s = 320; + match(T__27); + _la = state.input.LA(1); + if ( _la==T__28 ) { + _ctx.s = 322; + match(T__28); + } + + _ctx.s = 326; + qualifiedName(_ctx); + _la = state.input.LA(1); + if ( _la==T__29 ) { + _ctx.s = 328; + match(T__29); + _ctx.s = 330; + match(T__30); + } + + _ctx.s = 334; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[3]); + } + return _ctx; + } + + + public final ParserRuleContext typeDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 6); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[4]); + try { + switch ( state.input.LA(1) ) { + case T__28: + case T__31: + case T__32: + case T__33: + case T__34: + case T__35: + case T__36: + case T__37: + case T__46: + case T__73: + case ENUM: + _ctx.s = 336; + classOrInterfaceDeclaration(_ctx); + break; + case T__26: + _ctx.s = 338; + match(T__26); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[4]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 8); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[5]); + try { + _ctx.s = 342; + classOrInterfaceModifiers(_ctx); + switch ( state.input.LA(1) ) { + case T__37: + case ENUM: + _ctx.s = 344; + classDeclaration(_ctx); + break; + case T__46: + case T__73: + _ctx.s = 346; + interfaceDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[5]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceModifiers(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 10); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[6]); + try { + int _alt133 = _interp.adaptivePredict(state.input,12,_ctx); + while ( _alt133!=2 ) { + switch ( _alt133 ) { + case 1: + _ctx.s = 350; + classOrInterfaceModifier(_ctx); + break; + } + _alt133 = _interp.adaptivePredict(state.input,12,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[6]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceModifier(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 12); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[7]); + try { + switch ( state.input.LA(1) ) { + case T__73: + _ctx.s = 356; + annotation(_ctx); + break; + case T__31: + _ctx.s = 358; + match(T__31); + break; + case T__32: + _ctx.s = 360; + match(T__32); + break; + case T__33: + _ctx.s = 362; + match(T__33); + break; + case T__34: + _ctx.s = 364; + match(T__34); + break; + case T__28: + _ctx.s = 366; + match(T__28); + break; + case T__35: + _ctx.s = 368; + match(T__35); + break; + case T__36: + _ctx.s = 370; + match(T__36); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[7]); + } + return _ctx; + } + + + public final ParserRuleContext modifiers(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 14); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[8]); + try { + int _alt194 = _interp.adaptivePredict(state.input,14,_ctx); + while ( _alt194!=2 ) { + switch ( _alt194 ) { + case 1: + _ctx.s = 374; + modifier(_ctx); + break; + } + _alt194 = _interp.adaptivePredict(state.input,14,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[8]); + } + return _ctx; + } + + + public final ParserRuleContext classDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 16); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[9]); + try { + switch ( state.input.LA(1) ) { + case T__37: + _ctx.s = 380; + normalClassDeclaration(_ctx); + break; + case ENUM: + _ctx.s = 382; + enumDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[9]); + } + return _ctx; + } + + + public final ParserRuleContext normalClassDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 18); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[10]); + int _la; + try { + _ctx.s = 386; + match(T__37); + _ctx.s = 388; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__40 ) { + _ctx.s = 390; + typeParameters(_ctx); + } + + _la = state.input.LA(1); + if ( _la==T__38 ) { + _ctx.s = 394; + match(T__38); + _ctx.s = 396; + type(_ctx); + } + + _la = state.input.LA(1); + if ( _la==T__39 ) { + _ctx.s = 400; + match(T__39); + _ctx.s = 402; + typeList(_ctx); + } + + _ctx.s = 406; + classBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[10]); + } + return _ctx; + } + + + public final ParserRuleContext typeParameters(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 20); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[11]); + int _la; + try { + _ctx.s = 408; + match(T__40); + _ctx.s = 410; + typeParameter(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 412; + match(T__41); + _ctx.s = 414; + typeParameter(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeParameters_iter_19); + } + _ctx.s = 420; + match(T__42); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[11]); + } + return _ctx; + } + + + public final ParserRuleContext typeParameter(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 22); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[12]); + int _la; + try { + _ctx.s = 422; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__38 ) { + _ctx.s = 424; + match(T__38); + _ctx.s = 426; + typeBound(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[12]); + } + return _ctx; + } + + + public final ParserRuleContext typeBound(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 24); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[13]); + int _la; + try { + _ctx.s = 430; + type(_ctx); + _la = state.input.LA(1); + while ( _la==T__43 ) { + _ctx.s = 432; + match(T__43); + _ctx.s = 434; + type(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeBound_iter_21); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[13]); + } + return _ctx; + } + + + public final ParserRuleContext enumDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 26); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[14]); + int _la; + try { + _ctx.s = 440; + match(ENUM); + _ctx.s = 442; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__39 ) { + _ctx.s = 444; + match(T__39); + _ctx.s = 446; + typeList(_ctx); + } + + _ctx.s = 450; + enumBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[14]); + } + return _ctx; + } + + + public final ParserRuleContext enumBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 28); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[15]); + int _la; + try { + _ctx.s = 452; + match(T__44); + _la = state.input.LA(1); + if ( _la==T__73 || _la==Identifier ) { + _ctx.s = 454; + enumConstants(_ctx); + } + + _la = state.input.LA(1); + if ( _la==T__41 ) { + _ctx.s = 458; + match(T__41); + } + + _la = state.input.LA(1); + if ( _la==T__26 ) { + _ctx.s = 462; + enumBodyDeclarations(_ctx); + } + + _ctx.s = 466; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[15]); + } + return _ctx; + } + + + public final ParserRuleContext enumConstants(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 30); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[16]); + try { + _ctx.s = 468; + enumConstant(_ctx); + int _alt337 = _interp.adaptivePredict(state.input,26,_ctx); + while ( _alt337!=2 ) { + switch ( _alt337 ) { + case 1: + _ctx.s = 470; + match(T__41); + _ctx.s = 472; + enumConstant(_ctx); + break; + } + _alt337 = _interp.adaptivePredict(state.input,26,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[16]); + } + return _ctx; + } + + + public final ParserRuleContext enumConstant(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 32); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[17]); + int _la; + try { + _la = state.input.LA(1); + if ( _la==T__73 ) { + _ctx.s = 478; + annotations(_ctx); + } + + _ctx.s = 482; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__66 ) { + _ctx.s = 484; + arguments(_ctx); + } + + _la = state.input.LA(1); + if ( _la==T__44 ) { + _ctx.s = 488; + classBody(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[17]); + } + return _ctx; + } + + + public final ParserRuleContext enumBodyDeclarations(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 34); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[18]); + int _la; + try { + _ctx.s = 492; + match(T__26); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__40 || _la==T__44 || _la==T__46 || _la==T__47 || _la==T__52 || _la==T__53 || _la==T__54 || _la==T__55 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__73 || _la==ENUM || _la==Identifier ) { + _ctx.s = 494; + classBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_enumBodyDeclarations_iter_30); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[18]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 36); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[19]); + try { + switch ( state.input.LA(1) ) { + case T__46: + _ctx.s = 500; + normalInterfaceDeclaration(_ctx); + break; + case T__73: + _ctx.s = 502; + annotationTypeDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[19]); + } + return _ctx; + } + + + public final ParserRuleContext normalInterfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 38); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[20]); + int _la; + try { + _ctx.s = 506; + match(T__46); + _ctx.s = 508; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__40 ) { + _ctx.s = 510; + typeParameters(_ctx); + } + + _la = state.input.LA(1); + if ( _la==T__38 ) { + _ctx.s = 514; + match(T__38); + _ctx.s = 516; + typeList(_ctx); + } + + _ctx.s = 520; + interfaceBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[20]); + } + return _ctx; + } + + + public final ParserRuleContext typeList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 40); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[21]); + int _la; + try { + _ctx.s = 522; + type(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 524; + match(T__41); + _ctx.s = 526; + type(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeList_iter_34); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[21]); + } + return _ctx; + } + + + public final ParserRuleContext classBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 42); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[22]); + int _la; + try { + _ctx.s = 532; + match(T__44); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__40 || _la==T__44 || _la==T__46 || _la==T__47 || _la==T__52 || _la==T__53 || _la==T__54 || _la==T__55 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__73 || _la==ENUM || _la==Identifier ) { + _ctx.s = 534; + classBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_classBody_iter_35); + } + _ctx.s = 540; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[22]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 44); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[23]); + int _la; + try { + _ctx.s = 542; + match(T__44); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__40 || _la==T__46 || _la==T__47 || _la==T__52 || _la==T__53 || _la==T__54 || _la==T__55 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__73 || _la==ENUM || _la==Identifier ) { + _ctx.s = 544; + interfaceBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_interfaceBody_iter_36); + } + _ctx.s = 550; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[23]); + } + return _ctx; + } + + + public final ParserRuleContext classBodyDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 46); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[24]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,38,_ctx) ) { + case 1: + _ctx.s = 552; + match(T__26); + break; + case 2: + _la = state.input.LA(1); + if ( _la==T__28 ) { + _ctx.s = 554; + match(T__28); + } + + _ctx.s = 558; + block(_ctx); + break; + case 3: + _ctx.s = 560; + modifiers(_ctx); + _ctx.s = 562; + memberDecl(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[24]); + } + return _ctx; + } + + + public final ParserRuleContext memberDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 48); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[25]); + try { + switch ( _interp.adaptivePredict(state.input,39,_ctx) ) { + case 1: + _ctx.s = 566; + genericMethodOrConstructorDecl(_ctx); + break; + case 2: + _ctx.s = 568; + memberDeclaration(_ctx); + break; + case 3: + _ctx.s = 570; + match(T__47); + _ctx.s = 572; + match(Identifier); + _ctx.s = 574; + voidMethodDeclaratorRest(_ctx); + break; + case 4: + _ctx.s = 576; + match(Identifier); + _ctx.s = 578; + constructorDeclaratorRest(_ctx); + break; + case 5: + _ctx.s = 580; + interfaceDeclaration(_ctx); + break; + case 6: + _ctx.s = 582; + classDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[25]); + } + return _ctx; + } + + + public final ParserRuleContext memberDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 50); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[26]); + try { + _ctx.s = 586; + type(_ctx); + switch ( _interp.adaptivePredict(state.input,40,_ctx) ) { + case 1: + _ctx.s = 588; + methodDeclaration(_ctx); + break; + case 2: + _ctx.s = 590; + fieldDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[26]); + } + return _ctx; + } + + + public final ParserRuleContext genericMethodOrConstructorDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 52); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[27]); + try { + _ctx.s = 594; + typeParameters(_ctx); + _ctx.s = 596; + genericMethodOrConstructorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[27]); + } + return _ctx; + } + + + public final ParserRuleContext genericMethodOrConstructorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 54); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[28]); + try { + switch ( _interp.adaptivePredict(state.input,42,_ctx) ) { + case 1: + switch ( state.input.LA(1) ) { + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 598; + type(_ctx); + break; + case T__47: + _ctx.s = 600; + match(T__47); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 604; + match(Identifier); + _ctx.s = 606; + methodDeclaratorRest(_ctx); + break; + case 2: + _ctx.s = 608; + match(Identifier); + _ctx.s = 610; + constructorDeclaratorRest(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[28]); + } + return _ctx; + } + + + public final ParserRuleContext methodDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 56); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[29]); + try { + _ctx.s = 614; + match(Identifier); + _ctx.s = 616; + methodDeclaratorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[29]); + } + return _ctx; + } + + + public final ParserRuleContext fieldDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 58); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[30]); + try { + _ctx.s = 618; + variableDeclarators(_ctx); + _ctx.s = 620; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[30]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceBodyDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 60); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[31]); + try { + switch ( state.input.LA(1) ) { + case T__28: + case T__31: + case T__32: + case T__33: + case T__34: + case T__35: + case T__36: + case T__37: + case T__40: + case T__46: + case T__47: + case T__52: + case T__53: + case T__54: + case T__55: + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case T__73: + case ENUM: + case Identifier: + _ctx.s = 622; + modifiers(_ctx); + _ctx.s = 624; + interfaceMemberDecl(_ctx); + break; + case T__26: + _ctx.s = 626; + match(T__26); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[31]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceMemberDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 62); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[32]); + try { + switch ( state.input.LA(1) ) { + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 630; + interfaceMethodOrFieldDecl(_ctx); + break; + case T__40: + _ctx.s = 632; + interfaceGenericMethodDecl(_ctx); + break; + case T__47: + _ctx.s = 634; + match(T__47); + _ctx.s = 636; + match(Identifier); + _ctx.s = 638; + voidInterfaceMethodDeclaratorRest(_ctx); + break; + case T__46: + case T__73: + _ctx.s = 640; + interfaceDeclaration(_ctx); + break; + case T__37: + case ENUM: + _ctx.s = 642; + classDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[32]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceMethodOrFieldDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 64); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[33]); + try { + _ctx.s = 646; + type(_ctx); + _ctx.s = 648; + match(Identifier); + _ctx.s = 650; + interfaceMethodOrFieldRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[33]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceMethodOrFieldRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 66); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[34]); + try { + switch ( state.input.LA(1) ) { + case T__48: + case T__51: + _ctx.s = 652; + constantDeclaratorsRest(_ctx); + _ctx.s = 654; + match(T__26); + break; + case T__66: + _ctx.s = 656; + interfaceMethodDeclaratorRest(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[34]); + } + return _ctx; + } + + + public final ParserRuleContext methodDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 68); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[35]); + int _la; + try { + _ctx.s = 660; + formalParameters(_ctx); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 662; + match(T__48); + _ctx.s = 664; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_methodDeclaratorRest_iter_46); + } + _la = state.input.LA(1); + if ( _la==T__50 ) { + _ctx.s = 670; + match(T__50); + _ctx.s = 672; + qualifiedNameList(_ctx); + } + + switch ( state.input.LA(1) ) { + case T__44: + _ctx.s = 676; + methodBody(_ctx); + break; + case T__26: + _ctx.s = 678; + match(T__26); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[35]); + } + return _ctx; + } + + + public final ParserRuleContext voidMethodDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 70); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[36]); + int _la; + try { + _ctx.s = 682; + formalParameters(_ctx); + _la = state.input.LA(1); + if ( _la==T__50 ) { + _ctx.s = 684; + match(T__50); + _ctx.s = 686; + qualifiedNameList(_ctx); + } + + switch ( state.input.LA(1) ) { + case T__44: + _ctx.s = 690; + methodBody(_ctx); + break; + case T__26: + _ctx.s = 692; + match(T__26); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[36]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceMethodDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 72); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[37]); + int _la; + try { + _ctx.s = 696; + formalParameters(_ctx); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 698; + match(T__48); + _ctx.s = 700; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_interfaceMethodDeclaratorRest_iter_51); + } + _la = state.input.LA(1); + if ( _la==T__50 ) { + _ctx.s = 706; + match(T__50); + _ctx.s = 708; + qualifiedNameList(_ctx); + } + + _ctx.s = 712; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[37]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceGenericMethodDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 74); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[38]); + try { + _ctx.s = 714; + typeParameters(_ctx); + switch ( state.input.LA(1) ) { + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 716; + type(_ctx); + break; + case T__47: + _ctx.s = 718; + match(T__47); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 722; + match(Identifier); + _ctx.s = 724; + interfaceMethodDeclaratorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[38]); + } + return _ctx; + } + + + public final ParserRuleContext voidInterfaceMethodDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 76); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[39]); + int _la; + try { + _ctx.s = 726; + formalParameters(_ctx); + _la = state.input.LA(1); + if ( _la==T__50 ) { + _ctx.s = 728; + match(T__50); + _ctx.s = 730; + qualifiedNameList(_ctx); + } + + _ctx.s = 734; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[39]); + } + return _ctx; + } + + + public final ParserRuleContext constructorDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 78); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[40]); + int _la; + try { + _ctx.s = 736; + formalParameters(_ctx); + _la = state.input.LA(1); + if ( _la==T__50 ) { + _ctx.s = 738; + match(T__50); + _ctx.s = 740; + qualifiedNameList(_ctx); + } + + _ctx.s = 744; + constructorBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[40]); + } + return _ctx; + } + + + public final ParserRuleContext constantDeclarator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 80); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[41]); + try { + _ctx.s = 746; + match(Identifier); + _ctx.s = 748; + constantDeclaratorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[41]); + } + return _ctx; + } + + + public final ParserRuleContext variableDeclarators(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 82); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[42]); + int _la; + try { + _ctx.s = 750; + variableDeclarator(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 752; + match(T__41); + _ctx.s = 754; + variableDeclarator(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_variableDeclarators_iter_56); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[42]); + } + return _ctx; + } + + + public final ParserRuleContext variableDeclarator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 84); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[43]); + int _la; + try { + _ctx.s = 760; + variableDeclaratorId(_ctx); + _la = state.input.LA(1); + if ( _la==T__51 ) { + _ctx.s = 762; + match(T__51); + _ctx.s = 764; + variableInitializer(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[43]); + } + return _ctx; + } + + + public final ParserRuleContext constantDeclaratorsRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 86); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[44]); + int _la; + try { + _ctx.s = 768; + constantDeclaratorRest(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 770; + match(T__41); + _ctx.s = 772; + constantDeclarator(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_constantDeclaratorsRest_iter_58); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[44]); + } + return _ctx; + } + + + public final ParserRuleContext constantDeclaratorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 88); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[45]); + int _la; + try { + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 778; + match(T__48); + _ctx.s = 780; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_constantDeclaratorRest_iter_59); + } + _ctx.s = 786; + match(T__51); + _ctx.s = 788; + variableInitializer(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[45]); + } + return _ctx; + } + + + public final ParserRuleContext variableDeclaratorId(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 90); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[46]); + int _la; + try { + _ctx.s = 790; + match(Identifier); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 792; + match(T__48); + _ctx.s = 794; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_variableDeclaratorId_iter_60); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[46]); + } + return _ctx; + } + + + public final ParserRuleContext variableInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 92); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[47]); + try { + switch ( state.input.LA(1) ) { + case T__44: + _ctx.s = 800; + arrayInitializer(_ctx); + break; + case T__47: + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case T__65: + case T__66: + case T__69: + case T__70: + case T__71: + case T__72: + case T__105: + case T__106: + case T__109: + case T__110: + case T__111: + case T__112: + case T__113: + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + case FloatingPointLiteral: + case CharacterLiteral: + case StringLiteral: + case Identifier: + _ctx.s = 802; + expression(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[47]); + } + return _ctx; + } + + + public final ParserRuleContext arrayInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 94); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[48]); + int _la; + try { + _ctx.s = 806; + match(T__44); + _la = state.input.LA(1); + if ( _la==T__44 || _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 808; + variableInitializer(_ctx); + int _alt887 = _interp.adaptivePredict(state.input,62,_ctx); + while ( _alt887!=2 ) { + switch ( _alt887 ) { + case 1: + _ctx.s = 810; + match(T__41); + _ctx.s = 812; + variableInitializer(_ctx); + break; + } + _alt887 = _interp.adaptivePredict(state.input,62,_ctx); + } + _la = state.input.LA(1); + if ( _la==T__41 ) { + _ctx.s = 818; + match(T__41); + } + + } + + _ctx.s = 824; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[48]); + } + return _ctx; + } + + + public final ParserRuleContext modifier(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 96); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[49]); + try { + switch ( state.input.LA(1) ) { + case T__73: + _ctx.s = 826; + annotation(_ctx); + break; + case T__31: + _ctx.s = 828; + match(T__31); + break; + case T__32: + _ctx.s = 830; + match(T__32); + break; + case T__33: + _ctx.s = 832; + match(T__33); + break; + case T__28: + _ctx.s = 834; + match(T__28); + break; + case T__34: + _ctx.s = 836; + match(T__34); + break; + case T__35: + _ctx.s = 838; + match(T__35); + break; + case T__52: + _ctx.s = 840; + match(T__52); + break; + case T__53: + _ctx.s = 842; + match(T__53); + break; + case T__54: + _ctx.s = 844; + match(T__54); + break; + case T__55: + _ctx.s = 846; + match(T__55); + break; + case T__36: + _ctx.s = 848; + match(T__36); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[49]); + } + return _ctx; + } + + + public final ParserRuleContext packageOrTypeName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 98); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[50]); + try { + _ctx.s = 852; + qualifiedName(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[50]); + } + return _ctx; + } + + + public final ParserRuleContext enumConstantName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 100); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[51]); + try { + _ctx.s = 854; + match(Identifier); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[51]); + } + return _ctx; + } + + + public final ParserRuleContext typeName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 102); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[52]); + try { + _ctx.s = 856; + qualifiedName(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[52]); + } + return _ctx; + } + + + public final ParserRuleContext type(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 104); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[53]); + int _la; + try { + switch ( state.input.LA(1) ) { + case Identifier: + _ctx.s = 858; + classOrInterfaceType(_ctx); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 860; + match(T__48); + _ctx.s = 862; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_type_iter_66); + } + break; + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + _ctx.s = 868; + primitiveType(_ctx); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 870; + match(T__48); + _ctx.s = 872; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_type_iter_67); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[53]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceType(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 106); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[54]); + int _la; + try { + _ctx.s = 880; + match(Identifier); + switch ( _interp.adaptivePredict(state.input,69,_ctx) ) { + case 1: + _ctx.s = 882; + typeArguments(_ctx); + break; + } + _la = state.input.LA(1); + while ( _la==T__29 ) { + _ctx.s = 886; + match(T__29); + _ctx.s = 888; + match(Identifier); + switch ( _interp.adaptivePredict(state.input,70,_ctx) ) { + case 1: + _ctx.s = 890; + typeArguments(_ctx); + break; + } + _la = state.input.LA(1); + //sync(EXPECTING_in_classOrInterfaceType_iter_71); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[54]); + } + return _ctx; + } + + + public final ParserRuleContext primitiveType(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 108); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[55]); + try { + switch ( state.input.LA(1) ) { + case T__56: + _ctx.s = 898; + match(T__56); + break; + case T__57: + _ctx.s = 900; + match(T__57); + break; + case T__58: + _ctx.s = 902; + match(T__58); + break; + case T__59: + _ctx.s = 904; + match(T__59); + break; + case T__60: + _ctx.s = 906; + match(T__60); + break; + case T__61: + _ctx.s = 908; + match(T__61); + break; + case T__62: + _ctx.s = 910; + match(T__62); + break; + case T__63: + _ctx.s = 912; + match(T__63); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[55]); + } + return _ctx; + } + + + public final ParserRuleContext variableModifier(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 110); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[56]); + try { + switch ( state.input.LA(1) ) { + case T__35: + _ctx.s = 916; + match(T__35); + break; + case T__73: + _ctx.s = 918; + annotation(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[56]); + } + return _ctx; + } + + + public final ParserRuleContext typeArguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 112); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[57]); + int _la; + try { + _ctx.s = 922; + match(T__40); + _ctx.s = 924; + typeArgument(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 926; + match(T__41); + _ctx.s = 928; + typeArgument(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeArguments_iter_74); + } + _ctx.s = 934; + match(T__42); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[57]); + } + return _ctx; + } + + + public final ParserRuleContext typeArgument(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 114); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[58]); + int _la; + try { + switch ( state.input.LA(1) ) { + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 936; + type(_ctx); + break; + case T__64: + _ctx.s = 938; + match(T__64); + _la = state.input.LA(1); + if ( _la==T__38 || _la==T__65 ) { + switch ( state.input.LA(1) ) { + case T__38: + _ctx.s = 940; + match(T__38); + break; + case T__65: + _ctx.s = 942; + match(T__65); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 946; + type(_ctx); + } + + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[58]); + } + return _ctx; + } + + + public final ParserRuleContext qualifiedNameList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 116); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[59]); + int _la; + try { + _ctx.s = 952; + qualifiedName(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 954; + match(T__41); + _ctx.s = 956; + qualifiedName(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_qualifiedNameList_iter_78); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[59]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameters(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 118); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[60]); + int _la; + try { + _ctx.s = 962; + match(T__66); + _la = state.input.LA(1); + if ( _la==T__35 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__73 || _la==Identifier ) { + _ctx.s = 964; + formalParameterDecls(_ctx); + } + + _ctx.s = 968; + match(T__67); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[60]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameterDecls(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 120); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[61]); + try { + _ctx.s = 970; + variableModifiers(_ctx); + _ctx.s = 972; + type(_ctx); + _ctx.s = 974; + formalParameterDeclsRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[61]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameterDeclsRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 122); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[62]); + int _la; + try { + switch ( state.input.LA(1) ) { + case Identifier: + _ctx.s = 976; + variableDeclaratorId(_ctx); + _la = state.input.LA(1); + if ( _la==T__41 ) { + _ctx.s = 978; + match(T__41); + _ctx.s = 980; + formalParameterDecls(_ctx); + } + + break; + case T__68: + _ctx.s = 984; + match(T__68); + _ctx.s = 986; + variableDeclaratorId(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[62]); + } + return _ctx; + } + + + public final ParserRuleContext methodBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 124); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[63]); + try { + _ctx.s = 990; + block(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[63]); + } + return _ctx; + } + + + public final ParserRuleContext constructorBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 126); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[64]); + int _la; + try { + _ctx.s = 992; + match(T__44); + switch ( _interp.adaptivePredict(state.input,82,_ctx) ) { + case 1: + _ctx.s = 994; + explicitConstructorInvocation(_ctx); + break; + } + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__44 || _la==T__46 || _la==T__47 || _la==T__53 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__73 || _la==T__76 || _la==T__78 || _la==T__79 || _la==T__80 || _la==T__81 || _la==T__83 || _la==T__84 || _la==T__85 || _la==T__86 || _la==T__87 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==ENUM || _la==ASSERT || _la==Identifier ) { + _ctx.s = 998; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_constructorBody_iter_83); + } + _ctx.s = 1004; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[64]); + } + return _ctx; + } + + + public final ParserRuleContext explicitConstructorInvocation(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 128); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[65]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,87,_ctx) ) { + case 1: + _la = state.input.LA(1); + if ( _la==T__40 ) { + _ctx.s = 1006; + nonWildcardTypeArguments(_ctx); + } + + switch ( state.input.LA(1) ) { + case T__69: + _ctx.s = 1010; + match(T__69); + break; + case T__65: + _ctx.s = 1012; + match(T__65); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 1016; + arguments(_ctx); + _ctx.s = 1018; + match(T__26); + break; + case 2: + _ctx.s = 1020; + primary(_ctx); + _ctx.s = 1022; + match(T__29); + _la = state.input.LA(1); + if ( _la==T__40 ) { + _ctx.s = 1024; + nonWildcardTypeArguments(_ctx); + } + + _ctx.s = 1028; + match(T__65); + _ctx.s = 1030; + arguments(_ctx); + _ctx.s = 1032; + match(T__26); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[65]); + } + return _ctx; + } + + + public final ParserRuleContext qualifiedName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 130); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[66]); + try { + _ctx.s = 1036; + match(Identifier); + int _alt1249 = _interp.adaptivePredict(state.input,88,_ctx); + while ( _alt1249!=2 ) { + switch ( _alt1249 ) { + case 1: + _ctx.s = 1038; + match(T__29); + _ctx.s = 1040; + match(Identifier); + break; + } + _alt1249 = _interp.adaptivePredict(state.input,88,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[66]); + } + return _ctx; + } + + + public final ParserRuleContext literal(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 132); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[67]); + try { + switch ( state.input.LA(1) ) { + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + _ctx.s = 1046; + integerLiteral(_ctx); + break; + case FloatingPointLiteral: + _ctx.s = 1048; + match(FloatingPointLiteral); + break; + case CharacterLiteral: + _ctx.s = 1050; + match(CharacterLiteral); + break; + case StringLiteral: + _ctx.s = 1052; + match(StringLiteral); + break; + case T__71: + case T__72: + _ctx.s = 1054; + booleanLiteral(_ctx); + break; + case T__70: + _ctx.s = 1056; + match(T__70); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[67]); + } + return _ctx; + } + + + public final ParserRuleContext integerLiteral(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 134); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[68]); + try { + switch ( state.input.LA(1) ) { + case HexLiteral: + _ctx.s = 1060; + match(HexLiteral); + break; + case OctalLiteral: + _ctx.s = 1062; + match(OctalLiteral); + break; + case DecimalLiteral: + _ctx.s = 1064; + match(DecimalLiteral); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[68]); + } + return _ctx; + } + + + public final ParserRuleContext booleanLiteral(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 136); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[69]); + try { + switch ( state.input.LA(1) ) { + case T__71: + _ctx.s = 1068; + match(T__71); + break; + case T__72: + _ctx.s = 1070; + match(T__72); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[69]); + } + return _ctx; + } + + + public final ParserRuleContext annotations(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 138); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[70]); + try { + int _alt1316 = _interp.adaptivePredict(state.input,94,_ctx); + do { + switch ( _alt1316 ) { + case 1: + _ctx.s = 1074; + annotation(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _alt1316 = _interp.adaptivePredict(state.input,94,_ctx); + } while ( _alt1316!=2 ); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[70]); + } + return _ctx; + } + + + public final ParserRuleContext annotation(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 140); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[71]); + int _la; + try { + _ctx.s = 1080; + match(T__73); + _ctx.s = 1082; + annotationName(_ctx); + _la = state.input.LA(1); + if ( _la==T__66 ) { + _ctx.s = 1084; + match(T__66); + switch ( _interp.adaptivePredict(state.input,95,_ctx) ) { + case 1: + _ctx.s = 1086; + elementValuePairs(_ctx); + break; + case 2: + _ctx.s = 1088; + elementValue(_ctx); + break; + } + _ctx.s = 1092; + match(T__67); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[71]); + } + return _ctx; + } + + + public final ParserRuleContext annotationName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 142); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[72]); + int _la; + try { + _ctx.s = 1096; + match(Identifier); + _la = state.input.LA(1); + while ( _la==T__29 ) { + _ctx.s = 1098; + match(T__29); + _ctx.s = 1100; + match(Identifier); + _la = state.input.LA(1); + //sync(EXPECTING_in_annotationName_iter_97); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[72]); + } + return _ctx; + } + + + public final ParserRuleContext elementValuePairs(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 144); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[73]); + int _la; + try { + _ctx.s = 1106; + elementValuePair(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 1108; + match(T__41); + _ctx.s = 1110; + elementValuePair(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_elementValuePairs_iter_98); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[73]); + } + return _ctx; + } + + + public final ParserRuleContext elementValuePair(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 146); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[74]); + try { + _ctx.s = 1116; + match(Identifier); + _ctx.s = 1118; + match(T__51); + _ctx.s = 1120; + elementValue(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[74]); + } + return _ctx; + } + + + public final ParserRuleContext elementValue(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 148); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[75]); + try { + switch ( state.input.LA(1) ) { + case T__47: + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case T__65: + case T__66: + case T__69: + case T__70: + case T__71: + case T__72: + case T__105: + case T__106: + case T__109: + case T__110: + case T__111: + case T__112: + case T__113: + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + case FloatingPointLiteral: + case CharacterLiteral: + case StringLiteral: + case Identifier: + _ctx.s = 1122; + conditionalExpression(_ctx); + break; + case T__73: + _ctx.s = 1124; + annotation(_ctx); + break; + case T__44: + _ctx.s = 1126; + elementValueArrayInitializer(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[75]); + } + return _ctx; + } + + + public final ParserRuleContext elementValueArrayInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 150); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[76]); + int _la; + try { + _ctx.s = 1130; + match(T__44); + _la = state.input.LA(1); + if ( _la==T__44 || _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__73 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 1132; + elementValue(_ctx); + int _alt1422 = _interp.adaptivePredict(state.input,100,_ctx); + while ( _alt1422!=2 ) { + switch ( _alt1422 ) { + case 1: + _ctx.s = 1134; + match(T__41); + _ctx.s = 1136; + elementValue(_ctx); + break; + } + _alt1422 = _interp.adaptivePredict(state.input,100,_ctx); + } + } + + _la = state.input.LA(1); + if ( _la==T__41 ) { + _ctx.s = 1144; + match(T__41); + } + + _ctx.s = 1148; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[76]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 152); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[77]); + try { + _ctx.s = 1150; + match(T__73); + _ctx.s = 1152; + match(T__46); + _ctx.s = 1154; + match(Identifier); + _ctx.s = 1156; + annotationTypeBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[77]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 154); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[78]); + int _la; + try { + _ctx.s = 1158; + match(T__44); + _la = state.input.LA(1); + while ( _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__46 || _la==T__52 || _la==T__53 || _la==T__54 || _la==T__55 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__73 || _la==ENUM || _la==Identifier ) { + _ctx.s = 1160; + annotationTypeElementDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_annotationTypeBody_iter_103); + } + _ctx.s = 1166; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[78]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeElementDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 156); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[79]); + try { + _ctx.s = 1168; + modifiers(_ctx); + _ctx.s = 1170; + annotationTypeElementRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[79]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeElementRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 158); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[80]); + int _la; + try { + switch ( state.input.LA(1) ) { + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 1172; + type(_ctx); + _ctx.s = 1174; + annotationMethodOrConstantRest(_ctx); + _ctx.s = 1176; + match(T__26); + break; + case T__37: + _ctx.s = 1178; + normalClassDeclaration(_ctx); + _la = state.input.LA(1); + if ( _la==T__26 ) { + _ctx.s = 1180; + match(T__26); + } + + break; + case T__46: + _ctx.s = 1184; + normalInterfaceDeclaration(_ctx); + _la = state.input.LA(1); + if ( _la==T__26 ) { + _ctx.s = 1186; + match(T__26); + } + + break; + case ENUM: + _ctx.s = 1190; + enumDeclaration(_ctx); + _la = state.input.LA(1); + if ( _la==T__26 ) { + _ctx.s = 1192; + match(T__26); + } + + break; + case T__73: + _ctx.s = 1196; + annotationTypeDeclaration(_ctx); + _la = state.input.LA(1); + if ( _la==T__26 ) { + _ctx.s = 1198; + match(T__26); + } + + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[80]); + } + return _ctx; + } + + + public final ParserRuleContext annotationMethodOrConstantRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 160); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[81]); + try { + switch ( _interp.adaptivePredict(state.input,109,_ctx) ) { + case 1: + _ctx.s = 1204; + annotationMethodRest(_ctx); + break; + case 2: + _ctx.s = 1206; + annotationConstantRest(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[81]); + } + return _ctx; + } + + + public final ParserRuleContext annotationMethodRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 162); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[82]); + int _la; + try { + _ctx.s = 1210; + match(Identifier); + _ctx.s = 1212; + match(T__66); + _ctx.s = 1214; + match(T__67); + _la = state.input.LA(1); + if ( _la==T__74 ) { + _ctx.s = 1216; + defaultValue(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[82]); + } + return _ctx; + } + + + public final ParserRuleContext annotationConstantRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 164); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[83]); + try { + _ctx.s = 1220; + variableDeclarators(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[83]); + } + return _ctx; + } + + + public final ParserRuleContext defaultValue(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 166); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[84]); + try { + _ctx.s = 1222; + match(T__74); + _ctx.s = 1224; + elementValue(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[84]); + } + return _ctx; + } + + + public final ParserRuleContext block(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 168); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[85]); + int _la; + try { + _ctx.s = 1226; + match(T__44); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__44 || _la==T__46 || _la==T__47 || _la==T__53 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__73 || _la==T__76 || _la==T__78 || _la==T__79 || _la==T__80 || _la==T__81 || _la==T__83 || _la==T__84 || _la==T__85 || _la==T__86 || _la==T__87 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==ENUM || _la==ASSERT || _la==Identifier ) { + _ctx.s = 1228; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_block_iter_111); + } + _ctx.s = 1234; + match(T__45); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[85]); + } + return _ctx; + } + + + public final ParserRuleContext blockStatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 170); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[86]); + try { + switch ( _interp.adaptivePredict(state.input,112,_ctx) ) { + case 1: + _ctx.s = 1236; + localVariableDeclarationStatement(_ctx); + break; + case 2: + _ctx.s = 1238; + classOrInterfaceDeclaration(_ctx); + break; + case 3: + _ctx.s = 1240; + statement(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[86]); + } + return _ctx; + } + + + public final ParserRuleContext localVariableDeclarationStatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 172); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[87]); + try { + _ctx.s = 1244; + localVariableDeclaration(_ctx); + _ctx.s = 1246; + match(T__26); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[87]); + } + return _ctx; + } + + + public final ParserRuleContext localVariableDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 174); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[88]); + try { + _ctx.s = 1248; + variableModifiers(_ctx); + _ctx.s = 1250; + type(_ctx); + _ctx.s = 1252; + variableDeclarators(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[88]); + } + return _ctx; + } + + + public final ParserRuleContext variableModifiers(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 176); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[89]); + int _la; + try { + _la = state.input.LA(1); + while ( _la==T__35 || _la==T__73 ) { + _ctx.s = 1254; + variableModifier(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_variableModifiers_iter_113); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[89]); + } + return _ctx; + } + + + public final ParserRuleContext statement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 178); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[90]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,120,_ctx) ) { + case 1: + _ctx.s = 1260; + block(_ctx); + break; + case 2: + _ctx.s = 1262; + match(ASSERT); + _ctx.s = 1264; + expression(_ctx); + _la = state.input.LA(1); + if ( _la==T__75 ) { + _ctx.s = 1266; + match(T__75); + _ctx.s = 1268; + expression(_ctx); + } + + _ctx.s = 1272; + match(T__26); + break; + case 3: + _ctx.s = 1274; + match(T__76); + _ctx.s = 1276; + parExpression(_ctx); + _ctx.s = 1278; + statement(_ctx); + switch ( _interp.adaptivePredict(state.input,115,_ctx) ) { + case 1: + _ctx.s = 1280; + match(T__77); + _ctx.s = 1282; + statement(_ctx); + break; + } + break; + case 4: + _ctx.s = 1286; + match(T__78); + _ctx.s = 1288; + match(T__66); + _ctx.s = 1290; + forControl(_ctx); + _ctx.s = 1292; + match(T__67); + _ctx.s = 1294; + statement(_ctx); + break; + case 5: + _ctx.s = 1296; + match(T__79); + _ctx.s = 1298; + parExpression(_ctx); + _ctx.s = 1300; + statement(_ctx); + break; + case 6: + _ctx.s = 1302; + match(T__80); + _ctx.s = 1304; + statement(_ctx); + _ctx.s = 1306; + match(T__79); + _ctx.s = 1308; + parExpression(_ctx); + _ctx.s = 1310; + match(T__26); + break; + case 7: + _ctx.s = 1312; + match(T__81); + _ctx.s = 1314; + block(_ctx); + switch ( _interp.adaptivePredict(state.input,116,_ctx) ) { + case 1: + _ctx.s = 1316; + catches(_ctx); + _ctx.s = 1318; + match(T__82); + _ctx.s = 1320; + block(_ctx); + break; + case 2: + _ctx.s = 1322; + catches(_ctx); + break; + case 3: + _ctx.s = 1324; + match(T__82); + _ctx.s = 1326; + block(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + break; + case 8: + _ctx.s = 1330; + match(T__83); + _ctx.s = 1332; + parExpression(_ctx); + _ctx.s = 1334; + match(T__44); + _ctx.s = 1336; + switchBlockStatementGroups(_ctx); + _ctx.s = 1338; + match(T__45); + break; + case 9: + _ctx.s = 1340; + match(T__53); + _ctx.s = 1342; + parExpression(_ctx); + _ctx.s = 1344; + block(_ctx); + break; + case 10: + _ctx.s = 1346; + match(T__84); + _la = state.input.LA(1); + if ( _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 1348; + expression(_ctx); + } + + _ctx.s = 1352; + match(T__26); + break; + case 11: + _ctx.s = 1354; + match(T__85); + _ctx.s = 1356; + expression(_ctx); + _ctx.s = 1358; + match(T__26); + break; + case 12: + _ctx.s = 1360; + match(T__86); + _la = state.input.LA(1); + if ( _la==Identifier ) { + _ctx.s = 1362; + match(Identifier); + } + + _ctx.s = 1366; + match(T__26); + break; + case 13: + _ctx.s = 1368; + match(T__87); + _la = state.input.LA(1); + if ( _la==Identifier ) { + _ctx.s = 1370; + match(Identifier); + } + + _ctx.s = 1374; + match(T__26); + break; + case 14: + _ctx.s = 1376; + match(T__26); + break; + case 15: + _ctx.s = 1378; + statementExpression(_ctx); + _ctx.s = 1380; + match(T__26); + break; + case 16: + _ctx.s = 1382; + match(Identifier); + _ctx.s = 1384; + match(T__75); + _ctx.s = 1386; + statement(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[90]); + } + return _ctx; + } + + + public final ParserRuleContext catches(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 180); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[91]); + int _la; + try { + _ctx.s = 1390; + catchClause(_ctx); + _la = state.input.LA(1); + while ( _la==T__88 ) { + _ctx.s = 1392; + catchClause(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_catches_iter_121); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[91]); + } + return _ctx; + } + + + public final ParserRuleContext catchClause(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 182); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[92]); + try { + _ctx.s = 1398; + match(T__88); + _ctx.s = 1400; + match(T__66); + _ctx.s = 1402; + formalParameter(_ctx); + _ctx.s = 1404; + match(T__67); + _ctx.s = 1406; + block(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[92]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameter(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 184); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[93]); + try { + _ctx.s = 1408; + variableModifiers(_ctx); + _ctx.s = 1410; + type(_ctx); + _ctx.s = 1412; + variableDeclaratorId(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[93]); + } + return _ctx; + } + + + public final ParserRuleContext switchBlockStatementGroups(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 186); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[94]); + int _la; + try { + _la = state.input.LA(1); + while ( _la==T__74 || _la==T__89 ) { + _ctx.s = 1414; + switchBlockStatementGroup(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_switchBlockStatementGroups_iter_122); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[94]); + } + return _ctx; + } + + + public final ParserRuleContext switchBlockStatementGroup(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 188); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[95]); + int _la; + try { + int _alt1856 = _interp.adaptivePredict(state.input,125,_ctx); + do { + switch ( _alt1856 ) { + case 1: + _ctx.s = 1420; + switchLabel(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _alt1856 = _interp.adaptivePredict(state.input,125,_ctx); + } while ( _alt1856!=2 ); + _la = state.input.LA(1); + while ( _la==T__26 || _la==T__28 || _la==T__31 || _la==T__32 || _la==T__33 || _la==T__34 || _la==T__35 || _la==T__36 || _la==T__37 || _la==T__44 || _la==T__46 || _la==T__47 || _la==T__53 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__73 || _la==T__76 || _la==T__78 || _la==T__79 || _la==T__80 || _la==T__81 || _la==T__83 || _la==T__84 || _la==T__85 || _la==T__86 || _la==T__87 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==ENUM || _la==ASSERT || _la==Identifier ) { + _ctx.s = 1426; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_switchBlockStatementGroup_iter_126); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[95]); + } + return _ctx; + } + + + public final ParserRuleContext switchLabel(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 190); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[96]); + try { + switch ( _interp.adaptivePredict(state.input,127,_ctx) ) { + case 1: + _ctx.s = 1432; + match(T__89); + _ctx.s = 1434; + constantExpression(_ctx); + _ctx.s = 1436; + match(T__75); + break; + case 2: + _ctx.s = 1438; + match(T__89); + _ctx.s = 1440; + enumConstantName(_ctx); + _ctx.s = 1442; + match(T__75); + break; + case 3: + _ctx.s = 1444; + match(T__74); + _ctx.s = 1446; + match(T__75); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[96]); + } + return _ctx; + } + + + public final ParserRuleContext forControl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 192); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[97]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,131,_ctx) ) { + case 1: + _ctx.s = 1450; + enhancedForControl(_ctx); + break; + case 2: + _la = state.input.LA(1); + if ( _la==T__35 || _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__73 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 1452; + forInit(_ctx); + } + + _ctx.s = 1456; + match(T__26); + _la = state.input.LA(1); + if ( _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 1458; + expression(_ctx); + } + + _ctx.s = 1462; + match(T__26); + _la = state.input.LA(1); + if ( _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 1464; + forUpdate(_ctx); + } + + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[97]); + } + return _ctx; + } + + + public final ParserRuleContext forInit(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 194); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[98]); + try { + switch ( _interp.adaptivePredict(state.input,132,_ctx) ) { + case 1: + _ctx.s = 1470; + localVariableDeclaration(_ctx); + break; + case 2: + _ctx.s = 1472; + expressionList(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[98]); + } + return _ctx; + } + + + public final ParserRuleContext enhancedForControl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 196); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[99]); + try { + _ctx.s = 1476; + variableModifiers(_ctx); + _ctx.s = 1478; + type(_ctx); + _ctx.s = 1480; + match(Identifier); + _ctx.s = 1482; + match(T__75); + _ctx.s = 1484; + expression(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[99]); + } + return _ctx; + } + + + public final ParserRuleContext forUpdate(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 198); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[100]); + try { + _ctx.s = 1486; + expressionList(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[100]); + } + return _ctx; + } + + + public final ParserRuleContext parExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 200); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[101]); + try { + _ctx.s = 1488; + match(T__66); + _ctx.s = 1490; + expression(_ctx); + _ctx.s = 1492; + match(T__67); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[101]); + } + return _ctx; + } + + + public final ParserRuleContext expressionList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 202); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[102]); + int _la; + try { + _ctx.s = 1494; + expression(_ctx); + _la = state.input.LA(1); + while ( _la==T__41 ) { + _ctx.s = 1496; + match(T__41); + _ctx.s = 1498; + expression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_expressionList_iter_133); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[102]); + } + return _ctx; + } + + + public final ParserRuleContext statementExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 204); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[103]); + try { + _ctx.s = 1504; + expression(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[103]); + } + return _ctx; + } + + + public final ParserRuleContext constantExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 206); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[104]); + try { + _ctx.s = 1506; + expression(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[104]); + } + return _ctx; + } + + + public final ParserRuleContext expression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 208); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[105]); + int _la; + try { + _ctx.s = 1508; + conditionalExpression(_ctx); + _la = state.input.LA(1); + if ( _la==T__40 || _la==T__42 || _la==T__51 || _la==T__90 || _la==T__91 || _la==T__92 || _la==T__93 || _la==T__94 || _la==T__95 || _la==T__96 || _la==T__97 ) { + _ctx.s = 1510; + assignmentOperator(_ctx); + _ctx.s = 1512; + expression(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[105]); + } + return _ctx; + } + + + public final ParserRuleContext assignmentOperator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 210); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[106]); + try { + switch ( _interp.adaptivePredict(state.input,135,_ctx) ) { + case 1: + _ctx.s = 1516; + match(T__51); + break; + case 2: + _ctx.s = 1518; + match(T__90); + break; + case 3: + _ctx.s = 1520; + match(T__91); + break; + case 4: + _ctx.s = 1522; + match(T__92); + break; + case 5: + _ctx.s = 1524; + match(T__93); + break; + case 6: + _ctx.s = 1526; + match(T__94); + break; + case 7: + _ctx.s = 1528; + match(T__95); + break; + case 8: + _ctx.s = 1530; + match(T__96); + break; + case 9: + _ctx.s = 1532; + match(T__97); + break; + case 10: + _ctx.s = 1534; + match(T__40); + _ctx.s = 1536; + match(T__40); + _ctx.s = 1538; + match(T__51); + break; + case 11: + _ctx.s = 1540; + match(T__42); + _ctx.s = 1542; + match(T__42); + _ctx.s = 1544; + match(T__42); + _ctx.s = 1546; + match(T__51); + break; + case 12: + _ctx.s = 1548; + match(T__42); + _ctx.s = 1550; + match(T__42); + _ctx.s = 1552; + match(T__51); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[106]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 212); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[107]); + int _la; + try { + _ctx.s = 1556; + conditionalOrExpression(_ctx); + _la = state.input.LA(1); + if ( _la==T__64 ) { + _ctx.s = 1558; + match(T__64); + _ctx.s = 1560; + conditionalExpression(_ctx); + _ctx.s = 1562; + match(T__75); + _ctx.s = 1564; + conditionalExpression(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[107]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 214); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[108]); + int _la; + try { + _ctx.s = 1568; + conditionalAndExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__98 ) { + _ctx.s = 1570; + match(T__98); + _ctx.s = 1572; + conditionalAndExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_conditionalOrExpression_iter_137); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[108]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalAndExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 216); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[109]); + int _la; + try { + _ctx.s = 1578; + inclusiveOrExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__99 ) { + _ctx.s = 1580; + match(T__99); + _ctx.s = 1582; + inclusiveOrExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_conditionalAndExpression_iter_138); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[109]); + } + return _ctx; + } + + + public final ParserRuleContext inclusiveOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 218); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[110]); + int _la; + try { + _ctx.s = 1588; + exclusiveOrExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__100 ) { + _ctx.s = 1590; + match(T__100); + _ctx.s = 1592; + exclusiveOrExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_inclusiveOrExpression_iter_139); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[110]); + } + return _ctx; + } + + + public final ParserRuleContext exclusiveOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 220); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[111]); + int _la; + try { + _ctx.s = 1598; + andExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__101 ) { + _ctx.s = 1600; + match(T__101); + _ctx.s = 1602; + andExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_exclusiveOrExpression_iter_140); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[111]); + } + return _ctx; + } + + + public final ParserRuleContext andExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 222); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[112]); + int _la; + try { + _ctx.s = 1608; + equalityExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__43 ) { + _ctx.s = 1610; + match(T__43); + _ctx.s = 1612; + equalityExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_andExpression_iter_141); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[112]); + } + return _ctx; + } + + + public final ParserRuleContext equalityExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 224); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[113]); + int _la; + try { + _ctx.s = 1618; + instanceOfExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__102 || _la==T__103 ) { + switch ( state.input.LA(1) ) { + case T__102: + _ctx.s = 1620; + match(T__102); + break; + case T__103: + _ctx.s = 1622; + match(T__103); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 1626; + instanceOfExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_equalityExpression_iter_143); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[113]); + } + return _ctx; + } + + + public final ParserRuleContext instanceOfExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 226); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[114]); + int _la; + try { + _ctx.s = 1632; + relationalExpression(_ctx); + _la = state.input.LA(1); + if ( _la==T__104 ) { + _ctx.s = 1634; + match(T__104); + _ctx.s = 1636; + type(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[114]); + } + return _ctx; + } + + + public final ParserRuleContext relationalExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 228); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[115]); + try { + _ctx.s = 1640; + shiftExpression(_ctx); + int _alt2242 = _interp.adaptivePredict(state.input,145,_ctx); + while ( _alt2242!=2 ) { + switch ( _alt2242 ) { + case 1: + _ctx.s = 1642; + relationalOp(_ctx); + _ctx.s = 1644; + shiftExpression(_ctx); + break; + } + _alt2242 = _interp.adaptivePredict(state.input,145,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[115]); + } + return _ctx; + } + + + public final ParserRuleContext relationalOp(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 230); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[116]); + try { + switch ( _interp.adaptivePredict(state.input,146,_ctx) ) { + case 1: + _ctx.s = 1650; + match(T__40); + _ctx.s = 1652; + match(T__51); + break; + case 2: + _ctx.s = 1654; + match(T__42); + _ctx.s = 1656; + match(T__51); + break; + case 3: + _ctx.s = 1658; + match(T__40); + break; + case 4: + _ctx.s = 1660; + match(T__42); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[116]); + } + return _ctx; + } + + + public final ParserRuleContext shiftExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 232); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[117]); + try { + _ctx.s = 1664; + additiveExpression(_ctx); + int _alt2285 = _interp.adaptivePredict(state.input,147,_ctx); + while ( _alt2285!=2 ) { + switch ( _alt2285 ) { + case 1: + _ctx.s = 1666; + shiftOp(_ctx); + _ctx.s = 1668; + additiveExpression(_ctx); + break; + } + _alt2285 = _interp.adaptivePredict(state.input,147,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[117]); + } + return _ctx; + } + + + public final ParserRuleContext shiftOp(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 234); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[118]); + try { + switch ( _interp.adaptivePredict(state.input,148,_ctx) ) { + case 1: + _ctx.s = 1674; + match(T__40); + _ctx.s = 1676; + match(T__40); + break; + case 2: + _ctx.s = 1678; + match(T__42); + _ctx.s = 1680; + match(T__42); + _ctx.s = 1682; + match(T__42); + break; + case 3: + _ctx.s = 1684; + match(T__42); + _ctx.s = 1686; + match(T__42); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[118]); + } + return _ctx; + } + + + public final ParserRuleContext additiveExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 236); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[119]); + int _la; + try { + _ctx.s = 1690; + multiplicativeExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__105 || _la==T__106 ) { + switch ( state.input.LA(1) ) { + case T__105: + _ctx.s = 1692; + match(T__105); + break; + case T__106: + _ctx.s = 1694; + match(T__106); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 1698; + multiplicativeExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_additiveExpression_iter_150); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[119]); + } + return _ctx; + } + + + public final ParserRuleContext multiplicativeExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 238); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[120]); + int _la; + try { + _ctx.s = 1704; + unaryExpression(_ctx); + _la = state.input.LA(1); + while ( _la==T__30 || _la==T__107 || _la==T__108 ) { + switch ( state.input.LA(1) ) { + case T__30: + _ctx.s = 1706; + match(T__30); + break; + case T__107: + _ctx.s = 1708; + match(T__107); + break; + case T__108: + _ctx.s = 1710; + match(T__108); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 1714; + unaryExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_multiplicativeExpression_iter_152); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[120]); + } + return _ctx; + } + + + public final ParserRuleContext unaryExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 240); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[121]); + try { + switch ( state.input.LA(1) ) { + case T__105: + _ctx.s = 1720; + match(T__105); + _ctx.s = 1722; + unaryExpression(_ctx); + break; + case T__106: + _ctx.s = 1724; + match(T__106); + _ctx.s = 1726; + unaryExpression(_ctx); + break; + case T__109: + _ctx.s = 1728; + match(T__109); + _ctx.s = 1730; + unaryExpression(_ctx); + break; + case T__110: + _ctx.s = 1732; + match(T__110); + _ctx.s = 1734; + unaryExpression(_ctx); + break; + case T__47: + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case T__65: + case T__66: + case T__69: + case T__70: + case T__71: + case T__72: + case T__111: + case T__112: + case T__113: + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + case FloatingPointLiteral: + case CharacterLiteral: + case StringLiteral: + case Identifier: + _ctx.s = 1736; + unaryExpressionNotPlusMinus(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[121]); + } + return _ctx; + } + + + public final ParserRuleContext unaryExpressionNotPlusMinus(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 242); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[122]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,156,_ctx) ) { + case 1: + _ctx.s = 1740; + match(T__111); + _ctx.s = 1742; + unaryExpression(_ctx); + break; + case 2: + _ctx.s = 1744; + match(T__112); + _ctx.s = 1746; + unaryExpression(_ctx); + break; + case 3: + _ctx.s = 1748; + castExpression(_ctx); + break; + case 4: + _ctx.s = 1750; + primary(_ctx); + _la = state.input.LA(1); + while ( _la==T__29 || _la==T__48 ) { + _ctx.s = 1752; + selector(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_unaryExpressionNotPlusMinus_iter_154); + } + switch ( state.input.LA(1) ) { + case T__109: + _ctx.s = 1758; + match(T__109); + break; + case T__110: + _ctx.s = 1760; + match(T__110); + break; + case T__26: + case T__30: + case T__40: + case T__41: + case T__42: + case T__43: + case T__45: + case T__49: + case T__51: + case T__64: + case T__67: + case T__75: + case T__90: + case T__91: + case T__92: + case T__93: + case T__94: + case T__95: + case T__96: + case T__97: + case T__98: + case T__99: + case T__100: + case T__101: + case T__102: + case T__103: + case T__104: + case T__105: + case T__106: + case T__107: + case T__108: + break; + default : + throw new NoViableAltException(this,_ctx); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[122]); + } + return _ctx; + } + + + public final ParserRuleContext castExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 244); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[123]); + try { + switch ( _interp.adaptivePredict(state.input,158,_ctx) ) { + case 1: + _ctx.s = 1766; + match(T__66); + _ctx.s = 1768; + primitiveType(_ctx); + _ctx.s = 1770; + match(T__67); + _ctx.s = 1772; + unaryExpression(_ctx); + break; + case 2: + _ctx.s = 1774; + match(T__66); + switch ( _interp.adaptivePredict(state.input,157,_ctx) ) { + case 1: + _ctx.s = 1776; + type(_ctx); + break; + case 2: + _ctx.s = 1778; + expression(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + _ctx.s = 1782; + match(T__67); + _ctx.s = 1784; + unaryExpressionNotPlusMinus(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[123]); + } + return _ctx; + } + + + public final ParserRuleContext primary(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 246); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[124]); + int _la; + try { + switch ( state.input.LA(1) ) { + case T__66: + _ctx.s = 1788; + parExpression(_ctx); + break; + case T__69: + _ctx.s = 1790; + match(T__69); + int _alt2478 = _interp.adaptivePredict(state.input,159,_ctx); + while ( _alt2478!=2 ) { + switch ( _alt2478 ) { + case 1: + _ctx.s = 1792; + match(T__29); + _ctx.s = 1794; + match(Identifier); + break; + } + _alt2478 = _interp.adaptivePredict(state.input,159,_ctx); + } + switch ( _interp.adaptivePredict(state.input,160,_ctx) ) { + case 1: + _ctx.s = 1800; + identifierSuffix(_ctx); + break; + } + break; + case T__65: + _ctx.s = 1804; + match(T__65); + _ctx.s = 1806; + superSuffix(_ctx); + break; + case T__70: + case T__71: + case T__72: + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + case FloatingPointLiteral: + case CharacterLiteral: + case StringLiteral: + _ctx.s = 1808; + literal(_ctx); + break; + case T__113: + _ctx.s = 1810; + match(T__113); + _ctx.s = 1812; + creator(_ctx); + break; + case Identifier: + _ctx.s = 1814; + match(Identifier); + int _alt2508 = _interp.adaptivePredict(state.input,161,_ctx); + while ( _alt2508!=2 ) { + switch ( _alt2508 ) { + case 1: + _ctx.s = 1816; + match(T__29); + _ctx.s = 1818; + match(Identifier); + break; + } + _alt2508 = _interp.adaptivePredict(state.input,161,_ctx); + } + switch ( _interp.adaptivePredict(state.input,162,_ctx) ) { + case 1: + _ctx.s = 1824; + identifierSuffix(_ctx); + break; + } + break; + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + _ctx.s = 1828; + primitiveType(_ctx); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 1830; + match(T__48); + _ctx.s = 1832; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_primary_iter_163); + } + _ctx.s = 1838; + match(T__29); + _ctx.s = 1840; + match(T__37); + break; + case T__47: + _ctx.s = 1842; + match(T__47); + _ctx.s = 1844; + match(T__29); + _ctx.s = 1846; + match(T__37); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[124]); + } + return _ctx; + } + + + public final ParserRuleContext identifierSuffix(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 248); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[125]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,168,_ctx) ) { + case 1: + //sync(EXPECTING_in_identifierSuffix_enter_167); + _la = state.input.LA(1); + do { + _ctx.s = 1850; + match(T__48); + _ctx.s = 1852; + match(T__49); + _la = state.input.LA(1); + // sync(EXPECTING_in_identifierSuffix_iter_167); + } while ( _la==T__48 ); + _ctx.s = 1858; + match(T__29); + _ctx.s = 1860; + match(T__37); + break; + case 2: + _ctx.s = 1862; + arguments(_ctx); + break; + case 3: + _ctx.s = 1864; + match(T__29); + _ctx.s = 1866; + match(T__37); + break; + case 4: + _ctx.s = 1868; + match(T__29); + _ctx.s = 1870; + explicitGenericInvocation(_ctx); + break; + case 5: + _ctx.s = 1872; + match(T__29); + _ctx.s = 1874; + match(T__69); + break; + case 6: + _ctx.s = 1876; + match(T__29); + _ctx.s = 1878; + match(T__65); + _ctx.s = 1880; + arguments(_ctx); + break; + case 7: + _ctx.s = 1882; + match(T__29); + _ctx.s = 1884; + match(T__113); + _ctx.s = 1886; + innerCreator(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[125]); + } + return _ctx; + } + + + public final ParserRuleContext creator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 250); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[126]); + try { + switch ( state.input.LA(1) ) { + case T__40: + _ctx.s = 1890; + nonWildcardTypeArguments(_ctx); + _ctx.s = 1892; + createdName(_ctx); + _ctx.s = 1894; + classCreatorRest(_ctx); + break; + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case Identifier: + _ctx.s = 1896; + createdName(_ctx); + switch ( state.input.LA(1) ) { + case T__48: + _ctx.s = 1898; + arrayCreatorRest(_ctx); + break; + case T__66: + _ctx.s = 1900; + classCreatorRest(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[126]); + } + return _ctx; + } + + + public final ParserRuleContext createdName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 252); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[127]); + try { + switch ( state.input.LA(1) ) { + case Identifier: + _ctx.s = 1906; + classOrInterfaceType(_ctx); + break; + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + _ctx.s = 1908; + primitiveType(_ctx); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[127]); + } + return _ctx; + } + + + public final ParserRuleContext innerCreator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 254); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[128]); + int _la; + try { + _la = state.input.LA(1); + if ( _la==T__40 ) { + _ctx.s = 1912; + nonWildcardTypeArguments(_ctx); + } + + _ctx.s = 1916; + match(Identifier); + _ctx.s = 1918; + classCreatorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[128]); + } + return _ctx; + } + + + public final ParserRuleContext arrayCreatorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 256); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[129]); + int _la; + try { + _ctx.s = 1920; + match(T__48); + switch ( state.input.LA(1) ) { + case T__49: + _ctx.s = 1922; + match(T__49); + _la = state.input.LA(1); + while ( _la==T__48 ) { + _ctx.s = 1924; + match(T__48); + _ctx.s = 1926; + match(T__49); + _la = state.input.LA(1); + //sync(EXPECTING_in_arrayCreatorRest_iter_173); + } + _ctx.s = 1932; + arrayInitializer(_ctx); + break; + case T__47: + case T__56: + case T__57: + case T__58: + case T__59: + case T__60: + case T__61: + case T__62: + case T__63: + case T__65: + case T__66: + case T__69: + case T__70: + case T__71: + case T__72: + case T__105: + case T__106: + case T__109: + case T__110: + case T__111: + case T__112: + case T__113: + case HexLiteral: + case DecimalLiteral: + case OctalLiteral: + case FloatingPointLiteral: + case CharacterLiteral: + case StringLiteral: + case Identifier: + _ctx.s = 1934; + expression(_ctx); + _ctx.s = 1936; + match(T__49); + int _alt2676 = _interp.adaptivePredict(state.input,174,_ctx); + while ( _alt2676!=2 ) { + switch ( _alt2676 ) { + case 1: + _ctx.s = 1938; + match(T__48); + _ctx.s = 1940; + expression(_ctx); + _ctx.s = 1942; + match(T__49); + break; + } + _alt2676 = _interp.adaptivePredict(state.input,174,_ctx); + } + int _alt2683 = _interp.adaptivePredict(state.input,175,_ctx); + while ( _alt2683!=2 ) { + switch ( _alt2683 ) { + case 1: + _ctx.s = 1948; + match(T__48); + _ctx.s = 1950; + match(T__49); + break; + } + _alt2683 = _interp.adaptivePredict(state.input,175,_ctx); + } + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[129]); + } + return _ctx; + } + + + public final ParserRuleContext classCreatorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 258); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[130]); + int _la; + try { + _ctx.s = 1958; + arguments(_ctx); + _la = state.input.LA(1); + if ( _la==T__44 ) { + _ctx.s = 1960; + classBody(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[130]); + } + return _ctx; + } + + + public final ParserRuleContext explicitGenericInvocation(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 260); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[131]); + try { + _ctx.s = 1964; + nonWildcardTypeArguments(_ctx); + _ctx.s = 1966; + match(Identifier); + _ctx.s = 1968; + arguments(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[131]); + } + return _ctx; + } + + + public final ParserRuleContext nonWildcardTypeArguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 262); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[132]); + try { + _ctx.s = 1970; + match(T__40); + _ctx.s = 1972; + typeList(_ctx); + _ctx.s = 1974; + match(T__42); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[132]); + } + return _ctx; + } + + + public final ParserRuleContext selector(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 264); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[133]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,179,_ctx) ) { + case 1: + _ctx.s = 1976; + match(T__29); + _ctx.s = 1978; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__66 ) { + _ctx.s = 1980; + arguments(_ctx); + } + + break; + case 2: + _ctx.s = 1984; + match(T__29); + _ctx.s = 1986; + match(T__69); + break; + case 3: + _ctx.s = 1988; + match(T__29); + _ctx.s = 1990; + match(T__65); + _ctx.s = 1992; + superSuffix(_ctx); + break; + case 4: + _ctx.s = 1994; + match(T__29); + _ctx.s = 1996; + match(T__113); + _ctx.s = 1998; + innerCreator(_ctx); + break; + case 5: + _ctx.s = 2000; + match(T__48); + _ctx.s = 2002; + expression(_ctx); + _ctx.s = 2004; + match(T__49); + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[133]); + } + return _ctx; + } + + + public final ParserRuleContext superSuffix(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 266); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[134]); + int _la; + try { + switch ( state.input.LA(1) ) { + case T__66: + _ctx.s = 2008; + arguments(_ctx); + break; + case T__29: + _ctx.s = 2010; + match(T__29); + _ctx.s = 2012; + match(Identifier); + _la = state.input.LA(1); + if ( _la==T__66 ) { + _ctx.s = 2014; + arguments(_ctx); + } + + break; + default : + throw new NoViableAltException(this,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[134]); + } + return _ctx; + } + + + public final ParserRuleContext arguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 268); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[135]); + int _la; + try { + _ctx.s = 2020; + match(T__66); + _la = state.input.LA(1); + if ( _la==T__47 || _la==T__56 || _la==T__57 || _la==T__58 || _la==T__59 || _la==T__60 || _la==T__61 || _la==T__62 || _la==T__63 || _la==T__65 || _la==T__66 || _la==T__69 || _la==T__70 || _la==T__71 || _la==T__72 || _la==T__105 || _la==T__106 || _la==T__109 || _la==T__110 || _la==T__111 || _la==T__112 || _la==T__113 || _la==HexLiteral || _la==DecimalLiteral || _la==OctalLiteral || _la==FloatingPointLiteral || _la==CharacterLiteral || _la==StringLiteral || _la==Identifier ) { + _ctx.s = 2022; + expressionList(_ctx); + } + + _ctx.s = 2026; + match(T__67); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[135]); + } + return _ctx; + } + + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\031\155\u07ed\02\01\07\01\02\02\07\02\02\03\07\03\02\04\07\04\02\05"+ + "\07\05\02\06\07\06\02\07\07\07\02\010\07\010\02\011\07\011\02\012"+ + "\07\012\02\013\07\013\02\014\07\014\02\015\07\015\02\016\07\016\02"+ + "\017\07\017\02\020\07\020\02\021\07\021\02\022\07\022\02\023\07\023"+ + "\02\024\07\024\02\025\07\025\02\026\07\026\02\027\07\027\02\030\07"+ + "\030\02\031\07\031\02\032\07\032\02\033\07\033\02\034\07\034\02\035"+ + "\07\035\02\036\07\036\02\037\07\037\02\040\07\040\02\041\07\041\02"+ + "\042\07\042\02\043\07\043\02\044\07\044\02\045\07\045\02\046\07\046"+ + "\02\047\07\047\02\050\07\050\02\051\07\051\02\052\07\052\02\053\07"+ + "\053\02\054\07\054\02\055\07\055\02\056\07\056\02\057\07\057\02\060"+ + "\07\060\02\061\07\061\02\062\07\062\02\063\07\063\02\064\07\064\02"+ + "\065\07\065\02\066\07\066\02\067\07\067\02\070\07\070\02\071\07\071"+ + "\02\072\07\072\02\073\07\073\02\074\07\074\02\075\07\075\02\076\07"+ + "\076\02\077\07\077\02\100\07\100\02\101\07\101\02\102\07\102\02\103"+ + "\07\103\02\104\07\104\02\105\07\105\02\106\07\106\02\107\07\107\02"+ + "\110\07\110\02\111\07\111\02\112\07\112\02\113\07\113\02\114\07\114"+ + "\02\115\07\115\02\116\07\116\02\117\07\117\02\120\07\120\02\121\07"+ + "\121\02\122\07\122\02\123\07\123\02\124\07\124\02\125\07\125\02\126"+ + "\07\126\02\127\07\127\02\130\07\130\02\131\07\131\02\132\07\132\02"+ + "\133\07\133\02\134\07\134\02\135\07\135\02\136\07\136\02\137\07\137"+ + "\02\140\07\140\02\141\07\141\02\142\07\142\02\143\07\143\02\144\07"+ + "\144\02\145\07\145\02\146\07\146\02\147\07\147\02\150\07\150\02\151"+ + "\07\151\02\152\07\152\02\153\07\153\02\154\07\154\02\155\07\155\02"+ + "\156\07\156\02\157\07\157\02\160\07\160\02\161\07\161\02\162\07\162"+ + "\02\163\07\163\02\164\07\164\02\165\07\165\02\166\07\166\02\167\07"+ + "\167\02\170\07\170\02\171\07\171\02\172\07\172\02\173\07\173\02\174"+ + "\07\174\02\175\07\175\02\176\07\176\02\177\07\177\02\u0080\07\u0080"+ + "\02\u0081\07\u0081\02\u0082\07\u0082\02\u0083\07\u0083\02\u0084\07"+ + "\u0084\02\u0085\07\u0085\02\u0086\07\u0086\02\u0087\07\u0087\01\01"+ + "\01\01\01\01\01\01\01\01\01\01\05\01\010\01\011\01\01\01\01\01\01"+ + "\01\05\01\010\01\011\01\01\01\01\01\01\01\01\01\01\01\05\01\010\01"+ + "\011\01\01\01\03\01\010\01\01\01\01\01\03\01\010\01\01\01\01\01\05"+ + "\01\010\01\011\01\01\01\01\01\01\01\05\01\010\01\011\01\01\01\03\01"+ + "\010\01\01\02\01\02\01\02\01\02\01\02\01\02\01\03\01\03\01\03\01\03"+ + "\03\03\010\03\01\03\01\03\01\03\01\03\01\03\01\03\03\03\010\03\01"+ + "\03\01\03\01\04\01\04\01\04\01\04\03\04\010\04\01\05\01\05\01\05\01"+ + "\05\01\05\01\05\03\05\010\05\01\06\01\06\05\06\010\06\011\06\01\06"+ + "\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07"+ + "\01\07\01\07\01\07\01\07\01\07\03\07\010\07\01\010\01\010\05\010\010"+ + "\010\011\010\01\010\01\011\01\011\01\011\01\011\03\011\010\011\01"+ + "\012\01\012\01\012\01\012\01\012\01\012\03\012\010\012\01\012\01\012"+ + "\01\012\01\012\03\012\010\012\01\012\01\012\01\012\01\012\03\012\010"+ + "\012\01\012\01\012\01\013\01\013\01\013\01\013\01\013\01\013\01\013"+ + "\01\013\05\013\010\013\011\013\01\013\01\013\01\013\01\014\01\014"+ + "\01\014\01\014\01\014\01\014\03\014\010\014\01\015\01\015\01\015\01"+ + "\015\01\015\01\015\05\015\010\015\011\015\01\015\01\016\01\016\01"+ + "\016\01\016\01\016\01\016\01\016\01\016\03\016\010\016\01\016\01\016"+ + "\01\017\01\017\01\017\01\017\03\017\010\017\01\017\01\017\03\017\010"+ + "\017\01\017\01\017\03\017\010\017\01\017\01\017\01\020\01\020\01\020"+ + "\01\020\01\020\01\020\05\020\010\020\011\020\01\020\01\021\01\021"+ + "\03\021\010\021\01\021\01\021\01\021\01\021\03\021\010\021\01\021"+ + "\01\021\03\021\010\021\01\022\01\022\01\022\01\022\05\022\010\022"+ + "\011\022\01\022\01\023\01\023\01\023\01\023\03\023\010\023\01\024"+ + "\01\024\01\024\01\024\01\024\01\024\03\024\010\024\01\024\01\024\01"+ + "\024\01\024\03\024\010\024\01\024\01\024\01\025\01\025\01\025\01\025"+ + "\01\025\01\025\05\025\010\025\011\025\01\025\01\026\01\026\01\026"+ + "\01\026\05\026\010\026\011\026\01\026\01\026\01\026\01\027\01\027"+ + "\01\027\01\027\05\027\010\027\011\027\01\027\01\027\01\027\01\030"+ + "\01\030\01\030\01\030\03\030\010\030\01\030\01\030\01\030\01\030\01"+ + "\030\01\030\03\030\010\030\01\031\01\031\01\031\01\031\01\031\01\031"+ + "\01\031\01\031\01\031\01\031\01\031\01\031\01\031\01\031\01\031\01"+ + "\031\01\031\01\031\03\031\010\031\01\032\01\032\01\032\01\032\01\032"+ + "\01\032\03\032\010\032\01\033\01\033\01\033\01\033\01\034\01\034\01"+ + "\034\01\034\03\034\010\034\01\034\01\034\01\034\01\034\01\034\01\034"+ + "\01\034\01\034\03\034\010\034\01\035\01\035\01\035\01\035\01\036\01"+ + "\036\01\036\01\036\01\037\01\037\01\037\01\037\01\037\01\037\03\037"+ + "\010\037\01\040\01\040\01\040\01\040\01\040\01\040\01\040\01\040\01"+ + "\040\01\040\01\040\01\040\01\040\01\040\03\040\010\040\01\041\01\041"+ + "\01\041\01\041\01\041\01\041\01\042\01\042\01\042\01\042\01\042\01"+ + "\042\03\042\010\042\01\043\01\043\01\043\01\043\01\043\01\043\05\043"+ + "\010\043\011\043\01\043\01\043\01\043\01\043\01\043\03\043\010\043"+ + "\01\043\01\043\01\043\01\043\03\043\010\043\01\044\01\044\01\044\01"+ + "\044\01\044\01\044\03\044\010\044\01\044\01\044\01\044\01\044\03\044"+ + "\010\044\01\045\01\045\01\045\01\045\01\045\01\045\05\045\010\045"+ + "\011\045\01\045\01\045\01\045\01\045\01\045\03\045\010\045\01\045"+ + "\01\045\01\046\01\046\01\046\01\046\01\046\01\046\03\046\010\046\01"+ + "\046\01\046\01\046\01\046\01\047\01\047\01\047\01\047\01\047\01\047"+ + "\03\047\010\047\01\047\01\047\01\050\01\050\01\050\01\050\01\050\01"+ + "\050\03\050\010\050\01\050\01\050\01\051\01\051\01\051\01\051\01\052"+ + "\01\052\01\052\01\052\01\052\01\052\05\052\010\052\011\052\01\052"+ + "\01\053\01\053\01\053\01\053\01\053\01\053\03\053\010\053\01\054\01"+ + "\054\01\054\01\054\01\054\01\054\05\054\010\054\011\054\01\054\01"+ + "\055\01\055\01\055\01\055\05\055\010\055\011\055\01\055\01\055\01"+ + "\055\01\055\01\055\01\056\01\056\01\056\01\056\01\056\01\056\05\056"+ + "\010\056\011\056\01\056\01\057\01\057\01\057\01\057\03\057\010\057"+ + "\01\060\01\060\01\060\01\060\01\060\01\060\01\060\01\060\05\060\010"+ + "\060\011\060\01\060\01\060\01\060\03\060\010\060\03\060\010\060\01"+ + "\060\01\060\01\061\01\061\01\061\01\061\01\061\01\061\01\061\01\061"+ + "\01\061\01\061\01\061\01\061\01\061\01\061\01\061\01\061\01\061\01"+ + "\061\01\061\01\061\01\061\01\061\01\061\01\061\03\061\010\061\01\062"+ + "\01\062\01\063\01\063\01\064\01\064\01\065\01\065\01\065\01\065\01"+ + "\065\01\065\05\065\010\065\011\065\01\065\01\065\01\065\01\065\01"+ + "\065\01\065\01\065\05\065\010\065\011\065\01\065\03\065\010\065\01"+ + "\066\01\066\01\066\01\066\03\066\010\066\01\066\01\066\01\066\01\066"+ + "\01\066\01\066\03\066\010\066\05\066\010\066\011\066\01\066\01\067"+ + "\01\067\01\067\01\067\01\067\01\067\01\067\01\067\01\067\01\067\01"+ + "\067\01\067\01\067\01\067\01\067\01\067\03\067\010\067\01\070\01\070"+ + "\01\070\01\070\03\070\010\070\01\071\01\071\01\071\01\071\01\071\01"+ + "\071\01\071\01\071\05\071\010\071\011\071\01\071\01\071\01\071\01"+ + "\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\03\072\010\072"+ + "\01\072\01\072\03\072\010\072\03\072\010\072\01\073\01\073\01\073"+ + "\01\073\01\073\01\073\05\073\010\073\011\073\01\073\01\074\01\074"+ + "\01\074\01\074\03\074\010\074\01\074\01\074\01\075\01\075\01\075\01"+ + "\075\01\075\01\075\01\076\01\076\01\076\01\076\01\076\01\076\03\076"+ + "\010\076\01\076\01\076\01\076\01\076\03\076\010\076\01\077\01\077"+ + "\01\100\01\100\01\100\01\100\03\100\010\100\01\100\01\100\05\100\010"+ + "\100\011\100\01\100\01\100\01\100\01\101\01\101\03\101\010\101\01"+ + "\101\01\101\01\101\01\101\03\101\010\101\01\101\01\101\01\101\01\101"+ + "\01\101\01\101\01\101\01\101\01\101\01\101\03\101\010\101\01\101\01"+ + "\101\01\101\01\101\01\101\01\101\03\101\010\101\01\102\01\102\01\102"+ + "\01\102\01\102\01\102\05\102\010\102\011\102\01\102\01\103\01\103"+ + "\01\103\01\103\01\103\01\103\01\103\01\103\01\103\01\103\01\103\01"+ + "\103\03\103\010\103\01\104\01\104\01\104\01\104\01\104\01\104\03\104"+ + "\010\104\01\105\01\105\01\105\01\105\03\105\010\105\01\106\01\106"+ + "\04\106\010\106\012\106\01\106\01\107\01\107\01\107\01\107\01\107"+ + "\01\107\01\107\01\107\01\107\01\107\03\107\010\107\01\107\01\107\03"+ + "\107\010\107\01\110\01\110\01\110\01\110\01\110\01\110\05\110\010"+ + "\110\011\110\01\110\01\111\01\111\01\111\01\111\01\111\01\111\05\111"+ + "\010\111\011\111\01\111\01\112\01\112\01\112\01\112\01\112\01\112"+ + "\01\113\01\113\01\113\01\113\01\113\01\113\03\113\010\113\01\114\01"+ + "\114\01\114\01\114\01\114\01\114\01\114\01\114\05\114\010\114\011"+ + "\114\01\114\03\114\010\114\01\114\01\114\03\114\010\114\01\114\01"+ + "\114\01\115\01\115\01\115\01\115\01\115\01\115\01\115\01\115\01\116"+ + "\01\116\01\116\01\116\05\116\010\116\011\116\01\116\01\116\01\116"+ + "\01\117\01\117\01\117\01\117\01\120\01\120\01\120\01\120\01\120\01"+ + "\120\01\120\01\120\01\120\01\120\03\120\010\120\01\120\01\120\01\120"+ + "\01\120\03\120\010\120\01\120\01\120\01\120\01\120\03\120\010\120"+ + "\01\120\01\120\01\120\01\120\03\120\010\120\03\120\010\120\01\121"+ + "\01\121\01\121\01\121\03\121\010\121\01\122\01\122\01\122\01\122\01"+ + "\122\01\122\01\122\01\122\03\122\010\122\01\123\01\123\01\124\01\124"+ + "\01\124\01\124\01\125\01\125\01\125\01\125\05\125\010\125\011\125"+ + "\01\125\01\125\01\125\01\126\01\126\01\126\01\126\01\126\01\126\03"+ + "\126\010\126\01\127\01\127\01\127\01\127\01\130\01\130\01\130\01\130"+ + "\01\130\01\130\01\131\01\131\05\131\010\131\011\131\01\131\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\03"+ + "\132\010\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132"+ + "\01\132\01\132\01\132\01\132\03\132\010\132\01\132\01\132\01\132\01"+ + "\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01"+ + "\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01"+ + "\132\03\132\010\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01"+ + "\132\01\132\01\132\01\132\03\132\010\132\01\132\01\132\01\132\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\03\132\010"+ + "\132\01\132\01\132\01\132\01\132\01\132\01\132\03\132\010\132\01\132"+ + "\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01\132\01"+ + "\132\01\132\01\132\01\132\03\132\010\132\01\133\01\133\01\133\01\133"+ + "\05\133\010\133\011\133\01\133\01\134\01\134\01\134\01\134\01\134"+ + "\01\134\01\134\01\134\01\134\01\134\01\135\01\135\01\135\01\135\01"+ + "\135\01\135\01\136\01\136\05\136\010\136\011\136\01\136\01\137\01"+ + "\137\04\137\010\137\012\137\01\137\01\137\01\137\05\137\010\137\011"+ + "\137\01\137\01\140\01\140\01\140\01\140\01\140\01\140\01\140\01\140"+ + "\01\140\01\140\01\140\01\140\01\140\01\140\01\140\01\140\03\140\010"+ + "\140\01\141\01\141\01\141\01\141\03\141\010\141\01\141\01\141\01\141"+ + "\01\141\03\141\010\141\01\141\01\141\01\141\01\141\03\141\010\141"+ + "\03\141\010\141\01\142\01\142\01\142\01\142\03\142\010\142\01\143"+ + "\01\143\01\143\01\143\01\143\01\143\01\143\01\143\01\143\01\143\01"+ + "\144\01\144\01\145\01\145\01\145\01\145\01\145\01\145\01\146\01\146"+ + "\01\146\01\146\01\146\01\146\05\146\010\146\011\146\01\146\01\147"+ + "\01\147\01\150\01\150\01\151\01\151\01\151\01\151\01\151\01\151\03"+ + "\151\010\151\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152"+ + "\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01"+ + "\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152"+ + "\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01\152\01"+ + "\152\01\152\03\152\010\152\01\153\01\153\01\153\01\153\01\153\01\153"+ + "\01\153\01\153\01\153\01\153\03\153\010\153\01\154\01\154\01\154\01"+ + "\154\01\154\01\154\05\154\010\154\011\154\01\154\01\155\01\155\01"+ + "\155\01\155\01\155\01\155\05\155\010\155\011\155\01\155\01\156\01"+ + "\156\01\156\01\156\01\156\01\156\05\156\010\156\011\156\01\156\01"+ + "\157\01\157\01\157\01\157\01\157\01\157\05\157\010\157\011\157\01"+ + "\157\01\160\01\160\01\160\01\160\01\160\01\160\05\160\010\160\011"+ + "\160\01\160\01\161\01\161\01\161\01\161\01\161\01\161\03\161\010\161"+ + "\01\161\01\161\05\161\010\161\011\161\01\161\01\162\01\162\01\162"+ + "\01\162\01\162\01\162\03\162\010\162\01\163\01\163\01\163\01\163\01"+ + "\163\01\163\05\163\010\163\011\163\01\163\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\03\164"+ + "\010\164\01\165\01\165\01\165\01\165\01\165\01\165\05\165\010\165"+ + "\011\165\01\165\01\166\01\166\01\166\01\166\01\166\01\166\01\166\01"+ + "\166\01\166\01\166\01\166\01\166\01\166\01\166\03\166\010\166\01\167"+ + "\01\167\01\167\01\167\01\167\01\167\03\167\010\167\01\167\01\167\05"+ + "\167\010\167\011\167\01\167\01\170\01\170\01\170\01\170\01\170\01"+ + "\170\01\170\01\170\03\170\010\170\01\170\01\170\05\170\010\170\011"+ + "\170\01\170\01\171\01\171\01\171\01\171\01\171\01\171\01\171\01\171"+ + "\01\171\01\171\01\171\01\171\01\171\01\171\01\171\01\171\01\171\01"+ + "\171\03\171\010\171\01\172\01\172\01\172\01\172\01\172\01\172\01\172"+ + "\01\172\01\172\01\172\01\172\01\172\01\172\01\172\05\172\010\172\011"+ + "\172\01\172\01\172\01\172\01\172\01\172\03\172\010\172\03\172\010"+ + "\172\01\173\01\173\01\173\01\173\01\173\01\173\01\173\01\173\01\173"+ + "\01\173\01\173\01\173\01\173\01\173\03\173\010\173\01\173\01\173\01"+ + "\173\01\173\03\173\010\173\01\174\01\174\01\174\01\174\01\174\01\174"+ + "\01\174\01\174\05\174\010\174\011\174\01\174\01\174\01\174\03\174"+ + "\010\174\01\174\01\174\01\174\01\174\01\174\01\174\01\174\01\174\01"+ + "\174\01\174\01\174\01\174\01\174\01\174\01\174\01\174\05\174\010\174"+ + "\011\174\01\174\01\174\01\174\03\174\010\174\01\174\01\174\01\174"+ + "\01\174\01\174\01\174\05\174\010\174\011\174\01\174\01\174\01\174"+ + "\01\174\01\174\01\174\01\174\01\174\01\174\01\174\01\174\03\174\010"+ + "\174\01\175\01\175\01\175\01\175\04\175\010\175\012\175\01\175\01"+ + "\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175"+ + "\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01"+ + "\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175\01\175"+ + "\01\175\03\175\010\175\01\176\01\176\01\176\01\176\01\176\01\176\01"+ + "\176\01\176\01\176\01\176\01\176\01\176\03\176\010\176\03\176\010"+ + "\176\01\177\01\177\01\177\01\177\03\177\010\177\01\u0080\01\u0080"+ + "\03\u0080\010\u0080\01\u0080\01\u0080\01\u0080\01\u0080\01\u0081\01"+ + "\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081\05\u0081"+ + "\010\u0081\011\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081"+ + "\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01\u0081\01"+ + "\u0081\05\u0081\010\u0081\011\u0081\01\u0081\01\u0081\01\u0081\01"+ + "\u0081\01\u0081\05\u0081\010\u0081\011\u0081\01\u0081\03\u0081\010"+ + "\u0081\01\u0082\01\u0082\01\u0082\01\u0082\03\u0082\010\u0082\01\u0083"+ + "\01\u0083\01\u0083\01\u0083\01\u0083\01\u0083\01\u0084\01\u0084\01"+ + "\u0084\01\u0084\01\u0084\01\u0084\01\u0085\01\u0085\01\u0085\01\u0085"+ + "\01\u0085\01\u0085\03\u0085\010\u0085\01\u0085\01\u0085\01\u0085\01"+ + "\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085"+ + "\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01\u0085\01"+ + "\u0085\01\u0085\01\u0085\01\u0085\03\u0085\010\u0085\01\u0086\01\u0086"+ + "\01\u0086\01\u0086\01\u0086\01\u0086\01\u0086\01\u0086\03\u0086\010"+ + "\u0086\03\u0086\010\u0086\01\u0087\01\u0087\01\u0087\01\u0087\03\u0087"+ + "\010\u0087\01\u0087\01\u0087\01\u0087\u0087\00\00\00\02\00\00\04\00"+ + "\00\06\00\00\010\00\00\012\00\00\014\00\00\016\00\00\020\00\00\022"+ + "\00\00\024\00\00\026\00\00\030\00\00\032\00\00\034\00\00\036\00\00"+ + "\040\00\00\042\00\00\044\00\00\046\00\00\050\00\00\052\00\00\054\00"+ + "\00\056\00\00\060\00\00\062\00\00\064\00\00\066\00\00\070\00\00\072"+ + "\00\00\074\00\00\076\00\00\100\00\00\102\00\00\104\00\00\106\00\00"+ + "\110\00\00\112\00\00\114\00\00\116\00\00\120\00\00\122\00\00\124\00"+ + "\00\126\00\00\130\00\00\132\00\00\134\00\00\136\00\00\140\00\00\142"+ + "\00\00\144\00\00\146\00\00\150\00\00\152\00\00\154\00\00\156\00\00"+ + "\160\00\00\162\00\00\164\00\00\166\00\00\170\00\00\172\00\00\174\00"+ + "\00\176\00\00\u0080\00\00\u0082\00\00\u0084\00\00\u0086\00\00\u0088"+ + "\00\00\u008a\00\00\u008c\00\00\u008e\00\00\u0090\00\00\u0092\00\00"+ + "\u0094\00\00\u0096\00\00\u0098\00\00\u009a\00\00\u009c\00\00\u009e"+ + "\00\00\u00a0\00\00\u00a2\00\00\u00a4\00\00\u00a6\00\00\u00a8\00\00"+ + "\u00aa\00\00\u00ac\00\00\u00ae\00\00\u00b0\00\00\u00b2\00\00\u00b4"+ + "\00\00\u00b6\00\00\u00b8\00\00\u00ba\00\00\u00bc\00\00\u00be\00\00"+ + "\u00c0\00\00\u00c2\00\00\u00c4\00\00\u00c6\00\00\u00c8\00\00\u00ca"+ + "\00\00\u00cc\00\00\u00ce\00\00\u00d0\00\00\u00d2\00\00\u00d4\00\00"+ + "\u00d6\00\00\u00d8\00\00\u00da\00\00\u00dc\00\00\u00de\00\00\u00e0"+ + "\00\00\u00e2\00\00\u00e4\00\00\u00e6\00\00\u00e8\00\00\u00ea\00\00"+ + "\u00ec\00\00\u00ee\00\00\u00f0\00\00\u00f2\00\00\u00f4\00\00\u00f6"+ + "\00\00\u00f8\00\00\u00fa\00\00\u00fc\00\00\u00fe\00\00\u0100\00\00"+ + "\u0102\00\00\u0104\00\00\u0106\00\00\u0108\00\00\u010a\00\00\u010c"+ + "\00\00\00\00\u09a6\00\u0138\01\00\00\01\u07ec\05\uffff\00\02\u013a"+ + "\01\00\00\03\u0111\01\00\00\03\u0129\01\00\00\04\u0140\01\00\00\05"+ + "\u0113\01\00\00\05\u012d\01\00\00\06\u0154\01\00\00\07\u0119\01\00"+ + "\00\07\u0121\01\00\00\07\u0133\01\00\00\010\u0156\01\00\00\011\u011f"+ + "\01\00\00\011\u0151\01\00\00\011\u04d7\01\00\00\012\u0160\01\00\00"+ + "\013\u0157\01\00\00\014\u0174\01\00\00\015\u015f\01\00\00\016\u0178"+ + "\01\00\00\017\u0231\01\00\00\017\u026f\01\00\00\017\u0491\01\00\00"+ + "\020\u0180\01\00\00\021\u0159\01\00\00\021\u0247\01\00\00\021\u0283"+ + "\01\00\00\022\u0182\01\00\00\023\u017d\01\00\00\023\u049b\01\00\00"+ + "\024\u0198\01\00\00\025\u0187\01\00\00\025\u01ff\01\00\00\025\u0253"+ + "\01\00\00\025\u02cb\01\00\00\026\u01a6\01\00\00\027\u019b\01\00\00"+ + "\027\u019f\01\00\00\030\u01ae\01\00\00\031\u01ab\01\00\00\032\u01b8"+ + "\01\00\00\033\u017f\01\00\00\033\u04a7\01\00\00\034\u01c4\01\00\00"+ + "\035\u01c3\01\00\00\036\u01d4\01\00\00\037\u01c7\01\00\00\040\u01e0"+ + "\01\00\00\041\u01d5\01\00\00\041\u01d9\01\00\00\042\u01ec\01\00\00"+ + "\043\u01cf\01\00\00\044\u01f8\01\00\00\045\u015b\01\00\00\045\u0245"+ + "\01\00\00\045\u0281\01\00\00\046\u01fa\01\00\00\047\u01f5\01\00\00"+ + "\047\u04a1\01\00\00\050\u020a\01\00\00\051\u0193\01\00\00\051\u01bf"+ + "\01\00\00\051\u0205\01\00\00\051\u07b5\01\00\00\052\u0214\01\00\00"+ + "\053\u0197\01\00\00\053\u01e9\01\00\00\053\u07a9\01\00\00\054\u021e"+ + "\01\00\00\055\u0209\01\00\00\056\u0234\01\00\00\057\u01ef\01\00\00"+ + "\057\u0217\01\00\00\060\u0248\01\00\00\061\u0233\01\00\00\062\u024a"+ + "\01\00\00\063\u0239\01\00\00\064\u0252\01\00\00\065\u0237\01\00\00"+ + "\066\u0264\01\00\00\067\u0255\01\00\00\070\u0266\01\00\00\071\u024d"+ + "\01\00\00\072\u026a\01\00\00\073\u024f\01\00\00\074\u0274\01\00\00"+ + "\075\u0221\01\00\00\076\u0284\01\00\00\077\u0271\01\00\00\100\u0286"+ + "\01\00\00\101\u0277\01\00\00\102\u0292\01\00\00\103\u028b\01\00\00"+ + "\104\u0294\01\00\00\105\u025f\01\00\00\105\u0269\01\00\00\106\u02aa"+ + "\01\00\00\107\u023f\01\00\00\110\u02b8\01\00\00\111\u0291\01\00\00"+ + "\111\u02d5\01\00\00\112\u02ca\01\00\00\113\u0279\01\00\00\114\u02d6"+ + "\01\00\00\115\u027f\01\00\00\116\u02e0\01\00\00\117\u0243\01\00\00"+ + "\117\u0263\01\00\00\120\u02ea\01\00\00\121\u0305\01\00\00\122\u02ee"+ + "\01\00\00\123\u026b\01\00\00\123\u04c5\01\00\00\123\u04e5\01\00\00"+ + "\124\u02f8\01\00\00\125\u02ef\01\00\00\125\u02f3\01\00\00\126\u0300"+ + "\01\00\00\127\u028d\01\00\00\130\u030e\01\00\00\131\u02ed\01\00\00"+ + "\131\u0301\01\00\00\132\u0316\01\00\00\133\u02f9\01\00\00\133\u03d1"+ + "\01\00\00\133\u03db\01\00\00\133\u0585\01\00\00\134\u0324\01\00\00"+ + "\135\u02fd\01\00\00\135\u0315\01\00\00\135\u0329\01\00\00\135\u032d"+ + "\01\00\00\136\u0326\01\00\00\137\u0321\01\00\00\137\u078d\01\00\00"+ + "\140\u0352\01\00\00\141\u0177\01\00\00\142\u0354\01\00\00\143\u07ec"+ + "\05\uffff\00\144\u0356\01\00\00\145\u05a1\01\00\00\146\u0358\01\00"+ + "\00\147\u07ec\05\uffff\00\150\u036e\01\00\00\151\u018d\01\00\00\151"+ + "\u01af\01\00\00\151\u01b3\01\00\00\151\u020b\01\00\00\151\u020f\01"+ + "\00\00\151\u024b\01\00\00\151\u0257\01\00\00\151\u0287\01\00\00\151"+ + "\u02cd\01\00\00\151\u03a9\01\00\00\151\u03b3\01\00\00\151\u03cd\01"+ + "\00\00\151\u0495\01\00\00\151\u04e3\01\00\00\151\u0583\01\00\00\151"+ + "\u05c7\01\00\00\151\u0665\01\00\00\151\u06f1\01\00\00\152\u0370\01"+ + "\00\00\153\u035b\01\00\00\153\u0773\01\00\00\154\u0392\01\00\00\155"+ + "\u0365\01\00\00\155\u06e9\01\00\00\155\u0725\01\00\00\155\u0775\01"+ + "\00\00\156\u0398\01\00\00\157\u04e7\01\00\00\160\u039a\01\00\00\161"+ + "\u0373\01\00\00\161\u037b\01\00\00\162\u03b6\01\00\00\163\u039d\01"+ + "\00\00\163\u03a1\01\00\00\164\u03b8\01\00\00\165\u02a1\01\00\00\165"+ + "\u02af\01\00\00\165\u02c5\01\00\00\165\u02db\01\00\00\165\u02e5\01"+ + "\00\00\166\u03c2\01\00\00\167\u0295\01\00\00\167\u02ab\01\00\00\167"+ + "\u02b9\01\00\00\167\u02d7\01\00\00\167\u02e1\01\00\00\170\u03ca\01"+ + "\00\00\171\u03c5\01\00\00\171\u03d5\01\00\00\172\u03dc\01\00\00\173"+ + "\u03cf\01\00\00\174\u03de\01\00\00\175\u02a5\01\00\00\175\u02b3\01"+ + "\00\00\176\u03e0\01\00\00\177\u02e9\01\00\00\u0080\u040a\01\00\00"+ + "\u0081\u03e3\01\00\00\u0082\u040c\01\00\00\u0083\u013d\01\00\00\u0083"+ + "\u0147\01\00\00\u0083\u0355\01\00\00\u0083\u0359\01\00\00\u0083\u03b9"+ + "\01\00\00\u0083\u03bd\01\00\00\u0084\u0422\01\00\00\u0085\u0711\01"+ + "\00\00\u0086\u042a\01\00\00\u0087\u0417\01\00\00\u0088\u0430\01\00"+ + "\00\u0089\u041f\01\00\00\u008a\u0434\01\00\00\u008b\u010f\01\00\00"+ + "\u008b\u01df\01\00\00\u008c\u0438\01\00\00\u008d\u0165\01\00\00\u008d"+ + "\u033b\01\00\00\u008d\u0397\01\00\00\u008d\u0433\01\00\00\u008d\u0465"+ + "\01\00\00\u008e\u0448\01\00\00\u008f\u043b\01\00\00\u0090\u0452\01"+ + "\00\00\u0091\u043f\01\00\00\u0092\u045c\01\00\00\u0093\u0453\01\00"+ + "\00\u0093\u0457\01\00\00\u0094\u0468\01\00\00\u0095\u0441\01\00\00"+ + "\u0095\u0461\01\00\00\u0095\u046d\01\00\00\u0095\u0471\01\00\00\u0095"+ + "\u04c9\01\00\00\u0096\u046a\01\00\00\u0097\u0467\01\00\00\u0098\u047e"+ + "\01\00\00\u0099\u01f7\01\00\00\u0099\u04ad\01\00\00\u009a\u0486\01"+ + "\00\00\u009b\u0485\01\00\00\u009c\u0490\01\00\00\u009d\u0489\01\00"+ + "\00\u009e\u04b2\01\00\00\u009f\u0493\01\00\00\u00a0\u04b8\01\00\00"+ + "\u00a1\u0497\01\00\00\u00a2\u04ba\01\00\00\u00a3\u04b5\01\00\00\u00a4"+ + "\u04c4\01\00\00\u00a5\u04b7\01\00\00\u00a6\u04c6\01\00\00\u00a7\u04c1"+ + "\01\00\00\u00a8\u04ca\01\00\00\u00a9\u022f\01\00\00\u00a9\u03df\01"+ + "\00\00\u00a9\u04ed\01\00\00\u00a9\u0523\01\00\00\u00a9\u0529\01\00"+ + "\00\u00a9\u052f\01\00\00\u00a9\u0541\01\00\00\u00a9\u057f\01\00\00"+ + "\u00aa\u04da\01\00\00\u00ab\u03e7\01\00\00\u00ab\u04cd\01\00\00\u00ab"+ + "\u0593\01\00\00\u00ac\u04dc\01\00\00\u00ad\u04d5\01\00\00\u00ae\u04e0"+ + "\01\00\00\u00af\u04dd\01\00\00\u00af\u05bf\01\00\00\u00b0\u04e8\01"+ + "\00\00\u00b1\u03cb\01\00\00\u00b1\u04e1\01\00\00\u00b1\u0581\01\00"+ + "\00\u00b1\u05c5\01\00\00\u00b2\u056c\01\00\00\u00b3\u04d9\01\00\00"+ + "\u00b3\u04ff\01\00\00\u00b3\u0503\01\00\00\u00b3\u050f\01\00\00\u00b3"+ + "\u0515\01\00\00\u00b3\u0519\01\00\00\u00b3\u056b\01\00\00\u00b4\u056e"+ + "\01\00\00\u00b5\u0525\01\00\00\u00b5\u052b\01\00\00\u00b6\u0576\01"+ + "\00\00\u00b7\u056f\01\00\00\u00b7\u0571\01\00\00\u00b8\u0580\01\00"+ + "\00\u00b9\u057b\01\00\00\u00ba\u0588\01\00\00\u00bb\u0539\01\00\00"+ + "\u00bc\u058e\01\00\00\u00bd\u0587\01\00\00\u00be\u05a8\01\00\00\u00bf"+ + "\u058d\01\00\00\u00c0\u05bc\01\00\00\u00c1\u050b\01\00\00\u00c2\u05c2"+ + "\01\00\00\u00c3\u05ad\01\00\00\u00c4\u05c4\01\00\00\u00c5\u05ab\01"+ + "\00\00\u00c6\u05ce\01\00\00\u00c7\u05b9\01\00\00\u00c8\u05d0\01\00"+ + "\00\u00c9\u04fd\01\00\00\u00c9\u0513\01\00\00\u00c9\u051d\01\00\00"+ + "\u00c9\u0535\01\00\00\u00c9\u053f\01\00\00\u00c9\u06fd\01\00\00\u00ca"+ + "\u05d6\01\00\00\u00cb\u05c1\01\00\00\u00cb\u05cf\01\00\00\u00cb\u07e7"+ + "\01\00\00\u00cc\u05e0\01\00\00\u00cd\u0563\01\00\00\u00ce\u05e2\01"+ + "\00\00\u00cf\u059b\01\00\00\u00d0\u05e4\01\00\00\u00d1\u0323\01\00"+ + "\00\u00d1\u04f1\01\00\00\u00d1\u04f5\01\00\00\u00d1\u0545\01\00\00"+ + "\u00d1\u054d\01\00\00\u00d1\u05b3\01\00\00\u00d1\u05cd\01\00\00\u00d1"+ + "\u05d3\01\00\00\u00d1\u05d7\01\00\00\u00d1\u05db\01\00\00\u00d1\u05e1"+ + "\01\00\00\u00d1\u05e3\01\00\00\u00d1\u05e9\01\00\00\u00d1\u06f3\01"+ + "\00\00\u00d1\u078f\01\00\00\u00d1\u0795\01\00\00\u00d1\u07d3\01\00"+ + "\00\u00d2\u0612\01\00\00\u00d3\u05e7\01\00\00\u00d4\u0614\01\00\00"+ + "\u00d5\u0463\01\00\00\u00d5\u05e5\01\00\00\u00d5\u0619\01\00\00\u00d5"+ + "\u061d\01\00\00\u00d6\u0620\01\00\00\u00d7\u0615\01\00\00\u00d8\u062a"+ + "\01\00\00\u00d9\u0621\01\00\00\u00d9\u0625\01\00\00\u00da\u0634\01"+ + "\00\00\u00db\u062b\01\00\00\u00db\u062f\01\00\00\u00dc\u063e\01\00"+ + "\00\u00dd\u0635\01\00\00\u00dd\u0639\01\00\00\u00de\u0648\01\00\00"+ + "\u00df\u063f\01\00\00\u00df\u0643\01\00\00\u00e0\u0652\01\00\00\u00e1"+ + "\u0649\01\00\00\u00e1\u064d\01\00\00\u00e2\u0660\01\00\00\u00e3\u0653"+ + "\01\00\00\u00e3\u065b\01\00\00\u00e4\u0668\01\00\00\u00e5\u0661\01"+ + "\00\00\u00e6\u067e\01\00\00\u00e7\u066b\01\00\00\u00e8\u0680\01\00"+ + "\00\u00e9\u0669\01\00\00\u00e9\u066d\01\00\00\u00ea\u0698\01\00\00"+ + "\u00eb\u0683\01\00\00\u00ec\u069a\01\00\00\u00ed\u0681\01\00\00\u00ed"+ + "\u0685\01\00\00\u00ee\u06a8\01\00\00\u00ef\u069b\01\00\00\u00ef\u06a3"+ + "\01\00\00\u00f0\u06ca\01\00\00\u00f1\u06a9\01\00\00\u00f1\u06b3\01"+ + "\00\00\u00f1\u06bb\01\00\00\u00f1\u06bf\01\00\00\u00f1\u06c3\01\00"+ + "\00\u00f1\u06c7\01\00\00\u00f1\u06cf\01\00\00\u00f1\u06d3\01\00\00"+ + "\u00f1\u06ed\01\00\00\u00f2\u06e4\01\00\00\u00f3\u06c9\01\00\00\u00f3"+ + "\u06f9\01\00\00\u00f4\u06fa\01\00\00\u00f5\u06d5\01\00\00\u00f6\u0738"+ + "\01\00\00\u00f7\u03fd\01\00\00\u00f7\u06d7\01\00\00\u00f8\u0760\01"+ + "\00\00\u00f9\u0709\01\00\00\u00f9\u0721\01\00\00\u00fa\u0770\01\00"+ + "\00\u00fb\u0715\01\00\00\u00fc\u0776\01\00\00\u00fd\u0765\01\00\00"+ + "\u00fd\u0769\01\00\00\u00fe\u077a\01\00\00\u00ff\u075f\01\00\00\u00ff"+ + "\u07cf\01\00\00\u0100\u0780\01\00\00\u0101\u076b\01\00\00\u0102\u07a6"+ + "\01\00\00\u0103\u0767\01\00\00\u0103\u076d\01\00\00\u0103\u077f\01"+ + "\00\00\u0104\u07ac\01\00\00\u0105\u074f\01\00\00\u0106\u07b2\01\00"+ + "\00\u0107\u03ef\01\00\00\u0107\u0401\01\00\00\u0107\u0763\01\00\00"+ + "\u0107\u0779\01\00\00\u0107\u07ad\01\00\00\u0108\u07d6\01\00\00\u0109"+ + "\u06d9\01\00\00\u010a\u07e2\01\00\00\u010b\u070f\01\00\00\u010b\u07c9"+ + "\01\00\00\u010c\u07e4\01\00\00\u010d\u01e5\01\00\00\u010d\u03f9\01"+ + "\00\00\u010d\u0407\01\00\00\u010d\u0747\01\00\00\u010d\u0759\01\00"+ + "\00\u010d\u07a7\01\00\00\u010d\u07b1\01\00\00\u010d\u07bd\01\00\00"+ + "\u010d\u07d9\01\00\00\u010d\u07df\01\00\00\u010e\u010f\03\u008a\106"+ + "\u010f\u0126\01\00\00\u0110\u0111\03\02\02\u0111\u0114\01\00\00\u0112"+ + "\u0113\03\04\03\u0113\u0115\01\00\00\u0114\u0112\01\00\00\u0114\u0117"+ + "\01\00\00\u0115\u0116\01\00\00\u0116\u0114\01\00\00\u0117\u011a\01"+ + "\00\00\u0118\u0119\03\06\04\u0119\u011b\01\00\00\u011a\u0118\01\00"+ + "\00\u011a\u011d\01\00\00\u011b\u011c\01\00\00\u011c\u011a\01\00\00"+ + "\u011d\u0127\01\00\00\u011e\u011f\03\010\05\u011f\u0122\01\00\00\u0120"+ + "\u0121\03\06\04\u0121\u0123\01\00\00\u0122\u0120\01\00\00\u0122\u0125"+ + "\01\00\00\u0123\u0124\01\00\00\u0124\u0122\01\00\00\u0125\u0127\01"+ + "\00\00\u0126\u0110\01\00\00\u0126\u011e\01\00\00\u0127\u0139\01\00"+ + "\00\u0128\u0129\03\02\02\u0129\u012b\01\00\00\u012a\u0128\01\00\00"+ + "\u012a\u012b\01\00\00\u012b\u012e\01\00\00\u012c\u012d\03\04\03\u012d"+ + "\u012f\01\00\00\u012e\u012c\01\00\00\u012e\u0131\01\00\00\u012f\u0130"+ + "\01\00\00\u0130\u012e\01\00\00\u0131\u0134\01\00\00\u0132\u0133\03"+ + "\06\04\u0133\u0135\01\00\00\u0134\u0132\01\00\00\u0134\u0137\01\00"+ + "\00\u0135\u0136\01\00\00\u0136\u0134\01\00\00\u0137\u0139\01\00\00"+ + "\u0138\u010e\01\00\00\u0138\u012a\01\00\00\u0139\01\01\00\00\u013a"+ + "\u013b\05\04\00\u013b\u013c\01\00\00\u013c\u013d\03\u0082\102\u013d"+ + "\u013e\01\00\00\u013e\u013f\05\05\00\u013f\03\01\00\00\u0140\u0141"+ + "\05\06\00\u0141\u0144\01\00\00\u0142\u0143\05\07\00\u0143\u0145\01"+ + "\00\00\u0144\u0142\01\00\00\u0144\u0145\01\00\00\u0145\u0146\01\00"+ + "\00\u0146\u0147\03\u0082\102\u0147\u014c\01\00\00\u0148\u0149\05\010"+ + "\00\u0149\u014a\01\00\00\u014a\u014b\05\011\00\u014b\u014d\01\00\00"+ + "\u014c\u0148\01\00\00\u014c\u014d\01\00\00\u014d\u014e\01\00\00\u014e"+ + "\u014f\05\05\00\u014f\05\01\00\00\u0150\u0151\03\010\05\u0151\u0155"+ + "\01\00\00\u0152\u0153\05\05\00\u0153\u0155\01\00\00\u0154\u0150\01"+ + "\00\00\u0154\u0152\01\00\00\u0155\07\01\00\00\u0156\u0157\03\012\06"+ + "\u0157\u015c\01\00\00\u0158\u0159\03\020\011\u0159\u015d\01\00\00"+ + "\u015a\u015b\03\044\023\u015b\u015d\01\00\00\u015c\u0158\01\00\00"+ + "\u015c\u015a\01\00\00\u015d\011\01\00\00\u015e\u015f\03\014\07\u015f"+ + "\u0161\01\00\00\u0160\u015e\01\00\00\u0160\u0163\01\00\00\u0161\u0162"+ + "\01\00\00\u0162\u0160\01\00\00\u0163\013\01\00\00\u0164\u0165\03\u008c"+ + "\107\u0165\u0175\01\00\00\u0166\u0167\05\012\00\u0167\u0175\01\00"+ + "\00\u0168\u0169\05\013\00\u0169\u0175\01\00\00\u016a\u016b\05\014"+ + "\00\u016b\u0175\01\00\00\u016c\u016d\05\015\00\u016d\u0175\01\00\00"+ + "\u016e\u016f\05\07\00\u016f\u0175\01\00\00\u0170\u0171\05\016\00\u0171"+ + "\u0175\01\00\00\u0172\u0173\05\017\00\u0173\u0175\01\00\00\u0174\u0164"+ + "\01\00\00\u0174\u0166\01\00\00\u0174\u0168\01\00\00\u0174\u016a\01"+ + "\00\00\u0174\u016c\01\00\00\u0174\u016e\01\00\00\u0174\u0170\01\00"+ + "\00\u0174\u0172\01\00\00\u0175\015\01\00\00\u0176\u0177\03\140\061"+ + "\u0177\u0179\01\00\00\u0178\u0176\01\00\00\u0178\u017b\01\00\00\u0179"+ + "\u017a\01\00\00\u017a\u0178\01\00\00\u017b\017\01\00\00\u017c\u017d"+ + "\03\022\012\u017d\u0181\01\00\00\u017e\u017f\03\032\016\u017f\u0181"+ + "\01\00\00\u0180\u017c\01\00\00\u0180\u017e\01\00\00\u0181\021\01\00"+ + "\00\u0182\u0183\05\020\00\u0183\u0184\01\00\00\u0184\u0185\05\145"+ + "\00\u0185\u0188\01\00\00\u0186\u0187\03\024\013\u0187\u0189\01\00"+ + "\00\u0188\u0186\01\00\00\u0188\u0189\01\00\00\u0189\u018e\01\00\00"+ + "\u018a\u018b\05\021\00\u018b\u018c\01\00\00\u018c\u018d\03\150\065"+ + "\u018d\u018f\01\00\00\u018e\u018a\01\00\00\u018e\u018f\01\00\00\u018f"+ + "\u0194\01\00\00\u0190\u0191\05\022\00\u0191\u0192\01\00\00\u0192\u0193"+ + "\03\050\025\u0193\u0195\01\00\00\u0194\u0190\01\00\00\u0194\u0195"+ + "\01\00\00\u0195\u0196\01\00\00\u0196\u0197\03\052\026\u0197\023\01"+ + "\00\00\u0198\u0199\05\023\00\u0199\u019a\01\00\00\u019a\u019b\03\026"+ + "\014\u019b\u01a0\01\00\00\u019c\u019d\05\024\00\u019d\u019e\01\00"+ + "\00\u019e\u019f\03\026\014\u019f\u01a1\01\00\00\u01a0\u019c\01\00"+ + "\00\u01a0\u01a3\01\00\00\u01a1\u01a2\01\00\00\u01a2\u01a0\01\00\00"+ + "\u01a3\u01a4\01\00\00\u01a4\u01a5\05\025\00\u01a5\025\01\00\00\u01a6"+ + "\u01a7\05\145\00\u01a7\u01ac\01\00\00\u01a8\u01a9\05\021\00\u01a9"+ + "\u01aa\01\00\00\u01aa\u01ab\03\030\015\u01ab\u01ad\01\00\00\u01ac"+ + "\u01a8\01\00\00\u01ac\u01ad\01\00\00\u01ad\027\01\00\00\u01ae\u01af"+ + "\03\150\065\u01af\u01b4\01\00\00\u01b0\u01b1\05\026\00\u01b1\u01b2"+ + "\01\00\00\u01b2\u01b3\03\150\065\u01b3\u01b5\01\00\00\u01b4\u01b0"+ + "\01\00\00\u01b4\u01b7\01\00\00\u01b5\u01b6\01\00\00\u01b6\u01b4\01"+ + "\00\00\u01b7\031\01\00\00\u01b8\u01b9\05\143\00\u01b9\u01ba\01\00"+ + "\00\u01ba\u01bb\05\145\00\u01bb\u01c0\01\00\00\u01bc\u01bd\05\022"+ + "\00\u01bd\u01be\01\00\00\u01be\u01bf\03\050\025\u01bf\u01c1\01\00"+ + "\00\u01c0\u01bc\01\00\00\u01c0\u01c1\01\00\00\u01c1\u01c2\01\00\00"+ + "\u01c2\u01c3\03\034\017\u01c3\033\01\00\00\u01c4\u01c5\05\027\00\u01c5"+ + "\u01c8\01\00\00\u01c6\u01c7\03\036\020\u01c7\u01c9\01\00\00\u01c8"+ + "\u01c6\01\00\00\u01c8\u01c9\01\00\00\u01c9\u01cc\01\00\00\u01ca\u01cb"+ + "\05\024\00\u01cb\u01cd\01\00\00\u01cc\u01ca\01\00\00\u01cc\u01cd\01"+ + "\00\00\u01cd\u01d0\01\00\00\u01ce\u01cf\03\042\022\u01cf\u01d1\01"+ + "\00\00\u01d0\u01ce\01\00\00\u01d0\u01d1\01\00\00\u01d1\u01d2\01\00"+ + "\00\u01d2\u01d3\05\030\00\u01d3\035\01\00\00\u01d4\u01d5\03\040\021"+ + "\u01d5\u01da\01\00\00\u01d6\u01d7\05\024\00\u01d7\u01d8\01\00\00\u01d8"+ + "\u01d9\03\040\021\u01d9\u01db\01\00\00\u01da\u01d6\01\00\00\u01da"+ + "\u01dd\01\00\00\u01db\u01dc\01\00\00\u01dc\u01da\01\00\00\u01dd\037"+ + "\01\00\00\u01de\u01df\03\u008a\106\u01df\u01e1\01\00\00\u01e0\u01de"+ + "\01\00\00\u01e0\u01e1\01\00\00\u01e1\u01e2\01\00\00\u01e2\u01e3\05"+ + "\145\00\u01e3\u01e6\01\00\00\u01e4\u01e5\03\u010c\u0087\u01e5\u01e7"+ + "\01\00\00\u01e6\u01e4\01\00\00\u01e6\u01e7\01\00\00\u01e7\u01ea\01"+ + "\00\00\u01e8\u01e9\03\052\026\u01e9\u01eb\01\00\00\u01ea\u01e8\01"+ + "\00\00\u01ea\u01eb\01\00\00\u01eb\041\01\00\00\u01ec\u01ed\05\05\00"+ + "\u01ed\u01f0\01\00\00\u01ee\u01ef\03\056\030\u01ef\u01f1\01\00\00"+ + "\u01f0\u01ee\01\00\00\u01f0\u01f3\01\00\00\u01f1\u01f2\01\00\00\u01f2"+ + "\u01f0\01\00\00\u01f3\043\01\00\00\u01f4\u01f5\03\046\024\u01f5\u01f9"+ + "\01\00\00\u01f6\u01f7\03\u0098\115\u01f7\u01f9\01\00\00\u01f8\u01f4"+ + "\01\00\00\u01f8\u01f6\01\00\00\u01f9\045\01\00\00\u01fa\u01fb\05\031"+ + "\00\u01fb\u01fc\01\00\00\u01fc\u01fd\05\145\00\u01fd\u0200\01\00\00"+ + "\u01fe\u01ff\03\024\013\u01ff\u0201\01\00\00\u0200\u01fe\01\00\00"+ + "\u0200\u0201\01\00\00\u0201\u0206\01\00\00\u0202\u0203\05\021\00\u0203"+ + "\u0204\01\00\00\u0204\u0205\03\050\025\u0205\u0207\01\00\00\u0206"+ + "\u0202\01\00\00\u0206\u0207\01\00\00\u0207\u0208\01\00\00\u0208\u0209"+ + "\03\054\027\u0209\047\01\00\00\u020a\u020b\03\150\065\u020b\u0210"+ + "\01\00\00\u020c\u020d\05\024\00\u020d\u020e\01\00\00\u020e\u020f\03"+ + "\150\065\u020f\u0211\01\00\00\u0210\u020c\01\00\00\u0210\u0213\01"+ + "\00\00\u0211\u0212\01\00\00\u0212\u0210\01\00\00\u0213\051\01\00\00"+ + "\u0214\u0215\05\027\00\u0215\u0218\01\00\00\u0216\u0217\03\056\030"+ + "\u0217\u0219\01\00\00\u0218\u0216\01\00\00\u0218\u021b\01\00\00\u0219"+ + "\u021a\01\00\00\u021a\u0218\01\00\00\u021b\u021c\01\00\00\u021c\u021d"+ + "\05\030\00\u021d\053\01\00\00\u021e\u021f\05\027\00\u021f\u0222\01"+ + "\00\00\u0220\u0221\03\074\037\u0221\u0223\01\00\00\u0222\u0220\01"+ + "\00\00\u0222\u0225\01\00\00\u0223\u0224\01\00\00\u0224\u0222\01\00"+ + "\00\u0225\u0226\01\00\00\u0226\u0227\05\030\00\u0227\055\01\00\00"+ + "\u0228\u0229\05\05\00\u0229\u0235\01\00\00\u022a\u022b\05\07\00\u022b"+ + "\u022d\01\00\00\u022c\u022a\01\00\00\u022c\u022d\01\00\00\u022d\u022e"+ + "\01\00\00\u022e\u022f\03\u00a8\125\u022f\u0235\01\00\00\u0230\u0231"+ + "\03\016\010\u0231\u0232\01\00\00\u0232\u0233\03\060\031\u0233\u0235"+ + "\01\00\00\u0234\u0228\01\00\00\u0234\u022c\01\00\00\u0234\u0230\01"+ + "\00\00\u0235\057\01\00\00\u0236\u0237\03\064\033\u0237\u0249\01\00"+ + "\00\u0238\u0239\03\062\032\u0239\u0249\01\00\00\u023a\u023b\05\032"+ + "\00\u023b\u023c\01\00\00\u023c\u023d\05\145\00\u023d\u023e\01\00\00"+ + "\u023e\u023f\03\106\044\u023f\u0249\01\00\00\u0240\u0241\05\145\00"+ + "\u0241\u0242\01\00\00\u0242\u0243\03\116\050\u0243\u0249\01\00\00"+ + "\u0244\u0245\03\044\023\u0245\u0249\01\00\00\u0246\u0247\03\020\011"+ + "\u0247\u0249\01\00\00\u0248\u0236\01\00\00\u0248\u0238\01\00\00\u0248"+ + "\u023a\01\00\00\u0248\u0240\01\00\00\u0248\u0244\01\00\00\u0248\u0246"+ + "\01\00\00\u0249\061\01\00\00\u024a\u024b\03\150\065\u024b\u0250\01"+ + "\00\00\u024c\u024d\03\070\035\u024d\u0251\01\00\00\u024e\u024f\03"+ + "\072\036\u024f\u0251\01\00\00\u0250\u024c\01\00\00\u0250\u024e\01"+ + "\00\00\u0251\063\01\00\00\u0252\u0253\03\024\013\u0253\u0254\01\00"+ + "\00\u0254\u0255\03\066\034\u0255\065\01\00\00\u0256\u0257\03\150\065"+ + "\u0257\u025b\01\00\00\u0258\u0259\05\032\00\u0259\u025b\01\00\00\u025a"+ + "\u0256\01\00\00\u025a\u0258\01\00\00\u025b\u025c\01\00\00\u025c\u025d"+ + "\05\145\00\u025d\u025e\01\00\00\u025e\u025f\03\104\043\u025f\u0265"+ + "\01\00\00\u0260\u0261\05\145\00\u0261\u0262\01\00\00\u0262\u0263\03"+ + "\116\050\u0263\u0265\01\00\00\u0264\u025a\01\00\00\u0264\u0260\01"+ + "\00\00\u0265\067\01\00\00\u0266\u0267\05\145\00\u0267\u0268\01\00"+ + "\00\u0268\u0269\03\104\043\u0269\071\01\00\00\u026a\u026b\03\122\052"+ + "\u026b\u026c\01\00\00\u026c\u026d\05\05\00\u026d\073\01\00\00\u026e"+ + "\u026f\03\016\010\u026f\u0270\01\00\00\u0270\u0271\03\076\040\u0271"+ + "\u0275\01\00\00\u0272\u0273\05\05\00\u0273\u0275\01\00\00\u0274\u026e"+ + "\01\00\00\u0274\u0272\01\00\00\u0275\075\01\00\00\u0276\u0277\03\100"+ + "\041\u0277\u0285\01\00\00\u0278\u0279\03\112\046\u0279\u0285\01\00"+ + "\00\u027a\u027b\05\032\00\u027b\u027c\01\00\00\u027c\u027d\05\145"+ + "\00\u027d\u027e\01\00\00\u027e\u027f\03\114\047\u027f\u0285\01\00"+ + "\00\u0280\u0281\03\044\023\u0281\u0285\01\00\00\u0282\u0283\03\020"+ + "\011\u0283\u0285\01\00\00\u0284\u0276\01\00\00\u0284\u0278\01\00\00"+ + "\u0284\u027a\01\00\00\u0284\u0280\01\00\00\u0284\u0282\01\00\00\u0285"+ + "\077\01\00\00\u0286\u0287\03\150\065\u0287\u0288\01\00\00\u0288\u0289"+ + "\05\145\00\u0289\u028a\01\00\00\u028a\u028b\03\102\042\u028b\101\01"+ + "\00\00\u028c\u028d\03\126\054\u028d\u028e\01\00\00\u028e\u028f\05"+ + "\05\00\u028f\u0293\01\00\00\u0290\u0291\03\110\045\u0291\u0293\01"+ + "\00\00\u0292\u028c\01\00\00\u0292\u0290\01\00\00\u0293\103\01\00\00"+ + "\u0294\u0295\03\166\074\u0295\u029a\01\00\00\u0296\u0297\05\033\00"+ + "\u0297\u0298\01\00\00\u0298\u0299\05\034\00\u0299\u029b\01\00\00\u029a"+ + "\u0296\01\00\00\u029a\u029d\01\00\00\u029b\u029c\01\00\00\u029c\u029a"+ + "\01\00\00\u029d\u02a2\01\00\00\u029e\u029f\05\035\00\u029f\u02a0\01"+ + "\00\00\u02a0\u02a1\03\164\073\u02a1\u02a3\01\00\00\u02a2\u029e\01"+ + "\00\00\u02a2\u02a3\01\00\00\u02a3\u02a8\01\00\00\u02a4\u02a5\03\174"+ + "\077\u02a5\u02a9\01\00\00\u02a6\u02a7\05\05\00\u02a7\u02a9\01\00\00"+ + "\u02a8\u02a4\01\00\00\u02a8\u02a6\01\00\00\u02a9\105\01\00\00\u02aa"+ + "\u02ab\03\166\074\u02ab\u02b0\01\00\00\u02ac\u02ad\05\035\00\u02ad"+ + "\u02ae\01\00\00\u02ae\u02af\03\164\073\u02af\u02b1\01\00\00\u02b0"+ + "\u02ac\01\00\00\u02b0\u02b1\01\00\00\u02b1\u02b6\01\00\00\u02b2\u02b3"+ + "\03\174\077\u02b3\u02b7\01\00\00\u02b4\u02b5\05\05\00\u02b5\u02b7"+ + "\01\00\00\u02b6\u02b2\01\00\00\u02b6\u02b4\01\00\00\u02b7\107\01\00"+ + "\00\u02b8\u02b9\03\166\074\u02b9\u02be\01\00\00\u02ba\u02bb\05\033"+ + "\00\u02bb\u02bc\01\00\00\u02bc\u02bd\05\034\00\u02bd\u02bf\01\00\00"+ + "\u02be\u02ba\01\00\00\u02be\u02c1\01\00\00\u02bf\u02c0\01\00\00\u02c0"+ + "\u02be\01\00\00\u02c1\u02c6\01\00\00\u02c2\u02c3\05\035\00\u02c3\u02c4"+ + "\01\00\00\u02c4\u02c5\03\164\073\u02c5\u02c7\01\00\00\u02c6\u02c2"+ + "\01\00\00\u02c6\u02c7\01\00\00\u02c7\u02c8\01\00\00\u02c8\u02c9\05"+ + "\05\00\u02c9\111\01\00\00\u02ca\u02cb\03\024\013\u02cb\u02d0\01\00"+ + "\00\u02cc\u02cd\03\150\065\u02cd\u02d1\01\00\00\u02ce\u02cf\05\032"+ + "\00\u02cf\u02d1\01\00\00\u02d0\u02cc\01\00\00\u02d0\u02ce\01\00\00"+ + "\u02d1\u02d2\01\00\00\u02d2\u02d3\05\145\00\u02d3\u02d4\01\00\00\u02d4"+ + "\u02d5\03\110\045\u02d5\113\01\00\00\u02d6\u02d7\03\166\074\u02d7"+ + "\u02dc\01\00\00\u02d8\u02d9\05\035\00\u02d9\u02da\01\00\00\u02da\u02db"+ + "\03\164\073\u02db\u02dd\01\00\00\u02dc\u02d8\01\00\00\u02dc\u02dd"+ + "\01\00\00\u02dd\u02de\01\00\00\u02de\u02df\05\05\00\u02df\115\01\00"+ + "\00\u02e0\u02e1\03\166\074\u02e1\u02e6\01\00\00\u02e2\u02e3\05\035"+ + "\00\u02e3\u02e4\01\00\00\u02e4\u02e5\03\164\073\u02e5\u02e7\01\00"+ + "\00\u02e6\u02e2\01\00\00\u02e6\u02e7\01\00\00\u02e7\u02e8\01\00\00"+ + "\u02e8\u02e9\03\176\100\u02e9\117\01\00\00\u02ea\u02eb\05\145\00\u02eb"+ + "\u02ec\01\00\00\u02ec\u02ed\03\130\055\u02ed\121\01\00\00\u02ee\u02ef"+ + "\03\124\053\u02ef\u02f4\01\00\00\u02f0\u02f1\05\024\00\u02f1\u02f2"+ + "\01\00\00\u02f2\u02f3\03\124\053\u02f3\u02f5\01\00\00\u02f4\u02f0"+ + "\01\00\00\u02f4\u02f7\01\00\00\u02f5\u02f6\01\00\00\u02f6\u02f4\01"+ + "\00\00\u02f7\123\01\00\00\u02f8\u02f9\03\132\056\u02f9\u02fe\01\00"+ + "\00\u02fa\u02fb\05\036\00\u02fb\u02fc\01\00\00\u02fc\u02fd\03\134"+ + "\057\u02fd\u02ff\01\00\00\u02fe\u02fa\01\00\00\u02fe\u02ff\01\00\00"+ + "\u02ff\125\01\00\00\u0300\u0301\03\130\055\u0301\u0306\01\00\00\u0302"+ + "\u0303\05\024\00\u0303\u0304\01\00\00\u0304\u0305\03\120\051\u0305"+ + "\u0307\01\00\00\u0306\u0302\01\00\00\u0306\u0309\01\00\00\u0307\u0308"+ + "\01\00\00\u0308\u0306\01\00\00\u0309\127\01\00\00\u030a\u030b\05\033"+ + "\00\u030b\u030c\01\00\00\u030c\u030d\05\034\00\u030d\u030f\01\00\00"+ + "\u030e\u030a\01\00\00\u030e\u0311\01\00\00\u030f\u0310\01\00\00\u0310"+ + "\u030e\01\00\00\u0311\u0312\01\00\00\u0312\u0313\05\036\00\u0313\u0314"+ + "\01\00\00\u0314\u0315\03\134\057\u0315\131\01\00\00\u0316\u0317\05"+ + "\145\00\u0317\u031c\01\00\00\u0318\u0319\05\033\00\u0319\u031a\01"+ + "\00\00\u031a\u031b\05\034\00\u031b\u031d\01\00\00\u031c\u0318\01\00"+ + "\00\u031c\u031f\01\00\00\u031d\u031e\01\00\00\u031e\u031c\01\00\00"+ + "\u031f\133\01\00\00\u0320\u0321\03\136\060\u0321\u0325\01\00\00\u0322"+ + "\u0323\03\u00d0\151\u0323\u0325\01\00\00\u0324\u0320\01\00\00\u0324"+ + "\u0322\01\00\00\u0325\135\01\00\00\u0326\u0327\05\027\00\u0327\u0336"+ + "\01\00\00\u0328\u0329\03\134\057\u0329\u032e\01\00\00\u032a\u032b"+ + "\05\024\00\u032b\u032c\01\00\00\u032c\u032d\03\134\057\u032d\u032f"+ + "\01\00\00\u032e\u032a\01\00\00\u032e\u0331\01\00\00\u032f\u0330\01"+ + "\00\00\u0330\u032e\01\00\00\u0331\u0334\01\00\00\u0332\u0333\05\024"+ + "\00\u0333\u0335\01\00\00\u0334\u0332\01\00\00\u0334\u0335\01\00\00"+ + "\u0335\u0337\01\00\00\u0336\u0328\01\00\00\u0336\u0337\01\00\00\u0337"+ + "\u0338\01\00\00\u0338\u0339\05\030\00\u0339\137\01\00\00\u033a\u033b"+ + "\03\u008c\107\u033b\u0353\01\00\00\u033c\u033d\05\012\00\u033d\u0353"+ + "\01\00\00\u033e\u033f\05\013\00\u033f\u0353\01\00\00\u0340\u0341\05"+ + "\014\00\u0341\u0353\01\00\00\u0342\u0343\05\07\00\u0343\u0353\01\00"+ + "\00\u0344\u0345\05\015\00\u0345\u0353\01\00\00\u0346\u0347\05\016"+ + "\00\u0347\u0353\01\00\00\u0348\u0349\05\037\00\u0349\u0353\01\00\00"+ + "\u034a\u034b\05\040\00\u034b\u0353\01\00\00\u034c\u034d\05\041\00"+ + "\u034d\u0353\01\00\00\u034e\u034f\05\042\00\u034f\u0353\01\00\00\u0350"+ + "\u0351\05\017\00\u0351\u0353\01\00\00\u0352\u033a\01\00\00\u0352\u033c"+ + "\01\00\00\u0352\u033e\01\00\00\u0352\u0340\01\00\00\u0352\u0342\01"+ + "\00\00\u0352\u0344\01\00\00\u0352\u0346\01\00\00\u0352\u0348\01\00"+ + "\00\u0352\u034a\01\00\00\u0352\u034c\01\00\00\u0352\u034e\01\00\00"+ + "\u0352\u0350\01\00\00\u0353\141\01\00\00\u0354\u0355\03\u0082\102"+ + "\u0355\143\01\00\00\u0356\u0357\05\145\00\u0357\145\01\00\00\u0358"+ + "\u0359\03\u0082\102\u0359\147\01\00\00\u035a\u035b\03\152\066\u035b"+ + "\u0360\01\00\00\u035c\u035d\05\033\00\u035d\u035e\01\00\00\u035e\u035f"+ + "\05\034\00\u035f\u0361\01\00\00\u0360\u035c\01\00\00\u0360\u0363\01"+ + "\00\00\u0361\u0362\01\00\00\u0362\u0360\01\00\00\u0363\u036f\01\00"+ + "\00\u0364\u0365\03\154\067\u0365\u036a\01\00\00\u0366\u0367\05\033"+ + "\00\u0367\u0368\01\00\00\u0368\u0369\05\034\00\u0369\u036b\01\00\00"+ + "\u036a\u0366\01\00\00\u036a\u036d\01\00\00\u036b\u036c\01\00\00\u036c"+ + "\u036a\01\00\00\u036d\u036f\01\00\00\u036e\u035a\01\00\00\u036e\u0364"+ + "\01\00\00\u036f\151\01\00\00\u0370\u0371\05\145\00\u0371\u0374\01"+ + "\00\00\u0372\u0373\03\160\071\u0373\u0375\01\00\00\u0374\u0372\01"+ + "\00\00\u0374\u0375\01\00\00\u0375\u037e\01\00\00\u0376\u0377\05\010"+ + "\00\u0377\u0378\01\00\00\u0378\u0379\05\145\00\u0379\u037c\01\00\00"+ + "\u037a\u037b\03\160\071\u037b\u037d\01\00\00\u037c\u037a\01\00\00"+ + "\u037c\u037d\01\00\00\u037d\u037f\01\00\00\u037e\u0376\01\00\00\u037e"+ + "\u0381\01\00\00\u037f\u0380\01\00\00\u0380\u037e\01\00\00\u0381\153"+ + "\01\00\00\u0382\u0383\05\043\00\u0383\u0393\01\00\00\u0384\u0385\05"+ + "\044\00\u0385\u0393\01\00\00\u0386\u0387\05\045\00\u0387\u0393\01"+ + "\00\00\u0388\u0389\05\046\00\u0389\u0393\01\00\00\u038a\u038b\05\047"+ + "\00\u038b\u0393\01\00\00\u038c\u038d\05\050\00\u038d\u0393\01\00\00"+ + "\u038e\u038f\05\051\00\u038f\u0393\01\00\00\u0390\u0391\05\052\00"+ + "\u0391\u0393\01\00\00\u0392\u0382\01\00\00\u0392\u0384\01\00\00\u0392"+ + "\u0386\01\00\00\u0392\u0388\01\00\00\u0392\u038a\01\00\00\u0392\u038c"+ + "\01\00\00\u0392\u038e\01\00\00\u0392\u0390\01\00\00\u0393\155\01\00"+ + "\00\u0394\u0395\05\016\00\u0395\u0399\01\00\00\u0396\u0397\03\u008c"+ + "\107\u0397\u0399\01\00\00\u0398\u0394\01\00\00\u0398\u0396\01\00\00"+ + "\u0399\157\01\00\00\u039a\u039b\05\023\00\u039b\u039c\01\00\00\u039c"+ + "\u039d\03\162\072\u039d\u03a2\01\00\00\u039e\u039f\05\024\00\u039f"+ + "\u03a0\01\00\00\u03a0\u03a1\03\162\072\u03a1\u03a3\01\00\00\u03a2"+ + "\u039e\01\00\00\u03a2\u03a5\01\00\00\u03a3\u03a4\01\00\00\u03a4\u03a2"+ + "\01\00\00\u03a5\u03a6\01\00\00\u03a6\u03a7\05\025\00\u03a7\161\01"+ + "\00\00\u03a8\u03a9\03\150\065\u03a9\u03b7\01\00\00\u03aa\u03ab\05"+ + "\053\00\u03ab\u03b4\01\00\00\u03ac\u03ad\05\021\00\u03ad\u03b1\01"+ + "\00\00\u03ae\u03af\05\054\00\u03af\u03b1\01\00\00\u03b0\u03ac\01\00"+ + "\00\u03b0\u03ae\01\00\00\u03b1\u03b2\01\00\00\u03b2\u03b3\03\150\065"+ + "\u03b3\u03b5\01\00\00\u03b4\u03b0\01\00\00\u03b4\u03b5\01\00\00\u03b5"+ + "\u03b7\01\00\00\u03b6\u03a8\01\00\00\u03b6\u03aa\01\00\00\u03b7\163"+ + "\01\00\00\u03b8\u03b9\03\u0082\102\u03b9\u03be\01\00\00\u03ba\u03bb"+ + "\05\024\00\u03bb\u03bc\01\00\00\u03bc\u03bd\03\u0082\102\u03bd\u03bf"+ + "\01\00\00\u03be\u03ba\01\00\00\u03be\u03c1\01\00\00\u03bf\u03c0\01"+ + "\00\00\u03c0\u03be\01\00\00\u03c1\165\01\00\00\u03c2\u03c3\05\055"+ + "\00\u03c3\u03c6\01\00\00\u03c4\u03c5\03\170\075\u03c5\u03c7\01\00"+ + "\00\u03c6\u03c4\01\00\00\u03c6\u03c7\01\00\00\u03c7\u03c8\01\00\00"+ + "\u03c8\u03c9\05\056\00\u03c9\167\01\00\00\u03ca\u03cb\03\u00b0\131"+ + "\u03cb\u03cc\01\00\00\u03cc\u03cd\03\150\065\u03cd\u03ce\01\00\00"+ + "\u03ce\u03cf\03\172\076\u03cf\171\01\00\00\u03d0\u03d1\03\132\056"+ + "\u03d1\u03d6\01\00\00\u03d2\u03d3\05\024\00\u03d3\u03d4\01\00\00\u03d4"+ + "\u03d5\03\170\075\u03d5\u03d7\01\00\00\u03d6\u03d2\01\00\00\u03d6"+ + "\u03d7\01\00\00\u03d7\u03dd\01\00\00\u03d8\u03d9\05\057\00\u03d9\u03da"+ + "\01\00\00\u03da\u03db\03\132\056\u03db\u03dd\01\00\00\u03dc\u03d0"+ + "\01\00\00\u03dc\u03d8\01\00\00\u03dd\173\01\00\00\u03de\u03df\03\u00a8"+ + "\125\u03df\175\01\00\00\u03e0\u03e1\05\027\00\u03e1\u03e4\01\00\00"+ + "\u03e2\u03e3\03\u0080\101\u03e3\u03e5\01\00\00\u03e4\u03e2\01\00\00"+ + "\u03e4\u03e5\01\00\00\u03e5\u03e8\01\00\00\u03e6\u03e7\03\u00aa\126"+ + "\u03e7\u03e9\01\00\00\u03e8\u03e6\01\00\00\u03e8\u03eb\01\00\00\u03e9"+ + "\u03ea\01\00\00\u03ea\u03e8\01\00\00\u03eb\u03ec\01\00\00\u03ec\u03ed"+ + "\05\030\00\u03ed\177\01\00\00\u03ee\u03ef\03\u0106\u0084\u03ef\u03f1"+ + "\01\00\00\u03f0\u03ee\01\00\00\u03f0\u03f1\01\00\00\u03f1\u03f6\01"+ + "\00\00\u03f2\u03f3\05\060\00\u03f3\u03f7\01\00\00\u03f4\u03f5\05\054"+ + "\00\u03f5\u03f7\01\00\00\u03f6\u03f2\01\00\00\u03f6\u03f4\01\00\00"+ + "\u03f7\u03f8\01\00\00\u03f8\u03f9\03\u010c\u0087\u03f9\u03fa\01\00"+ + "\00\u03fa\u03fb\05\05\00\u03fb\u040b\01\00\00\u03fc\u03fd\03\u00f6"+ + "\174\u03fd\u03fe\01\00\00\u03fe\u03ff\05\010\00\u03ff\u0402\01\00"+ + "\00\u0400\u0401\03\u0106\u0084\u0401\u0403\01\00\00\u0402\u0400\01"+ + "\00\00\u0402\u0403\01\00\00\u0403\u0404\01\00\00\u0404\u0405\05\054"+ + "\00\u0405\u0406\01\00\00\u0406\u0407\03\u010c\u0087\u0407\u0408\01"+ + "\00\00\u0408\u0409\05\05\00\u0409\u040b\01\00\00\u040a\u03f0\01\00"+ + "\00\u040a\u03fc\01\00\00\u040b\u0081\01\00\00\u040c\u040d\05\145\00"+ + "\u040d\u0412\01\00\00\u040e\u040f\05\010\00\u040f\u0410\01\00\00\u0410"+ + "\u0411\05\145\00\u0411\u0413\01\00\00\u0412\u040e\01\00\00\u0412\u0415"+ + "\01\00\00\u0413\u0414\01\00\00\u0414\u0412\01\00\00\u0415\u0083\01"+ + "\00\00\u0416\u0417\03\u0086\104\u0417\u0423\01\00\00\u0418\u0419\05"+ + "\140\00\u0419\u0423\01\00\00\u041a\u041b\05\141\00\u041b\u0423\01"+ + "\00\00\u041c\u041d\05\142\00\u041d\u0423\01\00\00\u041e\u041f\03\u0088"+ + "\105\u041f\u0423\01\00\00\u0420\u0421\05\061\00\u0421\u0423\01\00"+ + "\00\u0422\u0416\01\00\00\u0422\u0418\01\00\00\u0422\u041a\01\00\00"+ + "\u0422\u041c\01\00\00\u0422\u041e\01\00\00\u0422\u0420\01\00\00\u0423"+ + "\u0085\01\00\00\u0424\u0425\05\135\00\u0425\u042b\01\00\00\u0426\u0427"+ + "\05\137\00\u0427\u042b\01\00\00\u0428\u0429\05\136\00\u0429\u042b"+ + "\01\00\00\u042a\u0424\01\00\00\u042a\u0426\01\00\00\u042a\u0428\01"+ + "\00\00\u042b\u0087\01\00\00\u042c\u042d\05\062\00\u042d\u0431\01\00"+ + "\00\u042e\u042f\05\063\00\u042f\u0431\01\00\00\u0430\u042c\01\00\00"+ + "\u0430\u042e\01\00\00\u0431\u0089\01\00\00\u0432\u0433\03\u008c\107"+ + "\u0433\u0435\01\00\00\u0434\u0432\01\00\00\u0435\u0436\01\00\00\u0436"+ + "\u0432\01\00\00\u0436\u0437\01\00\00\u0437\u008b\01\00\00\u0438\u0439"+ + "\05\064\00\u0439\u043a\01\00\00\u043a\u043b\03\u008e\110\u043b\u0446"+ + "\01\00\00\u043c\u043d\05\055\00\u043d\u0442\01\00\00\u043e\u043f\03"+ + "\u0090\111\u043f\u0443\01\00\00\u0440\u0441\03\u0094\113\u0441\u0443"+ + "\01\00\00\u0442\u043e\01\00\00\u0442\u0440\01\00\00\u0442\u0443\01"+ + "\00\00\u0443\u0444\01\00\00\u0444\u0445\05\056\00\u0445\u0447\01\00"+ + "\00\u0446\u043c\01\00\00\u0446\u0447\01\00\00\u0447\u008d\01\00\00"+ + "\u0448\u0449\05\145\00\u0449\u044e\01\00\00\u044a\u044b\05\010\00"+ + "\u044b\u044c\01\00\00\u044c\u044d\05\145\00\u044d\u044f\01\00\00\u044e"+ + "\u044a\01\00\00\u044e\u0451\01\00\00\u044f\u0450\01\00\00\u0450\u044e"+ + "\01\00\00\u0451\u008f\01\00\00\u0452\u0453\03\u0092\112\u0453\u0458"+ + "\01\00\00\u0454\u0455\05\024\00\u0455\u0456\01\00\00\u0456\u0457\03"+ + "\u0092\112\u0457\u0459\01\00\00\u0458\u0454\01\00\00\u0458\u045b\01"+ + "\00\00\u0459\u045a\01\00\00\u045a\u0458\01\00\00\u045b\u0091\01\00"+ + "\00\u045c\u045d\05\145\00\u045d\u045e\01\00\00\u045e\u045f\05\036"+ + "\00\u045f\u0460\01\00\00\u0460\u0461\03\u0094\113\u0461\u0093\01\00"+ + "\00\u0462\u0463\03\u00d4\153\u0463\u0469\01\00\00\u0464\u0465\03\u008c"+ + "\107\u0465\u0469\01\00\00\u0466\u0467\03\u0096\114\u0467\u0469\01"+ + "\00\00\u0468\u0462\01\00\00\u0468\u0464\01\00\00\u0468\u0466\01\00"+ + "\00\u0469\u0095\01\00\00\u046a\u046b\05\027\00\u046b\u0476\01\00\00"+ + "\u046c\u046d\03\u0094\113\u046d\u0472\01\00\00\u046e\u046f\05\024"+ + "\00\u046f\u0470\01\00\00\u0470\u0471\03\u0094\113\u0471\u0473\01\00"+ + "\00\u0472\u046e\01\00\00\u0472\u0475\01\00\00\u0473\u0474\01\00\00"+ + "\u0474\u0472\01\00\00\u0475\u0477\01\00\00\u0476\u046c\01\00\00\u0476"+ + "\u0477\01\00\00\u0477\u047a\01\00\00\u0478\u0479\05\024\00\u0479\u047b"+ + "\01\00\00\u047a\u0478\01\00\00\u047a\u047b\01\00\00\u047b\u047c\01"+ + "\00\00\u047c\u047d\05\030\00\u047d\u0097\01\00\00\u047e\u047f\05\064"+ + "\00\u047f\u0480\01\00\00\u0480\u0481\05\031\00\u0481\u0482\01\00\00"+ + "\u0482\u0483\05\145\00\u0483\u0484\01\00\00\u0484\u0485\03\u009a\116"+ + "\u0485\u0099\01\00\00\u0486\u0487\05\027\00\u0487\u048a\01\00\00\u0488"+ + "\u0489\03\u009c\117\u0489\u048b\01\00\00\u048a\u0488\01\00\00\u048a"+ + "\u048d\01\00\00\u048b\u048c\01\00\00\u048c\u048a\01\00\00\u048d\u048e"+ + "\01\00\00\u048e\u048f\05\030\00\u048f\u009b\01\00\00\u0490\u0491\03"+ + "\016\010\u0491\u0492\01\00\00\u0492\u0493\03\u009e\120\u0493\u009d"+ + "\01\00\00\u0494\u0495\03\150\065\u0495\u0496\01\00\00\u0496\u0497"+ + "\03\u00a0\121\u0497\u0498\01\00\00\u0498\u0499\05\05\00\u0499\u04b3"+ + "\01\00\00\u049a\u049b\03\022\012\u049b\u049e\01\00\00\u049c\u049d"+ + "\05\05\00\u049d\u049f\01\00\00\u049e\u049c\01\00\00\u049e\u049f\01"+ + "\00\00\u049f\u04b3\01\00\00\u04a0\u04a1\03\046\024\u04a1\u04a4\01"+ + "\00\00\u04a2\u04a3\05\05\00\u04a3\u04a5\01\00\00\u04a4\u04a2\01\00"+ + "\00\u04a4\u04a5\01\00\00\u04a5\u04b3\01\00\00\u04a6\u04a7\03\032\016"+ + "\u04a7\u04aa\01\00\00\u04a8\u04a9\05\05\00\u04a9\u04ab\01\00\00\u04aa"+ + "\u04a8\01\00\00\u04aa\u04ab\01\00\00\u04ab\u04b3\01\00\00\u04ac\u04ad"+ + "\03\u0098\115\u04ad\u04b0\01\00\00\u04ae\u04af\05\05\00\u04af\u04b1"+ + "\01\00\00\u04b0\u04ae\01\00\00\u04b0\u04b1\01\00\00\u04b1\u04b3\01"+ + "\00\00\u04b2\u0494\01\00\00\u04b2\u049a\01\00\00\u04b2\u04a0\01\00"+ + "\00\u04b2\u04a6\01\00\00\u04b2\u04ac\01\00\00\u04b3\u009f\01\00\00"+ + "\u04b4\u04b5\03\u00a2\122\u04b5\u04b9\01\00\00\u04b6\u04b7\03\u00a4"+ + "\123\u04b7\u04b9\01\00\00\u04b8\u04b4\01\00\00\u04b8\u04b6\01\00\00"+ + "\u04b9\u00a1\01\00\00\u04ba\u04bb\05\145\00\u04bb\u04bc\01\00\00\u04bc"+ + "\u04bd\05\055\00\u04bd\u04be\01\00\00\u04be\u04bf\05\056\00\u04bf"+ + "\u04c2\01\00\00\u04c0\u04c1\03\u00a6\124\u04c1\u04c3\01\00\00\u04c2"+ + "\u04c0\01\00\00\u04c2\u04c3\01\00\00\u04c3\u00a3\01\00\00\u04c4\u04c5"+ + "\03\122\052\u04c5\u00a5\01\00\00\u04c6\u04c7\05\065\00\u04c7\u04c8"+ + "\01\00\00\u04c8\u04c9\03\u0094\113\u04c9\u00a7\01\00\00\u04ca\u04cb"+ + "\05\027\00\u04cb\u04ce\01\00\00\u04cc\u04cd\03\u00aa\126\u04cd\u04cf"+ + "\01\00\00\u04ce\u04cc\01\00\00\u04ce\u04d1\01\00\00\u04cf\u04d0\01"+ + "\00\00\u04d0\u04ce\01\00\00\u04d1\u04d2\01\00\00\u04d2\u04d3\05\030"+ + "\00\u04d3\u00a9\01\00\00\u04d4\u04d5\03\u00ac\127\u04d5\u04db\01\00"+ + "\00\u04d6\u04d7\03\010\05\u04d7\u04db\01\00\00\u04d8\u04d9\03\u00b2"+ + "\132\u04d9\u04db\01\00\00\u04da\u04d4\01\00\00\u04da\u04d6\01\00\00"+ + "\u04da\u04d8\01\00\00\u04db\u00ab\01\00\00\u04dc\u04dd\03\u00ae\130"+ + "\u04dd\u04de\01\00\00\u04de\u04df\05\05\00\u04df\u00ad\01\00\00\u04e0"+ + "\u04e1\03\u00b0\131\u04e1\u04e2\01\00\00\u04e2\u04e3\03\150\065\u04e3"+ + "\u04e4\01\00\00\u04e4\u04e5\03\122\052\u04e5\u00af\01\00\00\u04e6"+ + "\u04e7\03\156\070\u04e7\u04e9\01\00\00\u04e8\u04e6\01\00\00\u04e8"+ + "\u04eb\01\00\00\u04e9\u04ea\01\00\00\u04ea\u04e8\01\00\00\u04eb\u00b1"+ + "\01\00\00\u04ec\u04ed\03\u00a8\125\u04ed\u056d\01\00\00\u04ee\u04ef"+ + "\05\144\00\u04ef\u04f0\01\00\00\u04f0\u04f1\03\u00d0\151\u04f1\u04f6"+ + "\01\00\00\u04f2\u04f3\05\066\00\u04f3\u04f4\01\00\00\u04f4\u04f5\03"+ + "\u00d0\151\u04f5\u04f7\01\00\00\u04f6\u04f2\01\00\00\u04f6\u04f7\01"+ + "\00\00\u04f7\u04f8\01\00\00\u04f8\u04f9\05\05\00\u04f9\u056d\01\00"+ + "\00\u04fa\u04fb\05\067\00\u04fb\u04fc\01\00\00\u04fc\u04fd\03\u00c8"+ + "\145\u04fd\u04fe\01\00\00\u04fe\u04ff\03\u00b2\132\u04ff\u0504\01"+ + "\00\00\u0500\u0501\05\070\00\u0501\u0502\01\00\00\u0502\u0503\03\u00b2"+ + "\132\u0503\u0505\01\00\00\u0504\u0500\01\00\00\u0504\u0505\01\00\00"+ + "\u0505\u056d\01\00\00\u0506\u0507\05\071\00\u0507\u0508\01\00\00\u0508"+ + "\u0509\05\055\00\u0509\u050a\01\00\00\u050a\u050b\03\u00c0\141\u050b"+ + "\u050c\01\00\00\u050c\u050d\05\056\00\u050d\u050e\01\00\00\u050e\u050f"+ + "\03\u00b2\132\u050f\u056d\01\00\00\u0510\u0511\05\072\00\u0511\u0512"+ + "\01\00\00\u0512\u0513\03\u00c8\145\u0513\u0514\01\00\00\u0514\u0515"+ + "\03\u00b2\132\u0515\u056d\01\00\00\u0516\u0517\05\073\00\u0517\u0518"+ + "\01\00\00\u0518\u0519\03\u00b2\132\u0519\u051a\01\00\00\u051a\u051b"+ + "\05\072\00\u051b\u051c\01\00\00\u051c\u051d\03\u00c8\145\u051d\u051e"+ + "\01\00\00\u051e\u051f\05\05\00\u051f\u056d\01\00\00\u0520\u0521\05"+ + "\074\00\u0521\u0522\01\00\00\u0522\u0523\03\u00a8\125\u0523\u0530"+ + "\01\00\00\u0524\u0525\03\u00b4\133\u0525\u0526\01\00\00\u0526\u0527"+ + "\05\075\00\u0527\u0528\01\00\00\u0528\u0529\03\u00a8\125\u0529\u0531"+ + "\01\00\00\u052a\u052b\03\u00b4\133\u052b\u0531\01\00\00\u052c\u052d"+ + "\05\075\00\u052d\u052e\01\00\00\u052e\u052f\03\u00a8\125\u052f\u0531"+ + "\01\00\00\u0530\u0524\01\00\00\u0530\u052a\01\00\00\u0530\u052c\01"+ + "\00\00\u0531\u056d\01\00\00\u0532\u0533\05\076\00\u0533\u0534\01\00"+ + "\00\u0534\u0535\03\u00c8\145\u0535\u0536\01\00\00\u0536\u0537\05\027"+ + "\00\u0537\u0538\01\00\00\u0538\u0539\03\u00ba\136\u0539\u053a\01\00"+ + "\00\u053a\u053b\05\030\00\u053b\u056d\01\00\00\u053c\u053d\05\040"+ + "\00\u053d\u053e\01\00\00\u053e\u053f\03\u00c8\145\u053f\u0540\01\00"+ + "\00\u0540\u0541\03\u00a8\125\u0541\u056d\01\00\00\u0542\u0543\05\077"+ + "\00\u0543\u0546\01\00\00\u0544\u0545\03\u00d0\151\u0545\u0547\01\00"+ + "\00\u0546\u0544\01\00\00\u0546\u0547\01\00\00\u0547\u0548\01\00\00"+ + "\u0548\u0549\05\05\00\u0549\u056d\01\00\00\u054a\u054b\05\100\00\u054b"+ + "\u054c\01\00\00\u054c\u054d\03\u00d0\151\u054d\u054e\01\00\00\u054e"+ + "\u054f\05\05\00\u054f\u056d\01\00\00\u0550\u0551\05\101\00\u0551\u0554"+ + "\01\00\00\u0552\u0553\05\145\00\u0553\u0555\01\00\00\u0554\u0552\01"+ + "\00\00\u0554\u0555\01\00\00\u0555\u0556\01\00\00\u0556\u0557\05\05"+ + "\00\u0557\u056d\01\00\00\u0558\u0559\05\102\00\u0559\u055c\01\00\00"+ + "\u055a\u055b\05\145\00\u055b\u055d\01\00\00\u055c\u055a\01\00\00\u055c"+ + "\u055d\01\00\00\u055d\u055e\01\00\00\u055e\u055f\05\05\00\u055f\u056d"+ + "\01\00\00\u0560\u0561\05\05\00\u0561\u056d\01\00\00\u0562\u0563\03"+ + "\u00cc\147\u0563\u0564\01\00\00\u0564\u0565\05\05\00\u0565\u056d\01"+ + "\00\00\u0566\u0567\05\145\00\u0567\u0568\01\00\00\u0568\u0569\05\066"+ + "\00\u0569\u056a\01\00\00\u056a\u056b\03\u00b2\132\u056b\u056d\01\00"+ + "\00\u056c\u04ec\01\00\00\u056c\u04ee\01\00\00\u056c\u04fa\01\00\00"+ + "\u056c\u0506\01\00\00\u056c\u0510\01\00\00\u056c\u0516\01\00\00\u056c"+ + "\u0520\01\00\00\u056c\u0532\01\00\00\u056c\u053c\01\00\00\u056c\u0542"+ + "\01\00\00\u056c\u054a\01\00\00\u056c\u0550\01\00\00\u056c\u0558\01"+ + "\00\00\u056c\u0560\01\00\00\u056c\u0562\01\00\00\u056c\u0566\01\00"+ + "\00\u056d\u00b3\01\00\00\u056e\u056f\03\u00b6\134\u056f\u0572\01\00"+ + "\00\u0570\u0571\03\u00b6\134\u0571\u0573\01\00\00\u0572\u0570\01\00"+ + "\00\u0572\u0575\01\00\00\u0573\u0574\01\00\00\u0574\u0572\01\00\00"+ + "\u0575\u00b5\01\00\00\u0576\u0577\05\103\00\u0577\u0578\01\00\00\u0578"+ + "\u0579\05\055\00\u0579\u057a\01\00\00\u057a\u057b\03\u00b8\135\u057b"+ + "\u057c\01\00\00\u057c\u057d\05\056\00\u057d\u057e\01\00\00\u057e\u057f"+ + "\03\u00a8\125\u057f\u00b7\01\00\00\u0580\u0581\03\u00b0\131\u0581"+ + "\u0582\01\00\00\u0582\u0583\03\150\065\u0583\u0584\01\00\00\u0584"+ + "\u0585\03\132\056\u0585\u00b9\01\00\00\u0586\u0587\03\u00bc\137\u0587"+ + "\u0589\01\00\00\u0588\u0586\01\00\00\u0588\u058b\01\00\00\u0589\u058a"+ + "\01\00\00\u058a\u0588\01\00\00\u058b\u00bb\01\00\00\u058c\u058d\03"+ + "\u00be\140\u058d\u058f\01\00\00\u058e\u058c\01\00\00\u058f\u0590\01"+ + "\00\00\u0590\u058c\01\00\00\u0590\u0591\01\00\00\u0591\u0594\01\00"+ + "\00\u0592\u0593\03\u00aa\126\u0593\u0595\01\00\00\u0594\u0592\01\00"+ + "\00\u0594\u0597\01\00\00\u0595\u0596\01\00\00\u0596\u0594\01\00\00"+ + "\u0597\u00bd\01\00\00\u0598\u0599\05\104\00\u0599\u059a\01\00\00\u059a"+ + "\u059b\03\u00ce\150\u059b\u059c\01\00\00\u059c\u059d\05\066\00\u059d"+ + "\u05a9\01\00\00\u059e\u059f\05\104\00\u059f\u05a0\01\00\00\u05a0\u05a1"+ + "\03\144\063\u05a1\u05a2\01\00\00\u05a2\u05a3\05\066\00\u05a3\u05a9"+ + "\01\00\00\u05a4\u05a5\05\065\00\u05a5\u05a6\01\00\00\u05a6\u05a7\05"+ + "\066\00\u05a7\u05a9\01\00\00\u05a8\u0598\01\00\00\u05a8\u059e\01\00"+ + "\00\u05a8\u05a4\01\00\00\u05a9\u00bf\01\00\00\u05aa\u05ab\03\u00c4"+ + "\143\u05ab\u05bd\01\00\00\u05ac\u05ad\03\u00c2\142\u05ad\u05af\01"+ + "\00\00\u05ae\u05ac\01\00\00\u05ae\u05af\01\00\00\u05af\u05b0\01\00"+ + "\00\u05b0\u05b1\05\05\00\u05b1\u05b4\01\00\00\u05b2\u05b3\03\u00d0"+ + "\151\u05b3\u05b5\01\00\00\u05b4\u05b2\01\00\00\u05b4\u05b5\01\00\00"+ + "\u05b5\u05b6\01\00\00\u05b6\u05b7\05\05\00\u05b7\u05ba\01\00\00\u05b8"+ + "\u05b9\03\u00c6\144\u05b9\u05bb\01\00\00\u05ba\u05b8\01\00\00\u05ba"+ + "\u05bb\01\00\00\u05bb\u05bd\01\00\00\u05bc\u05aa\01\00\00\u05bc\u05ae"+ + "\01\00\00\u05bd\u00c1\01\00\00\u05be\u05bf\03\u00ae\130\u05bf\u05c3"+ + "\01\00\00\u05c0\u05c1\03\u00ca\146\u05c1\u05c3\01\00\00\u05c2\u05be"+ + "\01\00\00\u05c2\u05c0\01\00\00\u05c3\u00c3\01\00\00\u05c4\u05c5\03"+ + "\u00b0\131\u05c5\u05c6\01\00\00\u05c6\u05c7\03\150\065\u05c7\u05c8"+ + "\01\00\00\u05c8\u05c9\05\145\00\u05c9\u05ca\01\00\00\u05ca\u05cb\05"+ + "\066\00\u05cb\u05cc\01\00\00\u05cc\u05cd\03\u00d0\151\u05cd\u00c5"+ + "\01\00\00\u05ce\u05cf\03\u00ca\146\u05cf\u00c7\01\00\00\u05d0\u05d1"+ + "\05\055\00\u05d1\u05d2\01\00\00\u05d2\u05d3\03\u00d0\151\u05d3\u05d4"+ + "\01\00\00\u05d4\u05d5\05\056\00\u05d5\u00c9\01\00\00\u05d6\u05d7\03"+ + "\u00d0\151\u05d7\u05dc\01\00\00\u05d8\u05d9\05\024\00\u05d9\u05da"+ + "\01\00\00\u05da\u05db\03\u00d0\151\u05db\u05dd\01\00\00\u05dc\u05d8"+ + "\01\00\00\u05dc\u05df\01\00\00\u05dd\u05de\01\00\00\u05de\u05dc\01"+ + "\00\00\u05df\u00cb\01\00\00\u05e0\u05e1\03\u00d0\151\u05e1\u00cd\01"+ + "\00\00\u05e2\u05e3\03\u00d0\151\u05e3\u00cf\01\00\00\u05e4\u05e5\03"+ + "\u00d4\153\u05e5\u05ea\01\00\00\u05e6\u05e7\03\u00d2\152\u05e7\u05e8"+ + "\01\00\00\u05e8\u05e9\03\u00d0\151\u05e9\u05eb\01\00\00\u05ea\u05e6"+ + "\01\00\00\u05ea\u05eb\01\00\00\u05eb\u00d1\01\00\00\u05ec\u05ed\05"+ + "\036\00\u05ed\u0613\01\00\00\u05ee\u05ef\05\105\00\u05ef\u0613\01"+ + "\00\00\u05f0\u05f1\05\106\00\u05f1\u0613\01\00\00\u05f2\u05f3\05\107"+ + "\00\u05f3\u0613\01\00\00\u05f4\u05f5\05\110\00\u05f5\u0613\01\00\00"+ + "\u05f6\u05f7\05\111\00\u05f7\u0613\01\00\00\u05f8\u05f9\05\112\00"+ + "\u05f9\u0613\01\00\00\u05fa\u05fb\05\113\00\u05fb\u0613\01\00\00\u05fc"+ + "\u05fd\05\114\00\u05fd\u0613\01\00\00\u05fe\u05ff\05\023\00\u05ff"+ + "\u0600\01\00\00\u0600\u0601\05\023\00\u0601\u0602\01\00\00\u0602\u0603"+ + "\05\036\00\u0603\u0613\01\00\00\u0604\u0605\05\025\00\u0605\u0606"+ + "\01\00\00\u0606\u0607\05\025\00\u0607\u0608\01\00\00\u0608\u0609\05"+ + "\025\00\u0609\u060a\01\00\00\u060a\u060b\05\036\00\u060b\u0613\01"+ + "\00\00\u060c\u060d\05\025\00\u060d\u060e\01\00\00\u060e\u060f\05\025"+ + "\00\u060f\u0610\01\00\00\u0610\u0611\05\036\00\u0611\u0613\01\00\00"+ + "\u0612\u05ec\01\00\00\u0612\u05ee\01\00\00\u0612\u05f0\01\00\00\u0612"+ + "\u05f2\01\00\00\u0612\u05f4\01\00\00\u0612\u05f6\01\00\00\u0612\u05f8"+ + "\01\00\00\u0612\u05fa\01\00\00\u0612\u05fc\01\00\00\u0612\u05fe\01"+ + "\00\00\u0612\u0604\01\00\00\u0612\u060c\01\00\00\u0613\u00d3\01\00"+ + "\00\u0614\u0615\03\u00d6\154\u0615\u061e\01\00\00\u0616\u0617\05\053"+ + "\00\u0617\u0618\01\00\00\u0618\u0619\03\u00d4\153\u0619\u061a\01\00"+ + "\00\u061a\u061b\05\066\00\u061b\u061c\01\00\00\u061c\u061d\03\u00d4"+ + "\153\u061d\u061f\01\00\00\u061e\u0616\01\00\00\u061e\u061f\01\00\00"+ + "\u061f\u00d5\01\00\00\u0620\u0621\03\u00d8\155\u0621\u0626\01\00\00"+ + "\u0622\u0623\05\115\00\u0623\u0624\01\00\00\u0624\u0625\03\u00d8\155"+ + "\u0625\u0627\01\00\00\u0626\u0622\01\00\00\u0626\u0629\01\00\00\u0627"+ + "\u0628\01\00\00\u0628\u0626\01\00\00\u0629\u00d7\01\00\00\u062a\u062b"+ + "\03\u00da\156\u062b\u0630\01\00\00\u062c\u062d\05\116\00\u062d\u062e"+ + "\01\00\00\u062e\u062f\03\u00da\156\u062f\u0631\01\00\00\u0630\u062c"+ + "\01\00\00\u0630\u0633\01\00\00\u0631\u0632\01\00\00\u0632\u0630\01"+ + "\00\00\u0633\u00d9\01\00\00\u0634\u0635\03\u00dc\157\u0635\u063a\01"+ + "\00\00\u0636\u0637\05\117\00\u0637\u0638\01\00\00\u0638\u0639\03\u00dc"+ + "\157\u0639\u063b\01\00\00\u063a\u0636\01\00\00\u063a\u063d\01\00\00"+ + "\u063b\u063c\01\00\00\u063c\u063a\01\00\00\u063d\u00db\01\00\00\u063e"+ + "\u063f\03\u00de\160\u063f\u0644\01\00\00\u0640\u0641\05\120\00\u0641"+ + "\u0642\01\00\00\u0642\u0643\03\u00de\160\u0643\u0645\01\00\00\u0644"+ + "\u0640\01\00\00\u0644\u0647\01\00\00\u0645\u0646\01\00\00\u0646\u0644"+ + "\01\00\00\u0647\u00dd\01\00\00\u0648\u0649\03\u00e0\161\u0649\u064e"+ + "\01\00\00\u064a\u064b\05\026\00\u064b\u064c\01\00\00\u064c\u064d\03"+ + "\u00e0\161\u064d\u064f\01\00\00\u064e\u064a\01\00\00\u064e\u0651\01"+ + "\00\00\u064f\u0650\01\00\00\u0650\u064e\01\00\00\u0651\u00df\01\00"+ + "\00\u0652\u0653\03\u00e2\162\u0653\u065c\01\00\00\u0654\u0655\05\121"+ + "\00\u0655\u0659\01\00\00\u0656\u0657\05\122\00\u0657\u0659\01\00\00"+ + "\u0658\u0654\01\00\00\u0658\u0656\01\00\00\u0659\u065a\01\00\00\u065a"+ + "\u065b\03\u00e2\162\u065b\u065d\01\00\00\u065c\u0658\01\00\00\u065c"+ + "\u065f\01\00\00\u065d\u065e\01\00\00\u065e\u065c\01\00\00\u065f\u00e1"+ + "\01\00\00\u0660\u0661\03\u00e4\163\u0661\u0666\01\00\00\u0662\u0663"+ + "\05\123\00\u0663\u0664\01\00\00\u0664\u0665\03\150\065\u0665\u0667"+ + "\01\00\00\u0666\u0662\01\00\00\u0666\u0667\01\00\00\u0667\u00e3\01"+ + "\00\00\u0668\u0669\03\u00e8\165\u0669\u066e\01\00\00\u066a\u066b\03"+ + "\u00e6\164\u066b\u066c\01\00\00\u066c\u066d\03\u00e8\165\u066d\u066f"+ + "\01\00\00\u066e\u066a\01\00\00\u066e\u0671\01\00\00\u066f\u0670\01"+ + "\00\00\u0670\u066e\01\00\00\u0671\u00e5\01\00\00\u0672\u0673\05\023"+ + "\00\u0673\u0674\01\00\00\u0674\u0675\05\036\00\u0675\u067f\01\00\00"+ + "\u0676\u0677\05\025\00\u0677\u0678\01\00\00\u0678\u0679\05\036\00"+ + "\u0679\u067f\01\00\00\u067a\u067b\05\023\00\u067b\u067f\01\00\00\u067c"+ + "\u067d\05\025\00\u067d\u067f\01\00\00\u067e\u0672\01\00\00\u067e\u0676"+ + "\01\00\00\u067e\u067a\01\00\00\u067e\u067c\01\00\00\u067f\u00e7\01"+ + "\00\00\u0680\u0681\03\u00ec\167\u0681\u0686\01\00\00\u0682\u0683\03"+ + "\u00ea\166\u0683\u0684\01\00\00\u0684\u0685\03\u00ec\167\u0685\u0687"+ + "\01\00\00\u0686\u0682\01\00\00\u0686\u0689\01\00\00\u0687\u0688\01"+ + "\00\00\u0688\u0686\01\00\00\u0689\u00e9\01\00\00\u068a\u068b\05\023"+ + "\00\u068b\u068c\01\00\00\u068c\u068d\05\023\00\u068d\u0699\01\00\00"+ + "\u068e\u068f\05\025\00\u068f\u0690\01\00\00\u0690\u0691\05\025\00"+ + "\u0691\u0692\01\00\00\u0692\u0693\05\025\00\u0693\u0699\01\00\00\u0694"+ + "\u0695\05\025\00\u0695\u0696\01\00\00\u0696\u0697\05\025\00\u0697"+ + "\u0699\01\00\00\u0698\u068a\01\00\00\u0698\u068e\01\00\00\u0698\u0694"+ + "\01\00\00\u0699\u00eb\01\00\00\u069a\u069b\03\u00ee\170\u069b\u06a4"+ + "\01\00\00\u069c\u069d\05\124\00\u069d\u06a1\01\00\00\u069e\u069f\05"+ + "\125\00\u069f\u06a1\01\00\00\u06a0\u069c\01\00\00\u06a0\u069e\01\00"+ + "\00\u06a1\u06a2\01\00\00\u06a2\u06a3\03\u00ee\170\u06a3\u06a5\01\00"+ + "\00\u06a4\u06a0\01\00\00\u06a4\u06a7\01\00\00\u06a5\u06a6\01\00\00"+ + "\u06a6\u06a4\01\00\00\u06a7\u00ed\01\00\00\u06a8\u06a9\03\u00f0\171"+ + "\u06a9\u06b4\01\00\00\u06aa\u06ab\05\011\00\u06ab\u06b1\01\00\00\u06ac"+ + "\u06ad\05\126\00\u06ad\u06b1\01\00\00\u06ae\u06af\05\127\00\u06af"+ + "\u06b1\01\00\00\u06b0\u06aa\01\00\00\u06b0\u06ac\01\00\00\u06b0\u06ae"+ + "\01\00\00\u06b1\u06b2\01\00\00\u06b2\u06b3\03\u00f0\171\u06b3\u06b5"+ + "\01\00\00\u06b4\u06b0\01\00\00\u06b4\u06b7\01\00\00\u06b5\u06b6\01"+ + "\00\00\u06b6\u06b4\01\00\00\u06b7\u00ef\01\00\00\u06b8\u06b9\05\124"+ + "\00\u06b9\u06ba\01\00\00\u06ba\u06bb\03\u00f0\171\u06bb\u06cb\01\00"+ + "\00\u06bc\u06bd\05\125\00\u06bd\u06be\01\00\00\u06be\u06bf\03\u00f0"+ + "\171\u06bf\u06cb\01\00\00\u06c0\u06c1\05\130\00\u06c1\u06c2\01\00"+ + "\00\u06c2\u06c3\03\u00f0\171\u06c3\u06cb\01\00\00\u06c4\u06c5\05\131"+ + "\00\u06c5\u06c6\01\00\00\u06c6\u06c7\03\u00f0\171\u06c7\u06cb\01\00"+ + "\00\u06c8\u06c9\03\u00f2\172\u06c9\u06cb\01\00\00\u06ca\u06b8\01\00"+ + "\00\u06ca\u06bc\01\00\00\u06ca\u06c0\01\00\00\u06ca\u06c4\01\00\00"+ + "\u06ca\u06c8\01\00\00\u06cb\u00f1\01\00\00\u06cc\u06cd\05\132\00\u06cd"+ + "\u06ce\01\00\00\u06ce\u06cf\03\u00f0\171\u06cf\u06e5\01\00\00\u06d0"+ + "\u06d1\05\133\00\u06d1\u06d2\01\00\00\u06d2\u06d3\03\u00f0\171\u06d3"+ + "\u06e5\01\00\00\u06d4\u06d5\03\u00f4\173\u06d5\u06e5\01\00\00\u06d6"+ + "\u06d7\03\u00f6\174\u06d7\u06da\01\00\00\u06d8\u06d9\03\u0108\u0085"+ + "\u06d9\u06db\01\00\00\u06da\u06d8\01\00\00\u06da\u06dd\01\00\00\u06db"+ + "\u06dc\01\00\00\u06dc\u06da\01\00\00\u06dd\u06e2\01\00\00\u06de\u06df"+ + "\05\130\00\u06df\u06e3\01\00\00\u06e0\u06e1\05\131\00\u06e1\u06e3"+ + "\01\00\00\u06e2\u06de\01\00\00\u06e2\u06e0\01\00\00\u06e2\u06e3\01"+ + "\00\00\u06e3\u06e5\01\00\00\u06e4\u06cc\01\00\00\u06e4\u06d0\01\00"+ + "\00\u06e4\u06d4\01\00\00\u06e4\u06d6\01\00\00\u06e5\u00f3\01\00\00"+ + "\u06e6\u06e7\05\055\00\u06e7\u06e8\01\00\00\u06e8\u06e9\03\154\067"+ + "\u06e9\u06ea\01\00\00\u06ea\u06eb\05\056\00\u06eb\u06ec\01\00\00\u06ec"+ + "\u06ed\03\u00f0\171\u06ed\u06fb\01\00\00\u06ee\u06ef\05\055\00\u06ef"+ + "\u06f4\01\00\00\u06f0\u06f1\03\150\065\u06f1\u06f5\01\00\00\u06f2"+ + "\u06f3\03\u00d0\151\u06f3\u06f5\01\00\00\u06f4\u06f0\01\00\00\u06f4"+ + "\u06f2\01\00\00\u06f5\u06f6\01\00\00\u06f6\u06f7\05\056\00\u06f7\u06f8"+ + "\01\00\00\u06f8\u06f9\03\u00f2\172\u06f9\u06fb\01\00\00\u06fa\u06e6"+ + "\01\00\00\u06fa\u06ee\01\00\00\u06fb\u00f5\01\00\00\u06fc\u06fd\03"+ + "\u00c8\145\u06fd\u0739\01\00\00\u06fe\u06ff\05\060\00\u06ff\u0704"+ + "\01\00\00\u0700\u0701\05\010\00\u0701\u0702\01\00\00\u0702\u0703\05"+ + "\145\00\u0703\u0705\01\00\00\u0704\u0700\01\00\00\u0704\u0707\01\00"+ + "\00\u0705\u0706\01\00\00\u0706\u0704\01\00\00\u0707\u070a\01\00\00"+ + "\u0708\u0709\03\u00f8\175\u0709\u070b\01\00\00\u070a\u0708\01\00\00"+ + "\u070a\u070b\01\00\00\u070b\u0739\01\00\00\u070c\u070d\05\054\00\u070d"+ + "\u070e\01\00\00\u070e\u070f\03\u010a\u0086\u070f\u0739\01\00\00\u0710"+ + "\u0711\03\u0084\103\u0711\u0739\01\00\00\u0712\u0713\05\134\00\u0713"+ + "\u0714\01\00\00\u0714\u0715\03\u00fa\176\u0715\u0739\01\00\00\u0716"+ + "\u0717\05\145\00\u0717\u071c\01\00\00\u0718\u0719\05\010\00\u0719"+ + "\u071a\01\00\00\u071a\u071b\05\145\00\u071b\u071d\01\00\00\u071c\u0718"+ + "\01\00\00\u071c\u071f\01\00\00\u071d\u071e\01\00\00\u071e\u071c\01"+ + "\00\00\u071f\u0722\01\00\00\u0720\u0721\03\u00f8\175\u0721\u0723\01"+ + "\00\00\u0722\u0720\01\00\00\u0722\u0723\01\00\00\u0723\u0739\01\00"+ + "\00\u0724\u0725\03\154\067\u0725\u072a\01\00\00\u0726\u0727\05\033"+ + "\00\u0727\u0728\01\00\00\u0728\u0729\05\034\00\u0729\u072b\01\00\00"+ + "\u072a\u0726\01\00\00\u072a\u072d\01\00\00\u072b\u072c\01\00\00\u072c"+ + "\u072a\01\00\00\u072d\u072e\01\00\00\u072e\u072f\05\010\00\u072f\u0730"+ + "\01\00\00\u0730\u0731\05\020\00\u0731\u0739\01\00\00\u0732\u0733\05"+ + "\032\00\u0733\u0734\01\00\00\u0734\u0735\05\010\00\u0735\u0736\01"+ + "\00\00\u0736\u0737\05\020\00\u0737\u0739\01\00\00\u0738\u06fc\01\00"+ + "\00\u0738\u06fe\01\00\00\u0738\u070c\01\00\00\u0738\u0710\01\00\00"+ + "\u0738\u0712\01\00\00\u0738\u0716\01\00\00\u0738\u0724\01\00\00\u0738"+ + "\u0732\01\00\00\u0739\u00f7\01\00\00\u073a\u073b\05\033\00\u073b\u073c"+ + "\01\00\00\u073c\u073d\05\034\00\u073d\u073f\01\00\00\u073e\u073a\01"+ + "\00\00\u073f\u0740\01\00\00\u0740\u073a\01\00\00\u0740\u0741\01\00"+ + "\00\u0741\u0742\01\00\00\u0742\u0743\05\010\00\u0743\u0744\01\00\00"+ + "\u0744\u0745\05\020\00\u0745\u0761\01\00\00\u0746\u0747\03\u010c\u0087"+ + "\u0747\u0761\01\00\00\u0748\u0749\05\010\00\u0749\u074a\01\00\00\u074a"+ + "\u074b\05\020\00\u074b\u0761\01\00\00\u074c\u074d\05\010\00\u074d"+ + "\u074e\01\00\00\u074e\u074f\03\u0104\u0083\u074f\u0761\01\00\00\u0750"+ + "\u0751\05\010\00\u0751\u0752\01\00\00\u0752\u0753\05\060\00\u0753"+ + "\u0761\01\00\00\u0754\u0755\05\010\00\u0755\u0756\01\00\00\u0756\u0757"+ + "\05\054\00\u0757\u0758\01\00\00\u0758\u0759\03\u010c\u0087\u0759\u0761"+ + "\01\00\00\u075a\u075b\05\010\00\u075b\u075c\01\00\00\u075c\u075d\05"+ + "\134\00\u075d\u075e\01\00\00\u075e\u075f\03\u00fe\u0080\u075f\u0761"+ + "\01\00\00\u0760\u073e\01\00\00\u0760\u0746\01\00\00\u0760\u0748\01"+ + "\00\00\u0760\u074c\01\00\00\u0760\u0750\01\00\00\u0760\u0754\01\00"+ + "\00\u0760\u075a\01\00\00\u0761\u00f9\01\00\00\u0762\u0763\03\u0106"+ + "\u0084\u0763\u0764\01\00\00\u0764\u0765\03\u00fc\177\u0765\u0766\01"+ + "\00\00\u0766\u0767\03\u0102\u0082\u0767\u0771\01\00\00\u0768\u0769"+ + "\03\u00fc\177\u0769\u076e\01\00\00\u076a\u076b\03\u0100\u0081\u076b"+ + "\u076f\01\00\00\u076c\u076d\03\u0102\u0082\u076d\u076f\01\00\00\u076e"+ + "\u076a\01\00\00\u076e\u076c\01\00\00\u076f\u0771\01\00\00\u0770\u0762"+ + "\01\00\00\u0770\u0768\01\00\00\u0771\u00fb\01\00\00\u0772\u0773\03"+ + "\152\066\u0773\u0777\01\00\00\u0774\u0775\03\154\067\u0775\u0777\01"+ + "\00\00\u0776\u0772\01\00\00\u0776\u0774\01\00\00\u0777\u00fd\01\00"+ + "\00\u0778\u0779\03\u0106\u0084\u0779\u077b\01\00\00\u077a\u0778\01"+ + "\00\00\u077a\u077b\01\00\00\u077b\u077c\01\00\00\u077c\u077d\05\145"+ + "\00\u077d\u077e\01\00\00\u077e\u077f\03\u0102\u0082\u077f\u00ff\01"+ + "\00\00\u0780\u0781\05\033\00\u0781\u07a4\01\00\00\u0782\u0783\05\034"+ + "\00\u0783\u0788\01\00\00\u0784\u0785\05\033\00\u0785\u0786\01\00\00"+ + "\u0786\u0787\05\034\00\u0787\u0789\01\00\00\u0788\u0784\01\00\00\u0788"+ + "\u078b\01\00\00\u0789\u078a\01\00\00\u078a\u0788\01\00\00\u078b\u078c"+ + "\01\00\00\u078c\u078d\03\136\060\u078d\u07a5\01\00\00\u078e\u078f"+ + "\03\u00d0\151\u078f\u0790\01\00\00\u0790\u0791\05\034\00\u0791\u0798"+ + "\01\00\00\u0792\u0793\05\033\00\u0793\u0794\01\00\00\u0794\u0795\03"+ + "\u00d0\151\u0795\u0796\01\00\00\u0796\u0797\05\034\00\u0797\u0799"+ + "\01\00\00\u0798\u0792\01\00\00\u0798\u079b\01\00\00\u0799\u079a\01"+ + "\00\00\u079a\u0798\01\00\00\u079b\u07a0\01\00\00\u079c\u079d\05\033"+ + "\00\u079d\u079e\01\00\00\u079e\u079f\05\034\00\u079f\u07a1\01\00\00"+ + "\u07a0\u079c\01\00\00\u07a0\u07a3\01\00\00\u07a1\u07a2\01\00\00\u07a2"+ + "\u07a0\01\00\00\u07a3\u07a5\01\00\00\u07a4\u0782\01\00\00\u07a4\u078e"+ + "\01\00\00\u07a5\u0101\01\00\00\u07a6\u07a7\03\u010c\u0087\u07a7\u07aa"+ + "\01\00\00\u07a8\u07a9\03\052\026\u07a9\u07ab\01\00\00\u07aa\u07a8"+ + "\01\00\00\u07aa\u07ab\01\00\00\u07ab\u0103\01\00\00\u07ac\u07ad\03"+ + "\u0106\u0084\u07ad\u07ae\01\00\00\u07ae\u07af\05\145\00\u07af\u07b0"+ + "\01\00\00\u07b0\u07b1\03\u010c\u0087\u07b1\u0105\01\00\00\u07b2\u07b3"+ + "\05\023\00\u07b3\u07b4\01\00\00\u07b4\u07b5\03\050\025\u07b5\u07b6"+ + "\01\00\00\u07b6\u07b7\05\025\00\u07b7\u0107\01\00\00\u07b8\u07b9\05"+ + "\010\00\u07b9\u07ba\01\00\00\u07ba\u07bb\05\145\00\u07bb\u07be\01"+ + "\00\00\u07bc\u07bd\03\u010c\u0087\u07bd\u07bf\01\00\00\u07be\u07bc"+ + "\01\00\00\u07be\u07bf\01\00\00\u07bf\u07d7\01\00\00\u07c0\u07c1\05"+ + "\010\00\u07c1\u07c2\01\00\00\u07c2\u07c3\05\060\00\u07c3\u07d7\01"+ + "\00\00\u07c4\u07c5\05\010\00\u07c5\u07c6\01\00\00\u07c6\u07c7\05\054"+ + "\00\u07c7\u07c8\01\00\00\u07c8\u07c9\03\u010a\u0086\u07c9\u07d7\01"+ + "\00\00\u07ca\u07cb\05\010\00\u07cb\u07cc\01\00\00\u07cc\u07cd\05\134"+ + "\00\u07cd\u07ce\01\00\00\u07ce\u07cf\03\u00fe\u0080\u07cf\u07d7\01"+ + "\00\00\u07d0\u07d1\05\033\00\u07d1\u07d2\01\00\00\u07d2\u07d3\03\u00d0"+ + "\151\u07d3\u07d4\01\00\00\u07d4\u07d5\05\034\00\u07d5\u07d7\01\00"+ + "\00\u07d6\u07b8\01\00\00\u07d6\u07c0\01\00\00\u07d6\u07c4\01\00\00"+ + "\u07d6\u07ca\01\00\00\u07d6\u07d0\01\00\00\u07d7\u0109\01\00\00\u07d8"+ + "\u07d9\03\u010c\u0087\u07d9\u07e3\01\00\00\u07da\u07db\05\010\00\u07db"+ + "\u07dc\01\00\00\u07dc\u07dd\05\145\00\u07dd\u07e0\01\00\00\u07de\u07df"+ + "\03\u010c\u0087\u07df\u07e1\01\00\00\u07e0\u07de\01\00\00\u07e0\u07e1"+ + "\01\00\00\u07e1\u07e3\01\00\00\u07e2\u07d8\01\00\00\u07e2\u07da\01"+ + "\00\00\u07e3\u010b\01\00\00\u07e4\u07e5\05\055\00\u07e5\u07e8\01\00"+ + "\00\u07e6\u07e7\03\u00ca\146\u07e7\u07e9\01\00\00\u07e8\u07e6\01\00"+ + "\00\u07e8\u07e9\01\00\00\u07e9\u07ea\01\00\00\u07ea\u07eb\05\056\00"+ + "\u07eb\u010d\01\00\00\u00b7\u0114\u011a\u0122\u0126\u012a\u012e\u0134"+ + "\u0138\u0144\u014c\u0154\u015c\u0160\u0174\u0178\u0180\u0188\u018e"+ + "\u0194\u01a0\u01ac\u01b4\u01c0\u01c8\u01cc\u01d0\u01da\u01e0\u01e6"+ + "\u01ea\u01f0\u01f8\u0200\u0206\u0210\u0218\u0222\u022c\u0234\u0248"+ + "\u0250\u025a\u0264\u0274\u0284\u0292\u029a\u02a2\u02a8\u02b0\u02b6"+ + "\u02be\u02c6\u02d0\u02dc\u02e6\u02f4\u02fe\u0306\u030e\u031c\u0324"+ + "\u032e\u0334\u0336\u0352\u0360\u036a\u036e\u0374\u037c\u037e\u0392"+ + "\u0398\u03a2\u03b0\u03b4\u03b6\u03be\u03c6\u03d6\u03dc\u03e4\u03e8"+ + "\u03f0\u03f6\u0402\u040a\u0412\u0422\u042a\u0430\u0434\u0434\u0436"+ + "\u0442\u0446\u044e\u0458\u0468\u0472\u0476\u047a\u048a\u049e\u04a4"+ + "\u04aa\u04b0\u04b2\u04b8\u04c2\u04ce\u04da\u04e8\u04f6\u0504\u0530"+ + "\u0546\u0554\u055c\u056c\u0572\u0588\u058e\u058e\u0590\u0594\u05a8"+ + "\u05ae\u05b4\u05ba\u05bc\u05c2\u05dc\u05ea\u0612\u061e\u0626\u0630"+ + "\u063a\u0644\u064e\u0658\u065c\u0666\u066e\u067e\u0686\u0698\u06a0"+ + "\u06a4\u06b0\u06b4\u06ca\u06da\u06e2\u06e4\u06f4\u06fa\u0704\u070a"+ + "\u071c\u0722\u072a\u0738\u073e\u073e\u0740\u0760\u076e\u0770\u0776"+ + "\u077a\u0788\u0798\u07a0\u07a4\u07aa\u07be\u07d6\u07e0\u07e2\u07e8"; + public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); + static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); + } +} \ No newline at end of file diff --git a/tool/playground/JavaParser.orig.g b/tool/playground/JavaParser.orig.g new file mode 100644 index 000000000..4a35c273f --- /dev/null +++ b/tool/playground/JavaParser.orig.g @@ -0,0 +1,756 @@ +parser grammar JavaParser; +options {backtrack=true; memoize=true; tokenVocab=JavaLexer;} + +// starting point for parsing a java file +/* The annotations are separated out to make parsing faster, but must be associated with + a packageDeclaration or a typeDeclaration (and not an empty one). */ +compilationUnit + : annotations + ( packageDeclaration importDeclaration* typeDeclaration* + | classOrInterfaceDeclaration typeDeclaration* + ) + | packageDeclaration? importDeclaration* typeDeclaration* + ; + +packageDeclaration + : 'package' qualifiedName ';' + ; + +importDeclaration + : 'import' 'static'? qualifiedName ('.' '*')? ';' + ; + +typeDeclaration + : classOrInterfaceDeclaration + | ';' + ; + +classOrInterfaceDeclaration + : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) + ; + +classOrInterfaceModifiers + : classOrInterfaceModifier* + ; + +classOrInterfaceModifier + : annotation // class or interface + | 'public' // class or interface + | 'protected' // class or interface + | 'private' // class or interface + | 'abstract' // class or interface + | 'static' // class or interface + | 'final' // class only -- does not apply to interfaces + | 'strictfp' // class or interface + ; + +modifiers + : modifier* + ; + +classDeclaration + : normalClassDeclaration + | enumDeclaration + ; + +normalClassDeclaration + : 'class' Identifier typeParameters? + ('extends' type)? + ('implements' typeList)? + classBody + ; + +typeParameters + : '<' typeParameter (',' typeParameter)* '>' + ; + +typeParameter + : Identifier ('extends' typeBound)? + ; + +typeBound + : type ('&' type)* + ; + +enumDeclaration + : ENUM Identifier ('implements' typeList)? enumBody + ; + +enumBody + : '{' enumConstants? ','? enumBodyDeclarations? '}' + ; + +enumConstants + : enumConstant (',' enumConstant)* + ; + +enumConstant + : annotations? Identifier arguments? classBody? + ; + +enumBodyDeclarations + : ';' (classBodyDeclaration)* + ; + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationTypeDeclaration + ; + +normalInterfaceDeclaration + : 'interface' Identifier typeParameters? ('extends' typeList)? interfaceBody + ; + +typeList + : type (',' type)* + ; + +classBody + : '{' classBodyDeclaration* '}' + ; + +interfaceBody + : '{' interfaceBodyDeclaration* '}' + ; + +classBodyDeclaration + : ';' + | 'static'? block + | modifiers memberDecl + ; + +memberDecl + : genericMethodOrConstructorDecl + | memberDeclaration + | 'void' Identifier voidMethodDeclaratorRest + | Identifier constructorDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +memberDeclaration + : type (methodDeclaration | fieldDeclaration) + ; + +genericMethodOrConstructorDecl + : typeParameters genericMethodOrConstructorRest + ; + +genericMethodOrConstructorRest + : (type | 'void') Identifier methodDeclaratorRest + | Identifier constructorDeclaratorRest + ; + +methodDeclaration + : Identifier methodDeclaratorRest + ; + +fieldDeclaration + : variableDeclarators ';' + ; + +interfaceBodyDeclaration + : modifiers interfaceMemberDecl + | ';' + ; + +interfaceMemberDecl + : interfaceMethodOrFieldDecl + | interfaceGenericMethodDecl + | 'void' Identifier voidInterfaceMethodDeclaratorRest + | interfaceDeclaration + | classDeclaration + ; + +interfaceMethodOrFieldDecl + : type Identifier interfaceMethodOrFieldRest + ; + +interfaceMethodOrFieldRest + : constantDeclaratorsRest ';' + | interfaceMethodDeclaratorRest + ; + +methodDeclaratorRest + : formalParameters ('[' ']')* + ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +voidMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? + ( methodBody + | ';' + ) + ; + +interfaceMethodDeclaratorRest + : formalParameters ('[' ']')* ('throws' qualifiedNameList)? ';' + ; + +interfaceGenericMethodDecl + : typeParameters (type | 'void') Identifier + interfaceMethodDeclaratorRest + ; + +voidInterfaceMethodDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? ';' + ; + +constructorDeclaratorRest + : formalParameters ('throws' qualifiedNameList)? constructorBody + ; + +constantDeclarator + : Identifier constantDeclaratorRest + ; + +variableDeclarators + : variableDeclarator (',' variableDeclarator)* + ; + +variableDeclarator + : variableDeclaratorId ('=' variableInitializer)? + ; + +constantDeclaratorsRest + : constantDeclaratorRest (',' constantDeclarator)* + ; + +constantDeclaratorRest + : ('[' ']')* '=' variableInitializer + ; + +variableDeclaratorId + : Identifier ('[' ']')* + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayInitializer + : '{' (variableInitializer (',' variableInitializer)* (',')? )? '}' + ; + +modifier + : annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'abstract' + | 'final' + | 'native' + | 'synchronized' + | 'transient' + | 'volatile' + | 'strictfp' + ; + +packageOrTypeName + : qualifiedName + ; + +enumConstantName + : Identifier + ; + +typeName + : qualifiedName + ; + +type + : classOrInterfaceType ('[' ']')* + | primitiveType ('[' ']')* + ; + +classOrInterfaceType + : Identifier typeArguments? ('.' Identifier typeArguments? )* + ; + +primitiveType + : 'boolean' + | 'char' + | 'byte' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + ; + +variableModifier + : 'final' + | annotation + ; + +typeArguments + : '<' typeArgument (',' typeArgument)* '>' + ; + +typeArgument + : type + | '?' (('extends' | 'super') type)? + ; + +qualifiedNameList + : qualifiedName (',' qualifiedName)* + ; + +formalParameters + : '(' formalParameterDecls? ')' + ; + +formalParameterDecls + : variableModifiers type formalParameterDeclsRest + ; + +formalParameterDeclsRest + : variableDeclaratorId (',' formalParameterDecls)? + | '...' variableDeclaratorId + ; + +methodBody + : block + ; + +constructorBody + : '{' explicitConstructorInvocation? blockStatement* '}' + ; + +explicitConstructorInvocation + : nonWildcardTypeArguments? ('this' | 'super') arguments ';' + | primary '.' nonWildcardTypeArguments? 'super' arguments ';' + ; + + +qualifiedName + : Identifier ('.' Identifier)* + ; + +literal + : integerLiteral + | FloatingPointLiteral + | CharacterLiteral + | StringLiteral + | booleanLiteral + | 'null' + ; + +integerLiteral + : HexLiteral + | OctalLiteral + | DecimalLiteral + ; + +booleanLiteral + : 'true' + | 'false' + ; + +// ANNOTATIONS + +annotations + : annotation+ + ; + +annotation + : '@' annotationName ( '(' ( elementValuePairs | elementValue )? ')' )? + ; + +annotationName + : Identifier ('.' Identifier)* + ; + +elementValuePairs + : elementValuePair (',' elementValuePair)* + ; + +elementValuePair + : Identifier '=' elementValue + ; + +elementValue + : conditionalExpression + | annotation + | elementValueArrayInitializer + ; + +elementValueArrayInitializer + : '{' (elementValue (',' elementValue)*)? (',')? '}' + ; + +annotationTypeDeclaration + : '@' 'interface' Identifier annotationTypeBody + ; + +annotationTypeBody + : '{' (annotationTypeElementDeclaration)* '}' + ; + +annotationTypeElementDeclaration + : modifiers annotationTypeElementRest + ; + +annotationTypeElementRest + : type annotationMethodOrConstantRest ';' + | normalClassDeclaration ';'? + | normalInterfaceDeclaration ';'? + | enumDeclaration ';'? + | annotationTypeDeclaration ';'? + ; + +annotationMethodOrConstantRest + : annotationMethodRest + | annotationConstantRest + ; + +annotationMethodRest + : Identifier '(' ')' defaultValue? + ; + +annotationConstantRest + : variableDeclarators + ; + +defaultValue + : 'default' elementValue + ; + +// STATEMENTS / BLOCKS + +block + : '{' blockStatement* '}' + ; + +blockStatement + : localVariableDeclarationStatement + | classOrInterfaceDeclaration + | statement + ; + +localVariableDeclarationStatement + : localVariableDeclaration ';' + ; + +localVariableDeclaration + : variableModifiers type variableDeclarators + ; + +variableModifiers + : variableModifier* + ; + +statement + : block + | ASSERT expression (':' expression)? ';' + | 'if' parExpression statement (options {k=1;}:'else' statement)? + | 'for' '(' forControl ')' statement + | 'while' parExpression statement + | 'do' statement 'while' parExpression ';' + | 'try' block + ( catches 'finally' block + | catches + | 'finally' block + ) + | 'switch' parExpression '{' switchBlockStatementGroups '}' + | 'synchronized' parExpression block + | 'return' expression? ';' + | 'throw' expression ';' + | 'break' Identifier? ';' + | 'continue' Identifier? ';' + | ';' + | statementExpression ';' + | Identifier ':' statement + ; + +catches + : catchClause (catchClause)* + ; + +catchClause + : 'catch' '(' formalParameter ')' block + ; + +formalParameter + : variableModifiers type variableDeclaratorId + ; + +switchBlockStatementGroups + : (switchBlockStatementGroup)* + ; + +/* The change here (switchLabel -> switchLabel+) technically makes this grammar + ambiguous; but with appropriately greedy parsing it yields the most + appropriate AST, one in which each group, except possibly the last one, has + labels and statements. */ +switchBlockStatementGroup + : switchLabel+ blockStatement* + ; + +switchLabel + : 'case' constantExpression ':' + | 'case' enumConstantName ':' + | 'default' ':' + ; + +forControl +options {k=3;} // be efficient for common case: for (ID ID : ID) ... + : enhancedForControl + | forInit? ';' expression? ';' forUpdate? + ; + +forInit + : localVariableDeclaration + | expressionList + ; + +enhancedForControl + : variableModifiers type Identifier ':' expression + ; + +forUpdate + : expressionList + ; + +// EXPRESSIONS + +parExpression + : '(' expression ')' + ; + +expressionList + : expression (',' expression)* + ; + +statementExpression + : expression + ; + +constantExpression + : expression + ; + +expression + : conditionalExpression (assignmentOperator expression)? + ; + +assignmentOperator + : '=' + | '+=' + | '-=' + | '*=' + | '/=' + | '&=' + | '|=' + | '^=' + | '%=' + | '<' '<' '=' + | '>' '>' '>' '=' + | '>' '>' '=' +/* + | ('<' '<' '=')=> t1='<' t2='<' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>' '>' '=')=> t1='>' t2='>' t3='>' t4='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() && + $t3.getLine() == $t4.getLine() && + $t3.getCharPositionInLine() + 1 == $t4.getCharPositionInLine() }? + | ('>' '>' '=')=> t1='>' t2='>' t3='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + */ + ; + +conditionalExpression + : conditionalOrExpression ( '?' conditionalExpression ':' conditionalExpression )? + ; + +conditionalOrExpression + : conditionalAndExpression ( '||' conditionalAndExpression )* + ; + +conditionalAndExpression + : inclusiveOrExpression ( '&&' inclusiveOrExpression )* + ; + +inclusiveOrExpression + : exclusiveOrExpression ( '|' exclusiveOrExpression )* + ; + +exclusiveOrExpression + : andExpression ( '^' andExpression )* + ; + +andExpression + : equalityExpression ( '&' equalityExpression )* + ; + +equalityExpression + : instanceOfExpression ( ('==' | '!=') instanceOfExpression )* + ; + +instanceOfExpression + : relationalExpression ('instanceof' type)? + ; + +relationalExpression + : shiftExpression ( relationalOp shiftExpression )* + ; + +relationalOp + : '<' '=' + | '>' '=' + | '<' + | '>' + ; +/* +relationalOp + : ('<' '=')=> t1='<' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '=')=> t1='>' t2='=' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | '<' + | '>' + ; + */ + +shiftExpression + : additiveExpression ( shiftOp additiveExpression )* + ; + +shiftOp + : '<' '<' + | '>' '>' '>' + | '>' '>' + ; + +/* +shiftOp + : ('<' '<')=> t1='<' t2='<' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + | ('>' '>' '>')=> t1='>' t2='>' t3='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() && + $t2.getLine() == $t3.getLine() && + $t2.getCharPositionInLine() + 1 == $t3.getCharPositionInLine() }? + | ('>' '>')=> t1='>' t2='>' + { $t1.getLine() == $t2.getLine() && + $t1.getCharPositionInLine() + 1 == $t2.getCharPositionInLine() }? + ; +*/ + +additiveExpression + : multiplicativeExpression ( ('+' | '-') multiplicativeExpression )* + ; + +multiplicativeExpression + : unaryExpression ( ( '*' | '/' | '%' ) unaryExpression )* + ; + +unaryExpression + : '+' unaryExpression + | '-' unaryExpression + | '++' unaryExpression + | '--' unaryExpression + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : '~' unaryExpression + | '!' unaryExpression + | castExpression + | primary selector* ('++'|'--')? + ; + +castExpression + : '(' primitiveType ')' unaryExpression + | '(' (type | expression) ')' unaryExpressionNotPlusMinus + ; + +primary + : parExpression + | 'this' ('.' Identifier)* identifierSuffix? + | 'super' superSuffix + | literal + | 'new' creator + | Identifier ('.' Identifier)* identifierSuffix? + | primitiveType ('[' ']')* '.' 'class' + | 'void' '.' 'class' + ; + +identifierSuffix + : ('[' ']')+ '.' 'class' + | ('[' expression ']')+ // can also be matched by selector, but do here + | arguments + | '.' 'class' + | '.' explicitGenericInvocation + | '.' 'this' + | '.' 'super' arguments + | '.' 'new' innerCreator + ; + +creator + : nonWildcardTypeArguments createdName classCreatorRest + | createdName (arrayCreatorRest | classCreatorRest) + ; + +createdName + : classOrInterfaceType + | primitiveType + ; + +innerCreator + : nonWildcardTypeArguments? Identifier classCreatorRest + ; + +arrayCreatorRest + : '[' + ( ']' ('[' ']')* arrayInitializer + | expression ']' ('[' expression ']')* ('[' ']')* + ) + ; + +classCreatorRest + : arguments classBody? + ; + +explicitGenericInvocation + : nonWildcardTypeArguments Identifier arguments + ; + +nonWildcardTypeArguments + : '<' typeList '>' + ; + +selector + : '.' Identifier arguments? + | '.' 'this' + | '.' 'super' superSuffix + | '.' 'new' innerCreator + | '[' expression ']' + ; + +superSuffix + : arguments + | '.' Identifier arguments? + ; + +arguments + : '(' expressionList? ')' + ; + diff --git a/tool/playground/L.g b/tool/playground/L.g new file mode 100644 index 000000000..b1b032d3b --- /dev/null +++ b/tool/playground/L.g @@ -0,0 +1,7 @@ +lexer grammar L; + +WS : ' '+ {skip();} ; + +StringLiteral + : '"' ( ~('\\'|'"') )* '"' + ; diff --git a/tool/playground/LL1.g b/tool/playground/LL1.g new file mode 100644 index 000000000..198201652 --- /dev/null +++ b/tool/playground/LL1.g @@ -0,0 +1,14 @@ +grammar LL1; + +b : B | C ; + +c1 : A? B ; + +c2 : (B|C)? D ; + +d1 : A* B ; + +d2 : ({true}? B | {true}? A)* D {System.out.println("works!");} ; + +e1 : A+ B ; +e2 : (B|A)+ D ; diff --git a/tool/playground/T.g b/tool/playground/T.g new file mode 100644 index 000000000..dbe7b4f41 --- /dev/null +++ b/tool/playground/T.g @@ -0,0 +1,11 @@ +lexer grammar T; + +STRING_START : '"' {pushMode(STRING_MODE); more();} ; + +WS : ' ' | '\n' {skip();} ; + +mode STRING_MODE; + +STRING : '"' {popMode();} ; + +ANY : . {more();} ; diff --git a/tool/playground/T.java b/tool/playground/T.java new file mode 100644 index 000000000..584bfc6a1 --- /dev/null +++ b/tool/playground/T.java @@ -0,0 +1,79 @@ +/* + * @(#)SerializationTester.java 1.5 03/12/19 + * + * Copyright 2004 Sun Microsystems, Inc. All rights reserved. + * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + */ + + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.LexerSharedState; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + +public class T extends Lexer { + public static final int + EOR=1, STRING_START=4, WS=5, STRING=6, ANY=7; + public static final int DEFAULT_MODE = 0; + public static final int STRING_MODE = 1; + + public static final String[] tokenNames = { + "", "", "", + "EOR", "STRING_START", "WS", "STRING", "ANY" + }; + public static final String[] ruleNames = { + "", + "STRING_START", "WS", "STRING", "ANY" + }; + + + public T(CharStream input) { + this(input, new LexerSharedState()); + } + public T(CharStream input, LexerSharedState state) { + super(input,state); + _interp = new LexerInterpreter(this,_ATN); + } + + public String getGrammarFileName() { return "T.java"; } + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + + public void action(int ruleIndex, int actionIndex) { + switch ( actionIndex ) { + case 1 : pushMode(STRING_MODE); more(); break; + case 2 : skip(); break; + case 3 : popMode(); break; + case 4 : more(); break; + } + } + + public static final String _serializedATN = + "\030\012\032\06\00\06\00\02\01\07\01\02\02\07\02\02\03\07\03\02\04"+ + "\07\04\01\01\01\01\01\01\01\02\01\02\01\02\01\02\01\02\03\02\010\02"+ + "\01\03\01\03\01\03\01\04\01\04\01\04\04\02\04\01\04\05\02\06\06\03"+ + "\010\07\04\02\00\01\00\031\00\02\01\00\00\00\04\01\00\00\01\06\01"+ + "\00\00\01\010\01\00\00\02\012\01\00\00\04\022\01\00\00\06\024\01\00"+ + "\00\010\027\01\00\00\012\013\05\042\00\013\014\01\00\00\014\03\01"+ + "\00\00\015\016\05\040\00\016\023\01\00\00\017\020\05\012\00\020\021"+ + "\01\00\00\021\023\01\00\00\022\015\01\00\00\022\017\01\00\00\023\05"+ + "\01\00\00\024\025\05\042\00\025\026\01\00\00\026\07\01\00\00\027\030"+ + "\013\00\00\030\031\01\00\00\031\011\01\00\00\03\00\01\022"; + public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); + static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); + } +} diff --git a/tool/playground/Test.java b/tool/playground/Test.java new file mode 100644 index 000000000..fa25fe18d --- /dev/null +++ b/tool/playground/Test.java @@ -0,0 +1,120 @@ +import org.antlr.v4.Tool; +import org.antlr.v4.automata.ParserATNFactory; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenSource; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.atn.ATN; +import org.antlr.v4.semantics.SemanticPipeline; +import org.antlr.v4.tool.DOTGenerator; +import org.antlr.v4.tool.Grammar; + +import java.util.List; + +public class Test { + public static void main(String[] args) throws Exception { +// T t = new T(new ANTLRFileStream(args[0])); +// CommonTokenStream tokens = new CommonTokenStream(t); +// tokens.fill(); +// for (Object tok : tokens.getTokens()) { +// System.out.println(tok); +// } + + } + + public static void dump() throws Exception { + Grammar g = new Grammar( + "grammar T;\n" + + "\n" + + "a : A | b ;\n" + + "\n" + + "b : B C | B D ;\n" + + "\n" + + "c : (B C)? B D ;\n" + + "\n" + + "d : (B C|B A)* B D ;\n" + + "\n" + + "e : (B C|B A)+ B D ;" + ); + if ( g.ast!=null && !g.ast.hasErrors ) { + System.out.println(g.ast.toStringTree()); + Tool antlr = new Tool(); + SemanticPipeline sem = new SemanticPipeline(g); + sem.process(); + if ( g.getImportedGrammars()!=null ) { // process imported grammars (if any) + for (Grammar imp : g.getImportedGrammars()) { + antlr.process(imp); + } + } + } + + ParserATNFactory f = new ParserATNFactory(g); + ATN atn = f.createATN(); + + DOTGenerator dot = new DOTGenerator(g); + System.out.println(dot.getDOT(atn.ruleToStartState.get(g.getRule("d")))); + } + + public static class IntTokenStream implements TokenStream { + List types; + int p=0; + public IntTokenStream(List types) { this.types = types; } + + public void consume() { p++; } + + public int LA(int i) { return LT(i).getType(); } + + public int mark() { + return index(); + } + + public int index() { return p; } + + public void rewind(int marker) { + } + + public void rewind() { + } + + public void release(int marker) { + seek(marker); + } + + public void seek(int index) { + p = index; + } + + public int size() { + return types.size(); + } + + public String getSourceName() { + return null; + } + + public Token LT(int i) { + if ( (p+i-1)>=types.size() ) return new CommonToken(-1); + return new CommonToken(types.get(p+i-1)); + } + + public int range() { + return 0; + } + + public Token get(int i) { + return new CommonToken(types.get(i)); + } + + public TokenSource getTokenSource() { + return null; + } + + public String toString(int start, int stop) { + return null; + } + + public String toString(Token start, Token stop) { + return null; + } + } +} diff --git a/tool/playground/TestJava.java b/tool/playground/TestJava.java new file mode 100644 index 000000000..a03868b23 --- /dev/null +++ b/tool/playground/TestJava.java @@ -0,0 +1,117 @@ +import org.antlr.runtime.debug.BlankDebugEventListener; +import org.antlr.v4.runtime.ANTLRFileStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.atn.LexerInterpreter; +import org.antlr.v4.runtime.atn.ParserInterpreter; + +import java.io.File; + +/** Parse a java file or directory of java files using the generated parser + * ANTLR builds from java.g + */ +class TestJava { + public static long lexerTime = 0; + public static boolean profile = false; + public static JavaLexer lexer; + public static JavaParser parser = null; + + public static void main(String[] args) { + try { + long start = System.currentTimeMillis(); + if (args.length > 0 ) { + // for each directory/file specified on the command line + for(int i=0; i< args.length;i++) { + doFile(new File(args[i])); // parse it + } + } + else { + System.err.println("Usage: java Main "); + } + long stop = System.currentTimeMillis(); + System.out.println("Lexer total time " + lexerTime + "ms."); + System.out.println("Total time " + (stop - start) + "ms."); + + System.out.println("finished parsing OK"); + System.out.println(LexerInterpreter.ATN_failover+" lexer failovers"); + System.out.println(LexerInterpreter.match_calls+" lexer match calls"); + System.out.println(ParserInterpreter.ATN_failover+" parser failovers"); + System.out.println(ParserInterpreter.predict_calls +" parser predict calls"); + if ( profile ) { + System.out.println("num decisions "+profiler.numDecisions); + } + } + catch(Exception e) { + System.err.println("exception: "+e); + e.printStackTrace(System.err); // so we can get stack trace + } + } + + + // This method decides what action to take based on the type of + // file we are looking at + public static void doFile(File f) + throws Exception { + // If this is a directory, walk each file/dir in that directory + if (f.isDirectory()) { + String files[] = f.list(); + for(int i=0; i < files.length; i++) + doFile(new File(f, files[i])); + } + + // otherwise, if this is a java file, parse it! + else if ( ((f.getName().length()>5) && + f.getName().substring(f.getName().length()-5).equals(".java")) + || f.getName().equals("input") ) + { + System.err.println("parsing "+f.getAbsolutePath()); + parseFile(f.getAbsolutePath()); + } + } + + static class CountDecisions extends BlankDebugEventListener { + public int numDecisions = 0; + public void enterDecision(int decisionNumber) { + numDecisions++; + } + } + static CountDecisions profiler = new CountDecisions(); + + // Here's where we do the real work... + public static void parseFile(String f) + throws Exception { + try { + // Create a scanner that reads from the input stream passed to us + if ( lexer==null ) { + lexer = new JavaLexer(null); + } + lexer.setCharStream(new ANTLRFileStream(f)); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + long start = System.currentTimeMillis(); + tokens.fill(); +// System.out.println(tokens.getTokens()); + long stop = System.currentTimeMillis(); + lexerTime += stop-start; +// for (Object t : tokens.getTokens()) { +// System.out.println(t); +// } + + if ( true ) { + // Create a parser that reads from the scanner + if ( parser==null ) { + parser = new JavaParser(tokens); + } + parser.setTokenStream(tokens); + // start parsing at the compilationUnit rule + parser.compilationUnit(null); + //System.err.println("finished "+f); + } + } + catch (Exception e) { + System.err.println("parser exception: "+e); + e.printStackTrace(); // so we can get stack trace + } + } + +} + diff --git a/tool/playground/TestL.java b/tool/playground/TestL.java new file mode 100644 index 000000000..c97c688b2 --- /dev/null +++ b/tool/playground/TestL.java @@ -0,0 +1,8 @@ +public class TestL { + public static void main(String[] args) throws Exception { +// L lexer = new L(new ANTLRFileStream(args[0])); +// CommonTokenStream tokens = new CommonTokenStream(lexer); +// tokens.fill(); +// System.out.println(tokens.getTokens()); + } +} diff --git a/tool/playground/TestYang.java b/tool/playground/TestYang.java new file mode 100644 index 000000000..a6e763a34 --- /dev/null +++ b/tool/playground/TestYang.java @@ -0,0 +1,117 @@ +import org.antlr.runtime.debug.BlankDebugEventListener; +import org.antlr.v4.runtime.ANTLRFileStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.atn.LexerInterpreter; +import org.antlr.v4.runtime.atn.ParserInterpreter; + +import java.io.File; + +/** Parse a java file or directory of java files using the generated parser + * ANTLR builds from java.g + */ +class TestYang { + public static long lexerTime = 0; + public static boolean profile = false; + public static YangJavaLexer lexer; + public static YangJavaParser parser = null; + + public static void main(String[] args) { + try { + long start = System.currentTimeMillis(); + if (args.length > 0 ) { + // for each directory/file specified on the command line + for(int i=0; i< args.length;i++) { + doFile(new File(args[i])); // parse it + } + } + else { + System.err.println("Usage: java Main "); + } + long stop = System.currentTimeMillis(); + System.out.println("Lexer total time " + lexerTime + "ms."); + System.out.println("Total time " + (stop - start) + "ms."); + + System.out.println("finished parsing OK"); + System.out.println(LexerInterpreter.ATN_failover+" lexer failovers"); + System.out.println(LexerInterpreter.match_calls+" lexer match calls"); + System.out.println(ParserInterpreter.ATN_failover+" parser failovers"); + System.out.println(ParserInterpreter.predict_calls +" parser predict calls"); + if ( profile ) { + System.out.println("num decisions "+profiler.numDecisions); + } + } + catch(Exception e) { + System.err.println("exception: "+e); + e.printStackTrace(System.err); // so we can get stack trace + } + } + + + // This method decides what action to take based on the type of + // file we are looking at + public static void doFile(File f) + throws Exception { + // If this is a directory, walk each file/dir in that directory + if (f.isDirectory()) { + String files[] = f.list(); + for(int i=0; i < files.length; i++) + doFile(new File(f, files[i])); + } + + // otherwise, if this is a java file, parse it! + else if ( ((f.getName().length()>5) && + f.getName().substring(f.getName().length()-5).equals(".java")) + || f.getName().equals("input") ) + { + System.err.println("parsing "+f.getAbsolutePath()); + parseFile(f.getAbsolutePath()); + } + } + + static class CountDecisions extends BlankDebugEventListener { + public int numDecisions = 0; + public void enterDecision(int decisionNumber) { + numDecisions++; + } + } + static CountDecisions profiler = new CountDecisions(); + + // Here's where we do the real work... + public static void parseFile(String f) + throws Exception { + try { + // Create a scanner that reads from the input stream passed to us + if ( lexer==null ) { + lexer = new YangJavaLexer(null); + } + lexer.setCharStream(new ANTLRFileStream(f)); + + CommonTokenStream tokens = new CommonTokenStream(lexer); + long start = System.currentTimeMillis(); + tokens.fill(); +// System.out.println(tokens.getTokens()); + long stop = System.currentTimeMillis(); + lexerTime += stop-start; + for (Object t : tokens.getTokens()) { + System.out.println(t); + } + + if ( true ) { + // Create a parser that reads from the scanner + if ( parser==null ) { + parser = new YangJavaParser(tokens); + } + parser.setTokenStream(tokens); + // start parsing at the compilationUnit rule + parser.compilationUnit(null); + //System.err.println("finished "+f); + } + } + catch (Exception e) { + System.err.println("parser exception: "+e); + e.printStackTrace(); // so we can get stack trace + } + } + +} + diff --git a/tool/playground/YangJavaLexer.g b/tool/playground/YangJavaLexer.g new file mode 100644 index 000000000..17cc0e469 --- /dev/null +++ b/tool/playground/YangJavaLexer.g @@ -0,0 +1,1478 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * This file is modified by Yang Jiang (yang.jiang.z@gmail.com), taken from the original + * java grammar in www.antlr.org, with the goal to provide a standard ANTLR grammar + * for java, as well as an implementation to construct the same AST trees as javac does. + * + * The major changes of this version as compared to the original version include: + * 1) Top level rules are changed to include all of their sub-components. + * For example, the rule + * + * classOrInterfaceDeclaration + * : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) + * ; + * + * is changed to + * + * classOrInterfaceDeclaration + * : classDeclaration | interfaceDeclaration + * ; + * + * with classOrInterfaceModifiers been moved inside classDeclaration and + * interfaceDeclaration. + * + * 2) The original version is not quite clear on certain rules like memberDecl, + * where it mixed the styles of listing of top level rules and listing of sub rules. + * + * memberDecl + * : genericMethodOrConstructorDecl + * | memberDeclaration + * | 'void' Identifier voidMethodDeclaratorRest + * | Identifier constructorDeclaratorRest + * | interfaceDeclaration + * | classDeclaration + * ; + * + * This is changed to a + * + * memberDecl + * : fieldDeclaration + * | methodDeclaration + * | classDeclaration + * | interfaceDeclaration + * ; + * by folding similar rules into single rule. + * + * 3) Some syntactical predicates are added for efficiency, although this is not necessary + * for correctness. + * + * 4) Lexer part is rewritten completely to construct tokens needed for the parser. + * + * 5) This grammar adds more source level support + * + * + * This grammar also adds bug fixes. + * + * 1) Adding typeArguments to superSuffix to alHexSignificandlow input like + * super.method() + * + * 2) Adding typeArguments to innerCreator to allow input like + * new Type1().new Type2() + * + * 3) conditionalExpression is changed to + * conditionalExpression + * : conditionalOrExpression ( '?' expression ':' conditionalExpression )? + * ; + * to accept input like + * true?1:2=3 + * + * Note: note this is by no means a valid input, by the grammar should be able to parse + * this as + * (true?1:2)=3 + * rather than + * true?1:(2=3) + * + * + * Know problems: + * Won't pass input containing unicode sequence like this + * char c = '\uffff' + * String s = "\uffff"; + * Because Antlr does not treat '\uffff' as an valid char. This will be fixed in the next Antlr + * release. [Fixed in Antlr-3.1.1] + * + * Things to do: + * More effort to make this grammar faster. + * Error reporting/recovering. + * + * + * NOTE: If you try to compile this file from command line and Antlr gives an exception + * like error message while compiling, add option + * -Xconversiontimeout 100000 + * to the command line. + * If it still doesn't work or the compilation process + * takes too long, try to comment out the following two lines: + * | {isValidSurrogateIdentifierStart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff') + * | {isValidSurrogateIdentifierPart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff') + * + * + * Below are comments found in the original version. + */ + + +/** A Java 1.5 grammar for ANTLR v3 derived from the spec + * + * This is a very close representation of the spec; the changes + * are comestic (remove left recursion) and also fixes (the spec + * isn't exactly perfect). I have run this on the 1.4.2 source + * and some nasty looking enums from 1.5, but have not really + * tested for 1.5 compatibility. + * + * I built this with: java -Xmx100M org.antlr.Tool java.g + * and got two errors that are ok (for now): + * java.g:691:9: Decision can match input such as + * "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}" + * using multiple alternatives: 3, 4 + * As a result, alternative(s) 4 were disabled for that input + * java.g:734:35: Decision can match input such as "{'$', 'A'..'Z', + * '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6', + * '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F', + * '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}" + * using multiple alternatives: 1, 2 + * As a result, alternative(s) 2 were disabled for that input + * + * You can turn enum on/off as a keyword :) + * + * Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher) + * + * Primary author: Terence Parr, July 2006 + * + * Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren, + * October 25, 2006; + * fixed normalInterfaceDeclaration: now uses typeParameters instead + * of typeParameter (according to JLS, 3rd edition) + * fixed castExpression: no longer allows expression next to type + * (according to semantics in JLS, in contrast with syntax in JLS) + * + * Version 1.0.2 -- Terence Parr, Nov 27, 2006 + * java spec I built this from had some bizarre for-loop control. + * Looked weird and so I looked elsewhere...Yep, it's messed up. + * simplified. + * + * Version 1.0.3 -- Chris Hogue, Feb 26, 2007 + * Factored out an annotationName rule and used it in the annotation rule. + * Not sure why, but typeName wasn't recognizing references to inner + * annotations (e.g. @InterfaceName.InnerAnnotation()) + * Factored out the elementValue section of an annotation reference. Created + * elementValuePair and elementValuePairs rules, then used them in the + * annotation rule. Allows it to recognize annotation references with + * multiple, comma separated attributes. + * Updated elementValueArrayInitializer so that it allows multiple elements. + * (It was only allowing 0 or 1 element). + * Updated localVariableDeclaration to allow annotations. Interestingly the JLS + * doesn't appear to indicate this is legal, but it does work as of at least + * JDK 1.5.0_06. + * Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest. + * Because annotationConstantRest already references variableDeclarator which + * has the Identifier portion in it, the parser would fail on constants in + * annotation definitions because it expected two identifiers. + * Added optional trailing ';' to the alternatives in annotationTypeElementRest. + * Wouldn't handle an inner interface that has a trailing ';'. + * Swapped the expression and type rule reference order in castExpression to + * make it check for genericized casts first. It was failing to recognize a + * statement like "Class TYPE = (Class)...;" because it was seeing + * 'Class'. + * Changed createdName to use typeArguments instead of nonWildcardTypeArguments. + * + * Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than + * just 'arguments'. The case it couldn't handle was a call to an explicit + * generic method invocation (e.g. this.doSomething()). Using identifierSuffix + * may be overly aggressive--perhaps should create a more constrained thisSuffix rule? + * + * Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007 + * + * Fixed formalParameterDecls, localVariableDeclaration, forInit, + * and forVarControl to use variableModifier* not 'final'? (annotation)? + * + * Version 1.0.5 -- Terence, June 21, 2007 + * --a[i].foo didn't work. Fixed unaryExpression + * + * Version 1.0.6 -- John Ridgway, March 17, 2008 + * Made "assert" a switchable keyword like "enum". + * Fixed compilationUnit to disallow "annotation importDeclaration ...". + * Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more + * places. + * Changed modifier* and/or variableModifier* to classOrInterfaceModifiers, + * modifiers or variableModifiers, as appropriate. + * Renamed "bound" to "typeBound" to better match language in the JLS. + * Added "memberDeclaration" which rewrites to methodDeclaration or + * fieldDeclaration and pulled type into memberDeclaration. So we parse + * type and then move on to decide whether we're dealing with a field + * or a method. + * Modified "constructorDeclaration" to use "constructorBody" instead of + * "methodBody". constructorBody starts with explicitConstructorInvocation, + * then goes on to blockStatement*. Pulling explicitConstructorInvocation + * out of expressions allowed me to simplify "primary". + * Changed variableDeclarator to simplify it. + * Changed type to use classOrInterfaceType, thus simplifying it; of course + * I then had to add classOrInterfaceType, but it is used in several + * places. + * Fixed annotations, old version allowed "@X(y,z)", which is illegal. + * Added optional comma to end of "elementValueArrayInitializer"; as per JLS. + * Changed annotationTypeElementRest to use normalClassDeclaration and + * normalInterfaceDeclaration rather than classDeclaration and + * interfaceDeclaration, thus getting rid of a couple of grammar ambiguities. + * Split localVariableDeclaration into localVariableDeclarationStatement + * (includes the terminating semi-colon) and localVariableDeclaration. + * This allowed me to use localVariableDeclaration in "forInit" clauses, + * simplifying them. + * Changed switchBlockStatementGroup to use multiple labels. This adds an + * ambiguity, but if one uses appropriately greedy parsing it yields the + * parse that is closest to the meaning of the switch statement. + * Renamed "forVarControl" to "enhancedForControl" -- JLS language. + * Added semantic predicates to test for shift operations rather than other + * things. Thus, for instance, the string "< <" will never be treated + * as a left-shift operator. + * In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation, + * which are illegal. + * Moved "nonWildcardTypeArguments into innerCreator. + * Removed 'super' superSuffix from explicitGenericInvocation, since that + * is only used in explicitConstructorInvocation at the beginning of a + * constructorBody. (This is part of the simplification of expressions + * mentioned earlier.) + * Simplified primary (got rid of those things that are only used in + * explicitConstructorInvocation). + * Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it + * led to an ambiguity. + * + * This grammar successfully parses every .java file in the JDK 1.5 source + * tree (excluding those whose file names include '-', which are not + * valid Java compilation units). + * + * Known remaining problems: + * "Letter" and "JavaIDDigit" are wrong. The actual specification of + * "Letter" should be "a character for which the method + * Character.isJavaIdentifierStart(int) returns true." A "Java + * letter-or-digit is a character for which the method + * Character.isJavaIdentifierPart(int) returns true." + */ + + + /* + This is a merged file, containing two versions of the Java.g grammar. + To extract a version from the file, run the ver.jar with the command provided below. + + Version 1 - tree building version, with all source level support, error recovery etc. + This is the version for compiler grammar workspace. + This version can be extracted by invoking: + java -cp ver.jar Main 1 true true true true true Java.g + + Version 2 - clean version, with no source leve support, no error recovery, no predicts, + assumes 1.6 level, works in Antlrworks. + This is the version for Alex. + This version can be extracted by invoking: + java -cp ver.jar Main 2 false false false false false Java.g +*/ + +lexer grammar YangJavaLexer; + +LONGLITERAL + : IntegerNumber LongSuffix + ; + + +INTLITERAL + : IntegerNumber + ; + +fragment +IntegerNumber + : '0' + | '1'..'9' ('0'..'9')* + | '0' ('0'..'7')+ + | HexPrefix HexDigit+ + ; + +fragment +HexPrefix + : '0x' | '0X' + ; + +fragment +HexDigit + : ('0'..'9'|'a'..'f'|'A'..'F') + ; + +fragment +LongSuffix + : 'l' | 'L' + ; + +fragment +NonIntegerNumber + : ('0' .. '9')+ '.' ('0' .. '9')* Exponent? + | '.' ( '0' .. '9' )+ Exponent? + | ('0' .. '9')+ Exponent + | ('0' .. '9')+ + | HexPrefix HexDigit* + ('.' HexDigit*)? + ( 'p' | 'P' ) + ( '+' | '-' )? + ( '0' .. '9' )+ + ; + +fragment +Exponent + : ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ + ; + +fragment +FloatSuffix + : 'f' | 'F' + ; + +fragment +DoubleSuffix + : 'd' | 'D' + ; + +FLOATLITERAL + : NonIntegerNumber FloatSuffix + ; + +DOUBLELITERAL + : NonIntegerNumber DoubleSuffix? + ; + +CHARLITERAL + : '\'' + ( EscapeSequence + | ~( '\'' | '\\' | '\r' | '\n' ) + ) + '\'' + ; + +STRINGLITERAL + : '"' + ( EscapeSequence + | ~( '\\' | '"' | '\r' | '\n' ) + )* + '"' + ; + +// TJP alters to mirror my JavaLexer.g + +fragment +EscapeSequence + : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\') + | UnicodeEscape + | OctalEscape + ; + +fragment +OctalEscape + : '\\' ('0'..'3') ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') ('0'..'7') + | '\\' ('0'..'7') + ;// $ANTLR src "JavaCombined.g" 958 +fragment +UnicodeEscape + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ; + +WS + : ( + ' ' + | '\r' + | '\t' + | '\u000C' + | '\n' + ) + { + skip(); + } + ; + +COMMENT + : '/*' .* '*/' {skip();} + ; + +LINE_COMMENT + : '//' .* ('\r\n' | '\r' | '\n') {skip();} + | '//' ~('\n'|'\r')* {skip();} // a line comment could appear at the end of the file without CR/LF + ; + +ABSTRACT + : 'abstract' + ; + +ASSERT + : 'assert' + ; + +BOOLEAN + : 'boolean' + ; + +BREAK + : 'break' + ; + +BYTE + : 'byte' + ; + +CASE + : 'case' + ; + +CATCH + : 'catch' + ; + +CHAR + : 'char' + ; + +CLASS + : 'class' + ; + +CONST + : 'const' + ; + +CONTINUE + : 'continue' + ; + +DEFAULT + : 'default' + ; + +DO + : 'do' + ; + +DOUBLE + : 'double' + ; + +ELSE + : 'else' + ; + +ENUM + : 'enum' + ; + +EXTENDS + : 'extends' + ; + +FINAL + : 'final' + ; + +FINALLY + : 'finally' + ; + +FLOAT + : 'float' + ; + +FOR + : 'for' + ; + +GOTO + : 'goto' + ; + +IF + : 'if' + ; + +IMPLEMENTS + : 'implements' + ; + +IMPORT + : 'import' + ; + +INSTANCEOF + : 'instanceof' + ; + +INT + : 'int' + ; + +INTERFACE + : 'interface' + ; + +LONG + : 'long' + ; + +NATIVE + : 'native' + ; + +NEW + : 'new' + ; + +PACKAGE + : 'package' + ; + +PRIVATE + : 'private' + ; + +PROTECTED + : 'protected' + ; + +PUBLIC + : 'public' + ; + +RETURN + : 'return' + ; + +SHORT + : 'short' + ; + +STATIC + : 'static' + ; + +STRICTFP + : 'strictfp' + ; + +SUPER + : 'super' + ; + +SWITCH + : 'switch' + ; + +SYNCHRONIZED + : 'synchronized' + ; + +THIS + : 'this' + ; + +THROW + : 'throw' + ; + +THROWS + : 'throws' + ; + +TRANSIENT + : 'transient' + ; + +TRY + : 'try' + ; + +VOID + : 'void' + ; + +VOLATILE + : 'volatile' + ; + +WHILE + : 'while' + ; + +TRUE + : 'true' + ; + +FALSE + : 'false' + ; + +NULL + : 'null' + ; + +LPAREN + : '(' + ; + +RPAREN + : ')' + ; + +LBRACE + : '{' + ; + +RBRACE + : '}' + ; + +LBRACKET + : '[' + ; + +RBRACKET + : ']' + ; + +SEMI + : ';' + ; + +COMMA + : ',' + ; + +DOT + : '.' + ; + +ELLIPSIS + : '...' + ; + +EQ + : '=' + ; + +BANG + : '!' + ; + +TILDE + : '~' + ; + +QUES + : '?' + ; + +COLON + : ':' + ; + +EQEQ + : '==' + ; + +AMPAMP + : '&&' + ; + +BARBAR + : '||' + ; + +PLUSPLUS + : '++' + ; + +SUBSUB + : '--' + ; + +PLUS + : '+' + ; + +SUB + : '-' + ; + +STAR + : '*' + ; + +SLASH + : '/' + ; + +AMP + : '&' + ; + +BAR + : '|' + ; + +CARET + : '^' + ; + +PERCENT + : '%' + ; + +PLUSEQ + : '+=' + ; + +SUBEQ + : '-=' + ; + +STAREQ + : '*=' + ; + +SLASHEQ + : '/=' + ; + +AMPEQ + : '&=' + ; + +BAREQ + : '|=' + ; + +CARETEQ + : '^=' + ; + +PERCENTEQ + : '%=' + ; + +MONKEYS_AT + : '@' + ; + +BANGEQ + : '!=' + ; + +GT + : '<' + ; + +LT + : '>' + ; + +IDENTIFIER + : IdentifierStart IdentifierPart* + ; + +fragment +SurrogateIdentifer + : ('\ud800'..'\udbff') ('\udc00'..'\udfff') + ; + +fragment +IdentifierStart + : '\u0024' + | '\u0041'..'\u005a' + | '\u005f' + | '\u0061'..'\u007a' + | '\u00a2'..'\u00a5' + | '\u00aa' + | '\u00b5' + | '\u00ba' + | '\u00c0'..'\u00d6' + | '\u00d8'..'\u00f6' + | '\u00f8'..'\u0236' + | '\u0250'..'\u02c1' + | '\u02c6'..'\u02d1' + | '\u02e0'..'\u02e4' + | '\u02ee' + | '\u037a' + | '\u0386' + | '\u0388'..'\u038a' + | '\u038c' + | '\u038e'..'\u03a1' + | '\u03a3'..'\u03ce' + | '\u03d0'..'\u03f5' + | '\u03f7'..'\u03fb' + | '\u0400'..'\u0481' + | '\u048a'..'\u04ce' + | '\u04d0'..'\u04f5' + | '\u04f8'..'\u04f9' + | '\u0500'..'\u050f' + | '\u0531'..'\u0556' + | '\u0559' + | '\u0561'..'\u0587' + | '\u05d0'..'\u05ea' + | '\u05f0'..'\u05f2' + | '\u0621'..'\u063a' + | '\u0640'..'\u064a' + | '\u066e'..'\u066f' + | '\u0671'..'\u06d3' + | '\u06d5' + | '\u06e5'..'\u06e6' + | '\u06ee'..'\u06ef' + | '\u06fa'..'\u06fc' + | '\u06ff' + | '\u0710' + | '\u0712'..'\u072f' + | '\u074d'..'\u074f' + | '\u0780'..'\u07a5' + | '\u07b1' + | '\u0904'..'\u0939' + | '\u093d' + | '\u0950' + | '\u0958'..'\u0961' + | '\u0985'..'\u098c' + | '\u098f'..'\u0990' + | '\u0993'..'\u09a8' + | '\u09aa'..'\u09b0' + | '\u09b2' + | '\u09b6'..'\u09b9' + | '\u09bd' + | '\u09dc'..'\u09dd' + | '\u09df'..'\u09e1' + | '\u09f0'..'\u09f3' + | '\u0a05'..'\u0a0a' + | '\u0a0f'..'\u0a10' + | '\u0a13'..'\u0a28' + | '\u0a2a'..'\u0a30' + | '\u0a32'..'\u0a33' + | '\u0a35'..'\u0a36' + | '\u0a38'..'\u0a39' + | '\u0a59'..'\u0a5c' + | '\u0a5e' + | '\u0a72'..'\u0a74' + | '\u0a85'..'\u0a8d' + | '\u0a8f'..'\u0a91' + | '\u0a93'..'\u0aa8' + | '\u0aaa'..'\u0ab0' + | '\u0ab2'..'\u0ab3' + | '\u0ab5'..'\u0ab9' + | '\u0abd' + | '\u0ad0' + | '\u0ae0'..'\u0ae1' + | '\u0af1' + | '\u0b05'..'\u0b0c' + | '\u0b0f'..'\u0b10' + | '\u0b13'..'\u0b28' + | '\u0b2a'..'\u0b30' + | '\u0b32'..'\u0b33' + | '\u0b35'..'\u0b39' + | '\u0b3d' + | '\u0b5c'..'\u0b5d' + | '\u0b5f'..'\u0b61' + | '\u0b71' + | '\u0b83' + | '\u0b85'..'\u0b8a' + | '\u0b8e'..'\u0b90' + | '\u0b92'..'\u0b95' + | '\u0b99'..'\u0b9a' + | '\u0b9c' + | '\u0b9e'..'\u0b9f' + | '\u0ba3'..'\u0ba4' + | '\u0ba8'..'\u0baa' + | '\u0bae'..'\u0bb5' + | '\u0bb7'..'\u0bb9' + | '\u0bf9' + | '\u0c05'..'\u0c0c' + | '\u0c0e'..'\u0c10' + | '\u0c12'..'\u0c28' + | '\u0c2a'..'\u0c33' + | '\u0c35'..'\u0c39' + | '\u0c60'..'\u0c61' + | '\u0c85'..'\u0c8c' + | '\u0c8e'..'\u0c90' + | '\u0c92'..'\u0ca8' + | '\u0caa'..'\u0cb3' + | '\u0cb5'..'\u0cb9' + | '\u0cbd' + | '\u0cde' + | '\u0ce0'..'\u0ce1' + | '\u0d05'..'\u0d0c' + | '\u0d0e'..'\u0d10' + | '\u0d12'..'\u0d28' + | '\u0d2a'..'\u0d39' + | '\u0d60'..'\u0d61' + | '\u0d85'..'\u0d96' + | '\u0d9a'..'\u0db1' + | '\u0db3'..'\u0dbb' + | '\u0dbd' + | '\u0dc0'..'\u0dc6' + | '\u0e01'..'\u0e30' + | '\u0e32'..'\u0e33' + | '\u0e3f'..'\u0e46' + | '\u0e81'..'\u0e82' + | '\u0e84' + | '\u0e87'..'\u0e88' + | '\u0e8a' + | '\u0e8d' + | '\u0e94'..'\u0e97' + | '\u0e99'..'\u0e9f' + | '\u0ea1'..'\u0ea3' + | '\u0ea5' + | '\u0ea7' + | '\u0eaa'..'\u0eab' + | '\u0ead'..'\u0eb0' + | '\u0eb2'..'\u0eb3' + | '\u0ebd' + | '\u0ec0'..'\u0ec4' + | '\u0ec6' + | '\u0edc'..'\u0edd' + | '\u0f00' + | '\u0f40'..'\u0f47' + | '\u0f49'..'\u0f6a' + | '\u0f88'..'\u0f8b' + | '\u1000'..'\u1021' + | '\u1023'..'\u1027' + | '\u1029'..'\u102a' + | '\u1050'..'\u1055' + | '\u10a0'..'\u10c5' + | '\u10d0'..'\u10f8' + | '\u1100'..'\u1159' + | '\u115f'..'\u11a2' + | '\u11a8'..'\u11f9' + | '\u1200'..'\u1206' + | '\u1208'..'\u1246' + | '\u1248' + | '\u124a'..'\u124d' + | '\u1250'..'\u1256' + | '\u1258' + | '\u125a'..'\u125d' + | '\u1260'..'\u1286' + | '\u1288' + | '\u128a'..'\u128d' + | '\u1290'..'\u12ae' + | '\u12b0' + | '\u12b2'..'\u12b5' + | '\u12b8'..'\u12be' + | '\u12c0' + | '\u12c2'..'\u12c5' + | '\u12c8'..'\u12ce' + | '\u12d0'..'\u12d6' + | '\u12d8'..'\u12ee' + | '\u12f0'..'\u130e' + | '\u1310' + | '\u1312'..'\u1315' + | '\u1318'..'\u131e' + | '\u1320'..'\u1346' + | '\u1348'..'\u135a' + | '\u13a0'..'\u13f4' + | '\u1401'..'\u166c' + | '\u166f'..'\u1676' + | '\u1681'..'\u169a' + | '\u16a0'..'\u16ea' + | '\u16ee'..'\u16f0' + | '\u1700'..'\u170c' + | '\u170e'..'\u1711' + | '\u1720'..'\u1731' + | '\u1740'..'\u1751' + | '\u1760'..'\u176c' + | '\u176e'..'\u1770' + | '\u1780'..'\u17b3' + | '\u17d7' + | '\u17db'..'\u17dc' + | '\u1820'..'\u1877' + | '\u1880'..'\u18a8' + | '\u1900'..'\u191c' + | '\u1950'..'\u196d' + | '\u1970'..'\u1974' + | '\u1d00'..'\u1d6b' + | '\u1e00'..'\u1e9b' + | '\u1ea0'..'\u1ef9' + | '\u1f00'..'\u1f15' + | '\u1f18'..'\u1f1d' + | '\u1f20'..'\u1f45' + | '\u1f48'..'\u1f4d' + | '\u1f50'..'\u1f57' + | '\u1f59' + | '\u1f5b' + | '\u1f5d' + | '\u1f5f'..'\u1f7d' + | '\u1f80'..'\u1fb4' + | '\u1fb6'..'\u1fbc' + | '\u1fbe' + | '\u1fc2'..'\u1fc4' + | '\u1fc6'..'\u1fcc' + | '\u1fd0'..'\u1fd3' + | '\u1fd6'..'\u1fdb' + | '\u1fe0'..'\u1fec' + | '\u1ff2'..'\u1ff4' + | '\u1ff6'..'\u1ffc' + | '\u203f'..'\u2040' + | '\u2054' + | '\u2071' + | '\u207f' + | '\u20a0'..'\u20b1' + | '\u2102' + | '\u2107' + | '\u210a'..'\u2113' + | '\u2115' + | '\u2119'..'\u211d' + | '\u2124' + | '\u2126' + | '\u2128' + | '\u212a'..'\u212d' + | '\u212f'..'\u2131' + | '\u2133'..'\u2139' + | '\u213d'..'\u213f' + | '\u2145'..'\u2149' + | '\u2160'..'\u2183' + | '\u3005'..'\u3007' + | '\u3021'..'\u3029' + | '\u3031'..'\u3035' + | '\u3038'..'\u303c' + | '\u3041'..'\u3096' + | '\u309d'..'\u309f' + | '\u30a1'..'\u30ff' + | '\u3105'..'\u312c' + | '\u3131'..'\u318e' + | '\u31a0'..'\u31b7' + | '\u31f0'..'\u31ff' + | '\u3400'..'\u4db5' + | '\u4e00'..'\u9fa5' + | '\ua000'..'\ua48c' + | '\uac00'..'\ud7a3' + | '\uf900'..'\ufa2d' + | '\ufa30'..'\ufa6a' + | '\ufb00'..'\ufb06' + | '\ufb13'..'\ufb17' + | '\ufb1d' + | '\ufb1f'..'\ufb28' + | '\ufb2a'..'\ufb36' + | '\ufb38'..'\ufb3c' + | '\ufb3e' + | '\ufb40'..'\ufb41' + | '\ufb43'..'\ufb44' + | '\ufb46'..'\ufbb1' + | '\ufbd3'..'\ufd3d' + | '\ufd50'..'\ufd8f' + | '\ufd92'..'\ufdc7' + | '\ufdf0'..'\ufdfc' + | '\ufe33'..'\ufe34' + | '\ufe4d'..'\ufe4f' + | '\ufe69' + | '\ufe70'..'\ufe74' + | '\ufe76'..'\ufefc' + | '\uff04' + | '\uff21'..'\uff3a' + | '\uff3f' + | '\uff41'..'\uff5a' + | '\uff65'..'\uffbe' + | '\uffc2'..'\uffc7' + | '\uffca'..'\uffcf' + | '\uffd2'..'\uffd7' + | '\uffda'..'\uffdc' + | '\uffe0'..'\uffe1' + | '\uffe5'..'\uffe6' + | ('\ud800'..'\udbff') ('\udc00'..'\udfff') + ; + +fragment +IdentifierPart + : '\u0000'..'\u0008' + | '\u000e'..'\u001b' + | '\u0024' + | '\u0030'..'\u0039' + | '\u0041'..'\u005a' + | '\u005f' + | '\u0061'..'\u007a' + | '\u007f'..'\u009f' + | '\u00a2'..'\u00a5' + | '\u00aa' + | '\u00ad' + | '\u00b5' + | '\u00ba' + | '\u00c0'..'\u00d6' + | '\u00d8'..'\u00f6' + | '\u00f8'..'\u0236' + | '\u0250'..'\u02c1' + | '\u02c6'..'\u02d1' + | '\u02e0'..'\u02e4' + | '\u02ee' + | '\u0300'..'\u0357' + | '\u035d'..'\u036f' + | '\u037a' + | '\u0386' + | '\u0388'..'\u038a' + | '\u038c' + | '\u038e'..'\u03a1' + | '\u03a3'..'\u03ce' + | '\u03d0'..'\u03f5' + | '\u03f7'..'\u03fb' + | '\u0400'..'\u0481' + | '\u0483'..'\u0486' + | '\u048a'..'\u04ce' + | '\u04d0'..'\u04f5' + | '\u04f8'..'\u04f9' + | '\u0500'..'\u050f' + | '\u0531'..'\u0556' + | '\u0559' + | '\u0561'..'\u0587' + | '\u0591'..'\u05a1' + | '\u05a3'..'\u05b9' + | '\u05bb'..'\u05bd' + | '\u05bf' + | '\u05c1'..'\u05c2' + | '\u05c4' + | '\u05d0'..'\u05ea' + | '\u05f0'..'\u05f2' + | '\u0600'..'\u0603' + | '\u0610'..'\u0615' + | '\u0621'..'\u063a' + | '\u0640'..'\u0658' + | '\u0660'..'\u0669' + | '\u066e'..'\u06d3' + | '\u06d5'..'\u06dd' + | '\u06df'..'\u06e8' + | '\u06ea'..'\u06fc' + | '\u06ff' + | '\u070f'..'\u074a' + | '\u074d'..'\u074f' + | '\u0780'..'\u07b1' + | '\u0901'..'\u0939' + | '\u093c'..'\u094d' + | '\u0950'..'\u0954' + | '\u0958'..'\u0963' + | '\u0966'..'\u096f' + | '\u0981'..'\u0983' + | '\u0985'..'\u098c' + | '\u098f'..'\u0990' + | '\u0993'..'\u09a8' + | '\u09aa'..'\u09b0' + | '\u09b2' + | '\u09b6'..'\u09b9' + | '\u09bc'..'\u09c4' + | '\u09c7'..'\u09c8' + | '\u09cb'..'\u09cd' + | '\u09d7' + | '\u09dc'..'\u09dd' + | '\u09df'..'\u09e3' + | '\u09e6'..'\u09f3' + | '\u0a01'..'\u0a03' + | '\u0a05'..'\u0a0a' + | '\u0a0f'..'\u0a10' + | '\u0a13'..'\u0a28' + | '\u0a2a'..'\u0a30' + | '\u0a32'..'\u0a33' + | '\u0a35'..'\u0a36' + | '\u0a38'..'\u0a39' + | '\u0a3c' + | '\u0a3e'..'\u0a42' + | '\u0a47'..'\u0a48' + | '\u0a4b'..'\u0a4d' + | '\u0a59'..'\u0a5c' + | '\u0a5e' + | '\u0a66'..'\u0a74' + | '\u0a81'..'\u0a83' + | '\u0a85'..'\u0a8d' + | '\u0a8f'..'\u0a91' + | '\u0a93'..'\u0aa8' + | '\u0aaa'..'\u0ab0' + | '\u0ab2'..'\u0ab3' + | '\u0ab5'..'\u0ab9' + | '\u0abc'..'\u0ac5' + | '\u0ac7'..'\u0ac9' + | '\u0acb'..'\u0acd' + | '\u0ad0' + | '\u0ae0'..'\u0ae3' + | '\u0ae6'..'\u0aef' + | '\u0af1' + | '\u0b01'..'\u0b03' + | '\u0b05'..'\u0b0c' + | '\u0b0f'..'\u0b10' + | '\u0b13'..'\u0b28' + | '\u0b2a'..'\u0b30' + | '\u0b32'..'\u0b33' + | '\u0b35'..'\u0b39' + | '\u0b3c'..'\u0b43' + | '\u0b47'..'\u0b48' + | '\u0b4b'..'\u0b4d' + | '\u0b56'..'\u0b57' + | '\u0b5c'..'\u0b5d' + | '\u0b5f'..'\u0b61' + | '\u0b66'..'\u0b6f' + | '\u0b71' + | '\u0b82'..'\u0b83' + | '\u0b85'..'\u0b8a' + | '\u0b8e'..'\u0b90' + | '\u0b92'..'\u0b95' + | '\u0b99'..'\u0b9a' + | '\u0b9c' + | '\u0b9e'..'\u0b9f' + | '\u0ba3'..'\u0ba4' + | '\u0ba8'..'\u0baa' + | '\u0bae'..'\u0bb5' + | '\u0bb7'..'\u0bb9' + | '\u0bbe'..'\u0bc2' + | '\u0bc6'..'\u0bc8' + | '\u0bca'..'\u0bcd' + | '\u0bd7' + | '\u0be7'..'\u0bef' + | '\u0bf9' + | '\u0c01'..'\u0c03' + | '\u0c05'..'\u0c0c' + | '\u0c0e'..'\u0c10' + | '\u0c12'..'\u0c28' + | '\u0c2a'..'\u0c33' + | '\u0c35'..'\u0c39' + | '\u0c3e'..'\u0c44' + | '\u0c46'..'\u0c48' + | '\u0c4a'..'\u0c4d' + | '\u0c55'..'\u0c56' + | '\u0c60'..'\u0c61' + | '\u0c66'..'\u0c6f' + | '\u0c82'..'\u0c83' + | '\u0c85'..'\u0c8c' + | '\u0c8e'..'\u0c90' + | '\u0c92'..'\u0ca8' + | '\u0caa'..'\u0cb3' + | '\u0cb5'..'\u0cb9' + | '\u0cbc'..'\u0cc4' + | '\u0cc6'..'\u0cc8' + | '\u0cca'..'\u0ccd' + | '\u0cd5'..'\u0cd6' + | '\u0cde' + | '\u0ce0'..'\u0ce1' + | '\u0ce6'..'\u0cef' + | '\u0d02'..'\u0d03' + | '\u0d05'..'\u0d0c' + | '\u0d0e'..'\u0d10' + | '\u0d12'..'\u0d28' + | '\u0d2a'..'\u0d39' + | '\u0d3e'..'\u0d43' + | '\u0d46'..'\u0d48' + | '\u0d4a'..'\u0d4d' + | '\u0d57' + | '\u0d60'..'\u0d61' + | '\u0d66'..'\u0d6f' + | '\u0d82'..'\u0d83' + | '\u0d85'..'\u0d96' + | '\u0d9a'..'\u0db1' + | '\u0db3'..'\u0dbb' + | '\u0dbd' + | '\u0dc0'..'\u0dc6' + | '\u0dca' + | '\u0dcf'..'\u0dd4' + | '\u0dd6' + | '\u0dd8'..'\u0ddf' + | '\u0df2'..'\u0df3' + | '\u0e01'..'\u0e3a' + | '\u0e3f'..'\u0e4e' + | '\u0e50'..'\u0e59' + | '\u0e81'..'\u0e82' + | '\u0e84' + | '\u0e87'..'\u0e88' + | '\u0e8a' + | '\u0e8d' + | '\u0e94'..'\u0e97' + | '\u0e99'..'\u0e9f' + | '\u0ea1'..'\u0ea3' + | '\u0ea5' + | '\u0ea7' + | '\u0eaa'..'\u0eab' + | '\u0ead'..'\u0eb9' + | '\u0ebb'..'\u0ebd' + | '\u0ec0'..'\u0ec4' + | '\u0ec6' + | '\u0ec8'..'\u0ecd' + | '\u0ed0'..'\u0ed9' + | '\u0edc'..'\u0edd' + | '\u0f00' + | '\u0f18'..'\u0f19' + | '\u0f20'..'\u0f29' + | '\u0f35' + | '\u0f37' + | '\u0f39' + | '\u0f3e'..'\u0f47' + | '\u0f49'..'\u0f6a' + | '\u0f71'..'\u0f84' + | '\u0f86'..'\u0f8b' + | '\u0f90'..'\u0f97' + | '\u0f99'..'\u0fbc' + | '\u0fc6' + | '\u1000'..'\u1021' + | '\u1023'..'\u1027' + | '\u1029'..'\u102a' + | '\u102c'..'\u1032' + | '\u1036'..'\u1039' + | '\u1040'..'\u1049' + | '\u1050'..'\u1059' + | '\u10a0'..'\u10c5' + | '\u10d0'..'\u10f8' + | '\u1100'..'\u1159' + | '\u115f'..'\u11a2' + | '\u11a8'..'\u11f9' + | '\u1200'..'\u1206' + | '\u1208'..'\u1246' + | '\u1248' + | '\u124a'..'\u124d' + | '\u1250'..'\u1256' + | '\u1258' + | '\u125a'..'\u125d' + | '\u1260'..'\u1286' + | '\u1288' + | '\u128a'..'\u128d' + | '\u1290'..'\u12ae' + | '\u12b0' + | '\u12b2'..'\u12b5' + | '\u12b8'..'\u12be' + | '\u12c0' + | '\u12c2'..'\u12c5' + | '\u12c8'..'\u12ce' + | '\u12d0'..'\u12d6' + | '\u12d8'..'\u12ee' + | '\u12f0'..'\u130e' + | '\u1310' + | '\u1312'..'\u1315' + | '\u1318'..'\u131e' + | '\u1320'..'\u1346' + | '\u1348'..'\u135a' + | '\u1369'..'\u1371' + | '\u13a0'..'\u13f4' + | '\u1401'..'\u166c' + | '\u166f'..'\u1676' + | '\u1681'..'\u169a' + | '\u16a0'..'\u16ea' + | '\u16ee'..'\u16f0' + | '\u1700'..'\u170c' + | '\u170e'..'\u1714' + | '\u1720'..'\u1734' + | '\u1740'..'\u1753' + | '\u1760'..'\u176c' + | '\u176e'..'\u1770' + | '\u1772'..'\u1773' + | '\u1780'..'\u17d3' + | '\u17d7' + | '\u17db'..'\u17dd' + | '\u17e0'..'\u17e9' + | '\u180b'..'\u180d' + | '\u1810'..'\u1819' + | '\u1820'..'\u1877' + | '\u1880'..'\u18a9' + | '\u1900'..'\u191c' + | '\u1920'..'\u192b' + | '\u1930'..'\u193b' + | '\u1946'..'\u196d' + | '\u1970'..'\u1974' + | '\u1d00'..'\u1d6b' + | '\u1e00'..'\u1e9b' + | '\u1ea0'..'\u1ef9' + | '\u1f00'..'\u1f15' + | '\u1f18'..'\u1f1d' + | '\u1f20'..'\u1f45' + | '\u1f48'..'\u1f4d' + | '\u1f50'..'\u1f57' + | '\u1f59' + | '\u1f5b' + | '\u1f5d' + | '\u1f5f'..'\u1f7d' + | '\u1f80'..'\u1fb4' + | '\u1fb6'..'\u1fbc' + | '\u1fbe' + | '\u1fc2'..'\u1fc4' + | '\u1fc6'..'\u1fcc' + | '\u1fd0'..'\u1fd3' + | '\u1fd6'..'\u1fdb' + | '\u1fe0'..'\u1fec' + | '\u1ff2'..'\u1ff4' + | '\u1ff6'..'\u1ffc' + | '\u200c'..'\u200f' + | '\u202a'..'\u202e' + | '\u203f'..'\u2040' + | '\u2054' + | '\u2060'..'\u2063' + | '\u206a'..'\u206f' + | '\u2071' + | '\u207f' + | '\u20a0'..'\u20b1' + | '\u20d0'..'\u20dc' + | '\u20e1' + | '\u20e5'..'\u20ea' + | '\u2102' + | '\u2107' + | '\u210a'..'\u2113' + | '\u2115' + | '\u2119'..'\u211d' + | '\u2124' + | '\u2126' + | '\u2128' + | '\u212a'..'\u212d' + | '\u212f'..'\u2131' + | '\u2133'..'\u2139' + | '\u213d'..'\u213f' + | '\u2145'..'\u2149' + | '\u2160'..'\u2183' + | '\u3005'..'\u3007' + | '\u3021'..'\u302f' + | '\u3031'..'\u3035' + | '\u3038'..'\u303c' + | '\u3041'..'\u3096' + | '\u3099'..'\u309a' + | '\u309d'..'\u309f' + | '\u30a1'..'\u30ff' + | '\u3105'..'\u312c' + | '\u3131'..'\u318e' + | '\u31a0'..'\u31b7' + | '\u31f0'..'\u31ff' + | '\u3400'..'\u4db5' + | '\u4e00'..'\u9fa5' + | '\ua000'..'\ua48c' + | '\uac00'..'\ud7a3' + | '\uf900'..'\ufa2d' + | '\ufa30'..'\ufa6a' + | '\ufb00'..'\ufb06' + | '\ufb13'..'\ufb17' + | '\ufb1d'..'\ufb28' + | '\ufb2a'..'\ufb36' + | '\ufb38'..'\ufb3c' + | '\ufb3e' + | '\ufb40'..'\ufb41' + | '\ufb43'..'\ufb44' + | '\ufb46'..'\ufbb1' + | '\ufbd3'..'\ufd3d' + | '\ufd50'..'\ufd8f' + | '\ufd92'..'\ufdc7' + | '\ufdf0'..'\ufdfc' + | '\ufe00'..'\ufe0f' + | '\ufe20'..'\ufe23' + | '\ufe33'..'\ufe34' + | '\ufe4d'..'\ufe4f' + | '\ufe69' + | '\ufe70'..'\ufe74' + | '\ufe76'..'\ufefc' + | '\ufeff' + | '\uff04' + | '\uff10'..'\uff19' + | '\uff21'..'\uff3a' + | '\uff3f' + | '\uff41'..'\uff5a' + | '\uff65'..'\uffbe' + | '\uffc2'..'\uffc7' + | '\uffca'..'\uffcf' + | '\uffd2'..'\uffd7' + | '\uffda'..'\uffdc' + | '\uffe0'..'\uffe1' + | '\uffe5'..'\uffe6' + | '\ufff9'..'\ufffb' + | ('\ud800'..'\udbff') ('\udc00'..'\udfff') + ; diff --git a/tool/playground/YangJavaLexer.java b/tool/playground/YangJavaLexer.java new file mode 100644 index 000000000..1d951e147 --- /dev/null +++ b/tool/playground/YangJavaLexer.java @@ -0,0 +1,1414 @@ +// $ANTLR ANTLRVersion> YangJavaLexer.java generatedTimestamp> +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.LexerSharedState; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + +public class YangJavaLexer extends Lexer { + public static final int + EOR=1, LONGLITERAL=4, INTLITERAL=5, FLOATLITERAL=6, DOUBLELITERAL=7, + CHARLITERAL=8, STRINGLITERAL=9, WS=10, COMMENT=11, LINE_COMMENT=12, + ABSTRACT=13, ASSERT=14, BOOLEAN=15, BREAK=16, BYTE=17, CASE=18, + CATCH=19, CHAR=20, CLASS=21, CONST=22, CONTINUE=23, DEFAULT=24, + DO=25, DOUBLE=26, ELSE=27, ENUM=28, EXTENDS=29, FINAL=30, FINALLY=31, + FLOAT=32, FOR=33, GOTO=34, IF=35, IMPLEMENTS=36, IMPORT=37, INSTANCEOF=38, + INT=39, INTERFACE=40, LONG=41, NATIVE=42, NEW=43, PACKAGE=44, PRIVATE=45, + PROTECTED=46, PUBLIC=47, RETURN=48, SHORT=49, STATIC=50, STRICTFP=51, + SUPER=52, SWITCH=53, SYNCHRONIZED=54, THIS=55, THROW=56, THROWS=57, + TRANSIENT=58, TRY=59, VOID=60, VOLATILE=61, WHILE=62, TRUE=63, FALSE=64, + NULL=65, LPAREN=66, RPAREN=67, LBRACE=68, RBRACE=69, LBRACKET=70, + RBRACKET=71, SEMI=72, COMMA=73, DOT=74, ELLIPSIS=75, EQ=76, BANG=77, + TILDE=78, QUES=79, COLON=80, EQEQ=81, AMPAMP=82, BARBAR=83, PLUSPLUS=84, + SUBSUB=85, PLUS=86, SUB=87, STAR=88, SLASH=89, AMP=90, BAR=91, CARET=92, + PERCENT=93, PLUSEQ=94, SUBEQ=95, STAREQ=96, SLASHEQ=97, AMPEQ=98, + BAREQ=99, CARETEQ=100, PERCENTEQ=101, MONKEYS_AT=102, BANGEQ=103, + GT=104, LT=105, IDENTIFIER=106; + public static final int DEFAULT_MODE = 0; + + public static final String[] tokenNames = { + "", "", "", + "EOR", "LONGLITERAL", "INTLITERAL", "FLOATLITERAL", "DOUBLELITERAL", + "CHARLITERAL", "STRINGLITERAL", "WS", "COMMENT", "LINE_COMMENT", + "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'", + "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'", + "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", + "'finally'", "'float'", "'for'", "'goto'", "'if'", "'implements'", + "'import'", "'instanceof'", "'int'", "'interface'", "'long'", "'native'", + "'new'", "'package'", "'private'", "'protected'", "'public'", "'return'", + "'short'", "'static'", "'strictfp'", "'super'", "'switch'", "'synchronized'", + "'this'", "'throw'", "'throws'", "'transient'", "'try'", "'void'", + "'volatile'", "'while'", "'true'", "'false'", "'null'", "'('", "')'", + "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'...'", "'='", + "'!'", "'~'", "'?'", "':'", "'=='", "'&&'", "'||'", "'++'", "'--'", + "'+'", "'-'", "'*'", "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", + "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'@'", "'!='", + "'<'", "'>'", "IDENTIFIER" + }; + public static final String[] ruleNames = { + "", + "LONGLITERAL", "INTLITERAL", "IntegerNumber", "HexPrefix", "HexDigit", + "LongSuffix", "NonIntegerNumber", "Exponent", "FloatSuffix", "DoubleSuffix", + "FLOATLITERAL", "DOUBLELITERAL", "CHARLITERAL", "STRINGLITERAL", + "EscapeSequence", "OctalEscape", "UnicodeEscape", "WS", "COMMENT", + "LINE_COMMENT", "ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", + "CASE", "CATCH", "CHAR", "CLASS", "CONST", "CONTINUE", "DEFAULT", + "DO", "DOUBLE", "ELSE", "ENUM", "EXTENDS", "FINAL", "FINALLY", "FLOAT", + "FOR", "GOTO", "IF", "IMPLEMENTS", "IMPORT", "INSTANCEOF", "INT", + "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE", "PRIVATE", "PROTECTED", + "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP", "SUPER", "SWITCH", + "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT", "TRY", "VOID", + "VOLATILE", "WHILE", "TRUE", "FALSE", "NULL", "LPAREN", "RPAREN", + "LBRACE", "RBRACE", "LBRACKET", "RBRACKET", "SEMI", "COMMA", "DOT", + "ELLIPSIS", "EQ", "BANG", "TILDE", "QUES", "COLON", "EQEQ", "AMPAMP", + "BARBAR", "PLUSPLUS", "SUBSUB", "PLUS", "SUB", "STAR", "SLASH", + "AMP", "BAR", "CARET", "PERCENT", "PLUSEQ", "SUBEQ", "STAREQ", "SLASHEQ", + "AMPEQ", "BAREQ", "CARETEQ", "PERCENTEQ", "MONKEYS_AT", "BANGEQ", + "GT", "LT", "IDENTIFIER", "SurrogateIdentifer", "IdentifierStart", + "IdentifierPart" + }; + + + public YangJavaLexer(CharStream input) { + this(input, new LexerSharedState()); + } + public YangJavaLexer(CharStream input, LexerSharedState state) { + super(input,state); + _interp = new LexerInterpreter(this,_ATN); + } + + public String getGrammarFileName() { return "YangJavaLexer.java"; } + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + + public void action(int ruleIndex, int actionIndex) { + switch ( actionIndex ) { + case 1 : + skip(); + break; + case 2 : skip(); break; + case 3 : skip(); break; + case 4 : skip(); break; + } + } + + public static final String _serializedATN = + "\030\155\u094d\06\00\02\01\07\01\02\02\07\02\02\03\07\03\02\04\07\04"+ + "\02\05\07\05\02\06\07\06\02\07\07\07\02\010\07\010\02\011\07\011\02"+ + "\012\07\012\02\013\07\013\02\014\07\014\02\015\07\015\02\016\07\016"+ + "\02\017\07\017\02\020\07\020\02\021\07\021\02\022\07\022\02\023\07"+ + "\023\02\024\07\024\02\025\07\025\02\026\07\026\02\027\07\027\02\030"+ + "\07\030\02\031\07\031\02\032\07\032\02\033\07\033\02\034\07\034\02"+ + "\035\07\035\02\036\07\036\02\037\07\037\02\040\07\040\02\041\07\041"+ + "\02\042\07\042\02\043\07\043\02\044\07\044\02\045\07\045\02\046\07"+ + "\046\02\047\07\047\02\050\07\050\02\051\07\051\02\052\07\052\02\053"+ + "\07\053\02\054\07\054\02\055\07\055\02\056\07\056\02\057\07\057\02"+ + "\060\07\060\02\061\07\061\02\062\07\062\02\063\07\063\02\064\07\064"+ + "\02\065\07\065\02\066\07\066\02\067\07\067\02\070\07\070\02\071\07"+ + "\071\02\072\07\072\02\073\07\073\02\074\07\074\02\075\07\075\02\076"+ + "\07\076\02\077\07\077\02\100\07\100\02\101\07\101\02\102\07\102\02"+ + "\103\07\103\02\104\07\104\02\105\07\105\02\106\07\106\02\107\07\107"+ + "\02\110\07\110\02\111\07\111\02\112\07\112\02\113\07\113\02\114\07"+ + "\114\02\115\07\115\02\116\07\116\02\117\07\117\02\120\07\120\02\121"+ + "\07\121\02\122\07\122\02\123\07\123\02\124\07\124\02\125\07\125\02"+ + "\126\07\126\02\127\07\127\02\130\07\130\02\131\07\131\02\132\07\132"+ + "\02\133\07\133\02\134\07\134\02\135\07\135\02\136\07\136\02\137\07"+ + "\137\02\140\07\140\02\141\07\141\02\142\07\142\02\143\07\143\02\144"+ + "\07\144\02\145\07\145\02\146\07\146\02\147\07\147\02\150\07\150\02"+ + "\151\07\151\02\152\07\152\02\153\07\153\02\154\07\154\02\155\07\155"+ + "\02\156\07\156\02\157\07\157\02\160\07\160\02\161\07\161\02\162\07"+ + "\162\02\163\07\163\02\164\07\164\02\165\07\165\01\01\01\01\01\01\01"+ + "\01\01\02\01\02\01\03\01\03\01\03\01\03\01\03\01\03\05\03\010\03\011"+ + "\03\01\03\01\03\01\03\01\03\01\03\04\03\010\03\012\03\01\03\01\03"+ + "\01\03\01\03\01\03\04\03\010\03\012\03\01\03\03\03\010\03\01\04\01"+ + "\04\01\04\01\04\01\04\01\04\03\04\010\04\01\05\01\05\01\05\01\05\01"+ + "\05\01\05\03\05\010\05\01\06\01\06\01\06\01\06\03\06\010\06\01\07"+ + "\01\07\04\07\010\07\012\07\01\07\01\07\01\07\01\07\01\07\05\07\010"+ + "\07\011\07\01\07\01\07\01\07\03\07\010\07\01\07\01\07\01\07\01\07"+ + "\04\07\010\07\012\07\01\07\01\07\01\07\03\07\010\07\01\07\01\07\04"+ + "\07\010\07\012\07\01\07\01\07\01\07\01\07\01\07\04\07\010\07\012\07"+ + "\01\07\01\07\01\07\01\07\01\07\05\07\010\07\011\07\01\07\01\07\01"+ + "\07\01\07\01\07\05\07\010\07\011\07\01\07\03\07\010\07\01\07\01\07"+ + "\01\07\01\07\03\07\010\07\01\07\01\07\01\07\01\07\03\07\010\07\01"+ + "\07\01\07\04\07\010\07\012\07\01\07\03\07\010\07\01\010\01\010\01"+ + "\010\01\010\03\010\010\010\01\010\01\010\01\010\01\010\03\010\010"+ + "\010\01\010\01\010\04\010\010\010\012\010\01\010\01\011\01\011\01"+ + "\011\01\011\03\011\010\011\01\012\01\012\01\012\01\012\03\012\010"+ + "\012\01\013\01\013\01\013\01\013\01\014\01\014\01\014\01\014\03\014"+ + "\010\014\01\015\01\015\01\015\01\015\01\015\01\015\03\015\010\015"+ + "\01\015\01\015\01\016\01\016\01\016\01\016\01\016\01\016\05\016\010"+ + "\016\011\016\01\016\01\016\01\016\01\017\01\017\01\017\01\017\01\017"+ + "\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01\017\01"+ + "\017\01\017\01\017\01\017\03\017\010\017\01\017\01\017\01\017\01\017"+ + "\03\017\010\017\01\020\01\020\01\020\01\020\01\020\01\020\01\020\01"+ + "\020\01\020\01\020\01\020\01\020\01\020\01\020\01\020\01\020\01\020"+ + "\01\020\03\020\010\020\01\021\01\021\01\021\01\021\01\021\01\021\01"+ + "\021\01\021\01\021\01\021\01\021\01\021\01\022\01\022\01\022\01\022"+ + "\01\022\01\022\01\022\01\022\01\022\01\022\03\022\010\022\01\022\01"+ + "\023\01\023\01\023\01\023\01\023\05\023\010\023\011\023\01\023\01"+ + "\023\01\023\01\023\01\023\01\024\01\024\01\024\01\024\01\024\05\024"+ + "\010\024\011\024\01\024\01\024\01\024\01\024\01\024\01\024\01\024"+ + "\01\024\03\024\010\024\01\024\01\024\01\024\01\024\01\024\01\024\05"+ + "\024\010\024\011\024\01\024\01\024\03\024\010\024\01\025\01\025\01"+ + "\025\01\025\01\025\01\025\01\025\01\025\01\025\01\026\01\026\01\026"+ + "\01\026\01\026\01\026\01\026\01\027\01\027\01\027\01\027\01\027\01"+ + "\027\01\027\01\027\01\030\01\030\01\030\01\030\01\030\01\030\01\031"+ + "\01\031\01\031\01\031\01\031\01\032\01\032\01\032\01\032\01\032\01"+ + "\033\01\033\01\033\01\033\01\033\01\033\01\034\01\034\01\034\01\034"+ + "\01\034\01\035\01\035\01\035\01\035\01\035\01\035\01\036\01\036\01"+ + "\036\01\036\01\036\01\036\01\037\01\037\01\037\01\037\01\037\01\037"+ + "\01\037\01\037\01\037\01\040\01\040\01\040\01\040\01\040\01\040\01"+ + "\040\01\040\01\041\01\041\01\041\01\042\01\042\01\042\01\042\01\042"+ + "\01\042\01\042\01\043\01\043\01\043\01\043\01\043\01\044\01\044\01"+ + "\044\01\044\01\044\01\045\01\045\01\045\01\045\01\045\01\045\01\045"+ + "\01\045\01\046\01\046\01\046\01\046\01\046\01\046\01\047\01\047\01"+ + "\047\01\047\01\047\01\047\01\047\01\047\01\050\01\050\01\050\01\050"+ + "\01\050\01\050\01\051\01\051\01\051\01\051\01\052\01\052\01\052\01"+ + "\052\01\052\01\053\01\053\01\053\01\054\01\054\01\054\01\054\01\054"+ + "\01\054\01\054\01\054\01\054\01\054\01\054\01\055\01\055\01\055\01"+ + "\055\01\055\01\055\01\055\01\056\01\056\01\056\01\056\01\056\01\056"+ + "\01\056\01\056\01\056\01\056\01\056\01\057\01\057\01\057\01\057\01"+ + "\060\01\060\01\060\01\060\01\060\01\060\01\060\01\060\01\060\01\060"+ + "\01\061\01\061\01\061\01\061\01\061\01\062\01\062\01\062\01\062\01"+ + "\062\01\062\01\062\01\063\01\063\01\063\01\063\01\064\01\064\01\064"+ + "\01\064\01\064\01\064\01\064\01\064\01\065\01\065\01\065\01\065\01"+ + "\065\01\065\01\065\01\065\01\066\01\066\01\066\01\066\01\066\01\066"+ + "\01\066\01\066\01\066\01\066\01\067\01\067\01\067\01\067\01\067\01"+ + "\067\01\067\01\070\01\070\01\070\01\070\01\070\01\070\01\070\01\071"+ + "\01\071\01\071\01\071\01\071\01\071\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\01\073\01\073\01\073\01\073\01\073\01\073\01\073"+ + "\01\073\01\073\01\074\01\074\01\074\01\074\01\074\01\074\01\075\01"+ + "\075\01\075\01\075\01\075\01\075\01\075\01\076\01\076\01\076\01\076"+ + "\01\076\01\076\01\076\01\076\01\076\01\076\01\076\01\076\01\076\01"+ + "\077\01\077\01\077\01\077\01\077\01\100\01\100\01\100\01\100\01\100"+ + "\01\100\01\101\01\101\01\101\01\101\01\101\01\101\01\101\01\102\01"+ + "\102\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01\103"+ + "\01\103\01\103\01\103\01\104\01\104\01\104\01\104\01\104\01\105\01"+ + "\105\01\105\01\105\01\105\01\105\01\105\01\105\01\105\01\106\01\106"+ + "\01\106\01\106\01\106\01\106\01\107\01\107\01\107\01\107\01\107\01"+ + "\110\01\110\01\110\01\110\01\110\01\110\01\111\01\111\01\111\01\111"+ + "\01\111\01\112\01\112\01\113\01\113\01\114\01\114\01\115\01\115\01"+ + "\116\01\116\01\117\01\117\01\120\01\120\01\121\01\121\01\122\01\122"+ + "\01\123\01\123\01\123\01\123\01\124\01\124\01\125\01\125\01\126\01"+ + "\126\01\127\01\127\01\130\01\130\01\131\01\131\01\131\01\132\01\132"+ + "\01\132\01\133\01\133\01\133\01\134\01\134\01\134\01\135\01\135\01"+ + "\135\01\136\01\136\01\137\01\137\01\140\01\140\01\141\01\141\01\142"+ + "\01\142\01\143\01\143\01\144\01\144\01\145\01\145\01\146\01\146\01"+ + "\146\01\147\01\147\01\147\01\150\01\150\01\150\01\151\01\151\01\151"+ + "\01\152\01\152\01\152\01\153\01\153\01\153\01\154\01\154\01\154\01"+ + "\155\01\155\01\155\01\156\01\156\01\157\01\157\01\157\01\160\01\160"+ + "\01\161\01\161\01\162\01\162\01\162\01\162\05\162\010\162\011\162"+ + "\01\162\01\163\01\163\01\163\01\163\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01"+ + "\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164\01\164"+ + "\01\164\01\164\01\164\01\164\01\164\01\164\03\164\010\164\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01"+ + "\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165\01\165"+ + "\01\165\01\165\01\165\03\165\010\165\165\01\04\00\03\05\00\05\uffff"+ + "\00\07\uffff\00\011\uffff\00\013\uffff\00\015\uffff\00\017\uffff\00"+ + "\021\uffff\00\023\uffff\00\025\06\00\027\07\00\031\010\00\033\011"+ + "\00\035\uffff\00\037\uffff\00\041\uffff\00\043\012\01\045\013\02\047"+ + "\014\04\051\015\00\053\016\00\055\017\00\057\020\00\061\021\00\063"+ + "\022\00\065\023\00\067\024\00\071\025\00\073\026\00\075\027\00\077"+ + "\030\00\101\031\00\103\032\00\105\033\00\107\034\00\111\035\00\113"+ + "\036\00\115\037\00\117\040\00\121\041\00\123\042\00\125\043\00\127"+ + "\044\00\131\045\00\133\046\00\135\047\00\137\050\00\141\051\00\143"+ + "\052\00\145\053\00\147\054\00\151\055\00\153\056\00\155\057\00\157"+ + "\060\00\161\061\00\163\062\00\165\063\00\167\064\00\171\065\00\173"+ + "\066\00\175\067\00\177\070\00\u0081\071\00\u0083\072\00\u0085\073"+ + "\00\u0087\074\00\u0089\075\00\u008b\076\00\u008d\077\00\u008f\100"+ + "\00\u0091\101\00\u0093\102\00\u0095\103\00\u0097\104\00\u0099\105"+ + "\00\u009b\106\00\u009d\107\00\u009f\110\00\u00a1\111\00\u00a3\112"+ + "\00\u00a5\113\00\u00a7\114\00\u00a9\115\00\u00ab\116\00\u00ad\117"+ + "\00\u00af\120\00\u00b1\121\00\u00b3\122\00\u00b5\123\00\u00b7\124"+ + "\00\u00b9\125\00\u00bb\126\00\u00bd\127\00\u00bf\130\00\u00c1\131"+ + "\00\u00c3\132\00\u00c5\133\00\u00c7\134\00\u00c9\135\00\u00cb\136"+ + "\00\u00cd\137\00\u00cf\140\00\u00d1\141\00\u00d3\142\00\u00d5\143"+ + "\00\u00d7\144\00\u00d9\145\00\u00db\146\00\u00dd\147\00\u00df\150"+ + "\00\u00e1\151\00\u00e3\152\00\u00e5\uffff\00\u00e7\uffff\00\u00e9"+ + "\uffff\00\01\00\03\04\012\012\015\015\047\047\134\134\04\012\012\015"+ + "\015\042\042\134\134\02\012\012\015\015\u0c20\00\01\01\00\00\00\03"+ + "\01\00\00\00\025\01\00\00\00\027\01\00\00\00\031\01\00\00\00\033\01"+ + "\00\00\00\043\01\00\00\00\045\01\00\00\00\047\01\00\00\00\051\01\00"+ + "\00\00\053\01\00\00\00\055\01\00\00\00\057\01\00\00\00\061\01\00\00"+ + "\00\063\01\00\00\00\065\01\00\00\00\067\01\00\00\00\071\01\00\00\00"+ + "\073\01\00\00\00\075\01\00\00\00\077\01\00\00\00\101\01\00\00\00\103"+ + "\01\00\00\00\105\01\00\00\00\107\01\00\00\00\111\01\00\00\00\113\01"+ + "\00\00\00\115\01\00\00\00\117\01\00\00\00\121\01\00\00\00\123\01\00"+ + "\00\00\125\01\00\00\00\127\01\00\00\00\131\01\00\00\00\133\01\00\00"+ + "\00\135\01\00\00\00\137\01\00\00\00\141\01\00\00\00\143\01\00\00\00"+ + "\145\01\00\00\00\147\01\00\00\00\151\01\00\00\00\153\01\00\00\00\155"+ + "\01\00\00\00\157\01\00\00\00\161\01\00\00\00\163\01\00\00\00\165\01"+ + "\00\00\00\167\01\00\00\00\171\01\00\00\00\173\01\00\00\00\175\01\00"+ + "\00\00\177\01\00\00\00\u0081\01\00\00\00\u0083\01\00\00\00\u0085\01"+ + "\00\00\00\u0087\01\00\00\00\u0089\01\00\00\00\u008b\01\00\00\00\u008d"+ + "\01\00\00\00\u008f\01\00\00\00\u0091\01\00\00\00\u0093\01\00\00\00"+ + "\u0095\01\00\00\00\u0097\01\00\00\00\u0099\01\00\00\00\u009b\01\00"+ + "\00\00\u009d\01\00\00\00\u009f\01\00\00\00\u00a1\01\00\00\00\u00a3"+ + "\01\00\00\00\u00a5\01\00\00\00\u00a7\01\00\00\00\u00a9\01\00\00\00"+ + "\u00ab\01\00\00\00\u00ad\01\00\00\00\u00af\01\00\00\00\u00b1\01\00"+ + "\00\00\u00b3\01\00\00\00\u00b5\01\00\00\00\u00b7\01\00\00\00\u00b9"+ + "\01\00\00\00\u00bb\01\00\00\00\u00bd\01\00\00\00\u00bf\01\00\00\00"+ + "\u00c1\01\00\00\00\u00c3\01\00\00\00\u00c5\01\00\00\00\u00c7\01\00"+ + "\00\00\u00c9\01\00\00\00\u00cb\01\00\00\00\u00cd\01\00\00\00\u00cf"+ + "\01\00\00\00\u00d1\01\00\00\00\u00d3\01\00\00\00\u00d5\01\00\00\00"+ + "\u00d7\01\00\00\00\u00d9\01\00\00\00\u00db\01\00\00\00\u00dd\01\00"+ + "\00\00\u00df\01\00\00\00\u00e1\01\00\00\00\u00e3\01\00\00\01\u00eb"+ + "\01\00\00\03\u00ef\01\00\00\05\u010b\01\00\00\07\u0113\01\00\00\011"+ + "\u011b\01\00\00\013\u0121\01\00\00\015\u0173\01\00\00\017\u0179\01"+ + "\00\00\021\u018b\01\00\00\023\u0191\01\00\00\025\u0193\01\00\00\027"+ + "\u0197\01\00\00\031\u019d\01\00\00\033\u01a7\01\00\00\035\u01cb\01"+ + "\00\00\037\u01df\01\00\00\041\u01e1\01\00\00\043\u01f7\01\00\00\045"+ + "\u01fa\01\00\00\047\u0224\01\00\00\051\u0226\01\00\00\053\u022f\01"+ + "\00\00\055\u0236\01\00\00\057\u023e\01\00\00\061\u0244\01\00\00\063"+ + "\u0249\01\00\00\065\u024e\01\00\00\067\u0254\01\00\00\071\u0259\01"+ + "\00\00\073\u025f\01\00\00\075\u0265\01\00\00\077\u026e\01\00\00\101"+ + "\u0276\01\00\00\103\u0279\01\00\00\105\u0280\01\00\00\107\u0285\01"+ + "\00\00\111\u028a\01\00\00\113\u0292\01\00\00\115\u0298\01\00\00\117"+ + "\u02a0\01\00\00\121\u02a6\01\00\00\123\u02aa\01\00\00\125\u02af\01"+ + "\00\00\127\u02b2\01\00\00\131\u02bd\01\00\00\133\u02c4\01\00\00\135"+ + "\u02cf\01\00\00\137\u02d3\01\00\00\141\u02dd\01\00\00\143\u02e2\01"+ + "\00\00\145\u02e9\01\00\00\147\u02ed\01\00\00\151\u02f5\01\00\00\153"+ + "\u02fd\01\00\00\155\u0307\01\00\00\157\u030e\01\00\00\161\u0315\01"+ + "\00\00\163\u031b\01\00\00\165\u0322\01\00\00\167\u032b\01\00\00\171"+ + "\u0331\01\00\00\173\u0338\01\00\00\175\u0345\01\00\00\177\u034a\01"+ + "\00\00\u0081\u0350\01\00\00\u0083\u0357\01\00\00\u0085\u0361\01\00"+ + "\00\u0087\u0365\01\00\00\u0089\u036a\01\00\00\u008b\u0373\01\00\00"+ + "\u008d\u0379\01\00\00\u008f\u037e\01\00\00\u0091\u0384\01\00\00\u0093"+ + "\u0389\01\00\00\u0095\u038b\01\00\00\u0097\u038d\01\00\00\u0099\u038f"+ + "\01\00\00\u009b\u0391\01\00\00\u009d\u0393\01\00\00\u009f\u0395\01"+ + "\00\00\u00a1\u0397\01\00\00\u00a3\u0399\01\00\00\u00a5\u039b\01\00"+ + "\00\u00a7\u039f\01\00\00\u00a9\u03a1\01\00\00\u00ab\u03a3\01\00\00"+ + "\u00ad\u03a5\01\00\00\u00af\u03a7\01\00\00\u00b1\u03a9\01\00\00\u00b3"+ + "\u03ac\01\00\00\u00b5\u03af\01\00\00\u00b7\u03b2\01\00\00\u00b9\u03b5"+ + "\01\00\00\u00bb\u03b8\01\00\00\u00bd\u03ba\01\00\00\u00bf\u03bc\01"+ + "\00\00\u00c1\u03be\01\00\00\u00c3\u03c0\01\00\00\u00c5\u03c2\01\00"+ + "\00\u00c7\u03c4\01\00\00\u00c9\u03c6\01\00\00\u00cb\u03c8\01\00\00"+ + "\u00cd\u03cb\01\00\00\u00cf\u03ce\01\00\00\u00d1\u03d1\01\00\00\u00d3"+ + "\u03d4\01\00\00\u00d5\u03d7\01\00\00\u00d7\u03da\01\00\00\u00d9\u03dd"+ + "\01\00\00\u00db\u03e0\01\00\00\u00dd\u03e2\01\00\00\u00df\u03e5\01"+ + "\00\00\u00e1\u03e7\01\00\00\u00e3\u03e9\01\00\00\u00e5\u03f1\01\00"+ + "\00\u00e7\u0643\01\00\00\u00e9\u094b\01\00\00\u00eb\u00ec\03\05\03"+ + "\u00ec\u00ed\01\00\00\u00ed\u00ee\03\013\06\u00ee\02\01\00\00\u00ef"+ + "\u00f0\03\05\03\u00f0\04\01\00\00\u00f1\u00f2\05\060\00\u00f2\u010c"+ + "\01\00\00\u00f3\u00f4\02\061\071\u00f4\u00f7\01\00\00\u00f5\u00f6"+ + "\02\060\071\u00f6\u00f8\01\00\00\u00f7\u00f5\01\00\00\u00f7\u00fa"+ + "\01\00\00\u00f8\u00f9\01\00\00\u00f9\u00f7\01\00\00\u00fa\u010c\01"+ + "\00\00\u00fb\u00fc\05\060\00\u00fc\u00ff\01\00\00\u00fd\u00fe\02\060"+ + "\067\u00fe\u0100\01\00\00\u00ff\u00fd\01\00\00\u0100\u0101\01\00\00"+ + "\u0101\u00fd\01\00\00\u0101\u0102\01\00\00\u0102\u010c\01\00\00\u0103"+ + "\u0104\03\07\04\u0104\u0107\01\00\00\u0105\u0106\03\011\05\u0106\u0108"+ + "\01\00\00\u0107\u0105\01\00\00\u0108\u0109\01\00\00\u0109\u0105\01"+ + "\00\00\u0109\u010a\01\00\00\u010a\u010c\01\00\00\u010b\u00f1\01\00"+ + "\00\u010b\u00f3\01\00\00\u010b\u00fb\01\00\00\u010b\u0103\01\00\00"+ + "\u010c\06\01\00\00\u010d\u010e\05\060\00\u010e\u010f\05\170\00\u010f"+ + "\u0114\01\00\00\u0110\u0111\05\060\00\u0111\u0112\05\130\00\u0112"+ + "\u0114\01\00\00\u0113\u010d\01\00\00\u0113\u0110\01\00\00\u0114\010"+ + "\01\00\00\u0115\u0116\02\060\071\u0116\u011c\01\00\00\u0117\u0118"+ + "\02\141\146\u0118\u011c\01\00\00\u0119\u011a\02\101\106\u011a\u011c"+ + "\01\00\00\u011b\u0115\01\00\00\u011b\u0117\01\00\00\u011b\u0119\01"+ + "\00\00\u011c\012\01\00\00\u011d\u011e\05\154\00\u011e\u0122\01\00"+ + "\00\u011f\u0120\05\114\00\u0120\u0122\01\00\00\u0121\u011d\01\00\00"+ + "\u0121\u011f\01\00\00\u0122\014\01\00\00\u0123\u0124\02\060\071\u0124"+ + "\u0126\01\00\00\u0125\u0123\01\00\00\u0126\u0127\01\00\00\u0127\u0123"+ + "\01\00\00\u0127\u0128\01\00\00\u0128\u0129\01\00\00\u0129\u012a\05"+ + "\056\00\u012a\u012d\01\00\00\u012b\u012c\02\060\071\u012c\u012e\01"+ + "\00\00\u012d\u012b\01\00\00\u012d\u0130\01\00\00\u012e\u012f\01\00"+ + "\00\u012f\u012d\01\00\00\u0130\u0133\01\00\00\u0131\u0132\03\017\010"+ + "\u0132\u0134\01\00\00\u0133\u0131\01\00\00\u0133\u0134\01\00\00\u0134"+ + "\u0174\01\00\00\u0135\u0136\05\056\00\u0136\u0139\01\00\00\u0137\u0138"+ + "\02\060\071\u0138\u013a\01\00\00\u0139\u0137\01\00\00\u013a\u013b"+ + "\01\00\00\u013b\u0137\01\00\00\u013b\u013c\01\00\00\u013c\u013f\01"+ + "\00\00\u013d\u013e\03\017\010\u013e\u0140\01\00\00\u013f\u013d\01"+ + "\00\00\u013f\u0140\01\00\00\u0140\u0174\01\00\00\u0141\u0142\02\060"+ + "\071\u0142\u0144\01\00\00\u0143\u0141\01\00\00\u0144\u0145\01\00\00"+ + "\u0145\u0141\01\00\00\u0145\u0146\01\00\00\u0146\u0147\01\00\00\u0147"+ + "\u0148\03\017\010\u0148\u0174\01\00\00\u0149\u014a\02\060\071\u014a"+ + "\u014c\01\00\00\u014b\u0149\01\00\00\u014c\u014d\01\00\00\u014d\u0149"+ + "\01\00\00\u014d\u014e\01\00\00\u014e\u0174\01\00\00\u014f\u0150\03"+ + "\07\04\u0150\u0153\01\00\00\u0151\u0152\03\011\05\u0152\u0154\01\00"+ + "\00\u0153\u0151\01\00\00\u0153\u0156\01\00\00\u0154\u0155\01\00\00"+ + "\u0155\u0153\01\00\00\u0156\u015f\01\00\00\u0157\u0158\05\056\00\u0158"+ + "\u015b\01\00\00\u0159\u015a\03\011\05\u015a\u015c\01\00\00\u015b\u0159"+ + "\01\00\00\u015b\u015e\01\00\00\u015c\u015d\01\00\00\u015d\u015b\01"+ + "\00\00\u015e\u0160\01\00\00\u015f\u0157\01\00\00\u015f\u0160\01\00"+ + "\00\u0160\u0165\01\00\00\u0161\u0162\05\160\00\u0162\u0166\01\00\00"+ + "\u0163\u0164\05\120\00\u0164\u0166\01\00\00\u0165\u0161\01\00\00\u0165"+ + "\u0163\01\00\00\u0166\u016b\01\00\00\u0167\u0168\05\053\00\u0168\u016c"+ + "\01\00\00\u0169\u016a\05\055\00\u016a\u016c\01\00\00\u016b\u0167\01"+ + "\00\00\u016b\u0169\01\00\00\u016b\u016c\01\00\00\u016c\u016f\01\00"+ + "\00\u016d\u016e\02\060\071\u016e\u0170\01\00\00\u016f\u016d\01\00"+ + "\00\u0170\u0171\01\00\00\u0171\u016d\01\00\00\u0171\u0172\01\00\00"+ + "\u0172\u0174\01\00\00\u0173\u0125\01\00\00\u0173\u0135\01\00\00\u0173"+ + "\u0143\01\00\00\u0173\u014b\01\00\00\u0173\u014f\01\00\00\u0174\016"+ + "\01\00\00\u0175\u0176\05\145\00\u0176\u017a\01\00\00\u0177\u0178\05"+ + "\105\00\u0178\u017a\01\00\00\u0179\u0175\01\00\00\u0179\u0177\01\00"+ + "\00\u017a\u017f\01\00\00\u017b\u017c\05\053\00\u017c\u0180\01\00\00"+ + "\u017d\u017e\05\055\00\u017e\u0180\01\00\00\u017f\u017b\01\00\00\u017f"+ + "\u017d\01\00\00\u017f\u0180\01\00\00\u0180\u0183\01\00\00\u0181\u0182"+ + "\02\060\071\u0182\u0184\01\00\00\u0183\u0181\01\00\00\u0184\u0185"+ + "\01\00\00\u0185\u0181\01\00\00\u0185\u0186\01\00\00\u0186\020\01\00"+ + "\00\u0187\u0188\05\146\00\u0188\u018c\01\00\00\u0189\u018a\05\106"+ + "\00\u018a\u018c\01\00\00\u018b\u0187\01\00\00\u018b\u0189\01\00\00"+ + "\u018c\022\01\00\00\u018d\u018e\05\144\00\u018e\u0192\01\00\00\u018f"+ + "\u0190\05\104\00\u0190\u0192\01\00\00\u0191\u018d\01\00\00\u0191\u018f"+ + "\01\00\00\u0192\024\01\00\00\u0193\u0194\03\015\07\u0194\u0195\01"+ + "\00\00\u0195\u0196\03\021\011\u0196\026\01\00\00\u0197\u0198\03\015"+ + "\07\u0198\u019b\01\00\00\u0199\u019a\03\023\012\u019a\u019c\01\00"+ + "\00\u019b\u0199\01\00\00\u019b\u019c\01\00\00\u019c\030\01\00\00\u019d"+ + "\u019e\05\047\00\u019e\u01a3\01\00\00\u019f\u01a0\03\035\017\u01a0"+ + "\u01a4\01\00\00\u01a1\u01a2\012\00\00\u01a2\u01a4\01\00\00\u01a3\u019f"+ + "\01\00\00\u01a3\u01a1\01\00\00\u01a4\u01a5\01\00\00\u01a5\u01a6\05"+ + "\047\00\u01a6\032\01\00\00\u01a7\u01a8\05\042\00\u01a8\u01ad\01\00"+ + "\00\u01a9\u01aa\03\035\017\u01aa\u01ae\01\00\00\u01ab\u01ac\012\01"+ + "\00\u01ac\u01ae\01\00\00\u01ad\u01a9\01\00\00\u01ad\u01ab\01\00\00"+ + "\u01ad\u01b0\01\00\00\u01ae\u01af\01\00\00\u01af\u01ad\01\00\00\u01b0"+ + "\u01b1\01\00\00\u01b1\u01b2\05\042\00\u01b2\034\01\00\00\u01b3\u01b4"+ + "\05\134\00\u01b4\u01c5\01\00\00\u01b5\u01b6\05\142\00\u01b6\u01c6"+ + "\01\00\00\u01b7\u01b8\05\164\00\u01b8\u01c6\01\00\00\u01b9\u01ba\05"+ + "\156\00\u01ba\u01c6\01\00\00\u01bb\u01bc\05\146\00\u01bc\u01c6\01"+ + "\00\00\u01bd\u01be\05\162\00\u01be\u01c6\01\00\00\u01bf\u01c0\05\042"+ + "\00\u01c0\u01c6\01\00\00\u01c1\u01c2\05\047\00\u01c2\u01c6\01\00\00"+ + "\u01c3\u01c4\05\134\00\u01c4\u01c6\01\00\00\u01c5\u01b5\01\00\00\u01c5"+ + "\u01b7\01\00\00\u01c5\u01b9\01\00\00\u01c5\u01bb\01\00\00\u01c5\u01bd"+ + "\01\00\00\u01c5\u01bf\01\00\00\u01c5\u01c1\01\00\00\u01c5\u01c3\01"+ + "\00\00\u01c6\u01cc\01\00\00\u01c7\u01c8\03\041\021\u01c8\u01cc\01"+ + "\00\00\u01c9\u01ca\03\037\020\u01ca\u01cc\01\00\00\u01cb\u01b3\01"+ + "\00\00\u01cb\u01c7\01\00\00\u01cb\u01c9\01\00\00\u01cc\036\01\00\00"+ + "\u01cd\u01ce\05\134\00\u01ce\u01cf\01\00\00\u01cf\u01d0\02\060\063"+ + "\u01d0\u01d1\01\00\00\u01d1\u01d2\02\060\067\u01d2\u01d3\01\00\00"+ + "\u01d3\u01d4\02\060\067\u01d4\u01e0\01\00\00\u01d5\u01d6\05\134\00"+ + "\u01d6\u01d7\01\00\00\u01d7\u01d8\02\060\067\u01d8\u01d9\01\00\00"+ + "\u01d9\u01da\02\060\067\u01da\u01e0\01\00\00\u01db\u01dc\05\134\00"+ + "\u01dc\u01dd\01\00\00\u01dd\u01de\02\060\067\u01de\u01e0\01\00\00"+ + "\u01df\u01cd\01\00\00\u01df\u01d5\01\00\00\u01df\u01db\01\00\00\u01e0"+ + "\040\01\00\00\u01e1\u01e2\05\134\00\u01e2\u01e3\01\00\00\u01e3\u01e4"+ + "\05\165\00\u01e4\u01e5\01\00\00\u01e5\u01e6\03\011\05\u01e6\u01e7"+ + "\01\00\00\u01e7\u01e8\03\011\05\u01e8\u01e9\01\00\00\u01e9\u01ea\03"+ + "\011\05\u01ea\u01eb\01\00\00\u01eb\u01ec\03\011\05\u01ec\042\01\00"+ + "\00\u01ed\u01ee\05\040\00\u01ee\u01f8\01\00\00\u01ef\u01f0\05\015"+ + "\00\u01f0\u01f8\01\00\00\u01f1\u01f2\05\011\00\u01f2\u01f8\01\00\00"+ + "\u01f3\u01f4\05\014\00\u01f4\u01f8\01\00\00\u01f5\u01f6\05\012\00"+ + "\u01f6\u01f8\01\00\00\u01f7\u01ed\01\00\00\u01f7\u01ef\01\00\00\u01f7"+ + "\u01f1\01\00\00\u01f7\u01f3\01\00\00\u01f7\u01f5\01\00\00\u01f8\u01f9"+ + "\01\00\00\u01f9\044\01\00\00\u01fa\u01fb\05\057\00\u01fb\u01fc\05"+ + "\052\00\u01fc\u01ff\01\00\00\u01fd\u01fe\013\00\00\u01fe\u0200\01"+ + "\00\00\u01ff\u0202\01\00\00\u01ff\u01fd\01\00\00\u0200\u0201\01\00"+ + "\00\u0201\u01ff\01\00\00\u0202\u0203\01\00\00\u0203\u0204\05\052\00"+ + "\u0204\u0205\05\057\00\u0205\u0206\01\00\00\u0206\046\01\00\00\u0207"+ + "\u0208\05\057\00\u0208\u0209\05\057\00\u0209\u020c\01\00\00\u020a"+ + "\u020b\013\00\00\u020b\u020d\01\00\00\u020c\u020f\01\00\00\u020c\u020a"+ + "\01\00\00\u020d\u020e\01\00\00\u020e\u020c\01\00\00\u020f\u0217\01"+ + "\00\00\u0210\u0211\05\015\00\u0211\u0212\05\012\00\u0212\u0218\01"+ + "\00\00\u0213\u0214\05\015\00\u0214\u0218\01\00\00\u0215\u0216\05\012"+ + "\00\u0216\u0218\01\00\00\u0217\u0210\01\00\00\u0217\u0213\01\00\00"+ + "\u0217\u0215\01\00\00\u0218\u0219\01\00\00\u0219\u0225\01\00\00\u021a"+ + "\u021b\05\057\00\u021b\u021c\05\057\00\u021c\u021f\01\00\00\u021d"+ + "\u021e\012\02\00\u021e\u0220\01\00\00\u021f\u021d\01\00\00\u021f\u0222"+ + "\01\00\00\u0220\u0221\01\00\00\u0221\u021f\01\00\00\u0222\u0223\01"+ + "\00\00\u0223\u0225\01\00\00\u0224\u0207\01\00\00\u0224\u021a\01\00"+ + "\00\u0225\050\01\00\00\u0226\u0227\05\141\00\u0227\u0228\05\142\00"+ + "\u0228\u0229\05\163\00\u0229\u022a\05\164\00\u022a\u022b\05\162\00"+ + "\u022b\u022c\05\141\00\u022c\u022d\05\143\00\u022d\u022e\05\164\00"+ + "\u022e\052\01\00\00\u022f\u0230\05\141\00\u0230\u0231\05\163\00\u0231"+ + "\u0232\05\163\00\u0232\u0233\05\145\00\u0233\u0234\05\162\00\u0234"+ + "\u0235\05\164\00\u0235\054\01\00\00\u0236\u0237\05\142\00\u0237\u0238"+ + "\05\157\00\u0238\u0239\05\157\00\u0239\u023a\05\154\00\u023a\u023b"+ + "\05\145\00\u023b\u023c\05\141\00\u023c\u023d\05\156\00\u023d\056\01"+ + "\00\00\u023e\u023f\05\142\00\u023f\u0240\05\162\00\u0240\u0241\05"+ + "\145\00\u0241\u0242\05\141\00\u0242\u0243\05\153\00\u0243\060\01\00"+ + "\00\u0244\u0245\05\142\00\u0245\u0246\05\171\00\u0246\u0247\05\164"+ + "\00\u0247\u0248\05\145\00\u0248\062\01\00\00\u0249\u024a\05\143\00"+ + "\u024a\u024b\05\141\00\u024b\u024c\05\163\00\u024c\u024d\05\145\00"+ + "\u024d\064\01\00\00\u024e\u024f\05\143\00\u024f\u0250\05\141\00\u0250"+ + "\u0251\05\164\00\u0251\u0252\05\143\00\u0252\u0253\05\150\00\u0253"+ + "\066\01\00\00\u0254\u0255\05\143\00\u0255\u0256\05\150\00\u0256\u0257"+ + "\05\141\00\u0257\u0258\05\162\00\u0258\070\01\00\00\u0259\u025a\05"+ + "\143\00\u025a\u025b\05\154\00\u025b\u025c\05\141\00\u025c\u025d\05"+ + "\163\00\u025d\u025e\05\163\00\u025e\072\01\00\00\u025f\u0260\05\143"+ + "\00\u0260\u0261\05\157\00\u0261\u0262\05\156\00\u0262\u0263\05\163"+ + "\00\u0263\u0264\05\164\00\u0264\074\01\00\00\u0265\u0266\05\143\00"+ + "\u0266\u0267\05\157\00\u0267\u0268\05\156\00\u0268\u0269\05\164\00"+ + "\u0269\u026a\05\151\00\u026a\u026b\05\156\00\u026b\u026c\05\165\00"+ + "\u026c\u026d\05\145\00\u026d\076\01\00\00\u026e\u026f\05\144\00\u026f"+ + "\u0270\05\145\00\u0270\u0271\05\146\00\u0271\u0272\05\141\00\u0272"+ + "\u0273\05\165\00\u0273\u0274\05\154\00\u0274\u0275\05\164\00\u0275"+ + "\100\01\00\00\u0276\u0277\05\144\00\u0277\u0278\05\157\00\u0278\102"+ + "\01\00\00\u0279\u027a\05\144\00\u027a\u027b\05\157\00\u027b\u027c"+ + "\05\165\00\u027c\u027d\05\142\00\u027d\u027e\05\154\00\u027e\u027f"+ + "\05\145\00\u027f\104\01\00\00\u0280\u0281\05\145\00\u0281\u0282\05"+ + "\154\00\u0282\u0283\05\163\00\u0283\u0284\05\145\00\u0284\106\01\00"+ + "\00\u0285\u0286\05\145\00\u0286\u0287\05\156\00\u0287\u0288\05\165"+ + "\00\u0288\u0289\05\155\00\u0289\110\01\00\00\u028a\u028b\05\145\00"+ + "\u028b\u028c\05\170\00\u028c\u028d\05\164\00\u028d\u028e\05\145\00"+ + "\u028e\u028f\05\156\00\u028f\u0290\05\144\00\u0290\u0291\05\163\00"+ + "\u0291\112\01\00\00\u0292\u0293\05\146\00\u0293\u0294\05\151\00\u0294"+ + "\u0295\05\156\00\u0295\u0296\05\141\00\u0296\u0297\05\154\00\u0297"+ + "\114\01\00\00\u0298\u0299\05\146\00\u0299\u029a\05\151\00\u029a\u029b"+ + "\05\156\00\u029b\u029c\05\141\00\u029c\u029d\05\154\00\u029d\u029e"+ + "\05\154\00\u029e\u029f\05\171\00\u029f\116\01\00\00\u02a0\u02a1\05"+ + "\146\00\u02a1\u02a2\05\154\00\u02a2\u02a3\05\157\00\u02a3\u02a4\05"+ + "\141\00\u02a4\u02a5\05\164\00\u02a5\120\01\00\00\u02a6\u02a7\05\146"+ + "\00\u02a7\u02a8\05\157\00\u02a8\u02a9\05\162\00\u02a9\122\01\00\00"+ + "\u02aa\u02ab\05\147\00\u02ab\u02ac\05\157\00\u02ac\u02ad\05\164\00"+ + "\u02ad\u02ae\05\157\00\u02ae\124\01\00\00\u02af\u02b0\05\151\00\u02b0"+ + "\u02b1\05\146\00\u02b1\126\01\00\00\u02b2\u02b3\05\151\00\u02b3\u02b4"+ + "\05\155\00\u02b4\u02b5\05\160\00\u02b5\u02b6\05\154\00\u02b6\u02b7"+ + "\05\145\00\u02b7\u02b8\05\155\00\u02b8\u02b9\05\145\00\u02b9\u02ba"+ + "\05\156\00\u02ba\u02bb\05\164\00\u02bb\u02bc\05\163\00\u02bc\130\01"+ + "\00\00\u02bd\u02be\05\151\00\u02be\u02bf\05\155\00\u02bf\u02c0\05"+ + "\160\00\u02c0\u02c1\05\157\00\u02c1\u02c2\05\162\00\u02c2\u02c3\05"+ + "\164\00\u02c3\132\01\00\00\u02c4\u02c5\05\151\00\u02c5\u02c6\05\156"+ + "\00\u02c6\u02c7\05\163\00\u02c7\u02c8\05\164\00\u02c8\u02c9\05\141"+ + "\00\u02c9\u02ca\05\156\00\u02ca\u02cb\05\143\00\u02cb\u02cc\05\145"+ + "\00\u02cc\u02cd\05\157\00\u02cd\u02ce\05\146\00\u02ce\134\01\00\00"+ + "\u02cf\u02d0\05\151\00\u02d0\u02d1\05\156\00\u02d1\u02d2\05\164\00"+ + "\u02d2\136\01\00\00\u02d3\u02d4\05\151\00\u02d4\u02d5\05\156\00\u02d5"+ + "\u02d6\05\164\00\u02d6\u02d7\05\145\00\u02d7\u02d8\05\162\00\u02d8"+ + "\u02d9\05\146\00\u02d9\u02da\05\141\00\u02da\u02db\05\143\00\u02db"+ + "\u02dc\05\145\00\u02dc\140\01\00\00\u02dd\u02de\05\154\00\u02de\u02df"+ + "\05\157\00\u02df\u02e0\05\156\00\u02e0\u02e1\05\147\00\u02e1\142\01"+ + "\00\00\u02e2\u02e3\05\156\00\u02e3\u02e4\05\141\00\u02e4\u02e5\05"+ + "\164\00\u02e5\u02e6\05\151\00\u02e6\u02e7\05\166\00\u02e7\u02e8\05"+ + "\145\00\u02e8\144\01\00\00\u02e9\u02ea\05\156\00\u02ea\u02eb\05\145"+ + "\00\u02eb\u02ec\05\167\00\u02ec\146\01\00\00\u02ed\u02ee\05\160\00"+ + "\u02ee\u02ef\05\141\00\u02ef\u02f0\05\143\00\u02f0\u02f1\05\153\00"+ + "\u02f1\u02f2\05\141\00\u02f2\u02f3\05\147\00\u02f3\u02f4\05\145\00"+ + "\u02f4\150\01\00\00\u02f5\u02f6\05\160\00\u02f6\u02f7\05\162\00\u02f7"+ + "\u02f8\05\151\00\u02f8\u02f9\05\166\00\u02f9\u02fa\05\141\00\u02fa"+ + "\u02fb\05\164\00\u02fb\u02fc\05\145\00\u02fc\152\01\00\00\u02fd\u02fe"+ + "\05\160\00\u02fe\u02ff\05\162\00\u02ff\u0300\05\157\00\u0300\u0301"+ + "\05\164\00\u0301\u0302\05\145\00\u0302\u0303\05\143\00\u0303\u0304"+ + "\05\164\00\u0304\u0305\05\145\00\u0305\u0306\05\144\00\u0306\154\01"+ + "\00\00\u0307\u0308\05\160\00\u0308\u0309\05\165\00\u0309\u030a\05"+ + "\142\00\u030a\u030b\05\154\00\u030b\u030c\05\151\00\u030c\u030d\05"+ + "\143\00\u030d\156\01\00\00\u030e\u030f\05\162\00\u030f\u0310\05\145"+ + "\00\u0310\u0311\05\164\00\u0311\u0312\05\165\00\u0312\u0313\05\162"+ + "\00\u0313\u0314\05\156\00\u0314\160\01\00\00\u0315\u0316\05\163\00"+ + "\u0316\u0317\05\150\00\u0317\u0318\05\157\00\u0318\u0319\05\162\00"+ + "\u0319\u031a\05\164\00\u031a\162\01\00\00\u031b\u031c\05\163\00\u031c"+ + "\u031d\05\164\00\u031d\u031e\05\141\00\u031e\u031f\05\164\00\u031f"+ + "\u0320\05\151\00\u0320\u0321\05\143\00\u0321\164\01\00\00\u0322\u0323"+ + "\05\163\00\u0323\u0324\05\164\00\u0324\u0325\05\162\00\u0325\u0326"+ + "\05\151\00\u0326\u0327\05\143\00\u0327\u0328\05\164\00\u0328\u0329"+ + "\05\146\00\u0329\u032a\05\160\00\u032a\166\01\00\00\u032b\u032c\05"+ + "\163\00\u032c\u032d\05\165\00\u032d\u032e\05\160\00\u032e\u032f\05"+ + "\145\00\u032f\u0330\05\162\00\u0330\170\01\00\00\u0331\u0332\05\163"+ + "\00\u0332\u0333\05\167\00\u0333\u0334\05\151\00\u0334\u0335\05\164"+ + "\00\u0335\u0336\05\143\00\u0336\u0337\05\150\00\u0337\172\01\00\00"+ + "\u0338\u0339\05\163\00\u0339\u033a\05\171\00\u033a\u033b\05\156\00"+ + "\u033b\u033c\05\143\00\u033c\u033d\05\150\00\u033d\u033e\05\162\00"+ + "\u033e\u033f\05\157\00\u033f\u0340\05\156\00\u0340\u0341\05\151\00"+ + "\u0341\u0342\05\172\00\u0342\u0343\05\145\00\u0343\u0344\05\144\00"+ + "\u0344\174\01\00\00\u0345\u0346\05\164\00\u0346\u0347\05\150\00\u0347"+ + "\u0348\05\151\00\u0348\u0349\05\163\00\u0349\176\01\00\00\u034a\u034b"+ + "\05\164\00\u034b\u034c\05\150\00\u034c\u034d\05\162\00\u034d\u034e"+ + "\05\157\00\u034e\u034f\05\167\00\u034f\u0080\01\00\00\u0350\u0351"+ + "\05\164\00\u0351\u0352\05\150\00\u0352\u0353\05\162\00\u0353\u0354"+ + "\05\157\00\u0354\u0355\05\167\00\u0355\u0356\05\163\00\u0356\u0082"+ + "\01\00\00\u0357\u0358\05\164\00\u0358\u0359\05\162\00\u0359\u035a"+ + "\05\141\00\u035a\u035b\05\156\00\u035b\u035c\05\163\00\u035c\u035d"+ + "\05\151\00\u035d\u035e\05\145\00\u035e\u035f\05\156\00\u035f\u0360"+ + "\05\164\00\u0360\u0084\01\00\00\u0361\u0362\05\164\00\u0362\u0363"+ + "\05\162\00\u0363\u0364\05\171\00\u0364\u0086\01\00\00\u0365\u0366"+ + "\05\166\00\u0366\u0367\05\157\00\u0367\u0368\05\151\00\u0368\u0369"+ + "\05\144\00\u0369\u0088\01\00\00\u036a\u036b\05\166\00\u036b\u036c"+ + "\05\157\00\u036c\u036d\05\154\00\u036d\u036e\05\141\00\u036e\u036f"+ + "\05\164\00\u036f\u0370\05\151\00\u0370\u0371\05\154\00\u0371\u0372"+ + "\05\145\00\u0372\u008a\01\00\00\u0373\u0374\05\167\00\u0374\u0375"+ + "\05\150\00\u0375\u0376\05\151\00\u0376\u0377\05\154\00\u0377\u0378"+ + "\05\145\00\u0378\u008c\01\00\00\u0379\u037a\05\164\00\u037a\u037b"+ + "\05\162\00\u037b\u037c\05\165\00\u037c\u037d\05\145\00\u037d\u008e"+ + "\01\00\00\u037e\u037f\05\146\00\u037f\u0380\05\141\00\u0380\u0381"+ + "\05\154\00\u0381\u0382\05\163\00\u0382\u0383\05\145\00\u0383\u0090"+ + "\01\00\00\u0384\u0385\05\156\00\u0385\u0386\05\165\00\u0386\u0387"+ + "\05\154\00\u0387\u0388\05\154\00\u0388\u0092\01\00\00\u0389\u038a"+ + "\05\050\00\u038a\u0094\01\00\00\u038b\u038c\05\051\00\u038c\u0096"+ + "\01\00\00\u038d\u038e\05\173\00\u038e\u0098\01\00\00\u038f\u0390\05"+ + "\175\00\u0390\u009a\01\00\00\u0391\u0392\05\133\00\u0392\u009c\01"+ + "\00\00\u0393\u0394\05\135\00\u0394\u009e\01\00\00\u0395\u0396\05\073"+ + "\00\u0396\u00a0\01\00\00\u0397\u0398\05\054\00\u0398\u00a2\01\00\00"+ + "\u0399\u039a\05\056\00\u039a\u00a4\01\00\00\u039b\u039c\05\056\00"+ + "\u039c\u039d\05\056\00\u039d\u039e\05\056\00\u039e\u00a6\01\00\00"+ + "\u039f\u03a0\05\075\00\u03a0\u00a8\01\00\00\u03a1\u03a2\05\041\00"+ + "\u03a2\u00aa\01\00\00\u03a3\u03a4\05\176\00\u03a4\u00ac\01\00\00\u03a5"+ + "\u03a6\05\077\00\u03a6\u00ae\01\00\00\u03a7\u03a8\05\072\00\u03a8"+ + "\u00b0\01\00\00\u03a9\u03aa\05\075\00\u03aa\u03ab\05\075\00\u03ab"+ + "\u00b2\01\00\00\u03ac\u03ad\05\046\00\u03ad\u03ae\05\046\00\u03ae"+ + "\u00b4\01\00\00\u03af\u03b0\05\174\00\u03b0\u03b1\05\174\00\u03b1"+ + "\u00b6\01\00\00\u03b2\u03b3\05\053\00\u03b3\u03b4\05\053\00\u03b4"+ + "\u00b8\01\00\00\u03b5\u03b6\05\055\00\u03b6\u03b7\05\055\00\u03b7"+ + "\u00ba\01\00\00\u03b8\u03b9\05\053\00\u03b9\u00bc\01\00\00\u03ba\u03bb"+ + "\05\055\00\u03bb\u00be\01\00\00\u03bc\u03bd\05\052\00\u03bd\u00c0"+ + "\01\00\00\u03be\u03bf\05\057\00\u03bf\u00c2\01\00\00\u03c0\u03c1\05"+ + "\046\00\u03c1\u00c4\01\00\00\u03c2\u03c3\05\174\00\u03c3\u00c6\01"+ + "\00\00\u03c4\u03c5\05\136\00\u03c5\u00c8\01\00\00\u03c6\u03c7\05\045"+ + "\00\u03c7\u00ca\01\00\00\u03c8\u03c9\05\053\00\u03c9\u03ca\05\075"+ + "\00\u03ca\u00cc\01\00\00\u03cb\u03cc\05\055\00\u03cc\u03cd\05\075"+ + "\00\u03cd\u00ce\01\00\00\u03ce\u03cf\05\052\00\u03cf\u03d0\05\075"+ + "\00\u03d0\u00d0\01\00\00\u03d1\u03d2\05\057\00\u03d2\u03d3\05\075"+ + "\00\u03d3\u00d2\01\00\00\u03d4\u03d5\05\046\00\u03d5\u03d6\05\075"+ + "\00\u03d6\u00d4\01\00\00\u03d7\u03d8\05\174\00\u03d8\u03d9\05\075"+ + "\00\u03d9\u00d6\01\00\00\u03da\u03db\05\136\00\u03db\u03dc\05\075"+ + "\00\u03dc\u00d8\01\00\00\u03dd\u03de\05\045\00\u03de\u03df\05\075"+ + "\00\u03df\u00da\01\00\00\u03e0\u03e1\05\100\00\u03e1\u00dc\01\00\00"+ + "\u03e2\u03e3\05\041\00\u03e3\u03e4\05\075\00\u03e4\u00de\01\00\00"+ + "\u03e5\u03e6\05\074\00\u03e6\u00e0\01\00\00\u03e7\u03e8\05\076\00"+ + "\u03e8\u00e2\01\00\00\u03e9\u03ea\03\u00e7\164\u03ea\u03ed\01\00\00"+ + "\u03eb\u03ec\03\u00e9\165\u03ec\u03ee\01\00\00\u03ed\u03eb\01\00\00"+ + "\u03ed\u03f0\01\00\00\u03ee\u03ef\01\00\00\u03ef\u03ed\01\00\00\u03f0"+ + "\u00e4\01\00\00\u03f1\u03f2\02\ud800\udbff\u03f2\u03f3\01\00\00\u03f3"+ + "\u03f4\02\udc00\udfff\u03f4\u00e6\01\00\00\u03f5\u03f6\05\044\00\u03f6"+ + "\u0644\01\00\00\u03f7\u03f8\02\101\132\u03f8\u0644\01\00\00\u03f9"+ + "\u03fa\05\137\00\u03fa\u0644\01\00\00\u03fb\u03fc\02\141\172\u03fc"+ + "\u0644\01\00\00\u03fd\u03fe\02\u00a2\u00a5\u03fe\u0644\01\00\00\u03ff"+ + "\u0400\05\u00aa\00\u0400\u0644\01\00\00\u0401\u0402\05\u00b5\00\u0402"+ + "\u0644\01\00\00\u0403\u0404\05\u00ba\00\u0404\u0644\01\00\00\u0405"+ + "\u0406\02\u00c0\u00d6\u0406\u0644\01\00\00\u0407\u0408\02\u00d8\u00f6"+ + "\u0408\u0644\01\00\00\u0409\u040a\02\u00f8\u0236\u040a\u0644\01\00"+ + "\00\u040b\u040c\02\u0250\u02c1\u040c\u0644\01\00\00\u040d\u040e\02"+ + "\u02c6\u02d1\u040e\u0644\01\00\00\u040f\u0410\02\u02e0\u02e4\u0410"+ + "\u0644\01\00\00\u0411\u0412\05\u02ee\00\u0412\u0644\01\00\00\u0413"+ + "\u0414\05\u037a\00\u0414\u0644\01\00\00\u0415\u0416\05\u0386\00\u0416"+ + "\u0644\01\00\00\u0417\u0418\02\u0388\u038a\u0418\u0644\01\00\00\u0419"+ + "\u041a\05\u038c\00\u041a\u0644\01\00\00\u041b\u041c\02\u038e\u03a1"+ + "\u041c\u0644\01\00\00\u041d\u041e\02\u03a3\u03ce\u041e\u0644\01\00"+ + "\00\u041f\u0420\02\u03d0\u03f5\u0420\u0644\01\00\00\u0421\u0422\02"+ + "\u03f7\u03fb\u0422\u0644\01\00\00\u0423\u0424\02\u0400\u0481\u0424"+ + "\u0644\01\00\00\u0425\u0426\02\u048a\u04ce\u0426\u0644\01\00\00\u0427"+ + "\u0428\02\u04d0\u04f5\u0428\u0644\01\00\00\u0429\u042a\02\u04f8\u04f9"+ + "\u042a\u0644\01\00\00\u042b\u042c\02\u0500\u050f\u042c\u0644\01\00"+ + "\00\u042d\u042e\02\u0531\u0556\u042e\u0644\01\00\00\u042f\u0430\05"+ + "\u0559\00\u0430\u0644\01\00\00\u0431\u0432\02\u0561\u0587\u0432\u0644"+ + "\01\00\00\u0433\u0434\02\u05d0\u05ea\u0434\u0644\01\00\00\u0435\u0436"+ + "\02\u05f0\u05f2\u0436\u0644\01\00\00\u0437\u0438\02\u0621\u063a\u0438"+ + "\u0644\01\00\00\u0439\u043a\02\u0640\u064a\u043a\u0644\01\00\00\u043b"+ + "\u043c\02\u066e\u066f\u043c\u0644\01\00\00\u043d\u043e\02\u0671\u06d3"+ + "\u043e\u0644\01\00\00\u043f\u0440\05\u06d5\00\u0440\u0644\01\00\00"+ + "\u0441\u0442\02\u06e5\u06e6\u0442\u0644\01\00\00\u0443\u0444\02\u06ee"+ + "\u06ef\u0444\u0644\01\00\00\u0445\u0446\02\u06fa\u06fc\u0446\u0644"+ + "\01\00\00\u0447\u0448\05\u06ff\00\u0448\u0644\01\00\00\u0449\u044a"+ + "\05\u0710\00\u044a\u0644\01\00\00\u044b\u044c\02\u0712\u072f\u044c"+ + "\u0644\01\00\00\u044d\u044e\02\u074d\u074f\u044e\u0644\01\00\00\u044f"+ + "\u0450\02\u0780\u07a5\u0450\u0644\01\00\00\u0451\u0452\05\u07b1\00"+ + "\u0452\u0644\01\00\00\u0453\u0454\02\u0904\u0939\u0454\u0644\01\00"+ + "\00\u0455\u0456\05\u093d\00\u0456\u0644\01\00\00\u0457\u0458\05\u0950"+ + "\00\u0458\u0644\01\00\00\u0459\u045a\02\u0958\u0961\u045a\u0644\01"+ + "\00\00\u045b\u045c\02\u0985\u098c\u045c\u0644\01\00\00\u045d\u045e"+ + "\02\u098f\u0990\u045e\u0644\01\00\00\u045f\u0460\02\u0993\u09a8\u0460"+ + "\u0644\01\00\00\u0461\u0462\02\u09aa\u09b0\u0462\u0644\01\00\00\u0463"+ + "\u0464\05\u09b2\00\u0464\u0644\01\00\00\u0465\u0466\02\u09b6\u09b9"+ + "\u0466\u0644\01\00\00\u0467\u0468\05\u09bd\00\u0468\u0644\01\00\00"+ + "\u0469\u046a\02\u09dc\u09dd\u046a\u0644\01\00\00\u046b\u046c\02\u09df"+ + "\u09e1\u046c\u0644\01\00\00\u046d\u046e\02\u09f0\u09f3\u046e\u0644"+ + "\01\00\00\u046f\u0470\02\u0a05\u0a0a\u0470\u0644\01\00\00\u0471\u0472"+ + "\02\u0a0f\u0a10\u0472\u0644\01\00\00\u0473\u0474\02\u0a13\u0a28\u0474"+ + "\u0644\01\00\00\u0475\u0476\02\u0a2a\u0a30\u0476\u0644\01\00\00\u0477"+ + "\u0478\02\u0a32\u0a33\u0478\u0644\01\00\00\u0479\u047a\02\u0a35\u0a36"+ + "\u047a\u0644\01\00\00\u047b\u047c\02\u0a38\u0a39\u047c\u0644\01\00"+ + "\00\u047d\u047e\02\u0a59\u0a5c\u047e\u0644\01\00\00\u047f\u0480\05"+ + "\u0a5e\00\u0480\u0644\01\00\00\u0481\u0482\02\u0a72\u0a74\u0482\u0644"+ + "\01\00\00\u0483\u0484\02\u0a85\u0a8d\u0484\u0644\01\00\00\u0485\u0486"+ + "\02\u0a8f\u0a91\u0486\u0644\01\00\00\u0487\u0488\02\u0a93\u0aa8\u0488"+ + "\u0644\01\00\00\u0489\u048a\02\u0aaa\u0ab0\u048a\u0644\01\00\00\u048b"+ + "\u048c\02\u0ab2\u0ab3\u048c\u0644\01\00\00\u048d\u048e\02\u0ab5\u0ab9"+ + "\u048e\u0644\01\00\00\u048f\u0490\05\u0abd\00\u0490\u0644\01\00\00"+ + "\u0491\u0492\05\u0ad0\00\u0492\u0644\01\00\00\u0493\u0494\02\u0ae0"+ + "\u0ae1\u0494\u0644\01\00\00\u0495\u0496\05\u0af1\00\u0496\u0644\01"+ + "\00\00\u0497\u0498\02\u0b05\u0b0c\u0498\u0644\01\00\00\u0499\u049a"+ + "\02\u0b0f\u0b10\u049a\u0644\01\00\00\u049b\u049c\02\u0b13\u0b28\u049c"+ + "\u0644\01\00\00\u049d\u049e\02\u0b2a\u0b30\u049e\u0644\01\00\00\u049f"+ + "\u04a0\02\u0b32\u0b33\u04a0\u0644\01\00\00\u04a1\u04a2\02\u0b35\u0b39"+ + "\u04a2\u0644\01\00\00\u04a3\u04a4\05\u0b3d\00\u04a4\u0644\01\00\00"+ + "\u04a5\u04a6\02\u0b5c\u0b5d\u04a6\u0644\01\00\00\u04a7\u04a8\02\u0b5f"+ + "\u0b61\u04a8\u0644\01\00\00\u04a9\u04aa\05\u0b71\00\u04aa\u0644\01"+ + "\00\00\u04ab\u04ac\05\u0b83\00\u04ac\u0644\01\00\00\u04ad\u04ae\02"+ + "\u0b85\u0b8a\u04ae\u0644\01\00\00\u04af\u04b0\02\u0b8e\u0b90\u04b0"+ + "\u0644\01\00\00\u04b1\u04b2\02\u0b92\u0b95\u04b2\u0644\01\00\00\u04b3"+ + "\u04b4\02\u0b99\u0b9a\u04b4\u0644\01\00\00\u04b5\u04b6\05\u0b9c\00"+ + "\u04b6\u0644\01\00\00\u04b7\u04b8\02\u0b9e\u0b9f\u04b8\u0644\01\00"+ + "\00\u04b9\u04ba\02\u0ba3\u0ba4\u04ba\u0644\01\00\00\u04bb\u04bc\02"+ + "\u0ba8\u0baa\u04bc\u0644\01\00\00\u04bd\u04be\02\u0bae\u0bb5\u04be"+ + "\u0644\01\00\00\u04bf\u04c0\02\u0bb7\u0bb9\u04c0\u0644\01\00\00\u04c1"+ + "\u04c2\05\u0bf9\00\u04c2\u0644\01\00\00\u04c3\u04c4\02\u0c05\u0c0c"+ + "\u04c4\u0644\01\00\00\u04c5\u04c6\02\u0c0e\u0c10\u04c6\u0644\01\00"+ + "\00\u04c7\u04c8\02\u0c12\u0c28\u04c8\u0644\01\00\00\u04c9\u04ca\02"+ + "\u0c2a\u0c33\u04ca\u0644\01\00\00\u04cb\u04cc\02\u0c35\u0c39\u04cc"+ + "\u0644\01\00\00\u04cd\u04ce\02\u0c60\u0c61\u04ce\u0644\01\00\00\u04cf"+ + "\u04d0\02\u0c85\u0c8c\u04d0\u0644\01\00\00\u04d1\u04d2\02\u0c8e\u0c90"+ + "\u04d2\u0644\01\00\00\u04d3\u04d4\02\u0c92\u0ca8\u04d4\u0644\01\00"+ + "\00\u04d5\u04d6\02\u0caa\u0cb3\u04d6\u0644\01\00\00\u04d7\u04d8\02"+ + "\u0cb5\u0cb9\u04d8\u0644\01\00\00\u04d9\u04da\05\u0cbd\00\u04da\u0644"+ + "\01\00\00\u04db\u04dc\05\u0cde\00\u04dc\u0644\01\00\00\u04dd\u04de"+ + "\02\u0ce0\u0ce1\u04de\u0644\01\00\00\u04df\u04e0\02\u0d05\u0d0c\u04e0"+ + "\u0644\01\00\00\u04e1\u04e2\02\u0d0e\u0d10\u04e2\u0644\01\00\00\u04e3"+ + "\u04e4\02\u0d12\u0d28\u04e4\u0644\01\00\00\u04e5\u04e6\02\u0d2a\u0d39"+ + "\u04e6\u0644\01\00\00\u04e7\u04e8\02\u0d60\u0d61\u04e8\u0644\01\00"+ + "\00\u04e9\u04ea\02\u0d85\u0d96\u04ea\u0644\01\00\00\u04eb\u04ec\02"+ + "\u0d9a\u0db1\u04ec\u0644\01\00\00\u04ed\u04ee\02\u0db3\u0dbb\u04ee"+ + "\u0644\01\00\00\u04ef\u04f0\05\u0dbd\00\u04f0\u0644\01\00\00\u04f1"+ + "\u04f2\02\u0dc0\u0dc6\u04f2\u0644\01\00\00\u04f3\u04f4\02\u0e01\u0e30"+ + "\u04f4\u0644\01\00\00\u04f5\u04f6\02\u0e32\u0e33\u04f6\u0644\01\00"+ + "\00\u04f7\u04f8\02\u0e3f\u0e46\u04f8\u0644\01\00\00\u04f9\u04fa\02"+ + "\u0e81\u0e82\u04fa\u0644\01\00\00\u04fb\u04fc\05\u0e84\00\u04fc\u0644"+ + "\01\00\00\u04fd\u04fe\02\u0e87\u0e88\u04fe\u0644\01\00\00\u04ff\u0500"+ + "\05\u0e8a\00\u0500\u0644\01\00\00\u0501\u0502\05\u0e8d\00\u0502\u0644"+ + "\01\00\00\u0503\u0504\02\u0e94\u0e97\u0504\u0644\01\00\00\u0505\u0506"+ + "\02\u0e99\u0e9f\u0506\u0644\01\00\00\u0507\u0508\02\u0ea1\u0ea3\u0508"+ + "\u0644\01\00\00\u0509\u050a\05\u0ea5\00\u050a\u0644\01\00\00\u050b"+ + "\u050c\05\u0ea7\00\u050c\u0644\01\00\00\u050d\u050e\02\u0eaa\u0eab"+ + "\u050e\u0644\01\00\00\u050f\u0510\02\u0ead\u0eb0\u0510\u0644\01\00"+ + "\00\u0511\u0512\02\u0eb2\u0eb3\u0512\u0644\01\00\00\u0513\u0514\05"+ + "\u0ebd\00\u0514\u0644\01\00\00\u0515\u0516\02\u0ec0\u0ec4\u0516\u0644"+ + "\01\00\00\u0517\u0518\05\u0ec6\00\u0518\u0644\01\00\00\u0519\u051a"+ + "\02\u0edc\u0edd\u051a\u0644\01\00\00\u051b\u051c\05\u0f00\00\u051c"+ + "\u0644\01\00\00\u051d\u051e\02\u0f40\u0f47\u051e\u0644\01\00\00\u051f"+ + "\u0520\02\u0f49\u0f6a\u0520\u0644\01\00\00\u0521\u0522\02\u0f88\u0f8b"+ + "\u0522\u0644\01\00\00\u0523\u0524\02\u1000\u1021\u0524\u0644\01\00"+ + "\00\u0525\u0526\02\u1023\u1027\u0526\u0644\01\00\00\u0527\u0528\02"+ + "\u1029\u102a\u0528\u0644\01\00\00\u0529\u052a\02\u1050\u1055\u052a"+ + "\u0644\01\00\00\u052b\u052c\02\u10a0\u10c5\u052c\u0644\01\00\00\u052d"+ + "\u052e\02\u10d0\u10f8\u052e\u0644\01\00\00\u052f\u0530\02\u1100\u1159"+ + "\u0530\u0644\01\00\00\u0531\u0532\02\u115f\u11a2\u0532\u0644\01\00"+ + "\00\u0533\u0534\02\u11a8\u11f9\u0534\u0644\01\00\00\u0535\u0536\02"+ + "\u1200\u1206\u0536\u0644\01\00\00\u0537\u0538\02\u1208\u1246\u0538"+ + "\u0644\01\00\00\u0539\u053a\05\u1248\00\u053a\u0644\01\00\00\u053b"+ + "\u053c\02\u124a\u124d\u053c\u0644\01\00\00\u053d\u053e\02\u1250\u1256"+ + "\u053e\u0644\01\00\00\u053f\u0540\05\u1258\00\u0540\u0644\01\00\00"+ + "\u0541\u0542\02\u125a\u125d\u0542\u0644\01\00\00\u0543\u0544\02\u1260"+ + "\u1286\u0544\u0644\01\00\00\u0545\u0546\05\u1288\00\u0546\u0644\01"+ + "\00\00\u0547\u0548\02\u128a\u128d\u0548\u0644\01\00\00\u0549\u054a"+ + "\02\u1290\u12ae\u054a\u0644\01\00\00\u054b\u054c\05\u12b0\00\u054c"+ + "\u0644\01\00\00\u054d\u054e\02\u12b2\u12b5\u054e\u0644\01\00\00\u054f"+ + "\u0550\02\u12b8\u12be\u0550\u0644\01\00\00\u0551\u0552\05\u12c0\00"+ + "\u0552\u0644\01\00\00\u0553\u0554\02\u12c2\u12c5\u0554\u0644\01\00"+ + "\00\u0555\u0556\02\u12c8\u12ce\u0556\u0644\01\00\00\u0557\u0558\02"+ + "\u12d0\u12d6\u0558\u0644\01\00\00\u0559\u055a\02\u12d8\u12ee\u055a"+ + "\u0644\01\00\00\u055b\u055c\02\u12f0\u130e\u055c\u0644\01\00\00\u055d"+ + "\u055e\05\u1310\00\u055e\u0644\01\00\00\u055f\u0560\02\u1312\u1315"+ + "\u0560\u0644\01\00\00\u0561\u0562\02\u1318\u131e\u0562\u0644\01\00"+ + "\00\u0563\u0564\02\u1320\u1346\u0564\u0644\01\00\00\u0565\u0566\02"+ + "\u1348\u135a\u0566\u0644\01\00\00\u0567\u0568\02\u13a0\u13f4\u0568"+ + "\u0644\01\00\00\u0569\u056a\02\u1401\u166c\u056a\u0644\01\00\00\u056b"+ + "\u056c\02\u166f\u1676\u056c\u0644\01\00\00\u056d\u056e\02\u1681\u169a"+ + "\u056e\u0644\01\00\00\u056f\u0570\02\u16a0\u16ea\u0570\u0644\01\00"+ + "\00\u0571\u0572\02\u16ee\u16f0\u0572\u0644\01\00\00\u0573\u0574\02"+ + "\u1700\u170c\u0574\u0644\01\00\00\u0575\u0576\02\u170e\u1711\u0576"+ + "\u0644\01\00\00\u0577\u0578\02\u1720\u1731\u0578\u0644\01\00\00\u0579"+ + "\u057a\02\u1740\u1751\u057a\u0644\01\00\00\u057b\u057c\02\u1760\u176c"+ + "\u057c\u0644\01\00\00\u057d\u057e\02\u176e\u1770\u057e\u0644\01\00"+ + "\00\u057f\u0580\02\u1780\u17b3\u0580\u0644\01\00\00\u0581\u0582\05"+ + "\u17d7\00\u0582\u0644\01\00\00\u0583\u0584\02\u17db\u17dc\u0584\u0644"+ + "\01\00\00\u0585\u0586\02\u1820\u1877\u0586\u0644\01\00\00\u0587\u0588"+ + "\02\u1880\u18a8\u0588\u0644\01\00\00\u0589\u058a\02\u1900\u191c\u058a"+ + "\u0644\01\00\00\u058b\u058c\02\u1950\u196d\u058c\u0644\01\00\00\u058d"+ + "\u058e\02\u1970\u1974\u058e\u0644\01\00\00\u058f\u0590\02\u1d00\u1d6b"+ + "\u0590\u0644\01\00\00\u0591\u0592\02\u1e00\u1e9b\u0592\u0644\01\00"+ + "\00\u0593\u0594\02\u1ea0\u1ef9\u0594\u0644\01\00\00\u0595\u0596\02"+ + "\u1f00\u1f15\u0596\u0644\01\00\00\u0597\u0598\02\u1f18\u1f1d\u0598"+ + "\u0644\01\00\00\u0599\u059a\02\u1f20\u1f45\u059a\u0644\01\00\00\u059b"+ + "\u059c\02\u1f48\u1f4d\u059c\u0644\01\00\00\u059d\u059e\02\u1f50\u1f57"+ + "\u059e\u0644\01\00\00\u059f\u05a0\05\u1f59\00\u05a0\u0644\01\00\00"+ + "\u05a1\u05a2\05\u1f5b\00\u05a2\u0644\01\00\00\u05a3\u05a4\05\u1f5d"+ + "\00\u05a4\u0644\01\00\00\u05a5\u05a6\02\u1f5f\u1f7d\u05a6\u0644\01"+ + "\00\00\u05a7\u05a8\02\u1f80\u1fb4\u05a8\u0644\01\00\00\u05a9\u05aa"+ + "\02\u1fb6\u1fbc\u05aa\u0644\01\00\00\u05ab\u05ac\05\u1fbe\00\u05ac"+ + "\u0644\01\00\00\u05ad\u05ae\02\u1fc2\u1fc4\u05ae\u0644\01\00\00\u05af"+ + "\u05b0\02\u1fc6\u1fcc\u05b0\u0644\01\00\00\u05b1\u05b2\02\u1fd0\u1fd3"+ + "\u05b2\u0644\01\00\00\u05b3\u05b4\02\u1fd6\u1fdb\u05b4\u0644\01\00"+ + "\00\u05b5\u05b6\02\u1fe0\u1fec\u05b6\u0644\01\00\00\u05b7\u05b8\02"+ + "\u1ff2\u1ff4\u05b8\u0644\01\00\00\u05b9\u05ba\02\u1ff6\u1ffc\u05ba"+ + "\u0644\01\00\00\u05bb\u05bc\02\u203f\u2040\u05bc\u0644\01\00\00\u05bd"+ + "\u05be\05\u2054\00\u05be\u0644\01\00\00\u05bf\u05c0\05\u2071\00\u05c0"+ + "\u0644\01\00\00\u05c1\u05c2\05\u207f\00\u05c2\u0644\01\00\00\u05c3"+ + "\u05c4\02\u20a0\u20b1\u05c4\u0644\01\00\00\u05c5\u05c6\05\u2102\00"+ + "\u05c6\u0644\01\00\00\u05c7\u05c8\05\u2107\00\u05c8\u0644\01\00\00"+ + "\u05c9\u05ca\02\u210a\u2113\u05ca\u0644\01\00\00\u05cb\u05cc\05\u2115"+ + "\00\u05cc\u0644\01\00\00\u05cd\u05ce\02\u2119\u211d\u05ce\u0644\01"+ + "\00\00\u05cf\u05d0\05\u2124\00\u05d0\u0644\01\00\00\u05d1\u05d2\05"+ + "\u2126\00\u05d2\u0644\01\00\00\u05d3\u05d4\05\u2128\00\u05d4\u0644"+ + "\01\00\00\u05d5\u05d6\02\u212a\u212d\u05d6\u0644\01\00\00\u05d7\u05d8"+ + "\02\u212f\u2131\u05d8\u0644\01\00\00\u05d9\u05da\02\u2133\u2139\u05da"+ + "\u0644\01\00\00\u05db\u05dc\02\u213d\u213f\u05dc\u0644\01\00\00\u05dd"+ + "\u05de\02\u2145\u2149\u05de\u0644\01\00\00\u05df\u05e0\02\u2160\u2183"+ + "\u05e0\u0644\01\00\00\u05e1\u05e2\02\u3005\u3007\u05e2\u0644\01\00"+ + "\00\u05e3\u05e4\02\u3021\u3029\u05e4\u0644\01\00\00\u05e5\u05e6\02"+ + "\u3031\u3035\u05e6\u0644\01\00\00\u05e7\u05e8\02\u3038\u303c\u05e8"+ + "\u0644\01\00\00\u05e9\u05ea\02\u3041\u3096\u05ea\u0644\01\00\00\u05eb"+ + "\u05ec\02\u309d\u309f\u05ec\u0644\01\00\00\u05ed\u05ee\02\u30a1\u30ff"+ + "\u05ee\u0644\01\00\00\u05ef\u05f0\02\u3105\u312c\u05f0\u0644\01\00"+ + "\00\u05f1\u05f2\02\u3131\u318e\u05f2\u0644\01\00\00\u05f3\u05f4\02"+ + "\u31a0\u31b7\u05f4\u0644\01\00\00\u05f5\u05f6\02\u31f0\u31ff\u05f6"+ + "\u0644\01\00\00\u05f7\u05f8\02\u3400\u4db5\u05f8\u0644\01\00\00\u05f9"+ + "\u05fa\02\u4e00\u9fa5\u05fa\u0644\01\00\00\u05fb\u05fc\02\ua000\ua48c"+ + "\u05fc\u0644\01\00\00\u05fd\u05fe\02\uac00\ud7a3\u05fe\u0644\01\00"+ + "\00\u05ff\u0600\02\uf900\ufa2d\u0600\u0644\01\00\00\u0601\u0602\02"+ + "\ufa30\ufa6a\u0602\u0644\01\00\00\u0603\u0604\02\ufb00\ufb06\u0604"+ + "\u0644\01\00\00\u0605\u0606\02\ufb13\ufb17\u0606\u0644\01\00\00\u0607"+ + "\u0608\05\ufb1d\00\u0608\u0644\01\00\00\u0609\u060a\02\ufb1f\ufb28"+ + "\u060a\u0644\01\00\00\u060b\u060c\02\ufb2a\ufb36\u060c\u0644\01\00"+ + "\00\u060d\u060e\02\ufb38\ufb3c\u060e\u0644\01\00\00\u060f\u0610\05"+ + "\ufb3e\00\u0610\u0644\01\00\00\u0611\u0612\02\ufb40\ufb41\u0612\u0644"+ + "\01\00\00\u0613\u0614\02\ufb43\ufb44\u0614\u0644\01\00\00\u0615\u0616"+ + "\02\ufb46\ufbb1\u0616\u0644\01\00\00\u0617\u0618\02\ufbd3\ufd3d\u0618"+ + "\u0644\01\00\00\u0619\u061a\02\ufd50\ufd8f\u061a\u0644\01\00\00\u061b"+ + "\u061c\02\ufd92\ufdc7\u061c\u0644\01\00\00\u061d\u061e\02\ufdf0\ufdfc"+ + "\u061e\u0644\01\00\00\u061f\u0620\02\ufe33\ufe34\u0620\u0644\01\00"+ + "\00\u0621\u0622\02\ufe4d\ufe4f\u0622\u0644\01\00\00\u0623\u0624\05"+ + "\ufe69\00\u0624\u0644\01\00\00\u0625\u0626\02\ufe70\ufe74\u0626\u0644"+ + "\01\00\00\u0627\u0628\02\ufe76\ufefc\u0628\u0644\01\00\00\u0629\u062a"+ + "\05\uff04\00\u062a\u0644\01\00\00\u062b\u062c\02\uff21\uff3a\u062c"+ + "\u0644\01\00\00\u062d\u062e\05\uff3f\00\u062e\u0644\01\00\00\u062f"+ + "\u0630\02\uff41\uff5a\u0630\u0644\01\00\00\u0631\u0632\02\uff65\uffbe"+ + "\u0632\u0644\01\00\00\u0633\u0634\02\uffc2\uffc7\u0634\u0644\01\00"+ + "\00\u0635\u0636\02\uffca\uffcf\u0636\u0644\01\00\00\u0637\u0638\02"+ + "\uffd2\uffd7\u0638\u0644\01\00\00\u0639\u063a\02\uffda\uffdc\u063a"+ + "\u0644\01\00\00\u063b\u063c\02\uffe0\uffe1\u063c\u0644\01\00\00\u063d"+ + "\u063e\02\uffe5\uffe6\u063e\u0644\01\00\00\u063f\u0640\02\ud800\udbff"+ + "\u0640\u0641\01\00\00\u0641\u0642\02\udc00\udfff\u0642\u0644\01\00"+ + "\00\u0643\u03f5\01\00\00\u0643\u03f7\01\00\00\u0643\u03f9\01\00\00"+ + "\u0643\u03fb\01\00\00\u0643\u03fd\01\00\00\u0643\u03ff\01\00\00\u0643"+ + "\u0401\01\00\00\u0643\u0403\01\00\00\u0643\u0405\01\00\00\u0643\u0407"+ + "\01\00\00\u0643\u0409\01\00\00\u0643\u040b\01\00\00\u0643\u040d\01"+ + "\00\00\u0643\u040f\01\00\00\u0643\u0411\01\00\00\u0643\u0413\01\00"+ + "\00\u0643\u0415\01\00\00\u0643\u0417\01\00\00\u0643\u0419\01\00\00"+ + "\u0643\u041b\01\00\00\u0643\u041d\01\00\00\u0643\u041f\01\00\00\u0643"+ + "\u0421\01\00\00\u0643\u0423\01\00\00\u0643\u0425\01\00\00\u0643\u0427"+ + "\01\00\00\u0643\u0429\01\00\00\u0643\u042b\01\00\00\u0643\u042d\01"+ + "\00\00\u0643\u042f\01\00\00\u0643\u0431\01\00\00\u0643\u0433\01\00"+ + "\00\u0643\u0435\01\00\00\u0643\u0437\01\00\00\u0643\u0439\01\00\00"+ + "\u0643\u043b\01\00\00\u0643\u043d\01\00\00\u0643\u043f\01\00\00\u0643"+ + "\u0441\01\00\00\u0643\u0443\01\00\00\u0643\u0445\01\00\00\u0643\u0447"+ + "\01\00\00\u0643\u0449\01\00\00\u0643\u044b\01\00\00\u0643\u044d\01"+ + "\00\00\u0643\u044f\01\00\00\u0643\u0451\01\00\00\u0643\u0453\01\00"+ + "\00\u0643\u0455\01\00\00\u0643\u0457\01\00\00\u0643\u0459\01\00\00"+ + "\u0643\u045b\01\00\00\u0643\u045d\01\00\00\u0643\u045f\01\00\00\u0643"+ + "\u0461\01\00\00\u0643\u0463\01\00\00\u0643\u0465\01\00\00\u0643\u0467"+ + "\01\00\00\u0643\u0469\01\00\00\u0643\u046b\01\00\00\u0643\u046d\01"+ + "\00\00\u0643\u046f\01\00\00\u0643\u0471\01\00\00\u0643\u0473\01\00"+ + "\00\u0643\u0475\01\00\00\u0643\u0477\01\00\00\u0643\u0479\01\00\00"+ + "\u0643\u047b\01\00\00\u0643\u047d\01\00\00\u0643\u047f\01\00\00\u0643"+ + "\u0481\01\00\00\u0643\u0483\01\00\00\u0643\u0485\01\00\00\u0643\u0487"+ + "\01\00\00\u0643\u0489\01\00\00\u0643\u048b\01\00\00\u0643\u048d\01"+ + "\00\00\u0643\u048f\01\00\00\u0643\u0491\01\00\00\u0643\u0493\01\00"+ + "\00\u0643\u0495\01\00\00\u0643\u0497\01\00\00\u0643\u0499\01\00\00"+ + "\u0643\u049b\01\00\00\u0643\u049d\01\00\00\u0643\u049f\01\00\00\u0643"+ + "\u04a1\01\00\00\u0643\u04a3\01\00\00\u0643\u04a5\01\00\00\u0643\u04a7"+ + "\01\00\00\u0643\u04a9\01\00\00\u0643\u04ab\01\00\00\u0643\u04ad\01"+ + "\00\00\u0643\u04af\01\00\00\u0643\u04b1\01\00\00\u0643\u04b3\01\00"+ + "\00\u0643\u04b5\01\00\00\u0643\u04b7\01\00\00\u0643\u04b9\01\00\00"+ + "\u0643\u04bb\01\00\00\u0643\u04bd\01\00\00\u0643\u04bf\01\00\00\u0643"+ + "\u04c1\01\00\00\u0643\u04c3\01\00\00\u0643\u04c5\01\00\00\u0643\u04c7"+ + "\01\00\00\u0643\u04c9\01\00\00\u0643\u04cb\01\00\00\u0643\u04cd\01"+ + "\00\00\u0643\u04cf\01\00\00\u0643\u04d1\01\00\00\u0643\u04d3\01\00"+ + "\00\u0643\u04d5\01\00\00\u0643\u04d7\01\00\00\u0643\u04d9\01\00\00"+ + "\u0643\u04db\01\00\00\u0643\u04dd\01\00\00\u0643\u04df\01\00\00\u0643"+ + "\u04e1\01\00\00\u0643\u04e3\01\00\00\u0643\u04e5\01\00\00\u0643\u04e7"+ + "\01\00\00\u0643\u04e9\01\00\00\u0643\u04eb\01\00\00\u0643\u04ed\01"+ + "\00\00\u0643\u04ef\01\00\00\u0643\u04f1\01\00\00\u0643\u04f3\01\00"+ + "\00\u0643\u04f5\01\00\00\u0643\u04f7\01\00\00\u0643\u04f9\01\00\00"+ + "\u0643\u04fb\01\00\00\u0643\u04fd\01\00\00\u0643\u04ff\01\00\00\u0643"+ + "\u0501\01\00\00\u0643\u0503\01\00\00\u0643\u0505\01\00\00\u0643\u0507"+ + "\01\00\00\u0643\u0509\01\00\00\u0643\u050b\01\00\00\u0643\u050d\01"+ + "\00\00\u0643\u050f\01\00\00\u0643\u0511\01\00\00\u0643\u0513\01\00"+ + "\00\u0643\u0515\01\00\00\u0643\u0517\01\00\00\u0643\u0519\01\00\00"+ + "\u0643\u051b\01\00\00\u0643\u051d\01\00\00\u0643\u051f\01\00\00\u0643"+ + "\u0521\01\00\00\u0643\u0523\01\00\00\u0643\u0525\01\00\00\u0643\u0527"+ + "\01\00\00\u0643\u0529\01\00\00\u0643\u052b\01\00\00\u0643\u052d\01"+ + "\00\00\u0643\u052f\01\00\00\u0643\u0531\01\00\00\u0643\u0533\01\00"+ + "\00\u0643\u0535\01\00\00\u0643\u0537\01\00\00\u0643\u0539\01\00\00"+ + "\u0643\u053b\01\00\00\u0643\u053d\01\00\00\u0643\u053f\01\00\00\u0643"+ + "\u0541\01\00\00\u0643\u0543\01\00\00\u0643\u0545\01\00\00\u0643\u0547"+ + "\01\00\00\u0643\u0549\01\00\00\u0643\u054b\01\00\00\u0643\u054d\01"+ + "\00\00\u0643\u054f\01\00\00\u0643\u0551\01\00\00\u0643\u0553\01\00"+ + "\00\u0643\u0555\01\00\00\u0643\u0557\01\00\00\u0643\u0559\01\00\00"+ + "\u0643\u055b\01\00\00\u0643\u055d\01\00\00\u0643\u055f\01\00\00\u0643"+ + "\u0561\01\00\00\u0643\u0563\01\00\00\u0643\u0565\01\00\00\u0643\u0567"+ + "\01\00\00\u0643\u0569\01\00\00\u0643\u056b\01\00\00\u0643\u056d\01"+ + "\00\00\u0643\u056f\01\00\00\u0643\u0571\01\00\00\u0643\u0573\01\00"+ + "\00\u0643\u0575\01\00\00\u0643\u0577\01\00\00\u0643\u0579\01\00\00"+ + "\u0643\u057b\01\00\00\u0643\u057d\01\00\00\u0643\u057f\01\00\00\u0643"+ + "\u0581\01\00\00\u0643\u0583\01\00\00\u0643\u0585\01\00\00\u0643\u0587"+ + "\01\00\00\u0643\u0589\01\00\00\u0643\u058b\01\00\00\u0643\u058d\01"+ + "\00\00\u0643\u058f\01\00\00\u0643\u0591\01\00\00\u0643\u0593\01\00"+ + "\00\u0643\u0595\01\00\00\u0643\u0597\01\00\00\u0643\u0599\01\00\00"+ + "\u0643\u059b\01\00\00\u0643\u059d\01\00\00\u0643\u059f\01\00\00\u0643"+ + "\u05a1\01\00\00\u0643\u05a3\01\00\00\u0643\u05a5\01\00\00\u0643\u05a7"+ + "\01\00\00\u0643\u05a9\01\00\00\u0643\u05ab\01\00\00\u0643\u05ad\01"+ + "\00\00\u0643\u05af\01\00\00\u0643\u05b1\01\00\00\u0643\u05b3\01\00"+ + "\00\u0643\u05b5\01\00\00\u0643\u05b7\01\00\00\u0643\u05b9\01\00\00"+ + "\u0643\u05bb\01\00\00\u0643\u05bd\01\00\00\u0643\u05bf\01\00\00\u0643"+ + "\u05c1\01\00\00\u0643\u05c3\01\00\00\u0643\u05c5\01\00\00\u0643\u05c7"+ + "\01\00\00\u0643\u05c9\01\00\00\u0643\u05cb\01\00\00\u0643\u05cd\01"+ + "\00\00\u0643\u05cf\01\00\00\u0643\u05d1\01\00\00\u0643\u05d3\01\00"+ + "\00\u0643\u05d5\01\00\00\u0643\u05d7\01\00\00\u0643\u05d9\01\00\00"+ + "\u0643\u05db\01\00\00\u0643\u05dd\01\00\00\u0643\u05df\01\00\00\u0643"+ + "\u05e1\01\00\00\u0643\u05e3\01\00\00\u0643\u05e5\01\00\00\u0643\u05e7"+ + "\01\00\00\u0643\u05e9\01\00\00\u0643\u05eb\01\00\00\u0643\u05ed\01"+ + "\00\00\u0643\u05ef\01\00\00\u0643\u05f1\01\00\00\u0643\u05f3\01\00"+ + "\00\u0643\u05f5\01\00\00\u0643\u05f7\01\00\00\u0643\u05f9\01\00\00"+ + "\u0643\u05fb\01\00\00\u0643\u05fd\01\00\00\u0643\u05ff\01\00\00\u0643"+ + "\u0601\01\00\00\u0643\u0603\01\00\00\u0643\u0605\01\00\00\u0643\u0607"+ + "\01\00\00\u0643\u0609\01\00\00\u0643\u060b\01\00\00\u0643\u060d\01"+ + "\00\00\u0643\u060f\01\00\00\u0643\u0611\01\00\00\u0643\u0613\01\00"+ + "\00\u0643\u0615\01\00\00\u0643\u0617\01\00\00\u0643\u0619\01\00\00"+ + "\u0643\u061b\01\00\00\u0643\u061d\01\00\00\u0643\u061f\01\00\00\u0643"+ + "\u0621\01\00\00\u0643\u0623\01\00\00\u0643\u0625\01\00\00\u0643\u0627"+ + "\01\00\00\u0643\u0629\01\00\00\u0643\u062b\01\00\00\u0643\u062d\01"+ + "\00\00\u0643\u062f\01\00\00\u0643\u0631\01\00\00\u0643\u0633\01\00"+ + "\00\u0643\u0635\01\00\00\u0643\u0637\01\00\00\u0643\u0639\01\00\00"+ + "\u0643\u063b\01\00\00\u0643\u063d\01\00\00\u0643\u063f\01\00\00\u0644"+ + "\u00e8\01\00\00\u0645\u0646\02\00\010\u0646\u094c\01\00\00\u0647\u0648"+ + "\02\016\033\u0648\u094c\01\00\00\u0649\u064a\05\044\00\u064a\u094c"+ + "\01\00\00\u064b\u064c\02\060\071\u064c\u094c\01\00\00\u064d\u064e"+ + "\02\101\132\u064e\u094c\01\00\00\u064f\u0650\05\137\00\u0650\u094c"+ + "\01\00\00\u0651\u0652\02\141\172\u0652\u094c\01\00\00\u0653\u0654"+ + "\02\177\u009f\u0654\u094c\01\00\00\u0655\u0656\02\u00a2\u00a5\u0656"+ + "\u094c\01\00\00\u0657\u0658\05\u00aa\00\u0658\u094c\01\00\00\u0659"+ + "\u065a\05\u00ad\00\u065a\u094c\01\00\00\u065b\u065c\05\u00b5\00\u065c"+ + "\u094c\01\00\00\u065d\u065e\05\u00ba\00\u065e\u094c\01\00\00\u065f"+ + "\u0660\02\u00c0\u00d6\u0660\u094c\01\00\00\u0661\u0662\02\u00d8\u00f6"+ + "\u0662\u094c\01\00\00\u0663\u0664\02\u00f8\u0236\u0664\u094c\01\00"+ + "\00\u0665\u0666\02\u0250\u02c1\u0666\u094c\01\00\00\u0667\u0668\02"+ + "\u02c6\u02d1\u0668\u094c\01\00\00\u0669\u066a\02\u02e0\u02e4\u066a"+ + "\u094c\01\00\00\u066b\u066c\05\u02ee\00\u066c\u094c\01\00\00\u066d"+ + "\u066e\02\u0300\u0357\u066e\u094c\01\00\00\u066f\u0670\02\u035d\u036f"+ + "\u0670\u094c\01\00\00\u0671\u0672\05\u037a\00\u0672\u094c\01\00\00"+ + "\u0673\u0674\05\u0386\00\u0674\u094c\01\00\00\u0675\u0676\02\u0388"+ + "\u038a\u0676\u094c\01\00\00\u0677\u0678\05\u038c\00\u0678\u094c\01"+ + "\00\00\u0679\u067a\02\u038e\u03a1\u067a\u094c\01\00\00\u067b\u067c"+ + "\02\u03a3\u03ce\u067c\u094c\01\00\00\u067d\u067e\02\u03d0\u03f5\u067e"+ + "\u094c\01\00\00\u067f\u0680\02\u03f7\u03fb\u0680\u094c\01\00\00\u0681"+ + "\u0682\02\u0400\u0481\u0682\u094c\01\00\00\u0683\u0684\02\u0483\u0486"+ + "\u0684\u094c\01\00\00\u0685\u0686\02\u048a\u04ce\u0686\u094c\01\00"+ + "\00\u0687\u0688\02\u04d0\u04f5\u0688\u094c\01\00\00\u0689\u068a\02"+ + "\u04f8\u04f9\u068a\u094c\01\00\00\u068b\u068c\02\u0500\u050f\u068c"+ + "\u094c\01\00\00\u068d\u068e\02\u0531\u0556\u068e\u094c\01\00\00\u068f"+ + "\u0690\05\u0559\00\u0690\u094c\01\00\00\u0691\u0692\02\u0561\u0587"+ + "\u0692\u094c\01\00\00\u0693\u0694\02\u0591\u05a1\u0694\u094c\01\00"+ + "\00\u0695\u0696\02\u05a3\u05b9\u0696\u094c\01\00\00\u0697\u0698\02"+ + "\u05bb\u05bd\u0698\u094c\01\00\00\u0699\u069a\05\u05bf\00\u069a\u094c"+ + "\01\00\00\u069b\u069c\02\u05c1\u05c2\u069c\u094c\01\00\00\u069d\u069e"+ + "\05\u05c4\00\u069e\u094c\01\00\00\u069f\u06a0\02\u05d0\u05ea\u06a0"+ + "\u094c\01\00\00\u06a1\u06a2\02\u05f0\u05f2\u06a2\u094c\01\00\00\u06a3"+ + "\u06a4\02\u0600\u0603\u06a4\u094c\01\00\00\u06a5\u06a6\02\u0610\u0615"+ + "\u06a6\u094c\01\00\00\u06a7\u06a8\02\u0621\u063a\u06a8\u094c\01\00"+ + "\00\u06a9\u06aa\02\u0640\u0658\u06aa\u094c\01\00\00\u06ab\u06ac\02"+ + "\u0660\u0669\u06ac\u094c\01\00\00\u06ad\u06ae\02\u066e\u06d3\u06ae"+ + "\u094c\01\00\00\u06af\u06b0\02\u06d5\u06dd\u06b0\u094c\01\00\00\u06b1"+ + "\u06b2\02\u06df\u06e8\u06b2\u094c\01\00\00\u06b3\u06b4\02\u06ea\u06fc"+ + "\u06b4\u094c\01\00\00\u06b5\u06b6\05\u06ff\00\u06b6\u094c\01\00\00"+ + "\u06b7\u06b8\02\u070f\u074a\u06b8\u094c\01\00\00\u06b9\u06ba\02\u074d"+ + "\u074f\u06ba\u094c\01\00\00\u06bb\u06bc\02\u0780\u07b1\u06bc\u094c"+ + "\01\00\00\u06bd\u06be\02\u0901\u0939\u06be\u094c\01\00\00\u06bf\u06c0"+ + "\02\u093c\u094d\u06c0\u094c\01\00\00\u06c1\u06c2\02\u0950\u0954\u06c2"+ + "\u094c\01\00\00\u06c3\u06c4\02\u0958\u0963\u06c4\u094c\01\00\00\u06c5"+ + "\u06c6\02\u0966\u096f\u06c6\u094c\01\00\00\u06c7\u06c8\02\u0981\u0983"+ + "\u06c8\u094c\01\00\00\u06c9\u06ca\02\u0985\u098c\u06ca\u094c\01\00"+ + "\00\u06cb\u06cc\02\u098f\u0990\u06cc\u094c\01\00\00\u06cd\u06ce\02"+ + "\u0993\u09a8\u06ce\u094c\01\00\00\u06cf\u06d0\02\u09aa\u09b0\u06d0"+ + "\u094c\01\00\00\u06d1\u06d2\05\u09b2\00\u06d2\u094c\01\00\00\u06d3"+ + "\u06d4\02\u09b6\u09b9\u06d4\u094c\01\00\00\u06d5\u06d6\02\u09bc\u09c4"+ + "\u06d6\u094c\01\00\00\u06d7\u06d8\02\u09c7\u09c8\u06d8\u094c\01\00"+ + "\00\u06d9\u06da\02\u09cb\u09cd\u06da\u094c\01\00\00\u06db\u06dc\05"+ + "\u09d7\00\u06dc\u094c\01\00\00\u06dd\u06de\02\u09dc\u09dd\u06de\u094c"+ + "\01\00\00\u06df\u06e0\02\u09df\u09e3\u06e0\u094c\01\00\00\u06e1\u06e2"+ + "\02\u09e6\u09f3\u06e2\u094c\01\00\00\u06e3\u06e4\02\u0a01\u0a03\u06e4"+ + "\u094c\01\00\00\u06e5\u06e6\02\u0a05\u0a0a\u06e6\u094c\01\00\00\u06e7"+ + "\u06e8\02\u0a0f\u0a10\u06e8\u094c\01\00\00\u06e9\u06ea\02\u0a13\u0a28"+ + "\u06ea\u094c\01\00\00\u06eb\u06ec\02\u0a2a\u0a30\u06ec\u094c\01\00"+ + "\00\u06ed\u06ee\02\u0a32\u0a33\u06ee\u094c\01\00\00\u06ef\u06f0\02"+ + "\u0a35\u0a36\u06f0\u094c\01\00\00\u06f1\u06f2\02\u0a38\u0a39\u06f2"+ + "\u094c\01\00\00\u06f3\u06f4\05\u0a3c\00\u06f4\u094c\01\00\00\u06f5"+ + "\u06f6\02\u0a3e\u0a42\u06f6\u094c\01\00\00\u06f7\u06f8\02\u0a47\u0a48"+ + "\u06f8\u094c\01\00\00\u06f9\u06fa\02\u0a4b\u0a4d\u06fa\u094c\01\00"+ + "\00\u06fb\u06fc\02\u0a59\u0a5c\u06fc\u094c\01\00\00\u06fd\u06fe\05"+ + "\u0a5e\00\u06fe\u094c\01\00\00\u06ff\u0700\02\u0a66\u0a74\u0700\u094c"+ + "\01\00\00\u0701\u0702\02\u0a81\u0a83\u0702\u094c\01\00\00\u0703\u0704"+ + "\02\u0a85\u0a8d\u0704\u094c\01\00\00\u0705\u0706\02\u0a8f\u0a91\u0706"+ + "\u094c\01\00\00\u0707\u0708\02\u0a93\u0aa8\u0708\u094c\01\00\00\u0709"+ + "\u070a\02\u0aaa\u0ab0\u070a\u094c\01\00\00\u070b\u070c\02\u0ab2\u0ab3"+ + "\u070c\u094c\01\00\00\u070d\u070e\02\u0ab5\u0ab9\u070e\u094c\01\00"+ + "\00\u070f\u0710\02\u0abc\u0ac5\u0710\u094c\01\00\00\u0711\u0712\02"+ + "\u0ac7\u0ac9\u0712\u094c\01\00\00\u0713\u0714\02\u0acb\u0acd\u0714"+ + "\u094c\01\00\00\u0715\u0716\05\u0ad0\00\u0716\u094c\01\00\00\u0717"+ + "\u0718\02\u0ae0\u0ae3\u0718\u094c\01\00\00\u0719\u071a\02\u0ae6\u0aef"+ + "\u071a\u094c\01\00\00\u071b\u071c\05\u0af1\00\u071c\u094c\01\00\00"+ + "\u071d\u071e\02\u0b01\u0b03\u071e\u094c\01\00\00\u071f\u0720\02\u0b05"+ + "\u0b0c\u0720\u094c\01\00\00\u0721\u0722\02\u0b0f\u0b10\u0722\u094c"+ + "\01\00\00\u0723\u0724\02\u0b13\u0b28\u0724\u094c\01\00\00\u0725\u0726"+ + "\02\u0b2a\u0b30\u0726\u094c\01\00\00\u0727\u0728\02\u0b32\u0b33\u0728"+ + "\u094c\01\00\00\u0729\u072a\02\u0b35\u0b39\u072a\u094c\01\00\00\u072b"+ + "\u072c\02\u0b3c\u0b43\u072c\u094c\01\00\00\u072d\u072e\02\u0b47\u0b48"+ + "\u072e\u094c\01\00\00\u072f\u0730\02\u0b4b\u0b4d\u0730\u094c\01\00"+ + "\00\u0731\u0732\02\u0b56\u0b57\u0732\u094c\01\00\00\u0733\u0734\02"+ + "\u0b5c\u0b5d\u0734\u094c\01\00\00\u0735\u0736\02\u0b5f\u0b61\u0736"+ + "\u094c\01\00\00\u0737\u0738\02\u0b66\u0b6f\u0738\u094c\01\00\00\u0739"+ + "\u073a\05\u0b71\00\u073a\u094c\01\00\00\u073b\u073c\02\u0b82\u0b83"+ + "\u073c\u094c\01\00\00\u073d\u073e\02\u0b85\u0b8a\u073e\u094c\01\00"+ + "\00\u073f\u0740\02\u0b8e\u0b90\u0740\u094c\01\00\00\u0741\u0742\02"+ + "\u0b92\u0b95\u0742\u094c\01\00\00\u0743\u0744\02\u0b99\u0b9a\u0744"+ + "\u094c\01\00\00\u0745\u0746\05\u0b9c\00\u0746\u094c\01\00\00\u0747"+ + "\u0748\02\u0b9e\u0b9f\u0748\u094c\01\00\00\u0749\u074a\02\u0ba3\u0ba4"+ + "\u074a\u094c\01\00\00\u074b\u074c\02\u0ba8\u0baa\u074c\u094c\01\00"+ + "\00\u074d\u074e\02\u0bae\u0bb5\u074e\u094c\01\00\00\u074f\u0750\02"+ + "\u0bb7\u0bb9\u0750\u094c\01\00\00\u0751\u0752\02\u0bbe\u0bc2\u0752"+ + "\u094c\01\00\00\u0753\u0754\02\u0bc6\u0bc8\u0754\u094c\01\00\00\u0755"+ + "\u0756\02\u0bca\u0bcd\u0756\u094c\01\00\00\u0757\u0758\05\u0bd7\00"+ + "\u0758\u094c\01\00\00\u0759\u075a\02\u0be7\u0bef\u075a\u094c\01\00"+ + "\00\u075b\u075c\05\u0bf9\00\u075c\u094c\01\00\00\u075d\u075e\02\u0c01"+ + "\u0c03\u075e\u094c\01\00\00\u075f\u0760\02\u0c05\u0c0c\u0760\u094c"+ + "\01\00\00\u0761\u0762\02\u0c0e\u0c10\u0762\u094c\01\00\00\u0763\u0764"+ + "\02\u0c12\u0c28\u0764\u094c\01\00\00\u0765\u0766\02\u0c2a\u0c33\u0766"+ + "\u094c\01\00\00\u0767\u0768\02\u0c35\u0c39\u0768\u094c\01\00\00\u0769"+ + "\u076a\02\u0c3e\u0c44\u076a\u094c\01\00\00\u076b\u076c\02\u0c46\u0c48"+ + "\u076c\u094c\01\00\00\u076d\u076e\02\u0c4a\u0c4d\u076e\u094c\01\00"+ + "\00\u076f\u0770\02\u0c55\u0c56\u0770\u094c\01\00\00\u0771\u0772\02"+ + "\u0c60\u0c61\u0772\u094c\01\00\00\u0773\u0774\02\u0c66\u0c6f\u0774"+ + "\u094c\01\00\00\u0775\u0776\02\u0c82\u0c83\u0776\u094c\01\00\00\u0777"+ + "\u0778\02\u0c85\u0c8c\u0778\u094c\01\00\00\u0779\u077a\02\u0c8e\u0c90"+ + "\u077a\u094c\01\00\00\u077b\u077c\02\u0c92\u0ca8\u077c\u094c\01\00"+ + "\00\u077d\u077e\02\u0caa\u0cb3\u077e\u094c\01\00\00\u077f\u0780\02"+ + "\u0cb5\u0cb9\u0780\u094c\01\00\00\u0781\u0782\02\u0cbc\u0cc4\u0782"+ + "\u094c\01\00\00\u0783\u0784\02\u0cc6\u0cc8\u0784\u094c\01\00\00\u0785"+ + "\u0786\02\u0cca\u0ccd\u0786\u094c\01\00\00\u0787\u0788\02\u0cd5\u0cd6"+ + "\u0788\u094c\01\00\00\u0789\u078a\05\u0cde\00\u078a\u094c\01\00\00"+ + "\u078b\u078c\02\u0ce0\u0ce1\u078c\u094c\01\00\00\u078d\u078e\02\u0ce6"+ + "\u0cef\u078e\u094c\01\00\00\u078f\u0790\02\u0d02\u0d03\u0790\u094c"+ + "\01\00\00\u0791\u0792\02\u0d05\u0d0c\u0792\u094c\01\00\00\u0793\u0794"+ + "\02\u0d0e\u0d10\u0794\u094c\01\00\00\u0795\u0796\02\u0d12\u0d28\u0796"+ + "\u094c\01\00\00\u0797\u0798\02\u0d2a\u0d39\u0798\u094c\01\00\00\u0799"+ + "\u079a\02\u0d3e\u0d43\u079a\u094c\01\00\00\u079b\u079c\02\u0d46\u0d48"+ + "\u079c\u094c\01\00\00\u079d\u079e\02\u0d4a\u0d4d\u079e\u094c\01\00"+ + "\00\u079f\u07a0\05\u0d57\00\u07a0\u094c\01\00\00\u07a1\u07a2\02\u0d60"+ + "\u0d61\u07a2\u094c\01\00\00\u07a3\u07a4\02\u0d66\u0d6f\u07a4\u094c"+ + "\01\00\00\u07a5\u07a6\02\u0d82\u0d83\u07a6\u094c\01\00\00\u07a7\u07a8"+ + "\02\u0d85\u0d96\u07a8\u094c\01\00\00\u07a9\u07aa\02\u0d9a\u0db1\u07aa"+ + "\u094c\01\00\00\u07ab\u07ac\02\u0db3\u0dbb\u07ac\u094c\01\00\00\u07ad"+ + "\u07ae\05\u0dbd\00\u07ae\u094c\01\00\00\u07af\u07b0\02\u0dc0\u0dc6"+ + "\u07b0\u094c\01\00\00\u07b1\u07b2\05\u0dca\00\u07b2\u094c\01\00\00"+ + "\u07b3\u07b4\02\u0dcf\u0dd4\u07b4\u094c\01\00\00\u07b5\u07b6\05\u0dd6"+ + "\00\u07b6\u094c\01\00\00\u07b7\u07b8\02\u0dd8\u0ddf\u07b8\u094c\01"+ + "\00\00\u07b9\u07ba\02\u0df2\u0df3\u07ba\u094c\01\00\00\u07bb\u07bc"+ + "\02\u0e01\u0e3a\u07bc\u094c\01\00\00\u07bd\u07be\02\u0e3f\u0e4e\u07be"+ + "\u094c\01\00\00\u07bf\u07c0\02\u0e50\u0e59\u07c0\u094c\01\00\00\u07c1"+ + "\u07c2\02\u0e81\u0e82\u07c2\u094c\01\00\00\u07c3\u07c4\05\u0e84\00"+ + "\u07c4\u094c\01\00\00\u07c5\u07c6\02\u0e87\u0e88\u07c6\u094c\01\00"+ + "\00\u07c7\u07c8\05\u0e8a\00\u07c8\u094c\01\00\00\u07c9\u07ca\05\u0e8d"+ + "\00\u07ca\u094c\01\00\00\u07cb\u07cc\02\u0e94\u0e97\u07cc\u094c\01"+ + "\00\00\u07cd\u07ce\02\u0e99\u0e9f\u07ce\u094c\01\00\00\u07cf\u07d0"+ + "\02\u0ea1\u0ea3\u07d0\u094c\01\00\00\u07d1\u07d2\05\u0ea5\00\u07d2"+ + "\u094c\01\00\00\u07d3\u07d4\05\u0ea7\00\u07d4\u094c\01\00\00\u07d5"+ + "\u07d6\02\u0eaa\u0eab\u07d6\u094c\01\00\00\u07d7\u07d8\02\u0ead\u0eb9"+ + "\u07d8\u094c\01\00\00\u07d9\u07da\02\u0ebb\u0ebd\u07da\u094c\01\00"+ + "\00\u07db\u07dc\02\u0ec0\u0ec4\u07dc\u094c\01\00\00\u07dd\u07de\05"+ + "\u0ec6\00\u07de\u094c\01\00\00\u07df\u07e0\02\u0ec8\u0ecd\u07e0\u094c"+ + "\01\00\00\u07e1\u07e2\02\u0ed0\u0ed9\u07e2\u094c\01\00\00\u07e3\u07e4"+ + "\02\u0edc\u0edd\u07e4\u094c\01\00\00\u07e5\u07e6\05\u0f00\00\u07e6"+ + "\u094c\01\00\00\u07e7\u07e8\02\u0f18\u0f19\u07e8\u094c\01\00\00\u07e9"+ + "\u07ea\02\u0f20\u0f29\u07ea\u094c\01\00\00\u07eb\u07ec\05\u0f35\00"+ + "\u07ec\u094c\01\00\00\u07ed\u07ee\05\u0f37\00\u07ee\u094c\01\00\00"+ + "\u07ef\u07f0\05\u0f39\00\u07f0\u094c\01\00\00\u07f1\u07f2\02\u0f3e"+ + "\u0f47\u07f2\u094c\01\00\00\u07f3\u07f4\02\u0f49\u0f6a\u07f4\u094c"+ + "\01\00\00\u07f5\u07f6\02\u0f71\u0f84\u07f6\u094c\01\00\00\u07f7\u07f8"+ + "\02\u0f86\u0f8b\u07f8\u094c\01\00\00\u07f9\u07fa\02\u0f90\u0f97\u07fa"+ + "\u094c\01\00\00\u07fb\u07fc\02\u0f99\u0fbc\u07fc\u094c\01\00\00\u07fd"+ + "\u07fe\05\u0fc6\00\u07fe\u094c\01\00\00\u07ff\u0800\02\u1000\u1021"+ + "\u0800\u094c\01\00\00\u0801\u0802\02\u1023\u1027\u0802\u094c\01\00"+ + "\00\u0803\u0804\02\u1029\u102a\u0804\u094c\01\00\00\u0805\u0806\02"+ + "\u102c\u1032\u0806\u094c\01\00\00\u0807\u0808\02\u1036\u1039\u0808"+ + "\u094c\01\00\00\u0809\u080a\02\u1040\u1049\u080a\u094c\01\00\00\u080b"+ + "\u080c\02\u1050\u1059\u080c\u094c\01\00\00\u080d\u080e\02\u10a0\u10c5"+ + "\u080e\u094c\01\00\00\u080f\u0810\02\u10d0\u10f8\u0810\u094c\01\00"+ + "\00\u0811\u0812\02\u1100\u1159\u0812\u094c\01\00\00\u0813\u0814\02"+ + "\u115f\u11a2\u0814\u094c\01\00\00\u0815\u0816\02\u11a8\u11f9\u0816"+ + "\u094c\01\00\00\u0817\u0818\02\u1200\u1206\u0818\u094c\01\00\00\u0819"+ + "\u081a\02\u1208\u1246\u081a\u094c\01\00\00\u081b\u081c\05\u1248\00"+ + "\u081c\u094c\01\00\00\u081d\u081e\02\u124a\u124d\u081e\u094c\01\00"+ + "\00\u081f\u0820\02\u1250\u1256\u0820\u094c\01\00\00\u0821\u0822\05"+ + "\u1258\00\u0822\u094c\01\00\00\u0823\u0824\02\u125a\u125d\u0824\u094c"+ + "\01\00\00\u0825\u0826\02\u1260\u1286\u0826\u094c\01\00\00\u0827\u0828"+ + "\05\u1288\00\u0828\u094c\01\00\00\u0829\u082a\02\u128a\u128d\u082a"+ + "\u094c\01\00\00\u082b\u082c\02\u1290\u12ae\u082c\u094c\01\00\00\u082d"+ + "\u082e\05\u12b0\00\u082e\u094c\01\00\00\u082f\u0830\02\u12b2\u12b5"+ + "\u0830\u094c\01\00\00\u0831\u0832\02\u12b8\u12be\u0832\u094c\01\00"+ + "\00\u0833\u0834\05\u12c0\00\u0834\u094c\01\00\00\u0835\u0836\02\u12c2"+ + "\u12c5\u0836\u094c\01\00\00\u0837\u0838\02\u12c8\u12ce\u0838\u094c"+ + "\01\00\00\u0839\u083a\02\u12d0\u12d6\u083a\u094c\01\00\00\u083b\u083c"+ + "\02\u12d8\u12ee\u083c\u094c\01\00\00\u083d\u083e\02\u12f0\u130e\u083e"+ + "\u094c\01\00\00\u083f\u0840\05\u1310\00\u0840\u094c\01\00\00\u0841"+ + "\u0842\02\u1312\u1315\u0842\u094c\01\00\00\u0843\u0844\02\u1318\u131e"+ + "\u0844\u094c\01\00\00\u0845\u0846\02\u1320\u1346\u0846\u094c\01\00"+ + "\00\u0847\u0848\02\u1348\u135a\u0848\u094c\01\00\00\u0849\u084a\02"+ + "\u1369\u1371\u084a\u094c\01\00\00\u084b\u084c\02\u13a0\u13f4\u084c"+ + "\u094c\01\00\00\u084d\u084e\02\u1401\u166c\u084e\u094c\01\00\00\u084f"+ + "\u0850\02\u166f\u1676\u0850\u094c\01\00\00\u0851\u0852\02\u1681\u169a"+ + "\u0852\u094c\01\00\00\u0853\u0854\02\u16a0\u16ea\u0854\u094c\01\00"+ + "\00\u0855\u0856\02\u16ee\u16f0\u0856\u094c\01\00\00\u0857\u0858\02"+ + "\u1700\u170c\u0858\u094c\01\00\00\u0859\u085a\02\u170e\u1714\u085a"+ + "\u094c\01\00\00\u085b\u085c\02\u1720\u1734\u085c\u094c\01\00\00\u085d"+ + "\u085e\02\u1740\u1753\u085e\u094c\01\00\00\u085f\u0860\02\u1760\u176c"+ + "\u0860\u094c\01\00\00\u0861\u0862\02\u176e\u1770\u0862\u094c\01\00"+ + "\00\u0863\u0864\02\u1772\u1773\u0864\u094c\01\00\00\u0865\u0866\02"+ + "\u1780\u17d3\u0866\u094c\01\00\00\u0867\u0868\05\u17d7\00\u0868\u094c"+ + "\01\00\00\u0869\u086a\02\u17db\u17dd\u086a\u094c\01\00\00\u086b\u086c"+ + "\02\u17e0\u17e9\u086c\u094c\01\00\00\u086d\u086e\02\u180b\u180d\u086e"+ + "\u094c\01\00\00\u086f\u0870\02\u1810\u1819\u0870\u094c\01\00\00\u0871"+ + "\u0872\02\u1820\u1877\u0872\u094c\01\00\00\u0873\u0874\02\u1880\u18a9"+ + "\u0874\u094c\01\00\00\u0875\u0876\02\u1900\u191c\u0876\u094c\01\00"+ + "\00\u0877\u0878\02\u1920\u192b\u0878\u094c\01\00\00\u0879\u087a\02"+ + "\u1930\u193b\u087a\u094c\01\00\00\u087b\u087c\02\u1946\u196d\u087c"+ + "\u094c\01\00\00\u087d\u087e\02\u1970\u1974\u087e\u094c\01\00\00\u087f"+ + "\u0880\02\u1d00\u1d6b\u0880\u094c\01\00\00\u0881\u0882\02\u1e00\u1e9b"+ + "\u0882\u094c\01\00\00\u0883\u0884\02\u1ea0\u1ef9\u0884\u094c\01\00"+ + "\00\u0885\u0886\02\u1f00\u1f15\u0886\u094c\01\00\00\u0887\u0888\02"+ + "\u1f18\u1f1d\u0888\u094c\01\00\00\u0889\u088a\02\u1f20\u1f45\u088a"+ + "\u094c\01\00\00\u088b\u088c\02\u1f48\u1f4d\u088c\u094c\01\00\00\u088d"+ + "\u088e\02\u1f50\u1f57\u088e\u094c\01\00\00\u088f\u0890\05\u1f59\00"+ + "\u0890\u094c\01\00\00\u0891\u0892\05\u1f5b\00\u0892\u094c\01\00\00"+ + "\u0893\u0894\05\u1f5d\00\u0894\u094c\01\00\00\u0895\u0896\02\u1f5f"+ + "\u1f7d\u0896\u094c\01\00\00\u0897\u0898\02\u1f80\u1fb4\u0898\u094c"+ + "\01\00\00\u0899\u089a\02\u1fb6\u1fbc\u089a\u094c\01\00\00\u089b\u089c"+ + "\05\u1fbe\00\u089c\u094c\01\00\00\u089d\u089e\02\u1fc2\u1fc4\u089e"+ + "\u094c\01\00\00\u089f\u08a0\02\u1fc6\u1fcc\u08a0\u094c\01\00\00\u08a1"+ + "\u08a2\02\u1fd0\u1fd3\u08a2\u094c\01\00\00\u08a3\u08a4\02\u1fd6\u1fdb"+ + "\u08a4\u094c\01\00\00\u08a5\u08a6\02\u1fe0\u1fec\u08a6\u094c\01\00"+ + "\00\u08a7\u08a8\02\u1ff2\u1ff4\u08a8\u094c\01\00\00\u08a9\u08aa\02"+ + "\u1ff6\u1ffc\u08aa\u094c\01\00\00\u08ab\u08ac\02\u200c\u200f\u08ac"+ + "\u094c\01\00\00\u08ad\u08ae\02\u202a\u202e\u08ae\u094c\01\00\00\u08af"+ + "\u08b0\02\u203f\u2040\u08b0\u094c\01\00\00\u08b1\u08b2\05\u2054\00"+ + "\u08b2\u094c\01\00\00\u08b3\u08b4\02\u2060\u2063\u08b4\u094c\01\00"+ + "\00\u08b5\u08b6\02\u206a\u206f\u08b6\u094c\01\00\00\u08b7\u08b8\05"+ + "\u2071\00\u08b8\u094c\01\00\00\u08b9\u08ba\05\u207f\00\u08ba\u094c"+ + "\01\00\00\u08bb\u08bc\02\u20a0\u20b1\u08bc\u094c\01\00\00\u08bd\u08be"+ + "\02\u20d0\u20dc\u08be\u094c\01\00\00\u08bf\u08c0\05\u20e1\00\u08c0"+ + "\u094c\01\00\00\u08c1\u08c2\02\u20e5\u20ea\u08c2\u094c\01\00\00\u08c3"+ + "\u08c4\05\u2102\00\u08c4\u094c\01\00\00\u08c5\u08c6\05\u2107\00\u08c6"+ + "\u094c\01\00\00\u08c7\u08c8\02\u210a\u2113\u08c8\u094c\01\00\00\u08c9"+ + "\u08ca\05\u2115\00\u08ca\u094c\01\00\00\u08cb\u08cc\02\u2119\u211d"+ + "\u08cc\u094c\01\00\00\u08cd\u08ce\05\u2124\00\u08ce\u094c\01\00\00"+ + "\u08cf\u08d0\05\u2126\00\u08d0\u094c\01\00\00\u08d1\u08d2\05\u2128"+ + "\00\u08d2\u094c\01\00\00\u08d3\u08d4\02\u212a\u212d\u08d4\u094c\01"+ + "\00\00\u08d5\u08d6\02\u212f\u2131\u08d6\u094c\01\00\00\u08d7\u08d8"+ + "\02\u2133\u2139\u08d8\u094c\01\00\00\u08d9\u08da\02\u213d\u213f\u08da"+ + "\u094c\01\00\00\u08db\u08dc\02\u2145\u2149\u08dc\u094c\01\00\00\u08dd"+ + "\u08de\02\u2160\u2183\u08de\u094c\01\00\00\u08df\u08e0\02\u3005\u3007"+ + "\u08e0\u094c\01\00\00\u08e1\u08e2\02\u3021\u302f\u08e2\u094c\01\00"+ + "\00\u08e3\u08e4\02\u3031\u3035\u08e4\u094c\01\00\00\u08e5\u08e6\02"+ + "\u3038\u303c\u08e6\u094c\01\00\00\u08e7\u08e8\02\u3041\u3096\u08e8"+ + "\u094c\01\00\00\u08e9\u08ea\02\u3099\u309a\u08ea\u094c\01\00\00\u08eb"+ + "\u08ec\02\u309d\u309f\u08ec\u094c\01\00\00\u08ed\u08ee\02\u30a1\u30ff"+ + "\u08ee\u094c\01\00\00\u08ef\u08f0\02\u3105\u312c\u08f0\u094c\01\00"+ + "\00\u08f1\u08f2\02\u3131\u318e\u08f2\u094c\01\00\00\u08f3\u08f4\02"+ + "\u31a0\u31b7\u08f4\u094c\01\00\00\u08f5\u08f6\02\u31f0\u31ff\u08f6"+ + "\u094c\01\00\00\u08f7\u08f8\02\u3400\u4db5\u08f8\u094c\01\00\00\u08f9"+ + "\u08fa\02\u4e00\u9fa5\u08fa\u094c\01\00\00\u08fb\u08fc\02\ua000\ua48c"+ + "\u08fc\u094c\01\00\00\u08fd\u08fe\02\uac00\ud7a3\u08fe\u094c\01\00"+ + "\00\u08ff\u0900\02\uf900\ufa2d\u0900\u094c\01\00\00\u0901\u0902\02"+ + "\ufa30\ufa6a\u0902\u094c\01\00\00\u0903\u0904\02\ufb00\ufb06\u0904"+ + "\u094c\01\00\00\u0905\u0906\02\ufb13\ufb17\u0906\u094c\01\00\00\u0907"+ + "\u0908\02\ufb1d\ufb28\u0908\u094c\01\00\00\u0909\u090a\02\ufb2a\ufb36"+ + "\u090a\u094c\01\00\00\u090b\u090c\02\ufb38\ufb3c\u090c\u094c\01\00"+ + "\00\u090d\u090e\05\ufb3e\00\u090e\u094c\01\00\00\u090f\u0910\02\ufb40"+ + "\ufb41\u0910\u094c\01\00\00\u0911\u0912\02\ufb43\ufb44\u0912\u094c"+ + "\01\00\00\u0913\u0914\02\ufb46\ufbb1\u0914\u094c\01\00\00\u0915\u0916"+ + "\02\ufbd3\ufd3d\u0916\u094c\01\00\00\u0917\u0918\02\ufd50\ufd8f\u0918"+ + "\u094c\01\00\00\u0919\u091a\02\ufd92\ufdc7\u091a\u094c\01\00\00\u091b"+ + "\u091c\02\ufdf0\ufdfc\u091c\u094c\01\00\00\u091d\u091e\02\ufe00\ufe0f"+ + "\u091e\u094c\01\00\00\u091f\u0920\02\ufe20\ufe23\u0920\u094c\01\00"+ + "\00\u0921\u0922\02\ufe33\ufe34\u0922\u094c\01\00\00\u0923\u0924\02"+ + "\ufe4d\ufe4f\u0924\u094c\01\00\00\u0925\u0926\05\ufe69\00\u0926\u094c"+ + "\01\00\00\u0927\u0928\02\ufe70\ufe74\u0928\u094c\01\00\00\u0929\u092a"+ + "\02\ufe76\ufefc\u092a\u094c\01\00\00\u092b\u092c\05\ufeff\00\u092c"+ + "\u094c\01\00\00\u092d\u092e\05\uff04\00\u092e\u094c\01\00\00\u092f"+ + "\u0930\02\uff10\uff19\u0930\u094c\01\00\00\u0931\u0932\02\uff21\uff3a"+ + "\u0932\u094c\01\00\00\u0933\u0934\05\uff3f\00\u0934\u094c\01\00\00"+ + "\u0935\u0936\02\uff41\uff5a\u0936\u094c\01\00\00\u0937\u0938\02\uff65"+ + "\uffbe\u0938\u094c\01\00\00\u0939\u093a\02\uffc2\uffc7\u093a\u094c"+ + "\01\00\00\u093b\u093c\02\uffca\uffcf\u093c\u094c\01\00\00\u093d\u093e"+ + "\02\uffd2\uffd7\u093e\u094c\01\00\00\u093f\u0940\02\uffda\uffdc\u0940"+ + "\u094c\01\00\00\u0941\u0942\02\uffe0\uffe1\u0942\u094c\01\00\00\u0943"+ + "\u0944\02\uffe5\uffe6\u0944\u094c\01\00\00\u0945\u0946\02\ufff9\ufffb"+ + "\u0946\u094c\01\00\00\u0947\u0948\02\ud800\udbff\u0948\u0949\01\00"+ + "\00\u0949\u094a\02\udc00\udfff\u094a\u094c\01\00\00\u094b\u0645\01"+ + "\00\00\u094b\u0647\01\00\00\u094b\u0649\01\00\00\u094b\u064b\01\00"+ + "\00\u094b\u064d\01\00\00\u094b\u064f\01\00\00\u094b\u0651\01\00\00"+ + "\u094b\u0653\01\00\00\u094b\u0655\01\00\00\u094b\u0657\01\00\00\u094b"+ + "\u0659\01\00\00\u094b\u065b\01\00\00\u094b\u065d\01\00\00\u094b\u065f"+ + "\01\00\00\u094b\u0661\01\00\00\u094b\u0663\01\00\00\u094b\u0665\01"+ + "\00\00\u094b\u0667\01\00\00\u094b\u0669\01\00\00\u094b\u066b\01\00"+ + "\00\u094b\u066d\01\00\00\u094b\u066f\01\00\00\u094b\u0671\01\00\00"+ + "\u094b\u0673\01\00\00\u094b\u0675\01\00\00\u094b\u0677\01\00\00\u094b"+ + "\u0679\01\00\00\u094b\u067b\01\00\00\u094b\u067d\01\00\00\u094b\u067f"+ + "\01\00\00\u094b\u0681\01\00\00\u094b\u0683\01\00\00\u094b\u0685\01"+ + "\00\00\u094b\u0687\01\00\00\u094b\u0689\01\00\00\u094b\u068b\01\00"+ + "\00\u094b\u068d\01\00\00\u094b\u068f\01\00\00\u094b\u0691\01\00\00"+ + "\u094b\u0693\01\00\00\u094b\u0695\01\00\00\u094b\u0697\01\00\00\u094b"+ + "\u0699\01\00\00\u094b\u069b\01\00\00\u094b\u069d\01\00\00\u094b\u069f"+ + "\01\00\00\u094b\u06a1\01\00\00\u094b\u06a3\01\00\00\u094b\u06a5\01"+ + "\00\00\u094b\u06a7\01\00\00\u094b\u06a9\01\00\00\u094b\u06ab\01\00"+ + "\00\u094b\u06ad\01\00\00\u094b\u06af\01\00\00\u094b\u06b1\01\00\00"+ + "\u094b\u06b3\01\00\00\u094b\u06b5\01\00\00\u094b\u06b7\01\00\00\u094b"+ + "\u06b9\01\00\00\u094b\u06bb\01\00\00\u094b\u06bd\01\00\00\u094b\u06bf"+ + "\01\00\00\u094b\u06c1\01\00\00\u094b\u06c3\01\00\00\u094b\u06c5\01"+ + "\00\00\u094b\u06c7\01\00\00\u094b\u06c9\01\00\00\u094b\u06cb\01\00"+ + "\00\u094b\u06cd\01\00\00\u094b\u06cf\01\00\00\u094b\u06d1\01\00\00"+ + "\u094b\u06d3\01\00\00\u094b\u06d5\01\00\00\u094b\u06d7\01\00\00\u094b"+ + "\u06d9\01\00\00\u094b\u06db\01\00\00\u094b\u06dd\01\00\00\u094b\u06df"+ + "\01\00\00\u094b\u06e1\01\00\00\u094b\u06e3\01\00\00\u094b\u06e5\01"+ + "\00\00\u094b\u06e7\01\00\00\u094b\u06e9\01\00\00\u094b\u06eb\01\00"+ + "\00\u094b\u06ed\01\00\00\u094b\u06ef\01\00\00\u094b\u06f1\01\00\00"+ + "\u094b\u06f3\01\00\00\u094b\u06f5\01\00\00\u094b\u06f7\01\00\00\u094b"+ + "\u06f9\01\00\00\u094b\u06fb\01\00\00\u094b\u06fd\01\00\00\u094b\u06ff"+ + "\01\00\00\u094b\u0701\01\00\00\u094b\u0703\01\00\00\u094b\u0705\01"+ + "\00\00\u094b\u0707\01\00\00\u094b\u0709\01\00\00\u094b\u070b\01\00"+ + "\00\u094b\u070d\01\00\00\u094b\u070f\01\00\00\u094b\u0711\01\00\00"+ + "\u094b\u0713\01\00\00\u094b\u0715\01\00\00\u094b\u0717\01\00\00\u094b"+ + "\u0719\01\00\00\u094b\u071b\01\00\00\u094b\u071d\01\00\00\u094b\u071f"+ + "\01\00\00\u094b\u0721\01\00\00\u094b\u0723\01\00\00\u094b\u0725\01"+ + "\00\00\u094b\u0727\01\00\00\u094b\u0729\01\00\00\u094b\u072b\01\00"+ + "\00\u094b\u072d\01\00\00\u094b\u072f\01\00\00\u094b\u0731\01\00\00"+ + "\u094b\u0733\01\00\00\u094b\u0735\01\00\00\u094b\u0737\01\00\00\u094b"+ + "\u0739\01\00\00\u094b\u073b\01\00\00\u094b\u073d\01\00\00\u094b\u073f"+ + "\01\00\00\u094b\u0741\01\00\00\u094b\u0743\01\00\00\u094b\u0745\01"+ + "\00\00\u094b\u0747\01\00\00\u094b\u0749\01\00\00\u094b\u074b\01\00"+ + "\00\u094b\u074d\01\00\00\u094b\u074f\01\00\00\u094b\u0751\01\00\00"+ + "\u094b\u0753\01\00\00\u094b\u0755\01\00\00\u094b\u0757\01\00\00\u094b"+ + "\u0759\01\00\00\u094b\u075b\01\00\00\u094b\u075d\01\00\00\u094b\u075f"+ + "\01\00\00\u094b\u0761\01\00\00\u094b\u0763\01\00\00\u094b\u0765\01"+ + "\00\00\u094b\u0767\01\00\00\u094b\u0769\01\00\00\u094b\u076b\01\00"+ + "\00\u094b\u076d\01\00\00\u094b\u076f\01\00\00\u094b\u0771\01\00\00"+ + "\u094b\u0773\01\00\00\u094b\u0775\01\00\00\u094b\u0777\01\00\00\u094b"+ + "\u0779\01\00\00\u094b\u077b\01\00\00\u094b\u077d\01\00\00\u094b\u077f"+ + "\01\00\00\u094b\u0781\01\00\00\u094b\u0783\01\00\00\u094b\u0785\01"+ + "\00\00\u094b\u0787\01\00\00\u094b\u0789\01\00\00\u094b\u078b\01\00"+ + "\00\u094b\u078d\01\00\00\u094b\u078f\01\00\00\u094b\u0791\01\00\00"+ + "\u094b\u0793\01\00\00\u094b\u0795\01\00\00\u094b\u0797\01\00\00\u094b"+ + "\u0799\01\00\00\u094b\u079b\01\00\00\u094b\u079d\01\00\00\u094b\u079f"+ + "\01\00\00\u094b\u07a1\01\00\00\u094b\u07a3\01\00\00\u094b\u07a5\01"+ + "\00\00\u094b\u07a7\01\00\00\u094b\u07a9\01\00\00\u094b\u07ab\01\00"+ + "\00\u094b\u07ad\01\00\00\u094b\u07af\01\00\00\u094b\u07b1\01\00\00"+ + "\u094b\u07b3\01\00\00\u094b\u07b5\01\00\00\u094b\u07b7\01\00\00\u094b"+ + "\u07b9\01\00\00\u094b\u07bb\01\00\00\u094b\u07bd\01\00\00\u094b\u07bf"+ + "\01\00\00\u094b\u07c1\01\00\00\u094b\u07c3\01\00\00\u094b\u07c5\01"+ + "\00\00\u094b\u07c7\01\00\00\u094b\u07c9\01\00\00\u094b\u07cb\01\00"+ + "\00\u094b\u07cd\01\00\00\u094b\u07cf\01\00\00\u094b\u07d1\01\00\00"+ + "\u094b\u07d3\01\00\00\u094b\u07d5\01\00\00\u094b\u07d7\01\00\00\u094b"+ + "\u07d9\01\00\00\u094b\u07db\01\00\00\u094b\u07dd\01\00\00\u094b\u07df"+ + "\01\00\00\u094b\u07e1\01\00\00\u094b\u07e3\01\00\00\u094b\u07e5\01"+ + "\00\00\u094b\u07e7\01\00\00\u094b\u07e9\01\00\00\u094b\u07eb\01\00"+ + "\00\u094b\u07ed\01\00\00\u094b\u07ef\01\00\00\u094b\u07f1\01\00\00"+ + "\u094b\u07f3\01\00\00\u094b\u07f5\01\00\00\u094b\u07f7\01\00\00\u094b"+ + "\u07f9\01\00\00\u094b\u07fb\01\00\00\u094b\u07fd\01\00\00\u094b\u07ff"+ + "\01\00\00\u094b\u0801\01\00\00\u094b\u0803\01\00\00\u094b\u0805\01"+ + "\00\00\u094b\u0807\01\00\00\u094b\u0809\01\00\00\u094b\u080b\01\00"+ + "\00\u094b\u080d\01\00\00\u094b\u080f\01\00\00\u094b\u0811\01\00\00"+ + "\u094b\u0813\01\00\00\u094b\u0815\01\00\00\u094b\u0817\01\00\00\u094b"+ + "\u0819\01\00\00\u094b\u081b\01\00\00\u094b\u081d\01\00\00\u094b\u081f"+ + "\01\00\00\u094b\u0821\01\00\00\u094b\u0823\01\00\00\u094b\u0825\01"+ + "\00\00\u094b\u0827\01\00\00\u094b\u0829\01\00\00\u094b\u082b\01\00"+ + "\00\u094b\u082d\01\00\00\u094b\u082f\01\00\00\u094b\u0831\01\00\00"+ + "\u094b\u0833\01\00\00\u094b\u0835\01\00\00\u094b\u0837\01\00\00\u094b"+ + "\u0839\01\00\00\u094b\u083b\01\00\00\u094b\u083d\01\00\00\u094b\u083f"+ + "\01\00\00\u094b\u0841\01\00\00\u094b\u0843\01\00\00\u094b\u0845\01"+ + "\00\00\u094b\u0847\01\00\00\u094b\u0849\01\00\00\u094b\u084b\01\00"+ + "\00\u094b\u084d\01\00\00\u094b\u084f\01\00\00\u094b\u0851\01\00\00"+ + "\u094b\u0853\01\00\00\u094b\u0855\01\00\00\u094b\u0857\01\00\00\u094b"+ + "\u0859\01\00\00\u094b\u085b\01\00\00\u094b\u085d\01\00\00\u094b\u085f"+ + "\01\00\00\u094b\u0861\01\00\00\u094b\u0863\01\00\00\u094b\u0865\01"+ + "\00\00\u094b\u0867\01\00\00\u094b\u0869\01\00\00\u094b\u086b\01\00"+ + "\00\u094b\u086d\01\00\00\u094b\u086f\01\00\00\u094b\u0871\01\00\00"+ + "\u094b\u0873\01\00\00\u094b\u0875\01\00\00\u094b\u0877\01\00\00\u094b"+ + "\u0879\01\00\00\u094b\u087b\01\00\00\u094b\u087d\01\00\00\u094b\u087f"+ + "\01\00\00\u094b\u0881\01\00\00\u094b\u0883\01\00\00\u094b\u0885\01"+ + "\00\00\u094b\u0887\01\00\00\u094b\u0889\01\00\00\u094b\u088b\01\00"+ + "\00\u094b\u088d\01\00\00\u094b\u088f\01\00\00\u094b\u0891\01\00\00"+ + "\u094b\u0893\01\00\00\u094b\u0895\01\00\00\u094b\u0897\01\00\00\u094b"+ + "\u0899\01\00\00\u094b\u089b\01\00\00\u094b\u089d\01\00\00\u094b\u089f"+ + "\01\00\00\u094b\u08a1\01\00\00\u094b\u08a3\01\00\00\u094b\u08a5\01"+ + "\00\00\u094b\u08a7\01\00\00\u094b\u08a9\01\00\00\u094b\u08ab\01\00"+ + "\00\u094b\u08ad\01\00\00\u094b\u08af\01\00\00\u094b\u08b1\01\00\00"+ + "\u094b\u08b3\01\00\00\u094b\u08b5\01\00\00\u094b\u08b7\01\00\00\u094b"+ + "\u08b9\01\00\00\u094b\u08bb\01\00\00\u094b\u08bd\01\00\00\u094b\u08bf"+ + "\01\00\00\u094b\u08c1\01\00\00\u094b\u08c3\01\00\00\u094b\u08c5\01"+ + "\00\00\u094b\u08c7\01\00\00\u094b\u08c9\01\00\00\u094b\u08cb\01\00"+ + "\00\u094b\u08cd\01\00\00\u094b\u08cf\01\00\00\u094b\u08d1\01\00\00"+ + "\u094b\u08d3\01\00\00\u094b\u08d5\01\00\00\u094b\u08d7\01\00\00\u094b"+ + "\u08d9\01\00\00\u094b\u08db\01\00\00\u094b\u08dd\01\00\00\u094b\u08df"+ + "\01\00\00\u094b\u08e1\01\00\00\u094b\u08e3\01\00\00\u094b\u08e5\01"+ + "\00\00\u094b\u08e7\01\00\00\u094b\u08e9\01\00\00\u094b\u08eb\01\00"+ + "\00\u094b\u08ed\01\00\00\u094b\u08ef\01\00\00\u094b\u08f1\01\00\00"+ + "\u094b\u08f3\01\00\00\u094b\u08f5\01\00\00\u094b\u08f7\01\00\00\u094b"+ + "\u08f9\01\00\00\u094b\u08fb\01\00\00\u094b\u08fd\01\00\00\u094b\u08ff"+ + "\01\00\00\u094b\u0901\01\00\00\u094b\u0903\01\00\00\u094b\u0905\01"+ + "\00\00\u094b\u0907\01\00\00\u094b\u0909\01\00\00\u094b\u090b\01\00"+ + "\00\u094b\u090d\01\00\00\u094b\u090f\01\00\00\u094b\u0911\01\00\00"+ + "\u094b\u0913\01\00\00\u094b\u0915\01\00\00\u094b\u0917\01\00\00\u094b"+ + "\u0919\01\00\00\u094b\u091b\01\00\00\u094b\u091d\01\00\00\u094b\u091f"+ + "\01\00\00\u094b\u0921\01\00\00\u094b\u0923\01\00\00\u094b\u0925\01"+ + "\00\00\u094b\u0927\01\00\00\u094b\u0929\01\00\00\u094b\u092b\01\00"+ + "\00\u094b\u092d\01\00\00\u094b\u092f\01\00\00\u094b\u0931\01\00\00"+ + "\u094b\u0933\01\00\00\u094b\u0935\01\00\00\u094b\u0937\01\00\00\u094b"+ + "\u0939\01\00\00\u094b\u093b\01\00\00\u094b\u093d\01\00\00\u094b\u093f"+ + "\01\00\00\u094b\u0941\01\00\00\u094b\u0943\01\00\00\u094b\u0945\01"+ + "\00\00\u094b\u0947\01\00\00\u094c\u00ea\01\00\00\072\00\u00f7\u00ff"+ + "\u00ff\u0101\u0107\u0107\u0109\u010b\u0113\u011b\u0121\u0125\u0125"+ + "\u0127\u012d\u0133\u0139\u0139\u013b\u013f\u0143\u0143\u0145\u014b"+ + "\u014b\u014d\u0153\u015b\u015f\u0165\u016b\u016f\u016f\u0171\u0173"+ + "\u0179\u017f\u0183\u0183\u0185\u018b\u0191\u019b\u01a3\u01ad\u01c5"+ + "\u01cb\u01df\u01f7\u01ff\u020c\u0217\u021f\u0224\u03ed\u0643\u094b"; + public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); + static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); + } +} \ No newline at end of file diff --git a/tool/playground/YangJavaParser.g b/tool/playground/YangJavaParser.g new file mode 100644 index 000000000..3e3bba2cc --- /dev/null +++ b/tool/playground/YangJavaParser.g @@ -0,0 +1,1238 @@ +/* + [The "BSD licence"] + Copyright (c) 2007-2008 Terence Parr + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* + * This file is modified by Yang Jiang (yang.jiang.z@gmail.com), taken from the original + * java grammar in www.antlr.org, with the goal to provide a standard ANTLR grammar + * for java, as well as an implementation to construct the same AST trees as javac does. + * + * The major changes of this version as compared to the original version include: + * 1) Top level rules are changed to include all of their sub-components. + * For example, the rule + * + * classOrInterfaceDeclaration + * : classOrInterfaceModifiers (classDeclaration | interfaceDeclaration) + * ; + * + * is changed to + * + * classOrInterfaceDeclaration + * : classDeclaration | interfaceDeclaration + * ; + * + * with classOrInterfaceModifiers been moved inside classDeclaration and + * interfaceDeclaration. + * + * 2) The original version is not quite clear on certain rules like memberDecl, + * where it mixed the styles of listing of top level rules and listing of sub rules. + * + * memberDecl + * : genericMethodOrConstructorDecl + * | memberDeclaration + * | 'void' Identifier voidMethodDeclaratorRest + * | Identifier constructorDeclaratorRest + * | interfaceDeclaration + * | classDeclaration + * ; + * + * This is changed to a + * + * memberDecl + * : fieldDeclaration + * | methodDeclaration + * | classDeclaration + * | interfaceDeclaration + * ; + * by folding similar rules into single rule. + * + * 3) Some syntactical predicates are added for efficiency, although this is not necessary + * for correctness. + * + * 4) Lexer part is rewritten completely to construct tokens needed for the parser. + * + * 5) This grammar adds more source level support + * + * + * This grammar also adds bug fixes. + * + * 1) Adding typeArguments to superSuffix to alHexSignificandlow input like + * super.method() + * + * 2) Adding typeArguments to innerCreator to allow input like + * new Type1().new Type2() + * + * 3) conditionalExpression is changed to + * conditionalExpression + * : conditionalOrExpression ( '?' expression ':' conditionalExpression )? + * ; + * to accept input like + * true?1:2=3 + * + * Note: note this is by no means a valid input, by the grammar should be able to parse + * this as + * (true?1:2)=3 + * rather than + * true?1:(2=3) + * + * + * Know problems: + * Won't pass input containing unicode sequence like this + * char c = '\uffff' + * String s = "\uffff"; + * Because Antlr does not treat '\uffff' as an valid char. This will be fixed in the next Antlr + * release. [Fixed in Antlr-3.1.1] + * + * Things to do: + * More effort to make this grammar faster. + * Error reporting/recovering. + * + * + * NOTE: If you try to compile this file from command line and Antlr gives an exception + * like error message while compiling, add option + * -Xconversiontimeout 100000 + * to the command line. + * If it still doesn't work or the compilation process + * takes too long, try to comment out the following two lines: + * | {isValidSurrogateIdentifierStart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff') + * | {isValidSurrogateIdentifierPart((char)input.LT(1), (char)input.LT(2))}?=>('\ud800'..'\udbff') ('\udc00'..'\udfff') + * + * + * Below are comments found in the original version. + */ + + +/** A Java 1.5 grammar for ANTLR v3 derived from the spec + * + * This is a very close representation of the spec; the changes + * are comestic (remove left recursion) and also fixes (the spec + * isn't exactly perfect). I have run this on the 1.4.2 source + * and some nasty looking enums from 1.5, but have not really + * tested for 1.5 compatibility. + * + * I built this with: java -Xmx100M org.antlr.Tool java.g + * and got two errors that are ok (for now): + * java.g:691:9: Decision can match input such as + * "'0'..'9'{'E', 'e'}{'+', '-'}'0'..'9'{'D', 'F', 'd', 'f'}" + * using multiple alternatives: 3, 4 + * As a result, alternative(s) 4 were disabled for that input + * java.g:734:35: Decision can match input such as "{'$', 'A'..'Z', + * '_', 'a'..'z', '\u00C0'..'\u00D6', '\u00D8'..'\u00F6', + * '\u00F8'..'\u1FFF', '\u3040'..'\u318F', '\u3300'..'\u337F', + * '\u3400'..'\u3D2D', '\u4E00'..'\u9FFF', '\uF900'..'\uFAFF'}" + * using multiple alternatives: 1, 2 + * As a result, alternative(s) 2 were disabled for that input + * + * You can turn enum on/off as a keyword :) + * + * Version 1.0 -- initial release July 5, 2006 (requires 3.0b2 or higher) + * + * Primary author: Terence Parr, July 2006 + * + * Version 1.0.1 -- corrections by Koen Vanderkimpen & Marko van Dooren, + * October 25, 2006; + * fixed normalInterfaceDeclaration: now uses typeParameters instead + * of typeParameter (according to JLS, 3rd edition) + * fixed castExpression: no longer allows expression next to type + * (according to semantics in JLS, in contrast with syntax in JLS) + * + * Version 1.0.2 -- Terence Parr, Nov 27, 2006 + * java spec I built this from had some bizarre for-loop control. + * Looked weird and so I looked elsewhere...Yep, it's messed up. + * simplified. + * + * Version 1.0.3 -- Chris Hogue, Feb 26, 2007 + * Factored out an annotationName rule and used it in the annotation rule. + * Not sure why, but typeName wasn't recognizing references to inner + * annotations (e.g. @InterfaceName.InnerAnnotation()) + * Factored out the elementValue section of an annotation reference. Created + * elementValuePair and elementValuePairs rules, then used them in the + * annotation rule. Allows it to recognize annotation references with + * multiple, comma separated attributes. + * Updated elementValueArrayInitializer so that it allows multiple elements. + * (It was only allowing 0 or 1 element). + * Updated localVariableDeclaration to allow annotations. Interestingly the JLS + * doesn't appear to indicate this is legal, but it does work as of at least + * JDK 1.5.0_06. + * Moved the Identifier portion of annotationTypeElementRest to annotationMethodRest. + * Because annotationConstantRest already references variableDeclarator which + * has the Identifier portion in it, the parser would fail on constants in + * annotation definitions because it expected two identifiers. + * Added optional trailing ';' to the alternatives in annotationTypeElementRest. + * Wouldn't handle an inner interface that has a trailing ';'. + * Swapped the expression and type rule reference order in castExpression to + * make it check for genericized casts first. It was failing to recognize a + * statement like "Class TYPE = (Class)...;" because it was seeing + * 'Class'. + * Changed createdName to use typeArguments instead of nonWildcardTypeArguments. + * + * Changed the 'this' alternative in primary to allow 'identifierSuffix' rather than + * just 'arguments'. The case it couldn't handle was a call to an explicit + * generic method invocation (e.g. this.doSomething()). Using identifierSuffix + * may be overly aggressive--perhaps should create a more constrained thisSuffix rule? + * + * Version 1.0.4 -- Hiroaki Nakamura, May 3, 2007 + * + * Fixed formalParameterDecls, localVariableDeclaration, forInit, + * and forVarControl to use variableModifier* not 'final'? (annotation)? + * + * Version 1.0.5 -- Terence, June 21, 2007 + * --a[i].foo didn't work. Fixed unaryExpression + * + * Version 1.0.6 -- John Ridgway, March 17, 2008 + * Made "assert" a switchable keyword like "enum". + * Fixed compilationUnit to disallow "annotation importDeclaration ...". + * Changed "Identifier ('.' Identifier)*" to "qualifiedName" in more + * places. + * Changed modifier* and/or variableModifier* to classOrInterfaceModifiers, + * modifiers or variableModifiers, as appropriate. + * Renamed "bound" to "typeBound" to better match language in the JLS. + * Added "memberDeclaration" which rewrites to methodDeclaration or + * fieldDeclaration and pulled type into memberDeclaration. So we parse + * type and then move on to decide whether we're dealing with a field + * or a method. + * Modified "constructorDeclaration" to use "constructorBody" instead of + * "methodBody". constructorBody starts with explicitConstructorInvocation, + * then goes on to blockStatement*. Pulling explicitConstructorInvocation + * out of expressions allowed me to simplify "primary". + * Changed variableDeclarator to simplify it. + * Changed type to use classOrInterfaceType, thus simplifying it; of course + * I then had to add classOrInterfaceType, but it is used in several + * places. + * Fixed annotations, old version allowed "@X(y,z)", which is illegal. + * Added optional comma to end of "elementValueArrayInitializer"; as per JLS. + * Changed annotationTypeElementRest to use normalClassDeclaration and + * normalInterfaceDeclaration rather than classDeclaration and + * interfaceDeclaration, thus getting rid of a couple of grammar ambiguities. + * Split localVariableDeclaration into localVariableDeclarationStatement + * (includes the terminating semi-colon) and localVariableDeclaration. + * This allowed me to use localVariableDeclaration in "forInit" clauses, + * simplifying them. + * Changed switchBlockStatementGroup to use multiple labels. This adds an + * ambiguity, but if one uses appropriately greedy parsing it yields the + * parse that is closest to the meaning of the switch statement. + * Renamed "forVarControl" to "enhancedForControl" -- JLS language. + * Added semantic predicates to test for shift operations rather than other + * things. Thus, for instance, the string "< <" will never be treated + * as a left-shift operator. + * In "creator" we rule out "nonWildcardTypeArguments" on arrayCreation, + * which are illegal. + * Moved "nonWildcardTypeArguments into innerCreator. + * Removed 'super' superSuffix from explicitGenericInvocation, since that + * is only used in explicitConstructorInvocation at the beginning of a + * constructorBody. (This is part of the simplification of expressions + * mentioned earlier.) + * Simplified primary (got rid of those things that are only used in + * explicitConstructorInvocation). + * Lexer -- removed "Exponent?" from FloatingPointLiteral choice 4, since it + * led to an ambiguity. + * + * This grammar successfully parses every .java file in the JDK 1.5 source + * tree (excluding those whose file names include '-', which are not + * valid Java compilation units). + * + * Known remaining problems: + * "Letter" and "JavaIDDigit" are wrong. The actual specification of + * "Letter" should be "a character for which the method + * Character.isJavaIdentifierStart(int) returns true." A "Java + * letter-or-digit is a character for which the method + * Character.isJavaIdentifierPart(int) returns true." + */ + + + /* + This is a merged file, containing two versions of the Java.g grammar. + To extract a version from the file, run the ver.jar with the command provided below. + + Version 1 - tree building version, with all source level support, error recovery etc. + This is the version for compiler grammar workspace. + This version can be extracted by invoking: + java -cp ver.jar Main 1 true true true true true Java.g + + Version 2 - clean version, with no source leve support, no error recovery, no predicts, + assumes 1.6 level, works in Antlrworks. + This is the version for Alex. + This version can be extracted by invoking: + java -cp ver.jar Main 2 false false false false false Java.g +*/ + +parser grammar YangJavaParser; + +options { + tokenVocab = YangJavaLexer; +} + +/******************************************************************************************** + Parser section +*********************************************************************************************/ + +compilationUnit + : ( (annotations + )? + packageDeclaration + )? + (importDeclaration + )* + (typeDeclaration + )* + ; + +packageDeclaration + : 'package' qualifiedName + ';' + ; + +importDeclaration + : 'import' + ('static' + )? + IDENTIFIER '.' '*' + ';' + | 'import' + ('static' + )? + IDENTIFIER + ('.' IDENTIFIER + )+ + ('.' '*' + )? + ';' + ; + +qualifiedImportName + : IDENTIFIER + ('.' IDENTIFIER + )* + ; + +typeDeclaration + : classOrInterfaceDeclaration + | ';' + ; + +classOrInterfaceDeclaration + : classDeclaration + | interfaceDeclaration + ; + + +modifiers + : + ( annotation + | 'public' + | 'protected' + | 'private' + | 'static' + | 'abstract' + | 'final' + | 'native' + | 'synchronized' + | 'transient' + | 'volatile' + | 'strictfp' + )* + ; + + +variableModifiers + : ( 'final' + | annotation + )* + ; + + +classDeclaration + : normalClassDeclaration + | enumDeclaration + ; + +normalClassDeclaration + : modifiers 'class' IDENTIFIER + (typeParameters + )? + ('extends' type + )? + ('implements' typeList + )? + classBody + ; + + +typeParameters + : '<' + typeParameter + (',' typeParameter + )* + '>' + ; + +typeParameter + : IDENTIFIER + ('extends' typeBound + )? + ; + + +typeBound + : type + ('&' type + )* + ; + + +enumDeclaration + : modifiers + ('enum' + ) + IDENTIFIER + ('implements' typeList + )? + enumBody + ; + + +enumBody + : '{' + (enumConstants + )? + ','? + (enumBodyDeclarations + )? + '}' + ; + +enumConstants + : enumConstant + (',' enumConstant + )* + ; + +/** + * NOTE: here differs from the javac grammar, missing TypeArguments. + * EnumeratorDeclaration = AnnotationsOpt [TypeArguments] IDENTIFIER [ Arguments ] [ "{" ClassBody "}" ] + */ +enumConstant + : (annotations + )? + IDENTIFIER + (arguments + )? + (classBody + )? + /* TODO: $GScope::name = names.empty. enum constant body is actually + an anonymous class, where constructor isn't allowed, have to add this check*/ + ; + +enumBodyDeclarations + : ';' + (classBodyDeclaration + )* + ; + +interfaceDeclaration + : normalInterfaceDeclaration + | annotationTypeDeclaration + ; + +normalInterfaceDeclaration + : modifiers 'interface' IDENTIFIER + (typeParameters + )? + ('extends' typeList + )? + interfaceBody + ; + +typeList + : type + (',' type + )* + ; + +classBody + : '{' + (classBodyDeclaration + )* + '}' + ; + +interfaceBody + : '{' + interfaceBodyDeclaration* + '}' + ; + +classBodyDeclaration + : ';' + | ('static' + )? + block + | memberDecl + ; + +memberDecl + : fieldDeclaration + | methodDeclaration + | classDeclaration + | interfaceDeclaration + ; + + +methodDeclaration + : + /* For constructor, return type is null, name is 'init' */ + modifiers + (typeParameters + )? + IDENTIFIER + formalParameters + ('throws' qualifiedNameList + )? + '{' + (explicitConstructorInvocation + )? + (blockStatement + )* + '}' + | modifiers + (typeParameters + )? + (type + | 'void' + ) + IDENTIFIER + formalParameters + ('[' ']' + )* + ('throws' qualifiedNameList + )? + ( + block + | ';' + ) + ; + + +fieldDeclaration + : modifiers + type + variableDeclarator + (',' variableDeclarator + )* + ';' + ; + +variableDeclarator + : IDENTIFIER + ('[' ']' + )* + ('=' variableInitializer + )? + ; + +/** + *TODO: add predicates + */ +interfaceBodyDeclaration + : + interfaceFieldDeclaration + | interfaceMethodDeclaration + | interfaceDeclaration + | classDeclaration + | ';' + ; + +interfaceMethodDeclaration + : modifiers + (typeParameters + )? + (type + |'void' + ) + IDENTIFIER + formalParameters + ('[' ']' + )* + ('throws' qualifiedNameList + )? ';' + ; + +/** + * NOTE, should not use variableDeclarator here, as it doesn't necessary require + * an initializer, while an interface field does, or judge by the returned value. + * But this gives better diagnostic message, or antlr won't predict this rule. + */ +interfaceFieldDeclaration + : modifiers type variableDeclarator + (',' variableDeclarator + )* + ';' + ; + + +type + : classOrInterfaceType + ('[' ']' + )* + | primitiveType + ('[' ']' + )* + ; + + +classOrInterfaceType + : IDENTIFIER + (typeArguments + )? + ('.' IDENTIFIER + (typeArguments + )? + )* + ; + +primitiveType + : 'boolean' + | 'char' + | 'byte' + | 'short' + | 'int' + | 'long' + | 'float' + | 'double' + ; + +typeArguments + : '<' typeArgument + (',' typeArgument + )* + '>' + ; + +typeArgument + : type + | '?' + ( + ('extends' + |'super' + ) + type + )? + ; + +qualifiedNameList + : qualifiedName + (',' qualifiedName + )* + ; + +formalParameters + : '(' + (formalParameterDecls + )? + ')' + ; + +formalParameterDecls + : ellipsisParameterDecl + | normalParameterDecl + (',' normalParameterDecl + )* + | (normalParameterDecl + ',' + )+ + ellipsisParameterDecl + ; + +normalParameterDecl + : variableModifiers type IDENTIFIER + ('[' ']' + )* + ; + +ellipsisParameterDecl + : variableModifiers + type '...' + IDENTIFIER + ; + + +explicitConstructorInvocation + : (nonWildcardTypeArguments + )? //NOTE: the position of Identifier 'super' is set to the type args position here + ('this' + |'super' + ) + arguments ';' + + | primary + '.' + (nonWildcardTypeArguments + )? + 'super' + arguments ';' + ; + +qualifiedName + : IDENTIFIER + ('.' IDENTIFIER + )* + ; + +annotations + : (annotation + )+ + ; + +/** + * Using an annotation. + * '@' is flaged in modifier + */ +annotation + : '@' qualifiedName + ( '(' + ( elementValuePairs + | elementValue + )? + ')' + )? + ; + +elementValuePairs + : elementValuePair + (',' elementValuePair + )* + ; + +elementValuePair + : IDENTIFIER '=' elementValue + ; + +elementValue + : conditionalExpression + | annotation + | elementValueArrayInitializer + ; + +elementValueArrayInitializer + : '{' + (elementValue + (',' elementValue + )* + )? (',')? '}' + ; + + +/** + * Annotation declaration. + */ +annotationTypeDeclaration + : modifiers '@' + 'interface' + IDENTIFIER + annotationTypeBody + ; + + +annotationTypeBody + : '{' + (annotationTypeElementDeclaration + )* + '}' + ; + +/** + * NOTE: here use interfaceFieldDeclaration for field declared inside annotation. they are sytactically the same. + */ +annotationTypeElementDeclaration + : annotationMethodDeclaration + | interfaceFieldDeclaration + | normalClassDeclaration + | normalInterfaceDeclaration + | enumDeclaration + | annotationTypeDeclaration + | ';' + ; + +annotationMethodDeclaration + : modifiers type IDENTIFIER + '(' ')' ('default' elementValue + )? + ';' + ; + +block + : '{' + (blockStatement + )* + '}' + ; + +/* +staticBlock returns [JCBlock tree] + @init { + ListBuffer stats = new ListBuffer(); + int pos = ((AntlrJavacToken) $start).getStartIndex(); + } + @after { + $tree = T.at(pos).Block(Flags.STATIC, stats.toList()); + pu.storeEnd($tree, $stop); + // construct a dummy static modifiers for end position + pu.storeEnd(T.at(pos).Modifiers(Flags.STATIC, com.sun.tools.javac.util.List.nil()),$st); + } + : st_1='static' '{' + (blockStatement + { + if ($blockStatement.tree == null) { + stats.appendList($blockStatement.list); + } else { + stats.append($blockStatement.tree); + } + } + )* '}' + ; +*/ +blockStatement + : localVariableDeclarationStatement + | classOrInterfaceDeclaration + | statement + ; + + +localVariableDeclarationStatement + : localVariableDeclaration + ';' + ; + +localVariableDeclaration + : variableModifiers type + variableDeclarator + (',' variableDeclarator + )* + ; + +statement + : block + + | ('assert' + ) + expression (':' expression)? ';' + | 'assert' expression (':' expression)? ';' + | 'if' parExpression statement ('else' statement)? + | forstatement + | 'while' parExpression statement + | 'do' statement 'while' parExpression ';' + | trystatement + | 'switch' parExpression '{' switchBlockStatementGroups '}' + | 'synchronized' parExpression block + | 'return' (expression )? ';' + | 'throw' expression ';' + | 'break' + (IDENTIFIER + )? ';' + | 'continue' + (IDENTIFIER + )? ';' + | expression ';' + | IDENTIFIER ':' statement + | ';' + + ; + +switchBlockStatementGroups + : (switchBlockStatementGroup )* + ; + +switchBlockStatementGroup + : + switchLabel + (blockStatement + )* + ; + +switchLabel + : 'case' expression ':' + | 'default' ':' + ; + + +trystatement + : 'try' block + ( catches 'finally' block + | catches + | 'finally' block + ) + ; + +catches + : catchClause + (catchClause + )* + ; + +catchClause + : 'catch' '(' formalParameter + ')' block + ; + +formalParameter + : variableModifiers type IDENTIFIER + ('[' ']' + )* + ; + +forstatement + : + // enhanced for loop + 'for' '(' variableModifiers type IDENTIFIER ':' + expression ')' statement + + // normal for loop + | 'for' '(' + (forInit + )? ';' + (expression + )? ';' + (expressionList + )? ')' statement + ; + +forInit + : localVariableDeclaration + | expressionList + ; + +parExpression + : '(' expression ')' + ; + +expressionList + : expression + (',' expression + )* + ; + + +expression + : conditionalExpression + (assignmentOperator expression + )? + ; + + +assignmentOperator + : '=' + | '+=' + | '-=' + | '*=' + | '/=' + | '&=' + | '|=' + | '^=' + | '%=' + | '<' '<' '=' + | '>' '>' '>' '=' + | '>' '>' '=' + ; + + +conditionalExpression + : conditionalOrExpression + ('?' expression ':' conditionalExpression + )? + ; + +conditionalOrExpression + : conditionalAndExpression + ('||' conditionalAndExpression + )* + ; + +conditionalAndExpression + : inclusiveOrExpression + ('&&' inclusiveOrExpression + )* + ; + +inclusiveOrExpression + : exclusiveOrExpression + ('|' exclusiveOrExpression + )* + ; + +exclusiveOrExpression + : andExpression + ('^' andExpression + )* + ; + +andExpression + : equalityExpression + ('&' equalityExpression + )* + ; + +equalityExpression + : instanceOfExpression + ( + ( '==' + | '!=' + ) + instanceOfExpression + )* + ; + +instanceOfExpression + : relationalExpression + ('instanceof' type + )? + ; + +relationalExpression + : shiftExpression + (relationalOp shiftExpression + )* + ; + +relationalOp + : '<' '=' + | '>' '=' + | '<' + | '>' + ; + +shiftExpression + : additiveExpression + (shiftOp additiveExpression + )* + ; + + +shiftOp + : '<' '<' + | '>' '>' '>' + | '>' '>' + ; + + +additiveExpression + : multiplicativeExpression + ( + ( '+' + | '-' + ) + multiplicativeExpression + )* + ; + +multiplicativeExpression + : + unaryExpression + ( + ( '*' + | '/' + | '%' + ) + unaryExpression + )* + ; + +/** + * NOTE: for '+' and '-', if the next token is int or long interal, then it's not a unary expression. + * it's a literal with signed value. INTLTERAL AND LONG LITERAL are added here for this. + */ +unaryExpression + : '+' unaryExpression + | '-' unaryExpression + | '++' unaryExpression + | '--' unaryExpression + | unaryExpressionNotPlusMinus + ; + +unaryExpressionNotPlusMinus + : '~' unaryExpression + | '!' unaryExpression + | castExpression + | primary + (selector + )* + ( '++' + | '--' + )? + ; + +castExpression + : '(' primitiveType ')' unaryExpression + | '(' type ')' unaryExpressionNotPlusMinus + ; + +/** + * have to use scope here, parameter passing isn't well supported in antlr. + */ +primary + : parExpression + | 'this' + ('.' IDENTIFIER + )* + (identifierSuffix + )? + | IDENTIFIER + ('.' IDENTIFIER + )* + (identifierSuffix + )? + | 'super' + superSuffix + | literal + | creator + | primitiveType + ('[' ']' + )* + '.' 'class' + | 'void' '.' 'class' + ; + + +superSuffix + : arguments + | '.' (typeArguments + )? + IDENTIFIER + (arguments + )? + ; + + +identifierSuffix + : ('[' ']' + )+ + '.' 'class' + | ('[' expression ']' + )+ + | arguments + | '.' 'class' + | '.' nonWildcardTypeArguments IDENTIFIER arguments + | '.' 'this' + | '.' 'super' arguments + | innerCreator + ; + + +selector + : '.' IDENTIFIER + (arguments + )? + | '.' 'this' + | '.' 'super' + superSuffix + | innerCreator + | '[' expression ']' + ; + +creator + : 'new' nonWildcardTypeArguments classOrInterfaceType classCreatorRest + | 'new' classOrInterfaceType classCreatorRest + | arrayCreator + ; + +arrayCreator + : 'new' createdName + '[' ']' + ('[' ']' + )* + arrayInitializer + + | 'new' createdName + '[' expression + ']' + ( '[' expression + ']' + )* + ('[' ']' + )* + ; + +variableInitializer + : arrayInitializer + | expression + ; + +arrayInitializer + : '{' + (variableInitializer + (',' variableInitializer + )* + )? + (',')? + '}' //Yang's fix, position change. + ; + + +createdName + : classOrInterfaceType + | primitiveType + ; + +innerCreator + : '.' 'new' + (nonWildcardTypeArguments + )? + IDENTIFIER + (typeArguments + )? + classCreatorRest + ; + + +classCreatorRest + : arguments + (classBody + )? + ; + + +nonWildcardTypeArguments + : '<' typeList + '>' + ; + +arguments + : '(' (expressionList + )? ')' + ; + +literal + : INTLITERAL + | LONGLITERAL + | FLOATLITERAL + | DOUBLELITERAL + | CHARLITERAL + | STRINGLITERAL + | TRUE + | FALSE + | NULL + ; + diff --git a/tool/playground/YangJavaParser.java b/tool/playground/YangJavaParser.java new file mode 100644 index 000000000..009921892 --- /dev/null +++ b/tool/playground/YangJavaParser.java @@ -0,0 +1,5530 @@ +// $ANTLR ANTLRVersion> YangJavaParser.java generatedTimestamp> +import org.antlr.v4.runtime.NoViableAltException; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.EarlyExitException; +import org.antlr.v4.runtime.ParserSharedState; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.FailedPredicateException; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + +public class YangJavaParser extends Parser { + public static final int + EOR=1, PACKAGE=44, LT=105, STAR=88, WHILE=62, CONST=22, CASE=18, + NEW=43, CHAR=20, DO=25, BREAK=16, LBRACKET=70, FINAL=30, RPAREN=67, + IMPORT=37, SUBSUB=85, STAREQ=96, CARET=92, RETURN=48, THIS=55, DOUBLE=26, + MONKEYS_AT=102, BARBAR=83, VOID=60, SUPER=52, GOTO=34, EQ=76, COMMENT=11, + AMPAMP=82, QUES=79, EQEQ=81, RBRACE=69, LINE_COMMENT=12, STATIC=50, + PRIVATE=45, SWITCH=53, NULL=65, STRICTFP=51, ELSE=27, DOUBLELITERAL=7, + NATIVE=42, ELLIPSIS=75, THROWS=57, INT=39, SLASHEQ=97, INTLITERAL=5, + ASSERT=14, TRY=59, LONGLITERAL=4, WS=10, CHARLITERAL=8, GT=104, + CATCH=19, FALSE=64, THROW=56, PROTECTED=46, CLASS=21, BAREQ=99, + AMP=90, PLUSPLUS=84, LBRACE=68, SUBEQ=95, FOR=33, SUB=87, FLOAT=32, + ABSTRACT=13, PLUSEQ=94, LPAREN=66, IF=35, BOOLEAN=15, SYNCHRONIZED=54, + SLASH=89, IMPLEMENTS=36, CONTINUE=23, COMMA=73, AMPEQ=98, IDENTIFIER=106, + TRANSIENT=58, TILDE=78, BANGEQ=103, PLUS=86, RBRACKET=71, DOT=74, + BYTE=17, PERCENT=93, VOLATILE=61, DEFAULT=24, SHORT=49, BANG=77, + INSTANCEOF=38, TRUE=63, SEMI=72, COLON=80, ENUM=28, PERCENTEQ=101, + FINALLY=31, STRINGLITERAL=9, CARETEQ=100, INTERFACE=40, LONG=41, + PUBLIC=47, EXTENDS=29, FLOATLITERAL=6, BAR=91; + public static final String[] tokenNames = { + "", "", "", + "EOR", "LONGLITERAL", "INTLITERAL", "FLOATLITERAL", "DOUBLELITERAL", + "CHARLITERAL", "STRINGLITERAL", "WS", "COMMENT", "LINE_COMMENT", + "'abstract'", "'assert'", "'boolean'", "'break'", "'byte'", "'case'", + "'catch'", "'char'", "'class'", "'const'", "'continue'", "'default'", + "'do'", "'double'", "'else'", "'enum'", "'extends'", "'final'", + "'finally'", "'float'", "'for'", "'goto'", "'if'", "'implements'", + "'import'", "'instanceof'", "'int'", "'interface'", "'long'", "'native'", + "'new'", "'package'", "'private'", "'protected'", "'public'", "'return'", + "'short'", "'static'", "'strictfp'", "'super'", "'switch'", "'synchronized'", + "'this'", "'throw'", "'throws'", "'transient'", "'try'", "'void'", + "'volatile'", "'while'", "'true'", "'false'", "'null'", "'('", "')'", + "'{'", "'}'", "'['", "']'", "';'", "','", "'.'", "'...'", "'='", + "'!'", "'~'", "'?'", "':'", "'=='", "'&&'", "'||'", "'++'", "'--'", + "'+'", "'-'", "'*'", "'/'", "'&'", "'|'", "'^'", "'%'", "'+='", + "'-='", "'*='", "'/='", "'&='", "'|='", "'^='", "'%='", "'@'", "'!='", + "'<'", "'>'", "IDENTIFIER" + }; + public static final String[] ruleNames = { + "", + "compilationUnit", "packageDeclaration", "importDeclaration", "qualifiedImportName", + "typeDeclaration", "classOrInterfaceDeclaration", "modifiers", "variableModifiers", + "classDeclaration", "normalClassDeclaration", "typeParameters", + "typeParameter", "typeBound", "enumDeclaration", "enumBody", "enumConstants", + "enumConstant", "enumBodyDeclarations", "interfaceDeclaration", + "normalInterfaceDeclaration", "typeList", "classBody", "interfaceBody", + "classBodyDeclaration", "memberDecl", "methodDeclaration", "fieldDeclaration", + "variableDeclarator", "interfaceBodyDeclaration", "interfaceMethodDeclaration", + "interfaceFieldDeclaration", "type", "classOrInterfaceType", "primitiveType", + "typeArguments", "typeArgument", "qualifiedNameList", "formalParameters", + "formalParameterDecls", "normalParameterDecl", "ellipsisParameterDecl", + "explicitConstructorInvocation", "qualifiedName", "annotations", + "annotation", "elementValuePairs", "elementValuePair", "elementValue", + "elementValueArrayInitializer", "annotationTypeDeclaration", "annotationTypeBody", + "annotationTypeElementDeclaration", "annotationMethodDeclaration", + "block", "blockStatement", "localVariableDeclarationStatement", + "localVariableDeclaration", "statement", "switchBlockStatementGroups", + "switchBlockStatementGroup", "switchLabel", "trystatement", "catches", + "catchClause", "formalParameter", "forstatement", "forInit", "parExpression", + "expressionList", "expression", "assignmentOperator", "conditionalExpression", + "conditionalOrExpression", "conditionalAndExpression", "inclusiveOrExpression", + "exclusiveOrExpression", "andExpression", "equalityExpression", + "instanceOfExpression", "relationalExpression", "relationalOp", + "shiftExpression", "shiftOp", "additiveExpression", "multiplicativeExpression", + "unaryExpression", "unaryExpressionNotPlusMinus", "castExpression", + "primary", "superSuffix", "identifierSuffix", "selector", "creator", + "arrayCreator", "variableInitializer", "arrayInitializer", "createdName", + "innerCreator", "classCreatorRest", "nonWildcardTypeArguments", + "arguments", "literal" + }; + public YangJavaParser(TokenStream input) { + this(input, new ParserSharedState()); + } + public YangJavaParser(TokenStream input, ParserSharedState state) { + super(input, state); + _interp = new ParserInterpreter(this,_ATN); + } + + public final ParserRuleContext compilationUnit(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 0); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[1]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,1,_ctx) ) { + case 1: + _la = state.input.LA(1); + if ( _la==MONKEYS_AT ) { + _ctx.s = 204; + annotations(_ctx); + } + + _ctx.s = 208; + packageDeclaration(_ctx); + break; + } + _la = state.input.LA(1); + while ( _la==IMPORT ) { + _ctx.s = 212; + importDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_2); + } + _la = state.input.LA(1); + while ( _la==ABSTRACT || _la==CLASS || _la==ENUM || _la==FINAL || _la==INTERFACE || _la==NATIVE || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==STATIC || _la==STRICTFP || _la==SYNCHRONIZED || _la==TRANSIENT || _la==VOLATILE || _la==SEMI || _la==MONKEYS_AT ) { + _ctx.s = 218; + typeDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_compilationUnit_iter_3); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[1]); + } + return _ctx; + } + + + public final ParserRuleContext packageDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 2); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[2]); + try { + _ctx.s = 224; + match(PACKAGE); + _ctx.s = 226; + qualifiedName(_ctx); + _ctx.s = 228; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[2]); + } + return _ctx; + } + + + public final ParserRuleContext importDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 4); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[3]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,10,_ctx) ) { + case 1: + _ctx.s = 230; + match(IMPORT); + _la = state.input.LA(1); + if ( _la==STATIC ) { + _ctx.s = 232; + match(STATIC); + } + + _ctx.s = 236; + match(IDENTIFIER); + _ctx.s = 238; + match(DOT); + _ctx.s = 240; + match(STAR); + _ctx.s = 242; + match(SEMI); + break; + case 2: + _ctx.s = 244; + match(IMPORT); + _la = state.input.LA(1); + if ( _la==STATIC ) { + _ctx.s = 246; + match(STATIC); + } + + _ctx.s = 250; + match(IDENTIFIER); + int _alt109 = _interp.adaptivePredict(state.input,8,_ctx); + do { + switch ( _alt109 ) { + case 1: + _ctx.s = 252; + match(DOT); + _ctx.s = 254; + match(IDENTIFIER); + break; + default : + throw new NoViableAltException(this); + } + _alt109 = _interp.adaptivePredict(state.input,8,_ctx); + } while ( _alt109!=2 ); + _la = state.input.LA(1); + if ( _la==DOT ) { + _ctx.s = 260; + match(DOT); + _ctx.s = 262; + match(STAR); + } + + _ctx.s = 266; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[3]); + } + return _ctx; + } + + + public final ParserRuleContext qualifiedImportName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 6); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[4]); + int _la; + try { + _ctx.s = 270; + match(IDENTIFIER); + _la = state.input.LA(1); + while ( _la==DOT ) { + _ctx.s = 272; + match(DOT); + _ctx.s = 274; + match(IDENTIFIER); + _la = state.input.LA(1); + //sync(EXPECTING_in_qualifiedImportName_iter_11); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[4]); + } + return _ctx; + } + + + public final ParserRuleContext typeDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 8); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[5]); + try { + switch ( state.input.LA(1) ) { + case ABSTRACT: + case CLASS: + case ENUM: + case FINAL: + case INTERFACE: + case NATIVE: + case PRIVATE: + case PROTECTED: + case PUBLIC: + case STATIC: + case STRICTFP: + case SYNCHRONIZED: + case TRANSIENT: + case VOLATILE: + case MONKEYS_AT: + _ctx.s = 280; + classOrInterfaceDeclaration(_ctx); + break; + case SEMI: + _ctx.s = 282; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[5]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 10); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[6]); + try { + switch ( _interp.adaptivePredict(state.input,13,_ctx) ) { + case 1: + _ctx.s = 286; + classDeclaration(_ctx); + break; + case 2: + _ctx.s = 288; + interfaceDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[6]); + } + return _ctx; + } + + + public final ParserRuleContext modifiers(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 12); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[7]); + try { + int _alt216 = _interp.adaptivePredict(state.input,14,_ctx); + while ( _alt216!=13 ) { + switch ( _alt216 ) { + case 1: + _ctx.s = 292; + annotation(_ctx); + break; + case 2: + _ctx.s = 294; + match(PUBLIC); + break; + case 3: + _ctx.s = 296; + match(PROTECTED); + break; + case 4: + _ctx.s = 298; + match(PRIVATE); + break; + case 5: + _ctx.s = 300; + match(STATIC); + break; + case 6: + _ctx.s = 302; + match(ABSTRACT); + break; + case 7: + _ctx.s = 304; + match(FINAL); + break; + case 8: + _ctx.s = 306; + match(NATIVE); + break; + case 9: + _ctx.s = 308; + match(SYNCHRONIZED); + break; + case 10: + _ctx.s = 310; + match(TRANSIENT); + break; + case 11: + _ctx.s = 312; + match(VOLATILE); + break; + case 12: + _ctx.s = 314; + match(STRICTFP); + break; + } + _alt216 = _interp.adaptivePredict(state.input,14,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[7]); + } + return _ctx; + } + + + public final ParserRuleContext variableModifiers(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 14); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[8]); + try { + loop233: + while (true) { + switch ( state.input.LA(1) ) { + case FINAL: + _ctx.s = 320; + match(FINAL); + break; + case MONKEYS_AT: + _ctx.s = 322; + annotation(_ctx); + break; + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + case IDENTIFIER: + break loop233; + } + // + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[8]); + } + return _ctx; + } + + + public final ParserRuleContext classDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 16); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[9]); + try { + switch ( _interp.adaptivePredict(state.input,16,_ctx) ) { + case 1: + _ctx.s = 328; + normalClassDeclaration(_ctx); + break; + case 2: + _ctx.s = 330; + enumDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[9]); + } + return _ctx; + } + + + public final ParserRuleContext normalClassDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 18); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[10]); + int _la; + try { + _ctx.s = 334; + modifiers(_ctx); + _ctx.s = 336; + match(CLASS); + _ctx.s = 338; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 340; + typeParameters(_ctx); + } + + _la = state.input.LA(1); + if ( _la==EXTENDS ) { + _ctx.s = 344; + match(EXTENDS); + _ctx.s = 346; + type(_ctx); + } + + _la = state.input.LA(1); + if ( _la==IMPLEMENTS ) { + _ctx.s = 350; + match(IMPLEMENTS); + _ctx.s = 352; + typeList(_ctx); + } + + _ctx.s = 356; + classBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[10]); + } + return _ctx; + } + + + public final ParserRuleContext typeParameters(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 20); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[11]); + int _la; + try { + _ctx.s = 358; + match(GT); + _ctx.s = 360; + typeParameter(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 362; + match(COMMA); + _ctx.s = 364; + typeParameter(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeParameters_iter_20); + } + _ctx.s = 370; + match(LT); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[11]); + } + return _ctx; + } + + + public final ParserRuleContext typeParameter(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 22); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[12]); + int _la; + try { + _ctx.s = 372; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==EXTENDS ) { + _ctx.s = 374; + match(EXTENDS); + _ctx.s = 376; + typeBound(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[12]); + } + return _ctx; + } + + + public final ParserRuleContext typeBound(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 24); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[13]); + int _la; + try { + _ctx.s = 380; + type(_ctx); + _la = state.input.LA(1); + while ( _la==AMP ) { + _ctx.s = 382; + match(AMP); + _ctx.s = 384; + type(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeBound_iter_22); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[13]); + } + return _ctx; + } + + + public final ParserRuleContext enumDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 26); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[14]); + int _la; + try { + _ctx.s = 390; + modifiers(_ctx); + _ctx.s = 392; + match(ENUM); + _ctx.s = 394; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==IMPLEMENTS ) { + _ctx.s = 396; + match(IMPLEMENTS); + _ctx.s = 398; + typeList(_ctx); + } + + _ctx.s = 402; + enumBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[14]); + } + return _ctx; + } + + + public final ParserRuleContext enumBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 28); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[15]); + int _la; + try { + _ctx.s = 404; + match(LBRACE); + _la = state.input.LA(1); + if ( _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 406; + enumConstants(_ctx); + } + + _la = state.input.LA(1); + if ( _la==COMMA ) { + _ctx.s = 410; + match(COMMA); + } + + _la = state.input.LA(1); + if ( _la==SEMI ) { + _ctx.s = 414; + enumBodyDeclarations(_ctx); + } + + _ctx.s = 418; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[15]); + } + return _ctx; + } + + + public final ParserRuleContext enumConstants(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 30); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[16]); + try { + _ctx.s = 420; + enumConstant(_ctx); + int _alt399 = _interp.adaptivePredict(state.input,27,_ctx); + while ( _alt399!=2 ) { + switch ( _alt399 ) { + case 1: + _ctx.s = 422; + match(COMMA); + _ctx.s = 424; + enumConstant(_ctx); + break; + } + _alt399 = _interp.adaptivePredict(state.input,27,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[16]); + } + return _ctx; + } + + + public final ParserRuleContext enumConstant(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 32); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[17]); + int _la; + try { + _la = state.input.LA(1); + if ( _la==MONKEYS_AT ) { + _ctx.s = 430; + annotations(_ctx); + } + + _ctx.s = 434; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==LPAREN ) { + _ctx.s = 436; + arguments(_ctx); + } + + _la = state.input.LA(1); + if ( _la==LBRACE ) { + _ctx.s = 440; + classBody(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[17]); + } + return _ctx; + } + + + public final ParserRuleContext enumBodyDeclarations(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 34); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[18]); + int _la; + try { + _ctx.s = 444; + match(SEMI); + _la = state.input.LA(1); + while ( _la==ABSTRACT || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==CLASS || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SYNCHRONIZED || _la==TRANSIENT || _la==VOID || _la==VOLATILE || _la==LBRACE || _la==SEMI || _la==MONKEYS_AT || _la==GT || _la==IDENTIFIER ) { + _ctx.s = 446; + classBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_enumBodyDeclarations_iter_31); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[18]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 36); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[19]); + try { + switch ( _interp.adaptivePredict(state.input,32,_ctx) ) { + case 1: + _ctx.s = 452; + normalInterfaceDeclaration(_ctx); + break; + case 2: + _ctx.s = 454; + annotationTypeDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[19]); + } + return _ctx; + } + + + public final ParserRuleContext normalInterfaceDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 38); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[20]); + int _la; + try { + _ctx.s = 458; + modifiers(_ctx); + _ctx.s = 460; + match(INTERFACE); + _ctx.s = 462; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 464; + typeParameters(_ctx); + } + + _la = state.input.LA(1); + if ( _la==EXTENDS ) { + _ctx.s = 468; + match(EXTENDS); + _ctx.s = 470; + typeList(_ctx); + } + + _ctx.s = 474; + interfaceBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[20]); + } + return _ctx; + } + + + public final ParserRuleContext typeList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 40); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[21]); + int _la; + try { + _ctx.s = 476; + type(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 478; + match(COMMA); + _ctx.s = 480; + type(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeList_iter_35); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[21]); + } + return _ctx; + } + + + public final ParserRuleContext classBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 42); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[22]); + int _la; + try { + _ctx.s = 486; + match(LBRACE); + _la = state.input.LA(1); + while ( _la==ABSTRACT || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==CLASS || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SYNCHRONIZED || _la==TRANSIENT || _la==VOID || _la==VOLATILE || _la==LBRACE || _la==SEMI || _la==MONKEYS_AT || _la==GT || _la==IDENTIFIER ) { + _ctx.s = 488; + classBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_classBody_iter_36); + } + _ctx.s = 494; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[22]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 44); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[23]); + int _la; + try { + _ctx.s = 496; + match(LBRACE); + _la = state.input.LA(1); + while ( _la==ABSTRACT || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==CLASS || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SYNCHRONIZED || _la==TRANSIENT || _la==VOID || _la==VOLATILE || _la==SEMI || _la==MONKEYS_AT || _la==GT || _la==IDENTIFIER ) { + _ctx.s = 498; + interfaceBodyDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_interfaceBody_iter_37); + } + _ctx.s = 504; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[23]); + } + return _ctx; + } + + + public final ParserRuleContext classBodyDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 46); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[24]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,39,_ctx) ) { + case 1: + _ctx.s = 506; + match(SEMI); + break; + case 2: + _la = state.input.LA(1); + if ( _la==STATIC ) { + _ctx.s = 508; + match(STATIC); + } + + _ctx.s = 512; + block(_ctx); + break; + case 3: + _ctx.s = 514; + memberDecl(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[24]); + } + return _ctx; + } + + + public final ParserRuleContext memberDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 48); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[25]); + try { + switch ( _interp.adaptivePredict(state.input,40,_ctx) ) { + case 1: + _ctx.s = 518; + fieldDeclaration(_ctx); + break; + case 2: + _ctx.s = 520; + methodDeclaration(_ctx); + break; + case 3: + _ctx.s = 522; + classDeclaration(_ctx); + break; + case 4: + _ctx.s = 524; + interfaceDeclaration(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[25]); + } + return _ctx; + } + + + public final ParserRuleContext methodDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 50); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[26]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,50,_ctx) ) { + case 1: + _ctx.s = 528; + modifiers(_ctx); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 530; + typeParameters(_ctx); + } + + _ctx.s = 534; + match(IDENTIFIER); + _ctx.s = 536; + formalParameters(_ctx); + _la = state.input.LA(1); + if ( _la==THROWS ) { + _ctx.s = 538; + match(THROWS); + _ctx.s = 540; + qualifiedNameList(_ctx); + } + + _ctx.s = 544; + match(LBRACE); + switch ( _interp.adaptivePredict(state.input,43,_ctx) ) { + case 1: + _ctx.s = 546; + explicitConstructorInvocation(_ctx); + break; + } + _la = state.input.LA(1); + while ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==ABSTRACT || _la==ASSERT || _la==BOOLEAN || _la==BREAK || _la==BYTE || _la==CHAR || _la==CLASS || _la==CONTINUE || _la==DO || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==FOR || _la==IF || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==NEW || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==RETURN || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SUPER || _la==SWITCH || _la==SYNCHRONIZED || _la==THIS || _la==THROW || _la==TRANSIENT || _la==TRY || _la==VOID || _la==VOLATILE || _la==WHILE || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==LBRACE || _la==SEMI || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 550; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_methodDeclaration_iter_44); + } + _ctx.s = 556; + match(RBRACE); + break; + case 2: + _ctx.s = 558; + modifiers(_ctx); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 560; + typeParameters(_ctx); + } + + switch ( state.input.LA(1) ) { + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + case IDENTIFIER: + _ctx.s = 564; + type(_ctx); + break; + case VOID: + _ctx.s = 566; + match(VOID); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 570; + match(IDENTIFIER); + _ctx.s = 572; + formalParameters(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 574; + match(LBRACKET); + _ctx.s = 576; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_methodDeclaration_iter_47); + } + _la = state.input.LA(1); + if ( _la==THROWS ) { + _ctx.s = 582; + match(THROWS); + _ctx.s = 584; + qualifiedNameList(_ctx); + } + + switch ( state.input.LA(1) ) { + case LBRACE: + _ctx.s = 588; + block(_ctx); + break; + case SEMI: + _ctx.s = 590; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[26]); + } + return _ctx; + } + + + public final ParserRuleContext fieldDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 52); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[27]); + int _la; + try { + _ctx.s = 596; + modifiers(_ctx); + _ctx.s = 598; + type(_ctx); + _ctx.s = 600; + variableDeclarator(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 602; + match(COMMA); + _ctx.s = 604; + variableDeclarator(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_fieldDeclaration_iter_51); + } + _ctx.s = 610; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[27]); + } + return _ctx; + } + + + public final ParserRuleContext variableDeclarator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 54); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[28]); + int _la; + try { + _ctx.s = 612; + match(IDENTIFIER); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 614; + match(LBRACKET); + _ctx.s = 616; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_variableDeclarator_iter_52); + } + _la = state.input.LA(1); + if ( _la==EQ ) { + _ctx.s = 622; + match(EQ); + _ctx.s = 624; + variableInitializer(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[28]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceBodyDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 56); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[29]); + try { + switch ( _interp.adaptivePredict(state.input,54,_ctx) ) { + case 1: + _ctx.s = 628; + interfaceFieldDeclaration(_ctx); + break; + case 2: + _ctx.s = 630; + interfaceMethodDeclaration(_ctx); + break; + case 3: + _ctx.s = 632; + interfaceDeclaration(_ctx); + break; + case 4: + _ctx.s = 634; + classDeclaration(_ctx); + break; + case 5: + _ctx.s = 636; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[29]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceMethodDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 58); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[30]); + int _la; + try { + _ctx.s = 640; + modifiers(_ctx); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 642; + typeParameters(_ctx); + } + + switch ( state.input.LA(1) ) { + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + case IDENTIFIER: + _ctx.s = 646; + type(_ctx); + break; + case VOID: + _ctx.s = 648; + match(VOID); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 652; + match(IDENTIFIER); + _ctx.s = 654; + formalParameters(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 656; + match(LBRACKET); + _ctx.s = 658; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_interfaceMethodDeclaration_iter_57); + } + _la = state.input.LA(1); + if ( _la==THROWS ) { + _ctx.s = 664; + match(THROWS); + _ctx.s = 666; + qualifiedNameList(_ctx); + } + + _ctx.s = 670; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[30]); + } + return _ctx; + } + + + public final ParserRuleContext interfaceFieldDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 60); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[31]); + int _la; + try { + _ctx.s = 672; + modifiers(_ctx); + _ctx.s = 674; + type(_ctx); + _ctx.s = 676; + variableDeclarator(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 678; + match(COMMA); + _ctx.s = 680; + variableDeclarator(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_interfaceFieldDeclaration_iter_59); + } + _ctx.s = 686; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[31]); + } + return _ctx; + } + + + public final ParserRuleContext type(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 62); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[32]); + int _la; + try { + switch ( state.input.LA(1) ) { + case IDENTIFIER: + _ctx.s = 688; + classOrInterfaceType(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 690; + match(LBRACKET); + _ctx.s = 692; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_type_iter_60); + } + break; + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + _ctx.s = 698; + primitiveType(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 700; + match(LBRACKET); + _ctx.s = 702; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_type_iter_61); + } + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[32]); + } + return _ctx; + } + + + public final ParserRuleContext classOrInterfaceType(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 64); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[33]); + int _la; + try { + _ctx.s = 710; + match(IDENTIFIER); + switch ( _interp.adaptivePredict(state.input,63,_ctx) ) { + case 1: + _ctx.s = 712; + typeArguments(_ctx); + break; + } + _la = state.input.LA(1); + while ( _la==DOT ) { + _ctx.s = 716; + match(DOT); + _ctx.s = 718; + match(IDENTIFIER); + switch ( _interp.adaptivePredict(state.input,64,_ctx) ) { + case 1: + _ctx.s = 720; + typeArguments(_ctx); + break; + } + _la = state.input.LA(1); + //sync(EXPECTING_in_classOrInterfaceType_iter_65); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[33]); + } + return _ctx; + } + + + public final ParserRuleContext primitiveType(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 66); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[34]); + try { + switch ( state.input.LA(1) ) { + case BOOLEAN: + _ctx.s = 728; + match(BOOLEAN); + break; + case CHAR: + _ctx.s = 730; + match(CHAR); + break; + case BYTE: + _ctx.s = 732; + match(BYTE); + break; + case SHORT: + _ctx.s = 734; + match(SHORT); + break; + case INT: + _ctx.s = 736; + match(INT); + break; + case LONG: + _ctx.s = 738; + match(LONG); + break; + case FLOAT: + _ctx.s = 740; + match(FLOAT); + break; + case DOUBLE: + _ctx.s = 742; + match(DOUBLE); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[34]); + } + return _ctx; + } + + + public final ParserRuleContext typeArguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 68); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[35]); + int _la; + try { + _ctx.s = 746; + match(GT); + _ctx.s = 748; + typeArgument(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 750; + match(COMMA); + _ctx.s = 752; + typeArgument(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_typeArguments_iter_67); + } + _ctx.s = 758; + match(LT); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[35]); + } + return _ctx; + } + + + public final ParserRuleContext typeArgument(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 70); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[36]); + int _la; + try { + switch ( state.input.LA(1) ) { + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + case IDENTIFIER: + _ctx.s = 760; + type(_ctx); + break; + case QUES: + _ctx.s = 762; + match(QUES); + _la = state.input.LA(1); + if ( _la==EXTENDS || _la==SUPER ) { + switch ( state.input.LA(1) ) { + case EXTENDS: + _ctx.s = 764; + match(EXTENDS); + break; + case SUPER: + _ctx.s = 766; + match(SUPER); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 770; + type(_ctx); + } + + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[36]); + } + return _ctx; + } + + + public final ParserRuleContext qualifiedNameList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 72); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[37]); + int _la; + try { + _ctx.s = 776; + qualifiedName(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 778; + match(COMMA); + _ctx.s = 780; + qualifiedName(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_qualifiedNameList_iter_71); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[37]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameters(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 74); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[38]); + int _la; + try { + _ctx.s = 786; + match(LPAREN); + _la = state.input.LA(1); + if ( _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FINAL || _la==FLOAT || _la==INT || _la==LONG || _la==SHORT || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 788; + formalParameterDecls(_ctx); + } + + _ctx.s = 792; + match(RPAREN); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[38]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameterDecls(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 76); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[39]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,77,_ctx) ) { + case 1: + _ctx.s = 794; + ellipsisParameterDecl(_ctx); + break; + case 2: + _ctx.s = 796; + normalParameterDecl(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 798; + match(COMMA); + _ctx.s = 800; + normalParameterDecl(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_formalParameterDecls_iter_73); + } + break; + case 3: + int _alt1004 = _interp.adaptivePredict(state.input,76,_ctx); + do { + switch ( _alt1004 ) { + case 1: + _ctx.s = 806; + normalParameterDecl(_ctx); + _ctx.s = 808; + match(COMMA); + break; + default : + throw new NoViableAltException(this); + } + _alt1004 = _interp.adaptivePredict(state.input,76,_ctx); + } while ( _alt1004!=2 ); + _ctx.s = 814; + ellipsisParameterDecl(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[39]); + } + return _ctx; + } + + + public final ParserRuleContext normalParameterDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 78); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[40]); + int _la; + try { + _ctx.s = 818; + variableModifiers(_ctx); + _ctx.s = 820; + type(_ctx); + _ctx.s = 822; + match(IDENTIFIER); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 824; + match(LBRACKET); + _ctx.s = 826; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_normalParameterDecl_iter_78); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[40]); + } + return _ctx; + } + + + public final ParserRuleContext ellipsisParameterDecl(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 80); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[41]); + try { + _ctx.s = 832; + variableModifiers(_ctx); + _ctx.s = 834; + type(_ctx); + _ctx.s = 836; + match(ELLIPSIS); + _ctx.s = 838; + match(IDENTIFIER); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[41]); + } + return _ctx; + } + + + public final ParserRuleContext explicitConstructorInvocation(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 82); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[42]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,82,_ctx) ) { + case 1: + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 840; + nonWildcardTypeArguments(_ctx); + } + + switch ( state.input.LA(1) ) { + case THIS: + _ctx.s = 844; + match(THIS); + break; + case SUPER: + _ctx.s = 846; + match(SUPER); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 850; + arguments(_ctx); + _ctx.s = 852; + match(SEMI); + break; + case 2: + _ctx.s = 854; + primary(_ctx); + _ctx.s = 856; + match(DOT); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 858; + nonWildcardTypeArguments(_ctx); + } + + _ctx.s = 862; + match(SUPER); + _ctx.s = 864; + arguments(_ctx); + _ctx.s = 866; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[42]); + } + return _ctx; + } + + + public final ParserRuleContext qualifiedName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 84); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[43]); + int _la; + try { + _ctx.s = 870; + match(IDENTIFIER); + _la = state.input.LA(1); + while ( _la==DOT ) { + _ctx.s = 872; + match(DOT); + _ctx.s = 874; + match(IDENTIFIER); + _la = state.input.LA(1); + //sync(EXPECTING_in_qualifiedName_iter_83); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[43]); + } + return _ctx; + } + + + public final ParserRuleContext annotations(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 86); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[44]); + int _la; + try { + //sync(EXPECTING_in_annotations_enter_86); + _la = state.input.LA(1); + do { + _ctx.s = 880; + annotation(_ctx); + _la = state.input.LA(1); + // sync(EXPECTING_in_annotations_iter_86); + } while ( _la==MONKEYS_AT ); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[44]); + } + return _ctx; + } + + + public final ParserRuleContext annotation(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 88); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[45]); + int _la; + try { + _ctx.s = 886; + match(MONKEYS_AT); + _ctx.s = 888; + qualifiedName(_ctx); + _la = state.input.LA(1); + if ( _la==LPAREN ) { + _ctx.s = 890; + match(LPAREN); + switch ( _interp.adaptivePredict(state.input,87,_ctx) ) { + case 1: + _ctx.s = 892; + elementValuePairs(_ctx); + break; + case 2: + _ctx.s = 894; + elementValue(_ctx); + break; + } + _ctx.s = 898; + match(RPAREN); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[45]); + } + return _ctx; + } + + + public final ParserRuleContext elementValuePairs(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 90); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[46]); + int _la; + try { + _ctx.s = 902; + elementValuePair(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 904; + match(COMMA); + _ctx.s = 906; + elementValuePair(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_elementValuePairs_iter_89); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[46]); + } + return _ctx; + } + + + public final ParserRuleContext elementValuePair(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 92); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[47]); + try { + _ctx.s = 912; + match(IDENTIFIER); + _ctx.s = 914; + match(EQ); + _ctx.s = 916; + elementValue(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[47]); + } + return _ctx; + } + + + public final ParserRuleContext elementValue(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 94); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[48]); + try { + switch ( state.input.LA(1) ) { + case LONGLITERAL: + case INTLITERAL: + case FLOATLITERAL: + case DOUBLELITERAL: + case CHARLITERAL: + case STRINGLITERAL: + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case NEW: + case SHORT: + case SUPER: + case THIS: + case VOID: + case TRUE: + case FALSE: + case NULL: + case LPAREN: + case BANG: + case TILDE: + case PLUSPLUS: + case SUBSUB: + case PLUS: + case SUB: + case IDENTIFIER: + _ctx.s = 918; + conditionalExpression(_ctx); + break; + case MONKEYS_AT: + _ctx.s = 920; + annotation(_ctx); + break; + case LBRACE: + _ctx.s = 922; + elementValueArrayInitializer(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[48]); + } + return _ctx; + } + + + public final ParserRuleContext elementValueArrayInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 96); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[49]); + int _la; + try { + _ctx.s = 926; + match(LBRACE); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==LBRACE || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 928; + elementValue(_ctx); + int _alt1207 = _interp.adaptivePredict(state.input,91,_ctx); + while ( _alt1207!=2 ) { + switch ( _alt1207 ) { + case 1: + _ctx.s = 930; + match(COMMA); + _ctx.s = 932; + elementValue(_ctx); + break; + } + _alt1207 = _interp.adaptivePredict(state.input,91,_ctx); + } + } + + _la = state.input.LA(1); + if ( _la==COMMA ) { + _ctx.s = 940; + match(COMMA); + } + + _ctx.s = 944; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[49]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 98); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[50]); + try { + _ctx.s = 946; + modifiers(_ctx); + _ctx.s = 948; + match(MONKEYS_AT); + _ctx.s = 950; + match(INTERFACE); + _ctx.s = 952; + match(IDENTIFIER); + _ctx.s = 954; + annotationTypeBody(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[50]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeBody(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 100); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[51]); + int _la; + try { + _ctx.s = 956; + match(LBRACE); + _la = state.input.LA(1); + while ( _la==ABSTRACT || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==CLASS || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SYNCHRONIZED || _la==TRANSIENT || _la==VOLATILE || _la==SEMI || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 958; + annotationTypeElementDeclaration(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_annotationTypeBody_iter_94); + } + _ctx.s = 964; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[51]); + } + return _ctx; + } + + + public final ParserRuleContext annotationTypeElementDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 102); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[52]); + try { + switch ( _interp.adaptivePredict(state.input,95,_ctx) ) { + case 1: + _ctx.s = 966; + annotationMethodDeclaration(_ctx); + break; + case 2: + _ctx.s = 968; + interfaceFieldDeclaration(_ctx); + break; + case 3: + _ctx.s = 970; + normalClassDeclaration(_ctx); + break; + case 4: + _ctx.s = 972; + normalInterfaceDeclaration(_ctx); + break; + case 5: + _ctx.s = 974; + enumDeclaration(_ctx); + break; + case 6: + _ctx.s = 976; + annotationTypeDeclaration(_ctx); + break; + case 7: + _ctx.s = 978; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[52]); + } + return _ctx; + } + + + public final ParserRuleContext annotationMethodDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 104); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[53]); + int _la; + try { + _ctx.s = 982; + modifiers(_ctx); + _ctx.s = 984; + type(_ctx); + _ctx.s = 986; + match(IDENTIFIER); + _ctx.s = 988; + match(LPAREN); + _ctx.s = 990; + match(RPAREN); + _la = state.input.LA(1); + if ( _la==DEFAULT ) { + _ctx.s = 992; + match(DEFAULT); + _ctx.s = 994; + elementValue(_ctx); + } + + _ctx.s = 998; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[53]); + } + return _ctx; + } + + + public final ParserRuleContext block(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 106); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[54]); + int _la; + try { + _ctx.s = 1000; + match(LBRACE); + _la = state.input.LA(1); + while ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==ABSTRACT || _la==ASSERT || _la==BOOLEAN || _la==BREAK || _la==BYTE || _la==CHAR || _la==CLASS || _la==CONTINUE || _la==DO || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==FOR || _la==IF || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==NEW || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==RETURN || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SUPER || _la==SWITCH || _la==SYNCHRONIZED || _la==THIS || _la==THROW || _la==TRANSIENT || _la==TRY || _la==VOID || _la==VOLATILE || _la==WHILE || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==LBRACE || _la==SEMI || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 1002; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_block_iter_97); + } + _ctx.s = 1008; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[54]); + } + return _ctx; + } + + + public final ParserRuleContext blockStatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 108); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[55]); + try { + switch ( _interp.adaptivePredict(state.input,98,_ctx) ) { + case 1: + _ctx.s = 1010; + localVariableDeclarationStatement(_ctx); + break; + case 2: + _ctx.s = 1012; + classOrInterfaceDeclaration(_ctx); + break; + case 3: + _ctx.s = 1014; + statement(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[55]); + } + return _ctx; + } + + + public final ParserRuleContext localVariableDeclarationStatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 110); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[56]); + try { + _ctx.s = 1018; + localVariableDeclaration(_ctx); + _ctx.s = 1020; + match(SEMI); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[56]); + } + return _ctx; + } + + + public final ParserRuleContext localVariableDeclaration(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 112); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[57]); + int _la; + try { + _ctx.s = 1022; + variableModifiers(_ctx); + _ctx.s = 1024; + type(_ctx); + _ctx.s = 1026; + variableDeclarator(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 1028; + match(COMMA); + _ctx.s = 1030; + variableDeclarator(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_localVariableDeclaration_iter_99); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[57]); + } + return _ctx; + } + + + public final ParserRuleContext statement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 114); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[58]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,106,_ctx) ) { + case 1: + _ctx.s = 1036; + block(_ctx); + break; + case 2: + _ctx.s = 1038; + match(ASSERT); + _ctx.s = 1040; + expression(_ctx); + _la = state.input.LA(1); + if ( _la==COLON ) { + _ctx.s = 1042; + match(COLON); + _ctx.s = 1044; + expression(_ctx); + } + + _ctx.s = 1048; + match(SEMI); + break; + case 3: + _ctx.s = 1050; + match(ASSERT); + _ctx.s = 1052; + expression(_ctx); + _la = state.input.LA(1); + if ( _la==COLON ) { + _ctx.s = 1054; + match(COLON); + _ctx.s = 1056; + expression(_ctx); + } + + _ctx.s = 1060; + match(SEMI); + break; + case 4: + _ctx.s = 1062; + match(IF); + _ctx.s = 1064; + parExpression(_ctx); + _ctx.s = 1066; + statement(_ctx); + switch ( _interp.adaptivePredict(state.input,102,_ctx) ) { + case 1: + _ctx.s = 1068; + match(ELSE); + _ctx.s = 1070; + statement(_ctx); + break; + } + break; + case 5: + _ctx.s = 1074; + forstatement(_ctx); + break; + case 6: + _ctx.s = 1076; + match(WHILE); + _ctx.s = 1078; + parExpression(_ctx); + _ctx.s = 1080; + statement(_ctx); + break; + case 7: + _ctx.s = 1082; + match(DO); + _ctx.s = 1084; + statement(_ctx); + _ctx.s = 1086; + match(WHILE); + _ctx.s = 1088; + parExpression(_ctx); + _ctx.s = 1090; + match(SEMI); + break; + case 8: + _ctx.s = 1092; + trystatement(_ctx); + break; + case 9: + _ctx.s = 1094; + match(SWITCH); + _ctx.s = 1096; + parExpression(_ctx); + _ctx.s = 1098; + match(LBRACE); + _ctx.s = 1100; + switchBlockStatementGroups(_ctx); + _ctx.s = 1102; + match(RBRACE); + break; + case 10: + _ctx.s = 1104; + match(SYNCHRONIZED); + _ctx.s = 1106; + parExpression(_ctx); + _ctx.s = 1108; + block(_ctx); + break; + case 11: + _ctx.s = 1110; + match(RETURN); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==IDENTIFIER ) { + _ctx.s = 1112; + expression(_ctx); + } + + _ctx.s = 1116; + match(SEMI); + break; + case 12: + _ctx.s = 1118; + match(THROW); + _ctx.s = 1120; + expression(_ctx); + _ctx.s = 1122; + match(SEMI); + break; + case 13: + _ctx.s = 1124; + match(BREAK); + _la = state.input.LA(1); + if ( _la==IDENTIFIER ) { + _ctx.s = 1126; + match(IDENTIFIER); + } + + _ctx.s = 1130; + match(SEMI); + break; + case 14: + _ctx.s = 1132; + match(CONTINUE); + _la = state.input.LA(1); + if ( _la==IDENTIFIER ) { + _ctx.s = 1134; + match(IDENTIFIER); + } + + _ctx.s = 1138; + match(SEMI); + break; + case 15: + _ctx.s = 1140; + expression(_ctx); + _ctx.s = 1142; + match(SEMI); + break; + case 16: + _ctx.s = 1144; + match(IDENTIFIER); + _ctx.s = 1146; + match(COLON); + _ctx.s = 1148; + statement(_ctx); + break; + case 17: + _ctx.s = 1150; + match(SEMI); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[58]); + } + return _ctx; + } + + + public final ParserRuleContext switchBlockStatementGroups(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 116); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[59]); + int _la; + try { + _la = state.input.LA(1); + while ( _la==CASE || _la==DEFAULT ) { + _ctx.s = 1154; + switchBlockStatementGroup(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_switchBlockStatementGroups_iter_107); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[59]); + } + return _ctx; + } + + + public final ParserRuleContext switchBlockStatementGroup(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 118); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[60]); + int _la; + try { + _ctx.s = 1160; + switchLabel(_ctx); + _la = state.input.LA(1); + while ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==ABSTRACT || _la==ASSERT || _la==BOOLEAN || _la==BREAK || _la==BYTE || _la==CHAR || _la==CLASS || _la==CONTINUE || _la==DO || _la==DOUBLE || _la==ENUM || _la==FINAL || _la==FLOAT || _la==FOR || _la==IF || _la==INT || _la==INTERFACE || _la==LONG || _la==NATIVE || _la==NEW || _la==PRIVATE || _la==PROTECTED || _la==PUBLIC || _la==RETURN || _la==SHORT || _la==STATIC || _la==STRICTFP || _la==SUPER || _la==SWITCH || _la==SYNCHRONIZED || _la==THIS || _la==THROW || _la==TRANSIENT || _la==TRY || _la==VOID || _la==VOLATILE || _la==WHILE || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==LBRACE || _la==SEMI || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 1162; + blockStatement(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_switchBlockStatementGroup_iter_108); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[60]); + } + return _ctx; + } + + + public final ParserRuleContext switchLabel(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 120); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[61]); + try { + switch ( state.input.LA(1) ) { + case CASE: + _ctx.s = 1168; + match(CASE); + _ctx.s = 1170; + expression(_ctx); + _ctx.s = 1172; + match(COLON); + break; + case DEFAULT: + _ctx.s = 1174; + match(DEFAULT); + _ctx.s = 1176; + match(COLON); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[61]); + } + return _ctx; + } + + + public final ParserRuleContext trystatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 122); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[62]); + try { + _ctx.s = 1180; + match(TRY); + _ctx.s = 1182; + block(_ctx); + switch ( _interp.adaptivePredict(state.input,110,_ctx) ) { + case 1: + _ctx.s = 1184; + catches(_ctx); + _ctx.s = 1186; + match(FINALLY); + _ctx.s = 1188; + block(_ctx); + break; + case 2: + _ctx.s = 1190; + catches(_ctx); + break; + case 3: + _ctx.s = 1192; + match(FINALLY); + _ctx.s = 1194; + block(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[62]); + } + return _ctx; + } + + + public final ParserRuleContext catches(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 124); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[63]); + int _la; + try { + _ctx.s = 1198; + catchClause(_ctx); + _la = state.input.LA(1); + while ( _la==CATCH ) { + _ctx.s = 1200; + catchClause(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_catches_iter_111); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[63]); + } + return _ctx; + } + + + public final ParserRuleContext catchClause(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 126); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[64]); + try { + _ctx.s = 1206; + match(CATCH); + _ctx.s = 1208; + match(LPAREN); + _ctx.s = 1210; + formalParameter(_ctx); + _ctx.s = 1212; + match(RPAREN); + _ctx.s = 1214; + block(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[64]); + } + return _ctx; + } + + + public final ParserRuleContext formalParameter(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 128); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[65]); + int _la; + try { + _ctx.s = 1216; + variableModifiers(_ctx); + _ctx.s = 1218; + type(_ctx); + _ctx.s = 1220; + match(IDENTIFIER); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 1222; + match(LBRACKET); + _ctx.s = 1224; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_formalParameter_iter_112); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[65]); + } + return _ctx; + } + + + public final ParserRuleContext forstatement(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 130); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[66]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,116,_ctx) ) { + case 1: + _ctx.s = 1230; + match(FOR); + _ctx.s = 1232; + match(LPAREN); + _ctx.s = 1234; + variableModifiers(_ctx); + _ctx.s = 1236; + type(_ctx); + _ctx.s = 1238; + match(IDENTIFIER); + _ctx.s = 1240; + match(COLON); + _ctx.s = 1242; + expression(_ctx); + _ctx.s = 1244; + match(RPAREN); + _ctx.s = 1246; + statement(_ctx); + break; + case 2: + _ctx.s = 1248; + match(FOR); + _ctx.s = 1250; + match(LPAREN); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FINAL || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==MONKEYS_AT || _la==IDENTIFIER ) { + _ctx.s = 1252; + forInit(_ctx); + } + + _ctx.s = 1256; + match(SEMI); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==IDENTIFIER ) { + _ctx.s = 1258; + expression(_ctx); + } + + _ctx.s = 1262; + match(SEMI); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==IDENTIFIER ) { + _ctx.s = 1264; + expressionList(_ctx); + } + + _ctx.s = 1268; + match(RPAREN); + _ctx.s = 1270; + statement(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[66]); + } + return _ctx; + } + + + public final ParserRuleContext forInit(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 132); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[67]); + try { + switch ( _interp.adaptivePredict(state.input,117,_ctx) ) { + case 1: + _ctx.s = 1274; + localVariableDeclaration(_ctx); + break; + case 2: + _ctx.s = 1276; + expressionList(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[67]); + } + return _ctx; + } + + + public final ParserRuleContext parExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 134); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[68]); + try { + _ctx.s = 1280; + match(LPAREN); + _ctx.s = 1282; + expression(_ctx); + _ctx.s = 1284; + match(RPAREN); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[68]); + } + return _ctx; + } + + + public final ParserRuleContext expressionList(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 136); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[69]); + int _la; + try { + _ctx.s = 1286; + expression(_ctx); + _la = state.input.LA(1); + while ( _la==COMMA ) { + _ctx.s = 1288; + match(COMMA); + _ctx.s = 1290; + expression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_expressionList_iter_118); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[69]); + } + return _ctx; + } + + + public final ParserRuleContext expression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 138); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[70]); + int _la; + try { + _ctx.s = 1296; + conditionalExpression(_ctx); + _la = state.input.LA(1); + if ( _la==EQ || _la==PLUSEQ || _la==SUBEQ || _la==STAREQ || _la==SLASHEQ || _la==AMPEQ || _la==BAREQ || _la==CARETEQ || _la==PERCENTEQ || _la==GT || _la==LT ) { + _ctx.s = 1298; + assignmentOperator(_ctx); + _ctx.s = 1300; + expression(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[70]); + } + return _ctx; + } + + + public final ParserRuleContext assignmentOperator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 140); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[71]); + try { + switch ( _interp.adaptivePredict(state.input,120,_ctx) ) { + case 1: + _ctx.s = 1304; + match(EQ); + break; + case 2: + _ctx.s = 1306; + match(PLUSEQ); + break; + case 3: + _ctx.s = 1308; + match(SUBEQ); + break; + case 4: + _ctx.s = 1310; + match(STAREQ); + break; + case 5: + _ctx.s = 1312; + match(SLASHEQ); + break; + case 6: + _ctx.s = 1314; + match(AMPEQ); + break; + case 7: + _ctx.s = 1316; + match(BAREQ); + break; + case 8: + _ctx.s = 1318; + match(CARETEQ); + break; + case 9: + _ctx.s = 1320; + match(PERCENTEQ); + break; + case 10: + _ctx.s = 1322; + match(GT); + _ctx.s = 1324; + match(GT); + _ctx.s = 1326; + match(EQ); + break; + case 11: + _ctx.s = 1328; + match(LT); + _ctx.s = 1330; + match(LT); + _ctx.s = 1332; + match(LT); + _ctx.s = 1334; + match(EQ); + break; + case 12: + _ctx.s = 1336; + match(LT); + _ctx.s = 1338; + match(LT); + _ctx.s = 1340; + match(EQ); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[71]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 142); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[72]); + int _la; + try { + _ctx.s = 1344; + conditionalOrExpression(_ctx); + _la = state.input.LA(1); + if ( _la==QUES ) { + _ctx.s = 1346; + match(QUES); + _ctx.s = 1348; + expression(_ctx); + _ctx.s = 1350; + match(COLON); + _ctx.s = 1352; + conditionalExpression(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[72]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 144); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[73]); + int _la; + try { + _ctx.s = 1356; + conditionalAndExpression(_ctx); + _la = state.input.LA(1); + while ( _la==BARBAR ) { + _ctx.s = 1358; + match(BARBAR); + _ctx.s = 1360; + conditionalAndExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_conditionalOrExpression_iter_122); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[73]); + } + return _ctx; + } + + + public final ParserRuleContext conditionalAndExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 146); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[74]); + int _la; + try { + _ctx.s = 1366; + inclusiveOrExpression(_ctx); + _la = state.input.LA(1); + while ( _la==AMPAMP ) { + _ctx.s = 1368; + match(AMPAMP); + _ctx.s = 1370; + inclusiveOrExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_conditionalAndExpression_iter_123); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[74]); + } + return _ctx; + } + + + public final ParserRuleContext inclusiveOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 148); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[75]); + int _la; + try { + _ctx.s = 1376; + exclusiveOrExpression(_ctx); + _la = state.input.LA(1); + while ( _la==BAR ) { + _ctx.s = 1378; + match(BAR); + _ctx.s = 1380; + exclusiveOrExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_inclusiveOrExpression_iter_124); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[75]); + } + return _ctx; + } + + + public final ParserRuleContext exclusiveOrExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 150); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[76]); + int _la; + try { + _ctx.s = 1386; + andExpression(_ctx); + _la = state.input.LA(1); + while ( _la==CARET ) { + _ctx.s = 1388; + match(CARET); + _ctx.s = 1390; + andExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_exclusiveOrExpression_iter_125); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[76]); + } + return _ctx; + } + + + public final ParserRuleContext andExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 152); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[77]); + int _la; + try { + _ctx.s = 1396; + equalityExpression(_ctx); + _la = state.input.LA(1); + while ( _la==AMP ) { + _ctx.s = 1398; + match(AMP); + _ctx.s = 1400; + equalityExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_andExpression_iter_126); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[77]); + } + return _ctx; + } + + + public final ParserRuleContext equalityExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 154); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[78]); + int _la; + try { + _ctx.s = 1406; + instanceOfExpression(_ctx); + _la = state.input.LA(1); + while ( _la==EQEQ || _la==BANGEQ ) { + switch ( state.input.LA(1) ) { + case EQEQ: + _ctx.s = 1408; + match(EQEQ); + break; + case BANGEQ: + _ctx.s = 1410; + match(BANGEQ); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 1414; + instanceOfExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_equalityExpression_iter_128); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[78]); + } + return _ctx; + } + + + public final ParserRuleContext instanceOfExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 156); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[79]); + int _la; + try { + _ctx.s = 1420; + relationalExpression(_ctx); + _la = state.input.LA(1); + if ( _la==INSTANCEOF ) { + _ctx.s = 1422; + match(INSTANCEOF); + _ctx.s = 1424; + type(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[79]); + } + return _ctx; + } + + + public final ParserRuleContext relationalExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 158); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[80]); + try { + _ctx.s = 1428; + shiftExpression(_ctx); + int _alt2004 = _interp.adaptivePredict(state.input,130,_ctx); + while ( _alt2004!=2 ) { + switch ( _alt2004 ) { + case 1: + _ctx.s = 1430; + relationalOp(_ctx); + _ctx.s = 1432; + shiftExpression(_ctx); + break; + } + _alt2004 = _interp.adaptivePredict(state.input,130,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[80]); + } + return _ctx; + } + + + public final ParserRuleContext relationalOp(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 160); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[81]); + try { + switch ( _interp.adaptivePredict(state.input,131,_ctx) ) { + case 1: + _ctx.s = 1438; + match(GT); + _ctx.s = 1440; + match(EQ); + break; + case 2: + _ctx.s = 1442; + match(LT); + _ctx.s = 1444; + match(EQ); + break; + case 3: + _ctx.s = 1446; + match(GT); + break; + case 4: + _ctx.s = 1448; + match(LT); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[81]); + } + return _ctx; + } + + + public final ParserRuleContext shiftExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 162); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[82]); + try { + _ctx.s = 1452; + additiveExpression(_ctx); + int _alt2044 = _interp.adaptivePredict(state.input,132,_ctx); + while ( _alt2044!=2 ) { + switch ( _alt2044 ) { + case 1: + _ctx.s = 1454; + shiftOp(_ctx); + _ctx.s = 1456; + additiveExpression(_ctx); + break; + } + _alt2044 = _interp.adaptivePredict(state.input,132,_ctx); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[82]); + } + return _ctx; + } + + + public final ParserRuleContext shiftOp(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 164); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[83]); + try { + switch ( _interp.adaptivePredict(state.input,133,_ctx) ) { + case 1: + _ctx.s = 1462; + match(GT); + _ctx.s = 1464; + match(GT); + break; + case 2: + _ctx.s = 1466; + match(LT); + _ctx.s = 1468; + match(LT); + _ctx.s = 1470; + match(LT); + break; + case 3: + _ctx.s = 1472; + match(LT); + _ctx.s = 1474; + match(LT); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[83]); + } + return _ctx; + } + + + public final ParserRuleContext additiveExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 166); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[84]); + int _la; + try { + _ctx.s = 1478; + multiplicativeExpression(_ctx); + _la = state.input.LA(1); + while ( _la==PLUS || _la==SUB ) { + switch ( state.input.LA(1) ) { + case PLUS: + _ctx.s = 1480; + match(PLUS); + break; + case SUB: + _ctx.s = 1482; + match(SUB); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 1486; + multiplicativeExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_additiveExpression_iter_135); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[84]); + } + return _ctx; + } + + + public final ParserRuleContext multiplicativeExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 168); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[85]); + int _la; + try { + _ctx.s = 1492; + unaryExpression(_ctx); + _la = state.input.LA(1); + while ( _la==STAR || _la==SLASH || _la==PERCENT ) { + switch ( state.input.LA(1) ) { + case STAR: + _ctx.s = 1494; + match(STAR); + break; + case SLASH: + _ctx.s = 1496; + match(SLASH); + break; + case PERCENT: + _ctx.s = 1498; + match(PERCENT); + break; + default : + throw new NoViableAltException(this); + } + _ctx.s = 1502; + unaryExpression(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_multiplicativeExpression_iter_137); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[85]); + } + return _ctx; + } + + + public final ParserRuleContext unaryExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 170); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[86]); + try { + switch ( state.input.LA(1) ) { + case PLUS: + _ctx.s = 1508; + match(PLUS); + _ctx.s = 1510; + unaryExpression(_ctx); + break; + case SUB: + _ctx.s = 1512; + match(SUB); + _ctx.s = 1514; + unaryExpression(_ctx); + break; + case PLUSPLUS: + _ctx.s = 1516; + match(PLUSPLUS); + _ctx.s = 1518; + unaryExpression(_ctx); + break; + case SUBSUB: + _ctx.s = 1520; + match(SUBSUB); + _ctx.s = 1522; + unaryExpression(_ctx); + break; + case LONGLITERAL: + case INTLITERAL: + case FLOATLITERAL: + case DOUBLELITERAL: + case CHARLITERAL: + case STRINGLITERAL: + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case NEW: + case SHORT: + case SUPER: + case THIS: + case VOID: + case TRUE: + case FALSE: + case NULL: + case LPAREN: + case BANG: + case TILDE: + case IDENTIFIER: + _ctx.s = 1524; + unaryExpressionNotPlusMinus(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[86]); + } + return _ctx; + } + + + public final ParserRuleContext unaryExpressionNotPlusMinus(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 172); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[87]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,141,_ctx) ) { + case 1: + _ctx.s = 1528; + match(TILDE); + _ctx.s = 1530; + unaryExpression(_ctx); + break; + case 2: + _ctx.s = 1532; + match(BANG); + _ctx.s = 1534; + unaryExpression(_ctx); + break; + case 3: + _ctx.s = 1536; + castExpression(_ctx); + break; + case 4: + _ctx.s = 1538; + primary(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET || _la==DOT ) { + _ctx.s = 1540; + selector(_ctx); + _la = state.input.LA(1); + //sync(EXPECTING_in_unaryExpressionNotPlusMinus_iter_139); + } + switch ( state.input.LA(1) ) { + case PLUSPLUS: + _ctx.s = 1546; + match(PLUSPLUS); + break; + case SUBSUB: + _ctx.s = 1548; + match(SUBSUB); + break; + case INSTANCEOF: + case RPAREN: + case RBRACE: + case RBRACKET: + case SEMI: + case COMMA: + case EQ: + case QUES: + case COLON: + case EQEQ: + case AMPAMP: + case BARBAR: + case PLUS: + case SUB: + case STAR: + case SLASH: + case AMP: + case BAR: + case CARET: + case PERCENT: + case PLUSEQ: + case SUBEQ: + case STAREQ: + case SLASHEQ: + case AMPEQ: + case BAREQ: + case CARETEQ: + case PERCENTEQ: + case BANGEQ: + case GT: + case LT: + break; + default : + throw new NoViableAltException(this); + } + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[87]); + } + return _ctx; + } + + + public final ParserRuleContext castExpression(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 174); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[88]); + try { + switch ( _interp.adaptivePredict(state.input,142,_ctx) ) { + case 1: + _ctx.s = 1554; + match(LPAREN); + _ctx.s = 1556; + primitiveType(_ctx); + _ctx.s = 1558; + match(RPAREN); + _ctx.s = 1560; + unaryExpression(_ctx); + break; + case 2: + _ctx.s = 1562; + match(LPAREN); + _ctx.s = 1564; + type(_ctx); + _ctx.s = 1566; + match(RPAREN); + _ctx.s = 1568; + unaryExpressionNotPlusMinus(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[88]); + } + return _ctx; + } + + + public final ParserRuleContext primary(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 176); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[89]); + int _la; + try { + switch ( state.input.LA(1) ) { + case LPAREN: + _ctx.s = 1572; + parExpression(_ctx); + break; + case THIS: + _ctx.s = 1574; + match(THIS); + int _alt2243 = _interp.adaptivePredict(state.input,143,_ctx); + while ( _alt2243!=2 ) { + switch ( _alt2243 ) { + case 1: + _ctx.s = 1576; + match(DOT); + _ctx.s = 1578; + match(IDENTIFIER); + break; + } + _alt2243 = _interp.adaptivePredict(state.input,143,_ctx); + } + switch ( _interp.adaptivePredict(state.input,144,_ctx) ) { + case 1: + _ctx.s = 1584; + identifierSuffix(_ctx); + break; + } + break; + case IDENTIFIER: + _ctx.s = 1588; + match(IDENTIFIER); + int _alt2261 = _interp.adaptivePredict(state.input,145,_ctx); + while ( _alt2261!=2 ) { + switch ( _alt2261 ) { + case 1: + _ctx.s = 1590; + match(DOT); + _ctx.s = 1592; + match(IDENTIFIER); + break; + } + _alt2261 = _interp.adaptivePredict(state.input,145,_ctx); + } + switch ( _interp.adaptivePredict(state.input,146,_ctx) ) { + case 1: + _ctx.s = 1598; + identifierSuffix(_ctx); + break; + } + break; + case SUPER: + _ctx.s = 1602; + match(SUPER); + _ctx.s = 1604; + superSuffix(_ctx); + break; + case LONGLITERAL: + case INTLITERAL: + case FLOATLITERAL: + case DOUBLELITERAL: + case CHARLITERAL: + case STRINGLITERAL: + case TRUE: + case FALSE: + case NULL: + _ctx.s = 1606; + literal(_ctx); + break; + case NEW: + _ctx.s = 1608; + creator(_ctx); + break; + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + _ctx.s = 1610; + primitiveType(_ctx); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 1612; + match(LBRACKET); + _ctx.s = 1614; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_primary_iter_147); + } + _ctx.s = 1620; + match(DOT); + _ctx.s = 1622; + match(CLASS); + break; + case VOID: + _ctx.s = 1624; + match(VOID); + _ctx.s = 1626; + match(DOT); + _ctx.s = 1628; + match(CLASS); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[89]); + } + return _ctx; + } + + + public final ParserRuleContext superSuffix(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 178); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[90]); + int _la; + try { + switch ( state.input.LA(1) ) { + case LPAREN: + _ctx.s = 1632; + arguments(_ctx); + break; + case DOT: + _ctx.s = 1634; + match(DOT); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 1636; + typeArguments(_ctx); + } + + _ctx.s = 1640; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==LPAREN ) { + _ctx.s = 1642; + arguments(_ctx); + } + + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[90]); + } + return _ctx; + } + + + public final ParserRuleContext identifierSuffix(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 180); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[91]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,158,_ctx) ) { + case 1: + //sync(EXPECTING_in_identifierSuffix_enter_154); + _la = state.input.LA(1); + do { + _ctx.s = 1648; + match(LBRACKET); + _ctx.s = 1650; + match(RBRACKET); + _la = state.input.LA(1); + // sync(EXPECTING_in_identifierSuffix_iter_154); + } while ( _la==LBRACKET ); + _ctx.s = 1656; + match(DOT); + _ctx.s = 1658; + match(CLASS); + break; + case 2: + int _alt2361 = _interp.adaptivePredict(state.input,157,_ctx); + do { + switch ( _alt2361 ) { + case 1: + _ctx.s = 1660; + match(LBRACKET); + _ctx.s = 1662; + expression(_ctx); + _ctx.s = 1664; + match(RBRACKET); + break; + default : + throw new NoViableAltException(this); + } + _alt2361 = _interp.adaptivePredict(state.input,157,_ctx); + } while ( _alt2361!=2 ); + break; + case 3: + _ctx.s = 1670; + arguments(_ctx); + break; + case 4: + _ctx.s = 1672; + match(DOT); + _ctx.s = 1674; + match(CLASS); + break; + case 5: + _ctx.s = 1676; + match(DOT); + _ctx.s = 1678; + nonWildcardTypeArguments(_ctx); + _ctx.s = 1680; + match(IDENTIFIER); + _ctx.s = 1682; + arguments(_ctx); + break; + case 6: + _ctx.s = 1684; + match(DOT); + _ctx.s = 1686; + match(THIS); + break; + case 7: + _ctx.s = 1688; + match(DOT); + _ctx.s = 1690; + match(SUPER); + _ctx.s = 1692; + arguments(_ctx); + break; + case 8: + _ctx.s = 1694; + innerCreator(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[91]); + } + return _ctx; + } + + + public final ParserRuleContext selector(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 182); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[92]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,160,_ctx) ) { + case 1: + _ctx.s = 1698; + match(DOT); + _ctx.s = 1700; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==LPAREN ) { + _ctx.s = 1702; + arguments(_ctx); + } + + break; + case 2: + _ctx.s = 1706; + match(DOT); + _ctx.s = 1708; + match(THIS); + break; + case 3: + _ctx.s = 1710; + match(DOT); + _ctx.s = 1712; + match(SUPER); + _ctx.s = 1714; + superSuffix(_ctx); + break; + case 4: + _ctx.s = 1716; + innerCreator(_ctx); + break; + case 5: + _ctx.s = 1718; + match(LBRACKET); + _ctx.s = 1720; + expression(_ctx); + _ctx.s = 1722; + match(RBRACKET); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[92]); + } + return _ctx; + } + + + public final ParserRuleContext creator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 184); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[93]); + try { + switch ( _interp.adaptivePredict(state.input,161,_ctx) ) { + case 1: + _ctx.s = 1726; + match(NEW); + _ctx.s = 1728; + nonWildcardTypeArguments(_ctx); + _ctx.s = 1730; + classOrInterfaceType(_ctx); + _ctx.s = 1732; + classCreatorRest(_ctx); + break; + case 2: + _ctx.s = 1734; + match(NEW); + _ctx.s = 1736; + classOrInterfaceType(_ctx); + _ctx.s = 1738; + classCreatorRest(_ctx); + break; + case 3: + _ctx.s = 1740; + arrayCreator(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[93]); + } + return _ctx; + } + + + public final ParserRuleContext arrayCreator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 186); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[94]); + int _la; + try { + switch ( _interp.adaptivePredict(state.input,165,_ctx) ) { + case 1: + _ctx.s = 1744; + match(NEW); + _ctx.s = 1746; + createdName(_ctx); + _ctx.s = 1748; + match(LBRACKET); + _ctx.s = 1750; + match(RBRACKET); + _la = state.input.LA(1); + while ( _la==LBRACKET ) { + _ctx.s = 1752; + match(LBRACKET); + _ctx.s = 1754; + match(RBRACKET); + _la = state.input.LA(1); + //sync(EXPECTING_in_arrayCreator_iter_162); + } + _ctx.s = 1760; + arrayInitializer(_ctx); + break; + case 2: + _ctx.s = 1762; + match(NEW); + _ctx.s = 1764; + createdName(_ctx); + _ctx.s = 1766; + match(LBRACKET); + _ctx.s = 1768; + expression(_ctx); + _ctx.s = 1770; + match(RBRACKET); + int _alt2514 = _interp.adaptivePredict(state.input,163,_ctx); + while ( _alt2514!=2 ) { + switch ( _alt2514 ) { + case 1: + _ctx.s = 1772; + match(LBRACKET); + _ctx.s = 1774; + expression(_ctx); + _ctx.s = 1776; + match(RBRACKET); + break; + } + _alt2514 = _interp.adaptivePredict(state.input,163,_ctx); + } + int _alt2522 = _interp.adaptivePredict(state.input,164,_ctx); + while ( _alt2522!=2 ) { + switch ( _alt2522 ) { + case 1: + _ctx.s = 1782; + match(LBRACKET); + _ctx.s = 1784; + match(RBRACKET); + break; + } + _alt2522 = _interp.adaptivePredict(state.input,164,_ctx); + } + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[94]); + } + return _ctx; + } + + + public final ParserRuleContext variableInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 188); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[95]); + try { + switch ( state.input.LA(1) ) { + case LBRACE: + _ctx.s = 1792; + arrayInitializer(_ctx); + break; + case LONGLITERAL: + case INTLITERAL: + case FLOATLITERAL: + case DOUBLELITERAL: + case CHARLITERAL: + case STRINGLITERAL: + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case NEW: + case SHORT: + case SUPER: + case THIS: + case VOID: + case TRUE: + case FALSE: + case NULL: + case LPAREN: + case BANG: + case TILDE: + case PLUSPLUS: + case SUBSUB: + case PLUS: + case SUB: + case IDENTIFIER: + _ctx.s = 1794; + expression(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[95]); + } + return _ctx; + } + + + public final ParserRuleContext arrayInitializer(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 190); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[96]); + int _la; + try { + _ctx.s = 1798; + match(LBRACE); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==LBRACE || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==IDENTIFIER ) { + _ctx.s = 1800; + variableInitializer(_ctx); + int _alt2553 = _interp.adaptivePredict(state.input,167,_ctx); + while ( _alt2553!=2 ) { + switch ( _alt2553 ) { + case 1: + _ctx.s = 1802; + match(COMMA); + _ctx.s = 1804; + variableInitializer(_ctx); + break; + } + _alt2553 = _interp.adaptivePredict(state.input,167,_ctx); + } + } + + _la = state.input.LA(1); + if ( _la==COMMA ) { + _ctx.s = 1812; + match(COMMA); + } + + _ctx.s = 1816; + match(RBRACE); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[96]); + } + return _ctx; + } + + + public final ParserRuleContext createdName(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 192); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[97]); + try { + switch ( state.input.LA(1) ) { + case IDENTIFIER: + _ctx.s = 1818; + classOrInterfaceType(_ctx); + break; + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + _ctx.s = 1820; + primitiveType(_ctx); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[97]); + } + return _ctx; + } + + + public final ParserRuleContext innerCreator(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 194); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[98]); + int _la; + try { + _ctx.s = 1824; + match(DOT); + _ctx.s = 1826; + match(NEW); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 1828; + nonWildcardTypeArguments(_ctx); + } + + _ctx.s = 1832; + match(IDENTIFIER); + _la = state.input.LA(1); + if ( _la==GT ) { + _ctx.s = 1834; + typeArguments(_ctx); + } + + _ctx.s = 1838; + classCreatorRest(_ctx); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[98]); + } + return _ctx; + } + + + public final ParserRuleContext classCreatorRest(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 196); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[99]); + int _la; + try { + _ctx.s = 1840; + arguments(_ctx); + _la = state.input.LA(1); + if ( _la==LBRACE ) { + _ctx.s = 1842; + classBody(_ctx); + } + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[99]); + } + return _ctx; + } + + + public final ParserRuleContext nonWildcardTypeArguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 198); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[100]); + try { + _ctx.s = 1846; + match(GT); + _ctx.s = 1848; + typeList(_ctx); + _ctx.s = 1850; + match(LT); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[100]); + } + return _ctx; + } + + + public final ParserRuleContext arguments(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 200); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[101]); + int _la; + try { + _ctx.s = 1852; + match(LPAREN); + _la = state.input.LA(1); + if ( _la==LONGLITERAL || _la==INTLITERAL || _la==FLOATLITERAL || _la==DOUBLELITERAL || _la==CHARLITERAL || _la==STRINGLITERAL || _la==BOOLEAN || _la==BYTE || _la==CHAR || _la==DOUBLE || _la==FLOAT || _la==INT || _la==LONG || _la==NEW || _la==SHORT || _la==SUPER || _la==THIS || _la==VOID || _la==TRUE || _la==FALSE || _la==NULL || _la==LPAREN || _la==BANG || _la==TILDE || _la==PLUSPLUS || _la==SUBSUB || _la==PLUS || _la==SUB || _la==IDENTIFIER ) { + _ctx.s = 1854; + expressionList(_ctx); + } + + _ctx.s = 1858; + match(RPAREN); + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[101]); + } + return _ctx; + } + + + public final ParserRuleContext literal(ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, 202); + state.ctx = _ctx; + //System.out.println("enter "+ruleNames[102]); + try { + switch ( state.input.LA(1) ) { + case INTLITERAL: + _ctx.s = 1860; + match(INTLITERAL); + break; + case LONGLITERAL: + _ctx.s = 1862; + match(LONGLITERAL); + break; + case FLOATLITERAL: + _ctx.s = 1864; + match(FLOATLITERAL); + break; + case DOUBLELITERAL: + _ctx.s = 1866; + match(DOUBLELITERAL); + break; + case CHARLITERAL: + _ctx.s = 1868; + match(CHARLITERAL); + break; + case STRINGLITERAL: + _ctx.s = 1870; + match(STRINGLITERAL); + break; + case TRUE: + _ctx.s = 1872; + match(TRUE); + break; + case FALSE: + _ctx.s = 1874; + match(FALSE); + break; + case NULL: + _ctx.s = 1876; + match(NULL); + break; + default : + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[102]); + } + return _ctx; + } + + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\031\155\u0759\02\01\07\01\02\02\07\02\02\03\07\03\02\04\07\04\02\05"+ + "\07\05\02\06\07\06\02\07\07\07\02\010\07\010\02\011\07\011\02\012"+ + "\07\012\02\013\07\013\02\014\07\014\02\015\07\015\02\016\07\016\02"+ + "\017\07\017\02\020\07\020\02\021\07\021\02\022\07\022\02\023\07\023"+ + "\02\024\07\024\02\025\07\025\02\026\07\026\02\027\07\027\02\030\07"+ + "\030\02\031\07\031\02\032\07\032\02\033\07\033\02\034\07\034\02\035"+ + "\07\035\02\036\07\036\02\037\07\037\02\040\07\040\02\041\07\041\02"+ + "\042\07\042\02\043\07\043\02\044\07\044\02\045\07\045\02\046\07\046"+ + "\02\047\07\047\02\050\07\050\02\051\07\051\02\052\07\052\02\053\07"+ + "\053\02\054\07\054\02\055\07\055\02\056\07\056\02\057\07\057\02\060"+ + "\07\060\02\061\07\061\02\062\07\062\02\063\07\063\02\064\07\064\02"+ + "\065\07\065\02\066\07\066\02\067\07\067\02\070\07\070\02\071\07\071"+ + "\02\072\07\072\02\073\07\073\02\074\07\074\02\075\07\075\02\076\07"+ + "\076\02\077\07\077\02\100\07\100\02\101\07\101\02\102\07\102\02\103"+ + "\07\103\02\104\07\104\02\105\07\105\02\106\07\106\02\107\07\107\02"+ + "\110\07\110\02\111\07\111\02\112\07\112\02\113\07\113\02\114\07\114"+ + "\02\115\07\115\02\116\07\116\02\117\07\117\02\120\07\120\02\121\07"+ + "\121\02\122\07\122\02\123\07\123\02\124\07\124\02\125\07\125\02\126"+ + "\07\126\02\127\07\127\02\130\07\130\02\131\07\131\02\132\07\132\02"+ + "\133\07\133\02\134\07\134\02\135\07\135\02\136\07\136\02\137\07\137"+ + "\02\140\07\140\02\141\07\141\02\142\07\142\02\143\07\143\02\144\07"+ + "\144\02\145\07\145\02\146\07\146\01\01\01\01\03\01\010\01\01\01\01"+ + "\01\03\01\010\01\01\01\01\01\05\01\010\01\011\01\01\01\01\01\01\01"+ + "\05\01\010\01\011\01\01\01\01\02\01\02\01\02\01\02\01\02\01\02\01"+ + "\03\01\03\01\03\01\03\03\03\010\03\01\03\01\03\01\03\01\03\01\03\01"+ + "\03\01\03\01\03\01\03\01\03\01\03\01\03\03\03\010\03\01\03\01\03\01"+ + "\03\01\03\01\03\01\03\04\03\010\03\012\03\01\03\01\03\01\03\01\03"+ + "\01\03\03\03\010\03\01\03\01\03\03\03\010\03\01\04\01\04\01\04\01"+ + "\04\01\04\01\04\05\04\010\04\011\04\01\04\01\05\01\05\01\05\01\05"+ + "\03\05\010\05\01\06\01\06\01\06\01\06\03\06\010\06\01\07\01\07\01"+ + "\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01"+ + "\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\01\07\05"+ + "\07\010\07\011\07\01\07\01\010\01\010\01\010\01\010\05\010\010\010"+ + "\011\010\01\010\01\011\01\011\01\011\01\011\03\011\010\011\01\012"+ + "\01\012\01\012\01\012\01\012\01\012\01\012\01\012\03\012\010\012\01"+ + "\012\01\012\01\012\01\012\03\012\010\012\01\012\01\012\01\012\01\012"+ + "\03\012\010\012\01\012\01\012\01\013\01\013\01\013\01\013\01\013\01"+ + "\013\01\013\01\013\05\013\010\013\011\013\01\013\01\013\01\013\01"+ + "\014\01\014\01\014\01\014\01\014\01\014\03\014\010\014\01\015\01\015"+ + "\01\015\01\015\01\015\01\015\05\015\010\015\011\015\01\015\01\016"+ + "\01\016\01\016\01\016\01\016\01\016\01\016\01\016\01\016\01\016\03"+ + "\016\010\016\01\016\01\016\01\017\01\017\01\017\01\017\03\017\010"+ + "\017\01\017\01\017\03\017\010\017\01\017\01\017\03\017\010\017\01"+ + "\017\01\017\01\020\01\020\01\020\01\020\01\020\01\020\05\020\010\020"+ + "\011\020\01\020\01\021\01\021\03\021\010\021\01\021\01\021\01\021"+ + "\01\021\03\021\010\021\01\021\01\021\03\021\010\021\01\022\01\022"+ + "\01\022\01\022\05\022\010\022\011\022\01\022\01\023\01\023\01\023"+ + "\01\023\03\023\010\023\01\024\01\024\01\024\01\024\01\024\01\024\01"+ + "\024\01\024\03\024\010\024\01\024\01\024\01\024\01\024\03\024\010"+ + "\024\01\024\01\024\01\025\01\025\01\025\01\025\01\025\01\025\05\025"+ + "\010\025\011\025\01\025\01\026\01\026\01\026\01\026\05\026\010\026"+ + "\011\026\01\026\01\026\01\026\01\027\01\027\01\027\01\027\05\027\010"+ + "\027\011\027\01\027\01\027\01\027\01\030\01\030\01\030\01\030\03\030"+ + "\010\030\01\030\01\030\01\030\01\030\03\030\010\030\01\031\01\031"+ + "\01\031\01\031\01\031\01\031\01\031\01\031\03\031\010\031\01\032\01"+ + "\032\01\032\01\032\03\032\010\032\01\032\01\032\01\032\01\032\01\032"+ + "\01\032\01\032\01\032\03\032\010\032\01\032\01\032\01\032\01\032\03"+ + "\032\010\032\01\032\01\032\05\032\010\032\011\032\01\032\01\032\01"+ + "\032\01\032\01\032\01\032\01\032\03\032\010\032\01\032\01\032\01\032"+ + "\01\032\03\032\010\032\01\032\01\032\01\032\01\032\01\032\01\032\01"+ + "\032\01\032\05\032\010\032\011\032\01\032\01\032\01\032\01\032\01"+ + "\032\03\032\010\032\01\032\01\032\01\032\01\032\03\032\010\032\03"+ + "\032\010\032\01\033\01\033\01\033\01\033\01\033\01\033\01\033\01\033"+ + "\01\033\01\033\05\033\010\033\011\033\01\033\01\033\01\033\01\034"+ + "\01\034\01\034\01\034\01\034\01\034\05\034\010\034\011\034\01\034"+ + "\01\034\01\034\01\034\01\034\03\034\010\034\01\035\01\035\01\035\01"+ + "\035\01\035\01\035\01\035\01\035\01\035\01\035\03\035\010\035\01\036"+ + "\01\036\01\036\01\036\03\036\010\036\01\036\01\036\01\036\01\036\03"+ + "\036\010\036\01\036\01\036\01\036\01\036\01\036\01\036\01\036\01\036"+ + "\05\036\010\036\011\036\01\036\01\036\01\036\01\036\01\036\03\036"+ + "\010\036\01\036\01\036\01\037\01\037\01\037\01\037\01\037\01\037\01"+ + "\037\01\037\01\037\01\037\05\037\010\037\011\037\01\037\01\037\01"+ + "\037\01\040\01\040\01\040\01\040\01\040\01\040\05\040\010\040\011"+ + "\040\01\040\01\040\01\040\01\040\01\040\01\040\01\040\05\040\010\040"+ + "\011\040\01\040\03\040\010\040\01\041\01\041\01\041\01\041\03\041"+ + "\010\041\01\041\01\041\01\041\01\041\01\041\01\041\03\041\010\041"+ + "\05\041\010\041\011\041\01\041\01\042\01\042\01\042\01\042\01\042"+ + "\01\042\01\042\01\042\01\042\01\042\01\042\01\042\01\042\01\042\01"+ + "\042\01\042\03\042\010\042\01\043\01\043\01\043\01\043\01\043\01\043"+ + "\01\043\01\043\05\043\010\043\011\043\01\043\01\043\01\043\01\044"+ + "\01\044\01\044\01\044\01\044\01\044\01\044\01\044\03\044\010\044\01"+ + "\044\01\044\03\044\010\044\03\044\010\044\01\045\01\045\01\045\01"+ + "\045\01\045\01\045\05\045\010\045\011\045\01\045\01\046\01\046\01"+ + "\046\01\046\03\046\010\046\01\046\01\046\01\047\01\047\01\047\01\047"+ + "\01\047\01\047\01\047\01\047\05\047\010\047\011\047\01\047\01\047"+ + "\01\047\01\047\01\047\04\047\010\047\012\047\01\047\01\047\01\047"+ + "\03\047\010\047\01\050\01\050\01\050\01\050\01\050\01\050\01\050\01"+ + "\050\01\050\01\050\05\050\010\050\011\050\01\050\01\051\01\051\01"+ + "\051\01\051\01\051\01\051\01\051\01\051\01\052\01\052\03\052\010\052"+ + "\01\052\01\052\01\052\01\052\03\052\010\052\01\052\01\052\01\052\01"+ + "\052\01\052\01\052\01\052\01\052\01\052\01\052\03\052\010\052\01\052"+ + "\01\052\01\052\01\052\01\052\01\052\03\052\010\052\01\053\01\053\01"+ + "\053\01\053\01\053\01\053\05\053\010\053\011\053\01\053\01\054\01"+ + "\054\04\054\010\054\012\054\01\054\01\055\01\055\01\055\01\055\01"+ + "\055\01\055\01\055\01\055\01\055\01\055\03\055\010\055\01\055\01\055"+ + "\03\055\010\055\01\056\01\056\01\056\01\056\01\056\01\056\05\056\010"+ + "\056\011\056\01\056\01\057\01\057\01\057\01\057\01\057\01\057\01\060"+ + "\01\060\01\060\01\060\01\060\01\060\03\060\010\060\01\061\01\061\01"+ + "\061\01\061\01\061\01\061\01\061\01\061\05\061\010\061\011\061\01"+ + "\061\03\061\010\061\01\061\01\061\03\061\010\061\01\061\01\061\01"+ + "\062\01\062\01\062\01\062\01\062\01\062\01\062\01\062\01\062\01\062"+ + "\01\063\01\063\01\063\01\063\05\063\010\063\011\063\01\063\01\063"+ + "\01\063\01\064\01\064\01\064\01\064\01\064\01\064\01\064\01\064\01"+ + "\064\01\064\01\064\01\064\01\064\01\064\03\064\010\064\01\065\01\065"+ + "\01\065\01\065\01\065\01\065\01\065\01\065\01\065\01\065\01\065\01"+ + "\065\01\065\01\065\03\065\010\065\01\065\01\065\01\066\01\066\01\066"+ + "\01\066\05\066\010\066\011\066\01\066\01\066\01\066\01\067\01\067"+ + "\01\067\01\067\01\067\01\067\03\067\010\067\01\070\01\070\01\070\01"+ + "\070\01\071\01\071\01\071\01\071\01\071\01\071\01\071\01\071\01\071"+ + "\01\071\05\071\010\071\011\071\01\071\01\072\01\072\01\072\01\072"+ + "\01\072\01\072\01\072\01\072\01\072\01\072\03\072\010\072\01\072\01"+ + "\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\03\072"+ + "\010\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\01\072\03\072\010\072\01\072\01\072\01\072\01\072"+ + "\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072"+ + "\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\03\072\010\072"+ + "\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\03\072\010\072\01\072\01\072\01\072\01\072\01\072"+ + "\01\072\03\072\010\072\01\072\01\072\01\072\01\072\01\072\01\072\01"+ + "\072\01\072\01\072\01\072\01\072\01\072\01\072\01\072\03\072\010\072"+ + "\01\073\01\073\05\073\010\073\011\073\01\073\01\074\01\074\01\074"+ + "\01\074\05\074\010\074\011\074\01\074\01\075\01\075\01\075\01\075"+ + "\01\075\01\075\01\075\01\075\01\075\01\075\03\075\010\075\01\076\01"+ + "\076\01\076\01\076\01\076\01\076\01\076\01\076\01\076\01\076\01\076"+ + "\01\076\01\076\01\076\01\076\01\076\03\076\010\076\01\077\01\077\01"+ + "\077\01\077\05\077\010\077\011\077\01\077\01\100\01\100\01\100\01"+ + "\100\01\100\01\100\01\100\01\100\01\100\01\100\01\101\01\101\01\101"+ + "\01\101\01\101\01\101\01\101\01\101\01\101\01\101\05\101\010\101\011"+ + "\101\01\101\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01\102"+ + "\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01\102\01"+ + "\102\01\102\01\102\01\102\01\102\01\102\01\102\03\102\010\102\01\102"+ + "\01\102\01\102\01\102\03\102\010\102\01\102\01\102\01\102\01\102\03"+ + "\102\010\102\01\102\01\102\01\102\01\102\03\102\010\102\01\103\01"+ + "\103\01\103\01\103\03\103\010\103\01\104\01\104\01\104\01\104\01\104"+ + "\01\104\01\105\01\105\01\105\01\105\01\105\01\105\05\105\010\105\011"+ + "\105\01\105\01\106\01\106\01\106\01\106\01\106\01\106\03\106\010\106"+ + "\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01"+ + "\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107"+ + "\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01"+ + "\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107\01\107"+ + "\03\107\010\107\01\110\01\110\01\110\01\110\01\110\01\110\01\110\01"+ + "\110\01\110\01\110\03\110\010\110\01\111\01\111\01\111\01\111\01\111"+ + "\01\111\05\111\010\111\011\111\01\111\01\112\01\112\01\112\01\112"+ + "\01\112\01\112\05\112\010\112\011\112\01\112\01\113\01\113\01\113"+ + "\01\113\01\113\01\113\05\113\010\113\011\113\01\113\01\114\01\114"+ + "\01\114\01\114\01\114\01\114\05\114\010\114\011\114\01\114\01\115"+ + "\01\115\01\115\01\115\01\115\01\115\05\115\010\115\011\115\01\115"+ + "\01\116\01\116\01\116\01\116\01\116\01\116\03\116\010\116\01\116\01"+ + "\116\05\116\010\116\011\116\01\116\01\117\01\117\01\117\01\117\01"+ + "\117\01\117\03\117\010\117\01\120\01\120\01\120\01\120\01\120\01\120"+ + "\05\120\010\120\011\120\01\120\01\121\01\121\01\121\01\121\01\121"+ + "\01\121\01\121\01\121\01\121\01\121\01\121\01\121\03\121\010\121\01"+ + "\122\01\122\01\122\01\122\01\122\01\122\05\122\010\122\011\122\01"+ + "\122\01\123\01\123\01\123\01\123\01\123\01\123\01\123\01\123\01\123"+ + "\01\123\01\123\01\123\01\123\01\123\03\123\010\123\01\124\01\124\01"+ + "\124\01\124\01\124\01\124\03\124\010\124\01\124\01\124\05\124\010"+ + "\124\011\124\01\124\01\125\01\125\01\125\01\125\01\125\01\125\01\125"+ + "\01\125\03\125\010\125\01\125\01\125\05\125\010\125\011\125\01\125"+ + "\01\126\01\126\01\126\01\126\01\126\01\126\01\126\01\126\01\126\01"+ + "\126\01\126\01\126\01\126\01\126\01\126\01\126\01\126\01\126\03\126"+ + "\010\126\01\127\01\127\01\127\01\127\01\127\01\127\01\127\01\127\01"+ + "\127\01\127\01\127\01\127\01\127\01\127\05\127\010\127\011\127\01"+ + "\127\01\127\01\127\01\127\01\127\03\127\010\127\03\127\010\127\01"+ + "\130\01\130\01\130\01\130\01\130\01\130\01\130\01\130\01\130\01\130"+ + "\01\130\01\130\01\130\01\130\01\130\01\130\03\130\010\130\01\131\01"+ + "\131\01\131\01\131\01\131\01\131\01\131\01\131\05\131\010\131\011"+ + "\131\01\131\01\131\01\131\03\131\010\131\01\131\01\131\01\131\01\131"+ + "\01\131\01\131\05\131\010\131\011\131\01\131\01\131\01\131\03\131"+ + "\010\131\01\131\01\131\01\131\01\131\01\131\01\131\01\131\01\131\01"+ + "\131\01\131\01\131\01\131\01\131\01\131\05\131\010\131\011\131\01"+ + "\131\01\131\01\131\01\131\01\131\01\131\01\131\01\131\01\131\01\131"+ + "\01\131\03\131\010\131\01\132\01\132\01\132\01\132\01\132\01\132\03"+ + "\132\010\132\01\132\01\132\01\132\01\132\03\132\010\132\03\132\010"+ + "\132\01\133\01\133\01\133\01\133\04\133\010\133\012\133\01\133\01"+ + "\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133"+ + "\04\133\010\133\012\133\01\133\01\133\01\133\01\133\01\133\01\133"+ + "\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01"+ + "\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133\01\133"+ + "\01\133\01\133\03\133\010\133\01\134\01\134\01\134\01\134\01\134\01"+ + "\134\03\134\010\134\01\134\01\134\01\134\01\134\01\134\01\134\01\134"+ + "\01\134\01\134\01\134\01\134\01\134\01\134\01\134\01\134\01\134\01"+ + "\134\01\134\03\134\010\134\01\135\01\135\01\135\01\135\01\135\01\135"+ + "\01\135\01\135\01\135\01\135\01\135\01\135\01\135\01\135\01\135\01"+ + "\135\03\135\010\135\01\136\01\136\01\136\01\136\01\136\01\136\01\136"+ + "\01\136\01\136\01\136\01\136\01\136\05\136\010\136\011\136\01\136"+ + "\01\136\01\136\01\136\01\136\01\136\01\136\01\136\01\136\01\136\01"+ + "\136\01\136\01\136\01\136\01\136\01\136\01\136\01\136\01\136\05\136"+ + "\010\136\011\136\01\136\01\136\01\136\01\136\01\136\05\136\010\136"+ + "\011\136\01\136\03\136\010\136\01\137\01\137\01\137\01\137\03\137"+ + "\010\137\01\140\01\140\01\140\01\140\01\140\01\140\01\140\01\140\05"+ + "\140\010\140\011\140\01\140\03\140\010\140\01\140\01\140\03\140\010"+ + "\140\01\140\01\140\01\141\01\141\01\141\01\141\03\141\010\141\01\142"+ + "\01\142\01\142\01\142\01\142\01\142\03\142\010\142\01\142\01\142\01"+ + "\142\01\142\03\142\010\142\01\142\01\142\01\143\01\143\01\143\01\143"+ + "\03\143\010\143\01\144\01\144\01\144\01\144\01\144\01\144\01\145\01"+ + "\145\01\145\01\145\03\145\010\145\01\145\01\145\01\146\01\146\01\146"+ + "\01\146\01\146\01\146\01\146\01\146\01\146\01\146\01\146\01\146\01"+ + "\146\01\146\01\146\01\146\01\146\01\146\03\146\010\146\01\146\146"+ + "\00\00\00\02\00\00\04\00\00\06\00\00\010\00\00\012\00\00\014\00\00"+ + "\016\00\00\020\00\00\022\00\00\024\00\00\026\00\00\030\00\00\032\00"+ + "\00\034\00\00\036\00\00\040\00\00\042\00\00\044\00\00\046\00\00\050"+ + "\00\00\052\00\00\054\00\00\056\00\00\060\00\00\062\00\00\064\00\00"+ + "\066\00\00\070\00\00\072\00\00\074\00\00\076\00\00\100\00\00\102\00"+ + "\00\104\00\00\106\00\00\110\00\00\112\00\00\114\00\00\116\00\00\120"+ + "\00\00\122\00\00\124\00\00\126\00\00\130\00\00\132\00\00\134\00\00"+ + "\136\00\00\140\00\00\142\00\00\144\00\00\146\00\00\150\00\00\152\00"+ + "\00\154\00\00\156\00\00\160\00\00\162\00\00\164\00\00\166\00\00\170"+ + "\00\00\172\00\00\174\00\00\176\00\00\u0080\00\00\u0082\00\00\u0084"+ + "\00\00\u0086\00\00\u0088\00\00\u008a\00\00\u008c\00\00\u008e\00\00"+ + "\u0090\00\00\u0092\00\00\u0094\00\00\u0096\00\00\u0098\00\00\u009a"+ + "\00\00\u009c\00\00\u009e\00\00\u00a0\00\00\u00a2\00\00\u00a4\00\00"+ + "\u00a6\00\00\u00a8\00\00\u00aa\00\00\u00ac\00\00\u00ae\00\00\u00b0"+ + "\00\00\u00b2\00\00\u00b4\00\00\u00b6\00\00\u00b8\00\00\u00ba\00\00"+ + "\u00bc\00\00\u00be\00\00\u00c0\00\00\u00c2\00\00\u00c4\00\00\u00c6"+ + "\00\00\u00c8\00\00\u00ca\00\00\00\00\u0909\00\u00d2\01\00\00\01\u0758"+ + "\05\uffff\00\02\u00e0\01\00\00\03\u00d1\01\00\00\04\u010c\01\00\00"+ + "\05\u00d5\01\00\00\06\u010e\01\00\00\07\u0758\05\uffff\00\010\u011c"+ + "\01\00\00\011\u00db\01\00\00\012\u0122\01\00\00\013\u0119\01\00\00"+ + "\013\u03f5\01\00\00\014\u013c\01\00\00\015\u014f\01\00\00\015\u0187"+ + "\01\00\00\015\u01cb\01\00\00\015\u0211\01\00\00\015\u022f\01\00\00"+ + "\015\u0255\01\00\00\015\u0281\01\00\00\015\u02a1\01\00\00\015\u03b3"+ + "\01\00\00\015\u03d7\01\00\00\016\u0144\01\00\00\017\u0333\01\00\00"+ + "\017\u0341\01\00\00\017\u03ff\01\00\00\017\u04c1\01\00\00\017\u04d3"+ + "\01\00\00\020\u014c\01\00\00\021\u011f\01\00\00\021\u020b\01\00\00"+ + "\021\u027b\01\00\00\022\u014e\01\00\00\023\u0149\01\00\00\023\u03cb"+ + "\01\00\00\024\u0166\01\00\00\025\u0155\01\00\00\025\u01d1\01\00\00"+ + "\025\u0213\01\00\00\025\u0231\01\00\00\025\u0283\01\00\00\026\u0174"+ + "\01\00\00\027\u0169\01\00\00\027\u016d\01\00\00\030\u017c\01\00\00"+ + "\031\u0179\01\00\00\032\u0186\01\00\00\033\u014b\01\00\00\033\u03cf"+ + "\01\00\00\034\u0194\01\00\00\035\u0193\01\00\00\036\u01a4\01\00\00"+ + "\037\u0197\01\00\00\040\u01b0\01\00\00\041\u01a5\01\00\00\041\u01a9"+ + "\01\00\00\042\u01bc\01\00\00\043\u019f\01\00\00\044\u01c8\01\00\00"+ + "\045\u0121\01\00\00\045\u020d\01\00\00\045\u0279\01\00\00\046\u01ca"+ + "\01\00\00\047\u01c5\01\00\00\047\u03cd\01\00\00\050\u01dc\01\00\00"+ + "\051\u0161\01\00\00\051\u018f\01\00\00\051\u01d7\01\00\00\051\u0739"+ + "\01\00\00\052\u01e6\01\00\00\053\u0165\01\00\00\053\u01b9\01\00\00"+ + "\053\u0733\01\00\00\054\u01f0\01\00\00\055\u01db\01\00\00\056\u0204"+ + "\01\00\00\057\u01bf\01\00\00\057\u01e9\01\00\00\060\u020e\01\00\00"+ + "\061\u0203\01\00\00\062\u0252\01\00\00\063\u0209\01\00\00\064\u0254"+ + "\01\00\00\065\u0207\01\00\00\066\u0264\01\00\00\067\u0259\01\00\00"+ + "\067\u025d\01\00\00\067\u02a5\01\00\00\067\u02a9\01\00\00\067\u0403"+ + "\01\00\00\067\u0407\01\00\00\070\u027e\01\00\00\071\u01f3\01\00\00"+ + "\072\u0280\01\00\00\073\u0277\01\00\00\074\u02a0\01\00\00\075\u0275"+ + "\01\00\00\075\u03c9\01\00\00\076\u02c4\01\00\00\077\u015b\01\00\00"+ + "\077\u017d\01\00\00\077\u0181\01\00\00\077\u01dd\01\00\00\077\u01e1"+ + "\01\00\00\077\u0235\01\00\00\077\u0257\01\00\00\077\u0287\01\00\00"+ + "\077\u02a3\01\00\00\077\u02f9\01\00\00\077\u0303\01\00\00\077\u0335"+ + "\01\00\00\077\u0343\01\00\00\077\u03d9\01\00\00\077\u0401\01\00\00"+ + "\077\u04c3\01\00\00\077\u04d5\01\00\00\077\u0591\01\00\00\077\u061d"+ + "\01\00\00\100\u02c6\01\00\00\101\u02b1\01\00\00\101\u06c3\01\00\00"+ + "\101\u06c9\01\00\00\101\u071b\01\00\00\102\u02e8\01\00\00\103\u02bb"+ + "\01\00\00\103\u0615\01\00\00\103\u064b\01\00\00\103\u071d\01\00\00"+ + "\104\u02ea\01\00\00\105\u02c9\01\00\00\105\u02d1\01\00\00\105\u0665"+ + "\01\00\00\105\u072b\01\00\00\106\u0306\01\00\00\107\u02ed\01\00\00"+ + "\107\u02f1\01\00\00\110\u0308\01\00\00\111\u021d\01\00\00\111\u0249"+ + "\01\00\00\111\u029b\01\00\00\112\u0312\01\00\00\113\u0219\01\00\00"+ + "\113\u023d\01\00\00\113\u028f\01\00\00\114\u0330\01\00\00\115\u0315"+ + "\01\00\00\116\u0332\01\00\00\117\u031d\01\00\00\117\u0321\01\00\00"+ + "\117\u0327\01\00\00\120\u0340\01\00\00\121\u031b\01\00\00\121\u032f"+ + "\01\00\00\122\u0364\01\00\00\123\u0223\01\00\00\124\u0366\01\00\00"+ + "\125\u00e3\01\00\00\125\u0309\01\00\00\125\u030d\01\00\00\125\u0379"+ + "\01\00\00\126\u0372\01\00\00\127\u00cd\01\00\00\127\u01af\01\00\00"+ + "\130\u0376\01\00\00\131\u0125\01\00\00\131\u0143\01\00\00\131\u0371"+ + "\01\00\00\131\u0399\01\00\00\132\u0386\01\00\00\133\u037d\01\00\00"+ + "\134\u0390\01\00\00\135\u0387\01\00\00\135\u038b\01\00\00\136\u039c"+ + "\01\00\00\137\u037f\01\00\00\137\u0395\01\00\00\137\u03a1\01\00\00"+ + "\137\u03a5\01\00\00\137\u03e3\01\00\00\140\u039e\01\00\00\141\u039b"+ + "\01\00\00\142\u03b2\01\00\00\143\u01c7\01\00\00\143\u03d1\01\00\00"+ + "\144\u03bc\01\00\00\145\u03bb\01\00\00\146\u03d4\01\00\00\147\u03bf"+ + "\01\00\00\150\u03d6\01\00\00\151\u03c7\01\00\00\152\u03e8\01\00\00"+ + "\153\u0201\01\00\00\153\u024d\01\00\00\153\u040d\01\00\00\153\u0455"+ + "\01\00\00\153\u049f\01\00\00\153\u04a5\01\00\00\153\u04ab\01\00\00"+ + "\153\u04bf\01\00\00\154\u03f8\01\00\00\155\u0227\01\00\00\155\u03eb"+ + "\01\00\00\155\u048b\01\00\00\156\u03fa\01\00\00\157\u03f3\01\00\00"+ + "\160\u03fe\01\00\00\161\u03fb\01\00\00\161\u04fb\01\00\00\162\u0480"+ + "\01\00\00\163\u03f7\01\00\00\163\u042b\01\00\00\163\u042f\01\00\00"+ + "\163\u0439\01\00\00\163\u043d\01\00\00\163\u047d\01\00\00\163\u04df"+ + "\01\00\00\163\u04f7\01\00\00\164\u0484\01\00\00\165\u044d\01\00\00"+ + "\166\u0488\01\00\00\167\u0483\01\00\00\170\u049a\01\00\00\171\u0489"+ + "\01\00\00\172\u049c\01\00\00\173\u0445\01\00\00\174\u04ae\01\00\00"+ + "\175\u04a1\01\00\00\175\u04a7\01\00\00\176\u04b6\01\00\00\177\u04af"+ + "\01\00\00\177\u04b1\01\00\00\u0080\u04c0\01\00\00\u0081\u04bb\01\00"+ + "\00\u0082\u04f8\01\00\00\u0083\u0433\01\00\00\u0084\u04fe\01\00\00"+ + "\u0085\u04e5\01\00\00\u0086\u0500\01\00\00\u0087\u0429\01\00\00\u0087"+ + "\u0437\01\00\00\u0087\u0441\01\00\00\u0087\u0449\01\00\00\u0087\u0453"+ + "\01\00\00\u0087\u0625\01\00\00\u0088\u0506\01\00\00\u0089\u04f1\01"+ + "\00\00\u0089\u04fd\01\00\00\u0089\u073f\01\00\00\u008a\u0510\01\00"+ + "\00\u008b\u0411\01\00\00\u008b\u0415\01\00\00\u008b\u041d\01\00\00"+ + "\u008b\u0421\01\00\00\u008b\u0459\01\00\00\u008b\u0461\01\00\00\u008b"+ + "\u0475\01\00\00\u008b\u0493\01\00\00\u008b\u04db\01\00\00\u008b\u04eb"+ + "\01\00\00\u008b\u0503\01\00\00\u008b\u0507\01\00\00\u008b\u050b\01"+ + "\00\00\u008b\u0515\01\00\00\u008b\u0545\01\00\00\u008b\u067f\01\00"+ + "\00\u008b\u06b9\01\00\00\u008b\u06e9\01\00\00\u008b\u06ef\01\00\00"+ + "\u008b\u0703\01\00\00\u008c\u053e\01\00\00\u008d\u0513\01\00\00\u008e"+ + "\u0540\01\00\00\u008f\u0397\01\00\00\u008f\u0511\01\00\00\u008f\u0549"+ + "\01\00\00\u0090\u054c\01\00\00\u0091\u0541\01\00\00\u0092\u0556\01"+ + "\00\00\u0093\u054d\01\00\00\u0093\u0551\01\00\00\u0094\u0560\01\00"+ + "\00\u0095\u0557\01\00\00\u0095\u055b\01\00\00\u0096\u056a\01\00\00"+ + "\u0097\u0561\01\00\00\u0097\u0565\01\00\00\u0098\u0574\01\00\00\u0099"+ + "\u056b\01\00\00\u0099\u056f\01\00\00\u009a\u057e\01\00\00\u009b\u0575"+ + "\01\00\00\u009b\u0579\01\00\00\u009c\u058c\01\00\00\u009d\u057f\01"+ + "\00\00\u009d\u0587\01\00\00\u009e\u0594\01\00\00\u009f\u058d\01\00"+ + "\00\u00a0\u05aa\01\00\00\u00a1\u0597\01\00\00\u00a2\u05ac\01\00\00"+ + "\u00a3\u0595\01\00\00\u00a3\u0599\01\00\00\u00a4\u05c4\01\00\00\u00a5"+ + "\u05af\01\00\00\u00a6\u05c6\01\00\00\u00a7\u05ad\01\00\00\u00a7\u05b1"+ + "\01\00\00\u00a8\u05d4\01\00\00\u00a9\u05c7\01\00\00\u00a9\u05cf\01"+ + "\00\00\u00aa\u05f6\01\00\00\u00ab\u05d5\01\00\00\u00ab\u05df\01\00"+ + "\00\u00ab\u05e7\01\00\00\u00ab\u05eb\01\00\00\u00ab\u05ef\01\00\00"+ + "\u00ab\u05f3\01\00\00\u00ab\u05fb\01\00\00\u00ab\u05ff\01\00\00\u00ab"+ + "\u0619\01\00\00\u00ac\u0610\01\00\00\u00ad\u05f5\01\00\00\u00ad\u0621"+ + "\01\00\00\u00ae\u0622\01\00\00\u00af\u0601\01\00\00\u00b0\u065e\01"+ + "\00\00\u00b1\u0357\01\00\00\u00b1\u0603\01\00\00\u00b2\u066e\01\00"+ + "\00\u00b3\u0645\01\00\00\u00b3\u06b3\01\00\00\u00b4\u06a0\01\00\00"+ + "\u00b5\u0631\01\00\00\u00b5\u063f\01\00\00\u00b6\u06bc\01\00\00\u00b7"+ + "\u0605\01\00\00\u00b8\u06ce\01\00\00\u00b9\u0649\01\00\00\u00ba\u06fe"+ + "\01\00\00\u00bb\u06cd\01\00\00\u00bc\u0704\01\00\00\u00bd\u0271\01"+ + "\00\00\u00bd\u0709\01\00\00\u00bd\u070d\01\00\00\u00be\u0706\01\00"+ + "\00\u00bf\u06e1\01\00\00\u00bf\u0701\01\00\00\u00c0\u071e\01\00\00"+ + "\u00c1\u06d3\01\00\00\u00c1\u06e5\01\00\00\u00c2\u0720\01\00\00\u00c3"+ + "\u069f\01\00\00\u00c3\u06b5\01\00\00\u00c4\u0730\01\00\00\u00c5\u06c5"+ + "\01\00\00\u00c5\u06cb\01\00\00\u00c5\u072f\01\00\00\u00c6\u0736\01"+ + "\00\00\u00c7\u0349\01\00\00\u00c7\u035b\01\00\00\u00c7\u068f\01\00"+ + "\00\u00c7\u06c1\01\00\00\u00c7\u0725\01\00\00\u00c8\u073c\01\00\00"+ + "\u00c9\u01b5\01\00\00\u00c9\u0353\01\00\00\u00c9\u0361\01\00\00\u00c9"+ + "\u0661\01\00\00\u00c9\u066b\01\00\00\u00c9\u0687\01\00\00\u00c9\u0693"+ + "\01\00\00\u00c9\u069d\01\00\00\u00c9\u06a7\01\00\00\u00c9\u0731\01"+ + "\00\00\u00ca\u0756\01\00\00\u00cb\u0647\01\00\00\u00cc\u00cd\03\126"+ + "\054\u00cd\u00cf\01\00\00\u00ce\u00cc\01\00\00\u00ce\u00cf\01\00\00"+ + "\u00cf\u00d0\01\00\00\u00d0\u00d1\03\02\02\u00d1\u00d3\01\00\00\u00d2"+ + "\u00ce\01\00\00\u00d2\u00d3\01\00\00\u00d3\u00d6\01\00\00\u00d4\u00d5"+ + "\03\04\03\u00d5\u00d7\01\00\00\u00d6\u00d4\01\00\00\u00d6\u00d9\01"+ + "\00\00\u00d7\u00d8\01\00\00\u00d8\u00d6\01\00\00\u00d9\u00dc\01\00"+ + "\00\u00da\u00db\03\010\05\u00db\u00dd\01\00\00\u00dc\u00da\01\00\00"+ + "\u00dc\u00df\01\00\00\u00dd\u00de\01\00\00\u00de\u00dc\01\00\00\u00df"+ + "\01\01\00\00\u00e0\u00e1\05\054\00\u00e1\u00e2\01\00\00\u00e2\u00e3"+ + "\03\124\053\u00e3\u00e4\01\00\00\u00e4\u00e5\05\110\00\u00e5\03\01"+ + "\00\00\u00e6\u00e7\05\045\00\u00e7\u00ea\01\00\00\u00e8\u00e9\05\062"+ + "\00\u00e9\u00eb\01\00\00\u00ea\u00e8\01\00\00\u00ea\u00eb\01\00\00"+ + "\u00eb\u00ec\01\00\00\u00ec\u00ed\05\152\00\u00ed\u00ee\01\00\00\u00ee"+ + "\u00ef\05\112\00\u00ef\u00f0\01\00\00\u00f0\u00f1\05\130\00\u00f1"+ + "\u00f2\01\00\00\u00f2\u00f3\05\110\00\u00f3\u010d\01\00\00\u00f4\u00f5"+ + "\05\045\00\u00f5\u00f8\01\00\00\u00f6\u00f7\05\062\00\u00f7\u00f9"+ + "\01\00\00\u00f8\u00f6\01\00\00\u00f8\u00f9\01\00\00\u00f9\u00fa\01"+ + "\00\00\u00fa\u00fb\05\152\00\u00fb\u0100\01\00\00\u00fc\u00fd\05\112"+ + "\00\u00fd\u00fe\01\00\00\u00fe\u00ff\05\152\00\u00ff\u0101\01\00\00"+ + "\u0100\u00fc\01\00\00\u0101\u0102\01\00\00\u0102\u00fc\01\00\00\u0102"+ + "\u0103\01\00\00\u0103\u0108\01\00\00\u0104\u0105\05\112\00\u0105\u0106"+ + "\01\00\00\u0106\u0107\05\130\00\u0107\u0109\01\00\00\u0108\u0104\01"+ + "\00\00\u0108\u0109\01\00\00\u0109\u010a\01\00\00\u010a\u010b\05\110"+ + "\00\u010b\u010d\01\00\00\u010c\u00e6\01\00\00\u010c\u00f4\01\00\00"+ + "\u010d\05\01\00\00\u010e\u010f\05\152\00\u010f\u0114\01\00\00\u0110"+ + "\u0111\05\112\00\u0111\u0112\01\00\00\u0112\u0113\05\152\00\u0113"+ + "\u0115\01\00\00\u0114\u0110\01\00\00\u0114\u0117\01\00\00\u0115\u0116"+ + "\01\00\00\u0116\u0114\01\00\00\u0117\07\01\00\00\u0118\u0119\03\012"+ + "\06\u0119\u011d\01\00\00\u011a\u011b\05\110\00\u011b\u011d\01\00\00"+ + "\u011c\u0118\01\00\00\u011c\u011a\01\00\00\u011d\011\01\00\00\u011e"+ + "\u011f\03\020\011\u011f\u0123\01\00\00\u0120\u0121\03\044\023\u0121"+ + "\u0123\01\00\00\u0122\u011e\01\00\00\u0122\u0120\01\00\00\u0123\013"+ + "\01\00\00\u0124\u0125\03\130\055\u0125\u013d\01\00\00\u0126\u0127"+ + "\05\057\00\u0127\u013d\01\00\00\u0128\u0129\05\056\00\u0129\u013d"+ + "\01\00\00\u012a\u012b\05\055\00\u012b\u013d\01\00\00\u012c\u012d\05"+ + "\062\00\u012d\u013d\01\00\00\u012e\u012f\05\015\00\u012f\u013d\01"+ + "\00\00\u0130\u0131\05\036\00\u0131\u013d\01\00\00\u0132\u0133\05\052"+ + "\00\u0133\u013d\01\00\00\u0134\u0135\05\066\00\u0135\u013d\01\00\00"+ + "\u0136\u0137\05\072\00\u0137\u013d\01\00\00\u0138\u0139\05\075\00"+ + "\u0139\u013d\01\00\00\u013a\u013b\05\063\00\u013b\u013d\01\00\00\u013c"+ + "\u0124\01\00\00\u013c\u0126\01\00\00\u013c\u0128\01\00\00\u013c\u012a"+ + "\01\00\00\u013c\u012c\01\00\00\u013c\u012e\01\00\00\u013c\u0130\01"+ + "\00\00\u013c\u0132\01\00\00\u013c\u0134\01\00\00\u013c\u0136\01\00"+ + "\00\u013c\u0138\01\00\00\u013c\u013a\01\00\00\u013c\u013f\01\00\00"+ + "\u013d\u013e\01\00\00\u013e\u013c\01\00\00\u013f\015\01\00\00\u0140"+ + "\u0141\05\036\00\u0141\u0145\01\00\00\u0142\u0143\03\130\055\u0143"+ + "\u0145\01\00\00\u0144\u0140\01\00\00\u0144\u0142\01\00\00\u0144\u0147"+ + "\01\00\00\u0145\u0146\01\00\00\u0146\u0144\01\00\00\u0147\017\01\00"+ + "\00\u0148\u0149\03\022\012\u0149\u014d\01\00\00\u014a\u014b\03\032"+ + "\016\u014b\u014d\01\00\00\u014c\u0148\01\00\00\u014c\u014a\01\00\00"+ + "\u014d\021\01\00\00\u014e\u014f\03\014\07\u014f\u0150\01\00\00\u0150"+ + "\u0151\05\025\00\u0151\u0152\01\00\00\u0152\u0153\05\152\00\u0153"+ + "\u0156\01\00\00\u0154\u0155\03\024\013\u0155\u0157\01\00\00\u0156"+ + "\u0154\01\00\00\u0156\u0157\01\00\00\u0157\u015c\01\00\00\u0158\u0159"+ + "\05\035\00\u0159\u015a\01\00\00\u015a\u015b\03\076\040\u015b\u015d"+ + "\01\00\00\u015c\u0158\01\00\00\u015c\u015d\01\00\00\u015d\u0162\01"+ + "\00\00\u015e\u015f\05\044\00\u015f\u0160\01\00\00\u0160\u0161\03\050"+ + "\025\u0161\u0163\01\00\00\u0162\u015e\01\00\00\u0162\u0163\01\00\00"+ + "\u0163\u0164\01\00\00\u0164\u0165\03\052\026\u0165\023\01\00\00\u0166"+ + "\u0167\05\150\00\u0167\u0168\01\00\00\u0168\u0169\03\026\014\u0169"+ + "\u016e\01\00\00\u016a\u016b\05\111\00\u016b\u016c\01\00\00\u016c\u016d"+ + "\03\026\014\u016d\u016f\01\00\00\u016e\u016a\01\00\00\u016e\u0171"+ + "\01\00\00\u016f\u0170\01\00\00\u0170\u016e\01\00\00\u0171\u0172\01"+ + "\00\00\u0172\u0173\05\151\00\u0173\025\01\00\00\u0174\u0175\05\152"+ + "\00\u0175\u017a\01\00\00\u0176\u0177\05\035\00\u0177\u0178\01\00\00"+ + "\u0178\u0179\03\030\015\u0179\u017b\01\00\00\u017a\u0176\01\00\00"+ + "\u017a\u017b\01\00\00\u017b\027\01\00\00\u017c\u017d\03\076\040\u017d"+ + "\u0182\01\00\00\u017e\u017f\05\132\00\u017f\u0180\01\00\00\u0180\u0181"+ + "\03\076\040\u0181\u0183\01\00\00\u0182\u017e\01\00\00\u0182\u0185"+ + "\01\00\00\u0183\u0184\01\00\00\u0184\u0182\01\00\00\u0185\031\01\00"+ + "\00\u0186\u0187\03\014\07\u0187\u0188\01\00\00\u0188\u0189\05\034"+ + "\00\u0189\u018a\01\00\00\u018a\u018b\05\152\00\u018b\u0190\01\00\00"+ + "\u018c\u018d\05\044\00\u018d\u018e\01\00\00\u018e\u018f\03\050\025"+ + "\u018f\u0191\01\00\00\u0190\u018c\01\00\00\u0190\u0191\01\00\00\u0191"+ + "\u0192\01\00\00\u0192\u0193\03\034\017\u0193\033\01\00\00\u0194\u0195"+ + "\05\104\00\u0195\u0198\01\00\00\u0196\u0197\03\036\020\u0197\u0199"+ + "\01\00\00\u0198\u0196\01\00\00\u0198\u0199\01\00\00\u0199\u019c\01"+ + "\00\00\u019a\u019b\05\111\00\u019b\u019d\01\00\00\u019c\u019a\01\00"+ + "\00\u019c\u019d\01\00\00\u019d\u01a0\01\00\00\u019e\u019f\03\042\022"+ + "\u019f\u01a1\01\00\00\u01a0\u019e\01\00\00\u01a0\u01a1\01\00\00\u01a1"+ + "\u01a2\01\00\00\u01a2\u01a3\05\105\00\u01a3\035\01\00\00\u01a4\u01a5"+ + "\03\040\021\u01a5\u01aa\01\00\00\u01a6\u01a7\05\111\00\u01a7\u01a8"+ + "\01\00\00\u01a8\u01a9\03\040\021\u01a9\u01ab\01\00\00\u01aa\u01a6"+ + "\01\00\00\u01aa\u01ad\01\00\00\u01ab\u01ac\01\00\00\u01ac\u01aa\01"+ + "\00\00\u01ad\037\01\00\00\u01ae\u01af\03\126\054\u01af\u01b1\01\00"+ + "\00\u01b0\u01ae\01\00\00\u01b0\u01b1\01\00\00\u01b1\u01b2\01\00\00"+ + "\u01b2\u01b3\05\152\00\u01b3\u01b6\01\00\00\u01b4\u01b5\03\u00c8\145"+ + "\u01b5\u01b7\01\00\00\u01b6\u01b4\01\00\00\u01b6\u01b7\01\00\00\u01b7"+ + "\u01ba\01\00\00\u01b8\u01b9\03\052\026\u01b9\u01bb\01\00\00\u01ba"+ + "\u01b8\01\00\00\u01ba\u01bb\01\00\00\u01bb\041\01\00\00\u01bc\u01bd"+ + "\05\110\00\u01bd\u01c0\01\00\00\u01be\u01bf\03\056\030\u01bf\u01c1"+ + "\01\00\00\u01c0\u01be\01\00\00\u01c0\u01c3\01\00\00\u01c1\u01c2\01"+ + "\00\00\u01c2\u01c0\01\00\00\u01c3\043\01\00\00\u01c4\u01c5\03\046"+ + "\024\u01c5\u01c9\01\00\00\u01c6\u01c7\03\142\062\u01c7\u01c9\01\00"+ + "\00\u01c8\u01c4\01\00\00\u01c8\u01c6\01\00\00\u01c9\045\01\00\00\u01ca"+ + "\u01cb\03\014\07\u01cb\u01cc\01\00\00\u01cc\u01cd\05\050\00\u01cd"+ + "\u01ce\01\00\00\u01ce\u01cf\05\152\00\u01cf\u01d2\01\00\00\u01d0\u01d1"+ + "\03\024\013\u01d1\u01d3\01\00\00\u01d2\u01d0\01\00\00\u01d2\u01d3"+ + "\01\00\00\u01d3\u01d8\01\00\00\u01d4\u01d5\05\035\00\u01d5\u01d6\01"+ + "\00\00\u01d6\u01d7\03\050\025\u01d7\u01d9\01\00\00\u01d8\u01d4\01"+ + "\00\00\u01d8\u01d9\01\00\00\u01d9\u01da\01\00\00\u01da\u01db\03\054"+ + "\027\u01db\047\01\00\00\u01dc\u01dd\03\076\040\u01dd\u01e2\01\00\00"+ + "\u01de\u01df\05\111\00\u01df\u01e0\01\00\00\u01e0\u01e1\03\076\040"+ + "\u01e1\u01e3\01\00\00\u01e2\u01de\01\00\00\u01e2\u01e5\01\00\00\u01e3"+ + "\u01e4\01\00\00\u01e4\u01e2\01\00\00\u01e5\051\01\00\00\u01e6\u01e7"+ + "\05\104\00\u01e7\u01ea\01\00\00\u01e8\u01e9\03\056\030\u01e9\u01eb"+ + "\01\00\00\u01ea\u01e8\01\00\00\u01ea\u01ed\01\00\00\u01eb\u01ec\01"+ + "\00\00\u01ec\u01ea\01\00\00\u01ed\u01ee\01\00\00\u01ee\u01ef\05\105"+ + "\00\u01ef\053\01\00\00\u01f0\u01f1\05\104\00\u01f1\u01f4\01\00\00"+ + "\u01f2\u01f3\03\070\035\u01f3\u01f5\01\00\00\u01f4\u01f2\01\00\00"+ + "\u01f4\u01f7\01\00\00\u01f5\u01f6\01\00\00\u01f6\u01f4\01\00\00\u01f7"+ + "\u01f8\01\00\00\u01f8\u01f9\05\105\00\u01f9\055\01\00\00\u01fa\u01fb"+ + "\05\110\00\u01fb\u0205\01\00\00\u01fc\u01fd\05\062\00\u01fd\u01ff"+ + "\01\00\00\u01fe\u01fc\01\00\00\u01fe\u01ff\01\00\00\u01ff\u0200\01"+ + "\00\00\u0200\u0201\03\152\066\u0201\u0205\01\00\00\u0202\u0203\03"+ + "\060\031\u0203\u0205\01\00\00\u0204\u01fa\01\00\00\u0204\u01fe\01"+ + "\00\00\u0204\u0202\01\00\00\u0205\057\01\00\00\u0206\u0207\03\064"+ + "\033\u0207\u020f\01\00\00\u0208\u0209\03\062\032\u0209\u020f\01\00"+ + "\00\u020a\u020b\03\020\011\u020b\u020f\01\00\00\u020c\u020d\03\044"+ + "\023\u020d\u020f\01\00\00\u020e\u0206\01\00\00\u020e\u0208\01\00\00"+ + "\u020e\u020a\01\00\00\u020e\u020c\01\00\00\u020f\061\01\00\00\u0210"+ + "\u0211\03\014\07\u0211\u0214\01\00\00\u0212\u0213\03\024\013\u0213"+ + "\u0215\01\00\00\u0214\u0212\01\00\00\u0214\u0215\01\00\00\u0215\u0216"+ + "\01\00\00\u0216\u0217\05\152\00\u0217\u0218\01\00\00\u0218\u0219\03"+ + "\112\046\u0219\u021e\01\00\00\u021a\u021b\05\071\00\u021b\u021c\01"+ + "\00\00\u021c\u021d\03\110\045\u021d\u021f\01\00\00\u021e\u021a\01"+ + "\00\00\u021e\u021f\01\00\00\u021f\u0220\01\00\00\u0220\u0221\05\104"+ + "\00\u0221\u0224\01\00\00\u0222\u0223\03\122\052\u0223\u0225\01\00"+ + "\00\u0224\u0222\01\00\00\u0224\u0225\01\00\00\u0225\u0228\01\00\00"+ + "\u0226\u0227\03\154\067\u0227\u0229\01\00\00\u0228\u0226\01\00\00"+ + "\u0228\u022b\01\00\00\u0229\u022a\01\00\00\u022a\u0228\01\00\00\u022b"+ + "\u022c\01\00\00\u022c\u022d\05\105\00\u022d\u0253\01\00\00\u022e\u022f"+ + "\03\014\07\u022f\u0232\01\00\00\u0230\u0231\03\024\013\u0231\u0233"+ + "\01\00\00\u0232\u0230\01\00\00\u0232\u0233\01\00\00\u0233\u0238\01"+ + "\00\00\u0234\u0235\03\076\040\u0235\u0239\01\00\00\u0236\u0237\05"+ + "\074\00\u0237\u0239\01\00\00\u0238\u0234\01\00\00\u0238\u0236\01\00"+ + "\00\u0239\u023a\01\00\00\u023a\u023b\05\152\00\u023b\u023c\01\00\00"+ + "\u023c\u023d\03\112\046\u023d\u0242\01\00\00\u023e\u023f\05\106\00"+ + "\u023f\u0240\01\00\00\u0240\u0241\05\107\00\u0241\u0243\01\00\00\u0242"+ + "\u023e\01\00\00\u0242\u0245\01\00\00\u0243\u0244\01\00\00\u0244\u0242"+ + "\01\00\00\u0245\u024a\01\00\00\u0246\u0247\05\071\00\u0247\u0248\01"+ + "\00\00\u0248\u0249\03\110\045\u0249\u024b\01\00\00\u024a\u0246\01"+ + "\00\00\u024a\u024b\01\00\00\u024b\u0250\01\00\00\u024c\u024d\03\152"+ + "\066\u024d\u0251\01\00\00\u024e\u024f\05\110\00\u024f\u0251\01\00"+ + "\00\u0250\u024c\01\00\00\u0250\u024e\01\00\00\u0251\u0253\01\00\00"+ + "\u0252\u0210\01\00\00\u0252\u022e\01\00\00\u0253\063\01\00\00\u0254"+ + "\u0255\03\014\07\u0255\u0256\01\00\00\u0256\u0257\03\076\040\u0257"+ + "\u0258\01\00\00\u0258\u0259\03\066\034\u0259\u025e\01\00\00\u025a"+ + "\u025b\05\111\00\u025b\u025c\01\00\00\u025c\u025d\03\066\034\u025d"+ + "\u025f\01\00\00\u025e\u025a\01\00\00\u025e\u0261\01\00\00\u025f\u0260"+ + "\01\00\00\u0260\u025e\01\00\00\u0261\u0262\01\00\00\u0262\u0263\05"+ + "\110\00\u0263\065\01\00\00\u0264\u0265\05\152\00\u0265\u026a\01\00"+ + "\00\u0266\u0267\05\106\00\u0267\u0268\01\00\00\u0268\u0269\05\107"+ + "\00\u0269\u026b\01\00\00\u026a\u0266\01\00\00\u026a\u026d\01\00\00"+ + "\u026b\u026c\01\00\00\u026c\u026a\01\00\00\u026d\u0272\01\00\00\u026e"+ + "\u026f\05\114\00\u026f\u0270\01\00\00\u0270\u0271\03\u00bc\137\u0271"+ + "\u0273\01\00\00\u0272\u026e\01\00\00\u0272\u0273\01\00\00\u0273\067"+ + "\01\00\00\u0274\u0275\03\074\037\u0275\u027f\01\00\00\u0276\u0277"+ + "\03\072\036\u0277\u027f\01\00\00\u0278\u0279\03\044\023\u0279\u027f"+ + "\01\00\00\u027a\u027b\03\020\011\u027b\u027f\01\00\00\u027c\u027d"+ + "\05\110\00\u027d\u027f\01\00\00\u027e\u0274\01\00\00\u027e\u0276\01"+ + "\00\00\u027e\u0278\01\00\00\u027e\u027a\01\00\00\u027e\u027c\01\00"+ + "\00\u027f\071\01\00\00\u0280\u0281\03\014\07\u0281\u0284\01\00\00"+ + "\u0282\u0283\03\024\013\u0283\u0285\01\00\00\u0284\u0282\01\00\00"+ + "\u0284\u0285\01\00\00\u0285\u028a\01\00\00\u0286\u0287\03\076\040"+ + "\u0287\u028b\01\00\00\u0288\u0289\05\074\00\u0289\u028b\01\00\00\u028a"+ + "\u0286\01\00\00\u028a\u0288\01\00\00\u028b\u028c\01\00\00\u028c\u028d"+ + "\05\152\00\u028d\u028e\01\00\00\u028e\u028f\03\112\046\u028f\u0294"+ + "\01\00\00\u0290\u0291\05\106\00\u0291\u0292\01\00\00\u0292\u0293\05"+ + "\107\00\u0293\u0295\01\00\00\u0294\u0290\01\00\00\u0294\u0297\01\00"+ + "\00\u0295\u0296\01\00\00\u0296\u0294\01\00\00\u0297\u029c\01\00\00"+ + "\u0298\u0299\05\071\00\u0299\u029a\01\00\00\u029a\u029b\03\110\045"+ + "\u029b\u029d\01\00\00\u029c\u0298\01\00\00\u029c\u029d\01\00\00\u029d"+ + "\u029e\01\00\00\u029e\u029f\05\110\00\u029f\073\01\00\00\u02a0\u02a1"+ + "\03\014\07\u02a1\u02a2\01\00\00\u02a2\u02a3\03\076\040\u02a3\u02a4"+ + "\01\00\00\u02a4\u02a5\03\066\034\u02a5\u02aa\01\00\00\u02a6\u02a7"+ + "\05\111\00\u02a7\u02a8\01\00\00\u02a8\u02a9\03\066\034\u02a9\u02ab"+ + "\01\00\00\u02aa\u02a6\01\00\00\u02aa\u02ad\01\00\00\u02ab\u02ac\01"+ + "\00\00\u02ac\u02aa\01\00\00\u02ad\u02ae\01\00\00\u02ae\u02af\05\110"+ + "\00\u02af\075\01\00\00\u02b0\u02b1\03\100\041\u02b1\u02b6\01\00\00"+ + "\u02b2\u02b3\05\106\00\u02b3\u02b4\01\00\00\u02b4\u02b5\05\107\00"+ + "\u02b5\u02b7\01\00\00\u02b6\u02b2\01\00\00\u02b6\u02b9\01\00\00\u02b7"+ + "\u02b8\01\00\00\u02b8\u02b6\01\00\00\u02b9\u02c5\01\00\00\u02ba\u02bb"+ + "\03\102\042\u02bb\u02c0\01\00\00\u02bc\u02bd\05\106\00\u02bd\u02be"+ + "\01\00\00\u02be\u02bf\05\107\00\u02bf\u02c1\01\00\00\u02c0\u02bc\01"+ + "\00\00\u02c0\u02c3\01\00\00\u02c1\u02c2\01\00\00\u02c2\u02c0\01\00"+ + "\00\u02c3\u02c5\01\00\00\u02c4\u02b0\01\00\00\u02c4\u02ba\01\00\00"+ + "\u02c5\077\01\00\00\u02c6\u02c7\05\152\00\u02c7\u02ca\01\00\00\u02c8"+ + "\u02c9\03\104\043\u02c9\u02cb\01\00\00\u02ca\u02c8\01\00\00\u02ca"+ + "\u02cb\01\00\00\u02cb\u02d4\01\00\00\u02cc\u02cd\05\112\00\u02cd\u02ce"+ + "\01\00\00\u02ce\u02cf\05\152\00\u02cf\u02d2\01\00\00\u02d0\u02d1\03"+ + "\104\043\u02d1\u02d3\01\00\00\u02d2\u02d0\01\00\00\u02d2\u02d3\01"+ + "\00\00\u02d3\u02d5\01\00\00\u02d4\u02cc\01\00\00\u02d4\u02d7\01\00"+ + "\00\u02d5\u02d6\01\00\00\u02d6\u02d4\01\00\00\u02d7\101\01\00\00\u02d8"+ + "\u02d9\05\017\00\u02d9\u02e9\01\00\00\u02da\u02db\05\024\00\u02db"+ + "\u02e9\01\00\00\u02dc\u02dd\05\021\00\u02dd\u02e9\01\00\00\u02de\u02df"+ + "\05\061\00\u02df\u02e9\01\00\00\u02e0\u02e1\05\047\00\u02e1\u02e9"+ + "\01\00\00\u02e2\u02e3\05\051\00\u02e3\u02e9\01\00\00\u02e4\u02e5\05"+ + "\040\00\u02e5\u02e9\01\00\00\u02e6\u02e7\05\032\00\u02e7\u02e9\01"+ + "\00\00\u02e8\u02d8\01\00\00\u02e8\u02da\01\00\00\u02e8\u02dc\01\00"+ + "\00\u02e8\u02de\01\00\00\u02e8\u02e0\01\00\00\u02e8\u02e2\01\00\00"+ + "\u02e8\u02e4\01\00\00\u02e8\u02e6\01\00\00\u02e9\103\01\00\00\u02ea"+ + "\u02eb\05\150\00\u02eb\u02ec\01\00\00\u02ec\u02ed\03\106\044\u02ed"+ + "\u02f2\01\00\00\u02ee\u02ef\05\111\00\u02ef\u02f0\01\00\00\u02f0\u02f1"+ + "\03\106\044\u02f1\u02f3\01\00\00\u02f2\u02ee\01\00\00\u02f2\u02f5"+ + "\01\00\00\u02f3\u02f4\01\00\00\u02f4\u02f2\01\00\00\u02f5\u02f6\01"+ + "\00\00\u02f6\u02f7\05\151\00\u02f7\105\01\00\00\u02f8\u02f9\03\076"+ + "\040\u02f9\u0307\01\00\00\u02fa\u02fb\05\117\00\u02fb\u0304\01\00"+ + "\00\u02fc\u02fd\05\035\00\u02fd\u0301\01\00\00\u02fe\u02ff\05\064"+ + "\00\u02ff\u0301\01\00\00\u0300\u02fc\01\00\00\u0300\u02fe\01\00\00"+ + "\u0301\u0302\01\00\00\u0302\u0303\03\076\040\u0303\u0305\01\00\00"+ + "\u0304\u0300\01\00\00\u0304\u0305\01\00\00\u0305\u0307\01\00\00\u0306"+ + "\u02f8\01\00\00\u0306\u02fa\01\00\00\u0307\107\01\00\00\u0308\u0309"+ + "\03\124\053\u0309\u030e\01\00\00\u030a\u030b\05\111\00\u030b\u030c"+ + "\01\00\00\u030c\u030d\03\124\053\u030d\u030f\01\00\00\u030e\u030a"+ + "\01\00\00\u030e\u0311\01\00\00\u030f\u0310\01\00\00\u0310\u030e\01"+ + "\00\00\u0311\111\01\00\00\u0312\u0313\05\102\00\u0313\u0316\01\00"+ + "\00\u0314\u0315\03\114\047\u0315\u0317\01\00\00\u0316\u0314\01\00"+ + "\00\u0316\u0317\01\00\00\u0317\u0318\01\00\00\u0318\u0319\05\103\00"+ + "\u0319\113\01\00\00\u031a\u031b\03\120\051\u031b\u0331\01\00\00\u031c"+ + "\u031d\03\116\050\u031d\u0322\01\00\00\u031e\u031f\05\111\00\u031f"+ + "\u0320\01\00\00\u0320\u0321\03\116\050\u0321\u0323\01\00\00\u0322"+ + "\u031e\01\00\00\u0322\u0325\01\00\00\u0323\u0324\01\00\00\u0324\u0322"+ + "\01\00\00\u0325\u0331\01\00\00\u0326\u0327\03\116\050\u0327\u0328"+ + "\01\00\00\u0328\u0329\05\111\00\u0329\u032b\01\00\00\u032a\u0326\01"+ + "\00\00\u032b\u032c\01\00\00\u032c\u0326\01\00\00\u032c\u032d\01\00"+ + "\00\u032d\u032e\01\00\00\u032e\u032f\03\120\051\u032f\u0331\01\00"+ + "\00\u0330\u031a\01\00\00\u0330\u031c\01\00\00\u0330\u032a\01\00\00"+ + "\u0331\115\01\00\00\u0332\u0333\03\016\010\u0333\u0334\01\00\00\u0334"+ + "\u0335\03\076\040\u0335\u0336\01\00\00\u0336\u0337\05\152\00\u0337"+ + "\u033c\01\00\00\u0338\u0339\05\106\00\u0339\u033a\01\00\00\u033a\u033b"+ + "\05\107\00\u033b\u033d\01\00\00\u033c\u0338\01\00\00\u033c\u033f\01"+ + "\00\00\u033d\u033e\01\00\00\u033e\u033c\01\00\00\u033f\117\01\00\00"+ + "\u0340\u0341\03\016\010\u0341\u0342\01\00\00\u0342\u0343\03\076\040"+ + "\u0343\u0344\01\00\00\u0344\u0345\05\113\00\u0345\u0346\01\00\00\u0346"+ + "\u0347\05\152\00\u0347\121\01\00\00\u0348\u0349\03\u00c6\144\u0349"+ + "\u034b\01\00\00\u034a\u0348\01\00\00\u034a\u034b\01\00\00\u034b\u0350"+ + "\01\00\00\u034c\u034d\05\067\00\u034d\u0351\01\00\00\u034e\u034f\05"+ + "\064\00\u034f\u0351\01\00\00\u0350\u034c\01\00\00\u0350\u034e\01\00"+ + "\00\u0351\u0352\01\00\00\u0352\u0353\03\u00c8\145\u0353\u0354\01\00"+ + "\00\u0354\u0355\05\110\00\u0355\u0365\01\00\00\u0356\u0357\03\u00b0"+ + "\131\u0357\u0358\01\00\00\u0358\u0359\05\112\00\u0359\u035c\01\00"+ + "\00\u035a\u035b\03\u00c6\144\u035b\u035d\01\00\00\u035c\u035a\01\00"+ + "\00\u035c\u035d\01\00\00\u035d\u035e\01\00\00\u035e\u035f\05\064\00"+ + "\u035f\u0360\01\00\00\u0360\u0361\03\u00c8\145\u0361\u0362\01\00\00"+ + "\u0362\u0363\05\110\00\u0363\u0365\01\00\00\u0364\u034a\01\00\00\u0364"+ + "\u0356\01\00\00\u0365\123\01\00\00\u0366\u0367\05\152\00\u0367\u036c"+ + "\01\00\00\u0368\u0369\05\112\00\u0369\u036a\01\00\00\u036a\u036b\05"+ + "\152\00\u036b\u036d\01\00\00\u036c\u0368\01\00\00\u036c\u036f\01\00"+ + "\00\u036d\u036e\01\00\00\u036e\u036c\01\00\00\u036f\125\01\00\00\u0370"+ + "\u0371\03\130\055\u0371\u0373\01\00\00\u0372\u0370\01\00\00\u0373"+ + "\u0374\01\00\00\u0374\u0370\01\00\00\u0374\u0375\01\00\00\u0375\127"+ + "\01\00\00\u0376\u0377\05\146\00\u0377\u0378\01\00\00\u0378\u0379\03"+ + "\124\053\u0379\u0384\01\00\00\u037a\u037b\05\102\00\u037b\u0380\01"+ + "\00\00\u037c\u037d\03\132\056\u037d\u0381\01\00\00\u037e\u037f\03"+ + "\136\060\u037f\u0381\01\00\00\u0380\u037c\01\00\00\u0380\u037e\01"+ + "\00\00\u0380\u0381\01\00\00\u0381\u0382\01\00\00\u0382\u0383\05\103"+ + "\00\u0383\u0385\01\00\00\u0384\u037a\01\00\00\u0384\u0385\01\00\00"+ + "\u0385\131\01\00\00\u0386\u0387\03\134\057\u0387\u038c\01\00\00\u0388"+ + "\u0389\05\111\00\u0389\u038a\01\00\00\u038a\u038b\03\134\057\u038b"+ + "\u038d\01\00\00\u038c\u0388\01\00\00\u038c\u038f\01\00\00\u038d\u038e"+ + "\01\00\00\u038e\u038c\01\00\00\u038f\133\01\00\00\u0390\u0391\05\152"+ + "\00\u0391\u0392\01\00\00\u0392\u0393\05\114\00\u0393\u0394\01\00\00"+ + "\u0394\u0395\03\136\060\u0395\135\01\00\00\u0396\u0397\03\u008e\110"+ + "\u0397\u039d\01\00\00\u0398\u0399\03\130\055\u0399\u039d\01\00\00"+ + "\u039a\u039b\03\140\061\u039b\u039d\01\00\00\u039c\u0396\01\00\00"+ + "\u039c\u0398\01\00\00\u039c\u039a\01\00\00\u039d\137\01\00\00\u039e"+ + "\u039f\05\104\00\u039f\u03aa\01\00\00\u03a0\u03a1\03\136\060\u03a1"+ + "\u03a6\01\00\00\u03a2\u03a3\05\111\00\u03a3\u03a4\01\00\00\u03a4\u03a5"+ + "\03\136\060\u03a5\u03a7\01\00\00\u03a6\u03a2\01\00\00\u03a6\u03a9"+ + "\01\00\00\u03a7\u03a8\01\00\00\u03a8\u03a6\01\00\00\u03a9\u03ab\01"+ + "\00\00\u03aa\u03a0\01\00\00\u03aa\u03ab\01\00\00\u03ab\u03ae\01\00"+ + "\00\u03ac\u03ad\05\111\00\u03ad\u03af\01\00\00\u03ae\u03ac\01\00\00"+ + "\u03ae\u03af\01\00\00\u03af\u03b0\01\00\00\u03b0\u03b1\05\105\00\u03b1"+ + "\141\01\00\00\u03b2\u03b3\03\014\07\u03b3\u03b4\01\00\00\u03b4\u03b5"+ + "\05\146\00\u03b5\u03b6\01\00\00\u03b6\u03b7\05\050\00\u03b7\u03b8"+ + "\01\00\00\u03b8\u03b9\05\152\00\u03b9\u03ba\01\00\00\u03ba\u03bb\03"+ + "\144\063\u03bb\143\01\00\00\u03bc\u03bd\05\104\00\u03bd\u03c0\01\00"+ + "\00\u03be\u03bf\03\146\064\u03bf\u03c1\01\00\00\u03c0\u03be\01\00"+ + "\00\u03c0\u03c3\01\00\00\u03c1\u03c2\01\00\00\u03c2\u03c0\01\00\00"+ + "\u03c3\u03c4\01\00\00\u03c4\u03c5\05\105\00\u03c5\145\01\00\00\u03c6"+ + "\u03c7\03\150\065\u03c7\u03d5\01\00\00\u03c8\u03c9\03\074\037\u03c9"+ + "\u03d5\01\00\00\u03ca\u03cb\03\022\012\u03cb\u03d5\01\00\00\u03cc"+ + "\u03cd\03\046\024\u03cd\u03d5\01\00\00\u03ce\u03cf\03\032\016\u03cf"+ + "\u03d5\01\00\00\u03d0\u03d1\03\142\062\u03d1\u03d5\01\00\00\u03d2"+ + "\u03d3\05\110\00\u03d3\u03d5\01\00\00\u03d4\u03c6\01\00\00\u03d4\u03c8"+ + "\01\00\00\u03d4\u03ca\01\00\00\u03d4\u03cc\01\00\00\u03d4\u03ce\01"+ + "\00\00\u03d4\u03d0\01\00\00\u03d4\u03d2\01\00\00\u03d5\147\01\00\00"+ + "\u03d6\u03d7\03\014\07\u03d7\u03d8\01\00\00\u03d8\u03d9\03\076\040"+ + "\u03d9\u03da\01\00\00\u03da\u03db\05\152\00\u03db\u03dc\01\00\00\u03dc"+ + "\u03dd\05\102\00\u03dd\u03de\01\00\00\u03de\u03df\05\103\00\u03df"+ + "\u03e4\01\00\00\u03e0\u03e1\05\030\00\u03e1\u03e2\01\00\00\u03e2\u03e3"+ + "\03\136\060\u03e3\u03e5\01\00\00\u03e4\u03e0\01\00\00\u03e4\u03e5"+ + "\01\00\00\u03e5\u03e6\01\00\00\u03e6\u03e7\05\110\00\u03e7\151\01"+ + "\00\00\u03e8\u03e9\05\104\00\u03e9\u03ec\01\00\00\u03ea\u03eb\03\154"+ + "\067\u03eb\u03ed\01\00\00\u03ec\u03ea\01\00\00\u03ec\u03ef\01\00\00"+ + "\u03ed\u03ee\01\00\00\u03ee\u03ec\01\00\00\u03ef\u03f0\01\00\00\u03f0"+ + "\u03f1\05\105\00\u03f1\153\01\00\00\u03f2\u03f3\03\156\070\u03f3\u03f9"+ + "\01\00\00\u03f4\u03f5\03\012\06\u03f5\u03f9\01\00\00\u03f6\u03f7\03"+ + "\162\072\u03f7\u03f9\01\00\00\u03f8\u03f2\01\00\00\u03f8\u03f4\01"+ + "\00\00\u03f8\u03f6\01\00\00\u03f9\155\01\00\00\u03fa\u03fb\03\160"+ + "\071\u03fb\u03fc\01\00\00\u03fc\u03fd\05\110\00\u03fd\157\01\00\00"+ + "\u03fe\u03ff\03\016\010\u03ff\u0400\01\00\00\u0400\u0401\03\076\040"+ + "\u0401\u0402\01\00\00\u0402\u0403\03\066\034\u0403\u0408\01\00\00"+ + "\u0404\u0405\05\111\00\u0405\u0406\01\00\00\u0406\u0407\03\066\034"+ + "\u0407\u0409\01\00\00\u0408\u0404\01\00\00\u0408\u040b\01\00\00\u0409"+ + "\u040a\01\00\00\u040a\u0408\01\00\00\u040b\161\01\00\00\u040c\u040d"+ + "\03\152\066\u040d\u0481\01\00\00\u040e\u040f\05\016\00\u040f\u0410"+ + "\01\00\00\u0410\u0411\03\u008a\106\u0411\u0416\01\00\00\u0412\u0413"+ + "\05\120\00\u0413\u0414\01\00\00\u0414\u0415\03\u008a\106\u0415\u0417"+ + "\01\00\00\u0416\u0412\01\00\00\u0416\u0417\01\00\00\u0417\u0418\01"+ + "\00\00\u0418\u0419\05\110\00\u0419\u0481\01\00\00\u041a\u041b\05\016"+ + "\00\u041b\u041c\01\00\00\u041c\u041d\03\u008a\106\u041d\u0422\01\00"+ + "\00\u041e\u041f\05\120\00\u041f\u0420\01\00\00\u0420\u0421\03\u008a"+ + "\106\u0421\u0423\01\00\00\u0422\u041e\01\00\00\u0422\u0423\01\00\00"+ + "\u0423\u0424\01\00\00\u0424\u0425\05\110\00\u0425\u0481\01\00\00\u0426"+ + "\u0427\05\043\00\u0427\u0428\01\00\00\u0428\u0429\03\u0086\104\u0429"+ + "\u042a\01\00\00\u042a\u042b\03\162\072\u042b\u0430\01\00\00\u042c"+ + "\u042d\05\033\00\u042d\u042e\01\00\00\u042e\u042f\03\162\072\u042f"+ + "\u0431\01\00\00\u0430\u042c\01\00\00\u0430\u0431\01\00\00\u0431\u0481"+ + "\01\00\00\u0432\u0433\03\u0082\102\u0433\u0481\01\00\00\u0434\u0435"+ + "\05\076\00\u0435\u0436\01\00\00\u0436\u0437\03\u0086\104\u0437\u0438"+ + "\01\00\00\u0438\u0439\03\162\072\u0439\u0481\01\00\00\u043a\u043b"+ + "\05\031\00\u043b\u043c\01\00\00\u043c\u043d\03\162\072\u043d\u043e"+ + "\01\00\00\u043e\u043f\05\076\00\u043f\u0440\01\00\00\u0440\u0441\03"+ + "\u0086\104\u0441\u0442\01\00\00\u0442\u0443\05\110\00\u0443\u0481"+ + "\01\00\00\u0444\u0445\03\172\076\u0445\u0481\01\00\00\u0446\u0447"+ + "\05\065\00\u0447\u0448\01\00\00\u0448\u0449\03\u0086\104\u0449\u044a"+ + "\01\00\00\u044a\u044b\05\104\00\u044b\u044c\01\00\00\u044c\u044d\03"+ + "\164\073\u044d\u044e\01\00\00\u044e\u044f\05\105\00\u044f\u0481\01"+ + "\00\00\u0450\u0451\05\066\00\u0451\u0452\01\00\00\u0452\u0453\03\u0086"+ + "\104\u0453\u0454\01\00\00\u0454\u0455\03\152\066\u0455\u0481\01\00"+ + "\00\u0456\u0457\05\060\00\u0457\u045a\01\00\00\u0458\u0459\03\u008a"+ + "\106\u0459\u045b\01\00\00\u045a\u0458\01\00\00\u045a\u045b\01\00\00"+ + "\u045b\u045c\01\00\00\u045c\u045d\05\110\00\u045d\u0481\01\00\00\u045e"+ + "\u045f\05\070\00\u045f\u0460\01\00\00\u0460\u0461\03\u008a\106\u0461"+ + "\u0462\01\00\00\u0462\u0463\05\110\00\u0463\u0481\01\00\00\u0464\u0465"+ + "\05\020\00\u0465\u0468\01\00\00\u0466\u0467\05\152\00\u0467\u0469"+ + "\01\00\00\u0468\u0466\01\00\00\u0468\u0469\01\00\00\u0469\u046a\01"+ + "\00\00\u046a\u046b\05\110\00\u046b\u0481\01\00\00\u046c\u046d\05\027"+ + "\00\u046d\u0470\01\00\00\u046e\u046f\05\152\00\u046f\u0471\01\00\00"+ + "\u0470\u046e\01\00\00\u0470\u0471\01\00\00\u0471\u0472\01\00\00\u0472"+ + "\u0473\05\110\00\u0473\u0481\01\00\00\u0474\u0475\03\u008a\106\u0475"+ + "\u0476\01\00\00\u0476\u0477\05\110\00\u0477\u0481\01\00\00\u0478\u0479"+ + "\05\152\00\u0479\u047a\01\00\00\u047a\u047b\05\120\00\u047b\u047c"+ + "\01\00\00\u047c\u047d\03\162\072\u047d\u0481\01\00\00\u047e\u047f"+ + "\05\110\00\u047f\u0481\01\00\00\u0480\u040c\01\00\00\u0480\u040e\01"+ + "\00\00\u0480\u041a\01\00\00\u0480\u0426\01\00\00\u0480\u0432\01\00"+ + "\00\u0480\u0434\01\00\00\u0480\u043a\01\00\00\u0480\u0444\01\00\00"+ + "\u0480\u0446\01\00\00\u0480\u0450\01\00\00\u0480\u0456\01\00\00\u0480"+ + "\u045e\01\00\00\u0480\u0464\01\00\00\u0480\u046c\01\00\00\u0480\u0474"+ + "\01\00\00\u0480\u0478\01\00\00\u0480\u047e\01\00\00\u0481\163\01\00"+ + "\00\u0482\u0483\03\166\074\u0483\u0485\01\00\00\u0484\u0482\01\00"+ + "\00\u0484\u0487\01\00\00\u0485\u0486\01\00\00\u0486\u0484\01\00\00"+ + "\u0487\165\01\00\00\u0488\u0489\03\170\075\u0489\u048c\01\00\00\u048a"+ + "\u048b\03\154\067\u048b\u048d\01\00\00\u048c\u048a\01\00\00\u048c"+ + "\u048f\01\00\00\u048d\u048e\01\00\00\u048e\u048c\01\00\00\u048f\167"+ + "\01\00\00\u0490\u0491\05\022\00\u0491\u0492\01\00\00\u0492\u0493\03"+ + "\u008a\106\u0493\u0494\01\00\00\u0494\u0495\05\120\00\u0495\u049b"+ + "\01\00\00\u0496\u0497\05\030\00\u0497\u0498\01\00\00\u0498\u0499\05"+ + "\120\00\u0499\u049b\01\00\00\u049a\u0490\01\00\00\u049a\u0496\01\00"+ + "\00\u049b\171\01\00\00\u049c\u049d\05\073\00\u049d\u049e\01\00\00"+ + "\u049e\u049f\03\152\066\u049f\u04ac\01\00\00\u04a0\u04a1\03\174\077"+ + "\u04a1\u04a2\01\00\00\u04a2\u04a3\05\037\00\u04a3\u04a4\01\00\00\u04a4"+ + "\u04a5\03\152\066\u04a5\u04ad\01\00\00\u04a6\u04a7\03\174\077\u04a7"+ + "\u04ad\01\00\00\u04a8\u04a9\05\037\00\u04a9\u04aa\01\00\00\u04aa\u04ab"+ + "\03\152\066\u04ab\u04ad\01\00\00\u04ac\u04a0\01\00\00\u04ac\u04a6"+ + "\01\00\00\u04ac\u04a8\01\00\00\u04ad\173\01\00\00\u04ae\u04af\03\176"+ + "\100\u04af\u04b2\01\00\00\u04b0\u04b1\03\176\100\u04b1\u04b3\01\00"+ + "\00\u04b2\u04b0\01\00\00\u04b2\u04b5\01\00\00\u04b3\u04b4\01\00\00"+ + "\u04b4\u04b2\01\00\00\u04b5\175\01\00\00\u04b6\u04b7\05\023\00\u04b7"+ + "\u04b8\01\00\00\u04b8\u04b9\05\102\00\u04b9\u04ba\01\00\00\u04ba\u04bb"+ + "\03\u0080\101\u04bb\u04bc\01\00\00\u04bc\u04bd\05\103\00\u04bd\u04be"+ + "\01\00\00\u04be\u04bf\03\152\066\u04bf\177\01\00\00\u04c0\u04c1\03"+ + "\016\010\u04c1\u04c2\01\00\00\u04c2\u04c3\03\076\040\u04c3\u04c4\01"+ + "\00\00\u04c4\u04c5\05\152\00\u04c5\u04ca\01\00\00\u04c6\u04c7\05\106"+ + "\00\u04c7\u04c8\01\00\00\u04c8\u04c9\05\107\00\u04c9\u04cb\01\00\00"+ + "\u04ca\u04c6\01\00\00\u04ca\u04cd\01\00\00\u04cb\u04cc\01\00\00\u04cc"+ + "\u04ca\01\00\00\u04cd\u0081\01\00\00\u04ce\u04cf\05\041\00\u04cf\u04d0"+ + "\01\00\00\u04d0\u04d1\05\102\00\u04d1\u04d2\01\00\00\u04d2\u04d3\03"+ + "\016\010\u04d3\u04d4\01\00\00\u04d4\u04d5\03\076\040\u04d5\u04d6\01"+ + "\00\00\u04d6\u04d7\05\152\00\u04d7\u04d8\01\00\00\u04d8\u04d9\05\120"+ + "\00\u04d9\u04da\01\00\00\u04da\u04db\03\u008a\106\u04db\u04dc\01\00"+ + "\00\u04dc\u04dd\05\103\00\u04dd\u04de\01\00\00\u04de\u04df\03\162"+ + "\072\u04df\u04f9\01\00\00\u04e0\u04e1\05\041\00\u04e1\u04e2\01\00"+ + "\00\u04e2\u04e3\05\102\00\u04e3\u04e6\01\00\00\u04e4\u04e5\03\u0084"+ + "\103\u04e5\u04e7\01\00\00\u04e6\u04e4\01\00\00\u04e6\u04e7\01\00\00"+ + "\u04e7\u04e8\01\00\00\u04e8\u04e9\05\110\00\u04e9\u04ec\01\00\00\u04ea"+ + "\u04eb\03\u008a\106\u04eb\u04ed\01\00\00\u04ec\u04ea\01\00\00\u04ec"+ + "\u04ed\01\00\00\u04ed\u04ee\01\00\00\u04ee\u04ef\05\110\00\u04ef\u04f2"+ + "\01\00\00\u04f0\u04f1\03\u0088\105\u04f1\u04f3\01\00\00\u04f2\u04f0"+ + "\01\00\00\u04f2\u04f3\01\00\00\u04f3\u04f4\01\00\00\u04f4\u04f5\05"+ + "\103\00\u04f5\u04f6\01\00\00\u04f6\u04f7\03\162\072\u04f7\u04f9\01"+ + "\00\00\u04f8\u04ce\01\00\00\u04f8\u04e0\01\00\00\u04f9\u0083\01\00"+ + "\00\u04fa\u04fb\03\160\071\u04fb\u04ff\01\00\00\u04fc\u04fd\03\u0088"+ + "\105\u04fd\u04ff\01\00\00\u04fe\u04fa\01\00\00\u04fe\u04fc\01\00\00"+ + "\u04ff\u0085\01\00\00\u0500\u0501\05\102\00\u0501\u0502\01\00\00\u0502"+ + "\u0503\03\u008a\106\u0503\u0504\01\00\00\u0504\u0505\05\103\00\u0505"+ + "\u0087\01\00\00\u0506\u0507\03\u008a\106\u0507\u050c\01\00\00\u0508"+ + "\u0509\05\111\00\u0509\u050a\01\00\00\u050a\u050b\03\u008a\106\u050b"+ + "\u050d\01\00\00\u050c\u0508\01\00\00\u050c\u050f\01\00\00\u050d\u050e"+ + "\01\00\00\u050e\u050c\01\00\00\u050f\u0089\01\00\00\u0510\u0511\03"+ + "\u008e\110\u0511\u0516\01\00\00\u0512\u0513\03\u008c\107\u0513\u0514"+ + "\01\00\00\u0514\u0515\03\u008a\106\u0515\u0517\01\00\00\u0516\u0512"+ + "\01\00\00\u0516\u0517\01\00\00\u0517\u008b\01\00\00\u0518\u0519\05"+ + "\114\00\u0519\u053f\01\00\00\u051a\u051b\05\136\00\u051b\u053f\01"+ + "\00\00\u051c\u051d\05\137\00\u051d\u053f\01\00\00\u051e\u051f\05\140"+ + "\00\u051f\u053f\01\00\00\u0520\u0521\05\141\00\u0521\u053f\01\00\00"+ + "\u0522\u0523\05\142\00\u0523\u053f\01\00\00\u0524\u0525\05\143\00"+ + "\u0525\u053f\01\00\00\u0526\u0527\05\144\00\u0527\u053f\01\00\00\u0528"+ + "\u0529\05\145\00\u0529\u053f\01\00\00\u052a\u052b\05\150\00\u052b"+ + "\u052c\01\00\00\u052c\u052d\05\150\00\u052d\u052e\01\00\00\u052e\u052f"+ + "\05\114\00\u052f\u053f\01\00\00\u0530\u0531\05\151\00\u0531\u0532"+ + "\01\00\00\u0532\u0533\05\151\00\u0533\u0534\01\00\00\u0534\u0535\05"+ + "\151\00\u0535\u0536\01\00\00\u0536\u0537\05\114\00\u0537\u053f\01"+ + "\00\00\u0538\u0539\05\151\00\u0539\u053a\01\00\00\u053a\u053b\05\151"+ + "\00\u053b\u053c\01\00\00\u053c\u053d\05\114\00\u053d\u053f\01\00\00"+ + "\u053e\u0518\01\00\00\u053e\u051a\01\00\00\u053e\u051c\01\00\00\u053e"+ + "\u051e\01\00\00\u053e\u0520\01\00\00\u053e\u0522\01\00\00\u053e\u0524"+ + "\01\00\00\u053e\u0526\01\00\00\u053e\u0528\01\00\00\u053e\u052a\01"+ + "\00\00\u053e\u0530\01\00\00\u053e\u0538\01\00\00\u053f\u008d\01\00"+ + "\00\u0540\u0541\03\u0090\111\u0541\u054a\01\00\00\u0542\u0543\05\117"+ + "\00\u0543\u0544\01\00\00\u0544\u0545\03\u008a\106\u0545\u0546\01\00"+ + "\00\u0546\u0547\05\120\00\u0547\u0548\01\00\00\u0548\u0549\03\u008e"+ + "\110\u0549\u054b\01\00\00\u054a\u0542\01\00\00\u054a\u054b\01\00\00"+ + "\u054b\u008f\01\00\00\u054c\u054d\03\u0092\112\u054d\u0552\01\00\00"+ + "\u054e\u054f\05\123\00\u054f\u0550\01\00\00\u0550\u0551\03\u0092\112"+ + "\u0551\u0553\01\00\00\u0552\u054e\01\00\00\u0552\u0555\01\00\00\u0553"+ + "\u0554\01\00\00\u0554\u0552\01\00\00\u0555\u0091\01\00\00\u0556\u0557"+ + "\03\u0094\113\u0557\u055c\01\00\00\u0558\u0559\05\122\00\u0559\u055a"+ + "\01\00\00\u055a\u055b\03\u0094\113\u055b\u055d\01\00\00\u055c\u0558"+ + "\01\00\00\u055c\u055f\01\00\00\u055d\u055e\01\00\00\u055e\u055c\01"+ + "\00\00\u055f\u0093\01\00\00\u0560\u0561\03\u0096\114\u0561\u0566\01"+ + "\00\00\u0562\u0563\05\133\00\u0563\u0564\01\00\00\u0564\u0565\03\u0096"+ + "\114\u0565\u0567\01\00\00\u0566\u0562\01\00\00\u0566\u0569\01\00\00"+ + "\u0567\u0568\01\00\00\u0568\u0566\01\00\00\u0569\u0095\01\00\00\u056a"+ + "\u056b\03\u0098\115\u056b\u0570\01\00\00\u056c\u056d\05\134\00\u056d"+ + "\u056e\01\00\00\u056e\u056f\03\u0098\115\u056f\u0571\01\00\00\u0570"+ + "\u056c\01\00\00\u0570\u0573\01\00\00\u0571\u0572\01\00\00\u0572\u0570"+ + "\01\00\00\u0573\u0097\01\00\00\u0574\u0575\03\u009a\116\u0575\u057a"+ + "\01\00\00\u0576\u0577\05\132\00\u0577\u0578\01\00\00\u0578\u0579\03"+ + "\u009a\116\u0579\u057b\01\00\00\u057a\u0576\01\00\00\u057a\u057d\01"+ + "\00\00\u057b\u057c\01\00\00\u057c\u057a\01\00\00\u057d\u0099\01\00"+ + "\00\u057e\u057f\03\u009c\117\u057f\u0588\01\00\00\u0580\u0581\05\121"+ + "\00\u0581\u0585\01\00\00\u0582\u0583\05\147\00\u0583\u0585\01\00\00"+ + "\u0584\u0580\01\00\00\u0584\u0582\01\00\00\u0585\u0586\01\00\00\u0586"+ + "\u0587\03\u009c\117\u0587\u0589\01\00\00\u0588\u0584\01\00\00\u0588"+ + "\u058b\01\00\00\u0589\u058a\01\00\00\u058a\u0588\01\00\00\u058b\u009b"+ + "\01\00\00\u058c\u058d\03\u009e\120\u058d\u0592\01\00\00\u058e\u058f"+ + "\05\046\00\u058f\u0590\01\00\00\u0590\u0591\03\076\040\u0591\u0593"+ + "\01\00\00\u0592\u058e\01\00\00\u0592\u0593\01\00\00\u0593\u009d\01"+ + "\00\00\u0594\u0595\03\u00a2\122\u0595\u059a\01\00\00\u0596\u0597\03"+ + "\u00a0\121\u0597\u0598\01\00\00\u0598\u0599\03\u00a2\122\u0599\u059b"+ + "\01\00\00\u059a\u0596\01\00\00\u059a\u059d\01\00\00\u059b\u059c\01"+ + "\00\00\u059c\u059a\01\00\00\u059d\u009f\01\00\00\u059e\u059f\05\150"+ + "\00\u059f\u05a0\01\00\00\u05a0\u05a1\05\114\00\u05a1\u05ab\01\00\00"+ + "\u05a2\u05a3\05\151\00\u05a3\u05a4\01\00\00\u05a4\u05a5\05\114\00"+ + "\u05a5\u05ab\01\00\00\u05a6\u05a7\05\150\00\u05a7\u05ab\01\00\00\u05a8"+ + "\u05a9\05\151\00\u05a9\u05ab\01\00\00\u05aa\u059e\01\00\00\u05aa\u05a2"+ + "\01\00\00\u05aa\u05a6\01\00\00\u05aa\u05a8\01\00\00\u05ab\u00a1\01"+ + "\00\00\u05ac\u05ad\03\u00a6\124\u05ad\u05b2\01\00\00\u05ae\u05af\03"+ + "\u00a4\123\u05af\u05b0\01\00\00\u05b0\u05b1\03\u00a6\124\u05b1\u05b3"+ + "\01\00\00\u05b2\u05ae\01\00\00\u05b2\u05b5\01\00\00\u05b3\u05b4\01"+ + "\00\00\u05b4\u05b2\01\00\00\u05b5\u00a3\01\00\00\u05b6\u05b7\05\150"+ + "\00\u05b7\u05b8\01\00\00\u05b8\u05b9\05\150\00\u05b9\u05c5\01\00\00"+ + "\u05ba\u05bb\05\151\00\u05bb\u05bc\01\00\00\u05bc\u05bd\05\151\00"+ + "\u05bd\u05be\01\00\00\u05be\u05bf\05\151\00\u05bf\u05c5\01\00\00\u05c0"+ + "\u05c1\05\151\00\u05c1\u05c2\01\00\00\u05c2\u05c3\05\151\00\u05c3"+ + "\u05c5\01\00\00\u05c4\u05b6\01\00\00\u05c4\u05ba\01\00\00\u05c4\u05c0"+ + "\01\00\00\u05c5\u00a5\01\00\00\u05c6\u05c7\03\u00a8\125\u05c7\u05d0"+ + "\01\00\00\u05c8\u05c9\05\126\00\u05c9\u05cd\01\00\00\u05ca\u05cb\05"+ + "\127\00\u05cb\u05cd\01\00\00\u05cc\u05c8\01\00\00\u05cc\u05ca\01\00"+ + "\00\u05cd\u05ce\01\00\00\u05ce\u05cf\03\u00a8\125\u05cf\u05d1\01\00"+ + "\00\u05d0\u05cc\01\00\00\u05d0\u05d3\01\00\00\u05d1\u05d2\01\00\00"+ + "\u05d2\u05d0\01\00\00\u05d3\u00a7\01\00\00\u05d4\u05d5\03\u00aa\126"+ + "\u05d5\u05e0\01\00\00\u05d6\u05d7\05\130\00\u05d7\u05dd\01\00\00\u05d8"+ + "\u05d9\05\131\00\u05d9\u05dd\01\00\00\u05da\u05db\05\135\00\u05db"+ + "\u05dd\01\00\00\u05dc\u05d6\01\00\00\u05dc\u05d8\01\00\00\u05dc\u05da"+ + "\01\00\00\u05dd\u05de\01\00\00\u05de\u05df\03\u00aa\126\u05df\u05e1"+ + "\01\00\00\u05e0\u05dc\01\00\00\u05e0\u05e3\01\00\00\u05e1\u05e2\01"+ + "\00\00\u05e2\u05e0\01\00\00\u05e3\u00a9\01\00\00\u05e4\u05e5\05\126"+ + "\00\u05e5\u05e6\01\00\00\u05e6\u05e7\03\u00aa\126\u05e7\u05f7\01\00"+ + "\00\u05e8\u05e9\05\127\00\u05e9\u05ea\01\00\00\u05ea\u05eb\03\u00aa"+ + "\126\u05eb\u05f7\01\00\00\u05ec\u05ed\05\124\00\u05ed\u05ee\01\00"+ + "\00\u05ee\u05ef\03\u00aa\126\u05ef\u05f7\01\00\00\u05f0\u05f1\05\125"+ + "\00\u05f1\u05f2\01\00\00\u05f2\u05f3\03\u00aa\126\u05f3\u05f7\01\00"+ + "\00\u05f4\u05f5\03\u00ac\127\u05f5\u05f7\01\00\00\u05f6\u05e4\01\00"+ + "\00\u05f6\u05e8\01\00\00\u05f6\u05ec\01\00\00\u05f6\u05f0\01\00\00"+ + "\u05f6\u05f4\01\00\00\u05f7\u00ab\01\00\00\u05f8\u05f9\05\116\00\u05f9"+ + "\u05fa\01\00\00\u05fa\u05fb\03\u00aa\126\u05fb\u0611\01\00\00\u05fc"+ + "\u05fd\05\115\00\u05fd\u05fe\01\00\00\u05fe\u05ff\03\u00aa\126\u05ff"+ + "\u0611\01\00\00\u0600\u0601\03\u00ae\130\u0601\u0611\01\00\00\u0602"+ + "\u0603\03\u00b0\131\u0603\u0606\01\00\00\u0604\u0605\03\u00b6\134"+ + "\u0605\u0607\01\00\00\u0606\u0604\01\00\00\u0606\u0609\01\00\00\u0607"+ + "\u0608\01\00\00\u0608\u0606\01\00\00\u0609\u060e\01\00\00\u060a\u060b"+ + "\05\124\00\u060b\u060f\01\00\00\u060c\u060d\05\125\00\u060d\u060f"+ + "\01\00\00\u060e\u060a\01\00\00\u060e\u060c\01\00\00\u060e\u060f\01"+ + "\00\00\u060f\u0611\01\00\00\u0610\u05f8\01\00\00\u0610\u05fc\01\00"+ + "\00\u0610\u0600\01\00\00\u0610\u0602\01\00\00\u0611\u00ad\01\00\00"+ + "\u0612\u0613\05\102\00\u0613\u0614\01\00\00\u0614\u0615\03\102\042"+ + "\u0615\u0616\01\00\00\u0616\u0617\05\103\00\u0617\u0618\01\00\00\u0618"+ + "\u0619\03\u00aa\126\u0619\u0623\01\00\00\u061a\u061b\05\102\00\u061b"+ + "\u061c\01\00\00\u061c\u061d\03\076\040\u061d\u061e\01\00\00\u061e"+ + "\u061f\05\103\00\u061f\u0620\01\00\00\u0620\u0621\03\u00ac\127\u0621"+ + "\u0623\01\00\00\u0622\u0612\01\00\00\u0622\u061a\01\00\00\u0623\u00af"+ + "\01\00\00\u0624\u0625\03\u0086\104\u0625\u065f\01\00\00\u0626\u0627"+ + "\05\067\00\u0627\u062c\01\00\00\u0628\u0629\05\112\00\u0629\u062a"+ + "\01\00\00\u062a\u062b\05\152\00\u062b\u062d\01\00\00\u062c\u0628\01"+ + "\00\00\u062c\u062f\01\00\00\u062d\u062e\01\00\00\u062e\u062c\01\00"+ + "\00\u062f\u0632\01\00\00\u0630\u0631\03\u00b4\133\u0631\u0633\01\00"+ + "\00\u0632\u0630\01\00\00\u0632\u0633\01\00\00\u0633\u065f\01\00\00"+ + "\u0634\u0635\05\152\00\u0635\u063a\01\00\00\u0636\u0637\05\112\00"+ + "\u0637\u0638\01\00\00\u0638\u0639\05\152\00\u0639\u063b\01\00\00\u063a"+ + "\u0636\01\00\00\u063a\u063d\01\00\00\u063b\u063c\01\00\00\u063c\u063a"+ + "\01\00\00\u063d\u0640\01\00\00\u063e\u063f\03\u00b4\133\u063f\u0641"+ + "\01\00\00\u0640\u063e\01\00\00\u0640\u0641\01\00\00\u0641\u065f\01"+ + "\00\00\u0642\u0643\05\064\00\u0643\u0644\01\00\00\u0644\u0645\03\u00b2"+ + "\132\u0645\u065f\01\00\00\u0646\u0647\03\u00ca\146\u0647\u065f\01"+ + "\00\00\u0648\u0649\03\u00b8\135\u0649\u065f\01\00\00\u064a\u064b\03"+ + "\102\042\u064b\u0650\01\00\00\u064c\u064d\05\106\00\u064d\u064e\01"+ + "\00\00\u064e\u064f\05\107\00\u064f\u0651\01\00\00\u0650\u064c\01\00"+ + "\00\u0650\u0653\01\00\00\u0651\u0652\01\00\00\u0652\u0650\01\00\00"+ + "\u0653\u0654\01\00\00\u0654\u0655\05\112\00\u0655\u0656\01\00\00\u0656"+ + "\u0657\05\025\00\u0657\u065f\01\00\00\u0658\u0659\05\074\00\u0659"+ + "\u065a\01\00\00\u065a\u065b\05\112\00\u065b\u065c\01\00\00\u065c\u065d"+ + "\05\025\00\u065d\u065f\01\00\00\u065e\u0624\01\00\00\u065e\u0626\01"+ + "\00\00\u065e\u0634\01\00\00\u065e\u0642\01\00\00\u065e\u0646\01\00"+ + "\00\u065e\u0648\01\00\00\u065e\u064a\01\00\00\u065e\u0658\01\00\00"+ + "\u065f\u00b1\01\00\00\u0660\u0661\03\u00c8\145\u0661\u066f\01\00\00"+ + "\u0662\u0663\05\112\00\u0663\u0666\01\00\00\u0664\u0665\03\104\043"+ + "\u0665\u0667\01\00\00\u0666\u0664\01\00\00\u0666\u0667\01\00\00\u0667"+ + "\u0668\01\00\00\u0668\u0669\05\152\00\u0669\u066c\01\00\00\u066a\u066b"+ + "\03\u00c8\145\u066b\u066d\01\00\00\u066c\u066a\01\00\00\u066c\u066d"+ + "\01\00\00\u066d\u066f\01\00\00\u066e\u0660\01\00\00\u066e\u0662\01"+ + "\00\00\u066f\u00b3\01\00\00\u0670\u0671\05\106\00\u0671\u0672\01\00"+ + "\00\u0672\u0673\05\107\00\u0673\u0675\01\00\00\u0674\u0670\01\00\00"+ + "\u0675\u0676\01\00\00\u0676\u0670\01\00\00\u0676\u0677\01\00\00\u0677"+ + "\u0678\01\00\00\u0678\u0679\05\112\00\u0679\u067a\01\00\00\u067a\u067b"+ + "\05\025\00\u067b\u06a1\01\00\00\u067c\u067d\05\106\00\u067d\u067e"+ + "\01\00\00\u067e\u067f\03\u008a\106\u067f\u0680\01\00\00\u0680\u0681"+ + "\05\107\00\u0681\u0683\01\00\00\u0682\u067c\01\00\00\u0683\u0684\01"+ + "\00\00\u0684\u067c\01\00\00\u0684\u0685\01\00\00\u0685\u06a1\01\00"+ + "\00\u0686\u0687\03\u00c8\145\u0687\u06a1\01\00\00\u0688\u0689\05\112"+ + "\00\u0689\u068a\01\00\00\u068a\u068b\05\025\00\u068b\u06a1\01\00\00"+ + "\u068c\u068d\05\112\00\u068d\u068e\01\00\00\u068e\u068f\03\u00c6\144"+ + "\u068f\u0690\01\00\00\u0690\u0691\05\152\00\u0691\u0692\01\00\00\u0692"+ + "\u0693\03\u00c8\145\u0693\u06a1\01\00\00\u0694\u0695\05\112\00\u0695"+ + "\u0696\01\00\00\u0696\u0697\05\067\00\u0697\u06a1\01\00\00\u0698\u0699"+ + "\05\112\00\u0699\u069a\01\00\00\u069a\u069b\05\064\00\u069b\u069c"+ + "\01\00\00\u069c\u069d\03\u00c8\145\u069d\u06a1\01\00\00\u069e\u069f"+ + "\03\u00c2\142\u069f\u06a1\01\00\00\u06a0\u0674\01\00\00\u06a0\u0682"+ + "\01\00\00\u06a0\u0686\01\00\00\u06a0\u0688\01\00\00\u06a0\u068c\01"+ + "\00\00\u06a0\u0694\01\00\00\u06a0\u0698\01\00\00\u06a0\u069e\01\00"+ + "\00\u06a1\u00b5\01\00\00\u06a2\u06a3\05\112\00\u06a3\u06a4\01\00\00"+ + "\u06a4\u06a5\05\152\00\u06a5\u06a8\01\00\00\u06a6\u06a7\03\u00c8\145"+ + "\u06a7\u06a9\01\00\00\u06a8\u06a6\01\00\00\u06a8\u06a9\01\00\00\u06a9"+ + "\u06bd\01\00\00\u06aa\u06ab\05\112\00\u06ab\u06ac\01\00\00\u06ac\u06ad"+ + "\05\067\00\u06ad\u06bd\01\00\00\u06ae\u06af\05\112\00\u06af\u06b0"+ + "\01\00\00\u06b0\u06b1\05\064\00\u06b1\u06b2\01\00\00\u06b2\u06b3\03"+ + "\u00b2\132\u06b3\u06bd\01\00\00\u06b4\u06b5\03\u00c2\142\u06b5\u06bd"+ + "\01\00\00\u06b6\u06b7\05\106\00\u06b7\u06b8\01\00\00\u06b8\u06b9\03"+ + "\u008a\106\u06b9\u06ba\01\00\00\u06ba\u06bb\05\107\00\u06bb\u06bd"+ + "\01\00\00\u06bc\u06a2\01\00\00\u06bc\u06aa\01\00\00\u06bc\u06ae\01"+ + "\00\00\u06bc\u06b4\01\00\00\u06bc\u06b6\01\00\00\u06bd\u00b7\01\00"+ + "\00\u06be\u06bf\05\053\00\u06bf\u06c0\01\00\00\u06c0\u06c1\03\u00c6"+ + "\144\u06c1\u06c2\01\00\00\u06c2\u06c3\03\100\041\u06c3\u06c4\01\00"+ + "\00\u06c4\u06c5\03\u00c4\143\u06c5\u06cf\01\00\00\u06c6\u06c7\05\053"+ + "\00\u06c7\u06c8\01\00\00\u06c8\u06c9\03\100\041\u06c9\u06ca\01\00"+ + "\00\u06ca\u06cb\03\u00c4\143\u06cb\u06cf\01\00\00\u06cc\u06cd\03\u00ba"+ + "\136\u06cd\u06cf\01\00\00\u06ce\u06be\01\00\00\u06ce\u06c6\01\00\00"+ + "\u06ce\u06cc\01\00\00\u06cf\u00b9\01\00\00\u06d0\u06d1\05\053\00\u06d1"+ + "\u06d2\01\00\00\u06d2\u06d3\03\u00c0\141\u06d3\u06d4\01\00\00\u06d4"+ + "\u06d5\05\106\00\u06d5\u06d6\01\00\00\u06d6\u06d7\05\107\00\u06d7"+ + "\u06dc\01\00\00\u06d8\u06d9\05\106\00\u06d9\u06da\01\00\00\u06da\u06db"+ + "\05\107\00\u06db\u06dd\01\00\00\u06dc\u06d8\01\00\00\u06dc\u06df\01"+ + "\00\00\u06dd\u06de\01\00\00\u06de\u06dc\01\00\00\u06df\u06e0\01\00"+ + "\00\u06e0\u06e1\03\u00be\140\u06e1\u06ff\01\00\00\u06e2\u06e3\05\053"+ + "\00\u06e3\u06e4\01\00\00\u06e4\u06e5\03\u00c0\141\u06e5\u06e6\01\00"+ + "\00\u06e6\u06e7\05\106\00\u06e7\u06e8\01\00\00\u06e8\u06e9\03\u008a"+ + "\106\u06e9\u06ea\01\00\00\u06ea\u06eb\05\107\00\u06eb\u06f2\01\00"+ + "\00\u06ec\u06ed\05\106\00\u06ed\u06ee\01\00\00\u06ee\u06ef\03\u008a"+ + "\106\u06ef\u06f0\01\00\00\u06f0\u06f1\05\107\00\u06f1\u06f3\01\00"+ + "\00\u06f2\u06ec\01\00\00\u06f2\u06f5\01\00\00\u06f3\u06f4\01\00\00"+ + "\u06f4\u06f2\01\00\00\u06f5\u06fa\01\00\00\u06f6\u06f7\05\106\00\u06f7"+ + "\u06f8\01\00\00\u06f8\u06f9\05\107\00\u06f9\u06fb\01\00\00\u06fa\u06f6"+ + "\01\00\00\u06fa\u06fd\01\00\00\u06fb\u06fc\01\00\00\u06fc\u06fa\01"+ + "\00\00\u06fd\u06ff\01\00\00\u06fe\u06d0\01\00\00\u06fe\u06e2\01\00"+ + "\00\u06ff\u00bb\01\00\00\u0700\u0701\03\u00be\140\u0701\u0705\01\00"+ + "\00\u0702\u0703\03\u008a\106\u0703\u0705\01\00\00\u0704\u0700\01\00"+ + "\00\u0704\u0702\01\00\00\u0705\u00bd\01\00\00\u0706\u0707\05\104\00"+ + "\u0707\u0712\01\00\00\u0708\u0709\03\u00bc\137\u0709\u070e\01\00\00"+ + "\u070a\u070b\05\111\00\u070b\u070c\01\00\00\u070c\u070d\03\u00bc\137"+ + "\u070d\u070f\01\00\00\u070e\u070a\01\00\00\u070e\u0711\01\00\00\u070f"+ + "\u0710\01\00\00\u0710\u070e\01\00\00\u0711\u0713\01\00\00\u0712\u0708"+ + "\01\00\00\u0712\u0713\01\00\00\u0713\u0716\01\00\00\u0714\u0715\05"+ + "\111\00\u0715\u0717\01\00\00\u0716\u0714\01\00\00\u0716\u0717\01\00"+ + "\00\u0717\u0718\01\00\00\u0718\u0719\05\105\00\u0719\u00bf\01\00\00"+ + "\u071a\u071b\03\100\041\u071b\u071f\01\00\00\u071c\u071d\03\102\042"+ + "\u071d\u071f\01\00\00\u071e\u071a\01\00\00\u071e\u071c\01\00\00\u071f"+ + "\u00c1\01\00\00\u0720\u0721\05\112\00\u0721\u0722\01\00\00\u0722\u0723"+ + "\05\053\00\u0723\u0726\01\00\00\u0724\u0725\03\u00c6\144\u0725\u0727"+ + "\01\00\00\u0726\u0724\01\00\00\u0726\u0727\01\00\00\u0727\u0728\01"+ + "\00\00\u0728\u0729\05\152\00\u0729\u072c\01\00\00\u072a\u072b\03\104"+ + "\043\u072b\u072d\01\00\00\u072c\u072a\01\00\00\u072c\u072d\01\00\00"+ + "\u072d\u072e\01\00\00\u072e\u072f\03\u00c4\143\u072f\u00c3\01\00\00"+ + "\u0730\u0731\03\u00c8\145\u0731\u0734\01\00\00\u0732\u0733\03\052"+ + "\026\u0733\u0735\01\00\00\u0734\u0732\01\00\00\u0734\u0735\01\00\00"+ + "\u0735\u00c5\01\00\00\u0736\u0737\05\150\00\u0737\u0738\01\00\00\u0738"+ + "\u0739\03\050\025\u0739\u073a\01\00\00\u073a\u073b\05\151\00\u073b"+ + "\u00c7\01\00\00\u073c\u073d\05\102\00\u073d\u0740\01\00\00\u073e\u073f"+ + "\03\u0088\105\u073f\u0741\01\00\00\u0740\u073e\01\00\00\u0740\u0741"+ + "\01\00\00\u0741\u0742\01\00\00\u0742\u0743\05\103\00\u0743\u00c9\01"+ + "\00\00\u0744\u0745\05\05\00\u0745\u0757\01\00\00\u0746\u0747\05\04"+ + "\00\u0747\u0757\01\00\00\u0748\u0749\05\06\00\u0749\u0757\01\00\00"+ + "\u074a\u074b\05\07\00\u074b\u0757\01\00\00\u074c\u074d\05\010\00\u074d"+ + "\u0757\01\00\00\u074e\u074f\05\011\00\u074f\u0757\01\00\00\u0750\u0751"+ + "\05\077\00\u0751\u0757\01\00\00\u0752\u0753\05\100\00\u0753\u0757"+ + "\01\00\00\u0754\u0755\05\101\00\u0755\u0757\01\00\00\u0756\u0744\01"+ + "\00\00\u0756\u0746\01\00\00\u0756\u0748\01\00\00\u0756\u074a\01\00"+ + "\00\u0756\u074c\01\00\00\u0756\u074e\01\00\00\u0756\u0750\01\00\00"+ + "\u0756\u0752\01\00\00\u0756\u0754\01\00\00\u0757\u00cb\01\00\00\u00b0"+ + "\u00ce\u00d2\u00d6\u00dc\u00ea\u00f8\u0100\u0100\u0102\u0108\u010c"+ + "\u0114\u011c\u0122\u013c\u0144\u014c\u0156\u015c\u0162\u016e\u017a"+ + "\u0182\u0190\u0198\u019c\u01a0\u01aa\u01b0\u01b6\u01ba\u01c0\u01c8"+ + "\u01d2\u01d8\u01e2\u01ea\u01f4\u01fe\u0204\u020e\u0214\u021e\u0224"+ + "\u0228\u0232\u0238\u0242\u024a\u0250\u0252\u025e\u026a\u0272\u027e"+ + "\u0284\u028a\u0294\u029c\u02aa\u02b6\u02c0\u02c4\u02ca\u02d2\u02d4"+ + "\u02e8\u02f2\u0300\u0304\u0306\u030e\u0316\u0322\u032a\u032a\u032c"+ + "\u0330\u033c\u034a\u0350\u035c\u0364\u036c\u0372\u0372\u0374\u0380"+ + "\u0384\u038c\u039c\u03a6\u03aa\u03ae\u03c0\u03d4\u03e4\u03ec\u03f8"+ + "\u0408\u0416\u0422\u0430\u045a\u0468\u0470\u0480\u0484\u048c\u049a"+ + "\u04ac\u04b2\u04ca\u04e6\u04ec\u04f2\u04f8\u04fe\u050c\u0516\u053e"+ + "\u054a\u0552\u055c\u0566\u0570\u057a\u0584\u0588\u0592\u059a\u05aa"+ + "\u05b2\u05c4\u05cc\u05d0\u05dc\u05e0\u05f6\u0606\u060e\u0610\u0622"+ + "\u062c\u0632\u063a\u0640\u0650\u065e\u0666\u066c\u066e\u0674\u0674"+ + "\u0676\u0682\u0682\u0684\u06a0\u06a8\u06bc\u06ce\u06dc\u06f2\u06fa"+ + "\u06fe\u0704\u070e\u0712\u0716\u071e\u0726\u072c\u0734\u0740\u0756"; + public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); + static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); + } +} \ No newline at end of file diff --git a/tool/playground/blort.java b/tool/playground/blort.java new file mode 100644 index 000000000..b90e24e56 --- /dev/null +++ b/tool/playground/blort.java @@ -0,0 +1 @@ +int int int diff --git a/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg new file mode 100644 index 000000000..5f85f7b6d --- /dev/null +++ b/tool/resources/org/antlr/v4/tool/templates/codegen/Java/Java.stg @@ -0,0 +1,491 @@ +javaTypeInitMap ::= [ + "int":"0", + "long":"0", + "float":"0.0f", + "double":"0.0", + "boolean":"false", + "byte":"0", + "short":"0", + "char":"0", + default:"null" // anything other than an atomic type +] + +// args must be , + +ParserFile(file, parser, namedActions) ::= << +// $ANTLR ANTLRVersion> generatedTimestamp> + +import org.antlr.v4.runtime.NoViableAltException; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.EarlyExitException; +import org.antlr.v4.runtime.ParserSharedState; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.FailedPredicateException; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + + +>> + +Parser(parser, scopes, funcs, atn, actions, sempreds) ::= << +public class extends Parser { + public static final int + =}; separator=", ", wrap, anchor>; + public static final String[] tokenNames = { + "\", "\", "\", + "}; separator=", ", wrap, anchor> + }; + public static final String[] ruleNames = { + "\", + "}; separator=", ", wrap, anchor> + }; + + + + + + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + + +} +>> + +dumpActions(actions,sempreds) ::= << + + public boolean sempred(int ruleIndex, int predIndex) { + switch ( predIndex ) { + : return ;}; separator="\n"> + } + return true; + } + + + public void action(int ruleIndex, int actionIndex) { + switch ( actionIndex ) { + : break;}; separator="\n"> + } + } + +>> + +ctor(p) ::= << +public (TokenStream input) { + this(input, new ParserSharedState()); +} +public (TokenStream input, ParserSharedState state) { + super(input, state); + _interp = new ParserInterpreter(this,_ATN); +} +>> + +/* + // S.g:5:1: b returns [String q, float x] : A ; + public final S.b_return b() throws RecognitionException { + b_stack.push(new b_scope()); + S.b_return retval = new S.b_return(); +*/ + +RuleFunction(currentRule,code,decls,context,scope,namedActions,finallyAction) ::= << + + + + }>public final (ParserRuleContext _ctx) throws RecognitionException { + _ctx = new ParserRuleContext(_ctx, ); + state.ctx = _ctx; + + _stack.push(new ()); + + //System.out.println("enter "+ruleNames[]); + _stack.push(new ());}; separator="\n"> + + + try { + + } + catch (RecognitionException re) { + reportError(re); + recover(); + } + finally { + + _stack.pop();}; separator="\n"> + _stack.pop(); + + state.ctx = (ParserRuleContext)_ctx.parent; + //System.out.println("exit "+ruleNames[]); + } + return _ctx; +} +>> + +/** Convenience method to call from outside */ +StartRuleFunction(f) ::= << + }>public final () throws RecognitionException { + return (new (, }>LABitSet.EOF_SET)); +} +>> + +CodeBlock(c, ops) ::= << + +>> + +LL1AltBlock(choice, alts, error) ::= << +switch ( state.input.LA(1) ) { + + + break;}; separator="\n"> + default : + +} +>> + +LL1OptionalBlock(choice, alts, error) ::= << +switch ( state.input.LA(1) ) { + + + break;}; separator="\n"> + default : + +} +>> + +LL1OptionalBlockSingleAlt(choice, expr, alts, preamble, error, followExpr) ::= << + +if ( ) { + +} +) ) !> +>> + +LL1StarBlock(choice, alts, sync) ::= << +: +while (true) { + switch ( state.input.LA(1) ) { + + + break;}; separator="\n"> + + break ; + } + // +} +>> + +LL1StarBlockSingleAlt(choice, loopExpr, alts, preamble, iteration, sync) ::= << + +while ( ) { + + + // +} +>> + +LL1PlusBlock(choice, alts, iteration, loopExpr, sync, error, iterationSync) ::= << +// +do { + switch ( state.input.LA(1) ) { + + + break;}; separator="\n"> + default : + + } + + // +} while ( ); +>> + +LL1PlusBlockSingleAlt(choice, loopExpr, alts, preamble, iteration, + sync, iterationSync) ::= +<< +// + +do { + + +// +} while ( ); +>> + +// LL(*) stuff + +AltBlock(choice, alts, error) ::= << +switch ( _interp.adaptivePredict(state.input,,_ctx) ) { + : + + break;}; separator="\n"> + default : + +} +>> + +OptionalBlock(choice, alts, error) ::= << +switch ( _interp.adaptivePredict(state.input,,_ctx) ) { + : + + break;}; separator="\n"> +} +>> + +StarBlock(choice, alts, sync) ::= << +int _alt = _interp.adaptivePredict(state.input,,_ctx); +while ( _alt!= ) { + switch ( _alt ) { + : + + break;}; separator="\n"> + } + _alt = _interp.adaptivePredict(state.input,,_ctx); +} +>> + +PlusBlock(choice, alts, error) ::= << +int _alt = _interp.adaptivePredict(state.input,,_ctx); +do { + switch ( _alt ) { + : + + break;}; separator="\n"> + default : + + } + _alt = _interp.adaptivePredict(state.input,,_ctx); +} while ( _alt!= ); +>> + +Sync(s) ::= "sync();" + +ThrowNoViableAlt(t) ::= "throw new NoViableAltException(this,_ctx);" + +TestSet(s) ::= << +_ctx.s = ; +.member(state.input.LA(1)) +>> + +TestSetInline(s) ::= << +==}; separator=" || "> +>> + +cases(ttypes) ::= << +:}; separator="\n"> +>> + +InvokeRule(r) ::= << +_ctx.s = ; + = }>(_ctx}>); +>> + +MatchToken(m) ::= << +_ctx.s = ; + = }>(Token)match(); +>> + +// ACTION STUFF + +Action(a, chunks) ::= "" + +ForcedAction(a, chunks) ::= "" + +SemPred(p, chunks) ::= << +if (!()) throw new FailedPredicateException(this, state.input, "", """!>); +>> + +ActionText(t) ::= "" +ArgRef(a) ::= "_ctx." +RetValueRef(a) ::= "_ctx." +QRetValueRef(a) ::= "." +/** How to translate $tokenLabel */ +TokenRef(t) ::= "" +SetAttr(s,rhsChunks) ::= "_ctx. = ;" +SetQAttr(s,rhsChunks) ::= ". = ;" + +TokenPropertyRef_text(t) ::= "(!=null?.getText():null)" +TokenPropertyRef_type(t) ::= "(!=null?.getType():0)" +TokenPropertyRef_line(t) ::= "(!=null?.getLine():0)" +TokenPropertyRef_pos(t) ::= "(!=null?.getCharPositionInLine():0)" +TokenPropertyRef_channel(t) ::= "(!=null?.getChannel():0)" +TokenPropertyRef_index(t) ::= "(!=null?.getTokenIndex():0)" +TokenPropertyRef_tree(t) ::= "_tree" +TokenPropertyRef_int(t) ::= "(!=null?Integer.valueOf(.getText()):0)" + +RulePropertyRef_start(r) ::= "(!=null?(().start):null)" +RulePropertyRef_stop(r) ::= "(!=null?(().stop):null)" +RulePropertyRef_tree(r) ::= "(!=null?(().tree):null)" +RulePropertyRef_text(r) ::= "(!=null?((TokenStream)state.input).toString(.start,.stop):null)" +RulePropertyRef_st(r) ::= "(!=null?.st:null)" + +DynScopeRef(s) ::= "_stack" +DynScopeAttrRef(s) ::= "_stack.peek()." +DynScopeAttrRef_negIndex(s, indexChunks) ::= + "_stack.get(_stack.size()--1)." +DynScopeAttrRef_index(s, indexChunks) ::= + "_stack.get()." +SetDynScopeAttr(s, rhsChunks) ::= + "_stack.peek(). =;" +SetDynScopeAttr_negIndex(s, indexChunks, rhsChunks) ::= + "_stack.get(_stack.size()--1). =;" +SetDynScopeAttr_index(s, indexChunks, rhsChunks) ::= + "_stack.get(). =;" + +AddToList(a) ::= ".add();" + +TokenDecl(t) ::= "Token ;" +TokenTypeDecl(t) ::= "int ;" +TokenListDecl(t) ::= "List\ = new ArrayList\();" +RuleContextDecl(r) ::= " ;" + +CaptureNextToken(d) ::= " = state.input.LT(1);" +CaptureNextTokenType(d) ::= " = state.input.LA(1);" + +StructDecl(s,attrs) ::= << +public static class extends ParserRuleContext { + ;}; separator="\n"> + + public (,}> LABitSet follow) { + super(follow); + = ;}; separator="\n"> + } + +}; +>> + +DynamicScopeStruct(d,attrs) ::= << +public static class { + ;}; separator="\n"> +}; +public QStack\<\> _stack = new QStack\<\>(); +>> + +AttributeDecl(d) ::= "" + +DFADecl(dfa) ::= << +// define +>> + +BitSetDecl(b) ::= << +public static final LABitSet =new LABitSet(new long[]{L};separator=",">}, true); +>> + +LexerFile(lexerFile, lexer, namedActions) ::= << +// $ANTLR ANTLRVersion> generatedTimestamp> + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.LexerSharedState; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; +import org.antlr.runtime.*; + + +>> + +Lexer(lexer, atn, actions, sempreds) ::= << +public class extends Lexer { + public static final int + =}; separator=", ", wrap, anchor>; + = ;}; separator="\n"> + + public static final String[] tokenNames = { + "\", "\", "\", + "}; separator=", ", wrap, anchor> + }; + public static final String[] ruleNames = { + "\", + "}; separator=", ", wrap, anchor> + }; + + + + public (CharStream input) { + this(input, new LexerSharedState()); + } + public (CharStream input, LexerSharedState state) { + super(input,state); + _interp = new LexerInterpreter(this,_ATN); + } + + public String getGrammarFileName() { return ""; } + @Override + public String[] getTokenNames() { return tokenNames; } + @Override + public String[] getRuleNames() { return ruleNames; } + @Override + public ATN getATN() { return _ATN; } + + + + + +} +>> + + +SerializedATN(model) ::= << +public static final String _serializedATN = + ""}, anchor>"; +public static final ATN _ATN = + ATNInterpreter.deserialize(_serializedATN.toCharArray()); +static { + org.antlr.v4.tool.DOTGenerator dot = new org.antlr.v4.tool.DOTGenerator(null); + //System.out.println(dot.getDOT(_ATN.decisionToATNState.get(0))); +} +>> + +actionMethod(name, ruleIndex, actions) ::= << +public void _actions(int action) { + System.out.println("exec action "+action); + switch ( action ) { + : + + break; + }> + } +}<\n> +>> + +sempredMethod(name, ruleIndex, preds) ::= << +public boolean _sempreds(int pred) { + switch ( pred ) { + : + return

; + }> + default : return false; + } +}<\n> +>> + +/** Using a type to init value map, try to init a type; if not in table + * must be an object, default value is "null". + */ +initValue(typeName) ::= << + +>> + +codeFileExtension() ::= ".java" + +true() ::= "true" +false() ::= "false" diff --git a/tool/resources/org/antlr/v4/tool/templates/depend.stg b/tool/resources/org/antlr/v4/tool/templates/depend.stg new file mode 100644 index 000000000..c093054eb --- /dev/null +++ b/tool/resources/org/antlr/v4/tool/templates/depend.stg @@ -0,0 +1,12 @@ +/** templates used to generate make-compatible dependencies */ +group depend; + +/** Generate "f : x, y, z" dependencies for input + * dependencies and generated files. in and out + * are File objects. For example, you can say + * + */ +dependencies(grammarFileName,in,out) ::= << +: + : }; separator="\n"> +>> diff --git a/tool/resources/org/antlr/v4/tool/templates/dot/action-edge.st b/tool/resources/org/antlr/v4/tool/templates/dot/action-edge.st new file mode 100644 index 000000000..f4614dbd5 --- /dev/null +++ b/tool/resources/org/antlr/v4/tool/templates/dot/action-edge.st @@ -0,0 +1,3 @@ +action-edge(src,target,label,arrowhead) ::= << + -> [fontsize=11, fontname="Courier", arrowsize=.7, label = "