Module runflow.hcl2_parser

Expand source code
# The file was automatically generated by Lark v0.11.3
__version__ = "0.11.3"

#
#
#   Lark Stand-alone Generator Tool
# ----------------------------------
# Generates a stand-alone LALR(1) parser with a standard lexer
#
# Git:    https://github.com/erezsh/lark
# Author: Erez Shinan (erezshin@gmail.com)
#
#
#    >>> LICENSE
#
#    This tool and its generated code use a separate license from Lark,
#    and are subject to the terms of the Mozilla Public License, v. 2.0.
#    If a copy of the MPL was not distributed with this
#    file, You can obtain one at https://mozilla.org/MPL/2.0/.
#
#    If you wish to purchase a commercial license for this tool and its
#    generated code, you may contact me via email or otherwise.
#
#    If MPL2 is incompatible with your free or open-source project,
#    contact me and we'll work it out.
#
#

from io import open



class LarkError(Exception):
    pass


class ConfigurationError(LarkError, ValueError):
    pass


def assert_config(value, options, msg='Got %r, expected one of %s'):
    if value not in options:
        raise ConfigurationError(msg % (value, options))


class GrammarError(LarkError):
    pass


class ParseError(LarkError):
    pass


class LexError(LarkError):
    pass


class UnexpectedInput(LarkError):
    #--
    pos_in_stream = None
    _terminals_by_name = None

    def get_context(self, text, span=40):
        #--
        assert self.pos_in_stream is not None, self
        pos = self.pos_in_stream
        start = max(pos - span, 0)
        end = pos + span
        if not isinstance(text, bytes):
            before = text[start:pos].rsplit('\n', 1)[-1]
            after = text[pos:end].split('\n', 1)[0]
            return before + after + '\n' + ' ' * len(before.expandtabs()) + '^\n'
        else:
            before = text[start:pos].rsplit(b'\n', 1)[-1]
            after = text[pos:end].split(b'\n', 1)[0]
            return (before + after + b'\n' + b' ' * len(before.expandtabs()) + b'^\n').decode("ascii", "backslashreplace")

    def match_examples(self, parse_fn, examples, token_type_match_fallback=False, use_accepts=False):
        #--
        assert self.state is not None, "Not supported for this exception"

        if isinstance(examples, dict):
            examples = examples.items()

        candidate = (None, False)
        for i, (label, example) in enumerate(examples):
            assert not isinstance(example, STRING_TYPE)

            for j, malformed in enumerate(example):
                try:
                    parse_fn(malformed)
                except UnexpectedInput as ut:
                    if ut.state == self.state:
                        if use_accepts and hasattr(self, 'accepts') and ut.accepts != self.accepts:
                            logger.debug("Different accepts with same state[%d]: %s != %s at example [%s][%s]" %
                                         (self.state, self.accepts, ut.accepts, i, j))
                            continue
                        try:
                            if ut.token == self.token:  ##

                                logger.debug("Exact Match at example [%s][%s]" % (i, j))
                                return label

                            if token_type_match_fallback:
                                ##

                                if (ut.token.type == self.token.type) and not candidate[-1]:
                                    logger.debug("Token Type Fallback at example [%s][%s]" % (i, j))
                                    candidate = label, True

                        except AttributeError:
                            pass
                        if candidate[0] is None:
                            logger.debug("Same State match at example [%s][%s]" % (i, j))
                            candidate = label, False

        return candidate[0]

    def _format_expected(self, expected):
        if self._terminals_by_name:
            d = self._terminals_by_name
            expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
        return "Expected one of: \n\t* %s\n" % '\n\t* '.join(expected)


class UnexpectedEOF(ParseError, UnexpectedInput):
    def __init__(self, expected, state=None, terminals_by_name=None):
        self.expected = expected
        self.state = state
        from .lexer import Token
        self.token = Token("<EOF>", "")  ##

        self.pos_in_stream = -1
        self.line = -1
        self.column = -1
        self._terminals_by_name = terminals_by_name

        super(UnexpectedEOF, self).__init__()

    def __str__(self):
        message = "Unexpected end-of-input. "
        message += self._format_expected(self.expected)
        return message


class UnexpectedCharacters(LexError, UnexpectedInput):
    def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None, token_history=None,
                 terminals_by_name=None, considered_rules=None):
        ##

        self.line = line
        self.column = column
        self.pos_in_stream = lex_pos
        self.state = state
        self._terminals_by_name = terminals_by_name

        self.allowed = allowed
        self.considered_tokens = considered_tokens
        self.considered_rules = considered_rules
        self.token_history = token_history

        if isinstance(seq, bytes):
            self.char = seq[lex_pos:lex_pos + 1].decode("ascii", "backslashreplace")
        else:
            self.char = seq[lex_pos]
        self._context = self.get_context(seq)

        super(UnexpectedCharacters, self).__init__()

    def __str__(self):
        message = "No terminal matches '%s' in the current parser context, at line %d col %d" % (self.char, self.line, self.column)
        message += '\n\n' + self._context
        if self.allowed:
            message += self._format_expected(self.allowed)
        if self.token_history:
            message += '\nPrevious tokens: %s\n' % ', '.join(repr(t) for t in self.token_history)
        return message


class UnexpectedToken(ParseError, UnexpectedInput):
    #--

    def __init__(self, token, expected, considered_rules=None, state=None, interactive_parser=None, terminals_by_name=None, token_history=None):
        ##

        self.line = getattr(token, 'line', '?')
        self.column = getattr(token, 'column', '?')
        self.pos_in_stream = getattr(token, 'pos_in_stream', None)
        self.state = state

        self.token = token
        self.expected = expected  ##

        self._accepts = NO_VALUE
        self.considered_rules = considered_rules
        self.interactive_parser = interactive_parser
        self._terminals_by_name = terminals_by_name
        self.token_history = token_history

        super(UnexpectedToken, self).__init__()

    @property
    def accepts(self):
        if self._accepts is NO_VALUE:
            self._accepts = self.interactive_parser and self.interactive_parser.accepts()
        return self._accepts

    def __str__(self):
        message = ("Unexpected token %r at line %s, column %s.\n%s"
                   % (self.token, self.line, self.column, self._format_expected(self.accepts or self.expected)))
        if self.token_history:
            message += "Previous tokens: %r\n" % self.token_history

        return message

    @property
    def puppet(self):
        warn("UnexpectedToken.puppet attribute has been renamed to interactive_parser", DeprecationWarning)
        return self.interactive_parser
    


class VisitError(LarkError):
    #--

    def __init__(self, rule, obj, orig_exc):
        self.obj = obj
        self.orig_exc = orig_exc

        message = 'Error trying to process rule "%s":\n\n%s' % (rule, orig_exc)
        super(VisitError, self).__init__(message)


import sys, re
import logging
from io import open
logger = logging.getLogger("lark")
logger.addHandler(logging.StreamHandler())
##

##

logger.setLevel(logging.CRITICAL)

if sys.version_info[0]>2:
    from abc import ABC, abstractmethod
else:
    from abc import ABCMeta, abstractmethod
    class ABC(object): ##

        __slots__ = ()
        __metclass__ = ABCMeta


Py36 = (sys.version_info[:2] >= (3, 6))

NO_VALUE = object()


def classify(seq, key=None, value=None):
    d = {}
    for item in seq:
        k = key(item) if (key is not None) else item
        v = value(item) if (value is not None) else item
        if k in d:
            d[k].append(v)
        else:
            d[k] = [v]
    return d


def _deserialize(data, namespace, memo):
    if isinstance(data, dict):
        if '__type__' in data:  ##

            class_ = namespace[data['__type__']]
            return class_.deserialize(data, memo)
        elif '@' in data:
            return memo[data['@']]
        return {key:_deserialize(value, namespace, memo) for key, value in data.items()}
    elif isinstance(data, list):
        return [_deserialize(value, namespace, memo) for value in data]
    return data


class Serialize(object):
    #--

    def memo_serialize(self, types_to_memoize):
        memo = SerializeMemoizer(types_to_memoize)
        return self.serialize(memo), memo.serialize()

    def serialize(self, memo=None):
        if memo and memo.in_types(self):
            return {'@': memo.memoized.get(self)}

        fields = getattr(self, '__serialize_fields__')
        res = {f: _serialize(getattr(self, f), memo) for f in fields}
        res['__type__'] = type(self).__name__
        postprocess = getattr(self, '_serialize', None)
        if postprocess:
            postprocess(res, memo)
        return res

    @classmethod
    def deserialize(cls, data, memo):
        namespace = getattr(cls, '__serialize_namespace__', {})
        namespace = {c.__name__:c for c in namespace}

        fields = getattr(cls, '__serialize_fields__')

        if '@' in data:
            return memo[data['@']]

        inst = cls.__new__(cls)
        for f in fields:
            try:
                setattr(inst, f, _deserialize(data[f], namespace, memo))
            except KeyError as e:
                raise KeyError("Cannot find key for class", cls, e)
        postprocess = getattr(inst, '_deserialize', None)
        if postprocess:
            postprocess()
        return inst


class SerializeMemoizer(Serialize):
    #--

    __serialize_fields__ = 'memoized',

    def __init__(self, types_to_memoize):
        self.types_to_memoize = tuple(types_to_memoize)
        self.memoized = Enumerator()

    def in_types(self, value):
        return isinstance(value, self.types_to_memoize)

    def serialize(self):
        return _serialize(self.memoized.reversed(), None)

    @classmethod
    def deserialize(cls, data, namespace, memo):
        return _deserialize(data, namespace, memo)


try:
    STRING_TYPE = basestring
except NameError:   ##

    STRING_TYPE = str


import types
from functools import wraps, partial
from contextlib import contextmanager

Str = type(u'')
try:
    classtype = types.ClassType  ##

except AttributeError:
    classtype = type    ##



def smart_decorator(f, create_decorator):
    if isinstance(f, types.FunctionType):
        return wraps(f)(create_decorator(f, True))

    elif isinstance(f, (classtype, type, types.BuiltinFunctionType)):
        return wraps(f)(create_decorator(f, False))

    elif isinstance(f, types.MethodType):
        return wraps(f)(create_decorator(f.__func__, True))

    elif isinstance(f, partial):
        ##

        return wraps(f.func)(create_decorator(lambda *args, **kw: f(*args[1:], **kw), True))

    else:
        return create_decorator(f.__func__.__call__, True)


try:
    import regex
except ImportError:
    regex = None

import sre_parse
import sre_constants
categ_pattern = re.compile(r'\\p{[A-Za-z_]+}')

def get_regexp_width(expr):
    if regex:
        ##

        ##

        ##

        regexp_final = re.sub(categ_pattern, 'A', expr)
    else:
        if re.search(categ_pattern, expr):
            raise ImportError('`regex` module must be installed in order to use Unicode categories.', expr)
        regexp_final = expr
    try:
        return [int(x) for x in sre_parse.parse(regexp_final).getwidth()]
    except sre_constants.error:
        raise ValueError(expr)


from collections import OrderedDict


class Meta:
    def __init__(self):
        self.empty = True


class Tree(object):
    #--
    def __init__(self, data, children, meta=None):
        self.data = data
        self.children = children
        self._meta = meta

    @property
    def meta(self):
        if self._meta is None:
            self._meta = Meta()
        return self._meta

    def __repr__(self):
        return 'Tree(%r, %r)' % (self.data, self.children)

    def _pretty_label(self):
        return self.data

    def _pretty(self, level, indent_str):
        if len(self.children) == 1 and not isinstance(self.children[0], Tree):
            return [indent_str*level, self._pretty_label(), '\t', '%s' % (self.children[0],), '\n']

        l = [indent_str*level, self._pretty_label(), '\n']
        for n in self.children:
            if isinstance(n, Tree):
                l += n._pretty(level+1, indent_str)
            else:
                l += [indent_str*(level+1), '%s' % (n,), '\n']

        return l

    def pretty(self, indent_str='  '):
        #--
        return ''.join(self._pretty(0, indent_str))

    def __eq__(self, other):
        try:
            return self.data == other.data and self.children == other.children
        except AttributeError:
            return False

    def __ne__(self, other):
        return not (self == other)

    def __hash__(self):
        return hash((self.data, tuple(self.children)))

    def iter_subtrees(self):
        #--
        queue = [self]
        subtrees = OrderedDict()
        for subtree in queue:
            subtrees[id(subtree)] = subtree
            queue += [c for c in reversed(subtree.children)
                      if isinstance(c, Tree) and id(c) not in subtrees]

        del queue
        return reversed(list(subtrees.values()))

    def find_pred(self, pred):
        #--
        return filter(pred, self.iter_subtrees())

    def find_data(self, data):
        #--
        return self.find_pred(lambda t: t.data == data)


from inspect import getmembers, getmro


class Discard(Exception):
    #--
    pass

##



class _Decoratable:
    #--

    @classmethod
    def _apply_decorator(cls, decorator, **kwargs):
        mro = getmro(cls)
        assert mro[0] is cls
        libmembers = {name for _cls in mro[1:] for name, _ in getmembers(_cls)}
        for name, value in getmembers(cls):

            ##

            if name.startswith('_') or (name in libmembers and name not in cls.__dict__):
                continue
            if not callable(value):
                continue

            ##

            if hasattr(cls.__dict__[name], 'vargs_applied') or hasattr(value, 'vargs_applied'):
                continue

            static = isinstance(cls.__dict__[name], (staticmethod, classmethod))
            setattr(cls, name, decorator(value, static=static, **kwargs))
        return cls

    def __class_getitem__(cls, _):
        return cls


class Transformer(_Decoratable):
    #--
    __visit_tokens__ = True   ##


    def __init__(self,  visit_tokens=True):
        self.__visit_tokens__ = visit_tokens

    def _call_userfunc(self, tree, new_children=None):
        ##

        children = new_children if new_children is not None else tree.children
        try:
            f = getattr(self, tree.data)
        except AttributeError:
            return self.__default__(tree.data, children, tree.meta)
        else:
            try:
                wrapper = getattr(f, 'visit_wrapper', None)
                if wrapper is not None:
                    return f.visit_wrapper(f, tree.data, children, tree.meta)
                else:
                    return f(children)
            except (GrammarError, Discard):
                raise
            except Exception as e:
                raise VisitError(tree.data, tree, e)

    def _call_userfunc_token(self, token):
        try:
            f = getattr(self, token.type)
        except AttributeError:
            return self.__default_token__(token)
        else:
            try:
                return f(token)
            except (GrammarError, Discard):
                raise
            except Exception as e:
                raise VisitError(token.type, token, e)

    def _transform_children(self, children):
        for c in children:
            try:
                if isinstance(c, Tree):
                    yield self._transform_tree(c)
                elif self.__visit_tokens__ and isinstance(c, Token):
                    yield self._call_userfunc_token(c)
                else:
                    yield c
            except Discard:
                pass

    def _transform_tree(self, tree):
        children = list(self._transform_children(tree.children))
        return self._call_userfunc(tree, children)

    def transform(self, tree):
        #--
        return self._transform_tree(tree)

    def __mul__(self, other):
        #--
        return TransformerChain(self, other)

    def __default__(self, data, children, meta):
        #--
        return Tree(data, children, meta)

    def __default_token__(self, token):
        #--
        return token


class InlineTransformer(Transformer):   ##

    def _call_userfunc(self, tree, new_children=None):
        ##

        children = new_children if new_children is not None else tree.children
        try:
            f = getattr(self, tree.data)
        except AttributeError:
            return self.__default__(tree.data, children, tree.meta)
        else:
            return f(*children)


class TransformerChain(object):
    def __init__(self, *transformers):
        self.transformers = transformers

    def transform(self, tree):
        for t in self.transformers:
            tree = t.transform(tree)
        return tree

    def __mul__(self, other):
        return TransformerChain(*self.transformers + (other,))


class Transformer_InPlace(Transformer):
    #--
    def _transform_tree(self, tree):           ##

        return self._call_userfunc(tree)

    def transform(self, tree):
        for subtree in tree.iter_subtrees():
            subtree.children = list(self._transform_children(subtree.children))

        return self._transform_tree(tree)


class Transformer_NonRecursive(Transformer):
    #--

    def transform(self, tree):
        ##

        rev_postfix = []
        q = [tree]
        while q:
            t = q.pop()
            rev_postfix.append(t)
            if isinstance(t, Tree):
                q += t.children

        ##

        stack = []
        for x in reversed(rev_postfix):
            if isinstance(x, Tree):
                size = len(x.children)
                if size:
                    args = stack[-size:]
                    del stack[-size:]
                else:
                    args = []
                stack.append(self._call_userfunc(x, args))
            elif self.__visit_tokens__ and isinstance(x, Token):
                stack.append(self._call_userfunc_token(x))
            else:
                stack.append(x)

        t ,= stack  ##

        return t


class Transformer_InPlaceRecursive(Transformer):
    #--
    def _transform_tree(self, tree):
        tree.children = list(self._transform_children(tree.children))
        return self._call_userfunc(tree)


##


class VisitorBase:
    def _call_userfunc(self, tree):
        return getattr(self, tree.data, self.__default__)(tree)

    def __default__(self, tree):
        #--
        return tree

    def __class_getitem__(cls, _):
        return cls


class Visitor(VisitorBase):
    #--

    def visit(self, tree):
        #--
        for subtree in tree.iter_subtrees():
            self._call_userfunc(subtree)
        return tree

    def visit_topdown(self,tree):
        #--
        for subtree in tree.iter_subtrees_topdown():
            self._call_userfunc(subtree)
        return tree


class Visitor_Recursive(VisitorBase):
    #--

    def visit(self, tree):
        #--
        for child in tree.children:
            if isinstance(child, Tree):
                self.visit(child)

        self._call_userfunc(tree)
        return tree

    def visit_topdown(self,tree):
        #--
        self._call_userfunc(tree)

        for child in tree.children:
            if isinstance(child, Tree):
                self.visit_topdown(child)

        return tree


def visit_children_decor(func):
    #--
    @wraps(func)
    def inner(cls, tree):
        values = cls.visit_children(tree)
        return func(cls, values)
    return inner


class Interpreter(_Decoratable):
    #--

    def visit(self, tree):
        f = getattr(self, tree.data)
        wrapper = getattr(f, 'visit_wrapper', None)
        if wrapper is not None:
            return f.visit_wrapper(f, tree.data, tree.children, tree.meta)
        else:
            return f(tree)

    def visit_children(self, tree):
        return [self.visit(child) if isinstance(child, Tree) else child
                for child in tree.children]

    def __getattr__(self, name):
        return self.__default__

    def __default__(self, tree):
        return self.visit_children(tree)


##


def _apply_decorator(obj, decorator, **kwargs):
    try:
        _apply = obj._apply_decorator
    except AttributeError:
        return decorator(obj, **kwargs)
    else:
        return _apply(decorator, **kwargs)


def _inline_args__func(func):
    @wraps(func)
    def create_decorator(_f, with_self):
        if with_self:
            def f(self, children):
                return _f(self, *children)
        else:
            def f(self, children):
                return _f(*children)
        return f

    return smart_decorator(func, create_decorator)


def inline_args(obj):   ##

    return _apply_decorator(obj, _inline_args__func)


def _visitor_args_func_dec(func, visit_wrapper=None, static=False):
    def create_decorator(_f, with_self):
        if with_self:
            def f(self, *args, **kwargs):
                return _f(self, *args, **kwargs)
        else:
            def f(self, *args, **kwargs):
                return _f(*args, **kwargs)
        return f

    if static:
        f = wraps(func)(create_decorator(func, False))
    else:
        f = smart_decorator(func, create_decorator)
    f.vargs_applied = True
    f.visit_wrapper = visit_wrapper
    return f


def _vargs_inline(f, _data, children, _meta):
    return f(*children)
def _vargs_meta_inline(f, _data, children, meta):
    return f(meta, *children)
def _vargs_meta(f, _data, children, meta):
    return f(children, meta)   ##

def _vargs_tree(f, data, children, meta):
    return f(Tree(data, children, meta))


def v_args(inline=False, meta=False, tree=False, wrapper=None):
    #--
    if tree and (meta or inline):
        raise ValueError("Visitor functions cannot combine 'tree' with 'meta' or 'inline'.")

    func = None
    if meta:
        if inline:
            func = _vargs_meta_inline
        else:
            func = _vargs_meta
    elif inline:
        func = _vargs_inline
    elif tree:
        func = _vargs_tree

    if wrapper is not None:
        if func is not None:
            raise ValueError("Cannot use 'wrapper' along with 'tree', 'meta' or 'inline'.")
        func = wrapper

    def _visitor_args_dec(obj):
        return _apply_decorator(obj, _visitor_args_func_dec, visit_wrapper=func)
    return _visitor_args_dec




class Symbol(Serialize):
    __slots__ = ('name',)

    is_term = NotImplemented

    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        assert isinstance(other, Symbol), other
        return self.is_term == other.is_term and self.name == other.name

    def __ne__(self, other):
        return not (self == other)

    def __hash__(self):
        return hash(self.name)

    def __repr__(self):
        return '%s(%r)' % (type(self).__name__, self.name)

    fullrepr = property(__repr__)


class Terminal(Symbol):
    __serialize_fields__ = 'name', 'filter_out'

    is_term = True

    def __init__(self, name, filter_out=False):
        self.name = name
        self.filter_out = filter_out

    @property
    def fullrepr(self):
        return '%s(%r, %r)' % (type(self).__name__, self.name, self.filter_out)


class NonTerminal(Symbol):
    __serialize_fields__ = 'name',

    is_term = False


class RuleOptions(Serialize):
    __serialize_fields__ = 'keep_all_tokens', 'expand1', 'priority', 'template_source', 'empty_indices'

    def __init__(self, keep_all_tokens=False, expand1=False, priority=None, template_source=None, empty_indices=()):
        self.keep_all_tokens = keep_all_tokens
        self.expand1 = expand1
        self.priority = priority
        self.template_source = template_source
        self.empty_indices = empty_indices

    def __repr__(self):
        return 'RuleOptions(%r, %r, %r, %r)' % (
            self.keep_all_tokens,
            self.expand1,
            self.priority,
            self.template_source
        )


class Rule(Serialize):
    #--
    __slots__ = ('origin', 'expansion', 'alias', 'options', 'order', '_hash')

    __serialize_fields__ = 'origin', 'expansion', 'order', 'alias', 'options'
    __serialize_namespace__ = Terminal, NonTerminal, RuleOptions

    def __init__(self, origin, expansion, order=0, alias=None, options=None):
        self.origin = origin
        self.expansion = expansion
        self.alias = alias
        self.order = order
        self.options = options or RuleOptions()
        self._hash = hash((self.origin, tuple(self.expansion)))

    def _deserialize(self):
        self._hash = hash((self.origin, tuple(self.expansion)))

    def __str__(self):
        return '<%s : %s>' % (self.origin.name, ' '.join(x.name for x in self.expansion))

    def __repr__(self):
        return 'Rule(%r, %r, %r, %r)' % (self.origin, self.expansion, self.alias, self.options)

    def __hash__(self):
        return self._hash

    def __eq__(self, other):
        if not isinstance(other, Rule):
            return False
        return self.origin == other.origin and self.expansion == other.expansion



from copy import copy


class Pattern(Serialize):
    raw = None
    type = None

    def __init__(self, value, flags=(), raw=None):
        self.value = value
        self.flags = frozenset(flags)
        self.raw = raw

    def __repr__(self):
        return repr(self.to_regexp())

    ##

    def __hash__(self):
        return hash((type(self), self.value, self.flags))

    def __eq__(self, other):
        return type(self) == type(other) and self.value == other.value and self.flags == other.flags

    def to_regexp(self):
        raise NotImplementedError()

    def min_width(self):
        raise NotImplementedError()

    def max_width(self):
        raise NotImplementedError()

    if Py36:
        ##

        def _get_flags(self, value):
            for f in self.flags:
                value = ('(?%s:%s)' % (f, value))
            return value

    else:
        def _get_flags(self, value):
            for f in self.flags:
                value = ('(?%s)' % f) + value
            return value



class PatternStr(Pattern):
    __serialize_fields__ = 'value', 'flags'

    type = "str"

    def to_regexp(self):
        return self._get_flags(re.escape(self.value))

    @property
    def min_width(self):
        return len(self.value)
    max_width = min_width


class PatternRE(Pattern):
    __serialize_fields__ = 'value', 'flags', '_width'

    type = "re"

    def to_regexp(self):
        return self._get_flags(self.value)

    _width = None
    def _get_width(self):
        if self._width is None:
            self._width = get_regexp_width(self.to_regexp())
        return self._width

    @property
    def min_width(self):
        return self._get_width()[0]

    @property
    def max_width(self):
        return self._get_width()[1]


class TerminalDef(Serialize):
    __serialize_fields__ = 'name', 'pattern', 'priority'
    __serialize_namespace__ = PatternStr, PatternRE

    def __init__(self, name, pattern, priority=1):
        assert isinstance(pattern, Pattern), pattern
        self.name = name
        self.pattern = pattern
        self.priority = priority

    def __repr__(self):
        return '%s(%r, %r)' % (type(self).__name__, self.name, self.pattern)

    def user_repr(self):
        if self.name.startswith('__'): ##

            return self.pattern.raw or self.name
        else:
            return self.name


class Token(Str):
    #--
    __slots__ = ('type', 'pos_in_stream', 'value', 'line', 'column', 'end_line', 'end_column', 'end_pos')

    def __new__(cls, type_, value, pos_in_stream=None, line=None, column=None, end_line=None, end_column=None, end_pos=None):
        try:
            self = super(Token, cls).__new__(cls, value)
        except UnicodeDecodeError:
            value = value.decode('latin1')
            self = super(Token, cls).__new__(cls, value)

        self.type = type_
        self.pos_in_stream = pos_in_stream
        self.value = value
        self.line = line
        self.column = column
        self.end_line = end_line
        self.end_column = end_column
        self.end_pos = end_pos
        return self

    def update(self, type_=None, value=None):
        return Token.new_borrow_pos(
            type_ if type_ is not None else self.type,
            value if value is not None else self.value,
            self
        )

    @classmethod
    def new_borrow_pos(cls, type_, value, borrow_t):
        return cls(type_, value, borrow_t.pos_in_stream, borrow_t.line, borrow_t.column, borrow_t.end_line, borrow_t.end_column, borrow_t.end_pos)

    def __reduce__(self):
        return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column))

    def __repr__(self):
        return 'Token(%r, %r)' % (self.type, self.value)

    def __deepcopy__(self, memo):
        return Token(self.type, self.value, self.pos_in_stream, self.line, self.column)

    def __eq__(self, other):
        if isinstance(other, Token) and self.type != other.type:
            return False

        return Str.__eq__(self, other)

    __hash__ = Str.__hash__


class LineCounter:
    __slots__ = 'char_pos', 'line', 'column', 'line_start_pos', 'newline_char'

    def __init__(self, newline_char):
        self.newline_char = newline_char
        self.char_pos = 0
        self.line = 1
        self.column = 1
        self.line_start_pos = 0

    def __eq__(self, other):
        if not isinstance(other, LineCounter):
            return NotImplemented

        return self.char_pos == other.char_pos and self.newline_char == other.newline_char

    def feed(self, token, test_newline=True):
        #--
        if test_newline:
            newlines = token.count(self.newline_char)
            if newlines:
                self.line += newlines
                self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1

        self.char_pos += len(token)
        self.column = self.char_pos - self.line_start_pos + 1


class UnlessCallback:
    def __init__(self, mres):
        self.mres = mres

    def __call__(self, t):
        for mre, type_from_index in self.mres:
            m = mre.match(t.value)
            if m:
                t.type = type_from_index[m.lastindex]
                break
        return t


class CallChain:
    def __init__(self, callback1, callback2, cond):
        self.callback1 = callback1
        self.callback2 = callback2
        self.cond = cond

    def __call__(self, t):
        t2 = self.callback1(t)
        return self.callback2(t) if self.cond(t2) else t2


def _create_unless(terminals, g_regex_flags, re_, use_bytes):
    tokens_by_type = classify(terminals, lambda t: type(t.pattern))
    assert len(tokens_by_type) <= 2, tokens_by_type.keys()
    embedded_strs = set()
    callback = {}
    for retok in tokens_by_type.get(PatternRE, []):
        unless = []
        for strtok in tokens_by_type.get(PatternStr, []):
            if strtok.priority > retok.priority:
                continue
            s = strtok.pattern.value
            m = re_.match(retok.pattern.to_regexp(), s, g_regex_flags)
            if m and m.group(0) == s:
                unless.append(strtok)
                if strtok.pattern.flags <= retok.pattern.flags:
                    embedded_strs.add(strtok)
        if unless:
            callback[retok.name] = UnlessCallback(build_mres(unless, g_regex_flags, re_, match_whole=True, use_bytes=use_bytes))

    terminals = [t for t in terminals if t not in embedded_strs]
    return terminals, callback


def _build_mres(terminals, max_size, g_regex_flags, match_whole, re_, use_bytes):
    ##

    ##

    ##

    postfix = '$' if match_whole else ''
    mres = []
    while terminals:
        pattern = u'|'.join(u'(?P<%s>%s)' % (t.name, t.pattern.to_regexp() + postfix) for t in terminals[:max_size])
        if use_bytes:
            pattern = pattern.encode('latin-1')
        try:
            mre = re_.compile(pattern, g_regex_flags)
        except AssertionError:  ##

            return _build_mres(terminals, max_size//2, g_regex_flags, match_whole, re_, use_bytes)

        mres.append((mre, {i: n for n, i in mre.groupindex.items()}))
        terminals = terminals[max_size:]
    return mres


def build_mres(terminals, g_regex_flags, re_, use_bytes, match_whole=False):
    return _build_mres(terminals, len(terminals), g_regex_flags, match_whole, re_, use_bytes)


def _regexp_has_newline(r):
    #--
    return '\n' in r or '\\n' in r or '\\s' in r or '[^' in r or ('(?s' in r and '.' in r)


class Lexer(object):
    #--
    lex = NotImplemented

    def make_lexer_state(self, text):
        line_ctr = LineCounter(b'\n' if isinstance(text, bytes) else '\n')
        return LexerState(text, line_ctr)


class TraditionalLexer(Lexer):

    def __init__(self, conf):
        terminals = list(conf.terminals)
        assert all(isinstance(t, TerminalDef) for t in terminals), terminals

        self.re = conf.re_module

        if not conf.skip_validation:
            ##

            for t in terminals:
                try:
                    self.re.compile(t.pattern.to_regexp(), conf.g_regex_flags)
                except self.re.error:
                    raise LexError("Cannot compile token %s: %s" % (t.name, t.pattern))

                if t.pattern.min_width == 0:
                    raise LexError("Lexer does not allow zero-width terminals. (%s: %s)" % (t.name, t.pattern))

            if not (set(conf.ignore) <= {t.name for t in terminals}):
                raise LexError("Ignore terminals are not defined: %s" % (set(conf.ignore) - {t.name for t in terminals}))

        ##

        self.newline_types = frozenset(t.name for t in terminals if _regexp_has_newline(t.pattern.to_regexp()))
        self.ignore_types = frozenset(conf.ignore)

        terminals.sort(key=lambda x: (-x.priority, -x.pattern.max_width, -len(x.pattern.value), x.name))
        self.terminals = terminals
        self.user_callbacks = conf.callbacks
        self.g_regex_flags = conf.g_regex_flags
        self.use_bytes = conf.use_bytes
        self.terminals_by_name = conf.terminals_by_name

        self._mres = None

    def _build(self):
        terminals, self.callback = _create_unless(self.terminals, self.g_regex_flags, self.re, self.use_bytes)
        assert all(self.callback.values())

        for type_, f in self.user_callbacks.items():
            if type_ in self.callback:
                ##

                self.callback[type_] = CallChain(self.callback[type_], f, lambda t: t.type == type_)
            else:
                self.callback[type_] = f

        self._mres = build_mres(terminals, self.g_regex_flags, self.re, self.use_bytes)

    @property
    def mres(self):
        if self._mres is None:
            self._build()
        return self._mres

    def match(self, text, pos):
        for mre, type_from_index in self.mres:
            m = mre.match(text, pos)
            if m:
                return m.group(0), type_from_index[m.lastindex]

    def lex(self, state, parser_state):
        with suppress(EOFError):
            while True:
                yield self.next_token(state, parser_state)

    def next_token(self, lex_state, parser_state=None):
        line_ctr = lex_state.line_ctr
        while line_ctr.char_pos < len(lex_state.text):
            res = self.match(lex_state.text, line_ctr.char_pos)
            if not res:
                allowed = {v for m, tfi in self.mres for v in tfi.values()} - self.ignore_types
                if not allowed:
                    allowed = {"<END-OF-FILE>"}
                raise UnexpectedCharacters(lex_state.text, line_ctr.char_pos, line_ctr.line, line_ctr.column,
                                           allowed=allowed, token_history=lex_state.last_token and [lex_state.last_token],
                                           state=parser_state, terminals_by_name=self.terminals_by_name)

            value, type_ = res

            if type_ not in self.ignore_types:
                t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
                line_ctr.feed(value, type_ in self.newline_types)
                t.end_line = line_ctr.line
                t.end_column = line_ctr.column
                t.end_pos = line_ctr.char_pos
                if t.type in self.callback:
                    t = self.callback[t.type](t)
                    if not isinstance(t, Token):
                        raise LexError("Callbacks must return a token (returned %r)" % t)
                lex_state.last_token = t
                return t
            else:
                if type_ in self.callback:
                    t2 = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
                    self.callback[type_](t2)
                line_ctr.feed(value, type_ in self.newline_types)

        ##

        raise EOFError(self)


class LexerState(object):
    __slots__ = 'text', 'line_ctr', 'last_token'

    def __init__(self, text, line_ctr, last_token=None):
        self.text = text
        self.line_ctr = line_ctr
        self.last_token = last_token

    def __eq__(self, other):
        if not isinstance(other, LexerState):
            return NotImplemented

        return self.text is other.text and self.line_ctr == other.line_ctr and self.last_token == other.last_token

    def __copy__(self):
        return type(self)(self.text, copy(self.line_ctr), self.last_token)


class ContextualLexer(Lexer):

    def __init__(self, conf, states, always_accept=()):
        terminals = list(conf.terminals)
        terminals_by_name = conf.terminals_by_name

        trad_conf = copy(conf)
        trad_conf.terminals = terminals

        lexer_by_tokens = {}
        self.lexers = {}
        for state, accepts in states.items():
            key = frozenset(accepts)
            try:
                lexer = lexer_by_tokens[key]
            except KeyError:
                accepts = set(accepts) | set(conf.ignore) | set(always_accept)
                lexer_conf = copy(trad_conf)
                lexer_conf.terminals = [terminals_by_name[n] for n in accepts if n in terminals_by_name]
                lexer = TraditionalLexer(lexer_conf)
                lexer_by_tokens[key] = lexer

            self.lexers[state] = lexer

        assert trad_conf.terminals is terminals
        self.root_lexer = TraditionalLexer(trad_conf)

    def make_lexer_state(self, text):
        return self.root_lexer.make_lexer_state(text)

    def lex(self, lexer_state, parser_state):
        try:
            while True:
                lexer = self.lexers[parser_state.position]
                yield lexer.next_token(lexer_state, parser_state)
        except EOFError:
            pass
        except UnexpectedCharacters as e:
            ##

            ##

            try:
                last_token = lexer_state.last_token  ##

                token = self.root_lexer.next_token(lexer_state, parser_state)
                raise UnexpectedToken(token, e.allowed, state=parser_state, token_history=[last_token], terminals_by_name=self.root_lexer.terminals_by_name)
            except UnexpectedCharacters:
                raise e  ##


class LexerThread(object):
    #--

    def __init__(self, lexer, text):
        self.lexer = lexer
        self.state = lexer.make_lexer_state(text)

    def lex(self, parser_state):
        return self.lexer.lex(self.state, parser_state)

    def __copy__(self):
        copied = object.__new__(LexerThread)
        copied.lexer = self.lexer
        copied.state = copy(self.state)
        return copied



class LexerConf(Serialize):
    __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type'
    __serialize_namespace__ = TerminalDef,

    def __init__(self, terminals, re_module, ignore=(), postlex=None, callbacks=None, g_regex_flags=0, skip_validation=False, use_bytes=False):
        self.terminals = terminals
        self.terminals_by_name = {t.name: t for t in self.terminals}
        assert len(self.terminals) == len(self.terminals_by_name)
        self.ignore = ignore
        self.postlex = postlex
        self.callbacks = callbacks or {}
        self.g_regex_flags = g_regex_flags
        self.re_module = re_module
        self.skip_validation = skip_validation
        self.use_bytes = use_bytes
        self.lexer_type = None

    @property
    def tokens(self):
        warn("LexerConf.tokens is deprecated. Use LexerConf.terminals instead", DeprecationWarning)
        return self.terminals

    def _deserialize(self):
        self.terminals_by_name = {t.name: t for t in self.terminals}



class ParserConf(Serialize):
    __serialize_fields__ = 'rules', 'start', 'parser_type'

    def __init__(self, rules, callbacks, start):
        assert isinstance(start, list)
        self.rules = rules
        self.callbacks = callbacks
        self.start = start

        self.parser_type = None


from functools import partial, wraps
from itertools import repeat, product


class ExpandSingleChild:
    def __init__(self, node_builder):
        self.node_builder = node_builder

    def __call__(self, children):
        if len(children) == 1:
            return children[0]
        else:
            return self.node_builder(children)


class PropagatePositions:
    def __init__(self, node_builder):
        self.node_builder = node_builder

    def __call__(self, children):
        res = self.node_builder(children)

        ##

        if isinstance(res, Tree):
            res_meta = res.meta
            for c in children:
                if isinstance(c, Tree):
                    child_meta = c.meta
                    if not child_meta.empty:
                        res_meta.line = child_meta.line
                        res_meta.column = child_meta.column
                        res_meta.start_pos = child_meta.start_pos
                        res_meta.empty = False
                        break
                elif isinstance(c, Token):
                    res_meta.line = c.line
                    res_meta.column = c.column
                    res_meta.start_pos = c.pos_in_stream
                    res_meta.empty = False
                    break

            for c in reversed(children):
                if isinstance(c, Tree):
                    child_meta = c.meta
                    if not child_meta.empty:
                        res_meta.end_line = child_meta.end_line
                        res_meta.end_column = child_meta.end_column
                        res_meta.end_pos = child_meta.end_pos
                        res_meta.empty = False
                        break
                elif isinstance(c, Token):
                    res_meta.end_line = c.end_line
                    res_meta.end_column = c.end_column
                    res_meta.end_pos = c.end_pos
                    res_meta.empty = False
                    break

        return res


class ChildFilter:
    def __init__(self, to_include, append_none, node_builder):
        self.node_builder = node_builder
        self.to_include = to_include
        self.append_none = append_none

    def __call__(self, children):
        filtered = []

        for i, to_expand, add_none in self.to_include:
            if add_none:
                filtered += [None] * add_none
            if to_expand:
                filtered += children[i].children
            else:
                filtered.append(children[i])

        if self.append_none:
            filtered += [None] * self.append_none

        return self.node_builder(filtered)


class ChildFilterLALR(ChildFilter):
    #--

    def __call__(self, children):
        filtered = []
        for i, to_expand, add_none in self.to_include:
            if add_none:
                filtered += [None] * add_none
            if to_expand:
                if filtered:
                    filtered += children[i].children
                else:   ##

                    filtered = children[i].children
            else:
                filtered.append(children[i])

        if self.append_none:
            filtered += [None] * self.append_none

        return self.node_builder(filtered)


class ChildFilterLALR_NoPlaceholders(ChildFilter):
    #--
    def __init__(self, to_include, node_builder):
        self.node_builder = node_builder
        self.to_include = to_include

    def __call__(self, children):
        filtered = []
        for i, to_expand in self.to_include:
            if to_expand:
                if filtered:
                    filtered += children[i].children
                else:   ##

                    filtered = children[i].children
            else:
                filtered.append(children[i])
        return self.node_builder(filtered)


def _should_expand(sym):
    return not sym.is_term and sym.name.startswith('_')


def maybe_create_child_filter(expansion, keep_all_tokens, ambiguous, _empty_indices):
    ##

    if _empty_indices:
        assert _empty_indices.count(False) == len(expansion)
        s = ''.join(str(int(b)) for b in _empty_indices)
        empty_indices = [len(ones) for ones in s.split('0')]
        assert len(empty_indices) == len(expansion)+1, (empty_indices, len(expansion))
    else:
        empty_indices = [0] * (len(expansion)+1)

    to_include = []
    nones_to_add = 0
    for i, sym in enumerate(expansion):
        nones_to_add += empty_indices[i]
        if keep_all_tokens or not (sym.is_term and sym.filter_out):
            to_include.append((i, _should_expand(sym), nones_to_add))
            nones_to_add = 0

    nones_to_add += empty_indices[len(expansion)]

    if _empty_indices or len(to_include) < len(expansion) or any(to_expand for i, to_expand,_ in to_include):
        if _empty_indices or ambiguous:
            return partial(ChildFilter if ambiguous else ChildFilterLALR, to_include, nones_to_add)
        else:
            ##

            return partial(ChildFilterLALR_NoPlaceholders, [(i, x) for i,x,_ in to_include])


class AmbiguousExpander:
    #--
    def __init__(self, to_expand, tree_class, node_builder):
        self.node_builder = node_builder
        self.tree_class = tree_class
        self.to_expand = to_expand

    def __call__(self, children):
        def _is_ambig_tree(t):
            return hasattr(t, 'data') and t.data == '_ambig'

        ##

        ##

        ##

        ##

        ambiguous = []
        for i, child in enumerate(children):
            if _is_ambig_tree(child):
                if i in self.to_expand:
                    ambiguous.append(i)

                to_expand = [j for j, grandchild in enumerate(child.children) if _is_ambig_tree(grandchild)]
                child.expand_kids_by_index(*to_expand)

        if not ambiguous:
            return self.node_builder(children)

        expand = [iter(child.children) if i in ambiguous else repeat(child) for i, child in enumerate(children)]
        return self.tree_class('_ambig', [self.node_builder(list(f[0])) for f in product(zip(*expand))])


def maybe_create_ambiguous_expander(tree_class, expansion, keep_all_tokens):
    to_expand = [i for i, sym in enumerate(expansion)
                 if keep_all_tokens or ((not (sym.is_term and sym.filter_out)) and _should_expand(sym))]
    if to_expand:
        return partial(AmbiguousExpander, to_expand, tree_class)


class AmbiguousIntermediateExpander:
    #--

    def __init__(self, tree_class, node_builder):
        self.node_builder = node_builder
        self.tree_class = tree_class

    def __call__(self, children):
        def _is_iambig_tree(child):
            return hasattr(child, 'data') and child.data == '_iambig'

        def _collapse_iambig(children):
            #--

            ##

            ##

            if children and _is_iambig_tree(children[0]):
                iambig_node = children[0]
                result = []
                for grandchild in iambig_node.children:
                    collapsed = _collapse_iambig(grandchild.children)
                    if collapsed:
                        for child in collapsed:
                            child.children += children[1:]
                        result += collapsed
                    else:
                        new_tree = self.tree_class('_inter', grandchild.children + children[1:])
                        result.append(new_tree)
                return result

        collapsed = _collapse_iambig(children)
        if collapsed:
            processed_nodes = [self.node_builder(c.children) for c in collapsed]
            return self.tree_class('_ambig', processed_nodes)

        return self.node_builder(children)


def ptb_inline_args(func):
    @wraps(func)
    def f(children):
        return func(*children)
    return f


def inplace_transformer(func):
    @wraps(func)
    def f(children):
        ##

        tree = Tree(func.__name__, children)
        return func(tree)
    return f


def apply_visit_wrapper(func, name, wrapper):
    if wrapper is _vargs_meta or wrapper is _vargs_meta_inline:
        raise NotImplementedError("Meta args not supported for internal transformer")

    @wraps(func)
    def f(children):
        return wrapper(func, name, children, None)
    return f


class ParseTreeBuilder:
    def __init__(self, rules, tree_class, propagate_positions=False, ambiguous=False, maybe_placeholders=False):
        self.tree_class = tree_class
        self.propagate_positions = propagate_positions
        self.ambiguous = ambiguous
        self.maybe_placeholders = maybe_placeholders

        self.rule_builders = list(self._init_builders(rules))

    def _init_builders(self, rules):
        for rule in rules:
            options = rule.options
            keep_all_tokens = options.keep_all_tokens
            expand_single_child = options.expand1

            wrapper_chain = list(filter(None, [
                (expand_single_child and not rule.alias) and ExpandSingleChild,
                maybe_create_child_filter(rule.expansion, keep_all_tokens, self.ambiguous, options.empty_indices if self.maybe_placeholders else None),
                self.propagate_positions and PropagatePositions,
                self.ambiguous and maybe_create_ambiguous_expander(self.tree_class, rule.expansion, keep_all_tokens),
                self.ambiguous and partial(AmbiguousIntermediateExpander, self.tree_class)
            ]))

            yield rule, wrapper_chain

    def create_callback(self, transformer=None):
        callbacks = {}

        for rule, wrapper_chain in self.rule_builders:

            user_callback_name = rule.alias or rule.options.template_source or rule.origin.name
            try:
                f = getattr(transformer, user_callback_name)
                ##

                wrapper = getattr(f, 'visit_wrapper', None)
                if wrapper is not None:
                    f = apply_visit_wrapper(f, user_callback_name, wrapper)
                else:
                    if isinstance(transformer, InlineTransformer):
                        f = ptb_inline_args(f)
                    elif isinstance(transformer, Transformer_InPlace):
                        f = inplace_transformer(f)
            except AttributeError:
                f = partial(self.tree_class, user_callback_name)

            for w in wrapper_chain:
                f = w(f)

            if rule in callbacks:
                raise GrammarError("Rule '%s' already exists" % (rule,))

            callbacks[rule] = f

        return callbacks



class LALR_Parser(Serialize):
    def __init__(self, parser_conf, debug=False):
        analysis = LALR_Analyzer(parser_conf, debug=debug)
        analysis.compute_lalr()
        callbacks = parser_conf.callbacks

        self._parse_table = analysis.parse_table
        self.parser_conf = parser_conf
        self.parser = _Parser(analysis.parse_table, callbacks, debug)

    @classmethod
    def deserialize(cls, data, memo, callbacks, debug=False):
        inst = cls.__new__(cls)
        inst._parse_table = IntParseTable.deserialize(data, memo)
        inst.parser = _Parser(inst._parse_table, callbacks, debug)
        return inst

    def serialize(self, memo):
        return self._parse_table.serialize(memo)
    
    def parse_interactive(self, lexer, start):
        return self.parser.parse(lexer, start, start_interactive=True)

    def parse(self, lexer, start, on_error=None):
        try:
            return self.parser.parse(lexer, start)
        except UnexpectedInput as e:
            if on_error is None:
                raise

            while True:
                if isinstance(e, UnexpectedCharacters):
                    s = e.interactive_parser.lexer_state.state
                    p = s.line_ctr.char_pos

                if not on_error(e):
                    raise e

                if isinstance(e, UnexpectedCharacters):
                    ##

                    if p == s.line_ctr.char_pos:
                        s.line_ctr.feed(s.text[p:p+1])

                try:
                    return e.interactive_parser.resume_parse()
                except UnexpectedToken as e2:
                    if (isinstance(e, UnexpectedToken)
                        and e.token.type == e2.token.type == '$END'
                        and e.interactive_parser == e2.interactive_parser):
                        ##

                        raise e2
                    e = e2
                except UnexpectedCharacters as e2:
                    e = e2


class ParseConf(object):
    __slots__ = 'parse_table', 'callbacks', 'start', 'start_state', 'end_state', 'states'

    def __init__(self, parse_table, callbacks, start):
        self.parse_table = parse_table

        self.start_state = self.parse_table.start_states[start]
        self.end_state = self.parse_table.end_states[start]
        self.states = self.parse_table.states

        self.callbacks = callbacks
        self.start = start


class ParserState(object):
    __slots__ = 'parse_conf', 'lexer', 'state_stack', 'value_stack'

    def __init__(self, parse_conf, lexer, state_stack=None, value_stack=None):
        self.parse_conf = parse_conf
        self.lexer = lexer
        self.state_stack = state_stack or [self.parse_conf.start_state]
        self.value_stack = value_stack or []

    @property
    def position(self):
        return self.state_stack[-1]

    ##

    def __eq__(self, other):
        if not isinstance(other, ParserState):
            return NotImplemented
        return len(self.state_stack) == len(other.state_stack) and self.position == other.position

    def __copy__(self):
        return type(self)(
            self.parse_conf,
            self.lexer, ##

            copy(self.state_stack),
            deepcopy(self.value_stack),
        )

    def copy(self):
        return copy(self)

    def feed_token(self, token, is_end=False):
        state_stack = self.state_stack
        value_stack = self.value_stack
        states = self.parse_conf.states
        end_state = self.parse_conf.end_state
        callbacks = self.parse_conf.callbacks

        while True:
            state = state_stack[-1]
            try:
                action, arg = states[state][token.type]
            except KeyError:
                expected = {s for s in states[state].keys() if s.isupper()}
                raise UnexpectedToken(token, expected, state=self, interactive_parser=None)

            assert arg != end_state

            if action is Shift:
                ##

                assert not is_end
                state_stack.append(arg)
                value_stack.append(token if token.type not in callbacks else callbacks[token.type](token))
                return
            else:
                ##

                rule = arg
                size = len(rule.expansion)
                if size:
                    s = value_stack[-size:]
                    del state_stack[-size:]
                    del value_stack[-size:]
                else:
                    s = []

                value = callbacks[rule](s)

                _action, new_state = states[state_stack[-1]][rule.origin.name]
                assert _action is Shift
                state_stack.append(new_state)
                value_stack.append(value)

                if is_end and state_stack[-1] == end_state:
                    return value_stack[-1]

class _Parser(object):
    def __init__(self, parse_table, callbacks, debug=False):
        self.parse_table = parse_table
        self.callbacks = callbacks
        self.debug = debug

    def parse(self, lexer, start, value_stack=None, state_stack=None, start_interactive=False):
        parse_conf = ParseConf(self.parse_table, self.callbacks, start)
        parser_state = ParserState(parse_conf, lexer, state_stack, value_stack)
        if start_interactive:
            return InteractiveParser(self, parser_state, parser_state.lexer)
        return self.parse_from_state(parser_state)
    

    def parse_from_state(self, state):
        ##

        try:
            token = None
            for token in state.lexer.lex(state):
                state.feed_token(token)

            token = Token.new_borrow_pos('$END', '', token) if token else Token('$END', '', 0, 1, 1)
            return state.feed_token(token, True)
        except UnexpectedInput as e:
            try:
                e.interactive_parser = InteractiveParser(self, state, state.lexer)
            except NameError:
                pass
            raise e
        except Exception as e:
            if self.debug:
                print("")
                print("STATE STACK DUMP")
                print("----------------")
                for i, s in enumerate(state.state_stack):
                    print('%d)' % i , s)
                print("")

            raise


class Action:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return self.name
    def __repr__(self):
        return str(self)

Shift = Action('Shift')
Reduce = Action('Reduce')


class ParseTable:
    def __init__(self, states, start_states, end_states):
        self.states = states
        self.start_states = start_states
        self.end_states = end_states

    def serialize(self, memo):
        tokens = Enumerator()
        rules = Enumerator()

        states = {
            state: {tokens.get(token): ((1, arg.serialize(memo)) if action is Reduce else (0, arg))
                    for token, (action, arg) in actions.items()}
            for state, actions in self.states.items()
        }

        return {
            'tokens': tokens.reversed(),
            'states': states,
            'start_states': self.start_states,
            'end_states': self.end_states,
        }

    @classmethod
    def deserialize(cls, data, memo):
        tokens = data['tokens']
        states = {
            state: {tokens[token]: ((Reduce, Rule.deserialize(arg, memo)) if action==1 else (Shift, arg))
                    for token, (action, arg) in actions.items()}
            for state, actions in data['states'].items()
        }
        return cls(states, data['start_states'], data['end_states'])


class IntParseTable(ParseTable):

    @classmethod
    def from_ParseTable(cls, parse_table):
        enum = list(parse_table.states)
        state_to_idx = {s:i for i,s in enumerate(enum)}
        int_states = {}

        for s, la in parse_table.states.items():
            la = {k:(v[0], state_to_idx[v[1]]) if v[0] is Shift else v
                  for k,v in la.items()}
            int_states[ state_to_idx[s] ] = la


        start_states = {start:state_to_idx[s] for start, s in parse_table.start_states.items()}
        end_states = {start:state_to_idx[s] for start, s in parse_table.end_states.items()}
        return cls(int_states, start_states, end_states)



def _wrap_lexer(lexer_class):
    future_interface = getattr(lexer_class, '__future_interface__', False)
    if future_interface:
        return lexer_class
    else:
        class CustomLexerWrapper(Lexer):
            def __init__(self, lexer_conf):
                self.lexer = lexer_class(lexer_conf)
            def lex(self, lexer_state, parser_state):
                return self.lexer.lex(lexer_state.text)
        return CustomLexerWrapper


class MakeParsingFrontend:
    def __init__(self, parser_type, lexer_type):
        self.parser_type = parser_type
        self.lexer_type = lexer_type

    def __call__(self, lexer_conf, parser_conf, options):
        assert isinstance(lexer_conf, LexerConf)
        assert isinstance(parser_conf, ParserConf)
        parser_conf.parser_type = self.parser_type
        lexer_conf.lexer_type = self.lexer_type
        return ParsingFrontend(lexer_conf, parser_conf, options)

    @classmethod
    def deserialize(cls, data, memo, lexer_conf, callbacks, options):
        parser_conf = ParserConf.deserialize(data['parser_conf'], memo)
        parser = LALR_Parser.deserialize(data['parser'], memo, callbacks, options.debug)
        parser_conf.callbacks = callbacks
        return ParsingFrontend(lexer_conf, parser_conf, options, parser=parser)




class ParsingFrontend(Serialize):
    __serialize_fields__ = 'lexer_conf', 'parser_conf', 'parser', 'options'

    def __init__(self, lexer_conf, parser_conf, options, parser=None):
        self.parser_conf = parser_conf
        self.lexer_conf = lexer_conf
        self.options = options

        ##

        if parser:  ##

            self.parser = parser
        else:
            create_parser = {
                'lalr': create_lalr_parser,
                'earley': create_earley_parser,
                'cyk': CYK_FrontEnd,
            }[parser_conf.parser_type]
            self.parser = create_parser(lexer_conf, parser_conf, options)

        ##

        lexer_type = lexer_conf.lexer_type
        self.skip_lexer = False
        if lexer_type in ('dynamic', 'dynamic_complete'):
            assert lexer_conf.postlex is None
            self.skip_lexer = True
            return

        try:
            create_lexer = {
                'standard': create_traditional_lexer,
                'contextual': create_contextual_lexer,
            }[lexer_type]
        except KeyError:
            assert issubclass(lexer_type, Lexer), lexer_type
            self.lexer = _wrap_lexer(lexer_type)(lexer_conf)
        else:
            self.lexer = create_lexer(lexer_conf, self.parser, lexer_conf.postlex)

        if lexer_conf.postlex:
            self.lexer = PostLexConnector(self.lexer, lexer_conf.postlex)
    
    def _verify_start(self, start=None):
        if start is None:
            start = self.parser_conf.start
            if len(start) > 1:
                raise ConfigurationError("Lark initialized with more than 1 possible start rule. Must specify which start rule to parse", start)
            start ,= start
        elif start not in self.parser_conf.start:
            raise ConfigurationError("Unknown start rule %s. Must be one of %r" % (start, self.parser_conf.start))
        return start

    def parse(self, text, start=None, on_error=None):
        start = self._verify_start(start)
        stream = text if self.skip_lexer else LexerThread(self.lexer, text)
        kw = {} if on_error is None else {'on_error': on_error}
        return self.parser.parse(stream, start, **kw)
    
    def parse_interactive(self, text=None, start=None):
        start = self._verify_start(start)
        if self.parser_conf.parser_type != 'lalr':
            raise ConfigurationError("parse_interactive() currently only works with parser='lalr' ")
        stream = text if self.skip_lexer else LexerThread(self.lexer, text)
        return self.parser.parse_interactive(stream, start)


def get_frontend(parser, lexer):
    assert_config(parser, ('lalr', 'earley', 'cyk'))
    if not isinstance(lexer, type):     ##

        expected = {
            'lalr': ('standard', 'contextual'),
            'earley': ('standard', 'dynamic', 'dynamic_complete'),
            'cyk': ('standard', ),
         }[parser]
        assert_config(lexer, expected, 'Parser %r does not support lexer %%r, expected one of %%s' % parser)

    return MakeParsingFrontend(parser, lexer)


def _get_lexer_callbacks(transformer, terminals):
    result = {}
    for terminal in terminals:
        callback = getattr(transformer, terminal.name, None)
        if callback is not None:
            result[terminal.name] = callback
    return result

class PostLexConnector:
    def __init__(self, lexer, postlexer):
        self.lexer = lexer
        self.postlexer = postlexer

    def make_lexer_state(self, text):
        return self.lexer.make_lexer_state(text)

    def lex(self, lexer_state, parser_state):
        i = self.lexer.lex(lexer_state, parser_state)
        return self.postlexer.process(i)



def create_traditional_lexer(lexer_conf, parser, postlex):
    return TraditionalLexer(lexer_conf)

def create_contextual_lexer(lexer_conf, parser, postlex):
    states = {idx:list(t.keys()) for idx, t in parser._parse_table.states.items()}
    always_accept = postlex.always_accept if postlex else ()
    return ContextualLexer(lexer_conf, states, always_accept=always_accept)

def create_lalr_parser(lexer_conf, parser_conf, options=None):
    debug = options.debug if options else False
    return LALR_Parser(parser_conf, debug=debug)


create_earley_parser = NotImplemented
CYK_FrontEnd = NotImplemented



class LarkOptions(Serialize):
    #--
    OPTIONS_DOC = """
    **===  General Options  ===**

    start
            The start symbol. Either a string, or a list of strings for multiple possible starts (Default: "start")
    debug
            Display debug information and extra warnings. Use only when debugging (default: False)
            When used with Earley, it generates a forest graph as "sppf.png", if 'dot' is installed.
    transformer
            Applies the transformer to every parse tree (equivalent to applying it after the parse, but faster)
    propagate_positions
            Propagates (line, column, end_line, end_column) attributes into all tree branches.
    maybe_placeholders
            When True, the ``[]`` operator returns ``None`` when not matched.

            When ``False``,  ``[]`` behaves like the ``?`` operator, and returns no value at all.
            (default= ``False``. Recommended to set to ``True``)
    cache
            Cache the results of the Lark grammar analysis, for x2 to x3 faster loading. LALR only for now.

            - When ``False``, does nothing (default)
            - When ``True``, caches to a temporary file in the local directory
            - When given a string, caches to the path pointed by the string
    regex
            When True, uses the ``regex`` module instead of the stdlib ``re``.
    g_regex_flags
            Flags that are applied to all terminals (both regex and strings)
    keep_all_tokens
            Prevent the tree builder from automagically removing "punctuation" tokens (default: False)
    tree_class
            Lark will produce trees comprised of instances of this class instead of the default ``lark.Tree``.

    **=== Algorithm Options ===**

    parser
            Decides which parser engine to use. Accepts "earley" or "lalr". (Default: "earley").
            (there is also a "cyk" option for legacy)
    lexer
            Decides whether or not to use a lexer stage

            - "auto" (default): Choose for me based on the parser
            - "standard": Use a standard lexer
            - "contextual": Stronger lexer (only works with parser="lalr")
            - "dynamic": Flexible and powerful (only with parser="earley")
            - "dynamic_complete": Same as dynamic, but tries *every* variation of tokenizing possible.
    ambiguity
            Decides how to handle ambiguity in the parse. Only relevant if parser="earley"

            - "resolve": The parser will automatically choose the simplest derivation
              (it chooses consistently: greedy for tokens, non-greedy for rules)
            - "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest).
            - "forest": The parser will return the root of the shared packed parse forest.

    **=== Misc. / Domain Specific Options ===**

    postlex
            Lexer post-processing (Default: None) Only works with the standard and contextual lexers.
    priority
            How priorities should be evaluated - auto, none, normal, invert (Default: auto)
    lexer_callbacks
            Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution.
    use_bytes
            Accept an input of type ``bytes`` instead of ``str`` (Python 3 only).
    edit_terminals
            A callback for editing the terminals before parse.
    import_paths
            A List of either paths or loader functions to specify from where grammars are imported
    source_path
            Override the source of from where the grammar was loaded. Useful for relative imports and unconventional grammar loading
    **=== End Options ===**
    """
    if __doc__:
        __doc__ += OPTIONS_DOC


    ##

    ##

    ##

    ##

    ##

    ##

    ##

    ##

    _defaults = {
        'debug': False,
        'keep_all_tokens': False,
        'tree_class': None,
        'cache': False,
        'postlex': None,
        'parser': 'earley',
        'lexer': 'auto',
        'transformer': None,
        'start': 'start',
        'priority': 'auto',
        'ambiguity': 'auto',
        'regex': False,
        'propagate_positions': False,
        'lexer_callbacks': {},
        'maybe_placeholders': False,
        'edit_terminals': None,
        'g_regex_flags': 0,
        'use_bytes': False,
        'import_paths': [],
        'source_path': None,
    }

    def __init__(self, options_dict):
        o = dict(options_dict)

        options = {}
        for name, default in self._defaults.items():
            if name in o:
                value = o.pop(name)
                if isinstance(default, bool) and name not in ('cache', 'use_bytes'):
                    value = bool(value)
            else:
                value = default

            options[name] = value

        if isinstance(options['start'], STRING_TYPE):
            options['start'] = [options['start']]

        self.__dict__['options'] = options


        assert_config(self.parser, ('earley', 'lalr', 'cyk', None))

        if self.parser == 'earley' and self.transformer:
            raise ConfigurationError('Cannot specify an embedded transformer when using the Earley algorithm.'
                             'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. LALR)')

        if o:
            raise ConfigurationError("Unknown options: %s" % o.keys())

    def __getattr__(self, name):
        try:
            return self.__dict__['options'][name]
        except KeyError as e:
            raise AttributeError(e)

    def __setattr__(self, name, value):
        assert_config(name, self.options.keys(), "%r isn't a valid option. Expected one of: %s")
        self.options[name] = value

    def serialize(self, memo):
        return self.options

    @classmethod
    def deserialize(cls, data, memo):
        return cls(data)


##

##

_LOAD_ALLOWED_OPTIONS = {'postlex', 'transformer', 'lexer_callbacks', 'use_bytes', 'debug', 'g_regex_flags', 'regex', 'propagate_positions', 'tree_class'}

_VALID_PRIORITY_OPTIONS = ('auto', 'normal', 'invert', None)
_VALID_AMBIGUITY_OPTIONS = ('auto', 'resolve', 'explicit', 'forest')


class PostLex(ABC):
    @abstractmethod
    def process(self, stream):
        return stream

    always_accept = ()


class Lark(Serialize):
    #--
    def __init__(self, grammar, **options):
        self.options = LarkOptions(options)

        ##

        use_regex = self.options.regex
        if use_regex:
            if regex:
                re_module = regex
            else:
                raise ImportError('`regex` module must be installed if calling `Lark(regex=True)`.')
        else:
            re_module = re

        ##

        if self.options.source_path is None:
            try:
                self.source_path = grammar.name
            except AttributeError:
                self.source_path = '<string>'
        else:
            self.source_path = self.options.source_path

        ##

        try:
            read = grammar.read
        except AttributeError:
            pass
        else:
            grammar = read()

        cache_fn = None
        cache_md5 = None
        if isinstance(grammar, STRING_TYPE):
            self.source_grammar = grammar
            if self.options.use_bytes:
                if not isascii(grammar):
                    raise ConfigurationError("Grammar must be ascii only, when use_bytes=True")
                if sys.version_info[0] == 2 and self.options.use_bytes != 'force':
                    raise ConfigurationError("`use_bytes=True` may have issues on python2."
                                              "Use `use_bytes='force'` to use it at your own risk.")

            if self.options.cache:
                if self.options.parser != 'lalr':
                    raise ConfigurationError("cache only works with parser='lalr' for now")

                unhashable = ('transformer', 'postlex', 'lexer_callbacks', 'edit_terminals')
                options_str = ''.join(k+str(v) for k, v in options.items() if k not in unhashable)
                from . import __version__
                s = grammar + options_str + __version__ + str(sys.version_info[:2])
                cache_md5 = hashlib.md5(s.encode('utf8')).hexdigest()

                if isinstance(self.options.cache, STRING_TYPE):
                    cache_fn = self.options.cache
                else:
                    if self.options.cache is not True:
                        raise ConfigurationError("cache argument must be bool or str")
                    ##

                    cache_fn = tempfile.gettempdir() + '/.lark_cache_%s_%s_%s.tmp' % ((cache_md5,) + sys.version_info[:2])

                if FS.exists(cache_fn):
                    logger.debug('Loading grammar from cache: %s', cache_fn)
                    ##

                    for name in (set(options) - _LOAD_ALLOWED_OPTIONS):
                        del options[name]
                    with FS.open(cache_fn, 'rb') as f:
                        old_options = self.options
                        try:
                            file_md5 = f.readline().rstrip(b'\n')
                            cached_used_files = pickle.load(f)
                            if file_md5 == cache_md5.encode('utf8') and verify_used_files(cached_used_files):
                                cached_parser_data = pickle.load(f)
                                self._load(cached_parser_data, **options)
                                return
                        except Exception: ##

                            logger.exception("Failed to load Lark from cache: %r. We will try to carry on." % cache_fn)
                            
                            ##

                            ##

                            self.options = old_options


            ##

            self.grammar, used_files = load_grammar(grammar, self.source_path, self.options.import_paths, self.options.keep_all_tokens)
        else:
            assert isinstance(grammar, Grammar)
            self.grammar = grammar


        if self.options.lexer == 'auto':
            if self.options.parser == 'lalr':
                self.options.lexer = 'contextual'
            elif self.options.parser == 'earley':
                if self.options.postlex is not None:
                    logger.info("postlex can't be used with the dynamic lexer, so we use standard instead. "
                                "Consider using lalr with contextual instead of earley")
                    self.options.lexer = 'standard'
                else:
                    self.options.lexer = 'dynamic'
            elif self.options.parser == 'cyk':
                self.options.lexer = 'standard'
            else:
                assert False, self.options.parser
        lexer = self.options.lexer
        if isinstance(lexer, type):
            assert issubclass(lexer, Lexer)     ##

        else:
            assert_config(lexer, ('standard', 'contextual', 'dynamic', 'dynamic_complete'))
            if self.options.postlex is not None and 'dynamic' in lexer:
                raise ConfigurationError("Can't use postlex with a dynamic lexer. Use standard or contextual instead")

        if self.options.ambiguity == 'auto':
            if self.options.parser == 'earley':
                self.options.ambiguity = 'resolve'
        else:
            assert_config(self.options.parser, ('earley', 'cyk'), "%r doesn't support disambiguation. Use one of these parsers instead: %s")

        if self.options.priority == 'auto':
            self.options.priority = 'normal'

        if self.options.priority not in _VALID_PRIORITY_OPTIONS:
            raise ConfigurationError("invalid priority option: %r. Must be one of %r" % (self.options.priority, _VALID_PRIORITY_OPTIONS))
        assert self.options.ambiguity not in ('resolve__antiscore_sum', ), 'resolve__antiscore_sum has been replaced with the option priority="invert"'
        if self.options.ambiguity not in _VALID_AMBIGUITY_OPTIONS:
            raise ConfigurationError("invalid ambiguity option: %r. Must be one of %r" % (self.options.ambiguity, _VALID_AMBIGUITY_OPTIONS))

        if self.options.postlex is not None:
            terminals_to_keep = set(self.options.postlex.always_accept)
        else:
            terminals_to_keep = set()

        ##

        self.terminals, self.rules, self.ignore_tokens = self.grammar.compile(self.options.start, terminals_to_keep)

        if self.options.edit_terminals:
            for t in self.terminals:
                self.options.edit_terminals(t)

        self._terminals_dict = {t.name: t for t in self.terminals}

        ##

        ##

        if self.options.priority == 'invert':
            for rule in self.rules:
                if rule.options.priority is not None:
                    rule.options.priority = -rule.options.priority
        ##

        ##

        ##

        elif self.options.priority is None:
            for rule in self.rules:
                if rule.options.priority is not None:
                    rule.options.priority = None

        ##

        self.lexer_conf = LexerConf(
                self.terminals, re_module, self.ignore_tokens, self.options.postlex,
                self.options.lexer_callbacks, self.options.g_regex_flags, use_bytes=self.options.use_bytes
            )

        if self.options.parser:
            self.parser = self._build_parser()
        elif lexer:
            self.lexer = self._build_lexer()

        if cache_fn:
            logger.debug('Saving grammar to cache: %s', cache_fn)
            with FS.open(cache_fn, 'wb') as f:
                f.write(cache_md5.encode('utf8') + b'\n')
                pickle.dump(used_files, f)
                self.save(f)

    if __doc__:
        __doc__ += "\n\n" + LarkOptions.OPTIONS_DOC

    __serialize_fields__ = 'parser', 'rules', 'options'

    def _build_lexer(self, dont_ignore=False):
        lexer_conf = self.lexer_conf
        if dont_ignore:
            from copy import copy
            lexer_conf = copy(lexer_conf)
            lexer_conf.ignore = ()
        return TraditionalLexer(lexer_conf)

    def _prepare_callbacks(self):
        self._callbacks = {}
        ##

        if self.options.ambiguity != 'forest':
            self._parse_tree_builder = ParseTreeBuilder(
                    self.rules,
                    self.options.tree_class or Tree,
                    self.options.propagate_positions,
                    self.options.parser != 'lalr' and self.options.ambiguity == 'explicit',
                    self.options.maybe_placeholders
                )
            self._callbacks = self._parse_tree_builder.create_callback(self.options.transformer)
        self._callbacks.update(_get_lexer_callbacks(self.options.transformer, self.terminals))

    def _build_parser(self):
        self._prepare_callbacks()
        parser_class = get_frontend(self.options.parser, self.options.lexer)
        parser_conf = ParserConf(self.rules, self._callbacks, self.options.start)
        return parser_class(self.lexer_conf, parser_conf, options=self.options)

    def save(self, f):
        #--
        data, m = self.memo_serialize([TerminalDef, Rule])
        pickle.dump({'data': data, 'memo': m}, f, protocol=pickle.HIGHEST_PROTOCOL)

    @classmethod
    def load(cls, f):
        #--
        inst = cls.__new__(cls)
        return inst._load(f)

    def _deserialize_lexer_conf(self, data, memo, options):
        lexer_conf = LexerConf.deserialize(data['lexer_conf'], memo)
        lexer_conf.callbacks = options.lexer_callbacks or {}
        lexer_conf.re_module = regex if options.regex else re
        lexer_conf.use_bytes = options.use_bytes
        lexer_conf.g_regex_flags = options.g_regex_flags
        lexer_conf.skip_validation = True
        lexer_conf.postlex = options.postlex
        return lexer_conf

    def _load(self, f, **kwargs):
        if isinstance(f, dict):
            d = f
        else:
            d = pickle.load(f)
        memo = d['memo']
        data = d['data']

        assert memo
        memo = SerializeMemoizer.deserialize(memo, {'Rule': Rule, 'TerminalDef': TerminalDef}, {})
        options = dict(data['options'])
        if (set(kwargs) - _LOAD_ALLOWED_OPTIONS) & set(LarkOptions._defaults):
            raise ConfigurationError("Some options are not allowed when loading a Parser: {}"
                             .format(set(kwargs) - _LOAD_ALLOWED_OPTIONS))
        options.update(kwargs)
        self.options = LarkOptions.deserialize(options, memo)
        self.rules = [Rule.deserialize(r, memo) for r in data['rules']]
        self.source_path = '<deserialized>'
        parser_class = get_frontend(self.options.parser, self.options.lexer)
        self.lexer_conf = self._deserialize_lexer_conf(data['parser'], memo, self.options)
        self.terminals = self.lexer_conf.terminals
        self._prepare_callbacks()
        self._terminals_dict = {t.name: t for t in self.terminals}
        self.parser = parser_class.deserialize(
            data['parser'],
            memo,
            self.lexer_conf,
            self._callbacks,
            self.options,  ##

        )
        return self

    @classmethod
    def _load_from_dict(cls, data, memo, **kwargs):
        inst = cls.__new__(cls)
        return inst._load({'data': data, 'memo': memo}, **kwargs)

    @classmethod
    def open(cls, grammar_filename, rel_to=None, **options):
        #--
        if rel_to:
            basepath = os.path.dirname(rel_to)
            grammar_filename = os.path.join(basepath, grammar_filename)
        with open(grammar_filename, encoding='utf8') as f:
            return cls(f, **options)

    @classmethod
    def open_from_package(cls, package, grammar_path, search_paths=("",), **options):
        #--
        package = FromPackageLoader(package, search_paths)
        full_path, text = package(None, grammar_path)
        options.setdefault('source_path', full_path)
        options.setdefault('import_paths', [])
        options['import_paths'].append(package)
        return cls(text, **options)

    def __repr__(self):
        return 'Lark(open(%r), parser=%r, lexer=%r, ...)' % (self.source_path, self.options.parser, self.options.lexer)


    def lex(self, text, dont_ignore=False):
        #--
        if not hasattr(self, 'lexer') or dont_ignore:
            lexer = self._build_lexer(dont_ignore)
        else:
            lexer = self.lexer
        lexer_thread = LexerThread(lexer, text)
        stream = lexer_thread.lex(None)
        if self.options.postlex:
            return self.options.postlex.process(stream)
        return stream

    def get_terminal(self, name):
        #--
        return self._terminals_dict[name]
    
    def parse_interactive(self, text=None, start=None):
        return self.parser.parse_interactive(text, start=start)

    def parse(self, text, start=None, on_error=None):
        #--
        return self.parser.parse(text, start=start, on_error=on_error)

    @property
    def source(self):
        warn("Lark.source attribute has been renamed to Lark.source_path", DeprecationWarning)
        return self.source_path

    @source.setter
    def source(self, value):
        self.source_path = value

    @property
    def grammar_source(self):
        warn("Lark.grammar_source attribute has been renamed to Lark.source_grammar", DeprecationWarning)
        return self.source_grammar

    @grammar_source.setter
    def grammar_source(self, value):
        self.source_grammar = value



class DedentError(LarkError):
    pass

class Indenter(PostLex):
    def __init__(self):
        self.paren_level = None
        self.indent_level = None
        assert self.tab_len > 0

    def handle_NL(self, token):
        if self.paren_level > 0:
            return

        yield token

        indent_str = token.rsplit('\n', 1)[1] ##

        indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len

        if indent > self.indent_level[-1]:
            self.indent_level.append(indent)
            yield Token.new_borrow_pos(self.INDENT_type, indent_str, token)
        else:
            while indent < self.indent_level[-1]:
                self.indent_level.pop()
                yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token)

            if indent != self.indent_level[-1]:
                raise DedentError('Unexpected dedent to column %s. Expected dedent to %s' % (indent, self.indent_level[-1]))

    def _process(self, stream):
        for token in stream:
            if token.type == self.NL_type:
                for t in self.handle_NL(token):
                    yield t
            else:
                yield token

            if token.type in self.OPEN_PAREN_types:
                self.paren_level += 1
            elif token.type in self.CLOSE_PAREN_types:
                self.paren_level -= 1
                assert self.paren_level >= 0

        while len(self.indent_level) > 1:
            self.indent_level.pop()
            yield Token(self.DEDENT_type, '')

        assert self.indent_level == [0], self.indent_level

    def process(self, stream):
        self.paren_level = 0
        self.indent_level = [0]
        return self._process(stream)

    ##

    @property
    def always_accept(self):
        return (self.NL_type,)


import pickle, zlib, base64
DATA = (
{'parser': {'lexer_conf': {'terminals': [{'@': 0}, {'@': 1}, {'@': 2}, {'@': 3}, {'@': 4}, {'@': 5}, {'@': 6}, {'@': 7}, {'@': 8}, {'@': 9}, {'@': 10}, {'@': 11}, {'@': 12}, {'@': 13}, {'@': 14}, {'@': 15}, {'@': 16}, {'@': 17}, {'@': 18}, {'@': 19}, {'@': 20}, {'@': 21}, {'@': 22}, {'@': 23}, {'@': 24}, {'@': 25}, {'@': 26}, {'@': 27}, {'@': 28}, {'@': 29}, {'@': 30}, {'@': 31}, {'@': 32}, {'@': 33}, {'@': 34}, {'@': 35}, {'@': 36}, {'@': 37}, {'@': 38}, {'@': 39}, {'@': 40}, {'@': 41}], 'ignore': ['__IGNORE_0', '__IGNORE_1'], 'g_regex_flags': 0, 'use_bytes': False, 'lexer_type': 'contextual', '__type__': 'LexerConf'}, 'parser_conf': {'rules': [{'@': 42}, {'@': 43}, {'@': 44}, {'@': 45}, {'@': 46}, {'@': 47}, {'@': 48}, {'@': 49}, {'@': 50}, {'@': 51}, {'@': 52}, {'@': 53}, {'@': 54}, {'@': 55}, {'@': 56}, {'@': 57}, {'@': 58}, {'@': 59}, {'@': 60}, {'@': 61}, {'@': 62}, {'@': 63}, {'@': 64}, {'@': 65}, {'@': 66}, {'@': 67}, {'@': 68}, {'@': 69}, {'@': 70}, {'@': 71}, {'@': 72}, {'@': 73}, {'@': 74}, {'@': 75}, {'@': 76}, {'@': 77}, {'@': 78}, {'@': 79}, {'@': 80}, {'@': 81}, {'@': 82}, {'@': 83}, {'@': 84}, {'@': 85}, {'@': 86}, {'@': 87}, {'@': 88}, {'@': 89}, {'@': 90}, {'@': 91}, {'@': 92}, {'@': 93}, {'@': 94}, {'@': 95}, {'@': 96}, {'@': 97}, {'@': 98}, {'@': 99}, {'@': 100}, {'@': 101}, {'@': 102}, {'@': 103}, {'@': 104}, {'@': 105}, {'@': 106}, {'@': 107}, {'@': 108}, {'@': 109}, {'@': 110}, {'@': 111}, {'@': 112}, {'@': 113}, {'@': 114}, {'@': 115}, {'@': 116}, {'@': 117}, {'@': 118}, {'@': 119}, {'@': 120}, {'@': 121}, {'@': 122}, {'@': 123}, {'@': 124}, {'@': 125}, {'@': 126}, {'@': 127}, {'@': 128}, {'@': 129}, {'@': 130}, {'@': 131}, {'@': 132}, {'@': 133}, {'@': 134}, {'@': 135}, {'@': 136}, {'@': 137}, {'@': 138}, {'@': 139}, {'@': 140}, {'@': 141}, {'@': 142}, {'@': 143}, {'@': 144}, {'@': 145}, {'@': 146}, {'@': 147}, {'@': 148}, {'@': 149}, {'@': 150}, {'@': 151}, {'@': 152}, {'@': 153}, {'@': 154}, {'@': 155}, {'@': 156}, {'@': 157}, {'@': 158}, {'@': 159}, {'@': 160}, {'@': 161}, {'@': 162}, {'@': 163}, {'@': 164}, {'@': 165}, {'@': 166}, {'@': 167}, {'@': 168}, {'@': 169}, {'@': 170}, {'@': 171}, {'@': 172}, {'@': 173}, {'@': 174}, {'@': 175}, {'@': 176}, {'@': 177}, {'@': 178}, {'@': 179}, {'@': 180}, {'@': 181}, {'@': 182}, {'@': 183}, {'@': 184}, {'@': 185}, {'@': 186}, {'@': 187}, {'@': 188}, {'@': 189}, {'@': 190}, {'@': 191}, {'@': 192}, {'@': 193}, {'@': 194}, {'@': 195}, {'@': 196}, {'@': 197}, {'@': 198}, {'@': 199}, {'@': 200}, {'@': 201}, {'@': 202}, {'@': 203}, {'@': 204}, {'@': 205}, {'@': 206}, {'@': 207}, {'@': 208}, {'@': 209}, {'@': 210}, {'@': 211}, {'@': 212}, {'@': 213}, {'@': 214}, {'@': 215}, {'@': 216}, {'@': 217}, {'@': 218}, {'@': 219}, {'@': 220}, {'@': 221}, {'@': 222}, {'@': 223}, {'@': 224}, {'@': 225}, {'@': 226}, {'@': 227}, {'@': 228}, {'@': 229}, {'@': 230}, {'@': 231}, {'@': 232}, {'@': 233}, {'@': 234}, {'@': 235}, {'@': 236}, {'@': 237}, {'@': 238}, {'@': 239}, {'@': 240}, {'@': 241}, {'@': 242}, {'@': 243}, {'@': 244}, {'@': 245}, {'@': 246}, {'@': 247}, {'@': 248}, {'@': 249}, {'@': 250}, {'@': 251}, {'@': 252}, {'@': 253}, {'@': 254}, {'@': 255}, {'@': 256}, {'@': 257}, {'@': 258}, {'@': 259}, {'@': 260}, {'@': 261}, {'@': 262}, {'@': 263}, {'@': 264}, {'@': 265}, {'@': 266}, {'@': 267}, {'@': 268}, {'@': 269}, {'@': 270}, {'@': 271}, {'@': 272}, {'@': 273}, {'@': 274}, {'@': 275}, {'@': 276}, {'@': 277}, {'@': 278}, {'@': 279}, {'@': 280}, {'@': 281}, {'@': 282}, {'@': 283}, {'@': 284}, {'@': 285}, {'@': 286}, {'@': 287}, {'@': 288}, {'@': 289}, {'@': 290}, {'@': 291}, {'@': 292}, {'@': 293}, {'@': 294}, {'@': 295}, {'@': 296}, {'@': 297}, {'@': 298}, {'@': 299}, {'@': 300}, {'@': 301}, {'@': 302}, {'@': 303}, {'@': 304}, {'@': 305}, {'@': 306}, {'@': 307}, {'@': 308}, {'@': 309}, {'@': 310}, {'@': 311}, {'@': 312}, {'@': 313}, {'@': 314}, {'@': 315}, {'@': 316}, {'@': 317}, {'@': 318}, {'@': 319}, {'@': 320}, {'@': 321}, {'@': 322}, {'@': 323}, {'@': 324}, {'@': 325}, {'@': 326}, {'@': 327}, {'@': 328}, {'@': 329}, {'@': 330}, {'@': 331}, {'@': 332}, {'@': 333}, {'@': 334}, {'@': 335}, {'@': 336}, {'@': 337}, {'@': 338}, {'@': 339}, {'@': 340}, {'@': 341}, {'@': 342}, {'@': 343}, {'@': 344}, {'@': 345}], 'start': ['eval', 'module'], 'parser_type': 'lalr', '__type__': 'ParserConf'}, 'parser': {'tokens': {0: 'full_splat', 1: 'LSQB', 2: 'index', 3: '__ANON_13', 4: 'get_attr', 5: 'DOT', 6: 'attr_splat', 7: 'COLON', 8: 'RSQB', 9: 'IF', 10: '__ANON_8', 11: '__ANON_5', 12: '__ANON_1', 13: 'EQUAL', 14: 'RPAR', 15: '__ANON_7', 16: 'RBRACE', 17: 'STAR', 18: 'PLUS', 19: '$END', 20: '__ANON_14', 21: '__ANON_2', 22: '__ANON_6', 23: 'LESSTHAN', 24: '__ANON_4', 25: '__ANON_9', 26: '__ANON_12', 27: 'COMMA', 28: 'MINUS', 29: '__ANON_3', 30: 'MORETHAN', 31: '__ANON_0', 32: 'PERCENT', 33: 'QMARK', 34: 'SLASH', 35: 'LBRACE', 36: 'expression', 37: 'identifier', 38: 'get_attr_expr_term', 39: 'expr_term', 40: 'LPAR', 41: 'operation', 42: 'binary_factor_op', 43: 'binary_test_op', 44: 'heredoc_template_trim', 45: 'binary_and_op', 46: 'tuple', 47: 'heredoc_template', 48: 'full_splat_expr_term', 49: '__ANON_10', 50: 'quoted_template_expr', 51: '__int_lit_plus_9', 52: 'binary_eq_op', 53: 'binary_term_op', 54: '__ANON_11', 55: 'STRING_LIT', 56: 'int_lit', 57: 'object', 58: 'attr_splat_expr_term', 59: 'unary_op', 60: 'for_object_expr', 61: 'function_call', 62: 'BANG', 63: 'for_tuple_expr', 64: 'DECIMAL', 65: 'index_expr_term', 66: 'float_lit', 67: 'conditional', 68: 'binary_or_op', 69: '__new_line_or_comment_plus_2', 70: 'new_line_or_comment', 71: '__tuple_star_10', 72: 'kwarg', 73: 'binary_term_operator', 74: '__binary_term_op_star_7', 75: '__block_star_1', 76: 'string_lit', 77: 'object_elem', 78: 'arguments', 79: 'for_cond', 80: '__body_star_0', 81: 'attribute', 82: 'block', 83: 'body', 84: '__full_splat_star_13', 85: 'EXP_MARK', 86: 'IN', 87: 'FOR', 88: 'for_intro', 89: '__binary_eq_op_star_5', 90: 'binary_eq_operator', 91: 'binary_and_operator', 92: '__binary_and_op_star_4', 93: 'binary_or_operator', 94: '__binary_or_op_star_3', 95: '__object_star_11', 96: 'new_line_and_or_comma', 97: 'binary_factor_operator', 98: 'eval', 99: 'module', 100: '__binary_factor_op_star_8', 101: '__attr_splat_star_12', 102: 'binary_test_operator', 103: '__binary_test_op_star_6'}, 'states': {0: {0: (0, 402), 1: (0, 264), 2: (0, 376), 3: (0, 358), 4: (0, 335), 5: (0, 337), 6: (0, 322), 7: (1, {'@': 326}), 8: (1, {'@': 326}), 9: (1, {'@': 326}), 10: (1, {'@': 326}), 11: (1, {'@': 326}), 12: (1, {'@': 326}), 13: (1, {'@': 326}), 14: (1, {'@': 326}), 15: (1, {'@': 326}), 16: (1, {'@': 326}), 17: (1, {'@': 326}), 18: (1, {'@': 326}), 19: (1, {'@': 326}), 20: (1, {'@': 326}), 21: (1, {'@': 326}), 22: (1, {'@': 326}), 23: (1, {'@': 326}), 24: (1, {'@': 326}), 25: (1, {'@': 326}), 26: (1, {'@': 326}), 27: (1, {'@': 326}), 28: (1, {'@': 326}), 29: (1, {'@': 326}), 30: (1, {'@': 326}), 31: (1, {'@': 326}), 32: (1, {'@': 326}), 33: (1, {'@': 326}), 34: (1, {'@': 326})}, 1: {8: (0, 50)}, 2: {20: (1, {'@': 173}), 22: (1, {'@': 173}), 1: (1, {'@': 173}), 23: (1, {'@': 173}), 24: (1, {'@': 173}), 25: (1, {'@': 173}), 10: (1, {'@': 173}), 11: (1, {'@': 173}), 3: (1, {'@': 173}), 28: (1, {'@': 173}), 15: (1, {'@': 173}), 30: (1, {'@': 173}), 5: (1, {'@': 173}), 32: (1, {'@': 173}), 17: (1, {'@': 173}), 18: (1, {'@': 173}), 33: (1, {'@': 173}), 34: (1, {'@': 173}), 21: (1, {'@': 173}), 8: (1, {'@': 173}), 12: (1, {'@': 173}), 27: (1, {'@': 173}), 31: (1, {'@': 173}), 7: (1, {'@': 173}), 9: (1, {'@': 173}), 26: (1, {'@': 173}), 13: (1, {'@': 173}), 14: (1, {'@': 173}), 29: (1, {'@': 173}), 16: (1, {'@': 173}), 19: (1, {'@': 173})}, 3: {1: (0, 540), 35: (0, 174), 36: (0, 461), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 4: {27: (0, 463), 69: (0, 514), 12: (0, 532), 70: (0, 55), 31: (0, 524), 8: (0, 219), 21: (0, 486)}, 5: {27: (0, 105), 71: (0, 468), 70: (0, 471), 12: (0, 532), 72: (0, 472), 69: (0, 514), 26: (0, 474), 21: (0, 486), 31: (0, 524), 14: (1, {'@': 188})}, 6: {28: (1, {'@': 100}), 20: (1, {'@': 100}), 15: (1, {'@': 100}), 22: (1, {'@': 100}), 30: (1, {'@': 100}), 1: (1, {'@': 100}), 23: (1, {'@': 100}), 5: (1, {'@': 100}), 24: (1, {'@': 100}), 25: (1, {'@': 100}), 32: (1, {'@': 100}), 10: (1, {'@': 100}), 11: (1, {'@': 100}), 17: (1, {'@': 100}), 18: (1, {'@': 100}), 3: (1, {'@': 100}), 33: (1, {'@': 100}), 34: (1, {'@': 100}), 21: (1, {'@': 100}), 8: (1, {'@': 100}), 12: (1, {'@': 100}), 27: (1, {'@': 100}), 31: (1, {'@': 100}), 7: (1, {'@': 100}), 9: (1, {'@': 100}), 26: (1, {'@': 100}), 13: (1, {'@': 100}), 14: (1, {'@': 100}), 29: (1, {'@': 100}), 16: (1, {'@': 100}), 19: (1, {'@': 100})}, 7: {20: (1, {'@': 147}), 22: (1, {'@': 147}), 1: (1, {'@': 147}), 23: (1, {'@': 147}), 24: (1, {'@': 147}), 25: (1, {'@': 147}), 10: (1, {'@': 147}), 11: (1, {'@': 147}), 3: (1, {'@': 147}), 28: (1, {'@': 147}), 15: (1, {'@': 147}), 30: (1, {'@': 147}), 5: (1, {'@': 147}), 32: (1, {'@': 147}), 17: (1, {'@': 147}), 18: (1, {'@': 147}), 33: (1, {'@': 147}), 34: (1, {'@': 147}), 21: (1, {'@': 147}), 8: (1, {'@': 147}), 12: (1, {'@': 147}), 27: (1, {'@': 147}), 31: (1, {'@': 147}), 7: (1, {'@': 147}), 9: (1, {'@': 147}), 26: (1, {'@': 147}), 13: (1, {'@': 147}), 14: (1, {'@': 147}), 29: (1, {'@': 147}), 16: (1, {'@': 147}), 19: (1, {'@': 147})}, 8: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 8: (0, 124), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 70: (0, 129), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 163), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 9: {14: (0, 360)}, 10: {69: (0, 514), 8: (0, 125), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 447)}, 11: {20: (1, {'@': 198}), 21: (1, {'@': 198}), 22: (1, {'@': 198}), 1: (1, {'@': 198}), 23: (1, {'@': 198}), 7: (1, {'@': 198}), 8: (1, {'@': 198}), 9: (1, {'@': 198}), 24: (1, {'@': 198}), 10: (1, {'@': 198}), 11: (1, {'@': 198}), 12: (1, {'@': 198}), 25: (1, {'@': 198}), 26: (1, {'@': 198}), 3: (1, {'@': 198}), 27: (1, {'@': 198}), 13: (1, {'@': 198}), 14: (1, {'@': 198}), 28: (1, {'@': 198}), 29: (1, {'@': 198}), 15: (1, {'@': 198}), 30: (1, {'@': 198}), 31: (1, {'@': 198}), 5: (1, {'@': 198}), 16: (1, {'@': 198}), 32: (1, {'@': 198}), 17: (1, {'@': 198}), 18: (1, {'@': 198}), 19: (1, {'@': 198}), 33: (1, {'@': 198}), 34: (1, {'@': 198})}, 12: {69: (0, 514), 12: (0, 532), 70: (0, 394), 31: (0, 524), 8: (0, 120), 21: (0, 486)}, 13: {18: (0, 145), 28: (0, 93), 73: (0, 356), 74: (0, 383), 20: (1, {'@': 83}), 15: (1, {'@': 83}), 22: (1, {'@': 83}), 30: (1, {'@': 83}), 23: (1, {'@': 83}), 24: (1, {'@': 83}), 25: (1, {'@': 83}), 10: (1, {'@': 83}), 11: (1, {'@': 83}), 33: (1, {'@': 83}), 21: (1, {'@': 83}), 31: (1, {'@': 83}), 8: (1, {'@': 83}), 27: (1, {'@': 83}), 12: (1, {'@': 83}), 7: (1, {'@': 83}), 9: (1, {'@': 83}), 26: (1, {'@': 83}), 13: (1, {'@': 83}), 14: (1, {'@': 83}), 29: (1, {'@': 83}), 16: (1, {'@': 83}), 19: (1, {'@': 83})}, 14: {20: (1, {'@': 152}), 22: (1, {'@': 152}), 1: (1, {'@': 152}), 23: (1, {'@': 152}), 24: (1, {'@': 152}), 25: (1, {'@': 152}), 10: (1, {'@': 152}), 11: (1, {'@': 152}), 3: (1, {'@': 152}), 28: (1, {'@': 152}), 15: (1, {'@': 152}), 30: (1, {'@': 152}), 5: (1, {'@': 152}), 32: (1, {'@': 152}), 17: (1, {'@': 152}), 18: (1, {'@': 152}), 33: (1, {'@': 152}), 34: (1, {'@': 152}), 21: (1, {'@': 152}), 8: (1, {'@': 152}), 12: (1, {'@': 152}), 27: (1, {'@': 152}), 31: (1, {'@': 152}), 7: (1, {'@': 152}), 9: (1, {'@': 152}), 26: (1, {'@': 152}), 13: (1, {'@': 152}), 14: (1, {'@': 152}), 29: (1, {'@': 152}), 16: (1, {'@': 152}), 19: (1, {'@': 152})}, 15: {16: (1, {'@': 49}), 29: (1, {'@': 49}), 31: (1, {'@': 49}), 21: (1, {'@': 49}), 12: (1, {'@': 49}), 19: (1, {'@': 49})}, 16: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 36: (0, 10), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 17: {28: (1, {'@': 57}), 40: (1, {'@': 57}), 29: (1, {'@': 57}), 1: (1, {'@': 57}), 62: (1, {'@': 57}), 55: (1, {'@': 57}), 35: (1, {'@': 57}), 16: (1, {'@': 57}), 64: (1, {'@': 57}), 49: (1, {'@': 57}), 54: (1, {'@': 57})}, 18: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 97), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 70: (0, 101), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 8: (0, 106), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 19: {35: (0, 177), 75: (0, 498), 29: (0, 491), 55: (0, 492), 37: (0, 479), 13: (0, 481), 76: (0, 487)}, 20: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 41: (0, 183), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 70: (0, 184), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 21: {69: (0, 514), 70: (0, 54), 12: (0, 532), 31: (0, 524), 21: (0, 486), 8: (0, 171)}, 22: {1: (0, 540), 77: (0, 340), 35: (0, 174), 37: (0, 284), 38: (0, 241), 39: (0, 325), 40: (0, 475), 36: (0, 42), 16: (0, 191), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 23: {43: (0, 30), 1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 24: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 36: (0, 69), 47: (0, 205), 70: (0, 71), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 25: {28: (1, {'@': 101}), 20: (1, {'@': 101}), 15: (1, {'@': 101}), 22: (1, {'@': 101}), 30: (1, {'@': 101}), 1: (1, {'@': 101}), 23: (1, {'@': 101}), 5: (1, {'@': 101}), 24: (1, {'@': 101}), 25: (1, {'@': 101}), 32: (1, {'@': 101}), 10: (1, {'@': 101}), 11: (1, {'@': 101}), 17: (1, {'@': 101}), 18: (1, {'@': 101}), 3: (1, {'@': 101}), 33: (1, {'@': 101}), 34: (1, {'@': 101}), 21: (1, {'@': 101}), 8: (1, {'@': 101}), 12: (1, {'@': 101}), 27: (1, {'@': 101}), 31: (1, {'@': 101}), 7: (1, {'@': 101}), 9: (1, {'@': 101}), 26: (1, {'@': 101}), 13: (1, {'@': 101}), 14: (1, {'@': 101}), 29: (1, {'@': 101}), 16: (1, {'@': 101}), 19: (1, {'@': 101})}, 26: {7: (0, 352)}, 27: {7: (1, {'@': 325}), 8: (1, {'@': 325}), 9: (1, {'@': 325}), 10: (1, {'@': 325}), 11: (1, {'@': 325}), 12: (1, {'@': 325}), 13: (1, {'@': 325}), 14: (1, {'@': 325}), 15: (1, {'@': 325}), 16: (1, {'@': 325}), 18: (1, {'@': 325}), 19: (1, {'@': 325}), 20: (1, {'@': 325}), 21: (1, {'@': 325}), 22: (1, {'@': 325}), 23: (1, {'@': 325}), 24: (1, {'@': 325}), 25: (1, {'@': 325}), 26: (1, {'@': 325}), 27: (1, {'@': 325}), 28: (1, {'@': 325}), 29: (1, {'@': 325}), 30: (1, {'@': 325}), 31: (1, {'@': 325}), 33: (1, {'@': 325})}, 28: {7: (1, {'@': 324}), 8: (1, {'@': 324}), 9: (1, {'@': 324}), 10: (1, {'@': 324}), 11: (1, {'@': 324}), 12: (1, {'@': 324}), 13: (1, {'@': 324}), 14: (1, {'@': 324}), 15: (1, {'@': 324}), 16: (1, {'@': 324}), 18: (1, {'@': 324}), 19: (1, {'@': 324}), 20: (1, {'@': 324}), 21: (1, {'@': 324}), 22: (1, {'@': 324}), 23: (1, {'@': 324}), 24: (1, {'@': 324}), 25: (1, {'@': 324}), 26: (1, {'@': 324}), 27: (1, {'@': 324}), 28: (1, {'@': 324}), 29: (1, {'@': 324}), 30: (1, {'@': 324}), 31: (1, {'@': 324}), 33: (1, {'@': 324})}, 29: {69: (0, 514), 70: (0, 387), 12: (0, 532), 31: (0, 524), 7: (0, 389), 21: (0, 486)}, 30: {20: (1, {'@': 320}), 21: (1, {'@': 320}), 24: (1, {'@': 320}), 25: (1, {'@': 320}), 7: (1, {'@': 320}), 9: (1, {'@': 320}), 10: (1, {'@': 320}), 11: (1, {'@': 320}), 12: (1, {'@': 320}), 8: (1, {'@': 320}), 26: (1, {'@': 320}), 27: (1, {'@': 320}), 13: (1, {'@': 320}), 14: (1, {'@': 320}), 29: (1, {'@': 320}), 31: (1, {'@': 320}), 16: (1, {'@': 320}), 19: (1, {'@': 320}), 33: (1, {'@': 320})}, 31: {20: (1, {'@': 321}), 21: (1, {'@': 321}), 24: (1, {'@': 321}), 25: (1, {'@': 321}), 7: (1, {'@': 321}), 9: (1, {'@': 321}), 10: (1, {'@': 321}), 11: (1, {'@': 321}), 12: (1, {'@': 321}), 8: (1, {'@': 321}), 26: (1, {'@': 321}), 27: (1, {'@': 321}), 13: (1, {'@': 321}), 14: (1, {'@': 321}), 29: (1, {'@': 321}), 31: (1, {'@': 321}), 16: (1, {'@': 321}), 19: (1, {'@': 321}), 33: (1, {'@': 321})}, 32: {14: (1, {'@': 332}), 21: (1, {'@': 332}), 31: (1, {'@': 332}), 12: (1, {'@': 332}), 26: (1, {'@': 332}), 27: (1, {'@': 332}), 8: (1, {'@': 332})}, 33: {7: (1, {'@': 323}), 8: (1, {'@': 323}), 9: (1, {'@': 323}), 10: (1, {'@': 323}), 11: (1, {'@': 323}), 12: (1, {'@': 323}), 13: (1, {'@': 323}), 14: (1, {'@': 323}), 15: (1, {'@': 323}), 16: (1, {'@': 323}), 19: (1, {'@': 323}), 20: (1, {'@': 323}), 21: (1, {'@': 323}), 22: (1, {'@': 323}), 23: (1, {'@': 323}), 24: (1, {'@': 323}), 25: (1, {'@': 323}), 26: (1, {'@': 323}), 27: (1, {'@': 323}), 29: (1, {'@': 323}), 30: (1, {'@': 323}), 31: (1, {'@': 323}), 33: (1, {'@': 323})}, 34: {19: (1, {'@': 42})}, 35: {69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 419), 19: (1, {'@': 45})}, 36: {64: (0, 444), 1: (1, {'@': 120}), 7: (1, {'@': 120}), 8: (1, {'@': 120}), 9: (1, {'@': 120}), 10: (1, {'@': 120}), 11: (1, {'@': 120}), 12: (1, {'@': 120}), 13: (1, {'@': 120}), 14: (1, {'@': 120}), 15: (1, {'@': 120}), 5: (1, {'@': 120}), 16: (1, {'@': 120}), 17: (1, {'@': 120}), 18: (1, {'@': 120}), 19: (1, {'@': 120}), 20: (1, {'@': 120}), 21: (1, {'@': 120}), 22: (1, {'@': 120}), 23: (1, {'@': 120}), 24: (1, {'@': 120}), 25: (1, {'@': 120}), 26: (1, {'@': 120}), 3: (1, {'@': 120}), 27: (1, {'@': 120}), 28: (1, {'@': 120}), 29: (1, {'@': 120}), 30: (1, {'@': 120}), 31: (1, {'@': 120}), 32: (1, {'@': 120}), 33: (1, {'@': 120}), 34: (1, {'@': 120})}, 37: {20: (1, {'@': 317}), 21: (1, {'@': 317}), 24: (1, {'@': 317}), 7: (1, {'@': 317}), 9: (1, {'@': 317}), 8: (1, {'@': 317}), 12: (1, {'@': 317}), 26: (1, {'@': 317}), 27: (1, {'@': 317}), 13: (1, {'@': 317}), 14: (1, {'@': 317}), 29: (1, {'@': 317}), 31: (1, {'@': 317}), 16: (1, {'@': 317}), 19: (1, {'@': 317}), 33: (1, {'@': 317})}, 38: {1: (0, 540), 36: (0, 5), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 78: (0, 465), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 70: (0, 476), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 14: (0, 2), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 39: {16: (0, 462)}, 40: {20: (1, {'@': 319}), 21: (1, {'@': 319}), 24: (1, {'@': 319}), 7: (1, {'@': 319}), 8: (1, {'@': 319}), 9: (1, {'@': 319}), 11: (1, {'@': 319}), 12: (1, {'@': 319}), 26: (1, {'@': 319}), 27: (1, {'@': 319}), 13: (1, {'@': 319}), 14: (1, {'@': 319}), 29: (1, {'@': 319}), 31: (1, {'@': 319}), 16: (1, {'@': 319}), 19: (1, {'@': 319}), 33: (1, {'@': 319})}, 41: {70: (0, 122), 9: (0, 147), 69: (0, 514), 12: (0, 532), 79: (0, 148), 8: (0, 157), 31: (0, 524), 21: (0, 486)}, 42: {13: (0, 309), 7: (0, 315)}, 43: {1: (0, 540), 35: (0, 174), 36: (0, 369), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 44: {69: (0, 514), 70: (0, 442), 12: (0, 532), 31: (0, 524), 14: (0, 441), 21: (0, 486)}, 45: {16: (0, 126)}, 46: {80: (0, 548), 37: (0, 19), 29: (0, 491), 81: (0, 518), 82: (0, 537), 83: (0, 339), 16: (1, {'@': 48})}, 47: {20: (1, {'@': 176}), 22: (1, {'@': 176}), 1: (1, {'@': 176}), 23: (1, {'@': 176}), 24: (1, {'@': 176}), 25: (1, {'@': 176}), 10: (1, {'@': 176}), 11: (1, {'@': 176}), 3: (1, {'@': 176}), 28: (1, {'@': 176}), 15: (1, {'@': 176}), 30: (1, {'@': 176}), 5: (1, {'@': 176}), 32: (1, {'@': 176}), 17: (1, {'@': 176}), 18: (1, {'@': 176}), 33: (1, {'@': 176}), 34: (1, {'@': 176}), 21: (1, {'@': 176}), 8: (1, {'@': 176}), 12: (1, {'@': 176}), 27: (1, {'@': 176}), 31: (1, {'@': 176}), 7: (1, {'@': 176}), 9: (1, {'@': 176}), 26: (1, {'@': 176}), 13: (1, {'@': 176}), 14: (1, {'@': 176}), 29: (1, {'@': 176}), 16: (1, {'@': 176}), 19: (1, {'@': 176})}, 48: {8: (0, 247)}, 49: {1: (0, 540), 35: (0, 174), 39: (0, 231), 37: (0, 268), 38: (0, 241), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 50: {84: (0, 364), 1: (0, 370), 5: (0, 337), 4: (0, 379), 2: (0, 382), 20: (1, {'@': 203}), 21: (1, {'@': 203}), 22: (1, {'@': 203}), 23: (1, {'@': 203}), 7: (1, {'@': 203}), 8: (1, {'@': 203}), 9: (1, {'@': 203}), 24: (1, {'@': 203}), 10: (1, {'@': 203}), 11: (1, {'@': 203}), 12: (1, {'@': 203}), 25: (1, {'@': 203}), 26: (1, {'@': 203}), 3: (1, {'@': 203}), 27: (1, {'@': 203}), 13: (1, {'@': 203}), 14: (1, {'@': 203}), 28: (1, {'@': 203}), 29: (1, {'@': 203}), 15: (1, {'@': 203}), 30: (1, {'@': 203}), 31: (1, {'@': 203}), 16: (1, {'@': 203}), 32: (1, {'@': 203}), 17: (1, {'@': 203}), 18: (1, {'@': 203}), 19: (1, {'@': 203}), 33: (1, {'@': 203}), 34: (1, {'@': 203})}, 51: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 43: (0, 31)}, 52: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 52: (0, 90), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 53: {70: (0, 536), 37: (0, 278), 12: (0, 532), 69: (0, 514), 31: (0, 524), 21: (0, 486), 29: (0, 491)}, 54: {8: (0, 62)}, 55: {8: (0, 316)}, 56: {69: (0, 514), 14: (0, 6), 12: (0, 532), 70: (0, 9), 31: (0, 524), 21: (0, 486)}, 57: {8: (0, 366)}, 58: {20: (1, {'@': 155}), 22: (1, {'@': 155}), 1: (1, {'@': 155}), 23: (1, {'@': 155}), 24: (1, {'@': 155}), 25: (1, {'@': 155}), 10: (1, {'@': 155}), 11: (1, {'@': 155}), 3: (1, {'@': 155}), 28: (1, {'@': 155}), 15: (1, {'@': 155}), 30: (1, {'@': 155}), 5: (1, {'@': 155}), 32: (1, {'@': 155}), 17: (1, {'@': 155}), 18: (1, {'@': 155}), 33: (1, {'@': 155}), 34: (1, {'@': 155}), 21: (1, {'@': 155}), 8: (1, {'@': 155}), 12: (1, {'@': 155}), 27: (1, {'@': 155}), 31: (1, {'@': 155}), 7: (1, {'@': 155}), 9: (1, {'@': 155}), 26: (1, {'@': 155}), 13: (1, {'@': 155}), 14: (1, {'@': 155}), 29: (1, {'@': 155}), 16: (1, {'@': 155}), 19: (1, {'@': 155})}, 59: {16: (1, {'@': 304}), 29: (1, {'@': 304}), 31: (1, {'@': 304}), 21: (1, {'@': 304}), 12: (1, {'@': 304}), 19: (1, {'@': 304})}, 60: {85: (0, 503), 64: (0, 444), 20: (1, {'@': 122}), 22: (1, {'@': 122}), 1: (1, {'@': 122}), 23: (1, {'@': 122}), 24: (1, {'@': 122}), 25: (1, {'@': 122}), 10: (1, {'@': 122}), 11: (1, {'@': 122}), 3: (1, {'@': 122}), 28: (1, {'@': 122}), 15: (1, {'@': 122}), 30: (1, {'@': 122}), 5: (1, {'@': 122}), 32: (1, {'@': 122}), 17: (1, {'@': 122}), 18: (1, {'@': 122}), 33: (1, {'@': 122}), 34: (1, {'@': 122}), 21: (1, {'@': 122}), 8: (1, {'@': 122}), 12: (1, {'@': 122}), 27: (1, {'@': 122}), 31: (1, {'@': 122}), 7: (1, {'@': 122}), 9: (1, {'@': 122}), 26: (1, {'@': 122}), 13: (1, {'@': 122}), 14: (1, {'@': 122}), 29: (1, {'@': 122}), 16: (1, {'@': 122}), 19: (1, {'@': 122})}, 61: {14: (0, 144)}, 62: {20: (1, {'@': 196}), 21: (1, {'@': 196}), 22: (1, {'@': 196}), 1: (1, {'@': 196}), 23: (1, {'@': 196}), 7: (1, {'@': 196}), 8: (1, {'@': 196}), 9: (1, {'@': 196}), 24: (1, {'@': 196}), 10: (1, {'@': 196}), 11: (1, {'@': 196}), 12: (1, {'@': 196}), 25: (1, {'@': 196}), 26: (1, {'@': 196}), 3: (1, {'@': 196}), 27: (1, {'@': 196}), 13: (1, {'@': 196}), 14: (1, {'@': 196}), 28: (1, {'@': 196}), 29: (1, {'@': 196}), 15: (1, {'@': 196}), 30: (1, {'@': 196}), 31: (1, {'@': 196}), 5: (1, {'@': 196}), 16: (1, {'@': 196}), 32: (1, {'@': 196}), 17: (1, {'@': 196}), 18: (1, {'@': 196}), 19: (1, {'@': 196}), 33: (1, {'@': 196}), 34: (1, {'@': 196})}, 63: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 36: (0, 194), 59: (0, 496), 70: (0, 195), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 64: {28: (1, {'@': 55}), 40: (1, {'@': 55}), 29: (1, {'@': 55}), 1: (1, {'@': 55}), 62: (1, {'@': 55}), 55: (1, {'@': 55}), 35: (1, {'@': 55}), 16: (1, {'@': 55}), 64: (1, {'@': 55}), 49: (1, {'@': 55}), 54: (1, {'@': 55})}, 65: {64: (0, 444), 20: (1, {'@': 123}), 22: (1, {'@': 123}), 1: (1, {'@': 123}), 23: (1, {'@': 123}), 24: (1, {'@': 123}), 25: (1, {'@': 123}), 10: (1, {'@': 123}), 11: (1, {'@': 123}), 3: (1, {'@': 123}), 28: (1, {'@': 123}), 15: (1, {'@': 123}), 30: (1, {'@': 123}), 5: (1, {'@': 123}), 32: (1, {'@': 123}), 17: (1, {'@': 123}), 18: (1, {'@': 123}), 33: (1, {'@': 123}), 34: (1, {'@': 123}), 21: (1, {'@': 123}), 8: (1, {'@': 123}), 12: (1, {'@': 123}), 27: (1, {'@': 123}), 31: (1, {'@': 123}), 7: (1, {'@': 123}), 9: (1, {'@': 123}), 26: (1, {'@': 123}), 13: (1, {'@': 123}), 14: (1, {'@': 123}), 29: (1, {'@': 123}), 16: (1, {'@': 123}), 19: (1, {'@': 123})}, 66: {86: (0, 180)}, 67: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 41: (0, 29), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 68: {70: (0, 175), 9: (0, 147), 69: (0, 514), 12: (0, 532), 8: (0, 327), 31: (0, 524), 79: (0, 329), 21: (0, 486)}, 69: {7: (0, 368)}, 70: {20: (1, {'@': 231}), 22: (1, {'@': 231}), 1: (1, {'@': 231}), 23: (1, {'@': 231}), 24: (1, {'@': 231}), 25: (1, {'@': 231}), 10: (1, {'@': 231}), 11: (1, {'@': 231}), 3: (1, {'@': 231}), 28: (1, {'@': 231}), 15: (1, {'@': 231}), 30: (1, {'@': 231}), 5: (1, {'@': 231}), 32: (1, {'@': 231}), 17: (1, {'@': 231}), 18: (1, {'@': 231}), 33: (1, {'@': 231}), 34: (1, {'@': 231}), 21: (1, {'@': 231}), 8: (1, {'@': 231}), 12: (1, {'@': 231}), 27: (1, {'@': 231}), 31: (1, {'@': 231}), 7: (1, {'@': 231}), 9: (1, {'@': 231}), 26: (1, {'@': 231}), 13: (1, {'@': 231}), 14: (1, {'@': 231}), 29: (1, {'@': 231}), 16: (1, {'@': 231}), 19: (1, {'@': 231})}, 71: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 36: (0, 198), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 72: {80: (0, 548), 83: (0, 493), 37: (0, 19), 29: (0, 491), 81: (0, 518), 82: (0, 537), 19: (1, {'@': 48}), 31: (1, {'@': 48}), 21: (1, {'@': 48}), 12: (1, {'@': 48})}, 73: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 8: (0, 85), 54: (0, 483), 55: (0, 499), 29: (0, 491), 70: (0, 112), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 118), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 74: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 36: (0, 262), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 75: {69: (0, 514), 70: (0, 26), 12: (0, 532), 7: (0, 20), 31: (0, 524), 21: (0, 486)}, 76: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 45: (0, 134)}, 77: {31: (1, {'@': 185}), 21: (1, {'@': 185}), 12: (1, {'@': 185}), 14: (1, {'@': 185})}, 78: {20: (1, {'@': 149}), 22: (1, {'@': 149}), 1: (1, {'@': 149}), 23: (1, {'@': 149}), 24: (1, {'@': 149}), 25: (1, {'@': 149}), 10: (1, {'@': 149}), 11: (1, {'@': 149}), 3: (1, {'@': 149}), 28: (1, {'@': 149}), 15: (1, {'@': 149}), 30: (1, {'@': 149}), 5: (1, {'@': 149}), 32: (1, {'@': 149}), 17: (1, {'@': 149}), 18: (1, {'@': 149}), 33: (1, {'@': 149}), 34: (1, {'@': 149}), 21: (1, {'@': 149}), 8: (1, {'@': 149}), 12: (1, {'@': 149}), 27: (1, {'@': 149}), 31: (1, {'@': 149}), 7: (1, {'@': 149}), 9: (1, {'@': 149}), 26: (1, {'@': 149}), 13: (1, {'@': 149}), 14: (1, {'@': 149}), 29: (1, {'@': 149}), 16: (1, {'@': 149}), 19: (1, {'@': 149})}, 79: {86: (0, 98)}, 80: {20: (1, {'@': 141}), 22: (1, {'@': 141}), 1: (1, {'@': 141}), 23: (1, {'@': 141}), 24: (1, {'@': 141}), 25: (1, {'@': 141}), 10: (1, {'@': 141}), 11: (1, {'@': 141}), 3: (1, {'@': 141}), 28: (1, {'@': 141}), 15: (1, {'@': 141}), 30: (1, {'@': 141}), 5: (1, {'@': 141}), 32: (1, {'@': 141}), 17: (1, {'@': 141}), 18: (1, {'@': 141}), 33: (1, {'@': 141}), 34: (1, {'@': 141}), 21: (1, {'@': 141}), 8: (1, {'@': 141}), 12: (1, {'@': 141}), 27: (1, {'@': 141}), 31: (1, {'@': 141}), 7: (1, {'@': 141}), 9: (1, {'@': 141}), 26: (1, {'@': 141}), 13: (1, {'@': 141}), 14: (1, {'@': 141}), 29: (1, {'@': 141}), 16: (1, {'@': 141}), 19: (1, {'@': 141})}, 81: {20: (1, {'@': 208}), 22: (1, {'@': 208}), 1: (1, {'@': 208}), 23: (1, {'@': 208}), 24: (1, {'@': 208}), 25: (1, {'@': 208}), 10: (1, {'@': 208}), 11: (1, {'@': 208}), 3: (1, {'@': 208}), 28: (1, {'@': 208}), 15: (1, {'@': 208}), 30: (1, {'@': 208}), 5: (1, {'@': 208}), 32: (1, {'@': 208}), 17: (1, {'@': 208}), 18: (1, {'@': 208}), 33: (1, {'@': 208}), 34: (1, {'@': 208}), 21: (1, {'@': 208}), 8: (1, {'@': 208}), 12: (1, {'@': 208}), 27: (1, {'@': 208}), 31: (1, {'@': 208}), 7: (1, {'@': 208}), 9: (1, {'@': 208}), 26: (1, {'@': 208}), 13: (1, {'@': 208}), 14: (1, {'@': 208}), 29: (1, {'@': 208}), 16: (1, {'@': 208}), 19: (1, {'@': 208})}, 82: {40: (1, {'@': 97}), 29: (1, {'@': 97}), 1: (1, {'@': 97}), 55: (1, {'@': 97}), 35: (1, {'@': 97}), 64: (1, {'@': 97}), 49: (1, {'@': 97}), 54: (1, {'@': 97})}, 83: {20: (1, {'@': 204}), 22: (1, {'@': 204}), 1: (1, {'@': 204}), 23: (1, {'@': 204}), 24: (1, {'@': 204}), 25: (1, {'@': 204}), 10: (1, {'@': 204}), 11: (1, {'@': 204}), 3: (1, {'@': 204}), 28: (1, {'@': 204}), 15: (1, {'@': 204}), 30: (1, {'@': 204}), 5: (1, {'@': 204}), 32: (1, {'@': 204}), 17: (1, {'@': 204}), 18: (1, {'@': 204}), 33: (1, {'@': 204}), 34: (1, {'@': 204}), 21: (1, {'@': 204}), 8: (1, {'@': 204}), 12: (1, {'@': 204}), 27: (1, {'@': 204}), 31: (1, {'@': 204}), 7: (1, {'@': 204}), 9: (1, {'@': 204}), 26: (1, {'@': 204}), 13: (1, {'@': 204}), 14: (1, {'@': 204}), 29: (1, {'@': 204}), 16: (1, {'@': 204}), 19: (1, {'@': 204})}, 84: {83: (0, 45), 37: (0, 19), 80: (0, 548), 69: (0, 514), 12: (0, 532), 82: (0, 537), 70: (0, 46), 29: (0, 491), 81: (0, 518), 31: (0, 524), 21: (0, 486), 16: (1, {'@': 48})}, 85: {20: (1, {'@': 146}), 22: (1, {'@': 146}), 1: (1, {'@': 146}), 23: (1, {'@': 146}), 24: (1, {'@': 146}), 25: (1, {'@': 146}), 10: (1, {'@': 146}), 11: (1, {'@': 146}), 3: (1, {'@': 146}), 28: (1, {'@': 146}), 15: (1, {'@': 146}), 30: (1, {'@': 146}), 5: (1, {'@': 146}), 32: (1, {'@': 146}), 17: (1, {'@': 146}), 18: (1, {'@': 146}), 33: (1, {'@': 146}), 34: (1, {'@': 146}), 21: (1, {'@': 146}), 8: (1, {'@': 146}), 12: (1, {'@': 146}), 27: (1, {'@': 146}), 31: (1, {'@': 146}), 7: (1, {'@': 146}), 9: (1, {'@': 146}), 26: (1, {'@': 146}), 13: (1, {'@': 146}), 14: (1, {'@': 146}), 29: (1, {'@': 146}), 16: (1, {'@': 146}), 19: (1, {'@': 146})}, 86: {20: (1, {'@': 163}), 22: (1, {'@': 163}), 1: (1, {'@': 163}), 23: (1, {'@': 163}), 24: (1, {'@': 163}), 25: (1, {'@': 163}), 10: (1, {'@': 163}), 11: (1, {'@': 163}), 3: (1, {'@': 163}), 28: (1, {'@': 163}), 15: (1, {'@': 163}), 30: (1, {'@': 163}), 5: (1, {'@': 163}), 32: (1, {'@': 163}), 17: (1, {'@': 163}), 18: (1, {'@': 163}), 33: (1, {'@': 163}), 34: (1, {'@': 163}), 21: (1, {'@': 163}), 8: (1, {'@': 163}), 12: (1, {'@': 163}), 27: (1, {'@': 163}), 31: (1, {'@': 163}), 7: (1, {'@': 163}), 9: (1, {'@': 163}), 26: (1, {'@': 163}), 13: (1, {'@': 163}), 14: (1, {'@': 163}), 29: (1, {'@': 163}), 16: (1, {'@': 163}), 19: (1, {'@': 163})}, 87: {1: (0, 540), 35: (0, 174), 37: (0, 268), 36: (0, 68), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 88: {20: (1, {'@': 172}), 22: (1, {'@': 172}), 1: (1, {'@': 172}), 23: (1, {'@': 172}), 24: (1, {'@': 172}), 25: (1, {'@': 172}), 10: (1, {'@': 172}), 11: (1, {'@': 172}), 3: (1, {'@': 172}), 28: (1, {'@': 172}), 15: (1, {'@': 172}), 30: (1, {'@': 172}), 5: (1, {'@': 172}), 32: (1, {'@': 172}), 17: (1, {'@': 172}), 18: (1, {'@': 172}), 33: (1, {'@': 172}), 34: (1, {'@': 172}), 21: (1, {'@': 172}), 8: (1, {'@': 172}), 12: (1, {'@': 172}), 27: (1, {'@': 172}), 31: (1, {'@': 172}), 7: (1, {'@': 172}), 9: (1, {'@': 172}), 26: (1, {'@': 172}), 13: (1, {'@': 172}), 14: (1, {'@': 172}), 29: (1, {'@': 172}), 16: (1, {'@': 172}), 19: (1, {'@': 172})}, 89: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 97), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 8: (0, 226), 46: (0, 185), 47: (0, 205), 70: (0, 228), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 90: {20: (1, {'@': 318}), 21: (1, {'@': 318}), 24: (1, {'@': 318}), 7: (1, {'@': 318}), 8: (1, {'@': 318}), 9: (1, {'@': 318}), 11: (1, {'@': 318}), 12: (1, {'@': 318}), 26: (1, {'@': 318}), 27: (1, {'@': 318}), 13: (1, {'@': 318}), 14: (1, {'@': 318}), 29: (1, {'@': 318}), 31: (1, {'@': 318}), 16: (1, {'@': 318}), 19: (1, {'@': 318}), 33: (1, {'@': 318})}, 91: {8: (1, {'@': 301}), 31: (1, {'@': 301}), 21: (1, {'@': 301}), 12: (1, {'@': 301}), 16: (1, {'@': 301})}, 92: {7: (0, 128)}, 93: {40: (1, {'@': 89}), 29: (1, {'@': 89}), 1: (1, {'@': 89}), 55: (1, {'@': 89}), 35: (1, {'@': 89}), 64: (1, {'@': 89}), 49: (1, {'@': 89}), 54: (1, {'@': 89})}, 94: {7: (1, {'@': 322}), 8: (1, {'@': 322}), 9: (1, {'@': 322}), 10: (1, {'@': 322}), 11: (1, {'@': 322}), 12: (1, {'@': 322}), 13: (1, {'@': 322}), 14: (1, {'@': 322}), 15: (1, {'@': 322}), 16: (1, {'@': 322}), 19: (1, {'@': 322}), 20: (1, {'@': 322}), 21: (1, {'@': 322}), 22: (1, {'@': 322}), 23: (1, {'@': 322}), 24: (1, {'@': 322}), 25: (1, {'@': 322}), 26: (1, {'@': 322}), 27: (1, {'@': 322}), 29: (1, {'@': 322}), 30: (1, {'@': 322}), 31: (1, {'@': 322}), 33: (1, {'@': 322})}, 95: {20: (1, {'@': 130}), 22: (1, {'@': 130}), 1: (1, {'@': 130}), 23: (1, {'@': 130}), 24: (1, {'@': 130}), 25: (1, {'@': 130}), 10: (1, {'@': 130}), 11: (1, {'@': 130}), 3: (1, {'@': 130}), 28: (1, {'@': 130}), 15: (1, {'@': 130}), 30: (1, {'@': 130}), 5: (1, {'@': 130}), 32: (1, {'@': 130}), 17: (1, {'@': 130}), 18: (1, {'@': 130}), 33: (1, {'@': 130}), 34: (1, {'@': 130}), 21: (1, {'@': 130}), 8: (1, {'@': 130}), 12: (1, {'@': 130}), 27: (1, {'@': 130}), 31: (1, {'@': 130}), 7: (1, {'@': 130}), 9: (1, {'@': 130}), 26: (1, {'@': 130}), 13: (1, {'@': 130}), 14: (1, {'@': 130}), 29: (1, {'@': 130}), 16: (1, {'@': 130}), 19: (1, {'@': 130})}, 96: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 36: (0, 361), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 97: {14: (1, {'@': 337}), 21: (1, {'@': 337}), 31: (1, {'@': 337}), 12: (1, {'@': 337}), 26: (1, {'@': 337}), 27: (1, {'@': 337}), 8: (1, {'@': 337})}, 98: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 36: (0, 422), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 70: (0, 423), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 99: {16: (0, 454)}, 100: {20: (1, {'@': 246}), 22: (1, {'@': 246}), 1: (1, {'@': 246}), 23: (1, {'@': 246}), 24: (1, {'@': 246}), 25: (1, {'@': 246}), 10: (1, {'@': 246}), 11: (1, {'@': 246}), 3: (1, {'@': 246}), 28: (1, {'@': 246}), 15: (1, {'@': 246}), 30: (1, {'@': 246}), 5: (1, {'@': 246}), 32: (1, {'@': 246}), 17: (1, {'@': 246}), 18: (1, {'@': 246}), 33: (1, {'@': 246}), 34: (1, {'@': 246}), 21: (1, {'@': 246}), 8: (1, {'@': 246}), 12: (1, {'@': 246}), 27: (1, {'@': 246}), 31: (1, {'@': 246}), 7: (1, {'@': 246}), 9: (1, {'@': 246}), 26: (1, {'@': 246}), 13: (1, {'@': 246}), 14: (1, {'@': 246}), 29: (1, {'@': 246}), 16: (1, {'@': 246}), 19: (1, {'@': 246})}, 101: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 187), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 8: (0, 197), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 102: {80: (0, 548), 37: (0, 19), 29: (0, 491), 83: (0, 39), 81: (0, 518), 82: (0, 537), 16: (1, {'@': 48})}, 103: {70: (0, 193), 86: (0, 190), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 104: {7: (0, 395)}, 105: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 70: (0, 349), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 163), 67: (0, 227), 28: (0, 523), 68: (0, 109), 14: (1, {'@': 184})}, 106: {20: (1, {'@': 143}), 22: (1, {'@': 143}), 1: (1, {'@': 143}), 23: (1, {'@': 143}), 24: (1, {'@': 143}), 25: (1, {'@': 143}), 10: (1, {'@': 143}), 11: (1, {'@': 143}), 3: (1, {'@': 143}), 28: (1, {'@': 143}), 15: (1, {'@': 143}), 30: (1, {'@': 143}), 5: (1, {'@': 143}), 32: (1, {'@': 143}), 17: (1, {'@': 143}), 18: (1, {'@': 143}), 33: (1, {'@': 143}), 34: (1, {'@': 143}), 21: (1, {'@': 143}), 8: (1, {'@': 143}), 12: (1, {'@': 143}), 27: (1, {'@': 143}), 31: (1, {'@': 143}), 7: (1, {'@': 143}), 9: (1, {'@': 143}), 26: (1, {'@': 143}), 13: (1, {'@': 143}), 14: (1, {'@': 143}), 29: (1, {'@': 143}), 16: (1, {'@': 143}), 19: (1, {'@': 143})}, 107: {7: (0, 341)}, 108: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 70: (0, 203), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 36: (0, 207), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 109: {20: (1, {'@': 71}), 33: (1, {'@': 71}), 8: (1, {'@': 71}), 21: (1, {'@': 71}), 12: (1, {'@': 71}), 27: (1, {'@': 71}), 31: (1, {'@': 71}), 7: (1, {'@': 71}), 9: (1, {'@': 71}), 26: (1, {'@': 71}), 13: (1, {'@': 71}), 14: (1, {'@': 71}), 29: (1, {'@': 71}), 16: (1, {'@': 71}), 19: (1, {'@': 71})}, 110: {1: (0, 540), 16: (0, 342), 87: (0, 53), 35: (0, 174), 37: (0, 284), 77: (0, 527), 38: (0, 241), 39: (0, 325), 40: (0, 475), 36: (0, 42), 41: (0, 152), 88: (0, 3), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 111: {35: (1, {'@': 308}), 55: (1, {'@': 308}), 29: (1, {'@': 308})}, 112: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 8: (0, 213), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 215), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 113: {28: (1, {'@': 102}), 20: (1, {'@': 102}), 15: (1, {'@': 102}), 22: (1, {'@': 102}), 30: (1, {'@': 102}), 1: (1, {'@': 102}), 23: (1, {'@': 102}), 5: (1, {'@': 102}), 24: (1, {'@': 102}), 25: (1, {'@': 102}), 32: (1, {'@': 102}), 10: (1, {'@': 102}), 11: (1, {'@': 102}), 17: (1, {'@': 102}), 18: (1, {'@': 102}), 3: (1, {'@': 102}), 33: (1, {'@': 102}), 34: (1, {'@': 102}), 21: (1, {'@': 102}), 8: (1, {'@': 102}), 12: (1, {'@': 102}), 27: (1, {'@': 102}), 31: (1, {'@': 102}), 7: (1, {'@': 102}), 9: (1, {'@': 102}), 26: (1, {'@': 102}), 13: (1, {'@': 102}), 14: (1, {'@': 102}), 29: (1, {'@': 102}), 16: (1, {'@': 102}), 19: (1, {'@': 102})}, 114: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 70: (0, 305), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 118), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 115: {28: (1, {'@': 270}), 40: (1, {'@': 270}), 29: (1, {'@': 270}), 1: (1, {'@': 270}), 62: (1, {'@': 270}), 55: (1, {'@': 270}), 35: (1, {'@': 270}), 64: (1, {'@': 270}), 49: (1, {'@': 270}), 54: (1, {'@': 270}), 21: (1, {'@': 270}), 31: (1, {'@': 270}), 12: (1, {'@': 270})}, 116: {35: (1, {'@': 309}), 55: (1, {'@': 309}), 29: (1, {'@': 309})}, 117: {28: (1, {'@': 294}), 40: (1, {'@': 294}), 29: (1, {'@': 294}), 1: (1, {'@': 294}), 62: (1, {'@': 294}), 55: (1, {'@': 294}), 35: (1, {'@': 294}), 64: (1, {'@': 294}), 49: (1, {'@': 294}), 54: (1, {'@': 294}), 21: (1, {'@': 294}), 31: (1, {'@': 294}), 12: (1, {'@': 294})}, 118: {14: (1, {'@': 331}), 21: (1, {'@': 331}), 31: (1, {'@': 331}), 12: (1, {'@': 331}), 26: (1, {'@': 331}), 27: (1, {'@': 331}), 8: (1, {'@': 331})}, 119: {7: (0, 333)}, 120: {20: (1, {'@': 226}), 22: (1, {'@': 226}), 1: (1, {'@': 226}), 23: (1, {'@': 226}), 24: (1, {'@': 226}), 25: (1, {'@': 226}), 10: (1, {'@': 226}), 11: (1, {'@': 226}), 3: (1, {'@': 226}), 28: (1, {'@': 226}), 15: (1, {'@': 226}), 30: (1, {'@': 226}), 5: (1, {'@': 226}), 32: (1, {'@': 226}), 17: (1, {'@': 226}), 18: (1, {'@': 226}), 33: (1, {'@': 226}), 34: (1, {'@': 226}), 21: (1, {'@': 226}), 8: (1, {'@': 226}), 12: (1, {'@': 226}), 27: (1, {'@': 226}), 31: (1, {'@': 226}), 7: (1, {'@': 226}), 9: (1, {'@': 226}), 26: (1, {'@': 226}), 13: (1, {'@': 226}), 14: (1, {'@': 226}), 29: (1, {'@': 226}), 16: (1, {'@': 226}), 19: (1, {'@': 226})}, 121: {20: (1, {'@': 150}), 22: (1, {'@': 150}), 1: (1, {'@': 150}), 23: (1, {'@': 150}), 24: (1, {'@': 150}), 25: (1, {'@': 150}), 10: (1, {'@': 150}), 11: (1, {'@': 150}), 3: (1, {'@': 150}), 28: (1, {'@': 150}), 15: (1, {'@': 150}), 30: (1, {'@': 150}), 5: (1, {'@': 150}), 32: (1, {'@': 150}), 17: (1, {'@': 150}), 18: (1, {'@': 150}), 33: (1, {'@': 150}), 34: (1, {'@': 150}), 21: (1, {'@': 150}), 8: (1, {'@': 150}), 12: (1, {'@': 150}), 27: (1, {'@': 150}), 31: (1, {'@': 150}), 7: (1, {'@': 150}), 9: (1, {'@': 150}), 26: (1, {'@': 150}), 13: (1, {'@': 150}), 14: (1, {'@': 150}), 29: (1, {'@': 150}), 16: (1, {'@': 150}), 19: (1, {'@': 150})}, 122: {79: (0, 209), 69: (0, 514), 9: (0, 147), 12: (0, 532), 8: (0, 222), 31: (0, 524), 21: (0, 486), 70: (0, 225)}, 123: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 375), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 124: {20: (1, {'@': 136}), 22: (1, {'@': 136}), 1: (1, {'@': 136}), 23: (1, {'@': 136}), 24: (1, {'@': 136}), 25: (1, {'@': 136}), 10: (1, {'@': 136}), 11: (1, {'@': 136}), 3: (1, {'@': 136}), 28: (1, {'@': 136}), 15: (1, {'@': 136}), 30: (1, {'@': 136}), 5: (1, {'@': 136}), 32: (1, {'@': 136}), 17: (1, {'@': 136}), 18: (1, {'@': 136}), 33: (1, {'@': 136}), 34: (1, {'@': 136}), 21: (1, {'@': 136}), 8: (1, {'@': 136}), 12: (1, {'@': 136}), 27: (1, {'@': 136}), 31: (1, {'@': 136}), 7: (1, {'@': 136}), 9: (1, {'@': 136}), 26: (1, {'@': 136}), 13: (1, {'@': 136}), 14: (1, {'@': 136}), 29: (1, {'@': 136}), 16: (1, {'@': 136}), 19: (1, {'@': 136})}, 125: {20: (1, {'@': 195}), 21: (1, {'@': 195}), 22: (1, {'@': 195}), 1: (1, {'@': 195}), 23: (1, {'@': 195}), 7: (1, {'@': 195}), 8: (1, {'@': 195}), 9: (1, {'@': 195}), 24: (1, {'@': 195}), 10: (1, {'@': 195}), 11: (1, {'@': 195}), 12: (1, {'@': 195}), 25: (1, {'@': 195}), 26: (1, {'@': 195}), 3: (1, {'@': 195}), 27: (1, {'@': 195}), 13: (1, {'@': 195}), 14: (1, {'@': 195}), 28: (1, {'@': 195}), 29: (1, {'@': 195}), 15: (1, {'@': 195}), 30: (1, {'@': 195}), 31: (1, {'@': 195}), 5: (1, {'@': 195}), 16: (1, {'@': 195}), 32: (1, {'@': 195}), 17: (1, {'@': 195}), 18: (1, {'@': 195}), 19: (1, {'@': 195}), 33: (1, {'@': 195}), 34: (1, {'@': 195})}, 126: {69: (0, 514), 70: (0, 298), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 127: {20: (1, {'@': 144}), 22: (1, {'@': 144}), 1: (1, {'@': 144}), 23: (1, {'@': 144}), 24: (1, {'@': 144}), 25: (1, {'@': 144}), 10: (1, {'@': 144}), 11: (1, {'@': 144}), 3: (1, {'@': 144}), 28: (1, {'@': 144}), 15: (1, {'@': 144}), 30: (1, {'@': 144}), 5: (1, {'@': 144}), 32: (1, {'@': 144}), 17: (1, {'@': 144}), 18: (1, {'@': 144}), 33: (1, {'@': 144}), 34: (1, {'@': 144}), 21: (1, {'@': 144}), 8: (1, {'@': 144}), 12: (1, {'@': 144}), 27: (1, {'@': 144}), 31: (1, {'@': 144}), 7: (1, {'@': 144}), 9: (1, {'@': 144}), 26: (1, {'@': 144}), 13: (1, {'@': 144}), 14: (1, {'@': 144}), 29: (1, {'@': 144}), 16: (1, {'@': 144}), 19: (1, {'@': 144})}, 128: {69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 115), 28: (1, {'@': 271}), 40: (1, {'@': 271}), 29: (1, {'@': 271}), 1: (1, {'@': 271}), 62: (1, {'@': 271}), 55: (1, {'@': 271}), 35: (1, {'@': 271}), 64: (1, {'@': 271}), 49: (1, {'@': 271}), 54: (1, {'@': 271})}, 129: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 36: (0, 32), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 8: (0, 218), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 130: {20: (1, {'@': 216}), 22: (1, {'@': 216}), 1: (1, {'@': 216}), 23: (1, {'@': 216}), 24: (1, {'@': 216}), 25: (1, {'@': 216}), 10: (1, {'@': 216}), 11: (1, {'@': 216}), 3: (1, {'@': 216}), 28: (1, {'@': 216}), 15: (1, {'@': 216}), 30: (1, {'@': 216}), 5: (1, {'@': 216}), 32: (1, {'@': 216}), 17: (1, {'@': 216}), 18: (1, {'@': 216}), 33: (1, {'@': 216}), 34: (1, {'@': 216}), 21: (1, {'@': 216}), 8: (1, {'@': 216}), 12: (1, {'@': 216}), 27: (1, {'@': 216}), 31: (1, {'@': 216}), 7: (1, {'@': 216}), 9: (1, {'@': 216}), 26: (1, {'@': 216}), 13: (1, {'@': 216}), 14: (1, {'@': 216}), 29: (1, {'@': 216}), 16: (1, {'@': 216}), 19: (1, {'@': 216})}, 131: {8: (0, 83)}, 132: {69: (0, 514), 70: (0, 15), 12: (0, 532), 31: (0, 524), 21: (0, 486), 16: (1, {'@': 50}), 29: (1, {'@': 50}), 19: (1, {'@': 50})}, 133: {20: (1, {'@': 206}), 22: (1, {'@': 206}), 1: (1, {'@': 206}), 23: (1, {'@': 206}), 24: (1, {'@': 206}), 25: (1, {'@': 206}), 10: (1, {'@': 206}), 11: (1, {'@': 206}), 3: (1, {'@': 206}), 28: (1, {'@': 206}), 15: (1, {'@': 206}), 30: (1, {'@': 206}), 5: (1, {'@': 206}), 32: (1, {'@': 206}), 17: (1, {'@': 206}), 18: (1, {'@': 206}), 33: (1, {'@': 206}), 34: (1, {'@': 206}), 21: (1, {'@': 206}), 8: (1, {'@': 206}), 12: (1, {'@': 206}), 27: (1, {'@': 206}), 31: (1, {'@': 206}), 7: (1, {'@': 206}), 9: (1, {'@': 206}), 26: (1, {'@': 206}), 13: (1, {'@': 206}), 14: (1, {'@': 206}), 29: (1, {'@': 206}), 16: (1, {'@': 206}), 19: (1, {'@': 206})}, 134: {20: (1, {'@': 316}), 21: (1, {'@': 316}), 24: (1, {'@': 316}), 7: (1, {'@': 316}), 9: (1, {'@': 316}), 8: (1, {'@': 316}), 12: (1, {'@': 316}), 26: (1, {'@': 316}), 27: (1, {'@': 316}), 13: (1, {'@': 316}), 14: (1, {'@': 316}), 29: (1, {'@': 316}), 31: (1, {'@': 316}), 16: (1, {'@': 316}), 19: (1, {'@': 316}), 33: (1, {'@': 316})}, 135: {69: (0, 514), 70: (0, 48), 8: (0, 300), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 136: {8: (0, 446)}, 137: {20: (1, {'@': 205}), 22: (1, {'@': 205}), 1: (1, {'@': 205}), 23: (1, {'@': 205}), 24: (1, {'@': 205}), 25: (1, {'@': 205}), 10: (1, {'@': 205}), 11: (1, {'@': 205}), 3: (1, {'@': 205}), 28: (1, {'@': 205}), 15: (1, {'@': 205}), 30: (1, {'@': 205}), 5: (1, {'@': 205}), 32: (1, {'@': 205}), 17: (1, {'@': 205}), 18: (1, {'@': 205}), 33: (1, {'@': 205}), 34: (1, {'@': 205}), 21: (1, {'@': 205}), 8: (1, {'@': 205}), 12: (1, {'@': 205}), 27: (1, {'@': 205}), 31: (1, {'@': 205}), 7: (1, {'@': 205}), 9: (1, {'@': 205}), 26: (1, {'@': 205}), 13: (1, {'@': 205}), 14: (1, {'@': 205}), 29: (1, {'@': 205}), 16: (1, {'@': 205}), 19: (1, {'@': 205})}, 138: {20: (1, {'@': 134}), 22: (1, {'@': 134}), 1: (1, {'@': 134}), 23: (1, {'@': 134}), 24: (1, {'@': 134}), 25: (1, {'@': 134}), 10: (1, {'@': 134}), 11: (1, {'@': 134}), 3: (1, {'@': 134}), 28: (1, {'@': 134}), 15: (1, {'@': 134}), 30: (1, {'@': 134}), 5: (1, {'@': 134}), 32: (1, {'@': 134}), 17: (1, {'@': 134}), 18: (1, {'@': 134}), 33: (1, {'@': 134}), 34: (1, {'@': 134}), 21: (1, {'@': 134}), 8: (1, {'@': 134}), 12: (1, {'@': 134}), 27: (1, {'@': 134}), 31: (1, {'@': 134}), 7: (1, {'@': 134}), 9: (1, {'@': 134}), 26: (1, {'@': 134}), 13: (1, {'@': 134}), 14: (1, {'@': 134}), 29: (1, {'@': 134}), 16: (1, {'@': 134}), 19: (1, {'@': 134})}, 139: {20: (1, {'@': 124}), 22: (1, {'@': 124}), 1: (1, {'@': 124}), 23: (1, {'@': 124}), 24: (1, {'@': 124}), 25: (1, {'@': 124}), 10: (1, {'@': 124}), 11: (1, {'@': 124}), 3: (1, {'@': 124}), 28: (1, {'@': 124}), 15: (1, {'@': 124}), 30: (1, {'@': 124}), 5: (1, {'@': 124}), 32: (1, {'@': 124}), 17: (1, {'@': 124}), 18: (1, {'@': 124}), 33: (1, {'@': 124}), 34: (1, {'@': 124}), 21: (1, {'@': 124}), 8: (1, {'@': 124}), 12: (1, {'@': 124}), 27: (1, {'@': 124}), 31: (1, {'@': 124}), 7: (1, {'@': 124}), 9: (1, {'@': 124}), 26: (1, {'@': 124}), 13: (1, {'@': 124}), 14: (1, {'@': 124}), 29: (1, {'@': 124}), 16: (1, {'@': 124}), 19: (1, {'@': 124})}, 140: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 8: (0, 121), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 70: (0, 159), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 163), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 141: {79: (0, 12), 70: (0, 57), 69: (0, 514), 9: (0, 147), 12: (0, 532), 31: (0, 524), 21: (0, 486), 8: (0, 448)}, 142: {8: (0, 528)}, 143: {20: (1, {'@': 218}), 22: (1, {'@': 218}), 1: (1, {'@': 218}), 23: (1, {'@': 218}), 24: (1, {'@': 218}), 25: (1, {'@': 218}), 10: (1, {'@': 218}), 11: (1, {'@': 218}), 3: (1, {'@': 218}), 28: (1, {'@': 218}), 15: (1, {'@': 218}), 30: (1, {'@': 218}), 5: (1, {'@': 218}), 32: (1, {'@': 218}), 17: (1, {'@': 218}), 18: (1, {'@': 218}), 33: (1, {'@': 218}), 34: (1, {'@': 218}), 21: (1, {'@': 218}), 8: (1, {'@': 218}), 12: (1, {'@': 218}), 27: (1, {'@': 218}), 31: (1, {'@': 218}), 7: (1, {'@': 218}), 9: (1, {'@': 218}), 26: (1, {'@': 218}), 13: (1, {'@': 218}), 14: (1, {'@': 218}), 29: (1, {'@': 218}), 16: (1, {'@': 218}), 19: (1, {'@': 218})}, 144: {20: (1, {'@': 170}), 22: (1, {'@': 170}), 1: (1, {'@': 170}), 23: (1, {'@': 170}), 24: (1, {'@': 170}), 25: (1, {'@': 170}), 10: (1, {'@': 170}), 11: (1, {'@': 170}), 3: (1, {'@': 170}), 28: (1, {'@': 170}), 15: (1, {'@': 170}), 30: (1, {'@': 170}), 5: (1, {'@': 170}), 32: (1, {'@': 170}), 17: (1, {'@': 170}), 18: (1, {'@': 170}), 33: (1, {'@': 170}), 34: (1, {'@': 170}), 21: (1, {'@': 170}), 8: (1, {'@': 170}), 12: (1, {'@': 170}), 27: (1, {'@': 170}), 31: (1, {'@': 170}), 7: (1, {'@': 170}), 9: (1, {'@': 170}), 26: (1, {'@': 170}), 13: (1, {'@': 170}), 14: (1, {'@': 170}), 29: (1, {'@': 170}), 16: (1, {'@': 170}), 19: (1, {'@': 170})}, 145: {40: (1, {'@': 88}), 29: (1, {'@': 88}), 1: (1, {'@': 88}), 55: (1, {'@': 88}), 35: (1, {'@': 88}), 64: (1, {'@': 88}), 49: (1, {'@': 88}), 54: (1, {'@': 88})}, 146: {20: (1, {'@': 257}), 22: (1, {'@': 257}), 1: (1, {'@': 257}), 23: (1, {'@': 257}), 24: (1, {'@': 257}), 25: (1, {'@': 257}), 10: (1, {'@': 257}), 11: (1, {'@': 257}), 3: (1, {'@': 257}), 28: (1, {'@': 257}), 15: (1, {'@': 257}), 30: (1, {'@': 257}), 5: (1, {'@': 257}), 32: (1, {'@': 257}), 17: (1, {'@': 257}), 18: (1, {'@': 257}), 33: (1, {'@': 257}), 34: (1, {'@': 257}), 21: (1, {'@': 257}), 8: (1, {'@': 257}), 12: (1, {'@': 257}), 27: (1, {'@': 257}), 31: (1, {'@': 257}), 7: (1, {'@': 257}), 9: (1, {'@': 257}), 26: (1, {'@': 257}), 13: (1, {'@': 257}), 14: (1, {'@': 257}), 29: (1, {'@': 257}), 16: (1, {'@': 257}), 19: (1, {'@': 257})}, 147: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 70: (0, 74), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 36: (0, 91), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 148: {69: (0, 514), 12: (0, 532), 21: (0, 486), 31: (0, 524), 70: (0, 142), 8: (0, 130)}, 149: {16: (1, {'@': 165}), 21: (1, {'@': 165}), 12: (1, {'@': 165}), 31: (1, {'@': 165}), 27: (1, {'@': 165})}, 150: {69: (0, 514), 70: (0, 365), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 293}), 40: (1, {'@': 293}), 29: (1, {'@': 293}), 1: (1, {'@': 293}), 62: (1, {'@': 293}), 55: (1, {'@': 293}), 35: (1, {'@': 293}), 64: (1, {'@': 293}), 49: (1, {'@': 293}), 54: (1, {'@': 293})}, 151: {16: (0, 373)}, 152: {33: (0, 319), 20: (1, {'@': 69}), 8: (1, {'@': 69}), 21: (1, {'@': 69}), 12: (1, {'@': 69}), 31: (1, {'@': 69}), 27: (1, {'@': 69}), 13: (1, {'@': 69}), 7: (1, {'@': 69}), 14: (1, {'@': 69}), 26: (1, {'@': 69}), 16: (1, {'@': 69}), 9: (1, {'@': 69}), 19: (1, {'@': 69}), 29: (1, {'@': 69})}, 153: {37: (0, 297), 29: (0, 491)}, 154: {86: (0, 108)}, 155: {16: (0, 374)}, 156: {1: (0, 540), 35: (0, 174), 36: (0, 331), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 157: {20: (1, {'@': 217}), 22: (1, {'@': 217}), 1: (1, {'@': 217}), 23: (1, {'@': 217}), 24: (1, {'@': 217}), 25: (1, {'@': 217}), 10: (1, {'@': 217}), 11: (1, {'@': 217}), 3: (1, {'@': 217}), 28: (1, {'@': 217}), 15: (1, {'@': 217}), 30: (1, {'@': 217}), 5: (1, {'@': 217}), 32: (1, {'@': 217}), 17: (1, {'@': 217}), 18: (1, {'@': 217}), 33: (1, {'@': 217}), 34: (1, {'@': 217}), 21: (1, {'@': 217}), 8: (1, {'@': 217}), 12: (1, {'@': 217}), 27: (1, {'@': 217}), 31: (1, {'@': 217}), 7: (1, {'@': 217}), 9: (1, {'@': 217}), 26: (1, {'@': 217}), 13: (1, {'@': 217}), 14: (1, {'@': 217}), 29: (1, {'@': 217}), 16: (1, {'@': 217}), 19: (1, {'@': 217})}, 158: {20: (1, {'@': 251}), 22: (1, {'@': 251}), 1: (1, {'@': 251}), 23: (1, {'@': 251}), 24: (1, {'@': 251}), 25: (1, {'@': 251}), 10: (1, {'@': 251}), 11: (1, {'@': 251}), 3: (1, {'@': 251}), 28: (1, {'@': 251}), 15: (1, {'@': 251}), 30: (1, {'@': 251}), 5: (1, {'@': 251}), 32: (1, {'@': 251}), 17: (1, {'@': 251}), 18: (1, {'@': 251}), 33: (1, {'@': 251}), 34: (1, {'@': 251}), 21: (1, {'@': 251}), 8: (1, {'@': 251}), 12: (1, {'@': 251}), 27: (1, {'@': 251}), 31: (1, {'@': 251}), 7: (1, {'@': 251}), 9: (1, {'@': 251}), 26: (1, {'@': 251}), 13: (1, {'@': 251}), 14: (1, {'@': 251}), 29: (1, {'@': 251}), 16: (1, {'@': 251}), 19: (1, {'@': 251})}, 159: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 36: (0, 32), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 8: (0, 78), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 160: {16: (0, 281)}, 161: {14: (0, 25)}, 162: {9: (0, 147), 79: (0, 249), 70: (0, 255), 8: (0, 260), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 163: {14: (1, {'@': 333}), 21: (1, {'@': 333}), 31: (1, {'@': 333}), 12: (1, {'@': 333}), 26: (1, {'@': 333}), 27: (1, {'@': 333}), 8: (1, {'@': 333})}, 164: {16: (0, 367)}, 165: {69: (0, 514), 70: (0, 371), 16: (0, 390), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 166: {8: (0, 7)}, 167: {0: (0, 402), 1: (0, 264), 2: (0, 376), 3: (0, 358), 4: (0, 335), 5: (0, 337), 6: (0, 322), 20: (1, {'@': 72}), 33: (1, {'@': 72}), 8: (1, {'@': 72}), 21: (1, {'@': 72}), 12: (1, {'@': 72}), 27: (1, {'@': 72}), 31: (1, {'@': 72}), 13: (1, {'@': 72}), 14: (1, {'@': 72}), 29: (1, {'@': 72}), 7: (1, {'@': 72}), 9: (1, {'@': 72}), 16: (1, {'@': 72}), 19: (1, {'@': 72}), 26: (1, {'@': 72})}, 168: {20: (1, {'@': 148}), 22: (1, {'@': 148}), 1: (1, {'@': 148}), 23: (1, {'@': 148}), 24: (1, {'@': 148}), 25: (1, {'@': 148}), 10: (1, {'@': 148}), 11: (1, {'@': 148}), 3: (1, {'@': 148}), 28: (1, {'@': 148}), 15: (1, {'@': 148}), 30: (1, {'@': 148}), 5: (1, {'@': 148}), 32: (1, {'@': 148}), 17: (1, {'@': 148}), 18: (1, {'@': 148}), 33: (1, {'@': 148}), 34: (1, {'@': 148}), 21: (1, {'@': 148}), 8: (1, {'@': 148}), 12: (1, {'@': 148}), 27: (1, {'@': 148}), 31: (1, {'@': 148}), 7: (1, {'@': 148}), 9: (1, {'@': 148}), 26: (1, {'@': 148}), 13: (1, {'@': 148}), 14: (1, {'@': 148}), 29: (1, {'@': 148}), 16: (1, {'@': 148}), 19: (1, {'@': 148})}, 169: {20: (1, {'@': 156}), 22: (1, {'@': 156}), 1: (1, {'@': 156}), 23: (1, {'@': 156}), 24: (1, {'@': 156}), 25: (1, {'@': 156}), 10: (1, {'@': 156}), 11: (1, {'@': 156}), 3: (1, {'@': 156}), 28: (1, {'@': 156}), 15: (1, {'@': 156}), 30: (1, {'@': 156}), 5: (1, {'@': 156}), 32: (1, {'@': 156}), 17: (1, {'@': 156}), 18: (1, {'@': 156}), 33: (1, {'@': 156}), 34: (1, {'@': 156}), 21: (1, {'@': 156}), 8: (1, {'@': 156}), 12: (1, {'@': 156}), 27: (1, {'@': 156}), 31: (1, {'@': 156}), 7: (1, {'@': 156}), 9: (1, {'@': 156}), 26: (1, {'@': 156}), 13: (1, {'@': 156}), 14: (1, {'@': 156}), 29: (1, {'@': 156}), 16: (1, {'@': 156}), 19: (1, {'@': 156})}, 170: {20: (1, {'@': 249}), 22: (1, {'@': 249}), 1: (1, {'@': 249}), 23: (1, {'@': 249}), 24: (1, {'@': 249}), 25: (1, {'@': 249}), 10: (1, {'@': 249}), 11: (1, {'@': 249}), 3: (1, {'@': 249}), 28: (1, {'@': 249}), 15: (1, {'@': 249}), 30: (1, {'@': 249}), 5: (1, {'@': 249}), 32: (1, {'@': 249}), 17: (1, {'@': 249}), 18: (1, {'@': 249}), 33: (1, {'@': 249}), 34: (1, {'@': 249}), 21: (1, {'@': 249}), 8: (1, {'@': 249}), 12: (1, {'@': 249}), 27: (1, {'@': 249}), 31: (1, {'@': 249}), 7: (1, {'@': 249}), 9: (1, {'@': 249}), 26: (1, {'@': 249}), 13: (1, {'@': 249}), 14: (1, {'@': 249}), 29: (1, {'@': 249}), 16: (1, {'@': 249}), 19: (1, {'@': 249})}, 171: {20: (1, {'@': 197}), 21: (1, {'@': 197}), 22: (1, {'@': 197}), 1: (1, {'@': 197}), 23: (1, {'@': 197}), 7: (1, {'@': 197}), 8: (1, {'@': 197}), 9: (1, {'@': 197}), 24: (1, {'@': 197}), 10: (1, {'@': 197}), 11: (1, {'@': 197}), 12: (1, {'@': 197}), 25: (1, {'@': 197}), 26: (1, {'@': 197}), 3: (1, {'@': 197}), 27: (1, {'@': 197}), 13: (1, {'@': 197}), 14: (1, {'@': 197}), 28: (1, {'@': 197}), 29: (1, {'@': 197}), 15: (1, {'@': 197}), 30: (1, {'@': 197}), 31: (1, {'@': 197}), 5: (1, {'@': 197}), 16: (1, {'@': 197}), 32: (1, {'@': 197}), 17: (1, {'@': 197}), 18: (1, {'@': 197}), 19: (1, {'@': 197}), 33: (1, {'@': 197}), 34: (1, {'@': 197})}, 172: {27: (0, 201), 31: (1, {'@': 181}), 21: (1, {'@': 181}), 12: (1, {'@': 181}), 14: (1, {'@': 181})}, 173: {20: (1, {'@': 254}), 22: (1, {'@': 254}), 1: (1, {'@': 254}), 23: (1, {'@': 254}), 24: (1, {'@': 254}), 25: (1, {'@': 254}), 10: (1, {'@': 254}), 11: (1, {'@': 254}), 3: (1, {'@': 254}), 28: (1, {'@': 254}), 15: (1, {'@': 254}), 30: (1, {'@': 254}), 5: (1, {'@': 254}), 32: (1, {'@': 254}), 17: (1, {'@': 254}), 18: (1, {'@': 254}), 33: (1, {'@': 254}), 34: (1, {'@': 254}), 21: (1, {'@': 254}), 8: (1, {'@': 254}), 12: (1, {'@': 254}), 27: (1, {'@': 254}), 31: (1, {'@': 254}), 7: (1, {'@': 254}), 9: (1, {'@': 254}), 26: (1, {'@': 254}), 13: (1, {'@': 254}), 14: (1, {'@': 254}), 29: (1, {'@': 254}), 16: (1, {'@': 254}), 19: (1, {'@': 254})}, 174: {1: (0, 540), 87: (0, 53), 35: (0, 174), 12: (0, 532), 37: (0, 284), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 42), 88: (0, 43), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 70: (0, 110), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 77: (0, 229), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 16: (0, 86), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 175: {79: (0, 270), 69: (0, 514), 9: (0, 147), 12: (0, 532), 31: (0, 524), 70: (0, 273), 21: (0, 486), 8: (0, 275)}, 176: {70: (0, 4), 69: (0, 514), 12: (0, 532), 27: (0, 89), 8: (0, 95), 31: (0, 524), 21: (0, 486)}, 177: {37: (0, 19), 83: (0, 99), 80: (0, 548), 69: (0, 514), 12: (0, 532), 82: (0, 537), 29: (0, 491), 81: (0, 518), 70: (0, 102), 31: (0, 524), 21: (0, 486), 16: (1, {'@': 48})}, 178: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 45: (0, 37), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 179: {20: (1, {'@': 160}), 22: (1, {'@': 160}), 1: (1, {'@': 160}), 23: (1, {'@': 160}), 24: (1, {'@': 160}), 25: (1, {'@': 160}), 10: (1, {'@': 160}), 11: (1, {'@': 160}), 3: (1, {'@': 160}), 28: (1, {'@': 160}), 15: (1, {'@': 160}), 30: (1, {'@': 160}), 5: (1, {'@': 160}), 32: (1, {'@': 160}), 17: (1, {'@': 160}), 18: (1, {'@': 160}), 33: (1, {'@': 160}), 34: (1, {'@': 160}), 21: (1, {'@': 160}), 8: (1, {'@': 160}), 12: (1, {'@': 160}), 27: (1, {'@': 160}), 31: (1, {'@': 160}), 7: (1, {'@': 160}), 9: (1, {'@': 160}), 26: (1, {'@': 160}), 13: (1, {'@': 160}), 14: (1, {'@': 160}), 29: (1, {'@': 160}), 16: (1, {'@': 160}), 19: (1, {'@': 160})}, 180: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 517), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 70: (0, 519), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 181: {70: (0, 437), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 283}), 40: (1, {'@': 283}), 29: (1, {'@': 283}), 1: (1, {'@': 283}), 62: (1, {'@': 283}), 55: (1, {'@': 283}), 35: (1, {'@': 283}), 64: (1, {'@': 283}), 49: (1, {'@': 283}), 54: (1, {'@': 283})}, 182: {69: (0, 514), 9: (0, 147), 12: (0, 532), 31: (0, 524), 16: (0, 397), 79: (0, 399), 70: (0, 404), 21: (0, 486)}, 183: {20: (1, {'@': 68}), 8: (1, {'@': 68}), 21: (1, {'@': 68}), 12: (1, {'@': 68}), 31: (1, {'@': 68}), 27: (1, {'@': 68}), 13: (1, {'@': 68}), 7: (1, {'@': 68}), 14: (1, {'@': 68}), 26: (1, {'@': 68}), 16: (1, {'@': 68}), 9: (1, {'@': 68}), 19: (1, {'@': 68}), 29: (1, {'@': 68})}, 184: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 41: (0, 482), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 185: {28: (1, {'@': 106}), 20: (1, {'@': 106}), 15: (1, {'@': 106}), 22: (1, {'@': 106}), 30: (1, {'@': 106}), 1: (1, {'@': 106}), 23: (1, {'@': 106}), 5: (1, {'@': 106}), 24: (1, {'@': 106}), 25: (1, {'@': 106}), 32: (1, {'@': 106}), 10: (1, {'@': 106}), 11: (1, {'@': 106}), 17: (1, {'@': 106}), 18: (1, {'@': 106}), 3: (1, {'@': 106}), 33: (1, {'@': 106}), 34: (1, {'@': 106}), 21: (1, {'@': 106}), 8: (1, {'@': 106}), 12: (1, {'@': 106}), 27: (1, {'@': 106}), 31: (1, {'@': 106}), 7: (1, {'@': 106}), 9: (1, {'@': 106}), 26: (1, {'@': 106}), 13: (1, {'@': 106}), 14: (1, {'@': 106}), 29: (1, {'@': 106}), 16: (1, {'@': 106}), 19: (1, {'@': 106})}, 186: {20: (1, {'@': 213}), 22: (1, {'@': 213}), 1: (1, {'@': 213}), 23: (1, {'@': 213}), 24: (1, {'@': 213}), 25: (1, {'@': 213}), 10: (1, {'@': 213}), 11: (1, {'@': 213}), 3: (1, {'@': 213}), 28: (1, {'@': 213}), 15: (1, {'@': 213}), 30: (1, {'@': 213}), 5: (1, {'@': 213}), 32: (1, {'@': 213}), 17: (1, {'@': 213}), 18: (1, {'@': 213}), 33: (1, {'@': 213}), 34: (1, {'@': 213}), 21: (1, {'@': 213}), 8: (1, {'@': 213}), 12: (1, {'@': 213}), 27: (1, {'@': 213}), 31: (1, {'@': 213}), 7: (1, {'@': 213}), 9: (1, {'@': 213}), 26: (1, {'@': 213}), 13: (1, {'@': 213}), 14: (1, {'@': 213}), 29: (1, {'@': 213}), 16: (1, {'@': 213}), 19: (1, {'@': 213})}, 187: {14: (1, {'@': 336}), 21: (1, {'@': 336}), 31: (1, {'@': 336}), 12: (1, {'@': 336}), 26: (1, {'@': 336}), 27: (1, {'@': 336}), 8: (1, {'@': 336})}, 188: {69: (0, 514), 70: (0, 509), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 189: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 41: (0, 263), 47: (0, 205), 70: (0, 285), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 190: {1: (0, 540), 35: (0, 174), 70: (0, 530), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 36: (0, 534), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 191: {20: (1, {'@': 154}), 22: (1, {'@': 154}), 1: (1, {'@': 154}), 23: (1, {'@': 154}), 24: (1, {'@': 154}), 25: (1, {'@': 154}), 10: (1, {'@': 154}), 11: (1, {'@': 154}), 3: (1, {'@': 154}), 28: (1, {'@': 154}), 15: (1, {'@': 154}), 30: (1, {'@': 154}), 5: (1, {'@': 154}), 32: (1, {'@': 154}), 17: (1, {'@': 154}), 18: (1, {'@': 154}), 33: (1, {'@': 154}), 34: (1, {'@': 154}), 21: (1, {'@': 154}), 8: (1, {'@': 154}), 12: (1, {'@': 154}), 27: (1, {'@': 154}), 31: (1, {'@': 154}), 7: (1, {'@': 154}), 9: (1, {'@': 154}), 26: (1, {'@': 154}), 13: (1, {'@': 154}), 14: (1, {'@': 154}), 29: (1, {'@': 154}), 16: (1, {'@': 154}), 19: (1, {'@': 154})}, 192: {31: (1, {'@': 179}), 21: (1, {'@': 179}), 12: (1, {'@': 179}), 14: (1, {'@': 179})}, 193: {69: (0, 514), 86: (0, 495), 70: (0, 480), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 194: {7: (0, 469)}, 195: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 36: (0, 512), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 196: {69: (0, 514), 12: (0, 532), 31: (0, 524), 70: (0, 345), 21: (0, 486), 28: (1, {'@': 277}), 40: (1, {'@': 277}), 29: (1, {'@': 277}), 1: (1, {'@': 277}), 62: (1, {'@': 277}), 55: (1, {'@': 277}), 35: (1, {'@': 277}), 64: (1, {'@': 277}), 49: (1, {'@': 277}), 54: (1, {'@': 277})}, 197: {20: (1, {'@': 142}), 22: (1, {'@': 142}), 1: (1, {'@': 142}), 23: (1, {'@': 142}), 24: (1, {'@': 142}), 25: (1, {'@': 142}), 10: (1, {'@': 142}), 11: (1, {'@': 142}), 3: (1, {'@': 142}), 28: (1, {'@': 142}), 15: (1, {'@': 142}), 30: (1, {'@': 142}), 5: (1, {'@': 142}), 32: (1, {'@': 142}), 17: (1, {'@': 142}), 18: (1, {'@': 142}), 33: (1, {'@': 142}), 34: (1, {'@': 142}), 21: (1, {'@': 142}), 8: (1, {'@': 142}), 12: (1, {'@': 142}), 27: (1, {'@': 142}), 31: (1, {'@': 142}), 7: (1, {'@': 142}), 9: (1, {'@': 142}), 26: (1, {'@': 142}), 13: (1, {'@': 142}), 14: (1, {'@': 142}), 29: (1, {'@': 142}), 16: (1, {'@': 142}), 19: (1, {'@': 142})}, 198: {7: (0, 464)}, 199: {28: (1, {'@': 296}), 40: (1, {'@': 296}), 29: (1, {'@': 296}), 1: (1, {'@': 296}), 62: (1, {'@': 296}), 55: (1, {'@': 296}), 35: (1, {'@': 296}), 64: (1, {'@': 296}), 49: (1, {'@': 296}), 54: (1, {'@': 296}), 21: (1, {'@': 296}), 31: (1, {'@': 296}), 12: (1, {'@': 296})}, 200: {16: (1, {'@': 53}), 29: (1, {'@': 53}), 31: (1, {'@': 53}), 21: (1, {'@': 53}), 12: (1, {'@': 53}), 19: (1, {'@': 53})}, 201: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 70: (0, 277), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 36: (0, 212), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 202: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 36: (0, 506), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 8: (0, 538), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 203: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 36: (0, 529), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 204: {28: (1, {'@': 115}), 20: (1, {'@': 115}), 15: (1, {'@': 115}), 22: (1, {'@': 115}), 30: (1, {'@': 115}), 1: (1, {'@': 115}), 23: (1, {'@': 115}), 5: (1, {'@': 115}), 24: (1, {'@': 115}), 25: (1, {'@': 115}), 32: (1, {'@': 115}), 10: (1, {'@': 115}), 11: (1, {'@': 115}), 17: (1, {'@': 115}), 18: (1, {'@': 115}), 3: (1, {'@': 115}), 33: (1, {'@': 115}), 34: (1, {'@': 115}), 21: (1, {'@': 115}), 8: (1, {'@': 115}), 12: (1, {'@': 115}), 27: (1, {'@': 115}), 31: (1, {'@': 115}), 7: (1, {'@': 115}), 9: (1, {'@': 115}), 26: (1, {'@': 115}), 13: (1, {'@': 115}), 14: (1, {'@': 115}), 29: (1, {'@': 115}), 16: (1, {'@': 115}), 19: (1, {'@': 115})}, 205: {28: (1, {'@': 112}), 20: (1, {'@': 112}), 15: (1, {'@': 112}), 22: (1, {'@': 112}), 30: (1, {'@': 112}), 1: (1, {'@': 112}), 23: (1, {'@': 112}), 5: (1, {'@': 112}), 24: (1, {'@': 112}), 25: (1, {'@': 112}), 32: (1, {'@': 112}), 10: (1, {'@': 112}), 11: (1, {'@': 112}), 17: (1, {'@': 112}), 18: (1, {'@': 112}), 3: (1, {'@': 112}), 33: (1, {'@': 112}), 34: (1, {'@': 112}), 21: (1, {'@': 112}), 8: (1, {'@': 112}), 12: (1, {'@': 112}), 27: (1, {'@': 112}), 31: (1, {'@': 112}), 7: (1, {'@': 112}), 9: (1, {'@': 112}), 26: (1, {'@': 112}), 13: (1, {'@': 112}), 14: (1, {'@': 112}), 29: (1, {'@': 112}), 16: (1, {'@': 112}), 19: (1, {'@': 112})}, 206: {10: (0, 82), 25: (0, 308), 89: (0, 208), 90: (0, 23), 24: (1, {'@': 79}), 20: (1, {'@': 79}), 33: (1, {'@': 79}), 11: (1, {'@': 79}), 21: (1, {'@': 79}), 31: (1, {'@': 79}), 8: (1, {'@': 79}), 27: (1, {'@': 79}), 12: (1, {'@': 79}), 7: (1, {'@': 79}), 9: (1, {'@': 79}), 26: (1, {'@': 79}), 13: (1, {'@': 79}), 14: (1, {'@': 79}), 29: (1, {'@': 79}), 16: (1, {'@': 79}), 19: (1, {'@': 79})}, 207: {7: (0, 313)}, 208: {90: (0, 51), 10: (0, 82), 25: (0, 308), 24: (1, {'@': 78}), 20: (1, {'@': 78}), 33: (1, {'@': 78}), 11: (1, {'@': 78}), 21: (1, {'@': 78}), 31: (1, {'@': 78}), 8: (1, {'@': 78}), 27: (1, {'@': 78}), 12: (1, {'@': 78}), 7: (1, {'@': 78}), 9: (1, {'@': 78}), 26: (1, {'@': 78}), 13: (1, {'@': 78}), 14: (1, {'@': 78}), 29: (1, {'@': 78}), 16: (1, {'@': 78}), 19: (1, {'@': 78})}, 209: {69: (0, 514), 12: (0, 532), 8: (0, 539), 70: (0, 542), 31: (0, 524), 21: (0, 486)}, 210: {20: (1, {'@': 139}), 22: (1, {'@': 139}), 1: (1, {'@': 139}), 23: (1, {'@': 139}), 24: (1, {'@': 139}), 25: (1, {'@': 139}), 10: (1, {'@': 139}), 11: (1, {'@': 139}), 3: (1, {'@': 139}), 28: (1, {'@': 139}), 15: (1, {'@': 139}), 30: (1, {'@': 139}), 5: (1, {'@': 139}), 32: (1, {'@': 139}), 17: (1, {'@': 139}), 18: (1, {'@': 139}), 33: (1, {'@': 139}), 34: (1, {'@': 139}), 21: (1, {'@': 139}), 8: (1, {'@': 139}), 12: (1, {'@': 139}), 27: (1, {'@': 139}), 31: (1, {'@': 139}), 7: (1, {'@': 139}), 9: (1, {'@': 139}), 26: (1, {'@': 139}), 13: (1, {'@': 139}), 14: (1, {'@': 139}), 29: (1, {'@': 139}), 16: (1, {'@': 139}), 19: (1, {'@': 139})}, 211: {28: (1, {'@': 109}), 20: (1, {'@': 109}), 15: (1, {'@': 109}), 22: (1, {'@': 109}), 30: (1, {'@': 109}), 1: (1, {'@': 109}), 23: (1, {'@': 109}), 5: (1, {'@': 109}), 24: (1, {'@': 109}), 25: (1, {'@': 109}), 32: (1, {'@': 109}), 10: (1, {'@': 109}), 11: (1, {'@': 109}), 17: (1, {'@': 109}), 18: (1, {'@': 109}), 3: (1, {'@': 109}), 33: (1, {'@': 109}), 34: (1, {'@': 109}), 21: (1, {'@': 109}), 8: (1, {'@': 109}), 12: (1, {'@': 109}), 27: (1, {'@': 109}), 31: (1, {'@': 109}), 7: (1, {'@': 109}), 9: (1, {'@': 109}), 26: (1, {'@': 109}), 13: (1, {'@': 109}), 14: (1, {'@': 109}), 29: (1, {'@': 109}), 16: (1, {'@': 109}), 19: (1, {'@': 109})}, 212: {14: (1, {'@': 335}), 21: (1, {'@': 335}), 31: (1, {'@': 335}), 12: (1, {'@': 335}), 26: (1, {'@': 335}), 27: (1, {'@': 335}), 8: (1, {'@': 335})}, 213: {20: (1, {'@': 145}), 22: (1, {'@': 145}), 1: (1, {'@': 145}), 23: (1, {'@': 145}), 24: (1, {'@': 145}), 25: (1, {'@': 145}), 10: (1, {'@': 145}), 11: (1, {'@': 145}), 3: (1, {'@': 145}), 28: (1, {'@': 145}), 15: (1, {'@': 145}), 30: (1, {'@': 145}), 5: (1, {'@': 145}), 32: (1, {'@': 145}), 17: (1, {'@': 145}), 18: (1, {'@': 145}), 33: (1, {'@': 145}), 34: (1, {'@': 145}), 21: (1, {'@': 145}), 8: (1, {'@': 145}), 12: (1, {'@': 145}), 27: (1, {'@': 145}), 31: (1, {'@': 145}), 7: (1, {'@': 145}), 9: (1, {'@': 145}), 26: (1, {'@': 145}), 13: (1, {'@': 145}), 14: (1, {'@': 145}), 29: (1, {'@': 145}), 16: (1, {'@': 145}), 19: (1, {'@': 145})}, 214: {28: (1, {'@': 103}), 20: (1, {'@': 103}), 15: (1, {'@': 103}), 22: (1, {'@': 103}), 30: (1, {'@': 103}), 1: (1, {'@': 103}), 23: (1, {'@': 103}), 5: (1, {'@': 103}), 24: (1, {'@': 103}), 25: (1, {'@': 103}), 32: (1, {'@': 103}), 10: (1, {'@': 103}), 11: (1, {'@': 103}), 17: (1, {'@': 103}), 18: (1, {'@': 103}), 3: (1, {'@': 103}), 33: (1, {'@': 103}), 34: (1, {'@': 103}), 21: (1, {'@': 103}), 8: (1, {'@': 103}), 12: (1, {'@': 103}), 27: (1, {'@': 103}), 31: (1, {'@': 103}), 7: (1, {'@': 103}), 9: (1, {'@': 103}), 26: (1, {'@': 103}), 13: (1, {'@': 103}), 14: (1, {'@': 103}), 29: (1, {'@': 103}), 16: (1, {'@': 103}), 19: (1, {'@': 103})}, 215: {14: (1, {'@': 330}), 21: (1, {'@': 330}), 31: (1, {'@': 330}), 12: (1, {'@': 330}), 26: (1, {'@': 330}), 27: (1, {'@': 330}), 8: (1, {'@': 330})}, 216: {91: (0, 52), 92: (0, 436), 11: (0, 424), 24: (1, {'@': 77}), 20: (1, {'@': 77}), 33: (1, {'@': 77}), 8: (1, {'@': 77}), 21: (1, {'@': 77}), 12: (1, {'@': 77}), 31: (1, {'@': 77}), 27: (1, {'@': 77}), 13: (1, {'@': 77}), 14: (1, {'@': 77}), 29: (1, {'@': 77}), 7: (1, {'@': 77}), 9: (1, {'@': 77}), 16: (1, {'@': 77}), 19: (1, {'@': 77}), 26: (1, {'@': 77})}, 217: {20: (1, {'@': 168}), 22: (1, {'@': 168}), 1: (1, {'@': 168}), 23: (1, {'@': 168}), 24: (1, {'@': 168}), 25: (1, {'@': 168}), 10: (1, {'@': 168}), 11: (1, {'@': 168}), 3: (1, {'@': 168}), 28: (1, {'@': 168}), 15: (1, {'@': 168}), 30: (1, {'@': 168}), 5: (1, {'@': 168}), 32: (1, {'@': 168}), 17: (1, {'@': 168}), 18: (1, {'@': 168}), 33: (1, {'@': 168}), 34: (1, {'@': 168}), 21: (1, {'@': 168}), 8: (1, {'@': 168}), 12: (1, {'@': 168}), 27: (1, {'@': 168}), 31: (1, {'@': 168}), 7: (1, {'@': 168}), 9: (1, {'@': 168}), 26: (1, {'@': 168}), 13: (1, {'@': 168}), 14: (1, {'@': 168}), 29: (1, {'@': 168}), 16: (1, {'@': 168}), 19: (1, {'@': 168})}, 218: {20: (1, {'@': 135}), 22: (1, {'@': 135}), 1: (1, {'@': 135}), 23: (1, {'@': 135}), 24: (1, {'@': 135}), 25: (1, {'@': 135}), 10: (1, {'@': 135}), 11: (1, {'@': 135}), 3: (1, {'@': 135}), 28: (1, {'@': 135}), 15: (1, {'@': 135}), 30: (1, {'@': 135}), 5: (1, {'@': 135}), 32: (1, {'@': 135}), 17: (1, {'@': 135}), 18: (1, {'@': 135}), 33: (1, {'@': 135}), 34: (1, {'@': 135}), 21: (1, {'@': 135}), 8: (1, {'@': 135}), 12: (1, {'@': 135}), 27: (1, {'@': 135}), 31: (1, {'@': 135}), 7: (1, {'@': 135}), 9: (1, {'@': 135}), 26: (1, {'@': 135}), 13: (1, {'@': 135}), 14: (1, {'@': 135}), 29: (1, {'@': 135}), 16: (1, {'@': 135}), 19: (1, {'@': 135})}, 219: {20: (1, {'@': 127}), 22: (1, {'@': 127}), 1: (1, {'@': 127}), 23: (1, {'@': 127}), 24: (1, {'@': 127}), 25: (1, {'@': 127}), 10: (1, {'@': 127}), 11: (1, {'@': 127}), 3: (1, {'@': 127}), 28: (1, {'@': 127}), 15: (1, {'@': 127}), 30: (1, {'@': 127}), 5: (1, {'@': 127}), 32: (1, {'@': 127}), 17: (1, {'@': 127}), 18: (1, {'@': 127}), 33: (1, {'@': 127}), 34: (1, {'@': 127}), 21: (1, {'@': 127}), 8: (1, {'@': 127}), 12: (1, {'@': 127}), 27: (1, {'@': 127}), 31: (1, {'@': 127}), 7: (1, {'@': 127}), 9: (1, {'@': 127}), 26: (1, {'@': 127}), 13: (1, {'@': 127}), 14: (1, {'@': 127}), 29: (1, {'@': 127}), 16: (1, {'@': 127}), 19: (1, {'@': 127})}, 220: {70: (0, 500), 86: (0, 504), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 221: {24: (0, 295), 93: (0, 76), 94: (0, 456), 20: (1, {'@': 75}), 33: (1, {'@': 75}), 8: (1, {'@': 75}), 21: (1, {'@': 75}), 12: (1, {'@': 75}), 27: (1, {'@': 75}), 31: (1, {'@': 75}), 13: (1, {'@': 75}), 14: (1, {'@': 75}), 29: (1, {'@': 75}), 7: (1, {'@': 75}), 9: (1, {'@': 75}), 16: (1, {'@': 75}), 19: (1, {'@': 75}), 26: (1, {'@': 75})}, 222: {20: (1, {'@': 214}), 22: (1, {'@': 214}), 1: (1, {'@': 214}), 23: (1, {'@': 214}), 24: (1, {'@': 214}), 25: (1, {'@': 214}), 10: (1, {'@': 214}), 11: (1, {'@': 214}), 3: (1, {'@': 214}), 28: (1, {'@': 214}), 15: (1, {'@': 214}), 30: (1, {'@': 214}), 5: (1, {'@': 214}), 32: (1, {'@': 214}), 17: (1, {'@': 214}), 18: (1, {'@': 214}), 33: (1, {'@': 214}), 34: (1, {'@': 214}), 21: (1, {'@': 214}), 8: (1, {'@': 214}), 12: (1, {'@': 214}), 27: (1, {'@': 214}), 31: (1, {'@': 214}), 7: (1, {'@': 214}), 9: (1, {'@': 214}), 26: (1, {'@': 214}), 13: (1, {'@': 214}), 14: (1, {'@': 214}), 29: (1, {'@': 214}), 16: (1, {'@': 214}), 19: (1, {'@': 214})}, 223: {16: (0, 286)}, 224: {28: (1, {'@': 113}), 20: (1, {'@': 113}), 15: (1, {'@': 113}), 22: (1, {'@': 113}), 30: (1, {'@': 113}), 1: (1, {'@': 113}), 23: (1, {'@': 113}), 5: (1, {'@': 113}), 24: (1, {'@': 113}), 25: (1, {'@': 113}), 32: (1, {'@': 113}), 10: (1, {'@': 113}), 11: (1, {'@': 113}), 17: (1, {'@': 113}), 18: (1, {'@': 113}), 3: (1, {'@': 113}), 33: (1, {'@': 113}), 34: (1, {'@': 113}), 21: (1, {'@': 113}), 8: (1, {'@': 113}), 12: (1, {'@': 113}), 27: (1, {'@': 113}), 31: (1, {'@': 113}), 7: (1, {'@': 113}), 9: (1, {'@': 113}), 26: (1, {'@': 113}), 13: (1, {'@': 113}), 14: (1, {'@': 113}), 29: (1, {'@': 113}), 16: (1, {'@': 113}), 19: (1, {'@': 113})}, 225: {8: (0, 186)}, 226: {20: (1, {'@': 129}), 22: (1, {'@': 129}), 1: (1, {'@': 129}), 23: (1, {'@': 129}), 24: (1, {'@': 129}), 25: (1, {'@': 129}), 10: (1, {'@': 129}), 11: (1, {'@': 129}), 3: (1, {'@': 129}), 28: (1, {'@': 129}), 15: (1, {'@': 129}), 30: (1, {'@': 129}), 5: (1, {'@': 129}), 32: (1, {'@': 129}), 17: (1, {'@': 129}), 18: (1, {'@': 129}), 33: (1, {'@': 129}), 34: (1, {'@': 129}), 21: (1, {'@': 129}), 8: (1, {'@': 129}), 12: (1, {'@': 129}), 27: (1, {'@': 129}), 31: (1, {'@': 129}), 7: (1, {'@': 129}), 9: (1, {'@': 129}), 26: (1, {'@': 129}), 13: (1, {'@': 129}), 14: (1, {'@': 129}), 29: (1, {'@': 129}), 16: (1, {'@': 129}), 19: (1, {'@': 129})}, 227: {20: (1, {'@': 60}), 8: (1, {'@': 60}), 21: (1, {'@': 60}), 12: (1, {'@': 60}), 31: (1, {'@': 60}), 27: (1, {'@': 60}), 13: (1, {'@': 60}), 7: (1, {'@': 60}), 14: (1, {'@': 60}), 26: (1, {'@': 60}), 16: (1, {'@': 60}), 9: (1, {'@': 60}), 19: (1, {'@': 60}), 29: (1, {'@': 60})}, 228: {1: (0, 540), 35: (0, 174), 37: (0, 268), 8: (0, 516), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 187), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 229: {69: (0, 514), 12: (0, 532), 16: (0, 362), 95: (0, 351), 27: (0, 324), 96: (0, 312), 31: (0, 524), 70: (0, 64), 21: (0, 486)}, 230: {20: (1, {'@': 131}), 22: (1, {'@': 131}), 1: (1, {'@': 131}), 23: (1, {'@': 131}), 24: (1, {'@': 131}), 25: (1, {'@': 131}), 10: (1, {'@': 131}), 11: (1, {'@': 131}), 3: (1, {'@': 131}), 28: (1, {'@': 131}), 15: (1, {'@': 131}), 30: (1, {'@': 131}), 5: (1, {'@': 131}), 32: (1, {'@': 131}), 17: (1, {'@': 131}), 18: (1, {'@': 131}), 33: (1, {'@': 131}), 34: (1, {'@': 131}), 21: (1, {'@': 131}), 8: (1, {'@': 131}), 12: (1, {'@': 131}), 27: (1, {'@': 131}), 31: (1, {'@': 131}), 7: (1, {'@': 131}), 9: (1, {'@': 131}), 26: (1, {'@': 131}), 13: (1, {'@': 131}), 14: (1, {'@': 131}), 29: (1, {'@': 131}), 16: (1, {'@': 131}), 19: (1, {'@': 131})}, 231: {0: (0, 402), 1: (0, 264), 2: (0, 376), 3: (0, 358), 4: (0, 335), 5: (0, 337), 6: (0, 322), 7: (1, {'@': 327}), 8: (1, {'@': 327}), 9: (1, {'@': 327}), 10: (1, {'@': 327}), 11: (1, {'@': 327}), 12: (1, {'@': 327}), 13: (1, {'@': 327}), 14: (1, {'@': 327}), 15: (1, {'@': 327}), 16: (1, {'@': 327}), 17: (1, {'@': 327}), 18: (1, {'@': 327}), 19: (1, {'@': 327}), 20: (1, {'@': 327}), 21: (1, {'@': 327}), 22: (1, {'@': 327}), 23: (1, {'@': 327}), 24: (1, {'@': 327}), 25: (1, {'@': 327}), 26: (1, {'@': 327}), 27: (1, {'@': 327}), 28: (1, {'@': 327}), 29: (1, {'@': 327}), 30: (1, {'@': 327}), 31: (1, {'@': 327}), 32: (1, {'@': 327}), 33: (1, {'@': 327}), 34: (1, {'@': 327})}, 232: {1: (0, 540), 35: (0, 174), 37: (0, 268), 8: (0, 230), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 215), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 233: {8: (0, 81)}, 234: {69: (0, 514), 12: (0, 532), 70: (0, 253), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 261}), 40: (1, {'@': 261}), 29: (1, {'@': 261}), 1: (1, {'@': 261}), 62: (1, {'@': 261}), 55: (1, {'@': 261}), 35: (1, {'@': 261}), 64: (1, {'@': 261}), 49: (1, {'@': 261}), 54: (1, {'@': 261})}, 235: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 36: (0, 451), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 236: {69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 338), 28: (1, {'@': 275}), 40: (1, {'@': 275}), 29: (1, {'@': 275}), 1: (1, {'@': 275}), 62: (1, {'@': 275}), 55: (1, {'@': 275}), 35: (1, {'@': 275}), 64: (1, {'@': 275}), 49: (1, {'@': 275}), 54: (1, {'@': 275})}, 237: {28: (1, {'@': 264}), 40: (1, {'@': 264}), 29: (1, {'@': 264}), 1: (1, {'@': 264}), 62: (1, {'@': 264}), 55: (1, {'@': 264}), 35: (1, {'@': 264}), 64: (1, {'@': 264}), 49: (1, {'@': 264}), 54: (1, {'@': 264}), 21: (1, {'@': 264}), 31: (1, {'@': 264}), 12: (1, {'@': 264})}, 238: {20: (1, {'@': 209}), 22: (1, {'@': 209}), 1: (1, {'@': 209}), 23: (1, {'@': 209}), 24: (1, {'@': 209}), 25: (1, {'@': 209}), 10: (1, {'@': 209}), 11: (1, {'@': 209}), 3: (1, {'@': 209}), 28: (1, {'@': 209}), 15: (1, {'@': 209}), 30: (1, {'@': 209}), 5: (1, {'@': 209}), 32: (1, {'@': 209}), 17: (1, {'@': 209}), 18: (1, {'@': 209}), 33: (1, {'@': 209}), 34: (1, {'@': 209}), 21: (1, {'@': 209}), 8: (1, {'@': 209}), 12: (1, {'@': 209}), 27: (1, {'@': 209}), 31: (1, {'@': 209}), 7: (1, {'@': 209}), 9: (1, {'@': 209}), 26: (1, {'@': 209}), 13: (1, {'@': 209}), 14: (1, {'@': 209}), 29: (1, {'@': 209}), 16: (1, {'@': 209}), 19: (1, {'@': 209})}, 239: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 42: (0, 27)}, 240: {28: (1, {'@': 262}), 40: (1, {'@': 262}), 29: (1, {'@': 262}), 1: (1, {'@': 262}), 62: (1, {'@': 262}), 55: (1, {'@': 262}), 35: (1, {'@': 262}), 64: (1, {'@': 262}), 49: (1, {'@': 262}), 54: (1, {'@': 262}), 21: (1, {'@': 262}), 31: (1, {'@': 262}), 12: (1, {'@': 262})}, 241: {28: (1, {'@': 110}), 20: (1, {'@': 110}), 15: (1, {'@': 110}), 22: (1, {'@': 110}), 30: (1, {'@': 110}), 1: (1, {'@': 110}), 23: (1, {'@': 110}), 5: (1, {'@': 110}), 24: (1, {'@': 110}), 25: (1, {'@': 110}), 32: (1, {'@': 110}), 10: (1, {'@': 110}), 11: (1, {'@': 110}), 17: (1, {'@': 110}), 18: (1, {'@': 110}), 3: (1, {'@': 110}), 33: (1, {'@': 110}), 34: (1, {'@': 110}), 21: (1, {'@': 110}), 8: (1, {'@': 110}), 12: (1, {'@': 110}), 27: (1, {'@': 110}), 31: (1, {'@': 110}), 7: (1, {'@': 110}), 9: (1, {'@': 110}), 26: (1, {'@': 110}), 13: (1, {'@': 110}), 14: (1, {'@': 110}), 29: (1, {'@': 110}), 16: (1, {'@': 110}), 19: (1, {'@': 110})}, 242: {20: (1, {'@': 219}), 22: (1, {'@': 219}), 1: (1, {'@': 219}), 23: (1, {'@': 219}), 24: (1, {'@': 219}), 25: (1, {'@': 219}), 10: (1, {'@': 219}), 11: (1, {'@': 219}), 3: (1, {'@': 219}), 28: (1, {'@': 219}), 15: (1, {'@': 219}), 30: (1, {'@': 219}), 5: (1, {'@': 219}), 32: (1, {'@': 219}), 17: (1, {'@': 219}), 18: (1, {'@': 219}), 33: (1, {'@': 219}), 34: (1, {'@': 219}), 21: (1, {'@': 219}), 8: (1, {'@': 219}), 12: (1, {'@': 219}), 27: (1, {'@': 219}), 31: (1, {'@': 219}), 7: (1, {'@': 219}), 9: (1, {'@': 219}), 26: (1, {'@': 219}), 13: (1, {'@': 219}), 14: (1, {'@': 219}), 29: (1, {'@': 219}), 16: (1, {'@': 219}), 19: (1, {'@': 219})}, 243: {9: (0, 147), 70: (0, 141), 69: (0, 514), 12: (0, 532), 79: (0, 135), 8: (0, 70), 31: (0, 524), 21: (0, 486)}, 244: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 44: (0, 224), 46: (0, 185), 53: (0, 33), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 245: {20: (1, {'@': 220}), 22: (1, {'@': 220}), 1: (1, {'@': 220}), 23: (1, {'@': 220}), 24: (1, {'@': 220}), 25: (1, {'@': 220}), 10: (1, {'@': 220}), 11: (1, {'@': 220}), 3: (1, {'@': 220}), 28: (1, {'@': 220}), 15: (1, {'@': 220}), 30: (1, {'@': 220}), 5: (1, {'@': 220}), 32: (1, {'@': 220}), 17: (1, {'@': 220}), 18: (1, {'@': 220}), 33: (1, {'@': 220}), 34: (1, {'@': 220}), 21: (1, {'@': 220}), 8: (1, {'@': 220}), 12: (1, {'@': 220}), 27: (1, {'@': 220}), 31: (1, {'@': 220}), 7: (1, {'@': 220}), 9: (1, {'@': 220}), 26: (1, {'@': 220}), 13: (1, {'@': 220}), 14: (1, {'@': 220}), 29: (1, {'@': 220}), 16: (1, {'@': 220}), 19: (1, {'@': 220})}, 246: {20: (1, {'@': 151}), 22: (1, {'@': 151}), 1: (1, {'@': 151}), 23: (1, {'@': 151}), 24: (1, {'@': 151}), 25: (1, {'@': 151}), 10: (1, {'@': 151}), 11: (1, {'@': 151}), 3: (1, {'@': 151}), 28: (1, {'@': 151}), 15: (1, {'@': 151}), 30: (1, {'@': 151}), 5: (1, {'@': 151}), 32: (1, {'@': 151}), 17: (1, {'@': 151}), 18: (1, {'@': 151}), 33: (1, {'@': 151}), 34: (1, {'@': 151}), 21: (1, {'@': 151}), 8: (1, {'@': 151}), 12: (1, {'@': 151}), 27: (1, {'@': 151}), 31: (1, {'@': 151}), 7: (1, {'@': 151}), 9: (1, {'@': 151}), 26: (1, {'@': 151}), 13: (1, {'@': 151}), 14: (1, {'@': 151}), 29: (1, {'@': 151}), 16: (1, {'@': 151}), 19: (1, {'@': 151})}, 247: {20: (1, {'@': 229}), 22: (1, {'@': 229}), 1: (1, {'@': 229}), 23: (1, {'@': 229}), 24: (1, {'@': 229}), 25: (1, {'@': 229}), 10: (1, {'@': 229}), 11: (1, {'@': 229}), 3: (1, {'@': 229}), 28: (1, {'@': 229}), 15: (1, {'@': 229}), 30: (1, {'@': 229}), 5: (1, {'@': 229}), 32: (1, {'@': 229}), 17: (1, {'@': 229}), 18: (1, {'@': 229}), 33: (1, {'@': 229}), 34: (1, {'@': 229}), 21: (1, {'@': 229}), 8: (1, {'@': 229}), 12: (1, {'@': 229}), 27: (1, {'@': 229}), 31: (1, {'@': 229}), 7: (1, {'@': 229}), 9: (1, {'@': 229}), 26: (1, {'@': 229}), 13: (1, {'@': 229}), 14: (1, {'@': 229}), 29: (1, {'@': 229}), 16: (1, {'@': 229}), 19: (1, {'@': 229})}, 248: {20: (1, {'@': 207}), 22: (1, {'@': 207}), 1: (1, {'@': 207}), 23: (1, {'@': 207}), 24: (1, {'@': 207}), 25: (1, {'@': 207}), 10: (1, {'@': 207}), 11: (1, {'@': 207}), 3: (1, {'@': 207}), 28: (1, {'@': 207}), 15: (1, {'@': 207}), 30: (1, {'@': 207}), 5: (1, {'@': 207}), 32: (1, {'@': 207}), 17: (1, {'@': 207}), 18: (1, {'@': 207}), 33: (1, {'@': 207}), 34: (1, {'@': 207}), 21: (1, {'@': 207}), 8: (1, {'@': 207}), 12: (1, {'@': 207}), 27: (1, {'@': 207}), 31: (1, {'@': 207}), 7: (1, {'@': 207}), 9: (1, {'@': 207}), 26: (1, {'@': 207}), 13: (1, {'@': 207}), 14: (1, {'@': 207}), 29: (1, {'@': 207}), 16: (1, {'@': 207}), 19: (1, {'@': 207})}, 249: {69: (0, 514), 70: (0, 233), 12: (0, 532), 31: (0, 524), 21: (0, 486), 8: (0, 238)}, 250: {28: (1, {'@': 280}), 40: (1, {'@': 280}), 29: (1, {'@': 280}), 1: (1, {'@': 280}), 62: (1, {'@': 280}), 55: (1, {'@': 280}), 35: (1, {'@': 280}), 64: (1, {'@': 280}), 49: (1, {'@': 280}), 54: (1, {'@': 280}), 21: (1, {'@': 280}), 31: (1, {'@': 280}), 12: (1, {'@': 280})}, 251: {69: (0, 514), 8: (0, 137), 70: (0, 131), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 252: {69: (0, 514), 27: (0, 73), 12: (0, 532), 70: (0, 166), 21: (0, 486), 31: (0, 524), 8: (0, 168)}, 253: {28: (1, {'@': 260}), 40: (1, {'@': 260}), 29: (1, {'@': 260}), 1: (1, {'@': 260}), 62: (1, {'@': 260}), 55: (1, {'@': 260}), 35: (1, {'@': 260}), 64: (1, {'@': 260}), 49: (1, {'@': 260}), 54: (1, {'@': 260}), 21: (1, {'@': 260}), 31: (1, {'@': 260}), 12: (1, {'@': 260})}, 254: {8: (1, {'@': 313}), 31: (1, {'@': 313}), 21: (1, {'@': 313}), 12: (1, {'@': 313}), 14: (1, {'@': 313}), 27: (1, {'@': 313}), 28: (1, {'@': 313}), 40: (1, {'@': 313}), 29: (1, {'@': 313}), 1: (1, {'@': 313}), 62: (1, {'@': 313}), 55: (1, {'@': 313}), 35: (1, {'@': 313}), 64: (1, {'@': 313}), 49: (1, {'@': 313}), 54: (1, {'@': 313}), 7: (1, {'@': 313}), 19: (1, {'@': 313}), 9: (1, {'@': 313}), 16: (1, {'@': 313}), 86: (1, {'@': 313}), 87: (1, {'@': 313})}, 255: {69: (0, 514), 9: (0, 147), 8: (0, 248), 12: (0, 532), 79: (0, 251), 21: (0, 486), 31: (0, 524), 70: (0, 257)}, 256: {1: (0, 540), 77: (0, 340), 35: (0, 174), 37: (0, 284), 38: (0, 241), 39: (0, 325), 40: (0, 475), 16: (0, 343), 36: (0, 42), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 257: {8: (0, 133)}, 258: {8: (0, 143)}, 259: {17: (0, 398), 34: (0, 391), 97: (0, 49), 32: (0, 400), 28: (1, {'@': 84}), 20: (1, {'@': 84}), 15: (1, {'@': 84}), 22: (1, {'@': 84}), 30: (1, {'@': 84}), 23: (1, {'@': 84}), 24: (1, {'@': 84}), 25: (1, {'@': 84}), 10: (1, {'@': 84}), 11: (1, {'@': 84}), 18: (1, {'@': 84}), 33: (1, {'@': 84}), 21: (1, {'@': 84}), 8: (1, {'@': 84}), 12: (1, {'@': 84}), 27: (1, {'@': 84}), 31: (1, {'@': 84}), 7: (1, {'@': 84}), 9: (1, {'@': 84}), 26: (1, {'@': 84}), 13: (1, {'@': 84}), 14: (1, {'@': 84}), 29: (1, {'@': 84}), 16: (1, {'@': 84}), 19: (1, {'@': 84})}, 260: {20: (1, {'@': 210}), 22: (1, {'@': 210}), 1: (1, {'@': 210}), 23: (1, {'@': 210}), 24: (1, {'@': 210}), 25: (1, {'@': 210}), 10: (1, {'@': 210}), 11: (1, {'@': 210}), 3: (1, {'@': 210}), 28: (1, {'@': 210}), 15: (1, {'@': 210}), 30: (1, {'@': 210}), 5: (1, {'@': 210}), 32: (1, {'@': 210}), 17: (1, {'@': 210}), 18: (1, {'@': 210}), 33: (1, {'@': 210}), 34: (1, {'@': 210}), 21: (1, {'@': 210}), 8: (1, {'@': 210}), 12: (1, {'@': 210}), 27: (1, {'@': 210}), 31: (1, {'@': 210}), 7: (1, {'@': 210}), 9: (1, {'@': 210}), 26: (1, {'@': 210}), 13: (1, {'@': 210}), 14: (1, {'@': 210}), 29: (1, {'@': 210}), 16: (1, {'@': 210}), 19: (1, {'@': 210})}, 261: {20: (1, {'@': 222}), 22: (1, {'@': 222}), 1: (1, {'@': 222}), 23: (1, {'@': 222}), 24: (1, {'@': 222}), 25: (1, {'@': 222}), 10: (1, {'@': 222}), 11: (1, {'@': 222}), 3: (1, {'@': 222}), 28: (1, {'@': 222}), 15: (1, {'@': 222}), 30: (1, {'@': 222}), 5: (1, {'@': 222}), 32: (1, {'@': 222}), 17: (1, {'@': 222}), 18: (1, {'@': 222}), 33: (1, {'@': 222}), 34: (1, {'@': 222}), 21: (1, {'@': 222}), 8: (1, {'@': 222}), 12: (1, {'@': 222}), 27: (1, {'@': 222}), 31: (1, {'@': 222}), 7: (1, {'@': 222}), 9: (1, {'@': 222}), 26: (1, {'@': 222}), 13: (1, {'@': 222}), 14: (1, {'@': 222}), 29: (1, {'@': 222}), 16: (1, {'@': 222}), 19: (1, {'@': 222})}, 262: {8: (1, {'@': 300}), 31: (1, {'@': 300}), 21: (1, {'@': 300}), 12: (1, {'@': 300}), 16: (1, {'@': 300})}, 263: {20: (1, {'@': 62}), 8: (1, {'@': 62}), 21: (1, {'@': 62}), 12: (1, {'@': 62}), 31: (1, {'@': 62}), 27: (1, {'@': 62}), 13: (1, {'@': 62}), 7: (1, {'@': 62}), 14: (1, {'@': 62}), 26: (1, {'@': 62}), 16: (1, {'@': 62}), 9: (1, {'@': 62}), 19: (1, {'@': 62}), 29: (1, {'@': 62})}, 264: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 17: (0, 1), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 70: (0, 16), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 36: (0, 21), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 265: {8: (0, 261)}, 266: {20: (1, {'@': 258}), 22: (1, {'@': 258}), 1: (1, {'@': 258}), 23: (1, {'@': 258}), 24: (1, {'@': 258}), 25: (1, {'@': 258}), 10: (1, {'@': 258}), 11: (1, {'@': 258}), 3: (1, {'@': 258}), 28: (1, {'@': 258}), 15: (1, {'@': 258}), 30: (1, {'@': 258}), 5: (1, {'@': 258}), 32: (1, {'@': 258}), 17: (1, {'@': 258}), 18: (1, {'@': 258}), 33: (1, {'@': 258}), 34: (1, {'@': 258}), 21: (1, {'@': 258}), 8: (1, {'@': 258}), 12: (1, {'@': 258}), 27: (1, {'@': 258}), 31: (1, {'@': 258}), 7: (1, {'@': 258}), 9: (1, {'@': 258}), 26: (1, {'@': 258}), 13: (1, {'@': 258}), 14: (1, {'@': 258}), 29: (1, {'@': 258}), 16: (1, {'@': 258}), 19: (1, {'@': 258})}, 267: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 98: (0, 520), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 36: (0, 513), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 268: {40: (0, 507), 28: (1, {'@': 111}), 20: (1, {'@': 111}), 15: (1, {'@': 111}), 22: (1, {'@': 111}), 30: (1, {'@': 111}), 1: (1, {'@': 111}), 23: (1, {'@': 111}), 5: (1, {'@': 111}), 24: (1, {'@': 111}), 25: (1, {'@': 111}), 32: (1, {'@': 111}), 10: (1, {'@': 111}), 11: (1, {'@': 111}), 17: (1, {'@': 111}), 18: (1, {'@': 111}), 3: (1, {'@': 111}), 33: (1, {'@': 111}), 34: (1, {'@': 111}), 21: (1, {'@': 111}), 8: (1, {'@': 111}), 12: (1, {'@': 111}), 27: (1, {'@': 111}), 31: (1, {'@': 111}), 7: (1, {'@': 111}), 9: (1, {'@': 111}), 26: (1, {'@': 111}), 13: (1, {'@': 111}), 14: (1, {'@': 111}), 29: (1, {'@': 111}), 16: (1, {'@': 111}), 19: (1, {'@': 111})}, 269: {20: (1, {'@': 223}), 22: (1, {'@': 223}), 1: (1, {'@': 223}), 23: (1, {'@': 223}), 24: (1, {'@': 223}), 25: (1, {'@': 223}), 10: (1, {'@': 223}), 11: (1, {'@': 223}), 3: (1, {'@': 223}), 28: (1, {'@': 223}), 15: (1, {'@': 223}), 30: (1, {'@': 223}), 5: (1, {'@': 223}), 32: (1, {'@': 223}), 17: (1, {'@': 223}), 18: (1, {'@': 223}), 33: (1, {'@': 223}), 34: (1, {'@': 223}), 21: (1, {'@': 223}), 8: (1, {'@': 223}), 12: (1, {'@': 223}), 27: (1, {'@': 223}), 31: (1, {'@': 223}), 7: (1, {'@': 223}), 9: (1, {'@': 223}), 26: (1, {'@': 223}), 13: (1, {'@': 223}), 14: (1, {'@': 223}), 29: (1, {'@': 223}), 16: (1, {'@': 223}), 19: (1, {'@': 223})}, 270: {69: (0, 514), 12: (0, 532), 31: (0, 524), 8: (0, 242), 70: (0, 258), 21: (0, 486)}, 271: {16: (0, 146)}, 272: {69: (0, 514), 12: (0, 532), 70: (0, 151), 31: (0, 524), 16: (0, 173), 21: (0, 486)}, 273: {8: (0, 245)}, 274: {83: (0, 35), 37: (0, 19), 70: (0, 72), 80: (0, 548), 69: (0, 514), 12: (0, 532), 82: (0, 537), 29: (0, 491), 81: (0, 518), 31: (0, 524), 21: (0, 486), 99: (0, 510), 19: (1, {'@': 48})}, 275: {20: (1, {'@': 221}), 22: (1, {'@': 221}), 1: (1, {'@': 221}), 23: (1, {'@': 221}), 24: (1, {'@': 221}), 25: (1, {'@': 221}), 10: (1, {'@': 221}), 11: (1, {'@': 221}), 3: (1, {'@': 221}), 28: (1, {'@': 221}), 15: (1, {'@': 221}), 30: (1, {'@': 221}), 5: (1, {'@': 221}), 32: (1, {'@': 221}), 17: (1, {'@': 221}), 18: (1, {'@': 221}), 33: (1, {'@': 221}), 34: (1, {'@': 221}), 21: (1, {'@': 221}), 8: (1, {'@': 221}), 12: (1, {'@': 221}), 27: (1, {'@': 221}), 31: (1, {'@': 221}), 7: (1, {'@': 221}), 9: (1, {'@': 221}), 26: (1, {'@': 221}), 13: (1, {'@': 221}), 14: (1, {'@': 221}), 29: (1, {'@': 221}), 16: (1, {'@': 221}), 19: (1, {'@': 221})}, 276: {69: (0, 514), 70: (0, 155), 12: (0, 532), 31: (0, 524), 16: (0, 158), 21: (0, 486)}, 277: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 36: (0, 506), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 278: {86: (0, 24), 27: (0, 282), 69: (0, 514), 12: (0, 532), 70: (0, 154), 31: (0, 524), 21: (0, 486)}, 279: {20: (1, {'@': 194}), 21: (1, {'@': 194}), 22: (1, {'@': 194}), 1: (1, {'@': 194}), 23: (1, {'@': 194}), 7: (1, {'@': 194}), 8: (1, {'@': 194}), 9: (1, {'@': 194}), 24: (1, {'@': 194}), 10: (1, {'@': 194}), 11: (1, {'@': 194}), 12: (1, {'@': 194}), 25: (1, {'@': 194}), 26: (1, {'@': 194}), 3: (1, {'@': 194}), 27: (1, {'@': 194}), 13: (1, {'@': 194}), 14: (1, {'@': 194}), 28: (1, {'@': 194}), 29: (1, {'@': 194}), 15: (1, {'@': 194}), 30: (1, {'@': 194}), 31: (1, {'@': 194}), 5: (1, {'@': 194}), 16: (1, {'@': 194}), 32: (1, {'@': 194}), 17: (1, {'@': 194}), 18: (1, {'@': 194}), 19: (1, {'@': 194}), 33: (1, {'@': 194}), 34: (1, {'@': 194})}, 280: {69: (0, 514), 9: (0, 147), 70: (0, 164), 79: (0, 165), 12: (0, 532), 16: (0, 170), 31: (0, 524), 21: (0, 486)}, 281: {20: (1, {'@': 241}), 22: (1, {'@': 241}), 1: (1, {'@': 241}), 23: (1, {'@': 241}), 24: (1, {'@': 241}), 25: (1, {'@': 241}), 10: (1, {'@': 241}), 11: (1, {'@': 241}), 3: (1, {'@': 241}), 28: (1, {'@': 241}), 15: (1, {'@': 241}), 30: (1, {'@': 241}), 5: (1, {'@': 241}), 32: (1, {'@': 241}), 17: (1, {'@': 241}), 18: (1, {'@': 241}), 33: (1, {'@': 241}), 34: (1, {'@': 241}), 21: (1, {'@': 241}), 8: (1, {'@': 241}), 12: (1, {'@': 241}), 27: (1, {'@': 241}), 31: (1, {'@': 241}), 7: (1, {'@': 241}), 9: (1, {'@': 241}), 26: (1, {'@': 241}), 13: (1, {'@': 241}), 14: (1, {'@': 241}), 29: (1, {'@': 241}), 16: (1, {'@': 241}), 19: (1, {'@': 241})}, 282: {37: (0, 103), 29: (0, 491)}, 283: {9: (0, 147), 26: (0, 294), 69: (0, 514), 12: (0, 532), 70: (0, 306), 16: (0, 314), 79: (0, 318), 31: (0, 524), 21: (0, 486)}, 284: {40: (0, 507), 7: (0, 301), 13: (0, 235), 22: (1, {'@': 111}), 1: (1, {'@': 111}), 23: (1, {'@': 111}), 24: (1, {'@': 111}), 25: (1, {'@': 111}), 10: (1, {'@': 111}), 11: (1, {'@': 111}), 3: (1, {'@': 111}), 28: (1, {'@': 111}), 15: (1, {'@': 111}), 30: (1, {'@': 111}), 5: (1, {'@': 111}), 32: (1, {'@': 111}), 17: (1, {'@': 111}), 18: (1, {'@': 111}), 33: (1, {'@': 111}), 34: (1, {'@': 111})}, 285: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 41: (0, 347), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 286: {20: (1, {'@': 255}), 22: (1, {'@': 255}), 1: (1, {'@': 255}), 23: (1, {'@': 255}), 24: (1, {'@': 255}), 25: (1, {'@': 255}), 10: (1, {'@': 255}), 11: (1, {'@': 255}), 3: (1, {'@': 255}), 28: (1, {'@': 255}), 15: (1, {'@': 255}), 30: (1, {'@': 255}), 5: (1, {'@': 255}), 32: (1, {'@': 255}), 17: (1, {'@': 255}), 18: (1, {'@': 255}), 33: (1, {'@': 255}), 34: (1, {'@': 255}), 21: (1, {'@': 255}), 8: (1, {'@': 255}), 12: (1, {'@': 255}), 27: (1, {'@': 255}), 31: (1, {'@': 255}), 7: (1, {'@': 255}), 9: (1, {'@': 255}), 26: (1, {'@': 255}), 13: (1, {'@': 255}), 14: (1, {'@': 255}), 29: (1, {'@': 255}), 16: (1, {'@': 255}), 19: (1, {'@': 255})}, 287: {69: (0, 514), 16: (0, 266), 12: (0, 532), 31: (0, 524), 70: (0, 271), 21: (0, 486)}, 288: {20: (1, {'@': 252}), 22: (1, {'@': 252}), 1: (1, {'@': 252}), 23: (1, {'@': 252}), 24: (1, {'@': 252}), 25: (1, {'@': 252}), 10: (1, {'@': 252}), 11: (1, {'@': 252}), 3: (1, {'@': 252}), 28: (1, {'@': 252}), 15: (1, {'@': 252}), 30: (1, {'@': 252}), 5: (1, {'@': 252}), 32: (1, {'@': 252}), 17: (1, {'@': 252}), 18: (1, {'@': 252}), 33: (1, {'@': 252}), 34: (1, {'@': 252}), 21: (1, {'@': 252}), 8: (1, {'@': 252}), 12: (1, {'@': 252}), 27: (1, {'@': 252}), 31: (1, {'@': 252}), 7: (1, {'@': 252}), 9: (1, {'@': 252}), 26: (1, {'@': 252}), 13: (1, {'@': 252}), 14: (1, {'@': 252}), 29: (1, {'@': 252}), 16: (1, {'@': 252}), 19: (1, {'@': 252})}, 289: {79: (0, 276), 9: (0, 147), 69: (0, 514), 12: (0, 532), 70: (0, 280), 16: (0, 288), 31: (0, 524), 21: (0, 486)}, 290: {20: (1, {'@': 256}), 22: (1, {'@': 256}), 1: (1, {'@': 256}), 23: (1, {'@': 256}), 24: (1, {'@': 256}), 25: (1, {'@': 256}), 10: (1, {'@': 256}), 11: (1, {'@': 256}), 3: (1, {'@': 256}), 28: (1, {'@': 256}), 15: (1, {'@': 256}), 30: (1, {'@': 256}), 5: (1, {'@': 256}), 32: (1, {'@': 256}), 17: (1, {'@': 256}), 18: (1, {'@': 256}), 33: (1, {'@': 256}), 34: (1, {'@': 256}), 21: (1, {'@': 256}), 8: (1, {'@': 256}), 12: (1, {'@': 256}), 27: (1, {'@': 256}), 31: (1, {'@': 256}), 7: (1, {'@': 256}), 9: (1, {'@': 256}), 26: (1, {'@': 256}), 13: (1, {'@': 256}), 14: (1, {'@': 256}), 29: (1, {'@': 256}), 16: (1, {'@': 256}), 19: (1, {'@': 256})}, 291: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 36: (0, 56), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 292: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 36: (0, 381), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 70: (0, 384), 68: (0, 109)}, 293: {69: (0, 514), 27: (0, 449), 12: (0, 532), 86: (0, 63), 70: (0, 66), 31: (0, 524), 21: (0, 486)}, 294: {9: (0, 147), 70: (0, 182), 69: (0, 514), 12: (0, 532), 16: (0, 330), 79: (0, 332), 31: (0, 524), 21: (0, 486)}, 295: {40: (1, {'@': 86}), 29: (1, {'@': 86}), 1: (1, {'@': 86}), 55: (1, {'@': 86}), 35: (1, {'@': 86}), 64: (1, {'@': 86}), 49: (1, {'@': 86}), 54: (1, {'@': 86})}, 296: {1: (1, {'@': 345}), 7: (1, {'@': 345}), 8: (1, {'@': 345}), 9: (1, {'@': 345}), 12: (1, {'@': 345}), 10: (1, {'@': 345}), 11: (1, {'@': 345}), 13: (1, {'@': 345}), 14: (1, {'@': 345}), 15: (1, {'@': 345}), 5: (1, {'@': 345}), 16: (1, {'@': 345}), 17: (1, {'@': 345}), 18: (1, {'@': 345}), 19: (1, {'@': 345}), 20: (1, {'@': 345}), 21: (1, {'@': 345}), 22: (1, {'@': 345}), 23: (1, {'@': 345}), 24: (1, {'@': 345}), 25: (1, {'@': 345}), 26: (1, {'@': 345}), 3: (1, {'@': 345}), 27: (1, {'@': 345}), 28: (1, {'@': 345}), 29: (1, {'@': 345}), 30: (1, {'@': 345}), 31: (1, {'@': 345}), 32: (1, {'@': 345}), 33: (1, {'@': 345}), 34: (1, {'@': 345})}, 297: {20: (1, {'@': 199}), 21: (1, {'@': 199}), 22: (1, {'@': 199}), 1: (1, {'@': 199}), 23: (1, {'@': 199}), 7: (1, {'@': 199}), 8: (1, {'@': 199}), 9: (1, {'@': 199}), 24: (1, {'@': 199}), 10: (1, {'@': 199}), 11: (1, {'@': 199}), 12: (1, {'@': 199}), 25: (1, {'@': 199}), 26: (1, {'@': 199}), 3: (1, {'@': 199}), 27: (1, {'@': 199}), 13: (1, {'@': 199}), 14: (1, {'@': 199}), 28: (1, {'@': 199}), 29: (1, {'@': 199}), 15: (1, {'@': 199}), 30: (1, {'@': 199}), 31: (1, {'@': 199}), 5: (1, {'@': 199}), 16: (1, {'@': 199}), 32: (1, {'@': 199}), 17: (1, {'@': 199}), 18: (1, {'@': 199}), 19: (1, {'@': 199}), 33: (1, {'@': 199}), 34: (1, {'@': 199})}, 298: {16: (1, {'@': 52}), 29: (1, {'@': 52}), 31: (1, {'@': 52}), 21: (1, {'@': 52}), 12: (1, {'@': 52}), 19: (1, {'@': 52})}, 299: {20: (1, {'@': 211}), 22: (1, {'@': 211}), 1: (1, {'@': 211}), 23: (1, {'@': 211}), 24: (1, {'@': 211}), 25: (1, {'@': 211}), 10: (1, {'@': 211}), 11: (1, {'@': 211}), 3: (1, {'@': 211}), 28: (1, {'@': 211}), 15: (1, {'@': 211}), 30: (1, {'@': 211}), 5: (1, {'@': 211}), 32: (1, {'@': 211}), 17: (1, {'@': 211}), 18: (1, {'@': 211}), 33: (1, {'@': 211}), 34: (1, {'@': 211}), 21: (1, {'@': 211}), 8: (1, {'@': 211}), 12: (1, {'@': 211}), 27: (1, {'@': 211}), 31: (1, {'@': 211}), 7: (1, {'@': 211}), 9: (1, {'@': 211}), 26: (1, {'@': 211}), 13: (1, {'@': 211}), 14: (1, {'@': 211}), 29: (1, {'@': 211}), 16: (1, {'@': 211}), 19: (1, {'@': 211})}, 300: {20: (1, {'@': 230}), 22: (1, {'@': 230}), 1: (1, {'@': 230}), 23: (1, {'@': 230}), 24: (1, {'@': 230}), 25: (1, {'@': 230}), 10: (1, {'@': 230}), 11: (1, {'@': 230}), 3: (1, {'@': 230}), 28: (1, {'@': 230}), 15: (1, {'@': 230}), 30: (1, {'@': 230}), 5: (1, {'@': 230}), 32: (1, {'@': 230}), 17: (1, {'@': 230}), 18: (1, {'@': 230}), 33: (1, {'@': 230}), 34: (1, {'@': 230}), 21: (1, {'@': 230}), 8: (1, {'@': 230}), 12: (1, {'@': 230}), 27: (1, {'@': 230}), 31: (1, {'@': 230}), 7: (1, {'@': 230}), 9: (1, {'@': 230}), 26: (1, {'@': 230}), 13: (1, {'@': 230}), 14: (1, {'@': 230}), 29: (1, {'@': 230}), 16: (1, {'@': 230}), 19: (1, {'@': 230})}, 301: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 36: (0, 149), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 302: {69: (0, 514), 16: (0, 58), 27: (0, 324), 12: (0, 532), 96: (0, 22), 31: (0, 524), 70: (0, 64), 21: (0, 486)}, 303: {69: (0, 514), 9: (0, 147), 70: (0, 223), 12: (0, 532), 31: (0, 524), 21: (0, 486), 79: (0, 272), 16: (0, 290)}, 304: {1: (1, {'@': 344}), 7: (1, {'@': 344}), 8: (1, {'@': 344}), 9: (1, {'@': 344}), 12: (1, {'@': 344}), 10: (1, {'@': 344}), 11: (1, {'@': 344}), 13: (1, {'@': 344}), 14: (1, {'@': 344}), 15: (1, {'@': 344}), 5: (1, {'@': 344}), 16: (1, {'@': 344}), 17: (1, {'@': 344}), 18: (1, {'@': 344}), 19: (1, {'@': 344}), 20: (1, {'@': 344}), 21: (1, {'@': 344}), 22: (1, {'@': 344}), 23: (1, {'@': 344}), 24: (1, {'@': 344}), 25: (1, {'@': 344}), 26: (1, {'@': 344}), 3: (1, {'@': 344}), 27: (1, {'@': 344}), 28: (1, {'@': 344}), 29: (1, {'@': 344}), 30: (1, {'@': 344}), 31: (1, {'@': 344}), 32: (1, {'@': 344}), 33: (1, {'@': 344}), 34: (1, {'@': 344})}, 305: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 36: (0, 215), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 306: {79: (0, 372), 69: (0, 514), 9: (0, 147), 12: (0, 532), 70: (0, 160), 16: (0, 334), 31: (0, 524), 21: (0, 486)}, 307: {69: (0, 514), 70: (0, 380), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 291}), 40: (1, {'@': 291}), 29: (1, {'@': 291}), 1: (1, {'@': 291}), 62: (1, {'@': 291}), 55: (1, {'@': 291}), 35: (1, {'@': 291}), 64: (1, {'@': 291}), 49: (1, {'@': 291}), 54: (1, {'@': 291})}, 308: {40: (1, {'@': 98}), 29: (1, {'@': 98}), 1: (1, {'@': 98}), 55: (1, {'@': 98}), 35: (1, {'@': 98}), 64: (1, {'@': 98}), 49: (1, {'@': 98}), 54: (1, {'@': 98})}, 309: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 36: (0, 452), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 310: {20: (1, {'@': 259}), 22: (1, {'@': 259}), 1: (1, {'@': 259}), 23: (1, {'@': 259}), 24: (1, {'@': 259}), 25: (1, {'@': 259}), 10: (1, {'@': 259}), 11: (1, {'@': 259}), 3: (1, {'@': 259}), 28: (1, {'@': 259}), 15: (1, {'@': 259}), 30: (1, {'@': 259}), 5: (1, {'@': 259}), 32: (1, {'@': 259}), 17: (1, {'@': 259}), 18: (1, {'@': 259}), 33: (1, {'@': 259}), 34: (1, {'@': 259}), 21: (1, {'@': 259}), 8: (1, {'@': 259}), 12: (1, {'@': 259}), 27: (1, {'@': 259}), 31: (1, {'@': 259}), 7: (1, {'@': 259}), 9: (1, {'@': 259}), 26: (1, {'@': 259}), 13: (1, {'@': 259}), 14: (1, {'@': 259}), 29: (1, {'@': 259}), 16: (1, {'@': 259}), 19: (1, {'@': 259})}, 311: {1: (0, 540), 35: (0, 174), 36: (0, 283), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 312: {1: (0, 540), 35: (0, 174), 37: (0, 284), 38: (0, 241), 39: (0, 325), 40: (0, 475), 36: (0, 42), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 16: (0, 466), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 77: (0, 467), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 313: {70: (0, 117), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 295}), 40: (1, {'@': 295}), 29: (1, {'@': 295}), 1: (1, {'@': 295}), 62: (1, {'@': 295}), 55: (1, {'@': 295}), 35: (1, {'@': 295}), 64: (1, {'@': 295}), 49: (1, {'@': 295}), 54: (1, {'@': 295})}, 314: {20: (1, {'@': 245}), 22: (1, {'@': 245}), 1: (1, {'@': 245}), 23: (1, {'@': 245}), 24: (1, {'@': 245}), 25: (1, {'@': 245}), 10: (1, {'@': 245}), 11: (1, {'@': 245}), 3: (1, {'@': 245}), 28: (1, {'@': 245}), 15: (1, {'@': 245}), 30: (1, {'@': 245}), 5: (1, {'@': 245}), 32: (1, {'@': 245}), 17: (1, {'@': 245}), 18: (1, {'@': 245}), 33: (1, {'@': 245}), 34: (1, {'@': 245}), 21: (1, {'@': 245}), 8: (1, {'@': 245}), 12: (1, {'@': 245}), 27: (1, {'@': 245}), 31: (1, {'@': 245}), 7: (1, {'@': 245}), 9: (1, {'@': 245}), 26: (1, {'@': 245}), 13: (1, {'@': 245}), 14: (1, {'@': 245}), 29: (1, {'@': 245}), 16: (1, {'@': 245}), 19: (1, {'@': 245})}, 315: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 36: (0, 453), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 316: {20: (1, {'@': 126}), 22: (1, {'@': 126}), 1: (1, {'@': 126}), 23: (1, {'@': 126}), 24: (1, {'@': 126}), 25: (1, {'@': 126}), 10: (1, {'@': 126}), 11: (1, {'@': 126}), 3: (1, {'@': 126}), 28: (1, {'@': 126}), 15: (1, {'@': 126}), 30: (1, {'@': 126}), 5: (1, {'@': 126}), 32: (1, {'@': 126}), 17: (1, {'@': 126}), 18: (1, {'@': 126}), 33: (1, {'@': 126}), 34: (1, {'@': 126}), 21: (1, {'@': 126}), 8: (1, {'@': 126}), 12: (1, {'@': 126}), 27: (1, {'@': 126}), 31: (1, {'@': 126}), 7: (1, {'@': 126}), 9: (1, {'@': 126}), 26: (1, {'@': 126}), 13: (1, {'@': 126}), 14: (1, {'@': 126}), 29: (1, {'@': 126}), 16: (1, {'@': 126}), 19: (1, {'@': 126})}, 317: {69: (0, 514), 14: (0, 113), 70: (0, 161), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 318: {69: (0, 514), 16: (0, 321), 12: (0, 532), 70: (0, 328), 31: (0, 524), 21: (0, 486)}, 319: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 70: (0, 67), 21: (0, 486), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 41: (0, 75), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 320: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 187), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109), 31: (1, {'@': 177}), 21: (1, {'@': 177}), 12: (1, {'@': 177}), 14: (1, {'@': 177})}, 321: {20: (1, {'@': 244}), 22: (1, {'@': 244}), 1: (1, {'@': 244}), 23: (1, {'@': 244}), 24: (1, {'@': 244}), 25: (1, {'@': 244}), 10: (1, {'@': 244}), 11: (1, {'@': 244}), 3: (1, {'@': 244}), 28: (1, {'@': 244}), 15: (1, {'@': 244}), 30: (1, {'@': 244}), 5: (1, {'@': 244}), 32: (1, {'@': 244}), 17: (1, {'@': 244}), 18: (1, {'@': 244}), 33: (1, {'@': 244}), 34: (1, {'@': 244}), 21: (1, {'@': 244}), 8: (1, {'@': 244}), 12: (1, {'@': 244}), 27: (1, {'@': 244}), 31: (1, {'@': 244}), 7: (1, {'@': 244}), 9: (1, {'@': 244}), 26: (1, {'@': 244}), 13: (1, {'@': 244}), 14: (1, {'@': 244}), 29: (1, {'@': 244}), 16: (1, {'@': 244}), 19: (1, {'@': 244})}, 322: {20: (1, {'@': 192}), 22: (1, {'@': 192}), 1: (1, {'@': 192}), 23: (1, {'@': 192}), 24: (1, {'@': 192}), 25: (1, {'@': 192}), 10: (1, {'@': 192}), 11: (1, {'@': 192}), 3: (1, {'@': 192}), 28: (1, {'@': 192}), 15: (1, {'@': 192}), 30: (1, {'@': 192}), 5: (1, {'@': 192}), 32: (1, {'@': 192}), 17: (1, {'@': 192}), 18: (1, {'@': 192}), 33: (1, {'@': 192}), 34: (1, {'@': 192}), 21: (1, {'@': 192}), 8: (1, {'@': 192}), 12: (1, {'@': 192}), 27: (1, {'@': 192}), 31: (1, {'@': 192}), 7: (1, {'@': 192}), 9: (1, {'@': 192}), 26: (1, {'@': 192}), 13: (1, {'@': 192}), 14: (1, {'@': 192}), 29: (1, {'@': 192}), 16: (1, {'@': 192}), 19: (1, {'@': 192})}, 323: {1: (0, 540), 35: (0, 174), 12: (0, 532), 36: (0, 41), 37: (0, 268), 38: (0, 241), 69: (0, 514), 70: (0, 450), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 324: {69: (0, 514), 70: (0, 17), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 56}), 40: (1, {'@': 56}), 29: (1, {'@': 56}), 1: (1, {'@': 56}), 62: (1, {'@': 56}), 55: (1, {'@': 56}), 35: (1, {'@': 56}), 16: (1, {'@': 56}), 64: (1, {'@': 56}), 49: (1, {'@': 56}), 54: (1, {'@': 56})}, 325: {100: (0, 259), 1: (0, 264), 2: (0, 376), 3: (0, 358), 4: (0, 335), 5: (0, 337), 0: (0, 402), 17: (0, 398), 32: (0, 400), 34: (0, 391), 97: (0, 378), 6: (0, 322), 28: (1, {'@': 85}), 20: (1, {'@': 85}), 15: (1, {'@': 85}), 22: (1, {'@': 85}), 30: (1, {'@': 85}), 23: (1, {'@': 85}), 24: (1, {'@': 85}), 25: (1, {'@': 85}), 10: (1, {'@': 85}), 11: (1, {'@': 85}), 18: (1, {'@': 85}), 33: (1, {'@': 85}), 21: (1, {'@': 85}), 8: (1, {'@': 85}), 12: (1, {'@': 85}), 27: (1, {'@': 85}), 31: (1, {'@': 85}), 7: (1, {'@': 85}), 9: (1, {'@': 85}), 26: (1, {'@': 85}), 13: (1, {'@': 85}), 14: (1, {'@': 85}), 29: (1, {'@': 85}), 16: (1, {'@': 85}), 19: (1, {'@': 85})}, 326: {20: (1, {'@': 65}), 8: (1, {'@': 65}), 21: (1, {'@': 65}), 12: (1, {'@': 65}), 31: (1, {'@': 65}), 27: (1, {'@': 65}), 13: (1, {'@': 65}), 7: (1, {'@': 65}), 14: (1, {'@': 65}), 26: (1, {'@': 65}), 16: (1, {'@': 65}), 9: (1, {'@': 65}), 19: (1, {'@': 65}), 29: (1, {'@': 65})}, 327: {20: (1, {'@': 224}), 22: (1, {'@': 224}), 1: (1, {'@': 224}), 23: (1, {'@': 224}), 24: (1, {'@': 224}), 25: (1, {'@': 224}), 10: (1, {'@': 224}), 11: (1, {'@': 224}), 3: (1, {'@': 224}), 28: (1, {'@': 224}), 15: (1, {'@': 224}), 30: (1, {'@': 224}), 5: (1, {'@': 224}), 32: (1, {'@': 224}), 17: (1, {'@': 224}), 18: (1, {'@': 224}), 33: (1, {'@': 224}), 34: (1, {'@': 224}), 21: (1, {'@': 224}), 8: (1, {'@': 224}), 12: (1, {'@': 224}), 27: (1, {'@': 224}), 31: (1, {'@': 224}), 7: (1, {'@': 224}), 9: (1, {'@': 224}), 26: (1, {'@': 224}), 13: (1, {'@': 224}), 14: (1, {'@': 224}), 29: (1, {'@': 224}), 16: (1, {'@': 224}), 19: (1, {'@': 224})}, 328: {16: (0, 410)}, 329: {69: (0, 514), 70: (0, 265), 12: (0, 532), 31: (0, 524), 8: (0, 269), 21: (0, 486)}, 330: {20: (1, {'@': 238}), 22: (1, {'@': 238}), 1: (1, {'@': 238}), 23: (1, {'@': 238}), 24: (1, {'@': 238}), 25: (1, {'@': 238}), 10: (1, {'@': 238}), 11: (1, {'@': 238}), 3: (1, {'@': 238}), 28: (1, {'@': 238}), 15: (1, {'@': 238}), 30: (1, {'@': 238}), 5: (1, {'@': 238}), 32: (1, {'@': 238}), 17: (1, {'@': 238}), 18: (1, {'@': 238}), 33: (1, {'@': 238}), 34: (1, {'@': 238}), 21: (1, {'@': 238}), 8: (1, {'@': 238}), 12: (1, {'@': 238}), 27: (1, {'@': 238}), 31: (1, {'@': 238}), 7: (1, {'@': 238}), 9: (1, {'@': 238}), 26: (1, {'@': 238}), 13: (1, {'@': 238}), 14: (1, {'@': 238}), 29: (1, {'@': 238}), 16: (1, {'@': 238}), 19: (1, {'@': 238})}, 331: {9: (0, 147), 79: (0, 287), 26: (0, 289), 69: (0, 514), 12: (0, 532), 70: (0, 303), 21: (0, 486), 31: (0, 524), 16: (0, 310)}, 332: {69: (0, 514), 70: (0, 396), 12: (0, 532), 31: (0, 524), 16: (0, 393), 21: (0, 486)}, 333: {69: (0, 514), 70: (0, 415), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 287}), 40: (1, {'@': 287}), 29: (1, {'@': 287}), 1: (1, {'@': 287}), 62: (1, {'@': 287}), 55: (1, {'@': 287}), 35: (1, {'@': 287}), 64: (1, {'@': 287}), 49: (1, {'@': 287}), 54: (1, {'@': 287})}, 334: {20: (1, {'@': 242}), 22: (1, {'@': 242}), 1: (1, {'@': 242}), 23: (1, {'@': 242}), 24: (1, {'@': 242}), 25: (1, {'@': 242}), 10: (1, {'@': 242}), 11: (1, {'@': 242}), 3: (1, {'@': 242}), 28: (1, {'@': 242}), 15: (1, {'@': 242}), 30: (1, {'@': 242}), 5: (1, {'@': 242}), 32: (1, {'@': 242}), 17: (1, {'@': 242}), 18: (1, {'@': 242}), 33: (1, {'@': 242}), 34: (1, {'@': 242}), 21: (1, {'@': 242}), 8: (1, {'@': 242}), 12: (1, {'@': 242}), 27: (1, {'@': 242}), 31: (1, {'@': 242}), 7: (1, {'@': 242}), 9: (1, {'@': 242}), 26: (1, {'@': 242}), 13: (1, {'@': 242}), 14: (1, {'@': 242}), 29: (1, {'@': 242}), 16: (1, {'@': 242}), 19: (1, {'@': 242})}, 335: {20: (1, {'@': 191}), 22: (1, {'@': 191}), 1: (1, {'@': 191}), 23: (1, {'@': 191}), 24: (1, {'@': 191}), 25: (1, {'@': 191}), 10: (1, {'@': 191}), 11: (1, {'@': 191}), 3: (1, {'@': 191}), 28: (1, {'@': 191}), 15: (1, {'@': 191}), 30: (1, {'@': 191}), 5: (1, {'@': 191}), 32: (1, {'@': 191}), 17: (1, {'@': 191}), 18: (1, {'@': 191}), 33: (1, {'@': 191}), 34: (1, {'@': 191}), 21: (1, {'@': 191}), 8: (1, {'@': 191}), 12: (1, {'@': 191}), 27: (1, {'@': 191}), 31: (1, {'@': 191}), 7: (1, {'@': 191}), 9: (1, {'@': 191}), 26: (1, {'@': 191}), 13: (1, {'@': 191}), 14: (1, {'@': 191}), 29: (1, {'@': 191}), 16: (1, {'@': 191}), 19: (1, {'@': 191})}, 336: {20: (1, {'@': 171}), 22: (1, {'@': 171}), 1: (1, {'@': 171}), 23: (1, {'@': 171}), 24: (1, {'@': 171}), 25: (1, {'@': 171}), 10: (1, {'@': 171}), 11: (1, {'@': 171}), 3: (1, {'@': 171}), 28: (1, {'@': 171}), 15: (1, {'@': 171}), 30: (1, {'@': 171}), 5: (1, {'@': 171}), 32: (1, {'@': 171}), 17: (1, {'@': 171}), 18: (1, {'@': 171}), 33: (1, {'@': 171}), 34: (1, {'@': 171}), 21: (1, {'@': 171}), 8: (1, {'@': 171}), 12: (1, {'@': 171}), 27: (1, {'@': 171}), 31: (1, {'@': 171}), 7: (1, {'@': 171}), 9: (1, {'@': 171}), 26: (1, {'@': 171}), 13: (1, {'@': 171}), 14: (1, {'@': 171}), 29: (1, {'@': 171}), 16: (1, {'@': 171}), 19: (1, {'@': 171})}, 337: {37: (0, 297), 51: (0, 36), 29: (0, 491), 64: (0, 511), 56: (0, 11)}, 338: {28: (1, {'@': 274}), 40: (1, {'@': 274}), 29: (1, {'@': 274}), 1: (1, {'@': 274}), 62: (1, {'@': 274}), 55: (1, {'@': 274}), 35: (1, {'@': 274}), 64: (1, {'@': 274}), 49: (1, {'@': 274}), 54: (1, {'@': 274}), 21: (1, {'@': 274}), 31: (1, {'@': 274}), 12: (1, {'@': 274})}, 339: {16: (0, 188)}, 340: {21: (1, {'@': 339}), 31: (1, {'@': 339}), 16: (1, {'@': 339}), 12: (1, {'@': 339}), 27: (1, {'@': 339})}, 341: {70: (0, 417), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 273}), 40: (1, {'@': 273}), 29: (1, {'@': 273}), 1: (1, {'@': 273}), 62: (1, {'@': 273}), 55: (1, {'@': 273}), 35: (1, {'@': 273}), 64: (1, {'@': 273}), 49: (1, {'@': 273}), 54: (1, {'@': 273})}, 342: {20: (1, {'@': 158}), 22: (1, {'@': 158}), 1: (1, {'@': 158}), 23: (1, {'@': 158}), 24: (1, {'@': 158}), 25: (1, {'@': 158}), 10: (1, {'@': 158}), 11: (1, {'@': 158}), 3: (1, {'@': 158}), 28: (1, {'@': 158}), 15: (1, {'@': 158}), 30: (1, {'@': 158}), 5: (1, {'@': 158}), 32: (1, {'@': 158}), 17: (1, {'@': 158}), 18: (1, {'@': 158}), 33: (1, {'@': 158}), 34: (1, {'@': 158}), 21: (1, {'@': 158}), 8: (1, {'@': 158}), 12: (1, {'@': 158}), 27: (1, {'@': 158}), 31: (1, {'@': 158}), 7: (1, {'@': 158}), 9: (1, {'@': 158}), 26: (1, {'@': 158}), 13: (1, {'@': 158}), 14: (1, {'@': 158}), 29: (1, {'@': 158}), 16: (1, {'@': 158}), 19: (1, {'@': 158})}, 343: {20: (1, {'@': 159}), 22: (1, {'@': 159}), 1: (1, {'@': 159}), 23: (1, {'@': 159}), 24: (1, {'@': 159}), 25: (1, {'@': 159}), 10: (1, {'@': 159}), 11: (1, {'@': 159}), 3: (1, {'@': 159}), 28: (1, {'@': 159}), 15: (1, {'@': 159}), 30: (1, {'@': 159}), 5: (1, {'@': 159}), 32: (1, {'@': 159}), 17: (1, {'@': 159}), 18: (1, {'@': 159}), 33: (1, {'@': 159}), 34: (1, {'@': 159}), 21: (1, {'@': 159}), 8: (1, {'@': 159}), 12: (1, {'@': 159}), 27: (1, {'@': 159}), 31: (1, {'@': 159}), 7: (1, {'@': 159}), 9: (1, {'@': 159}), 26: (1, {'@': 159}), 13: (1, {'@': 159}), 14: (1, {'@': 159}), 29: (1, {'@': 159}), 16: (1, {'@': 159}), 19: (1, {'@': 159})}, 344: {64: (0, 511), 51: (0, 60)}, 345: {28: (1, {'@': 276}), 40: (1, {'@': 276}), 29: (1, {'@': 276}), 1: (1, {'@': 276}), 62: (1, {'@': 276}), 55: (1, {'@': 276}), 35: (1, {'@': 276}), 64: (1, {'@': 276}), 49: (1, {'@': 276}), 54: (1, {'@': 276}), 21: (1, {'@': 276}), 31: (1, {'@': 276}), 12: (1, {'@': 276})}, 346: {69: (0, 514), 70: (0, 192), 12: (0, 532), 31: (0, 524), 21: (0, 486), 14: (1, {'@': 180})}, 347: {20: (1, {'@': 61}), 8: (1, {'@': 61}), 21: (1, {'@': 61}), 12: (1, {'@': 61}), 31: (1, {'@': 61}), 27: (1, {'@': 61}), 13: (1, {'@': 61}), 7: (1, {'@': 61}), 14: (1, {'@': 61}), 26: (1, {'@': 61}), 16: (1, {'@': 61}), 9: (1, {'@': 61}), 19: (1, {'@': 61}), 29: (1, {'@': 61})}, 348: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 97), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 70: (0, 320), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109), 14: (1, {'@': 178})}, 349: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 36: (0, 32), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109), 31: (1, {'@': 183}), 21: (1, {'@': 183}), 12: (1, {'@': 183}), 14: (1, {'@': 183})}, 350: {20: (1, {'@': 140}), 22: (1, {'@': 140}), 1: (1, {'@': 140}), 23: (1, {'@': 140}), 24: (1, {'@': 140}), 25: (1, {'@': 140}), 10: (1, {'@': 140}), 11: (1, {'@': 140}), 3: (1, {'@': 140}), 28: (1, {'@': 140}), 15: (1, {'@': 140}), 30: (1, {'@': 140}), 5: (1, {'@': 140}), 32: (1, {'@': 140}), 17: (1, {'@': 140}), 18: (1, {'@': 140}), 33: (1, {'@': 140}), 34: (1, {'@': 140}), 21: (1, {'@': 140}), 8: (1, {'@': 140}), 12: (1, {'@': 140}), 27: (1, {'@': 140}), 31: (1, {'@': 140}), 7: (1, {'@': 140}), 9: (1, {'@': 140}), 26: (1, {'@': 140}), 13: (1, {'@': 140}), 14: (1, {'@': 140}), 29: (1, {'@': 140}), 16: (1, {'@': 140}), 19: (1, {'@': 140})}, 351: {69: (0, 514), 27: (0, 324), 12: (0, 532), 96: (0, 256), 31: (0, 524), 16: (0, 179), 70: (0, 64), 21: (0, 486)}, 352: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 70: (0, 478), 41: (0, 497), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 353: {7: (0, 413)}, 354: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 36: (0, 420), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 355: {69: (0, 514), 12: (0, 532), 70: (0, 438), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 269}), 40: (1, {'@': 269}), 29: (1, {'@': 269}), 1: (1, {'@': 269}), 62: (1, {'@': 269}), 55: (1, {'@': 269}), 35: (1, {'@': 269}), 64: (1, {'@': 269}), 49: (1, {'@': 269}), 54: (1, {'@': 269})}, 356: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 42: (0, 28), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 357: {20: (1, {'@': 174}), 22: (1, {'@': 174}), 1: (1, {'@': 174}), 23: (1, {'@': 174}), 24: (1, {'@': 174}), 25: (1, {'@': 174}), 10: (1, {'@': 174}), 11: (1, {'@': 174}), 3: (1, {'@': 174}), 28: (1, {'@': 174}), 15: (1, {'@': 174}), 30: (1, {'@': 174}), 5: (1, {'@': 174}), 32: (1, {'@': 174}), 17: (1, {'@': 174}), 18: (1, {'@': 174}), 33: (1, {'@': 174}), 34: (1, {'@': 174}), 21: (1, {'@': 174}), 8: (1, {'@': 174}), 12: (1, {'@': 174}), 27: (1, {'@': 174}), 31: (1, {'@': 174}), 7: (1, {'@': 174}), 9: (1, {'@': 174}), 26: (1, {'@': 174}), 13: (1, {'@': 174}), 14: (1, {'@': 174}), 29: (1, {'@': 174}), 16: (1, {'@': 174}), 19: (1, {'@': 174})}, 358: {4: (0, 535), 101: (0, 541), 5: (0, 153), 20: (1, {'@': 201}), 21: (1, {'@': 201}), 22: (1, {'@': 201}), 1: (1, {'@': 201}), 23: (1, {'@': 201}), 7: (1, {'@': 201}), 8: (1, {'@': 201}), 9: (1, {'@': 201}), 24: (1, {'@': 201}), 10: (1, {'@': 201}), 11: (1, {'@': 201}), 12: (1, {'@': 201}), 25: (1, {'@': 201}), 26: (1, {'@': 201}), 3: (1, {'@': 201}), 27: (1, {'@': 201}), 13: (1, {'@': 201}), 14: (1, {'@': 201}), 28: (1, {'@': 201}), 29: (1, {'@': 201}), 15: (1, {'@': 201}), 30: (1, {'@': 201}), 31: (1, {'@': 201}), 16: (1, {'@': 201}), 32: (1, {'@': 201}), 17: (1, {'@': 201}), 18: (1, {'@': 201}), 19: (1, {'@': 201}), 33: (1, {'@': 201}), 34: (1, {'@': 201})}, 359: {27: (0, 140), 71: (0, 521), 8: (0, 246), 70: (0, 252), 69: (0, 514), 12: (0, 532), 21: (0, 486), 31: (0, 524)}, 360: {28: (1, {'@': 99}), 20: (1, {'@': 99}), 15: (1, {'@': 99}), 22: (1, {'@': 99}), 30: (1, {'@': 99}), 1: (1, {'@': 99}), 23: (1, {'@': 99}), 5: (1, {'@': 99}), 24: (1, {'@': 99}), 25: (1, {'@': 99}), 32: (1, {'@': 99}), 10: (1, {'@': 99}), 11: (1, {'@': 99}), 17: (1, {'@': 99}), 18: (1, {'@': 99}), 3: (1, {'@': 99}), 33: (1, {'@': 99}), 34: (1, {'@': 99}), 21: (1, {'@': 99}), 8: (1, {'@': 99}), 12: (1, {'@': 99}), 27: (1, {'@': 99}), 31: (1, {'@': 99}), 7: (1, {'@': 99}), 9: (1, {'@': 99}), 26: (1, {'@': 99}), 13: (1, {'@': 99}), 14: (1, {'@': 99}), 29: (1, {'@': 99}), 16: (1, {'@': 99}), 19: (1, {'@': 99})}, 361: {7: (0, 355)}, 362: {20: (1, {'@': 162}), 22: (1, {'@': 162}), 1: (1, {'@': 162}), 23: (1, {'@': 162}), 24: (1, {'@': 162}), 25: (1, {'@': 162}), 10: (1, {'@': 162}), 11: (1, {'@': 162}), 3: (1, {'@': 162}), 28: (1, {'@': 162}), 15: (1, {'@': 162}), 30: (1, {'@': 162}), 5: (1, {'@': 162}), 32: (1, {'@': 162}), 17: (1, {'@': 162}), 18: (1, {'@': 162}), 33: (1, {'@': 162}), 34: (1, {'@': 162}), 21: (1, {'@': 162}), 8: (1, {'@': 162}), 12: (1, {'@': 162}), 27: (1, {'@': 162}), 31: (1, {'@': 162}), 7: (1, {'@': 162}), 9: (1, {'@': 162}), 26: (1, {'@': 162}), 13: (1, {'@': 162}), 14: (1, {'@': 162}), 29: (1, {'@': 162}), 16: (1, {'@': 162}), 19: (1, {'@': 162})}, 363: {36: (0, 549), 1: (0, 540), 87: (0, 53), 35: (0, 174), 37: (0, 268), 38: (0, 241), 88: (0, 323), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 8: (0, 14), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 364: {1: (0, 370), 2: (0, 296), 4: (0, 304), 5: (0, 337), 20: (1, {'@': 202}), 21: (1, {'@': 202}), 22: (1, {'@': 202}), 23: (1, {'@': 202}), 7: (1, {'@': 202}), 8: (1, {'@': 202}), 9: (1, {'@': 202}), 24: (1, {'@': 202}), 10: (1, {'@': 202}), 11: (1, {'@': 202}), 12: (1, {'@': 202}), 25: (1, {'@': 202}), 26: (1, {'@': 202}), 3: (1, {'@': 202}), 27: (1, {'@': 202}), 13: (1, {'@': 202}), 14: (1, {'@': 202}), 28: (1, {'@': 202}), 29: (1, {'@': 202}), 15: (1, {'@': 202}), 30: (1, {'@': 202}), 31: (1, {'@': 202}), 16: (1, {'@': 202}), 32: (1, {'@': 202}), 17: (1, {'@': 202}), 18: (1, {'@': 202}), 19: (1, {'@': 202}), 33: (1, {'@': 202}), 34: (1, {'@': 202})}, 365: {28: (1, {'@': 292}), 40: (1, {'@': 292}), 29: (1, {'@': 292}), 1: (1, {'@': 292}), 62: (1, {'@': 292}), 55: (1, {'@': 292}), 35: (1, {'@': 292}), 64: (1, {'@': 292}), 49: (1, {'@': 292}), 54: (1, {'@': 292}), 21: (1, {'@': 292}), 31: (1, {'@': 292}), 12: (1, {'@': 292})}, 366: {20: (1, {'@': 227}), 22: (1, {'@': 227}), 1: (1, {'@': 227}), 23: (1, {'@': 227}), 24: (1, {'@': 227}), 25: (1, {'@': 227}), 10: (1, {'@': 227}), 11: (1, {'@': 227}), 3: (1, {'@': 227}), 28: (1, {'@': 227}), 15: (1, {'@': 227}), 30: (1, {'@': 227}), 5: (1, {'@': 227}), 32: (1, {'@': 227}), 17: (1, {'@': 227}), 18: (1, {'@': 227}), 33: (1, {'@': 227}), 34: (1, {'@': 227}), 21: (1, {'@': 227}), 8: (1, {'@': 227}), 12: (1, {'@': 227}), 27: (1, {'@': 227}), 31: (1, {'@': 227}), 7: (1, {'@': 227}), 9: (1, {'@': 227}), 26: (1, {'@': 227}), 13: (1, {'@': 227}), 14: (1, {'@': 227}), 29: (1, {'@': 227}), 16: (1, {'@': 227}), 19: (1, {'@': 227})}, 367: {20: (1, {'@': 248}), 22: (1, {'@': 248}), 1: (1, {'@': 248}), 23: (1, {'@': 248}), 24: (1, {'@': 248}), 25: (1, {'@': 248}), 10: (1, {'@': 248}), 11: (1, {'@': 248}), 3: (1, {'@': 248}), 28: (1, {'@': 248}), 15: (1, {'@': 248}), 30: (1, {'@': 248}), 5: (1, {'@': 248}), 32: (1, {'@': 248}), 17: (1, {'@': 248}), 18: (1, {'@': 248}), 33: (1, {'@': 248}), 34: (1, {'@': 248}), 21: (1, {'@': 248}), 8: (1, {'@': 248}), 12: (1, {'@': 248}), 27: (1, {'@': 248}), 31: (1, {'@': 248}), 7: (1, {'@': 248}), 9: (1, {'@': 248}), 26: (1, {'@': 248}), 13: (1, {'@': 248}), 14: (1, {'@': 248}), 29: (1, {'@': 248}), 16: (1, {'@': 248}), 19: (1, {'@': 248})}, 368: {70: (0, 377), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 299}), 40: (1, {'@': 299}), 29: (1, {'@': 299}), 1: (1, {'@': 299}), 62: (1, {'@': 299}), 55: (1, {'@': 299}), 35: (1, {'@': 299}), 64: (1, {'@': 299}), 49: (1, {'@': 299}), 54: (1, {'@': 299})}, 369: {20: (0, 156)}, 370: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 70: (0, 16), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 36: (0, 21), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 371: {16: (0, 100)}, 372: {69: (0, 514), 70: (0, 407), 12: (0, 532), 16: (0, 409), 31: (0, 524), 21: (0, 486)}, 373: {20: (1, {'@': 253}), 22: (1, {'@': 253}), 1: (1, {'@': 253}), 23: (1, {'@': 253}), 24: (1, {'@': 253}), 25: (1, {'@': 253}), 10: (1, {'@': 253}), 11: (1, {'@': 253}), 3: (1, {'@': 253}), 28: (1, {'@': 253}), 15: (1, {'@': 253}), 30: (1, {'@': 253}), 5: (1, {'@': 253}), 32: (1, {'@': 253}), 17: (1, {'@': 253}), 18: (1, {'@': 253}), 33: (1, {'@': 253}), 34: (1, {'@': 253}), 21: (1, {'@': 253}), 8: (1, {'@': 253}), 12: (1, {'@': 253}), 27: (1, {'@': 253}), 31: (1, {'@': 253}), 7: (1, {'@': 253}), 9: (1, {'@': 253}), 26: (1, {'@': 253}), 13: (1, {'@': 253}), 14: (1, {'@': 253}), 29: (1, {'@': 253}), 16: (1, {'@': 253}), 19: (1, {'@': 253})}, 374: {20: (1, {'@': 250}), 22: (1, {'@': 250}), 1: (1, {'@': 250}), 23: (1, {'@': 250}), 24: (1, {'@': 250}), 25: (1, {'@': 250}), 10: (1, {'@': 250}), 11: (1, {'@': 250}), 3: (1, {'@': 250}), 28: (1, {'@': 250}), 15: (1, {'@': 250}), 30: (1, {'@': 250}), 5: (1, {'@': 250}), 32: (1, {'@': 250}), 17: (1, {'@': 250}), 18: (1, {'@': 250}), 33: (1, {'@': 250}), 34: (1, {'@': 250}), 21: (1, {'@': 250}), 8: (1, {'@': 250}), 12: (1, {'@': 250}), 27: (1, {'@': 250}), 31: (1, {'@': 250}), 7: (1, {'@': 250}), 9: (1, {'@': 250}), 26: (1, {'@': 250}), 13: (1, {'@': 250}), 14: (1, {'@': 250}), 29: (1, {'@': 250}), 16: (1, {'@': 250}), 19: (1, {'@': 250})}, 375: {7: (0, 386)}, 376: {20: (1, {'@': 190}), 22: (1, {'@': 190}), 1: (1, {'@': 190}), 23: (1, {'@': 190}), 24: (1, {'@': 190}), 25: (1, {'@': 190}), 10: (1, {'@': 190}), 11: (1, {'@': 190}), 3: (1, {'@': 190}), 28: (1, {'@': 190}), 15: (1, {'@': 190}), 30: (1, {'@': 190}), 5: (1, {'@': 190}), 32: (1, {'@': 190}), 17: (1, {'@': 190}), 18: (1, {'@': 190}), 33: (1, {'@': 190}), 34: (1, {'@': 190}), 21: (1, {'@': 190}), 8: (1, {'@': 190}), 12: (1, {'@': 190}), 27: (1, {'@': 190}), 31: (1, {'@': 190}), 7: (1, {'@': 190}), 9: (1, {'@': 190}), 26: (1, {'@': 190}), 13: (1, {'@': 190}), 14: (1, {'@': 190}), 29: (1, {'@': 190}), 16: (1, {'@': 190}), 19: (1, {'@': 190})}, 377: {28: (1, {'@': 298}), 40: (1, {'@': 298}), 29: (1, {'@': 298}), 1: (1, {'@': 298}), 62: (1, {'@': 298}), 55: (1, {'@': 298}), 35: (1, {'@': 298}), 64: (1, {'@': 298}), 49: (1, {'@': 298}), 54: (1, {'@': 298}), 21: (1, {'@': 298}), 31: (1, {'@': 298}), 12: (1, {'@': 298})}, 378: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 0), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 379: {1: (1, {'@': 342}), 7: (1, {'@': 342}), 8: (1, {'@': 342}), 9: (1, {'@': 342}), 12: (1, {'@': 342}), 10: (1, {'@': 342}), 11: (1, {'@': 342}), 13: (1, {'@': 342}), 14: (1, {'@': 342}), 15: (1, {'@': 342}), 5: (1, {'@': 342}), 16: (1, {'@': 342}), 17: (1, {'@': 342}), 18: (1, {'@': 342}), 19: (1, {'@': 342}), 20: (1, {'@': 342}), 21: (1, {'@': 342}), 22: (1, {'@': 342}), 23: (1, {'@': 342}), 24: (1, {'@': 342}), 25: (1, {'@': 342}), 26: (1, {'@': 342}), 3: (1, {'@': 342}), 27: (1, {'@': 342}), 28: (1, {'@': 342}), 29: (1, {'@': 342}), 30: (1, {'@': 342}), 31: (1, {'@': 342}), 32: (1, {'@': 342}), 33: (1, {'@': 342}), 34: (1, {'@': 342})}, 380: {28: (1, {'@': 290}), 40: (1, {'@': 290}), 29: (1, {'@': 290}), 1: (1, {'@': 290}), 62: (1, {'@': 290}), 55: (1, {'@': 290}), 35: (1, {'@': 290}), 64: (1, {'@': 290}), 49: (1, {'@': 290}), 54: (1, {'@': 290}), 21: (1, {'@': 290}), 31: (1, {'@': 290}), 12: (1, {'@': 290})}, 381: {7: (0, 181)}, 382: {1: (1, {'@': 343}), 7: (1, {'@': 343}), 8: (1, {'@': 343}), 9: (1, {'@': 343}), 12: (1, {'@': 343}), 10: (1, {'@': 343}), 11: (1, {'@': 343}), 13: (1, {'@': 343}), 14: (1, {'@': 343}), 15: (1, {'@': 343}), 5: (1, {'@': 343}), 16: (1, {'@': 343}), 17: (1, {'@': 343}), 18: (1, {'@': 343}), 19: (1, {'@': 343}), 20: (1, {'@': 343}), 21: (1, {'@': 343}), 22: (1, {'@': 343}), 23: (1, {'@': 343}), 24: (1, {'@': 343}), 25: (1, {'@': 343}), 26: (1, {'@': 343}), 3: (1, {'@': 343}), 27: (1, {'@': 343}), 28: (1, {'@': 343}), 29: (1, {'@': 343}), 30: (1, {'@': 343}), 31: (1, {'@': 343}), 32: (1, {'@': 343}), 33: (1, {'@': 343}), 34: (1, {'@': 343})}, 383: {73: (0, 239), 18: (0, 145), 28: (0, 93), 20: (1, {'@': 82}), 15: (1, {'@': 82}), 22: (1, {'@': 82}), 30: (1, {'@': 82}), 23: (1, {'@': 82}), 24: (1, {'@': 82}), 25: (1, {'@': 82}), 10: (1, {'@': 82}), 11: (1, {'@': 82}), 33: (1, {'@': 82}), 21: (1, {'@': 82}), 31: (1, {'@': 82}), 8: (1, {'@': 82}), 27: (1, {'@': 82}), 12: (1, {'@': 82}), 7: (1, {'@': 82}), 9: (1, {'@': 82}), 26: (1, {'@': 82}), 13: (1, {'@': 82}), 14: (1, {'@': 82}), 29: (1, {'@': 82}), 16: (1, {'@': 82}), 19: (1, {'@': 82})}, 384: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 36: (0, 429), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 385: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 36: (0, 243), 39: (0, 325), 21: (0, 486), 40: (0, 475), 70: (0, 87), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 386: {69: (0, 514), 70: (0, 435), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 285}), 40: (1, {'@': 285}), 29: (1, {'@': 285}), 1: (1, {'@': 285}), 62: (1, {'@': 285}), 55: (1, {'@': 285}), 35: (1, {'@': 285}), 64: (1, {'@': 285}), 49: (1, {'@': 285}), 54: (1, {'@': 285})}, 387: {7: (0, 189)}, 388: {20: (1, {'@': 153}), 22: (1, {'@': 153}), 1: (1, {'@': 153}), 23: (1, {'@': 153}), 24: (1, {'@': 153}), 25: (1, {'@': 153}), 10: (1, {'@': 153}), 11: (1, {'@': 153}), 3: (1, {'@': 153}), 28: (1, {'@': 153}), 15: (1, {'@': 153}), 30: (1, {'@': 153}), 5: (1, {'@': 153}), 32: (1, {'@': 153}), 17: (1, {'@': 153}), 18: (1, {'@': 153}), 33: (1, {'@': 153}), 34: (1, {'@': 153}), 21: (1, {'@': 153}), 8: (1, {'@': 153}), 12: (1, {'@': 153}), 27: (1, {'@': 153}), 31: (1, {'@': 153}), 7: (1, {'@': 153}), 9: (1, {'@': 153}), 26: (1, {'@': 153}), 13: (1, {'@': 153}), 14: (1, {'@': 153}), 29: (1, {'@': 153}), 16: (1, {'@': 153}), 19: (1, {'@': 153})}, 389: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 41: (0, 489), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 70: (0, 494), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 390: {20: (1, {'@': 247}), 22: (1, {'@': 247}), 1: (1, {'@': 247}), 23: (1, {'@': 247}), 24: (1, {'@': 247}), 25: (1, {'@': 247}), 10: (1, {'@': 247}), 11: (1, {'@': 247}), 3: (1, {'@': 247}), 28: (1, {'@': 247}), 15: (1, {'@': 247}), 30: (1, {'@': 247}), 5: (1, {'@': 247}), 32: (1, {'@': 247}), 17: (1, {'@': 247}), 18: (1, {'@': 247}), 33: (1, {'@': 247}), 34: (1, {'@': 247}), 21: (1, {'@': 247}), 8: (1, {'@': 247}), 12: (1, {'@': 247}), 27: (1, {'@': 247}), 31: (1, {'@': 247}), 7: (1, {'@': 247}), 9: (1, {'@': 247}), 26: (1, {'@': 247}), 13: (1, {'@': 247}), 14: (1, {'@': 247}), 29: (1, {'@': 247}), 16: (1, {'@': 247}), 19: (1, {'@': 247})}, 391: {40: (1, {'@': 91}), 29: (1, {'@': 91}), 1: (1, {'@': 91}), 55: (1, {'@': 91}), 35: (1, {'@': 91}), 64: (1, {'@': 91}), 49: (1, {'@': 91}), 54: (1, {'@': 91})}, 392: {20: (1, {'@': 132}), 22: (1, {'@': 132}), 1: (1, {'@': 132}), 23: (1, {'@': 132}), 24: (1, {'@': 132}), 25: (1, {'@': 132}), 10: (1, {'@': 132}), 11: (1, {'@': 132}), 3: (1, {'@': 132}), 28: (1, {'@': 132}), 15: (1, {'@': 132}), 30: (1, {'@': 132}), 5: (1, {'@': 132}), 32: (1, {'@': 132}), 17: (1, {'@': 132}), 18: (1, {'@': 132}), 33: (1, {'@': 132}), 34: (1, {'@': 132}), 21: (1, {'@': 132}), 8: (1, {'@': 132}), 12: (1, {'@': 132}), 27: (1, {'@': 132}), 31: (1, {'@': 132}), 7: (1, {'@': 132}), 9: (1, {'@': 132}), 26: (1, {'@': 132}), 13: (1, {'@': 132}), 14: (1, {'@': 132}), 29: (1, {'@': 132}), 16: (1, {'@': 132}), 19: (1, {'@': 132})}, 393: {20: (1, {'@': 237}), 22: (1, {'@': 237}), 1: (1, {'@': 237}), 23: (1, {'@': 237}), 24: (1, {'@': 237}), 25: (1, {'@': 237}), 10: (1, {'@': 237}), 11: (1, {'@': 237}), 3: (1, {'@': 237}), 28: (1, {'@': 237}), 15: (1, {'@': 237}), 30: (1, {'@': 237}), 5: (1, {'@': 237}), 32: (1, {'@': 237}), 17: (1, {'@': 237}), 18: (1, {'@': 237}), 33: (1, {'@': 237}), 34: (1, {'@': 237}), 21: (1, {'@': 237}), 8: (1, {'@': 237}), 12: (1, {'@': 237}), 27: (1, {'@': 237}), 31: (1, {'@': 237}), 7: (1, {'@': 237}), 9: (1, {'@': 237}), 26: (1, {'@': 237}), 13: (1, {'@': 237}), 14: (1, {'@': 237}), 29: (1, {'@': 237}), 16: (1, {'@': 237}), 19: (1, {'@': 237})}, 394: {8: (0, 515)}, 395: {69: (0, 514), 70: (0, 425), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 289}), 40: (1, {'@': 289}), 29: (1, {'@': 289}), 1: (1, {'@': 289}), 62: (1, {'@': 289}), 55: (1, {'@': 289}), 35: (1, {'@': 289}), 64: (1, {'@': 289}), 49: (1, {'@': 289}), 54: (1, {'@': 289})}, 396: {16: (0, 430)}, 397: {20: (1, {'@': 235}), 22: (1, {'@': 235}), 1: (1, {'@': 235}), 23: (1, {'@': 235}), 24: (1, {'@': 235}), 25: (1, {'@': 235}), 10: (1, {'@': 235}), 11: (1, {'@': 235}), 3: (1, {'@': 235}), 28: (1, {'@': 235}), 15: (1, {'@': 235}), 30: (1, {'@': 235}), 5: (1, {'@': 235}), 32: (1, {'@': 235}), 17: (1, {'@': 235}), 18: (1, {'@': 235}), 33: (1, {'@': 235}), 34: (1, {'@': 235}), 21: (1, {'@': 235}), 8: (1, {'@': 235}), 12: (1, {'@': 235}), 27: (1, {'@': 235}), 31: (1, {'@': 235}), 7: (1, {'@': 235}), 9: (1, {'@': 235}), 26: (1, {'@': 235}), 13: (1, {'@': 235}), 14: (1, {'@': 235}), 29: (1, {'@': 235}), 16: (1, {'@': 235}), 19: (1, {'@': 235})}, 398: {40: (1, {'@': 90}), 29: (1, {'@': 90}), 1: (1, {'@': 90}), 55: (1, {'@': 90}), 35: (1, {'@': 90}), 64: (1, {'@': 90}), 49: (1, {'@': 90}), 54: (1, {'@': 90})}, 399: {69: (0, 514), 12: (0, 532), 70: (0, 428), 16: (0, 426), 31: (0, 524), 21: (0, 486)}, 400: {40: (1, {'@': 92}), 29: (1, {'@': 92}), 1: (1, {'@': 92}), 55: (1, {'@': 92}), 35: (1, {'@': 92}), 64: (1, {'@': 92}), 49: (1, {'@': 92}), 54: (1, {'@': 92})}, 401: {64: (0, 444), 20: (1, {'@': 121}), 22: (1, {'@': 121}), 1: (1, {'@': 121}), 23: (1, {'@': 121}), 24: (1, {'@': 121}), 25: (1, {'@': 121}), 10: (1, {'@': 121}), 11: (1, {'@': 121}), 3: (1, {'@': 121}), 28: (1, {'@': 121}), 15: (1, {'@': 121}), 30: (1, {'@': 121}), 5: (1, {'@': 121}), 32: (1, {'@': 121}), 17: (1, {'@': 121}), 18: (1, {'@': 121}), 33: (1, {'@': 121}), 34: (1, {'@': 121}), 21: (1, {'@': 121}), 8: (1, {'@': 121}), 12: (1, {'@': 121}), 27: (1, {'@': 121}), 31: (1, {'@': 121}), 7: (1, {'@': 121}), 9: (1, {'@': 121}), 26: (1, {'@': 121}), 13: (1, {'@': 121}), 14: (1, {'@': 121}), 29: (1, {'@': 121}), 16: (1, {'@': 121}), 19: (1, {'@': 121})}, 402: {20: (1, {'@': 193}), 22: (1, {'@': 193}), 1: (1, {'@': 193}), 23: (1, {'@': 193}), 24: (1, {'@': 193}), 25: (1, {'@': 193}), 10: (1, {'@': 193}), 11: (1, {'@': 193}), 3: (1, {'@': 193}), 28: (1, {'@': 193}), 15: (1, {'@': 193}), 30: (1, {'@': 193}), 5: (1, {'@': 193}), 32: (1, {'@': 193}), 17: (1, {'@': 193}), 18: (1, {'@': 193}), 33: (1, {'@': 193}), 34: (1, {'@': 193}), 21: (1, {'@': 193}), 8: (1, {'@': 193}), 12: (1, {'@': 193}), 27: (1, {'@': 193}), 31: (1, {'@': 193}), 7: (1, {'@': 193}), 9: (1, {'@': 193}), 26: (1, {'@': 193}), 13: (1, {'@': 193}), 14: (1, {'@': 193}), 29: (1, {'@': 193}), 16: (1, {'@': 193}), 19: (1, {'@': 193})}, 403: {16: (1, {'@': 54}), 29: (1, {'@': 54}), 31: (1, {'@': 54}), 21: (1, {'@': 54}), 12: (1, {'@': 54}), 19: (1, {'@': 54})}, 404: {16: (0, 427)}, 405: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 53: (0, 94), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 406: {40: (1, {'@': 96}), 29: (1, {'@': 96}), 1: (1, {'@': 96}), 55: (1, {'@': 96}), 35: (1, {'@': 96}), 64: (1, {'@': 96}), 49: (1, {'@': 96}), 54: (1, {'@': 96})}, 407: {16: (0, 431)}, 408: {40: (1, {'@': 95}), 29: (1, {'@': 95}), 1: (1, {'@': 95}), 55: (1, {'@': 95}), 35: (1, {'@': 95}), 64: (1, {'@': 95}), 49: (1, {'@': 95}), 54: (1, {'@': 95})}, 409: {20: (1, {'@': 240}), 22: (1, {'@': 240}), 1: (1, {'@': 240}), 23: (1, {'@': 240}), 24: (1, {'@': 240}), 25: (1, {'@': 240}), 10: (1, {'@': 240}), 11: (1, {'@': 240}), 3: (1, {'@': 240}), 28: (1, {'@': 240}), 15: (1, {'@': 240}), 30: (1, {'@': 240}), 5: (1, {'@': 240}), 32: (1, {'@': 240}), 17: (1, {'@': 240}), 18: (1, {'@': 240}), 33: (1, {'@': 240}), 34: (1, {'@': 240}), 21: (1, {'@': 240}), 8: (1, {'@': 240}), 12: (1, {'@': 240}), 27: (1, {'@': 240}), 31: (1, {'@': 240}), 7: (1, {'@': 240}), 9: (1, {'@': 240}), 26: (1, {'@': 240}), 13: (1, {'@': 240}), 14: (1, {'@': 240}), 29: (1, {'@': 240}), 16: (1, {'@': 240}), 19: (1, {'@': 240})}, 410: {20: (1, {'@': 243}), 22: (1, {'@': 243}), 1: (1, {'@': 243}), 23: (1, {'@': 243}), 24: (1, {'@': 243}), 25: (1, {'@': 243}), 10: (1, {'@': 243}), 11: (1, {'@': 243}), 3: (1, {'@': 243}), 28: (1, {'@': 243}), 15: (1, {'@': 243}), 30: (1, {'@': 243}), 5: (1, {'@': 243}), 32: (1, {'@': 243}), 17: (1, {'@': 243}), 18: (1, {'@': 243}), 33: (1, {'@': 243}), 34: (1, {'@': 243}), 21: (1, {'@': 243}), 8: (1, {'@': 243}), 12: (1, {'@': 243}), 27: (1, {'@': 243}), 31: (1, {'@': 243}), 7: (1, {'@': 243}), 9: (1, {'@': 243}), 26: (1, {'@': 243}), 13: (1, {'@': 243}), 14: (1, {'@': 243}), 29: (1, {'@': 243}), 16: (1, {'@': 243}), 19: (1, {'@': 243})}, 411: {40: (1, {'@': 93}), 29: (1, {'@': 93}), 1: (1, {'@': 93}), 55: (1, {'@': 93}), 35: (1, {'@': 93}), 64: (1, {'@': 93}), 49: (1, {'@': 93}), 54: (1, {'@': 93})}, 412: {51: (0, 65), 64: (0, 511)}, 413: {69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 434), 28: (1, {'@': 267}), 40: (1, {'@': 267}), 29: (1, {'@': 267}), 1: (1, {'@': 267}), 62: (1, {'@': 267}), 55: (1, {'@': 267}), 35: (1, {'@': 267}), 64: (1, {'@': 267}), 49: (1, {'@': 267}), 54: (1, {'@': 267})}, 414: {40: (1, {'@': 94}), 29: (1, {'@': 94}), 1: (1, {'@': 94}), 55: (1, {'@': 94}), 35: (1, {'@': 94}), 64: (1, {'@': 94}), 49: (1, {'@': 94}), 54: (1, {'@': 94})}, 415: {28: (1, {'@': 286}), 40: (1, {'@': 286}), 29: (1, {'@': 286}), 1: (1, {'@': 286}), 62: (1, {'@': 286}), 55: (1, {'@': 286}), 35: (1, {'@': 286}), 64: (1, {'@': 286}), 49: (1, {'@': 286}), 54: (1, {'@': 286}), 21: (1, {'@': 286}), 31: (1, {'@': 286}), 12: (1, {'@': 286})}, 416: {23: (0, 406), 30: (0, 414), 15: (0, 408), 22: (0, 411), 102: (0, 244), 24: (1, {'@': 80}), 25: (1, {'@': 80}), 20: (1, {'@': 80}), 10: (1, {'@': 80}), 11: (1, {'@': 80}), 33: (1, {'@': 80}), 21: (1, {'@': 80}), 31: (1, {'@': 80}), 8: (1, {'@': 80}), 12: (1, {'@': 80}), 27: (1, {'@': 80}), 7: (1, {'@': 80}), 9: (1, {'@': 80}), 26: (1, {'@': 80}), 13: (1, {'@': 80}), 14: (1, {'@': 80}), 29: (1, {'@': 80}), 16: (1, {'@': 80}), 19: (1, {'@': 80})}, 417: {28: (1, {'@': 272}), 40: (1, {'@': 272}), 29: (1, {'@': 272}), 1: (1, {'@': 272}), 62: (1, {'@': 272}), 55: (1, {'@': 272}), 35: (1, {'@': 272}), 64: (1, {'@': 272}), 49: (1, {'@': 272}), 54: (1, {'@': 272}), 21: (1, {'@': 272}), 31: (1, {'@': 272}), 12: (1, {'@': 272})}, 418: {0: (0, 402), 1: (0, 264), 2: (0, 376), 3: (0, 358), 4: (0, 335), 5: (0, 337), 6: (0, 322), 20: (1, {'@': 73}), 33: (1, {'@': 73}), 8: (1, {'@': 73}), 21: (1, {'@': 73}), 12: (1, {'@': 73}), 27: (1, {'@': 73}), 31: (1, {'@': 73}), 13: (1, {'@': 73}), 14: (1, {'@': 73}), 29: (1, {'@': 73}), 7: (1, {'@': 73}), 9: (1, {'@': 73}), 16: (1, {'@': 73}), 19: (1, {'@': 73}), 26: (1, {'@': 73})}, 419: {19: (1, {'@': 44})}, 420: {7: (0, 433)}, 421: {16: (1, {'@': 305}), 29: (1, {'@': 305}), 31: (1, {'@': 305}), 21: (1, {'@': 305}), 12: (1, {'@': 305}), 19: (1, {'@': 305})}, 422: {7: (0, 432)}, 423: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 36: (0, 440), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 424: {40: (1, {'@': 87}), 29: (1, {'@': 87}), 1: (1, {'@': 87}), 55: (1, {'@': 87}), 35: (1, {'@': 87}), 64: (1, {'@': 87}), 49: (1, {'@': 87}), 54: (1, {'@': 87})}, 425: {28: (1, {'@': 288}), 40: (1, {'@': 288}), 29: (1, {'@': 288}), 1: (1, {'@': 288}), 62: (1, {'@': 288}), 55: (1, {'@': 288}), 35: (1, {'@': 288}), 64: (1, {'@': 288}), 49: (1, {'@': 288}), 54: (1, {'@': 288}), 21: (1, {'@': 288}), 31: (1, {'@': 288}), 12: (1, {'@': 288})}, 426: {20: (1, {'@': 233}), 22: (1, {'@': 233}), 1: (1, {'@': 233}), 23: (1, {'@': 233}), 24: (1, {'@': 233}), 25: (1, {'@': 233}), 10: (1, {'@': 233}), 11: (1, {'@': 233}), 3: (1, {'@': 233}), 28: (1, {'@': 233}), 15: (1, {'@': 233}), 30: (1, {'@': 233}), 5: (1, {'@': 233}), 32: (1, {'@': 233}), 17: (1, {'@': 233}), 18: (1, {'@': 233}), 33: (1, {'@': 233}), 34: (1, {'@': 233}), 21: (1, {'@': 233}), 8: (1, {'@': 233}), 12: (1, {'@': 233}), 27: (1, {'@': 233}), 31: (1, {'@': 233}), 7: (1, {'@': 233}), 9: (1, {'@': 233}), 26: (1, {'@': 233}), 13: (1, {'@': 233}), 14: (1, {'@': 233}), 29: (1, {'@': 233}), 16: (1, {'@': 233}), 19: (1, {'@': 233})}, 427: {20: (1, {'@': 234}), 22: (1, {'@': 234}), 1: (1, {'@': 234}), 23: (1, {'@': 234}), 24: (1, {'@': 234}), 25: (1, {'@': 234}), 10: (1, {'@': 234}), 11: (1, {'@': 234}), 3: (1, {'@': 234}), 28: (1, {'@': 234}), 15: (1, {'@': 234}), 30: (1, {'@': 234}), 5: (1, {'@': 234}), 32: (1, {'@': 234}), 17: (1, {'@': 234}), 18: (1, {'@': 234}), 33: (1, {'@': 234}), 34: (1, {'@': 234}), 21: (1, {'@': 234}), 8: (1, {'@': 234}), 12: (1, {'@': 234}), 27: (1, {'@': 234}), 31: (1, {'@': 234}), 7: (1, {'@': 234}), 9: (1, {'@': 234}), 26: (1, {'@': 234}), 13: (1, {'@': 234}), 14: (1, {'@': 234}), 29: (1, {'@': 234}), 16: (1, {'@': 234}), 19: (1, {'@': 234})}, 428: {16: (0, 508)}, 429: {7: (0, 439)}, 430: {20: (1, {'@': 236}), 22: (1, {'@': 236}), 1: (1, {'@': 236}), 23: (1, {'@': 236}), 24: (1, {'@': 236}), 25: (1, {'@': 236}), 10: (1, {'@': 236}), 11: (1, {'@': 236}), 3: (1, {'@': 236}), 28: (1, {'@': 236}), 15: (1, {'@': 236}), 30: (1, {'@': 236}), 5: (1, {'@': 236}), 32: (1, {'@': 236}), 17: (1, {'@': 236}), 18: (1, {'@': 236}), 33: (1, {'@': 236}), 34: (1, {'@': 236}), 21: (1, {'@': 236}), 8: (1, {'@': 236}), 12: (1, {'@': 236}), 27: (1, {'@': 236}), 31: (1, {'@': 236}), 7: (1, {'@': 236}), 9: (1, {'@': 236}), 26: (1, {'@': 236}), 13: (1, {'@': 236}), 14: (1, {'@': 236}), 29: (1, {'@': 236}), 16: (1, {'@': 236}), 19: (1, {'@': 236})}, 431: {20: (1, {'@': 239}), 22: (1, {'@': 239}), 1: (1, {'@': 239}), 23: (1, {'@': 239}), 24: (1, {'@': 239}), 25: (1, {'@': 239}), 10: (1, {'@': 239}), 11: (1, {'@': 239}), 3: (1, {'@': 239}), 28: (1, {'@': 239}), 15: (1, {'@': 239}), 30: (1, {'@': 239}), 5: (1, {'@': 239}), 32: (1, {'@': 239}), 17: (1, {'@': 239}), 18: (1, {'@': 239}), 33: (1, {'@': 239}), 34: (1, {'@': 239}), 21: (1, {'@': 239}), 8: (1, {'@': 239}), 12: (1, {'@': 239}), 27: (1, {'@': 239}), 31: (1, {'@': 239}), 7: (1, {'@': 239}), 9: (1, {'@': 239}), 26: (1, {'@': 239}), 13: (1, {'@': 239}), 14: (1, {'@': 239}), 29: (1, {'@': 239}), 16: (1, {'@': 239}), 19: (1, {'@': 239})}, 432: {69: (0, 514), 70: (0, 240), 12: (0, 532), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 263}), 40: (1, {'@': 263}), 29: (1, {'@': 263}), 1: (1, {'@': 263}), 62: (1, {'@': 263}), 55: (1, {'@': 263}), 35: (1, {'@': 263}), 64: (1, {'@': 263}), 49: (1, {'@': 263}), 54: (1, {'@': 263})}, 433: {69: (0, 514), 12: (0, 532), 70: (0, 237), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 265}), 40: (1, {'@': 265}), 29: (1, {'@': 265}), 1: (1, {'@': 265}), 62: (1, {'@': 265}), 55: (1, {'@': 265}), 35: (1, {'@': 265}), 64: (1, {'@': 265}), 49: (1, {'@': 265}), 54: (1, {'@': 265})}, 434: {28: (1, {'@': 266}), 40: (1, {'@': 266}), 29: (1, {'@': 266}), 1: (1, {'@': 266}), 62: (1, {'@': 266}), 55: (1, {'@': 266}), 35: (1, {'@': 266}), 64: (1, {'@': 266}), 49: (1, {'@': 266}), 54: (1, {'@': 266}), 21: (1, {'@': 266}), 31: (1, {'@': 266}), 12: (1, {'@': 266})}, 435: {28: (1, {'@': 284}), 40: (1, {'@': 284}), 29: (1, {'@': 284}), 1: (1, {'@': 284}), 62: (1, {'@': 284}), 55: (1, {'@': 284}), 35: (1, {'@': 284}), 64: (1, {'@': 284}), 49: (1, {'@': 284}), 54: (1, {'@': 284}), 21: (1, {'@': 284}), 31: (1, {'@': 284}), 12: (1, {'@': 284})}, 436: {11: (0, 424), 91: (0, 455), 24: (1, {'@': 76}), 20: (1, {'@': 76}), 33: (1, {'@': 76}), 8: (1, {'@': 76}), 21: (1, {'@': 76}), 12: (1, {'@': 76}), 31: (1, {'@': 76}), 27: (1, {'@': 76}), 13: (1, {'@': 76}), 14: (1, {'@': 76}), 29: (1, {'@': 76}), 7: (1, {'@': 76}), 9: (1, {'@': 76}), 16: (1, {'@': 76}), 19: (1, {'@': 76}), 26: (1, {'@': 76})}, 437: {28: (1, {'@': 282}), 40: (1, {'@': 282}), 29: (1, {'@': 282}), 1: (1, {'@': 282}), 62: (1, {'@': 282}), 55: (1, {'@': 282}), 35: (1, {'@': 282}), 64: (1, {'@': 282}), 49: (1, {'@': 282}), 54: (1, {'@': 282}), 21: (1, {'@': 282}), 31: (1, {'@': 282}), 12: (1, {'@': 282})}, 438: {28: (1, {'@': 268}), 40: (1, {'@': 268}), 29: (1, {'@': 268}), 1: (1, {'@': 268}), 62: (1, {'@': 268}), 55: (1, {'@': 268}), 35: (1, {'@': 268}), 64: (1, {'@': 268}), 49: (1, {'@': 268}), 54: (1, {'@': 268}), 21: (1, {'@': 268}), 31: (1, {'@': 268}), 12: (1, {'@': 268})}, 439: {69: (0, 514), 12: (0, 532), 70: (0, 250), 31: (0, 524), 21: (0, 486), 28: (1, {'@': 281}), 40: (1, {'@': 281}), 29: (1, {'@': 281}), 1: (1, {'@': 281}), 62: (1, {'@': 281}), 55: (1, {'@': 281}), 35: (1, {'@': 281}), 64: (1, {'@': 281}), 49: (1, {'@': 281}), 54: (1, {'@': 281})}, 440: {7: (0, 234)}, 441: {20: (1, {'@': 175}), 22: (1, {'@': 175}), 1: (1, {'@': 175}), 23: (1, {'@': 175}), 24: (1, {'@': 175}), 25: (1, {'@': 175}), 10: (1, {'@': 175}), 11: (1, {'@': 175}), 3: (1, {'@': 175}), 28: (1, {'@': 175}), 15: (1, {'@': 175}), 30: (1, {'@': 175}), 5: (1, {'@': 175}), 32: (1, {'@': 175}), 17: (1, {'@': 175}), 18: (1, {'@': 175}), 33: (1, {'@': 175}), 34: (1, {'@': 175}), 21: (1, {'@': 175}), 8: (1, {'@': 175}), 12: (1, {'@': 175}), 27: (1, {'@': 175}), 31: (1, {'@': 175}), 7: (1, {'@': 175}), 9: (1, {'@': 175}), 26: (1, {'@': 175}), 13: (1, {'@': 175}), 14: (1, {'@': 175}), 29: (1, {'@': 175}), 16: (1, {'@': 175}), 19: (1, {'@': 175})}, 442: {14: (0, 357)}, 443: {20: (1, {'@': 137}), 22: (1, {'@': 137}), 1: (1, {'@': 137}), 23: (1, {'@': 137}), 24: (1, {'@': 137}), 25: (1, {'@': 137}), 10: (1, {'@': 137}), 11: (1, {'@': 137}), 3: (1, {'@': 137}), 28: (1, {'@': 137}), 15: (1, {'@': 137}), 30: (1, {'@': 137}), 5: (1, {'@': 137}), 32: (1, {'@': 137}), 17: (1, {'@': 137}), 18: (1, {'@': 137}), 33: (1, {'@': 137}), 34: (1, {'@': 137}), 21: (1, {'@': 137}), 8: (1, {'@': 137}), 12: (1, {'@': 137}), 27: (1, {'@': 137}), 31: (1, {'@': 137}), 7: (1, {'@': 137}), 9: (1, {'@': 137}), 26: (1, {'@': 137}), 13: (1, {'@': 137}), 14: (1, {'@': 137}), 29: (1, {'@': 137}), 16: (1, {'@': 137}), 19: (1, {'@': 137})}, 444: {20: (1, {'@': 329}), 22: (1, {'@': 329}), 1: (1, {'@': 329}), 23: (1, {'@': 329}), 85: (1, {'@': 329}), 24: (1, {'@': 329}), 25: (1, {'@': 329}), 10: (1, {'@': 329}), 11: (1, {'@': 329}), 64: (1, {'@': 329}), 3: (1, {'@': 329}), 28: (1, {'@': 329}), 15: (1, {'@': 329}), 30: (1, {'@': 329}), 5: (1, {'@': 329}), 32: (1, {'@': 329}), 17: (1, {'@': 329}), 18: (1, {'@': 329}), 33: (1, {'@': 329}), 34: (1, {'@': 329}), 21: (1, {'@': 329}), 8: (1, {'@': 329}), 12: (1, {'@': 329}), 27: (1, {'@': 329}), 31: (1, {'@': 329}), 7: (1, {'@': 329}), 9: (1, {'@': 329}), 13: (1, {'@': 329}), 14: (1, {'@': 329}), 16: (1, {'@': 329}), 19: (1, {'@': 329}), 26: (1, {'@': 329}), 29: (1, {'@': 329})}, 445: {69: (0, 514), 27: (0, 473), 70: (0, 136), 8: (0, 138), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 446: {20: (1, {'@': 133}), 22: (1, {'@': 133}), 1: (1, {'@': 133}), 23: (1, {'@': 133}), 24: (1, {'@': 133}), 25: (1, {'@': 133}), 10: (1, {'@': 133}), 11: (1, {'@': 133}), 3: (1, {'@': 133}), 28: (1, {'@': 133}), 15: (1, {'@': 133}), 30: (1, {'@': 133}), 5: (1, {'@': 133}), 32: (1, {'@': 133}), 17: (1, {'@': 133}), 18: (1, {'@': 133}), 33: (1, {'@': 133}), 34: (1, {'@': 133}), 21: (1, {'@': 133}), 8: (1, {'@': 133}), 12: (1, {'@': 133}), 27: (1, {'@': 133}), 31: (1, {'@': 133}), 7: (1, {'@': 133}), 9: (1, {'@': 133}), 26: (1, {'@': 133}), 13: (1, {'@': 133}), 14: (1, {'@': 133}), 29: (1, {'@': 133}), 16: (1, {'@': 133}), 19: (1, {'@': 133})}, 447: {8: (0, 279)}, 448: {20: (1, {'@': 228}), 22: (1, {'@': 228}), 1: (1, {'@': 228}), 23: (1, {'@': 228}), 24: (1, {'@': 228}), 25: (1, {'@': 228}), 10: (1, {'@': 228}), 11: (1, {'@': 228}), 3: (1, {'@': 228}), 28: (1, {'@': 228}), 15: (1, {'@': 228}), 30: (1, {'@': 228}), 5: (1, {'@': 228}), 32: (1, {'@': 228}), 17: (1, {'@': 228}), 18: (1, {'@': 228}), 33: (1, {'@': 228}), 34: (1, {'@': 228}), 21: (1, {'@': 228}), 8: (1, {'@': 228}), 12: (1, {'@': 228}), 27: (1, {'@': 228}), 31: (1, {'@': 228}), 7: (1, {'@': 228}), 9: (1, {'@': 228}), 26: (1, {'@': 228}), 13: (1, {'@': 228}), 14: (1, {'@': 228}), 29: (1, {'@': 228}), 16: (1, {'@': 228}), 19: (1, {'@': 228})}, 449: {37: (0, 220), 29: (0, 491)}, 450: {1: (0, 540), 36: (0, 162), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 451: {16: (1, {'@': 164}), 21: (1, {'@': 164}), 12: (1, {'@': 164}), 31: (1, {'@': 164}), 27: (1, {'@': 164})}, 452: {16: (1, {'@': 166}), 21: (1, {'@': 166}), 12: (1, {'@': 166}), 31: (1, {'@': 166}), 27: (1, {'@': 166})}, 453: {16: (1, {'@': 167}), 21: (1, {'@': 167}), 12: (1, {'@': 167}), 31: (1, {'@': 167}), 27: (1, {'@': 167})}, 454: {69: (0, 514), 12: (0, 532), 21: (0, 486), 31: (0, 524), 70: (0, 403)}, 455: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 46: (0, 185), 52: (0, 40), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 456: {24: (0, 295), 93: (0, 178), 20: (1, {'@': 74}), 33: (1, {'@': 74}), 8: (1, {'@': 74}), 21: (1, {'@': 74}), 12: (1, {'@': 74}), 27: (1, {'@': 74}), 31: (1, {'@': 74}), 13: (1, {'@': 74}), 14: (1, {'@': 74}), 29: (1, {'@': 74}), 7: (1, {'@': 74}), 9: (1, {'@': 74}), 16: (1, {'@': 74}), 19: (1, {'@': 74}), 26: (1, {'@': 74})}, 457: {1: (0, 540), 35: (0, 174), 37: (0, 284), 38: (0, 241), 39: (0, 325), 40: (0, 475), 36: (0, 42), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 16: (0, 169), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 77: (0, 467), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 458: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 70: (0, 202), 43: (0, 206), 44: (0, 224), 8: (0, 210), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 36: (0, 212), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 459: {8: (0, 350)}, 460: {20: (1, {'@': 157}), 22: (1, {'@': 157}), 1: (1, {'@': 157}), 23: (1, {'@': 157}), 24: (1, {'@': 157}), 25: (1, {'@': 157}), 10: (1, {'@': 157}), 11: (1, {'@': 157}), 3: (1, {'@': 157}), 28: (1, {'@': 157}), 15: (1, {'@': 157}), 30: (1, {'@': 157}), 5: (1, {'@': 157}), 32: (1, {'@': 157}), 17: (1, {'@': 157}), 18: (1, {'@': 157}), 33: (1, {'@': 157}), 34: (1, {'@': 157}), 21: (1, {'@': 157}), 8: (1, {'@': 157}), 12: (1, {'@': 157}), 27: (1, {'@': 157}), 31: (1, {'@': 157}), 7: (1, {'@': 157}), 9: (1, {'@': 157}), 26: (1, {'@': 157}), 13: (1, {'@': 157}), 14: (1, {'@': 157}), 29: (1, {'@': 157}), 16: (1, {'@': 157}), 19: (1, {'@': 157})}, 461: {20: (0, 311)}, 462: {69: (0, 514), 12: (0, 532), 31: (0, 524), 70: (0, 200), 21: (0, 486)}, 463: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 39: (0, 325), 21: (0, 486), 40: (0, 475), 8: (0, 543), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 70: (0, 546), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 36: (0, 212), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 464: {69: (0, 514), 12: (0, 532), 31: (0, 524), 70: (0, 199), 21: (0, 486), 28: (1, {'@': 297}), 40: (1, {'@': 297}), 29: (1, {'@': 297}), 1: (1, {'@': 297}), 62: (1, {'@': 297}), 55: (1, {'@': 297}), 35: (1, {'@': 297}), 64: (1, {'@': 297}), 49: (1, {'@': 297}), 54: (1, {'@': 297})}, 465: {69: (0, 514), 12: (0, 532), 31: (0, 524), 70: (0, 61), 21: (0, 486), 14: (0, 336)}, 466: {20: (1, {'@': 161}), 22: (1, {'@': 161}), 1: (1, {'@': 161}), 23: (1, {'@': 161}), 24: (1, {'@': 161}), 25: (1, {'@': 161}), 10: (1, {'@': 161}), 11: (1, {'@': 161}), 3: (1, {'@': 161}), 28: (1, {'@': 161}), 15: (1, {'@': 161}), 30: (1, {'@': 161}), 5: (1, {'@': 161}), 32: (1, {'@': 161}), 17: (1, {'@': 161}), 18: (1, {'@': 161}), 33: (1, {'@': 161}), 34: (1, {'@': 161}), 21: (1, {'@': 161}), 8: (1, {'@': 161}), 12: (1, {'@': 161}), 27: (1, {'@': 161}), 31: (1, {'@': 161}), 7: (1, {'@': 161}), 9: (1, {'@': 161}), 26: (1, {'@': 161}), 13: (1, {'@': 161}), 14: (1, {'@': 161}), 29: (1, {'@': 161}), 16: (1, {'@': 161}), 19: (1, {'@': 161})}, 467: {21: (1, {'@': 338}), 31: (1, {'@': 338}), 16: (1, {'@': 338}), 12: (1, {'@': 338}), 27: (1, {'@': 338})}, 468: {70: (0, 172), 69: (0, 514), 12: (0, 532), 72: (0, 346), 27: (0, 348), 26: (0, 474), 31: (0, 524), 21: (0, 486), 14: (1, {'@': 182})}, 469: {69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 70: (0, 501), 28: (1, {'@': 279}), 40: (1, {'@': 279}), 29: (1, {'@': 279}), 1: (1, {'@': 279}), 62: (1, {'@': 279}), 55: (1, {'@': 279}), 35: (1, {'@': 279}), 64: (1, {'@': 279}), 49: (1, {'@': 279}), 54: (1, {'@': 279})}, 470: {1: (1, {'@': 341}), 7: (1, {'@': 341}), 8: (1, {'@': 341}), 9: (1, {'@': 341}), 10: (1, {'@': 341}), 11: (1, {'@': 341}), 12: (1, {'@': 341}), 13: (1, {'@': 341}), 14: (1, {'@': 341}), 15: (1, {'@': 341}), 5: (1, {'@': 341}), 16: (1, {'@': 341}), 17: (1, {'@': 341}), 18: (1, {'@': 341}), 19: (1, {'@': 341}), 20: (1, {'@': 341}), 21: (1, {'@': 341}), 22: (1, {'@': 341}), 23: (1, {'@': 341}), 24: (1, {'@': 341}), 25: (1, {'@': 341}), 26: (1, {'@': 341}), 3: (1, {'@': 341}), 27: (1, {'@': 341}), 28: (1, {'@': 341}), 29: (1, {'@': 341}), 30: (1, {'@': 341}), 31: (1, {'@': 341}), 32: (1, {'@': 341}), 33: (1, {'@': 341}), 34: (1, {'@': 341})}, 471: {27: (0, 114), 31: (1, {'@': 187}), 21: (1, {'@': 187}), 12: (1, {'@': 187}), 14: (1, {'@': 187})}, 472: {70: (0, 77), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486), 14: (1, {'@': 186})}, 473: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 69: (0, 514), 38: (0, 241), 8: (0, 392), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 70: (0, 232), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 36: (0, 118), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 474: {14: (1, {'@': 189}), 21: (1, {'@': 189}), 12: (1, {'@': 189}), 31: (1, {'@': 189})}, 475: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 70: (0, 291), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 36: (0, 317), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 476: {14: (0, 88)}, 477: {28: (1, {'@': 104}), 20: (1, {'@': 104}), 15: (1, {'@': 104}), 22: (1, {'@': 104}), 30: (1, {'@': 104}), 1: (1, {'@': 104}), 23: (1, {'@': 104}), 5: (1, {'@': 104}), 24: (1, {'@': 104}), 25: (1, {'@': 104}), 32: (1, {'@': 104}), 10: (1, {'@': 104}), 11: (1, {'@': 104}), 17: (1, {'@': 104}), 18: (1, {'@': 104}), 3: (1, {'@': 104}), 33: (1, {'@': 104}), 34: (1, {'@': 104}), 21: (1, {'@': 104}), 8: (1, {'@': 104}), 12: (1, {'@': 104}), 27: (1, {'@': 104}), 31: (1, {'@': 104}), 7: (1, {'@': 104}), 9: (1, {'@': 104}), 26: (1, {'@': 104}), 13: (1, {'@': 104}), 14: (1, {'@': 104}), 29: (1, {'@': 104}), 16: (1, {'@': 104}), 19: (1, {'@': 104})}, 478: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 41: (0, 326), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 479: {35: (1, {'@': 306}), 55: (1, {'@': 306}), 29: (1, {'@': 306})}, 480: {86: (0, 292)}, 481: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 36: (0, 132), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 482: {20: (1, {'@': 67}), 8: (1, {'@': 67}), 21: (1, {'@': 67}), 12: (1, {'@': 67}), 31: (1, {'@': 67}), 27: (1, {'@': 67}), 13: (1, {'@': 67}), 7: (1, {'@': 67}), 14: (1, {'@': 67}), 26: (1, {'@': 67}), 16: (1, {'@': 67}), 9: (1, {'@': 67}), 19: (1, {'@': 67}), 29: (1, {'@': 67})}, 483: {20: (1, {'@': 169}), 22: (1, {'@': 169}), 1: (1, {'@': 169}), 23: (1, {'@': 169}), 24: (1, {'@': 169}), 25: (1, {'@': 169}), 10: (1, {'@': 169}), 11: (1, {'@': 169}), 3: (1, {'@': 169}), 28: (1, {'@': 169}), 15: (1, {'@': 169}), 30: (1, {'@': 169}), 5: (1, {'@': 169}), 32: (1, {'@': 169}), 17: (1, {'@': 169}), 18: (1, {'@': 169}), 33: (1, {'@': 169}), 34: (1, {'@': 169}), 21: (1, {'@': 169}), 8: (1, {'@': 169}), 12: (1, {'@': 169}), 27: (1, {'@': 169}), 31: (1, {'@': 169}), 7: (1, {'@': 169}), 9: (1, {'@': 169}), 26: (1, {'@': 169}), 13: (1, {'@': 169}), 14: (1, {'@': 169}), 29: (1, {'@': 169}), 16: (1, {'@': 169}), 19: (1, {'@': 169})}, 484: {70: (0, 459), 69: (0, 514), 27: (0, 458), 12: (0, 532), 8: (0, 80), 31: (0, 524), 21: (0, 486)}, 485: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 418), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 486: {8: (1, {'@': 312}), 31: (1, {'@': 312}), 21: (1, {'@': 312}), 12: (1, {'@': 312}), 14: (1, {'@': 312}), 27: (1, {'@': 312}), 28: (1, {'@': 312}), 40: (1, {'@': 312}), 29: (1, {'@': 312}), 1: (1, {'@': 312}), 62: (1, {'@': 312}), 55: (1, {'@': 312}), 35: (1, {'@': 312}), 64: (1, {'@': 312}), 49: (1, {'@': 312}), 54: (1, {'@': 312}), 7: (1, {'@': 312}), 19: (1, {'@': 312}), 9: (1, {'@': 312}), 16: (1, {'@': 312}), 86: (1, {'@': 312}), 87: (1, {'@': 312})}, 487: {35: (1, {'@': 307}), 55: (1, {'@': 307}), 29: (1, {'@': 307})}, 488: {30: (0, 414), 102: (0, 405), 103: (0, 416), 23: (0, 406), 15: (0, 408), 22: (0, 411), 24: (1, {'@': 81}), 25: (1, {'@': 81}), 20: (1, {'@': 81}), 10: (1, {'@': 81}), 11: (1, {'@': 81}), 33: (1, {'@': 81}), 21: (1, {'@': 81}), 31: (1, {'@': 81}), 8: (1, {'@': 81}), 12: (1, {'@': 81}), 27: (1, {'@': 81}), 7: (1, {'@': 81}), 9: (1, {'@': 81}), 26: (1, {'@': 81}), 13: (1, {'@': 81}), 14: (1, {'@': 81}), 29: (1, {'@': 81}), 16: (1, {'@': 81}), 19: (1, {'@': 81})}, 489: {20: (1, {'@': 64}), 8: (1, {'@': 64}), 21: (1, {'@': 64}), 12: (1, {'@': 64}), 31: (1, {'@': 64}), 27: (1, {'@': 64}), 13: (1, {'@': 64}), 7: (1, {'@': 64}), 14: (1, {'@': 64}), 26: (1, {'@': 64}), 16: (1, {'@': 64}), 9: (1, {'@': 64}), 19: (1, {'@': 64}), 29: (1, {'@': 64})}, 490: {28: (1, {'@': 117}), 20: (1, {'@': 117}), 15: (1, {'@': 117}), 22: (1, {'@': 117}), 30: (1, {'@': 117}), 1: (1, {'@': 117}), 23: (1, {'@': 117}), 5: (1, {'@': 117}), 24: (1, {'@': 117}), 25: (1, {'@': 117}), 32: (1, {'@': 117}), 10: (1, {'@': 117}), 11: (1, {'@': 117}), 17: (1, {'@': 117}), 18: (1, {'@': 117}), 3: (1, {'@': 117}), 33: (1, {'@': 117}), 34: (1, {'@': 117}), 21: (1, {'@': 117}), 8: (1, {'@': 117}), 12: (1, {'@': 117}), 27: (1, {'@': 117}), 31: (1, {'@': 117}), 7: (1, {'@': 117}), 9: (1, {'@': 117}), 26: (1, {'@': 117}), 13: (1, {'@': 117}), 14: (1, {'@': 117}), 29: (1, {'@': 117}), 16: (1, {'@': 117}), 19: (1, {'@': 117})}, 491: {20: (1, {'@': 59}), 22: (1, {'@': 59}), 1: (1, {'@': 59}), 23: (1, {'@': 59}), 24: (1, {'@': 59}), 25: (1, {'@': 59}), 10: (1, {'@': 59}), 11: (1, {'@': 59}), 3: (1, {'@': 59}), 28: (1, {'@': 59}), 40: (1, {'@': 59}), 15: (1, {'@': 59}), 30: (1, {'@': 59}), 5: (1, {'@': 59}), 32: (1, {'@': 59}), 17: (1, {'@': 59}), 18: (1, {'@': 59}), 33: (1, {'@': 59}), 34: (1, {'@': 59}), 21: (1, {'@': 59}), 8: (1, {'@': 59}), 12: (1, {'@': 59}), 27: (1, {'@': 59}), 31: (1, {'@': 59}), 35: (1, {'@': 59}), 55: (1, {'@': 59}), 29: (1, {'@': 59}), 7: (1, {'@': 59}), 9: (1, {'@': 59}), 26: (1, {'@': 59}), 13: (1, {'@': 59}), 14: (1, {'@': 59}), 16: (1, {'@': 59}), 19: (1, {'@': 59}), 86: (1, {'@': 59})}, 492: {35: (1, {'@': 118}), 55: (1, {'@': 118}), 29: (1, {'@': 118})}, 493: {69: (0, 514), 12: (0, 532), 21: (0, 486), 31: (0, 524), 70: (0, 34), 19: (1, {'@': 43})}, 494: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 41: (0, 502), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 28: (0, 523), 68: (0, 109)}, 495: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 119), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 70: (0, 123), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 496: {20: (1, {'@': 70}), 33: (1, {'@': 70}), 8: (1, {'@': 70}), 21: (1, {'@': 70}), 12: (1, {'@': 70}), 27: (1, {'@': 70}), 31: (1, {'@': 70}), 7: (1, {'@': 70}), 9: (1, {'@': 70}), 26: (1, {'@': 70}), 13: (1, {'@': 70}), 14: (1, {'@': 70}), 29: (1, {'@': 70}), 16: (1, {'@': 70}), 19: (1, {'@': 70})}, 497: {20: (1, {'@': 66}), 8: (1, {'@': 66}), 21: (1, {'@': 66}), 12: (1, {'@': 66}), 31: (1, {'@': 66}), 27: (1, {'@': 66}), 13: (1, {'@': 66}), 7: (1, {'@': 66}), 14: (1, {'@': 66}), 26: (1, {'@': 66}), 16: (1, {'@': 66}), 9: (1, {'@': 66}), 19: (1, {'@': 66}), 29: (1, {'@': 66})}, 498: {35: (0, 84), 55: (0, 492), 37: (0, 111), 29: (0, 491), 76: (0, 116)}, 499: {20: (1, {'@': 119}), 22: (1, {'@': 119}), 1: (1, {'@': 119}), 23: (1, {'@': 119}), 24: (1, {'@': 119}), 25: (1, {'@': 119}), 10: (1, {'@': 119}), 11: (1, {'@': 119}), 3: (1, {'@': 119}), 28: (1, {'@': 119}), 15: (1, {'@': 119}), 30: (1, {'@': 119}), 5: (1, {'@': 119}), 32: (1, {'@': 119}), 17: (1, {'@': 119}), 18: (1, {'@': 119}), 33: (1, {'@': 119}), 34: (1, {'@': 119}), 21: (1, {'@': 119}), 8: (1, {'@': 119}), 12: (1, {'@': 119}), 27: (1, {'@': 119}), 31: (1, {'@': 119}), 7: (1, {'@': 119}), 9: (1, {'@': 119}), 26: (1, {'@': 119}), 13: (1, {'@': 119}), 14: (1, {'@': 119}), 29: (1, {'@': 119}), 16: (1, {'@': 119}), 19: (1, {'@': 119})}, 500: {86: (0, 533), 69: (0, 514), 70: (0, 79), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 501: {28: (1, {'@': 278}), 40: (1, {'@': 278}), 29: (1, {'@': 278}), 1: (1, {'@': 278}), 62: (1, {'@': 278}), 55: (1, {'@': 278}), 35: (1, {'@': 278}), 64: (1, {'@': 278}), 49: (1, {'@': 278}), 54: (1, {'@': 278}), 21: (1, {'@': 278}), 31: (1, {'@': 278}), 12: (1, {'@': 278})}, 502: {20: (1, {'@': 63}), 8: (1, {'@': 63}), 21: (1, {'@': 63}), 12: (1, {'@': 63}), 31: (1, {'@': 63}), 27: (1, {'@': 63}), 13: (1, {'@': 63}), 7: (1, {'@': 63}), 14: (1, {'@': 63}), 26: (1, {'@': 63}), 16: (1, {'@': 63}), 9: (1, {'@': 63}), 19: (1, {'@': 63}), 29: (1, {'@': 63})}, 503: {51: (0, 401), 64: (0, 511)}, 504: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 36: (0, 92), 41: (0, 152), 70: (0, 96), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 505: {8: (1, {'@': 315}), 31: (1, {'@': 315}), 21: (1, {'@': 315}), 12: (1, {'@': 315}), 14: (1, {'@': 315}), 27: (1, {'@': 315}), 28: (1, {'@': 315}), 40: (1, {'@': 315}), 29: (1, {'@': 315}), 1: (1, {'@': 315}), 62: (1, {'@': 315}), 55: (1, {'@': 315}), 35: (1, {'@': 315}), 64: (1, {'@': 315}), 49: (1, {'@': 315}), 54: (1, {'@': 315}), 7: (1, {'@': 315}), 19: (1, {'@': 315}), 9: (1, {'@': 315}), 16: (1, {'@': 315}), 86: (1, {'@': 315}), 87: (1, {'@': 315})}, 506: {14: (1, {'@': 334}), 21: (1, {'@': 334}), 31: (1, {'@': 334}), 12: (1, {'@': 334}), 26: (1, {'@': 334}), 27: (1, {'@': 334}), 8: (1, {'@': 334})}, 507: {1: (0, 540), 36: (0, 5), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 70: (0, 38), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 78: (0, 44), 29: (0, 491), 14: (0, 47), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 508: {20: (1, {'@': 232}), 22: (1, {'@': 232}), 1: (1, {'@': 232}), 23: (1, {'@': 232}), 24: (1, {'@': 232}), 25: (1, {'@': 232}), 10: (1, {'@': 232}), 11: (1, {'@': 232}), 3: (1, {'@': 232}), 28: (1, {'@': 232}), 15: (1, {'@': 232}), 30: (1, {'@': 232}), 5: (1, {'@': 232}), 32: (1, {'@': 232}), 17: (1, {'@': 232}), 18: (1, {'@': 232}), 33: (1, {'@': 232}), 34: (1, {'@': 232}), 21: (1, {'@': 232}), 8: (1, {'@': 232}), 12: (1, {'@': 232}), 27: (1, {'@': 232}), 31: (1, {'@': 232}), 7: (1, {'@': 232}), 9: (1, {'@': 232}), 26: (1, {'@': 232}), 13: (1, {'@': 232}), 14: (1, {'@': 232}), 29: (1, {'@': 232}), 16: (1, {'@': 232}), 19: (1, {'@': 232})}, 509: {16: (1, {'@': 51}), 29: (1, {'@': 51}), 31: (1, {'@': 51}), 21: (1, {'@': 51}), 12: (1, {'@': 51}), 19: (1, {'@': 51})}, 510: {}, 511: {20: (1, {'@': 328}), 22: (1, {'@': 328}), 1: (1, {'@': 328}), 23: (1, {'@': 328}), 85: (1, {'@': 328}), 24: (1, {'@': 328}), 25: (1, {'@': 328}), 10: (1, {'@': 328}), 11: (1, {'@': 328}), 64: (1, {'@': 328}), 3: (1, {'@': 328}), 28: (1, {'@': 328}), 15: (1, {'@': 328}), 30: (1, {'@': 328}), 5: (1, {'@': 328}), 32: (1, {'@': 328}), 17: (1, {'@': 328}), 18: (1, {'@': 328}), 33: (1, {'@': 328}), 34: (1, {'@': 328}), 21: (1, {'@': 328}), 8: (1, {'@': 328}), 12: (1, {'@': 328}), 27: (1, {'@': 328}), 31: (1, {'@': 328}), 7: (1, {'@': 328}), 9: (1, {'@': 328}), 13: (1, {'@': 328}), 14: (1, {'@': 328}), 16: (1, {'@': 328}), 19: (1, {'@': 328}), 26: (1, {'@': 328}), 29: (1, {'@': 328})}, 512: {7: (0, 196)}, 513: {19: (1, {'@': 46})}, 514: {31: (0, 254), 21: (0, 505), 12: (0, 525), 8: (1, {'@': 58}), 14: (1, {'@': 58}), 27: (1, {'@': 58}), 28: (1, {'@': 58}), 40: (1, {'@': 58}), 29: (1, {'@': 58}), 1: (1, {'@': 58}), 62: (1, {'@': 58}), 55: (1, {'@': 58}), 35: (1, {'@': 58}), 64: (1, {'@': 58}), 49: (1, {'@': 58}), 54: (1, {'@': 58}), 7: (1, {'@': 58}), 19: (1, {'@': 58}), 9: (1, {'@': 58}), 16: (1, {'@': 58}), 86: (1, {'@': 58}), 87: (1, {'@': 58})}, 515: {20: (1, {'@': 225}), 22: (1, {'@': 225}), 1: (1, {'@': 225}), 23: (1, {'@': 225}), 24: (1, {'@': 225}), 25: (1, {'@': 225}), 10: (1, {'@': 225}), 11: (1, {'@': 225}), 3: (1, {'@': 225}), 28: (1, {'@': 225}), 15: (1, {'@': 225}), 30: (1, {'@': 225}), 5: (1, {'@': 225}), 32: (1, {'@': 225}), 17: (1, {'@': 225}), 18: (1, {'@': 225}), 33: (1, {'@': 225}), 34: (1, {'@': 225}), 21: (1, {'@': 225}), 8: (1, {'@': 225}), 12: (1, {'@': 225}), 27: (1, {'@': 225}), 31: (1, {'@': 225}), 7: (1, {'@': 225}), 9: (1, {'@': 225}), 26: (1, {'@': 225}), 13: (1, {'@': 225}), 14: (1, {'@': 225}), 29: (1, {'@': 225}), 16: (1, {'@': 225}), 19: (1, {'@': 225})}, 516: {20: (1, {'@': 128}), 22: (1, {'@': 128}), 1: (1, {'@': 128}), 23: (1, {'@': 128}), 24: (1, {'@': 128}), 25: (1, {'@': 128}), 10: (1, {'@': 128}), 11: (1, {'@': 128}), 3: (1, {'@': 128}), 28: (1, {'@': 128}), 15: (1, {'@': 128}), 30: (1, {'@': 128}), 5: (1, {'@': 128}), 32: (1, {'@': 128}), 17: (1, {'@': 128}), 18: (1, {'@': 128}), 33: (1, {'@': 128}), 34: (1, {'@': 128}), 21: (1, {'@': 128}), 8: (1, {'@': 128}), 12: (1, {'@': 128}), 27: (1, {'@': 128}), 31: (1, {'@': 128}), 7: (1, {'@': 128}), 9: (1, {'@': 128}), 26: (1, {'@': 128}), 13: (1, {'@': 128}), 14: (1, {'@': 128}), 29: (1, {'@': 128}), 16: (1, {'@': 128}), 19: (1, {'@': 128})}, 517: {7: (0, 236)}, 518: {16: (1, {'@': 302}), 29: (1, {'@': 302}), 31: (1, {'@': 302}), 21: (1, {'@': 302}), 12: (1, {'@': 302}), 19: (1, {'@': 302})}, 519: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 36: (0, 107), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 520: {}, 521: {70: (0, 484), 27: (0, 18), 8: (0, 127), 69: (0, 514), 12: (0, 532), 31: (0, 524), 21: (0, 486)}, 522: {28: (1, {'@': 105}), 20: (1, {'@': 105}), 15: (1, {'@': 105}), 22: (1, {'@': 105}), 30: (1, {'@': 105}), 1: (1, {'@': 105}), 23: (1, {'@': 105}), 5: (1, {'@': 105}), 24: (1, {'@': 105}), 25: (1, {'@': 105}), 32: (1, {'@': 105}), 10: (1, {'@': 105}), 11: (1, {'@': 105}), 17: (1, {'@': 105}), 18: (1, {'@': 105}), 3: (1, {'@': 105}), 33: (1, {'@': 105}), 34: (1, {'@': 105}), 21: (1, {'@': 105}), 8: (1, {'@': 105}), 12: (1, {'@': 105}), 27: (1, {'@': 105}), 31: (1, {'@': 105}), 7: (1, {'@': 105}), 9: (1, {'@': 105}), 26: (1, {'@': 105}), 13: (1, {'@': 105}), 14: (1, {'@': 105}), 29: (1, {'@': 105}), 16: (1, {'@': 105}), 19: (1, {'@': 105})}, 523: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 167), 40: (0, 475), 44: (0, 224), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214)}, 524: {8: (1, {'@': 310}), 31: (1, {'@': 310}), 21: (1, {'@': 310}), 12: (1, {'@': 310}), 14: (1, {'@': 310}), 27: (1, {'@': 310}), 28: (1, {'@': 310}), 40: (1, {'@': 310}), 29: (1, {'@': 310}), 1: (1, {'@': 310}), 62: (1, {'@': 310}), 55: (1, {'@': 310}), 35: (1, {'@': 310}), 64: (1, {'@': 310}), 49: (1, {'@': 310}), 54: (1, {'@': 310}), 7: (1, {'@': 310}), 19: (1, {'@': 310}), 9: (1, {'@': 310}), 16: (1, {'@': 310}), 86: (1, {'@': 310}), 87: (1, {'@': 310})}, 525: {8: (1, {'@': 314}), 31: (1, {'@': 314}), 21: (1, {'@': 314}), 12: (1, {'@': 314}), 14: (1, {'@': 314}), 27: (1, {'@': 314}), 28: (1, {'@': 314}), 40: (1, {'@': 314}), 29: (1, {'@': 314}), 1: (1, {'@': 314}), 62: (1, {'@': 314}), 55: (1, {'@': 314}), 35: (1, {'@': 314}), 64: (1, {'@': 314}), 49: (1, {'@': 314}), 54: (1, {'@': 314}), 7: (1, {'@': 314}), 19: (1, {'@': 314}), 9: (1, {'@': 314}), 16: (1, {'@': 314}), 86: (1, {'@': 314}), 87: (1, {'@': 314})}, 526: {28: (1, {'@': 116}), 20: (1, {'@': 116}), 15: (1, {'@': 116}), 22: (1, {'@': 116}), 30: (1, {'@': 116}), 1: (1, {'@': 116}), 23: (1, {'@': 116}), 5: (1, {'@': 116}), 24: (1, {'@': 116}), 25: (1, {'@': 116}), 32: (1, {'@': 116}), 10: (1, {'@': 116}), 11: (1, {'@': 116}), 17: (1, {'@': 116}), 18: (1, {'@': 116}), 3: (1, {'@': 116}), 33: (1, {'@': 116}), 34: (1, {'@': 116}), 21: (1, {'@': 116}), 8: (1, {'@': 116}), 12: (1, {'@': 116}), 27: (1, {'@': 116}), 31: (1, {'@': 116}), 7: (1, {'@': 116}), 9: (1, {'@': 116}), 26: (1, {'@': 116}), 13: (1, {'@': 116}), 14: (1, {'@': 116}), 29: (1, {'@': 116}), 16: (1, {'@': 116}), 19: (1, {'@': 116})}, 527: {69: (0, 514), 12: (0, 532), 95: (0, 302), 96: (0, 457), 27: (0, 324), 16: (0, 460), 31: (0, 524), 70: (0, 64), 21: (0, 486)}, 528: {20: (1, {'@': 215}), 22: (1, {'@': 215}), 1: (1, {'@': 215}), 23: (1, {'@': 215}), 24: (1, {'@': 215}), 25: (1, {'@': 215}), 10: (1, {'@': 215}), 11: (1, {'@': 215}), 3: (1, {'@': 215}), 28: (1, {'@': 215}), 15: (1, {'@': 215}), 30: (1, {'@': 215}), 5: (1, {'@': 215}), 32: (1, {'@': 215}), 17: (1, {'@': 215}), 18: (1, {'@': 215}), 33: (1, {'@': 215}), 34: (1, {'@': 215}), 21: (1, {'@': 215}), 8: (1, {'@': 215}), 12: (1, {'@': 215}), 27: (1, {'@': 215}), 31: (1, {'@': 215}), 7: (1, {'@': 215}), 9: (1, {'@': 215}), 26: (1, {'@': 215}), 13: (1, {'@': 215}), 14: (1, {'@': 215}), 29: (1, {'@': 215}), 16: (1, {'@': 215}), 19: (1, {'@': 215})}, 529: {7: (0, 150)}, 530: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 36: (0, 104), 48: (0, 204), 49: (0, 217), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 531: {28: (1, {'@': 107}), 20: (1, {'@': 107}), 15: (1, {'@': 107}), 22: (1, {'@': 107}), 30: (1, {'@': 107}), 1: (1, {'@': 107}), 23: (1, {'@': 107}), 5: (1, {'@': 107}), 24: (1, {'@': 107}), 25: (1, {'@': 107}), 32: (1, {'@': 107}), 10: (1, {'@': 107}), 11: (1, {'@': 107}), 17: (1, {'@': 107}), 18: (1, {'@': 107}), 3: (1, {'@': 107}), 33: (1, {'@': 107}), 34: (1, {'@': 107}), 21: (1, {'@': 107}), 8: (1, {'@': 107}), 12: (1, {'@': 107}), 27: (1, {'@': 107}), 31: (1, {'@': 107}), 7: (1, {'@': 107}), 9: (1, {'@': 107}), 26: (1, {'@': 107}), 13: (1, {'@': 107}), 14: (1, {'@': 107}), 29: (1, {'@': 107}), 16: (1, {'@': 107}), 19: (1, {'@': 107})}, 532: {8: (1, {'@': 311}), 31: (1, {'@': 311}), 21: (1, {'@': 311}), 12: (1, {'@': 311}), 14: (1, {'@': 311}), 27: (1, {'@': 311}), 28: (1, {'@': 311}), 40: (1, {'@': 311}), 29: (1, {'@': 311}), 1: (1, {'@': 311}), 62: (1, {'@': 311}), 55: (1, {'@': 311}), 35: (1, {'@': 311}), 64: (1, {'@': 311}), 49: (1, {'@': 311}), 54: (1, {'@': 311}), 7: (1, {'@': 311}), 19: (1, {'@': 311}), 9: (1, {'@': 311}), 16: (1, {'@': 311}), 86: (1, {'@': 311}), 87: (1, {'@': 311})}, 533: {1: (0, 540), 35: (0, 174), 12: (0, 532), 37: (0, 268), 38: (0, 241), 69: (0, 514), 39: (0, 325), 21: (0, 486), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 50: (0, 522), 31: (0, 524), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 36: (0, 353), 70: (0, 354), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 534: {7: (0, 307)}, 535: {1: (1, {'@': 340}), 7: (1, {'@': 340}), 8: (1, {'@': 340}), 9: (1, {'@': 340}), 10: (1, {'@': 340}), 11: (1, {'@': 340}), 12: (1, {'@': 340}), 13: (1, {'@': 340}), 14: (1, {'@': 340}), 15: (1, {'@': 340}), 5: (1, {'@': 340}), 16: (1, {'@': 340}), 17: (1, {'@': 340}), 18: (1, {'@': 340}), 19: (1, {'@': 340}), 20: (1, {'@': 340}), 21: (1, {'@': 340}), 22: (1, {'@': 340}), 23: (1, {'@': 340}), 24: (1, {'@': 340}), 25: (1, {'@': 340}), 26: (1, {'@': 340}), 3: (1, {'@': 340}), 27: (1, {'@': 340}), 28: (1, {'@': 340}), 29: (1, {'@': 340}), 30: (1, {'@': 340}), 31: (1, {'@': 340}), 32: (1, {'@': 340}), 33: (1, {'@': 340}), 34: (1, {'@': 340})}, 536: {37: (0, 293), 29: (0, 491)}, 537: {16: (1, {'@': 303}), 29: (1, {'@': 303}), 31: (1, {'@': 303}), 21: (1, {'@': 303}), 12: (1, {'@': 303}), 19: (1, {'@': 303})}, 538: {20: (1, {'@': 138}), 22: (1, {'@': 138}), 1: (1, {'@': 138}), 23: (1, {'@': 138}), 24: (1, {'@': 138}), 25: (1, {'@': 138}), 10: (1, {'@': 138}), 11: (1, {'@': 138}), 3: (1, {'@': 138}), 28: (1, {'@': 138}), 15: (1, {'@': 138}), 30: (1, {'@': 138}), 5: (1, {'@': 138}), 32: (1, {'@': 138}), 17: (1, {'@': 138}), 18: (1, {'@': 138}), 33: (1, {'@': 138}), 34: (1, {'@': 138}), 21: (1, {'@': 138}), 8: (1, {'@': 138}), 12: (1, {'@': 138}), 27: (1, {'@': 138}), 31: (1, {'@': 138}), 7: (1, {'@': 138}), 9: (1, {'@': 138}), 26: (1, {'@': 138}), 13: (1, {'@': 138}), 14: (1, {'@': 138}), 29: (1, {'@': 138}), 16: (1, {'@': 138}), 19: (1, {'@': 138})}, 539: {20: (1, {'@': 212}), 22: (1, {'@': 212}), 1: (1, {'@': 212}), 23: (1, {'@': 212}), 24: (1, {'@': 212}), 25: (1, {'@': 212}), 10: (1, {'@': 212}), 11: (1, {'@': 212}), 3: (1, {'@': 212}), 28: (1, {'@': 212}), 15: (1, {'@': 212}), 30: (1, {'@': 212}), 5: (1, {'@': 212}), 32: (1, {'@': 212}), 17: (1, {'@': 212}), 18: (1, {'@': 212}), 33: (1, {'@': 212}), 34: (1, {'@': 212}), 21: (1, {'@': 212}), 8: (1, {'@': 212}), 12: (1, {'@': 212}), 27: (1, {'@': 212}), 31: (1, {'@': 212}), 7: (1, {'@': 212}), 9: (1, {'@': 212}), 26: (1, {'@': 212}), 13: (1, {'@': 212}), 14: (1, {'@': 212}), 29: (1, {'@': 212}), 16: (1, {'@': 212}), 19: (1, {'@': 212})}, 540: {1: (0, 540), 87: (0, 53), 35: (0, 174), 12: (0, 532), 36: (0, 359), 70: (0, 363), 38: (0, 241), 40: (0, 475), 39: (0, 325), 37: (0, 268), 42: (0, 13), 44: (0, 224), 69: (0, 514), 45: (0, 221), 46: (0, 185), 41: (0, 152), 48: (0, 204), 49: (0, 217), 88: (0, 385), 50: (0, 522), 31: (0, 524), 52: (0, 216), 54: (0, 483), 51: (0, 545), 43: (0, 206), 59: (0, 496), 62: (0, 485), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 21: (0, 486), 47: (0, 205), 53: (0, 488), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 60: (0, 490), 61: (0, 544), 63: (0, 526), 8: (0, 388), 68: (0, 109)}, 541: {4: (0, 470), 5: (0, 153), 20: (1, {'@': 200}), 21: (1, {'@': 200}), 22: (1, {'@': 200}), 1: (1, {'@': 200}), 23: (1, {'@': 200}), 7: (1, {'@': 200}), 8: (1, {'@': 200}), 9: (1, {'@': 200}), 24: (1, {'@': 200}), 10: (1, {'@': 200}), 11: (1, {'@': 200}), 12: (1, {'@': 200}), 25: (1, {'@': 200}), 26: (1, {'@': 200}), 3: (1, {'@': 200}), 27: (1, {'@': 200}), 13: (1, {'@': 200}), 14: (1, {'@': 200}), 28: (1, {'@': 200}), 29: (1, {'@': 200}), 15: (1, {'@': 200}), 30: (1, {'@': 200}), 31: (1, {'@': 200}), 16: (1, {'@': 200}), 32: (1, {'@': 200}), 17: (1, {'@': 200}), 18: (1, {'@': 200}), 19: (1, {'@': 200}), 33: (1, {'@': 200}), 34: (1, {'@': 200})}, 542: {8: (0, 299)}, 543: {20: (1, {'@': 125}), 22: (1, {'@': 125}), 1: (1, {'@': 125}), 23: (1, {'@': 125}), 24: (1, {'@': 125}), 25: (1, {'@': 125}), 10: (1, {'@': 125}), 11: (1, {'@': 125}), 3: (1, {'@': 125}), 28: (1, {'@': 125}), 15: (1, {'@': 125}), 30: (1, {'@': 125}), 5: (1, {'@': 125}), 32: (1, {'@': 125}), 17: (1, {'@': 125}), 18: (1, {'@': 125}), 33: (1, {'@': 125}), 34: (1, {'@': 125}), 21: (1, {'@': 125}), 8: (1, {'@': 125}), 12: (1, {'@': 125}), 27: (1, {'@': 125}), 31: (1, {'@': 125}), 7: (1, {'@': 125}), 9: (1, {'@': 125}), 26: (1, {'@': 125}), 13: (1, {'@': 125}), 14: (1, {'@': 125}), 29: (1, {'@': 125}), 16: (1, {'@': 125}), 19: (1, {'@': 125})}, 544: {28: (1, {'@': 108}), 20: (1, {'@': 108}), 15: (1, {'@': 108}), 22: (1, {'@': 108}), 30: (1, {'@': 108}), 1: (1, {'@': 108}), 23: (1, {'@': 108}), 5: (1, {'@': 108}), 24: (1, {'@': 108}), 25: (1, {'@': 108}), 32: (1, {'@': 108}), 10: (1, {'@': 108}), 11: (1, {'@': 108}), 17: (1, {'@': 108}), 18: (1, {'@': 108}), 3: (1, {'@': 108}), 33: (1, {'@': 108}), 34: (1, {'@': 108}), 21: (1, {'@': 108}), 8: (1, {'@': 108}), 12: (1, {'@': 108}), 27: (1, {'@': 108}), 31: (1, {'@': 108}), 7: (1, {'@': 108}), 9: (1, {'@': 108}), 26: (1, {'@': 108}), 13: (1, {'@': 108}), 14: (1, {'@': 108}), 29: (1, {'@': 108}), 16: (1, {'@': 108}), 19: (1, {'@': 108})}, 545: {5: (0, 344), 64: (0, 444), 85: (0, 412), 20: (1, {'@': 120}), 22: (1, {'@': 120}), 1: (1, {'@': 120}), 23: (1, {'@': 120}), 24: (1, {'@': 120}), 25: (1, {'@': 120}), 10: (1, {'@': 120}), 11: (1, {'@': 120}), 3: (1, {'@': 120}), 28: (1, {'@': 120}), 15: (1, {'@': 120}), 30: (1, {'@': 120}), 32: (1, {'@': 120}), 17: (1, {'@': 120}), 18: (1, {'@': 120}), 33: (1, {'@': 120}), 34: (1, {'@': 120}), 21: (1, {'@': 120}), 8: (1, {'@': 120}), 12: (1, {'@': 120}), 27: (1, {'@': 120}), 31: (1, {'@': 120}), 7: (1, {'@': 120}), 9: (1, {'@': 120}), 26: (1, {'@': 120}), 13: (1, {'@': 120}), 14: (1, {'@': 120}), 29: (1, {'@': 120}), 16: (1, {'@': 120}), 19: (1, {'@': 120})}, 546: {1: (0, 540), 35: (0, 174), 37: (0, 268), 38: (0, 241), 39: (0, 325), 40: (0, 475), 41: (0, 152), 42: (0, 13), 43: (0, 206), 44: (0, 224), 45: (0, 221), 46: (0, 185), 47: (0, 205), 48: (0, 204), 49: (0, 217), 8: (0, 139), 50: (0, 522), 51: (0, 545), 52: (0, 216), 53: (0, 488), 54: (0, 483), 55: (0, 499), 29: (0, 491), 56: (0, 477), 57: (0, 531), 58: (0, 547), 59: (0, 496), 60: (0, 490), 61: (0, 544), 36: (0, 506), 62: (0, 485), 63: (0, 526), 64: (0, 511), 65: (0, 211), 66: (0, 214), 67: (0, 227), 28: (0, 523), 68: (0, 109)}, 547: {28: (1, {'@': 114}), 20: (1, {'@': 114}), 15: (1, {'@': 114}), 22: (1, {'@': 114}), 30: (1, {'@': 114}), 1: (1, {'@': 114}), 23: (1, {'@': 114}), 5: (1, {'@': 114}), 24: (1, {'@': 114}), 25: (1, {'@': 114}), 32: (1, {'@': 114}), 10: (1, {'@': 114}), 11: (1, {'@': 114}), 17: (1, {'@': 114}), 18: (1, {'@': 114}), 3: (1, {'@': 114}), 33: (1, {'@': 114}), 34: (1, {'@': 114}), 21: (1, {'@': 114}), 8: (1, {'@': 114}), 12: (1, {'@': 114}), 27: (1, {'@': 114}), 31: (1, {'@': 114}), 7: (1, {'@': 114}), 9: (1, {'@': 114}), 26: (1, {'@': 114}), 13: (1, {'@': 114}), 14: (1, {'@': 114}), 29: (1, {'@': 114}), 16: (1, {'@': 114}), 19: (1, {'@': 114})}, 548: {37: (0, 19), 29: (0, 491), 81: (0, 59), 82: (0, 421), 16: (1, {'@': 47}), 19: (1, {'@': 47}), 31: (1, {'@': 47}), 21: (1, {'@': 47}), 12: (1, {'@': 47})}, 549: {27: (0, 8), 71: (0, 176), 8: (0, 443), 70: (0, 445), 12: (0, 532), 69: (0, 514), 21: (0, 486), 31: (0, 524)}}, 'start_states': {'eval': 267, 'module': 274}, 'end_states': {'module': 510, 'eval': 520}}, 'options': {'debug': False, 'keep_all_tokens': False, 'tree_class': None, 'cache': False, 'postlex': None, 'parser': 'lalr', 'lexer': 'contextual', 'transformer': None, 'start': ['eval', 'module'], 'priority': 'normal', 'ambiguity': 'auto', 'regex': False, 'propagate_positions': False, 'lexer_callbacks': {}, 'maybe_placeholders': False, 'edit_terminals': None, 'g_regex_flags': 0, 'use_bytes': False, 'import_paths': [], 'source_path': None}, '__type__': 'ParsingFrontend'}, 'rules': [{'@': 42}, {'@': 43}, {'@': 44}, {'@': 45}, {'@': 46}, {'@': 47}, {'@': 48}, {'@': 49}, {'@': 50}, {'@': 51}, {'@': 52}, {'@': 53}, {'@': 54}, {'@': 55}, {'@': 56}, {'@': 57}, {'@': 58}, {'@': 59}, {'@': 60}, {'@': 61}, {'@': 62}, {'@': 63}, {'@': 64}, {'@': 65}, {'@': 66}, {'@': 67}, {'@': 68}, {'@': 69}, {'@': 70}, {'@': 71}, {'@': 72}, {'@': 73}, {'@': 74}, {'@': 75}, {'@': 76}, {'@': 77}, {'@': 78}, {'@': 79}, {'@': 80}, {'@': 81}, {'@': 82}, {'@': 83}, {'@': 84}, {'@': 85}, {'@': 86}, {'@': 87}, {'@': 88}, {'@': 89}, {'@': 90}, {'@': 91}, {'@': 92}, {'@': 93}, {'@': 94}, {'@': 95}, {'@': 96}, {'@': 97}, {'@': 98}, {'@': 99}, {'@': 100}, {'@': 101}, {'@': 102}, {'@': 103}, {'@': 104}, {'@': 105}, {'@': 106}, {'@': 107}, {'@': 108}, {'@': 109}, {'@': 110}, {'@': 111}, {'@': 112}, {'@': 113}, {'@': 114}, {'@': 115}, {'@': 116}, {'@': 117}, {'@': 118}, {'@': 119}, {'@': 120}, {'@': 121}, {'@': 122}, {'@': 123}, {'@': 124}, {'@': 125}, {'@': 126}, {'@': 127}, {'@': 128}, {'@': 129}, {'@': 130}, {'@': 131}, {'@': 132}, {'@': 133}, {'@': 134}, {'@': 135}, {'@': 136}, {'@': 137}, {'@': 138}, {'@': 139}, {'@': 140}, {'@': 141}, {'@': 142}, {'@': 143}, {'@': 144}, {'@': 145}, {'@': 146}, {'@': 147}, {'@': 148}, {'@': 149}, {'@': 150}, {'@': 151}, {'@': 152}, {'@': 153}, {'@': 154}, {'@': 155}, {'@': 156}, {'@': 157}, {'@': 158}, {'@': 159}, {'@': 160}, {'@': 161}, {'@': 162}, {'@': 163}, {'@': 164}, {'@': 165}, {'@': 166}, {'@': 167}, {'@': 168}, {'@': 169}, {'@': 170}, {'@': 171}, {'@': 172}, {'@': 173}, {'@': 174}, {'@': 175}, {'@': 176}, {'@': 177}, {'@': 178}, {'@': 179}, {'@': 180}, {'@': 181}, {'@': 182}, {'@': 183}, {'@': 184}, {'@': 185}, {'@': 186}, {'@': 187}, {'@': 188}, {'@': 189}, {'@': 190}, {'@': 191}, {'@': 192}, {'@': 193}, {'@': 194}, {'@': 195}, {'@': 196}, {'@': 197}, {'@': 198}, {'@': 199}, {'@': 200}, {'@': 201}, {'@': 202}, {'@': 203}, {'@': 204}, {'@': 205}, {'@': 206}, {'@': 207}, {'@': 208}, {'@': 209}, {'@': 210}, {'@': 211}, {'@': 212}, {'@': 213}, {'@': 214}, {'@': 215}, {'@': 216}, {'@': 217}, {'@': 218}, {'@': 219}, {'@': 220}, {'@': 221}, {'@': 222}, {'@': 223}, {'@': 224}, {'@': 225}, {'@': 226}, {'@': 227}, {'@': 228}, {'@': 229}, {'@': 230}, {'@': 231}, {'@': 232}, {'@': 233}, {'@': 234}, {'@': 235}, {'@': 236}, {'@': 237}, {'@': 238}, {'@': 239}, {'@': 240}, {'@': 241}, {'@': 242}, {'@': 243}, {'@': 244}, {'@': 245}, {'@': 246}, {'@': 247}, {'@': 248}, {'@': 249}, {'@': 250}, {'@': 251}, {'@': 252}, {'@': 253}, {'@': 254}, {'@': 255}, {'@': 256}, {'@': 257}, {'@': 258}, {'@': 259}, {'@': 260}, {'@': 261}, {'@': 262}, {'@': 263}, {'@': 264}, {'@': 265}, {'@': 266}, {'@': 267}, {'@': 268}, {'@': 269}, {'@': 270}, {'@': 271}, {'@': 272}, {'@': 273}, {'@': 274}, {'@': 275}, {'@': 276}, {'@': 277}, {'@': 278}, {'@': 279}, {'@': 280}, {'@': 281}, {'@': 282}, {'@': 283}, {'@': 284}, {'@': 285}, {'@': 286}, {'@': 287}, {'@': 288}, {'@': 289}, {'@': 290}, {'@': 291}, {'@': 292}, {'@': 293}, {'@': 294}, {'@': 295}, {'@': 296}, {'@': 297}, {'@': 298}, {'@': 299}, {'@': 300}, {'@': 301}, {'@': 302}, {'@': 303}, {'@': 304}, {'@': 305}, {'@': 306}, {'@': 307}, {'@': 308}, {'@': 309}, {'@': 310}, {'@': 311}, {'@': 312}, {'@': 313}, {'@': 314}, {'@': 315}, {'@': 316}, {'@': 317}, {'@': 318}, {'@': 319}, {'@': 320}, {'@': 321}, {'@': 322}, {'@': 323}, {'@': 324}, {'@': 325}, {'@': 326}, {'@': 327}, {'@': 328}, {'@': 329}, {'@': 330}, {'@': 331}, {'@': 332}, {'@': 333}, {'@': 334}, {'@': 335}, {'@': 336}, {'@': 337}, {'@': 338}, {'@': 339}, {'@': 340}, {'@': 341}, {'@': 342}, {'@': 343}, {'@': 344}, {'@': 345}], 'options': {'debug': False, 'keep_all_tokens': False, 'tree_class': None, 'cache': False, 'postlex': None, 'parser': 'lalr', 'lexer': 'contextual', 'transformer': None, 'start': ['eval', 'module'], 'priority': 'normal', 'ambiguity': 'auto', 'regex': False, 'propagate_positions': False, 'lexer_callbacks': {}, 'maybe_placeholders': False, 'edit_terminals': None, 'g_regex_flags': 0, 'use_bytes': False, 'import_paths': [], 'source_path': None}, '__type__': 'Lark'}
)
MEMO = (
{0: {'name': 'STRING_LIT', 'pattern': {'value': '"(?:(?:(?:(?:(?:(?!\\${)([^"\\\\]|\\\\.))+)+|\\${ *(?:"(?:[^"\\\\]|\\\\.)*"|[^}"]+)+ *})|\\$\\{))*"', 'flags': [], '_width': [2, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 1: {'name': 'DECIMAL', 'pattern': {'value': '[0-9]', 'flags': [], '_width': [1, 1], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 2: {'name': 'EXP_MARK', 'pattern': {'value': '(?:e|E)(?:(?:\\+|\\-))?', 'flags': [], '_width': [1, 2], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 3: {'name': '__IGNORE_0', 'pattern': {'value': '[ \t]+', 'flags': [], '_width': [1, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 4: {'name': '__IGNORE_1', 'pattern': {'value': '\\/\\*(.|\n)*?(\\*\\/)', 'flags': [], '_width': [4, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 5: {'name': 'EQUAL', 'pattern': {'value': '=', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 6: {'name': 'LBRACE', 'pattern': {'value': '{', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 7: {'name': 'RBRACE', 'pattern': {'value': '}', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 8: {'name': 'COMMA', 'pattern': {'value': ',', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 9: {'name': '__ANON_0', 'pattern': {'value': '\n', 'flags': [], '_width': [1, 1], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 10: {'name': '__ANON_1', 'pattern': {'value': '#.*\n', 'flags': [], '_width': [2, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 11: {'name': '__ANON_2', 'pattern': {'value': '\\/\\/.*\n', 'flags': [], '_width': [3, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 12: {'name': '__ANON_3', 'pattern': {'value': '[a-zA-Z_][a-zA-Z0-9_-]*', 'flags': [], '_width': [1, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 13: {'name': 'QMARK', 'pattern': {'value': '?', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 14: {'name': 'COLON', 'pattern': {'value': ':', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 15: {'name': 'MINUS', 'pattern': {'value': '-', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 16: {'name': 'BANG', 'pattern': {'value': '!', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 17: {'name': '__ANON_4', 'pattern': {'value': '||', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 18: {'name': '__ANON_5', 'pattern': {'value': '&&', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 19: {'name': 'PLUS', 'pattern': {'value': '+', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 20: {'name': 'STAR', 'pattern': {'value': '*', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 21: {'name': 'SLASH', 'pattern': {'value': '/', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 22: {'name': 'PERCENT', 'pattern': {'value': '%', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 23: {'name': '__ANON_6', 'pattern': {'value': '>=', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 24: {'name': 'MORETHAN', 'pattern': {'value': '>', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 25: {'name': '__ANON_7', 'pattern': {'value': '<=', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 26: {'name': 'LESSTHAN', 'pattern': {'value': '<', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 27: {'name': '__ANON_8', 'pattern': {'value': '==', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 28: {'name': '__ANON_9', 'pattern': {'value': '!=', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 29: {'name': 'LPAR', 'pattern': {'value': '(', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 30: {'name': 'RPAR', 'pattern': {'value': ')', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 31: {'name': 'DOT', 'pattern': {'value': '.', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 32: {'name': 'LSQB', 'pattern': {'value': '[', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 33: {'name': 'RSQB', 'pattern': {'value': ']', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 34: {'name': '__ANON_10', 'pattern': {'value': '<<(?P<heredoc>[a-zA-Z][a-zA-Z0-9._-]+)\n(?:.|\n)+?\n+\\s*(?P=heredoc)', 'flags': [], '_width': [9, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 35: {'name': '__ANON_11', 'pattern': {'value': '<<-(?P<heredoc_trim>[a-zA-Z][a-zA-Z0-9._-]+)\n(?:.|\n)+?\n+\\s*(?P=heredoc_trim)', 'flags': [], '_width': [10, 4294967295], '__type__': 'PatternRE'}, 'priority': 1, '__type__': 'TerminalDef'}, 36: {'name': '__ANON_12', 'pattern': {'value': '...', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 37: {'name': '__ANON_13', 'pattern': {'value': '.*', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 38: {'name': '__ANON_14', 'pattern': {'value': '=>', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 39: {'name': 'FOR', 'pattern': {'value': 'for', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 40: {'name': 'IN', 'pattern': {'value': 'in', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 41: {'name': 'IF', 'pattern': {'value': 'if', 'flags': [], '__type__': 'PatternStr'}, 'priority': 1, '__type__': 'TerminalDef'}, 42: {'origin': {'name': 'module', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'body', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 43: {'origin': {'name': 'module', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'body', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 44: {'origin': {'name': 'module', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'body', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 45: {'origin': {'name': 'module', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'body', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 46: {'origin': {'name': 'eval', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 47: {'origin': {'name': 'body', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__body_star_0', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 48: {'origin': {'name': 'body', '__type__': 'NonTerminal'}, 'expansion': [], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 49: {'origin': {'name': 'attribute', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'EQUAL', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 50: {'origin': {'name': 'attribute', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'EQUAL', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 51: {'origin': {'name': 'block', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': '__block_star_1', '__type__': 'NonTerminal'}, {'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'body', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 52: {'origin': {'name': 'block', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': '__block_star_1', '__type__': 'NonTerminal'}, {'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'body', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 53: {'origin': {'name': 'block', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'body', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 54: {'origin': {'name': 'block', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'body', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 55: {'origin': {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 56: {'origin': {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 57: {'origin': {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 58: {'origin': {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 59: {'origin': {'name': 'identifier', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_3', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 60: {'origin': {'name': 'expression', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'conditional', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 61: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 62: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 63: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 64: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 65: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 66: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 67: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 68: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'QMARK', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'operation', '__type__': 'NonTerminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 69: {'origin': {'name': 'conditional', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'operation', '__type__': 'NonTerminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 70: {'origin': {'name': 'operation', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'unary_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 71: {'origin': {'name': 'operation', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_or_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 72: {'origin': {'name': 'unary_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'MINUS', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expr_term', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 73: {'origin': {'name': 'unary_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'BANG', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expr_term', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 74: {'origin': {'name': 'binary_or_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_and_op', '__type__': 'NonTerminal'}, {'name': '__binary_or_op_star_3', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 75: {'origin': {'name': 'binary_or_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_and_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 76: {'origin': {'name': 'binary_and_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_eq_op', '__type__': 'NonTerminal'}, {'name': '__binary_and_op_star_4', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 77: {'origin': {'name': 'binary_and_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_eq_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 78: {'origin': {'name': 'binary_eq_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_test_op', '__type__': 'NonTerminal'}, {'name': '__binary_eq_op_star_5', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 79: {'origin': {'name': 'binary_eq_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_test_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 80: {'origin': {'name': 'binary_test_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_term_op', '__type__': 'NonTerminal'}, {'name': '__binary_test_op_star_6', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 81: {'origin': {'name': 'binary_test_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_term_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 82: {'origin': {'name': 'binary_term_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_factor_op', '__type__': 'NonTerminal'}, {'name': '__binary_term_op_star_7', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 83: {'origin': {'name': 'binary_term_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_factor_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 84: {'origin': {'name': 'binary_factor_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}, {'name': '__binary_factor_op_star_8', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 85: {'origin': {'name': 'binary_factor_op', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 86: {'origin': {'name': 'binary_or_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_4', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 87: {'origin': {'name': 'binary_and_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_5', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 88: {'origin': {'name': 'binary_term_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'PLUS', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 89: {'origin': {'name': 'binary_term_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'MINUS', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 90: {'origin': {'name': 'binary_factor_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'STAR', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 91: {'origin': {'name': 'binary_factor_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'SLASH', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 92: {'origin': {'name': 'binary_factor_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'PERCENT', 'filter_out': False, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 93: {'origin': {'name': 'binary_test_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_6', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 94: {'origin': {'name': 'binary_test_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'MORETHAN', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 95: {'origin': {'name': 'binary_test_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_7', 'filter_out': False, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 96: {'origin': {'name': 'binary_test_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LESSTHAN', 'filter_out': False, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 97: {'origin': {'name': 'binary_eq_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_8', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 98: {'origin': {'name': 'binary_eq_operator', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_9', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 99: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 100: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 101: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 102: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 103: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'float_lit', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 104: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'int_lit', '__type__': 'NonTerminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 105: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'quoted_template_expr', '__type__': 'NonTerminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 106: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'tuple', '__type__': 'NonTerminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 107: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'object', '__type__': 'NonTerminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 108: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'function_call', '__type__': 'NonTerminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 109: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'index_expr_term', '__type__': 'NonTerminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 110: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'get_attr_expr_term', '__type__': 'NonTerminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 111: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}], 'order': 12, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 112: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'heredoc_template', '__type__': 'NonTerminal'}], 'order': 13, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 113: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'heredoc_template_trim', '__type__': 'NonTerminal'}], 'order': 14, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 114: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'attr_splat_expr_term', '__type__': 'NonTerminal'}], 'order': 15, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 115: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'full_splat_expr_term', '__type__': 'NonTerminal'}], 'order': 16, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 116: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'for_tuple_expr', '__type__': 'NonTerminal'}], 'order': 17, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 117: {'origin': {'name': 'expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'for_object_expr', '__type__': 'NonTerminal'}], 'order': 18, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 118: {'origin': {'name': 'string_lit', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'STRING_LIT', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 119: {'origin': {'name': 'quoted_template_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'STRING_LIT', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 120: {'origin': {'name': 'int_lit', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 121: {'origin': {'name': 'float_lit', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, {'name': 'DOT', 'filter_out': False, '__type__': 'Terminal'}, {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, {'name': 'EXP_MARK', 'filter_out': False, '__type__': 'Terminal'}, {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 122: {'origin': {'name': 'float_lit', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, {'name': 'DOT', 'filter_out': False, '__type__': 'Terminal'}, {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 123: {'origin': {'name': 'float_lit', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, {'name': 'EXP_MARK', 'filter_out': False, '__type__': 'Terminal'}, {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 124: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 125: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 126: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 127: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 128: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 129: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 130: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 131: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 132: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 133: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 134: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 135: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 136: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 12, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 137: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 13, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 138: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 14, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 139: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 15, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 140: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 16, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 141: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 17, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 142: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 18, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 143: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 19, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 144: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 20, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 145: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 21, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 146: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 22, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 147: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 23, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 148: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 24, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 149: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 25, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 150: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 26, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 151: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 27, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 152: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 28, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 153: {'origin': {'name': 'tuple', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 29, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 154: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': '__object_star_11', '__type__': 'NonTerminal'}, {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 155: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': '__object_star_11', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 156: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 157: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 158: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 159: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': '__object_star_11', '__type__': 'NonTerminal'}, {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 160: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': '__object_star_11', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 161: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 162: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 163: {'origin': {'name': 'object', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RBRACE', 'filter_out': True, '__type__': 'Terminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 164: {'origin': {'name': 'object_elem', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'EQUAL', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 165: {'origin': {'name': 'object_elem', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 166: {'origin': {'name': 'object_elem', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'EQUAL', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 167: {'origin': {'name': 'object_elem', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 168: {'origin': {'name': 'heredoc_template', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_10', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 169: {'origin': {'name': 'heredoc_template_trim', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_11', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 170: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'arguments', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 171: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'arguments', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 172: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 173: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 174: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'arguments', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 175: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'arguments', '__type__': 'NonTerminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 176: {'origin': {'name': 'function_call', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'LPAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RPAR', 'filter_out': True, '__type__': 'Terminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 177: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 178: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 179: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'kwarg', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 180: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'kwarg', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 181: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 182: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__tuple_star_10', '__type__': 'NonTerminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 183: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 184: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 185: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'kwarg', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 186: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'kwarg', '__type__': 'NonTerminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 187: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 188: {'origin': {'name': 'arguments', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expression', '__type__': 'NonTerminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 189: {'origin': {'name': 'kwarg', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_12', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 190: {'origin': {'name': 'index_expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}, {'name': 'index', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 191: {'origin': {'name': 'get_attr_expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}, {'name': 'get_attr', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 192: {'origin': {'name': 'attr_splat_expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}, {'name': 'attr_splat', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 193: {'origin': {'name': 'full_splat_expr_term', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'expr_term', '__type__': 'NonTerminal'}, {'name': 'full_splat', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 194: {'origin': {'name': 'index', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 195: {'origin': {'name': 'index', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 196: {'origin': {'name': 'index', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 197: {'origin': {'name': 'index', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 198: {'origin': {'name': 'index', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'DOT', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'int_lit', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 199: {'origin': {'name': 'get_attr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'DOT', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 200: {'origin': {'name': 'attr_splat', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_13', 'filter_out': True, '__type__': 'Terminal'}, {'name': '__attr_splat_star_12', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 201: {'origin': {'name': 'attr_splat', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_13', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 202: {'origin': {'name': 'full_splat', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'STAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': '__full_splat_star_13', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 203: {'origin': {'name': 'full_splat', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'STAR', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'RSQB', 'filter_out': True, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': True, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 204: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 205: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 206: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 207: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 208: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 209: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 210: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 211: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 212: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 213: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 214: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 215: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 216: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 12, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 217: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 13, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 218: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 14, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 219: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 15, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 220: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 16, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 221: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 17, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 222: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 18, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 223: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 19, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 224: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 20, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 225: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 21, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 226: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 22, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 227: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 23, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 228: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 24, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 229: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 25, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 230: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 26, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 231: {'origin': {'name': 'for_tuple_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LSQB', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RSQB', 'filter_out': False, '__type__': 'Terminal'}], 'order': 27, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 232: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 233: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 234: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 235: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 236: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 237: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 238: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 239: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 240: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 241: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 242: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 243: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 244: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 12, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 245: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 13, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 246: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 14, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 247: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 15, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 248: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 16, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 249: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 17, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 250: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 18, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 251: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 19, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 252: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_12', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 20, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 253: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 21, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 254: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 22, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 255: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 23, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 256: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 24, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 257: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 25, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 258: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'for_cond', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 26, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 259: {'origin': {'name': 'for_object_expr', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'LBRACE', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'for_intro', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': '__ANON_14', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'RBRACE', 'filter_out': False, '__type__': 'Terminal'}], 'order': 27, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 260: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 261: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 262: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 263: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 264: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 265: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 266: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 267: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 268: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 8, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 269: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 9, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 270: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 10, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 271: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 11, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 272: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 12, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 273: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 13, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 274: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 14, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 275: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 15, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 276: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 16, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 277: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 17, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 278: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 18, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 279: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 19, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 280: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 20, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 281: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 21, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 282: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 22, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 283: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 23, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 284: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 24, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 285: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 25, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 286: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 26, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 287: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 27, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 288: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 28, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 289: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 29, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 290: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 30, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 291: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 31, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 292: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 32, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 293: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 33, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 294: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 34, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 295: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 35, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 296: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 36, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 297: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 37, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 298: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}], 'order': 38, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 299: {'origin': {'name': 'for_intro', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'FOR', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}, {'name': 'IN', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}, {'name': 'COLON', 'filter_out': False, '__type__': 'Terminal'}], 'order': 39, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 300: {'origin': {'name': 'for_cond', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'IF', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 301: {'origin': {'name': 'for_cond', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'IF', 'filter_out': False, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': True, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 302: {'origin': {'name': '__body_star_0', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'attribute', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 303: {'origin': {'name': '__body_star_0', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'block', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 304: {'origin': {'name': '__body_star_0', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__body_star_0', '__type__': 'NonTerminal'}, {'name': 'attribute', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 305: {'origin': {'name': '__body_star_0', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__body_star_0', '__type__': 'NonTerminal'}, {'name': 'block', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 306: {'origin': {'name': '__block_star_1', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'identifier', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 307: {'origin': {'name': '__block_star_1', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'string_lit', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 308: {'origin': {'name': '__block_star_1', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__block_star_1', '__type__': 'NonTerminal'}, {'name': 'identifier', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 309: {'origin': {'name': '__block_star_1', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__block_star_1', '__type__': 'NonTerminal'}, {'name': 'string_lit', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 310: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_0', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 311: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_1', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 312: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__ANON_2', 'filter_out': False, '__type__': 'Terminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 313: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, {'name': '__ANON_0', 'filter_out': False, '__type__': 'Terminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 314: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, {'name': '__ANON_1', 'filter_out': False, '__type__': 'Terminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 315: {'origin': {'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__new_line_or_comment_plus_2', '__type__': 'NonTerminal'}, {'name': '__ANON_2', 'filter_out': False, '__type__': 'Terminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 316: {'origin': {'name': '__binary_or_op_star_3', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_or_operator', '__type__': 'NonTerminal'}, {'name': 'binary_and_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 317: {'origin': {'name': '__binary_or_op_star_3', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_or_op_star_3', '__type__': 'NonTerminal'}, {'name': 'binary_or_operator', '__type__': 'NonTerminal'}, {'name': 'binary_and_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 318: {'origin': {'name': '__binary_and_op_star_4', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_and_operator', '__type__': 'NonTerminal'}, {'name': 'binary_eq_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 319: {'origin': {'name': '__binary_and_op_star_4', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_and_op_star_4', '__type__': 'NonTerminal'}, {'name': 'binary_and_operator', '__type__': 'NonTerminal'}, {'name': 'binary_eq_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 320: {'origin': {'name': '__binary_eq_op_star_5', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_eq_operator', '__type__': 'NonTerminal'}, {'name': 'binary_test_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 321: {'origin': {'name': '__binary_eq_op_star_5', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_eq_op_star_5', '__type__': 'NonTerminal'}, {'name': 'binary_eq_operator', '__type__': 'NonTerminal'}, {'name': 'binary_test_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 322: {'origin': {'name': '__binary_test_op_star_6', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_test_operator', '__type__': 'NonTerminal'}, {'name': 'binary_term_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 323: {'origin': {'name': '__binary_test_op_star_6', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_test_op_star_6', '__type__': 'NonTerminal'}, {'name': 'binary_test_operator', '__type__': 'NonTerminal'}, {'name': 'binary_term_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 324: {'origin': {'name': '__binary_term_op_star_7', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_term_operator', '__type__': 'NonTerminal'}, {'name': 'binary_factor_op', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 325: {'origin': {'name': '__binary_term_op_star_7', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_term_op_star_7', '__type__': 'NonTerminal'}, {'name': 'binary_term_operator', '__type__': 'NonTerminal'}, {'name': 'binary_factor_op', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 326: {'origin': {'name': '__binary_factor_op_star_8', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'binary_factor_operator', '__type__': 'NonTerminal'}, {'name': 'expr_term', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 327: {'origin': {'name': '__binary_factor_op_star_8', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__binary_factor_op_star_8', '__type__': 'NonTerminal'}, {'name': 'binary_factor_operator', '__type__': 'NonTerminal'}, {'name': 'expr_term', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 328: {'origin': {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'DECIMAL', 'filter_out': False, '__type__': 'Terminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 329: {'origin': {'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__int_lit_plus_9', '__type__': 'NonTerminal'}, {'name': 'DECIMAL', 'filter_out': False, '__type__': 'Terminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 330: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 331: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 332: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 333: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 334: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 4, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 335: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 5, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 336: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'new_line_or_comment', '__type__': 'NonTerminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 6, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 337: {'origin': {'name': '__tuple_star_10', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__tuple_star_10', '__type__': 'NonTerminal'}, {'name': 'COMMA', 'filter_out': True, '__type__': 'Terminal'}, {'name': 'expression', '__type__': 'NonTerminal'}], 'order': 7, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 338: {'origin': {'name': '__object_star_11', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 339: {'origin': {'name': '__object_star_11', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__object_star_11', '__type__': 'NonTerminal'}, {'name': 'new_line_and_or_comma', '__type__': 'NonTerminal'}, {'name': 'object_elem', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 340: {'origin': {'name': '__attr_splat_star_12', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'get_attr', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 341: {'origin': {'name': '__attr_splat_star_12', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__attr_splat_star_12', '__type__': 'NonTerminal'}, {'name': 'get_attr', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 342: {'origin': {'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'get_attr', '__type__': 'NonTerminal'}], 'order': 0, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 343: {'origin': {'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, 'expansion': [{'name': 'index', '__type__': 'NonTerminal'}], 'order': 1, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 344: {'origin': {'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, {'name': 'get_attr', '__type__': 'NonTerminal'}], 'order': 2, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}, 345: {'origin': {'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, 'expansion': [{'name': '__full_splat_star_13', '__type__': 'NonTerminal'}, {'name': 'index', '__type__': 'NonTerminal'}], 'order': 3, 'alias': None, 'options': {'keep_all_tokens': False, 'expand1': False, 'priority': None, 'template_source': None, 'empty_indices': (), '__type__': 'RuleOptions'}, '__type__': 'Rule'}}
)
Shift = 0
Reduce = 1
def Lark_StandAlone(**kwargs):
  return Lark._load_from_dict(DATA, MEMO, **kwargs)

Functions

def Lark_StandAlone(**kwargs)
Expand source code
def Lark_StandAlone(**kwargs):
  return Lark._load_from_dict(DATA, MEMO, **kwargs)
def apply_visit_wrapper(func, name, wrapper)
Expand source code
def apply_visit_wrapper(func, name, wrapper):
    if wrapper is _vargs_meta or wrapper is _vargs_meta_inline:
        raise NotImplementedError("Meta args not supported for internal transformer")

    @wraps(func)
    def f(children):
        return wrapper(func, name, children, None)
    return f
def assert_config(value, options, msg='Got %r, expected one of %s')
Expand source code
def assert_config(value, options, msg='Got %r, expected one of %s'):
    if value not in options:
        raise ConfigurationError(msg % (value, options))
def build_mres(terminals, g_regex_flags, re_, use_bytes, match_whole=False)
Expand source code
def build_mres(terminals, g_regex_flags, re_, use_bytes, match_whole=False):
    return _build_mres(terminals, len(terminals), g_regex_flags, match_whole, re_, use_bytes)
def classify(seq, key=None, value=None)
Expand source code
def classify(seq, key=None, value=None):
    d = {}
    for item in seq:
        k = key(item) if (key is not None) else item
        v = value(item) if (value is not None) else item
        if k in d:
            d[k].append(v)
        else:
            d[k] = [v]
    return d
def create_contextual_lexer(lexer_conf, parser, postlex)
Expand source code
def create_contextual_lexer(lexer_conf, parser, postlex):
    states = {idx:list(t.keys()) for idx, t in parser._parse_table.states.items()}
    always_accept = postlex.always_accept if postlex else ()
    return ContextualLexer(lexer_conf, states, always_accept=always_accept)
def create_lalr_parser(lexer_conf, parser_conf, options=None)
Expand source code
def create_lalr_parser(lexer_conf, parser_conf, options=None):
    debug = options.debug if options else False
    return LALR_Parser(parser_conf, debug=debug)
def create_traditional_lexer(lexer_conf, parser, postlex)
Expand source code
def create_traditional_lexer(lexer_conf, parser, postlex):
    return TraditionalLexer(lexer_conf)
def get_frontend(parser, lexer)
Expand source code
def get_frontend(parser, lexer):
    assert_config(parser, ('lalr', 'earley', 'cyk'))
    if not isinstance(lexer, type):     ##

        expected = {
            'lalr': ('standard', 'contextual'),
            'earley': ('standard', 'dynamic', 'dynamic_complete'),
            'cyk': ('standard', ),
         }[parser]
        assert_config(lexer, expected, 'Parser %r does not support lexer %%r, expected one of %%s' % parser)

    return MakeParsingFrontend(parser, lexer)
def get_regexp_width(expr)
Expand source code
def get_regexp_width(expr):
    if regex:
        ##

        ##

        ##

        regexp_final = re.sub(categ_pattern, 'A', expr)
    else:
        if re.search(categ_pattern, expr):
            raise ImportError('`regex` module must be installed in order to use Unicode categories.', expr)
        regexp_final = expr
    try:
        return [int(x) for x in sre_parse.parse(regexp_final).getwidth()]
    except sre_constants.error:
        raise ValueError(expr)
def inline_args(obj)
Expand source code
def inline_args(obj):   ##

    return _apply_decorator(obj, _inline_args__func)
def inplace_transformer(func)
Expand source code
def inplace_transformer(func):
    @wraps(func)
    def f(children):
        ##

        tree = Tree(func.__name__, children)
        return func(tree)
    return f
def maybe_create_ambiguous_expander(tree_class, expansion, keep_all_tokens)
Expand source code
def maybe_create_ambiguous_expander(tree_class, expansion, keep_all_tokens):
    to_expand = [i for i, sym in enumerate(expansion)
                 if keep_all_tokens or ((not (sym.is_term and sym.filter_out)) and _should_expand(sym))]
    if to_expand:
        return partial(AmbiguousExpander, to_expand, tree_class)
def maybe_create_child_filter(expansion, keep_all_tokens, ambiguous, _empty_indices)
Expand source code
def maybe_create_child_filter(expansion, keep_all_tokens, ambiguous, _empty_indices):
    ##

    if _empty_indices:
        assert _empty_indices.count(False) == len(expansion)
        s = ''.join(str(int(b)) for b in _empty_indices)
        empty_indices = [len(ones) for ones in s.split('0')]
        assert len(empty_indices) == len(expansion)+1, (empty_indices, len(expansion))
    else:
        empty_indices = [0] * (len(expansion)+1)

    to_include = []
    nones_to_add = 0
    for i, sym in enumerate(expansion):
        nones_to_add += empty_indices[i]
        if keep_all_tokens or not (sym.is_term and sym.filter_out):
            to_include.append((i, _should_expand(sym), nones_to_add))
            nones_to_add = 0

    nones_to_add += empty_indices[len(expansion)]

    if _empty_indices or len(to_include) < len(expansion) or any(to_expand for i, to_expand,_ in to_include):
        if _empty_indices or ambiguous:
            return partial(ChildFilter if ambiguous else ChildFilterLALR, to_include, nones_to_add)
        else:
            ##

            return partial(ChildFilterLALR_NoPlaceholders, [(i, x) for i,x,_ in to_include])
def ptb_inline_args(func)
Expand source code
def ptb_inline_args(func):
    @wraps(func)
    def f(children):
        return func(*children)
    return f
def smart_decorator(f, create_decorator)
Expand source code
def smart_decorator(f, create_decorator):
    if isinstance(f, types.FunctionType):
        return wraps(f)(create_decorator(f, True))

    elif isinstance(f, (classtype, type, types.BuiltinFunctionType)):
        return wraps(f)(create_decorator(f, False))

    elif isinstance(f, types.MethodType):
        return wraps(f)(create_decorator(f.__func__, True))

    elif isinstance(f, partial):
        ##

        return wraps(f.func)(create_decorator(lambda *args, **kw: f(*args[1:], **kw), True))

    else:
        return create_decorator(f.__func__.__call__, True)
def v_args(inline=False, meta=False, tree=False, wrapper=None)
Expand source code
def v_args(inline=False, meta=False, tree=False, wrapper=None):
    #--
    if tree and (meta or inline):
        raise ValueError("Visitor functions cannot combine 'tree' with 'meta' or 'inline'.")

    func = None
    if meta:
        if inline:
            func = _vargs_meta_inline
        else:
            func = _vargs_meta
    elif inline:
        func = _vargs_inline
    elif tree:
        func = _vargs_tree

    if wrapper is not None:
        if func is not None:
            raise ValueError("Cannot use 'wrapper' along with 'tree', 'meta' or 'inline'.")
        func = wrapper

    def _visitor_args_dec(obj):
        return _apply_decorator(obj, _visitor_args_func_dec, visit_wrapper=func)
    return _visitor_args_dec
def visit_children_decor(func)
Expand source code
def visit_children_decor(func):
    #--
    @wraps(func)
    def inner(cls, tree):
        values = cls.visit_children(tree)
        return func(cls, values)
    return inner

Classes

class Action (name)
Expand source code
class Action:
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return self.name
    def __repr__(self):
        return str(self)
class AmbiguousExpander (to_expand, tree_class, node_builder)
Expand source code
class AmbiguousExpander:
    #--
    def __init__(self, to_expand, tree_class, node_builder):
        self.node_builder = node_builder
        self.tree_class = tree_class
        self.to_expand = to_expand

    def __call__(self, children):
        def _is_ambig_tree(t):
            return hasattr(t, 'data') and t.data == '_ambig'

        ##

        ##

        ##

        ##

        ambiguous = []
        for i, child in enumerate(children):
            if _is_ambig_tree(child):
                if i in self.to_expand:
                    ambiguous.append(i)

                to_expand = [j for j, grandchild in enumerate(child.children) if _is_ambig_tree(grandchild)]
                child.expand_kids_by_index(*to_expand)

        if not ambiguous:
            return self.node_builder(children)

        expand = [iter(child.children) if i in ambiguous else repeat(child) for i, child in enumerate(children)]
        return self.tree_class('_ambig', [self.node_builder(list(f[0])) for f in product(zip(*expand))])
class AmbiguousIntermediateExpander (tree_class, node_builder)
Expand source code
class AmbiguousIntermediateExpander:
    #--

    def __init__(self, tree_class, node_builder):
        self.node_builder = node_builder
        self.tree_class = tree_class

    def __call__(self, children):
        def _is_iambig_tree(child):
            return hasattr(child, 'data') and child.data == '_iambig'

        def _collapse_iambig(children):
            #--

            ##

            ##

            if children and _is_iambig_tree(children[0]):
                iambig_node = children[0]
                result = []
                for grandchild in iambig_node.children:
                    collapsed = _collapse_iambig(grandchild.children)
                    if collapsed:
                        for child in collapsed:
                            child.children += children[1:]
                        result += collapsed
                    else:
                        new_tree = self.tree_class('_inter', grandchild.children + children[1:])
                        result.append(new_tree)
                return result

        collapsed = _collapse_iambig(children)
        if collapsed:
            processed_nodes = [self.node_builder(c.children) for c in collapsed]
            return self.tree_class('_ambig', processed_nodes)

        return self.node_builder(children)
class CallChain (callback1, callback2, cond)
Expand source code
class CallChain:
    def __init__(self, callback1, callback2, cond):
        self.callback1 = callback1
        self.callback2 = callback2
        self.cond = cond

    def __call__(self, t):
        t2 = self.callback1(t)
        return self.callback2(t) if self.cond(t2) else t2
class ChildFilter (to_include, append_none, node_builder)
Expand source code
class ChildFilter:
    def __init__(self, to_include, append_none, node_builder):
        self.node_builder = node_builder
        self.to_include = to_include
        self.append_none = append_none

    def __call__(self, children):
        filtered = []

        for i, to_expand, add_none in self.to_include:
            if add_none:
                filtered += [None] * add_none
            if to_expand:
                filtered += children[i].children
            else:
                filtered.append(children[i])

        if self.append_none:
            filtered += [None] * self.append_none

        return self.node_builder(filtered)

Subclasses

class ChildFilterLALR (to_include, append_none, node_builder)
Expand source code
class ChildFilterLALR(ChildFilter):
    #--

    def __call__(self, children):
        filtered = []
        for i, to_expand, add_none in self.to_include:
            if add_none:
                filtered += [None] * add_none
            if to_expand:
                if filtered:
                    filtered += children[i].children
                else:   ##

                    filtered = children[i].children
            else:
                filtered.append(children[i])

        if self.append_none:
            filtered += [None] * self.append_none

        return self.node_builder(filtered)

Ancestors

class ChildFilterLALR_NoPlaceholders (to_include, node_builder)
Expand source code
class ChildFilterLALR_NoPlaceholders(ChildFilter):
    #--
    def __init__(self, to_include, node_builder):
        self.node_builder = node_builder
        self.to_include = to_include

    def __call__(self, children):
        filtered = []
        for i, to_expand in self.to_include:
            if to_expand:
                if filtered:
                    filtered += children[i].children
                else:   ##

                    filtered = children[i].children
            else:
                filtered.append(children[i])
        return self.node_builder(filtered)

Ancestors

class ConfigurationError (*args, **kwargs)

Inappropriate argument value (of correct type).

Expand source code
class ConfigurationError(LarkError, ValueError):
    pass

Ancestors

  • LarkError
  • builtins.ValueError
  • builtins.Exception
  • builtins.BaseException
class ContextualLexer (conf, states, always_accept=())
Expand source code
class ContextualLexer(Lexer):

    def __init__(self, conf, states, always_accept=()):
        terminals = list(conf.terminals)
        terminals_by_name = conf.terminals_by_name

        trad_conf = copy(conf)
        trad_conf.terminals = terminals

        lexer_by_tokens = {}
        self.lexers = {}
        for state, accepts in states.items():
            key = frozenset(accepts)
            try:
                lexer = lexer_by_tokens[key]
            except KeyError:
                accepts = set(accepts) | set(conf.ignore) | set(always_accept)
                lexer_conf = copy(trad_conf)
                lexer_conf.terminals = [terminals_by_name[n] for n in accepts if n in terminals_by_name]
                lexer = TraditionalLexer(lexer_conf)
                lexer_by_tokens[key] = lexer

            self.lexers[state] = lexer

        assert trad_conf.terminals is terminals
        self.root_lexer = TraditionalLexer(trad_conf)

    def make_lexer_state(self, text):
        return self.root_lexer.make_lexer_state(text)

    def lex(self, lexer_state, parser_state):
        try:
            while True:
                lexer = self.lexers[parser_state.position]
                yield lexer.next_token(lexer_state, parser_state)
        except EOFError:
            pass
        except UnexpectedCharacters as e:
            ##

            ##

            try:
                last_token = lexer_state.last_token  ##

                token = self.root_lexer.next_token(lexer_state, parser_state)
                raise UnexpectedToken(token, e.allowed, state=parser_state, token_history=[last_token], terminals_by_name=self.root_lexer.terminals_by_name)
            except UnexpectedCharacters:
                raise e  ##

Ancestors

Methods

def lex(self, lexer_state, parser_state)
Expand source code
def lex(self, lexer_state, parser_state):
    try:
        while True:
            lexer = self.lexers[parser_state.position]
            yield lexer.next_token(lexer_state, parser_state)
    except EOFError:
        pass
    except UnexpectedCharacters as e:
        ##

        ##

        try:
            last_token = lexer_state.last_token  ##

            token = self.root_lexer.next_token(lexer_state, parser_state)
            raise UnexpectedToken(token, e.allowed, state=parser_state, token_history=[last_token], terminals_by_name=self.root_lexer.terminals_by_name)
        except UnexpectedCharacters:
            raise e  ##
def make_lexer_state(self, text)
Expand source code
def make_lexer_state(self, text):
    return self.root_lexer.make_lexer_state(text)
class DedentError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class DedentError(LarkError):
    pass

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException
class Discard (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class Discard(Exception):
    #--
    pass

Ancestors

  • builtins.Exception
  • builtins.BaseException
class ExpandSingleChild (node_builder)
Expand source code
class ExpandSingleChild:
    def __init__(self, node_builder):
        self.node_builder = node_builder

    def __call__(self, children):
        if len(children) == 1:
            return children[0]
        else:
            return self.node_builder(children)
class GrammarError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class GrammarError(LarkError):
    pass

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException
class Indenter

Helper class that provides a standard way to create an ABC using inheritance.

Expand source code
class Indenter(PostLex):
    def __init__(self):
        self.paren_level = None
        self.indent_level = None
        assert self.tab_len > 0

    def handle_NL(self, token):
        if self.paren_level > 0:
            return

        yield token

        indent_str = token.rsplit('\n', 1)[1] ##

        indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len

        if indent > self.indent_level[-1]:
            self.indent_level.append(indent)
            yield Token.new_borrow_pos(self.INDENT_type, indent_str, token)
        else:
            while indent < self.indent_level[-1]:
                self.indent_level.pop()
                yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token)

            if indent != self.indent_level[-1]:
                raise DedentError('Unexpected dedent to column %s. Expected dedent to %s' % (indent, self.indent_level[-1]))

    def _process(self, stream):
        for token in stream:
            if token.type == self.NL_type:
                for t in self.handle_NL(token):
                    yield t
            else:
                yield token

            if token.type in self.OPEN_PAREN_types:
                self.paren_level += 1
            elif token.type in self.CLOSE_PAREN_types:
                self.paren_level -= 1
                assert self.paren_level >= 0

        while len(self.indent_level) > 1:
            self.indent_level.pop()
            yield Token(self.DEDENT_type, '')

        assert self.indent_level == [0], self.indent_level

    def process(self, stream):
        self.paren_level = 0
        self.indent_level = [0]
        return self._process(stream)

    ##

    @property
    def always_accept(self):
        return (self.NL_type,)

Ancestors

Instance variables

var always_accept

Built-in immutable sequence.

If no argument is given, the constructor returns an empty tuple. If iterable is specified the tuple is initialized from iterable's items.

If the argument is a tuple, the return value is the same object.

Expand source code
@property
def always_accept(self):
    return (self.NL_type,)

Methods

def handle_NL(self, token)
Expand source code
def handle_NL(self, token):
    if self.paren_level > 0:
        return

    yield token

    indent_str = token.rsplit('\n', 1)[1] ##

    indent = indent_str.count(' ') + indent_str.count('\t') * self.tab_len

    if indent > self.indent_level[-1]:
        self.indent_level.append(indent)
        yield Token.new_borrow_pos(self.INDENT_type, indent_str, token)
    else:
        while indent < self.indent_level[-1]:
            self.indent_level.pop()
            yield Token.new_borrow_pos(self.DEDENT_type, indent_str, token)

        if indent != self.indent_level[-1]:
            raise DedentError('Unexpected dedent to column %s. Expected dedent to %s' % (indent, self.indent_level[-1]))
def process(self, stream)
Expand source code
def process(self, stream):
    self.paren_level = 0
    self.indent_level = [0]
    return self._process(stream)
class InlineTransformer (visit_tokens=True)
Expand source code
class InlineTransformer(Transformer):   ##

    def _call_userfunc(self, tree, new_children=None):
        ##

        children = new_children if new_children is not None else tree.children
        try:
            f = getattr(self, tree.data)
        except AttributeError:
            return self.__default__(tree.data, children, tree.meta)
        else:
            return f(*children)

Ancestors

class IntParseTable (states, start_states, end_states)
Expand source code
class IntParseTable(ParseTable):

    @classmethod
    def from_ParseTable(cls, parse_table):
        enum = list(parse_table.states)
        state_to_idx = {s:i for i,s in enumerate(enum)}
        int_states = {}

        for s, la in parse_table.states.items():
            la = {k:(v[0], state_to_idx[v[1]]) if v[0] is Shift else v
                  for k,v in la.items()}
            int_states[ state_to_idx[s] ] = la


        start_states = {start:state_to_idx[s] for start, s in parse_table.start_states.items()}
        end_states = {start:state_to_idx[s] for start, s in parse_table.end_states.items()}
        return cls(int_states, start_states, end_states)

Ancestors

Static methods

def from_ParseTable(parse_table)
Expand source code
@classmethod
def from_ParseTable(cls, parse_table):
    enum = list(parse_table.states)
    state_to_idx = {s:i for i,s in enumerate(enum)}
    int_states = {}

    for s, la in parse_table.states.items():
        la = {k:(v[0], state_to_idx[v[1]]) if v[0] is Shift else v
              for k,v in la.items()}
        int_states[ state_to_idx[s] ] = la


    start_states = {start:state_to_idx[s] for start, s in parse_table.start_states.items()}
    end_states = {start:state_to_idx[s] for start, s in parse_table.end_states.items()}
    return cls(int_states, start_states, end_states)
class Interpreter
Expand source code
class Interpreter(_Decoratable):
    #--

    def visit(self, tree):
        f = getattr(self, tree.data)
        wrapper = getattr(f, 'visit_wrapper', None)
        if wrapper is not None:
            return f.visit_wrapper(f, tree.data, tree.children, tree.meta)
        else:
            return f(tree)

    def visit_children(self, tree):
        return [self.visit(child) if isinstance(child, Tree) else child
                for child in tree.children]

    def __getattr__(self, name):
        return self.__default__

    def __default__(self, tree):
        return self.visit_children(tree)

Ancestors

  • runflow.hcl2_parser._Decoratable

Methods

def visit(self, tree)
Expand source code
def visit(self, tree):
    f = getattr(self, tree.data)
    wrapper = getattr(f, 'visit_wrapper', None)
    if wrapper is not None:
        return f.visit_wrapper(f, tree.data, tree.children, tree.meta)
    else:
        return f(tree)
def visit_children(self, tree)
Expand source code
def visit_children(self, tree):
    return [self.visit(child) if isinstance(child, Tree) else child
            for child in tree.children]
class LALR_Parser (parser_conf, debug=False)
Expand source code
class LALR_Parser(Serialize):
    def __init__(self, parser_conf, debug=False):
        analysis = LALR_Analyzer(parser_conf, debug=debug)
        analysis.compute_lalr()
        callbacks = parser_conf.callbacks

        self._parse_table = analysis.parse_table
        self.parser_conf = parser_conf
        self.parser = _Parser(analysis.parse_table, callbacks, debug)

    @classmethod
    def deserialize(cls, data, memo, callbacks, debug=False):
        inst = cls.__new__(cls)
        inst._parse_table = IntParseTable.deserialize(data, memo)
        inst.parser = _Parser(inst._parse_table, callbacks, debug)
        return inst

    def serialize(self, memo):
        return self._parse_table.serialize(memo)
    
    def parse_interactive(self, lexer, start):
        return self.parser.parse(lexer, start, start_interactive=True)

    def parse(self, lexer, start, on_error=None):
        try:
            return self.parser.parse(lexer, start)
        except UnexpectedInput as e:
            if on_error is None:
                raise

            while True:
                if isinstance(e, UnexpectedCharacters):
                    s = e.interactive_parser.lexer_state.state
                    p = s.line_ctr.char_pos

                if not on_error(e):
                    raise e

                if isinstance(e, UnexpectedCharacters):
                    ##

                    if p == s.line_ctr.char_pos:
                        s.line_ctr.feed(s.text[p:p+1])

                try:
                    return e.interactive_parser.resume_parse()
                except UnexpectedToken as e2:
                    if (isinstance(e, UnexpectedToken)
                        and e.token.type == e2.token.type == '$END'
                        and e.interactive_parser == e2.interactive_parser):
                        ##

                        raise e2
                    e = e2
                except UnexpectedCharacters as e2:
                    e = e2

Ancestors

Static methods

def deserialize(data, memo, callbacks, debug=False)
Expand source code
@classmethod
def deserialize(cls, data, memo, callbacks, debug=False):
    inst = cls.__new__(cls)
    inst._parse_table = IntParseTable.deserialize(data, memo)
    inst.parser = _Parser(inst._parse_table, callbacks, debug)
    return inst

Methods

def parse(self, lexer, start, on_error=None)
Expand source code
def parse(self, lexer, start, on_error=None):
    try:
        return self.parser.parse(lexer, start)
    except UnexpectedInput as e:
        if on_error is None:
            raise

        while True:
            if isinstance(e, UnexpectedCharacters):
                s = e.interactive_parser.lexer_state.state
                p = s.line_ctr.char_pos

            if not on_error(e):
                raise e

            if isinstance(e, UnexpectedCharacters):
                ##

                if p == s.line_ctr.char_pos:
                    s.line_ctr.feed(s.text[p:p+1])

            try:
                return e.interactive_parser.resume_parse()
            except UnexpectedToken as e2:
                if (isinstance(e, UnexpectedToken)
                    and e.token.type == e2.token.type == '$END'
                    and e.interactive_parser == e2.interactive_parser):
                    ##

                    raise e2
                e = e2
            except UnexpectedCharacters as e2:
                e = e2
def parse_interactive(self, lexer, start)
Expand source code
def parse_interactive(self, lexer, start):
    return self.parser.parse(lexer, start, start_interactive=True)
def serialize(self, memo)
Expand source code
def serialize(self, memo):
    return self._parse_table.serialize(memo)
class Lark (grammar, **options)
Expand source code
class Lark(Serialize):
    #--
    def __init__(self, grammar, **options):
        self.options = LarkOptions(options)

        ##

        use_regex = self.options.regex
        if use_regex:
            if regex:
                re_module = regex
            else:
                raise ImportError('`regex` module must be installed if calling `Lark(regex=True)`.')
        else:
            re_module = re

        ##

        if self.options.source_path is None:
            try:
                self.source_path = grammar.name
            except AttributeError:
                self.source_path = '<string>'
        else:
            self.source_path = self.options.source_path

        ##

        try:
            read = grammar.read
        except AttributeError:
            pass
        else:
            grammar = read()

        cache_fn = None
        cache_md5 = None
        if isinstance(grammar, STRING_TYPE):
            self.source_grammar = grammar
            if self.options.use_bytes:
                if not isascii(grammar):
                    raise ConfigurationError("Grammar must be ascii only, when use_bytes=True")
                if sys.version_info[0] == 2 and self.options.use_bytes != 'force':
                    raise ConfigurationError("`use_bytes=True` may have issues on python2."
                                              "Use `use_bytes='force'` to use it at your own risk.")

            if self.options.cache:
                if self.options.parser != 'lalr':
                    raise ConfigurationError("cache only works with parser='lalr' for now")

                unhashable = ('transformer', 'postlex', 'lexer_callbacks', 'edit_terminals')
                options_str = ''.join(k+str(v) for k, v in options.items() if k not in unhashable)
                from . import __version__
                s = grammar + options_str + __version__ + str(sys.version_info[:2])
                cache_md5 = hashlib.md5(s.encode('utf8')).hexdigest()

                if isinstance(self.options.cache, STRING_TYPE):
                    cache_fn = self.options.cache
                else:
                    if self.options.cache is not True:
                        raise ConfigurationError("cache argument must be bool or str")
                    ##

                    cache_fn = tempfile.gettempdir() + '/.lark_cache_%s_%s_%s.tmp' % ((cache_md5,) + sys.version_info[:2])

                if FS.exists(cache_fn):
                    logger.debug('Loading grammar from cache: %s', cache_fn)
                    ##

                    for name in (set(options) - _LOAD_ALLOWED_OPTIONS):
                        del options[name]
                    with FS.open(cache_fn, 'rb') as f:
                        old_options = self.options
                        try:
                            file_md5 = f.readline().rstrip(b'\n')
                            cached_used_files = pickle.load(f)
                            if file_md5 == cache_md5.encode('utf8') and verify_used_files(cached_used_files):
                                cached_parser_data = pickle.load(f)
                                self._load(cached_parser_data, **options)
                                return
                        except Exception: ##

                            logger.exception("Failed to load Lark from cache: %r. We will try to carry on." % cache_fn)
                            
                            ##

                            ##

                            self.options = old_options


            ##

            self.grammar, used_files = load_grammar(grammar, self.source_path, self.options.import_paths, self.options.keep_all_tokens)
        else:
            assert isinstance(grammar, Grammar)
            self.grammar = grammar


        if self.options.lexer == 'auto':
            if self.options.parser == 'lalr':
                self.options.lexer = 'contextual'
            elif self.options.parser == 'earley':
                if self.options.postlex is not None:
                    logger.info("postlex can't be used with the dynamic lexer, so we use standard instead. "
                                "Consider using lalr with contextual instead of earley")
                    self.options.lexer = 'standard'
                else:
                    self.options.lexer = 'dynamic'
            elif self.options.parser == 'cyk':
                self.options.lexer = 'standard'
            else:
                assert False, self.options.parser
        lexer = self.options.lexer
        if isinstance(lexer, type):
            assert issubclass(lexer, Lexer)     ##

        else:
            assert_config(lexer, ('standard', 'contextual', 'dynamic', 'dynamic_complete'))
            if self.options.postlex is not None and 'dynamic' in lexer:
                raise ConfigurationError("Can't use postlex with a dynamic lexer. Use standard or contextual instead")

        if self.options.ambiguity == 'auto':
            if self.options.parser == 'earley':
                self.options.ambiguity = 'resolve'
        else:
            assert_config(self.options.parser, ('earley', 'cyk'), "%r doesn't support disambiguation. Use one of these parsers instead: %s")

        if self.options.priority == 'auto':
            self.options.priority = 'normal'

        if self.options.priority not in _VALID_PRIORITY_OPTIONS:
            raise ConfigurationError("invalid priority option: %r. Must be one of %r" % (self.options.priority, _VALID_PRIORITY_OPTIONS))
        assert self.options.ambiguity not in ('resolve__antiscore_sum', ), 'resolve__antiscore_sum has been replaced with the option priority="invert"'
        if self.options.ambiguity not in _VALID_AMBIGUITY_OPTIONS:
            raise ConfigurationError("invalid ambiguity option: %r. Must be one of %r" % (self.options.ambiguity, _VALID_AMBIGUITY_OPTIONS))

        if self.options.postlex is not None:
            terminals_to_keep = set(self.options.postlex.always_accept)
        else:
            terminals_to_keep = set()

        ##

        self.terminals, self.rules, self.ignore_tokens = self.grammar.compile(self.options.start, terminals_to_keep)

        if self.options.edit_terminals:
            for t in self.terminals:
                self.options.edit_terminals(t)

        self._terminals_dict = {t.name: t for t in self.terminals}

        ##

        ##

        if self.options.priority == 'invert':
            for rule in self.rules:
                if rule.options.priority is not None:
                    rule.options.priority = -rule.options.priority
        ##

        ##

        ##

        elif self.options.priority is None:
            for rule in self.rules:
                if rule.options.priority is not None:
                    rule.options.priority = None

        ##

        self.lexer_conf = LexerConf(
                self.terminals, re_module, self.ignore_tokens, self.options.postlex,
                self.options.lexer_callbacks, self.options.g_regex_flags, use_bytes=self.options.use_bytes
            )

        if self.options.parser:
            self.parser = self._build_parser()
        elif lexer:
            self.lexer = self._build_lexer()

        if cache_fn:
            logger.debug('Saving grammar to cache: %s', cache_fn)
            with FS.open(cache_fn, 'wb') as f:
                f.write(cache_md5.encode('utf8') + b'\n')
                pickle.dump(used_files, f)
                self.save(f)

    if __doc__:
        __doc__ += "\n\n" + LarkOptions.OPTIONS_DOC

    __serialize_fields__ = 'parser', 'rules', 'options'

    def _build_lexer(self, dont_ignore=False):
        lexer_conf = self.lexer_conf
        if dont_ignore:
            from copy import copy
            lexer_conf = copy(lexer_conf)
            lexer_conf.ignore = ()
        return TraditionalLexer(lexer_conf)

    def _prepare_callbacks(self):
        self._callbacks = {}
        ##

        if self.options.ambiguity != 'forest':
            self._parse_tree_builder = ParseTreeBuilder(
                    self.rules,
                    self.options.tree_class or Tree,
                    self.options.propagate_positions,
                    self.options.parser != 'lalr' and self.options.ambiguity == 'explicit',
                    self.options.maybe_placeholders
                )
            self._callbacks = self._parse_tree_builder.create_callback(self.options.transformer)
        self._callbacks.update(_get_lexer_callbacks(self.options.transformer, self.terminals))

    def _build_parser(self):
        self._prepare_callbacks()
        parser_class = get_frontend(self.options.parser, self.options.lexer)
        parser_conf = ParserConf(self.rules, self._callbacks, self.options.start)
        return parser_class(self.lexer_conf, parser_conf, options=self.options)

    def save(self, f):
        #--
        data, m = self.memo_serialize([TerminalDef, Rule])
        pickle.dump({'data': data, 'memo': m}, f, protocol=pickle.HIGHEST_PROTOCOL)

    @classmethod
    def load(cls, f):
        #--
        inst = cls.__new__(cls)
        return inst._load(f)

    def _deserialize_lexer_conf(self, data, memo, options):
        lexer_conf = LexerConf.deserialize(data['lexer_conf'], memo)
        lexer_conf.callbacks = options.lexer_callbacks or {}
        lexer_conf.re_module = regex if options.regex else re
        lexer_conf.use_bytes = options.use_bytes
        lexer_conf.g_regex_flags = options.g_regex_flags
        lexer_conf.skip_validation = True
        lexer_conf.postlex = options.postlex
        return lexer_conf

    def _load(self, f, **kwargs):
        if isinstance(f, dict):
            d = f
        else:
            d = pickle.load(f)
        memo = d['memo']
        data = d['data']

        assert memo
        memo = SerializeMemoizer.deserialize(memo, {'Rule': Rule, 'TerminalDef': TerminalDef}, {})
        options = dict(data['options'])
        if (set(kwargs) - _LOAD_ALLOWED_OPTIONS) & set(LarkOptions._defaults):
            raise ConfigurationError("Some options are not allowed when loading a Parser: {}"
                             .format(set(kwargs) - _LOAD_ALLOWED_OPTIONS))
        options.update(kwargs)
        self.options = LarkOptions.deserialize(options, memo)
        self.rules = [Rule.deserialize(r, memo) for r in data['rules']]
        self.source_path = '<deserialized>'
        parser_class = get_frontend(self.options.parser, self.options.lexer)
        self.lexer_conf = self._deserialize_lexer_conf(data['parser'], memo, self.options)
        self.terminals = self.lexer_conf.terminals
        self._prepare_callbacks()
        self._terminals_dict = {t.name: t for t in self.terminals}
        self.parser = parser_class.deserialize(
            data['parser'],
            memo,
            self.lexer_conf,
            self._callbacks,
            self.options,  ##

        )
        return self

    @classmethod
    def _load_from_dict(cls, data, memo, **kwargs):
        inst = cls.__new__(cls)
        return inst._load({'data': data, 'memo': memo}, **kwargs)

    @classmethod
    def open(cls, grammar_filename, rel_to=None, **options):
        #--
        if rel_to:
            basepath = os.path.dirname(rel_to)
            grammar_filename = os.path.join(basepath, grammar_filename)
        with open(grammar_filename, encoding='utf8') as f:
            return cls(f, **options)

    @classmethod
    def open_from_package(cls, package, grammar_path, search_paths=("",), **options):
        #--
        package = FromPackageLoader(package, search_paths)
        full_path, text = package(None, grammar_path)
        options.setdefault('source_path', full_path)
        options.setdefault('import_paths', [])
        options['import_paths'].append(package)
        return cls(text, **options)

    def __repr__(self):
        return 'Lark(open(%r), parser=%r, lexer=%r, ...)' % (self.source_path, self.options.parser, self.options.lexer)


    def lex(self, text, dont_ignore=False):
        #--
        if not hasattr(self, 'lexer') or dont_ignore:
            lexer = self._build_lexer(dont_ignore)
        else:
            lexer = self.lexer
        lexer_thread = LexerThread(lexer, text)
        stream = lexer_thread.lex(None)
        if self.options.postlex:
            return self.options.postlex.process(stream)
        return stream

    def get_terminal(self, name):
        #--
        return self._terminals_dict[name]
    
    def parse_interactive(self, text=None, start=None):
        return self.parser.parse_interactive(text, start=start)

    def parse(self, text, start=None, on_error=None):
        #--
        return self.parser.parse(text, start=start, on_error=on_error)

    @property
    def source(self):
        warn("Lark.source attribute has been renamed to Lark.source_path", DeprecationWarning)
        return self.source_path

    @source.setter
    def source(self, value):
        self.source_path = value

    @property
    def grammar_source(self):
        warn("Lark.grammar_source attribute has been renamed to Lark.source_grammar", DeprecationWarning)
        return self.source_grammar

    @grammar_source.setter
    def grammar_source(self, value):
        self.source_grammar = value

Ancestors

Static methods

def load(f)
Expand source code
@classmethod
def load(cls, f):
    #--
    inst = cls.__new__(cls)
    return inst._load(f)
def open(grammar_filename, rel_to=None, **options)
Expand source code
@classmethod
def open(cls, grammar_filename, rel_to=None, **options):
    #--
    if rel_to:
        basepath = os.path.dirname(rel_to)
        grammar_filename = os.path.join(basepath, grammar_filename)
    with open(grammar_filename, encoding='utf8') as f:
        return cls(f, **options)
def open_from_package(package, grammar_path, search_paths=('',), **options)
Expand source code
@classmethod
def open_from_package(cls, package, grammar_path, search_paths=("",), **options):
    #--
    package = FromPackageLoader(package, search_paths)
    full_path, text = package(None, grammar_path)
    options.setdefault('source_path', full_path)
    options.setdefault('import_paths', [])
    options['import_paths'].append(package)
    return cls(text, **options)

Instance variables

var grammar_source
Expand source code
@property
def grammar_source(self):
    warn("Lark.grammar_source attribute has been renamed to Lark.source_grammar", DeprecationWarning)
    return self.source_grammar
var source
Expand source code
@property
def source(self):
    warn("Lark.source attribute has been renamed to Lark.source_path", DeprecationWarning)
    return self.source_path

Methods

def get_terminal(self, name)
Expand source code
def get_terminal(self, name):
    #--
    return self._terminals_dict[name]
def lex(self, text, dont_ignore=False)
Expand source code
def lex(self, text, dont_ignore=False):
    #--
    if not hasattr(self, 'lexer') or dont_ignore:
        lexer = self._build_lexer(dont_ignore)
    else:
        lexer = self.lexer
    lexer_thread = LexerThread(lexer, text)
    stream = lexer_thread.lex(None)
    if self.options.postlex:
        return self.options.postlex.process(stream)
    return stream
def parse(self, text, start=None, on_error=None)
Expand source code
def parse(self, text, start=None, on_error=None):
    #--
    return self.parser.parse(text, start=start, on_error=on_error)
def parse_interactive(self, text=None, start=None)
Expand source code
def parse_interactive(self, text=None, start=None):
    return self.parser.parse_interactive(text, start=start)
def save(self, f)
Expand source code
def save(self, f):
    #--
    data, m = self.memo_serialize([TerminalDef, Rule])
    pickle.dump({'data': data, 'memo': m}, f, protocol=pickle.HIGHEST_PROTOCOL)
class LarkError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class LarkError(Exception):
    pass

Ancestors

  • builtins.Exception
  • builtins.BaseException

Subclasses

class LarkOptions (options_dict)
Expand source code
class LarkOptions(Serialize):
    #--
    OPTIONS_DOC = """
    **===  General Options  ===**

    start
            The start symbol. Either a string, or a list of strings for multiple possible starts (Default: "start")
    debug
            Display debug information and extra warnings. Use only when debugging (default: False)
            When used with Earley, it generates a forest graph as "sppf.png", if 'dot' is installed.
    transformer
            Applies the transformer to every parse tree (equivalent to applying it after the parse, but faster)
    propagate_positions
            Propagates (line, column, end_line, end_column) attributes into all tree branches.
    maybe_placeholders
            When True, the ``[]`` operator returns ``None`` when not matched.

            When ``False``,  ``[]`` behaves like the ``?`` operator, and returns no value at all.
            (default= ``False``. Recommended to set to ``True``)
    cache
            Cache the results of the Lark grammar analysis, for x2 to x3 faster loading. LALR only for now.

            - When ``False``, does nothing (default)
            - When ``True``, caches to a temporary file in the local directory
            - When given a string, caches to the path pointed by the string
    regex
            When True, uses the ``regex`` module instead of the stdlib ``re``.
    g_regex_flags
            Flags that are applied to all terminals (both regex and strings)
    keep_all_tokens
            Prevent the tree builder from automagically removing "punctuation" tokens (default: False)
    tree_class
            Lark will produce trees comprised of instances of this class instead of the default ``lark.Tree``.

    **=== Algorithm Options ===**

    parser
            Decides which parser engine to use. Accepts "earley" or "lalr". (Default: "earley").
            (there is also a "cyk" option for legacy)
    lexer
            Decides whether or not to use a lexer stage

            - "auto" (default): Choose for me based on the parser
            - "standard": Use a standard lexer
            - "contextual": Stronger lexer (only works with parser="lalr")
            - "dynamic": Flexible and powerful (only with parser="earley")
            - "dynamic_complete": Same as dynamic, but tries *every* variation of tokenizing possible.
    ambiguity
            Decides how to handle ambiguity in the parse. Only relevant if parser="earley"

            - "resolve": The parser will automatically choose the simplest derivation
              (it chooses consistently: greedy for tokens, non-greedy for rules)
            - "explicit": The parser will return all derivations wrapped in "_ambig" tree nodes (i.e. a forest).
            - "forest": The parser will return the root of the shared packed parse forest.

    **=== Misc. / Domain Specific Options ===**

    postlex
            Lexer post-processing (Default: None) Only works with the standard and contextual lexers.
    priority
            How priorities should be evaluated - auto, none, normal, invert (Default: auto)
    lexer_callbacks
            Dictionary of callbacks for the lexer. May alter tokens during lexing. Use with caution.
    use_bytes
            Accept an input of type ``bytes`` instead of ``str`` (Python 3 only).
    edit_terminals
            A callback for editing the terminals before parse.
    import_paths
            A List of either paths or loader functions to specify from where grammars are imported
    source_path
            Override the source of from where the grammar was loaded. Useful for relative imports and unconventional grammar loading
    **=== End Options ===**
    """
    if __doc__:
        __doc__ += OPTIONS_DOC


    ##

    ##

    ##

    ##

    ##

    ##

    ##

    ##

    _defaults = {
        'debug': False,
        'keep_all_tokens': False,
        'tree_class': None,
        'cache': False,
        'postlex': None,
        'parser': 'earley',
        'lexer': 'auto',
        'transformer': None,
        'start': 'start',
        'priority': 'auto',
        'ambiguity': 'auto',
        'regex': False,
        'propagate_positions': False,
        'lexer_callbacks': {},
        'maybe_placeholders': False,
        'edit_terminals': None,
        'g_regex_flags': 0,
        'use_bytes': False,
        'import_paths': [],
        'source_path': None,
    }

    def __init__(self, options_dict):
        o = dict(options_dict)

        options = {}
        for name, default in self._defaults.items():
            if name in o:
                value = o.pop(name)
                if isinstance(default, bool) and name not in ('cache', 'use_bytes'):
                    value = bool(value)
            else:
                value = default

            options[name] = value

        if isinstance(options['start'], STRING_TYPE):
            options['start'] = [options['start']]

        self.__dict__['options'] = options


        assert_config(self.parser, ('earley', 'lalr', 'cyk', None))

        if self.parser == 'earley' and self.transformer:
            raise ConfigurationError('Cannot specify an embedded transformer when using the Earley algorithm.'
                             'Please use your transformer on the resulting parse tree, or use a different algorithm (i.e. LALR)')

        if o:
            raise ConfigurationError("Unknown options: %s" % o.keys())

    def __getattr__(self, name):
        try:
            return self.__dict__['options'][name]
        except KeyError as e:
            raise AttributeError(e)

    def __setattr__(self, name, value):
        assert_config(name, self.options.keys(), "%r isn't a valid option. Expected one of: %s")
        self.options[name] = value

    def serialize(self, memo):
        return self.options

    @classmethod
    def deserialize(cls, data, memo):
        return cls(data)

Ancestors

Class variables

var OPTIONS_DOC

Static methods

def deserialize(data, memo)
Expand source code
@classmethod
def deserialize(cls, data, memo):
    return cls(data)

Methods

def serialize(self, memo)
Expand source code
def serialize(self, memo):
    return self.options
class LexError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class LexError(LarkError):
    pass

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException

Subclasses

class Lexer
Expand source code
class Lexer(object):
    #--
    lex = NotImplemented

    def make_lexer_state(self, text):
        line_ctr = LineCounter(b'\n' if isinstance(text, bytes) else '\n')
        return LexerState(text, line_ctr)

Subclasses

Class variables

var lex

Methods

def make_lexer_state(self, text)
Expand source code
def make_lexer_state(self, text):
    line_ctr = LineCounter(b'\n' if isinstance(text, bytes) else '\n')
    return LexerState(text, line_ctr)
class LexerConf (terminals, re_module, ignore=(), postlex=None, callbacks=None, g_regex_flags=0, skip_validation=False, use_bytes=False)
Expand source code
class LexerConf(Serialize):
    __serialize_fields__ = 'terminals', 'ignore', 'g_regex_flags', 'use_bytes', 'lexer_type'
    __serialize_namespace__ = TerminalDef,

    def __init__(self, terminals, re_module, ignore=(), postlex=None, callbacks=None, g_regex_flags=0, skip_validation=False, use_bytes=False):
        self.terminals = terminals
        self.terminals_by_name = {t.name: t for t in self.terminals}
        assert len(self.terminals) == len(self.terminals_by_name)
        self.ignore = ignore
        self.postlex = postlex
        self.callbacks = callbacks or {}
        self.g_regex_flags = g_regex_flags
        self.re_module = re_module
        self.skip_validation = skip_validation
        self.use_bytes = use_bytes
        self.lexer_type = None

    @property
    def tokens(self):
        warn("LexerConf.tokens is deprecated. Use LexerConf.terminals instead", DeprecationWarning)
        return self.terminals

    def _deserialize(self):
        self.terminals_by_name = {t.name: t for t in self.terminals}

Ancestors

Instance variables

var tokens
Expand source code
@property
def tokens(self):
    warn("LexerConf.tokens is deprecated. Use LexerConf.terminals instead", DeprecationWarning)
    return self.terminals
class LexerState (text, line_ctr, last_token=None)
Expand source code
class LexerState(object):
    __slots__ = 'text', 'line_ctr', 'last_token'

    def __init__(self, text, line_ctr, last_token=None):
        self.text = text
        self.line_ctr = line_ctr
        self.last_token = last_token

    def __eq__(self, other):
        if not isinstance(other, LexerState):
            return NotImplemented

        return self.text is other.text and self.line_ctr == other.line_ctr and self.last_token == other.last_token

    def __copy__(self):
        return type(self)(self.text, copy(self.line_ctr), self.last_token)

Instance variables

var last_token

Return an attribute of instance, which is of type owner.

var line_ctr

Return an attribute of instance, which is of type owner.

var text

Return an attribute of instance, which is of type owner.

class LexerThread (lexer, text)
Expand source code
class LexerThread(object):
    #--

    def __init__(self, lexer, text):
        self.lexer = lexer
        self.state = lexer.make_lexer_state(text)

    def lex(self, parser_state):
        return self.lexer.lex(self.state, parser_state)

    def __copy__(self):
        copied = object.__new__(LexerThread)
        copied.lexer = self.lexer
        copied.state = copy(self.state)
        return copied

Methods

def lex(self, parser_state)
Expand source code
def lex(self, parser_state):
    return self.lexer.lex(self.state, parser_state)
class LineCounter (newline_char)
Expand source code
class LineCounter:
    __slots__ = 'char_pos', 'line', 'column', 'line_start_pos', 'newline_char'

    def __init__(self, newline_char):
        self.newline_char = newline_char
        self.char_pos = 0
        self.line = 1
        self.column = 1
        self.line_start_pos = 0

    def __eq__(self, other):
        if not isinstance(other, LineCounter):
            return NotImplemented

        return self.char_pos == other.char_pos and self.newline_char == other.newline_char

    def feed(self, token, test_newline=True):
        #--
        if test_newline:
            newlines = token.count(self.newline_char)
            if newlines:
                self.line += newlines
                self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1

        self.char_pos += len(token)
        self.column = self.char_pos - self.line_start_pos + 1

Instance variables

var char_pos

Return an attribute of instance, which is of type owner.

var column

Return an attribute of instance, which is of type owner.

var line

Return an attribute of instance, which is of type owner.

var line_start_pos

Return an attribute of instance, which is of type owner.

var newline_char

Return an attribute of instance, which is of type owner.

Methods

def feed(self, token, test_newline=True)
Expand source code
def feed(self, token, test_newline=True):
    #--
    if test_newline:
        newlines = token.count(self.newline_char)
        if newlines:
            self.line += newlines
            self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1

    self.char_pos += len(token)
    self.column = self.char_pos - self.line_start_pos + 1
class MakeParsingFrontend (parser_type, lexer_type)
Expand source code
class MakeParsingFrontend:
    def __init__(self, parser_type, lexer_type):
        self.parser_type = parser_type
        self.lexer_type = lexer_type

    def __call__(self, lexer_conf, parser_conf, options):
        assert isinstance(lexer_conf, LexerConf)
        assert isinstance(parser_conf, ParserConf)
        parser_conf.parser_type = self.parser_type
        lexer_conf.lexer_type = self.lexer_type
        return ParsingFrontend(lexer_conf, parser_conf, options)

    @classmethod
    def deserialize(cls, data, memo, lexer_conf, callbacks, options):
        parser_conf = ParserConf.deserialize(data['parser_conf'], memo)
        parser = LALR_Parser.deserialize(data['parser'], memo, callbacks, options.debug)
        parser_conf.callbacks = callbacks
        return ParsingFrontend(lexer_conf, parser_conf, options, parser=parser)

Static methods

def deserialize(data, memo, lexer_conf, callbacks, options)
Expand source code
@classmethod
def deserialize(cls, data, memo, lexer_conf, callbacks, options):
    parser_conf = ParserConf.deserialize(data['parser_conf'], memo)
    parser = LALR_Parser.deserialize(data['parser'], memo, callbacks, options.debug)
    parser_conf.callbacks = callbacks
    return ParsingFrontend(lexer_conf, parser_conf, options, parser=parser)
class Meta
Expand source code
class Meta:
    def __init__(self):
        self.empty = True
class NonTerminal (name)
Expand source code
class NonTerminal(Symbol):
    __serialize_fields__ = 'name',

    is_term = False

Ancestors

Class variables

var is_term

Inherited members

class ParseConf (parse_table, callbacks, start)
Expand source code
class ParseConf(object):
    __slots__ = 'parse_table', 'callbacks', 'start', 'start_state', 'end_state', 'states'

    def __init__(self, parse_table, callbacks, start):
        self.parse_table = parse_table

        self.start_state = self.parse_table.start_states[start]
        self.end_state = self.parse_table.end_states[start]
        self.states = self.parse_table.states

        self.callbacks = callbacks
        self.start = start

Instance variables

var callbacks

Return an attribute of instance, which is of type owner.

var end_state

Return an attribute of instance, which is of type owner.

var parse_table

Return an attribute of instance, which is of type owner.

var start

Return an attribute of instance, which is of type owner.

var start_state

Return an attribute of instance, which is of type owner.

var states

Return an attribute of instance, which is of type owner.

class ParseError (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class ParseError(LarkError):
    pass

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException

Subclasses

class ParseTable (states, start_states, end_states)
Expand source code
class ParseTable:
    def __init__(self, states, start_states, end_states):
        self.states = states
        self.start_states = start_states
        self.end_states = end_states

    def serialize(self, memo):
        tokens = Enumerator()
        rules = Enumerator()

        states = {
            state: {tokens.get(token): ((1, arg.serialize(memo)) if action is Reduce else (0, arg))
                    for token, (action, arg) in actions.items()}
            for state, actions in self.states.items()
        }

        return {
            'tokens': tokens.reversed(),
            'states': states,
            'start_states': self.start_states,
            'end_states': self.end_states,
        }

    @classmethod
    def deserialize(cls, data, memo):
        tokens = data['tokens']
        states = {
            state: {tokens[token]: ((Reduce, Rule.deserialize(arg, memo)) if action==1 else (Shift, arg))
                    for token, (action, arg) in actions.items()}
            for state, actions in data['states'].items()
        }
        return cls(states, data['start_states'], data['end_states'])

Subclasses

Static methods

def deserialize(data, memo)
Expand source code
@classmethod
def deserialize(cls, data, memo):
    tokens = data['tokens']
    states = {
        state: {tokens[token]: ((Reduce, Rule.deserialize(arg, memo)) if action==1 else (Shift, arg))
                for token, (action, arg) in actions.items()}
        for state, actions in data['states'].items()
    }
    return cls(states, data['start_states'], data['end_states'])

Methods

def serialize(self, memo)
Expand source code
def serialize(self, memo):
    tokens = Enumerator()
    rules = Enumerator()

    states = {
        state: {tokens.get(token): ((1, arg.serialize(memo)) if action is Reduce else (0, arg))
                for token, (action, arg) in actions.items()}
        for state, actions in self.states.items()
    }

    return {
        'tokens': tokens.reversed(),
        'states': states,
        'start_states': self.start_states,
        'end_states': self.end_states,
    }
class ParseTreeBuilder (rules, tree_class, propagate_positions=False, ambiguous=False, maybe_placeholders=False)
Expand source code
class ParseTreeBuilder:
    def __init__(self, rules, tree_class, propagate_positions=False, ambiguous=False, maybe_placeholders=False):
        self.tree_class = tree_class
        self.propagate_positions = propagate_positions
        self.ambiguous = ambiguous
        self.maybe_placeholders = maybe_placeholders

        self.rule_builders = list(self._init_builders(rules))

    def _init_builders(self, rules):
        for rule in rules:
            options = rule.options
            keep_all_tokens = options.keep_all_tokens
            expand_single_child = options.expand1

            wrapper_chain = list(filter(None, [
                (expand_single_child and not rule.alias) and ExpandSingleChild,
                maybe_create_child_filter(rule.expansion, keep_all_tokens, self.ambiguous, options.empty_indices if self.maybe_placeholders else None),
                self.propagate_positions and PropagatePositions,
                self.ambiguous and maybe_create_ambiguous_expander(self.tree_class, rule.expansion, keep_all_tokens),
                self.ambiguous and partial(AmbiguousIntermediateExpander, self.tree_class)
            ]))

            yield rule, wrapper_chain

    def create_callback(self, transformer=None):
        callbacks = {}

        for rule, wrapper_chain in self.rule_builders:

            user_callback_name = rule.alias or rule.options.template_source or rule.origin.name
            try:
                f = getattr(transformer, user_callback_name)
                ##

                wrapper = getattr(f, 'visit_wrapper', None)
                if wrapper is not None:
                    f = apply_visit_wrapper(f, user_callback_name, wrapper)
                else:
                    if isinstance(transformer, InlineTransformer):
                        f = ptb_inline_args(f)
                    elif isinstance(transformer, Transformer_InPlace):
                        f = inplace_transformer(f)
            except AttributeError:
                f = partial(self.tree_class, user_callback_name)

            for w in wrapper_chain:
                f = w(f)

            if rule in callbacks:
                raise GrammarError("Rule '%s' already exists" % (rule,))

            callbacks[rule] = f

        return callbacks

Methods

def create_callback(self, transformer=None)
Expand source code
def create_callback(self, transformer=None):
    callbacks = {}

    for rule, wrapper_chain in self.rule_builders:

        user_callback_name = rule.alias or rule.options.template_source or rule.origin.name
        try:
            f = getattr(transformer, user_callback_name)
            ##

            wrapper = getattr(f, 'visit_wrapper', None)
            if wrapper is not None:
                f = apply_visit_wrapper(f, user_callback_name, wrapper)
            else:
                if isinstance(transformer, InlineTransformer):
                    f = ptb_inline_args(f)
                elif isinstance(transformer, Transformer_InPlace):
                    f = inplace_transformer(f)
        except AttributeError:
            f = partial(self.tree_class, user_callback_name)

        for w in wrapper_chain:
            f = w(f)

        if rule in callbacks:
            raise GrammarError("Rule '%s' already exists" % (rule,))

        callbacks[rule] = f

    return callbacks
class ParserConf (rules, callbacks, start)
Expand source code
class ParserConf(Serialize):
    __serialize_fields__ = 'rules', 'start', 'parser_type'

    def __init__(self, rules, callbacks, start):
        assert isinstance(start, list)
        self.rules = rules
        self.callbacks = callbacks
        self.start = start

        self.parser_type = None

Ancestors

class ParserState (parse_conf, lexer, state_stack=None, value_stack=None)
Expand source code
class ParserState(object):
    __slots__ = 'parse_conf', 'lexer', 'state_stack', 'value_stack'

    def __init__(self, parse_conf, lexer, state_stack=None, value_stack=None):
        self.parse_conf = parse_conf
        self.lexer = lexer
        self.state_stack = state_stack or [self.parse_conf.start_state]
        self.value_stack = value_stack or []

    @property
    def position(self):
        return self.state_stack[-1]

    ##

    def __eq__(self, other):
        if not isinstance(other, ParserState):
            return NotImplemented
        return len(self.state_stack) == len(other.state_stack) and self.position == other.position

    def __copy__(self):
        return type(self)(
            self.parse_conf,
            self.lexer, ##

            copy(self.state_stack),
            deepcopy(self.value_stack),
        )

    def copy(self):
        return copy(self)

    def feed_token(self, token, is_end=False):
        state_stack = self.state_stack
        value_stack = self.value_stack
        states = self.parse_conf.states
        end_state = self.parse_conf.end_state
        callbacks = self.parse_conf.callbacks

        while True:
            state = state_stack[-1]
            try:
                action, arg = states[state][token.type]
            except KeyError:
                expected = {s for s in states[state].keys() if s.isupper()}
                raise UnexpectedToken(token, expected, state=self, interactive_parser=None)

            assert arg != end_state

            if action is Shift:
                ##

                assert not is_end
                state_stack.append(arg)
                value_stack.append(token if token.type not in callbacks else callbacks[token.type](token))
                return
            else:
                ##

                rule = arg
                size = len(rule.expansion)
                if size:
                    s = value_stack[-size:]
                    del state_stack[-size:]
                    del value_stack[-size:]
                else:
                    s = []

                value = callbacks[rule](s)

                _action, new_state = states[state_stack[-1]][rule.origin.name]
                assert _action is Shift
                state_stack.append(new_state)
                value_stack.append(value)

                if is_end and state_stack[-1] == end_state:
                    return value_stack[-1]

Instance variables

var lexer

Return an attribute of instance, which is of type owner.

var parse_conf

Return an attribute of instance, which is of type owner.

var position
Expand source code
@property
def position(self):
    return self.state_stack[-1]
var state_stack

Return an attribute of instance, which is of type owner.

var value_stack

Return an attribute of instance, which is of type owner.

Methods

def copy(self)
Expand source code
def copy(self):
    return copy(self)
def feed_token(self, token, is_end=False)
Expand source code
def feed_token(self, token, is_end=False):
    state_stack = self.state_stack
    value_stack = self.value_stack
    states = self.parse_conf.states
    end_state = self.parse_conf.end_state
    callbacks = self.parse_conf.callbacks

    while True:
        state = state_stack[-1]
        try:
            action, arg = states[state][token.type]
        except KeyError:
            expected = {s for s in states[state].keys() if s.isupper()}
            raise UnexpectedToken(token, expected, state=self, interactive_parser=None)

        assert arg != end_state

        if action is Shift:
            ##

            assert not is_end
            state_stack.append(arg)
            value_stack.append(token if token.type not in callbacks else callbacks[token.type](token))
            return
        else:
            ##

            rule = arg
            size = len(rule.expansion)
            if size:
                s = value_stack[-size:]
                del state_stack[-size:]
                del value_stack[-size:]
            else:
                s = []

            value = callbacks[rule](s)

            _action, new_state = states[state_stack[-1]][rule.origin.name]
            assert _action is Shift
            state_stack.append(new_state)
            value_stack.append(value)

            if is_end and state_stack[-1] == end_state:
                return value_stack[-1]
class ParsingFrontend (lexer_conf, parser_conf, options, parser=None)
Expand source code
class ParsingFrontend(Serialize):
    __serialize_fields__ = 'lexer_conf', 'parser_conf', 'parser', 'options'

    def __init__(self, lexer_conf, parser_conf, options, parser=None):
        self.parser_conf = parser_conf
        self.lexer_conf = lexer_conf
        self.options = options

        ##

        if parser:  ##

            self.parser = parser
        else:
            create_parser = {
                'lalr': create_lalr_parser,
                'earley': create_earley_parser,
                'cyk': CYK_FrontEnd,
            }[parser_conf.parser_type]
            self.parser = create_parser(lexer_conf, parser_conf, options)

        ##

        lexer_type = lexer_conf.lexer_type
        self.skip_lexer = False
        if lexer_type in ('dynamic', 'dynamic_complete'):
            assert lexer_conf.postlex is None
            self.skip_lexer = True
            return

        try:
            create_lexer = {
                'standard': create_traditional_lexer,
                'contextual': create_contextual_lexer,
            }[lexer_type]
        except KeyError:
            assert issubclass(lexer_type, Lexer), lexer_type
            self.lexer = _wrap_lexer(lexer_type)(lexer_conf)
        else:
            self.lexer = create_lexer(lexer_conf, self.parser, lexer_conf.postlex)

        if lexer_conf.postlex:
            self.lexer = PostLexConnector(self.lexer, lexer_conf.postlex)
    
    def _verify_start(self, start=None):
        if start is None:
            start = self.parser_conf.start
            if len(start) > 1:
                raise ConfigurationError("Lark initialized with more than 1 possible start rule. Must specify which start rule to parse", start)
            start ,= start
        elif start not in self.parser_conf.start:
            raise ConfigurationError("Unknown start rule %s. Must be one of %r" % (start, self.parser_conf.start))
        return start

    def parse(self, text, start=None, on_error=None):
        start = self._verify_start(start)
        stream = text if self.skip_lexer else LexerThread(self.lexer, text)
        kw = {} if on_error is None else {'on_error': on_error}
        return self.parser.parse(stream, start, **kw)
    
    def parse_interactive(self, text=None, start=None):
        start = self._verify_start(start)
        if self.parser_conf.parser_type != 'lalr':
            raise ConfigurationError("parse_interactive() currently only works with parser='lalr' ")
        stream = text if self.skip_lexer else LexerThread(self.lexer, text)
        return self.parser.parse_interactive(stream, start)

Ancestors

Methods

def parse(self, text, start=None, on_error=None)
Expand source code
def parse(self, text, start=None, on_error=None):
    start = self._verify_start(start)
    stream = text if self.skip_lexer else LexerThread(self.lexer, text)
    kw = {} if on_error is None else {'on_error': on_error}
    return self.parser.parse(stream, start, **kw)
def parse_interactive(self, text=None, start=None)
Expand source code
def parse_interactive(self, text=None, start=None):
    start = self._verify_start(start)
    if self.parser_conf.parser_type != 'lalr':
        raise ConfigurationError("parse_interactive() currently only works with parser='lalr' ")
    stream = text if self.skip_lexer else LexerThread(self.lexer, text)
    return self.parser.parse_interactive(stream, start)
class Pattern (value, flags=(), raw=None)
Expand source code
class Pattern(Serialize):
    raw = None
    type = None

    def __init__(self, value, flags=(), raw=None):
        self.value = value
        self.flags = frozenset(flags)
        self.raw = raw

    def __repr__(self):
        return repr(self.to_regexp())

    ##

    def __hash__(self):
        return hash((type(self), self.value, self.flags))

    def __eq__(self, other):
        return type(self) == type(other) and self.value == other.value and self.flags == other.flags

    def to_regexp(self):
        raise NotImplementedError()

    def min_width(self):
        raise NotImplementedError()

    def max_width(self):
        raise NotImplementedError()

    if Py36:
        ##

        def _get_flags(self, value):
            for f in self.flags:
                value = ('(?%s:%s)' % (f, value))
            return value

    else:
        def _get_flags(self, value):
            for f in self.flags:
                value = ('(?%s)' % f) + value
            return value

Ancestors

Subclasses

Class variables

var raw
var type

Methods

def max_width(self)
Expand source code
def max_width(self):
    raise NotImplementedError()
def min_width(self)
Expand source code
def min_width(self):
    raise NotImplementedError()
def to_regexp(self)
Expand source code
def to_regexp(self):
    raise NotImplementedError()
class PatternRE (value, flags=(), raw=None)
Expand source code
class PatternRE(Pattern):
    __serialize_fields__ = 'value', 'flags', '_width'

    type = "re"

    def to_regexp(self):
        return self._get_flags(self.value)

    _width = None
    def _get_width(self):
        if self._width is None:
            self._width = get_regexp_width(self.to_regexp())
        return self._width

    @property
    def min_width(self):
        return self._get_width()[0]

    @property
    def max_width(self):
        return self._get_width()[1]

Ancestors

Class variables

var type

Instance variables

var max_width
Expand source code
@property
def max_width(self):
    return self._get_width()[1]
var min_width
Expand source code
@property
def min_width(self):
    return self._get_width()[0]

Methods

def to_regexp(self)
Expand source code
def to_regexp(self):
    return self._get_flags(self.value)
class PatternStr (value, flags=(), raw=None)
Expand source code
class PatternStr(Pattern):
    __serialize_fields__ = 'value', 'flags'

    type = "str"

    def to_regexp(self):
        return self._get_flags(re.escape(self.value))

    @property
    def min_width(self):
        return len(self.value)
    max_width = min_width

Ancestors

Class variables

var type

Instance variables

var max_width
Expand source code
@property
def min_width(self):
    return len(self.value)
var min_width
Expand source code
@property
def min_width(self):
    return len(self.value)

Methods

def to_regexp(self)
Expand source code
def to_regexp(self):
    return self._get_flags(re.escape(self.value))
class PostLex

Helper class that provides a standard way to create an ABC using inheritance.

Expand source code
class PostLex(ABC):
    @abstractmethod
    def process(self, stream):
        return stream

    always_accept = ()

Ancestors

  • abc.ABC

Subclasses

Class variables

var always_accept

Methods

def process(self, stream)
Expand source code
@abstractmethod
def process(self, stream):
    return stream
class PostLexConnector (lexer, postlexer)
Expand source code
class PostLexConnector:
    def __init__(self, lexer, postlexer):
        self.lexer = lexer
        self.postlexer = postlexer

    def make_lexer_state(self, text):
        return self.lexer.make_lexer_state(text)

    def lex(self, lexer_state, parser_state):
        i = self.lexer.lex(lexer_state, parser_state)
        return self.postlexer.process(i)

Methods

def lex(self, lexer_state, parser_state)
Expand source code
def lex(self, lexer_state, parser_state):
    i = self.lexer.lex(lexer_state, parser_state)
    return self.postlexer.process(i)
def make_lexer_state(self, text)
Expand source code
def make_lexer_state(self, text):
    return self.lexer.make_lexer_state(text)
class PropagatePositions (node_builder)
Expand source code
class PropagatePositions:
    def __init__(self, node_builder):
        self.node_builder = node_builder

    def __call__(self, children):
        res = self.node_builder(children)

        ##

        if isinstance(res, Tree):
            res_meta = res.meta
            for c in children:
                if isinstance(c, Tree):
                    child_meta = c.meta
                    if not child_meta.empty:
                        res_meta.line = child_meta.line
                        res_meta.column = child_meta.column
                        res_meta.start_pos = child_meta.start_pos
                        res_meta.empty = False
                        break
                elif isinstance(c, Token):
                    res_meta.line = c.line
                    res_meta.column = c.column
                    res_meta.start_pos = c.pos_in_stream
                    res_meta.empty = False
                    break

            for c in reversed(children):
                if isinstance(c, Tree):
                    child_meta = c.meta
                    if not child_meta.empty:
                        res_meta.end_line = child_meta.end_line
                        res_meta.end_column = child_meta.end_column
                        res_meta.end_pos = child_meta.end_pos
                        res_meta.empty = False
                        break
                elif isinstance(c, Token):
                    res_meta.end_line = c.end_line
                    res_meta.end_column = c.end_column
                    res_meta.end_pos = c.end_pos
                    res_meta.empty = False
                    break

        return res
class Rule (origin, expansion, order=0, alias=None, options=None)
Expand source code
class Rule(Serialize):
    #--
    __slots__ = ('origin', 'expansion', 'alias', 'options', 'order', '_hash')

    __serialize_fields__ = 'origin', 'expansion', 'order', 'alias', 'options'
    __serialize_namespace__ = Terminal, NonTerminal, RuleOptions

    def __init__(self, origin, expansion, order=0, alias=None, options=None):
        self.origin = origin
        self.expansion = expansion
        self.alias = alias
        self.order = order
        self.options = options or RuleOptions()
        self._hash = hash((self.origin, tuple(self.expansion)))

    def _deserialize(self):
        self._hash = hash((self.origin, tuple(self.expansion)))

    def __str__(self):
        return '<%s : %s>' % (self.origin.name, ' '.join(x.name for x in self.expansion))

    def __repr__(self):
        return 'Rule(%r, %r, %r, %r)' % (self.origin, self.expansion, self.alias, self.options)

    def __hash__(self):
        return self._hash

    def __eq__(self, other):
        if not isinstance(other, Rule):
            return False
        return self.origin == other.origin and self.expansion == other.expansion

Ancestors

Instance variables

var alias

Return an attribute of instance, which is of type owner.

var expansion

Return an attribute of instance, which is of type owner.

var options

Return an attribute of instance, which is of type owner.

var order

Return an attribute of instance, which is of type owner.

var origin

Return an attribute of instance, which is of type owner.

class RuleOptions (keep_all_tokens=False, expand1=False, priority=None, template_source=None, empty_indices=())
Expand source code
class RuleOptions(Serialize):
    __serialize_fields__ = 'keep_all_tokens', 'expand1', 'priority', 'template_source', 'empty_indices'

    def __init__(self, keep_all_tokens=False, expand1=False, priority=None, template_source=None, empty_indices=()):
        self.keep_all_tokens = keep_all_tokens
        self.expand1 = expand1
        self.priority = priority
        self.template_source = template_source
        self.empty_indices = empty_indices

    def __repr__(self):
        return 'RuleOptions(%r, %r, %r, %r)' % (
            self.keep_all_tokens,
            self.expand1,
            self.priority,
            self.template_source
        )

Ancestors

class Serialize
Expand source code
class Serialize(object):
    #--

    def memo_serialize(self, types_to_memoize):
        memo = SerializeMemoizer(types_to_memoize)
        return self.serialize(memo), memo.serialize()

    def serialize(self, memo=None):
        if memo and memo.in_types(self):
            return {'@': memo.memoized.get(self)}

        fields = getattr(self, '__serialize_fields__')
        res = {f: _serialize(getattr(self, f), memo) for f in fields}
        res['__type__'] = type(self).__name__
        postprocess = getattr(self, '_serialize', None)
        if postprocess:
            postprocess(res, memo)
        return res

    @classmethod
    def deserialize(cls, data, memo):
        namespace = getattr(cls, '__serialize_namespace__', {})
        namespace = {c.__name__:c for c in namespace}

        fields = getattr(cls, '__serialize_fields__')

        if '@' in data:
            return memo[data['@']]

        inst = cls.__new__(cls)
        for f in fields:
            try:
                setattr(inst, f, _deserialize(data[f], namespace, memo))
            except KeyError as e:
                raise KeyError("Cannot find key for class", cls, e)
        postprocess = getattr(inst, '_deserialize', None)
        if postprocess:
            postprocess()
        return inst

Subclasses

Static methods

def deserialize(data, memo)
Expand source code
@classmethod
def deserialize(cls, data, memo):
    namespace = getattr(cls, '__serialize_namespace__', {})
    namespace = {c.__name__:c for c in namespace}

    fields = getattr(cls, '__serialize_fields__')

    if '@' in data:
        return memo[data['@']]

    inst = cls.__new__(cls)
    for f in fields:
        try:
            setattr(inst, f, _deserialize(data[f], namespace, memo))
        except KeyError as e:
            raise KeyError("Cannot find key for class", cls, e)
    postprocess = getattr(inst, '_deserialize', None)
    if postprocess:
        postprocess()
    return inst

Methods

def memo_serialize(self, types_to_memoize)
Expand source code
def memo_serialize(self, types_to_memoize):
    memo = SerializeMemoizer(types_to_memoize)
    return self.serialize(memo), memo.serialize()
def serialize(self, memo=None)
Expand source code
def serialize(self, memo=None):
    if memo and memo.in_types(self):
        return {'@': memo.memoized.get(self)}

    fields = getattr(self, '__serialize_fields__')
    res = {f: _serialize(getattr(self, f), memo) for f in fields}
    res['__type__'] = type(self).__name__
    postprocess = getattr(self, '_serialize', None)
    if postprocess:
        postprocess(res, memo)
    return res
class SerializeMemoizer (types_to_memoize)
Expand source code
class SerializeMemoizer(Serialize):
    #--

    __serialize_fields__ = 'memoized',

    def __init__(self, types_to_memoize):
        self.types_to_memoize = tuple(types_to_memoize)
        self.memoized = Enumerator()

    def in_types(self, value):
        return isinstance(value, self.types_to_memoize)

    def serialize(self):
        return _serialize(self.memoized.reversed(), None)

    @classmethod
    def deserialize(cls, data, namespace, memo):
        return _deserialize(data, namespace, memo)

Ancestors

Static methods

def deserialize(data, namespace, memo)
Expand source code
@classmethod
def deserialize(cls, data, namespace, memo):
    return _deserialize(data, namespace, memo)

Methods

def in_types(self, value)
Expand source code
def in_types(self, value):
    return isinstance(value, self.types_to_memoize)
def serialize(self)
Expand source code
def serialize(self):
    return _serialize(self.memoized.reversed(), None)
class Symbol (name)
Expand source code
class Symbol(Serialize):
    __slots__ = ('name',)

    is_term = NotImplemented

    def __init__(self, name):
        self.name = name

    def __eq__(self, other):
        assert isinstance(other, Symbol), other
        return self.is_term == other.is_term and self.name == other.name

    def __ne__(self, other):
        return not (self == other)

    def __hash__(self):
        return hash(self.name)

    def __repr__(self):
        return '%s(%r)' % (type(self).__name__, self.name)

    fullrepr = property(__repr__)

Ancestors

Subclasses

Class variables

var is_term

Instance variables

var fullrepr

Return repr(self).

Expand source code
def __repr__(self):
    return '%s(%r)' % (type(self).__name__, self.name)
var name

Return an attribute of instance, which is of type owner.

class Terminal (name, filter_out=False)
Expand source code
class Terminal(Symbol):
    __serialize_fields__ = 'name', 'filter_out'

    is_term = True

    def __init__(self, name, filter_out=False):
        self.name = name
        self.filter_out = filter_out

    @property
    def fullrepr(self):
        return '%s(%r, %r)' % (type(self).__name__, self.name, self.filter_out)

Ancestors

Class variables

var is_term

Inherited members

class TerminalDef (name, pattern, priority=1)
Expand source code
class TerminalDef(Serialize):
    __serialize_fields__ = 'name', 'pattern', 'priority'
    __serialize_namespace__ = PatternStr, PatternRE

    def __init__(self, name, pattern, priority=1):
        assert isinstance(pattern, Pattern), pattern
        self.name = name
        self.pattern = pattern
        self.priority = priority

    def __repr__(self):
        return '%s(%r, %r)' % (type(self).__name__, self.name, self.pattern)

    def user_repr(self):
        if self.name.startswith('__'): ##

            return self.pattern.raw or self.name
        else:
            return self.name

Ancestors

Methods

def user_repr(self)
Expand source code
def user_repr(self):
    if self.name.startswith('__'): ##

        return self.pattern.raw or self.name
    else:
        return self.name
class Token (type_, value, pos_in_stream=None, line=None, column=None, end_line=None, end_column=None, end_pos=None)

str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.str() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to 'strict'.

Expand source code
class Token(Str):
    #--
    __slots__ = ('type', 'pos_in_stream', 'value', 'line', 'column', 'end_line', 'end_column', 'end_pos')

    def __new__(cls, type_, value, pos_in_stream=None, line=None, column=None, end_line=None, end_column=None, end_pos=None):
        try:
            self = super(Token, cls).__new__(cls, value)
        except UnicodeDecodeError:
            value = value.decode('latin1')
            self = super(Token, cls).__new__(cls, value)

        self.type = type_
        self.pos_in_stream = pos_in_stream
        self.value = value
        self.line = line
        self.column = column
        self.end_line = end_line
        self.end_column = end_column
        self.end_pos = end_pos
        return self

    def update(self, type_=None, value=None):
        return Token.new_borrow_pos(
            type_ if type_ is not None else self.type,
            value if value is not None else self.value,
            self
        )

    @classmethod
    def new_borrow_pos(cls, type_, value, borrow_t):
        return cls(type_, value, borrow_t.pos_in_stream, borrow_t.line, borrow_t.column, borrow_t.end_line, borrow_t.end_column, borrow_t.end_pos)

    def __reduce__(self):
        return (self.__class__, (self.type, self.value, self.pos_in_stream, self.line, self.column))

    def __repr__(self):
        return 'Token(%r, %r)' % (self.type, self.value)

    def __deepcopy__(self, memo):
        return Token(self.type, self.value, self.pos_in_stream, self.line, self.column)

    def __eq__(self, other):
        if isinstance(other, Token) and self.type != other.type:
            return False

        return Str.__eq__(self, other)

    __hash__ = Str.__hash__

Ancestors

  • builtins.str

Static methods

def new_borrow_pos(type_, value, borrow_t)
Expand source code
@classmethod
def new_borrow_pos(cls, type_, value, borrow_t):
    return cls(type_, value, borrow_t.pos_in_stream, borrow_t.line, borrow_t.column, borrow_t.end_line, borrow_t.end_column, borrow_t.end_pos)

Instance variables

var column

Return an attribute of instance, which is of type owner.

var end_column

Return an attribute of instance, which is of type owner.

var end_line

Return an attribute of instance, which is of type owner.

var end_pos

Return an attribute of instance, which is of type owner.

var line

Return an attribute of instance, which is of type owner.

var pos_in_stream

Return an attribute of instance, which is of type owner.

var type

Return an attribute of instance, which is of type owner.

var value

Return an attribute of instance, which is of type owner.

Methods

def update(self, type_=None, value=None)
Expand source code
def update(self, type_=None, value=None):
    return Token.new_borrow_pos(
        type_ if type_ is not None else self.type,
        value if value is not None else self.value,
        self
    )
class TraditionalLexer (conf)
Expand source code
class TraditionalLexer(Lexer):

    def __init__(self, conf):
        terminals = list(conf.terminals)
        assert all(isinstance(t, TerminalDef) for t in terminals), terminals

        self.re = conf.re_module

        if not conf.skip_validation:
            ##

            for t in terminals:
                try:
                    self.re.compile(t.pattern.to_regexp(), conf.g_regex_flags)
                except self.re.error:
                    raise LexError("Cannot compile token %s: %s" % (t.name, t.pattern))

                if t.pattern.min_width == 0:
                    raise LexError("Lexer does not allow zero-width terminals. (%s: %s)" % (t.name, t.pattern))

            if not (set(conf.ignore) <= {t.name for t in terminals}):
                raise LexError("Ignore terminals are not defined: %s" % (set(conf.ignore) - {t.name for t in terminals}))

        ##

        self.newline_types = frozenset(t.name for t in terminals if _regexp_has_newline(t.pattern.to_regexp()))
        self.ignore_types = frozenset(conf.ignore)

        terminals.sort(key=lambda x: (-x.priority, -x.pattern.max_width, -len(x.pattern.value), x.name))
        self.terminals = terminals
        self.user_callbacks = conf.callbacks
        self.g_regex_flags = conf.g_regex_flags
        self.use_bytes = conf.use_bytes
        self.terminals_by_name = conf.terminals_by_name

        self._mres = None

    def _build(self):
        terminals, self.callback = _create_unless(self.terminals, self.g_regex_flags, self.re, self.use_bytes)
        assert all(self.callback.values())

        for type_, f in self.user_callbacks.items():
            if type_ in self.callback:
                ##

                self.callback[type_] = CallChain(self.callback[type_], f, lambda t: t.type == type_)
            else:
                self.callback[type_] = f

        self._mres = build_mres(terminals, self.g_regex_flags, self.re, self.use_bytes)

    @property
    def mres(self):
        if self._mres is None:
            self._build()
        return self._mres

    def match(self, text, pos):
        for mre, type_from_index in self.mres:
            m = mre.match(text, pos)
            if m:
                return m.group(0), type_from_index[m.lastindex]

    def lex(self, state, parser_state):
        with suppress(EOFError):
            while True:
                yield self.next_token(state, parser_state)

    def next_token(self, lex_state, parser_state=None):
        line_ctr = lex_state.line_ctr
        while line_ctr.char_pos < len(lex_state.text):
            res = self.match(lex_state.text, line_ctr.char_pos)
            if not res:
                allowed = {v for m, tfi in self.mres for v in tfi.values()} - self.ignore_types
                if not allowed:
                    allowed = {"<END-OF-FILE>"}
                raise UnexpectedCharacters(lex_state.text, line_ctr.char_pos, line_ctr.line, line_ctr.column,
                                           allowed=allowed, token_history=lex_state.last_token and [lex_state.last_token],
                                           state=parser_state, terminals_by_name=self.terminals_by_name)

            value, type_ = res

            if type_ not in self.ignore_types:
                t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
                line_ctr.feed(value, type_ in self.newline_types)
                t.end_line = line_ctr.line
                t.end_column = line_ctr.column
                t.end_pos = line_ctr.char_pos
                if t.type in self.callback:
                    t = self.callback[t.type](t)
                    if not isinstance(t, Token):
                        raise LexError("Callbacks must return a token (returned %r)" % t)
                lex_state.last_token = t
                return t
            else:
                if type_ in self.callback:
                    t2 = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
                    self.callback[type_](t2)
                line_ctr.feed(value, type_ in self.newline_types)

        ##

        raise EOFError(self)

Ancestors

Instance variables

var mres
Expand source code
@property
def mres(self):
    if self._mres is None:
        self._build()
    return self._mres

Methods

def lex(self, state, parser_state)
Expand source code
def lex(self, state, parser_state):
    with suppress(EOFError):
        while True:
            yield self.next_token(state, parser_state)
def match(self, text, pos)
Expand source code
def match(self, text, pos):
    for mre, type_from_index in self.mres:
        m = mre.match(text, pos)
        if m:
            return m.group(0), type_from_index[m.lastindex]
def next_token(self, lex_state, parser_state=None)
Expand source code
def next_token(self, lex_state, parser_state=None):
    line_ctr = lex_state.line_ctr
    while line_ctr.char_pos < len(lex_state.text):
        res = self.match(lex_state.text, line_ctr.char_pos)
        if not res:
            allowed = {v for m, tfi in self.mres for v in tfi.values()} - self.ignore_types
            if not allowed:
                allowed = {"<END-OF-FILE>"}
            raise UnexpectedCharacters(lex_state.text, line_ctr.char_pos, line_ctr.line, line_ctr.column,
                                       allowed=allowed, token_history=lex_state.last_token and [lex_state.last_token],
                                       state=parser_state, terminals_by_name=self.terminals_by_name)

        value, type_ = res

        if type_ not in self.ignore_types:
            t = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
            line_ctr.feed(value, type_ in self.newline_types)
            t.end_line = line_ctr.line
            t.end_column = line_ctr.column
            t.end_pos = line_ctr.char_pos
            if t.type in self.callback:
                t = self.callback[t.type](t)
                if not isinstance(t, Token):
                    raise LexError("Callbacks must return a token (returned %r)" % t)
            lex_state.last_token = t
            return t
        else:
            if type_ in self.callback:
                t2 = Token(type_, value, line_ctr.char_pos, line_ctr.line, line_ctr.column)
                self.callback[type_](t2)
            line_ctr.feed(value, type_ in self.newline_types)

    ##

    raise EOFError(self)
class Transformer (visit_tokens=True)
Expand source code
class Transformer(_Decoratable):
    #--
    __visit_tokens__ = True   ##


    def __init__(self,  visit_tokens=True):
        self.__visit_tokens__ = visit_tokens

    def _call_userfunc(self, tree, new_children=None):
        ##

        children = new_children if new_children is not None else tree.children
        try:
            f = getattr(self, tree.data)
        except AttributeError:
            return self.__default__(tree.data, children, tree.meta)
        else:
            try:
                wrapper = getattr(f, 'visit_wrapper', None)
                if wrapper is not None:
                    return f.visit_wrapper(f, tree.data, children, tree.meta)
                else:
                    return f(children)
            except (GrammarError, Discard):
                raise
            except Exception as e:
                raise VisitError(tree.data, tree, e)

    def _call_userfunc_token(self, token):
        try:
            f = getattr(self, token.type)
        except AttributeError:
            return self.__default_token__(token)
        else:
            try:
                return f(token)
            except (GrammarError, Discard):
                raise
            except Exception as e:
                raise VisitError(token.type, token, e)

    def _transform_children(self, children):
        for c in children:
            try:
                if isinstance(c, Tree):
                    yield self._transform_tree(c)
                elif self.__visit_tokens__ and isinstance(c, Token):
                    yield self._call_userfunc_token(c)
                else:
                    yield c
            except Discard:
                pass

    def _transform_tree(self, tree):
        children = list(self._transform_children(tree.children))
        return self._call_userfunc(tree, children)

    def transform(self, tree):
        #--
        return self._transform_tree(tree)

    def __mul__(self, other):
        #--
        return TransformerChain(self, other)

    def __default__(self, data, children, meta):
        #--
        return Tree(data, children, meta)

    def __default_token__(self, token):
        #--
        return token

Ancestors

  • runflow.hcl2_parser._Decoratable

Subclasses

Methods

def transform(self, tree)
Expand source code
def transform(self, tree):
    #--
    return self._transform_tree(tree)
class TransformerChain (*transformers)
Expand source code
class TransformerChain(object):
    def __init__(self, *transformers):
        self.transformers = transformers

    def transform(self, tree):
        for t in self.transformers:
            tree = t.transform(tree)
        return tree

    def __mul__(self, other):
        return TransformerChain(*self.transformers + (other,))

Methods

def transform(self, tree)
Expand source code
def transform(self, tree):
    for t in self.transformers:
        tree = t.transform(tree)
    return tree
class Transformer_InPlace (visit_tokens=True)
Expand source code
class Transformer_InPlace(Transformer):
    #--
    def _transform_tree(self, tree):           ##

        return self._call_userfunc(tree)

    def transform(self, tree):
        for subtree in tree.iter_subtrees():
            subtree.children = list(self._transform_children(subtree.children))

        return self._transform_tree(tree)

Ancestors

Methods

def transform(self, tree)
Expand source code
def transform(self, tree):
    for subtree in tree.iter_subtrees():
        subtree.children = list(self._transform_children(subtree.children))

    return self._transform_tree(tree)
class Transformer_InPlaceRecursive (visit_tokens=True)
Expand source code
class Transformer_InPlaceRecursive(Transformer):
    #--
    def _transform_tree(self, tree):
        tree.children = list(self._transform_children(tree.children))
        return self._call_userfunc(tree)

Ancestors

class Transformer_NonRecursive (visit_tokens=True)
Expand source code
class Transformer_NonRecursive(Transformer):
    #--

    def transform(self, tree):
        ##

        rev_postfix = []
        q = [tree]
        while q:
            t = q.pop()
            rev_postfix.append(t)
            if isinstance(t, Tree):
                q += t.children

        ##

        stack = []
        for x in reversed(rev_postfix):
            if isinstance(x, Tree):
                size = len(x.children)
                if size:
                    args = stack[-size:]
                    del stack[-size:]
                else:
                    args = []
                stack.append(self._call_userfunc(x, args))
            elif self.__visit_tokens__ and isinstance(x, Token):
                stack.append(self._call_userfunc_token(x))
            else:
                stack.append(x)

        t ,= stack  ##

        return t

Ancestors

Methods

def transform(self, tree)
Expand source code
def transform(self, tree):
    ##

    rev_postfix = []
    q = [tree]
    while q:
        t = q.pop()
        rev_postfix.append(t)
        if isinstance(t, Tree):
            q += t.children

    ##

    stack = []
    for x in reversed(rev_postfix):
        if isinstance(x, Tree):
            size = len(x.children)
            if size:
                args = stack[-size:]
                del stack[-size:]
            else:
                args = []
            stack.append(self._call_userfunc(x, args))
        elif self.__visit_tokens__ and isinstance(x, Token):
            stack.append(self._call_userfunc_token(x))
        else:
            stack.append(x)

    t ,= stack  ##

    return t
class Tree (data, children, meta=None)
Expand source code
class Tree(object):
    #--
    def __init__(self, data, children, meta=None):
        self.data = data
        self.children = children
        self._meta = meta

    @property
    def meta(self):
        if self._meta is None:
            self._meta = Meta()
        return self._meta

    def __repr__(self):
        return 'Tree(%r, %r)' % (self.data, self.children)

    def _pretty_label(self):
        return self.data

    def _pretty(self, level, indent_str):
        if len(self.children) == 1 and not isinstance(self.children[0], Tree):
            return [indent_str*level, self._pretty_label(), '\t', '%s' % (self.children[0],), '\n']

        l = [indent_str*level, self._pretty_label(), '\n']
        for n in self.children:
            if isinstance(n, Tree):
                l += n._pretty(level+1, indent_str)
            else:
                l += [indent_str*(level+1), '%s' % (n,), '\n']

        return l

    def pretty(self, indent_str='  '):
        #--
        return ''.join(self._pretty(0, indent_str))

    def __eq__(self, other):
        try:
            return self.data == other.data and self.children == other.children
        except AttributeError:
            return False

    def __ne__(self, other):
        return not (self == other)

    def __hash__(self):
        return hash((self.data, tuple(self.children)))

    def iter_subtrees(self):
        #--
        queue = [self]
        subtrees = OrderedDict()
        for subtree in queue:
            subtrees[id(subtree)] = subtree
            queue += [c for c in reversed(subtree.children)
                      if isinstance(c, Tree) and id(c) not in subtrees]

        del queue
        return reversed(list(subtrees.values()))

    def find_pred(self, pred):
        #--
        return filter(pred, self.iter_subtrees())

    def find_data(self, data):
        #--
        return self.find_pred(lambda t: t.data == data)

Instance variables

var meta
Expand source code
@property
def meta(self):
    if self._meta is None:
        self._meta = Meta()
    return self._meta

Methods

def find_data(self, data)
Expand source code
def find_data(self, data):
    #--
    return self.find_pred(lambda t: t.data == data)
def find_pred(self, pred)
Expand source code
def find_pred(self, pred):
    #--
    return filter(pred, self.iter_subtrees())
def iter_subtrees(self)
Expand source code
def iter_subtrees(self):
    #--
    queue = [self]
    subtrees = OrderedDict()
    for subtree in queue:
        subtrees[id(subtree)] = subtree
        queue += [c for c in reversed(subtree.children)
                  if isinstance(c, Tree) and id(c) not in subtrees]

    del queue
    return reversed(list(subtrees.values()))
def pretty(self, indent_str=' ')
Expand source code
def pretty(self, indent_str='  '):
    #--
    return ''.join(self._pretty(0, indent_str))
class UnexpectedCharacters (seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None, token_history=None, terminals_by_name=None, considered_rules=None)

Common base class for all non-exit exceptions.

Expand source code
class UnexpectedCharacters(LexError, UnexpectedInput):
    def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None, token_history=None,
                 terminals_by_name=None, considered_rules=None):
        ##

        self.line = line
        self.column = column
        self.pos_in_stream = lex_pos
        self.state = state
        self._terminals_by_name = terminals_by_name

        self.allowed = allowed
        self.considered_tokens = considered_tokens
        self.considered_rules = considered_rules
        self.token_history = token_history

        if isinstance(seq, bytes):
            self.char = seq[lex_pos:lex_pos + 1].decode("ascii", "backslashreplace")
        else:
            self.char = seq[lex_pos]
        self._context = self.get_context(seq)

        super(UnexpectedCharacters, self).__init__()

    def __str__(self):
        message = "No terminal matches '%s' in the current parser context, at line %d col %d" % (self.char, self.line, self.column)
        message += '\n\n' + self._context
        if self.allowed:
            message += self._format_expected(self.allowed)
        if self.token_history:
            message += '\nPrevious tokens: %s\n' % ', '.join(repr(t) for t in self.token_history)
        return message

Ancestors

class UnexpectedEOF (expected, state=None, terminals_by_name=None)

Common base class for all non-exit exceptions.

Expand source code
class UnexpectedEOF(ParseError, UnexpectedInput):
    def __init__(self, expected, state=None, terminals_by_name=None):
        self.expected = expected
        self.state = state
        from .lexer import Token
        self.token = Token("<EOF>", "")  ##

        self.pos_in_stream = -1
        self.line = -1
        self.column = -1
        self._terminals_by_name = terminals_by_name

        super(UnexpectedEOF, self).__init__()

    def __str__(self):
        message = "Unexpected end-of-input. "
        message += self._format_expected(self.expected)
        return message

Ancestors

class UnexpectedInput (*args, **kwargs)

Common base class for all non-exit exceptions.

Expand source code
class UnexpectedInput(LarkError):
    #--
    pos_in_stream = None
    _terminals_by_name = None

    def get_context(self, text, span=40):
        #--
        assert self.pos_in_stream is not None, self
        pos = self.pos_in_stream
        start = max(pos - span, 0)
        end = pos + span
        if not isinstance(text, bytes):
            before = text[start:pos].rsplit('\n', 1)[-1]
            after = text[pos:end].split('\n', 1)[0]
            return before + after + '\n' + ' ' * len(before.expandtabs()) + '^\n'
        else:
            before = text[start:pos].rsplit(b'\n', 1)[-1]
            after = text[pos:end].split(b'\n', 1)[0]
            return (before + after + b'\n' + b' ' * len(before.expandtabs()) + b'^\n').decode("ascii", "backslashreplace")

    def match_examples(self, parse_fn, examples, token_type_match_fallback=False, use_accepts=False):
        #--
        assert self.state is not None, "Not supported for this exception"

        if isinstance(examples, dict):
            examples = examples.items()

        candidate = (None, False)
        for i, (label, example) in enumerate(examples):
            assert not isinstance(example, STRING_TYPE)

            for j, malformed in enumerate(example):
                try:
                    parse_fn(malformed)
                except UnexpectedInput as ut:
                    if ut.state == self.state:
                        if use_accepts and hasattr(self, 'accepts') and ut.accepts != self.accepts:
                            logger.debug("Different accepts with same state[%d]: %s != %s at example [%s][%s]" %
                                         (self.state, self.accepts, ut.accepts, i, j))
                            continue
                        try:
                            if ut.token == self.token:  ##

                                logger.debug("Exact Match at example [%s][%s]" % (i, j))
                                return label

                            if token_type_match_fallback:
                                ##

                                if (ut.token.type == self.token.type) and not candidate[-1]:
                                    logger.debug("Token Type Fallback at example [%s][%s]" % (i, j))
                                    candidate = label, True

                        except AttributeError:
                            pass
                        if candidate[0] is None:
                            logger.debug("Same State match at example [%s][%s]" % (i, j))
                            candidate = label, False

        return candidate[0]

    def _format_expected(self, expected):
        if self._terminals_by_name:
            d = self._terminals_by_name
            expected = [d[t_name].user_repr() if t_name in d else t_name for t_name in expected]
        return "Expected one of: \n\t* %s\n" % '\n\t* '.join(expected)

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException

Subclasses

Class variables

var pos_in_stream

Methods

def get_context(self, text, span=40)
Expand source code
def get_context(self, text, span=40):
    #--
    assert self.pos_in_stream is not None, self
    pos = self.pos_in_stream
    start = max(pos - span, 0)
    end = pos + span
    if not isinstance(text, bytes):
        before = text[start:pos].rsplit('\n', 1)[-1]
        after = text[pos:end].split('\n', 1)[0]
        return before + after + '\n' + ' ' * len(before.expandtabs()) + '^\n'
    else:
        before = text[start:pos].rsplit(b'\n', 1)[-1]
        after = text[pos:end].split(b'\n', 1)[0]
        return (before + after + b'\n' + b' ' * len(before.expandtabs()) + b'^\n').decode("ascii", "backslashreplace")
def match_examples(self, parse_fn, examples, token_type_match_fallback=False, use_accepts=False)
Expand source code
def match_examples(self, parse_fn, examples, token_type_match_fallback=False, use_accepts=False):
    #--
    assert self.state is not None, "Not supported for this exception"

    if isinstance(examples, dict):
        examples = examples.items()

    candidate = (None, False)
    for i, (label, example) in enumerate(examples):
        assert not isinstance(example, STRING_TYPE)

        for j, malformed in enumerate(example):
            try:
                parse_fn(malformed)
            except UnexpectedInput as ut:
                if ut.state == self.state:
                    if use_accepts and hasattr(self, 'accepts') and ut.accepts != self.accepts:
                        logger.debug("Different accepts with same state[%d]: %s != %s at example [%s][%s]" %
                                     (self.state, self.accepts, ut.accepts, i, j))
                        continue
                    try:
                        if ut.token == self.token:  ##

                            logger.debug("Exact Match at example [%s][%s]" % (i, j))
                            return label

                        if token_type_match_fallback:
                            ##

                            if (ut.token.type == self.token.type) and not candidate[-1]:
                                logger.debug("Token Type Fallback at example [%s][%s]" % (i, j))
                                candidate = label, True

                    except AttributeError:
                        pass
                    if candidate[0] is None:
                        logger.debug("Same State match at example [%s][%s]" % (i, j))
                        candidate = label, False

    return candidate[0]
class UnexpectedToken (token, expected, considered_rules=None, state=None, interactive_parser=None, terminals_by_name=None, token_history=None)

Common base class for all non-exit exceptions.

Expand source code
class UnexpectedToken(ParseError, UnexpectedInput):
    #--

    def __init__(self, token, expected, considered_rules=None, state=None, interactive_parser=None, terminals_by_name=None, token_history=None):
        ##

        self.line = getattr(token, 'line', '?')
        self.column = getattr(token, 'column', '?')
        self.pos_in_stream = getattr(token, 'pos_in_stream', None)
        self.state = state

        self.token = token
        self.expected = expected  ##

        self._accepts = NO_VALUE
        self.considered_rules = considered_rules
        self.interactive_parser = interactive_parser
        self._terminals_by_name = terminals_by_name
        self.token_history = token_history

        super(UnexpectedToken, self).__init__()

    @property
    def accepts(self):
        if self._accepts is NO_VALUE:
            self._accepts = self.interactive_parser and self.interactive_parser.accepts()
        return self._accepts

    def __str__(self):
        message = ("Unexpected token %r at line %s, column %s.\n%s"
                   % (self.token, self.line, self.column, self._format_expected(self.accepts or self.expected)))
        if self.token_history:
            message += "Previous tokens: %r\n" % self.token_history

        return message

    @property
    def puppet(self):
        warn("UnexpectedToken.puppet attribute has been renamed to interactive_parser", DeprecationWarning)
        return self.interactive_parser

Ancestors

Instance variables

var accepts
Expand source code
@property
def accepts(self):
    if self._accepts is NO_VALUE:
        self._accepts = self.interactive_parser and self.interactive_parser.accepts()
    return self._accepts
var puppet
Expand source code
@property
def puppet(self):
    warn("UnexpectedToken.puppet attribute has been renamed to interactive_parser", DeprecationWarning)
    return self.interactive_parser
class UnlessCallback (mres)
Expand source code
class UnlessCallback:
    def __init__(self, mres):
        self.mres = mres

    def __call__(self, t):
        for mre, type_from_index in self.mres:
            m = mre.match(t.value)
            if m:
                t.type = type_from_index[m.lastindex]
                break
        return t
class VisitError (rule, obj, orig_exc)

Common base class for all non-exit exceptions.

Expand source code
class VisitError(LarkError):
    #--

    def __init__(self, rule, obj, orig_exc):
        self.obj = obj
        self.orig_exc = orig_exc

        message = 'Error trying to process rule "%s":\n\n%s' % (rule, orig_exc)
        super(VisitError, self).__init__(message)

Ancestors

  • LarkError
  • builtins.Exception
  • builtins.BaseException
class Visitor
Expand source code
class Visitor(VisitorBase):
    #--

    def visit(self, tree):
        #--
        for subtree in tree.iter_subtrees():
            self._call_userfunc(subtree)
        return tree

    def visit_topdown(self,tree):
        #--
        for subtree in tree.iter_subtrees_topdown():
            self._call_userfunc(subtree)
        return tree

Ancestors

Methods

def visit(self, tree)
Expand source code
def visit(self, tree):
    #--
    for subtree in tree.iter_subtrees():
        self._call_userfunc(subtree)
    return tree
def visit_topdown(self, tree)
Expand source code
def visit_topdown(self,tree):
    #--
    for subtree in tree.iter_subtrees_topdown():
        self._call_userfunc(subtree)
    return tree
class VisitorBase
Expand source code
class VisitorBase:
    def _call_userfunc(self, tree):
        return getattr(self, tree.data, self.__default__)(tree)

    def __default__(self, tree):
        #--
        return tree

    def __class_getitem__(cls, _):
        return cls

Subclasses

class Visitor_Recursive
Expand source code
class Visitor_Recursive(VisitorBase):
    #--

    def visit(self, tree):
        #--
        for child in tree.children:
            if isinstance(child, Tree):
                self.visit(child)

        self._call_userfunc(tree)
        return tree

    def visit_topdown(self,tree):
        #--
        self._call_userfunc(tree)

        for child in tree.children:
            if isinstance(child, Tree):
                self.visit_topdown(child)

        return tree

Ancestors

Methods

def visit(self, tree)
Expand source code
def visit(self, tree):
    #--
    for child in tree.children:
        if isinstance(child, Tree):
            self.visit(child)

    self._call_userfunc(tree)
    return tree
def visit_topdown(self, tree)
Expand source code
def visit_topdown(self,tree):
    #--
    self._call_userfunc(tree)

    for child in tree.children:
        if isinstance(child, Tree):
            self.visit_topdown(child)

    return tree