// File: /workspace/github_cpp_makefile_star2_O2/millanek[P]evo/evo_PBS.cpp
// Function: PBSmain(int, char**)
int PBSmain(int argc, char** argv) {
    parsePBSoptions(argc, argv);
    string line; // for reading the input files
    
    // Load up the annotation file
    Annotation wgAnnotation; std::ifstream* annotFile;
    if (!opt::annotFile.empty()) {
        annotFile = new std::ifstream(opt::annotFile.c_str());
        Annotation Annot(annotFile, false); // Does not use transcripts annotated as 5' or 3' partial
        wgAnnotation = Annot;
    }
    
    std::istream* vcfFile = createReader(opt::vcfFile.c_str());
    std::ifstream* setsFile = new std::ifstream(opt::setsFile.c_str());
    std::ifstream* PBStriosFile = new std::ifstream(opt::PBStriosFile.c_str());
    
    std::map<string, std::vector<string>> popToIDsMap;
    std::map<string, string> IDsToPopMap;
    std::map<string, std::vector<size_t>> popToPosMap;
    std::map<size_t, string> posToPopMap;
    
    // Get the sample sets
    while (getline(*setsFile, line)) {
        // std::cerr << line << std::endl;
        std::vector<string> ID_Pop = split(line, '\t');
        popToIDsMap[ID_Pop[1]].push_back(ID_Pop[0]);
        IDsToPopMap[ID_Pop[0]] = ID_Pop[1];
        //std::cerr << ID_Species[1] << "\t" << ID_Species[0] << std::endl;
    }
    // Get a vector of set names (usually populations/species)
    std::vector<string> populations;
    for(std::map<string,std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
        populations.push_back(it->first);
        // std::cerr << it->first << std::endl;
    } std::cerr << "There are " << populations.size() << " populations " << std::endl;
    
    // Get the PBS trios
    std::vector<std::ofstream*> outFiles;
    std::vector<std::ofstream*> outFilesFixedWindow;
    std::vector<std::ofstream*> outFilesGenes;
    std::vector<std::vector<string> > PBStrios;
    while (getline(*PBStriosFile,line)) {
        // std::cerr << line << std::endl;
        std::vector<string> threePops = split(line, '\t'); assert(threePops.size() == 3);
        std::ofstream* outFile = new std::ofstream(threePops[0] + "_" + threePops[1] + "_" + threePops[2]+ "_PBS_" + opt::runName + "_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
        std::ofstream* outFileFixedWindow = new std::ofstream(threePops[0] + "_" + threePops[1] + "_" + threePops[2]+ "_PBS_" + opt::runName + "_FW" + numToString(opt::fixedWindowSize) + ".txt");
        *outFile << "chr\twStart\twEnd\t" << threePops[0] << "\t" << threePops[1] << "\t" << threePops[2] << std::endl;
        *outFileFixedWindow << "chr\twStart\twEnd\t" << threePops[0] << "\t" << threePops[1] << "\t" << threePops[2] << "\t" << "nFwSNPs1" << "\t" << "nFwSNPs2" << "\t" << "nFwSNPs3" << std::endl;
        //outFile->setf(std::ios_base::fixed); // Avoid scientific notation in the coordinates
        outFiles.push_back(outFile); outFilesFixedWindow.push_back(outFileFixedWindow);
        if (!opt::annotFile.empty()) {
            std::ofstream* outFileGenes = new std::ofstream(threePops[0] + "_" + threePops[1] + "_" + threePops[2]+ "_PBSGenes_" + opt::runName + "_" + numToString(opt::windowSize) + "_" + numToString(opt::windowStep) + ".txt");
           // *outFileGenes << "gene\t" << "numSNPsExons\t" << "numSNPsWithIntrons\t" << "numSNPsWith3kbUpstr\t" << threePops[0] << "_exons\t" << threePops[1] << "_exons\t" << threePops[2] << "_exons\t" << threePops[0] << "_wIntrons\t" << threePops[1] << "_wIntrons\t" << threePops[2] << "_wIntrons\t" << threePops[0] << "_w3kbUpstr\t" << threePops[1] << "_w3kbUpstr\t" << threePops[2] << "_w3kbUpstr" << std::endl;
            *outFileGenes << "gene\t" << "numSNPsExons\tnumSNPsIntrons\tnumSNPs3kbPromoter\t" << threePops[0] << "_exons\t" << threePops[1] << "_exons\t" << threePops[2] << "_exons\t" << threePops[0] << "_wIntrons\t" << threePops[1] << "_wIntrons\t" << threePops[2] << "_wIntrons\t" << threePops[0] << "_promoter\t" << threePops[1] << "_promoter\t" << threePops[2] << "_promoter" << std::endl;
            outFilesGenes.push_back(outFileGenes);
        }
        PBStrios.push_back(threePops);
    }
    
    // And need to prepare the vectors to hold the PBS values and the coordinates:
    std::deque<double> initDeq(opt::windowSize,0.0); // deque to initialise per-site PBS values
    std::vector<std::deque<double>> initThreeDeques(4,initDeq); // vector of three per-site PBS deques - for each population in the trio, and the fourth is for the coordinates
    std::vector<std::vector<std::deque<double>>> PBSresults(PBStrios.size(),initThreeDeques);
    // Fixed window size vectors:
    std::vector<std::vector<double>> initVectorFixed(3);
    std::vector<std::vector<std::vector<double>>> PBSfixedWindowResults(PBStrios.size(),initVectorFixed);
    int currentWindowStart = 0; int currentWindowEnd = currentWindowStart + opt::fixedWindowSize;
    
    // if (!opt::annotFile.empty()) {
    std::vector<std::vector<double>> initGeneVectors(9); // For the nine PBS columns in the _PBSGenes_ files
    std::vector<std::vector<std::vector<double>>> PBSgeneResults(PBStrios.size(),initGeneVectors);
    std::string currentGene = ""; std::string previousGene = "";
    //}
    //std::deque<std::vector<double>> regionPBSnums; regionPBSnums.assign(opt::windowSize,init);
    //std::deque<std::vector<double>> regionPBSdenoms; regionPBSdenoms.assign(opt::windowSize,init);
    //std::vector<double> allPs(populations.size(),0.0);
    int totalVariantNumber = 0;
    std::vector<int> usedVars(PBStrios.size(),0); // Will count the number of used variants for each trio
    std::vector<string> sampleNames; std::vector<std::string> fields;
    int reportProgressEvery = 1000; string chr; string coord; double coordDouble;
    std::clock_t start; std::clock_t startGettingCounts; std::clock_t startCalculation;
    double durationOverall; double durationGettingCounts; double durationCalculation;
    
    while (getline(*vcfFile, line)) {
        line.erase(std::remove(line.begin(), line.end(), '\r'), line.end()); // Deal with any left over \r from files prepared on Windows
        if (line[0] == '#' && line[1] == '#')
            continue;
        else if (line[0] == '#' && line[1] == 'C') {
            fields = split(line, '\t');
            std::vector<std::string> sampleNames(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            // print_vector_stream(sampleNames, std::cerr);
            for (std::vector<std::string>::size_type i = 0; i != sampleNames.size(); i++) {
                posToPopMap[i] = IDsToPopMap[sampleNames[i]];
            }
            // Iterate over all the keys in the map to find the samples in the VCF:
            // Give an error if no sample is found for a species:
            for(std::map<string, std::vector<string>>::iterator it = popToIDsMap.begin(); it != popToIDsMap.end(); ++it) {
                string sp =  it->first;
                //std::cerr << "sp " << sp << std::endl;
                std::vector<string> IDs = it->second;
                std::vector<size_t> spPos = locateSet(sampleNames, IDs);
                if (spPos.empty()) {
                    std::cerr << "Did not find any samples in the VCF for \"" << sp << "\"" << std::endl;
                    assert(!spPos.empty());
                }
                popToPosMap[sp] = spPos;
            }
            start = std::clock();
            //  std::cerr << " " << std::endl;
            //  std::cerr << "Outgroup at pos: "; print_vector_stream(speciesToPosMap["Outgroup"], std::cerr);
            //  std::cerr << "telvit at pos: "; print_vector_stream(speciesToPosMap["telvit"], std::cerr);
        } else {
            totalVariantNumber++;
            if (totalVariantNumber % reportProgressEvery == 0) {
                durationOverall = ( std::clock() - start ) / (double) CLOCKS_PER_SEC;
                std::cerr << "Processed " << totalVariantNumber << " variants in " << durationOverall << "secs" << std::endl;
                std::cerr << "GettingCounts " << durationGettingCounts << " calculation " << durationCalculation << "secs" << std::endl;
            }
            fields = split(line, '\t'); chr = fields[0]; coord = fields[1]; coordDouble = stringToDouble(coord);
            std::vector<std::string> genotypes(fields.begin()+NUM_NON_GENOTYPE_COLUMNS,fields.end());
            
            // Only consider biallelic SNPs
            string refAllele = fields[3]; string altAllele = fields[4]; bool ignoreSite = false;
            if (altAllele == "*") ignoreSite = true;
            if (!opt::allowIndels) {
                if (refAllele.length() > 1 || altAllele.length() > 1) ignoreSite = true;
            }
            if (ignoreSite) {
                refAllele.clear(); refAllele.shrink_to_fit(); altAllele.clear(); altAllele.shrink_to_fit();
                genotypes.clear(); genotypes.shrink_to_fit(); continue;
            }
            
            startGettingCounts = std::clock();
            GeneralSetCounts* c = new GeneralSetCounts(popToPosMap, (int)genotypes.size());
            c->getSetVariantCountsSimple(genotypes, posToPopMap);
            genotypes.clear(); genotypes.shrink_to_fit();
            durationGettingCounts = ( std::clock() - startGettingCounts ) / (double) CLOCKS_PER_SEC;
            // std::cerr << "Here:" << totalVariantNumber << std::endl;
            if (opt::af) {
                std::ofstream* outFileAF = new std::ofstream(stripExtension(opt::setsFile) + "_AF" + ".txt");
                *outFileAF << chr << "\t" << coord << "\t" << refAllele << "\t" << altAllele;
                for(std::map<string,double>::iterator iter =  c->setAAFs.begin(); iter != c->setAAFs.end(); ++iter) {
                    *outFileAF << "\t" << iter->second;
                }
                *outFileAF << "\n";
            }
            
            startCalculation = std::clock();
            
            
           // for (std::vector<std::string>::size_type i = 0; i != populations.size(); i++) {
           //     allPs[i] = c->setAAFs.at(populations[i]);
           // }
            // durationFirstLoop = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            
            // find if we are in a gene:
            std::vector<string> SNPgeneDetails = wgAnnotation.getSNPgeneDetails(chr, atoi(coord.c_str()));
            if (SNPgeneDetails[0] != "") {
                currentGene = SNPgeneDetails[0];
                if (previousGene == "") previousGene = currentGene;
            }
            
            // Check if we are still in the same physical window...
            if (coordDouble > currentWindowEnd || coordDouble < currentWindowStart) {
                for (int i = 0; i != PBStrios.size(); i++) {
                    int nFwSNPs1 = (int)PBSfixedWindowResults[i][0].size(); int nFwSNPs2 = (int)PBSfixedWindowResults[i][1].size(); int nFwSNPs3 = (int)PBSfixedWindowResults[i][2].size();
                    double PBSfw1 = 0; if (nFwSNPs1 > 0) { PBSfw1 = vector_average(PBSfixedWindowResults[i][0]); }
                    double PBSfw2 = 0; if (nFwSNPs2 > 0) { PBSfw2 = vector_average(PBSfixedWindowResults[i][1]); }
                    double PBSfw3 = 0; if (nFwSNPs3 > 0) { PBSfw3 = vector_average(PBSfixedWindowResults[i][2]); }
                    *outFilesFixedWindow[i] << chr << "\t" << currentWindowStart << "\t" << currentWindowEnd << "\t" << PBSfw1 << "\t" << PBSfw2 << "\t" << PBSfw3 << "\t" << nFwSNPs1 << "\t" << nFwSNPs2 << "\t" << nFwSNPs3 << std::endl;
                    PBSfixedWindowResults[i][0].clear(); PBSfixedWindowResults[i][1].clear(); PBSfixedWindowResults[i][2].clear();
                }
                if (coordDouble > currentWindowEnd) {
                    currentWindowStart = currentWindowStart + opt::fixedWindowSize; currentWindowEnd = currentWindowEnd + opt::fixedWindowSize;
                } else if (coordDouble < currentWindowStart) {
                    currentWindowStart = 0; currentWindowEnd = 0 + opt::fixedWindowSize;
                }
            }
            
            // std::cerr << coord << "\t";
            // print_vector_stream(SNPgeneDetails, std::cerr);
            // Now calculate the PBS stats:
            double p1; double p2; double p3;
            for (int i = 0; i != PBStrios.size(); i++) {
                p1 = c->setAAFs.at(PBStrios[i][0]); //assert(p_S1 == pS1test);
                if (p1 == -1) continue;  // If any member of the trio has entirely missing data, just move on to the next trio
                p2 = c->setAAFs.at(PBStrios[i][1]); //assert(p_S2 == pS2test);
                if (p2 == -1) continue;
                p3 = c->setAAFs.at(PBStrios[i][2]); // assert(p_S3 == pS3test);
                if (p3 == -1) continue;
                
                if (p1 == 0 && p2 == 0 && p3 == 0) { continue; }
                if (p1 == 1 && p2 == 1 && p3 == 1) { continue; }
                usedVars[i]++;
                
                std::vector<double> thisSNP_PBS = calculatePBSfromAFs(p1,p2,p3,
                                                                      c->setAlleleCounts.at(PBStrios[i][0]),
                                                                      c->setAlleleCounts.at(PBStrios[i][1]),
                                                                      c->setAlleleCounts.at(PBStrios[i][2]));
                
                PBSresults[i][0].push_back(thisSNP_PBS[0]); PBSresults[i][1].push_back(thisSNP_PBS[1]); PBSresults[i][2].push_back(thisSNP_PBS[2]);
                PBSresults[i][3].push_back(stringToDouble(coord));
                PBSresults[i][0].pop_front(); PBSresults[i][1].pop_front(); PBSresults[i][2].pop_front(); PBSresults[i][3].pop_front();
                
                
                PBSfixedWindowResults[i][0].push_back(thisSNP_PBS[0]); PBSfixedWindowResults[i][1].push_back(thisSNP_PBS[1]); PBSfixedWindowResults[i][2].push_back(thisSNP_PBS[2]);
                
                if (!opt::annotFile.empty()) { if (SNPgeneDetails[0] != "") {
                    if (SNPgeneDetails[1] == "exon") {
                        PBSgeneResults[i][0].push_back(thisSNP_PBS[0]); PBSgeneResults[i][1].push_back(thisSNP_PBS[1]); PBSgeneResults[i][2].push_back(thisSNP_PBS[2]);
                    } else if (SNPgeneDetails[1] == "intron") {
                        PBSgeneResults[i][3].push_back(thisSNP_PBS[0]); PBSgeneResults[i][4].push_back(thisSNP_PBS[1]); PBSgeneResults[i][5].push_back(thisSNP_PBS[2]);
                    } else if (SNPgeneDetails[1] == "promoter") {
                        PBSgeneResults[i][6].push_back(thisSNP_PBS[0]); PBSgeneResults[i][7].push_back(thisSNP_PBS[1]); PBSgeneResults[i][8].push_back(thisSNP_PBS[2]);
                    }
                }}
                if (usedVars[i] > opt::windowSize && (usedVars[i] % opt::windowStep == 0)) {
                    // std::cerr << PBSresults[i][0][0] << std::endl;
                    *outFiles[i] << chr << "\t" << (int)PBSresults[i][3][0] << "\t" << coord << "\t" << vector_average(PBSresults[i][0]) << "\t" << vector_average(PBSresults[i][1]) << "\t" << vector_average(PBSresults[i][2]) << std::endl;
                }
                // }
            }
            if (!opt::annotFile.empty()) { if (previousGene != "" && currentGene != previousGene) {
                for (int i = 0; i != PBStrios.size(); i++) {
                    int nExonSNPs = (int)PBSgeneResults[i][0].size(); int nIntronSNPs = (int)PBSgeneResults[i][3].size(); int nPromoterSNPs = (int)PBSgeneResults[i][6].size();
                    double ExonPBS1 = 0; double ExonPBS2 = 0; double ExonPBS3 = 0;
                    if (nExonSNPs > 0) { ExonPBS1 = vector_average(PBSgeneResults[i][0]); ExonPBS2 = vector_average(PBSgeneResults[i][1]); ExonPBS3 = vector_average(PBSgeneResults[i][2]);}
                    double IntronPBS1 = 0; double IntronPBS2 = 0; double IntronPBS3 = 0;
                    if (nIntronSNPs > 0) { IntronPBS1 = vector_average(PBSgeneResults[i][3]); IntronPBS2 = vector_average(PBSgeneResults[i][4]); IntronPBS3 = vector_average(PBSgeneResults[i][5]);}
                    double PromoterPBS1 = 0; double PromoterPBS2 = 0; double PromoterPBS3 = 0;
                    if (nPromoterSNPs > 0) { PromoterPBS1 = vector_average(PBSgeneResults[i][6]); PromoterPBS2 = vector_average(PBSgeneResults[i][7]); PromoterPBS3 = vector_average(PBSgeneResults[i][8]);}
                    *outFilesGenes[i] << previousGene << "\t" << nExonSNPs << "\t" << nIntronSNPs << "\t" << nPromoterSNPs << "\t" << ExonPBS1 << "\t" << ExonPBS2 << "\t" << ExonPBS3 << "\t" << IntronPBS1 << "\t" << IntronPBS2 << "\t" << IntronPBS3 << "\t" << PromoterPBS1 << "\t" << PromoterPBS2 << "\t" << PromoterPBS3 << std::endl;
                    for (int j = 0; j <= 8; j++) { PBSgeneResults[i][j].clear(); }
                }
                previousGene = currentGene;
            }}
            
            
            durationCalculation = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            delete c;
        }
    }
    
    return 0;
    
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x808, %rsp            # imm = 0x808
callq 0x7e62c
leaq 0x750(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x780(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x7b0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x7e0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x1e0(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movb $0x0, (%rax)
xorl %eax, %eax
cmpq %rax, 0x632a1(%rip)     # 0xdee38
je 0x7bbf4
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
movq 0x63283(%rip), %rsi     # 0xdee30
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
leaq 0x3a0(%rsp), %rsi
movq %r14, (%rsi)
leaq 0x3a8(%rsp), %rdi
xorl %edx, %edx
callq 0x32000
leaq 0x748(%rsp), %rdi
leaq 0x3a8(%rsp), %rsi
callq 0x70d3a
leaq 0x3a8(%rsp), %rdi
callq 0x32212
movq 0x631d5(%rip), %rsi     # 0xdedd0
leaq 0x3a8(%rsp), %rdi
leaq 0x350(%rsp), %rdx
callq 0x21904
leaq 0x3a8(%rsp), %rdi
pushq $0x8
popq %rsi
callq 0x42587
movq %rax, 0x2a8(%rsp)
leaq 0x3a8(%rsp), %rdi
callq 0x8978
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq %rax, %r14
movq 0x631a7(%rip), %rsi     # 0xdedf0
pushq $0x8
popq %rdx
movq %rax, %rdi
callq 0x8890
movl $0x208, %edi            # imm = 0x208
callq 0x8490
movq 0x631ab(%rip), %rsi     # 0xdee10
pushq $0x8
popq %rdx
movq %rax, 0x8(%rsp)
movq %rax, %rdi
callq 0x8890
leaq 0x358(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x4d0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x4a0(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x470(%rsp), %rax
andl $0x0, (%rax)
andq $0x0, 0x8(%rax)
movq %rax, 0x10(%rax)
movq %rax, 0x18(%rax)
andq $0x0, 0x20(%rax)
leaq 0x1d0(%rsp), %rbx
leaq 0x3a8(%rsp), %r15
leaq 0x350(%rsp), %r12
leaq 0x4c8(%rsp), %r13
movq %r14, %rdi
movq %rbx, %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7bd80
movq %r15, %rdi
movq %rbx, %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x3a8(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x3abd8
movq 0x3a8(%rsp), %rsi
movq %rax, %rdi
callq 0x2b0a4
movq 0x3a8(%rsp), %rbp
movq %r13, %rdi
movq %rbp, %rsi
callq 0x3210e
addq $0x20, %rbp
movq %rax, %rdi
movq %rbp, %rsi
callq 0x82a0
movq %r15, %rdi
callq 0x28a08
jmp 0x7bd09
xorpd %xmm0, %xmm0
leaq 0x330(%rsp), %rbx
movapd %xmm0, (%rbx)
andq $0x0, 0x10(%rbx)
movq 0x368(%rsp), %r14
leaq 0x358(%rsp), %rax
cmpq %rax, %r14
je 0x7bdc3
leaq 0x20(%r14), %rsi
movq %rbx, %rdi
callq 0x2b0a4
movq %r14, %rdi
callq 0x8340
movq %rax, %r14
jmp 0x7bd9d
movq 0x6121e(%rip), %rdi     # 0xdcfe8
leaq 0x363f0(%rip), %rsi     # 0xb21c1
callq 0x8480
movq 0x338(%rsp), %rsi
subq 0x330(%rsp), %rsi
sarq $0x5, %rsi
movq %rax, %rdi
callq 0x8320
leaq 0x246db(%rip), %rsi     # 0xa04d4
movq %rax, %rdi
callq 0x8480
movq %rax, %rdi
callq 0x8230
xorpd %xmm0, %xmm0
leaq 0x310(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
leaq 0x2f0(%rsp), %rax
andq $0x0, 0x10(%rax)
leaq 0x2d0(%rsp), %rcx
andq $0x0, 0x10(%rcx)
movapd %xmm0, (%rax)
movapd %xmm0, (%rcx)
leaq 0x70(%rsp), %rax
movapd %xmm0, (%rax)
andq $0x0, 0x10(%rax)
leaq 0x2b0(%rsp), %r14
leaq 0x190(%rsp), %r13
movq 0x8(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7c700
movq %r13, %r12
leaq 0x10(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq 0x10(%rsp), %rbx
movq 0x18(%rsp), %rax
subq %rbx, %rax
cmpq $0x60, %rax
jne 0x7dfe1
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbp
movq %r14, %rdi
movq %rbx, %rsi
leaq 0x278f1(%rip), %rdx     # 0xa37bc
callq 0x28806
movq 0x10(%rsp), %rdx
addq $0x20, %rdx
leaq 0x1f0(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x287e7
leaq 0x40(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x278be(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x10(%rsp), %rdx
addq $0x40, %rdx
leaq 0xc0(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x287e7
leaq 0xe0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x3350c(%rip), %rdx     # 0xaf440
callq 0x28a29
leaq 0xa0(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x62f02(%rip), %rdx     # 0xdee50
callq 0x287e7
leaq 0x140(%rsp), %rdi
movq %rbx, %rsi
leaq 0x27857(%rip), %rdx     # 0xa37bc
callq 0x28a29
movl 0x61688(%rip), %esi     # 0xdd5f8
leaq 0x120(%rsp), %rbx
movq %rbx, %rdi
callq 0x28ad3
leaq 0x170(%rsp), %r13
movq %r13, %rdi
leaq 0x140(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
leaq 0x2780f(%rip), %rdx     # 0xa37bc
callq 0x28a29
movl 0x61644(%rip), %esi     # 0xdd5fc
leaq 0x240(%rsp), %rbx
movq %rbx, %rdi
callq 0x28ad3
movq %r12, %r13
movq %r12, %rdi
leaq 0x100(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0x3a8(%rsp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x30e32(%rip), %rdx     # 0xace25
callq 0x28a29
movq %rbp, %rdi
movq %r15, %rsi
pushq $0x10
popq %rdx
callq 0x8900
movq %r15, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xc0(%rsp), %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %rbp, 0x278(%rsp)
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbp
movq 0x10(%rsp), %rsi
leaq 0x40(%rsp), %rbx
movq %rbx, %rdi
leaq 0x276f6(%rip), %rdx     # 0xa37bc
callq 0x28806
movq 0x10(%rsp), %rdx
addq $0x20, %rdx
leaq 0xc0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x287e7
leaq 0xe0(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x276c0(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x10(%rsp), %rdx
addq $0x40, %rdx
leaq 0xa0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
callq 0x287e7
leaq 0x140(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x3330e(%rip), %rdx     # 0xaf440
callq 0x28a29
leaq 0x170(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x62d04(%rip), %rdx     # 0xdee50
callq 0x287e7
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
leaq 0x33a96(%rip), %rdx     # 0xafbf9
callq 0x28a29
movl 0x61492(%rip), %esi     # 0xdd600
leaq 0x1f0(%rsp), %rbx
movq %rbx, %rdi
callq 0x28ad3
movq %r12, %r13
movq %r12, %rdi
leaq 0x100(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0x3a8(%rsp), %r15
movq %r15, %rdi
movq %r13, %rsi
leaq 0x30c7c(%rip), %rdx     # 0xace25
callq 0x28a29
movq %rbp, %rdi
movq %r15, %rsi
pushq $0x10
popq %rdx
callq 0x8900
movq %r15, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xc0(%rsp), %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
callq 0x8978
movq %rbp, 0x88(%rsp)
movq 0x278(%rsp), %rdi
leaq 0x331fe(%rip), %rsi     # 0xaf446
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1dbba(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1db9a(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
callq 0x8230
movq 0x88(%rsp), %rdi
leaq 0x33195(%rip), %rsi     # 0xaf446
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1db51(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1db31(%rip), %rsi     # 0x99e1e
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x1db11(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x3313b(%rip), %rsi     # 0xaf457
callq 0x8480
movq %rax, %rdi
leaq 0x1daf3(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x33126(%rip), %rsi     # 0xaf460
callq 0x8480
movq %rax, %rdi
leaq 0x1dad5(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x33111(%rip), %rsi     # 0xaf469
callq 0x8480
movq %rax, %rdi
callq 0x8230
leaq 0x310(%rsp), %rdi
leaq 0x278(%rsp), %rsi
callq 0x7e948
leaq 0x2f0(%rsp), %rdi
leaq 0x88(%rsp), %rsi
callq 0x7e948
cmpq $0x0, 0x62aa1(%rip)     # 0xdee38
je 0x7c6e2
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %rbp
movq 0x10(%rsp), %rsi
movq %r14, %rdi
leaq 0x27403(%rip), %rdx     # 0xa37bc
callq 0x28806
movq 0x10(%rsp), %rdx
addq $0x20, %rdx
leaq 0x1f0(%rsp), %rbx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x287e7
leaq 0x40(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x273d0(%rip), %rdx     # 0xa37bc
callq 0x28a29
movq 0x10(%rsp), %rdx
addq $0x40, %rdx
leaq 0xc0(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
callq 0x287e7
leaq 0xe0(%rsp), %r13
movq %r13, %rdi
movq %rbx, %rsi
leaq 0x33050(%rip), %rdx     # 0xaf472
callq 0x28a29
leaq 0xa0(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
leaq 0x62a14(%rip), %rdx     # 0xdee50
callq 0x287e7
leaq 0x140(%rsp), %rdi
movq %rbx, %rsi
leaq 0x27369(%rip), %rdx     # 0xa37bc
callq 0x28a29
movl 0x6119a(%rip), %esi     # 0xdd5f8
leaq 0x120(%rsp), %rbx
movq %rbx, %rdi
callq 0x28ad3
leaq 0x170(%rsp), %r13
movq %r13, %rdi
leaq 0x140(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0x100(%rsp), %rdi
movq %r13, %rsi
leaq 0x27321(%rip), %rdx     # 0xa37bc
callq 0x28a29
movl 0x61156(%rip), %esi     # 0xdd5fc
leaq 0x240(%rsp), %rbx
movq %rbx, %rdi
callq 0x28ad3
movq %r12, %rdi
leaq 0x100(%rsp), %rsi
movq %rbx, %rdx
callq 0x28a48
leaq 0x3a8(%rsp), %r15
movq %r15, %rdi
movq %r12, %rsi
leaq 0x30947(%rip), %rdx     # 0xace25
callq 0x28a29
movq %r12, %r13
movq %rbp, %rdi
movq %r15, %rsi
pushq $0x10
popq %rdx
callq 0x8900
movq %r15, %rdi
callq 0x8978
movq %r13, %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xc0(%rsp), %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
movq %r14, %rdi
callq 0x8978
movq %rbp, 0x260(%rsp)
movq %rbp, %rdi
leaq 0x32ee0(%rip), %rsi     # 0xaf47d
callq 0x8480
movq %rax, %rdi
leaq 0x32ed7(%rip), %rsi     # 0xaf483
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32eeb(%rip), %rsi     # 0xaf4b3
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32ecb(%rip), %rsi     # 0xaf4b3
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32eab(%rip), %rsi     # 0xaf4b3
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e97(%rip), %rsi     # 0xaf4bb
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e77(%rip), %rsi     # 0xaf4bb
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e57(%rip), %rsi     # 0xaf4bb
callq 0x8480
movq 0x10(%rsp), %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e46(%rip), %rsi     # 0xaf4c6
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x20, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e26(%rip), %rsi     # 0xaf4c6
callq 0x8480
movq 0x10(%rsp), %rsi
addq $0x40, %rsi
movq %rax, %rdi
callq 0x8430
movq %rax, %rdi
leaq 0x32e11(%rip), %rsi     # 0xaf4d1
callq 0x8480
movq %rax, %rdi
callq 0x8230
leaq 0x2d0(%rsp), %rdi
leaq 0x260(%rsp), %rsi
callq 0x7e948
leaq 0x70(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x29502
leaq 0x10(%rsp), %rdi
callq 0x28a08
jmp 0x7be5e
movslq 0x60ef1(%rip), %rsi     # 0xdd5f8
leaq 0x190(%rsp), %rdx
andq $0x0, (%rdx)
leaq 0x3a8(%rsp), %rdi
leaq 0x100(%rsp), %rcx
callq 0x7e966
leaq 0x2b0(%rsp), %rdi
pushq $0x4
popq %rsi
leaq 0x3a8(%rsp), %rdx
leaq 0x190(%rsp), %rcx
callq 0x7e9c2
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
pushq $0x18
popq %r13
cqto
idivq %r13
leaq 0x120(%rsp), %rdi
leaq 0x2b0(%rsp), %rdx
leaq 0x190(%rsp), %rcx
movq %rax, %rsi
callq 0x7ea18
leaq 0x240(%rsp), %rdi
pushq $0x3
popq %rsi
leaq 0x190(%rsp), %rdx
callq 0x79832
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
cqto
idivq %r13
leaq 0x10(%rsp), %rdi
leaq 0x240(%rsp), %rdx
leaq 0x190(%rsp), %rcx
movq %rax, %rsi
callq 0x79c18
movl 0x60e3b(%rip), %eax     # 0xdd600
movl %eax, 0x38(%rsp)
leaq 0x278(%rsp), %rdi
pushq $0x9
popq %rsi
leaq 0x190(%rsp), %rdx
callq 0x79832
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
cqto
idivq %r13
leaq 0x88(%rsp), %rdi
leaq 0x278(%rsp), %rdx
leaq 0x190(%rsp), %rcx
movq %rax, %rsi
callq 0x79c18
leaq 0x1d608(%rip), %rsi     # 0x99e1f
leaq 0x190(%rsp), %rdi
leaq 0x100(%rsp), %rdx
callq 0x21904
leaq 0x1d5ec(%rip), %rsi     # 0x99e1f
leaq 0x100(%rsp), %rdi
leaq 0x170(%rsp), %rdx
callq 0x21904
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
cqto
idivq %r13
leaq 0x170(%rsp), %rdx
andl $0x0, (%rdx)
leaq 0x260(%rsp), %rdi
leaq 0x140(%rsp), %rcx
movq %rax, %rsi
callq 0x438a0
andq $0x0, 0x390(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x380(%rsp)
leaq 0x1b0(%rsp), %r14
movapd %xmm0, (%r14)
andq $0x0, 0x10(%r14)
leaq 0x180(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
xorl %ecx, %ecx
movb %cl, (%rax)
leaq 0x150(%rsp), %rax
movq %rax, -0x10(%rax)
andq $0x0, -0x8(%rax)
movq $0x0, 0x1c8(%rsp)
movb %cl, (%rax)
leaq 0x140(%rsp), %r12
movl $0x0, 0x3c(%rsp)
movq 0x2a8(%rsp), %rdi
leaq 0x1d0(%rsp), %rsi
callq 0x80a0
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x7de8e
movq 0x1d0(%rsp), %rdi
movq 0x1d8(%rsp), %rsi
addq %rdi, %rsi
movb $0xd, 0xa0(%rsp)
leaq 0xa0(%rsp), %rdx
callq 0x61a56
movq 0x1d0(%rsp), %rdx
addq 0x1d8(%rsp), %rdx
leaq 0x1d0(%rsp), %rdi
movq %rax, %rsi
callq 0x80f0
movq 0x1d0(%rsp), %rax
cmpb $0x23, (%rax)
jne 0x7ca40
movzbl 0x1(%rax), %eax
cmpl $0x23, %eax
je 0x7c8e6
cmpl $0x43, %eax
jne 0x7ca40
leaq 0xa0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1d0(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2f6c0
movq %rbx, %rdi
callq 0x28a08
movq 0x1b0(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x1b8(%rsp), %rdx
leaq 0xe0(%rsp), %rdi
movq %rbx, %rcx
callq 0x613fe
xorl %eax, %eax
movq %rax, 0xa0(%rsp)
movq 0xe0(%rsp), %rsi
movq 0xe8(%rsp), %rcx
subq %rsi, %rcx
sarq $0x5, %rcx
cmpq %rcx, %rax
je 0x7cea0
shlq $0x5, %rax
addq %rax, %rsi
leaq 0x4c8(%rsp), %rdi
callq 0x3210e
movq %rax, %rbx
leaq 0x468(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x4a546
movq %rax, %rdi
movq %rbx, %rsi
callq 0x82a0
movq 0xa0(%rsp), %rax
incq %rax
jmp 0x7c9d4
movq 0x1c8(%rsp), %rax
incl %eax
movq %rax, 0x1c8(%rsp)
cltd
movl $0x3e8, %ecx            # imm = 0x3E8
idivl %ecx
testl %edx, %edx
jne 0x7cb31
callq 0x8310
subq 0x290(%rsp), %rax
cvtsi2sd %rax, %xmm0
divsd 0x2090c(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x30(%rsp)
movq 0x6055f(%rip), %rdi     # 0xdcfe8
leaq 0x23c16(%rip), %rsi     # 0xa06a6
callq 0x8480
movq %rax, %rdi
movq 0x1c8(%rsp), %rsi
callq 0x8840
movq %rax, %rdi
leaq 0x26aff(%rip), %rsi     # 0xa35ae
callq 0x8480
movq %rax, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x29b2a(%rip), %rsi     # 0xa65f6
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x60508(%rip), %rdi     # 0xdcfe8
leaq 0x30bb8(%rip), %rsi     # 0xad69f
callq 0x8480
movq %rax, %rdi
movsd 0x298(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x30ba7(%rip), %rsi     # 0xad6ae
callq 0x8480
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x29ad2(%rip), %rsi     # 0xa65f6
callq 0x8480
movq %rax, %rdi
callq 0x8230
leaq 0xa0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x1d0(%rsp), %rsi
pushq $0x9
popq %rdx
callq 0x40349
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2f6c0
movq %rbx, %rdi
callq 0x28a08
movq 0x1b0(%rsp), %rsi
leaq 0x170(%rsp), %rdi
callq 0x82a0
movq 0x1b0(%rsp), %rsi
addq $0x20, %rsi
movq %r12, %rdi
callq 0x82a0
leaq 0x518(%rsp), %rdi
movq %r12, %rsi
callq 0x8600
leaq 0x518(%rsp), %rbx
movq %rbx, %rdi
callq 0x402aa
movsd %xmm0, 0x60(%rsp)
movq %rbx, %rdi
callq 0x8978
movq 0x1b0(%rsp), %rsi
movl $0x120, %eax            # imm = 0x120
addq %rax, %rsi
movq 0x1b8(%rsp), %rdx
leaq 0x228(%rsp), %rdi
leaq 0xa0(%rsp), %rbx
movq %rbx, %rcx
callq 0x613fe
movq 0x1b0(%rsp), %rsi
addq $0x60, %rsi
movq %rbx, %rdi
callq 0x8600
movq 0x1b0(%rsp), %rsi
subq $-0x80, %rsi
leaq 0xe0(%rsp), %rbx
movq %rbx, %rdi
callq 0x8600
movq %rbx, %rdi
leaq 0x34d86(%rip), %rsi     # 0xb19a6
callq 0x2193f
cmpb $0x0, 0x62244(%rip)     # 0xdee70
je 0x7ce19
testb %al, %al
jne 0x7ce3b
callq 0x8310
movq %rax, %rbx
movl $0x240, %edi            # imm = 0x240
callq 0x8490
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %r14
movq 0x230(%rsp), %rdx
subq 0x228(%rsp), %rdx
shrq $0x5, %rdx
movq %r14, %rdi
leaq 0x498(%rsp), %rsi
callq 0x61430
movq %r14, 0x210(%rsp)
movq %r14, %rdi
leaq 0x228(%rsp), %rsi
leaq 0x468(%rsp), %rdx
callq 0x3ff64
leaq 0x228(%rsp), %r15
movq %r15, %rdi
callq 0x32680
movq %r15, %rdi
callq 0x61b78
callq 0x8310
subq %rbx, %rax
cvtsi2sd %rax, %xmm0
divsd 0x206c1(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x298(%rsp)
cmpb $0x1, 0x6219a(%rip)     # 0xdee71
jne 0x7cfcd
movl $0x200, %edi            # imm = 0x200
callq 0x8490
movq %rax, %r12
leaq 0x1f0(%rsp), %rbx
movq %rbx, %rdi
leaq 0x620f4(%rip), %rsi     # 0xdedf0
callq 0x404d7
leaq 0x40(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rsi
leaq 0x327c8(%rip), %rdx     # 0xaf4db
callq 0x28a29
leaq 0xc0(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
leaq 0x300f8(%rip), %rdx     # 0xace25
callq 0x28a29
movq %r12, %rdi
movq %rbx, %rsi
pushq $0x10
popq %rdx
callq 0x8900
movq %rbx, %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
movq %r12, %rdi
leaq 0x170(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1d0a5(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x140(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1d086(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xa0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1d067(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0xe0(%rsp), %rsi
callq 0x8430
movq 0x210(%rsp), %rax
movq 0xf8(%rax), %rbx
movq 0x28(%rsp), %rax
leaq 0xe8(%rax), %r15
cmpq %r15, %rbx
je 0x7cfbe
movq %r12, %rdi
leaq 0x1d024(%rip), %rsi     # 0x99e1e
callq 0x8480
movsd 0x40(%rbx), %xmm0
movq %rax, %rdi
callq 0x8750
movq %rbx, %rdi
callq 0x8340
movq %rax, %rbx
jmp 0x7cde7
cmpq $0x2, 0xa8(%rsp)
setae %cl
cmpq $0x2, 0xe8(%rsp)
setae %dl
orb %cl, %dl
orb %dl, %al
je 0x7cc3a
andq $0x0, 0xa8(%rsp)
movq 0xa0(%rsp), %rax
xorl %ebx, %ebx
movb %bl, (%rax)
leaq 0xa0(%rsp), %r15
movq %r15, %rdi
callq 0x8930
andq $0x0, 0xe8(%rsp)
movq 0xe0(%rsp), %rax
movb %bl, (%rax)
leaq 0xe0(%rsp), %r12
movq %r12, %rdi
callq 0x8930
leaq 0x228(%rsp), %rbp
movq %rbp, %rdi
callq 0x32680
movq %rbp, %rdi
callq 0x61b78
jmp 0x7de5f
movq 0x368(%rsp), %rbx
leaq 0x358(%rsp), %rax
cmpq %rax, %rbx
je 0x7cf9f
leaq 0x20(%rbx), %rsi
leaq 0xa0(%rsp), %rdi
callq 0x8600
leaq 0x40(%rbx), %rsi
leaq 0xc0(%rsp), %r15
movq %r15, %rdi
callq 0x297dc
leaq 0x40(%rsp), %rdi
leaq 0xe0(%rsp), %rsi
movq %r15, %rdx
callq 0x427bd
movq 0x40(%rsp), %rax
cmpq 0x48(%rsp), %rax
jne 0x7cf49
movq 0x600e2(%rip), %rdi     # 0xdcfe8
leaq 0x2372e(%rip), %rsi     # 0xa063b
callq 0x8480
movq %rax, %rdi
leaq 0xa0(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x22403(%rip), %rsi     # 0x9f32f
callq 0x8480
movq %rax, %rdi
callq 0x8230
movq 0x40(%rsp), %rax
cmpq 0x48(%rsp), %rax
je 0x7e000
leaq 0x498(%rsp), %rdi
leaq 0xa0(%rsp), %rsi
callq 0x4a596
movq %rax, %rdi
leaq 0x40(%rsp), %rsi
callq 0x4a5fc
leaq 0x40(%rsp), %rdi
callq 0x2f68c
leaq 0xc0(%rsp), %rdi
callq 0x28a08
leaq 0xa0(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8340
movq %rax, %rbx
jmp 0x7cea8
callq 0x8310
movq %rax, 0x290(%rsp)
leaq 0xe0(%rsp), %rdi
callq 0x28a08
jmp 0x7c8e6
movq %r12, %rdi
leaq 0x16985(%rip), %rsi     # 0x9394d
callq 0x8480
callq 0x8310
movq %rax, %rbx
movq 0x140(%rsp), %rdi
callq 0x86f0
leaq 0xc0(%rsp), %rdi
leaq 0x748(%rsp), %rsi
leaq 0x170(%rsp), %rdx
movl %eax, %ecx
callq 0x46bec
movq 0xc0(%rsp), %rdi
leaq 0x1ce0f(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x7d05b
movq 0xc0(%rsp), %rsi
leaq 0x190(%rsp), %rdi
callq 0x82a0
leaq 0x100(%rsp), %rdi
leaq 0x1cde2(%rip), %rsi     # 0x99e1f
callq 0x2193f
testb %al, %al
je 0x7d05b
leaq 0x100(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x82a0
cvtsi2sdl 0x38(%rsp), %xmm1
movsd 0x60(%rsp), %xmm0
movsd %xmm1, 0x168(%rsp)
ucomisd %xmm1, %xmm0
cvtsi2sdl 0x3c(%rsp), %xmm1
movq %rbx, 0x2a0(%rsp)
ja 0x7d08e
ucomisd %xmm0, %xmm1
jbe 0x7d320
movsd %xmm1, 0x160(%rsp)
xorl %r15d, %r15d
xorl %r13d, %r13d
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %r13
je 0x7d2d6
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rsi
movq 0x8(%rsi), %rbp
movq 0x20(%rsi), %r12
subq (%rsi), %rbp
subq 0x18(%rsi), %r12
movq 0x38(%rsi), %rbx
subq 0x30(%rsi), %rbx
shrq $0x3, %rbp
xorpd %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
movsd %xmm0, 0x8(%rsp)
testl %ebp, %ebp
jle 0x7d116
leaq 0x730(%rsp), %r14
movq %r14, %rdi
callq 0x2f816
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x8(%rsp)
movq %r14, %rdi
callq 0x2b43c
shrq $0x3, %r12
testl %r12d, %r12d
jle 0x7d152
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rsi
addq $0x18, %rsi
leaq 0x718(%rsp), %r14
movq %r14, %rdi
callq 0x2f816
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x30(%rsp)
movq %r14, %rdi
callq 0x2b43c
shrq $0x3, %rbx
testl %ebx, %ebx
jle 0x7d194
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rsi
addq $0x30, %rsi
leaq 0x610(%rsp), %rdi
callq 0x2f816
leaq 0x610(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x68(%rsp)
movq %r14, %rdi
callq 0x2b43c
jmp 0x7d19e
xorpd %xmm0, %xmm0
movsd %xmm0, 0x68(%rsp)
movq 0x2f0(%rsp), %rax
movq (%rax,%r13,8), %rdi
leaq 0x170(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1cc5d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl 0x3c(%rsp), %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1cc42(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl 0x38(%rsp), %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1cc27(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1cc0a(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1cbed(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1cbd0(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %ebp, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1cbb7(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %r12d, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1cb9d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
callq 0x8230
movq 0x10(%rsp), %rax
movq (%rax,%r15), %rax
movq (%rax), %rcx
cmpq %rcx, 0x8(%rax)
je 0x7d2ae
movq %rcx, 0x8(%rax)
movq 0x18(%rax), %rcx
cmpq %rcx, 0x20(%rax)
je 0x7d2bc
movq %rcx, 0x20(%rax)
movq 0x30(%rax), %rcx
cmpq %rcx, 0x38(%rax)
je 0x7d2ca
movq %rcx, 0x38(%rax)
incq %r13
addq $0x18, %r15
jmp 0x7d09d
movsd 0x60(%rsp), %xmm0
ucomisd 0x168(%rsp), %xmm0
jbe 0x7d2fb
movl 0x60313(%rip), %eax     # 0xdd600
addl %eax, 0x3c(%rsp)
addl %eax, 0x38(%rsp)
pushq $0x18
popq %r13
jmp 0x7d320
movsd 0x160(%rsp), %xmm1
ucomisd %xmm0, %xmm1
pushq $0x18
popq %r13
jbe 0x7d320
movl $0x0, 0x3c(%rsp)
movl 0x602e4(%rip), %eax     # 0xdd600
movl %eax, 0x38(%rsp)
movq 0x28(%rsp), %rax
leaq 0xe0(%rax), %rbx
addq $0x68, %rax
movq %rax, 0x28(%rsp)
xorl %ebp, %ebp
xorl %r15d, %r15d
movq 0x70(%rsp), %rcx
movq 0x78(%rsp), %rax
subq %rcx, %rax
cqto
idivq %r13
cmpq %rax, %r15
je 0x7d910
movq (%rcx,%rbp), %rsi
movq %rbx, %rdi
callq 0x43f2a
movsd (%rax), %xmm0
ucomisd 0x1a28b(%rip), %xmm0    # 0x975f8
jne 0x7d375
jnp 0x7d904
movsd %xmm0, 0x8(%rsp)
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
addq $0x20, %rsi
movq %rbx, %rdi
callq 0x43f2a
movsd (%rax), %xmm0
ucomisd 0x1a25c(%rip), %xmm0    # 0x975f8
jne 0x7d3a4
jnp 0x7d904
movsd %xmm0, 0x30(%rsp)
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
addq $0x40, %rsi
movq %rbx, %rdi
callq 0x43f2a
movsd (%rax), %xmm2
ucomisd 0x1a22d(%rip), %xmm2    # 0x975f8
movsd 0x8(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
jne 0x7d3df
jnp 0x7d904
ucomisd 0x18db1(%rip), %xmm0    # 0x96198
jne 0x7d407
jp 0x7d407
ucomisd 0x18da5(%rip), %xmm1    # 0x96198
jne 0x7d407
jp 0x7d407
ucomisd 0x18d99(%rip), %xmm2    # 0x96198
jne 0x7d407
jnp 0x7d904
ucomisd 0x1a1e1(%rip), %xmm0    # 0x975f0
jne 0x7d42f
jp 0x7d42f
ucomisd 0x1a1d5(%rip), %xmm1    # 0x975f0
jne 0x7d42f
jp 0x7d42f
ucomisd 0x1a1c9(%rip), %xmm2    # 0x975f0
jne 0x7d42f
jnp 0x7d904
movsd %xmm2, 0x68(%rsp)
movq 0x260(%rsp), %rax
incl (%rax,%r15,4)
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x28(%rsp), %rdi
callq 0x43738
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, 0x60(%rsp)
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
addq $0x20, %rsi
movq 0x28(%rsp), %rdi
callq 0x43738
movl (%rax), %r12d
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
addq $0x40, %rsi
movq 0x28(%rsp), %rdi
callq 0x43738
cvtsi2sd %r12d, %xmm4
cvtsi2sdl (%rax), %xmm5
leaq 0x40(%rsp), %rdi
movsd 0x8(%rsp), %xmm0
movsd 0x30(%rsp), %xmm1
movsd 0x68(%rsp), %xmm2
movsd 0x60(%rsp), %xmm3
callq 0x7ea6e
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
movq 0x40(%rsp), %rsi
callq 0x7edca
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x50, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
callq 0x7edca
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0xa0, %eax
addq %rax, %rdi
movq 0x40(%rsp), %rsi
addq $0x10, %rsi
callq 0x7edca
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %r12
movl $0xf0, %eax
addq %rax, %r12
leaq 0x4f8(%rsp), %r14
movq %r14, %rdi
leaq 0x140(%rsp), %rsi
callq 0x8600
movq %r14, %rdi
callq 0x402aa
movsd %xmm0, 0x1f0(%rsp)
movq %r12, %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x7f902
leaq 0x4f8(%rsp), %rdi
callq 0x8978
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
callq 0x7edf0
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x50, %rdi
callq 0x7edf0
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0xa0, %eax
addq %rax, %rdi
callq 0x7edf0
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0xf0, %eax
addq %rax, %rdi
callq 0x7edf0
movq 0x10(%rsp), %rax
movq (%rax,%rbp), %rdi
movq 0x40(%rsp), %rsi
callq 0x5a406
movq 0x10(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x18, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
callq 0x5a406
movq 0x10(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x30, %rdi
movq 0x40(%rsp), %rsi
addq $0x10, %rsi
callq 0x5a406
cmpq $0x0, 0x61825(%rip)     # 0xdee38
je 0x7d767
movq 0xc0(%rsp), %rdi
leaq 0x1c7f7(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x7d767
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x229e4(%rip), %rsi     # 0xa002c
callq 0x2193f
testb %al, %al
je 0x7d68e
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
movq 0x40(%rsp), %rsi
callq 0x5a406
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x18, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
callq 0x5a406
pushq $0x30
popq %r12
jmp 0x7d74a
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x1b3ba(%rip), %rsi     # 0x98a5b
callq 0x2193f
testb %al, %al
je 0x7d6e8
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x48, %rdi
movq 0x40(%rsp), %rsi
callq 0x5a406
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
addq $0x60, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
callq 0x5a406
pushq $0x78
popq %r12
jmp 0x7d74a
movq 0xc0(%rsp), %rdi
addq $0x20, %rdi
leaq 0x31dd7(%rip), %rsi     # 0xaf4d2
callq 0x2193f
testb %al, %al
je 0x7d767
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0x90, %eax
addq %rax, %rdi
movq 0x40(%rsp), %rsi
callq 0x5a406
movq 0x88(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0xa8, %eax
addq %rax, %rdi
movq 0x40(%rsp), %rsi
addq $0x8, %rsi
movl $0xc0, %r12d
callq 0x5a406
movq 0x88(%rsp), %rax
addq (%rax,%rbp), %r12
movq 0x40(%rsp), %rsi
addq $0x10, %rsi
movq %r12, %rdi
callq 0x5a406
movq 0x260(%rsp), %rax
movl (%rax,%r15,4), %eax
cmpl 0x5fe7f(%rip), %eax     # 0xdd5f8
jle 0x7d8fa
cltd
idivl 0x5fe76(%rip)           # 0xdd5fc
testl %edx, %edx
jne 0x7d8fa
movq 0x310(%rsp), %rax
movq (%rax,%r15,8), %rdi
leaq 0x170(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1c66d(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %r12
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rdi
movl $0x100, %eax            # imm = 0x100
addq %rax, %rdi
xorl %esi, %esi
callq 0x7fa04
cvttsd2si (%rax), %esi
movq %r12, %rdi
callq 0x8840
movq %rax, %rdi
leaq 0x1c634(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
leaq 0x140(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1c615(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %r12
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rsi
leaq 0x6c8(%rsp), %rdi
callq 0x7ee96
leaq 0x6c8(%rsp), %rdi
callq 0x7ee0e
movq %r12, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1c5d5(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %r12
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rsi
addq $0x50, %rsi
leaq 0x678(%rsp), %rdi
callq 0x7ee96
leaq 0x678(%rsp), %rdi
callq 0x7ee0e
movq %r12, %rdi
callq 0x8750
movq %rax, %rdi
leaq 0x1c591(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %r12
movq 0x120(%rsp), %rax
movq (%rax,%rbp), %rsi
movl $0xa0, %eax
addq %rax, %rsi
leaq 0x628(%rsp), %rdi
callq 0x7ee96
leaq 0x628(%rsp), %rdi
callq 0x7ee0e
movq %r12, %rdi
callq 0x8750
movq %rax, %rdi
callq 0x8230
leaq 0x628(%rsp), %rdi
callq 0x7f15c
leaq 0x678(%rsp), %rdi
callq 0x7f15c
leaq 0x6c8(%rsp), %rdi
callq 0x7f15c
leaq 0x40(%rsp), %rdi
callq 0x2b43c
incq %r15
addq $0x18, %rbp
jmp 0x7d33a
cmpq $0x0, 0x61520(%rip)     # 0xdee38
je 0x7ddfb
leaq 0x100(%rsp), %rdi
leaq 0x1c4f2(%rip), %rsi     # 0x99e1f
callq 0x2ea9b
testb %al, %al
je 0x7ddfb
leaq 0x190(%rsp), %rdi
leaq 0x100(%rsp), %rsi
callq 0x311fd
testb %al, %al
je 0x7ddfb
xorl %r15d, %r15d
movq 0x78(%rsp), %rax
subq 0x70(%rsp), %rax
cqto
idivq %r13
cmpq %r15, %rax
je 0x7dde6
movq 0x88(%rsp), %rax
imulq $0x18, %r15, %r13
movq (%rax,%r13), %rsi
movq 0x8(%rsi), %rbp
subq (%rsi), %rbp
movq 0x50(%rsi), %r12
shrq $0x3, %rbp
subq 0x48(%rsi), %r12
movq 0x98(%rsi), %rbx
subq 0x90(%rsi), %rbx
xorpd %xmm0, %xmm0
movsd %xmm0, 0x28(%rsp)
movsd %xmm0, 0x8(%rsp)
movsd %xmm0, 0x30(%rsp)
movsd %xmm0, 0x68(%rsp)
testl %ebp, %ebp
jle 0x7da68
leaq 0x5f8(%rsp), %rdi
callq 0x2f816
leaq 0x5f8(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x8(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
addq $0x18, %rsi
leaq 0x5e0(%rsp), %rdi
callq 0x2f816
leaq 0x5e0(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x30(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
addq $0x30, %rsi
leaq 0x5c8(%rsp), %rdi
callq 0x2f816
leaq 0x5c8(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x68(%rsp)
movq %r14, %rdi
callq 0x2b43c
shrq $0x3, %r12
xorpd %xmm0, %xmm0
movsd %xmm0, 0x60(%rsp)
movsd %xmm0, 0x168(%rsp)
testl %r12d, %r12d
jle 0x7db3c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
addq $0x48, %rsi
leaq 0x5b0(%rsp), %rdi
callq 0x2f816
leaq 0x5b0(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x28(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
addq $0x60, %rsi
leaq 0x598(%rsp), %rdi
callq 0x2f816
leaq 0x598(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x60(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
addq $0x78, %rsi
leaq 0x580(%rsp), %rdi
callq 0x2f816
leaq 0x580(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x168(%rsp)
movq %r14, %rdi
callq 0x2b43c
shrq $0x3, %rbx
testl %ebx, %ebx
jle 0x7dc10
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
movl $0x90, %eax
addq %rax, %rsi
leaq 0x568(%rsp), %rdi
callq 0x2f816
leaq 0x568(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x160(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
movl $0xa8, %eax
addq %rax, %rsi
leaq 0x550(%rsp), %rdi
callq 0x2f816
leaq 0x550(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x220(%rsp)
movq %r14, %rdi
callq 0x2b43c
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rsi
movl $0xc0, %eax
addq %rax, %rsi
leaq 0x538(%rsp), %rdi
callq 0x2f816
leaq 0x538(%rsp), %r14
movq %r14, %rdi
callq 0x2f7e9
movsd %xmm0, 0x218(%rsp)
movq %r14, %rdi
callq 0x2b43c
jmp 0x7dc2f
xorpd %xmm0, %xmm0
movsd %xmm0, 0x160(%rsp)
movsd %xmm0, 0x220(%rsp)
movsd %xmm0, 0x218(%rsp)
movq 0x2d0(%rsp), %rax
movq (%rax,%r15,8), %rdi
leaq 0x100(%rsp), %rsi
callq 0x8430
movq %rax, %rdi
leaq 0x1c1cc(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %ebp, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1c1b3(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %r12d, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1c199(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movl %ebx, %esi
callq 0x8840
movq %rax, %rdi
leaq 0x1c180(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x8(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c163(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x30(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c146(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x68(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c129(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x28(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c10c(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x60(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c0ef(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x168(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c0cf(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x160(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c0af(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x220(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
leaq 0x1c08f(%rip), %rsi     # 0x99e1e
callq 0x8480
movq %rax, %rdi
movsd 0x218(%rsp), %xmm0
callq 0x8750
movq %rax, %rdi
callq 0x8230
movq 0x88(%rsp), %rax
movq (%rax,%r13), %rax
pushq $0x8
popq %rcx
pushq $0x18
popq %r13
cmpq $0xe0, %rcx
je 0x7ddde
movq -0x8(%rax,%rcx), %rdx
cmpq %rdx, (%rax,%rcx)
je 0x7ddd8
movq %rdx, (%rax,%rcx)
addq $0x18, %rcx
jmp 0x7ddc0
incq %r15
jmp 0x7d95a
leaq 0x100(%rsp), %rdi
leaq 0x190(%rsp), %rsi
callq 0x82a0
callq 0x8310
subq 0x2a0(%rsp), %rax
cvtsi2sd %rax, %xmm0
divsd 0x1f573(%rip), %xmm0    # 0x9d388
movsd %xmm0, 0x8(%rsp)
movq 0x210(%rsp), %rbx
movq %rbx, %rdi
callq 0x61838
movl $0x240, %esi            # imm = 0x240
movq %rbx, %rdi
callq 0x84a0
leaq 0xc0(%rsp), %rdi
callq 0x28a08
movb $0x1, %bl
leaq 0xa0(%rsp), %r15
leaq 0xe0(%rsp), %r12
leaq 0x228(%rsp), %rbp
movq %r12, %rdi
callq 0x8978
movq %r15, %rdi
callq 0x8978
movq %rbp, %rdi
callq 0x28a08
testb %bl, %bl
leaq 0x140(%rsp), %r12
leaq 0x1b0(%rsp), %r14
jmp 0x7c8e6
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x1b0(%rsp), %rdi
callq 0x28a08
leaq 0x380(%rsp), %rdi
callq 0x28a08
leaq 0x260(%rsp), %rdi
callq 0x2aef2
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x190(%rsp), %rdi
callq 0x8978
leaq 0x88(%rsp), %rdi
callq 0x79884
leaq 0x278(%rsp), %rdi
callq 0x37c74
leaq 0x10(%rsp), %rdi
callq 0x79884
leaq 0x240(%rsp), %rdi
callq 0x37c74
leaq 0x120(%rsp), %rdi
callq 0x7ef38
leaq 0x2b0(%rsp), %rdi
callq 0x7ef5a
leaq 0x3a8(%rsp), %rdi
callq 0x7f15c
leaq 0x70(%rsp), %rdi
callq 0x29054
leaq 0x2d0(%rsp), %rdi
callq 0x7ef7c
leaq 0x2f0(%rsp), %rdi
callq 0x7ef7c
leaq 0x310(%rsp), %rdi
callq 0x7ef7c
leaq 0x330(%rsp), %rdi
callq 0x28a08
leaq 0x468(%rsp), %rdi
callq 0x4a9bc
leaq 0x498(%rsp), %rdi
callq 0x4aa20
leaq 0x4c8(%rsp), %rdi
callq 0x33008
leaq 0x350(%rsp), %rdi
callq 0x32f44
leaq 0x748(%rsp), %rdi
callq 0x32212
leaq 0x1d0(%rsp), %rdi
callq 0x8978
xorl %eax, %eax
addq $0x808, %rsp            # imm = 0x808
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x3141c(%rip), %rdi     # 0xaf404
leaq 0x3142b(%rip), %rsi     # 0xaf41a
leaq 0x31430(%rip), %rcx     # 0xaf426
movl $0xa9, %edx
callq 0x82f0
leaq 0x2265e(%rip), %rdi     # 0xa0665
leaq 0x3140c(%rip), %rsi     # 0xaf41a
leaq 0x31411(%rip), %rcx     # 0xaf426
movl $0xe5, %edx
callq 0x82f0
movq %rax, %rbx
leaq 0x628(%rsp), %rdi
callq 0x7f15c
jmp 0x7e03e
jmp 0x7e49d
movq %rax, %rbx
jmp 0x7e04b
movq %rax, %rbx
leaq 0x678(%rsp), %rdi
callq 0x7f15c
leaq 0x6c8(%rsp), %rdi
callq 0x7f15c
jmp 0x7e1d2
jmp 0x7e1cf
movq %rax, %rbx
jmp 0x7e08b
movq %rax, %rbx
jmp 0x7e098
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x8978
jmp 0x7e081
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
movl $0x200, %esi            # imm = 0x200
movq %r12, %rdi
jmp 0x7e0fa
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
callq 0x32212
jmp 0x7e60a
jmp 0x7e18e
jmp 0x7e162
jmp 0x7e18e
jmp 0x7e49d
movq %rax, %rbx
leaq 0x4f8(%rsp), %rdi
callq 0x8978
jmp 0x7e1d2
jmp 0x7e43b
jmp 0x7e43b
jmp 0x7e259
movq %rax, %rbx
movl $0x240, %esi            # imm = 0x240
movq %r14, %rdi
callq 0x84a0
jmp 0x7e4ad
movq %rax, %rbx
jmp 0x7e515
movq %rax, %rbx
jmp 0x7e522
movq %rax, %rbx
jmp 0x7e52f
movq %rax, %rbx
jmp 0x7e53c
movq %rax, %rbx
jmp 0x7e549
movq %rax, %rbx
jmp 0x7e553
movq %rax, %rbx
jmp 0x7e560
movq %rax, %rbx
jmp 0x7e56d
movq %rax, %rbx
jmp 0x7e57a
jmp 0x7e443
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq 0x8(%rsp), %rdi
jmp 0x7e16d
jmp 0x7e18e
movq %rax, %rbx
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
callq 0x84a0
jmp 0x7e60a
jmp 0x7e18e
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
callq 0x8978
jmp 0x7e60a
movq %rax, %rbx
jmp 0x7e60a
jmp 0x7e49d
jmp 0x7e43b
jmp 0x7e43b
movq %rax, %rbx
leaq 0x518(%rsp), %rdi
callq 0x8978
jmp 0x7e4d4
movq %rax, %rbx
jmp 0x7e4ba
jmp 0x7e259
movq %rax, %rbx
jmp 0x7e4c7
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x2b43c
jmp 0x7e4a0
jmp 0x7e431
jmp 0x7e259
jmp 0x7e49d
jmp 0x7e49d
jmp 0x7e49d
jmp 0x7e49d
jmp 0x7e43b
jmp 0x7e394
jmp 0x7e342
jmp 0x7e380
jmp 0x7e38f
jmp 0x7e34a
jmp 0x7e420
jmp 0x7e33a
jmp 0x7e34f
jmp 0x7e36e
jmp 0x7e41b
jmp 0x7e42c
jmp 0x7e38a
jmp 0x7e299
jmp 0x7e385
jmp 0x7e455
movq %rax, %rbx
jmp 0x7e474
movq %rax, %rbx
jmp 0x7e467
movq %rax, %rbx
jmp 0x7e4ad
jmp 0x7e43b
jmp 0x7e43b
jmp 0x7e33a
movq %rax, %rbx
jmp 0x7e2dd
movq %rax, %rbx
jmp 0x7e2c3
movq %rax, %rbx
jmp 0x7e304
movq %rax, %rbx
jmp 0x7e2d0
movq %rax, %rbx
jmp 0x7e2ea
movq %rax, %rbx
jmp 0x7e32b
movq %rax, %rbx
jmp 0x7e2f7
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
callq 0x8978
jmp 0x7e352
movq %rax, %rbx
jmp 0x7e311
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
callq 0x8978
leaq 0x190(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xc0(%rsp), %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
jmp 0x7e404
movq %rax, %rbx
jmp 0x7e31e
movq %rax, %rbx
jmp 0x7e409
movq %rax, %rbx
jmp 0x7e3e5
movq %rax, %rbx
jmp 0x7e35f
movq %rax, %rbx
leaq 0x190(%rsp), %rdi
callq 0x8978
leaq 0x240(%rsp), %rdi
callq 0x8978
jmp 0x7e371
movq %rax, %rbx
leaq 0x100(%rsp), %rdi
callq 0x8978
jmp 0x7e397
movq %rax, %rbx
jmp 0x7e3be
movq %rax, %rbx
jmp 0x7e3ef
movq %rax, %rbx
jmp 0x7e3d8
movq %rax, %rbx
jmp 0x7e3a4
movq %rax, %rbx
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x120(%rsp), %rdi
callq 0x8978
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xc0(%rsp), %rdi
callq 0x8978
leaq 0x40(%rsp), %rdi
callq 0x8978
leaq 0x1f0(%rsp), %rdi
callq 0x8978
leaq 0x2b0(%rsp), %rdi
callq 0x8978
movl $0x200, %esi            # imm = 0x200
movq %rbp, %rdi
callq 0x84a0
jmp 0x7e58e
movq %rax, %rbx
jmp 0x7e3fc
movq %rax, %rbx
jmp 0x7e3cb
jmp 0x7e58b
jmp 0x7e443
movq %rax, %rbx
jmp 0x7e3b1
movq %rax, %rbx
jmp 0x7e5c9
jmp 0x7e44b
movq %rax, %rbx
jmp 0x7e4d4
movq %rax, %rbx
jmp 0x7e598
movq %rax, %rbx
jmp 0x7e5d6
jmp 0x7e49d
movq %rax, %rbx
jmp 0x7e481
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x2f68c
leaq 0xc0(%rsp), %rdi
callq 0x28a08
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0xe0(%rsp), %rdi
jmp 0x7e4cf
movq %rax, %rbx
leaq 0x3a8(%rsp), %rdi
jmp 0x7e5d1
jmp 0x7e49d
movq %rax, %rbx
leaq 0xc0(%rsp), %rdi
callq 0x28a08
leaq 0xe0(%rsp), %rdi
callq 0x8978
leaq 0xa0(%rsp), %rdi
callq 0x8978
leaq 0x228(%rsp), %rdi
callq 0x28a08
leaq 0x140(%rsp), %rdi
callq 0x8978
leaq 0x170(%rsp), %rdi
callq 0x8978
leaq 0x1b0(%rsp), %rdi
callq 0x28a08
leaq 0x380(%rsp), %rdi
callq 0x28a08
leaq 0x260(%rsp), %rdi
callq 0x2aef2
leaq 0x100(%rsp), %rdi
callq 0x8978
leaq 0x190(%rsp), %rdi
callq 0x8978
leaq 0x88(%rsp), %rdi
callq 0x79884
leaq 0x278(%rsp), %rdi
callq 0x37c74
leaq 0x10(%rsp), %rdi
callq 0x79884
leaq 0x240(%rsp), %rdi
callq 0x37c74
leaq 0x120(%rsp), %rdi
callq 0x7ef38
leaq 0x2b0(%rsp), %rdi
callq 0x7ef5a
leaq 0x3a8(%rsp), %rdi
callq 0x7f15c
jmp 0x7e598
jmp 0x7e58b
movq %rax, %rbx
leaq 0x10(%rsp), %rdi
callq 0x28a08
leaq 0x70(%rsp), %rdi
callq 0x29054
leaq 0x2d0(%rsp), %rdi
callq 0x7ef7c
leaq 0x2f0(%rsp), %rdi
callq 0x7ef7c
leaq 0x310(%rsp), %rdi
callq 0x7ef7c
leaq 0x330(%rsp), %rdi
callq 0x28a08
leaq 0x468(%rsp), %rdi
callq 0x4a9bc
leaq 0x498(%rsp), %rdi
callq 0x4aa20
leaq 0x4c8(%rsp), %rdi
callq 0x33008
leaq 0x350(%rsp), %rdi
callq 0x32f44
leaq 0x748(%rsp), %rdi
callq 0x32212
leaq 0x1d0(%rsp), %rdi
callq 0x8978
movq %rbx, %rdi
callq 0x8870