// File: /workspace/github_cpp_makefile_star2_O1/millanek[P]Dsuite/Dmin_combine.cpp
// Function: DminCombineMain(int, char**)
int DminCombineMain(int argc, char** argv) {
    parseDminCombineOptions(argc, argv);
    const bool KStestPossible = false;
    
    string line; // for reading the input files
    
    
    string outFileRoot = prepareOutFileRootString(opt::providedOutPrefix, opt::runName, "", -1, -1);
    
    std::vector<std::istream*> dminstdErrFiles; std::vector<std::istream*> dminBBAAscoreFiles;
    for (int i = 0; i < opt::dminFiles.size(); i++) {
        std::istream* dminBBAAscoreFile;
        if (file_exists(opt::dminFiles[i] + "_combine.txt")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine.txt.gz")) {
            dminBBAAscoreFile = createReader((opt::dminFiles[i] + "_combine.txt.gz").c_str());
        } else {
            std::cerr << "Can't find the file: " << opt::dminFiles[i] + "_combine.txt" << " or " << opt::dminFiles[i] + "_combine.txt.gz. Exiting..." << std::endl;
            exit(EXIT_FAILURE);
        }
        dminBBAAscoreFiles.push_back(dminBBAAscoreFile);
        std::istream* dminstdErrFile;
        if (file_exists(opt::dminFiles[i] + "_combine_stderr.txt")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt").c_str());
        } else if(file_exists(opt::dminFiles[i] + "_combine_stderr.txt.gz")) {
            dminstdErrFile = createReader((opt::dminFiles[i] + "_combine_stderr.txt.gz").c_str());
        } else {
            std::cerr << "Can't find the file: " << opt::dminFiles[i] + "_combine_stderr.txt" << " or " << opt::dminFiles[i] + "_combine_stderr.txt.gz. Exiting..." << std::endl;
            exit(EXIT_FAILURE);
        }
        dminstdErrFiles.push_back(dminstdErrFile);
        std::cerr << "Reading file " << opt::dminFiles[i] << std::endl;
    }
    
    std::istream* treeFile; std::ofstream* outFileTree;
    std::map<string,std::vector<int>> treeTaxonNamesToLoc; std::vector<int> treeLevels;
    if (opt::treeFile != "") {
        treeFile = new std::ifstream(opt::treeFile.c_str());
        if (!treeFile->good()) { std::cerr << "The file " << opt::treeFile << " could not be opened. Exiting..." << std::endl; exit(1);}
        outFileTree = new std::ofstream(outFileRoot + "_combined_tree.txt");
        getline(*treeFile, line);
        assignTreeLevelsAndLinkToTaxa(line,treeTaxonNamesToLoc,treeLevels);
    }
    // Now get the standard error values
    std::ofstream* outFileBBAA = new std::ofstream(outFileRoot + "_combined_BBAA.txt"); std::ofstream* outFileDmin = new std::ofstream(outFileRoot + "_combined_Dmin.txt");
    
    std::vector<double> BBAA_local_Ds; std::vector<double> ABBA_local_Ds; std::vector<double> BABA_local_Ds;
    string s1; string s2; string s3;
    bool allDone = false; bool fIncluded = false;
    int processedTriosNumber = 0; int exceptionCount = 0;
    
    getline(*dminBBAAscoreFiles[0], line); std::vector<string> patternCounts = split(line, '\t');
    if (patternCounts.size() == 12) fIncluded = true;
    string header = makeHeader(false,fIncluded,KStestPossible);
    *outFileBBAA << header << std::endl; *outFileDmin << header << std::endl;
    if (opt::treeFile != "") *outFileTree << header << std::endl;
    dminBBAAscoreFiles[0]->seekg(0, dminBBAAscoreFiles[0]->beg); // Go back to the beginning of this file
    
    do {
        TrioDinfo info; processedTriosNumber++;
        if (processedTriosNumber % 10000 == 0) { std::cerr << "Processed " << processedTriosNumber << " trios" << std::endl; }
        
        if (opt::subsetStart != -1) {
            if (processedTriosNumber < opt::subsetStart) {
                for (int i = 0; i < dminBBAAscoreFiles.size(); i++) { getline(*dminBBAAscoreFiles[i], line); }
                for (int i = 0; i < dminstdErrFiles.size(); i++) { getline(*dminstdErrFiles[i], line); }
                continue;
            }
            if (processedTriosNumber >= (opt::subsetStart+opt::subsetLength)) {
                std::cerr << "DONE" << std::endl; break;
            }
        }
        
        
        for (int i = 0; i < dminBBAAscoreFiles.size(); i++) {
            if (getline(*dminBBAAscoreFiles[i], line)) {
                std::vector<string> patternCounts = split(line, '\t');
                assert(patternCounts.size() == 6 || patternCounts.size() == 12);

                if (i == 0) {
                    s1 = patternCounts[0]; s2 = patternCounts[1]; s3 = patternCounts[2];
                } else {
                    assert(s1 == patternCounts[0]); assert(s2 == patternCounts[1]); assert(s3 == patternCounts[2]);
                }
                info.BBAAtotal += stringToDouble(patternCounts[3]);
                info.BABAtotal += stringToDouble(patternCounts[4]);
                info.ABBAtotal += stringToDouble(patternCounts[5]);
                if (fIncluded) {
                    info.F_G_denom1 += stringToDouble(patternCounts[6]);
                    info.F_G_denom2 += stringToDouble(patternCounts[7]);
                    info.F_G_denom3 += stringToDouble(patternCounts[8]);
                    info.F_G_denom1_reversed += stringToDouble(patternCounts[9]);
                    info.F_G_denom2_reversed += stringToDouble(patternCounts[10]);
                    info.F_G_denom3_reversed += stringToDouble(patternCounts[11]);
                }
            } else {
                allDone = true; break;
            }
        }
        
        for (int i = 0; i < dminstdErrFiles.size(); i++) {
            if (getline(*dminstdErrFiles[i], line)) {
                std::vector<string> localDs = split2(line, "\t");
                //assert(localDs.size() == 3 || localDs.size() == 0);
                if (localDs.size() == 3) {
                    std::vector<string> regionD_strings0 = split(localDs[0], ',');
                    std::vector<string> regionD_strings1 = split(localDs[1], ',');
                    std::vector<string> regionD_strings2 = split(localDs[2], ',');
                    for (int j = 0; j < regionD_strings0.size(); j++) {
                        double localD = stringToDouble(regionD_strings0[j]);
                        if (!std::isnan(localD)) info.regionDs[0].push_back(localD);
                    }
                    for (int j = 0; j < regionD_strings1.size(); j++) {
                        double localD = stringToDouble(regionD_strings1[j]);
                        if (!std::isnan(localD)) info.regionDs[1].push_back(localD);
                    }
                    for (int j = 0; j < regionD_strings2.size(); j++) {
                        double localD = stringToDouble(regionD_strings2[j]);
                        if (!std::isnan(localD)) info.regionDs[2].push_back(localD);
                    }
                } else {
                    print_vector(localDs,std::cerr); exit(EXIT_FAILURE);
                }
            } else {
                allDone = true; break;
            }
        }
        
        
        if (!allDone) {
            try {
                info.calculateFinalDs();
            } catch (const char* msg) {
                exceptionCount++;
                if (exceptionCount <= 10) {
                    std::cerr << msg << std::endl;
                    std::cerr << "Could not calculate p-values for the trio: " << s1 << " " << s2 << " " << s3 << std::endl;
                    std::cerr << "You should probably decrease the the jackknife block size (-j option)" << std::endl;
                    std::cerr << std::endl;
                }
                info.D1_p = nan(""); info.D2_p = nan(""); info.D3_p = nan("");
            }
            
            std::vector<string> trio; trio.push_back(s1); trio.push_back(s2); trio.push_back(s3);
            // Find which topology is in agreement with the counts of BBAA, BABA, and ABBA
            info.assignBBAAarrangement();
            std::vector<string> BBAAoutVec = info.makeOutVec(trio, fIncluded,KStestPossible, info.BBAAarrangement);
            print_vector(BBAAoutVec,*outFileBBAA);
           
            // Find Dmin:
            info.assignDminArrangement();
            std::vector<string> DminOutVec = info.makeOutVec(trio, fIncluded, KStestPossible,info.DminArrangement);
            print_vector(DminOutVec,*outFileDmin);
            
            if (opt::treeFile != "") {
                int loc1 = treeTaxonNamesToLoc[s1][0]; int loc2 = treeTaxonNamesToLoc[s2][0]; int loc3 = treeTaxonNamesToLoc[s3][0];
                info.treeArrangement = info.assignTreeArrangement(treeLevels, loc1, loc2, loc3);
                std::vector<string> treeOutVec = info.makeOutVec(trio, fIncluded, KStestPossible, info.treeArrangement);
                print_vector(treeOutVec,*outFileTree);
            }
        }
 
    } while(!allDone);
    
    if (exceptionCount > 10) {
        std::cerr << "..." << std::endl;
        std::cerr << "p-value could not be calculated for " << exceptionCount << " trios" << std::endl;
        std::cerr << "You should definitely decrease the the jackknife block size!!!" << std::endl;
        std::cerr << std::endl;
    }
    
    return 0;
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x648, %rsp            # imm = 0x648
callq 0x22eb5
leaq 0xf8(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
leaq 0x3b0(%rsp), %rbp
movq %rbp, -0x10(%rbp)
leaq 0x22569(%rip), %rdx     # 0x42fb1
leaq 0x3a0(%rsp), %rdi
movq %rdx, %rsi
callq 0x88ba
leaq 0x37009(%rip), %rsi     # 0x57a68
leaq 0x37022(%rip), %rdx     # 0x57a88
leaq 0x1b0(%rsp), %rdi
leaq 0x3a0(%rsp), %rcx
movl $0xffffffff, %r8d       # imm = 0xFFFFFFFF
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0x3ba0c
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20aa4
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
xorl %eax, %eax
movq %rax, 0x80(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
movq %rax, 0x60(%rsp)
movapd %xmm0, 0x50(%rsp)
movq 0x36f86(%rip), %rax     # 0x57a50
cmpq %rax, 0x36f87(%rip)     # 0x57a58
je 0x20f26
xorl %ebx, %ebx
leaq 0x3a0(%rsp), %r14
movq %rsp, %r12
xorl %r13d, %r13d
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdfb6
movq %r14, %rdi
leaq 0x20771(%rip), %rsi     # 0x4127e
callq 0x77f0
movq %r14, %rdi
callq 0xd0d0
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20b3a
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x20b98
movq 0x36f0a(%rip), %rax     # 0x57a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdfb6
movq %r12, %rdi
leaq 0x20711(%rip), %rsi     # 0x4127e
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0xc8(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcfb2
jmp 0x20c4f
movq 0x36eb1(%rip), %rax     # 0x57a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdfb6
movq %r14, %rdi
leaq 0x21b0f(%rip), %rsi     # 0x426d4
callq 0x77f0
movq %r14, %rdi
callq 0xd0d0
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20bf2
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x2266c
movq 0x36e4e(%rip), %rax     # 0x57a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdfb6
movq %r12, %rdi
leaq 0x21aab(%rip), %rsi     # 0x426d4
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0xc8(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcfb2
movq %rax, 0x108(%rsp)
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20c74
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x20c8f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x58(%rsp), %rsi
cmpq 0x60(%rsp), %rsi
je 0x20cae
movq 0x108(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0x58(%rsp)
jmp 0x20cc0
leaq 0x50(%rsp), %rdi
leaq 0x108(%rsp), %rdx
callq 0x2340e
movq 0x36d89(%rip), %rax     # 0x57a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdfb6
movq %r14, %rdi
leaq 0x2059e(%rip), %rsi     # 0x4128b
callq 0x77f0
movq %r14, %rdi
callq 0xd0d0
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20d1a
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x20d78
movq 0x36d2a(%rip), %rax     # 0x57a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdfb6
movq %r12, %rdi
leaq 0x2053e(%rip), %rsi     # 0x4128b
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0x128(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcfb2
jmp 0x20e2f
movq 0x36cd1(%rip), %rax     # 0x57a50
movq %rbp, 0x3a0(%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdfb6
movq %r14, %rdi
leaq 0x21976(%rip), %rsi     # 0x4271b
callq 0x77f0
movq %r14, %rdi
callq 0xd0d0
movl %eax, %r15d
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20dd2
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
testb %r15b, %r15b
je 0x2270c
movq 0x36c6e(%rip), %rax     # 0x57a50
leaq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xdfb6
movq %r12, %rdi
leaq 0x21912(%rip), %rsi     # 0x4271b
callq 0x77f0
movq (%rsp), %rsi
movq %r14, %rdi
leaq 0x128(%rsp), %rdx
callq 0x887c
movq %r14, %rdi
movl $0x8, %esi
callq 0xcfb2
movq %rax, 0xc8(%rsp)
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x20e54
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x20e6f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x78(%rsp), %rsi
cmpq 0x80(%rsp), %rsi
je 0x20e91
movq 0xc8(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0x78(%rsp)
jmp 0x20ea3
leaq 0x70(%rsp), %rdi
leaq 0xc8(%rsp), %rdx
callq 0x2340e
movl $0xd, %edx
movq 0x36139(%rip), %rdi     # 0x56fe8
leaq 0x2189f(%rip), %rsi     # 0x42755
callq 0x74b0
movq 0x36b8e(%rip), %rax     # 0x57a50
movq (%rax,%rbx), %rsi
movq 0x8(%rax,%rbx), %rdx
movq 0x36116(%rip), %rdi     # 0x56fe8
callq 0x74b0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
incq %r13
movq 0x36b4d(%rip), %rcx     # 0x57a58
movq 0x36b3e(%rip), %rax     # 0x57a50
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x20ae7
leaq 0x8(%rsp), %rax
movl $0x0, (%rax)
xorl %ecx, %ecx
movq %rcx, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
movq %rcx, 0x20(%rax)
movq %rcx, 0x1e0(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x1d0(%rsp)
leaq 0x36b49(%rip), %rdi     # 0x57aa8
leaq 0x2204b(%rip), %rsi     # 0x42fb1
callq 0x70f0
testl %eax, %eax
je 0x21067
movl $0x208, %edi            # imm = 0x208
callq 0x7410
movq %rax, %rbx
movq 0x36b21(%rip), %rsi     # 0x57aa8
movq %rax, %rdi
movl $0x8, %edx
callq 0x7790
movq (%rbx), %rax
movq -0x18(%rax), %rax
cmpl $0x0, 0x20(%rbx,%rax)
jne 0x227c1
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, 0x98(%rsp)
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1b0(%rsp), %rsi
movq 0x1b8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdfb6
leaq 0x21781(%rip), %rsi     # 0x42763
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq 0x98(%rsp), %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x21026
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
leaq 0xe8(%rsp), %rsi
movq %rbx, %rdi
callq 0x77a0
leaq 0xe8(%rsp), %rdi
movq %rsp, %rsi
leaq 0x1d0(%rsp), %rdx
callq 0x3c33a
jmp 0x21067
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, 0xa8(%rsp)
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1b0(%rsp), %rsi
movq 0x1b8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdfb6
leaq 0x216d3(%rip), %rsi     # 0x42776
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq 0xa8(%rsp), %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x210e7
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movl $0x200, %edi            # imm = 0x200
callq 0x7410
movq %rax, 0xa0(%rsp)
leaq 0x3a0(%rsp), %rdi
movq %rbp, (%rdi)
movq 0x1b0(%rsp), %rsi
movq 0x1b8(%rsp), %rdx
addq %rsi, %rdx
callq 0xdfb6
leaq 0x21666(%rip), %rsi     # 0x42789
leaq 0x3a0(%rsp), %rdi
callq 0x77f0
leaq 0x3a0(%rsp), %rsi
movq 0xa0(%rsp), %rdi
movl $0x10, %edx
callq 0x7800
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x21167
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x118(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0xd8(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x138(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq 0x50(%rsp), %rax
movq (%rax), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
leaq 0xe8(%rsp), %rsi
movq %rbx, %rdi
callq 0x77a0
leaq 0x5d0(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
movl $0x9, %edx
callq 0x91a9
movq 0x5d8(%rsp), %rax
subq 0x5d0(%rsp), %rax
xorl %edx, %edx
movq %rax, 0xb8(%rsp)
cmpq $0x180, %rax            # imm = 0x180
sete %dl
leaq 0x190(%rsp), %rdi
xorl %esi, %esi
xorl %ecx, %ecx
callq 0x3b91e
movq 0x190(%rsp), %rsi
movq 0x198(%rsp), %rdx
movq 0xa8(%rsp), %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x190(%rsp), %rsi
movq 0x198(%rsp), %rdx
movq 0xa0(%rsp), %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
leaq 0x367f7(%rip), %rdi     # 0x57aa8
leaq 0x21cf9(%rip), %rsi     # 0x42fb1
callq 0x70f0
testl %eax, %eax
je 0x21308
movq 0x190(%rsp), %rsi
movq 0x198(%rsp), %rdx
movq 0x98(%rsp), %rdi
callq 0x74b0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x50(%rsp), %rax
movq (%rax), %rdi
xorl %r13d, %r13d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7590
leaq 0x348(%rsp), %r14
leaq 0x368(%rsp), %r15
movq $0x0, 0xb0(%rsp)
movl $0x0, 0x4c(%rsp)
leaq 0x3a0(%rsp), %rdi
callq 0x1c9ce
incl %r13d
imull $0x3afb7e91, %r13d, %eax # imm = 0x3AFB7E91
rorl $0x4, %eax
cmpl $0x68db8, %eax          # imm = 0x68DB8
ja 0x213c6
movl $0xa, %edx
movq 0x35c7b(%rip), %rdi     # 0x56fe8
leaq 0x1f907(%rip), %rsi     # 0x40c7b
callq 0x74b0
movq 0x35c68(%rip), %rdi     # 0x56fe8
movl %r13d, %esi
callq 0x7710
movq %rax, %rbx
movl $0x6, %edx
movq %rax, %rdi
leaq 0x201b4(%rip), %rsi     # 0x4154e
callq 0x74b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movl 0x360a4(%rip), %eax     # 0x57470
cmpl $-0x1, %eax
movq %r13, 0xc0(%rsp)
je 0x214aa
cmpl %eax, %r13d
jge 0x2149b
movq 0x50(%rsp), %rax
cmpq %rax, 0x58(%rsp)
je 0x21439
xorl %r13d, %r13d
movq (%rax,%r13,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x77a0
incq %r13
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r13, %rcx
ja 0x213f5
movq 0x70(%rsp), %rax
cmpq %rax, 0x78(%rsp)
je 0x2148c
xorl %r13d, %r13d
movq (%rax,%r13,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x77a0
incq %r13
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %r13, %rcx
ja 0x21448
xorl %ebx, %ebx
movq 0xc0(%rsp), %r13
jmp 0x221bb
addl 0x35fd3(%rip), %eax     # 0x57474
cmpl %eax, %r13d
jge 0x2216f
movq 0x50(%rsp), %rax
cmpq %rax, 0x58(%rsp)
je 0x21a74
xorl %ebp, %ebp
movq (%rax,%rbp,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x77a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x21a6a
leaq 0x30(%rsp), %rdi
leaq 0xe8(%rsp), %rsi
movl $0x9, %edx
callq 0x91a9
movq 0x30(%rsp), %rbx
movq 0x38(%rsp), %rax
subq %rbx, %rax
sarq $0x5, %rax
cmpq $0x6, %rax
je 0x21531
cmpq $0xc, %rax
jne 0x2264d
testq %rbp, %rbp
je 0x215ca
movq 0x110(%rsp), %rdx
cmpq 0x8(%rbx), %rdx
jne 0x225de
testq %rdx, %rdx
je 0x21569
movq (%rbx), %rsi
movq 0x108(%rsp), %rdi
callq 0x7440
testl %eax, %eax
jne 0x225de
movq 0xd0(%rsp), %rdx
cmpq 0x28(%rbx), %rdx
jne 0x225e7
testq %rdx, %rdx
je 0x21599
movq 0x20(%rbx), %rsi
movq 0xc8(%rsp), %rdi
callq 0x7440
testl %eax, %eax
jne 0x225e7
movq 0x130(%rsp), %rdx
cmpq 0x48(%rbx), %rdx
jne 0x225d5
testq %rdx, %rdx
je 0x21606
movq 0x40(%rbx), %rsi
movq 0x128(%rsp), %rdi
callq 0x7440
testl %eax, %eax
je 0x21606
jmp 0x225d5
leaq 0x108(%rsp), %rdi
movq %rbx, %rsi
callq 0x7210
movq 0x30(%rsp), %rsi
addq $0x20, %rsi
leaq 0xc8(%rsp), %rdi
callq 0x7210
movq 0x30(%rsp), %rsi
addq $0x40, %rsi
leaq 0x128(%rsp), %rdi
callq 0x7210
movq 0x30(%rsp), %rax
leaq 0x338(%rsp), %rcx
movq %rcx, 0x328(%rsp)
movq 0x60(%rax), %rsi
movq 0x68(%rax), %rdx
addq %rsi, %rdx
leaq 0x328(%rsp), %rdi
callq 0xdfb6
leaq 0x328(%rsp), %rdi
callq 0xc76a
addsd 0x3b0(%rsp), %xmm0
movsd %xmm0, 0x3b0(%rsp)
movq 0x328(%rsp), %rdi
leaq 0x338(%rsp), %rax
cmpq %rax, %rdi
je 0x21677
movq 0x338(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x318(%rsp), %rcx
movq %rcx, 0x308(%rsp)
movq 0x80(%rax), %rsi
movq 0x88(%rax), %rdx
addq %rsi, %rdx
leaq 0x308(%rsp), %rdi
callq 0xdfb6
leaq 0x308(%rsp), %rdi
callq 0xc76a
addsd 0x3a8(%rsp), %xmm0
movsd %xmm0, 0x3a8(%rsp)
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
cmpq %rax, %rdi
je 0x216ee
movq 0x318(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x2f8(%rsp), %rcx
movq %rcx, 0x2e8(%rsp)
movq 0xa0(%rax), %rsi
movq 0xa8(%rax), %rdx
addq %rsi, %rdx
leaq 0x2e8(%rsp), %rdi
callq 0xdfb6
leaq 0x2e8(%rsp), %rdi
callq 0xc76a
addsd 0x3a0(%rsp), %xmm0
movsd %xmm0, 0x3a0(%rsp)
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x21765
movq 0x2f8(%rsp), %rsi
incq %rsi
callq 0x7420
cmpq $0x180, 0xb8(%rsp) # imm = 0x180
jne 0x21a41
movq 0x30(%rsp), %rax
leaq 0x2d8(%rsp), %rcx
movq %rcx, 0x2c8(%rsp)
movq 0xc0(%rax), %rsi
movq 0xc8(%rax), %rdx
addq %rsi, %rdx
leaq 0x2c8(%rsp), %rdi
callq 0xdfb6
leaq 0x2c8(%rsp), %rdi
callq 0xc76a
addsd 0x438(%rsp), %xmm0
movsd %xmm0, 0x438(%rsp)
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x217ee
movq 0x2d8(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x2b8(%rsp), %rcx
movq %rcx, 0x2a8(%rsp)
movq 0xe0(%rax), %rsi
movq 0xe8(%rax), %rdx
addq %rsi, %rdx
leaq 0x2a8(%rsp), %rdi
callq 0xdfb6
leaq 0x2a8(%rsp), %rdi
callq 0xc76a
addsd 0x468(%rsp), %xmm0
movsd %xmm0, 0x468(%rsp)
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x21865
movq 0x2b8(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x298(%rsp), %rcx
movq %rcx, 0x288(%rsp)
movq 0x100(%rax), %rsi
movq 0x108(%rax), %rdx
addq %rsi, %rdx
leaq 0x288(%rsp), %rdi
callq 0xdfb6
leaq 0x288(%rsp), %rdi
callq 0xc76a
addsd 0x498(%rsp), %xmm0
movsd %xmm0, 0x498(%rsp)
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
cmpq %rax, %rdi
je 0x218dc
movq 0x298(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x278(%rsp), %rcx
movq %rcx, 0x268(%rsp)
movq 0x120(%rax), %rsi
movq 0x128(%rax), %rdx
addq %rsi, %rdx
leaq 0x268(%rsp), %rdi
callq 0xdfb6
leaq 0x268(%rsp), %rdi
callq 0xc76a
addsd 0x440(%rsp), %xmm0
movsd %xmm0, 0x440(%rsp)
movq 0x268(%rsp), %rdi
leaq 0x278(%rsp), %rax
cmpq %rax, %rdi
je 0x21953
movq 0x278(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x258(%rsp), %rcx
movq %rcx, 0x248(%rsp)
movq 0x140(%rax), %rsi
movq 0x148(%rax), %rdx
addq %rsi, %rdx
leaq 0x248(%rsp), %rdi
callq 0xdfb6
leaq 0x248(%rsp), %rdi
callq 0xc76a
addsd 0x470(%rsp), %xmm0
movsd %xmm0, 0x470(%rsp)
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
cmpq %rax, %rdi
je 0x219ca
movq 0x258(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rax
leaq 0x238(%rsp), %rcx
movq %rcx, 0x228(%rsp)
movq 0x160(%rax), %rsi
movq 0x168(%rax), %rdx
addq %rsi, %rdx
leaq 0x228(%rsp), %rdi
callq 0xdfb6
leaq 0x228(%rsp), %rdi
callq 0xc76a
addsd 0x4a0(%rsp), %xmm0
movsd %xmm0, 0x4a0(%rsp)
movq 0x228(%rsp), %rdi
leaq 0x238(%rsp), %rax
cmpq %rax, %rdi
je 0x21a41
movq 0x238(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x30(%rsp), %rdi
callq 0xd250
incq %rbp
movq 0x50(%rsp), %rax
movq 0x58(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbp, %rcx
ja 0x214bc
jmp 0x21a74
movb $0x1, %al
movq %rax, 0xb0(%rsp)
movq 0x70(%rsp), %rax
cmpq %rax, 0x78(%rsp)
je 0x21efa
xorl %ebp, %ebp
movq (%rax,%rbp,8), %rbx
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %edx
movq %rbx, %rdi
leaq 0xe8(%rsp), %rsi
callq 0x77a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x21ef0
leaq 0x218(%rsp), %rax
movq %rax, 0x208(%rsp)
movq 0xe8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x208(%rsp), %rdi
callq 0xdfb6
leaq 0x5c0(%rsp), %rbx
movq %rbx, 0x5b0(%rsp)
leaq 0x5b0(%rsp), %r12
movq %r12, %rdi
leaq 0x2149b(%rip), %rsi     # 0x42fb0
leaq 0x21495(%rip), %rdx     # 0x42fb1
callq 0x88ba
leaq 0x160(%rsp), %r13
leaq 0x30(%rsp), %rdi
leaq 0x208(%rsp), %rsi
movq %r12, %rdx
callq 0xcacc
movq 0x5b0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x21b5b
movq 0x5c0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x208(%rsp), %rdi
leaq 0x218(%rsp), %rax
cmpq %rax, %rdi
je 0x21b80
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x30(%rsp), %rsi
movq 0x38(%rsp), %rax
subq %rsi, %rax
cmpq $0x60, %rax
jne 0x22606
leaq 0x178(%rsp), %rdi
movl $0x2c, %edx
callq 0x91a9
movq 0x30(%rsp), %rsi
addq $0x20, %rsi
movq %r13, %rdi
movl $0x2c, %edx
callq 0x91a9
movq 0x30(%rsp), %rsi
addq $0x40, %rsi
leaq 0x148(%rsp), %rdi
movl $0x2c, %edx
callq 0x91a9
movq 0x178(%rsp), %rax
cmpq %rax, 0x180(%rsp)
je 0x21cbe
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x378(%rsp), %rcx
movq %rcx, 0x368(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0xdfb6
movq %r15, %rdi
callq 0xc76a
movq 0x368(%rsp), %rdi
leaq 0x378(%rsp), %rax
cmpq %rax, %rdi
je 0x21c5b
movq 0x378(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x88(%rsp)
callq 0x7420
movsd 0x88(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
ucomisd %xmm0, %xmm0
jp 0x21c97
movq 0x538(%rsp), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x21c8a
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x21c97
leaq 0x90(%rsp), %rdx
callq 0xf2ce
incq %r13
movq 0x178(%rsp), %rax
movq 0x180(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x21bf8
movq 0x160(%rsp), %rax
cmpq %rax, 0x168(%rsp)
je 0x21da6
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x358(%rsp), %rcx
movq %rcx, 0x348(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
movq %r14, %rdi
callq 0xdfb6
movq %r14, %rdi
callq 0xc76a
movq 0x348(%rsp), %rdi
leaq 0x358(%rsp), %rax
cmpq %rax, %rdi
je 0x21d3f
movq 0x358(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x88(%rsp)
callq 0x7420
movsd 0x88(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
ucomisd %xmm0, %xmm0
jp 0x21d7f
movq 0x538(%rsp), %rdi
movq 0x20(%rdi), %rsi
cmpq 0x28(%rdi), %rsi
je 0x21d6e
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x20(%rdi)
jmp 0x21d7f
addq $0x18, %rdi
leaq 0x90(%rsp), %rdx
callq 0xf2ce
incq %r13
movq 0x160(%rsp), %rax
movq 0x168(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x21cdc
movq 0x148(%rsp), %rax
cmpq %rax, 0x150(%rsp)
je 0x21e98
movl $0x8, %ebx
xorl %r13d, %r13d
leaq 0x1f8(%rsp), %rcx
movq %rcx, 0x1e8(%rsp)
movq -0x8(%rax,%rbx), %rsi
movq (%rax,%rbx), %rdx
addq %rsi, %rdx
leaq 0x1e8(%rsp), %rdi
callq 0xdfb6
leaq 0x1e8(%rsp), %rdi
callq 0xc76a
movq 0x1e8(%rsp), %rdi
leaq 0x1f8(%rsp), %rax
cmpq %rax, %rdi
je 0x21e31
movq 0x1f8(%rsp), %rsi
incq %rsi
movsd %xmm0, 0x88(%rsp)
callq 0x7420
movsd 0x88(%rsp), %xmm0
movsd %xmm0, 0x90(%rsp)
ucomisd %xmm0, %xmm0
jp 0x21e71
movq 0x538(%rsp), %rdi
movq 0x38(%rdi), %rsi
cmpq 0x40(%rdi), %rsi
je 0x21e60
movsd %xmm0, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x38(%rdi)
jmp 0x21e71
addq $0x30, %rdi
leaq 0x90(%rsp), %rdx
callq 0xf2ce
incq %r13
movq 0x148(%rsp), %rax
movq 0x150(%rsp), %rcx
subq %rax, %rcx
sarq $0x5, %rcx
addq $0x20, %rbx
cmpq %r13, %rcx
ja 0x21dc4
leaq 0x148(%rsp), %rdi
callq 0xd250
leaq 0x160(%rsp), %rdi
callq 0xd250
leaq 0x178(%rsp), %rdi
callq 0xd250
leaq 0x30(%rsp), %rdi
callq 0xd250
incq %rbp
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rbp, %rcx
movq 0xc0(%rsp), %r13
ja 0x21a86
jmp 0x21efa
movb $0x1, %al
movq %rax, 0xb0(%rsp)
testb $0x1, 0xb0(%rsp)
jne 0x2216b
leaq 0x3a0(%rsp), %rdi
callq 0x1d4c6
xorpd %xmm0, %xmm0
movapd %xmm0, 0x30(%rsp)
movq $0x0, 0x40(%rsp)
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
leaq 0x108(%rsp), %rsi
callq 0xd92e
movq %rbx, %rdi
leaq 0xc8(%rsp), %rsi
callq 0xd92e
movq %rbx, %rdi
leaq 0x128(%rsp), %rsi
callq 0xd92e
xorl %ebx, %ebx
cmpq $0x180, 0xb8(%rsp) # imm = 0x180
sete %bl
leaq 0x3a0(%rsp), %r12
movq %r12, %rdi
callq 0x1d5b4
movl 0x59c(%rsp), %r9d
leaq 0x178(%rsp), %rbp
movq %rbp, %rdi
movq %r12, %rsi
leaq 0x30(%rsp), %rdx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x1d656
leaq 0x630(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
callq 0xda38
movq %rbx, %rdi
movq 0xa8(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd96b
movq %rbx, %rdi
xorl %ebx, %ebx
cmpq $0x180, 0xb8(%rsp) # imm = 0x180
sete %bl
callq 0xd250
leaq 0x3a0(%rsp), %rbp
movq %rbp, %rdi
callq 0x1e53c
movl 0x5a0(%rsp), %r9d
leaq 0x160(%rsp), %rdi
movq %rdi, %r12
movq %rbp, %rsi
leaq 0x30(%rsp), %rdx
movl %ebx, %ecx
xorl %r8d, %r8d
callq 0x1d656
leaq 0x618(%rsp), %rbx
movq %rbx, %rdi
movq %r12, %rsi
callq 0xda38
movq %rbx, %rdi
movq 0xa0(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd96b
movq %rbx, %rdi
callq 0xd250
leaq 0x35a4e(%rip), %rdi     # 0x57aa8
leaq 0x20f50(%rip), %rsi     # 0x42fb1
callq 0x70f0
testl %eax, %eax
je 0x22147
movq %rsp, %rbp
movq %rbp, %rdi
leaq 0x108(%rsp), %rsi
callq 0xd6d8
movq (%rax), %rax
movl (%rax), %r12d
movq %rbp, %rdi
leaq 0xc8(%rsp), %rsi
callq 0xd6d8
movq (%rax), %rax
movl (%rax), %ebx
movq %rbp, %rdi
leaq 0x128(%rsp), %rsi
callq 0xd6d8
leaq 0x3a0(%rsp), %rbp
movq (%rax), %rax
movl (%rax), %r8d
movq %rbp, %rdi
leaq 0x1d0(%rsp), %rsi
movl %r12d, %edx
movl %ebx, %ecx
callq 0x1e60a
xorl %ecx, %ecx
cmpq $0x180, 0xb8(%rsp) # imm = 0x180
sete %cl
movl %eax, 0x598(%rsp)
leaq 0x148(%rsp), %rbx
movq %rbx, %rdi
movq %rbp, %rsi
leaq 0x30(%rsp), %rdx
xorl %r8d, %r8d
movl %eax, %r9d
callq 0x1d656
leaq 0x600(%rsp), %rbp
movq %rbp, %rdi
movq %rbx, %rsi
callq 0xda38
movq %rbp, %rdi
movq 0x98(%rsp), %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd96b
movq %rbp, %rdi
callq 0xd250
leaq 0x148(%rsp), %rdi
callq 0xd250
leaq 0x160(%rsp), %rdi
callq 0xd250
leaq 0x178(%rsp), %rdi
callq 0xd250
leaq 0x30(%rsp), %rdi
callq 0xd250
xorl %ebx, %ebx
jmp 0x221bb
movl $0x4, %edx
movq 0x34e6d(%rip), %rdi     # 0x56fe8
leaq 0x1f17e(%rip), %rsi     # 0x41300
callq 0x74b0
movq 0x34e5a(%rip), %rcx     # 0x56fe8
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x34e3c(%rip), %rdi     # 0x56fe8
callq 0x7040
movb $0x1, %bl
movq %rax, %rdi
callq 0x72e0
leaq 0x3a0(%rsp), %rdi
callq 0x1cbc0
testb %bl, %bl
jne 0x2235d
testb $0x1, 0xb0(%rsp)
je 0x21340
jmp 0x2235d
movq %rax, %r12
cmpl $0x1, %edx
jne 0x22d67
movq %r12, %rdi
callq 0x7170
cmpl $0x9, 0x4c(%rsp)
jg 0x222e3
movq 0x34ddf(%rip), %rdi     # 0x56fe8
movq %rax, %rsi
callq 0x7400
movq %rax, %rdi
callq 0x71b0
movl $0x2b, %edx
movq 0x34dc3(%rip), %rdi     # 0x56fe8
leaq 0x1f1f2(%rip), %rsi     # 0x4141e
callq 0x74b0
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %rdx
movq 0x34da0(%rip), %rdi     # 0x56fe8
callq 0x74b0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1f118(%rip), %rsi     # 0x41377
callq 0x74b0
movq 0xc8(%rsp), %rsi
movq 0xd0(%rsp), %rdx
movq %rbx, %rdi
callq 0x74b0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1f0e9(%rip), %rsi     # 0x41377
callq 0x74b0
movq 0x128(%rsp), %rsi
movq 0x130(%rsp), %rdx
movq %rbx, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
movl $0x45, %edx
movq 0x34d29(%rip), %rdi     # 0x56fe8
leaq 0x1f184(%rip), %rsi     # 0x4144a
callq 0x74b0
movq 0x34d16(%rip), %rdi     # 0x56fe8
callq 0x71b0
movq 0x34d0a(%rip), %rdi     # 0x56fe8
callq 0x71b0
incl 0x4c(%rsp)
leaq 0x20cc3(%rip), %rbx     # 0x42fb1
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x398(%rsp)
fldl 0x398(%rsp)
fstpt 0x3d0(%rsp)
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x390(%rsp)
fldl 0x390(%rsp)
fstpt 0x3e0(%rsp)
movq %rbx, %rdi
callq 0x7070
movsd %xmm0, 0x388(%rsp)
fldl 0x388(%rsp)
fstpt 0x3f0(%rsp)
callq 0x76a0
movq 0xc0(%rsp), %r13
jmp 0x21f15
movl 0x4c(%rsp), %ebp
cmpl $0xb, %ebp
jl 0x22488
movq 0x34c77(%rip), %rbx     # 0x56fe8
leaq 0x1e1b4(%rip), %rsi     # 0x4052c
movl $0x3, %edx
movq %rbx, %rdi
callq 0x74b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x34c45(%rip), %rdi     # 0x56fe8
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x34c31(%rip), %rdi     # 0x56fe8
leaq 0x1f121(%rip), %rsi     # 0x414df
movl $0x24, %edx
callq 0x74b0
movq 0x34c19(%rip), %rdi     # 0x56fe8
movl %ebp, %esi
callq 0x7710
movq %rax, %rbx
leaq 0x1f16e(%rip), %rsi     # 0x4154e
movl $0x6, %edx
movq %rax, %rdi
callq 0x74b0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq 0x34bcd(%rip), %rbx     # 0x56fe8
leaq 0x2042a(%rip), %rsi     # 0x4284c
movl $0x3e, %edx
movq %rbx, %rdi
callq 0x74b0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x34b9b(%rip), %rbx     # 0x56fe8
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x72e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x73f0
movsbl %al, %esi
movq 0x34b6d(%rip), %rdi     # 0x56fe8
callq 0x7040
movq %rax, %rdi
callq 0x72e0
leaq 0x1a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x224a9
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x5d0(%rsp), %rdi
callq 0xd250
movq 0x128(%rsp), %rdi
leaq 0x138(%rsp), %rax
cmpq %rax, %rdi
je 0x224db
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x22500
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x22525
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x1d0(%rsp), %rdi
testq %rdi, %rdi
je 0x22542
movq 0x1e0(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq %rsp, %rdi
callq 0x162aa
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x22561
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x2257b
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
leaq 0x1c0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x2259c
movq 0x1c0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xe8(%rsp), %rdi
leaq 0xf8(%rsp), %rax
cmpq %rax, %rdi
je 0x225c1
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x7420
xorl %eax, %eax
addq $0x648, %rsp            # imm = 0x648
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x20259(%rip), %rdi     # 0x42835
jmp 0x225ee
leaq 0x20222(%rip), %rdi     # 0x42807
jmp 0x225ee
leaq 0x20230(%rip), %rdi     # 0x4281e
leaq 0x201df(%rip), %rsi     # 0x427d4
leaq 0x201e9(%rip), %rcx     # 0x427e5
movl $0x88, %edx
callq 0x7290
leaq 0x5e8(%rsp), %rdi
leaq 0x30(%rsp), %rsi
callq 0xda38
movq 0x349c9(%rip), %rsi     # 0x56fe8
leaq 0x5e8(%rsp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0xd96b
leaq 0x5e8(%rsp), %rdi
callq 0xd250
movl $0x1, %edi
callq 0x7510
leaq 0x20148(%rip), %rdi     # 0x4279c
leaq 0x20179(%rip), %rsi     # 0x427d4
leaq 0x20183(%rip), %rcx     # 0x427e5
movl $0x83, %edx
callq 0x7290
movq 0x34975(%rip), %rdi     # 0x56fe8
leaq 0x2006a(%rip), %rsi     # 0x426e4
movl $0x15, %edx
callq 0x74b0
movq 0x353c5(%rip), %rsi     # 0x57a50
addq %rbx, %rsi
leaq 0x1ebe9(%rip), %rdx     # 0x4127e
leaq 0x3a0(%rsp), %rdi
callq 0x233b7
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdx
movq 0x3492f(%rip), %rdi     # 0x56fe8
callq 0x74b0
movq %rax, %r14
leaq 0x20032(%rip), %rsi     # 0x426fa
movl $0x4, %edx
movq %rax, %rdi
callq 0x74b0
addq 0x35374(%rip), %rbx     # 0x57a50
leaq 0x2001c(%rip), %rdx     # 0x426ff
movq %rsp, %rdi
movq %rbx, %rsi
callq 0x233b7
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
jmp 0x227a7
movq 0x348d5(%rip), %rdi     # 0x56fe8
leaq 0x1ffca(%rip), %rsi     # 0x426e4
movl $0x15, %edx
callq 0x74b0
movq 0x35325(%rip), %rsi     # 0x57a50
addq %rbx, %rsi
leaq 0x1eb56(%rip), %rdx     # 0x4128b
leaq 0x3a0(%rsp), %rdi
callq 0x233b7
movq 0x3a0(%rsp), %rsi
movq 0x3a8(%rsp), %rdx
movq 0x3488f(%rip), %rdi     # 0x56fe8
callq 0x74b0
movq %rax, %r14
leaq 0x1ff92(%rip), %rsi     # 0x426fa
movl $0x4, %edx
movq %rax, %rdi
callq 0x74b0
addq 0x352d4(%rip), %rbx     # 0x57a50
leaq 0x1ffaf(%rip), %rdx     # 0x42732
movq %rsp, %rdi
movq %rbx, %rsi
callq 0x233b7
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq %r14, %rdi
callq 0x74b0
movq %rax, %rdi
callq 0x71b0
movq %rsp, %rdi
callq 0x7848
leaq 0x3a0(%rsp), %rdi
callq 0x7848
jmp 0x22643
movq 0x34820(%rip), %rdi     # 0x56fe8
leaq 0x1e462(%rip), %rsi     # 0x40c31
movl $0x9, %edx
callq 0x74b0
movq 0x352c8(%rip), %rsi     # 0x57aa8
movq 0x352c9(%rip), %rdx     # 0x57ab0
movq 0x347fa(%rip), %rdi     # 0x56fe8
callq 0x74b0
movq %rax, %rbx
leaq 0x1e08b(%rip), %rsi     # 0x40888
movl $0x20, %edx
movq %rax, %rdi
callq 0x74b0
movq %rbx, %rdi
callq 0x71b0
jmp 0x22643
movq %rax, %r12
callq 0x76a0
jmp 0x22d67
jmp 0x22826
movq %rax, %r12
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x22a81
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22a81
jmp 0x22a7e
jmp 0x22a7e
jmp 0x22859
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x2287e
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x2287e
movq %rax, %r12
movl $0x200, %esi            # imm = 0x200
movq 0x98(%rsp), %rdi
jmp 0x22e0c
movq %rax, %r12
movl $0x208, %esi            # imm = 0x208
movq %rbx, %rdi
jmp 0x22e0c
movq %rax, %r12
jmp 0x22d95
jmp 0x22959
jmp 0x228af
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x228d4
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x228d4
movq %rax, %r12
movl $0x200, %esi            # imm = 0x200
movq 0xa0(%rsp), %rdi
jmp 0x22e0c
jmp 0x22994
jmp 0x228ed
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x22912
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22912
movq %rax, %r12
movl $0x200, %esi            # imm = 0x200
movq 0xa8(%rsp), %rdi
jmp 0x22e0c
jmp 0x22994
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x22e88
movq 0x3b0(%rsp), %rsi
jmp 0x22e80
movq %rax, %r12
jmp 0x22e88
jmp 0x22a7e
jmp 0x22a7e
movq %rax, %r12
jmp 0x22da2
jmp 0x22ca3
jmp 0x22ca3
movq %rax, %r12
leaq 0x600(%rsp), %rdi
callq 0xd250
jmp 0x22d36
jmp 0x22d33
jmp 0x22bb7
jmp 0x22bb7
jmp 0x22bb7
movq %rax, %r12
jmp 0x22e11
jmp 0x22bce
movq %rax, %r12
leaq 0x630(%rsp), %rdi
jmp 0x22d4b
jmp 0x22bce
jmp 0x22cb9
movq %rax, %r12
leaq 0x618(%rsp), %rdi
jmp 0x22d3e
jmp 0x22bb7
jmp 0x22ca3
jmp 0x22ca3
jmp 0x22bb7
jmp 0x22ca3
jmp 0x22a21
jmp 0x22a26
jmp 0x22ca3
jmp 0x22a7e
jmp 0x22ca3
jmp 0x22a21
jmp 0x22ca3
jmp 0x22a21
jmp 0x22ca3
jmp 0x22a7e
jmp 0x22ca3
jmp 0x22a21
jmp 0x22ca3
jmp 0x22a21
jmp 0x22a7e
jmp 0x22a21
jmp 0x22a26
jmp 0x22a21
jmp 0x22a26
jmp 0x22a7e
movq %rax, %r12
jmp 0x22a46
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x22a46
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x22e36
movq 0x10(%rsp), %rsi
jmp 0x22a9a
jmp 0x22cb9
jmp 0x22a66
movq %rax, %r12
jmp 0x22d74
jmp 0x22ca3
jmp 0x22a7e
jmp 0x22a7e
jmp 0x22ca3
jmp 0x22a7e
movq %rax, %r12
movq 0x3a0(%rsp), %rdi
cmpq %rbp, %rdi
je 0x22e36
movq 0x3b0(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22e36
movq %rax, %r12
leaq 0x5e8(%rsp), %rdi
jmp 0x22d58
jmp 0x22cb9
movq %rax, %r12
movq 0x2c8(%rsp), %rdi
leaq 0x2d8(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x2d8(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x288(%rsp), %rdi
leaq 0x298(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x298(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x248(%rsp), %rdi
leaq 0x258(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x258(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x228(%rsp), %rdi
leaq 0x238(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x238(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x2a8(%rsp), %rdi
leaq 0x2b8(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x2b8(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x268(%rsp), %rdi
leaq 0x278(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x278(%rsp), %rsi
jmp 0x22c94
jmp 0x22cb1
movq %rax, %r12
jmp 0x22d43
jmp 0x22cb1
jmp 0x22cb9
movq %rax, %r12
jmp 0x22bf6
movq %rax, %r12
jmp 0x22d50
movq %rax, %r12
movq 0x5b0(%rsp), %rdi
cmpq %rbx, %rdi
je 0x22bf6
movq 0x5c0(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x208(%rsp), %rdi
leaq 0x218(%rsp), %rax
cmpq %rax, %rdi
je 0x22d67
movq 0x218(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22d67
movq %rax, %r12
movq 0x308(%rsp), %rdi
leaq 0x318(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x318(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x2e8(%rsp), %rdi
leaq 0x2f8(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x2f8(%rsp), %rsi
jmp 0x22c94
movq %rax, %r12
movq 0x328(%rsp), %rdi
leaq 0x338(%rsp), %rax
cmpq %rax, %rdi
je 0x22d5d
movq 0x338(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22d5d
jmp 0x22cb1
movq %rax, %r12
jmp 0x22e36
jmp 0x22cb1
jmp 0x22cb1
jmp 0x22cb1
movq %rax, %r12
jmp 0x22d67
movq %rax, %r12
jmp 0x22d5d
movq %rax, %r12
movq 0x1e8(%rsp), %rdi
leaq 0x1f8(%rsp), %rax
cmpq %rax, %rdi
je 0x22d36
movq 0x1f8(%rsp), %rsi
jmp 0x22d25
movq %rax, %r12
movq 0x348(%rsp), %rdi
leaq 0x358(%rsp), %rax
cmpq %rax, %rdi
je 0x22d36
movq 0x358(%rsp), %rsi
jmp 0x22d25
movq %rax, %r12
movq 0x368(%rsp), %rdi
leaq 0x378(%rsp), %rax
cmpq %rax, %rdi
je 0x22d36
movq 0x378(%rsp), %rsi
incq %rsi
callq 0x7420
jmp 0x22d36
jmp 0x22d33
jmp 0x22d33
movq %rax, %r12
leaq 0x148(%rsp), %rdi
callq 0xd250
leaq 0x160(%rsp), %rdi
callq 0xd250
leaq 0x178(%rsp), %rdi
callq 0xd250
leaq 0x30(%rsp), %rdi
callq 0xd250
leaq 0x3a0(%rsp), %rdi
callq 0x1cbc0
leaq 0x1a0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x22d95
movq 0x1a0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0x5d0(%rsp), %rdi
callq 0xd250
leaq 0x138(%rsp), %rax
movq 0x128(%rsp), %rdi
cmpq %rax, %rdi
je 0x22dc7
movq 0x138(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0xc8(%rsp), %rdi
leaq 0xd8(%rsp), %rax
cmpq %rax, %rdi
je 0x22dec
movq 0xd8(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x108(%rsp), %rdi
leaq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x22e11
movq 0x118(%rsp), %rsi
incq %rsi
callq 0x7420
movq 0x1d0(%rsp), %rdi
testq %rdi, %rdi
je 0x22e2e
movq 0x1e0(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq %rsp, %rdi
callq 0x162aa
movq 0x50(%rsp), %rdi
testq %rdi, %rdi
je 0x22e4d
movq 0x60(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
movq 0x70(%rsp), %rdi
testq %rdi, %rdi
je 0x22e67
movq 0x80(%rsp), %rsi
subq %rdi, %rsi
callq 0x7420
leaq 0x1c0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x22e88
movq 0x1c0(%rsp), %rsi
incq %rsi
callq 0x7420
leaq 0xf8(%rsp), %rax
movq 0xe8(%rsp), %rdi
cmpq %rax, %rdi
je 0x22ead
movq 0xf8(%rsp), %rsi
incq %rsi
callq 0x7420
movq %r12, %rdi
callq 0x7740