// File: pfnet-research[P]pml/src/expr_ast.cpp
// Function: ast::to_debug_string[abi:cxx11](ast::expr_t const&)
std::string to_debug_string(expr_t const& e) {
    switch (e.kind()) {
    case expr_kind_t::Let: {
            auto const& let = cast<let_expr_t>(e);
            return "Let(" +
                let.name + ", " +
                to_debug_string(*let.init) + ", " +
                to_debug_string(*let.body) + ")";
        }
    case expr_kind_t::LetFun: {
            auto const& letfun = cast<letfun_expr_t>(e);
            std::string args = letfun.type.args[0].name;
            for (size_t i=1; i<letfun.type.args.size(); ++i)
                args += ", " + letfun.type.args[i].name;
            auto init = to_debug_string(*letfun.init);
            auto body = to_debug_string(*letfun.body);
            return format("LetFun({}, [{}], {}, {})",
                    letfun.name, args, init, body);
        }
    case expr_kind_t::If: {
            auto const& if_expr = cast<if_expr_t>(e);
            return "If(" +
                to_debug_string(*if_expr.cond_expr) + ", " +
                to_debug_string(*if_expr.true_expr) + ", " +
                to_debug_string(*if_expr.false_expr) + ")";
        }
    case expr_kind_t::App: {
            auto const& app_expr = cast<app_expr_t>(e);
            auto f = to_debug_string(*app_expr.f);
            std::string args = to_debug_string(*app_expr.args[0]);
            for (size_t i=1; i<app_expr.args.size(); ++i) {
                args += ", " + to_debug_string(*app_expr.args[i]);
            }
            return format("App({}, [{}])", f, args);
        }
    case expr_kind_t::Rand: {
            auto const& rand_expr = cast<rand_expr_t>(e);
            return "Rand(" +
                std::to_string(rand_expr.start) + ", " +
                std::to_string(rand_expr.end) + ")";
        }
    case expr_kind_t::Eq:  case expr_kind_t::Neq:
    case expr_kind_t::Leq: case expr_kind_t::Geq:
    case expr_kind_t::Add: case expr_kind_t::Sub:
    case expr_kind_t::Mul: case expr_kind_t::Div:
    case expr_kind_t::And: case expr_kind_t::Or:  {
            auto const& binop_expr = cast<binop_expr_t>(e);
            return to_string(binop_expr.kind()) + "(" +
                to_debug_string(*binop_expr.lhs) + ", " +
                to_debug_string(*binop_expr.rhs) + ")";
        }
    case expr_kind_t::Neg:
        return "Neg(" + to_debug_string(*cast<neg_expr_t>(e).inner) + ")";
    case expr_kind_t::Typed: {
            auto const& typed_expr = cast<typed_expr_t>(e);
            return "Typed(" +
                to_debug_string(*typed_expr.expr) + ", " +
                to_debug_string(typed_expr.type) + ")";
        }
    case expr_kind_t::Int:
        return std::to_string(cast<int_expr_t>(e).n);
    case expr_kind_t::Bool:
        if (cast<bool_expr_t>(e).b)
            return "true";
        else
            return "false";
    case expr_kind_t::Var:
        return cast<var_expr_t>(e).name;
    default:
        throw std::logic_error{"invalid expr to make debug string : " + std::to_string(static_cast<int>(e.kind()))};
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6d0, %rsp            # imm = 0x6D0
movq %rdi, -0x660(%rbp)
movq %rdi, %rax
movq %rax, -0x658(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movl %eax, %ecx
movq %rcx, -0x650(%rbp)
subl $0x14, %eax
ja 0x1d175
movq -0x650(%rbp), %rax
leaq 0x7f798(%rip), %rcx     # 0x9b818
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rdi
callq 0x1bd20
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdx
addq $0x8, %rdx
leaq 0x7f829(%rip), %rsi     # 0x9b8ce
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x668(%rbp)
callq 0x1dee0
movq -0x668(%rbp), %rsi
leaq 0x7f80d(%rip), %rdx     # 0x9b8d3
leaq -0x98(%rbp), %rdi
callq 0x1ddc0
jmp 0x1c0d4
movq -0x18(%rbp), %rdi
addq $0x28, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0xe8(%rbp), %rdi
callq 0x1c030
jmp 0x1c0f2
leaq -0x78(%rbp), %rdi
leaq -0x98(%rbp), %rsi
leaq -0xe8(%rbp), %rdx
callq 0x1de10
jmp 0x1c10b
leaq 0x7f7c1(%rip), %rdx     # 0x9b8d3
leaq -0x58(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x1ddc0
jmp 0x1c121
movq -0x18(%rbp), %rdi
addq $0x38, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x108(%rbp), %rdi
callq 0x1c030
jmp 0x1c13f
leaq -0x38(%rbp), %rdi
leaq -0x58(%rbp), %rsi
leaq -0x108(%rbp), %rdx
callq 0x1de10
jmp 0x1c155
movq -0x660(%rbp), %rdi
leaq 0x7d24f(%rip), %rdx     # 0x993b2
leaq -0x38(%rbp), %rsi
callq 0x1ddc0
jmp 0x1c16e
leaq -0x38(%rbp), %rdi
callq 0xa240
leaq -0x108(%rbp), %rdi
callq 0xa240
leaq -0x58(%rbp), %rdi
callq 0xa240
leaq -0x78(%rbp), %rdi
callq 0xa240
leaq -0xe8(%rbp), %rdi
callq 0xa240
leaq -0x98(%rbp), %rdi
callq 0xa240
leaq -0xb8(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c28d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c281
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c275
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c26c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c263
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c257
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x38(%rbp), %rdi
callq 0xa240
leaq -0x108(%rbp), %rdi
callq 0xa240
leaq -0x58(%rbp), %rdi
callq 0xa240
leaq -0x78(%rbp), %rdi
callq 0xa240
leaq -0xe8(%rbp), %rdi
callq 0xa240
leaq -0x98(%rbp), %rdi
callq 0xa240
leaq -0xb8(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bd60
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rdi
addq $0x28, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x1dff0
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0xa190
movq $0x1, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq %rax, -0x670(%rbp)
movq -0x110(%rbp), %rdi
addq $0x28, %rdi
callq 0x13340
movq %rax, %rcx
movq -0x670(%rbp), %rax
cmpq %rcx, %rax
jae 0x1c3ae
movq -0x110(%rbp), %rdi
addq $0x28, %rdi
movq -0x138(%rbp), %rsi
callq 0x1dff0
movq %rax, %rdx
leaq 0x7f5a5(%rip), %rsi     # 0x9b8d3
leaq -0x158(%rbp), %rdi
callq 0x1dee0
jmp 0x1c33c
leaq -0x130(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0xa4e0
jmp 0x1c351
leaq -0x158(%rbp), %rdi
callq 0xa240
movq -0x138(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x138(%rbp)
jmp 0x1c2dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c502
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x158(%rbp), %rdi
callq 0xa240
jmp 0x1c502
movq -0x110(%rbp), %rdi
addq $0x78, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x178(%rbp), %rdi
callq 0x1c030
jmp 0x1c3cf
movq -0x110(%rbp), %rdi
addq $0x88, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x198(%rbp), %rdi
callq 0x1c030
jmp 0x1c3f3
leaq -0x1b9(%rbp), %rdi
movq %rdi, -0x678(%rbp)
callq 0xa660
movq -0x678(%rbp), %rdx
leaq 0x7f4c2(%rip), %rsi     # 0x9b8d6
leaq -0x1b8(%rbp), %rdi
callq 0x1dd10
jmp 0x1c422
movq -0x660(%rbp), %rdi
movq -0x110(%rbp), %rdx
addq $0x8, %rdx
leaq -0x1b8(%rbp), %rsi
leaq -0x130(%rbp), %rcx
leaq -0x178(%rbp), %r8
leaq -0x198(%rbp), %r9
callq 0x1d2a0
jmp 0x1c457
leaq -0x1b8(%rbp), %rdi
callq 0xa240
leaq -0x1b9(%rbp), %rdi
callq 0xa420
leaq -0x198(%rbp), %rdi
callq 0xa240
leaq -0x178(%rbp), %rdi
callq 0xa240
leaq -0x130(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c4f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c4de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x1b8(%rbp), %rdi
callq 0xa240
leaq -0x1b9(%rbp), %rdi
callq 0xa420
leaq -0x198(%rbp), %rdi
callq 0xa240
leaq -0x178(%rbp), %rdi
callq 0xa240
leaq -0x130(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bda0
movq %rax, -0x1c8(%rbp)
movq -0x1c8(%rbp), %rdi
addq $0x8, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x288(%rbp), %rdi
movq %rdi, -0x680(%rbp)
callq 0x1c030
movq -0x680(%rbp), %rdx
leaq 0x7f398(%rip), %rsi     # 0x9b8ef
leaq -0x268(%rbp), %rdi
callq 0x12fb0
jmp 0x1c565
leaq 0x7f367(%rip), %rdx     # 0x9b8d3
leaq -0x248(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x1ddc0
jmp 0x1c581
movq -0x1c8(%rbp), %rdi
addq $0x18, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x2a8(%rbp), %rdi
callq 0x1c030
jmp 0x1c5a2
leaq -0x228(%rbp), %rdi
leaq -0x248(%rbp), %rsi
leaq -0x2a8(%rbp), %rdx
callq 0x1de10
jmp 0x1c5be
leaq 0x7f30e(%rip), %rdx     # 0x9b8d3
leaq -0x208(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x1ddc0
jmp 0x1c5da
movq -0x1c8(%rbp), %rdi
addq $0x28, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x2c8(%rbp), %rdi
callq 0x1c030
jmp 0x1c5fb
leaq -0x1e8(%rbp), %rdi
leaq -0x208(%rbp), %rsi
leaq -0x2c8(%rbp), %rdx
callq 0x1de10
jmp 0x1c617
movq -0x660(%rbp), %rdi
leaq 0x7cd8d(%rip), %rdx     # 0x993b2
leaq -0x1e8(%rbp), %rsi
callq 0x1ddc0
jmp 0x1c633
leaq -0x1e8(%rbp), %rdi
callq 0xa240
leaq -0x2c8(%rbp), %rdi
callq 0xa240
leaq -0x208(%rbp), %rdi
callq 0xa240
leaq -0x228(%rbp), %rdi
callq 0xa240
leaq -0x2a8(%rbp), %rdi
callq 0xa240
leaq -0x248(%rbp), %rdi
callq 0xa240
leaq -0x268(%rbp), %rdi
callq 0xa240
leaq -0x288(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c793
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c787
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c77b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c76f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c763
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c757
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c74b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x1e8(%rbp), %rdi
callq 0xa240
leaq -0x2c8(%rbp), %rdi
callq 0xa240
leaq -0x208(%rbp), %rdi
callq 0xa240
leaq -0x228(%rbp), %rdi
callq 0xa240
leaq -0x2a8(%rbp), %rdi
callq 0xa240
leaq -0x248(%rbp), %rdi
callq 0xa240
leaq -0x268(%rbp), %rdi
callq 0xa240
leaq -0x288(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bde0
movq %rax, -0x2d0(%rbp)
movq -0x2d0(%rbp), %rdi
addq $0x8, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x2f0(%rbp), %rdi
callq 0x1c030
movq -0x2d0(%rbp), %rdi
addq $0x18, %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x133e0
movq %rax, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x310(%rbp), %rdi
callq 0x1c030
jmp 0x1c800
movq $0x1, -0x318(%rbp)
movq -0x318(%rbp), %rax
movq %rax, -0x688(%rbp)
movq -0x2d0(%rbp), %rdi
addq $0x18, %rdi
callq 0x13370
movq %rax, %rcx
movq -0x688(%rbp), %rax
cmpq %rcx, %rax
jae 0x1c93d
movq -0x2d0(%rbp), %rdi
addq $0x18, %rdi
movq -0x318(%rbp), %rsi
callq 0x133e0
movq %rax, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x358(%rbp), %rdi
callq 0x1c030
jmp 0x1c86c
leaq 0x7f060(%rip), %rsi     # 0x9b8d3
leaq -0x338(%rbp), %rdi
leaq -0x358(%rbp), %rdx
callq 0x12fb0
jmp 0x1c888
leaq -0x310(%rbp), %rdi
leaq -0x338(%rbp), %rsi
callq 0xa4e0
jmp 0x1c89d
leaq -0x338(%rbp), %rdi
callq 0xa240
leaq -0x358(%rbp), %rdi
callq 0xa240
movq -0x318(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x318(%rbp)
jmp 0x1c80b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1ca0e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1ca02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c92c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x338(%rbp), %rdi
callq 0xa240
leaq -0x358(%rbp), %rdi
callq 0xa240
jmp 0x1ca02
leaq -0x379(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0xa660
movq -0x690(%rbp), %rdx
leaq 0x7ef95(%rip), %rsi     # 0x9b8f3
leaq -0x378(%rbp), %rdi
callq 0x1dd10
jmp 0x1c96c
movq -0x660(%rbp), %rdi
leaq -0x378(%rbp), %rsi
leaq -0x2f0(%rbp), %rdx
leaq -0x310(%rbp), %rcx
callq 0x1d530
jmp 0x1c98f
leaq -0x378(%rbp), %rdi
callq 0xa240
leaq -0x379(%rbp), %rdi
callq 0xa420
leaq -0x310(%rbp), %rdi
callq 0xa240
leaq -0x2f0(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1c9f6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x378(%rbp), %rdi
callq 0xa240
leaq -0x379(%rbp), %rdi
callq 0xa420
leaq -0x310(%rbp), %rdi
callq 0xa240
leaq -0x2f0(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1be50
movq %rax, -0x388(%rbp)
movq -0x388(%rbp), %rax
movl 0x8(%rax), %esi
leaq -0x408(%rbp), %rdi
movq %rdi, -0x698(%rbp)
callq 0x1e010
movq -0x698(%rbp), %rdx
leaq 0x7eea7(%rip), %rsi     # 0x9b901
leaq -0x3e8(%rbp), %rdi
callq 0x12fb0
jmp 0x1ca68
leaq 0x7ee64(%rip), %rdx     # 0x9b8d3
leaq -0x3c8(%rbp), %rdi
leaq -0x3e8(%rbp), %rsi
callq 0x1ddc0
jmp 0x1ca84
movq -0x388(%rbp), %rax
movl 0xc(%rax), %esi
leaq -0x428(%rbp), %rdi
callq 0x1e010
jmp 0x1ca9c
leaq -0x3a8(%rbp), %rdi
leaq -0x3c8(%rbp), %rsi
leaq -0x428(%rbp), %rdx
callq 0x1de10
jmp 0x1cab8
movq -0x660(%rbp), %rdi
leaq 0x7c8ec(%rip), %rdx     # 0x993b2
leaq -0x3a8(%rbp), %rsi
callq 0x1ddc0
jmp 0x1cad4
leaq -0x3a8(%rbp), %rdi
callq 0xa240
leaq -0x428(%rbp), %rdi
callq 0xa240
leaq -0x3c8(%rbp), %rdi
callq 0xa240
leaq -0x3e8(%rbp), %rdi
callq 0xa240
leaq -0x408(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cba7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cb9b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cb8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cb83
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x3a8(%rbp), %rdi
callq 0xa240
leaq -0x428(%rbp), %rdi
callq 0xa240
leaq -0x3c8(%rbp), %rdi
callq 0xa240
leaq -0x3e8(%rbp), %rdi
callq 0xa240
leaq -0x408(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1be90
movq %rax, -0x430(%rbp)
movq -0x430(%rbp), %rdi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movl %eax, %esi
leaq -0x4d0(%rbp), %rdi
movq %rdi, -0x6a0(%rbp)
callq 0x1ae60
movq -0x6a0(%rbp), %rsi
leaq 0x7f069(%rip), %rdx     # 0x9bc63
leaq -0x4b0(%rbp), %rdi
callq 0x1ddc0
jmp 0x1cc08
movq -0x430(%rbp), %rdi
addq $0x8, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x4f0(%rbp), %rdi
callq 0x1c030
jmp 0x1cc29
leaq -0x490(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
leaq -0x4f0(%rbp), %rdx
callq 0x1de10
jmp 0x1cc45
leaq 0x7ec87(%rip), %rdx     # 0x9b8d3
leaq -0x470(%rbp), %rdi
leaq -0x490(%rbp), %rsi
callq 0x1ddc0
jmp 0x1cc61
movq -0x430(%rbp), %rdi
addq $0x18, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x510(%rbp), %rdi
callq 0x1c030
jmp 0x1cc82
leaq -0x450(%rbp), %rdi
leaq -0x470(%rbp), %rsi
leaq -0x510(%rbp), %rdx
callq 0x1de10
jmp 0x1cc9e
movq -0x660(%rbp), %rdi
leaq 0x7c706(%rip), %rdx     # 0x993b2
leaq -0x450(%rbp), %rsi
callq 0x1ddc0
jmp 0x1ccba
leaq -0x450(%rbp), %rdi
callq 0xa240
leaq -0x510(%rbp), %rdi
callq 0xa240
leaq -0x470(%rbp), %rdi
callq 0xa240
leaq -0x490(%rbp), %rdi
callq 0xa240
leaq -0x4f0(%rbp), %rdi
callq 0xa240
leaq -0x4b0(%rbp), %rdi
callq 0xa240
leaq -0x4d0(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cdeb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cddf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cdd3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cdc7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cdbb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1cdaf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x450(%rbp), %rdi
callq 0xa240
leaq -0x510(%rbp), %rdi
callq 0xa240
leaq -0x470(%rbp), %rdi
callq 0xa240
leaq -0x490(%rbp), %rdi
callq 0xa240
leaq -0x4f0(%rbp), %rdi
callq 0xa240
leaq -0x4b0(%rbp), %rdi
callq 0xa240
leaq -0x4d0(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bed0
movq %rax, %rdi
addq $0x8, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x550(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x1c030
movq -0x6a8(%rbp), %rdx
leaq 0x7ead2(%rip), %rsi     # 0x9b907
leaq -0x530(%rbp), %rdi
callq 0x12fb0
jmp 0x1ce43
movq -0x660(%rbp), %rdi
leaq 0x7c561(%rip), %rdx     # 0x993b2
leaq -0x530(%rbp), %rsi
callq 0x1ddc0
jmp 0x1ce5f
leaq -0x530(%rbp), %rdi
callq 0xa240
leaq -0x550(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1ceae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x530(%rbp), %rdi
callq 0xa240
leaq -0x550(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bf10
movq %rax, -0x558(%rbp)
movq -0x558(%rbp), %rdi
addq $0x8, %rdi
callq 0x13020
movq %rax, %rsi
leaq -0x5d8(%rbp), %rdi
movq %rdi, -0x6b0(%rbp)
callq 0x1c030
movq -0x6b0(%rbp), %rdx
leaq 0x7ea09(%rip), %rsi     # 0x9b90c
leaq -0x5b8(%rbp), %rdi
callq 0x12fb0
jmp 0x1cf11
leaq 0x7e9bb(%rip), %rdx     # 0x9b8d3
leaq -0x598(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x1ddc0
jmp 0x1cf2d
movq -0x558(%rbp), %rsi
addq $0x18, %rsi
leaq -0x5f8(%rbp), %rdi
callq 0x95e00
jmp 0x1cf46
leaq -0x578(%rbp), %rdi
leaq -0x598(%rbp), %rsi
leaq -0x5f8(%rbp), %rdx
callq 0x1de10
jmp 0x1cf62
movq -0x660(%rbp), %rdi
leaq 0x7c442(%rip), %rdx     # 0x993b2
leaq -0x578(%rbp), %rsi
callq 0x1ddc0
jmp 0x1cf7e
leaq -0x578(%rbp), %rdi
callq 0xa240
leaq -0x5f8(%rbp), %rdi
callq 0xa240
leaq -0x598(%rbp), %rdi
callq 0xa240
leaq -0x5b8(%rbp), %rdi
callq 0xa240
leaq -0x5d8(%rbp), %rdi
callq 0xa240
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d051
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d045
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d039
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d02d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x578(%rbp), %rdi
callq 0xa240
leaq -0x5f8(%rbp), %rdi
callq 0xa240
leaq -0x598(%rbp), %rdi
callq 0xa240
leaq -0x5b8(%rbp), %rdi
callq 0xa240
leaq -0x5d8(%rbp), %rdi
callq 0xa240
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1bf80
movq -0x660(%rbp), %rdi
movl 0x8(%rax), %esi
callq 0x1e010
jmp 0x1d277
movq -0x10(%rbp), %rdi
callq 0x1bff0
testb $0x1, 0x8(%rax)
je 0x1d0f1
leaq -0x5f9(%rbp), %rdi
movq %rdi, -0x6b8(%rbp)
callq 0xa660
movq -0x660(%rbp), %rdi
movq -0x6b8(%rbp), %rdx
leaq 0x8508a(%rip), %rsi     # 0xa2140
callq 0x1dd10
jmp 0x1d0bd
leaq -0x5f9(%rbp), %rdi
callq 0xa420
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x5f9(%rbp), %rdi
callq 0xa420
jmp 0x1d287
leaq -0x5fa(%rbp), %rdi
movq %rdi, -0x6c0(%rbp)
callq 0xa660
movq -0x660(%rbp), %rdi
movq -0x6c0(%rbp), %rdx
leaq 0x82b8e(%rip), %rsi     # 0x9fca7
callq 0x1dd10
jmp 0x1d120
leaq -0x5fa(%rbp), %rdi
callq 0xa420
jmp 0x1d277
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x5fa(%rbp), %rdi
callq 0xa420
jmp 0x1d287
movq -0x10(%rbp), %rdi
callq 0x1d7b0
movq -0x660(%rbp), %rdi
movq %rax, %rsi
addq $0x8, %rsi
callq 0xa190
jmp 0x1d277
movb $0x1, -0x641(%rbp)
movl $0x10, %edi
callq 0xa1d0
movq %rax, -0x6d0(%rbp)
movq -0x10(%rbp), %rdi
movq (%rdi), %rax
movq (%rax), %rax
callq *%rax
movl %eax, -0x6c4(%rbp)
jmp 0x1d1a1
movl -0x6c4(%rbp), %esi
leaq -0x640(%rbp), %rdi
callq 0x1e010
jmp 0x1d1b5
leaq 0x7e757(%rip), %rsi     # 0x9b913
leaq -0x620(%rbp), %rdi
leaq -0x640(%rbp), %rdx
callq 0x12fb0
jmp 0x1d1d1
movq -0x6d0(%rbp), %rdi
leaq -0x620(%rbp), %rsi
callq 0xa570
jmp 0x1d1e6
movq -0x6d0(%rbp), %rdi
movb $0x0, -0x641(%rbp)
movq 0xc9dd5(%rip), %rsi     # 0xe6fd0
movq 0xc9d8e(%rip), %rdx     # 0xe6f90
callq 0xa610
jmp 0x1d293
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d25e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
jmp 0x1d252
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xc0(%rbp)
movl %eax, -0xc4(%rbp)
leaq -0x620(%rbp), %rdi
callq 0xa240
leaq -0x640(%rbp), %rdi
callq 0xa240
testb $0x1, -0x641(%rbp)
jne 0x1d269
jmp 0x1d275
movq -0x6d0(%rbp), %rdi
callq 0xa2c0
jmp 0x1d287
movq -0x658(%rbp), %rax
addq $0x6d0, %rsp            # imm = 0x6D0
popq %rbp
retq
movq -0xc0(%rbp), %rdi
callq 0xa650
nopw %cs:(%rax,%rax)