# This file is AUTO-GENERATED. DO NOT MODIFY # To regenerate: run "python3 -m tokenizer_generator.gen_state_machine tokenizer_generator/state_transition.txt tokenizer_generator/tokenizer_template.py" import codecs import re import sys from blib2to3.pgen2.token import * if sys.version < '3': from array import array def toarray(b): return array('B', b) else: def toarray(b): return b IDENTIFIER_CLASS = 1 IDENTIFIER_CONTINUE_CLASS = 2 ERROR_CLASS = 0 # 3586 entries in ID index ID_INDEX = toarray( b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x01\x11\x12\x13\x01\x14\x15\x16\x17\x18\x19\x1a\x1b\x01\x1c' b'\x1d\x1e\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f !"\x1f#$\x1f\x1f\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01%\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01&' b"\x01\x01\x01\x01'\x01()*+,-\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01.\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01/0\x01123' b'456789\x01:;<=>?@\x1fABCDEFGHIJKL\x1fMNO\x1f' b'\x01\x01\x01PQR\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01\x01\x01S\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x01\x01T\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01UV\x1f\x1fWX\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01Y\x01\x01Z\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01[\\\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f]\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f^_\x1f`abc\x1f\x1fd\x1f\x1f\x1f\x1f\x1f' b'efg\x1f\x1f\x1f\x1f\x1fhi\x1f\x1f\x1f\x1fj\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01k\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01lm\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01n\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01' b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01o\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x01\x01p\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f\x1f' b'\x1fq' ) ID_CHUNKS = ( toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x84\x10\x00UUUUU\x15UUUUUUU\x15UU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05PUU\x05\x00\x00\x00U\x01\x00\x11\x00\x00\x00\x00'), toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaaUQPE\x00\x90\x15QUUUUEUUUUUUUUUUUUUUUUUUUUEUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x85\xaaPUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUTUUUUUUUU\x15\x04\x00UUUUUUUUUU\x01\x00\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a(\x8a\x00\x00UUUUUU\x15@\x15\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\xaa\xaa*\x00UUUUUUUUUU\x95\xaa\xaa\xaa\xaa\xaa\xaa\xaa\nPVUUUUUUUUUUUUUUUUUUUUUUUU\xa4\xaa\x82\xaa\x96\xa2Z\xaa\xaaZA'), toarray(b'\x00\x00\x00\x00YUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa*TUUUUUUUUUUUUUUUUUUUUU\xa5\xaa\xaa\x06\x00\x00\x00\xaa\xaaZUUUUUUU\x95\xaa\xaa\x05\x10\x08'), toarray(b'UUUUU\xa5\x9a\xaa\xaa\xa9\xa9\n\x00\x00\x00\x00UUUUUU\xa9\x00UU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUQU\x05\x00\x00\x00\x00\x80\xaa\xaa\xaa\x8a\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), toarray(b'\xaaUUUUUUUUUUUUU\xa5\xa6\xaa\xaa\xaa\xaa\xa9\xaaUU\xa5\xa0\xaa\xaaTUUU\xa9TUAAUUUUUQU\x11P\x05\xa6\xaa\x82\x82\x1a\x00\x80\x00E\xa5\xa0\xaa\xaa\x05\x00\x00!'), toarray(b'\xa8T\x15@AUUUUUQUQ\x14\x05\xa2*\x80\x82\n\x08\x00T\x11\x00\xa0\xaa\xaaZ\t\x00\x00\xa8TUEEUUUUUQUQT\x05\xa6\xaa\x8a\x8a\n\x01\x00\x00\x00\xa5\xa0\xaa\xaa\x00\x00\xa4\xaa'), toarray(b'\xa8TUAAUUUUUQUQT\x05\xa6\xaa\x82\x82\n\x00\xa0\x00E\xa5\xa0\xaa\xaa\x04\x00\x00\x00`T\x15PQ\x05\x14Q@\x01\x15PUU\x05\xa0*\xa0\xa2\n\x01\x80\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x00'), toarray(b'\xaaVUQQUUUUUQUUU\x05\xa4\xaa\xa2\xa2\n\x00(\x15\x00\xa5\xa0\xaa\xaa\x00\x00\x00\x00\xa9TUQQUUUUUQUUT\x05\xa6\xaa\xa2\xa2\n\x00(\x00\x10\xa5\xa0\xaa\xaa\x14\x00\x00\x00'), toarray(b'\xaaTUQQUUUUUUUUU\x95\xa6\xaa\xa2\xa2\x1a\x00\x95\x00@\xa5\xa0\xaa\xaa\x00\x00PU\xa0TUUU\x15PUUUUUEUU\x04U\x15 \x80\xaa"\xaa\xaa\x00\xa0\xaa\xaa\xa0\x00\x00\x00'), toarray(b'TUUUUUUUUUUUY\xaa*\x00U\x95\xaa*\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14Q\x15UUUUUUDUUY\xaa\xaa\x06U\x11\xaa\n\xaa\xaa\nU\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x01\x00\x00\x00\x00\x00\n\x00\xaa\xaa\n\x00\x00\x88\x08\xa0UUTUUUUUUUU\x01\xa8\xaa\xaa\xaa\xaa\xa2U\xa9\xaa\xaa\xa8\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUU\x95\xaa\xaa\xaa\xaaj\xaa\xaa\n\x00U\xa5Z\xa5\xa6\x96\xaaZ\xa9VUU\xa5\xaa\xaa\x9a\xaa\xaa\xaa\nUUUUUUUUUE\x00\x04UUUUUUUUUU\x15U'), toarray(b'UUUUUUUUUUUUUUUUUUQ\x05U\x15Q\x05UUUUUUUUUUQ\x05UUUUUUUUQ\x05U\x15Q\x05UUU\x15UUUUUUUUUU'), toarray(b'UUUUQ\x05UUUUUUUUUUUUUUUU\x15\xa8\x00\x00\xa8\xaa\n\x00\x00\x00UUUU\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUU\x05U\x05'), toarray(b'TUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUTUUUUU\x15\x00UUUUUUUUUUUUUUUUUU\x15PUU\x01\x00'), toarray(b'UUUQ\xa5\x02\x00\x00UUUU\xa5\x02\x00\x00UUUU\xa5\x00\x00\x00UUUQ\xa1\x00\x00\x00UUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa@\x00\t\xaa\xaa\n\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x80\n\xaa\xaa\n\x00UUUUUUUUUUUUUUUUUUUUUU\x01\x00UUUUUUUUUU\x19\x00UUUUUUUUUUUUUUUUU\x05\x00\x00'), toarray(b'UUUUUUU\x15\xaa\xaa\xaa\x00\xaa\xaa\xaa\x00\x00\xa0\xaa\xaaUUUUUUU\x05U\x01\x00\x00UUUUUUUUUUU\x00UUUUUU\x05\x00\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUU\x95\xaa\x00UUUUUUUUUUUUU\xa9\xaa*\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x82\xaa\xaa\n\x00\xaa\xaa\n\x00\x00@\x00\x00\xaa\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\xaaVUUUUUUUUUUU\xaa\xaa\xaa\xaaVU\x00\xaa\xaa\n\x00\x00\x00\x80\xaa\xaa\x00\x00\x00jUUUUUUU\xa9\xaa\xaaZ\xaa\xaaZUUUUUUUUUU\xa5\xaa\xaa\xaa\x00\x00\x00'), toarray(b'UUUUUUUUU\xaa\xaa\xaa\xaa\xaa\x00\x00\xaa\xaa\nT\xaa\xaaZUUUUUUUU\x05UU\x01\x00UUUUUUUUUU\x15T\x00\x00\x00\x00*\xaa\xaa\xaa\xaa\xaaVYU\x96\x1a\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x8a\xaa'), toarray(b'UUUUU\x05U\x05UUUUUUUUU\x05U\x05UUDDUUUUUUU\x05UUUUUUUUUUUUUQU\x11PQU\x01UPU\x00UUU\x01PQU\x01'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x02\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x04\x00\x00@\x00\x00\x00\x00UUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\xaa\x02\x08\xa8\xaa\xaa\x02\x00\x00\x00'), toarray(b'\x10@PUU\x04U\x05\x00\x11QUUU\x05U\x00T\x05\x10\x00\x00\x00\x00UUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUU\x15UUUUUUUUUUU\x15UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01@\x95Z\x00\x00\x00'), toarray(b'UUUUUUUUUE\x00\x04UUUUUUUUUUUUUU\x00@\x00\x00\x00\x80UUUUU\x15\x00\x00U\x15U\x15U\x15U\x15U\x15U\x15U\x15U\x15\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00T\x00\x00\x00\x00\x00\x00TU\xa5\xaaT\x05U\x01TUUUUUUUUUUUUUUUUUUUU\x15hUTUUUUUUUUUUUUUUUUUUUUU\x15U'), toarray(b'\x00TUUUUUUUUUUTUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x05'), toarray(b'UUU\x01UUUU\xaa\xaaZ\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\x00\xaa\xaaJUUUUUUU\xa5UUUUUUUUUUUUUUUUUUUU\n\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00@UUPUUUUUUUUUUUUUUUUUUUUUUUUUAUUUUUUUUUUUUUP\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00@UU'), toarray(b'ee\x95UUUUU\x95\xaa\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x00\x00\x00ZUUUUUUUUUUUU\xaa\xaa\xaa\xaa\n\x00\x00\xaa\xaa\n\x00\xaa\xaa\xaa\xaaZU@\x94'), toarray(b'\xaa\xaaZUUUUUU\xa5\xaa\nUUUUU\x95\xaa\xaa\xaa\x00\x00\x00UUUUUUU\x01\xaaUUUUUUUUUUU\x95\xaa\xaa\xaa\x02\x00\x00@\xaa\xaa\n\x00UYUU\xaa\xaaZ\x15'), toarray(b'UUUUUUUUUU\xa9\xaa\xaa*\x00\x00\x95UU\n\xaa\xaa\n\x00UUUUU\x15\x90ZUUUUUUUUUUUU\xa6\x96V\xa5\x19\x00\x00\x00\x00\x00@\x05UU\x95\xaaP)\x00\x00'), toarray(b'T\x15T\x15T\x15\x00\x00U\x15U\x15UUUUUUUUUU\x15UUU\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUU\x95\xaa*\n\xaa\xaa\n\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00\x00UUUUU\x15@UUUUUUUUUUUU\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'U\x15\x00\x00@U\x00dUUQUU\x15U\x11EQUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00@UUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUU\x05\x00\x00\x00\x00UUUUUUUUUUUUUUUUPUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUU\x00'), toarray(b'\xaa\xaa\xaa\xaa\x00\x00\x00\x00\xaa\xaa\xaa\xaa\x80\x02\x00\x00\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\x00UQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01'), toarray(b'\x00\x00\x00\x00\xaa\xaa\n\x00TUUUUU\x15\x80TUUUUU\x15\x00\x00PUUUUUUUUUUUUUUUUUUUUU\x15PUPUPUP\x01\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUTUUUUU\x15UUUU\x15EUUU\x05UUU\x05\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUUUUUUU\x01\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUU\x00\x00\x00TUUUUUU\x15\x00UUUUUUUUU\xa5*\x00UUUUUUU\x05UUUUUUUUU\x00UUT\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\xaa\xaa\n\x00UUUUUUUUU\x00UUUUUUUUU\x00'), toarray(b'UUUUUUUUUU\x00\x00UUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUU\x15\x00\x00UUUUU\x05\x00\x00UU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'U\x05QUUUUUUUUUUE\x01AUUUUU\x05\x00\x00UUUUU\x15\x00\x00UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x15\x05\x00\x00'), toarray(b'UUUUU\x05\x00\x00UUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x00P\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\xa9(\x00\xaaUTTUUUUUU\x05*\x80\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x01UUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00UUTUUUUUU)\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUU\x05\x00\x00UUUUU\x05\x00\x00UUUU\x15\x00\x00\x00UUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00UUUUUUUUUUUU\x15\x00\x00\x00'), toarray(b'UUUUUUUUU\xaa\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUU\x01\x00@\x00\x00UUUUU\xa5\xaa\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUU\x15\x00\x00'), toarray(b'jUUUUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\xa0\xaa\xaa\x00\x00\x00\x80jUUUUUUUUUUU\xaa\xaa*\x00\x00\x00\x00\x00UUUUUU\x01\x00\xaa\xaa\n\x00'), toarray(b'jUUUUUUUU\x95\xaa\xaa\xaa\xa2\xaa\xaa\x00)\x00\x00UUUUUUUU\x95\x10\x00\x00jUUUUUUUUUUU\x95\xaa\xaa\xaaV\x01\xa8\x02\xaa\xaa\x1a\x01\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUEUUUUUU\xaa\xaa\xaa\x00 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00U\x15QEUUUEUU\x01\x00UUUUUUUUUUU\x95\xaa\xaa*\x00\xaa\xaa\n\x00'), toarray(b'\xaaTUAAUUUUUQUQT\x85\xa6\xaa\x82\x82\n\x01\x80\x00T\xa5\xa0\xaa\x02\xaa\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUU\xa9\xaa\xaa\xaaj\x15\x00\xaa\xaa\n`\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUU\xaa\xaa\xaa\xaa\xaaE\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\x95\xaa\n\xaa\xaa\x02\x00\x00\x00\x00\x00U\n\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUU\xaa\xaa\xaa\xaa\x02\x01\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUU\x95\xaa\xaa\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUU\x15\xa8\xaa\xaa\xaa\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUU\xaa\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\xaa\xaa\n\x00\x00\x00\x00@'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUPUUUUUUUUU\xa9\xaa\xa0\xaaF\x02\x00\x00\x00\x00\x00\x00'), toarray(b'\xa9\xaajUUUUUUUUU\x95\xaa\x9a*\x00\x80\x00\x00\xa9\xaa\xaaUUUUUUUUUUU\xa5\xaa\xaa\xaa\n\x04\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUU\x01\x00'), toarray(b'UUQUUUUUUUU\x95\xaa*\xaa\xaa\x01\x00\x00\x00\xaa\xaa\n\x00\x00\x00\x00\x00PUUUUUUU\xa0\xaa\xaa\xaa\xaa\xaa\xa8\xaa\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'U\x15EUUUUUUUUU\xa9* \x8a\xaa\x9a\x00\x00\xaa\xaa\n\x00UEQUUUUUUU\xa5*\x8a\xaa\x01\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUU\x95*\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUU\x01\x00UUUUUUU\x15\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUU\x05\xaa\x02\x00\x00'), toarray(b'UUUUUUUUUUUU\xaa*\x00\x00U\x00\x00\x00\xaa\xaa\n\x00@UUUUU\x00TUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUUUUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUU\x15\x80\xa9\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x80jUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00E\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00'), toarray(b'UUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00U\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00UUU\x01UU\x01\x00UU\x05(\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\n\xa8*\x00\x80\xaa*\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\xa0\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUQUUUUUUUUUUUUUUUUUQ\x10\x14TQUUETUTUUUUUUUUUUUUUU'), toarray(b'UE\x15TUQUQUUUUUUE\x15U\x11PUQUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05UUUUUUQUUUUU\x15UUUUUUU\x15U'), toarray(b'UUUUUQUUUUUUUQUUUUU\x15UUUUUUU\x15UUUUUUQUUUUUUUQUUUUU\x15UU\xa0\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa'), toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa*\x80\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x02\x00\x08\x00\x00\x00\x02\x00\x00\x00\x00\x80\xaa\xa8\xaa\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\xaa*\xaa\xaa\xaa\xaa\x82\xaa\x8a\xa2*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUU\x01\xaajU\x05\xaa\xaa\n\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00UUUUUUUUUUU\xaa\xaa\xaa\n\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\xaa*\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUU\xaaj\x00\xaa\xaa\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UTUUUUUU\x14ATU\x15UD\x00\x10@DT\x14ADD\x14A\x15U\x15UT\x11UUEUUUU\x00TTEUUUU\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x15\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUUUUUUUU\x01\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUU\x05UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x05\x00\x00\x00UUUUUUUUUUUUUUUUUUUU'), toarray(b'UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\x01\x00\x00\x00\x00\x00\x00\x00'), toarray(b'UUUUUUU\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), toarray(b'\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x00\x00\x00\x00'), ) #0 = ERROR_CLASS(0) #1 = IDENTIFIER_CLASS(1) #2 = CharacterClass 2 [] #3 = CharacterClass 3 ['\t', ' '] #4 = CharacterClass 4 ['\n', '\r'] #5 = CharacterClass 5 ['\x0c'] #6 = CharacterClass 6 ['!'] #7 = CharacterClass 7 ['"'] #8 = CharacterClass 8 ['#'] #9 = CharacterClass 9 ['$'] #10 = CharacterClass 10 ['%', '&', '^', '|'] #11 = CharacterClass 11 ["'"] #12 = CharacterClass 12 ['('] #13 = CharacterClass 13 [')'] #14 = CharacterClass 14 ['*'] #15 = CharacterClass 15 ['+'] #16 = CharacterClass 16 [','] #17 = CharacterClass 17 ['-'] #18 = CharacterClass 18 ['.'] #19 = CharacterClass 19 ['/'] #20 = CharacterClass 20 ['0'] #21 = CharacterClass 21 ['1'] #22 = CharacterClass 22 ['2', '3', '4', '5', '6', '7'] #23 = CharacterClass 23 ['8', '9'] #24 = CharacterClass 24 [':'] #25 = CharacterClass 25 [';'] #26 = CharacterClass 26 ['<'] #27 = CharacterClass 27 ['='] #28 = CharacterClass 28 ['>'] #29 = CharacterClass 29 ['@'] #30 = CharacterClass 30 ['A', 'C', 'D', 'c'] #31 = CharacterClass 31 ['B', 'b'] #32 = CharacterClass 32 ['E'] #33 = CharacterClass 33 ['F', 'f'] #34 = CharacterClass 34 ['J', 'j'] #35 = CharacterClass 35 ['L'] #36 = CharacterClass 36 ['N'] #37 = CharacterClass 37 ['O', 'o'] #38 = CharacterClass 38 ['R'] #39 = CharacterClass 39 ['U', 'u'] #40 = CharacterClass 40 ['X', 'x'] #41 = CharacterClass 41 ['['] #42 = CharacterClass 42 ['\\'] #43 = CharacterClass 43 [']'] #44 = CharacterClass 44 ['_'] #45 = CharacterClass 45 ['`'] #46 = CharacterClass 46 ['a', 'd'] #47 = CharacterClass 47 ['e'] #48 = CharacterClass 48 ['l'] #49 = CharacterClass 49 ['r'] #50 = CharacterClass 50 ['s'] #51 = CharacterClass 51 ['{'] #52 = CharacterClass 52 ['}'] #53 = CharacterClass 53 ['~'] CLASS_TABLE = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x04\x00\x05\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x06\x07\x08\t\n\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x16\x16\x16\x16\x16\x17\x17\x18\x19\x1a\x1b\x1c\x00\x1d\x1e\x1f\x1e\x1e !\x01\x01\x01"\x01#\x01$%\x01\x01&\x01\x01\'\x01\x01(\x01\x01)*+\n,-.\x1f\x1e./!\x01\x01\x01"\x010\x01\x01%\x01\x0112\x01\'\x01\x01(\x01\x013\n45\x00') B00 = toarray(b'\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01') B01 = toarray(b'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii') B02 = toarray(b'cccabaccdccccccccccccccccccccccccccccccccccccccccccccc') B03 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"%>') B04 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x11\x08\x08\x08\x08\x03\x03\x08\x08\x08\x08\x08\x08\x08\x08\x08\x03\x08\x08\x08\x08') B05 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x05\x08\x08\x08\x04\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') B06 = toarray(b'\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\t\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b') B07 = toarray(b'\x0e\x0e\x0e\x0e\x0e\x0e\x0e\n\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e\x0e') B08 = toarray(b'YVVYYYYYYYYYYYYYYYYYVVVVYYYYYYVVVVVVVVVVVYYYVYVVVVVYYY') B09 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x0c\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') B10 = toarray(b'\r\r\r\r\r\r\r\x0f\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') B11 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B12 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x11\x08\x08\x08\x08') B13 = toarray(b'\x08\x08\x08\x08\x08\x08\x08\x13\x08\x08\x08\x12\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08') B14 = toarray(b'\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x14\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16\x16') B15 = toarray(b'\x18\x18\x18\x18\x18\x18\x18\x15\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18\x18') B16 = toarray(b'\r\r\r\r\r\r\r\r\r\r\r\x17\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') B17 = toarray(b'\r\r\r\r\r\r\r\x19\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r') B18 = toarray(b'\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1c\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e\x1e') B19 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1d\x1a\x1a') B20 = toarray(b'\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1d\x1a\x1d') B21 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B22 = toarray(b'---------------------------,--------------------------') B23 = toarray(b'--------------------------+,,-------------------------') B24 = toarray(b'---------------------------,+-------------------------') B25 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00,\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00.\x00\x00..\x00\x00\x00') B26 = toarray(b'111111111111111111111111111011111111111111111111111111') B27 = toarray(b'555555555555555555555555555,55555555555555555555555555') B28 = toarray(b'888888888888888888887777888888888888888888888888888888') B29 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIOIIPIIIIII') B30 = toarray(b'-------------------+-------,--------------------------') B31 = toarray(b'--------------+------------,--------------------------') B32 = toarray(b'---------------------------,<-------------------------') B33 = toarray(b'IIIIIIIIIIIIIIIIIINI@@@@IIIIIIIIQIAAIIIIIIIIBIIPAIIIII') B34 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIJQIAAIGIILIIIFIIPAIIIII') B35 = toarray(b'IIIIIIIIIIIIIIIIIINIEEEEIIIIIIIIQIAAIIIIIIIIFIIPAIIIII') B36 = toarray(b'IIIIIIIIIIIIIIIIIIIIJJIIIIIIIIIIIIIAIIIIIIIIKIIIAIIIII') B37 = toarray(b'IIIIIIIIIIIIIIIIIIIIGGGIIIIIIIIIIIIAIIIIIIIIHIIIAIIIII') B38 = toarray(b'IIIIIIIIIIIIIIIIIIIILLLLIIIIIILLLLIAIIIIIIIIMILLAIIIII') B39 = toarray(b'CCCCCCCCCCCCCCCCCCCC@@@@CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B40 = toarray(b'CCCCCCCCCCCCCCCCCCCCEEEECCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B41 = toarray(b'CCCCCCCCCCCCCCCCCCCCGGGCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B42 = toarray(b'CCCCCCCCCCCCCCCCCCCCJJCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B43 = toarray(b'CCCCCCCCCCCCCCCCCCCCLLLLCCCCCCLLLLCCCCCCCCCCCCLLCCCCCC') B44 = toarray(b'IIIIIIIIIIIIIIIIIIII7777IIIIIIIIQIAIIIIIIIIIIIIPIIIIII') B45 = toarray(b'CCCCCCCCCCCCCCCCCCCC7777CCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B46 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCRCCCCC') B47 = toarray(b'CCCCCCCCCCCCCCCQCQCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B48 = toarray(b'IIIIIIIIIIIIIIIIIIIISSSSIIIIIIIIIIAIIIIIIIIITIIIIIIIII') B49 = toarray(b'CCCCCCCCCCCCCCCCCCCCSSSSCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B50 = toarray(b'ZXXZZZZZZZZZZZZZZZZZXXXXZZZZZZXXXXXXXXXXXZZZXZXXXXXZZZ') B51 = toarray(b']]]]\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]') B52 = toarray(b'____^_________________________________________________') B53 = toarray(b'CCCCgCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC') B54 = toarray(b'hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh') B55 = toarray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') B56 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"n>') B57 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B58 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B59 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B60 = toarray(b'ssss\x1fssssssrssssssssssssssssssssssssssssssssssssssssss') B61 = toarray(b'ssss\x1fssssssossssssssssssssssssssssssssssssssssssssssss') B62 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a') B63 = toarray(b'ssss\x1fssrssssssssssssssssssssssssssssssssssssssssssssss') B64 = toarray(b'ssss\x1fssossssssssssssssssssssssssssssssssssssssssssssss') B65 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B66 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B67 = toarray(b'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu\x1auu') B68 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B69 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B70 = toarray(b'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\x1avv') B71 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1a\x1a\x1a\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B72 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1ao\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B73 = toarray(b'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\x1axx') B74 = toarray(b'\x1a\x1a\x1a\x1ap\x1a\x1aw\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B75 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B76 = toarray(b'ssss\x1fsssssssssssssssssssssssssssssssssssssssssssssssss') B77 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1a\x1a\x1a\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B78 = toarray(b'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy\x1ayy') B79 = toarray(b'ssss\x1fsssssswssssssssssssssssssssssssssssssssssssssssss') B80 = toarray(b'\x1a\x1a\x1a\x1a\x1f\x1a\x1aq\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1at\x1a\x1a') B81 = toarray(b'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz\x1azz') B82 = toarray(b'ssss\x1fsswssssssssssssssssssssssssssssssssssssssssssssss') B83 = toarray(b'jUjekj*\x07[W=\x06 l9=2;6:D???|3(\')4U\x02U\x10UUUU\x02\x02U!fmU&UUU\x02U"{>') B84 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a{\x1a') B85 = toarray(b'jUje`j*\x07[W=\x06 #9=2;6:D???/3(\')4U\x02U\x10UUUU\x02\x02U!f$U&UUU\x02U"\x7f>') B86 = toarray(b'\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1b\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a}~\x1a') B87 = toarray(b'\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80\x80') DEFAULT = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) PAREN = (B00, B01, B02, B56, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) STRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B57, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) STRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B58, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) STRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B59, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B55, ) STRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B62, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B55, ) FSTRING_SDSSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B65, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) FSTRING_SD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B68, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) FSTRING_START_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B69, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B70, ) FSTRING_S = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B71, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) FSTRING_START_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B72, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B73, ) FSTRING_D = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B74, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B67, ) FSTRING_SSSDDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B75, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B76, B76, B67, ) FSTRING_START_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B61, B78, ) FSTRING_SSS = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B77, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B60, B79, B67, ) FSTRING_START_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B64, B81, ) FSTRING_DDD = (B00, B01, B02, B03, B04, B05, B06, B07, B08, B09, B10, B80, B12, B13, B14, B15, B16, B17, B18, B19, B20, B66, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B63, B82, B67, ) FSTRING_EXPR = (B00, B01, B02, B83, B04, B05, B06, B07, B08, B09, B10, B84, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) FORMAT_SPECIFIER = (B00, B01, B02, B85, B04, B05, B06, B07, B08, B09, B10, B86, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) PENDING_DEDENT = (B00, B01, B02, B87, B04, B05, B06, B07, B08, B09, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B22, B26, B27, B28, B29, B30, B31, B32, B33, B34, B35, B36, B37, B38, B39, B40, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B51, B52, B53, B54, B55, B55, B55, ) TRANSITION_STATE_NAMES = { id(DEFAULT): 'default', id(PAREN): 'paren', id(STRING_S): 'string_s', id(STRING_D): 'string_d', id(STRING_SSS): 'string_sss', id(STRING_DDD): 'string_ddd', id(FSTRING_SDSSSDDD): 'fstring_sdsssddd', id(FSTRING_SD): 'fstring_sd', id(FSTRING_START_S): 'fstring_start_s', id(FSTRING_S): 'fstring_s', id(FSTRING_START_D): 'fstring_start_d', id(FSTRING_D): 'fstring_d', id(FSTRING_SSSDDD): 'fstring_sssddd', id(FSTRING_START_SSS): 'fstring_start_sss', id(FSTRING_SSS): 'fstring_sss', id(FSTRING_START_DDD): 'fstring_start_ddd', id(FSTRING_DDD): 'fstring_ddd', id(FSTRING_EXPR): 'fstring_expr', id(FORMAT_SPECIFIER): 'format_specifier', id(PENDING_DEDENT): 'pending_dedent', } START_SUPER_STATE = DEFAULT ''' Lookup table based tokenizer with state popping and pushing capabilities. The ability to push and pop state is required for handling parenthesised expressions, indentation, and f-strings. We also use it for handling the different quotation mark types, but it is not essential for that, merely convenient. ''' class Tokenizer(object): def __init__(self, text): self.text = text self.index = 0 self.line_start_index = 0 self.token_start_index = 0 self.token_start = 1, 0 self.line = 1 self.super_state = START_SUPER_STATE self.state_stack = [] self.indents = [0] def action_0(self): self.index -= 1 self.index += 1 return None def action_1(self): self.token_start_index = self.index self.token_start = self.line, self.index-self.line_start_index self.index += 1 return None def action_2(self): self.index -= 1 self.state_stack.append(self.super_state) self.super_state = STRING_S self.index += 1 return None def action_3(self): self.state_stack.append(self.super_state) self.super_state = STRING_SSS self.index += 1 return None def action_4(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_5(self): self.index -= 1 self.state_stack.append(self.super_state) self.super_state = STRING_D self.index += 1 return None def action_6(self): self.state_stack.append(self.super_state) self.super_state = STRING_DDD self.index += 1 return None def action_7(self): self.index -= 1 self.state_stack.append(self.super_state) self.super_state = FSTRING_START_S self.index += 1 return None def action_8(self): self.state_stack.append(self.super_state) self.super_state = FSTRING_START_SSS self.index += 1 return None def action_9(self): self.index -= 1 self.state_stack.append(self.super_state) self.super_state = FSTRING_START_D self.index += 1 return None def action_10(self): self.state_stack.append(self.super_state) self.super_state = FSTRING_START_DDD self.index += 1 return None def action_11(self): self.line_start_index = self.index+1 self.line += 1 self.index += 1 return None def action_12(self): end = self.line, self.index-self.line_start_index+1 result = [LPAR, u"(", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.state_stack.append(self.super_state) self.super_state = PAREN self.index += 1 return result def action_13(self): end = self.line, self.index-self.line_start_index+1 result = [LSQB, u"[", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.state_stack.append(self.super_state) self.super_state = PAREN self.index += 1 return result def action_14(self): end = self.line, self.index-self.line_start_index+1 result = [LBRACE, u"{", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.state_stack.append(self.super_state) self.super_state = PAREN self.index += 1 return result def action_15(self): end = self.line, self.index-self.line_start_index+1 result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_16(self): end = self.line, self.index-self.line_start_index+1 result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_17(self): end = self.line, self.index-self.line_start_index+1 result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_18(self): end = self.line, self.index-self.line_start_index+1 result = [BACKQUOTE, u'`', (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_19(self): end = self.line, self.index-self.line_start_index+1 result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_20(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [OP, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_21(self): end = self.line, self.index-self.line_start_index+1 result = [CONVERSION, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_22(self): end = self.line, self.index-self.line_start_index+1 result = [COLONEQUAL, u":=", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_23(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [COLON, u":", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_24(self): end = self.line, self.index-self.line_start_index+1 result = [COMMA, u",", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_25(self): end = self.line, self.index-self.line_start_index+1 result = [SEMI, u";", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_26(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [AT, u"@", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_27(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [DOT, u".", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_28(self): end = self.line, self.index-self.line_start_index+1 result = [RARROW, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_29(self): end = self.line, self.index-self.line_start_index+1 result = [OP, u'~', (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_30(self): end = self.line, self.index-self.line_start_index+1 result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_31(self): end = self.line, self.index-self.line_start_index+1 result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_32(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_33(self): self.index -= 1 self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [NUMBER, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_34(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [NAME, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_35(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [DOLLARNAME, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_36(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [COMMENT, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_37(self): end = self.line, self.index-self.line_start_index+1 result = [NEWLINE, u"\n", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.line_start_index = self.index+1 self.line += 1 self.index += 1 return result def action_38(self): return self.emit_indent() def action_39(self): self.index -= 1 self.token_start_index = self.index self.token_start = self.line, self.index-self.line_start_index self.index += 1 return None def action_40(self): self.token_start_index = self.index self.token_start = self.line, self.index-self.line_start_index end = self.line, self.index-self.line_start_index+1 result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_41(self): self.token_start_index = self.index self.token_start = self.line, self.index-self.line_start_index self.line_start_index = self.index+1 self.line += 1 self.index += 1 return None def action_42(self): end = self.line, self.index-self.line_start_index+1 result = [RPAR, u")", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.index += 1 return result def action_43(self): end = self.line, self.index-self.line_start_index+1 result = [RSQB, u"]", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.index += 1 return result def action_44(self): end = self.line, self.index-self.line_start_index+1 result = [RBRACE, u"}", (self.line, self.index-self.line_start_index), end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.index += 1 return result def action_45(self): self.super_state = self.state_stack.pop() end = self.line, self.index-self.line_start_index+1 result = [STRING, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_46(self): self.super_state = self.state_stack.pop() end = self.line, self.index-self.line_start_index+1 result = [ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.line_start_index = self.index+1 self.line += 1 self.index += 1 return result def action_47(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_MID, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.state_stack.append(self.super_state) self.super_state = FSTRING_EXPR self.index += 1 return result def action_48(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.state_stack.append(self.super_state) self.super_state = FSTRING_S self.state_stack.append(self.super_state) self.super_state = FSTRING_EXPR self.index += 1 return result def action_49(self): self.super_state = self.state_stack.pop() end = self.line, self.index-self.line_start_index+1 result = [FSTRING_END, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_50(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.state_stack.append(self.super_state) self.super_state = FSTRING_D self.state_stack.append(self.super_state) self.super_state = FSTRING_EXPR self.index += 1 return result def action_51(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.state_stack.append(self.super_state) self.super_state = FSTRING_SSS self.state_stack.append(self.super_state) self.super_state = FSTRING_EXPR self.index += 1 return result def action_52(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_START, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.state_stack.append(self.super_state) self.super_state = FSTRING_DDD self.state_stack.append(self.super_state) self.super_state = FSTRING_EXPR self.index += 1 return result def action_53(self): self.super_state = self.state_stack.pop() self.token_start_index = self.index self.token_start = self.line, self.index-self.line_start_index self.index += 1 return None def action_54(self): end = self.line, self.index-self.line_start_index+1 result = [COLON, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.state_stack.append(self.super_state) self.super_state = FORMAT_SPECIFIER self.index += 1 return result def action_55(self): end = self.line, self.index-self.line_start_index+1 result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.index += 1 return result def action_56(self): self.index -= 1 end = self.line, self.index-self.line_start_index+1 result = [FSTRING_SPEC, self.text[self.token_start_index:self.index+1], self.token_start, end] self.token_start = end self.token_start_index = self.index+1 self.super_state = self.state_stack.pop() self.index += 1 return result def action_57(self): self.super_state = self.state_stack.pop() return self.emit_indent() def tokens(self, debug=False): text = self.text cls_table = CLASS_TABLE id_index = ID_INDEX id_chunks = ID_CHUNKS max_id = len(id_index)*256 action_table = [ (1, None), (2, self.action_0), (4, self.action_1), (5, None), (6, None), (7, None), (6, self.action_1), (7, self.action_1), (8, self.action_0), (9, None), (10, None), (11, self.action_2), (11, self.action_3), (3, self.action_4), (11, self.action_5), (11, self.action_6), (12, self.action_1), (13, None), (14, None), (15, None), (16, None), (17, None), (11, self.action_7), (11, self.action_8), (11, self.action_9), (11, self.action_10), (11, None), (18, None), (19, None), (20, None), (21, self.action_0), (11, self.action_11), (3, self.action_12), (3, self.action_13), (3, self.action_14), (3, self.action_15), (3, self.action_16), (3, self.action_17), (3, self.action_18), (22, self.action_1), (23, self.action_1), (24, self.action_1), (25, self.action_1), (26, None), (3, self.action_19), (3, self.action_20), (3, self.action_21), (27, None), (3, self.action_22), (3, self.action_23), (3, self.action_24), (3, self.action_25), (28, self.action_1), (3, self.action_26), (29, self.action_1), (30, None), (3, self.action_27), (32, self.action_1), (31, self.action_1), (33, self.action_1), (3, self.action_28), (26, self.action_1), (3, self.action_29), (34, self.action_1), (34, None), (3, self.action_30), (40, None), (1, self.action_31), (35, self.action_1), (36, None), (41, None), (38, None), (42, None), (3, self.action_32), (37, None), (43, None), (39, None), (44, None), (45, None), (46, None), (47, None), (48, None), (3, self.action_33), (49, None), (50, None), (8, self.action_1), (8, None), (51, self.action_1), (51, None), (3, self.action_34), (3, self.action_35), (52, self.action_1), (3, self.action_36), (52, None), (2, self.action_36), (53, None), (2, self.action_37), (2, None), (2, self.action_11), (3, self.action_38), (53, self.action_1), (3, None), (54, None), (55, self.action_11), (3, self.action_39), (3, self.action_0), (3, self.action_40), (3, self.action_41), (3, self.action_42), (3, self.action_43), (3, self.action_44), (3, self.action_45), (1, self.action_46), (56, None), (57, None), (11, self.action_0), (58, None), (3, self.action_47), (3, self.action_48), (3, self.action_49), (3, self.action_50), (3, self.action_51), (3, self.action_52), (11, self.action_53), (11, self.action_54), (3, self.action_55), (11, self.action_56), (11, self.action_1), (3, self.action_57), ] state = 0 try: if debug: while True: c = ord(text[self.index]) if c < 128: cls = cls_table[c] elif c >= max_id: cls = ERROR_CLASS else: b = id_chunks[id_index[c>>8]][(c>>2)&63] cls = (b>>((c&3)*2))&3 prev_state = state print("char = '%s', state=%d, cls=%d" % (text[self.index], state, cls)) state, transition = action_table[self.super_state[state][cls]] print ("%s -> %s on %r in %s" % (prev_state, state, text[self.index], TRANSITION_STATE_NAMES[id(self.super_state)])) if transition: tkn = transition() if tkn: yield tkn else: self.index += 1 else: while True: c = ord(text[self.index]) if c < 128: cls = cls_table[c] elif c >= max_id: cls = ERROR_CLASS else: b = id_chunks[id_index[c>>8]][(c>>2)&63] cls = (b>>((c&3)*2))&3 state, transition = action_table[self.super_state[state][cls]] if transition: tkn = transition() if tkn: yield tkn else: self.index += 1 except IndexError as ex: if self.index != len(text): #Reraise index error cls = cls_table[c] trans = self.super_state[state] action_index = trans[cls] action_table[action_index] # Not raised? Must have been raised in transition function. raise ex tkn = self.emit_indent() while tkn is not None: yield tkn tkn = self.emit_indent() end = self.line, self.index-self.line_start_index yield ENDMARKER, u"", self.token_start, end return def emit_indent(self): indent = 0 index = self.line_start_index current = self.index here = self.line, current-self.line_start_index while index < current: if self.text[index] == ' ': indent += 1 elif self.text[index] == '\t': indent = (indent+8) & -8 elif self.text[index] == '\f': indent = 0 else: #Unexpected state. Emit error token while len(self.indents) > 1: self.indents.pop() result = ERRORTOKEN, self.text[self.token_start_index:self.index+1], self.token_start, here self.token_start = here self.line_start_index = self.index return result index += 1 if indent == self.indents[-1]: self.token_start = here self.token_start_index = self.index return None elif indent > self.indents[-1]: self.indents.append(indent) start = self.line, 0 result = INDENT, self.text[self.line_start_index:current], start, here self.token_start = here self.token_start_index = current return result else: self.indents.pop() if indent > self.indents[-1]: #Illegal indent result = ILLEGALINDENT, u"", here, here else: result = DEDENT, u"", here, here if indent < self.indents[-1]: #More dedents to do self.state_stack.append(self.super_state) self.super_state = PENDING_DEDENT self.token_start = here self.token_start_index = self.index return result ENCODING_RE = re.compile(br'.*coding[:=]\s*([-\w.]+).*') NEWLINE_BYTES = b'\n' def encoding_from_source(source): 'Returns encoding of source (bytes), plus source strip of any BOM markers.' #Check for BOM if source.startswith(codecs.BOM_UTF8): return 'utf8', source[len(codecs.BOM_UTF8):] if source.startswith(codecs.BOM_UTF16_BE): return 'utf-16be', source[len(codecs.BOM_UTF16_BE):] if source.startswith(codecs.BOM_UTF16_LE): return 'utf-16le', source[len(codecs.BOM_UTF16_LE):] try: first_new_line = source.find(NEWLINE_BYTES) first_line = source[:first_new_line] second_new_line = source.find(NEWLINE_BYTES, first_new_line+1) second_line = source[first_new_line+1:second_new_line] match = ENCODING_RE.match(first_line) or ENCODING_RE.match(second_line) if match: ascii_encoding = match.groups()[0] if sys.version < "3": encoding = ascii_encoding else: encoding = ascii_encoding.decode("ascii") # Handle non-standard encodings that are recognised by the interpreter. if encoding.startswith("utf-8-"): encoding = "utf-8" elif encoding == "iso-latin-1": encoding = "iso-8859-1" elif encoding.startswith("latin-1-"): encoding = "iso-8859-1" elif encoding.startswith("iso-8859-1-"): encoding = "iso-8859-1" elif encoding.startswith("iso-latin-1-"): encoding = "iso-8859-1" return encoding, source except Exception as ex: print(ex) #Failed to determine encoding -- Just treat as default. pass return 'utf-8', source