// File: /workspace/github_cpp_makefile_star2_O3/kmyk[P]procon26/beam_search.cpp
// Function: beam_search_solver::operator()(board const&, std::vector<block, std::allocator<block>> const&)
vector<placement_t> operator () (board const & a_brd, vector<block> const & blks) {
        // 初期化
        n = blks.size();
        repeat (j,2) remaining_small_blks[j].resize(n);
        repeat_reverse (i,n-1) {
            repeat (j,2) {
                remaining_small_blks[j][i] = remaining_small_blks[j][i+1];
            }
            if (blks[i+1].area() <= 2) {
                remaining_small_blks[blks[i+1].area() - 1][i] += 1;
            }
        }
        highscore = a_brd.area();
        if (make_pair(a_brd.area(), 0) < make_pair(g_best_score, g_best_stone)) {
            g_best_score = a_brd.area();
            g_best_stone = 0;
        }
        // ビームサーチ 初期状態
        vector<photon_ptr> beam;
        for (auto && brd : a_brd.split()) { // 初期の非連結成分同士は真に独立
            photon_ptr ppho = make_shared<photon_t>();
            photon_t & pho = *ppho;
            pho.brd = brd;
            pho.score = a_brd.area();
            pho.stone_count = 0;
            pho.circumference = 0; // 相対的なもののみ気にするので0でよい
            pho.remaining_stone = 0;
            for (auto && blk : blks) pho.remaining_stone += blk.area();
            pho.plc.resize(n, { false });
            pho.bix = 0;
            for (int & it : pho.isolated) it = 0;
            pho.solver = this;
            beam.push_back(ppho);
        }
int nthbeam = 0;
        // ビーム発射
        vector<photon_ptr> next;
        unordered_set<bitset<board_size*board_size> > used_board;
        while (not beam.empty()) {
            for (auto && ppho : beam) {
                photon_t const & pho = *ppho;
                // ハイスコアの更新
                if (make_pair(pho.score, pho.stone_count) < make_pair(highscore, least_stone)) {
                    highscore = pho.score;
                    least_stone = pho.stone_count;
                    result = pho.plc;
                }
                // 石を置く
                int bix = pho.bix;
                while (bix < n and pho.plc[bix].used) bix += 1;
                if (bix < n) {
                    block const & blk = blks[bix];
                    { // 置かなかった場合
                        photon_ptr npho = make_shared<photon_t>();
                        *npho = pho;
                        npho->bix = bix + 1;
                        npho->dead_stone += blk.area();
                        npho->remaining_stone -= blk.area();
                        next.push_back(npho);
                    }
                    bool is_just_used = false; // ぴったり嵌るような使われ方をしたか // used_componentsと処理が被っている
                    set<vector<int> > used_components;
                    int pushed_count = 0;
                    placement_t p = initial_placement(blk, pho.brd.stone_offset());
                    do {
                        int skip;
                        if (pho.brd.is_puttable(blk, p, 2+bix, &skip)) {
                            photon_ptr pnpho = make_shared<photon_t>();
                            *pnpho = pho;
                            photon_t & npho = *pnpho;
                            npho.plc[bix] = p;
                            npho.stone_count += 1;
                            npho.bix = bix + 1;
                            npho.score -= blk.area();
                            npho.remaining_stone -= blk.area();
                            // circumference 更新
                            repeat (j, blk.area()) {
                                point_t q = blk.stones(p.f,p.r)[j] + p.p;
                                repeat (i,4) {
                                    auto r = q + dp[i];
                                    npho.circumference +=
                                        not is_on_board(r) ? -1 :
                                        npho.brd.at(r) == 0 ? 1 :
                                        -1;
                                }
                                npho.brd.put(q, 2+bix);
                            }
                            // ぴったり嵌まる場合
                            if (pho.circumference - npho.circumference == blk.circumference()) {
                                if (is_just_used) continue;
                                is_just_used = true;
                                if (1 <= blk.area() and blk.area() <= 4) {
                                    npho.isolated[blk.area() - 1] -= 1;
                                }
                            }
                            npho.brd.update();
                            // 接続する空白
                            vector<point_t> neighbors;
                            repeat (j, blk.area()) {
                                point_t q = blk.stones(p.f,p.r)[j] + p.p;
                                repeat (i,4) {
                                    auto r = q + dp[i];
                                    if (is_on_board(r) and npho.brd.at(r) == 0) {
                                        neighbors.push_back(r);
                                    }
                                }
                            }
                            // cache
                            if (used_board.count(npho.brd.packed())) continue;
                            if (2 <= n and cache and cache->count(npho.brd.packed())) continue;
                            used_board.insert(npho.brd.packed());
                            // 周囲の孤立した空白の探索
                            set<point_t> looked_cell;
                            vector<int> components;
                            bool is_diverged = false; // there are some too large components
                            for (point_t q : neighbors) {
                                if (looked_cell.count(q)) continue;
                                set<point_t> current;
                                current.insert(q);
                                int n = 1; // 空白の大きさ
                                stack<point_t> stk;
                                stk.push(q);
                                // dfs
                                while (not stk.empty()) {
                                    point_t r = stk.top(); stk.pop();
                                    repeat (i,4) {
                                        auto s = r + dp[i];
                                        if (looked_cell.count(s)) {
                                            n = 1000000007;
                                            break;
                                        }
                                        if (not current.count(s) and is_on_board(s) and npho.brd.at(s) == 0) {
                                            current.insert(s);
                                            stk.push(s);
                                            n += 1;
                                        }
                                    }
                                    if (5 <= n) break;
                                }
                                if (1 <= n and n <= 4) {
                                    npho.isolated[n-1] += 1;
                                }
                                if (5 <= n) is_diverged = true;
                                if (not is_diverged) {
                                    // 空白の種類の判別
                                    if (n == 1 or n == 2) {
                                        components.push_back(n);
                                    } else if (n == 3) {
                                        vector<point_t> ps(current.begin(), current.end());
                                        components.push_back(3 + (cross(ps[1] - ps[0], ps[2] - ps[0]) == 0 ? 0 : 1));
                                    } else if (n == 4) {
                                        vector<point_t> ps(current.begin(), current.end());
                                        int sy = abs(ps[3].y + ps[2].y + ps[1].y - 3 * ps[0].y);
                                        int sx = abs(ps[3].x + ps[2].x + ps[1].x - 3 * ps[0].x);
                                        components.push_back(component_pack_table[min(sy, sx) + max(sy, sx) * 10]);
                                    }
                                }
                                copy(current.begin(), current.end(), inserter(looked_cell, looked_cell.begin()));
                            }
                            if (not is_diverged) { // 小さい空白だけに分割する場合の重複排除
                                sort(components.begin(), components.end());
                                if (used_components.count(components)) continue;
                                used_components.insert(components);
                            }
                            if (is_just_used) {
                                repeat (i,pushed_count) next.pop_back();
                                next.push_back(pnpho);
                                break; // justなら必ずそれを使うことにする
                            }
                            next.push_back(pnpho);
                            pushed_count += 1;
                        }
                        p.p.x += skip - 1;
                    } while (next_placement(p, blk, pho.brd.stone_offset(), pho.brd.stone_offset() + pho.brd.stone_size()));
                }
                if (beam_width * 10 < next.size()) { // 全部貯めてるとoom killerさん
                    sort(next.rbegin(), next.rend(), &photon_ptr_comparator);
                    next.resize(beam_width);
                }
            }
            sort(next.rbegin(), next.rend(), &photon_ptr_comparator);
            if (beam_width < next.size()) next.resize(beam_width);
            for (auto && ppho : next) ppho->brd.shrink();
            if (cache) for (auto && ppho : next) cache->insert(ppho->brd.packed());
            next.swap(beam);
            next.clear();
            used_board.clear();
            // ここからその石に関して終わったので出力
cerr << "beam " << (nthbeam ++) << " : " << beam.size() << endl;
if (cache) cerr << "cache " << cache->size() << endl;
            // 全体のハイスコアの更新と出力
            if (make_pair(highscore, least_stone) < make_pair(g_best_score, g_best_stone)) {
                g_provisional_result = { result };
                g_best_score = highscore;
                g_best_stone = least_stone;
#ifdef NPRACTICE
                cout << g_provisional_result;
#endif
                cerr << g_best_score << " " << g_best_stone << endl;
            }
            // 石ごとに途中経過を出力
repeat (i, min<int>(3, beam.size())) {
    cerr << beam[i]->brd;
    cerr << "score: " << beam[i]->score << endl;
    cerr << "evaluate: " << evaluate(*beam[i]) << endl;
    cerr << "circumference: " << beam[i]->circumference << endl;
}
        }
        // ビーム終了
        return result;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rdx, (%rsp)
movq %rsi, %r12
movq %rdi, 0x248(%rsp)
movq 0x8(%rcx), %rax
movq %rcx, 0xa8(%rsp)
subq (%rcx), %rax
sarq $0x3, %rax
movabsq $0x3e88cb3c9484e2b, %rcx # imm = 0x3E88CB3C9484E2B
imulq %rax, %rcx
movl %ecx, 0x20ec(%rsi)
leaq 0x2120(%rsi), %r14
movslq %ecx, %rsi
movq %r14, %rdi
callq 0x4872
leaq 0x2138(%r12), %rdi
movslq 0x20ec(%r12), %rsi
callq 0x4872
movl 0x20ec(%r12), %ebx
cmpl $0x2, %ebx
jl 0x2c50
addl $-0x2, %ebx
imulq $0x418, %rbx, %r15      # imm = 0x418
incq %rbx
addq $0x418, %r15            # imm = 0x418
movq 0x2120(%r12), %rax
movl (%rax,%rbx,4), %ecx
movl %ecx, -0x4(%rax,%rbx,4)
movq 0x2138(%r12), %rax
movl (%rax,%rbx,4), %ecx
movl %ecx, -0x4(%rax,%rbx,4)
movq 0xa8(%rsp), %rax
movq (%rax), %rdi
addq %r15, %rdi
callq 0x7986
cmpl $0x3, %eax
jge 0x2c44
movq 0xa8(%rsp), %rax
movq (%rax), %rdi
addq %r15, %rdi
callq 0x7986
decl %eax
cltq
leaq (%rax,%rax,2), %rax
movq (%r14,%rax,8), %rax
incl -0x4(%rax,%rbx,4)
addq $-0x418, %r15           # imm = 0xFBE8
decq %rbx
jg 0x2beb
movq (%rsp), %rbx
movq %rbx, %rdi
callq 0x786e
movl %eax, 0x20e0(%r12)
movq %rbx, %rdi
callq 0x786e
leaq 0xd4fd(%rip), %rcx      # 0x10170
movl (%rcx), %ecx
cmpl %ecx, %eax
jl 0x2c87
jg 0x2ca6
leaq 0xd4f2(%rip), %rax      # 0x10174
cmpl $0x0, (%rax)
jle 0x2ca6
movq (%rsp), %rdi
callq 0x786e
leaq 0xd4d9(%rip), %rcx      # 0x10170
movl %eax, (%rcx)
leaq 0xd4d4(%rip), %rax      # 0x10174
movl $0x0, (%rax)
xorps %xmm0, %xmm0
movaps %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
leaq 0x190(%rsp), %rdi
movq (%rsp), %rsi
callq 0x7b92
movq 0x190(%rsp), %r14
movq 0x198(%rsp), %rbx
cmpq %rbx, %r14
movq %r12, 0x68(%rsp)
je 0x2e0c
leaq 0xf8(%rsp), %r13
movq $0x0, 0xf8(%rsp)
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
leaq 0x280(%rsp), %rdx
callq 0x4d26
movq 0xf8(%rsp), %r15
movl $0x20b0, %edx           # imm = 0x20B0
movq %r15, %rdi
movq %r14, %rsi
callq 0x2140
movq (%rsp), %rdi
callq 0x786e
movl %eax, 0x20b0(%r15)
movq $0x0, 0x20b4(%r15)
movl $0x0, 0x20c0(%r15)
movq 0xa8(%rsp), %rax
movq (%rax), %rbp
movq 0x8(%rax), %r12
cmpq %r12, %rbp
je 0x2d7c
movq %rbp, %rdi
callq 0x7986
addl %eax, 0x20c0(%r15)
addq $0x418, %rbp            # imm = 0x418
jmp 0x2d5f
leaq 0x20c8(%r15), %rdi
movq 0x68(%rsp), %r12
movslq 0x20ec(%r12), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, 0x280(%rsp)
movl $0x0, 0x290(%rsp)
leaq 0x280(%rsp), %rdx
callq 0x48a4
xorps %xmm0, %xmm0
movups %xmm0, 0x20e0(%r15)
movl $0x0, 0x20f0(%r15)
movq %r12, 0x20f8(%r15)
leaq 0x50(%rsp), %rdi
movq %r13, %rsi
callq 0x48ea
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x2def
callq 0x528e
addq $0x20b0, %r14           # imm = 0x20B0
cmpq %rbx, %r14
jne 0x2cee
movq 0x190(%rsp), %r14
movq 0x68(%rsp), %r12
testq %r14, %r14
je 0x2e24
movq 0x1a0(%rsp), %rsi
subq %r14, %rsi
movq %r14, %rdi
callq 0x2190
xorps %xmm0, %xmm0
movaps %xmm0, 0x10(%rsp)
movq $0x0, 0x20(%rsp)
leaq 0x2b0(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rax
movq %rax, 0x220(%rsp)
cmpq %rax, %rdx
je 0x4296
leaq 0x20c8(%r12), %rax
movq %rax, 0x218(%rsp)
leaq 0x20f0(%r12), %rax
movq %rax, 0x250(%rsp)
movabsq $0x100000000, %rsi      # imm = 0x100000000
leaq 0x190(%rsp), %rbp
movl $0x0, 0x8c(%rsp)
movq %rdx, 0x258(%rsp)
movq (%rdx), %rbx
movl 0x20b0(%rbx), %eax
movl 0x20b4(%rbx), %ecx
movl 0x20e0(%r12), %edx
cmpl %edx, %eax
jl 0x2edf
jg 0x2f0d
cmpl 0x20e4(%r12), %ecx
jge 0x2f0d
movl %eax, 0x20e0(%r12)
movl %ecx, 0x20e4(%r12)
leaq 0x20c8(%rbx), %rsi
movq 0x218(%rsp), %rdi
callq 0x4930
movabsq $0x100000000, %rsi      # imm = 0x100000000
movslq 0x20e0(%rbx), %rax
movslq 0x20ec(%r12), %rdx
cmpl %edx, %eax
jge 0x3c56
movq %rax, %r13
leaq 0x20e0(%rbx), %rax
movq %rax, 0x228(%rsp)
leaq 0x20c8(%rbx), %rax
movq %rax, 0x230(%rsp)
movq %r13, %rcx
movq %r13, %rdi
leaq (,%r13,4), %rax
addq %r13, %rax
shlq $0x2, %rax
addq 0x20c8(%rbx), %rax
shlq $0x20, %rdi
subq %rdx, %rcx
xorl %r15d, %r15d
cmpb $0x1, (%rax)
jne 0x2f84
addq %rsi, %rdi
decq %r15
addq $0x14, %rax
cmpq %r15, %rcx
jne 0x2f6b
jmp 0x3c56
sarq $0x20, %rdi
movq %rdi, 0x268(%rsp)
imulq $0x418, %rdi, %rcx      # imm = 0x418
movq 0xa8(%rsp), %rax
addq (%rax), %rcx
movq %rcx, (%rsp)
movq $0x0, 0x190(%rsp)
leaq 0x198(%rsp), %rdi
movq %rbp, %rsi
leaq 0xf8(%rsp), %rdx
callq 0x4d26
movq 0x190(%rsp), %r14
movl $0x20c4, %edx           # imm = 0x20C4
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2140
leaq 0x20c8(%r14), %rdi
movq 0x230(%rsp), %rsi
callq 0x4930
movq 0x228(%rsp), %rax
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x20f0(%r14)
movups %xmm0, 0x20e0(%r14)
leal 0x1(%r13), %ecx
subq %r15, %rcx
movq 0x190(%rsp), %rax
movq %rcx, 0x260(%rsp)
movl %ecx, 0x20e0(%rax)
movq (%rsp), %rdi
callq 0x7986
movq 0x190(%rsp), %rcx
addl %eax, 0x20bc(%rcx)
movq (%rsp), %rdi
callq 0x7986
movq 0x190(%rsp), %rcx
subl %eax, 0x20c0(%rcx)
leaq 0x10(%rsp), %rdi
movq %rbp, %rsi
callq 0x48ea
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x307f
callq 0x528e
movl $0x0, 0x100(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x108(%rsp)
leaq 0x100(%rsp), %rax
movq %rax, 0x110(%rsp)
movq %rax, 0x118(%rsp)
movq %rcx, 0x120(%rsp)
movq %rbx, %rdi
callq 0x7820
movq (%rsp), %r14
movq %rax, 0x190(%rsp)
leaq 0x94(%rsp), %rdi
movq %r14, %rsi
movq %rbp, %rdx
callq 0x8a1e
addl $0x2, %r13d
subq %r15, %r13
movq %r13, 0x238(%rsp)
leaq 0x290(%r14), %rax
movq %rax, 0x240(%rsp)
movl $0x0, 0x90(%rsp)
movl $0x0, 0x2c(%rsp)
movq %rbx, 0xe8(%rsp)
movq %rbx, %rdi
movq (%rsp), %rsi
leaq 0x94(%rsp), %rdx
movq 0x238(%rsp), %rcx
leaq 0x12c(%rsp), %r8
callq 0x79ac
testb %al, %al
je 0x3bbb
movq $0x0, 0xc0(%rsp)
leaq 0xc8(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
movq %rbp, %rdx
callq 0x4d26
movq 0xc0(%rsp), %r14
movl $0x20c4, %edx           # imm = 0x20C4
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2140
leaq 0x20c8(%r14), %rdi
movq 0x230(%rsp), %rsi
callq 0x4930
movq %rbp, %rbx
movq 0x228(%rsp), %rax
movups (%rax), %xmm0
movups 0x10(%rax), %xmm1
movups %xmm1, 0x20f0(%r14)
movups %xmm0, 0x20e0(%r14)
movq 0xc0(%rsp), %r14
movq 0x20c8(%r14), %rax
movq 0x268(%rsp), %rcx
leaq (%rcx,%rcx,4), %rcx
movl 0xa4(%rsp), %edx
movl %edx, 0x10(%rax,%rcx,4)
movups 0x94(%rsp), %xmm0
movups %xmm0, (%rax,%rcx,4)
incl 0x20b4(%r14)
movq 0x260(%rsp), %rax
movl %eax, 0x20e0(%r14)
movq (%rsp), %rdi
callq 0x7986
subl %eax, 0x20b0(%r14)
movq (%rsp), %rdi
callq 0x7986
subl %eax, 0x20c0(%r14)
xorl %r15d, %r15d
movq (%rsp), %rdi
callq 0x7986
cltq
cmpq %rax, %r15
jge 0x330a
movl 0xa0(%rsp), %eax
movl 0xa4(%rsp), %ecx
leaq (%rax,%rax,2), %rax
shlq $0x5, %rax
addq 0x240(%rsp), %rax
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %rax
movl 0x98(%rsp), %r12d
movl 0x9c(%rsp), %r13d
addl (%rax,%r15,8), %r12d
movq %r15, 0xf0(%rsp)
addl 0x4(%rax,%r15,8), %r13d
movq %r13, %r15
shlq $0x20, %r15
xorl %ebp, %ebp
leaq 0x7dd8(%rip), %rcx      # 0xb060
movl (%rcx,%rbp,8), %eax
addl %r12d, %eax
movl 0x4(%rcx,%rbp,8), %ecx
addl %r13d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x190(%rsp)
movq %rbx, %rdi
callq 0x9b40
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
testb %al, %al
je 0x32d1
movq 0x190(%rsp), %rsi
movq %r14, %rdi
callq 0x785c
negl %eax
movl $0x0, %ecx
sbbl %ecx, %ecx
orl $0x1, %ecx
addl %ecx, 0x20b8(%r14)
incq %rbp
cmpq $0x4, %rbp
jne 0x3281
movl %r12d, %eax
orq %rax, %r15
movq %r14, %rdi
movq %r15, %rsi
movq 0x238(%rsp), %rdx
callq 0x7ad2
movq 0xf0(%rsp), %r15
incq %r15
jmp 0x321d
movq 0xe8(%rsp), %rax
movl 0x20b8(%rax), %r15d
movl 0x20b8(%r14), %ebp
movq (%rsp), %rdi
callq 0x8864
subl %ebp, %r15d
cmpl %eax, %r15d
jne 0x3382
movl $0x18, %r12d
testb $0x1, 0x2c(%rsp)
je 0x334e
movq %rbx, %rbp
movq 0xe8(%rsp), %rbx
jmp 0x3b8f
movq (%rsp), %rdi
callq 0x7986
movb $0x1, %cl
movl %ecx, 0x2c(%rsp)
testl %eax, %eax
jle 0x3382
movq (%rsp), %rdi
callq 0x7986
cmpl $0x4, %eax
jg 0x3382
movq (%rsp), %rdi
callq 0x7986
cltq
decl 0x20e0(%r14,%rax,4)
movq %r14, %rdi
callq 0x7798
xorps %xmm0, %xmm0
movaps %xmm0, 0xd0(%rsp)
movq $0x0, 0xe0(%rsp)
xorl %r13d, %r13d
leaq 0x168(%rsp), %rbp
movq (%rsp), %rdi
callq 0x7986
cltq
cmpq %rax, %r13
jge 0x349a
movl 0xa0(%rsp), %eax
movl 0xa4(%rsp), %ecx
leaq (%rax,%rax,2), %rax
shlq $0x5, %rax
addq 0x240(%rsp), %rax
leaq (%rcx,%rcx,2), %rcx
movq (%rax,%rcx,8), %rax
movl 0x98(%rsp), %r15d
addl (%rax,%r13,8), %r15d
movl 0x9c(%rsp), %r12d
movq %r13, %rbp
addl 0x4(%rax,%r13,8), %r12d
xorl %r13d, %r13d
leaq 0x7c54(%rip), %rcx      # 0xb060
movl (%rcx,%r13,8), %eax
addl %r15d, %eax
movl 0x4(%rcx,%r13,8), %ecx
addl %r12d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x190(%rsp)
movq %rbx, %rdi
callq 0x9b40
testb %al, %al
je 0x3482
movq 0x190(%rsp), %rsi
movq %r14, %rdi
callq 0x785c
testl %eax, %eax
jne 0x3482
movq 0xd8(%rsp), %rsi
cmpq 0xe0(%rsp), %rsi
je 0x3472
movq 0x190(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0xd8(%rsp)
jmp 0x3482
leaq 0xd0(%rsp), %rdi
movq %rbx, %rdx
callq 0x52fe
incq %r13
cmpq $0x4, %r13
jne 0x3405
movq %rbp, %r13
incq %r13
jmp 0x33a4
movq %rbx, %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7fdc
leaq 0x280(%rsp), %rdi
movq %r15, %rsi
callq 0x543a
movl $0x18, %r12d
testq %rax, %rax
jne 0x3b67
movq 0x68(%rsp), %rax
cmpl $0x2, 0x20ec(%rax)
jl 0x3508
movq 0x68(%rsp), %rax
movq 0x2150(%rax), %r15
testq %r15, %r15
je 0x3508
movq %rbx, %r13
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7fdc
movq %r15, %rdi
movq %r13, %rsi
callq 0x543a
testq %rax, %rax
jne 0x3b67
movq %rbx, %r15
movq %rbx, %rdi
movq %r14, %rsi
callq 0x7fdc
leaq 0x280(%rsp), %rdi
movq %rdi, 0x160(%rsp)
movq %r15, %rsi
leaq 0x160(%rsp), %rdx
callq 0x5534
movl $0x0, 0x168(%rsp)
xorl %eax, %eax
movq %rax, 0x170(%rsp)
movq %rbp, 0x178(%rsp)
movq %rbp, 0x180(%rsp)
movq %rax, 0x188(%rsp)
movq %rax, 0x40(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x30(%rsp)
movq 0xd0(%rsp), %r15
movq 0xd8(%rsp), %rax
movq %rax, 0xf0(%rsp)
cmpq %rax, %r15
je 0x3a66
movl $0x0, 0xc(%rsp)
movq (%r15), %rax
movq %rax, 0xb8(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x5830
cmpq %rbp, %rax
jne 0x385d
movl $0x0, 0x138(%rsp)
xorl %ecx, %ecx
movq %rcx, 0x140(%rsp)
leaq 0x138(%rsp), %rax
movq %rax, 0x148(%rsp)
movq %rax, 0x150(%rsp)
movq %rcx, 0x158(%rsp)
leaq 0x130(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
callq 0x5894
movl $0x1, 0x8(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x1d0(%rsp)
movaps %xmm0, 0x1c0(%rsp)
movaps %xmm0, 0x1b0(%rsp)
movaps %xmm0, 0x1a0(%rsp)
movaps %xmm0, 0x190(%rsp)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x59c6
movq %r15, 0x270(%rsp)
movq 0x1c0(%rsp), %rax
movq 0x1d0(%rsp), %rcx
addq $-0x8, %rcx
cmpq %rcx, %rax
je 0x3680
movq 0xb8(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, 0x1c0(%rsp)
jmp 0x3690
movq %rbx, %rdi
leaq 0xb8(%rsp), %rsi
callq 0x5b3c
movq 0x1c0(%rsp), %rax
cmpq 0x1a0(%rsp), %rax
je 0x3874
movq 0x1c8(%rsp), %rdi
cmpq %rdi, %rax
je 0x36bd
movq -0x8(%rax), %r13
addq $-0x8, %rax
jmp 0x3711
movq 0x1d8(%rsp), %rax
movq -0x8(%rax), %rax
movq 0x1f8(%rax), %r13
movl $0x200, %esi            # imm = 0x200
callq 0x2190
movq 0x1d8(%rsp), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x1d8(%rsp)
movq -0x8(%rax), %rax
movq %rax, 0x1c8(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x1d0(%rsp)
movl $0x1f8, %ecx            # imm = 0x1F8
addq %rcx, %rax
movq %r13, %r12
shrq $0x20, %r12
movq %rax, 0x1c0(%rsp)
xorl %r15d, %r15d
leaq 0x7936(%rip), %rcx      # 0xb060
movl (%rcx,%r15,8), %eax
addl %r13d, %eax
movl 0x4(%rcx,%r15,8), %ecx
addl %r12d, %ecx
shlq $0x20, %rcx
orq %rcx, %rax
movq %rax, 0x70(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x5830
cmpq %rbp, %rax
jne 0x3809
leaq 0x130(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x5830
leaq 0x138(%rsp), %rcx
cmpq %rcx, %rax
jne 0x37ed
leaq 0x70(%rsp), %rdi
callq 0x9b40
testb %al, %al
je 0x37ed
movq 0x70(%rsp), %rsi
movq %r14, %rdi
callq 0x785c
testl %eax, %eax
jne 0x37ed
leaq 0x130(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x5894
movq 0x1c0(%rsp), %rax
movq 0x1d0(%rsp), %rcx
addq $-0x8, %rcx
cmpq %rcx, %rax
je 0x37dc
movq 0x70(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, 0x1c0(%rsp)
jmp 0x37e9
movq %rbx, %rdi
leaq 0x70(%rsp), %rsi
callq 0x5b3c
incl 0x8(%rsp)
incq %r15
cmpq $0x4, %r15
jne 0x3723
movl 0x8(%rsp), %eax
cmpl $0x5, %eax
jl 0x3690
jmp 0x3878
movl $0x3b9aca07, 0x8(%rsp)  # imm = 0x3B9ACA07
movb $0x1, %r15b
movq 0x148(%rsp), %rdi
movq 0x178(%rsp), %rcx
leaq 0x138(%rsp), %rsi
leaq 0x160(%rsp), %rdx
callq 0x5fae
movq %rbx, %rdi
callq 0x6148
leaq 0x130(%rsp), %rdi
callq 0x61a0
movl %r15d, %eax
movl %eax, 0xc(%rsp)
movq 0x270(%rsp), %r15
addq $0x8, %r15
cmpq 0xf0(%rsp), %r15
jne 0x3599
jmp 0x3a5f
movl 0x8(%rsp), %eax
leal -0x1(%rax), %ecx
cmpl $0x3, %ecx
ja 0x388e
movl %ecx, %eax
incl 0x20e4(%r14,%rax,4)
movl 0x8(%rsp), %eax
movb $0x1, %r15b
cmpl $0x4, %eax
jg 0x3814
movl 0xc(%rsp), %r15d
testb $0x1, %r15b
jne 0x3a5a
leal -0x1(%rax), %ecx
cmpl $0x1, %ecx
ja 0x38d1
movq 0x38(%rsp), %rsi
cmpq 0x40(%rsp), %rsi
je 0x397f
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x38(%rsp)
jmp 0x3a5a
cmpl $0x4, %eax
je 0x3993
cmpl $0x3, %eax
jne 0x3a5a
movq 0x148(%rsp), %rsi
leaq 0x70(%rsp), %rdi
leaq 0x138(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
callq 0x4a22
movq 0x70(%rsp), %rsi
leaq 0x8(%rsi), %rdi
callq 0x990e
movq %rax, 0xb0(%rsp)
movq 0x70(%rsp), %rsi
leaq 0x10(%rsi), %rdi
callq 0x990e
movq %rax, 0x278(%rsp)
leaq 0xb0(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x9b88
cmpl $0x1, %eax
movl $0x4, %eax
sbbl $0x0, %eax
movl %eax, 0x128(%rsp)
movq 0x38(%rsp), %rsi
cmpq 0x40(%rsp), %rsi
jne 0x3a26
leaq 0x30(%rsp), %rdi
leaq 0x128(%rsp), %rdx
callq 0x5ed2
jmp 0x3a40
leaq 0x30(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x5d50
jmp 0x3814
movq 0x148(%rsp), %rsi
leaq 0x70(%rsp), %rdi
leaq 0x138(%rsp), %rdx
leaq 0xb0(%rsp), %r15
movq %r15, %rcx
callq 0x4a22
movq 0x70(%rsp), %rax
movl 0x14(%rax), %ecx
addl 0x1c(%rax), %ecx
addl 0xc(%rax), %ecx
movl (%rax), %edx
movl 0x4(%rax), %esi
leal (%rsi,%rsi,2), %esi
subl %esi, %ecx
movl %ecx, %esi
negl %esi
cmovsl %ecx, %esi
movl 0x10(%rax), %ecx
addl 0x18(%rax), %ecx
addl 0x8(%rax), %ecx
leal (%rdx,%rdx,2), %eax
subl %eax, %ecx
movl %ecx, %eax
negl %eax
cmovsl %ecx, %eax
cmpl %esi, %eax
movl %esi, %ecx
cmovbl %eax, %ecx
cmovbl %esi, %eax
leal (%rax,%rax,4), %eax
leal (%rcx,%rax,2), %eax
movl %eax, 0xb0(%rsp)
movq 0x250(%rsp), %rdi
movq %r15, %rsi
callq 0x450a
movl 0xc(%rsp), %r15d
movq 0x38(%rsp), %rsi
cmpq 0x40(%rsp), %rsi
je 0x3a33
movl (%rax), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x38(%rsp)
jmp 0x3a40
leaq 0x30(%rsp), %rdi
movq %rax, %rdx
callq 0x5d50
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x3a5a
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x3814
testb $0x1, 0xc(%rsp)
jne 0x3ad9
movq 0x30(%rsp), %r14
movq 0x38(%rsp), %r15
cmpq %r15, %r14
je 0x3aa2
movq %r15, %rax
subq %r14, %rax
sarq $0x2, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x61ef
movq %r14, %rdi
movq %r15, %rsi
callq 0x62d2
leaq 0xf8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x651e
movl $0x18, %r12d
leaq 0x100(%rsp), %rcx
cmpq %rcx, %rax
jne 0x3b43
leaq 0xf8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0x65d4
testb $0x1, 0x2c(%rsp)
je 0x3b27
movl 0x90(%rsp), %eax
movl %eax, %ebp
testl %eax, %eax
jle 0x3b0d
movq 0x18(%rsp), %rax
leaq -0x10(%rax), %rcx
movq %rcx, 0x18(%rsp)
movq -0x8(%rax), %rdi
testq %rdi, %rdi
je 0x3b09
callq 0x528e
decl %ebp
jne 0x3aed
movl $0x17, %r12d
leaq 0x10(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x48ea
jmp 0x3b43
leaq 0x10(%rsp), %rdi
leaq 0xc0(%rsp), %rsi
callq 0x48ea
incl 0x90(%rsp)
xorl %r12d, %r12d
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x3b5a
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
leaq 0x160(%rsp), %rdi
callq 0x61a0
movq %rbx, %rbp
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
movq 0xe8(%rsp), %rbx
je 0x3b8f
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x3ba1
callq 0x528e
testl %r12d, %r12d
je 0x3bb6
cmpl $0x17, %r12d
movq 0x68(%rsp), %r12
jne 0x3bd4
jmp 0x3c3f
movq 0x68(%rsp), %r12
movl 0x12c(%rsp), %eax
movl 0x98(%rsp), %ecx
addl %ecx, %eax
decl %eax
movl %eax, 0x98(%rsp)
movq %rbx, %rdi
callq 0x7820
movq %rax, 0x190(%rsp)
movq %rbx, %rdi
callq 0x7820
movq %rax, %r14
movq %rbx, %rdi
callq 0x7828
movq %rax, %rcx
movabsq $-0x100000000, %rdx     # imm = 0xFFFFFFFF00000000
andq %rdx, %rcx
addl %r14d, %eax
addq %r14, %rcx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, 0x160(%rsp)
leaq 0x94(%rsp), %rdi
movq (%rsp), %rsi
movq %rbp, %rdx
leaq 0x160(%rsp), %rcx
callq 0x8a31
testb %al, %al
jne 0x3114
leaq 0xf8(%rsp), %rdi
callq 0x67e0
movabsq $0x100000000, %rsi      # imm = 0x100000000
movslq 0x20e8(%r12), %rax
leaq (%rax,%rax), %rcx
leaq (%rcx,%rcx,4), %rdx
movq 0x10(%rsp), %rbx
movq 0x18(%rsp), %r14
movq %r14, %rcx
subq %rbx, %rcx
sarq $0x4, %rcx
cmpq %rdx, %rcx
jbe 0x3d07
cmpq %rbx, %r14
je 0x3cf0
movq %r14, 0x190(%rsp)
movq %rbx, 0xf8(%rsp)
bsrq %rcx, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbp, %rdi
leaq 0xf8(%rsp), %rsi
leaq -0x1701(%rip), %rcx     # 0x25b6
callq 0x6855
movq %r14, 0x160(%rsp)
movq %rbx, 0x130(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq -0x172d(%rip), %rdx     # 0x25b6
callq 0x69b4
movl 0x20e8(%r12), %eax
movslq %eax, %rsi
leaq 0x10(%rsp), %rdi
callq 0x4a64
movabsq $0x100000000, %rsi      # imm = 0x100000000
movq 0x258(%rsp), %rdx
addq $0x10, %rdx
cmpq 0x220(%rsp), %rdx
jne 0x2eb0
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %r15
movq %r15, %rax
subq %r14, %rax
je 0x3da1
movq %r15, 0x190(%rsp)
movq %r14, 0xf8(%rsp)
sarq $0x4, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbp, %rdi
leaq 0xf8(%rsp), %rsi
leaq -0x17b0(%rip), %rcx     # 0x25b6
callq 0x6855
movq %r15, 0x160(%rsp)
movq %r14, 0x130(%rsp)
leaq 0x160(%rsp), %rdi
leaq 0x130(%rsp), %rsi
leaq -0x17dc(%rip), %rdx     # 0x25b6
callq 0x69b4
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %r15
movq %r15, %rax
subq %r14, %rax
movslq 0x20e8(%r12), %rsi
sarq $0x4, %rax
cmpq %rsi, %rax
jbe 0x3dcc
leaq 0x10(%rsp), %rdi
callq 0x4a64
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %r15
cmpq %r15, %r14
je 0x3dec
movq (%r14), %rdi
callq 0x761e
addq $0x10, %r14
cmpq %r15, %r14
jne 0x3dd1
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %r15
cmpq $0x0, 0x2150(%r12)
je 0x3e42
cmpq %r15, %r14
je 0x3e42
movq 0x2150(%r12), %rbx
movq (%r14), %rsi
movq %rbp, %rdi
callq 0x7fdc
movq %rbx, 0xf8(%rsp)
movq %rbx, %rdi
movq %rbp, %rsi
leaq 0xf8(%rsp), %rdx
callq 0x5534
addq $0x10, %r14
cmpq %r15, %r14
jne 0x3dfc
movq %r12, %r13
movq 0x10(%rsp), %r14
movq 0x18(%rsp), %r15
jmp 0x3e45
movq %r12, %r13
movq 0x20(%rsp), %rax
movq 0x50(%rsp), %rbx
movq 0x58(%rsp), %r12
movq %rbx, 0x10(%rsp)
movq %r12, 0x18(%rsp)
movq 0x60(%rsp), %rcx
movq %rcx, 0x20(%rsp)
movq %r14, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movq %rax, 0x60(%rsp)
cmpq %rbx, %r12
je 0x3e9b
movq %rbx, %r14
movq 0x8(%r14), %rdi
testq %rdi, %rdi
je 0x3e8d
callq 0x528e
addq $0x10, %r14
cmpq %r12, %r14
jne 0x3e7f
movq %rbx, 0x18(%rsp)
movq 0x290(%rsp), %rdi
testq %rdi, %rdi
movq %r13, %r12
je 0x3ec0
movq (%rdi), %rbx
movl $0x88, %esi
callq 0x2190
movq %rbx, %rdi
testq %rbx, %rbx
jne 0x3eab
movq 0x280(%rsp), %rdi
movq 0x288(%rsp), %rdx
shlq $0x3, %rdx
xorl %esi, %esi
callq 0x20c0
xorps %xmm0, %xmm0
leaq 0x290(%rsp), %rax
movups %xmm0, (%rax)
movl $0x5, %edx
movq 0xc0fb(%rip), %rdi      # 0xfff0
leaq 0x718c(%rip), %rsi      # 0xb088
callq 0x21b0
movq 0xc0e8(%rip), %rdi      # 0xfff0
movl 0x8c(%rsp), %esi
callq 0x2290
movq %rax, %rbx
movl $0x3, %edx
movq %rax, %rdi
leaq 0x7168(%rip), %rsi      # 0xb08e
callq 0x21b0
movq 0x58(%rsp), %rsi
subq 0x50(%rsp), %rsi
sarq $0x4, %rsi
movq %rbx, %rdi
callq 0x2100
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
cmpq $0x0, 0x2150(%r12)
je 0x3fd0
movl $0x6, %edx
movq 0xc06e(%rip), %rdi      # 0xfff0
leaq 0x7109(%rip), %rsi      # 0xb092
callq 0x21b0
movq 0x2150(%r12), %rax
movq 0x18(%rax), %rsi
movq 0xc04f(%rip), %rdi      # 0xfff0
callq 0x2100
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl 0x20e0(%r12), %eax
leaq 0xc191(%rip), %rcx      # 0x10170
movl (%rcx), %ecx
cmpl %ecx, %eax
jl 0x4002
jg 0x40f8
leaq 0xc182(%rip), %rax      # 0x10174
movl (%rax), %eax
cmpl %eax, 0x20e4(%r12)
jge 0x40f8
movq %rbp, %rdi
movq 0x218(%rsp), %rsi
callq 0x4ad8
leaq 0xc16f(%rip), %rcx      # 0x10188
movq (%rcx), %rdi
movq 0x10(%rcx), %rsi
movaps 0x190(%rsp), %xmm0
movups %xmm0, (%rcx)
movq 0x1a0(%rsp), %rax
movq %rax, 0x10(%rcx)
xorps %xmm0, %xmm0
movaps %xmm0, 0x190(%rsp)
movq $0x0, 0x1a0(%rsp)
testq %rdi, %rdi
je 0x4078
subq %rdi, %rsi
callq 0x2190
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x4078
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
movl 0x20e0(%r12), %esi
leaq 0xc0e9(%rip), %rax      # 0x10170
movl %esi, (%rax)
movl 0x20e4(%r12), %eax
leaq 0xc0dc(%rip), %rcx      # 0x10174
movl %eax, (%rcx)
movq 0xbf4f(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x72d1(%rip), %rsi      # 0xb389
callq 0x21b0
leaq 0xc0b0(%rip), %rax      # 0x10174
movl (%rax), %esi
movq %rbx, %rdi
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rsi
movq %rsi, %rax
subq %rdx, %rax
shrq $0x4, %rax
testl %eax, %eax
jle 0x4274
xorl %r14d, %r14d
xorl %r15d, %r15d
movq (%rdx,%r14), %rsi
movq 0xbecb(%rip), %rdi      # 0xfff0
callq 0x8b33
movl $0x7, %edx
movq 0xbeba(%rip), %rdi      # 0xfff0
leaq 0x6f5c(%rip), %rsi      # 0xb099
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r14), %rax
movl 0x20b0(%rax), %esi
movq 0xbe98(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl $0xa, %edx
movq 0xbe5d(%rip), %rdi      # 0xfff0
leaq 0x6f07(%rip), %rsi      # 0xb0a1
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r14), %rsi
movq %r12, %rdi
callq 0x27c0
movq 0xbe39(%rip), %rdi      # 0xfff0
callq 0x2260
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
movl $0xf, %edx
movq 0xbdfe(%rip), %rdi      # 0xfff0
leaq 0x6eb3(%rip), %rsi      # 0xb0ac
callq 0x21b0
movq 0x50(%rsp), %rax
movq (%rax,%r14), %rax
movl 0x20b8(%rax), %esi
movq 0xbddc(%rip), %rdi      # 0xfff0
callq 0x2290
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2110
incq %r15
movq 0x50(%rsp), %rdx
movq 0x58(%rsp), %rsi
movq %rsi, %rax
subq %rdx, %rax
shrq $0x4, %rax
cmpl $0x3, %eax
movl $0x3, %ecx
cmovgel %ecx, %eax
cltq
addq $0x10, %r14
cmpq %rax, %r15
jl 0x411a
incl 0x8c(%rsp)
movq %rsi, 0x220(%rsp)
cmpq %rsi, %rdx
movabsq $0x100000000, %rsi      # imm = 0x100000000
jne 0x2eb0
addq $0x20c8, %r12           # imm = 0x20C8
movq 0x248(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0x4ad8
leaq 0x280(%rsp), %rdi
callq 0x746a
leaq 0x10(%rsp), %rdi
callq 0x4b6a
leaq 0x50(%rsp), %rdi
callq 0x4b6a
movq %rbx, %rax
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x43cf
movq %rax, %rbx
jmp 0x448a
jmp 0x43ec
jmp 0x4306
jmp 0x43ec
jmp 0x43cf
jmp 0x4306
movq %rax, %rbx
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x43ef
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x43ef
jmp 0x43cf
jmp 0x438c
movq %rax, %rbx
jmp 0x43a1
jmp 0x43cf
jmp 0x43d7
jmp 0x442f
jmp 0x438c
jmp 0x43cf
jmp 0x43cf
jmp 0x43cf
movq %rax, %rbx
movq 0x198(%rsp), %rdi
testq %rdi, %rdi
je 0x4473
callq 0x528e
jmp 0x4473
jmp 0x43cf
jmp 0x442f
jmp 0x43e1
jmp 0x4451
jmp 0x43d7
jmp 0x442f
jmp 0x4387
movq %rax, %rbx
jmp 0x43fc
movq %rax, %rbx
movq 0x100(%rsp), %rdi
testq %rdi, %rdi
je 0x43a1
callq 0x528e
movq 0x190(%rsp), %rdi
testq %rdi, %rdi
je 0x448a
movq 0x1a0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x448a
jmp 0x43d7
jmp 0x43d7
jmp 0x43d7
jmp 0x43ec
movq %rax, %rbx
jmp 0x4473
movq %rax, %rbx
jmp 0x4466
jmp 0x4451
movq %rax, %rbx
jmp 0x4409
jmp 0x442f
jmp 0x4451
jmp 0x4451
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
callq 0x6148
leaq 0x130(%rsp), %rdi
callq 0x61a0
movq 0x30(%rsp), %rdi
testq %rdi, %rdi
je 0x4420
movq 0x40(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
leaq 0x160(%rsp), %rdi
callq 0x61a0
jmp 0x4432
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0x4454
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2190
jmp 0x4454
movq %rax, %rbx
movq 0xc8(%rsp), %rdi
testq %rdi, %rdi
je 0x4466
callq 0x528e
leaq 0xf8(%rsp), %rdi
callq 0x67e0
leaq 0x280(%rsp), %rdi
callq 0x746a
leaq 0x10(%rsp), %rdi
callq 0x4b6a
leaq 0x50(%rsp), %rdi
callq 0x4b6a
movq %rbx, %rdi
callq 0x22a0