// File: /workspace/github_cpp_makefile_star2_O1/pfnet-research[P]pml/src/simple_type.cpp
// Function: simty::simple_typing[abi:cxx11](ast::expr_t const&, environment_t<simty::type_t> const&)
result_t simple_typing(ast::expr_t const& expr, type_env_t const& env) {
    using namespace ast;
    switch (expr.kind()) {
    case expr_kind_t::LetFun: {
        auto const& letfun = cast<letfun_expr_t>(expr);
        auto const& simty = type_t::from(letfun.type);
        auto const& fun_simty = cast<fun_type_t>(*simty);
        auto init_env = env.append(letfun.name, simty);
        for (size_t i=0; i<fun_simty.args.size(); ++i)
            init_env = init_env.append(letfun.type.args[i].name, fun_simty.args[i]);
        auto init_typing_result = simple_typing(*letfun.init, init_env);
        if (init_typing_result.is_error())
            return init_typing_result;
        auto body_env = env.append(letfun.name, simty);
        return simple_typing(*letfun.body, body_env);
        }
    case expr_kind_t::App: {
        auto const& f_typing_result = simple_typing(*cast<app_expr_t>(expr).f, env);
        if (f_typing_result.is_error())
            return f_typing_result;
        auto const& fun_ty = cast<fun_type_t>(*f_typing_result.ok());
        auto const& args = cast<app_expr_t>(expr).args;
        if (fun_ty.args.size() != args.size()) {
            return result_t::error(format(
                        "not match numbers of parameters and arguments (param {} vs arg {}) in \"{}\"",
                        fun_ty.args.size(), args.size(), to_debug_string(expr)));
        }
        for (size_t i=0; i<args.size(); ++i) {
            auto arg_ty_result = simple_typing(*args[i], env);
            if (arg_ty_result.is_error())
                return arg_ty_result;
            if (*arg_ty_result.ok() != *fun_ty.args[i]) {
                return result_t::error(format(
                        "not match {}th parameter and arguments ({} vs {}) in \"{}\"",
                        to_debug_string(*arg_ty_result.ok()), to_debug_string(*fun_ty.args[i]),
                        to_debug_string(expr)));
            }
        }
        return fun_ty.ret;
        }
    case expr_kind_t::Fun:
        // do not appear in syntax
        throw std::logic_error{"fun expr can not appear"};
    case expr_kind_t::Let: {
            auto init_result = simple_typing(*cast<let_expr_t>(expr).init, env);
            if (init_result.is_error())
                return init_result;
            auto new_env = env.append(cast<let_expr_t>(expr).name, init_result.ok());
            return simple_typing(*cast<let_expr_t>(expr).body, new_env);
        }
    case expr_kind_t::If: {
        auto const& cond_result = simple_typing(*cast<if_expr_t>(expr).cond_expr, env);
        auto const& tr_result = simple_typing(*cast<if_expr_t>(expr).true_expr, env);
        auto const& fl_result = simple_typing(*cast<if_expr_t>(expr).false_expr, env);
        auto sub_result = cond_result && tr_result && fl_result;
        if (sub_result.is_error())
            return sub_result;
        if (*cond_result.ok() != simty::bool_type_t{})
            return result_t::error(format("condition of if expr must be boolean in \"{}\"", to_debug_string(expr)));
        if (*tr_result.ok() != *fl_result.ok())
            return result_t::error(format("not match types of branches of if expr in \"{}\"", to_debug_string(expr)));
        return tr_result;
        }
    case expr_kind_t::Rand:
        return result_t::ok(make<simty::int_type_t>());
    case expr_kind_t::Typed: {
        auto const& inner = *cast<typed_expr_t>(expr).expr;
        auto const& expr_ty_result = simple_typing(inner, env);
        if (expr_ty_result.is_error())
            return expr_ty_result;
        auto const& ty = type_t::from(cast<typed_expr_t>(expr).type);
        if (*expr_ty_result.ok() == *ty)
            return expr_ty_result;
        else
            return result_t::error(format("{} has simple type {}, but expected {}",
                        to_debug_string(inner),
                        to_debug_string(*expr_ty_result.ok()), to_debug_string(*ty)));
        }
    case expr_kind_t::Add:
    case expr_kind_t::Sub:
    case expr_kind_t::Mul:
    case expr_kind_t::Div: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto const& sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::int_type_t{} || *rhs_result.ok() != simty::int_type_t{}) {
            return result_t::error(format(
                    "can not apply arithmetic binary operation to non-integer expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::int_type_t>());
        }
    case expr_kind_t::Neg: {
        auto const& inner_result = simple_typing(*cast<neg_expr_t>(expr).inner, env);
        if (inner_result.is_error())
            return inner_result;
        if (*inner_result.ok() != simty::bool_type_t{}) {
            return result_t::error(format(
                    "can not apply negation operator to non-boolean expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::Eq:
    case expr_kind_t::Neq:
    case expr_kind_t::Leq:
    case expr_kind_t::Geq: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::int_type_t{} || *rhs_result.ok() != simty::int_type_t{}) {
            return result_t::error(format(
                    "can not apply comparison operation to non-boolean expression in {}",
                    to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::And:
    case expr_kind_t::Or: {
        auto const& lhs_result = simple_typing(*cast<binop_expr_t>(expr).lhs, env);
        auto const& rhs_result = simple_typing(*cast<binop_expr_t>(expr).rhs, env);
        auto const& sub_result = lhs_result && rhs_result;
        if (sub_result.is_error())
            return sub_result;
        if (*lhs_result.ok() != simty::bool_type_t{} || *rhs_result.ok() != simty::bool_type_t{}) {
            return result_t::error(format(
                        "can not apply logical binary operation to non-boolean expression in {}",
                        to_debug_string(expr)));
        }
        return result_t::ok(make<simty::bool_type_t>());
        }
    case expr_kind_t::Int:
        return result_t::ok(make<simty::int_type_t>());
    case expr_kind_t::Bool:
        return result_t::ok(make<simty::bool_type_t>());
    case expr_kind_t::Var:
        return result_t::ok(env.lookup(cast<var_expr_t>(expr).name));
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, 0x8(%rsp)
movq (%rsi), %rax
movq %rsi, %rdi
callq *(%rax)
movl %eax, %eax
leaq 0x2016f(%rip), %rcx     # 0x48d10
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x37ebf(%rip), %rsi     # 0x60a70
leaq 0x38048(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
leaq 0x37e8d(%rip), %rsi     # 0x60a70
leaq 0x38016(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0f1
movq 0x18(%rax), %rsi
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x1, 0x80(%rsp)
jne 0x28e4f
leaq 0x88(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x2bd48
jmp 0x28e69
leaq 0x37e36(%rip), %rsi     # 0x60a70
leaq 0x37fbf(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
leaq 0x37e04(%rip), %rsi     # 0x60a70
leaq 0x37f8d(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0ec
movq 0x18(%rax), %rsi
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x1, 0x80(%rsp)
jne 0x28d77
leaq 0x88(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x2bd48
jmp 0x28d91
leaq 0x37dad(%rip), %rsi     # 0x60a70
leaq 0x37f36(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
leaq 0x37d7b(%rip), %rsi     # 0x60a70
leaq 0x37f04(%rip), %rdx     # 0x60c00
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0f6
movq 0x18(%rax), %rsi
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x1, 0x80(%rsp)
jne 0x295f3
leaq 0x88(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x2bd48
jmp 0x2960d
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x39654(%rip), %rcx     # 0x623b8
movq %rcx, (%rax)
leaq 0x10(%rax), %rcx
leaq 0x397c6(%rip), %rdx     # 0x62538
jmp 0x2904e
leaq 0x60(%rsp), %rdi
callq 0x19d3c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d602
movb 0xa8(%rsp), %al
testb %al, %al
je 0x28f26
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x39784(%rip), %rbx     # 0x62538
leaq 0x10(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2bb38
movl %eax, %ebp
movb $0x1, %al
testb %bpl, %bpl
je 0x28de9
leaq 0x38(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x100(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2bb38
xorb $0x1, %al
testb %bpl, %bpl
testb %al, %al
je 0x2970d
movq 0x8(%rsp), %rbx
leaq 0xe0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x20102(%rip), %rsi     # 0x48f0e
leaq 0x2013d(%rip), %rdx     # 0x48f50
leaq 0xd0(%rsp), %rdi
callq 0x11866
leaq 0xb0(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x10(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x2b76b
jmp 0x296c5
leaq 0x60(%rsp), %rdi
callq 0x19d3c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d602
cmpb $0x0, 0xa8(%rsp)
je 0x28f5e
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq 0x8(%rsp), %rbx
movq (%rax), %rdi
leaq 0x396a8(%rip), %r15     # 0x62538
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2bb38
movl %eax, %ebp
movb $0x1, %al
testb %bpl, %bpl
je 0x28ec5
leaq 0x38(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x100(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2bb38
xorb $0x1, %al
testb %bpl, %bpl
testb %al, %al
je 0x29756
leaq 0xe0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1ffa1(%rip), %rsi     # 0x48e84
leaq 0x1ffe3(%rip), %rdx     # 0x48ecd
leaq 0xd0(%rsp), %rdi
callq 0x11866
leaq 0xb0(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x10(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x2b76b
jmp 0x296c5
movq 0x8(%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x297e3
movq %rdx, (%rsi)
movq 0x98(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x297e9
leaq 0x88(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29e1e
leaq 0x37af4(%rip), %rsi     # 0x60a70
leaq 0x37c95(%rip), %rdx     # 0x60c18
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x0, 0x20(%r12)
je 0x29816
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x3952e(%rip), %rbx     # 0x624f8
leaq 0x38(%rsp), %rsi
movq %rbx, (%rsi)
callq 0x2bb38
testb %al, %al
je 0x299fb
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x3940a(%rip), %rcx     # 0x62408
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %rbx, 0x10(%rax)
movq 0x8(%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29e35
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x393c8(%rip), %rcx     # 0x62408
movq %rcx, (%rax)
leaq 0x10(%rax), %rcx
leaq 0x394aa(%rip), %rdx     # 0x624f8
movq %rdx, 0x10(%rax)
movq 0x8(%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29e3f
leaq 0x37a02(%rip), %rsi     # 0x60a70
leaq 0x37b73(%rip), %rdx     # 0x60be8
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
leaq 0x379d0(%rip), %rsi     # 0x60a70
leaq 0x37b41(%rip), %rdx     # 0x60be8
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0fb
movq 0x18(%rax), %rsi
leaq 0x38(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
leaq 0x3799e(%rip), %rsi     # 0x60a70
leaq 0x37b0f(%rip), %rdx     # 0x60be8
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a105
movq 0x28(%rax), %rsi
leaq 0x88(%rsp), %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x1, 0x80(%rsp)
jne 0x29884
leaq 0xd0(%rsp), %rdi
leaq 0x38(%rsp), %rsi
callq 0x2bd48
jmp 0x2989e
leaq 0x37944(%rip), %rsi     # 0x60a70
leaq 0x37b15(%rip), %rdx     # 0x60c48
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %rsi
leaq 0x60(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x0, 0x20(%r12)
je 0x2982a
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x39346(%rip), %rsi     # 0x624c0
leaq 0x3934f(%rip), %rdx     # 0x624d0
xorl %ecx, %ecx
callq 0x9340
movq %rax, 0xf8(%rsp)
testq %rax, %rax
je 0x2a146
leaq 0x378d0(%rip), %rsi     # 0x60a70
leaq 0x37aa1(%rip), %rdx     # 0x60c48
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a14b
movq %rax, %r13
movq 0xf8(%rsp), %rcx
movq 0x10(%rcx), %rax
subq 0x8(%rcx), %rax
movq 0x20(%r13), %rcx
subq 0x18(%r13), %rcx
cmpq %rcx, %rax
jne 0x29a50
movq 0x20(%r13), %rax
cmpq 0x18(%r13), %rax
je 0x29262
xorl %r12d, %r12d
leaq 0x38(%rsp), %rdi
xorl %ebp, %ebp
movq %r13, %r15
movq 0x18(%r13), %rax
movq (%rax,%r12), %rsi
movq %rdi, %r13
movq %rbx, %rdx
callq 0x28b74
movb 0x58(%rsp), %al
testb %al, %al
je 0x29f0d
movq %r13, %rdi
callq 0x2bd94
movq (%rax), %rdi
movq 0xf8(%rsp), %rax
movq 0x8(%rax), %rax
movq (%rax,%r12), %rsi
callq 0x2bb38
testb %al, %al
je 0x29f3f
movq %r13, %rdi
callq 0x19d96
movq %r13, %rdi
movq %r15, %r13
movq 0x20(%r15), %rax
subq 0x18(%r15), %rax
incq %rbp
sarq $0x4, %rax
addq $0x10, %r12
cmpq %rax, %rbp
jb 0x291f2
movq 0x8(%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq 0xf8(%rsp), %rcx
movq 0x20(%rcx), %rax
movq %rax, (%rdx)
movq 0x28(%rcx), %rax
movq %rax, 0x8(%rdx)
testq %rax, %rax
je 0x29e35
movq 0x39d1e(%rip), %rcx     # 0x62fb0
cmpb $0x0, (%rcx)
je 0x2a006
incl 0x8(%rax)
jmp 0x29e35
leaq 0x377c6(%rip), %rsi     # 0x60a70
leaq 0x37877(%rip), %rdx     # 0x60b28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x28(%rax), %rsi
leaq 0x60(%rsp), %r12
movq %r12, %rdi
movq %rbx, %rdx
callq 0x28b74
movb 0x20(%r12), %al
testb %al, %al
je 0x2983e
leaq 0x37784(%rip), %rsi     # 0x60a70
leaq 0x37835(%rip), %rdx     # 0x60b28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a13c
movq %rax, %r12
leaq 0x60(%rsp), %rdi
callq 0x2bd94
addq $0x8, %r12
leaq 0x38(%rsp), %rdi
movq %rbx, %rsi
movq %r12, %rdx
movq %rax, %rcx
callq 0x2bcca
leaq 0x3773f(%rip), %rsi     # 0x60a70
leaq 0x377f0(%rip), %rdx     # 0x60b28
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a150
movq 0x38(%rax), %rsi
leaq 0x38(%rsp), %rdx
movq 0x8(%rsp), %rdi
callq 0x28b74
leaq 0x38(%rsp), %rdi
callq 0x2c312
jmp 0x29e35
leaq 0x376fc(%rip), %rsi     # 0x60a70
leaq 0x377c5(%rip), %rdx     # 0x60b40
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq %rax, %r12
leaq 0x28(%rax), %rsi
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rsi, 0xf8(%rsp)
callq 0x28a60
movq (%r14), %rdi
leaq 0x3910c(%rip), %rsi     # 0x624c0
leaq 0x39115(%rip), %rdx     # 0x624d0
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a100
movq %rax, %rbp
movq %r12, 0x130(%rsp)
leaq 0x8(%r12), %rdx
leaq 0x38(%rsp), %rdi
leaq 0x10(%rsp), %rcx
movq %rbx, 0x128(%rsp)
movq %rbx, %rsi
movq %rdx, 0x120(%rsp)
callq 0x2bcca
movq 0x10(%rbp), %rax
cmpq 0x8(%rbp), %rax
je 0x29468
xorl %ebx, %ebx
leaq 0x60(%rsp), %r12
leaq 0x38(%rsp), %r14
xorl %r15d, %r15d
xorl %r13d, %r13d
movq 0xf8(%rsp), %rax
movq (%rax), %rdx
addq %r15, %rdx
movq 0x8(%rbp), %rcx
addq %rbx, %rcx
movq %r12, %rdi
movq %r14, %rsi
callq 0x2bcca
movq %r14, %rdi
movq %r12, %rsi
callq 0x2c1d8
movq %r12, %rdi
callq 0x2c312
incq %r13
movq 0x10(%rbp), %rax
subq 0x8(%rbp), %rax
sarq $0x4, %rax
addq $0x38, %r15
addq $0x10, %rbx
cmpq %rax, %r13
jb 0x29419
movq 0x130(%rsp), %rbx
movq 0x78(%rbx), %rsi
leaq 0x60(%rsp), %rdi
leaq 0x38(%rsp), %rdx
callq 0x28b74
movb 0x80(%rsp), %al
testb %al, %al
movq 0x8(%rsp), %rdi
movq 0x128(%rsp), %rsi
je 0x299ce
leaq 0x88(%rsp), %rdi
leaq 0x10(%rsp), %rcx
movq 0x120(%rsp), %rdx
callq 0x2bcca
movq 0x88(%rbx), %rsi
leaq 0x88(%rsp), %rdx
movq 0x8(%rsp), %rdi
callq 0x28b74
leaq 0x88(%rsp), %rdi
callq 0x2c312
jmp 0x29cf8
leaq 0x37585(%rip), %rsi     # 0x60a70
leaq 0x37786(%rip), %rdx     # 0x60c78
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
movq 0x8(%rax), %r12
leaq 0x60(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
movq %rbx, %rdx
callq 0x28b74
cmpb $0x0, 0x20(%r13)
je 0x29870
leaq 0x37542(%rip), %rsi     # 0x60a70
leaq 0x37743(%rip), %rdx     # 0x60c78
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a141
addq $0x18, %rax
leaq 0x100(%rsp), %rdi
movq %rax, %rsi
callq 0x289fc
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
movq 0x100(%rsp), %r14
movq %r14, %rsi
callq 0x2bb38
testb %al, %al
je 0x29b11
leaq 0x60(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29ef2
leaq 0x374d4(%rip), %rsi     # 0x60a70
leaq 0x3768d(%rip), %rdx     # 0x60c30
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x9340
testq %rax, %rax
je 0x2a0e7
addq $0x8, %rax
leaq 0x60(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
callq 0x2bdf0
movq 0x8(%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq (%r14), %rax
movq %rax, (%rdx)
xorl %eax, %eax
movq %rax, 0x8(%rdx)
movq 0x8(%r14), %rcx
movq %rax, 0x8(%r14)
movq %rcx, 0x8(%rdx)
jmp 0x29e3f
leaq 0x60(%rsp), %rdi
callq 0x19d3c
leaq 0x88(%rsp), %rdi
movq %rax, %rsi
callq 0x2d602
cmpb $0x0, 0xa8(%rsp)
je 0x296f6
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq 0x8(%rsp), %rbx
movq (%rax), %rdi
leaq 0x38ec4(%rip), %r15     # 0x624f8
leaq 0x10(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2bb38
movl %eax, %ebp
movb $0x1, %al
testb %bpl, %bpl
je 0x29669
leaq 0x38(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x100(%rsp), %rsi
movq %r15, (%rsi)
callq 0x2bb38
xorb $0x1, %al
testb %bpl, %bpl
testb %al, %al
je 0x2995f
leaq 0xe0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f8ca(%rip), %rsi     # 0x48f51
leaq 0x1f909(%rip), %rdx     # 0x48f97
leaq 0xd0(%rsp), %rdi
callq 0x11866
leaq 0xb0(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x10(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x2b76b
movq %rbx, %rsi
movb $0x0, 0x20(%rbx)
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x2977a
movq %rdx, (%rsi)
movq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29780
leaq 0x88(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29e1e
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38cdc(%rip), %rcx     # 0x62408
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
leaq 0x38dbb(%rip), %rdx     # 0x624f8
movq %rdx, 0x10(%rax)
movq 0x8(%rsp), %rdx
movb $0x1, 0x20(%rdx)
movq %rcx, (%rdx)
movq %rax, 0x8(%rdx)
jmp 0x29e1e
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38c43(%rip), %rcx     # 0x623b8
jmp 0x2997e
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x10(%rsp)
movq $0x0, 0x18(%rsp)
movb $0x0, 0x20(%rsp)
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x297bd
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0xd0(%rsp), %rdi
cmpq %r15, %rdi
je 0x29e1e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29e1e
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x90(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x88(%rsp)
movq $0x0, 0x90(%rsp)
movb $0x0, 0x98(%rsp)
jmp 0x29e1e
leaq 0x60(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29e35
leaq 0x60(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29e35
movq 0x8(%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29c25
movq %rdx, (%rsi)
movq 0x70(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29c2b
leaq 0x60(%rsp), %rsi
movq 0x8(%rsp), %rdi
callq 0x2bd48
jmp 0x29e35
leaq 0x60(%rsp), %rdi
callq 0x19d3c
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0x2d602
cmpb $0x1, 0xf0(%rsp)
jne 0x298bc
leaq 0x10(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x2bd48
jmp 0x298d6
leaq 0xd0(%rsp), %rdi
callq 0x19d3c
leaq 0x10(%rsp), %rdi
movq %rax, %rsi
callq 0x2d602
leaq 0xd0(%rsp), %rdi
callq 0x19d96
movb 0x30(%rsp), %al
testb %al, %al
je 0x2999c
movq 0x8(%rsp), %rbx
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rdi
leaq 0x38bf0(%rip), %rax     # 0x624f8
leaq 0xd0(%rsp), %rsi
movq %rax, (%rsi)
callq 0x2bb38
testb %al, %al
je 0x29bcc
leaq 0x38(%rsp), %rdi
callq 0x2bd94
movq (%rax), %r15
leaq 0x88(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rsi
movq %r15, %rdi
callq 0x2bb38
testb %al, %al
je 0x29d24
leaq 0x38(%rsp), %rsi
movq %rbx, %rdi
callq 0x2bd48
jmp 0x29e14
movl $0x18, %edi
callq 0x92d0
movabsq $0x100000001, %rcx      # imm = 0x100000001
movq %rcx, 0x8(%rax)
leaq 0x38a8a(%rip), %rcx     # 0x62408
movq %rcx, (%rax)
movq %rax, %rcx
addq $0x10, %rcx
movq %r15, 0x10(%rax)
movb $0x1, 0x20(%rbx)
movq %rcx, (%rbx)
movq %rax, 0x8(%rbx)
jmp 0x29e1e
movq 0x8(%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29caf
movq %rdx, (%rsi)
movq 0x20(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29cb5
movb %al, 0x20(%rdi)
leaq 0x10(%rdi), %rcx
movq %rcx, (%rdi)
leaq 0x70(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29cd6
movq %rdx, (%rdi)
movq 0x70(%rsp), %rcx
movq %rcx, 0x10(%rdi)
jmp 0x29cdc
movq 0x8(%rsp), %rbx
leaq 0x98(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f4bb(%rip), %rsi     # 0x48ece
leaq 0x1f4f3(%rip), %rdx     # 0x48f0d
leaq 0x88(%rsp), %rdi
callq 0x11866
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x10(%rsp), %rdx
callq 0x2b76b
jmp 0x29ae0
movq 0x8(%rsp), %rbx
leaq 0x98(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f2fc(%rip), %rsi     # 0x48d64
leaq 0x1f33f(%rip), %rdx     # 0x48dae
leaq 0x88(%rsp), %rdi
callq 0x11866
movq 0xf8(%rsp), %rcx
movq 0x10(%rcx), %rax
subq 0x8(%rcx), %rax
sarq $0x4, %rax
movq %rax, 0xd0(%rsp)
movq 0x20(%r13), %rax
subq 0x18(%r13), %rax
sarq $0x4, %rax
movq %rax, 0xb0(%rsp)
leaq 0x10(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
leaq 0x10(%rsp), %r8
callq 0x2a4d7
movq %rbx, %rsi
movb $0x0, 0x20(%rbx)
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0x48(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29c4c
movq %rdx, (%rsi)
movq 0x48(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29c52
movq 0x8(%rsp), %rbx
leaq 0x98(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f334(%rip), %rsi     # 0x48e5d
leaq 0x1f353(%rip), %rdx     # 0x48e83
leaq 0x88(%rsp), %rdi
callq 0x11866
leaq 0x10(%rsp), %rdi
movq %r12, %rsi
callq 0xeab5
leaq 0x60(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x2b483
leaq 0xb0(%rsp), %rdi
movq %r14, %rsi
callq 0x2b483
leaq 0x38(%rsp), %rdi
leaq 0x88(%rsp), %rsi
leaq 0x10(%rsp), %rdx
leaq 0xd0(%rsp), %rcx
leaq 0xb0(%rsp), %r8
callq 0x2aca9
movq %rbx, %rsi
movb $0x0, 0x20(%rbx)
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0x48(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29e56
movq %rdx, (%rsi)
movq 0x48(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29e5c
leaq 0xc0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f222(%rip), %rsi     # 0x48e01
leaq 0x1f247(%rip), %rdx     # 0x48e2d
leaq 0xb0(%rsp), %rdi
callq 0x11866
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq 0x2b76b
jmp 0x29d78
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x68(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x60(%rsp)
movq $0x0, 0x68(%rsp)
movb $0x0, 0x70(%rsp)
jmp 0x29e35
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x40(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x38(%rsp)
movq $0x0, 0x40(%rsp)
movb $0x0, 0x48(%rsp)
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29c89
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x29e35
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29e35
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x18(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x10(%rsp)
movq $0x0, 0x18(%rsp)
movb $0x0, 0x20(%rsp)
jmp 0x29e14
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x68(%rsp), %rcx
movq %rcx, 0x8(%rdi)
movq %rax, 0x60(%rsp)
movq $0x0, 0x68(%rsp)
movb $0x0, 0x70(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x19d96
leaq 0x38(%rsp), %rdi
callq 0x2c312
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x29e3f
callq 0xaa12
jmp 0x29e3f
leaq 0xc0(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1f0f7(%rip), %rsi     # 0x48e2e
leaq 0x1f11e(%rip), %rdx     # 0x48e5c
leaq 0xb0(%rsp), %rdi
callq 0x11866
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0xd0(%rsp), %rdi
leaq 0xb0(%rsp), %rsi
leaq 0x100(%rsp), %rdx
callq 0x2b76b
movq %rbx, %rsi
movb $0x0, 0x20(%rbx)
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x29da8
movq %rdx, (%rsi)
movq 0xe0(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x29dae
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0xd8(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0xd0(%rsp)
movq $0x0, 0xd8(%rsp)
movb $0x0, 0xe0(%rsp)
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29df7
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0xb0(%rsp), %rdi
cmpq %r15, %rdi
je 0x29e14
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0x10(%rsp), %rdi
callq 0x19d96
leaq 0x88(%rsp), %rdi
callq 0x19d96
leaq 0x38(%rsp), %rdi
callq 0x19d96
leaq 0x60(%rsp), %rdi
callq 0x19d96
movq 0x8(%rsp), %rax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x40(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x38(%rsp)
movq $0x0, 0x40(%rsp)
movb $0x0, 0x48(%rsp)
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29e99
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29eba
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x29ed5
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x29ef2
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x29e35
callq 0xaa12
jmp 0x29e35
movq 0x8(%rsp), %rsi
movb %al, 0x20(%rsi)
leaq 0x10(%rsi), %rcx
movq %rcx, (%rsi)
leaq 0x48(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x2a00f
movq %rdx, (%rsi)
movq 0x48(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x2a015
movq 0x8(%rsp), %rbx
leaq 0x20(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x1ee5b(%rip), %rsi     # 0x48daf
leaq 0x1ee8d(%rip), %rdx     # 0x48de8
leaq 0x10(%rsp), %rdi
callq 0x11866
leaq 0x38(%rsp), %rdi
callq 0x2bd94
movq (%rax), %rsi
leaq 0xd0(%rsp), %rdi
callq 0x2b483
movq 0xf8(%rsp), %rax
movq 0x8(%rax), %rax
movq (%rax,%r12), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x2b483
leaq 0x100(%rsp), %rdi
movq %r14, %rsi
callq 0xeab5
leaq 0x88(%rsp), %rdi
leaq 0x10(%rsp), %rsi
leaq 0xd0(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
leaq 0x100(%rsp), %r8
callq 0x2aca9
movq %rbx, %rsi
movb $0x0, 0x20(%rbx)
leaq 0x10(%rbx), %rcx
movq %rcx, (%rbx)
leaq 0x98(%rsp), %rax
movq -0x10(%rax), %rdx
cmpq %rax, %rdx
je 0x2a036
movq %rdx, (%rsi)
movq 0x98(%rsp), %rcx
movq %rcx, 0x10(%rsi)
jmp 0x2a03c
lock
incl 0x8(%rax)
jmp 0x29e35
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x40(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x38(%rsp)
movq $0x0, 0x40(%rsp)
movb $0x0, 0x48(%rsp)
jmp 0x29e2b
movups (%rax), %xmm0
movups %xmm0, (%rcx)
movq 0x90(%rsp), %rcx
movq %rcx, 0x8(%rsi)
movq %rax, 0x88(%rsp)
movq $0x0, 0x90(%rsp)
movb $0x0, 0x98(%rsp)
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a085
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a0a6
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a0c7
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x29e2b
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x29e2b
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
movl $0x10, %edi
callq 0x9150
movq %rax, %r14
leaq 0x1eccb(%rip), %rsi     # 0x48de9
movq %rax, %rdi
callq 0x93c0
movq 0x38ea3(%rip), %rsi     # 0x62fd0
movq 0x38e74(%rip), %rdx     # 0x62fa8
movq %r14, %rdi
callq 0x94b0
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
callq 0x9530
movq %rax, %rbx
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a17e
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a17e
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a1a4
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a1a4
movq %rax, %rbx
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a1cf
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a1cf
jmp 0x2a493
movq %rax, %rbx
movq 0x10(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a496
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a496
jmp 0x2a1f8
jmp 0x2a21e
jmp 0x2a449
movq %rax, %rbx
leaq 0x110(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a221
movq 0x110(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a221
movq %rax, %rbx
movq 0xb0(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a44c
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a44c
jmp 0x2a449
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a275
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a275
movq %rax, %rbx
leaq 0xe0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a34b
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a34b
movq %rax, %rbx
jmp 0x2a366
jmp 0x2a2b0
jmp 0x2a432
jmp 0x2a2d5
movq %rax, %rbx
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a2d8
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a2d8
jmp 0x2a4a4
movq %rax, %rbx
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a4a7
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a4a7
jmp 0x2a4a4
jmp 0x2a4a4
movq %rax, %rbx
movq %r14, %rdi
callq 0x9200
jmp 0x2a4b1
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x2c312
jmp 0x2a32d
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x19d96
jmp 0x2a4bc
jmp 0x2a3b6
jmp 0x2a449
jmp 0x2a3de
movq %rax, %rbx
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a366
movq 0x20(%rsp), %rsi
incq %rsi
callq 0x92e0
movq 0x88(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a435
movq 0x98(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a435
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a4a4
jmp 0x2a4a4
jmp 0x2a4a4
jmp 0x2a4a4
jmp 0x2a4b9
jmp 0x2a3b6
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2a3e1
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a3e1
jmp 0x2a3de
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
cmpq %r15, %rdi
je 0x2a480
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x92e0
jmp 0x2a480
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a47d
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x2c312
jmp 0x2a4a7
jmp 0x2a428
jmp 0x2a4a4
jmp 0x2a4a4
movq %rax, %rbx
jmp 0x2a4c6
jmp 0x2a4a4
movq %rax, %rbx
movq 0x108(%rsp), %rdi
testq %rdi, %rdi
je 0x2a4a7
callq 0xaa12
jmp 0x2a4a7
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
jmp 0x2a45e
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x19d96
jmp 0x2a480
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a4a4
jmp 0x2a4a4
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a493
jmp 0x2a4a4
jmp 0x2a47d
jmp 0x2a47d
jmp 0x2a493
jmp 0x2a493
movq %rax, %rbx
leaq 0x88(%rsp), %rdi
callq 0x19d96
jmp 0x2a496
jmp 0x2a4a4
jmp 0x2a493
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x19d96
jmp 0x2a4a7
jmp 0x2a4a4
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x19d96
movq %rbx, %rdi
callq 0x94e0
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x2c312
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x2a4b1
callq 0xaa12
jmp 0x2a4b1