diff --git a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java index 9b7fbda7f4ea..2513e5ad5254 100644 --- a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java @@ -189,32 +189,32 @@ class _PythonLexer implements FlexLexerEx { "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\24"+ "\1\25\20\3\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\2\43"+ - "\1\44\2\45\1\46\1\3\2\47\1\22\3\3\2\50"+ - "\1\51\1\10\1\51\1\52\1\53\1\3\2\54\1\55"+ + "\1\44\2\45\1\46\1\3\2\47\1\22\3\3\1\50"+ + "\1\51\1\1\1\51\1\52\1\53\1\3\2\54\1\55"+ "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+ - "\3\3\2\50\1\10\1\52\1\66\1\2\5\0\1\2"+ + "\3\3\1\50\1\1\1\52\1\66\1\2\5\0\1\2"+ "\1\67\1\0\1\70\1\0\1\3\1\67\1\71\1\72"+ "\3\7\1\73\3\7\1\3\2\74\1\75\1\76\15\3"+ "\1\77\1\100\1\101\1\102\10\3\1\103\1\104\1\105"+ "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ "\1\116\1\117\1\120\1\121\1\0\3\45\1\122\3\45"+ - "\1\3\6\47\2\0\1\123\1\3\2\0\2\44\1\51"+ - "\1\124\1\50\1\51\1\3\7\54\1\57\1\3\1\0"+ - "\1\44\1\50\1\0\1\2\1\0\1\2\1\0\1\2"+ - "\1\0\1\67\1\0\1\3\1\0\1\7\1\125\1\126"+ - "\1\0\1\125\1\3\2\0\1\127\1\3\1\130\1\131"+ - "\1\132\5\3\1\133\6\3\1\134\5\3\1\135\1\136"+ - "\1\137\1\140\1\0\1\45\1\141\1\142\1\0\1\141"+ - "\1\3\1\47\2\143\1\50\1\51\1\3\2\54\1\144"+ - "\2\50\1\0\2\145\1\0\1\3\1\74\1\3\1\146"+ - "\1\147\10\3\1\150\1\3\1\151\3\3\1\0\2\142"+ - "\7\0\1\50\4\0\2\3\1\152\1\3\1\153\1\154"+ - "\4\3\1\155\1\3\1\156\7\0\1\125\1\157\1\160"+ - "\1\161\1\3\1\162\1\163\1\3\1\164\1\141\1\143"+ - "\1\144\1\145\1\0\1\165\1\3\1\166\1\167"; + "\1\3\6\47\2\0\1\123\1\3\2\0\1\51\1\124"+ + "\1\50\1\51\1\3\7\54\1\57\1\3\1\0\1\50"+ + "\1\0\1\2\1\0\1\2\1\0\1\2\1\0\1\67"+ + "\1\0\1\3\1\0\1\7\1\125\1\126\1\0\1\125"+ + "\1\3\2\0\1\127\1\3\1\130\1\131\1\132\5\3"+ + "\1\133\6\3\1\134\5\3\1\135\1\136\1\137\1\140"+ + "\1\0\1\45\1\141\1\142\1\0\1\141\1\3\1\47"+ + "\2\143\1\51\1\3\2\54\1\144\1\50\1\0\2\145"+ + "\1\0\1\3\1\74\1\3\1\146\1\147\10\3\1\150"+ + "\1\3\1\151\3\3\1\0\2\142\13\0\2\3\1\152"+ + "\1\3\1\153\1\154\4\3\1\155\1\3\1\156\7\0"+ + "\1\125\1\157\1\160\1\161\1\3\1\162\1\163\1\3"+ + "\1\164\1\141\1\143\1\144\1\145\1\0\1\165\1\3"+ + "\1\166\1\167"; private static int [] zzUnpackAction() { - int [] result = new int[348]; + int [] result = new int[340]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -248,44 +248,43 @@ class _PythonLexer implements FlexLexerEx { "\0\u0a64\0\u0ab0\0\u0afc\0\u0b48\0\u0b94\0\u0be0\0\u0c2c\0\u0c78"+ "\0\u0cc4\0\u0d10\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u0d5c\0\u0da8"+ "\0\u0df4\0\u0e40\0\u01c8\0\u0e8c\0\u0ed8\0\u0f24\0\u0f70\0\u0fbc"+ - "\0\u1008\0\u1054\0\u10a0\0\u10ec\0\u1138\0\u1184\0\u11d0\0\u121c"+ - "\0\u01c8\0\u1268\0\u12b4\0\u1300\0\u01c8\0\u01c8\0\u134c\0\u01c8"+ - "\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u1398\0\u13e4\0\u1430"+ - "\0\u147c\0\u14c8\0\u1514\0\u01c8\0\u01c8\0\u1560\0\u15ac\0\u15f8"+ - "\0\u1644\0\u1690\0\u16dc\0\u01c8\0\u1728\0\u1774\0\u01c8\0\u17c0"+ - "\0\u180c\0\u1858\0\u01c8\0\u01c8\0\u18a4\0\u18f0\0\u193c\0\u01c8"+ - "\0\u1988\0\u19d4\0\u1a20\0\u1a6c\0\u1ab8\0\u1b04\0\u01c8\0\u01c8"+ + "\0\u1008\0\u1054\0\u10a0\0\u10ec\0\u1138\0\u1184\0\u11d0\0\u01c8"+ + "\0\u121c\0\u1268\0\u12b4\0\u01c8\0\u01c8\0\u1300\0\u01c8\0\u01c8"+ + "\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u134c\0\u1398\0\u13e4\0\u1430"+ + "\0\u147c\0\u01c8\0\u01c8\0\u14c8\0\u1514\0\u1560\0\u15ac\0\u15f8"+ + "\0\u1644\0\u01c8\0\u1690\0\u16dc\0\u01c8\0\u1728\0\u1774\0\u17c0"+ + "\0\u01c8\0\u01c8\0\u180c\0\u1858\0\u18a4\0\u01c8\0\u18f0\0\u193c"+ + "\0\u1988\0\u19d4\0\u1a20\0\u1a6c\0\u01c8\0\u01c8\0\u1ab8\0\u1b04"+ "\0\u1b50\0\u1b9c\0\u1be8\0\u1c34\0\u1c80\0\u1ccc\0\u1d18\0\u1d64"+ - "\0\u1db0\0\u1dfc\0\u1e48\0\u1e94\0\u1ee0\0\u02ac\0\u02ac\0\u02ac"+ - "\0\u02ac\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u20a8\0\u20f4"+ - "\0\u2140\0\u01c8\0\u01c8\0\u218c\0\u01c8\0\u01c8\0\u21d8\0\u01c8"+ - "\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u2224\0\u01c8\0\u01c8\0\u2270"+ - "\0\u22bc\0\u2308\0\u2354\0\u23a0\0\u01c8\0\u23ec\0\u2438\0\u2484"+ - "\0\u24d0\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u2698\0\u26e4"+ - "\0\u0f70\0\u01c8\0\u2730\0\u277c\0\u121c\0\u27c8\0\u2814\0\u2860"+ - "\0\u01c8\0\u28ac\0\u28f8\0\u2944\0\u2990\0\u29dc\0\u2568\0\u2a28"+ + "\0\u1db0\0\u1dfc\0\u1e48\0\u02ac\0\u02ac\0\u02ac\0\u02ac\0\u1e94"+ + "\0\u1ee0\0\u1f2c\0\u1f78\0\u1fc4\0\u2010\0\u205c\0\u20a8\0\u01c8"+ + "\0\u01c8\0\u20f4\0\u01c8\0\u01c8\0\u2140\0\u01c8\0\u01c8\0\u01c8"+ + "\0\u01c8\0\u01c8\0\u218c\0\u01c8\0\u01c8\0\u21d8\0\u2224\0\u2270"+ + "\0\u22bc\0\u2308\0\u01c8\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u2484"+ + "\0\u24d0\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u0f70\0\u01c8"+ + "\0\u2698\0\u26e4\0\u11d0\0\u2730\0\u01c8\0\u277c\0\u27c8\0\u2814"+ + "\0\u2860\0\u28ac\0\u24d0\0\u28f8\0\u2944\0\u2990\0\u29dc\0\u2a28"+ "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u2bf0\0\u2c3c\0\u2c88"+ - "\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04\0\u2e50\0\u2e9c\0\u2ee8"+ - "\0\u2f34\0\u2f80\0\u0390\0\u2fcc\0\u3018\0\u01c8\0\u2fcc\0\u3064"+ - "\0\u30b0\0\u30fc\0\u3148\0\u02ac\0\u3194\0\u02ac\0\u02ac\0\u02ac"+ - "\0\u31e0\0\u322c\0\u3278\0\u32c4\0\u3310\0\u02ac\0\u335c\0\u33a8"+ - "\0\u33f4\0\u3440\0\u348c\0\u34d8\0\u02ac\0\u3524\0\u3570\0\u35bc"+ - "\0\u3608\0\u3654\0\u01c8\0\u01c8\0\u01c8\0\u01c8\0\u36a0\0\u36ec"+ - "\0\u3738\0\u01c8\0\u36ec\0\u3784\0\u37d0\0\u01c8\0\u381c\0\u3868"+ - "\0\u38b4\0\u01c8\0\u3900\0\u2698\0\u01c8\0\u394c\0\u3998\0\u39e4"+ - "\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60\0\u01c8\0\u3bac\0\u02ac"+ - "\0\u02ac\0\u3bf8\0\u3c44\0\u3c90\0\u3cdc\0\u3d28\0\u3d74\0\u3dc0"+ - "\0\u3e0c\0\u02ac\0\u3e58\0\u02ac\0\u3ea4\0\u3ef0\0\u3f3c\0\u3f88"+ - "\0\u3fd4\0\u4020\0\u406c\0\u40b8\0\u4104\0\u4150\0\u419c\0\u41e8"+ - "\0\u4234\0\u4280\0\u42cc\0\u3a7c\0\u3ac8\0\u4318\0\u4364\0\u43b0"+ - "\0\u02ac\0\u43fc\0\u02ac\0\u02ac\0\u4448\0\u4494\0\u44e0\0\u452c"+ - "\0\u02ac\0\u4578\0\u02ac\0\u45c4\0\u3fd4\0\u4020\0\u4610\0\u465c"+ - "\0\u46a8\0\u46f4\0\u4740\0\u02ac\0\u02ac\0\u02ac\0\u478c\0\u02ac"+ - "\0\u02ac\0\u47d8\0\u02ac\0\u36ec\0\u01c8\0\u01c8\0\u01c8\0\u4740"+ - "\0\u01c8\0\u4824\0\u02ac\0\u02ac"; + "\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04\0\u0390\0\u2e50\0\u2e9c"+ + "\0\u01c8\0\u2e50\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u02ac\0\u3018"+ + "\0\u02ac\0\u02ac\0\u02ac\0\u3064\0\u30b0\0\u30fc\0\u3148\0\u3194"+ + "\0\u02ac\0\u31e0\0\u322c\0\u3278\0\u32c4\0\u3310\0\u335c\0\u02ac"+ + "\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u34d8\0\u01c8\0\u01c8\0\u01c8"+ + "\0\u01c8\0\u3524\0\u3570\0\u35bc\0\u01c8\0\u3570\0\u3608\0\u3654"+ + "\0\u01c8\0\u36a0\0\u36ec\0\u01c8\0\u3738\0\u2600\0\u01c8\0\u3784"+ + "\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c\0\u01c8\0\u3998"+ + "\0\u02ac\0\u02ac\0\u39e4\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60"+ + "\0\u3bac\0\u3bf8\0\u02ac\0\u3c44\0\u02ac\0\u3c90\0\u3cdc\0\u3d28"+ + "\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c\0\u3f88"+ + "\0\u3fd4\0\u4020\0\u406c\0\u3868\0\u38b4\0\u40b8\0\u4104\0\u4150"+ + "\0\u02ac\0\u419c\0\u02ac\0\u02ac\0\u41e8\0\u4234\0\u4280\0\u42cc"+ + "\0\u02ac\0\u4318\0\u02ac\0\u4364\0\u3dc0\0\u3e0c\0\u43b0\0\u43fc"+ + "\0\u4448\0\u4494\0\u44e0\0\u02ac\0\u02ac\0\u02ac\0\u452c\0\u02ac"+ + "\0\u02ac\0\u4578\0\u02ac\0\u3570\0\u01c8\0\u01c8\0\u01c8\0\u44e0"+ + "\0\u01c8\0\u45c4\0\u02ac\0\u02ac"; private static int [] zzUnpackRowMap() { - int [] result = new int[348]; + int [] result = new int[340]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -329,372 +328,361 @@ class _PythonLexer implements FlexLexerEx { "\1\112\1\51\1\52\1\53\1\104\1\54\1\12\1\55"+ "\1\56\1\12\1\57\1\60\1\12\1\61\1\62\1\63"+ "\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\73"+ - "\1\74\1\75\1\7\13\113\1\114\1\0\10\113\1\115"+ - "\1\116\1\117\1\113\1\120\5\113\1\121\54\113\1\7"+ - "\1\10\2\11\1\12\1\11\3\12\1\122\1\12\1\100"+ - "\1\7\1\12\1\7\1\15\1\12\1\16\1\12\2\122"+ - "\1\123\1\20\1\124\1\22\1\125\1\126\1\12\1\25"+ - "\1\127\1\27\1\130\1\131\1\132\1\133\1\134\1\135"+ - "\1\36\1\37\1\40\1\41\1\42\1\43\1\12\1\44"+ - "\1\136\1\46\1\137\1\12\1\140\1\51\1\52\1\53"+ - "\1\122\1\54\1\12\1\55\1\56\1\12\1\57\1\60"+ - "\1\12\1\61\1\62\1\63\1\64\1\65\1\66\1\67"+ - "\1\70\1\71\1\72\1\73\1\74\1\75\1\7\13\141"+ - "\1\142\1\0\10\141\1\115\1\143\1\117\1\141\1\144"+ - "\1\145\4\141\1\121\54\141\115\0\1\146\1\147\1\146"+ - "\1\0\1\146\1\150\1\151\1\152\1\153\1\154\4\0"+ - "\1\155\1\156\1\0\1\157\31\0\1\156\2\0\1\153"+ - "\2\0\1\154\1\152\3\0\1\150\25\0\3\11\1\0"+ - "\1\11\1\0\1\160\2\0\1\154\4\0\1\155\1\156"+ - "\1\0\1\157\31\0\1\156\5\0\1\154\32\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\26\12\17\0\10\12\1\161\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\161\1\17"+ - "\1\0\1\21\1\22\2\0\1\12\14\0\5\12\1\161"+ - "\1\12\1\161\1\12\1\161\3\12\1\161\1\22\7\12"+ - "\16\0\14\14\1\0\22\14\1\0\54\14\1\0\3\162"+ - "\1\0\1\162\144\0\1\163\47\0\1\164\5\0\14\165"+ - "\1\0\10\165\1\166\1\167\10\165\1\170\54\165\14\171"+ - "\1\0\11\171\1\172\1\173\7\171\1\170\54\171\1\0"+ - "\10\12\1\174\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\174\1\175\1\0\1\176\1\12\2\0\1\12"+ - "\14\0\5\12\1\174\1\12\1\174\1\12\1\174\3\12"+ - "\1\174\10\12\54\0\1\177\113\0\1\200\56\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\1\12\1\201\1\12\1\202\22\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\13\12\1\203\12\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\4\12\1\204\21\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\12\12\1\205\4\12"+ - "\1\206\6\12\17\0\10\12\1\161\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\161\1\17\1\0\1\21"+ - "\1\22\2\0\1\12\14\0\1\207\3\12\1\210\1\161"+ - "\1\12\1\161\1\12\1\161\3\12\1\161\1\22\7\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\5\12\1\211\20\12"+ - "\17\0\10\12\1\161\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\161\1\17\1\0\1\21\1\22\2\0"+ - "\1\12\14\0\5\12\1\212\1\12\1\161\1\12\1\161"+ - "\3\12\1\161\1\22\7\12\17\0\10\12\1\161\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\161\1\17"+ - "\1\0\1\21\1\22\2\0\1\12\14\0\5\12\1\161"+ - "\1\12\1\161\1\12\1\161\1\213\1\214\1\12\1\161"+ - "\1\22\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\215"+ - "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\5\12\1\216"+ - "\20\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\1\12\1\217"+ - "\1\12\1\220\12\12\1\221\3\12\1\222\3\12\17\0"+ - "\10\12\1\174\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\174\1\175\1\0\1\176\1\12\2\0\1\12"+ - "\14\0\5\12\1\223\1\12\1\174\1\12\1\174\1\12"+ - "\1\224\1\225\1\174\10\12\17\0\12\12\2\0\2\12"+ + "\1\74\1\75\1\7\14\113\1\7\10\113\1\114\1\115"+ + "\1\116\1\113\1\117\5\113\1\120\54\113\1\7\1\10"+ + "\2\11\1\12\1\11\3\12\1\121\1\12\1\100\1\7"+ + "\1\12\1\7\1\15\1\12\1\16\1\12\2\121\1\122"+ + "\1\20\1\123\1\22\1\124\1\125\1\12\1\25\1\126"+ + "\1\27\1\127\1\130\1\131\1\132\1\133\1\134\1\36"+ + "\1\37\1\40\1\41\1\42\1\43\1\12\1\44\1\135"+ + "\1\46\1\136\1\12\1\137\1\51\1\52\1\53\1\121"+ + "\1\54\1\12\1\55\1\56\1\12\1\57\1\60\1\12"+ + "\1\61\1\62\1\63\1\64\1\65\1\66\1\67\1\70"+ + "\1\71\1\72\1\73\1\74\1\75\1\7\14\140\1\7"+ + "\10\140\1\114\1\141\1\116\1\140\1\142\1\143\4\140"+ + "\1\120\54\140\115\0\1\144\1\145\1\144\1\0\1\144"+ + "\1\146\1\147\1\150\1\151\1\152\4\0\1\153\1\154"+ + "\1\0\1\155\31\0\1\154\2\0\1\151\2\0\1\152"+ + "\1\150\3\0\1\146\25\0\3\11\1\0\1\11\1\0"+ + "\1\156\2\0\1\152\4\0\1\153\1\154\1\0\1\155"+ + "\31\0\1\154\5\0\1\152\32\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ - "\14\0\1\226\25\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\14\12\1\227\11\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\12\12\1\230\13\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\25\12\1\231\54\0\1\232\113\0\1\233\40\0\1\234"+ - "\52\0\1\235\113\0\1\236\42\0\1\237\50\0\1\240"+ - "\113\0\1\241\113\0\1\242\113\0\1\243\113\0\1\244"+ - "\47\0\1\245\43\0\1\246\47\0\1\247\1\250\15\0"+ - "\1\251\11\0\2\251\1\101\1\0\1\102\25\0\1\251"+ - "\1\0\1\251\1\0\1\251\3\0\1\251\26\0\14\100"+ - "\1\0\22\100\1\0\54\100\14\252\1\0\10\252\1\253"+ - "\1\254\10\252\1\255\54\252\14\256\1\0\11\256\1\257"+ - "\1\260\7\256\1\255\54\256\1\0\10\12\1\261\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\261\1\105"+ - "\1\0\1\106\1\22\2\0\1\12\14\0\5\12\1\261"+ - "\1\12\1\261\1\12\1\261\3\12\1\261\1\22\7\12"+ - "\16\0\14\262\1\0\10\262\1\263\1\264\10\262\1\0"+ - "\54\262\14\265\1\0\11\265\1\266\1\267\7\265\1\0"+ - "\54\265\13\0\1\270\20\0\1\271\2\0\1\272\55\0"+ - "\10\12\1\261\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\261\1\105\1\0\1\106\1\22\2\0\1\12"+ - "\14\0\1\207\3\12\1\210\1\261\1\12\1\261\1\12"+ - "\1\261\3\12\1\261\1\22\7\12\17\0\10\12\1\261"+ - "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\261"+ - "\1\105\1\0\1\106\1\22\2\0\1\12\14\0\5\12"+ - "\1\273\1\12\1\261\1\12\1\261\3\12\1\261\1\22"+ - "\7\12\17\0\10\12\1\261\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\261\1\105\1\0\1\106\1\22"+ - "\2\0\1\12\14\0\5\12\1\261\1\12\1\261\1\12"+ - "\1\261\1\213\1\214\1\12\1\261\1\22\7\12\16\0"+ - "\14\113\1\0\10\113\1\0\1\274\1\0\1\113\1\275"+ - "\5\113\1\0\54\113\14\114\1\0\10\114\1\100\1\276"+ - "\1\100\1\114\1\277\5\114\1\0\54\114\25\0\1\300"+ - "\66\0\31\113\2\301\1\302\60\113\27\0\1\303\115\0"+ - "\1\113\63\0\10\12\1\304\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\304\1\123\1\0\1\305\1\22"+ - "\2\0\1\12\14\0\5\12\1\304\1\12\1\304\1\12"+ - "\1\304\3\12\1\304\1\22\7\12\16\0\14\306\1\0"+ - "\10\306\1\307\1\310\10\306\1\0\54\306\14\311\1\0"+ - "\11\311\1\312\1\313\7\311\1\0\54\311\14\314\1\0"+ - "\10\314\1\0\1\314\1\0\2\314\1\0\1\314\1\0"+ - "\1\314\1\177\1\0\4\314\2\0\46\314\1\0\10\12"+ - "\1\304\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ - "\2\304\1\123\1\0\1\305\1\22\2\0\1\12\14\0"+ - "\1\207\3\12\1\210\1\304\1\12\1\304\1\12\1\304"+ - "\3\12\1\304\1\22\7\12\17\0\10\12\1\304\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\304\1\123"+ - "\1\0\1\305\1\22\2\0\1\12\14\0\5\12\1\315"+ - "\1\12\1\304\1\12\1\304\3\12\1\304\1\22\7\12"+ - "\17\0\10\12\1\304\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\304\1\123\1\0\1\305\1\22\2\0"+ - "\1\12\14\0\5\12\1\304\1\12\1\304\1\12\1\304"+ - "\1\213\1\214\1\12\1\304\1\22\7\12\16\0\14\141"+ - "\1\0\10\141\1\0\1\316\1\0\1\141\2\0\4\141"+ - "\1\0\54\141\14\142\1\0\10\142\1\100\1\317\1\100"+ - "\1\142\2\100\4\142\1\0\54\142\31\141\2\301\1\320"+ - "\60\141\1\0\1\146\1\147\1\146\1\0\1\146\1\0"+ - "\1\151\2\0\1\154\4\0\1\155\1\156\1\0\1\157"+ - "\31\0\1\156\5\0\1\154\32\0\3\147\1\0\1\147"+ - "\1\0\1\321\7\0\1\155\1\156\1\0\1\157\31\0"+ - "\1\156\40\0\5\322\1\0\1\323\1\0\1\322\6\0"+ - "\1\322\2\0\1\322\4\0\1\322\17\0\1\322\1\0"+ - "\1\322\1\0\1\322\2\0\1\322\1\0\1\322\4\0"+ - "\1\322\26\0\1\146\1\147\1\146\1\0\1\146\107\0"+ - "\1\324\1\0\1\324\1\0\1\324\1\0\1\325\105\0"+ - "\1\326\3\0\1\326\1\0\1\327\105\0\3\162\1\0"+ - "\1\162\12\0\1\156\1\0\1\157\31\0\1\156\40\0"+ - "\3\330\1\0\1\330\13\0\1\331\54\0\1\331\16\0"+ - "\3\11\1\0\1\11\107\0\10\12\1\332\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\332\1\17\1\0"+ - "\1\21\1\22\2\0\1\12\14\0\5\12\1\332\1\12"+ - "\1\332\1\12\1\332\3\12\1\332\1\22\7\12\17\0"+ - "\3\162\1\0\1\162\1\0\1\333\10\0\1\156\1\0"+ - "\1\157\31\0\1\156\37\0\14\165\1\0\10\165\1\334"+ - "\1\167\10\165\1\170\54\165\25\0\1\335\1\336\5\0"+ - "\1\337\2\0\1\170\5\0\1\337\1\0\1\170\44\0"+ - "\114\165\14\171\1\0\11\171\1\172\1\334\7\171\1\170"+ - "\170\171\26\0\1\336\1\340\4\0\1\337\2\0\1\170"+ - "\5\0\1\337\1\0\1\170\45\0\10\12\1\341\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\341\1\175"+ - "\1\0\1\176\1\12\2\0\1\12\14\0\5\12\1\341"+ - "\1\12\1\341\1\12\1\341\3\12\1\341\10\12\43\0"+ - "\1\342\115\0\1\343\65\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\2\12\1\344\23\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\3\12\1\345\22\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\6\12\1\346\17\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\12\12\1\347\3\12\1\350\7\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\3\12\1\351\10\12\1\352\11\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\11\12\1\353\14\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\14\12\1\354\11\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\6\12\1\355\17\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\21\12\1\356\4\12\17\0"+ - "\10\12\1\332\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\332\1\17\1\0\1\21\1\22\2\0\1\12"+ - "\14\0\4\12\1\357\1\332\1\12\1\332\1\12\1\332"+ - "\3\12\1\332\1\22\7\12\17\0\12\12\2\0\2\12"+ + "\14\0\26\12\17\0\10\12\1\157\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\157\1\17\1\0\1\21"+ + "\1\22\2\0\1\12\14\0\5\12\1\157\1\12\1\157"+ + "\1\12\1\157\3\12\1\157\1\22\7\12\16\0\14\14"+ + "\1\0\22\14\1\0\54\14\1\0\3\160\1\0\1\160"+ + "\144\0\1\161\47\0\1\162\5\0\14\163\1\0\10\163"+ + "\1\164\1\165\10\163\1\166\54\163\14\167\1\0\11\167"+ + "\1\170\1\171\7\167\1\166\54\167\1\0\10\12\1\172"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\172"+ + "\1\173\1\0\1\174\1\12\2\0\1\12\14\0\5\12"+ + "\1\172\1\12\1\172\1\12\1\172\3\12\1\172\10\12"+ + "\54\0\1\175\113\0\1\176\56\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ - "\14\0\1\360\25\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\1\12\1\361\24\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\22\12\1\362\3\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\20\12\1\363\5\12\17\0\10\12\1\341\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\341\1\175\1\0"+ - "\1\176\1\12\2\0\1\12\14\0\5\12\1\341\1\12"+ - "\1\341\1\12\1\341\1\12\1\364\1\12\1\341\10\12"+ + "\14\0\1\12\1\177\1\12\1\200\22\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\13\12\1\201\12\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\4\12\1\202\21\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\12\12\1\203\4\12\1\204\6\12"+ + "\17\0\10\12\1\157\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\157\1\17\1\0\1\21\1\22\2\0"+ + "\1\12\14\0\1\205\3\12\1\206\1\157\1\12\1\157"+ + "\1\12\1\157\3\12\1\157\1\22\7\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\5\12\1\207\20\12\17\0\10\12"+ + "\1\157\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\157\1\17\1\0\1\21\1\22\2\0\1\12\14\0"+ + "\5\12\1\210\1\12\1\157\1\12\1\157\3\12\1\157"+ + "\1\22\7\12\17\0\10\12\1\157\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\157\1\17\1\0\1\21"+ + "\1\22\2\0\1\12\14\0\5\12\1\157\1\12\1\157"+ + "\1\12\1\157\1\211\1\212\1\12\1\157\1\22\7\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\5\12\1\365\20\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\1\12\1\366\24\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\3\12\1\367\22\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\4\12\1\370\21\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\13\12\1\371\12\12"+ - "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\14\12\1\372\11\12"+ - "\54\0\1\373\113\0\1\374\113\0\1\375\113\0\1\376"+ - "\66\0\1\377\11\0\2\377\1\101\1\0\1\102\25\0"+ - "\1\377\1\0\1\377\1\0\1\377\3\0\1\377\26\0"+ - "\14\252\1\0\10\252\1\u0100\1\254\10\252\1\255\54\252"+ - "\25\0\1\u0101\1\u0102\5\0\1\u0103\2\0\1\255\5\0"+ - "\1\u0103\1\0\1\255\44\0\114\252\14\256\1\0\11\256"+ - "\1\257\1\u0100\7\256\1\255\170\256\26\0\1\u0102\1\u0104"+ - "\4\0\1\u0103\2\0\1\255\5\0\1\u0103\1\0\1\255"+ - "\45\0\10\12\1\u0105\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\u0105\1\105\1\0\1\106\1\22\2\0"+ - "\1\12\14\0\5\12\1\u0105\1\12\1\u0105\1\12\1\u0105"+ - "\3\12\1\u0105\1\22\7\12\16\0\14\262\1\0\10\262"+ - "\1\u0106\1\264\10\262\1\0\54\262\25\0\1\u0107\66\0"+ - "\114\262\14\265\1\0\11\265\1\266\1\u0106\7\265\1\0"+ - "\170\265\27\0\1\u0108\64\0\14\270\1\0\22\270\1\272"+ - "\54\270\1\0\10\12\1\u0105\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\u0105\1\105\1\0\1\106\1\22"+ - "\2\0\1\12\14\0\4\12\1\357\1\u0105\1\12\1\u0105"+ - "\1\12\1\u0105\3\12\1\u0105\1\22\7\12\16\0\31\113"+ - "\2\0\1\302\60\113\14\114\1\113\14\114\2\100\1\u0109"+ - "\3\114\1\113\54\114\14\100\1\0\14\100\1\114\5\100"+ - "\1\0\54\100\25\0\1\u010a\66\0\14\113\1\0\10\113"+ - "\1\0\1\274\1\0\1\113\1\302\5\113\1\0\54\113"+ - "\27\0\1\u010a\65\0\10\12\1\u010b\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\u010b\1\123\1\0\1\305"+ - "\1\22\2\0\1\12\14\0\5\12\1\u010b\1\12\1\u010b"+ - "\1\12\1\u010b\3\12\1\u010b\1\22\7\12\16\0\14\311"+ - "\1\0\11\311\1\312\1\u010c\7\311\1\0\54\311\14\306"+ - "\1\0\10\306\1\u010d\1\310\10\306\1\0\170\306\14\311"+ - "\1\0\11\311\1\312\1\u010d\7\311\1\0\170\311\27\0"+ - "\1\u010e\64\0\14\314\1\0\10\314\1\0\1\314\1\0"+ - "\2\314\1\0\1\314\1\0\1\314\2\0\4\314\2\0"+ - "\46\314\1\0\10\12\1\u010b\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\u010b\1\123\1\0\1\305\1\22"+ - "\2\0\1\12\14\0\4\12\1\357\1\u010b\1\12\1\u010b"+ - "\1\12\1\u010b\3\12\1\u010b\1\22\7\12\16\0\31\141"+ - "\2\0\1\320\60\141\14\142\1\141\14\142\2\100\1\u010f"+ - "\3\142\1\141\54\142\14\141\1\0\10\141\1\0\1\316"+ - "\1\0\1\141\1\u0110\1\0\4\141\1\0\54\141\1\0"+ - "\3\147\1\0\1\147\107\0\5\322\1\0\1\323\1\0"+ - "\1\322\1\154\5\0\1\322\2\0\1\322\4\0\1\322"+ - "\17\0\1\322\1\0\1\322\1\0\1\322\2\0\1\322"+ - "\1\0\1\322\1\154\3\0\1\322\26\0\5\322\3\0"+ - "\1\322\6\0\1\322\2\0\1\322\4\0\1\322\17\0"+ - "\1\322\1\0\1\322\1\0\1\322\2\0\1\322\1\0"+ - "\1\322\4\0\1\322\26\0\1\324\1\0\1\324\1\0"+ - "\1\324\1\0\1\325\2\0\1\154\47\0\1\154\32\0"+ - "\1\324\1\0\1\324\1\0\1\324\107\0\1\326\3\0"+ - "\1\326\1\0\1\327\2\0\1\154\47\0\1\154\32\0"+ - "\1\326\3\0\1\326\107\0\3\330\1\0\1\330\1\0"+ - "\1\331\12\0\1\157\72\0\3\330\1\0\1\330\107\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\1\17"+ - "\1\0\1\21\1\22\2\0\1\12\14\0\16\12\1\22"+ - "\7\12\44\0\1\336\5\0\1\337\2\0\1\170\5\0"+ - "\1\337\1\0\1\170\44\0\25\335\1\u0111\1\u0112\65\335"+ - "\26\340\1\u0113\1\u0114\64\340\1\0\10\12\1\u0115\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\u0115\1\175"+ - "\1\0\1\176\1\12\2\0\1\12\14\0\5\12\1\u0115"+ - "\1\12\1\u0115\1\12\1\u0115\3\12\1\u0115\10\12\43\0"+ - "\1\u0116\115\0\1\u0116\65\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\4\12\1\u0117\21\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\4\12\1\u0118\21\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\16\12\1\u0119\7\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\4\12\1\u011a\21\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\3\12\1\u011b\22\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\15\12\1\u011c\10\12\17\0\12\12\2\0\2\12\1\0"+ - "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\1\u011d\25\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\3\12"+ - "\1\u011e\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ - "\1\u011f\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\7\12"+ - "\1\u0120\16\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\13\12"+ - "\1\u0121\12\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\22\12"+ - "\1\u0122\3\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0123"+ + "\3\0\1\12\2\0\1\12\14\0\1\213\25\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\5\12\1\214\20\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\1\12\1\215\1\12\1\216"+ + "\12\12\1\217\3\12\1\220\3\12\17\0\10\12\1\172"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\172"+ + "\1\173\1\0\1\174\1\12\2\0\1\12\14\0\5\12"+ + "\1\221\1\12\1\172\1\12\1\172\1\12\1\222\1\223"+ + "\1\172\10\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\224"+ "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\3\12\1\u0124"+ - "\22\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u0125"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\14\12\1\225"+ + "\11\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\226"+ "\13\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\7\12\1\u0126"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\25\12\1\227"+ + "\54\0\1\230\113\0\1\231\40\0\1\232\52\0\1\233"+ + "\113\0\1\234\42\0\1\235\50\0\1\236\113\0\1\237"+ + "\113\0\1\240\113\0\1\241\113\0\1\242\47\0\1\243"+ + "\43\0\1\244\47\0\1\245\1\246\15\0\1\247\11\0"+ + "\2\247\1\101\1\0\1\102\25\0\1\247\1\0\1\247"+ + "\1\0\1\247\3\0\1\247\26\0\14\100\1\0\22\100"+ + "\1\0\54\100\14\250\1\0\10\250\1\251\1\252\10\250"+ + "\1\253\54\250\14\254\1\0\11\254\1\255\1\256\7\254"+ + "\1\253\54\254\1\0\10\12\1\257\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\257\1\105\1\0\1\106"+ + "\1\22\2\0\1\12\14\0\5\12\1\257\1\12\1\257"+ + "\1\12\1\257\3\12\1\257\1\22\7\12\16\0\14\260"+ + "\1\0\10\260\1\261\1\262\10\260\1\0\54\260\14\263"+ + "\1\0\11\263\1\264\1\265\7\263\1\0\54\263\13\0"+ + "\1\266\20\0\1\267\2\0\1\270\55\0\10\12\1\257"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\257"+ + "\1\105\1\0\1\106\1\22\2\0\1\12\14\0\1\205"+ + "\3\12\1\206\1\257\1\12\1\257\1\12\1\257\3\12"+ + "\1\257\1\22\7\12\17\0\10\12\1\257\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\257\1\105\1\0"+ + "\1\106\1\22\2\0\1\12\14\0\5\12\1\271\1\12"+ + "\1\257\1\12\1\257\3\12\1\257\1\22\7\12\17\0"+ + "\10\12\1\257\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\257\1\105\1\0\1\106\1\22\2\0\1\12"+ + "\14\0\5\12\1\257\1\12\1\257\1\12\1\257\1\211"+ + "\1\212\1\12\1\257\1\22\7\12\16\0\14\113\1\0"+ + "\10\113\1\0\1\272\1\0\1\113\1\273\5\113\1\0"+ + "\54\113\25\0\1\274\66\0\31\113\2\275\1\276\60\113"+ + "\27\0\1\277\115\0\1\113\63\0\10\12\1\300\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\300\1\122"+ + "\1\0\1\301\1\22\2\0\1\12\14\0\5\12\1\300"+ + "\1\12\1\300\1\12\1\300\3\12\1\300\1\22\7\12"+ + "\16\0\14\302\1\0\10\302\1\303\1\304\10\302\1\0"+ + "\54\302\14\305\1\0\11\305\1\306\1\307\7\305\1\0"+ + "\54\305\14\310\1\0\10\310\1\0\1\310\1\0\2\310"+ + "\1\0\1\310\1\0\1\310\1\175\1\0\4\310\2\0"+ + "\46\310\1\0\10\12\1\300\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\300\1\122\1\0\1\301\1\22"+ + "\2\0\1\12\14\0\1\205\3\12\1\206\1\300\1\12"+ + "\1\300\1\12\1\300\3\12\1\300\1\22\7\12\17\0"+ + "\10\12\1\300\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\300\1\122\1\0\1\301\1\22\2\0\1\12"+ + "\14\0\5\12\1\311\1\12\1\300\1\12\1\300\3\12"+ + "\1\300\1\22\7\12\17\0\10\12\1\300\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\300\1\122\1\0"+ + "\1\301\1\22\2\0\1\12\14\0\5\12\1\300\1\12"+ + "\1\300\1\12\1\300\1\211\1\212\1\12\1\300\1\22"+ + "\7\12\16\0\14\140\1\0\10\140\1\0\1\312\1\0"+ + "\1\140\2\0\4\140\1\0\105\140\2\275\1\313\60\140"+ + "\1\0\1\144\1\145\1\144\1\0\1\144\1\0\1\147"+ + "\2\0\1\152\4\0\1\153\1\154\1\0\1\155\31\0"+ + "\1\154\5\0\1\152\32\0\3\145\1\0\1\145\1\0"+ + "\1\314\7\0\1\153\1\154\1\0\1\155\31\0\1\154"+ + "\40\0\5\315\1\0\1\316\1\0\1\315\6\0\1\315"+ + "\2\0\1\315\4\0\1\315\17\0\1\315\1\0\1\315"+ + "\1\0\1\315\2\0\1\315\1\0\1\315\4\0\1\315"+ + "\26\0\1\144\1\145\1\144\1\0\1\144\107\0\1\317"+ + "\1\0\1\317\1\0\1\317\1\0\1\320\105\0\1\321"+ + "\3\0\1\321\1\0\1\322\105\0\3\160\1\0\1\160"+ + "\12\0\1\154\1\0\1\155\31\0\1\154\40\0\3\323"+ + "\1\0\1\323\13\0\1\324\54\0\1\324\16\0\3\11"+ + "\1\0\1\11\107\0\10\12\1\325\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\325\1\17\1\0\1\21"+ + "\1\22\2\0\1\12\14\0\5\12\1\325\1\12\1\325"+ + "\1\12\1\325\3\12\1\325\1\22\7\12\17\0\3\160"+ + "\1\0\1\160\1\0\1\326\10\0\1\154\1\0\1\155"+ + "\31\0\1\154\37\0\14\163\1\0\10\163\1\327\1\165"+ + "\10\163\1\166\54\163\25\0\1\330\1\331\5\0\1\332"+ + "\2\0\1\166\5\0\1\332\1\0\1\166\44\0\114\163"+ + "\14\167\1\0\11\167\1\170\1\327\7\167\1\166\170\167"+ + "\26\0\1\331\1\333\4\0\1\332\2\0\1\166\5\0"+ + "\1\332\1\0\1\166\45\0\10\12\1\334\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\334\1\173\1\0"+ + "\1\174\1\12\2\0\1\12\14\0\5\12\1\334\1\12"+ + "\1\334\1\12\1\334\3\12\1\334\10\12\43\0\1\335"+ + "\115\0\1\336\65\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\2\12"+ + "\1\337\23\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\3\12"+ + "\1\340\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ + "\1\341\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\12\12"+ + "\1\342\3\12\1\343\7\12\17\0\12\12\2\0\2\12"+ + "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ + "\14\0\3\12\1\344\10\12\1\345\11\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\11\12\1\346\14\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\14\12\1\347\11\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\6\12\1\350\17\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\21\12\1\351\4\12\17\0\10\12"+ + "\1\325\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\325\1\17\1\0\1\21\1\22\2\0\1\12\14\0"+ + "\4\12\1\352\1\325\1\12\1\325\1\12\1\325\3\12"+ + "\1\325\1\22\7\12\17\0\12\12\2\0\2\12\1\0"+ + "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ + "\1\353\25\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ + "\1\354\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\22\12"+ + "\1\355\3\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\20\12"+ + "\1\356\5\12\17\0\10\12\1\334\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\334\1\173\1\0\1\174"+ + "\1\12\2\0\1\12\14\0\5\12\1\334\1\12\1\334"+ + "\1\12\1\334\1\12\1\357\1\12\1\334\10\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\5\12\1\360\20\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\1\12\1\361\24\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\3\12\1\362\22\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\4\12\1\363\21\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\13\12\1\364\12\12\17\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ + "\1\12\2\0\1\12\14\0\14\12\1\365\11\12\54\0"+ + "\1\366\113\0\1\367\113\0\1\370\113\0\1\371\66\0"+ + "\1\372\11\0\2\372\1\101\1\0\1\102\25\0\1\372"+ + "\1\0\1\372\1\0\1\372\3\0\1\372\26\0\14\250"+ + "\1\0\10\250\1\373\1\252\10\250\1\253\54\250\25\0"+ + "\1\374\1\375\5\0\1\376\2\0\1\253\5\0\1\376"+ + "\1\0\1\253\44\0\114\250\14\254\1\0\11\254\1\255"+ + "\1\373\7\254\1\253\170\254\26\0\1\375\1\377\4\0"+ + "\1\376\2\0\1\253\5\0\1\376\1\0\1\253\45\0"+ + "\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\u0100\1\105\1\0\1\106\1\22\2\0\1\12"+ + "\14\0\5\12\1\u0100\1\12\1\u0100\1\12\1\u0100\3\12"+ + "\1\u0100\1\22\7\12\16\0\14\260\1\0\10\260\1\u0101"+ + "\1\262\10\260\1\0\54\260\25\0\1\u0102\66\0\114\260"+ + "\14\263\1\0\11\263\1\264\1\u0101\7\263\1\0\170\263"+ + "\27\0\1\u0103\64\0\14\266\1\0\22\266\1\270\54\266"+ + "\1\0\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\u0100\1\105\1\0\1\106\1\22\2\0"+ + "\1\12\14\0\4\12\1\352\1\u0100\1\12\1\u0100\1\12"+ + "\1\u0100\3\12\1\u0100\1\22\7\12\16\0\31\113\2\0"+ + "\1\276\60\113\25\0\1\u0104\66\0\14\113\1\0\10\113"+ + "\1\0\1\272\1\0\1\113\1\276\5\113\1\0\54\113"+ + "\27\0\1\u0104\65\0\10\12\1\u0105\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\u0105\1\122\1\0\1\301"+ + "\1\22\2\0\1\12\14\0\5\12\1\u0105\1\12\1\u0105"+ + "\1\12\1\u0105\3\12\1\u0105\1\22\7\12\16\0\14\305"+ + "\1\0\11\305\1\306\1\u0106\7\305\1\0\54\305\14\302"+ + "\1\0\10\302\1\u0107\1\304\10\302\1\0\170\302\14\305"+ + "\1\0\11\305\1\306\1\u0107\7\305\1\0\170\305\27\0"+ + "\1\u0108\64\0\14\310\1\0\10\310\1\0\1\310\1\0"+ + "\2\310\1\0\1\310\1\0\1\310\2\0\4\310\2\0"+ + "\46\310\1\0\10\12\1\u0105\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\u0105\1\122\1\0\1\301\1\22"+ + "\2\0\1\12\14\0\4\12\1\352\1\u0105\1\12\1\u0105"+ + "\1\12\1\u0105\3\12\1\u0105\1\22\7\12\16\0\31\140"+ + "\2\0\1\313\74\140\1\0\10\140\1\0\1\312\1\0"+ + "\1\140\1\u0109\1\0\4\140\1\0\54\140\1\0\3\145"+ + "\1\0\1\145\107\0\5\315\1\0\1\316\1\0\1\315"+ + "\1\152\5\0\1\315\2\0\1\315\4\0\1\315\17\0"+ + "\1\315\1\0\1\315\1\0\1\315\2\0\1\315\1\0"+ + "\1\315\1\152\3\0\1\315\26\0\5\315\3\0\1\315"+ + "\6\0\1\315\2\0\1\315\4\0\1\315\17\0\1\315"+ + "\1\0\1\315\1\0\1\315\2\0\1\315\1\0\1\315"+ + "\4\0\1\315\26\0\1\317\1\0\1\317\1\0\1\317"+ + "\1\0\1\320\2\0\1\152\47\0\1\152\32\0\1\317"+ + "\1\0\1\317\1\0\1\317\107\0\1\321\3\0\1\321"+ + "\1\0\1\322\2\0\1\152\47\0\1\152\32\0\1\321"+ + "\3\0\1\321\107\0\3\323\1\0\1\323\1\0\1\324"+ + "\12\0\1\155\72\0\3\323\1\0\1\323\107\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\1\17\1\0"+ + "\1\21\1\22\2\0\1\12\14\0\16\12\1\22\7\12"+ + "\44\0\1\331\5\0\1\332\2\0\1\166\5\0\1\332"+ + "\1\0\1\166\44\0\25\330\1\u010a\1\u010b\65\330\26\333"+ + "\1\u010c\1\u010d\64\333\1\0\10\12\1\u010e\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\u010e\1\173\1\0"+ + "\1\174\1\12\2\0\1\12\14\0\5\12\1\u010e\1\12"+ + "\1\u010e\1\12\1\u010e\3\12\1\u010e\10\12\43\0\1\u010f"+ + "\115\0\1\u010f\65\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ + "\1\u0110\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ + "\1\u0111\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\16\12"+ + "\1\u0112\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ + "\1\u0113\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\3\12"+ + "\1\u0114\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\15\12"+ + "\1\u0115\10\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0116"+ + "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\3\12\1\u0117"+ + "\22\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0118"+ + "\17\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\7\12\1\u0119"+ "\16\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u0127"+ - "\13\12\43\0\1\101\1\0\1\102\112\0\1\u0102\5\0"+ - "\1\u0103\2\0\1\255\5\0\1\u0103\1\0\1\255\44\0"+ - "\25\u0101\1\u0128\1\u0129\65\u0101\26\u0104\1\u012a\1\u012b\64\u0104"+ - "\1\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\1\105\1\0\1\106\1\22\2\0\1\12\14\0\16\12"+ - "\1\22\7\12\16\0\25\u0107\1\u012c\1\u012d\65\u0107\26\u0108"+ - "\1\u012e\1\u012f\64\u0108\14\114\1\0\10\114\1\100\1\276"+ - "\1\100\1\114\1\u0109\5\114\1\0\54\114\1\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\1\123\1\0"+ - "\1\305\1\22\2\0\1\12\14\0\16\12\1\22\7\12"+ - "\16\0\26\u010e\1\u0130\1\u0131\64\u010e\14\142\1\0\10\142"+ - "\1\100\1\317\1\100\1\142\1\u0132\1\100\4\142\1\0"+ - "\54\142\1\141\12\u0110\1\141\1\0\2\u0110\1\141\1\u0110"+ - "\1\141\3\u0110\1\0\1\316\1\0\1\u0110\1\0\1\141"+ - "\2\u0110\2\141\1\0\10\141\26\u0110\16\141\25\335\1\u0133"+ - "\1\u0134\201\335\142\340\1\u0135\1\u0136\64\340\1\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\1\175\1\0"+ - "\1\176\1\12\2\0\1\12\14\0\26\12\17\0\12\12"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\13\12\1\u011a"+ + "\12\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\22\12\1\u011b"+ + "\3\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\1\u011c\25\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\3\12\1\u011d\22\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\12\12\1\u011e\13\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\7\12\1\u011f\16\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\12\12\1\u0120\13\12"+ + "\43\0\1\101\1\0\1\102\112\0\1\375\5\0\1\376"+ + "\2\0\1\253\5\0\1\376\1\0\1\253\44\0\25\374"+ + "\1\u0121\1\u0122\65\374\26\377\1\u0123\1\u0124\64\377\1\0"+ + "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\1\105"+ + "\1\0\1\106\1\22\2\0\1\12\14\0\16\12\1\22"+ + "\7\12\16\0\25\u0102\1\u0125\1\u0126\65\u0102\26\u0103\1\u0127"+ + "\1\u0128\64\u0103\1\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\1\122\1\0\1\301\1\22\2\0\1\12"+ + "\14\0\16\12\1\22\7\12\16\0\26\u0108\1\u0129\1\u012a"+ + "\64\u0108\1\140\12\u0109\1\140\1\0\2\u0109\1\140\1\u0109"+ + "\1\140\3\u0109\1\0\1\312\1\0\1\u0109\1\0\1\140"+ + "\2\u0109\2\140\1\0\10\140\26\u0109\16\140\25\330\1\u012b"+ + "\1\u012c\201\330\142\333\1\u012d\1\u012e\64\333\1\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\1\173\1\0"+ + "\1\174\1\12\2\0\1\12\14\0\26\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\5\12\1\u012f\20\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\20\12\1\u0130\5\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\4\12\1\u0131\21\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\5\12\1\u0132\20\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\10\12\1\u0133\15\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\3\12\1\u0134\22\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\14\12\1\u0135\11\12\17\0\12\12"+ + "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ + "\2\0\1\12\14\0\2\12\1\u0136\23\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ "\2\0\1\12\14\0\5\12\1\u0137\20\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\20\12\1\u0138\5\12\17\0\12\12"+ + "\2\0\1\12\14\0\12\12\1\u0138\13\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\4\12\1\u0139\21\12\17\0\12\12"+ + "\2\0\1\12\14\0\2\12\1\u0139\23\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\5\12\1\u013a\20\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\10\12\1\u013b\15\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\3\12\1\u013c\22\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\14\12\1\u013d\11\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\2\12\1\u013e\23\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\5\12\1\u013f\20\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\12\12\1\u0140\13\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\2\12\1\u0141\23\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\1\u0142\25\12\17\0\12\12\2\0"+ + "\2\0\1\12\14\0\1\u013a\25\12\17\0\12\12\2\0"+ "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\4\12\1\u0143\21\12\16\0\25\u0101\1\u0144"+ - "\1\u0145\201\u0101\142\u0104\1\u0146\1\u0147\64\u0104\25\u0107\1\u0148"+ - "\1\u012d\201\u0107\142\u0108\1\u012e\1\u0149\64\u0108\142\u010e\1\u0130"+ - "\1\u014a\64\u010e\1\142\12\u0132\1\142\1\0\2\u0132\1\142"+ - "\1\u0132\1\142\3\u0132\1\100\1\317\1\100\1\u0132\1\100"+ - "\1\142\2\u0132\2\142\1\0\10\142\26\u0132\16\142\25\335"+ - "\1\u014b\1\u0134\65\335\26\340\1\u0135\1\u014b\64\340\1\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\6\12\1\u014c\17\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\6\12\1\u014d\17\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\1\12\1\u014e\24\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\1\12\1\u014f\24\12\17\0"+ - "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\1\u0150\25\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\6\12\1\u0151\17\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\12\12\1\u0152\13\12\17\0\12\12"+ - "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\12\12\1\u0153\13\12\16\0\25\u0101"+ - "\1\u0154\1\u0145\65\u0101\26\u0104\1\u0146\1\u0154\64\u0104\25\u0107"+ - "\1\u0155\1\u012d\65\u0107\26\u0108\1\u012e\1\u0155\64\u0108\26\u010e"+ - "\1\u0130\1\u0156\64\u010e\26\0\1\u0157\5\0\1\u0158\2\0"+ - "\1\u0159\5\0\1\u0158\1\0\1\u0159\45\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\15\12\1\u015a\10\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\21\12\1\u015b\4\12\17\0\12\12\2\0"+ - "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\4\12\1\u015c\21\12\16\0"; + "\1\12\14\0\4\12\1\u013b\21\12\16\0\25\374\1\u013c"+ + "\1\u013d\201\374\142\377\1\u013e\1\u013f\64\377\25\u0102\1\u0140"+ + "\1\u0126\201\u0102\142\u0103\1\u0127\1\u0141\64\u0103\142\u0108\1\u0129"+ + "\1\u0142\64\u0108\25\330\1\u0143\1\u012c\65\330\26\333\1\u012d"+ + "\1\u0143\64\333\1\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ + "\1\u0144\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ + "\1\u0145\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ + "\1\u0146\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ + "\1\u0147\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0148"+ + "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0149"+ + "\17\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u014a"+ + "\13\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u014b"+ + "\13\12\16\0\25\374\1\u014c\1\u013d\65\374\26\377\1\u013e"+ + "\1\u014c\64\377\25\u0102\1\u014d\1\u0126\65\u0102\26\u0103\1\u0127"+ + "\1\u014d\64\u0103\26\u0108\1\u0129\1\u014e\64\u0108\26\0\1\u014f"+ + "\5\0\1\u0150\2\0\1\u0151\5\0\1\u0150\1\0\1\u0151"+ + "\45\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\15\12\1\u0152\10\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\21\12\1\u0153\4\12"+ + "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ + "\3\0\1\12\2\0\1\12\14\0\4\12\1\u0154\21\12"+ + "\16\0"; private static int [] zzUnpackTrans() { - int [] result = new int[18544]; + int [] result = new int[17936]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -733,21 +721,21 @@ class _PythonLexer implements FlexLexerEx { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\6\0\1\11\10\1\1\11\2\1\3\11\2\1\11\11"+ - "\32\1\4\11\4\1\1\11\15\1\1\11\3\1\2\11"+ - "\1\1\6\11\6\1\2\11\1\1\5\0\1\11\1\1"+ + "\32\1\4\11\4\1\1\11\14\1\1\11\3\1\2\11"+ + "\1\1\6\11\5\1\2\11\1\1\5\0\1\11\1\1"+ "\1\0\1\11\1\0\2\1\2\11\3\1\1\11\6\1"+ "\2\11\31\1\2\11\1\1\2\11\1\1\5\11\1\1"+ "\2\11\1\1\1\0\3\1\1\11\12\1\2\0\1\11"+ - "\1\1\2\0\3\1\1\11\14\1\1\0\2\1\1\0"+ + "\1\1\2\0\1\1\1\11\14\1\1\0\1\1\1\0"+ "\1\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ "\1\1\1\0\2\1\1\11\1\0\2\1\2\0\27\1"+ - "\4\11\1\0\2\1\1\11\1\0\2\1\1\11\3\1"+ - "\1\11\2\1\1\11\3\1\1\0\2\1\1\0\1\1"+ - "\1\11\21\1\1\0\2\1\7\0\1\1\4\0\15\1"+ - "\7\0\12\1\3\11\1\0\1\11\3\1"; + "\4\11\1\0\2\1\1\11\1\0\2\1\1\11\2\1"+ + "\1\11\2\1\1\11\2\1\1\0\2\1\1\0\1\1"+ + "\1\11\21\1\1\0\2\1\13\0\15\1\7\0\12\1"+ + "\3\11\1\0\1\11\3\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[348]; + int [] result = new int[340]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index f977a4768579..a8f3000e4532 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -83,9 +83,9 @@ FSTRING_FRAGMENT_TYPE_CONVERSION = "!" [^=:'\"} \t\r\n]* %state PENDING_DOCSTRING %state IN_DOCSTRING_OWNER -%state FSTRING +%xstate FSTRING %state FSTRING_FRAGMENT -%state FSTRING_FRAGMENT_FORMAT +%xstate FSTRING_FRAGMENT_FORMAT %{ private final PyLexerFStringHelper fStringHelper = new PyLexerFStringHelper(this); @@ -107,6 +107,7 @@ return yylength()-s.length(); {BACKSLASH_ESCAPED_BRACES} { yypushback(1); return PyTokenTypes.FSTRING_TEXT; } {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } "{" { return fStringHelper.handleFragmentStart(); } + [^] { return PyTokenTypes.BAD_CHARACTER; } } { @@ -141,6 +142,7 @@ return yylength()-s.length(); // format part of a fragment can contain opening quotes {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } + [^] { return PyTokenTypes.BAD_CHARACTER; } } [\ ] { return PyTokenTypes.SPACE; } diff --git a/python/testData/highlighting/fStringHashSigns.py b/python/testData/highlighting/fStringHashSigns.py index 77f1ac454b7f..9e0390f280bd 100644 --- a/python/testData/highlighting/fStringHashSigns.py +++ b/python/testData/highlighting/fStringHashSigns.py @@ -1,7 +1,7 @@ f'{#' f'{# f'{#foo#}' -f'{42:#}' +f'{42:#}' f'{42:{#}}' f'{x ### foo}' f'{"###"}' diff --git a/python/testData/psi/FStringContainsHashInLiteralPart.py b/python/testData/psi/FStringContainsHashInLiteralPart.py new file mode 100644 index 000000000000..0fb24d8d1204 --- /dev/null +++ b/python/testData/psi/FStringContainsHashInLiteralPart.py @@ -0,0 +1 @@ +s = f'#foo' \ No newline at end of file diff --git a/python/testData/psi/FStringContainsHashInLiteralPart.txt b/python/testData/psi/FStringContainsHashInLiteralPart.txt new file mode 100644 index 000000000000..b81f2712c581 --- /dev/null +++ b/python/testData/psi/FStringContainsHashInLiteralPart.txt @@ -0,0 +1,12 @@ +PyFile:FStringContainsHashInLiteralPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: #foo + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiElement(Py:FSTRING_TEXT)('#foo') + PsiElement(Py:FSTRING_END)(''') \ No newline at end of file diff --git a/python/testData/psi/FStringContainsHashSignInFormatPart.py b/python/testData/psi/FStringContainsHashSignInFormatPart.py new file mode 100644 index 000000000000..7036c95643b9 --- /dev/null +++ b/python/testData/psi/FStringContainsHashSignInFormatPart.py @@ -0,0 +1 @@ +s = f'{42:#b}' \ No newline at end of file diff --git a/python/testData/psi/FStringContainsHashSignInFormatPart.txt b/python/testData/psi/FStringContainsHashSignInFormatPart.txt new file mode 100644 index 000000000000..0730cce92153 --- /dev/null +++ b/python/testData/psi/FStringContainsHashSignInFormatPart.txt @@ -0,0 +1,19 @@ +PyFile:FStringContainsHashSignInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {42:#b} + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PsiElement(Py:FSTRING_TEXT)('#b') + PsiElement(Py:FSTRING_FRAGMENT_END)('}') + PsiElement(Py:FSTRING_END)(''') \ No newline at end of file diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.py b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.py new file mode 100644 index 000000000000..d846daf499ae --- /dev/null +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.py @@ -0,0 +1 @@ +s = f'{42:\ \ No newline at end of file diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt new file mode 100644 index 000000000000..787500671d2f --- /dev/null +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt @@ -0,0 +1,21 @@ +PyFile:UnterminatedFStringWithTrailingBackslashInFormatPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: {42: + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PyFStringFragment + PsiElement(Py:FSTRING_FRAGMENT_START)('{') + PyNumericLiteralExpression + PsiElement(Py:INTEGER_LITERAL)('42') + PyFStringFragmentFormatPart + PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PsiErrorElement:} expected + + PsiElement(BAD_CHARACTER)('\') + PsiErrorElement:Statement expected, found BAD_CHARACTER + \ No newline at end of file diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.py b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.py new file mode 100644 index 000000000000..6d9eb786df57 --- /dev/null +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.py @@ -0,0 +1 @@ +s = f'\ \ No newline at end of file diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt new file mode 100644 index 000000000000..d437bd86c2aa --- /dev/null +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt @@ -0,0 +1,15 @@ +PyFile:UnterminatedFStringWithTrailingBackslashInLiteralPart.py + PyAssignmentStatement + PyTargetExpression: s + PsiElement(Py:IDENTIFIER)('s') + PsiWhiteSpace(' ') + PsiElement(Py:EQ)('=') + PsiWhiteSpace(' ') + PyStringLiteralExpression: + PyFormattedStringNode + PsiElement(Py:FSTRING_START)('f'') + PsiErrorElement:unexpected f-string token + + PsiElement(BAD_CHARACTER)('\') + PsiErrorElement:Statement expected, found BAD_CHARACTER + \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PythonParsingTest.java b/python/testSrc/com/jetbrains/python/PythonParsingTest.java index 8e59f022c22e..34cf8a7d72e8 100644 --- a/python/testSrc/com/jetbrains/python/PythonParsingTest.java +++ b/python/testSrc/com/jetbrains/python/PythonParsingTest.java @@ -773,6 +773,22 @@ public class PythonParsingTest extends ParsingTestCase { doTest(LanguageLevel.PYTHON36); } + public void testFStringContainsHashSignInFormatPart() { + doTest(LanguageLevel.PYTHON36); + } + + public void testFStringContainsHashInLiteralPart() { + doTest(LanguageLevel.PYTHON36); + } + + public void testUnterminatedFStringWithTrailingBackslashInLiteralPart() { + doTest(LanguageLevel.PYTHON36); + } + + public void testUnterminatedFStringWithTrailingBackslashInFormatPart() { + doTest(LanguageLevel.PYTHON36); + } + public void testMultilineFStringContainsCommentInsideExpression() { doTest(LanguageLevel.PYTHON36); }