// File: /workspace/github_cpp_makefile_star2_O2/kaiming[P]Chamber-Crawler-3k/ReadFile/readplan.cc
// Function: readFloorPlan(std::istream&, std::vector<std::vector<std::vector<std::shared_ptr<Tile>, std::allocator<std::shared_ptr<Tile>>>, std::allocator<std::vector<std::shared_ptr<Tile>, std::allocator<std::shared_ptr<Tile>>>>>, std::allocator<std::vector<std::vector<std::shared_ptr<Tile>, std::allocator<std::shared_ptr<Tile>>>, std::allocator<std::vector<std::shared_ptr<Tile>, std::allocator<std::shared_ptr<Tile>>>>>>>&, std::vector<std::shared_ptr<WalkableTile>, std::allocator<std::shared_ptr<WalkableTile>>>&, std::vector<std::vector<std::shared_ptr<WalkableTile>, std::allocator<std::shared_ptr<WalkableTile>>>, std::allocator<std::vector<std::shared_ptr<WalkableTile>, std::allocator<std::shared_ptr<WalkableTile>>>>>&, std::vector<std::vector<std::shared_ptr<WalkableTile>, std::allocator<std::shared_ptr<WalkableTile>>>, std::allocator<std::vector<std::shared_ptr<WalkableTile>, std::allocator<std::shared_ptr<WalkableTile>>>>>&, std::vector<bool, std::allocator<bool>>&)
void readFloorPlan(std::istream& in, std::vector<std::vector<std::vector<std::shared_ptr<Tile>>>>& floors, std::vector<std::shared_ptr<WalkableTile>>& playerSpawns, std::vector<std::vector<std::shared_ptr<WalkableTile>>>& enemies, std::vector<std::vector<std::shared_ptr<WalkableTile>>>& dragonHoards, std::vector<bool>& filled) {
    std::shared_ptr<Factory> tileType;
    std::shared_ptr<WalkableFactory> walkable = std::make_shared<WalkableFactory>();
    std::shared_ptr<NonWalkableFactory> nonWalkable = std::make_shared<NonWalkableFactory>();
    // keep track of the generated dragonhoard to add dragon after
    std::vector<std::pair<std::pair<int, int>, std::shared_ptr<DragonHoard>>> hoards;
    std::string line;
    int floorNum {-1}, rowNum {0};
    // count of the number of borders, '|' chars, and '-' chars respectively
    int borderCount {0}, vert {0}, horiz {0};
    bool isStart {false};

    while (true) {
        std::getline(in, line);

        // break clause
        if (in.fail()) {
            // if entire file has been read
            if (in.eof()) return;
            
            // else if theres some other failed read
            std::cerr << "error reading in file" << std::endl;
            return;
        }

        // case of the start of a new floor
        if (!isStart) {
            bool valid {true};
            borderCount = 0;
            
            // check if next line is a valid start of a floor
            for (int counter {0}; counter < static_cast<int>(line.size()); ++counter) {
                // MIN REQUIREMENT OF A FLOOR DIMENSION IS WIDTH THREE?
                if (static_cast<int>(line.size()) < 3) {
                    valid = false;
                    break;
                }

                // if the first and last chars are not '|'
                if ((counter == 0 || counter == static_cast<int>(line.size()) - 1) && line[counter] != '|') {
                    valid = false;
                    break;
                } 

                // if the chars inbetween first and last are not '-'
                if ((counter > 0 && counter < static_cast<int>(line.size()) - 1) && line[counter] != '-') {
                    valid = false;
                    break;
                }
            }

            // if line is a valid start to a floor then continueously read each line till the end of next floor
            if (valid) {
                isStart = true;
                rowNum = 0;

                // push in a new floor grid
                std::vector<std::vector<std::shared_ptr<Tile>>> grid;
                floors.push_back(grid);
                ++floorNum;
                filled.push_back(false);
                std::vector<std::shared_ptr<WalkableTile>> enemyFloor, dHoardFloor;
                enemies.push_back(enemyFloor);
                dragonHoards.push_back(dHoardFloor);
            } else {
                // if not a valid line then ignore and continue reading the next line
                continue;
            }
        }

        if (line == "") {
            continue;
        }
        
        std::istringstream ssl {line};
        char type;
        int colNum {0};

        // push in a new row
        std::vector<std::shared_ptr<Tile>> row;
        floors[floorNum].push_back(row);


        // grab each character and create the appropriate Tile
        while (true) {
            ssl >> std::noskipws >> type;

            // break clause
            if (ssl.fail()) {
                // if end of line
                if (ssl.eof()) {
                    if (vert == 2 && horiz == static_cast<int>(line.size() - 2)) {
                        ++borderCount;

                        if (borderCount == 2) isStart = false;
                    }

                    vert = 0;
                    horiz = 0;
                    break;
                }

                // else read in fail
                std::cerr << "error reading in file" << std::endl;
                break;
            }

            // x is colNum and y is rowNum
            // if char is of type nonwalkable tile
            if (type == '|' || type == '-' || type == ' ') {
                tileType = nonWalkable;

                switch (type) {
                    case ('|'):
                        ++vert;
                        break;

                    case ('-'):
                        ++horiz;
                        break;

                    default:
                        break;
                }   

                // make tile
                auto tempTile {tileType->makeTile(type, colNum, rowNum)};
                // add to floor
                // debugging line: std::cout << tempTile->getCoord().first << " " << tempTile->getCoord().second << " " << tempTile->getType() << std::endl;
                floors[floorNum][rowNum].push_back(tempTile);
            } else if (isWalkable(type)) { // else if char is a walkable tile and need to check for pregeneration
                tileType = walkable;
                char period = '.';


                switch (type) {
                    case ('0'):
                    {
                        // RH potion
                        auto tempPotion {std::make_shared<RH>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }
                    
                    case ('1'):
                    {
                        // BA potion
                        auto tempPotion {std::make_shared<BA>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('2'):
                    {
                        // BD potion
                        auto tempPotion {std::make_shared<BD>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('3'):
                    {
                        // PH potion
                        auto tempPotion {std::make_shared<PH>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('4'):
                    {
                        // WA potion
                        auto tempPotion {std::make_shared<WA>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('5'):
                    {
                        // WD potion
                        auto tempPotion {std::make_shared<WD>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, tempPotion, nullptr, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('6'):
                    {
                        // normal gold pile
                        auto tempGold {std::make_shared<Gold>("Normal Hoard", 2)};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, nullptr, tempGold, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('7'):
                    {
                        // small gold pile
                        auto tempGold {std::make_shared<Gold>("Small Hoard", 1)};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, nullptr, tempGold, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('8'):
                    {
                        // merchant hoard
                        auto tempGold {std::make_shared<Gold>("Merchant Hoard", 4)};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, nullptr, tempGold, false)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('9'):
                    {
                        // dragon hoard
                        auto tempGold {std::make_shared<DragonHoard>()};
                        hoards.push_back(std::pair<std::pair<int, int>, std::shared_ptr<DragonHoard>>{std::pair<int, int> {colNum, rowNum}, tempGold});
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, nullptr, nullptr, tempGold, false)};

                        dragonHoards[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('D'):
                    {
                        // dragon (must check which of the list of dragon hoards this dragon is guarding, if there are non then produce error saying improper generation)
                        bool set {false};
                        auto tempDrag {std::make_shared<Dragon>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempDrag)};
                        auto dCoord {std::pair<int, int> {colNum, rowNum}};

                        for (auto& n : hoards) {
                            auto gCoord {n.first};

                            // calc distance from drag 
                            double distance = std::floor(std::sqrt(std::pow((dCoord.first - gCoord.first), 2) + std::pow((dCoord.second - gCoord.second), 2)));
                            // if the hoard is within a distance of 1 and there isn't already a dragon guarding it
                            if (distance == 1 && n.second->getDragonTile() == nullptr) {
                                n.second->setDragonTile(std::static_pointer_cast<WalkableTile>(tempTile));
                                set = true;
                            }
                        }

                        if (!set) { // NOTE: CAN CHANGE THE BEHAVIOUR IF THE CASE WHERE A PREGENERATED DRAG DOESNT GUARD A HOARD 
                            std::cerr << "Error: Dragon does not guard a dragon hoard, despawning ..." << std::endl;
                            break;
                        }

                        //enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile)); // Not sure about this line: uncomment this if we want dragons to move

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('H'):
                    {
                        // Human
                        auto tempHuman {std::make_shared<Human>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));                        

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('W'):
                    {
                        // Dwarf
                        auto tempHuman {std::make_shared<Dwarf>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('E'):
                    {
                        // Elf
                        auto tempHuman {std::make_shared<Elf>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('O'):
                    {
                        // Orc
                        auto tempHuman {std::make_shared<Orc>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }
                    
                    case ('M'):
                    {
                        // Merchant
                        auto tempHuman {std::make_shared<Merchant>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('L'):
                    {
                        // Halfling
                        auto tempHuman {std::make_shared<Halfling>()};
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempHuman)};

                        enemies[floorNum].push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('@'):
                    {
                        // player spawn
                        std::shared_ptr<Shade> tempPlayer {std::make_shared<Shade>()}; // NOTE: GAVE PLAYER A DEFAULT CONSTRUCTOR INITIALIZES FIELDS TO 0 SINCE THE BOARD CONSTRUCTOR WILL REASSIGN THE OCCUPANT FIELD FOR PLAYER
                        auto tempTile {tileType->makeTile(period, colNum, rowNum, tempPlayer)};
                        
                        // if the current floor has more than 1 @ symbol or none at all ------------------------------
                        if (floorNum != static_cast<int>(playerSpawns.size())) {
                            std::cerr << "Invalid number of players being spawned! Despawning ..." << std::endl;
                            return; //NOTE: RETURN OR BREAK?
                        }

                        playerSpawns.push_back(std::static_pointer_cast<WalkableTile>(tempTile));

                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    case ('\\'):
                    {
                        // stairs
                        auto tempTile {tileType->makeTile(type, colNum, rowNum, nullptr, nullptr, {}, true)};
                        floors[floorNum][rowNum].push_back(tempTile);
                        if (!filled[floorNum]) filled[floorNum] = true;
                        break;
                    }

                    default:
                    {
                        // either ., +, or #
                        auto tempTile {tileType->makeTile(type, colNum, rowNum)};
                        floors[floorNum][rowNum].push_back(tempTile);
                    }
                }

        
            } else { // unrecognized  symbol
                std::cerr << "Error: Unrecogonized symbol" << std::endl;
            }

            ++colNum;
        } // End of column

        ++rowNum;
    } // End of row


}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x798, %rsp            # imm = 0x798
movq %r9, 0x18(%rsp)
movq %r8, %rbp
movq %rcx, 0xa0(%rsp)
movq %rdx, %r14
movq %rsi, 0x48(%rsp)
movq %rdi, %rbx
pxor %xmm0, %xmm0
movdqa %xmm0, 0x80(%rsp)
leaq 0x510(%rsp), %rdi
callq 0x9a62
movq %r14, 0x498(%rsp)
leaq 0x500(%rsp), %rdi
callq 0x9a7d
pxor %xmm0, %xmm0
leaq 0x470(%rsp), %rcx
andq $0x0, 0x10(%rcx)
leaq 0x190(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movdqa %xmm0, (%rcx)
movb $0x0, (%rax)
leaq 0x468(%rsp), %rax
movq %rax, 0x178(%rsp)
leaq 0x1f8(%rsp), %rax
movq %rax, 0x130(%rsp)
leaq 0x10(%rsp), %rax
movq %rax, 0x168(%rsp)
leaq 0x4a8(%rsp), %rax
movq %rax, 0xe0(%rsp)
leaq 0x4b8(%rsp), %rax
movq %rax, 0xd8(%rsp)
leaq 0x4c8(%rsp), %rax
movq %rax, 0xd0(%rsp)
leaq 0x4d8(%rsp), %rax
movq %rax, 0xc8(%rsp)
leaq 0x4e8(%rsp), %rax
movq %rax, 0xc0(%rsp)
leaq 0x4f8(%rsp), %rax
movq %rax, 0xb8(%rsp)
leaq 0x10(%rsp), %rax
movq %rax, 0x170(%rsp)
leaq 0x318(%rsp), %rax
movq %rax, 0xb0(%rsp)
leaq 0x338(%rsp), %rax
movq %rax, 0x128(%rsp)
leaq 0x358(%rsp), %rax
movq %rax, 0x120(%rsp)
leaq 0x378(%rsp), %rax
movq %rax, 0x118(%rsp)
leaq 0x398(%rsp), %rax
movq %rax, 0x110(%rsp)
leaq 0x3b8(%rsp), %rax
movq %rax, 0x108(%rsp)
leaq 0x3d8(%rsp), %rax
movq %rax, 0x100(%rsp)
leaq 0x3f8(%rsp), %rax
movq %rax, 0xf8(%rsp)
leaq 0x418(%rsp), %rax
movq %rax, 0xf0(%rsp)
leaq 0x438(%rsp), %rax
movq %rax, 0xe8(%rsp)
leaq 0x1c8(%rsp), %rax
movq %rax, 0x160(%rsp)
pushq $-0x1
popq %rax
movl %eax, 0x9c(%rsp)
xorl %r13d, %r13d
xorl %r15d, %r15d
xorl %r14d, %r14d
xorl %r12d, %r12d
movl $0x0, 0xac(%rsp)
movq %rbp, 0x58(%rsp)
movq %rbx, %rdi
leaq 0x180(%rsp), %rsi
callq 0x5050
movq (%rbx), %rax
movq -0x18(%rax), %rax
movl 0x20(%rbx,%rax), %eax
testb $0x5, %al
jne 0x9259
testb $0x1, %r15b
jne 0x7945
movl 0x188(%rsp), %eax
leal -0x1(%rax), %ecx
movq 0x180(%rsp), %rdx
movslq %ecx, %rsi
testl %eax, %eax
movl $0x0, %edi
cmovgl %eax, %edi
xorl %r8d, %r8d
cmpq %r8, %rdi
je 0x7893
cmpl $0x3, %eax
jl 0x7812
testq %r8, %r8
je 0x7889
cmpq %r8, %rcx
jne 0x787b
cmpb $0x7c, (%rdx,%rcx)
jne 0x7812
cmpq %rsi, %r8
jge 0x788e
cmpb $0x2d, (%rdx,%r8)
je 0x788e
jmp 0x7812
cmpb $0x7c, (%rdx)
jne 0x7812
incq %r8
jmp 0x7861
pxor %xmm0, %xmm0
movdqa %xmm0, 0x610(%rsp)
andq $0x0, 0x620(%rsp)
movq 0x48(%rsp), %rdi
leaq 0x610(%rsp), %rsi
callq 0x9a98
movq 0x18(%rsp), %rdi
xorl %esi, %esi
callq 0x9ac4
pxor %xmm0, %xmm0
movdqa %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movdqa %xmm0, 0x30(%rsp)
andq $0x0, 0x40(%rsp)
movq 0xa0(%rsp), %rdi
leaq 0x140(%rsp), %rsi
callq 0x9b02
leaq 0x30(%rsp), %r15
movq %rbp, %rdi
movq %r15, %rsi
callq 0x9b02
incl 0x9c(%rsp)
movq %r15, %rdi
callq 0x6a84
leaq 0x140(%rsp), %rdi
callq 0x6a84
leaq 0x610(%rsp), %rdi
callq 0x6d22
xorl %r13d, %r13d
movl $0x0, 0xac(%rsp)
leaq 0x180(%rsp), %rdi
leaq 0x1153b(%rip), %rsi     # 0x18e8f
callq 0x6801
movb $0x1, %r15b
testb %al, %al
jne 0x7812
movl %r12d, 0x7c(%rsp)
movl %r14d, 0x78(%rsp)
leaq 0x610(%rsp), %rdi
leaq 0x180(%rsp), %rsi
pushq $0x8
popq %rdx
callq 0x5350
pxor %xmm0, %xmm0
movdqa %xmm0, 0x140(%rsp)
andq $0x0, 0x150(%rsp)
movslq 0x9c(%rsp), %rax
movq %rax, 0x20(%rsp)
imulq $0x18, %rax, %r15
movq 0x48(%rsp), %rax
movq (%rax), %rdi
addq %r15, %rdi
leaq 0x140(%rsp), %rsi
callq 0x9b2e
movq %rbx, 0x138(%rsp)
movslq %r13d, %rax
movq %rax, 0x60(%rsp)
shlq $0x20, %rax
movq %rax, 0x490(%rsp)
movd %r13d, %xmm0
movdqa %xmm0, 0x5f0(%rsp)
xorl %ebx, %ebx
movq %r13, 0x50(%rsp)
movq 0x610(%rsp), %rax
movq -0x18(%rax), %rax
andl $0xffffefff, 0x628(%rsp,%rax) # imm = 0xFFFFEFFF
leaq 0x610(%rsp), %rdi
leaq 0x2f(%rsp), %rsi
callq 0x52a0
movq 0x610(%rsp), %rax
movq -0x18(%rax), %rax
movl 0x630(%rsp,%rax), %r12d
testb $0x5, %r12b
jne 0x919b
movzbl 0x2f(%rsp), %eax
cmpl $0x20, %eax
je 0x7a55
cmpl $0x7c, %eax
je 0x7a55
cmpl $0x2d, %eax
jne 0x7b2d
leaq 0x80(%rsp), %rdi
leaq 0x500(%rsp), %rsi
callq 0xa9ca
movzbl 0x2f(%rsp), %eax
cmpl $0x2d, %eax
je 0x7a7f
cmpl $0x7c, %eax
jne 0x7a83
incl 0x7c(%rsp)
jmp 0x7a83
incl 0x78(%rsp)
movq 0x80(%rsp), %rsi
pxor %xmm0, %xmm0
movdqa %xmm0, 0x460(%rsp)
movdqa %xmm0, 0x450(%rsp)
movdqa %xmm0, 0x440(%rsp)
movq (%rsi), %rcx
movq (%rcx), %r10
subq $0x8, %rsp
movsbl %al, %edx
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x468(%rsp), %r9
pushq $0x0
leaq 0x450(%rsp), %rax
pushq %rax
leaq 0x468(%rsp), %rax
pushq %rax
callq *%r10
addq $0x20, %rsp
leaq 0x448(%rsp), %rdi
callq 0x6c00
leaq 0x458(%rsp), %rdi
callq 0x6c00
leaq 0x468(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r12, %rsi
callq 0x9b5a
jmp 0x9189
leal -0x30(%rax), %ecx
cmpb $0xa, %cl
jb 0x7b55
addl $-0x23, %eax
cmpl $0x39, %eax
ja 0x90fa
movabsq $0x210363620000901, %rcx # imm = 0x210363620000901
btq %rax, %rcx
jae 0x90fa
leaq 0x80(%rsp), %rdi
leaq 0x510(%rsp), %rsi
callq 0xab88
movzbl 0x2f(%rsp), %eax
leal -0x30(%rax), %ecx
cmpl $0x2c, %ecx
ja 0x8ff1
leaq 0x1099e(%rip), %rdx     # 0x18520
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9b86
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x430(%rsp)
leaq 0x5e0(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0xad08
pxor %xmm0, %xmm0
movdqa %xmm0, 0x420(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r12
movq %r12, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x438(%rsp), %r9
pushq $0x0
leaq 0x430(%rsp), %r10
pushq %r10
pushq %r14
callq *%rax
addq $0x20, %rsp
leaq 0x428(%rsp), %rdi
callq 0x6c00
leaq 0x5e8(%rsp), %rdi
callq 0x6c00
leaq 0x438(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r12, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x7c73
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
movq 0x80(%rsp), %rsi
pxor %xmm0, %xmm0
movdqa %xmm0, 0x1f0(%rsp)
movdqa %xmm0, 0x1e0(%rsp)
movdqa %xmm0, 0x1d0(%rsp)
movq (%rsi), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x38(%rsp), %r12
movq %r12, %rdi
pushq $0x5c
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x1f8(%rsp), %r9
pushq $0x1
leaq 0x1e0(%rsp), %r10
pushq %r10
leaq 0x1f8(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x1d8(%rsp), %rdi
callq 0x6c00
leaq 0x1e8(%rsp), %rdi
callq 0x6c00
leaq 0x1f8(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r12, %rsi
callq 0x9b5a
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x7d44
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x9189
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d18
movq 0x80(%rsp), %rbp
leaq 0x4f0(%rsp), %rdi
movq %r12, %rsi
callq 0xc0b8
pxor %xmm0, %xmm0
movdqa %xmm0, 0x2d0(%rsp)
movdqa %xmm0, 0x2c0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4f8(%rsp), %r9
pushq $0x0
leaq 0x2d0(%rsp), %r10
pushq %r10
leaq 0x2e8(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x2c8(%rsp), %rdi
callq 0x6c00
leaq 0x2d8(%rsp), %rdi
callq 0x6c00
leaq 0x4f8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x7e65
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r14
movq %r14, %rdi
callq 0x9dba
movq 0x80(%rsp), %rbp
leaq 0x520(%rsp), %r13
movq %r13, %rdi
movq %r14, %rsi
callq 0xc94c
pxor %xmm0, %xmm0
movdqa %xmm0, 0x210(%rsp)
movdqa %xmm0, 0x200(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
movq %r13, %r9
pushq $0x0
leaq 0x210(%rsp), %r10
pushq %r10
leaq 0x228(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x208(%rsp), %rdi
callq 0x6c00
leaq 0x218(%rsp), %rdi
callq 0x6c00
leaq 0x528(%rsp), %rdi
callq 0x6c00
movq 0x498(%rsp), %r14
movq 0x8(%r14), %rbp
subq (%r14), %rbp
shrq $0x4, %rbp
cmpl %ebp, 0x9c(%rsp)
movq 0x50(%rsp), %r13
jne 0x9117
leaq 0x68(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x9ce1
movq %r14, %rdi
leaq 0x68(%rsp), %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
leaq 0x8(%rsp), %rsi
callq 0x9b5a
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x9132
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x9132
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9c2d
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3b0(%rsp)
leaq 0x5a0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xb2f8
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3a0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x3b8(%rsp), %r9
pushq $0x0
leaq 0x3b0(%rsp), %r10
pushq %r10
pushq %r13
callq *%rax
addq $0x20, %rsp
leaq 0x3a8(%rsp), %rdi
callq 0x6c00
leaq 0x5a8(%rsp), %rdi
callq 0x6c00
leaq 0x3b8(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x8090
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d4e
movq 0x80(%rsp), %rbp
leaq 0x4d0(%rsp), %rdi
movq %r12, %rsi
callq 0xc398
pxor %xmm0, %xmm0
movdqa %xmm0, 0x290(%rsp)
movdqa %xmm0, 0x280(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4d8(%rsp), %r9
pushq $0x0
leaq 0x290(%rsp), %r10
pushq %r10
leaq 0x2a8(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x288(%rsp), %rdi
callq 0x6c00
leaq 0x298(%rsp), %rdi
callq 0x6c00
leaq 0x4d8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x81b1
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9bdc
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x410(%rsp)
leaq 0x5d0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xae90
pxor %xmm0, %xmm0
movdqa %xmm0, 0x400(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x418(%rsp), %r9
pushq $0x0
leaq 0x410(%rsp), %r10
pushq %r10
pushq %r13
callq *%rax
addq $0x20, %rsp
leaq 0x408(%rsp), %rdi
callq 0x6c00
leaq 0x5d8(%rsp), %rdi
callq 0x6c00
leaq 0x418(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x82a5
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9c48
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x390(%rsp)
leaq 0x590(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xb484
pxor %xmm0, %xmm0
movdqa %xmm0, 0x380(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x398(%rsp), %r9
pushq $0x0
leaq 0x390(%rsp), %r10
pushq %r10
pushq %r13
callq *%rax
addq $0x20, %rsp
leaq 0x388(%rsp), %rdi
callq 0x6c00
leaq 0x598(%rsp), %rdi
callq 0x6c00
leaq 0x398(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x8399
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r14
movq %r14, %rdi
callq 0x9cfd
movq 0x80(%rsp), %rbp
leaq 0x540(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0xbf48
pxor %xmm0, %xmm0
movdqa %xmm0, 0x2f0(%rsp)
movdqa %xmm0, 0x2e0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movq %rbx, %r14
movl %r14d, %ecx
movl %r13d, %r8d
movq %r12, %r9
pushq $0x0
leaq 0x2f0(%rsp), %r10
pushq %r10
leaq 0x308(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x2e8(%rsp), %rdi
callq 0x6c00
leaq 0x2f8(%rsp), %rdi
callq 0x6c00
leaq 0x548(%rsp), %rdi
callq 0x6c00
movq 0x470(%rsp), %r12
movq 0x478(%rsp), %r13
movd %r14d, %xmm0
punpckldq 0x5f0(%rsp), %xmm0 # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
movdqa %xmm0, 0x600(%rsp)
xorl %ebp, %ebp
cmpq %r13, %r12
je 0x909b
movq (%r12), %xmm0
movdqa 0x600(%rsp), %xmm1
psubd %xmm0, %xmm1
cvtdq2pd %xmm1, %xmm0
mulpd %xmm0, %xmm0
movapd %xmm0, %xmm1
unpckhpd %xmm0, %xmm1            # xmm1 = xmm1[1],xmm0[1]
addsd %xmm0, %xmm1
sqrtsd %xmm1, %xmm0
callq 0x5360
ucomisd 0x10055(%rip), %xmm0    # 0x18500
jne 0x8507
jp 0x8507
movq 0x8(%r12), %rsi
leaq 0x68(%rsp), %rdi
callq 0x1520a
movq 0x68(%rsp), %r14
leaq 0x70(%rsp), %rdi
callq 0x6c00
testq %r14, %r14
jne 0x8507
movq 0x8(%r12), %rbp
leaq 0x530(%rsp), %r14
movq %r14, %rdi
leaq 0x8(%rsp), %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r14, %rsi
callq 0x1521c
leaq 0x538(%rsp), %rdi
callq 0x6c00
movb $0x1, %bpl
addq $0x18, %r12
jmp 0x846a
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9c12
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3d0(%rsp)
leaq 0x5b0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xb180
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3c0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x3d8(%rsp), %r9
pushq $0x0
leaq 0x3d0(%rsp), %r10
pushq %r10
pushq %r13
callq *%rax
addq $0x20, %rsp
leaq 0x3c8(%rsp), %rdi
callq 0x6c00
leaq 0x5b8(%rsp), %rdi
callq 0x6c00
leaq 0x3d8(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x85ff
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9bf7
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3f0(%rsp)
leaq 0x5c0(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0xb008
pxor %xmm0, %xmm0
movdqa %xmm0, 0x3e0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x3f8(%rsp), %r9
pushq $0x0
leaq 0x3f0(%rsp), %r10
pushq %r10
pushq %r13
callq *%rax
addq $0x20, %rsp
leaq 0x3e8(%rsp), %rdi
callq 0x6c00
leaq 0x5c8(%rsp), %rdi
callq 0x6c00
leaq 0x3f8(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x86f3
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
movl $0x2, 0x8(%rsp)
leaq 0x30(%rsp), %r12
movq %r12, %rdi
leaq 0xfedb(%rip), %rsi      # 0x185ea
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0x9c63
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x370(%rsp)
movdqa %xmm0, 0x360(%rsp)
leaq 0x580(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x9df8
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x378(%rsp), %r9
pushq $0x0
pushq %r13
leaq 0x378(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x588(%rsp), %rdi
callq 0x6c00
leaq 0x368(%rsp), %rdi
callq 0x6c00
leaq 0x378(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x87f5
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
movl $0x1, 0x8(%rsp)
leaq 0x30(%rsp), %r12
movq %r12, %rdi
leaq 0xfde6(%rip), %rsi      # 0x185f7
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0x9c84
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x350(%rsp)
movdqa %xmm0, 0x340(%rsp)
leaq 0x570(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x9df8
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x358(%rsp), %r9
pushq $0x0
pushq %r13
leaq 0x358(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x578(%rsp), %rdi
callq 0x6c00
leaq 0x348(%rsp), %rdi
callq 0x6c00
leaq 0x358(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x88f7
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d9f
movq 0x80(%rsp), %rbp
leaq 0x4a0(%rsp), %rdi
movq %r12, %rsi
callq 0xc7e8
pxor %xmm0, %xmm0
movdqa %xmm0, 0x230(%rsp)
movdqa %xmm0, 0x220(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4a8(%rsp), %r9
pushq $0x0
leaq 0x230(%rsp), %r10
pushq %r10
leaq 0x248(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x228(%rsp), %rdi
callq 0x6c00
leaq 0x238(%rsp), %rdi
callq 0x6c00
leaq 0x4a8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x8a18
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d84
movq 0x80(%rsp), %rbp
leaq 0x4b0(%rsp), %rdi
movq %r12, %rsi
callq 0xc678
pxor %xmm0, %xmm0
movdqa %xmm0, 0x250(%rsp)
movdqa %xmm0, 0x240(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4b8(%rsp), %r9
pushq $0x0
leaq 0x250(%rsp), %r10
pushq %r10
leaq 0x268(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x248(%rsp), %rdi
callq 0x6c00
leaq 0x258(%rsp), %rdi
callq 0x6c00
leaq 0x4b8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x8b39
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x8(%rsp), %r12
movq %r12, %rdi
callq 0x9cc6
movq 0x490(%rsp), %rax
movq %rbx, %r14
orq %rbx, %rax
movq %rax, 0x30(%rsp)
leaq 0x38(%rsp), %rdi
movq %r12, %rsi
callq 0x9e0c
leaq 0x470(%rsp), %rdi
leaq 0x30(%rsp), %r12
movq %r12, %rsi
callq 0xba26
leaq 0x40(%rsp), %rdi
callq 0x6c00
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x310(%rsp)
movdqa %xmm0, 0x300(%rsp)
leaq 0x550(%rsp), %r13
movq %r13, %rdi
leaq 0x8(%rsp), %rsi
callq 0xbc2e
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
movq %r12, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %r14d, %ecx
movq 0x58(%rsp), %r8
leaq 0x318(%rsp), %r9
pushq $0x0
pushq %r13
leaq 0x318(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x558(%rsp), %rdi
callq 0x6c00
leaq 0x308(%rsp), %rdi
callq 0x6c00
leaq 0x318(%rsp), %rdi
callq 0x6c00
movq 0x58(%rsp), %rax
movq (%rax), %rbp
movq %r15, %r13
addq %r15, %rbp
leaq 0x68(%rsp), %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r14, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r13), %rdi
movq %r12, %rsi
callq 0x9b5a
movq 0x50(%rsp), %r13
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x58(%rsp), %rbp
testq %rdx, (%rax)
jne 0x8c99
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
leaq 0x38(%rsp), %rdi
callq 0x6c00
leaq 0x10(%rsp), %rdi
jmp 0x918e
movl $0x4, 0x8(%rsp)
leaq 0x30(%rsp), %r12
movq %r12, %rdi
leaq 0xf93f(%rip), %rsi      # 0x18603
leaq 0x8(%rsp), %r14
movq %r14, %rdx
callq 0x9ca5
movq 0x80(%rsp), %rbp
pxor %xmm0, %xmm0
movdqa %xmm0, 0x330(%rsp)
movdqa %xmm0, 0x320(%rsp)
leaq 0x560(%rsp), %r13
movq %r13, %rdi
movq %r12, %rsi
callq 0x9df8
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movq 0x58(%rsp), %r8
leaq 0x338(%rsp), %r9
pushq $0x0
pushq %r13
leaq 0x338(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x568(%rsp), %rdi
callq 0x6c00
leaq 0x328(%rsp), %rdi
callq 0x6c00
leaq 0x338(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
movq 0x50(%rsp), %r13
testq %rdx, (%rax)
jne 0x8daa
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d33
movq 0x80(%rsp), %rbp
leaq 0x4e0(%rsp), %rdi
movq %r12, %rsi
callq 0xc228
pxor %xmm0, %xmm0
movdqa %xmm0, 0x2b0(%rsp)
movdqa %xmm0, 0x2a0(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4e8(%rsp), %r9
pushq $0x0
leaq 0x2b0(%rsp), %r10
pushq %r10
leaq 0x2c8(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x2a8(%rsp), %rdi
callq 0x6c00
leaq 0x2b8(%rsp), %rdi
callq 0x6c00
leaq 0x4e8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x8ecb
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
leaq 0x30(%rsp), %r12
movq %r12, %rdi
callq 0x9d69
movq 0x80(%rsp), %rbp
leaq 0x4c0(%rsp), %rdi
movq %r12, %rsi
callq 0xc508
pxor %xmm0, %xmm0
movdqa %xmm0, 0x270(%rsp)
movdqa %xmm0, 0x260(%rsp)
movq (%rbp), %rax
movq (%rax), %rax
subq $0x8, %rsp
leaq 0x10(%rsp), %r14
movq %r14, %rdi
movq %rbp, %rsi
pushq $0x2e
popq %rdx
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x4c8(%rsp), %r9
pushq $0x0
leaq 0x270(%rsp), %r10
pushq %r10
leaq 0x288(%rsp), %r10
pushq %r10
callq *%rax
addq $0x20, %rsp
leaq 0x268(%rsp), %rdi
callq 0x6c00
leaq 0x278(%rsp), %rdi
callq 0x6c00
leaq 0x4c8(%rsp), %rdi
callq 0x6c00
movq 0xa0(%rsp), %rax
movq (%rax), %rbp
addq %r15, %rbp
leaq 0x68(%rsp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x9ce1
movq %rbp, %rdi
movq %r12, %rsi
callq 0xbc42
leaq 0x70(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r14, %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x8fec
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
movq 0x80(%rsp), %rsi
pxor %xmm0, %xmm0
movdqa %xmm0, 0x1c0(%rsp)
movdqa %xmm0, 0x1b0(%rsp)
movdqa %xmm0, 0x1a0(%rsp)
movq (%rsi), %rcx
movq (%rcx), %r10
subq $0x8, %rsp
movsbl %al, %edx
leaq 0x38(%rsp), %r12
movq %r12, %rdi
movl %ebx, %ecx
movl %r13d, %r8d
leaq 0x1c8(%rsp), %r9
pushq $0x0
leaq 0x1b0(%rsp), %rax
pushq %rax
leaq 0x1c8(%rsp), %rax
pushq %rax
callq *%r10
addq $0x20, %rsp
leaq 0x1a8(%rsp), %rdi
callq 0x6c00
leaq 0x1b8(%rsp), %rdi
callq 0x6c00
leaq 0x1c8(%rsp), %rdi
callq 0x6c00
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
movq %r12, %rsi
callq 0x9b5a
jmp 0x9189
testb $0x1, %bpl
je 0x915a
movq 0x48(%rsp), %rax
movq (%rax), %rax
imulq $0x18, 0x60(%rsp), %rdi
addq (%rax,%r15), %rdi
leaq 0x8(%rsp), %rsi
callq 0x9b5a
movq 0x58(%rsp), %rbp
movq 0x50(%rsp), %r13
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
testq %rdx, (%rax)
jne 0x917f
movq 0x18(%rsp), %rdi
movq 0x20(%rsp), %rsi
callq 0x9ba2
orq %rdx, (%rax)
jmp 0x917f
movq 0x1beef(%rip), %rdi     # 0x24ff0
leaq 0xf57e(%rip), %rsi      # 0x18686
callq 0x51f0
movq %rax, %rdi
callq 0x5120
jmp 0x9193
movq 0x1bed2(%rip), %rdi     # 0x24ff0
leaq 0xf529(%rip), %rsi      # 0x1864e
callq 0x51f0
movq %rax, %rdi
callq 0x5120
leaq 0x10(%rsp), %rdi
callq 0x6c00
leaq 0x38(%rsp), %rdi
callq 0x6c00
cmpl %ebp, 0x9c(%rsp)
jne 0x9247
movq 0x58(%rsp), %rbp
jmp 0x9193
movq 0x1be8f(%rip), %rdi     # 0x24ff0
leaq 0xf4aa(%rip), %rsi      # 0x18612
callq 0x51f0
movq 0x58(%rsp), %rbp
movq 0x50(%rsp), %r13
movq %rax, %rdi
callq 0x5120
leaq 0x10(%rsp), %rdi
callq 0x6c00
leaq 0x38(%rsp), %rdi
callq 0x6c00
incq %rbx
jmp 0x79f6
testb $0x2, %r12b
jne 0x91c9
movq 0x1be48(%rip), %rdi     # 0x24ff0
leaq 0xf425(%rip), %rsi      # 0x185d4
callq 0x51f0
movq 0x138(%rsp), %rbx
movb $0x1, %r15b
movq %rax, %rdi
callq 0x5120
jmp 0x91eb
movb $0x1, %r15b
cmpl $0x2, 0x7c(%rsp)
movq 0x138(%rsp), %rbx
je 0x921e
movl $0x0, 0x78(%rsp)
movl $0x0, 0x7c(%rsp)
incl %r13d
leaq 0x140(%rsp), %rdi
callq 0x6d90
leaq 0x610(%rsp), %rdi
callq 0x5110
testb $0x5, %r12b
movl 0x78(%rsp), %r14d
movl 0x7c(%rsp), %r12d
jne 0x7812
jmp 0x9278
movl 0x188(%rsp), %eax
addl $-0x2, %eax
cmpl %eax, 0x78(%rsp)
jne 0x91db
movl 0xac(%rsp), %eax
incl %eax
movl %eax, 0xac(%rsp)
cmpl $0x2, %eax
setne %r15b
jmp 0x91db
movb $0x1, %r15b
movq 0x58(%rsp), %rbp
movq 0x138(%rsp), %rbx
jmp 0x91ee
testb $0x2, %al
jne 0x9278
movq 0x1bd8c(%rip), %rdi     # 0x24ff0
leaq 0xf369(%rip), %rsi      # 0x185d4
callq 0x51f0
movq %rax, %rdi
callq 0x5120
leaq 0x180(%rsp), %rdi
callq 0x5100
leaq 0x470(%rsp), %rdi
callq 0x9dd6
leaq 0x508(%rsp), %rdi
callq 0x6c00
leaq 0x518(%rsp), %rdi
callq 0x6c00
leaq 0x88(%rsp), %rdi
callq 0x6c00
addq $0x798, %rsp            # imm = 0x798
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x992c
jmp 0x9974
jmp 0x93ac
jmp 0x98e7
jmp 0x986e
jmp 0x95b9
jmp 0x967b
jmp 0x94ec
jmp 0x9510
jmp 0x9576
jmp 0x95dd
jmp 0x95fc
jmp 0x963a
jmp 0x969f
jmp 0x96e2
jmp 0x9827
jmp 0x97e3
jmp 0x97b9
jmp 0x979f
jmp 0x9974
jmp 0x992c
leaq 0x38(%rsp), %r14
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
jmp 0x9934
jmp 0x93ac
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
jmp 0x97e6
jmp 0x99c9
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
jmp 0x982a
jmp 0x99c9
jmp 0x986e
jmp 0x99c9
jmp 0x98e7
movq %rax, %rbx
leaq 0x268(%rsp), %rdi
callq 0x6c00
leaq 0x278(%rsp), %rdi
callq 0x6c00
jmp 0x991b
movq %rax, %rbx
jmp 0x9788
movq %rax, %rbx
leaq 0x228(%rsp), %rdi
callq 0x6c00
leaq 0x238(%rsp), %rdi
callq 0x6c00
jmp 0x97f3
jmp 0x979f
movq %rax, %rbx
leaq 0x288(%rsp), %rdi
callq 0x6c00
leaq 0x298(%rsp), %rdi
callq 0x6c00
jmp 0x9837
jmp 0x97b9
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
jmp 0x9871
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq %rax, 0x160(%rsp)
jmp 0x94dd
movq %rax, %rbx
leaq 0x568(%rsp), %rdi
callq 0x6c00
leaq 0x328(%rsp), %rdi
callq 0x6c00
jmp 0x94fc
movq %rax, %rbx
leaq 0x588(%rsp), %rdi
callq 0x6c00
leaq 0x368(%rsp), %rdi
callq 0x6c00
jmp 0x95c9
movq %rax, %rbx
leaq 0x3e8(%rsp), %rdi
callq 0x6c00
leaq 0x5c8(%rsp), %rdi
callq 0x6c00
jmp 0x95ed
jmp 0x99c9
jmp 0x99c9
jmp 0x967b
movq %rax, %rbx
leaq 0x408(%rsp), %rdi
callq 0x6c00
leaq 0x5d8(%rsp), %rdi
callq 0x6c00
jmp 0x968b
movq %rax, %rbx
leaq 0x1a8(%rsp), %rdi
callq 0x6c00
leaq 0x1b8(%rsp), %rdi
callq 0x6c00
movq 0x160(%rsp), %rdi
jmp 0x99c2
jmp 0x94ec
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x128(%rsp)
movq 0x128(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x9510
movq %rax, %rbx
jmp 0x9522
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
leaq 0x38(%rsp), %rax
movq %rax, 0xb0(%rsp)
jmp 0x954e
movq %rax, %rbx
leaq 0x558(%rsp), %rdi
callq 0x6c00
leaq 0x308(%rsp), %rdi
callq 0x6c00
movq 0xb0(%rsp), %rdi
callq 0x6c00
leaq 0x10(%rsp), %rdi
jmp 0x99c2
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
jmp 0x9556
jmp 0x99c9
jmp 0x9576
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x120(%rsp)
jmp 0x95a5
movq %rax, %rbx
leaq 0x578(%rsp), %rdi
callq 0x6c00
leaq 0x348(%rsp), %rdi
callq 0x6c00
movq 0x120(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x95b9
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x118(%rsp)
movq 0x118(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x95dd
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xf8(%rsp)
movq 0xf8(%rsp), %rdi
jmp 0x997f
jmp 0x95fc
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x100(%rsp)
jmp 0x962b
movq %rax, %rbx
leaq 0x3c8(%rsp), %rdi
callq 0x6c00
leaq 0x5b8(%rsp), %rdi
callq 0x6c00
movq 0x100(%rsp), %rdi
jmp 0x997f
jmp 0x963a
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x110(%rsp)
jmp 0x9669
movq %rax, %rbx
leaq 0x388(%rsp), %rdi
callq 0x6c00
leaq 0x598(%rsp), %rdi
callq 0x6c00
movq 0x110(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xf0(%rsp)
movq 0xf0(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x969f
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0x108(%rsp)
jmp 0x96ce
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
callq 0x6c00
leaq 0x5a8(%rsp), %rdi
callq 0x6c00
movq 0x108(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x96e2
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xe8(%rsp)
jmp 0x9711
movq %rax, %rbx
leaq 0x428(%rsp), %rdi
callq 0x6c00
leaq 0x5e8(%rsp), %rdi
callq 0x6c00
movq 0xe8(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x97e3
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
jmp 0x98ea
leaq 0x38(%rsp), %r14
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
callq 0x6c00
leaq 0x218(%rsp), %rdi
callq 0x6c00
leaq 0x528(%rsp), %rax
movq %rax, 0x168(%rsp)
jmp 0x9934
jmp 0x99c9
jmp 0x9827
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
leaq 0x10(%rsp), %rax
movq %rax, 0xb8(%rsp)
jmp 0x9861
jmp 0x99c9
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq %rax, 0x130(%rsp)
jmp 0x98a8
jmp 0x99c9
movq %rax, %rbx
jmp 0x990e
movq %rax, %rbx
leaq 0x2a8(%rsp), %rdi
callq 0x6c00
leaq 0x2b8(%rsp), %rdi
callq 0x6c00
jmp 0x987e
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xe0(%rsp)
movq 0xe0(%rsp), %rdi
jmp 0x997f
movq %rax, %rbx
leaq 0x248(%rsp), %rdi
callq 0x6c00
leaq 0x258(%rsp), %rdi
callq 0x6c00
jmp 0x98f7
jmp 0x99c9
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xc8(%rsp)
movq 0xc8(%rsp), %rdi
jmp 0x997f
movq %rax, %rbx
leaq 0x2c8(%rsp), %rdi
callq 0x6c00
leaq 0x2d8(%rsp), %rdi
callq 0x6c00
movq 0xb8(%rsp), %rdi
jmp 0x997f
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xc0(%rsp)
movq 0xc0(%rsp), %rdi
jmp 0x997f
movq %rax, %rbx
leaq 0x1d8(%rsp), %rdi
callq 0x6c00
leaq 0x1e8(%rsp), %rdi
callq 0x6c00
movq 0x130(%rsp), %rdi
jmp 0x99c2
movq %rax, %rbx
leaq 0x2e8(%rsp), %rdi
callq 0x6c00
leaq 0x2f8(%rsp), %rdi
callq 0x6c00
leaq 0x548(%rsp), %rax
movq %rax, 0x170(%rsp)
jmp 0x9977
movq %rax, %rbx
leaq 0x10(%rsp), %rax
movq %rax, 0xd8(%rsp)
movq 0xd8(%rsp), %rdi
jmp 0x997f
movq %rax, %rbx
leaq 0x70(%rsp), %rdi
callq 0x6c00
leaq 0x10(%rsp), %rax
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rdi
jmp 0x997f
jmp 0x99c9
jmp 0x9974
leaq 0x38(%rsp), %r14
movq %rax, %rbx
movq 0x168(%rsp), %rdi
callq 0x6c00
movq %r14, %rdi
jmp 0x99c2
jmp 0x9a16
jmp 0x99c9
movq %rax, %rbx
leaq 0x538(%rsp), %rdi
callq 0x6c00
jmp 0x9977
jmp 0x9a16
movq %rax, %rbx
jmp 0x9a40
movq %rax, %rbx
jmp 0x9a4d
movq %rax, %rbx
movq 0x170(%rsp), %rdi
callq 0x6c00
leaq 0x38(%rsp), %rdi
jmp 0x99c2
movq %rax, %rbx
leaq 0x38(%rsp), %rax
movq %rax, 0x178(%rsp)
jmp 0x99ba
movq %rax, %rbx
leaq 0x448(%rsp), %rdi
callq 0x6c00
leaq 0x458(%rsp), %rdi
callq 0x6c00
movq 0x178(%rsp), %rdi
callq 0x6c00
jmp 0x99cc
movq %rax, %rbx
leaq 0x140(%rsp), %rdi
callq 0x6d90
leaq 0x610(%rsp), %rdi
callq 0x5110
jmp 0x9a19
movq %rax, %rbx
jmp 0x9a07
movq %rax, %rbx
leaq 0x30(%rsp), %rdi
callq 0x6a84
leaq 0x140(%rsp), %rdi
callq 0x6a84
leaq 0x610(%rsp), %rdi
callq 0x6d22
jmp 0x9a19
movq %rax, %rbx
leaq 0x180(%rsp), %rdi
callq 0x5100
leaq 0x470(%rsp), %rdi
callq 0x9dd6
leaq 0x508(%rsp), %rdi
callq 0x6c00
leaq 0x518(%rsp), %rdi
callq 0x6c00
leaq 0x88(%rsp), %rdi
callq 0x6c00
movq %rbx, %rdi
callq 0x5390