// File: canzarlab[P]Trajan/src/main.cpp
// Function: main
int main(int argc, char** argv)
{
    if (argc < 9 || argc > 14)
    {
        cout << "tree usage: " << argv[0] << " <filename.newick> <filename.newick> <align> <constraints> <weightfunc> <k> <vareps> <coneps> <solver>" << endl;
        cout << "dag usage: " << argv[0] << " <yeastnet> <mapping> <go> <align> <constraints> <weightfunc> <k> <solver>" << endl;
        cout << "tree usage (2): " << argv[0] << " <tree> <map> <tree> <map> <align> <constraints> <weightfunc> <k> <vareps> <coneps> <solver>" << endl;
        return EXIT_FAILURE;
    }
    // change the parser for cell hali inputs.
    if (argc == 14){
        costMatrixFileName = argv[5];
        outScoreFile = argv[6];
        argc = argc-2;
        for (int i = 5; i < 15; ++i){
            argv[i] = argv[i+2];
        }
    }
    if (argc == 13){
        costMatrixFileName = argv[5];
        argc = argc-1;
        for (int i = 5; i < 14; ++i){
            argv[i] = argv[i+1];
        }
    }

    Timer T;
    T.start();
    Graph *t1, *t2;
    if (stoi(argv[argc - 1]) == 2){
        // create two new tree.
        string t1fName   = argv[1];
        string t1MapfName = argv[2];
        string t2fName   = argv[3];
        string t2MapfName = argv[4];
        CSVReader t1_treeReader(t1fName, " ");
        vector<vector<string>> t1_tree = t1_treeReader.getStringData();
        CSVReader t1_mapReader(t1MapfName, " ");
        vector<vector<string>> t1_map = t1_mapReader.getStringData();
        
        CSVReader t2_treeReader(t2fName, " ");
        vector<vector<string>> t2_tree = t2_treeReader.getStringData();
        CSVReader t2_mapReader(t2MapfName, " ");
        vector<vector<string>> t2_map = t2_mapReader.getStringData();
        
        std::map<string, string> t1Node2Label;
        std::map<string, string> t1Label2Node;
        std::map<string, string> t2Node2Label;
        std::map<string, string> t2Label2Node;
        for (const auto &u: t1_map){
            t1Label2Node[u[0]] = u[1];
            t1Node2Label[u[1]] = u[0];
        }
        for (const auto &u: t2_map){
            t2Label2Node[u[0]] = u[1];
            t2Node2Label[u[1]] = u[0];
        }
        // change the nodes for tree.
        for (auto & u: t1_tree){
            u[0] = t1Node2Label[u[0]];
            u[1] = t1Node2Label[u[1]];
        }
        for (auto & u: t2_tree){
            u[0] = t2Node2Label[u[0]];
            u[1] = t2Node2Label[u[1]];
        }
        
        srand (time(NULL));
        string outDist = argv[5];
        // string redundantT1 = "redundant" + to_string(rand()) + outScoreFile+argv[5]+"doNotDeleteT1.ooo";
        // string redundantT2 = "redundant"+ to_string(rand()) + outScoreFile+argv[5]+"doNotDeleteT2.ooo";
        string redundantT1 = "redundant" + to_string(rand()) + SplitFilename(outScoreFile) + SplitFilename(outDist) +"doNotDeleteT1.ooo";
        string redundantT2 = "redundant"+ to_string(rand()) +  SplitFilename(outScoreFile) + SplitFilename(outDist) +"doNotDeleteT2.ooo";
        ofstream t1NewTree(redundantT1);
        for (auto & u: t1_tree){
            for (auto & v: u){
                t1NewTree << v << " ";
            }
            t1NewTree << endl;
        }
        t1NewTree.close();
        
        ofstream t2NewTree(redundantT2);
        for (auto & u: t2_tree){
            for (auto & v: u){
                t2NewTree << v << " ";
            }
            t2NewTree << endl;
        }
        t2NewTree.close();
        
        // argv[1] = const_cast<char*>(redundantT1);
        // argv[3] = const_cast<char*>(redundantT2);
        cout << redundantT1 << ", " << redundantT2 << endl;
        argv[1] = const_cast<char*>(redundantT1.c_str());
        argv[3] = const_cast<char*>(redundantT2.c_str());
        tie(t1, t2) = MakeGraphs(argc, argv);
        // remove files 
        // remove(redundantT1);
        // remove(redundantT2);
        Solver* solver = MakeSolver(*t1, *t2, argc, argv, t1Label2Node, t2Label2Node);
        if (solver) solver->Solve(argv[3 + (argc == 9) + 2 * (argc == 12)]);
        delete solver;
        delete t1;
        delete t2;
    }
    else
    {
        tie(t1, t2) = MakeGraphs(argc, argv);
        if (stoi(argv[argc - 1]) > 9)
        {
            int s = stoi(argv[argc - 1]);
            Solver::cf = stoi(argv[4 + (argc == 9) + 2 * (argc == 12)]);
            Solver::tt = argc == 12;
            string d = argv[5 + (argc == 9) + 2 * (argc == 12)];
            double k = stod(argv[6 + (argc == 9) + 2 * (argc == 12)]);
            double c = (s != 2) ? 0 : stod(argv[8 + 2 * (argc == 12)]);
            var_eps = (argc == 9) ? 0 : stod(argv[7 + 2 * (argc == 12)]);

            assert(LP::cf >= 0 && LP::cf <= 2);
            assert(d == "j" || d == "s" || d == "e");
            ParallelSolver(*t1, *t2, d, k, argc == 9, s - 9).Solve(argv[3 + (argc == 9) + 2 * (argc == 12)], outScoreFile);
        }
        else
        {
            std::map<string, string> redundantMap;
            Solver* solver = MakeSolver(*t1, *t2, argc, argv, redundantMap, redundantMap);
            if (solver) solver->Solve(argv[3 + (argc == 9) + 2 * (argc == 12)], outScoreFile);
            delete solver;
            delete t1;
            delete t2;
        }
    }
    
    T.stop();
    clog << "TIME: " << T.secs() << " secs" << endl;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1210, %rsp           # imm = 0x1210
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
cmpl $0x9, -0x8(%rbp)
jl 0xc3a9
cmpl $0xe, -0x8(%rbp)
jle 0xc475
movq 0x194c00(%rip), %rdi    # 0x1a0fb0
leaq 0xfed23(%rip), %rsi     # 0x10b0da
callq 0xa440
movq %rax, %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0xa440
movq %rax, %rdi
leaq 0xfed12(%rip), %rsi     # 0x10b0e7
callq 0xa440
movq %rax, %rdi
movq 0x194b7c(%rip), %rsi    # 0x1a0f60
callq 0xa4a0
movq 0x194bc0(%rip), %rdi    # 0x1a0fb0
leaq 0xfed57(%rip), %rsi     # 0x10b14e
callq 0xa440
movq %rax, %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0xa440
movq %rax, %rdi
leaq 0xfed45(%rip), %rsi     # 0x10b15a
callq 0xa440
movq %rax, %rdi
movq 0x194b3c(%rip), %rsi    # 0x1a0f60
callq 0xa4a0
movq 0x194b80(%rip), %rdi    # 0x1a0fb0
leaq 0xfed6e(%rip), %rsi     # 0x10b1a5
callq 0xa440
movq %rax, %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rsi
callq 0xa440
movq %rax, %rdi
leaq 0xfed61(%rip), %rsi     # 0x10b1b6
callq 0xa440
movq %rax, %rdi
movq 0x194afc(%rip), %rsi    # 0x1a0f60
callq 0xa4a0
movl $0x1, -0x4(%rbp)
jmp 0xe953
cmpl $0xe, -0x8(%rbp)
jne 0xc4e3
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
leaq 0x195016(%rip), %rdi    # 0x1a14a0
callq 0xa5e0
movq -0x10(%rbp), %rax
movq 0x30(%rax), %rsi
leaq 0x195022(%rip), %rdi    # 0x1a14c0
callq 0xa5e0
movl -0x8(%rbp), %eax
subl $0x2, %eax
movl %eax, -0x8(%rbp)
movl $0x5, -0x14(%rbp)
cmpl $0xf, -0x14(%rbp)
jge 0xc4e1
movq -0x10(%rbp), %rax
movl -0x14(%rbp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdx
movq -0x10(%rbp), %rax
movslq -0x14(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x14(%rbp)
jmp 0xc4b3
jmp 0xc4e3
cmpl $0xd, -0x8(%rbp)
jne 0xc53d
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rsi
leaq 0x194fa8(%rip), %rdi    # 0x1a14a0
callq 0xa5e0
movl -0x8(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x8(%rbp)
movl $0x5, -0x18(%rbp)
cmpl $0xe, -0x18(%rbp)
jge 0xc53b
movq -0x10(%rbp), %rax
movl -0x18(%rbp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rdx
movq -0x10(%rbp), %rax
movslq -0x18(%rbp), %rcx
movq %rdx, (%rax,%rcx,8)
movl -0x18(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x18(%rbp)
jmp 0xc50d
jmp 0xc53d
leaq -0x58(%rbp), %rdi
movq %rdi, -0xf80(%rbp)
callq 0xeb30
movq -0xf80(%rbp), %rdi
callq 0xeb50
movq -0x10(%rbp), %rax
movl -0x8(%rbp), %ecx
decl %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xf78(%rbp)
leaq -0x89(%rbp), %rdi
movq %rdi, -0xf70(%rbp)
callq 0xa7d0
movq -0xf78(%rbp), %rsi
movq -0xf70(%rbp), %rdx
leaq -0x88(%rbp), %rdi
callq 0xe9b0
jmp 0xc59f
xorl %eax, %eax
movl %eax, %esi
leaq -0x88(%rbp), %rdi
movl $0xa, %edx
callq 0xe970
movl %eax, -0xf84(%rbp)
jmp 0xc5bc
leaq -0x88(%rbp), %rdi
callq 0xa8d8
leaq -0x89(%rbp), %rdi
callq 0xa4c0
movl -0xf84(%rbp), %eax
cmpl $0x2, %eax
jne 0xdcff
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xf98(%rbp)
leaq -0xc1(%rbp), %rdi
movq %rdi, -0xf90(%rbp)
callq 0xa7d0
movq -0xf98(%rbp), %rsi
movq -0xf90(%rbp), %rdx
leaq -0xc0(%rbp), %rdi
callq 0xe9b0
jmp 0xc621
leaq -0xc1(%rbp), %rdi
callq 0xa4c0
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0xfa8(%rbp)
leaq -0xe9(%rbp), %rdi
movq %rdi, -0xfa0(%rbp)
callq 0xa7d0
movq -0xfa8(%rbp), %rsi
movq -0xfa0(%rbp), %rdx
leaq -0xe8(%rbp), %rdi
callq 0xe9b0
jmp 0xc66b
leaq -0xe9(%rbp), %rdi
callq 0xa4c0
movq -0x10(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0xfb8(%rbp)
leaq -0x111(%rbp), %rdi
movq %rdi, -0xfb0(%rbp)
callq 0xa7d0
movq -0xfb8(%rbp), %rsi
movq -0xfb0(%rbp), %rdx
leaq -0x110(%rbp), %rdi
callq 0xe9b0
jmp 0xc6b5
leaq -0x111(%rbp), %rdi
callq 0xa4c0
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xfc8(%rbp)
leaq -0x139(%rbp), %rdi
movq %rdi, -0xfc0(%rbp)
callq 0xa7d0
movq -0xfc8(%rbp), %rsi
movq -0xfc0(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0xe9b0
jmp 0xc6ff
leaq -0x139(%rbp), %rdi
callq 0xa4c0
leaq -0x1a0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0xa190
jmp 0xc720
leaq -0x1c1(%rbp), %rdi
movq %rdi, -0xfd0(%rbp)
callq 0xa7d0
movq -0xfd0(%rbp), %rdx
leaq 0xfeb01(%rip), %rsi     # 0x10b242
leaq -0x1c0(%rbp), %rdi
callq 0xe9b0
jmp 0xc74f
leaq -0x180(%rbp), %rdi
leaq -0x1a0(%rbp), %rsi
leaq -0x1c0(%rbp), %rdx
callq 0xeba0
jmp 0xc76b
leaq -0x1c0(%rbp), %rdi
callq 0xa8d8
leaq -0x1c1(%rbp), %rdi
callq 0xa4c0
leaq -0x1a0(%rbp), %rdi
callq 0xa8d8
leaq -0x1e0(%rbp), %rdi
leaq -0x180(%rbp), %rsi
xorl %edx, %edx
movl $0xf4240, %ecx          # imm = 0xF4240
callq 0x103f60
jmp 0xc7ab
leaq -0x240(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0xa190
jmp 0xc7c0
leaq -0x261(%rbp), %rdi
movq %rdi, -0xfd8(%rbp)
callq 0xa7d0
movq -0xfd8(%rbp), %rdx
leaq 0xfea61(%rip), %rsi     # 0x10b242
leaq -0x260(%rbp), %rdi
callq 0xe9b0
jmp 0xc7ef
leaq -0x220(%rbp), %rdi
leaq -0x240(%rbp), %rsi
leaq -0x260(%rbp), %rdx
callq 0xeba0
jmp 0xc80b
leaq -0x260(%rbp), %rdi
callq 0xa8d8
leaq -0x261(%rbp), %rdi
callq 0xa4c0
leaq -0x240(%rbp), %rdi
callq 0xa8d8
leaq -0x280(%rbp), %rdi
leaq -0x220(%rbp), %rsi
xorl %edx, %edx
movl $0xf4240, %ecx          # imm = 0xF4240
callq 0x103f60
jmp 0xc84b
leaq -0x2e0(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0xa190
jmp 0xc860
leaq -0x301(%rbp), %rdi
movq %rdi, -0xfe0(%rbp)
callq 0xa7d0
movq -0xfe0(%rbp), %rdx
leaq 0xfe9c1(%rip), %rsi     # 0x10b242
leaq -0x300(%rbp), %rdi
callq 0xe9b0
jmp 0xc88f
leaq -0x2c0(%rbp), %rdi
leaq -0x2e0(%rbp), %rsi
leaq -0x300(%rbp), %rdx
callq 0xeba0
jmp 0xc8ab
leaq -0x300(%rbp), %rdi
callq 0xa8d8
leaq -0x301(%rbp), %rdi
callq 0xa4c0
leaq -0x2e0(%rbp), %rdi
callq 0xa8d8
leaq -0x320(%rbp), %rdi
leaq -0x2c0(%rbp), %rsi
xorl %edx, %edx
movl $0xf4240, %ecx          # imm = 0xF4240
callq 0x103f60
jmp 0xc8eb
leaq -0x380(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0xa190
jmp 0xc900
leaq -0x3a1(%rbp), %rdi
movq %rdi, -0xfe8(%rbp)
callq 0xa7d0
movq -0xfe8(%rbp), %rdx
leaq 0xfe921(%rip), %rsi     # 0x10b242
leaq -0x3a0(%rbp), %rdi
callq 0xe9b0
jmp 0xc92f
leaq -0x360(%rbp), %rdi
leaq -0x380(%rbp), %rsi
leaq -0x3a0(%rbp), %rdx
callq 0xeba0
jmp 0xc94b
leaq -0x3a0(%rbp), %rdi
callq 0xa8d8
leaq -0x3a1(%rbp), %rdi
callq 0xa4c0
leaq -0x380(%rbp), %rdi
callq 0xa8d8
leaq -0x3c0(%rbp), %rdi
leaq -0x360(%rbp), %rsi
xorl %edx, %edx
movl $0xf4240, %ecx          # imm = 0xF4240
callq 0x103f60
jmp 0xc98b
leaq -0x3f0(%rbp), %rdi
callq 0xec00
leaq -0x420(%rbp), %rdi
callq 0xec00
leaq -0x450(%rbp), %rdi
callq 0xec00
leaq -0x480(%rbp), %rdi
callq 0xec00
leaq -0x280(%rbp), %rax
movq %rax, -0x488(%rbp)
movq -0x488(%rbp), %rdi
callq 0xec20
movq %rax, -0x490(%rbp)
movq -0x488(%rbp), %rdi
callq 0xec50
movq %rax, -0x498(%rbp)
leaq -0x490(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xca0b
jmp 0xcdb5
leaq -0x490(%rbp), %rdi
callq 0xecc0
movq %rax, -0x4a0(%rbp)
movq -0x4a0(%rbp), %rdi
movl $0x1, %esi
callq 0xece0
movq %rax, -0xff8(%rbp)
movq -0x4a0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xece0
movq %rax, %rsi
leaq -0x420(%rbp), %rdi
callq 0xed00
movq %rax, -0xff0(%rbp)
jmp 0xca5e
movq -0xff8(%rbp), %rsi
movq -0xff0(%rbp), %rdi
callq 0xa060
jmp 0xca73
movq -0x4a0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xece0
movq %rax, -0x1008(%rbp)
movq -0x4a0(%rbp), %rdi
movl $0x1, %esi
callq 0xece0
movq %rax, %rsi
leaq -0x3f0(%rbp), %rdi
callq 0xed00
movq %rax, -0x1000(%rbp)
jmp 0xcab3
movq -0x1008(%rbp), %rsi
movq -0x1000(%rbp), %rdi
callq 0xa060
jmp 0xcac8
jmp 0xcaca
leaq -0x490(%rbp), %rdi
callq 0xede0
jmp 0xc9ef
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xcb0d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x88(%rbp), %rdi
callq 0xa8d8
leaq -0x89(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc1(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xe9(%rbp), %rdi
callq 0xa4c0
jmp 0xdcee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x111(%rbp), %rdi
callq 0xa4c0
jmp 0xdce2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x139(%rbp), %rdi
callq 0xa4c0
jmp 0xdcd6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdcca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xcbf3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x1c0(%rbp), %rdi
callq 0xa8d8
leaq -0x1c1(%rbp), %rdi
callq 0xa4c0
leaq -0x1a0(%rbp), %rdi
callq 0xa8d8
jmp 0xdcca
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdcbe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdcb2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xcc70
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x260(%rbp), %rdi
callq 0xa8d8
leaq -0x261(%rbp), %rdi
callq 0xa4c0
leaq -0x240(%rbp), %rdi
callq 0xa8d8
jmp 0xdcb2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdca6
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xcced
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x300(%rbp), %rdi
callq 0xa8d8
leaq -0x301(%rbp), %rdi
callq 0xa4c0
leaq -0x2e0(%rbp), %rdi
callq 0xa8d8
jmp 0xdc9a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc8e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xcd6a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x3a0(%rbp), %rdi
callq 0xa8d8
leaq -0x3a1(%rbp), %rdi
callq 0xa4c0
leaq -0x380(%rbp), %rdi
callq 0xa8d8
jmp 0xdc82
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc76
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc3a
leaq -0x3c0(%rbp), %rax
movq %rax, -0x4a8(%rbp)
movq -0x4a8(%rbp), %rdi
callq 0xec20
movq %rax, -0x4b0(%rbp)
movq -0x4a8(%rbp), %rdi
callq 0xec50
movq %rax, -0x4b8(%rbp)
leaq -0x4b0(%rbp), %rdi
leaq -0x4b8(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xce05
jmp 0xced5
leaq -0x4b0(%rbp), %rdi
callq 0xecc0
movq %rax, -0x4c0(%rbp)
movq -0x4c0(%rbp), %rdi
movl $0x1, %esi
callq 0xece0
movq %rax, -0x1018(%rbp)
movq -0x4c0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xece0
movq %rax, %rsi
leaq -0x480(%rbp), %rdi
callq 0xed00
movq %rax, -0x1010(%rbp)
jmp 0xce58
movq -0x1018(%rbp), %rsi
movq -0x1010(%rbp), %rdi
callq 0xa060
jmp 0xce6d
movq -0x4c0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xece0
movq %rax, -0x1028(%rbp)
movq -0x4c0(%rbp), %rdi
movl $0x1, %esi
callq 0xece0
movq %rax, %rsi
leaq -0x450(%rbp), %rdi
callq 0xed00
movq %rax, -0x1020(%rbp)
jmp 0xcead
movq -0x1028(%rbp), %rsi
movq -0x1020(%rbp), %rdi
callq 0xa060
jmp 0xcec2
jmp 0xcec4
leaq -0x4b0(%rbp), %rdi
callq 0xede0
jmp 0xcde9
leaq -0x1e0(%rbp), %rax
movq %rax, -0x4c8(%rbp)
movq -0x4c8(%rbp), %rdi
callq 0xec20
movq %rax, -0x4d0(%rbp)
movq -0x4c8(%rbp), %rdi
callq 0xec50
movq %rax, -0x4d8(%rbp)
leaq -0x4d0(%rbp), %rdi
leaq -0x4d8(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xcf25
jmp 0xcfdf
leaq -0x4d0(%rbp), %rdi
callq 0xecc0
movq %rax, -0x4e0(%rbp)
movq -0x4e0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xee00
movq %rax, %rsi
leaq -0x3f0(%rbp), %rdi
callq 0xed00
movq %rax, -0x1030(%rbp)
jmp 0xcf60
movq -0x4e0(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xee00
movq -0x1030(%rbp), %rsi
movq %rax, %rdi
callq 0xa060
jmp 0xcf81
movq -0x4e0(%rbp), %rdi
movl $0x1, %esi
callq 0xee00
movq %rax, %rsi
leaq -0x3f0(%rbp), %rdi
callq 0xed00
movq %rax, -0x1038(%rbp)
jmp 0xcfaa
movq -0x4e0(%rbp), %rdi
movl $0x1, %esi
callq 0xee00
movq -0x1038(%rbp), %rsi
movq %rax, %rdi
callq 0xa060
jmp 0xcfcc
jmp 0xcfce
leaq -0x4d0(%rbp), %rdi
callq 0xede0
jmp 0xcf09
leaq -0x320(%rbp), %rax
movq %rax, -0x4e8(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0xec20
movq %rax, -0x4f0(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0xec50
movq %rax, -0x4f8(%rbp)
leaq -0x4f0(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xd02f
jmp 0xd0e9
leaq -0x4f0(%rbp), %rdi
callq 0xecc0
movq %rax, -0x500(%rbp)
movq -0x500(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xee00
movq %rax, %rsi
leaq -0x450(%rbp), %rdi
callq 0xed00
movq %rax, -0x1040(%rbp)
jmp 0xd06a
movq -0x500(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xee00
movq -0x1040(%rbp), %rsi
movq %rax, %rdi
callq 0xa060
jmp 0xd08b
movq -0x500(%rbp), %rdi
movl $0x1, %esi
callq 0xee00
movq %rax, %rsi
leaq -0x450(%rbp), %rdi
callq 0xed00
movq %rax, -0x1048(%rbp)
jmp 0xd0b4
movq -0x500(%rbp), %rdi
movl $0x1, %esi
callq 0xee00
movq -0x1048(%rbp), %rsi
movq %rax, %rdi
callq 0xa060
jmp 0xd0d6
jmp 0xd0d8
leaq -0x4f0(%rbp), %rdi
callq 0xede0
jmp 0xd013
xorl %eax, %eax
movl %eax, %edi
callq 0xa400
movl %eax, %edi
callq 0xa430
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x1058(%rbp)
leaq -0x521(%rbp), %rdi
movq %rdi, -0x1050(%rbp)
callq 0xa7d0
movq -0x1058(%rbp), %rsi
movq -0x1050(%rbp), %rdx
leaq -0x520(%rbp), %rdi
callq 0xe9b0
jmp 0xd137
leaq -0x521(%rbp), %rdi
callq 0xa4c0
callq 0xa100
movl %eax, %esi
leaq -0x5c8(%rbp), %rdi
callq 0xef90
jmp 0xd158
leaq 0xfe0b4(%rip), %rsi     # 0x10b213
leaq -0x5a8(%rbp), %rdi
leaq -0x5c8(%rbp), %rdx
callq 0xef40
jmp 0xd174
leaq 0x194345(%rip), %rsi    # 0x1a14c0
leaq -0x5e8(%rbp), %rdi
callq 0xae80
jmp 0xd189
leaq -0x588(%rbp), %rdi
leaq -0x5a8(%rbp), %rsi
leaq -0x5e8(%rbp), %rdx
callq 0xee70
jmp 0xd1a5
leaq -0x608(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0xae80
jmp 0xd1ba
leaq -0x568(%rbp), %rdi
leaq -0x588(%rbp), %rsi
leaq -0x608(%rbp), %rdx
callq 0xee70
jmp 0xd1d6
leaq 0xfe040(%rip), %rdx     # 0x10b21d
leaq -0x548(%rbp), %rdi
leaq -0x568(%rbp), %rsi
callq 0xee20
jmp 0xd1f2
leaq -0x568(%rbp), %rdi
callq 0xa8d8
leaq -0x608(%rbp), %rdi
callq 0xa8d8
leaq -0x588(%rbp), %rdi
callq 0xa8d8
leaq -0x5e8(%rbp), %rdi
callq 0xa8d8
leaq -0x5a8(%rbp), %rdi
callq 0xa8d8
leaq -0x5c8(%rbp), %rdi
callq 0xa8d8
callq 0xa100
movl %eax, %esi
leaq -0x6a8(%rbp), %rdi
callq 0xef90
jmp 0xd24f
leaq 0xfdfbd(%rip), %rsi     # 0x10b213
leaq -0x688(%rbp), %rdi
leaq -0x6a8(%rbp), %rdx
callq 0xef40
jmp 0xd26b
leaq 0x19424e(%rip), %rsi    # 0x1a14c0
leaq -0x6c8(%rbp), %rdi
callq 0xae80
jmp 0xd280
leaq -0x668(%rbp), %rdi
leaq -0x688(%rbp), %rsi
leaq -0x6c8(%rbp), %rdx
callq 0xee70
jmp 0xd29c
leaq -0x6e8(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0xae80
jmp 0xd2b1
leaq -0x648(%rbp), %rdi
leaq -0x668(%rbp), %rsi
leaq -0x6e8(%rbp), %rdx
callq 0xee70
jmp 0xd2cd
leaq 0xfdf5b(%rip), %rdx     # 0x10b22f
leaq -0x628(%rbp), %rdi
leaq -0x648(%rbp), %rsi
callq 0xee20
jmp 0xd2e9
leaq -0x648(%rbp), %rdi
callq 0xa8d8
leaq -0x6e8(%rbp), %rdi
callq 0xa8d8
leaq -0x668(%rbp), %rdi
callq 0xa8d8
leaq -0x6c8(%rbp), %rdi
callq 0xa8d8
leaq -0x688(%rbp), %rdi
callq 0xa8d8
leaq -0x6a8(%rbp), %rdi
callq 0xa8d8
leaq -0x8e8(%rbp), %rdi
leaq -0x548(%rbp), %rsi
movl $0x10, %edx
callq 0xa890
jmp 0xd34b
leaq -0x1e0(%rbp), %rax
movq %rax, -0x8f0(%rbp)
movq -0x8f0(%rbp), %rdi
callq 0xec20
movq %rax, -0x8f8(%rbp)
movq -0x8f0(%rbp), %rdi
callq 0xec50
movq %rax, -0x900(%rbp)
leaq -0x8f8(%rbp), %rdi
leaq -0x900(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xd39b
jmp 0xd685
leaq -0x8f8(%rbp), %rdi
callq 0xecc0
movq %rax, -0x908(%rbp)
movq -0x908(%rbp), %rax
movq %rax, -0x910(%rbp)
movq -0x910(%rbp), %rdi
callq 0xf0b0
movq %rax, -0x918(%rbp)
movq -0x910(%rbp), %rdi
callq 0xf0e0
movq %rax, -0x920(%rbp)
leaq -0x918(%rbp), %rdi
leaq -0x920(%rbp), %rsi
callq 0xf110
testb $0x1, %al
jne 0xd3fe
jmp 0xd65d
leaq -0x918(%rbp), %rdi
callq 0xf150
movq %rax, -0x928(%rbp)
movq -0x928(%rbp), %rsi
leaq -0x8e8(%rbp), %rdi
callq 0xa3d0
movq %rax, -0x1060(%rbp)
jmp 0xd42d
movq -0x1060(%rbp), %rdi
leaq 0xfde07(%rip), %rsi     # 0x10b242
callq 0xa440
jmp 0xd442
jmp 0xd444
leaq -0x918(%rbp), %rdi
callq 0xf170
jmp 0xd3e2
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x521(%rbp), %rdi
callq 0xa4c0
jmp 0xdc3a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd541
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd535
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd529
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd51d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd511
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x568(%rbp), %rdi
callq 0xa8d8
leaq -0x608(%rbp), %rdi
callq 0xa8d8
leaq -0x588(%rbp), %rdi
callq 0xa8d8
leaq -0x5e8(%rbp), %rdi
callq 0xa8d8
leaq -0x5a8(%rbp), %rdi
callq 0xa8d8
leaq -0x5c8(%rbp), %rdi
callq 0xa8d8
jmp 0xdc2e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd61e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd612
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd606
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd5fa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xd5ee
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x648(%rbp), %rdi
callq 0xa8d8
leaq -0x6e8(%rbp), %rdi
callq 0xa8d8
leaq -0x668(%rbp), %rdi
callq 0xa8d8
leaq -0x6c8(%rbp), %rdi
callq 0xa8d8
leaq -0x688(%rbp), %rdi
callq 0xa8d8
leaq -0x6a8(%rbp), %rdi
callq 0xa8d8
jmp 0xdc22
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc16
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdc0a
movq 0x1938fc(%rip), %rsi    # 0x1a0f60
leaq -0x8e8(%rbp), %rdi
callq 0xa4a0
jmp 0xd672
jmp 0xd674
leaq -0x8f8(%rbp), %rdi
callq 0xede0
jmp 0xd37f
leaq -0x8e8(%rbp), %rdi
callq 0xa620
jmp 0xd693
leaq -0xb28(%rbp), %rdi
leaq -0x628(%rbp), %rsi
movl $0x10, %edx
callq 0xa890
jmp 0xd6ad
leaq -0x320(%rbp), %rax
movq %rax, -0xb30(%rbp)
movq -0xb30(%rbp), %rdi
callq 0xec20
movq %rax, -0xb38(%rbp)
movq -0xb30(%rbp), %rdi
callq 0xec50
movq %rax, -0xb40(%rbp)
leaq -0xb38(%rbp), %rdi
leaq -0xb40(%rbp), %rsi
callq 0xec80
testb $0x1, %al
jne 0xd6fd
jmp 0xd7f0
leaq -0xb38(%rbp), %rdi
callq 0xecc0
movq %rax, -0xb48(%rbp)
movq -0xb48(%rbp), %rax
movq %rax, -0xb50(%rbp)
movq -0xb50(%rbp), %rdi
callq 0xf0b0
movq %rax, -0xb58(%rbp)
movq -0xb50(%rbp), %rdi
callq 0xf0e0
movq %rax, -0xb60(%rbp)
leaq -0xb58(%rbp), %rdi
leaq -0xb60(%rbp), %rsi
callq 0xf110
testb $0x1, %al
jne 0xd75d
jmp 0xd7c8
leaq -0xb58(%rbp), %rdi
callq 0xf150
movq %rax, -0xb68(%rbp)
movq -0xb68(%rbp), %rsi
leaq -0xb28(%rbp), %rdi
callq 0xa3d0
movq %rax, -0x1068(%rbp)
jmp 0xd78c
movq -0x1068(%rbp), %rdi
leaq 0xfdaa8(%rip), %rsi     # 0x10b242
callq 0xa440
jmp 0xd7a1
jmp 0xd7a3
leaq -0xb58(%rbp), %rdi
callq 0xf170
jmp 0xd744
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xdbfe
movq 0x193791(%rip), %rsi    # 0x1a0f60
leaq -0xb28(%rbp), %rdi
callq 0xa4a0
jmp 0xd7dd
jmp 0xd7df
leaq -0xb38(%rbp), %rdi
callq 0xede0
jmp 0xd6e1
leaq -0xb28(%rbp), %rdi
callq 0xa620
jmp 0xd7fe
movq 0x1937ab(%rip), %rdi    # 0x1a0fb0
leaq -0x548(%rbp), %rsi
callq 0xa3d0
movq %rax, -0x1070(%rbp)
jmp 0xd81a
movq -0x1070(%rbp), %rdi
leaq 0xfda19(%rip), %rsi     # 0x10b241
callq 0xa440
movq %rax, -0x1078(%rbp)
jmp 0xd836
movq -0x1078(%rbp), %rdi
leaq -0x628(%rbp), %rsi
callq 0xa3d0
movq %rax, -0x1080(%rbp)
jmp 0xd852
movq -0x1080(%rbp), %rdi
movq 0x193700(%rip), %rsi    # 0x1a0f60
callq 0xa4a0
jmp 0xd867
leaq -0x548(%rbp), %rdi
callq 0xa170
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x8(%rax)
leaq -0x628(%rbp), %rdi
callq 0xa170
movq %rax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x18(%rax)
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xc0c0
movq %rdx, -0x1090(%rbp)
movq %rax, -0x1088(%rbp)
jmp 0xd8b1
movq -0x1090(%rbp), %rax
movq -0x1088(%rbp), %rcx
movq %rcx, -0xb78(%rbp)
movq %rax, -0xb70(%rbp)
leaq -0xb88(%rbp), %rdi
movq %rdi, -0x10a0(%rbp)
leaq -0x60(%rbp), %rsi
leaq -0x68(%rbp), %rdx
callq 0xf190
movq -0x10a0(%rbp), %rdi
leaq -0xb78(%rbp), %rsi
callq 0xf1d0
movq -0x60(%rbp), %rdi
movq -0x68(%rbp), %rsi
movl -0x8(%rbp), %edx
movq -0x10(%rbp), %rcx
leaq -0x420(%rbp), %r8
leaq -0x480(%rbp), %r9
callq 0xaee0
movq %rax, -0x1098(%rbp)
jmp 0xd926
movq -0x1098(%rbp), %rax
movq %rax, -0xb90(%rbp)
cmpq $0x0, -0xb90(%rbp)
je 0xdaa0
movq -0xb90(%rbp), %rax
movq %rax, -0x10b8(%rbp)
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %edx
movl %edx, %eax
subl $0x9, %eax
sete %al
movzbl %al, %eax
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %eax, %edx
shll $0x4, %esi
movl %esi, %eax
leal (%rax,%rdx,8), %eax
movq 0x18(%rax,%rcx), %rax
movq %rax, -0x10b0(%rbp)
leaq -0xbb1(%rbp), %rdi
movq %rdi, -0x10a8(%rbp)
callq 0xa7d0
movq -0x10b0(%rbp), %rsi
movq -0x10a8(%rbp), %rdx
leaq -0xbb0(%rbp), %rdi
callq 0xe9b0
jmp 0xd9b0
leaq -0xbd9(%rbp), %rdi
movq %rdi, -0x10c0(%rbp)
callq 0xa7d0
movq -0x10c0(%rbp), %rdx
leaq 0xfd873(%rip), %rsi     # 0x10b244
leaq -0xbd8(%rbp), %rdi
callq 0xe9b0
jmp 0xd9df
movq -0x10b8(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
leaq -0xbb0(%rbp), %rsi
leaq -0xbd8(%rbp), %rdx
callq *%rax
jmp 0xd9ff
leaq -0xbd8(%rbp), %rdi
callq 0xa8d8
leaq -0xbd9(%rbp), %rdi
callq 0xa4c0
leaq -0xbb0(%rbp), %rdi
callq 0xa8d8
leaq -0xbb1(%rbp), %rdi
callq 0xa4c0
jmp 0xdaa0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xda8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xda77
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xbd8(%rbp), %rdi
callq 0xa8d8
leaq -0xbd9(%rbp), %rdi
callq 0xa4c0
leaq -0xbb0(%rbp), %rdi
callq 0xa8d8
leaq -0xbb1(%rbp), %rdi
callq 0xa4c0
jmp 0xdbfe
movq -0xb90(%rbp), %rax
movq %rax, -0x10c8(%rbp)
cmpq $0x0, %rax
je 0xdac1
movq -0x10c8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x60(%rbp), %rax
movq %rax, -0x10d0(%rbp)
cmpq $0x0, %rax
je 0xdadf
movq -0x10d0(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x68(%rbp), %rax
movq %rax, -0x10d8(%rbp)
cmpq $0x0, %rax
je 0xdafd
movq -0x10d8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
leaq -0xb28(%rbp), %rdi
callq 0xa670
leaq -0x8e8(%rbp), %rdi
callq 0xa670
leaq -0x628(%rbp), %rdi
callq 0xa8d8
leaq -0x548(%rbp), %rdi
callq 0xa8d8
leaq -0x520(%rbp), %rdi
callq 0xa8d8
leaq -0x480(%rbp), %rdi
callq 0xf240
leaq -0x450(%rbp), %rdi
callq 0xf240
leaq -0x420(%rbp), %rdi
callq 0xf240
leaq -0x3f0(%rbp), %rdi
callq 0xf240
leaq -0x3c0(%rbp), %rdi
callq 0xf260
leaq -0x360(%rbp), %rdi
callq 0xf2c0
leaq -0x320(%rbp), %rdi
callq 0xf260
leaq -0x2c0(%rbp), %rdi
callq 0xf2c0
leaq -0x280(%rbp), %rdi
callq 0xf260
leaq -0x220(%rbp), %rdi
callq 0xf2c0
leaq -0x1e0(%rbp), %rdi
callq 0xf260
leaq -0x180(%rbp), %rdi
callq 0xf2c0
leaq -0x138(%rbp), %rdi
callq 0xa8d8
leaq -0x110(%rbp), %rdi
callq 0xa8d8
leaq -0xe8(%rbp), %rdi
callq 0xa8d8
leaq -0xc0(%rbp), %rdi
callq 0xa8d8
jmp 0xe8fd
leaq -0xb28(%rbp), %rdi
callq 0xa670
leaq -0x8e8(%rbp), %rdi
callq 0xa670
leaq -0x628(%rbp), %rdi
callq 0xa8d8
leaq -0x548(%rbp), %rdi
callq 0xa8d8
leaq -0x520(%rbp), %rdi
callq 0xa8d8
leaq -0x480(%rbp), %rdi
callq 0xf240
leaq -0x450(%rbp), %rdi
callq 0xf240
leaq -0x420(%rbp), %rdi
callq 0xf240
leaq -0x3f0(%rbp), %rdi
callq 0xf240
leaq -0x3c0(%rbp), %rdi
callq 0xf260
leaq -0x360(%rbp), %rdi
callq 0xf2c0
leaq -0x320(%rbp), %rdi
callq 0xf260
leaq -0x2c0(%rbp), %rdi
callq 0xf2c0
leaq -0x280(%rbp), %rdi
callq 0xf260
leaq -0x220(%rbp), %rdi
callq 0xf2c0
leaq -0x1e0(%rbp), %rdi
callq 0xf260
leaq -0x180(%rbp), %rdi
callq 0xf2c0
leaq -0x138(%rbp), %rdi
callq 0xa8d8
leaq -0x110(%rbp), %rdi
callq 0xa8d8
leaq -0xe8(%rbp), %rdi
callq 0xa8d8
leaq -0xc0(%rbp), %rdi
callq 0xa8d8
jmp 0xe95f
movl -0x8(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0xc0c0
movq %rax, -0xbf0(%rbp)
movq %rdx, -0xbe8(%rbp)
leaq -0xc00(%rbp), %rdi
movq %rdi, -0x10f0(%rbp)
leaq -0x60(%rbp), %rsi
leaq -0x68(%rbp), %rdx
callq 0xf190
movq -0x10f0(%rbp), %rdi
leaq -0xbf0(%rbp), %rsi
callq 0xf1d0
movq -0x10(%rbp), %rax
movl -0x8(%rbp), %ecx
decl %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x10e8(%rbp)
leaq -0xc21(%rbp), %rdi
movq %rdi, -0x10e0(%rbp)
callq 0xa7d0
movq -0x10e8(%rbp), %rsi
movq -0x10e0(%rbp), %rdx
leaq -0xc20(%rbp), %rdi
callq 0xe9b0
jmp 0xdd8d
xorl %eax, %eax
movl %eax, %esi
leaq -0xc20(%rbp), %rdi
movl $0xa, %edx
callq 0xe970
movl %eax, -0x10f4(%rbp)
jmp 0xddaa
leaq -0xc20(%rbp), %rdi
callq 0xa8d8
leaq -0xc21(%rbp), %rdi
callq 0xa4c0
movl -0x10f4(%rbp), %eax
cmpl $0x9, %eax
jle 0xe6ec
movq -0x10(%rbp), %rax
movl -0x8(%rbp), %ecx
decl %ecx
movslq %ecx, %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0x1108(%rbp)
leaq -0xc49(%rbp), %rdi
movq %rdi, -0x1100(%rbp)
callq 0xa7d0
movq -0x1108(%rbp), %rsi
movq -0x1100(%rbp), %rdx
leaq -0xc48(%rbp), %rdi
callq 0xe9b0
jmp 0xde17
xorl %eax, %eax
movl %eax, %esi
leaq -0xc48(%rbp), %rdi
movl $0xa, %edx
callq 0xe970
movl %eax, -0x110c(%rbp)
jmp 0xde34
leaq -0xc48(%rbp), %rdi
callq 0xa8d8
leaq -0xc49(%rbp), %rdi
callq 0xa4c0
movl -0x110c(%rbp), %eax
movl %eax, -0xc28(%rbp)
movq -0x10(%rbp), %rax
movl -0x8(%rbp), %edx
movl %edx, %ecx
subl $0x9, %ecx
sete %cl
movzbl %cl, %ecx
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %ecx, %edx
shll $0x4, %esi
movl %esi, %ecx
leal (%rcx,%rdx,8), %ecx
movq 0x20(%rax,%rcx), %rax
movq %rax, -0x1120(%rbp)
leaq -0xc71(%rbp), %rdi
movq %rdi, -0x1118(%rbp)
callq 0xa7d0
movq -0x1120(%rbp), %rsi
movq -0x1118(%rbp), %rdx
leaq -0xc70(%rbp), %rdi
callq 0xe9b0
jmp 0xdeb8
xorl %eax, %eax
movl %eax, %esi
leaq -0xc70(%rbp), %rdi
movl $0xa, %edx
callq 0xe970
movl %eax, -0x1124(%rbp)
jmp 0xded5
movl -0x1124(%rbp), %eax
movl %eax, 0x1935ff(%rip)    # 0x1a14e0
leaq -0xc70(%rbp), %rdi
callq 0xa8d8
leaq -0xc71(%rbp), %rdi
callq 0xa4c0
movl -0x8(%rbp), %eax
subl $0xc, %eax
sete 0x1935de(%rip)          # 0x1a14e4
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %edx
movl %edx, %eax
subl $0x9, %eax
sete %al
movzbl %al, %eax
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %eax, %edx
shll $0x4, %esi
movl %esi, %eax
leal (%rax,%rdx,8), %eax
movq 0x28(%rax,%rcx), %rax
movq %rax, -0x1138(%rbp)
leaq -0xc99(%rbp), %rdi
movq %rdi, -0x1130(%rbp)
callq 0xa7d0
movq -0x1138(%rbp), %rsi
movq -0x1130(%rbp), %rdx
leaq -0xc98(%rbp), %rdi
callq 0xe9b0
jmp 0xdf66
leaq -0xc99(%rbp), %rdi
callq 0xa4c0
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %edx
movl %edx, %eax
subl $0x9, %eax
sete %al
movzbl %al, %eax
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %eax, %edx
shll $0x4, %esi
movl %esi, %eax
leal (%rax,%rdx,8), %eax
movq 0x30(%rax,%rcx), %rax
movq %rax, -0x1148(%rbp)
leaq -0xcc9(%rbp), %rdi
movq %rdi, -0x1140(%rbp)
callq 0xa7d0
movq -0x1148(%rbp), %rsi
movq -0x1140(%rbp), %rdx
leaq -0xcc8(%rbp), %rdi
callq 0xe9b0
jmp 0xdfd2
xorl %eax, %eax
movl %eax, %esi
leaq -0xcc8(%rbp), %rdi
callq 0xea60
movsd %xmm0, -0x1150(%rbp)
jmp 0xdfec
leaq -0xcc8(%rbp), %rdi
callq 0xa8d8
leaq -0xcc9(%rbp), %rdi
callq 0xa4c0
movsd -0x1150(%rbp), %xmm0
movsd %xmm0, -0xca8(%rbp)
movl -0xc28(%rbp), %eax
movb $0x0, -0xcfa(%rbp)
movb $0x0, -0xcfb(%rbp)
cmpl $0x2, %eax
je 0xe03d
xorps %xmm0, %xmm0
movsd %xmm0, -0x1158(%rbp)
jmp 0xe0c5
movq -0x10(%rbp), %rax
movl -0x8(%rbp), %ecx
subl $0xc, %ecx
sete %cl
movzbl %cl, %ecx
shll $0x4, %ecx
movq 0x40(%rax,%rcx), %rax
movq %rax, -0x1168(%rbp)
leaq -0xcf9(%rbp), %rdi
movq %rdi, -0x1160(%rbp)
callq 0xa7d0
movq -0x1168(%rbp), %rsi
movq -0x1160(%rbp), %rdx
movb $0x1, -0xcfa(%rbp)
leaq -0xcf8(%rbp), %rdi
callq 0xe9b0
jmp 0xe092
movb $0x1, -0xcfb(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xcf8(%rbp), %rdi
callq 0xea60
movsd %xmm0, -0x1170(%rbp)
jmp 0xe0b3
movsd -0x1170(%rbp), %xmm0
movsd %xmm0, -0x1158(%rbp)
jmp 0xe0c5
movsd -0x1158(%rbp), %xmm0
movsd %xmm0, -0x1178(%rbp)
testb $0x1, -0xcfb(%rbp)
jne 0xe0e0
jmp 0xe0ec
leaq -0xcf8(%rbp), %rdi
callq 0xa8d8
testb $0x1, -0xcfa(%rbp)
jne 0xe0f7
jmp 0xe103
leaq -0xcf9(%rbp), %rdi
callq 0xa4c0
movsd -0x1178(%rbp), %xmm0
movsd %xmm0, -0xcd8(%rbp)
movl -0x8(%rbp), %eax
movb $0x0, -0xd22(%rbp)
movb $0x0, -0xd23(%rbp)
cmpl $0x9, %eax
jne 0xe139
xorps %xmm0, %xmm0
movsd %xmm0, -0x1180(%rbp)
jmp 0xe1c1
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %eax
subl $0xc, %eax
sete %al
movzbl %al, %eax
shll $0x4, %eax
movq 0x38(%rax,%rcx), %rax
movq %rax, -0x1190(%rbp)
leaq -0xd21(%rbp), %rdi
movq %rdi, -0x1188(%rbp)
callq 0xa7d0
movq -0x1190(%rbp), %rsi
movq -0x1188(%rbp), %rdx
movb $0x1, -0xd22(%rbp)
leaq -0xd20(%rbp), %rdi
callq 0xe9b0
jmp 0xe18e
movb $0x1, -0xd23(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0xd20(%rbp), %rdi
callq 0xea60
movsd %xmm0, -0x1198(%rbp)
jmp 0xe1af
movsd -0x1198(%rbp), %xmm0
movsd %xmm0, -0x1180(%rbp)
jmp 0xe1c1
movsd -0x1180(%rbp), %xmm0
leaq 0x193370(%rip), %rax    # 0x1a1540
movsd %xmm0, (%rax)
testb $0x1, -0xd23(%rbp)
jne 0xe1df
jmp 0xe1eb
leaq -0xd20(%rbp), %rdi
callq 0xa8d8
testb $0x1, -0xd22(%rbp)
jne 0xe1f6
jmp 0xe202
leaq -0xd21(%rbp), %rdi
callq 0xa4c0
xorl %eax, %eax
cmpl $0x0, 0x1932d5(%rip)    # 0x1a14e0
movb %al, -0x1199(%rbp)
jl 0xe223
cmpl $0x2, 0x1932c6(%rip)    # 0x1a14e0
setle %al
movb %al, -0x1199(%rbp)
movb -0x1199(%rbp), %al
testb $0x1, %al
jne 0xe22f
jmp 0xe234
jmp 0xe438
leaq 0xfcdd8(%rip), %rdi     # 0x10b013
leaq 0xfcdec(%rip), %rsi     # 0x10b02e
movl $0xd8, %edx
leaq 0xfd000(%rip), %rcx     # 0x10b24e
callq 0xa2b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe285
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc20(%rbp), %rdi
callq 0xa8d8
leaq -0xc21(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe2c8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc48(%rbp), %rdi
callq 0xa8d8
leaq -0xc49(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe30b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc70(%rbp), %rdi
callq 0xa8d8
leaq -0xc71(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xc99(%rbp), %rdi
callq 0xa4c0
jmp 0xe95f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe371
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xcc8(%rbp), %rdi
callq 0xa8d8
leaq -0xcc9(%rbp), %rdi
callq 0xa4c0
jmp 0xe6db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe3c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
testb $0x1, -0xcfb(%rbp)
jne 0xe3b3
jmp 0xe3bf
leaq -0xcf8(%rbp), %rdi
callq 0xa8d8
jmp 0xe3c1
testb $0x1, -0xcfa(%rbp)
jne 0xe3cc
jmp 0xe3d8
leaq -0xcf9(%rbp), %rdi
callq 0xa4c0
jmp 0xe6db
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe41c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
testb $0x1, -0xd23(%rbp)
jne 0xe40e
jmp 0xe41a
leaq -0xd20(%rbp), %rdi
callq 0xa8d8
jmp 0xe41c
testb $0x1, -0xd22(%rbp)
jne 0xe427
jmp 0xe433
leaq -0xd21(%rbp), %rdi
callq 0xa4c0
jmp 0xe6db
leaq 0xfcc67(%rip), %rsi     # 0x10b0a6
leaq -0xc98(%rbp), %rdi
callq 0xeaa0
movb %al, -0x119a(%rbp)
jmp 0xe453
movb -0x119a(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x119b(%rbp)
jne 0xe4c1
jmp 0xe468
leaq 0xfce01(%rip), %rsi     # 0x10b270
leaq -0xc98(%rbp), %rdi
callq 0xeaa0
movb %al, -0x119c(%rbp)
jmp 0xe483
movb -0x119c(%rbp), %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x119b(%rbp)
jne 0xe4c1
jmp 0xe498
leaq 0x11d5dc(%rip), %rsi    # 0x12ba7b
leaq -0xc98(%rbp), %rdi
callq 0xeaa0
movb %al, -0x119d(%rbp)
jmp 0xe4b3
movb -0x119d(%rbp), %al
movb %al, -0x119b(%rbp)
jmp 0xe4c1
movb -0x119b(%rbp), %al
testb $0x1, %al
jne 0xe4cd
jmp 0xe4cf
jmp 0xe505
leaq 0xfcbd2(%rip), %rdi     # 0x10b0a8
leaq 0xfcb51(%rip), %rsi     # 0x10b02e
movl $0xd9, %edx
leaq 0xfcd65(%rip), %rcx     # 0x10b24e
callq 0xa2b0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe6db
movq -0x60(%rbp), %rax
movq %rax, -0x11b0(%rbp)
movq -0x68(%rbp), %rax
movq %rax, -0x11a8(%rbp)
leaq -0xea0(%rbp), %rdi
leaq -0xc98(%rbp), %rsi
callq 0xa190
jmp 0xe530
movq -0x11a8(%rbp), %rdx
movq -0x11b0(%rbp), %rsi
movsd -0xca8(%rbp), %xmm0
movl -0x8(%rbp), %eax
subl $0x9, %eax
sete %al
movl -0xc28(%rbp), %r9d
addl $-0x9, %r9d
movzbl %al, %r8d
leaq -0xe80(%rbp), %rdi
leaq -0xea0(%rbp), %rcx
callq 0xebf90
jmp 0xe573
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %edx
movl %edx, %eax
subl $0x9, %eax
sete %al
movzbl %al, %eax
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %eax, %edx
shll $0x4, %esi
movl %esi, %eax
leal (%rax,%rdx,8), %eax
movq 0x18(%rax,%rcx), %rax
movq %rax, -0x11c0(%rbp)
leaq -0xec1(%rbp), %rdi
movq %rdi, -0x11b8(%rbp)
callq 0xa7d0
movq -0x11c0(%rbp), %rsi
movq -0x11b8(%rbp), %rdx
leaq -0xec0(%rbp), %rdi
callq 0xe9b0
jmp 0xe5d3
leaq 0x192ee6(%rip), %rsi    # 0x1a14c0
leaq -0xee8(%rbp), %rdi
callq 0xa190
jmp 0xe5e8
leaq -0xe80(%rbp), %rdi
leaq -0xec0(%rbp), %rsi
leaq -0xee8(%rbp), %rdx
callq 0xec4c0
jmp 0xe604
leaq -0xee8(%rbp), %rdi
callq 0xa8d8
leaq -0xec0(%rbp), %rdi
callq 0xa8d8
leaq -0xec1(%rbp), %rdi
callq 0xa4c0
leaq -0xe80(%rbp), %rdi
callq 0xf2f0
leaq -0xea0(%rbp), %rdi
callq 0xa8d8
leaq -0xc98(%rbp), %rdi
callq 0xa8d8
jmp 0xe8fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe6cf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe6b7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe6ab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xee8(%rbp), %rdi
callq 0xa8d8
leaq -0xec0(%rbp), %rdi
callq 0xa8d8
leaq -0xec1(%rbp), %rdi
callq 0xa4c0
leaq -0xe80(%rbp), %rdi
callq 0xf2f0
leaq -0xea0(%rbp), %rdi
callq 0xa8d8
leaq -0xc98(%rbp), %rdi
callq 0xa8d8
jmp 0xe95f
leaq -0xf18(%rbp), %rdi
movq %rdi, -0x11d0(%rbp)
callq 0xec00
movq -0x11d0(%rbp), %r9
movq -0x60(%rbp), %rdi
movq -0x68(%rbp), %rsi
movl -0x8(%rbp), %edx
movq -0x10(%rbp), %rcx
movq %r9, %r8
callq 0xaee0
movq %rax, -0x11c8(%rbp)
jmp 0xe726
movq -0x11c8(%rbp), %rax
movq %rax, -0xf20(%rbp)
cmpq $0x0, -0xf20(%rbp)
je 0xe882
movq -0xf20(%rbp), %rax
movq %rax, -0x11e8(%rbp)
movq -0x10(%rbp), %rcx
movl -0x8(%rbp), %edx
movl %edx, %eax
subl $0x9, %eax
sete %al
movzbl %al, %eax
subl $0xc, %edx
sete %dl
movzbl %dl, %esi
movl %eax, %edx
shll $0x4, %esi
movl %esi, %eax
leal (%rax,%rdx,8), %eax
movq 0x18(%rax,%rcx), %rax
movq %rax, -0x11e0(%rbp)
leaq -0xf41(%rbp), %rdi
movq %rdi, -0x11d8(%rbp)
callq 0xa7d0
movq -0x11e0(%rbp), %rsi
movq -0x11d8(%rbp), %rdx
leaq -0xf40(%rbp), %rdi
callq 0xe9b0
jmp 0xe7b0
leaq 0x192d09(%rip), %rsi    # 0x1a14c0
leaq -0xf68(%rbp), %rdi
callq 0xa190
jmp 0xe7c5
movq -0x11e8(%rbp), %rdi
movq (%rdi), %rax
movq 0x10(%rax), %rax
leaq -0xf40(%rbp), %rsi
leaq -0xf68(%rbp), %rdx
callq *%rax
jmp 0xe7e5
leaq -0xf68(%rbp), %rdi
callq 0xa8d8
leaq -0xf40(%rbp), %rdi
callq 0xa8d8
leaq -0xf41(%rbp), %rdi
callq 0xa4c0
jmp 0xe882
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe8ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe874
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe868
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0xf68(%rbp), %rdi
callq 0xa8d8
leaq -0xf40(%rbp), %rdi
callq 0xa8d8
leaq -0xf41(%rbp), %rdi
callq 0xa4c0
jmp 0xe8ed
movq -0xf20(%rbp), %rax
movq %rax, -0x11f0(%rbp)
cmpq $0x0, %rax
je 0xe8a3
movq -0x11f0(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x60(%rbp), %rax
movq %rax, -0x11f8(%rbp)
cmpq $0x0, %rax
je 0xe8c1
movq -0x11f8(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movq -0x68(%rbp), %rax
movq %rax, -0x1200(%rbp)
cmpq $0x0, %rax
je 0xe8df
movq -0x1200(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
leaq -0xf18(%rbp), %rdi
callq 0xf240
jmp 0xe8fb
leaq -0xf18(%rbp), %rdi
callq 0xf240
jmp 0xe95f
jmp 0xe8fd
leaq -0x58(%rbp), %rdi
callq 0xf350
movq 0x192643(%rip), %rdi    # 0x1a0f50
leaq 0xfc951(%rip), %rsi     # 0x10b265
callq 0xa440
movq %rax, -0x1208(%rbp)
leaq -0x58(%rbp), %rdi
callq 0xf3b0
movq -0x1208(%rbp), %rdi
callq 0xa340
movq %rax, %rdi
leaq 0xfc92d(%rip), %rsi     # 0x10b26c
callq 0xa440
movq %rax, %rdi
movq 0x192612(%rip), %rsi    # 0x1a0f60
callq 0xa4a0
movl -0x4(%rbp), %eax
addq $0x1210, %rsp           # imm = 0x1210
popq %rbp
retq
movq -0x98(%rbp), %rdi
callq 0xa7c0
nopl (%rax,%rax)