// File: 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
movq %rsp, %rbp
subq $0xb80, %rsp            # imm = 0xB80
movq %rdi, -0x7b0(%rbp)
movq %rdi, %rax
movq %rax, -0x7a8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x7a0(%rbp)
movq -0x20(%rbp), %rdi
callq 0x7460
movq %rax, %rcx
movq -0x7a0(%rbp), %rax
movl %ecx, 0x20ec(%rax)
movl $0x0, -0x24(%rbp)
cmpl $0x2, -0x24(%rbp)
jge 0x2e45
movq -0x7a0(%rbp), %rdi
addq $0x2120, %rdi           # imm = 0x2120
movslq -0x24(%rbp), %rsi
callq 0x5370
movq %rax, %rdi
movq -0x7a0(%rbp), %rax
movslq 0x20ec(%rax), %rsi
callq 0x7490
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x2e07
movq -0x7a0(%rbp), %rax
movl 0x20ec(%rax), %eax
subl $0x1, %eax
subl $0x1, %eax
movl %eax, -0x28(%rbp)
cmpl $0x0, -0x28(%rbp)
jl 0x2f5a
movl $0x0, -0x2c(%rbp)
cmpl $0x2, -0x2c(%rbp)
jge 0x2ed8
movq -0x7a0(%rbp), %rdi
addq $0x2120, %rdi           # imm = 0x2120
movslq -0x2c(%rbp), %rsi
callq 0x5370
movq %rax, %rdi
movl -0x28(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x53a0
movq -0x7a0(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x7b4(%rbp)
addq $0x2120, %rdi           # imm = 0x2120
movslq -0x2c(%rbp), %rsi
callq 0x5370
movq %rax, %rdi
movslq -0x28(%rbp), %rsi
callq 0x53a0
movl -0x7b4(%rbp), %ecx
movl %ecx, (%rax)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x2e6c
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x7520
movq %rax, %rdi
callq 0x17c30
cmpl $0x2, %eax
jg 0x2f4a
movq -0x7a0(%rbp), %rax
addq $0x2120, %rax           # imm = 0x2120
movq %rax, -0x7c0(%rbp)
movq -0x20(%rbp), %rdi
movl -0x28(%rbp), %eax
addl $0x1, %eax
movslq %eax, %rsi
callq 0x7520
movq %rax, %rdi
callq 0x17c30
movq -0x7c0(%rbp), %rdi
subl $0x1, %eax
movslq %eax, %rsi
callq 0x5370
movq %rax, %rdi
movslq -0x28(%rbp), %rsi
callq 0x53a0
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x2f4c
movl -0x28(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x28(%rbp)
jmp 0x2e5b
movq -0x18(%rbp), %rdi
callq 0x179a0
movl %eax, %ecx
movq -0x7a0(%rbp), %rax
movl %ecx, 0x20e0(%rax)
movq -0x18(%rbp), %rdi
callq 0x179a0
movl %eax, -0x38(%rbp)
movl $0x0, -0x3c(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x3c(%rbp), %rsi
callq 0x75a0
movq %rax, -0x34(%rbp)
leaq 0x2f1bb(%rip), %rdi     # 0x32158
leaq 0x2f1b8(%rip), %rsi     # 0x3215c
callq 0x75d0
movq %rax, -0x44(%rbp)
leaq -0x34(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x7540
testb $0x1, %al
jne 0x2fc0
jmp 0x2fe1
movq -0x18(%rbp), %rdi
callq 0x179a0
movl %eax, %ecx
leaq 0x2f186(%rip), %rax     # 0x32158
movl %ecx, (%rax)
leaq 0x2f181(%rip), %rax     # 0x3215c
movl $0x0, (%rax)
leaq -0x60(%rbp), %rdi
callq 0x7600
movq -0x18(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0x17f30
jmp 0x2ff9
leaq -0x80(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rdi
callq 0x7620
movq %rax, -0x98(%rbp)
movq -0x68(%rbp), %rdi
callq 0x7650
movq %rax, -0xa0(%rbp)
leaq -0x98(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x7680
testb $0x1, %al
jne 0x305d
leaq -0x80(%rbp), %rdi
callq 0x7990
jmp 0x32f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x51f6
leaq -0x98(%rbp), %rdi
callq 0x76c0
movq %rax, -0xa8(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x76e0
jmp 0x307e
leaq -0xb8(%rbp), %rdi
callq 0x26f0
movq %rax, -0xc0(%rbp)
movq -0xa8(%rbp), %rsi
movq -0xc0(%rbp), %rdi
movl $0x20b0, %edx           # imm = 0x20B0
callq 0x2110
movq -0x18(%rbp), %rdi
callq 0x179a0
movl %eax, -0x7c4(%rbp)
jmp 0x30ba
movl -0x7c4(%rbp), %ecx
movq -0xc0(%rbp), %rax
movl %ecx, 0x20b0(%rax)
movq -0xc0(%rbp), %rax
movl $0x0, 0x20b4(%rax)
movq -0xc0(%rbp), %rax
movl $0x0, 0x20b8(%rax)
movq -0xc0(%rbp), %rax
movl $0x0, 0x20c0(%rax)
movq -0x20(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
callq 0x7750
movq %rax, -0xd0(%rbp)
movq -0xc8(%rbp), %rdi
callq 0x7780
movq %rax, -0xd8(%rbp)
leaq -0xd0(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x77b0
testb $0x1, %al
jne 0x314d
jmp 0x31d5
leaq -0xd0(%rbp), %rdi
callq 0x77f0
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x7c8(%rbp)
jmp 0x3174
movl -0x7c8(%rbp), %ecx
movq -0xc0(%rbp), %rax
addl 0x20c0(%rax), %ecx
movl %ecx, 0x20c0(%rax)
leaq -0xd0(%rbp), %rdi
callq 0x7810
jmp 0x3131
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x32e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x7950
jmp 0x32e2
movq -0x7a0(%rbp), %rax
movq -0xc0(%rbp), %rdi
addq $0x20c8, %rdi           # imm = 0x20C8
movslq 0x20ec(%rax), %rsi
xorps %xmm0, %xmm0
movaps %xmm0, -0x100(%rbp)
movl $0x0, -0xf0(%rbp)
movb $0x0, -0x100(%rbp)
leaq -0x100(%rbp), %rdx
callq 0x7830
jmp 0x321a
movq -0xc0(%rbp), %rax
movl $0x0, 0x20e0(%rax)
movq -0xc0(%rbp), %rax
addq $0x20e4, %rax           # imm = 0x20E4
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x108(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x118(%rbp)
movq -0x110(%rbp), %rax
cmpq -0x118(%rbp), %rax
je 0x329e
movq -0x110(%rbp), %rax
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rax
movl $0x0, (%rax)
movq -0x110(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x110(%rbp)
jmp 0x325f
movq -0x7a0(%rbp), %rcx
movq -0xc0(%rbp), %rax
movq %rcx, 0x20f8(%rax)
leaq -0x60(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x78e0
jmp 0x32c5
leaq -0xb8(%rbp), %rdi
callq 0x7950
leaq -0x98(%rbp), %rdi
callq 0x7970
jmp 0x3021
leaq -0x80(%rbp), %rdi
callq 0x7990
jmp 0x51f6
movl $0x0, -0x124(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x7600
leaq -0x178(%rbp), %rdi
callq 0x2a90
leaq -0x60(%rbp), %rdi
callq 0x79f0
xorb $-0x1, %al
testb $0x1, %al
jne 0x3326
jmp 0x5187
leaq -0x60(%rbp), %rax
movq %rax, -0x180(%rbp)
movq -0x180(%rbp), %rdi
callq 0x7a30
movq %rax, -0x188(%rbp)
movq -0x180(%rbp), %rdi
callq 0x7a60
movq %rax, -0x190(%rbp)
leaq -0x188(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x7a90
testb $0x1, %al
jne 0x3373
jmp 0x4aed
leaq -0x188(%rbp), %rdi
callq 0x7ad0
movq %rax, -0x198(%rbp)
movq -0x198(%rbp), %rdi
callq 0x26f0
movq %rax, -0x1a0(%rbp)
movq -0x1a0(%rbp), %rsi
movq %rsi, %rdi
addq $0x20b0, %rdi           # imm = 0x20B0
addq $0x20b4, %rsi           # imm = 0x20B4
callq 0x7af0
movq %rax, -0x7d0(%rbp)
jmp 0x33bf
movq -0x7a0(%rbp), %rsi
movq -0x7d0(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq %rsi, %rdi
addq $0x20e0, %rdi           # imm = 0x20E0
addq $0x20e4, %rsi           # imm = 0x20E4
callq 0x75d0
movq %rax, -0x7d8(%rbp)
jmp 0x33f3
movq -0x7d8(%rbp), %rax
movq %rax, -0x1b0(%rbp)
leaq -0x1a8(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x7540
movb %al, -0x7d9(%rbp)
jmp 0x341c
movb -0x7d9(%rbp), %al
testb $0x1, %al
jne 0x3428
jmp 0x348a
movq -0x7a0(%rbp), %rdi
movq -0x1a0(%rbp), %rax
movl 0x20b0(%rax), %eax
movl %eax, 0x20e0(%rdi)
movq -0x1a0(%rbp), %rax
movl 0x20b4(%rax), %eax
movl %eax, 0x20e4(%rdi)
movq -0x1a0(%rbp), %rsi
addq $0x20c8, %rsi           # imm = 0x20C8
addq $0x20c8, %rdi           # imm = 0x20C8
callq 0x7b20
jmp 0x3471
jmp 0x348a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x51de
movq -0x1a0(%rbp), %rax
movl 0x20e0(%rax), %eax
movl %eax, -0x1b4(%rbp)
movq -0x7a0(%rbp), %rdx
movl -0x1b4(%rbp), %ecx
xorl %eax, %eax
cmpl 0x20ec(%rdx), %ecx
movb %al, -0x7da(%rbp)
jge 0x34dc
movq -0x1a0(%rbp), %rdi
addq $0x20c8, %rdi           # imm = 0x20C8
movslq -0x1b4(%rbp), %rsi
callq 0x7d70
movb (%rax), %al
movb %al, -0x7da(%rbp)
movb -0x7da(%rbp), %al
testb $0x1, %al
jne 0x34e8
jmp 0x34f9
movl -0x1b4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x1b4(%rbp)
jmp 0x349d
movq -0x7a0(%rbp), %rcx
movl -0x1b4(%rbp), %eax
cmpl 0x20ec(%rcx), %eax
jge 0x4a33
movq -0x20(%rbp), %rdi
movslq -0x1b4(%rbp), %rsi
callq 0x7520
movq %rax, -0x1c0(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x76e0
jmp 0x3537
movq -0x1a0(%rbp), %rax
movq %rax, -0x7e8(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x26f0
movq -0x7e8(%rbp), %rsi
movq %rax, %rdi
callq 0x7d90
jmp 0x3562
movl -0x1b4(%rbp), %eax
incl %eax
movl %eax, -0x7f0(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x7e20
movl -0x7f0(%rbp), %ecx
movl %ecx, 0x20e0(%rax)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x7ec(%rbp)
jmp 0x359c
leaq -0x1d0(%rbp), %rdi
callq 0x7e20
movl -0x7ec(%rbp), %edx
movl 0x20bc(%rax), %ecx
addl %edx, %ecx
movl %ecx, 0x20bc(%rax)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x7f4(%rbp)
jmp 0x35d0
leaq -0x1d0(%rbp), %rdi
movq %rdi, -0x800(%rbp)
callq 0x7e20
movl -0x7f4(%rbp), %edx
movq -0x800(%rbp), %rsi
movl 0x20c0(%rax), %ecx
subl %edx, %ecx
movl %ecx, 0x20c0(%rax)
leaq -0x140(%rbp), %rdi
callq 0x78e0
jmp 0x360c
leaq -0x1d0(%rbp), %rdi
callq 0x7950
movb $0x0, -0x1d1(%rbp)
leaq -0x208(%rbp), %rdi
callq 0x7e40
movl $0x0, -0x20c(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0x810(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x178e0
movq %rax, -0x808(%rbp)
jmp 0x3658
movq -0x810(%rbp), %rsi
movq -0x808(%rbp), %rax
movq %rax, -0x228(%rbp)
leaq -0x220(%rbp), %rdi
leaq -0x228(%rbp), %rdx
callq 0x19950
jmp 0x3682
jmp 0x3684
movq -0x1a0(%rbp), %rdi
movq -0x1c0(%rbp), %rsi
movl -0x1b4(%rbp), %ecx
addl $0x2, %ecx
leaq -0x220(%rbp), %rdx
leaq -0x22c(%rbp), %r8
callq 0x17c80
movb %al, -0x811(%rbp)
jmp 0x36b6
movb -0x811(%rbp), %al
testb $0x1, %al
jne 0x36c5
jmp 0x4925
leaq -0x240(%rbp), %rdi
callq 0x76e0
jmp 0x36d3
movq -0x1a0(%rbp), %rax
movq %rax, -0x820(%rbp)
leaq -0x240(%rbp), %rdi
callq 0x26f0
movq -0x820(%rbp), %rsi
movq %rax, %rdi
callq 0x7d90
jmp 0x36fe
leaq -0x240(%rbp), %rdi
callq 0x26f0
movq %rax, -0x248(%rbp)
movq -0x248(%rbp), %rdi
addq $0x20c8, %rdi           # imm = 0x20C8
movslq -0x1b4(%rbp), %rsi
callq 0x7e60
movl -0x210(%rbp), %ecx
movl %ecx, 0x10(%rax)
movups -0x220(%rbp), %xmm0
movups %xmm0, (%rax)
movq -0x248(%rbp), %rax
movl 0x20b4(%rax), %ecx
incl %ecx
movl %ecx, 0x20b4(%rax)
movl -0x1b4(%rbp), %ecx
incl %ecx
movq -0x248(%rbp), %rax
movl %ecx, 0x20e0(%rax)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x824(%rbp)
jmp 0x377c
movl -0x824(%rbp), %edx
movq -0x248(%rbp), %rax
movl 0x20b0(%rax), %ecx
subl %edx, %ecx
movl %ecx, 0x20b0(%rax)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x828(%rbp)
jmp 0x37ab
movl -0x828(%rbp), %edx
movq -0x248(%rbp), %rax
movl 0x20c0(%rax), %ecx
subl %edx, %ecx
movl %ecx, 0x20c0(%rax)
movl $0x0, -0x24c(%rbp)
movl -0x24c(%rbp), %eax
movl %eax, -0x830(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x82c(%rbp)
jmp 0x37f0
movl -0x830(%rbp), %eax
movl -0x82c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x39dc
movq -0x1c0(%rbp), %rdi
movl -0x214(%rbp), %esi
movl -0x210(%rbp), %edx
callq 0x7ec0
movq %rax, -0x838(%rbp)
jmp 0x3825
movq -0x838(%rbp), %rdi
movslq -0x24c(%rbp), %rsi
callq 0x7ef0
movq %rax, %rdi
leaq -0x21c(%rbp), %rsi
callq 0x7e80
movq %rax, -0x840(%rbp)
jmp 0x3850
movq -0x840(%rbp), %rax
movq %rax, -0x254(%rbp)
movl $0x0, -0x258(%rbp)
cmpl $0x4, -0x258(%rbp)
jge 0x399a
movslq -0x258(%rbp), %rcx
leaq 0x1d7cd(%rip), %rax     # 0x21050
leaq (%rax,%rcx,8), %rsi
leaq -0x254(%rbp), %rdi
callq 0x7e80
movq %rax, -0x848(%rbp)
jmp 0x389c
movq -0x848(%rbp), %rax
movq %rax, -0x260(%rbp)
leaq -0x260(%rbp), %rdi
callq 0x1ecd0
movb %al, -0x849(%rbp)
jmp 0x38be
movb -0x849(%rbp), %al
testb $0x1, %al
jne 0x38d7
jmp 0x38ca
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl %eax, -0x850(%rbp)
jmp 0x391c
movq -0x248(%rbp), %rdi
movq -0x260(%rbp), %rax
movq %rax, -0x268(%rbp)
movq -0x268(%rbp), %rsi
callq 0x17970
movl %eax, -0x854(%rbp)
jmp 0x3900
movl -0x854(%rbp), %edx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
movl $0x1, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
movl %eax, -0x850(%rbp)
movl -0x850(%rbp), %ecx
movq -0x248(%rbp), %rax
addl 0x20b8(%rax), %ecx
movl %ecx, 0x20b8(%rax)
movl -0x258(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x258(%rbp)
jmp 0x3868
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0x7950
jmp 0x51de
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x4a22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x4914
movq -0x248(%rbp), %rdi
movq -0x254(%rbp), %rax
movq %rax, -0x270(%rbp)
movl -0x1b4(%rbp), %edx
addl $0x2, %edx
movq -0x270(%rbp), %rsi
callq 0x17e00
jmp 0x39c6
jmp 0x39c8
movl -0x24c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24c(%rbp)
jmp 0x37d0
movq -0x1a0(%rbp), %rax
movl 0x20b8(%rax), %eax
movq -0x248(%rbp), %rcx
movl 0x20b8(%rcx), %ecx
subl %ecx, %eax
movl %eax, -0x85c(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x195d0
movl %eax, -0x858(%rbp)
jmp 0x3a12
movl -0x85c(%rbp), %eax
movl -0x858(%rbp), %ecx
cmpl %ecx, %eax
jne 0x3acd
testb $0x1, -0x1d1(%rbp)
je 0x3a3e
movl $0x18, -0x274(%rbp)
jmp 0x48bd
movb $0x1, -0x1d1(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x860(%rbp)
jmp 0x3a59
movl -0x860(%rbp), %ecx
movl $0x1, %eax
cmpl %ecx, %eax
jg 0x3acb
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x864(%rbp)
jmp 0x3a7c
movl -0x864(%rbp), %eax
cmpl $0x4, %eax
jg 0x3acb
movq -0x248(%rbp), %rax
addq $0x20e4, %rax           # imm = 0x20E4
movq %rax, -0x870(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x868(%rbp)
jmp 0x3aaf
movq -0x870(%rbp), %rax
movl -0x868(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl (%rax,%rcx,4), %edx
subl $0x1, %edx
movl %edx, (%rax,%rcx,4)
jmp 0x3acd
movq -0x248(%rbp), %rdi
callq 0x17570
jmp 0x3adb
leaq -0x290(%rbp), %rdi
callq 0x7f10
movl $0x0, -0x294(%rbp)
movl -0x294(%rbp), %eax
movl %eax, -0x878(%rbp)
movq -0x1c0(%rbp), %rdi
callq 0x17c30
movl %eax, -0x874(%rbp)
jmp 0x3b11
movl -0x878(%rbp), %eax
movl -0x874(%rbp), %ecx
cmpl %ecx, %eax
jge 0x3c79
movq -0x1c0(%rbp), %rdi
movl -0x214(%rbp), %esi
movl -0x210(%rbp), %edx
callq 0x7ec0
movq %rax, -0x880(%rbp)
jmp 0x3b46
movq -0x880(%rbp), %rdi
movslq -0x294(%rbp), %rsi
callq 0x7ef0
movq %rax, %rdi
leaq -0x21c(%rbp), %rsi
callq 0x7e80
movq %rax, -0x888(%rbp)
jmp 0x3b71
movq -0x888(%rbp), %rax
movq %rax, -0x29c(%rbp)
movl $0x0, -0x2a0(%rbp)
cmpl $0x4, -0x2a0(%rbp)
jge 0x3c63
movslq -0x2a0(%rbp), %rcx
leaq 0x1d4ac(%rip), %rax     # 0x21050
leaq (%rax,%rcx,8), %rsi
leaq -0x29c(%rbp), %rdi
callq 0x7e80
movq %rax, -0x890(%rbp)
jmp 0x3bbd
movq -0x890(%rbp), %rax
movq %rax, -0x2a8(%rbp)
leaq -0x2a8(%rbp), %rdi
callq 0x1ecd0
movb %al, -0x891(%rbp)
jmp 0x3bdf
movb -0x891(%rbp), %al
testb $0x1, %al
jne 0x3beb
jmp 0x3c4d
movq -0x248(%rbp), %rdi
movq -0x2a8(%rbp), %rax
movq %rax, -0x2b0(%rbp)
movq -0x2b0(%rbp), %rsi
callq 0x17970
movl %eax, -0x898(%rbp)
jmp 0x3c14
movl -0x898(%rbp), %eax
cmpl $0x0, %eax
jne 0x3c4d
leaq -0x290(%rbp), %rdi
leaq -0x2a8(%rbp), %rsi
callq 0x7f30
jmp 0x3c34
jmp 0x3c4d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x4908
jmp 0x3c4f
movl -0x2a0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2a0(%rbp)
jmp 0x3b89
jmp 0x3c65
movl -0x294(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x294(%rbp)
jmp 0x3af1
movq -0x248(%rbp), %rsi
leaq -0x330(%rbp), %rdi
callq 0x18490
jmp 0x3c8e
leaq -0x178(%rbp), %rdi
leaq -0x330(%rbp), %rsi
callq 0x7fa0
movq %rax, -0x8a0(%rbp)
jmp 0x3caa
movq -0x8a0(%rbp), %rax
cmpq $0x0, %rax
je 0x3cc6
movl $0x18, -0x274(%rbp)
jmp 0x48b1
movq -0x7a0(%rbp), %rdx
xorl %eax, %eax
movl $0x2, %ecx
cmpl 0x20ec(%rdx), %ecx
movb %al, -0x8a1(%rbp)
jg 0x3d55
movq -0x7a0(%rbp), %rcx
xorl %eax, %eax
cmpq $0x0, 0x2150(%rcx)
movb %al, -0x8a1(%rbp)
je 0x3d55
movq -0x7a0(%rbp), %rax
movq 0x2150(%rax), %rax
movq %rax, -0x8b0(%rbp)
movq -0x248(%rbp), %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x18490
jmp 0x3d25
movq -0x8b0(%rbp), %rdi
leaq -0x3b0(%rbp), %rsi
callq 0x7fa0
movq %rax, -0x8b8(%rbp)
jmp 0x3d41
movq -0x8b8(%rbp), %rax
cmpq $0x0, %rax
setne %al
movb %al, -0x8a1(%rbp)
movb -0x8a1(%rbp), %al
testb $0x1, %al
jne 0x3d61
jmp 0x3d70
movl $0x18, -0x274(%rbp)
jmp 0x48b1
movq -0x248(%rbp), %rsi
leaq -0x430(%rbp), %rdi
callq 0x18490
jmp 0x3d85
leaq -0x178(%rbp), %rdi
leaq -0x430(%rbp), %rsi
callq 0x7fd0
movb %dl, -0x8c1(%rbp)
movq %rax, -0x8c0(%rbp)
jmp 0x3da7
movb -0x8c1(%rbp), %al
movq -0x8c0(%rbp), %rcx
movq %rcx, -0x440(%rbp)
movb %al, -0x438(%rbp)
leaq -0x470(%rbp), %rdi
callq 0x8010
leaq -0x488(%rbp), %rdi
callq 0x5a20
movb $0x0, -0x489(%rbp)
leaq -0x290(%rbp), %rax
movq %rax, -0x498(%rbp)
movq -0x498(%rbp), %rdi
callq 0x8030
movq %rax, -0x4a0(%rbp)
movq -0x498(%rbp), %rdi
callq 0x8060
movq %rax, -0x4a8(%rbp)
leaq -0x4a0(%rbp), %rdi
leaq -0x4a8(%rbp), %rsi
callq 0x8090
testb $0x1, %al
jne 0x3e30
jmp 0x4749
leaq -0x4a0(%rbp), %rdi
callq 0x80d0
movq (%rax), %rax
movq %rax, -0x4b0(%rbp)
leaq -0x470(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x80f0
movq %rax, -0x8d0(%rbp)
jmp 0x3e62
movq -0x8d0(%rbp), %rax
cmpq $0x0, %rax
je 0x3e8b
jmp 0x471b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x48f0
leaq -0x4e0(%rbp), %rdi
movq %rdi, -0x8e8(%rbp)
callq 0x8010
movq -0x8e8(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x8150
movb %dl, -0x8d9(%rbp)
movq %rax, -0x8d8(%rbp)
jmp 0x3ec0
movb -0x8d9(%rbp), %al
movq -0x8d8(%rbp), %rcx
movq %rcx, -0x4f0(%rbp)
movb %al, -0x4e8(%rbp)
movl $0x1, -0x4f4(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x81a0
jmp 0x3ef2
leaq -0x548(%rbp), %rdi
leaq -0x4b0(%rbp), %rsi
callq 0x81d0
jmp 0x3f07
jmp 0x3f09
leaq -0x548(%rbp), %rdi
callq 0x8200
movb %al, -0x8e9(%rbp)
jmp 0x3f1d
movb -0x8e9(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x3f2e
jmp 0x4122
leaq -0x548(%rbp), %rdi
callq 0x8220
movq %rax, -0x8f8(%rbp)
jmp 0x3f43
movq -0x8f8(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x550(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x8240
jmp 0x3f62
movl $0x0, -0x554(%rbp)
cmpl $0x4, -0x554(%rbp)
jge 0x410e
movslq -0x554(%rbp), %rcx
leaq 0x1d0c9(%rip), %rax     # 0x21050
leaq (%rax,%rcx,8), %rsi
leaq -0x550(%rbp), %rdi
callq 0x7e80
movq %rax, -0x900(%rbp)
jmp 0x3fa0
movq -0x900(%rbp), %rax
movq %rax, -0x55c(%rbp)
leaq -0x470(%rbp), %rdi
leaq -0x55c(%rbp), %rsi
callq 0x80f0
movq %rax, -0x908(%rbp)
jmp 0x3fca
movq -0x908(%rbp), %rax
cmpq $0x0, %rax
je 0x4014
movl $0x3b9aca07, -0x4f4(%rbp) # imm = 0x3B9ACA07
jmp 0x410e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x4738
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
jmp 0x472c
leaq -0x4e0(%rbp), %rdi
leaq -0x55c(%rbp), %rsi
callq 0x80f0
movq %rax, -0x910(%rbp)
jmp 0x4030
movq -0x910(%rbp), %rax
cmpq $0x0, %rax
jne 0x40f8
leaq -0x55c(%rbp), %rdi
callq 0x1ecd0
movb %al, -0x911(%rbp)
jmp 0x4055
movb -0x911(%rbp), %al
testb $0x1, %al
jne 0x4064
jmp 0x40f8
movq -0x248(%rbp), %rdi
movq -0x55c(%rbp), %rax
movq %rax, -0x568(%rbp)
movq -0x568(%rbp), %rsi
callq 0x17970
movl %eax, -0x918(%rbp)
jmp 0x408d
movl -0x918(%rbp), %eax
cmpl $0x0, %eax
jne 0x40f8
leaq -0x4e0(%rbp), %rdi
leaq -0x55c(%rbp), %rsi
callq 0x8150
movb %dl, -0x921(%rbp)
movq %rax, -0x920(%rbp)
jmp 0x40ba
movb -0x921(%rbp), %al
movq -0x920(%rbp), %rcx
movq %rcx, -0x578(%rbp)
movb %al, -0x570(%rbp)
leaq -0x548(%rbp), %rdi
leaq -0x55c(%rbp), %rsi
callq 0x81d0
jmp 0x40e9
movl -0x4f4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4f4(%rbp)
jmp 0x40fa
movl -0x554(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x554(%rbp)
jmp 0x3f6c
movl $0x5, %eax
cmpl -0x4f4(%rbp), %eax
jg 0x411d
jmp 0x4122
jmp 0x3f09
movl $0x1, %eax
cmpl -0x4f4(%rbp), %eax
jg 0x415c
cmpl $0x4, -0x4f4(%rbp)
jg 0x415c
movq -0x248(%rbp), %rax
movl -0x4f4(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
movl 0x20e4(%rax,%rcx,4), %edx
addl $0x1, %edx
movl %edx, 0x20e4(%rax,%rcx,4)
movl $0x5, %eax
cmpl -0x4f4(%rbp), %eax
jg 0x4170
movb $0x1, -0x489(%rbp)
testb $0x1, -0x489(%rbp)
jne 0x4630
cmpl $0x1, -0x4f4(%rbp)
je 0x418f
cmpl $0x2, -0x4f4(%rbp)
jne 0x41a9
leaq -0x488(%rbp), %rdi
leaq -0x4f4(%rbp), %rsi
callq 0x8260
jmp 0x41a4
jmp 0x462e
cmpl $0x3, -0x4f4(%rbp)
jne 0x436d
leaq -0x4e0(%rbp), %rdi
movq %rdi, -0x938(%rbp)
callq 0x82d0
movq -0x938(%rbp), %rdi
movq %rax, -0x598(%rbp)
callq 0x8300
movq %rax, -0x5a0(%rbp)
leaq -0x5a1(%rbp), %rdi
movq %rdi, -0x930(%rbp)
callq 0x8330
movq -0x930(%rbp), %rcx
movq -0x598(%rbp), %rsi
movq -0x5a0(%rbp), %rdx
leaq -0x590(%rbp), %rdi
callq 0x8350
jmp 0x4219
leaq -0x5a1(%rbp), %rdi
callq 0x83d0
leaq -0x590(%rbp), %rdi
movq %rdi, -0x950(%rbp)
movl $0x1, %esi
callq 0x8420
movq -0x950(%rbp), %rdi
movq %rax, -0x948(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x8420
movq -0x948(%rbp), %rdi
movq %rax, %rsi
callq 0x1e9a0
movq %rax, -0x940(%rbp)
jmp 0x426c
movq -0x940(%rbp), %rax
movq %rax, -0x5b0(%rbp)
leaq -0x590(%rbp), %rdi
movq %rdi, -0x968(%rbp)
movl $0x2, %esi
callq 0x8420
movq -0x968(%rbp), %rdi
movq %rax, -0x960(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x8420
movq -0x960(%rbp), %rdi
movq %rax, %rsi
callq 0x1e9a0
movq %rax, -0x958(%rbp)
jmp 0x42c1
movq -0x958(%rbp), %rax
movq %rax, -0x5b8(%rbp)
leaq -0x5b0(%rbp), %rdi
leaq -0x5b8(%rbp), %rsi
callq 0x1eda0
movl %eax, -0x96c(%rbp)
jmp 0x42ea
movl -0x96c(%rbp), %eax
subl $0x1, %eax
movl $0x4, %eax
sbbl $0x0, %eax
movl %eax, -0x5a8(%rbp)
leaq -0x488(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
callq 0x83f0
jmp 0x4316
leaq -0x590(%rbp), %rdi
callq 0x7180
jmp 0x462c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x5a1(%rbp), %rdi
callq 0x83d0
jmp 0x472c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x590(%rbp), %rdi
callq 0x7180
jmp 0x472c
cmpl $0x4, -0x4f4(%rbp)
jne 0x462a
leaq -0x4e0(%rbp), %rdi
movq %rdi, -0x980(%rbp)
callq 0x82d0
movq -0x980(%rbp), %rdi
movq %rax, -0x5d8(%rbp)
callq 0x8300
movq %rax, -0x5e0(%rbp)
leaq -0x5e1(%rbp), %rdi
movq %rdi, -0x978(%rbp)
callq 0x8330
movq -0x978(%rbp), %rcx
movq -0x5d8(%rbp), %rsi
movq -0x5e0(%rbp), %rdx
leaq -0x5d0(%rbp), %rdi
callq 0x8350
jmp 0x43dd
leaq -0x5e1(%rbp), %rdi
callq 0x83d0
leaq -0x5d0(%rbp), %rdi
movq %rdi, -0x9a8(%rbp)
movl $0x3, %esi
movq %rsi, -0x9d0(%rbp)
callq 0x8420
movq -0x9a8(%rbp), %rdi
movl 0x4(%rax), %eax
movl %eax, -0x9d8(%rbp)
movl $0x2, %esi
movq %rsi, -0x9c0(%rbp)
callq 0x8420
movq -0x9a8(%rbp), %rdi
movq %rax, %rcx
movl -0x9d8(%rbp), %eax
movl 0x4(%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x9d4(%rbp)
movl $0x1, %esi
movq %rsi, -0x9b8(%rbp)
callq 0x8420
movq -0x9a8(%rbp), %rdi
movq %rax, %rcx
movl -0x9d4(%rbp), %eax
movl 0x4(%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x9c4(%rbp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x9a0(%rbp)
callq 0x8420
movq -0x9d0(%rbp), %rsi
movq -0x9a8(%rbp), %rdi
movq %rax, %rcx
movl -0x9c4(%rbp), %eax
movl 0x4(%rcx), %edx
movl %edx, %ecx
leal (%rcx,%rcx,2), %ecx
subl %ecx, %eax
movl %eax, %ecx
negl %ecx
cmovnsl %ecx, %eax
movl %eax, -0x5e8(%rbp)
callq 0x8420
movq -0x9c0(%rbp), %rsi
movq -0x9a8(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0x9ac(%rbp)
callq 0x8420
movq -0x9b8(%rbp), %rsi
movq -0x9a8(%rbp), %rdi
movq %rax, %rcx
movl -0x9ac(%rbp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x998(%rbp)
callq 0x8420
movq -0x9a8(%rbp), %rdi
movq -0x9a0(%rbp), %rsi
movq %rax, %rcx
movl -0x998(%rbp), %eax
movl (%rcx), %ecx
addl %ecx, %eax
movl %eax, -0x994(%rbp)
callq 0x8420
movl -0x994(%rbp), %ecx
movq %rax, %rdx
movq -0x7a0(%rbp), %rax
movl (%rdx), %esi
movl %esi, %edx
leal (%rdx,%rdx,2), %edx
subl %edx, %ecx
movl %ecx, %edx
negl %edx
cmovnsl %edx, %ecx
movl %ecx, -0x5ec(%rbp)
addq $0x20f0, %rax           # imm = 0x20F0
movq %rax, -0x990(%rbp)
leaq -0x5e8(%rbp), %rdi
leaq -0x5ec(%rbp), %rsi
callq 0x8440
movq %rax, -0x988(%rbp)
jmp 0x4569
movq -0x988(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x9e4(%rbp)
leaq -0x5e8(%rbp), %rdi
leaq -0x5ec(%rbp), %rsi
callq 0x5330
movl -0x9e4(%rbp), %ecx
movq -0x990(%rbp), %rdi
movl (%rax), %edx
movl %edx, %eax
leal (%rax,%rax,4), %edx
movl %ecx, %eax
movl %edx, %ecx
leal (%rax,%rcx,2), %eax
movl %eax, -0x5f0(%rbp)
leaq -0x5f0(%rbp), %rsi
callq 0x5630
movq %rax, -0x9e0(%rbp)
jmp 0x45c1
movq -0x9e0(%rbp), %rsi
leaq -0x488(%rbp), %rdi
callq 0x8260
jmp 0x45d6
leaq -0x5d0(%rbp), %rdi
callq 0x7180
jmp 0x462a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x5e1(%rbp), %rdi
callq 0x83d0
jmp 0x472c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x88(%rbp)
movl %eax, -0x8c(%rbp)
leaq -0x5d0(%rbp), %rdi
callq 0x7180
jmp 0x472c
jmp 0x462c
jmp 0x462e
jmp 0x4630
leaq -0x4e0(%rbp), %rdi
movq %rdi, -0xa08(%rbp)
callq 0x82d0
movq -0xa08(%rbp), %rdi
movq %rax, -0x5f8(%rbp)
callq 0x8300
movq %rax, -0x600(%rbp)
leaq -0x470(%rbp), %rdi
movq %rdi, -0xa00(%rbp)
callq 0x82d0
movq -0xa00(%rbp), %rdi
movq %rax, -0x618(%rbp)
movq -0x618(%rbp), %rsi
callq 0x8500
movq %rdx, -0x9f8(%rbp)
movq %rax, -0x9f0(%rbp)
jmp 0x469a
movq -0x9f8(%rbp), %rax
movq -0x9f0(%rbp), %rcx
movq %rcx, -0x610(%rbp)
movq %rax, -0x608(%rbp)
movq -0x5f8(%rbp), %rdi
movq -0x600(%rbp), %rsi
movq -0x610(%rbp), %rdx
movq -0x608(%rbp), %rcx
callq 0x8480
movq %rdx, -0xa18(%rbp)
movq %rax, -0xa10(%rbp)
jmp 0x46e7
movq -0xa18(%rbp), %rax
movq -0xa10(%rbp), %rcx
movq %rcx, -0x628(%rbp)
movq %rax, -0x620(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x8540
leaq -0x4e0(%rbp), %rdi
callq 0x8560
leaq -0x4a0(%rbp), %rdi
callq 0x8580
jmp 0x3e14
leaq -0x548(%rbp), %rdi
callq 0x8540
leaq -0x4e0(%rbp), %rdi
callq 0x8560
jmp 0x48f0
testb $0x1, -0x489(%rbp)
jne 0x480c
leaq -0x488(%rbp), %rdi
movq %rdi, -0xa20(%rbp)
callq 0x85e0
movq -0xa20(%rbp), %rdi
movq %rax, -0x630(%rbp)
callq 0x8610
movq %rax, -0x638(%rbp)
movq -0x630(%rbp), %rdi
movq -0x638(%rbp), %rsi
callq 0x85a0
jmp 0x4798
leaq -0x208(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x8640
movq %rax, -0xa28(%rbp)
jmp 0x47b4
movq -0xa28(%rbp), %rax
cmpq $0x0, %rax
je 0x47d0
movl $0x18, -0x274(%rbp)
jmp 0x4899
leaq -0x208(%rbp), %rdi
leaq -0x488(%rbp), %rsi
callq 0x86a0
movb %dl, -0xa31(%rbp)
movq %rax, -0xa30(%rbp)
jmp 0x47f2
movb -0xa31(%rbp), %al
movq -0xa30(%rbp), %rcx
movq %rcx, -0x648(%rbp)
movb %al, -0x640(%rbp)
testb $0x1, -0x1d1(%rbp)
je 0x486b
movl $0x0, -0x64c(%rbp)
movl -0x64c(%rbp), %eax
cmpl -0x20c(%rbp), %eax
jge 0x484a
leaq -0x140(%rbp), %rdi
callq 0x86f0
movl -0x64c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64c(%rbp)
jmp 0x481f
leaq -0x140(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x78e0
jmp 0x485f
movl $0x17, -0x274(%rbp)
jmp 0x4899
leaq -0x140(%rbp), %rdi
leaq -0x240(%rbp), %rsi
callq 0x78e0
jmp 0x4880
movl -0x20c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20c(%rbp)
movl $0x0, -0x274(%rbp)
leaq -0x488(%rbp), %rdi
callq 0x6cf0
leaq -0x470(%rbp), %rdi
callq 0x8560
leaq -0x290(%rbp), %rdi
callq 0x7180
leaq -0x240(%rbp), %rdi
callq 0x7950
movl -0x274(%rbp), %eax
movl %eax, -0xa38(%rbp)
testl %eax, %eax
je 0x48ee
jmp 0x48db
movl -0xa38(%rbp), %eax
subl $0x17, %eax
je 0x4a14
jmp 0x48ec
jmp 0x493a
jmp 0x4925
leaq -0x488(%rbp), %rdi
callq 0x6cf0
leaq -0x470(%rbp), %rdi
callq 0x8560
leaq -0x290(%rbp), %rdi
callq 0x7180
leaq -0x240(%rbp), %rdi
callq 0x7950
jmp 0x4a22
movl -0x22c(%rbp), %eax
subl $0x1, %eax
addl -0x21c(%rbp), %eax
movl %eax, -0x21c(%rbp)
movq -0x1c0(%rbp), %rax
movq %rax, -0xa48(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x178e0
movq %rax, -0xa40(%rbp)
jmp 0x495d
movq -0xa40(%rbp), %rax
movq %rax, -0x654(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x178e0
movq %rax, -0xa50(%rbp)
jmp 0x4980
movq -0xa50(%rbp), %rax
movq %rax, -0x664(%rbp)
movq -0x1a0(%rbp), %rdi
callq 0x17900
movq %rax, -0xa58(%rbp)
jmp 0x49a3
movq -0xa58(%rbp), %rax
movq %rax, -0x66c(%rbp)
leaq -0x664(%rbp), %rdi
leaq -0x66c(%rbp), %rsi
callq 0x7e80
movq %rax, -0xa60(%rbp)
jmp 0x49cd
movq -0xa48(%rbp), %rsi
movq -0xa60(%rbp), %rax
movq %rax, -0x65c(%rbp)
leaq -0x220(%rbp), %rdi
leaq -0x654(%rbp), %rdx
leaq -0x65c(%rbp), %rcx
callq 0x19990
movb %al, -0xa61(%rbp)
jmp 0x4a04
movb -0xa61(%rbp), %al
testb $0x1, %al
jne 0x3684
jmp 0x4a14
leaq -0x208(%rbp), %rdi
callq 0x8720
jmp 0x4a33
leaq -0x208(%rbp), %rdi
callq 0x8720
jmp 0x51de
movq -0x7a0(%rbp), %rax
imull $0xa, 0x20e8(%rax), %eax
cltq
movq %rax, -0xa70(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x8740
movq %rax, %rcx
movq -0xa70(%rbp), %rax
cmpq %rcx, %rax
jae 0x4ada
leaq -0x678(%rbp), %rdi
movq %rdi, -0xa80(%rbp)
leaq -0x140(%rbp), %rsi
movq %rsi, -0xa88(%rbp)
callq 0x87c0
movq -0xa88(%rbp), %rsi
leaq -0x680(%rbp), %rdi
movq %rdi, -0xa78(%rbp)
callq 0x8810
movq -0xa80(%rbp), %rdi
movq -0xa78(%rbp), %rsi
leaq -0x2595(%rip), %rdx     # 0x2520
callq 0x8760
jmp 0x4abc
movq -0x7a0(%rbp), %rax
movslq 0x20e8(%rax), %rsi
leaq -0x140(%rbp), %rdi
callq 0x8860
jmp 0x4ad8
jmp 0x4ada
jmp 0x4adc
leaq -0x188(%rbp), %rdi
callq 0x88f0
jmp 0x3357
leaq -0x688(%rbp), %rdi
movq %rdi, -0xa98(%rbp)
leaq -0x140(%rbp), %rsi
movq %rsi, -0xaa0(%rbp)
callq 0x87c0
movq -0xaa0(%rbp), %rsi
leaq -0x690(%rbp), %rdi
movq %rdi, -0xa90(%rbp)
callq 0x8810
movq -0xa98(%rbp), %rdi
movq -0xa90(%rbp), %rsi
leaq -0x261d(%rip), %rdx     # 0x2520
callq 0x8760
jmp 0x4b44
movq -0x7a0(%rbp), %rax
movslq 0x20e8(%rax), %rax
movq %rax, -0xaa8(%rbp)
leaq -0x140(%rbp), %rdi
callq 0x8740
movq %rax, %rcx
movq -0xaa8(%rbp), %rax
cmpq %rcx, %rax
jae 0x4b92
movq -0x7a0(%rbp), %rax
movslq 0x20e8(%rax), %rsi
leaq -0x140(%rbp), %rdi
callq 0x8860
jmp 0x4b90
jmp 0x4b92
leaq -0x140(%rbp), %rax
movq %rax, -0x698(%rbp)
movq -0x698(%rbp), %rdi
callq 0x7a30
movq %rax, -0x6a0(%rbp)
movq -0x698(%rbp), %rdi
callq 0x7a60
movq %rax, -0x6a8(%rbp)
leaq -0x6a0(%rbp), %rdi
leaq -0x6a8(%rbp), %rsi
callq 0x7a90
testb $0x1, %al
jne 0x4bdf
jmp 0x4c18
leaq -0x6a0(%rbp), %rdi
callq 0x7ad0
movq %rax, -0x6b0(%rbp)
movq -0x6b0(%rbp), %rdi
callq 0x7e20
movq %rax, %rdi
callq 0x173f0
jmp 0x4c08
jmp 0x4c0a
leaq -0x6a0(%rbp), %rdi
callq 0x88f0
jmp 0x4bc6
movq -0x7a0(%rbp), %rax
cmpq $0x0, 0x2150(%rax)
je 0x4d14
leaq -0x140(%rbp), %rax
movq %rax, -0x6b8(%rbp)
movq -0x6b8(%rbp), %rdi
callq 0x7a30
movq %rax, -0x6c0(%rbp)
movq -0x6b8(%rbp), %rdi
callq 0x7a60
movq %rax, -0x6c8(%rbp)
leaq -0x6c0(%rbp), %rdi
leaq -0x6c8(%rbp), %rsi
callq 0x7a90
testb $0x1, %al
jne 0x4c7d
jmp 0x4d12
leaq -0x6c0(%rbp), %rdi
callq 0x7ad0
movq %rax, %rcx
movq -0x7a0(%rbp), %rax
movq %rcx, -0x6d0(%rbp)
movq 0x2150(%rax), %rax
movq %rax, -0xab0(%rbp)
movq -0x6d0(%rbp), %rdi
callq 0x7e20
movq %rax, %rsi
leaq -0x750(%rbp), %rdi
callq 0x18490
jmp 0x4cc5
movq -0xab0(%rbp), %rdi
leaq -0x750(%rbp), %rsi
callq 0x7fd0
movb %dl, -0xab9(%rbp)
movq %rax, -0xab8(%rbp)
jmp 0x4ce7
movb -0xab9(%rbp), %al
movq -0xab8(%rbp), %rcx
movq %rcx, -0x760(%rbp)
movb %al, -0x758(%rbp)
leaq -0x6c0(%rbp), %rdi
callq 0x88f0
jmp 0x4c61
jmp 0x4d14
leaq -0x140(%rbp), %rdi
movq %rdi, -0xad0(%rbp)
leaq -0x60(%rbp), %rsi
callq 0x8910
movq -0xad0(%rbp), %rdi
callq 0x8970
leaq -0x178(%rbp), %rdi
callq 0x8990
movq 0x2d2a6(%rip), %rdi     # 0x31ff0
leaq 0x1c327(%rip), %rsi     # 0x21078
callq 0x2130
movq %rax, -0xac8(%rbp)
jmp 0x4d5f
movq -0xac8(%rbp), %rdi
movl -0x124(%rbp), %esi
movl %esi, %eax
incl %eax
movl %eax, -0x124(%rbp)
callq 0x2250
movq %rax, -0xad8(%rbp)
jmp 0x4d84
movq -0xad8(%rbp), %rdi
leaq 0x1c2ec(%rip), %rsi     # 0x2107e
callq 0x2130
movq %rax, -0xae0(%rbp)
jmp 0x4da0
leaq -0x60(%rbp), %rdi
callq 0x8740
movq -0xae0(%rbp), %rdi
movq %rax, %rsi
callq 0x2050
movq %rax, -0xae8(%rbp)
jmp 0x4dc1
movq -0xae8(%rbp), %rdi
movq 0x2d1e1(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x4dd6
movq -0x7a0(%rbp), %rax
cmpq $0x0, 0x2150(%rax)
je 0x4e45
movq 0x2d202(%rip), %rdi     # 0x31ff0
leaq 0x1c28d(%rip), %rsi     # 0x21082
callq 0x2130
movq %rax, -0xaf0(%rbp)
jmp 0x4e03
movq -0x7a0(%rbp), %rax
movq 0x2150(%rax), %rdi
callq 0x89b0
movq -0xaf0(%rbp), %rdi
movq %rax, %rsi
callq 0x2050
movq %rax, -0xaf8(%rbp)
jmp 0x4e2e
movq -0xaf8(%rbp), %rdi
movq 0x2d174(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x4e43
jmp 0x4e45
movq -0x7a0(%rbp), %rsi
movq %rsi, %rdi
addq $0x20e0, %rdi           # imm = 0x20E0
addq $0x20e4, %rsi           # imm = 0x20E4
callq 0x75d0
movq %rax, -0xb00(%rbp)
jmp 0x4e6b
movq -0xb00(%rbp), %rax
movq %rax, -0x768(%rbp)
leaq 0x2d2d8(%rip), %rdi     # 0x32158
leaq 0x2d2d5(%rip), %rsi     # 0x3215c
callq 0x75d0
movq %rax, -0xb08(%rbp)
jmp 0x4e95
movq -0xb08(%rbp), %rax
movq %rax, -0x770(%rbp)
leaq -0x768(%rbp), %rdi
leaq -0x770(%rbp), %rsi
callq 0x7540
movb %al, -0xb09(%rbp)
jmp 0x4ebe
movb -0xb09(%rbp), %al
testb $0x1, %al
jne 0x4ecd
jmp 0x4f9c
movq -0x7a0(%rbp), %rsi
addq $0x20c8, %rsi           # imm = 0x20C8
leaq -0x788(%rbp), %rdi
callq 0x89d0
jmp 0x4ee9
leaq 0x2d280(%rip), %rdi     # 0x32170
leaq -0x788(%rbp), %rsi
movq %rsi, -0xb20(%rbp)
callq 0x8ac0
movq -0xb20(%rbp), %rdi
callq 0x8af0
movq -0x7a0(%rbp), %rcx
movl 0x20e0(%rcx), %edx
leaq 0x2d235(%rip), %rax     # 0x32158
movl %edx, (%rax)
movl 0x20e4(%rcx), %edx
leaq 0x2d22a(%rip), %rcx     # 0x3215c
movl %edx, (%rcx)
movl (%rax), %esi
movq 0x2d0b3(%rip), %rdi     # 0x31ff0
callq 0x2250
movq %rax, -0xb18(%rbp)
jmp 0x4f4b
movq -0xb18(%rbp), %rdi
leaq 0x1c3f0(%rip), %rsi     # 0x21349
callq 0x2130
movq %rax, -0xb28(%rbp)
jmp 0x4f67
movq -0xb28(%rbp), %rdi
leaq 0x2d1e7(%rip), %rax     # 0x3215c
movl (%rax), %esi
callq 0x2250
movq %rax, -0xb30(%rbp)
jmp 0x4f85
movq -0xb30(%rbp), %rdi
movq 0x2d01d(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x4f9a
jmp 0x4f9c
movl $0x0, -0x78c(%rbp)
movl -0x78c(%rbp), %eax
movl %eax, -0xb3c(%rbp)
movl $0x3, -0x790(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x8740
movl %eax, -0x794(%rbp)
leaq -0x790(%rbp), %rdi
leaq -0x794(%rbp), %rsi
callq 0x8440
movq %rax, -0xb38(%rbp)
jmp 0x4fe7
movl -0xb3c(%rbp), %eax
movq -0xb38(%rbp), %rcx
cmpl (%rcx), %eax
jge 0x5182
movslq -0x78c(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8b10
movq %rax, %rdi
callq 0x7e20
movq %rax, %rsi
movq 0x2cfd2(%rip), %rdi     # 0x31ff0
callq 0x19b20
jmp 0x5025
movq 0x2cfc4(%rip), %rdi     # 0x31ff0
leaq 0x1c056(%rip), %rsi     # 0x21089
callq 0x2130
movq %rax, -0xb48(%rbp)
jmp 0x5041
movslq -0x78c(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8b10
movq %rax, %rdi
callq 0x7e20
movq -0xb48(%rbp), %rdi
movl 0x20b0(%rax), %esi
callq 0x2250
movq %rax, -0xb50(%rbp)
jmp 0x5074
movq -0xb50(%rbp), %rdi
movq 0x2cf2e(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x5089
movq 0x2cf60(%rip), %rdi     # 0x31ff0
leaq 0x1bffa(%rip), %rsi     # 0x21091
callq 0x2130
movq %rax, -0xb58(%rbp)
jmp 0x50a5
movslq -0x78c(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8b10
movq %rax, %rdi
callq 0x26f0
movq -0x7a0(%rbp), %rdi
movq %rax, %rsi
callq 0x2720
movsd %xmm0, -0xb60(%rbp)
jmp 0x50d6
movsd -0xb60(%rbp), %xmm0
movq -0xb58(%rbp), %rdi
callq 0x2270
movq %rax, -0xb68(%rbp)
jmp 0x50f3
movq -0xb68(%rbp), %rdi
movq 0x2ceaf(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x5108
movq 0x2cee1(%rip), %rdi     # 0x31ff0
leaq 0x1bf86(%rip), %rsi     # 0x2109c
callq 0x2130
movq %rax, -0xb70(%rbp)
jmp 0x5124
movslq -0x78c(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x8b10
movq %rax, %rdi
callq 0x7e20
movq -0xb70(%rbp), %rdi
movl 0x20b8(%rax), %esi
callq 0x2250
movq %rax, -0xb78(%rbp)
jmp 0x5157
movq -0xb78(%rbp), %rdi
movq 0x2ce4b(%rip), %rsi     # 0x31fb0
callq 0x2170
jmp 0x516c
jmp 0x516e
movl -0x78c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x78c(%rbp)
jmp 0x4fa6
jmp 0x3312
movq -0x7b0(%rbp), %rdi
movq -0x7a0(%rbp), %rsi
addq $0x20c8, %rsi           # imm = 0x20C8
callq 0x89d0
jmp 0x51a3
movl $0x1, -0x274(%rbp)
leaq -0x178(%rbp), %rdi
callq 0x52d0
leaq -0x140(%rbp), %rdi
callq 0x8b30
leaq -0x60(%rbp), %rdi
callq 0x8b30
movq -0x7a8(%rbp), %rax
addq $0xb80, %rsp            # imm = 0xB80
popq %rbp
retq
leaq -0x178(%rbp), %rdi
callq 0x52d0
leaq -0x140(%rbp), %rdi
callq 0x8b30
leaq -0x60(%rbp), %rdi
callq 0x8b30
movq -0x88(%rbp), %rdi
callq 0x2260
nopl (%rax,%rax)