MEMSIZE to MSIZE reformat

This commit is contained in:
romanman 2014-06-03 09:15:45 +03:00
parent 926aa6f17f
commit ced9ec0543
8 changed files with 307 additions and 307 deletions

View File

@ -30,7 +30,7 @@ public class ProgramPlayDialog extends JPanel implements ActionListener, ChangeL
outputList = new ArrayList<String>();
VM vm = new VM();
Program program = new Program(Hex.decode("630000000060445960CC60DD611234600054615566602054"));
Program program = new Program(Hex.decode("630000000060445960CC60DD611234600054615566602054630000000060445960CC60DD611234600054615566602054630000000060445960CC60DD611234600054615566602054"));
program.addListener(this);
program.fullTrace();
@ -66,6 +66,7 @@ public class ProgramPlayDialog extends JPanel implements ActionListener, ChangeL
console.setFont(new Font("Courier New", Font.PLAIN, 13));
console.setForeground(new Color(143, 170, 220));
console.setBackground(Color.BLACK);
console.setLineWrap(true);
add(console);

View File

@ -197,7 +197,7 @@ get_var: VAR;
INT: [0-9]+;
ASM_SYMBOLS: 'STOP' | 'ADD' | 'MUL' | 'SUB' | 'DIV' | 'SDIV' | 'MOD' |'SMOD' | 'EXP' | 'NEG' | 'LT' | 'GT' | 'SLT' | 'SGT'| 'EQ' | 'NOT' | 'AND' | 'OR' | 'XOR' | 'BYTE' | 'SHA3' | 'ADDRESS' | 'BALANCE' | 'ORIGIN' | 'CALLER' | 'CALLVALUE' | 'CALLDATALOAD' | 'CALLDATASIZE' | 'CALLDATACOPY' | 'CODESIZE' | 'CODECOPY' | 'GASPRICE' | 'PREVHASH' | 'COINBASE' | 'TIMESTAMP' | 'NUMBER' | 'DIFFICULTY' | 'GASLIMIT' | 'POP' | 'DUP' | 'SWAP' | 'MLOAD' | 'MSTORE' | 'MSTORE8' | 'SLOAD' | 'SSTORE' | 'JUMP' | 'JUMPI' | 'PC' | 'MEMSIZE' | 'GAS' | 'PUSH1' | 'PUSH2' | 'PUSH3' | 'PUSH4' | 'PUSH5' | 'PUSH6' | 'PUSH7' | 'PUSH8' | 'PUSH9' | 'PUSH10' | 'PUSH11' | 'PUSH12' | 'PUSH13' | 'PUSH14' | 'PUSH15' | 'PUSH16' | 'PUSH17' | 'PUSH18' | 'PUSH19' | 'PUSH20' | 'PUSH21' | 'PUSH22' | 'PUSH23' | 'PUSH24' | 'PUSH25' | 'PUSH26' | 'PUSH27' | 'PUSH28' | 'PUSH29' | 'PUSH30' | 'PUSH31' | 'PUSH32' | 'CREATE' | 'CALL' | 'RETURN' | 'SUICIDE';
ASM_SYMBOLS: 'STOP' | 'ADD' | 'MUL' | 'SUB' | 'DIV' | 'SDIV' | 'MOD' |'SMOD' | 'EXP' | 'NEG' | 'LT' | 'GT' | 'SLT' | 'SGT'| 'EQ' | 'NOT' | 'AND' | 'OR' | 'XOR' | 'BYTE' | 'SHA3' | 'ADDRESS' | 'BALANCE' | 'ORIGIN' | 'CALLER' | 'CALLVALUE' | 'CALLDATALOAD' | 'CALLDATASIZE' | 'CALLDATACOPY' | 'CODESIZE' | 'CODECOPY' | 'GASPRICE' | 'PREVHASH' | 'COINBASE' | 'TIMESTAMP' | 'NUMBER' | 'DIFFICULTY' | 'GASLIMIT' | 'POP' | 'DUP' | 'SWAP' | 'MLOAD' | 'MSTORE' | 'MSTORE8' | 'SLOAD' | 'SSTORE' | 'JUMP' | 'JUMPI' | 'PC' | 'MSIZE' | 'GAS' | 'PUSH1' | 'PUSH2' | 'PUSH3' | 'PUSH4' | 'PUSH5' | 'PUSH6' | 'PUSH7' | 'PUSH8' | 'PUSH9' | 'PUSH10' | 'PUSH11' | 'PUSH12' | 'PUSH13' | 'PUSH14' | 'PUSH15' | 'PUSH16' | 'PUSH17' | 'PUSH18' | 'PUSH19' | 'PUSH20' | 'PUSH21' | 'PUSH22' | 'PUSH23' | 'PUSH24' | 'PUSH25' | 'PUSH26' | 'PUSH27' | 'PUSH28' | 'PUSH29' | 'PUSH30' | 'PUSH31' | 'PUSH32' | 'CREATE' | 'CALL' | 'RETURN' | 'SUICIDE';
/* 'xor', 'and', 'or', 'not' operands should be defined

View File

@ -108,7 +108,7 @@ public class SerpentLexer extends Lexer {
}
public static final String _serializedATN =
"\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\67\u03c0\b\1\4\2"+
"\3\uacf5\uee8c\u4f5d\u8b0d\u4a45\u78bd\u1b2f\u3378\2\67\u03be\b\1\4\2"+
"\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
"\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
"\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
@ -154,297 +154,296 @@ public class SerpentLexer extends Lexer {
"\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%"+
"\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%"+
"\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%"+
"\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u0363\n%\3&\3&\3&\3&\3\'"+
"\3\'\3\'\3\'\3\'\5\'\u036e\n\'\3(\3(\3(\3(\5(\u0374\n(\3)\3)\3)\3)\5)"+
"\u037a\n)\3*\3*\3+\5+\u037f\n+\3+\3+\7+\u0383\n+\f+\16+\u0386\13+\3,\6"+
",\u0389\n,\r,\16,\u038a\3,\3,\3-\3-\7-\u0391\n-\f-\16-\u0394\13-\3-\3"+
"-\3.\3.\7.\u039a\n.\f.\16.\u039d\13.\3/\3/\3\60\3\60\3\61\3\61\3\61\3"+
"\61\3\61\5\61\u03a8\n\61\3\62\3\62\3\62\3\62\5\62\u03ae\n\62\3\63\3\63"+
"\3\64\3\64\3\65\3\65\3\66\3\66\3\66\3\66\5\66\u03ba\n\66\3\66\6\66\u03bd"+
"\n\66\r\66\16\66\u03be\2\67\3\3\1\5\4\1\7\5\1\t\6\1\13\7\1\r\b\1\17\t"+
"\1\21\n\1\23\13\1\25\f\1\27\r\1\31\16\1\33\17\1\35\20\1\37\21\1!\22\1"+
"#\23\1%\24\1\'\25\1)\26\1+\27\1-\30\1/\31\1\61\32\1\63\33\1\65\34\1\67"+
"\35\19\36\1;\37\1= \1?!\1A\"\1C#\1E$\1G%\1I&\1K\'\1M(\1O)\1Q*\1S+\1U,"+
"\1W-\2Y.\3[/\1]\60\1_\61\1a\62\1c\63\1e\64\1g\65\1i\66\1k\67\1\3\2\13"+
"\3\2\62;\4\2\13\13\"\"\4\2\f\f\17\17\4\2C\\c|\5\2\62;C\\c|\4\2--//\6\2"+
"\'\',,\61\61``\4\2>>@@\5\2\62;CHch\u0423\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3"+
"\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2"+
"\2\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35"+
"\3\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)"+
"\3\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2"+
"\65\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2"+
"A\3\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3"+
"\2\2\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2"+
"\2\2[\3\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2"+
"g\3\2\2\2\2i\3\2\2\2\2k\3\2\2\2\3m\3\2\2\2\5o\3\2\2\2\7t\3\2\2\2\t\u0083"+
"\3\2\2\2\13\u0085\3\2\2\2\r\u0089\3\2\2\2\17\u0090\3\2\2\2\21\u0096\3"+
"\2\2\2\23\u0098\3\2\2\2\25\u009a\3\2\2\2\27\u009c\3\2\2\2\31\u009f\3\2"+
"\2\2\33\u00a4\3\2\2\2\35\u00b4\3\2\2\2\37\u00b9\3\2\2\2!\u00c3\3\2\2\2"+
"#\u00c8\3\2\2\2%\u00d7\3\2\2\2\'\u00e8\3\2\2\2)\u00f0\3\2\2\2+\u0101\3"+
"\2\2\2-\u010e\3\2\2\2/\u0110\3\2\2\2\61\u011c\3\2\2\2\63\u0122\3\2\2\2"+
"\65\u012c\3\2\2\2\67\u0135\3\2\2\29\u013a\3\2\2\2;\u0141\3\2\2\2=\u014c"+
"\3\2\2\2?\u015d\3\2\2\2A\u0162\3\2\2\2C\u0171\3\2\2\2E\u017e\3\2\2\2G"+
"\u0184\3\2\2\2I\u0362\3\2\2\2K\u0364\3\2\2\2M\u036d\3\2\2\2O\u0373\3\2"+
"\2\2Q\u0379\3\2\2\2S\u037b\3\2\2\2U\u037e\3\2\2\2W\u0388\3\2\2\2Y\u038e"+
"\3\2\2\2[\u0397\3\2\2\2]\u039e\3\2\2\2_\u03a0\3\2\2\2a\u03a7\3\2\2\2c"+
"\u03ad\3\2\2\2e\u03af\3\2\2\2g\u03b1\3\2\2\2i\u03b3\3\2\2\2k\u03b9\3\2"+
"\2\2mn\7_\2\2n\4\3\2\2\2op\7u\2\2pq\7v\2\2qr\7q\2\2rs\7r\2\2s\6\3\2\2"+
"\2tu\7d\2\2uv\7n\2\2vw\7q\2\2wx\7e\2\2xy\7m\2\2yz\7\60\2\2z{\7e\2\2{|"+
"\7q\2\2|}\7k\2\2}~\7p\2\2~\177\7d\2\2\177\u0080\7c\2\2\u0080\u0081\7u"+
"\2\2\u0081\u0082\7g\2\2\u0082\b\3\2\2\2\u0083\u0084\7.\2\2\u0084\n\3\2"+
"\2\2\u0085\u0086\7o\2\2\u0086\u0087\7u\2\2\u0087\u0088\7i\2\2\u0088\f"+
"\3\2\2\2\u0089\u008a\7v\2\2\u008a\u008b\7z\2\2\u008b\u008c\7\60\2\2\u008c"+
"\u008d\7i\2\2\u008d\u008e\7c\2\2\u008e\u008f\7u\2\2\u008f\16\3\2\2\2\u0090"+
"\u0091\7y\2\2\u0091\u0092\7j\2\2\u0092\u0093\7k\2\2\u0093\u0094\7n\2\2"+
"\u0094\u0095\7g\2\2\u0095\20\3\2\2\2\u0096\u0097\7]\2\2\u0097\22\3\2\2"+
"\2\u0098\u0099\7*\2\2\u0099\24\3\2\2\2\u009a\u009b\7<\2\2\u009b\26\3\2"+
"\2\2\u009c\u009d\7k\2\2\u009d\u009e\7h\2\2\u009e\30\3\2\2\2\u009f\u00a0"+
"\7u\2\2\u00a0\u00a1\7g\2\2\u00a1\u00a2\7p\2\2\u00a2\u00a3\7f\2\2\u00a3"+
"\32\3\2\2\2\u00a4\u00a5\7d\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7\7q\2\2\u00a7"+
"\u00a8\7e\2\2\u00a8\u00a9\7m\2\2\u00a9\u00aa\7\60\2\2\u00aa\u00ab\7v\2"+
"\2\u00ab\u00ac\7k\2\2\u00ac\u00ad\7o\2\2\u00ad\u00ae\7g\2\2\u00ae\u00af"+
"\7u\2\2\u00af\u00b0\7v\2\2\u00b0\u00b1\7c\2\2\u00b1\u00b2\7o\2\2\u00b2"+
"\u00b3\7r\2\2\u00b3\34\3\2\2\2\u00b4\u00b5\7]\2\2\u00b5\u00b6\7c\2\2\u00b6"+
"\u00b7\7u\2\2\u00b7\u00b8\7o\2\2\u00b8\36\3\2\2\2\u00b9\u00ba\7o\2\2\u00ba"+
"\u00bb\7u\2\2\u00bb\u00bc\7i\2\2\u00bc\u00bd\7\60\2\2\u00bd\u00be\7x\2"+
"\2\u00be\u00bf\7c\2\2\u00bf\u00c0\7n\2\2\u00c0\u00c1\7w\2\2\u00c1\u00c2"+
"\7g\2\2\u00c2 \3\2\2\2\u00c3\u00c4\7k\2\2\u00c4\u00c5\7p\2\2\u00c5\u00c6"+
"\7k\2\2\u00c6\u00c7\7v\2\2\u00c7\"\3\2\2\2\u00c8\u00c9\7d\2\2\u00c9\u00ca"+
"\7n\2\2\u00ca\u00cb\7q\2\2\u00cb\u00cc\7e\2\2\u00cc\u00cd\7m\2\2\u00cd"+
"\u00ce\7\60\2\2\u00ce\u00cf\7r\2\2\u00cf\u00d0\7t\2\2\u00d0\u00d1\7g\2"+
"\2\u00d1\u00d2\7x\2\2\u00d2\u00d3\7j\2\2\u00d3\u00d4\7c\2\2\u00d4\u00d5"+
"\7u\2\2\u00d5\u00d6\7j\2\2\u00d6$\3\2\2\2\u00d7\u00d8\7e\2\2\u00d8\u00d9"+
"\7q\2\2\u00d9\u00da\7p\2\2\u00da\u00db\7v\2\2\u00db\u00dc\7t\2\2\u00dc"+
"\u00dd\7c\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7v\2\2\u00df\u00e0\7\60\2"+
"\2\u00e0\u00e1\7u\2\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7q\2\2\u00e3\u00e4"+
"\7t\2\2\u00e4\u00e5\7c\2\2\u00e5\u00e6\7i\2\2\u00e6\u00e7\7g\2\2\u00e7"+
"&\3\2\2\2\u00e8\u00e9\7u\2\2\u00e9\u00ea\7w\2\2\u00ea\u00eb\7k\2\2\u00eb"+
"\u00ec\7e\2\2\u00ec\u00ed\7k\2\2\u00ed\u00ee\7f\2\2\u00ee\u00ef\7g\2\2"+
"\u00ef(\3\2\2\2\u00f0\u00f1\7d\2\2\u00f1\u00f2\7n\2\2\u00f2\u00f3\7q\2"+
"\2\u00f3\u00f4\7e\2\2\u00f4\u00f5\7m\2\2\u00f5\u00f6\7\60\2\2\u00f6\u00f7"+
"\7f\2\2\u00f7\u00f8\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\u00fa\7h\2\2\u00fa"+
"\u00fb\7k\2\2\u00fb\u00fc\7e\2\2\u00fc\u00fd\7w\2\2\u00fd\u00fe\7n\2\2"+
"\u00fe\u00ff\7v\2\2\u00ff\u0100\7{\2\2\u0100*\3\2\2\2\u0101\u0102\7o\2"+
"\2\u0102\u0103\7u\2\2\u0103\u0104\7i\2\2\u0104\u0105\7\60\2\2\u0105\u0106"+
"\7f\2\2\u0106\u0107\7c\2\2\u0107\u0108\7v\2\2\u0108\u0109\7c\2\2\u0109"+
"\u010a\7u\2\2\u010a\u010b\7k\2\2\u010b\u010c\7|\2\2\u010c\u010d\7g\2\2"+
"\u010d,\3\2\2\2\u010e\u010f\7+\2\2\u010f.\3\2\2\2\u0110\u0111\7v\2\2\u0111"+
"\u0112\7z\2\2\u0112\u0113\7\60\2\2\u0113\u0114\7i\2\2\u0114\u0115\7c\2"+
"\2\u0115\u0116\7u\2\2\u0116\u0117\7r\2\2\u0117\u0118\7t\2\2\u0118\u0119"+
"\7k\2\2\u0119\u011a\7e\2\2\u011a\u011b\7g\2\2\u011b\60\3\2\2\2\u011c\u011d"+
"\7g\2\2\u011d\u011e\7n\2\2\u011e\u011f\7u\2\2\u011f\u0120\7g\2\2\u0120"+
"\u0121\7<\2\2\u0121\62\3\2\2\2\u0122\u0123\7v\2\2\u0123\u0124\7z\2\2\u0124"+
"\u0125\7\60\2\2\u0125\u0126\7q\2\2\u0126\u0127\7t\2\2\u0127\u0128\7k\2"+
"\2\u0128\u0129\7i\2\2\u0129\u012a\7k\2\2\u012a\u012b\7p\2\2\u012b\64\3"+
"\2\2\2\u012c\u012d\7o\2\2\u012d\u012e\7u\2\2\u012e\u012f\7i\2\2\u012f"+
"\u0130\7\60\2\2\u0130\u0131\7f\2\2\u0131\u0132\7c\2\2\u0132\u0133\7v\2"+
"\2\u0133\u0134\7c\2\2\u0134\66\3\2\2\2\u0135\u0136\7g\2\2\u0136\u0137"+
"\7n\2\2\u0137\u0138\7k\2\2\u0138\u0139\7h\2\2\u01398\3\2\2\2\u013a\u013b"+
"\7t\2\2\u013b\u013c\7g\2\2\u013c\u013d\7v\2\2\u013d\u013e\7w\2\2\u013e"+
"\u013f\7t\2\2\u013f\u0140\7p\2\2\u0140:\3\2\2\2\u0141\u0142\7o\2\2\u0142"+
"\u0143\7u\2\2\u0143\u0144\7i\2\2\u0144\u0145\7\60\2\2\u0145\u0146\7u\2"+
"\2\u0146\u0147\7g\2\2\u0147\u0148\7p\2\2\u0148\u0149\7f\2\2\u0149\u014a"+
"\7g\2\2\u014a\u014b\7t\2\2\u014b<\3\2\2\2\u014c\u014d\7e\2\2\u014d\u014e"+
"\7q\2\2\u014e\u014f\7p\2\2\u014f\u0150\7v\2\2\u0150\u0151\7t\2\2\u0151"+
"\u0152\7c\2\2\u0152\u0153\7e\2\2\u0153\u0154\7v\2\2\u0154\u0155\7\60\2"+
"\2\u0155\u0156\7d\2\2\u0156\u0157\7c\2\2\u0157\u0158\7n\2\2\u0158\u0159"+
"\7c\2\2\u0159\u015a\7p\2\2\u015a\u015b\7e\2\2\u015b\u015c\7g\2\2\u015c"+
">\3\2\2\2\u015d\u015e\7c\2\2\u015e\u015f\7u\2\2\u015f\u0160\7o\2\2\u0160"+
"\u0161\7_\2\2\u0161@\3\2\2\2\u0162\u0163\7d\2\2\u0163\u0164\7n\2\2\u0164"+
"\u0165\7q\2\2\u0165\u0166\7e\2\2\u0166\u0167\7m\2\2\u0167\u0168\7\60\2"+
"\2\u0168\u0169\7i\2\2\u0169\u016a\7c\2\2\u016a\u016b\7u\2\2\u016b\u016c"+
"\7n\2\2\u016c\u016d\7k\2\2\u016d\u016e\7o\2\2\u016e\u016f\7k\2\2\u016f"+
"\u0170\7v\2\2\u0170B\3\2\2\2\u0171\u0172\7d\2\2\u0172\u0173\7n\2\2\u0173"+
"\u0174\7q\2\2\u0174\u0175\7e\2\2\u0175\u0176\7m\2\2\u0176\u0177\7\60\2"+
"\2\u0177\u0178\7p\2\2\u0178\u0179\7w\2\2\u0179\u017a\7o\2\2\u017a\u017b"+
"\7d\2\2\u017b\u017c\7g\2\2\u017c\u017d\7t\2\2\u017dD\3\2\2\2\u017e\u017f"+
"\7e\2\2\u017f\u0180\7q\2\2\u0180\u0181\7f\2\2\u0181\u0182\7g\2\2\u0182"+
"F\3\2\2\2\u0183\u0185\t\2\2\2\u0184\u0183\3\2\2\2\u0185\u0186\3\2\2\2"+
"\u0186\u0184\3\2\2\2\u0186\u0187\3\2\2\2\u0187H\3\2\2\2\u0188\u0189\7"+
"U\2\2\u0189\u018a\7V\2\2\u018a\u018b\7Q\2\2\u018b\u0363\7R\2\2\u018c\u018d"+
"\7C\2\2\u018d\u018e\7F\2\2\u018e\u0363\7F\2\2\u018f\u0190\7O\2\2\u0190"+
"\u0191\7W\2\2\u0191\u0363\7N\2\2\u0192\u0193\7U\2\2\u0193\u0194\7W\2\2"+
"\u0194\u0363\7D\2\2\u0195\u0196\7F\2\2\u0196\u0197\7K\2\2\u0197\u0363"+
"\7X\2\2\u0198\u0199\7U\2\2\u0199\u019a\7F\2\2\u019a\u019b\7K\2\2\u019b"+
"\u0363\7X\2\2\u019c\u019d\7O\2\2\u019d\u019e\7Q\2\2\u019e\u0363\7F\2\2"+
"\u019f\u01a0\7U\2\2\u01a0\u01a1\7O\2\2\u01a1\u01a2\7Q\2\2\u01a2\u0363"+
"\7F\2\2\u01a3\u01a4\7G\2\2\u01a4\u01a5\7Z\2\2\u01a5\u0363\7R\2\2\u01a6"+
"\u01a7\7P\2\2\u01a7\u01a8\7G\2\2\u01a8\u0363\7I\2\2\u01a9\u01aa\7N\2\2"+
"\u01aa\u0363\7V\2\2\u01ab\u01ac\7I\2\2\u01ac\u0363\7V\2\2\u01ad\u01ae"+
"\7U\2\2\u01ae\u01af\7N\2\2\u01af\u0363\7V\2\2\u01b0\u01b1\7U\2\2\u01b1"+
"\u01b2\7I\2\2\u01b2\u0363\7V\2\2\u01b3\u01b4\7G\2\2\u01b4\u0363\7S\2\2"+
"\u01b5\u01b6\7P\2\2\u01b6\u01b7\7Q\2\2\u01b7\u0363\7V\2\2\u01b8\u01b9"+
"\7C\2\2\u01b9\u01ba\7P\2\2\u01ba\u0363\7F\2\2\u01bb\u01bc\7Q\2\2\u01bc"+
"\u0363\7T\2\2\u01bd\u01be\7Z\2\2\u01be\u01bf\7Q\2\2\u01bf\u0363\7T\2\2"+
"\u01c0\u01c1\7D\2\2\u01c1\u01c2\7[\2\2\u01c2\u01c3\7V\2\2\u01c3\u0363"+
"\7G\2\2\u01c4\u01c5\7U\2\2\u01c5\u01c6\7J\2\2\u01c6\u01c7\7C\2\2\u01c7"+
"\u0363\7\65\2\2\u01c8\u01c9\7C\2\2\u01c9\u01ca\7F\2\2\u01ca\u01cb\7F\2"+
"\2\u01cb\u01cc\7T\2\2\u01cc\u01cd\7G\2\2\u01cd\u01ce\7U\2\2\u01ce\u0363"+
"\7U\2\2\u01cf\u01d0\7D\2\2\u01d0\u01d1\7C\2\2\u01d1\u01d2\7N\2\2\u01d2"+
"\u01d3\7C\2\2\u01d3\u01d4\7P\2\2\u01d4\u01d5\7E\2\2\u01d5\u0363\7G\2\2"+
"\u01d6\u01d7\7Q\2\2\u01d7\u01d8\7T\2\2\u01d8\u01d9\7K\2\2\u01d9\u01da"+
"\7I\2\2\u01da\u01db\7K\2\2\u01db\u0363\7P\2\2\u01dc\u01dd\7E\2\2\u01dd"+
"\u01de\7C\2\2\u01de\u01df\7N\2\2\u01df\u01e0\7N\2\2\u01e0\u01e1\7G\2\2"+
"\u01e1\u0363\7T\2\2\u01e2\u01e3\7E\2\2\u01e3\u01e4\7C\2\2\u01e4\u01e5"+
"\7N\2\2\u01e5\u01e6\7N\2\2\u01e6\u01e7\7X\2\2\u01e7\u01e8\7C\2\2\u01e8"+
"\u01e9\7N\2\2\u01e9\u01ea\7W\2\2\u01ea\u0363\7G\2\2\u01eb\u01ec\7E\2\2"+
"\u01ec\u01ed\7C\2\2\u01ed\u01ee\7N\2\2\u01ee\u01ef\7N\2\2\u01ef\u01f0"+
"\7F\2\2\u01f0\u01f1\7C\2\2\u01f1\u01f2\7V\2\2\u01f2\u01f3\7C\2\2\u01f3"+
"\u01f4\7N\2\2\u01f4\u01f5\7Q\2\2\u01f5\u01f6\7C\2\2\u01f6\u0363\7F\2\2"+
"\u01f7\u01f8\7E\2\2\u01f8\u01f9\7C\2\2\u01f9\u01fa\7N\2\2\u01fa\u01fb"+
"\7N\2\2\u01fb\u01fc\7F\2\2\u01fc\u01fd\7C\2\2\u01fd\u01fe\7V\2\2\u01fe"+
"\u01ff\7C\2\2\u01ff\u0200\7U\2\2\u0200\u0201\7K\2\2\u0201\u0202\7\\\2"+
"\2\u0202\u0363\7G\2\2\u0203\u0204\7E\2\2\u0204\u0205\7C\2\2\u0205\u0206"+
"\7N\2\2\u0206\u0207\7N\2\2\u0207\u0208\7F\2\2\u0208\u0209\7C\2\2\u0209"+
"\u020a\7V\2\2\u020a\u020b\7C\2\2\u020b\u020c\7E\2\2\u020c\u020d\7Q\2\2"+
"\u020d\u020e\7R\2\2\u020e\u0363\7[\2\2\u020f\u0210\7E\2\2\u0210\u0211"+
"\7Q\2\2\u0211\u0212\7F\2\2\u0212\u0213\7G\2\2\u0213\u0214\7U\2\2\u0214"+
"\u0215\7K\2\2\u0215\u0216\7\\\2\2\u0216\u0363\7G\2\2\u0217\u0218\7E\2"+
"\2\u0218\u0219\7Q\2\2\u0219\u021a\7F\2\2\u021a\u021b\7G\2\2\u021b\u021c"+
"\7E\2\2\u021c\u021d\7Q\2\2\u021d\u021e\7R\2\2\u021e\u0363\7[\2\2\u021f"+
"\u0220\7I\2\2\u0220\u0221\7C\2\2\u0221\u0222\7U\2\2\u0222\u0223\7R\2\2"+
"\u0223\u0224\7T\2\2\u0224\u0225\7K\2\2\u0225\u0226\7E\2\2\u0226\u0363"+
"\7G\2\2\u0227\u0228\7R\2\2\u0228\u0229\7T\2\2\u0229\u022a\7G\2\2\u022a"+
"\u022b\7X\2\2\u022b\u022c\7J\2\2\u022c\u022d\7C\2\2\u022d\u022e\7U\2\2"+
"\u022e\u0363\7J\2\2\u022f\u0230\7E\2\2\u0230\u0231\7Q\2\2\u0231\u0232"+
"\7K\2\2\u0232\u0233\7P\2\2\u0233\u0234\7D\2\2\u0234\u0235\7C\2\2\u0235"+
"\u0236\7U\2\2\u0236\u0363\7G\2\2\u0237\u0238\7V\2\2\u0238\u0239\7K\2\2"+
"\u0239\u023a\7O\2\2\u023a\u023b\7G\2\2\u023b\u023c\7U\2\2\u023c\u023d"+
"\7V\2\2\u023d\u023e\7C\2\2\u023e\u023f\7O\2\2\u023f\u0363\7R\2\2\u0240"+
"\u0241\7P\2\2\u0241\u0242\7W\2\2\u0242\u0243\7O\2\2\u0243\u0244\7D\2\2"+
"\u0244\u0245\7G\2\2\u0245\u0363\7T\2\2\u0246\u0247\7F\2\2\u0247\u0248"+
"\7K\2\2\u0248\u0249\7H\2\2\u0249\u024a\7H\2\2\u024a\u024b\7K\2\2\u024b"+
"\u024c\7E\2\2\u024c\u024d\7W\2\2\u024d\u024e\7N\2\2\u024e\u024f\7V\2\2"+
"\u024f\u0363\7[\2\2\u0250\u0251\7I\2\2\u0251\u0252\7C\2\2\u0252\u0253"+
"\7U\2\2\u0253\u0254\7N\2\2\u0254\u0255\7K\2\2\u0255\u0256\7O\2\2\u0256"+
"\u0257\7K\2\2\u0257\u0363\7V\2\2\u0258\u0259\7R\2\2\u0259\u025a\7Q\2\2"+
"\u025a\u0363\7R\2\2\u025b\u025c\7F\2\2\u025c\u025d\7W\2\2\u025d\u0363"+
"\7R\2\2\u025e\u025f\7U\2\2\u025f\u0260\7Y\2\2\u0260\u0261\7C\2\2\u0261"+
"\u0363\7R\2\2\u0262\u0263\7O\2\2\u0263\u0264\7N\2\2\u0264\u0265\7Q\2\2"+
"\u0265\u0266\7C\2\2\u0266\u0363\7F\2\2\u0267\u0268\7O\2\2\u0268\u0269"+
"\7U\2\2\u0269\u026a\7V\2\2\u026a\u026b\7Q\2\2\u026b\u026c\7T\2\2\u026c"+
"\u0363\7G\2\2\u026d\u026e\7O\2\2\u026e\u026f\7U\2\2\u026f\u0270\7V\2\2"+
"\u0270\u0271\7Q\2\2\u0271\u0272\7T\2\2\u0272\u0273\7G\2\2\u0273\u0363"+
"\7:\2\2\u0274\u0275\7U\2\2\u0275\u0276\7N\2\2\u0276\u0277\7Q\2\2\u0277"+
"\u0278\7C\2\2\u0278\u0363\7F\2\2\u0279\u027a\7U\2\2\u027a\u027b\7U\2\2"+
"\u027b\u027c\7V\2\2\u027c\u027d\7Q\2\2\u027d\u027e\7T\2\2\u027e\u0363"+
"\7G\2\2\u027f\u0280\7L\2\2\u0280\u0281\7W\2\2\u0281\u0282\7O\2\2\u0282"+
"\u0363\7R\2\2\u0283\u0284\7L\2\2\u0284\u0285\7W\2\2\u0285\u0286\7O\2\2"+
"\u0286\u0287\7R\2\2\u0287\u0363\7K\2\2\u0288\u0289\7R\2\2\u0289\u0363"+
"\7E\2\2\u028a\u028b\7O\2\2\u028b\u028c\7G\2\2\u028c\u028d\7O\2\2\u028d"+
"\u028e\7U\2\2\u028e\u028f\7K\2\2\u028f\u0290\7\\\2\2\u0290\u0363\7G\2"+
"\2\u0291\u0292\7I\2\2\u0292\u0293\7C\2\2\u0293\u0363\7U\2\2\u0294\u0295"+
"\7R\2\2\u0295\u0296\7W\2\2\u0296\u0297\7U\2\2\u0297\u0298\7J\2\2\u0298"+
"\u0363\7\63\2\2\u0299\u029a\7R\2\2\u029a\u029b\7W\2\2\u029b\u029c\7U\2"+
"\2\u029c\u029d\7J\2\2\u029d\u0363\7\64\2\2\u029e\u029f\7R\2\2\u029f\u02a0"+
"\7W\2\2\u02a0\u02a1\7U\2\2\u02a1\u02a2\7J\2\2\u02a2\u0363\7\65\2\2\u02a3"+
"\u02a4\7R\2\2\u02a4\u02a5\7W\2\2\u02a5\u02a6\7U\2\2\u02a6\u02a7\7J\2\2"+
"\u02a7\u0363\7\66\2\2\u02a8\u02a9\7R\2\2\u02a9\u02aa\7W\2\2\u02aa\u02ab"+
"\7U\2\2\u02ab\u02ac\7J\2\2\u02ac\u0363\7\67\2\2\u02ad\u02ae\7R\2\2\u02ae"+
"\u02af\7W\2\2\u02af\u02b0\7U\2\2\u02b0\u02b1\7J\2\2\u02b1\u0363\78\2\2"+
"\u02b2\u02b3\7R\2\2\u02b3\u02b4\7W\2\2\u02b4\u02b5\7U\2\2\u02b5\u02b6"+
"\7J\2\2\u02b6\u0363\79\2\2\u02b7\u02b8\7R\2\2\u02b8\u02b9\7W\2\2\u02b9"+
"\u02ba\7U\2\2\u02ba\u02bb\7J\2\2\u02bb\u0363\7:\2\2\u02bc\u02bd\7R\2\2"+
"\u02bd\u02be\7W\2\2\u02be\u02bf\7U\2\2\u02bf\u02c0\7J\2\2\u02c0\u0363"+
"\7;\2\2\u02c1\u02c2\7R\2\2\u02c2\u02c3\7W\2\2\u02c3\u02c4\7U\2\2\u02c4"+
"\u02c5\7J\2\2\u02c5\u02c6\7\63\2\2\u02c6\u0363\7\62\2\2\u02c7\u02c8\7"+
"R\2\2\u02c8\u02c9\7W\2\2\u02c9\u02ca\7U\2\2\u02ca\u02cb\7J\2\2\u02cb\u02cc"+
"\7\63\2\2\u02cc\u0363\7\63\2\2\u02cd\u02ce\7R\2\2\u02ce\u02cf\7W\2\2\u02cf"+
"\u02d0\7U\2\2\u02d0\u02d1\7J\2\2\u02d1\u02d2\7\63\2\2\u02d2\u0363\7\64"+
"\2\2\u02d3\u02d4\7R\2\2\u02d4\u02d5\7W\2\2\u02d5\u02d6\7U\2\2\u02d6\u02d7"+
"\7J\2\2\u02d7\u02d8\7\63\2\2\u02d8\u0363\7\65\2\2\u02d9\u02da\7R\2\2\u02da"+
"\u02db\7W\2\2\u02db\u02dc\7U\2\2\u02dc\u02dd\7J\2\2\u02dd\u02de\7\63\2"+
"\2\u02de\u0363\7\66\2\2\u02df\u02e0\7R\2\2\u02e0\u02e1\7W\2\2\u02e1\u02e2"+
"\7U\2\2\u02e2\u02e3\7J\2\2\u02e3\u02e4\7\63\2\2\u02e4\u0363\7\67\2\2\u02e5"+
"\u02e6\7R\2\2\u02e6\u02e7\7W\2\2\u02e7\u02e8\7U\2\2\u02e8\u02e9\7J\2\2"+
"\u02e9\u02ea\7\63\2\2\u02ea\u0363\78\2\2\u02eb\u02ec\7R\2\2\u02ec\u02ed"+
"\7W\2\2\u02ed\u02ee\7U\2\2\u02ee\u02ef\7J\2\2\u02ef\u02f0\7\63\2\2\u02f0"+
"\u0363\79\2\2\u02f1\u02f2\7R\2\2\u02f2\u02f3\7W\2\2\u02f3\u02f4\7U\2\2"+
"\u02f4\u02f5\7J\2\2\u02f5\u02f6\7\63\2\2\u02f6\u0363\7:\2\2\u02f7\u02f8"+
"\7R\2\2\u02f8\u02f9\7W\2\2\u02f9\u02fa\7U\2\2\u02fa\u02fb\7J\2\2\u02fb"+
"\u02fc\7\63\2\2\u02fc\u0363\7;\2\2\u02fd\u02fe\7R\2\2\u02fe\u02ff\7W\2"+
"\2\u02ff\u0300\7U\2\2\u0300\u0301\7J\2\2\u0301\u0302\7\64\2\2\u0302\u0363"+
"\7\62\2\2\u0303\u0304\7R\2\2\u0304\u0305\7W\2\2\u0305\u0306\7U\2\2\u0306"+
"\u0307\7J\2\2\u0307\u0308\7\64\2\2\u0308\u0363\7\63\2\2\u0309\u030a\7"+
"R\2\2\u030a\u030b\7W\2\2\u030b\u030c\7U\2\2\u030c\u030d\7J\2\2\u030d\u030e"+
"\7\64\2\2\u030e\u0363\7\64\2\2\u030f\u0310\7R\2\2\u0310\u0311\7W\2\2\u0311"+
"\u0312\7U\2\2\u0312\u0313\7J\2\2\u0313\u0314\7\64\2\2\u0314\u0363\7\65"+
"\2\2\u0315\u0316\7R\2\2\u0316\u0317\7W\2\2\u0317\u0318\7U\2\2\u0318\u0319"+
"\7J\2\2\u0319\u031a\7\64\2\2\u031a\u0363\7\66\2\2\u031b\u031c\7R\2\2\u031c"+
"\u031d\7W\2\2\u031d\u031e\7U\2\2\u031e\u031f\7J\2\2\u031f\u0320\7\64\2"+
"\2\u0320\u0363\7\67\2\2\u0321\u0322\7R\2\2\u0322\u0323\7W\2\2\u0323\u0324"+
"\7U\2\2\u0324\u0325\7J\2\2\u0325\u0326\7\64\2\2\u0326\u0363\78\2\2\u0327"+
"\u0328\7R\2\2\u0328\u0329\7W\2\2\u0329\u032a\7U\2\2\u032a\u032b\7J\2\2"+
"\u032b\u032c\7\64\2\2\u032c\u0363\79\2\2\u032d\u032e\7R\2\2\u032e\u032f"+
"\7W\2\2\u032f\u0330\7U\2\2\u0330\u0331\7J\2\2\u0331\u0332\7\64\2\2\u0332"+
"\u0363\7:\2\2\u0333\u0334\7R\2\2\u0334\u0335\7W\2\2\u0335\u0336\7U\2\2"+
"\u0336\u0337\7J\2\2\u0337\u0338\7\64\2\2\u0338\u0363\7;\2\2\u0339\u033a"+
"\7R\2\2\u033a\u033b\7W\2\2\u033b\u033c\7U\2\2\u033c\u033d\7J\2\2\u033d"+
"\u033e\7\65\2\2\u033e\u0363\7\62\2\2\u033f\u0340\7R\2\2\u0340\u0341\7"+
"W\2\2\u0341\u0342\7U\2\2\u0342\u0343\7J\2\2\u0343\u0344\7\65\2\2\u0344"+
"\u0363\7\63\2\2\u0345\u0346\7R\2\2\u0346\u0347\7W\2\2\u0347\u0348\7U\2"+
"\2\u0348\u0349\7J\2\2\u0349\u034a\7\65\2\2\u034a\u0363\7\64\2\2\u034b"+
"\u034c\7E\2\2\u034c\u034d\7T\2\2\u034d\u034e\7G\2\2\u034e\u034f\7C\2\2"+
"\u034f\u0350\7V\2\2\u0350\u0363\7G\2\2\u0351\u0352\7E\2\2\u0352\u0353"+
"\7C\2\2\u0353\u0354\7N\2\2\u0354\u0363\7N\2\2\u0355\u0356\7T\2\2\u0356"+
"\u0357\7G\2\2\u0357\u0358\7V\2\2\u0358\u0359\7W\2\2\u0359\u035a\7T\2\2"+
"\u035a\u0363\7P\2\2\u035b\u035c\7U\2\2\u035c\u035d\7W\2\2\u035d\u035e"+
"\7K\2\2\u035e\u035f\7E\2\2\u035f\u0360\7K\2\2\u0360\u0361\7F\2\2\u0361"+
"\u0363\7G\2\2\u0362\u0188\3\2\2\2\u0362\u018c\3\2\2\2\u0362\u018f\3\2"+
"\2\2\u0362\u0192\3\2\2\2\u0362\u0195\3\2\2\2\u0362\u0198\3\2\2\2\u0362"+
"\u019c\3\2\2\2\u0362\u019f\3\2\2\2\u0362\u01a3\3\2\2\2\u0362\u01a6\3\2"+
"\2\2\u0362\u01a9\3\2\2\2\u0362\u01ab\3\2\2\2\u0362\u01ad\3\2\2\2\u0362"+
"\u01b0\3\2\2\2\u0362\u01b3\3\2\2\2\u0362\u01b5\3\2\2\2\u0362\u01b8\3\2"+
"\2\2\u0362\u01bb\3\2\2\2\u0362\u01bd\3\2\2\2\u0362\u01c0\3\2\2\2\u0362"+
"\u01c4\3\2\2\2\u0362\u01c8\3\2\2\2\u0362\u01cf\3\2\2\2\u0362\u01d6\3\2"+
"\2\2\u0362\u01dc\3\2\2\2\u0362\u01e2\3\2\2\2\u0362\u01eb\3\2\2\2\u0362"+
"\u01f7\3\2\2\2\u0362\u0203\3\2\2\2\u0362\u020f\3\2\2\2\u0362\u0217\3\2"+
"\2\2\u0362\u021f\3\2\2\2\u0362\u0227\3\2\2\2\u0362\u022f\3\2\2\2\u0362"+
"\u0237\3\2\2\2\u0362\u0240\3\2\2\2\u0362\u0246\3\2\2\2\u0362\u0250\3\2"+
"\2\2\u0362\u0258\3\2\2\2\u0362\u025b\3\2\2\2\u0362\u025e\3\2\2\2\u0362"+
"\u0262\3\2\2\2\u0362\u0267\3\2\2\2\u0362\u026d\3\2\2\2\u0362\u0274\3\2"+
"\2\2\u0362\u0279\3\2\2\2\u0362\u027f\3\2\2\2\u0362\u0283\3\2\2\2\u0362"+
"\u0288\3\2\2\2\u0362\u028a\3\2\2\2\u0362\u0291\3\2\2\2\u0362\u0294\3\2"+
"\2\2\u0362\u0299\3\2\2\2\u0362\u029e\3\2\2\2\u0362\u02a3\3\2\2\2\u0362"+
"\u02a8\3\2\2\2\u0362\u02ad\3\2\2\2\u0362\u02b2\3\2\2\2\u0362\u02b7\3\2"+
"\2\2\u0362\u02bc\3\2\2\2\u0362\u02c1\3\2\2\2\u0362\u02c7\3\2\2\2\u0362"+
"\u02cd\3\2\2\2\u0362\u02d3\3\2\2\2\u0362\u02d9\3\2\2\2\u0362\u02df\3\2"+
"\2\2\u0362\u02e5\3\2\2\2\u0362\u02eb\3\2\2\2\u0362\u02f1\3\2\2\2\u0362"+
"\u02f7\3\2\2\2\u0362\u02fd\3\2\2\2\u0362\u0303\3\2\2\2\u0362\u0309\3\2"+
"\2\2\u0362\u030f\3\2\2\2\u0362\u0315\3\2\2\2\u0362\u031b\3\2\2\2\u0362"+
"\u0321\3\2\2\2\u0362\u0327\3\2\2\2\u0362\u032d\3\2\2\2\u0362\u0333\3\2"+
"\2\2\u0362\u0339\3\2\2\2\u0362\u033f\3\2\2\2\u0362\u0345\3\2\2\2\u0362"+
"\u034b\3\2\2\2\u0362\u0351\3\2\2\2\u0362\u0355\3\2\2\2\u0362\u035b\3\2"+
"\2\2\u0363J\3\2\2\2\u0364\u0365\7z\2\2\u0365\u0366\7q\2\2\u0366\u0367"+
"\7t\2\2\u0367L\3\2\2\2\u0368\u0369\7(\2\2\u0369\u036e\7(\2\2\u036a\u036b"+
"\7c\2\2\u036b\u036c\7p\2\2\u036c\u036e\7f\2\2\u036d\u0368\3\2\2\2\u036d"+
"\u036a\3\2\2\2\u036eN\3\2\2\2\u036f\u0370\7~\2\2\u0370\u0374\7~\2\2\u0371"+
"\u0372\7q\2\2\u0372\u0374\7t\2\2\u0373\u036f\3\2\2\2\u0373\u0371\3\2\2"+
"\2\u0374P\3\2\2\2\u0375\u037a\7#\2\2\u0376\u0377\7p\2\2\u0377\u0378\7"+
"q\2\2\u0378\u037a\7v\2\2\u0379\u0375\3\2\2\2\u0379\u0376\3\2\2\2\u037a"+
"R\3\2\2\2\u037b\u037c\7?\2\2\u037cT\3\2\2\2\u037d\u037f\7\17\2\2\u037e"+
"\u037d\3\2\2\2\u037e\u037f\3\2\2\2\u037f\u0380\3\2\2\2\u0380\u0384\7\f"+
"\2\2\u0381\u0383\7\"\2\2\u0382\u0381\3\2\2\2\u0383\u0386\3\2\2\2\u0384"+
"\u0382\3\2\2\2\u0384\u0385\3\2\2\2\u0385V\3\2\2\2\u0386\u0384\3\2\2\2"+
"\u0387\u0389\t\3\2\2\u0388\u0387\3\2\2\2\u0389\u038a\3\2\2\2\u038a\u0388"+
"\3\2\2\2\u038a\u038b\3\2\2\2\u038b\u038c\3\2\2\2\u038c\u038d\b,\2\2\u038d"+
"X\3\2\2\2\u038e\u0392\7%\2\2\u038f\u0391\n\4\2\2\u0390\u038f\3\2\2\2\u0391"+
"\u0394\3\2\2\2\u0392\u0390\3\2\2\2\u0392\u0393\3\2\2\2\u0393\u0395\3\2"+
"\2\2\u0394\u0392\3\2\2\2\u0395\u0396\b-\3\2\u0396Z\3\2\2\2\u0397\u039b"+
"\t\5\2\2\u0398\u039a\t\6\2\2\u0399\u0398\3\2\2\2\u039a\u039d\3\2\2\2\u039b"+
"\u0399\3\2\2\2\u039b\u039c\3\2\2\2\u039c\\\3\2\2\2\u039d\u039b\3\2\2\2"+
"\u039e\u039f\t\7\2\2\u039f^\3\2\2\2\u03a0\u03a1\t\b\2\2\u03a1`\3\2\2\2"+
"\u03a2\u03a8\t\t\2\2\u03a3\u03a4\7>\2\2\u03a4\u03a8\7?\2\2\u03a5\u03a6"+
"\7@\2\2\u03a6\u03a8\7?\2\2\u03a7\u03a2\3\2\2\2\u03a7\u03a3\3\2\2\2\u03a7"+
"\u03a5\3\2\2\2\u03a8b\3\2\2\2\u03a9\u03aa\7?\2\2\u03aa\u03ae\7?\2\2\u03ab"+
"\u03ac\7#\2\2\u03ac\u03ae\7?\2\2\u03ad\u03a9\3\2\2\2\u03ad\u03ab\3\2\2"+
"\2\u03aed\3\2\2\2\u03af\u03b0\7(\2\2\u03b0f\3\2\2\2\u03b1\u03b2\7~\2\2"+
"\u03b2h\3\2\2\2\u03b3\u03b4\t\n\2\2\u03b4j\3\2\2\2\u03b5\u03b6\7\62\2"+
"\2\u03b6\u03ba\7z\2\2\u03b7\u03b8\7\62\2\2\u03b8\u03ba\7Z\2\2\u03b9\u03b5"+
"\3\2\2\2\u03b9\u03b7\3\2\2\2\u03ba\u03bc\3\2\2\2\u03bb\u03bd\5i\65\2\u03bc"+
"\u03bb\3\2\2\2\u03bd\u03be\3\2\2\2\u03be\u03bc\3\2\2\2\u03be\u03bf\3\2"+
"\2\2\u03bfl\3\2\2\2\21\2\u0186\u0362\u036d\u0373\u0379\u037e\u0384\u038a"+
"\u0392\u039b\u03a7\u03ad\u03b9\u03be";
"\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\3%\5%\u0361\n%\3&\3&\3&\3&\3\'\3\'\3"+
"\'\3\'\3\'\5\'\u036c\n\'\3(\3(\3(\3(\5(\u0372\n(\3)\3)\3)\3)\5)\u0378"+
"\n)\3*\3*\3+\5+\u037d\n+\3+\3+\7+\u0381\n+\f+\16+\u0384\13+\3,\6,\u0387"+
"\n,\r,\16,\u0388\3,\3,\3-\3-\7-\u038f\n-\f-\16-\u0392\13-\3-\3-\3.\3."+
"\7.\u0398\n.\f.\16.\u039b\13.\3/\3/\3\60\3\60\3\61\3\61\3\61\3\61\3\61"+
"\5\61\u03a6\n\61\3\62\3\62\3\62\3\62\5\62\u03ac\n\62\3\63\3\63\3\64\3"+
"\64\3\65\3\65\3\66\3\66\3\66\3\66\5\66\u03b8\n\66\3\66\6\66\u03bb\n\66"+
"\r\66\16\66\u03bc\2\67\3\3\1\5\4\1\7\5\1\t\6\1\13\7\1\r\b\1\17\t\1\21"+
"\n\1\23\13\1\25\f\1\27\r\1\31\16\1\33\17\1\35\20\1\37\21\1!\22\1#\23\1"+
"%\24\1\'\25\1)\26\1+\27\1-\30\1/\31\1\61\32\1\63\33\1\65\34\1\67\35\1"+
"9\36\1;\37\1= \1?!\1A\"\1C#\1E$\1G%\1I&\1K\'\1M(\1O)\1Q*\1S+\1U,\1W-\2"+
"Y.\3[/\1]\60\1_\61\1a\62\1c\63\1e\64\1g\65\1i\66\1k\67\1\3\2\13\3\2\62"+
";\4\2\13\13\"\"\4\2\f\f\17\17\4\2C\\c|\5\2\62;C\\c|\4\2--//\6\2\'\',,"+
"\61\61``\4\2>>@@\5\2\62;CHch\u0421\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2"+
"\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3"+
"\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2"+
"\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2"+
"\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2"+
"\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2"+
"\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2"+
"O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3"+
"\2\2\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2"+
"\2\2i\3\2\2\2\2k\3\2\2\2\3m\3\2\2\2\5o\3\2\2\2\7t\3\2\2\2\t\u0083\3\2"+
"\2\2\13\u0085\3\2\2\2\r\u0089\3\2\2\2\17\u0090\3\2\2\2\21\u0096\3\2\2"+
"\2\23\u0098\3\2\2\2\25\u009a\3\2\2\2\27\u009c\3\2\2\2\31\u009f\3\2\2\2"+
"\33\u00a4\3\2\2\2\35\u00b4\3\2\2\2\37\u00b9\3\2\2\2!\u00c3\3\2\2\2#\u00c8"+
"\3\2\2\2%\u00d7\3\2\2\2\'\u00e8\3\2\2\2)\u00f0\3\2\2\2+\u0101\3\2\2\2"+
"-\u010e\3\2\2\2/\u0110\3\2\2\2\61\u011c\3\2\2\2\63\u0122\3\2\2\2\65\u012c"+
"\3\2\2\2\67\u0135\3\2\2\29\u013a\3\2\2\2;\u0141\3\2\2\2=\u014c\3\2\2\2"+
"?\u015d\3\2\2\2A\u0162\3\2\2\2C\u0171\3\2\2\2E\u017e\3\2\2\2G\u0184\3"+
"\2\2\2I\u0360\3\2\2\2K\u0362\3\2\2\2M\u036b\3\2\2\2O\u0371\3\2\2\2Q\u0377"+
"\3\2\2\2S\u0379\3\2\2\2U\u037c\3\2\2\2W\u0386\3\2\2\2Y\u038c\3\2\2\2["+
"\u0395\3\2\2\2]\u039c\3\2\2\2_\u039e\3\2\2\2a\u03a5\3\2\2\2c\u03ab\3\2"+
"\2\2e\u03ad\3\2\2\2g\u03af\3\2\2\2i\u03b1\3\2\2\2k\u03b7\3\2\2\2mn\7_"+
"\2\2n\4\3\2\2\2op\7u\2\2pq\7v\2\2qr\7q\2\2rs\7r\2\2s\6\3\2\2\2tu\7d\2"+
"\2uv\7n\2\2vw\7q\2\2wx\7e\2\2xy\7m\2\2yz\7\60\2\2z{\7e\2\2{|\7q\2\2|}"+
"\7k\2\2}~\7p\2\2~\177\7d\2\2\177\u0080\7c\2\2\u0080\u0081\7u\2\2\u0081"+
"\u0082\7g\2\2\u0082\b\3\2\2\2\u0083\u0084\7.\2\2\u0084\n\3\2\2\2\u0085"+
"\u0086\7o\2\2\u0086\u0087\7u\2\2\u0087\u0088\7i\2\2\u0088\f\3\2\2\2\u0089"+
"\u008a\7v\2\2\u008a\u008b\7z\2\2\u008b\u008c\7\60\2\2\u008c\u008d\7i\2"+
"\2\u008d\u008e\7c\2\2\u008e\u008f\7u\2\2\u008f\16\3\2\2\2\u0090\u0091"+
"\7y\2\2\u0091\u0092\7j\2\2\u0092\u0093\7k\2\2\u0093\u0094\7n\2\2\u0094"+
"\u0095\7g\2\2\u0095\20\3\2\2\2\u0096\u0097\7]\2\2\u0097\22\3\2\2\2\u0098"+
"\u0099\7*\2\2\u0099\24\3\2\2\2\u009a\u009b\7<\2\2\u009b\26\3\2\2\2\u009c"+
"\u009d\7k\2\2\u009d\u009e\7h\2\2\u009e\30\3\2\2\2\u009f\u00a0\7u\2\2\u00a0"+
"\u00a1\7g\2\2\u00a1\u00a2\7p\2\2\u00a2\u00a3\7f\2\2\u00a3\32\3\2\2\2\u00a4"+
"\u00a5\7d\2\2\u00a5\u00a6\7n\2\2\u00a6\u00a7\7q\2\2\u00a7\u00a8\7e\2\2"+
"\u00a8\u00a9\7m\2\2\u00a9\u00aa\7\60\2\2\u00aa\u00ab\7v\2\2\u00ab\u00ac"+
"\7k\2\2\u00ac\u00ad\7o\2\2\u00ad\u00ae\7g\2\2\u00ae\u00af\7u\2\2\u00af"+
"\u00b0\7v\2\2\u00b0\u00b1\7c\2\2\u00b1\u00b2\7o\2\2\u00b2\u00b3\7r\2\2"+
"\u00b3\34\3\2\2\2\u00b4\u00b5\7]\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7\7"+
"u\2\2\u00b7\u00b8\7o\2\2\u00b8\36\3\2\2\2\u00b9\u00ba\7o\2\2\u00ba\u00bb"+
"\7u\2\2\u00bb\u00bc\7i\2\2\u00bc\u00bd\7\60\2\2\u00bd\u00be\7x\2\2\u00be"+
"\u00bf\7c\2\2\u00bf\u00c0\7n\2\2\u00c0\u00c1\7w\2\2\u00c1\u00c2\7g\2\2"+
"\u00c2 \3\2\2\2\u00c3\u00c4\7k\2\2\u00c4\u00c5\7p\2\2\u00c5\u00c6\7k\2"+
"\2\u00c6\u00c7\7v\2\2\u00c7\"\3\2\2\2\u00c8\u00c9\7d\2\2\u00c9\u00ca\7"+
"n\2\2\u00ca\u00cb\7q\2\2\u00cb\u00cc\7e\2\2\u00cc\u00cd\7m\2\2\u00cd\u00ce"+
"\7\60\2\2\u00ce\u00cf\7r\2\2\u00cf\u00d0\7t\2\2\u00d0\u00d1\7g\2\2\u00d1"+
"\u00d2\7x\2\2\u00d2\u00d3\7j\2\2\u00d3\u00d4\7c\2\2\u00d4\u00d5\7u\2\2"+
"\u00d5\u00d6\7j\2\2\u00d6$\3\2\2\2\u00d7\u00d8\7e\2\2\u00d8\u00d9\7q\2"+
"\2\u00d9\u00da\7p\2\2\u00da\u00db\7v\2\2\u00db\u00dc\7t\2\2\u00dc\u00dd"+
"\7c\2\2\u00dd\u00de\7e\2\2\u00de\u00df\7v\2\2\u00df\u00e0\7\60\2\2\u00e0"+
"\u00e1\7u\2\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7q\2\2\u00e3\u00e4\7t\2\2"+
"\u00e4\u00e5\7c\2\2\u00e5\u00e6\7i\2\2\u00e6\u00e7\7g\2\2\u00e7&\3\2\2"+
"\2\u00e8\u00e9\7u\2\2\u00e9\u00ea\7w\2\2\u00ea\u00eb\7k\2\2\u00eb\u00ec"+
"\7e\2\2\u00ec\u00ed\7k\2\2\u00ed\u00ee\7f\2\2\u00ee\u00ef\7g\2\2\u00ef"+
"(\3\2\2\2\u00f0\u00f1\7d\2\2\u00f1\u00f2\7n\2\2\u00f2\u00f3\7q\2\2\u00f3"+
"\u00f4\7e\2\2\u00f4\u00f5\7m\2\2\u00f5\u00f6\7\60\2\2\u00f6\u00f7\7f\2"+
"\2\u00f7\u00f8\7k\2\2\u00f8\u00f9\7h\2\2\u00f9\u00fa\7h\2\2\u00fa\u00fb"+
"\7k\2\2\u00fb\u00fc\7e\2\2\u00fc\u00fd\7w\2\2\u00fd\u00fe\7n\2\2\u00fe"+
"\u00ff\7v\2\2\u00ff\u0100\7{\2\2\u0100*\3\2\2\2\u0101\u0102\7o\2\2\u0102"+
"\u0103\7u\2\2\u0103\u0104\7i\2\2\u0104\u0105\7\60\2\2\u0105\u0106\7f\2"+
"\2\u0106\u0107\7c\2\2\u0107\u0108\7v\2\2\u0108\u0109\7c\2\2\u0109\u010a"+
"\7u\2\2\u010a\u010b\7k\2\2\u010b\u010c\7|\2\2\u010c\u010d\7g\2\2\u010d"+
",\3\2\2\2\u010e\u010f\7+\2\2\u010f.\3\2\2\2\u0110\u0111\7v\2\2\u0111\u0112"+
"\7z\2\2\u0112\u0113\7\60\2\2\u0113\u0114\7i\2\2\u0114\u0115\7c\2\2\u0115"+
"\u0116\7u\2\2\u0116\u0117\7r\2\2\u0117\u0118\7t\2\2\u0118\u0119\7k\2\2"+
"\u0119\u011a\7e\2\2\u011a\u011b\7g\2\2\u011b\60\3\2\2\2\u011c\u011d\7"+
"g\2\2\u011d\u011e\7n\2\2\u011e\u011f\7u\2\2\u011f\u0120\7g\2\2\u0120\u0121"+
"\7<\2\2\u0121\62\3\2\2\2\u0122\u0123\7v\2\2\u0123\u0124\7z\2\2\u0124\u0125"+
"\7\60\2\2\u0125\u0126\7q\2\2\u0126\u0127\7t\2\2\u0127\u0128\7k\2\2\u0128"+
"\u0129\7i\2\2\u0129\u012a\7k\2\2\u012a\u012b\7p\2\2\u012b\64\3\2\2\2\u012c"+
"\u012d\7o\2\2\u012d\u012e\7u\2\2\u012e\u012f\7i\2\2\u012f\u0130\7\60\2"+
"\2\u0130\u0131\7f\2\2\u0131\u0132\7c\2\2\u0132\u0133\7v\2\2\u0133\u0134"+
"\7c\2\2\u0134\66\3\2\2\2\u0135\u0136\7g\2\2\u0136\u0137\7n\2\2\u0137\u0138"+
"\7k\2\2\u0138\u0139\7h\2\2\u01398\3\2\2\2\u013a\u013b\7t\2\2\u013b\u013c"+
"\7g\2\2\u013c\u013d\7v\2\2\u013d\u013e\7w\2\2\u013e\u013f\7t\2\2\u013f"+
"\u0140\7p\2\2\u0140:\3\2\2\2\u0141\u0142\7o\2\2\u0142\u0143\7u\2\2\u0143"+
"\u0144\7i\2\2\u0144\u0145\7\60\2\2\u0145\u0146\7u\2\2\u0146\u0147\7g\2"+
"\2\u0147\u0148\7p\2\2\u0148\u0149\7f\2\2\u0149\u014a\7g\2\2\u014a\u014b"+
"\7t\2\2\u014b<\3\2\2\2\u014c\u014d\7e\2\2\u014d\u014e\7q\2\2\u014e\u014f"+
"\7p\2\2\u014f\u0150\7v\2\2\u0150\u0151\7t\2\2\u0151\u0152\7c\2\2\u0152"+
"\u0153\7e\2\2\u0153\u0154\7v\2\2\u0154\u0155\7\60\2\2\u0155\u0156\7d\2"+
"\2\u0156\u0157\7c\2\2\u0157\u0158\7n\2\2\u0158\u0159\7c\2\2\u0159\u015a"+
"\7p\2\2\u015a\u015b\7e\2\2\u015b\u015c\7g\2\2\u015c>\3\2\2\2\u015d\u015e"+
"\7c\2\2\u015e\u015f\7u\2\2\u015f\u0160\7o\2\2\u0160\u0161\7_\2\2\u0161"+
"@\3\2\2\2\u0162\u0163\7d\2\2\u0163\u0164\7n\2\2\u0164\u0165\7q\2\2\u0165"+
"\u0166\7e\2\2\u0166\u0167\7m\2\2\u0167\u0168\7\60\2\2\u0168\u0169\7i\2"+
"\2\u0169\u016a\7c\2\2\u016a\u016b\7u\2\2\u016b\u016c\7n\2\2\u016c\u016d"+
"\7k\2\2\u016d\u016e\7o\2\2\u016e\u016f\7k\2\2\u016f\u0170\7v\2\2\u0170"+
"B\3\2\2\2\u0171\u0172\7d\2\2\u0172\u0173\7n\2\2\u0173\u0174\7q\2\2\u0174"+
"\u0175\7e\2\2\u0175\u0176\7m\2\2\u0176\u0177\7\60\2\2\u0177\u0178\7p\2"+
"\2\u0178\u0179\7w\2\2\u0179\u017a\7o\2\2\u017a\u017b\7d\2\2\u017b\u017c"+
"\7g\2\2\u017c\u017d\7t\2\2\u017dD\3\2\2\2\u017e\u017f\7e\2\2\u017f\u0180"+
"\7q\2\2\u0180\u0181\7f\2\2\u0181\u0182\7g\2\2\u0182F\3\2\2\2\u0183\u0185"+
"\t\2\2\2\u0184\u0183\3\2\2\2\u0185\u0186\3\2\2\2\u0186\u0184\3\2\2\2\u0186"+
"\u0187\3\2\2\2\u0187H\3\2\2\2\u0188\u0189\7U\2\2\u0189\u018a\7V\2\2\u018a"+
"\u018b\7Q\2\2\u018b\u0361\7R\2\2\u018c\u018d\7C\2\2\u018d\u018e\7F\2\2"+
"\u018e\u0361\7F\2\2\u018f\u0190\7O\2\2\u0190\u0191\7W\2\2\u0191\u0361"+
"\7N\2\2\u0192\u0193\7U\2\2\u0193\u0194\7W\2\2\u0194\u0361\7D\2\2\u0195"+
"\u0196\7F\2\2\u0196\u0197\7K\2\2\u0197\u0361\7X\2\2\u0198\u0199\7U\2\2"+
"\u0199\u019a\7F\2\2\u019a\u019b\7K\2\2\u019b\u0361\7X\2\2\u019c\u019d"+
"\7O\2\2\u019d\u019e\7Q\2\2\u019e\u0361\7F\2\2\u019f\u01a0\7U\2\2\u01a0"+
"\u01a1\7O\2\2\u01a1\u01a2\7Q\2\2\u01a2\u0361\7F\2\2\u01a3\u01a4\7G\2\2"+
"\u01a4\u01a5\7Z\2\2\u01a5\u0361\7R\2\2\u01a6\u01a7\7P\2\2\u01a7\u01a8"+
"\7G\2\2\u01a8\u0361\7I\2\2\u01a9\u01aa\7N\2\2\u01aa\u0361\7V\2\2\u01ab"+
"\u01ac\7I\2\2\u01ac\u0361\7V\2\2\u01ad\u01ae\7U\2\2\u01ae\u01af\7N\2\2"+
"\u01af\u0361\7V\2\2\u01b0\u01b1\7U\2\2\u01b1\u01b2\7I\2\2\u01b2\u0361"+
"\7V\2\2\u01b3\u01b4\7G\2\2\u01b4\u0361\7S\2\2\u01b5\u01b6\7P\2\2\u01b6"+
"\u01b7\7Q\2\2\u01b7\u0361\7V\2\2\u01b8\u01b9\7C\2\2\u01b9\u01ba\7P\2\2"+
"\u01ba\u0361\7F\2\2\u01bb\u01bc\7Q\2\2\u01bc\u0361\7T\2\2\u01bd\u01be"+
"\7Z\2\2\u01be\u01bf\7Q\2\2\u01bf\u0361\7T\2\2\u01c0\u01c1\7D\2\2\u01c1"+
"\u01c2\7[\2\2\u01c2\u01c3\7V\2\2\u01c3\u0361\7G\2\2\u01c4\u01c5\7U\2\2"+
"\u01c5\u01c6\7J\2\2\u01c6\u01c7\7C\2\2\u01c7\u0361\7\65\2\2\u01c8\u01c9"+
"\7C\2\2\u01c9\u01ca\7F\2\2\u01ca\u01cb\7F\2\2\u01cb\u01cc\7T\2\2\u01cc"+
"\u01cd\7G\2\2\u01cd\u01ce\7U\2\2\u01ce\u0361\7U\2\2\u01cf\u01d0\7D\2\2"+
"\u01d0\u01d1\7C\2\2\u01d1\u01d2\7N\2\2\u01d2\u01d3\7C\2\2\u01d3\u01d4"+
"\7P\2\2\u01d4\u01d5\7E\2\2\u01d5\u0361\7G\2\2\u01d6\u01d7\7Q\2\2\u01d7"+
"\u01d8\7T\2\2\u01d8\u01d9\7K\2\2\u01d9\u01da\7I\2\2\u01da\u01db\7K\2\2"+
"\u01db\u0361\7P\2\2\u01dc\u01dd\7E\2\2\u01dd\u01de\7C\2\2\u01de\u01df"+
"\7N\2\2\u01df\u01e0\7N\2\2\u01e0\u01e1\7G\2\2\u01e1\u0361\7T\2\2\u01e2"+
"\u01e3\7E\2\2\u01e3\u01e4\7C\2\2\u01e4\u01e5\7N\2\2\u01e5\u01e6\7N\2\2"+
"\u01e6\u01e7\7X\2\2\u01e7\u01e8\7C\2\2\u01e8\u01e9\7N\2\2\u01e9\u01ea"+
"\7W\2\2\u01ea\u0361\7G\2\2\u01eb\u01ec\7E\2\2\u01ec\u01ed\7C\2\2\u01ed"+
"\u01ee\7N\2\2\u01ee\u01ef\7N\2\2\u01ef\u01f0\7F\2\2\u01f0\u01f1\7C\2\2"+
"\u01f1\u01f2\7V\2\2\u01f2\u01f3\7C\2\2\u01f3\u01f4\7N\2\2\u01f4\u01f5"+
"\7Q\2\2\u01f5\u01f6\7C\2\2\u01f6\u0361\7F\2\2\u01f7\u01f8\7E\2\2\u01f8"+
"\u01f9\7C\2\2\u01f9\u01fa\7N\2\2\u01fa\u01fb\7N\2\2\u01fb\u01fc\7F\2\2"+
"\u01fc\u01fd\7C\2\2\u01fd\u01fe\7V\2\2\u01fe\u01ff\7C\2\2\u01ff\u0200"+
"\7U\2\2\u0200\u0201\7K\2\2\u0201\u0202\7\\\2\2\u0202\u0361\7G\2\2\u0203"+
"\u0204\7E\2\2\u0204\u0205\7C\2\2\u0205\u0206\7N\2\2\u0206\u0207\7N\2\2"+
"\u0207\u0208\7F\2\2\u0208\u0209\7C\2\2\u0209\u020a\7V\2\2\u020a\u020b"+
"\7C\2\2\u020b\u020c\7E\2\2\u020c\u020d\7Q\2\2\u020d\u020e\7R\2\2\u020e"+
"\u0361\7[\2\2\u020f\u0210\7E\2\2\u0210\u0211\7Q\2\2\u0211\u0212\7F\2\2"+
"\u0212\u0213\7G\2\2\u0213\u0214\7U\2\2\u0214\u0215\7K\2\2\u0215\u0216"+
"\7\\\2\2\u0216\u0361\7G\2\2\u0217\u0218\7E\2\2\u0218\u0219\7Q\2\2\u0219"+
"\u021a\7F\2\2\u021a\u021b\7G\2\2\u021b\u021c\7E\2\2\u021c\u021d\7Q\2\2"+
"\u021d\u021e\7R\2\2\u021e\u0361\7[\2\2\u021f\u0220\7I\2\2\u0220\u0221"+
"\7C\2\2\u0221\u0222\7U\2\2\u0222\u0223\7R\2\2\u0223\u0224\7T\2\2\u0224"+
"\u0225\7K\2\2\u0225\u0226\7E\2\2\u0226\u0361\7G\2\2\u0227\u0228\7R\2\2"+
"\u0228\u0229\7T\2\2\u0229\u022a\7G\2\2\u022a\u022b\7X\2\2\u022b\u022c"+
"\7J\2\2\u022c\u022d\7C\2\2\u022d\u022e\7U\2\2\u022e\u0361\7J\2\2\u022f"+
"\u0230\7E\2\2\u0230\u0231\7Q\2\2\u0231\u0232\7K\2\2\u0232\u0233\7P\2\2"+
"\u0233\u0234\7D\2\2\u0234\u0235\7C\2\2\u0235\u0236\7U\2\2\u0236\u0361"+
"\7G\2\2\u0237\u0238\7V\2\2\u0238\u0239\7K\2\2\u0239\u023a\7O\2\2\u023a"+
"\u023b\7G\2\2\u023b\u023c\7U\2\2\u023c\u023d\7V\2\2\u023d\u023e\7C\2\2"+
"\u023e\u023f\7O\2\2\u023f\u0361\7R\2\2\u0240\u0241\7P\2\2\u0241\u0242"+
"\7W\2\2\u0242\u0243\7O\2\2\u0243\u0244\7D\2\2\u0244\u0245\7G\2\2\u0245"+
"\u0361\7T\2\2\u0246\u0247\7F\2\2\u0247\u0248\7K\2\2\u0248\u0249\7H\2\2"+
"\u0249\u024a\7H\2\2\u024a\u024b\7K\2\2\u024b\u024c\7E\2\2\u024c\u024d"+
"\7W\2\2\u024d\u024e\7N\2\2\u024e\u024f\7V\2\2\u024f\u0361\7[\2\2\u0250"+
"\u0251\7I\2\2\u0251\u0252\7C\2\2\u0252\u0253\7U\2\2\u0253\u0254\7N\2\2"+
"\u0254\u0255\7K\2\2\u0255\u0256\7O\2\2\u0256\u0257\7K\2\2\u0257\u0361"+
"\7V\2\2\u0258\u0259\7R\2\2\u0259\u025a\7Q\2\2\u025a\u0361\7R\2\2\u025b"+
"\u025c\7F\2\2\u025c\u025d\7W\2\2\u025d\u0361\7R\2\2\u025e\u025f\7U\2\2"+
"\u025f\u0260\7Y\2\2\u0260\u0261\7C\2\2\u0261\u0361\7R\2\2\u0262\u0263"+
"\7O\2\2\u0263\u0264\7N\2\2\u0264\u0265\7Q\2\2\u0265\u0266\7C\2\2\u0266"+
"\u0361\7F\2\2\u0267\u0268\7O\2\2\u0268\u0269\7U\2\2\u0269\u026a\7V\2\2"+
"\u026a\u026b\7Q\2\2\u026b\u026c\7T\2\2\u026c\u0361\7G\2\2\u026d\u026e"+
"\7O\2\2\u026e\u026f\7U\2\2\u026f\u0270\7V\2\2\u0270\u0271\7Q\2\2\u0271"+
"\u0272\7T\2\2\u0272\u0273\7G\2\2\u0273\u0361\7:\2\2\u0274\u0275\7U\2\2"+
"\u0275\u0276\7N\2\2\u0276\u0277\7Q\2\2\u0277\u0278\7C\2\2\u0278\u0361"+
"\7F\2\2\u0279\u027a\7U\2\2\u027a\u027b\7U\2\2\u027b\u027c\7V\2\2\u027c"+
"\u027d\7Q\2\2\u027d\u027e\7T\2\2\u027e\u0361\7G\2\2\u027f\u0280\7L\2\2"+
"\u0280\u0281\7W\2\2\u0281\u0282\7O\2\2\u0282\u0361\7R\2\2\u0283\u0284"+
"\7L\2\2\u0284\u0285\7W\2\2\u0285\u0286\7O\2\2\u0286\u0287\7R\2\2\u0287"+
"\u0361\7K\2\2\u0288\u0289\7R\2\2\u0289\u0361\7E\2\2\u028a\u028b\7O\2\2"+
"\u028b\u028c\7U\2\2\u028c\u028d\7K\2\2\u028d\u028e\7\\\2\2\u028e\u0361"+
"\7G\2\2\u028f\u0290\7I\2\2\u0290\u0291\7C\2\2\u0291\u0361\7U\2\2\u0292"+
"\u0293\7R\2\2\u0293\u0294\7W\2\2\u0294\u0295\7U\2\2\u0295\u0296\7J\2\2"+
"\u0296\u0361\7\63\2\2\u0297\u0298\7R\2\2\u0298\u0299\7W\2\2\u0299\u029a"+
"\7U\2\2\u029a\u029b\7J\2\2\u029b\u0361\7\64\2\2\u029c\u029d\7R\2\2\u029d"+
"\u029e\7W\2\2\u029e\u029f\7U\2\2\u029f\u02a0\7J\2\2\u02a0\u0361\7\65\2"+
"\2\u02a1\u02a2\7R\2\2\u02a2\u02a3\7W\2\2\u02a3\u02a4\7U\2\2\u02a4\u02a5"+
"\7J\2\2\u02a5\u0361\7\66\2\2\u02a6\u02a7\7R\2\2\u02a7\u02a8\7W\2\2\u02a8"+
"\u02a9\7U\2\2\u02a9\u02aa\7J\2\2\u02aa\u0361\7\67\2\2\u02ab\u02ac\7R\2"+
"\2\u02ac\u02ad\7W\2\2\u02ad\u02ae\7U\2\2\u02ae\u02af\7J\2\2\u02af\u0361"+
"\78\2\2\u02b0\u02b1\7R\2\2\u02b1\u02b2\7W\2\2\u02b2\u02b3\7U\2\2\u02b3"+
"\u02b4\7J\2\2\u02b4\u0361\79\2\2\u02b5\u02b6\7R\2\2\u02b6\u02b7\7W\2\2"+
"\u02b7\u02b8\7U\2\2\u02b8\u02b9\7J\2\2\u02b9\u0361\7:\2\2\u02ba\u02bb"+
"\7R\2\2\u02bb\u02bc\7W\2\2\u02bc\u02bd\7U\2\2\u02bd\u02be\7J\2\2\u02be"+
"\u0361\7;\2\2\u02bf\u02c0\7R\2\2\u02c0\u02c1\7W\2\2\u02c1\u02c2\7U\2\2"+
"\u02c2\u02c3\7J\2\2\u02c3\u02c4\7\63\2\2\u02c4\u0361\7\62\2\2\u02c5\u02c6"+
"\7R\2\2\u02c6\u02c7\7W\2\2\u02c7\u02c8\7U\2\2\u02c8\u02c9\7J\2\2\u02c9"+
"\u02ca\7\63\2\2\u02ca\u0361\7\63\2\2\u02cb\u02cc\7R\2\2\u02cc\u02cd\7"+
"W\2\2\u02cd\u02ce\7U\2\2\u02ce\u02cf\7J\2\2\u02cf\u02d0\7\63\2\2\u02d0"+
"\u0361\7\64\2\2\u02d1\u02d2\7R\2\2\u02d2\u02d3\7W\2\2\u02d3\u02d4\7U\2"+
"\2\u02d4\u02d5\7J\2\2\u02d5\u02d6\7\63\2\2\u02d6\u0361\7\65\2\2\u02d7"+
"\u02d8\7R\2\2\u02d8\u02d9\7W\2\2\u02d9\u02da\7U\2\2\u02da\u02db\7J\2\2"+
"\u02db\u02dc\7\63\2\2\u02dc\u0361\7\66\2\2\u02dd\u02de\7R\2\2\u02de\u02df"+
"\7W\2\2\u02df\u02e0\7U\2\2\u02e0\u02e1\7J\2\2\u02e1\u02e2\7\63\2\2\u02e2"+
"\u0361\7\67\2\2\u02e3\u02e4\7R\2\2\u02e4\u02e5\7W\2\2\u02e5\u02e6\7U\2"+
"\2\u02e6\u02e7\7J\2\2\u02e7\u02e8\7\63\2\2\u02e8\u0361\78\2\2\u02e9\u02ea"+
"\7R\2\2\u02ea\u02eb\7W\2\2\u02eb\u02ec\7U\2\2\u02ec\u02ed\7J\2\2\u02ed"+
"\u02ee\7\63\2\2\u02ee\u0361\79\2\2\u02ef\u02f0\7R\2\2\u02f0\u02f1\7W\2"+
"\2\u02f1\u02f2\7U\2\2\u02f2\u02f3\7J\2\2\u02f3\u02f4\7\63\2\2\u02f4\u0361"+
"\7:\2\2\u02f5\u02f6\7R\2\2\u02f6\u02f7\7W\2\2\u02f7\u02f8\7U\2\2\u02f8"+
"\u02f9\7J\2\2\u02f9\u02fa\7\63\2\2\u02fa\u0361\7;\2\2\u02fb\u02fc\7R\2"+
"\2\u02fc\u02fd\7W\2\2\u02fd\u02fe\7U\2\2\u02fe\u02ff\7J\2\2\u02ff\u0300"+
"\7\64\2\2\u0300\u0361\7\62\2\2\u0301\u0302\7R\2\2\u0302\u0303\7W\2\2\u0303"+
"\u0304\7U\2\2\u0304\u0305\7J\2\2\u0305\u0306\7\64\2\2\u0306\u0361\7\63"+
"\2\2\u0307\u0308\7R\2\2\u0308\u0309\7W\2\2\u0309\u030a\7U\2\2\u030a\u030b"+
"\7J\2\2\u030b\u030c\7\64\2\2\u030c\u0361\7\64\2\2\u030d\u030e\7R\2\2\u030e"+
"\u030f\7W\2\2\u030f\u0310\7U\2\2\u0310\u0311\7J\2\2\u0311\u0312\7\64\2"+
"\2\u0312\u0361\7\65\2\2\u0313\u0314\7R\2\2\u0314\u0315\7W\2\2\u0315\u0316"+
"\7U\2\2\u0316\u0317\7J\2\2\u0317\u0318\7\64\2\2\u0318\u0361\7\66\2\2\u0319"+
"\u031a\7R\2\2\u031a\u031b\7W\2\2\u031b\u031c\7U\2\2\u031c\u031d\7J\2\2"+
"\u031d\u031e\7\64\2\2\u031e\u0361\7\67\2\2\u031f\u0320\7R\2\2\u0320\u0321"+
"\7W\2\2\u0321\u0322\7U\2\2\u0322\u0323\7J\2\2\u0323\u0324\7\64\2\2\u0324"+
"\u0361\78\2\2\u0325\u0326\7R\2\2\u0326\u0327\7W\2\2\u0327\u0328\7U\2\2"+
"\u0328\u0329\7J\2\2\u0329\u032a\7\64\2\2\u032a\u0361\79\2\2\u032b\u032c"+
"\7R\2\2\u032c\u032d\7W\2\2\u032d\u032e\7U\2\2\u032e\u032f\7J\2\2\u032f"+
"\u0330\7\64\2\2\u0330\u0361\7:\2\2\u0331\u0332\7R\2\2\u0332\u0333\7W\2"+
"\2\u0333\u0334\7U\2\2\u0334\u0335\7J\2\2\u0335\u0336\7\64\2\2\u0336\u0361"+
"\7;\2\2\u0337\u0338\7R\2\2\u0338\u0339\7W\2\2\u0339\u033a\7U\2\2\u033a"+
"\u033b\7J\2\2\u033b\u033c\7\65\2\2\u033c\u0361\7\62\2\2\u033d\u033e\7"+
"R\2\2\u033e\u033f\7W\2\2\u033f\u0340\7U\2\2\u0340\u0341\7J\2\2\u0341\u0342"+
"\7\65\2\2\u0342\u0361\7\63\2\2\u0343\u0344\7R\2\2\u0344\u0345\7W\2\2\u0345"+
"\u0346\7U\2\2\u0346\u0347\7J\2\2\u0347\u0348\7\65\2\2\u0348\u0361\7\64"+
"\2\2\u0349\u034a\7E\2\2\u034a\u034b\7T\2\2\u034b\u034c\7G\2\2\u034c\u034d"+
"\7C\2\2\u034d\u034e\7V\2\2\u034e\u0361\7G\2\2\u034f\u0350\7E\2\2\u0350"+
"\u0351\7C\2\2\u0351\u0352\7N\2\2\u0352\u0361\7N\2\2\u0353\u0354\7T\2\2"+
"\u0354\u0355\7G\2\2\u0355\u0356\7V\2\2\u0356\u0357\7W\2\2\u0357\u0358"+
"\7T\2\2\u0358\u0361\7P\2\2\u0359\u035a\7U\2\2\u035a\u035b\7W\2\2\u035b"+
"\u035c\7K\2\2\u035c\u035d\7E\2\2\u035d\u035e\7K\2\2\u035e\u035f\7F\2\2"+
"\u035f\u0361\7G\2\2\u0360\u0188\3\2\2\2\u0360\u018c\3\2\2\2\u0360\u018f"+
"\3\2\2\2\u0360\u0192\3\2\2\2\u0360\u0195\3\2\2\2\u0360\u0198\3\2\2\2\u0360"+
"\u019c\3\2\2\2\u0360\u019f\3\2\2\2\u0360\u01a3\3\2\2\2\u0360\u01a6\3\2"+
"\2\2\u0360\u01a9\3\2\2\2\u0360\u01ab\3\2\2\2\u0360\u01ad\3\2\2\2\u0360"+
"\u01b0\3\2\2\2\u0360\u01b3\3\2\2\2\u0360\u01b5\3\2\2\2\u0360\u01b8\3\2"+
"\2\2\u0360\u01bb\3\2\2\2\u0360\u01bd\3\2\2\2\u0360\u01c0\3\2\2\2\u0360"+
"\u01c4\3\2\2\2\u0360\u01c8\3\2\2\2\u0360\u01cf\3\2\2\2\u0360\u01d6\3\2"+
"\2\2\u0360\u01dc\3\2\2\2\u0360\u01e2\3\2\2\2\u0360\u01eb\3\2\2\2\u0360"+
"\u01f7\3\2\2\2\u0360\u0203\3\2\2\2\u0360\u020f\3\2\2\2\u0360\u0217\3\2"+
"\2\2\u0360\u021f\3\2\2\2\u0360\u0227\3\2\2\2\u0360\u022f\3\2\2\2\u0360"+
"\u0237\3\2\2\2\u0360\u0240\3\2\2\2\u0360\u0246\3\2\2\2\u0360\u0250\3\2"+
"\2\2\u0360\u0258\3\2\2\2\u0360\u025b\3\2\2\2\u0360\u025e\3\2\2\2\u0360"+
"\u0262\3\2\2\2\u0360\u0267\3\2\2\2\u0360\u026d\3\2\2\2\u0360\u0274\3\2"+
"\2\2\u0360\u0279\3\2\2\2\u0360\u027f\3\2\2\2\u0360\u0283\3\2\2\2\u0360"+
"\u0288\3\2\2\2\u0360\u028a\3\2\2\2\u0360\u028f\3\2\2\2\u0360\u0292\3\2"+
"\2\2\u0360\u0297\3\2\2\2\u0360\u029c\3\2\2\2\u0360\u02a1\3\2\2\2\u0360"+
"\u02a6\3\2\2\2\u0360\u02ab\3\2\2\2\u0360\u02b0\3\2\2\2\u0360\u02b5\3\2"+
"\2\2\u0360\u02ba\3\2\2\2\u0360\u02bf\3\2\2\2\u0360\u02c5\3\2\2\2\u0360"+
"\u02cb\3\2\2\2\u0360\u02d1\3\2\2\2\u0360\u02d7\3\2\2\2\u0360\u02dd\3\2"+
"\2\2\u0360\u02e3\3\2\2\2\u0360\u02e9\3\2\2\2\u0360\u02ef\3\2\2\2\u0360"+
"\u02f5\3\2\2\2\u0360\u02fb\3\2\2\2\u0360\u0301\3\2\2\2\u0360\u0307\3\2"+
"\2\2\u0360\u030d\3\2\2\2\u0360\u0313\3\2\2\2\u0360\u0319\3\2\2\2\u0360"+
"\u031f\3\2\2\2\u0360\u0325\3\2\2\2\u0360\u032b\3\2\2\2\u0360\u0331\3\2"+
"\2\2\u0360\u0337\3\2\2\2\u0360\u033d\3\2\2\2\u0360\u0343\3\2\2\2\u0360"+
"\u0349\3\2\2\2\u0360\u034f\3\2\2\2\u0360\u0353\3\2\2\2\u0360\u0359\3\2"+
"\2\2\u0361J\3\2\2\2\u0362\u0363\7z\2\2\u0363\u0364\7q\2\2\u0364\u0365"+
"\7t\2\2\u0365L\3\2\2\2\u0366\u0367\7(\2\2\u0367\u036c\7(\2\2\u0368\u0369"+
"\7c\2\2\u0369\u036a\7p\2\2\u036a\u036c\7f\2\2\u036b\u0366\3\2\2\2\u036b"+
"\u0368\3\2\2\2\u036cN\3\2\2\2\u036d\u036e\7~\2\2\u036e\u0372\7~\2\2\u036f"+
"\u0370\7q\2\2\u0370\u0372\7t\2\2\u0371\u036d\3\2\2\2\u0371\u036f\3\2\2"+
"\2\u0372P\3\2\2\2\u0373\u0378\7#\2\2\u0374\u0375\7p\2\2\u0375\u0376\7"+
"q\2\2\u0376\u0378\7v\2\2\u0377\u0373\3\2\2\2\u0377\u0374\3\2\2\2\u0378"+
"R\3\2\2\2\u0379\u037a\7?\2\2\u037aT\3\2\2\2\u037b\u037d\7\17\2\2\u037c"+
"\u037b\3\2\2\2\u037c\u037d\3\2\2\2\u037d\u037e\3\2\2\2\u037e\u0382\7\f"+
"\2\2\u037f\u0381\7\"\2\2\u0380\u037f\3\2\2\2\u0381\u0384\3\2\2\2\u0382"+
"\u0380\3\2\2\2\u0382\u0383\3\2\2\2\u0383V\3\2\2\2\u0384\u0382\3\2\2\2"+
"\u0385\u0387\t\3\2\2\u0386\u0385\3\2\2\2\u0387\u0388\3\2\2\2\u0388\u0386"+
"\3\2\2\2\u0388\u0389\3\2\2\2\u0389\u038a\3\2\2\2\u038a\u038b\b,\2\2\u038b"+
"X\3\2\2\2\u038c\u0390\7%\2\2\u038d\u038f\n\4\2\2\u038e\u038d\3\2\2\2\u038f"+
"\u0392\3\2\2\2\u0390\u038e\3\2\2\2\u0390\u0391\3\2\2\2\u0391\u0393\3\2"+
"\2\2\u0392\u0390\3\2\2\2\u0393\u0394\b-\3\2\u0394Z\3\2\2\2\u0395\u0399"+
"\t\5\2\2\u0396\u0398\t\6\2\2\u0397\u0396\3\2\2\2\u0398\u039b\3\2\2\2\u0399"+
"\u0397\3\2\2\2\u0399\u039a\3\2\2\2\u039a\\\3\2\2\2\u039b\u0399\3\2\2\2"+
"\u039c\u039d\t\7\2\2\u039d^\3\2\2\2\u039e\u039f\t\b\2\2\u039f`\3\2\2\2"+
"\u03a0\u03a6\t\t\2\2\u03a1\u03a2\7>\2\2\u03a2\u03a6\7?\2\2\u03a3\u03a4"+
"\7@\2\2\u03a4\u03a6\7?\2\2\u03a5\u03a0\3\2\2\2\u03a5\u03a1\3\2\2\2\u03a5"+
"\u03a3\3\2\2\2\u03a6b\3\2\2\2\u03a7\u03a8\7?\2\2\u03a8\u03ac\7?\2\2\u03a9"+
"\u03aa\7#\2\2\u03aa\u03ac\7?\2\2\u03ab\u03a7\3\2\2\2\u03ab\u03a9\3\2\2"+
"\2\u03acd\3\2\2\2\u03ad\u03ae\7(\2\2\u03aef\3\2\2\2\u03af\u03b0\7~\2\2"+
"\u03b0h\3\2\2\2\u03b1\u03b2\t\n\2\2\u03b2j\3\2\2\2\u03b3\u03b4\7\62\2"+
"\2\u03b4\u03b8\7z\2\2\u03b5\u03b6\7\62\2\2\u03b6\u03b8\7Z\2\2\u03b7\u03b3"+
"\3\2\2\2\u03b7\u03b5\3\2\2\2\u03b8\u03ba\3\2\2\2\u03b9\u03bb\5i\65\2\u03ba"+
"\u03b9\3\2\2\2\u03bb\u03bc\3\2\2\2\u03bc\u03ba\3\2\2\2\u03bc\u03bd\3\2"+
"\2\2\u03bdl\3\2\2\2\21\2\u0186\u0360\u036b\u0371\u0377\u037c\u0382\u0388"+
"\u0390\u0399\u03a5\u03ab\u03b7\u03bc";
public static final ATN _ATN =
ATNSimulator.deserialize(_serializedATN.toCharArray());
static {

View File

@ -292,7 +292,7 @@ public class SerpentToAssemblyCompiler extends SerpentBaseVisitor<String> {
i += 32;
}
return String.format(" MEMSIZE %s %d SWAP MSTORE ", arrayInit, arraySize);
return String.format(" MSIZE %s %d SWAP MSTORE ", arrayInit, arraySize);
}
@Override
@ -545,7 +545,7 @@ public class SerpentToAssemblyCompiler extends SerpentBaseVisitor<String> {
String operand0 = visit(ctx.expression());
return String.format(" %s MEMSIZE SWAP MEMSIZE MSTORE 32 SWAP RETURN ", operand0);
return String.format(" %s MSIZE SWAP MSIZE MSTORE 32 SWAP RETURN ", operand0);
}
@Override

View File

@ -87,7 +87,7 @@ public enum OpCode {
JUMP(0x58),
JUMPI(0x59),
PC(0x5a),
MEMSIZE(0x5b),
MSIZE(0x5b),
GAS(0x5c),
/**

View File

@ -340,7 +340,7 @@ public class VM {
program.step();
}
break;
case MEMSIZE:{
case MSIZE:{
int memSize = program.getMemSize();
DataWord wordMemSize = new DataWord(memSize);

View File

@ -1258,7 +1258,7 @@ public class SerpentCompileTest {
String code = "c = 2\n" +
"d = 3\n" +
"a = [11, 22, 33]" ;
String expected = "0 63 MSTORE8 2 0 MSTORE 3 32 MSTORE MEMSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE";
String expected = "0 63 MSTORE8 2 0 MSTORE 3 32 MSTORE MSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE";
String asmResult = SerpentCompiler.compile(code);
Assert.assertEquals(expected, asmResult);
@ -1269,7 +1269,7 @@ public class SerpentCompileTest {
public void test46(){
String code = "a = [11, 22, 33]\n" +
"a[ 2 ] = 3" ;
String expected = "MEMSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 3 32 2 MUL 32 ADD 0 ADD 0 ADD MSTORE";
String expected = "MSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 3 32 2 MUL 32 ADD 0 ADD 0 ADD MSTORE";
String asmResult = SerpentCompiler.compile(code);
Assert.assertEquals(expected, asmResult);
@ -1282,7 +1282,7 @@ public class SerpentCompileTest {
"b = [12, 14]\n" +
"c = [22, 24, 25]\n" +
"c[ 0 ] = 3" ;
String expected = "MEMSIZE DUP 32 ADD 2 SWAP MSTORE DUP 64 ADD 4 SWAP MSTORE DUP 96 ADD 6 SWAP MSTORE 128 SWAP MSTORE MEMSIZE DUP 32 ADD 12 SWAP MSTORE DUP 64 ADD 14 SWAP MSTORE 96 SWAP MSTORE MEMSIZE DUP 32 ADD 22 SWAP MSTORE DUP 64 ADD 24 SWAP MSTORE DUP 96 ADD 25 SWAP MSTORE 128 SWAP MSTORE 3 32 0 MUL 32 ADD 224 ADD 0 ADD MSTORE";
String expected = "MSIZE DUP 32 ADD 2 SWAP MSTORE DUP 64 ADD 4 SWAP MSTORE DUP 96 ADD 6 SWAP MSTORE 128 SWAP MSTORE MSIZE DUP 32 ADD 12 SWAP MSTORE DUP 64 ADD 14 SWAP MSTORE 96 SWAP MSTORE MSIZE DUP 32 ADD 22 SWAP MSTORE DUP 64 ADD 24 SWAP MSTORE DUP 96 ADD 25 SWAP MSTORE 128 SWAP MSTORE 3 32 0 MUL 32 ADD 224 ADD 0 ADD MSTORE";
String asmResult = SerpentCompiler.compile(code);
Assert.assertEquals(expected, asmResult);
}
@ -1293,7 +1293,7 @@ public class SerpentCompileTest {
"c = 2\n" +
"a = [11, 22, 33]\n" +
"a[ 2 ] = 3" ;
String expected = "0 63 MSTORE8 1 0 MSTORE 2 32 MSTORE MEMSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 3 32 2 MUL 32 ADD 0 ADD 64 ADD MSTORE";
String expected = "0 63 MSTORE8 1 0 MSTORE 2 32 MSTORE MSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 3 32 2 MUL 32 ADD 0 ADD 64 ADD MSTORE";
String asmResult = SerpentCompiler.compile(code);
Assert.assertEquals(expected, asmResult);
@ -1306,7 +1306,7 @@ public class SerpentCompileTest {
String code = "c = [5]\n" +
"a = [11, 22, 33]\n" +
"b = a [0]" ;
String expected = "0 31 MSTORE8 MEMSIZE DUP 32 ADD 5 SWAP MSTORE 64 SWAP MSTORE MEMSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 32 0 MUL 64 ADD 32 ADD MLOAD 0 MSTORE";
String expected = "0 31 MSTORE8 MSIZE DUP 32 ADD 5 SWAP MSTORE 64 SWAP MSTORE MSIZE DUP 32 ADD 11 SWAP MSTORE DUP 64 ADD 22 SWAP MSTORE DUP 96 ADD 33 SWAP MSTORE 128 SWAP MSTORE 32 0 MUL 64 ADD 32 ADD MLOAD 0 MSTORE";
String asmResult = SerpentCompiler.compile(code);
Assert.assertEquals(expected, asmResult);

View File

@ -1836,8 +1836,8 @@ public class VMTest {
}
@Test // MEMSIZE OP
public void testMEMSIZE_1(){
@Test // MSIZE OP
public void testMSIZE_1(){
VM vm = new VM();
Program program = new Program(Hex.decode("5B"));
@ -1849,8 +1849,8 @@ public class VMTest {
assertEquals(s_expected_1, Hex.toHexString(item1.data).toUpperCase());
}
@Test // MEMSIZE OP
public void testMEMSIZE_2(){
@Test // MSIZE OP
public void testMSIZE_2(){
VM vm = new VM();
Program program = new Program(Hex.decode("60206030545B"));