// File: millanek[P]evo/evo_distanceToOutgroups.cpp
// Function: DistOutMain(int, char**)
int DistOutMain(int argc, char** argv) {
    parseDistOutOptions(argc, argv);
    string line; // for reading the input files
    
    // 1) Dividing up and assigning the populations
    std::vector<string> populations; // Will hold the names of all populations
    std::vector<string> outgroups; // Will hold the names of the outgroup populations
    std::vector<string> ingroups; // Will hold the names of the ingroup populations
    
    std::istream* vcfFile = createReader(opt::vcfFile.c_str());
    std::ifstream* setsFile = new std::ifstream(opt::setsFile.c_str());
    std::ifstream* outgroupFile = new std::ifstream(opt::outgroupFile.c_str());
    std::ifstream* ingroupFile = new std::ifstream(opt::ingroupFile.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)
    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;
    
    
    // find the ingroups
    while (getline(*ingroupFile,line)) {
        ingroups.push_back(line);
    }
    
    // Get the outgroups
    std::vector<std::ofstream*> outFilesFixedWindow;
    while (getline(*outgroupFile,line)) {
        // std::cerr << line << std::endl;
        std::ofstream* outFileFixedWindow = new std::ofstream(line + "_DIST_" + opt::runName + "_FW" + numToString(opt::fixedWindowSize) + ".txt");
        *outFileFixedWindow << "chr\twStart\twEnd\tSNPs_used\tSNPs_missing\tAccessibleSizeBP" << "\t"; print_vector(ingroups, *outFileFixedWindow);
        //outFile->setf(std::ios_base::fixed); // Avoid scientific notation in the coordinates
        outFilesFixedWindow.push_back(outFileFixedWindow);
        outgroups.push_back(line);
    }
    
    
    // 2) Loading the accessible genome bad file:
    AccessibleGenome* ag;
    if (!opt::accesibleGenBedFile.empty()) {
       std::ifstream* accessibleGenomeBed = new std::ifstream(opt::accesibleGenBedFile);
       std::cerr << "Loading the accessible genome annotation" << std::endl;
       ag = new AccessibleGenome(accessibleGenomeBed);
       std::cerr << "Done" << std::endl;
   }
     // int numAccessibleBP = ag->getAccessibleBPinRegion(sc, i, i+opt::accessibleGenBedWindow);
    
    
    // 3) Praparing the containers to hold the results
    // 3a) for per-SNP results
    std::vector<std::vector<double>> initVectorFixed(ingroups.size());
    std::vector<std::vector<std::vector<double>>> DxyFixedWindowPerSNP(outgroups.size(),initVectorFixed);
    // 3b) for calculated Dxy values
    std::vector<int> ingroupsMissingInit(ingroups.size(),0);
    std::vector<std::vector<int>> missingDist(outgroups.size(),ingroupsMissingInit);
    
    // 3b) for calculated Dxy values
    std::vector<double> ingroupsResultInit(ingroups.size(),0.0);
    std::vector<std::vector<double>> DxyFixedWindowAveraged(outgroups.size(),ingroupsResultInit);
    
    
    // 4) Going through the VCF
    // 4a) Preparing useful variables
    int currentWindowStart = 0; int currentWindowEnd = currentWindowStart + opt::fixedWindowSize;
    int totalVariantNumber = 0;
    std::vector<int> usedVars(outgroups.size(),0); // Will count the number of used variants for each outgroup
    std::vector<int> missingVars(outgroups.size(),0); // Will count the number of missing variants for each outgroup
    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;
    // 4b) Looping through the file
    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;
            
            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;
            
            
            
            // Check if we are still in the same physical window...
            if (coordDouble > currentWindowEnd || coordDouble < currentWindowStart) {
                // Find the number of accessible BPs in this window:
                int accessibleInThisWindow = opt::fixedWindowSize;
                if (!opt::accesibleGenBedFile.empty()) {
                    if (coordDouble > currentWindowEnd) {
                        accessibleInThisWindow = ag->getAccessibleBPinRegion(chr, currentWindowStart, currentWindowStart + opt::fixedWindowSize);
                    } else if (coordDouble < currentWindowStart) {
                        accessibleInThisWindow = ag->getAccessibleBPinRegion(chr, 0, opt::fixedWindowSize);
                    }
                }
                
                for (int i = 0; i != outgroups.size(); i++) {
                    for (int j = 0; j != ingroups.size(); j++) {
                        int nSNPs = (int)DxyFixedWindowPerSNP[i][j].size();
                        if (nSNPs > 0) {
                            double missingProportion = (double)missingDist[i][j]/(nSNPs + missingDist[i][j]);
                            if (missingProportion > 0.5) {
                                DxyFixedWindowAveraged[i][j] = NAN;
                            } else {
                                DxyFixedWindowAveraged[i][j] = vector_average_withRegion(DxyFixedWindowPerSNP[i][j], accessibleInThisWindow);
                                // Scale by the number of SNPs missing for the ingroup
                                double nonMissingProportion = (double)nSNPs/(nSNPs + missingDist[i][j]);
                                double scalingFactor = 1 + (missingProportion / nonMissingProportion);
                                DxyFixedWindowAveraged[i][j] = DxyFixedWindowAveraged[i][j] * scalingFactor;
                            }
                        } else {
                            DxyFixedWindowAveraged[i][j] = NAN;
                        }
                        DxyFixedWindowPerSNP[i][j].clear();
                    }
                    
                    *outFilesFixedWindow[i] << chr << "\t" << currentWindowStart << "\t" << currentWindowEnd << "\t" << usedVars[i] << "\t" << missingVars[i] << "\t" << accessibleInThisWindow << "\t";
                    print_vector(DxyFixedWindowAveraged[i], *outFilesFixedWindow[i]);
                }
                
                // Reset missing data counters for the next window
                for (int i = 0; i != outgroups.size(); i++) {
                    usedVars[i] = 0; missingVars[i] = 0;
                    for (int j = 0; j != ingroups.size(); j++) {
                        missingDist[i][j] = 0;
                    }
                }
                
                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 Dxy per SNP:
            double AFout;
            for (int i = 0; i != outgroups.size(); i++) {
                AFout = c->setAAFs.at(outgroups[i]);
                if (AFout == -1) {
                    missingVars[i]++;
                    // for (int j = 0; j != ingroups.size(); j++) { missingDist[i][j]++; }
                    continue;  // If the outgroup has entirely missing data, just move on to the next one
                }
                usedVars[i]++;
                for (int j = 0; j != ingroups.size(); j++) {
                    double AFin = c->setAAFs.at(ingroups[j]);
                    if (AFin != -1) {
                        double thisSNPdxy = DxyPerSNPfromAFs(AFout, c->setAAFs.at(ingroups[j]));
                        DxyFixedWindowPerSNP[i][j].push_back(thisSNPdxy);
                    } else {
                        missingDist[i][j]++;
                    }
                    
                }
            }
            durationCalculation = ( std::clock() - startCalculation ) / (double) CLOCKS_PER_SEC;
            delete c;
        }
    }
    
    return 0;
    
    
    
    
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa50, %rsp            # imm = 0xA50
movl %edi, -0x4(%rbp)
movq %rsi, -0x10(%rbp)
movl -0x4(%rbp), %edi
movq -0x10(%rbp), %rsi
callq 0x115950
leaq -0x30(%rbp), %rdi
callq 0xa820
leaq -0x48(%rbp), %rdi
callq 0x48da0
leaq -0x60(%rbp), %rdi
callq 0x48da0
leaq -0x78(%rbp), %rdi
callq 0x48da0
leaq 0x88287(%rip), %rdi     # 0x19b630
callq 0xa220
movq %rax, -0x6d0(%rbp)
leaq -0xa1(%rbp), %rdi
movq %rdi, -0x6c8(%rbp)
callq 0xab60
movq -0x6d0(%rbp), %rsi
movq -0x6c8(%rbp), %rdx
leaq -0xa0(%rbp), %rdi
callq 0x2d6c0
jmp 0x1133e4
leaq -0xa0(%rbp), %rdi
movl $0x8, %esi
callq 0x80e30
movq %rax, -0x6d8(%rbp)
jmp 0x1133fe
leaq -0xa0(%rbp), %rdi
callq 0xac88
leaq -0xa1(%rbp), %rdi
callq 0xa640
movq -0x6d8(%rbp), %rax
movq %rax, -0x80(%rbp)
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x6e0(%rbp)
jmp 0x113434
leaq 0x88215(%rip), %rdi     # 0x19b650
callq 0xa220
movq -0x6e0(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x113456
movq -0x6e0(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x6e8(%rbp)
jmp 0x113477
leaq 0x881f2(%rip), %rdi     # 0x19b670
callq 0xa220
movq -0x6e8(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x113499
movq -0x6e8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x6f0(%rbp)
jmp 0x1134ba
leaq 0x881cf(%rip), %rdi     # 0x19b690
callq 0xa220
movq -0x6f0(%rbp), %rdi
movq %rax, %rsi
movl $0x8, %edx
callq 0xab90
jmp 0x1134dc
movq -0x6f0(%rbp), %rax
movq %rax, -0xd0(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x58920
leaq -0x130(%rbp), %rdi
callq 0x584b0
leaq -0x160(%rbp), %rdi
callq 0x951b0
leaq -0x190(%rbp), %rdi
callq 0x951d0
movq -0xc0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x6f8(%rbp)
jmp 0x113533
movq -0x6f8(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x6f9(%rbp)
jmp 0x113551
movb -0x6f9(%rbp), %al
testb $0x1, %al
jne 0x113560
jmp 0x11373a
leaq -0x1a8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x113577
leaq -0x1a8(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x100(%rbp), %rdi
callq 0x6b400
movq %rax, -0x708(%rbp)
jmp 0x1135a0
xorl %eax, %eax
movl %eax, %esi
leaq -0x1a8(%rbp), %rdi
callq 0x3d940
movq -0x708(%rbp), %rdi
movq %rax, %rsi
callq 0x48dc0
jmp 0x1135c1
leaq -0x1a8(%rbp), %rdi
movq %rdi, -0x720(%rbp)
movl $0x1, %esi
callq 0x3d940
movq -0x720(%rbp), %rdi
movq %rax, -0x718(%rbp)
xorl %eax, %eax
movl %eax, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0x584d0
movq %rax, -0x710(%rbp)
jmp 0x113608
movq -0x718(%rbp), %rsi
movq -0x710(%rbp), %rdi
callq 0xa060
jmp 0x11361d
leaq -0x1a8(%rbp), %rdi
callq 0x3dfa0
jmp 0x11351a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113660
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0xac88
leaq -0xa1(%rbp), %rdi
callq 0xa640
jmp 0x115920
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x115920
movq -0x6e0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x115920
movq -0x6e8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x115920
movq -0x6f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x115920
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1158f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1a8(%rbp), %rdi
callq 0x3dfa0
jmp 0x1158f0
leaq -0x100(%rbp), %rdi
callq 0x6c3d0
movq %rax, -0x1b0(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x6c430
movq %rax, -0x1b8(%rbp)
leaq -0x1b0(%rbp), %rdi
leaq -0x1b8(%rbp), %rsi
callq 0x6c400
testb $0x1, %al
jne 0x113779
jmp 0x1137a3
leaq -0x1b0(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
leaq -0x48(%rbp), %rdi
callq 0x48dc0
jmp 0x113793
jmp 0x113795
leaq -0x1b0(%rbp), %rdi
callq 0x71fc0
jmp 0x11374d
movq 0x85846(%rip), %rdi     # 0x198ff0
leaq 0x3b24c(%rip), %rsi     # 0x14e9fd
callq 0xa5c0
movq %rax, -0x728(%rbp)
jmp 0x1137bf
leaq -0x48(%rbp), %rdi
callq 0x3ffd0
movq -0x728(%rbp), %rdi
movq %rax, %rsi
callq 0xa140
movq %rax, -0x730(%rbp)
jmp 0x1137e0
movq -0x730(%rbp), %rdi
leaq 0x28f86(%rip), %rsi     # 0x13c774
callq 0xa5c0
movq %rax, -0x738(%rbp)
jmp 0x1137fc
movq -0x738(%rbp), %rdi
movq 0x8577e(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x113811
jmp 0x113813
movq -0xd0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x740(%rbp)
jmp 0x11382c
movq -0x740(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x741(%rbp)
jmp 0x11384a
movb -0x741(%rbp), %al
testb $0x1, %al
jne 0x113856
jmp 0x113867
leaq -0x78(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x48dc0
jmp 0x113865
jmp 0x113813
leaq -0x1d0(%rbp), %rdi
callq 0xffa70
movq -0xc8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x750(%rbp)
jmp 0x11388c
movq -0x750(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x751(%rbp)
jmp 0x1138aa
movb -0x751(%rbp), %al
testb $0x1, %al
jne 0x1138b9
jmp 0x113bb1
movl $0x200, %edi            # imm = 0x200
callq 0xa5d0
movq %rax, -0x760(%rbp)
jmp 0x1138cc
movb $0x1, -0x299(%rbp)
leaq 0x3a039(%rip), %rdx     # 0x14d913
leaq -0x278(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x3da80
jmp 0x1138ec
leaq 0x87dbd(%rip), %rdx     # 0x19b6b0
leaq -0x258(%rbp), %rdi
leaq -0x278(%rbp), %rsi
callq 0x3da30
jmp 0x113908
leaq 0x38a66(%rip), %rdx     # 0x14c375
leaq -0x238(%rbp), %rdi
leaq -0x258(%rbp), %rsi
callq 0x3e020
jmp 0x113924
movl 0x86136(%rip), %esi     # 0x199a60
leaq -0x298(%rbp), %rdi
callq 0x3e190
jmp 0x113938
leaq -0x218(%rbp), %rdi
leaq -0x238(%rbp), %rsi
leaq -0x298(%rbp), %rdx
callq 0x3e070
jmp 0x113954
leaq 0x35c4c(%rip), %rdx     # 0x1495a7
leaq -0x1f8(%rbp), %rdi
leaq -0x218(%rbp), %rsi
callq 0x3e020
jmp 0x113970
movq -0x760(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
movl $0x10, %edx
callq 0xac00
jmp 0x11398a
movb $0x0, -0x299(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0xac88
leaq -0x218(%rbp), %rdi
callq 0xac88
leaq -0x298(%rbp), %rdi
callq 0xac88
leaq -0x238(%rbp), %rdi
callq 0xac88
leaq -0x258(%rbp), %rdi
callq 0xac88
leaq -0x278(%rbp), %rdi
callq 0xac88
movq -0x760(%rbp), %rax
movq %rax, -0x1d8(%rbp)
movq -0x1d8(%rbp), %rdi
leaq 0x39f25(%rip), %rsi     # 0x14d91a
callq 0xa5c0
movq %rax, -0x768(%rbp)
jmp 0x113a03
movq -0x768(%rbp), %rdi
leaq 0x224cd(%rip), %rsi     # 0x135ede
callq 0xa5c0
jmp 0x113a18
leaq -0x2b8(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x3fee0
jmp 0x113a2a
movq -0x1d8(%rbp), %rsi
leaq -0x2b8(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x50da0
jmp 0x113a49
leaq -0x2b8(%rbp), %rdi
callq 0x3dfa0
leaq -0x1d0(%rbp), %rdi
leaq -0x1d8(%rbp), %rsi
callq 0xffa90
jmp 0x113a6a
leaq -0x60(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x48dc0
jmp 0x113a79
jmp 0x113873
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1158e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b6d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b61
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b55
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b49
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b3d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x113b31
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x1f8(%rbp), %rdi
callq 0xac88
leaq -0x218(%rbp), %rdi
callq 0xac88
leaq -0x298(%rbp), %rdi
callq 0xac88
leaq -0x238(%rbp), %rdi
callq 0xac88
leaq -0x258(%rbp), %rdi
callq 0xac88
leaq -0x278(%rbp), %rdi
callq 0xac88
testb $0x1, -0x299(%rbp)
jne 0x113b78
jmp 0x113b89
movq -0x760(%rbp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0xa5e0
jmp 0x1158e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2b8(%rbp), %rdi
callq 0x3dfa0
jmp 0x1158e4
leaq 0x87b18(%rip), %rdi     # 0x19b6d0
callq 0xaa70
testb $0x1, %al
jne 0x113cea
movl $0x208, %edi            # imm = 0x208
callq 0xa5d0
movq %rax, -0x770(%rbp)
jmp 0x113bd8
movq -0x770(%rbp), %rdi
leaq 0x87aea(%rip), %rsi     # 0x19b6d0
movl $0x8, %edx
callq 0xaa00
jmp 0x113bf2
movq -0x770(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq 0x853e9(%rip), %rdi     # 0x198ff0
leaq 0x28b74(%rip), %rsi     # 0x13c782
callq 0xa5c0
movq %rax, -0x778(%rbp)
jmp 0x113c1c
movq -0x778(%rbp), %rdi
movq 0x8535e(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x113c31
movl $0x38, %edi
callq 0xa5d0
movq %rax, -0x780(%rbp)
jmp 0x113c44
movq -0x780(%rbp), %rdi
leaq -0x2c8(%rbp), %rsi
callq 0x6aa00
jmp 0x113c59
movq -0x780(%rbp), %rax
movq %rax, -0x2c0(%rbp)
movq 0x85382(%rip), %rdi     # 0x198ff0
leaq 0x1e67a(%rip), %rsi     # 0x1322ef
callq 0xa5c0
movq %rax, -0x788(%rbp)
jmp 0x113c83
movq -0x788(%rbp), %rdi
movq 0x852f7(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x113c98
jmp 0x113cea
movq -0x770(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x208, %esi            # imm = 0x208
callq 0xa5e0
jmp 0x1158e4
movq -0x780(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x38, %esi
callq 0xa5e0
jmp 0x1158e4
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x798(%rbp)
leaq -0x2e1(%rbp), %rdi
movq %rdi, -0x790(%rbp)
callq 0x667a0
movq -0x798(%rbp), %rsi
movq -0x790(%rbp), %rdx
leaq -0x2e0(%rbp), %rdi
callq 0xf56f0
jmp 0x113d29
leaq -0x2e1(%rbp), %rdi
callq 0x669e0
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7a8(%rbp)
leaq -0x301(%rbp), %rdi
movq %rdi, -0x7a0(%rbp)
callq 0xf5880
movq -0x7a8(%rbp), %rsi
movq -0x7a0(%rbp), %rcx
leaq -0x300(%rbp), %rdi
leaq -0x2e0(%rbp), %rdx
callq 0xf6350
jmp 0x113d7b
leaq -0x301(%rbp), %rdi
callq 0xf6790
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7b8(%rbp)
movl $0x0, -0x324(%rbp)
leaq -0x325(%rbp), %rdi
movq %rdi, -0x7b0(%rbp)
callq 0x46300
movq -0x7b8(%rbp), %rsi
movq -0x7b0(%rbp), %rcx
leaq -0x320(%rbp), %rdi
leaq -0x324(%rbp), %rdx
callq 0x83540
jmp 0x113dd7
leaq -0x325(%rbp), %rdi
callq 0x483e0
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7c8(%rbp)
leaq -0x341(%rbp), %rdi
movq %rdi, -0x7c0(%rbp)
callq 0x6d160
movq -0x7c8(%rbp), %rsi
movq -0x7c0(%rbp), %rcx
leaq -0x340(%rbp), %rdi
leaq -0x320(%rbp), %rdx
callq 0x115d40
jmp 0x113e29
leaq -0x341(%rbp), %rdi
callq 0x70700
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7d8(%rbp)
movq $0x0, -0x368(%rbp)
leaq -0x369(%rbp), %rdi
movq %rdi, -0x7d0(%rbp)
callq 0x484d0
movq -0x7d8(%rbp), %rsi
movq -0x7d0(%rbp), %rcx
leaq -0x360(%rbp), %rdi
leaq -0x368(%rbp), %rdx
callq 0x83450
jmp 0x113e86
leaq -0x369(%rbp), %rdi
callq 0x4a130
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7e8(%rbp)
leaq -0x389(%rbp), %rdi
movq %rdi, -0x7e0(%rbp)
callq 0x667a0
movq -0x7e8(%rbp), %rsi
movq -0x7e0(%rbp), %rcx
leaq -0x388(%rbp), %rdi
leaq -0x360(%rbp), %rdx
callq 0x115dc0
jmp 0x113ed8
leaq -0x389(%rbp), %rdi
callq 0x669e0
movl $0x0, -0x390(%rbp)
movl -0x390(%rbp), %eax
movl 0x85b66(%rip), %ecx     # 0x199a60
addl %ecx, %eax
movl %eax, -0x394(%rbp)
movl $0x0, -0x398(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x7f8(%rbp)
movl $0x0, -0x3b4(%rbp)
leaq -0x3b5(%rbp), %rdi
movq %rdi, -0x7f0(%rbp)
callq 0x46300
movq -0x7f8(%rbp), %rsi
movq -0x7f0(%rbp), %rcx
leaq -0x3b0(%rbp), %rdi
leaq -0x3b4(%rbp), %rdx
callq 0x83540
jmp 0x113f5c
leaq -0x3b5(%rbp), %rdi
callq 0x483e0
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, -0x808(%rbp)
movl $0x0, -0x3d4(%rbp)
leaq -0x3d5(%rbp), %rdi
movq %rdi, -0x800(%rbp)
callq 0x46300
movq -0x808(%rbp), %rsi
movq -0x800(%rbp), %rcx
leaq -0x3d0(%rbp), %rdi
leaq -0x3d4(%rbp), %rdx
callq 0x83540
jmp 0x113fb8
leaq -0x3d5(%rbp), %rdi
callq 0x483e0
leaq -0x3f0(%rbp), %rdi
callq 0x48da0
leaq -0x408(%rbp), %rdi
callq 0x48da0
movl $0x3e8, -0x40c(%rbp)    # imm = 0x3E8
leaq -0x430(%rbp), %rdi
callq 0xa820
leaq -0x450(%rbp), %rdi
callq 0xa820
movq -0x80(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xa0d0
movq %rax, -0x810(%rbp)
jmp 0x114014
movq -0x810(%rbp), %rdi
movq (%rdi), %rax
movq -0x18(%rax), %rax
addq %rax, %rdi
callq 0xa740
movb %al, -0x811(%rbp)
jmp 0x114032
movb -0x811(%rbp), %al
testb $0x1, %al
jne 0x114041
jmp 0x11574f
leaq -0x30(%rbp), %rdi
movq %rdi, -0x828(%rbp)
callq 0xa4f0
movq -0x828(%rbp), %rdi
movq %rax, -0x4a0(%rbp)
callq 0xa330
movq %rax, -0x4a8(%rbp)
movb $0xd, -0x4a9(%rbp)
movq -0x4a0(%rbp), %rdi
movq -0x4a8(%rbp), %rsi
leaq -0x4a9(%rbp), %rdx
callq 0xc6570
movq %rax, -0x820(%rbp)
jmp 0x114095
movq -0x820(%rbp), %rax
movq %rax, -0x498(%rbp)
leaq -0x490(%rbp), %rdi
leaq -0x498(%rbp), %rsi
callq 0xc65c0
leaq -0x30(%rbp), %rdi
movq %rdi, -0x838(%rbp)
callq 0xa330
movq %rax, -0x4c0(%rbp)
leaq -0x4b8(%rbp), %rdi
leaq -0x4c0(%rbp), %rsi
callq 0xc65c0
movq -0x838(%rbp), %rdi
movq -0x490(%rbp), %rsi
movq -0x4b8(%rbp), %rdx
callq 0xa120
movq %rax, -0x830(%rbp)
jmp 0x114103
movq -0x830(%rbp), %rax
movq %rax, -0x4c8(%rbp)
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
callq 0xac60
movq %rax, -0x840(%rbp)
jmp 0x114127
movq -0x840(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x114298
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0xac60
movq %rax, -0x848(%rbp)
jmp 0x114151
movq -0x848(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x114298
jmp 0x113ffe
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x2e1(%rbp), %rdi
callq 0x669e0
jmp 0x1158e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x301(%rbp), %rdi
callq 0xf6790
jmp 0x1158d8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x325(%rbp), %rdi
callq 0x483e0
jmp 0x1158cc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x341(%rbp), %rdi
callq 0x70700
jmp 0x1158c0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x369(%rbp), %rdi
callq 0x4a130
jmp 0x1158b4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x389(%rbp), %rdi
callq 0x669e0
jmp 0x1158a8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x3b5(%rbp), %rdi
callq 0x483e0
jmp 0x11589c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x3d5(%rbp), %rdi
callq 0x483e0
jmp 0x115890
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x115854
xorl %eax, %eax
movl %eax, %esi
leaq -0x30(%rbp), %rdi
callq 0xac60
movq %rax, -0x850(%rbp)
jmp 0x1142ae
movq -0x850(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x23, %eax
jne 0x1146e3
leaq -0x30(%rbp), %rdi
movl $0x1, %esi
callq 0xac60
movq %rax, -0x858(%rbp)
jmp 0x1142d8
movq -0x858(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x43, %eax
jne 0x1146e3
leaq -0x4e0(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x114302
leaq -0x408(%rbp), %rdi
movq %rdi, -0x868(%rbp)
leaq -0x4e0(%rbp), %rsi
movq %rsi, -0x870(%rbp)
callq 0x50c30
movq -0x870(%rbp), %rdi
callq 0x3dfa0
movq -0x868(%rbp), %rdi
callq 0x44030
movq %rax, -0x508(%rbp)
leaq -0x508(%rbp), %rdi
movl $0x9, %esi
callq 0x44390
movq -0x868(%rbp), %rdi
movq %rax, -0x500(%rbp)
callq 0x44060
movq %rax, -0x510(%rbp)
leaq -0x511(%rbp), %rdi
movq %rdi, -0x860(%rbp)
callq 0x48e80
movq -0x860(%rbp), %rcx
movq -0x500(%rbp), %rsi
movq -0x510(%rbp), %rdx
leaq -0x4f8(%rbp), %rdi
callq 0xc6600
jmp 0x1143a3
leaq -0x511(%rbp), %rdi
callq 0x40090
movq $0x0, -0x520(%rbp)
movq -0x520(%rbp), %rax
movq %rax, -0x878(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x878(%rbp), %rax
cmpq %rcx, %rax
je 0x114496
movq -0x520(%rbp), %rsi
leaq -0x4f8(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0x130(%rbp), %rdi
callq 0x584d0
movq %rax, -0x880(%rbp)
jmp 0x114412
leaq -0x190(%rbp), %rdi
leaq -0x520(%rbp), %rsi
callq 0x95260
movq %rax, -0x888(%rbp)
jmp 0x11442e
movq -0x880(%rbp), %rsi
movq -0x888(%rbp), %rdi
callq 0xa060
jmp 0x114443
jmp 0x114445
movq -0x520(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x520(%rbp)
jmp 0x1143ba
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x511(%rbp), %rdi
callq 0x40090
jmp 0x115854
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1146d2
leaq -0x100(%rbp), %rdi
callq 0x6c3d0
movq %rax, -0x528(%rbp)
leaq -0x100(%rbp), %rdi
callq 0x6c430
movq %rax, -0x530(%rbp)
leaq -0x528(%rbp), %rdi
leaq -0x530(%rbp), %rsi
callq 0x6c400
testb $0x1, %al
jne 0x1144d8
jmp 0x1146b5
leaq -0x528(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
leaq -0x550(%rbp), %rdi
callq 0xa250
jmp 0x1144f5
leaq -0x528(%rbp), %rdi
callq 0x6c460
movq %rax, %rsi
addq $0x20, %rsi
leaq -0x568(%rbp), %rdi
callq 0x3fee0
jmp 0x114516
leaq -0x580(%rbp), %rdi
leaq -0x4f8(%rbp), %rsi
leaq -0x568(%rbp), %rdx
callq 0x81250
jmp 0x114532
leaq -0x580(%rbp), %rdi
callq 0x95340
testb $0x1, %al
jne 0x114547
jmp 0x114635
movq 0x84aa2(%rip), %rdi     # 0x198ff0
leaq 0x28386(%rip), %rsi     # 0x13c8db
callq 0xa5c0
movq %rax, -0x890(%rbp)
jmp 0x114563
movq -0x890(%rbp), %rdi
leaq -0x550(%rbp), %rsi
callq 0xa520
movq %rax, -0x898(%rbp)
jmp 0x11457f
movq -0x898(%rbp), %rdi
leaq 0x26e82(%rip), %rsi     # 0x13b40f
callq 0xa5c0
movq %rax, -0x8a0(%rbp)
jmp 0x11459b
movq -0x8a0(%rbp), %rdi
movq 0x849df(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x1145b0
leaq -0x580(%rbp), %rdi
callq 0x95340
xorb $-0x1, %al
testb $0x1, %al
jne 0x1145c4
jmp 0x1145c6
jmp 0x114633
leaq 0x28338(%rip), %rdi     # 0x13c905
leaq 0x3937e(%rip), %rsi     # 0x14d952
movl $0xaf, %edx
leaq 0x3938e(%rip), %rcx     # 0x14d96e
callq 0xa390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x1146a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x11469b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x580(%rbp), %rdi
callq 0x50d40
jmp 0x11469b
jmp 0x114635
leaq -0x160(%rbp), %rdi
leaq -0x550(%rbp), %rsi
callq 0x95380
movq %rax, -0x8a8(%rbp)
jmp 0x114651
movq -0x8a8(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x95460
jmp 0x114666
leaq -0x580(%rbp), %rdi
callq 0x50d40
leaq -0x568(%rbp), %rdi
callq 0x3dfa0
leaq -0x550(%rbp), %rdi
callq 0xac88
leaq -0x528(%rbp), %rdi
callq 0x71fc0
jmp 0x1144a9
leaq -0x568(%rbp), %rdi
callq 0x3dfa0
leaq -0x550(%rbp), %rdi
callq 0xac88
jmp 0x1146d2
callq 0xa3a0
movq %rax, -0x460(%rbp)
leaq -0x4f8(%rbp), %rdi
callq 0x3dfa0
jmp 0x115748
leaq -0x4f8(%rbp), %rdi
callq 0x3dfa0
jmp 0x115854
movl -0x398(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x398(%rbp)
movl -0x398(%rbp), %eax
cltd
idivl -0x40c(%rbp)
cmpl $0x0, %edx
jne 0x114876
callq 0xa3a0
movq -0x460(%rbp), %rcx
subq %rcx, %rax
cvtsi2sd %rax, %xmm0
movsd 0x24d04(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x478(%rbp)
movq 0x848b9(%rip), %rdi     # 0x198ff0
leaq 0x28208(%rip), %rsi     # 0x13c946
callq 0xa5c0
movq %rax, -0x8b0(%rbp)
jmp 0x11474c
movq -0x8b0(%rbp), %rdi
movl -0x398(%rbp), %esi
callq 0xab20
movq %rax, -0x8b8(%rbp)
jmp 0x114767
movq -0x8b8(%rbp), %rdi
leaq 0x2b40d(%rip), %rsi     # 0x13fb82
callq 0xa5c0
movq %rax, -0x8c0(%rbp)
jmp 0x114783
movq -0x8c0(%rbp), %rdi
movsd -0x478(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x8c8(%rbp)
jmp 0x1147a0
movq -0x8c8(%rbp), %rdi
leaq 0x2e33a(%rip), %rsi     # 0x142ae8
callq 0xa5c0
movq %rax, -0x8d0(%rbp)
jmp 0x1147bc
movq -0x8d0(%rbp), %rdi
movq 0x847be(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x1147d1
movq 0x84818(%rip), %rdi     # 0x198ff0
leaq 0x35661(%rip), %rsi     # 0x149e40
callq 0xa5c0
movq %rax, -0x8d8(%rbp)
jmp 0x1147ed
movq -0x8d8(%rbp), %rdi
movsd -0x480(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x8e0(%rbp)
jmp 0x11480a
movq -0x8e0(%rbp), %rdi
leaq 0x35637(%rip), %rsi     # 0x149e4f
callq 0xa5c0
movq %rax, -0x8e8(%rbp)
jmp 0x114826
movq -0x8e8(%rbp), %rdi
movsd -0x488(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x8f0(%rbp)
jmp 0x114843
movq -0x8f0(%rbp), %rdi
leaq 0x2e297(%rip), %rsi     # 0x142ae8
callq 0xa5c0
movq %rax, -0x8f8(%rbp)
jmp 0x11485f
movq -0x8f8(%rbp), %rdi
movq 0x8471b(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0x114874
jmp 0x114876
leaq -0x598(%rbp), %rdi
leaq -0x30(%rbp), %rsi
movl $0x9, %edx
callq 0x7bbe0
jmp 0x11488d
leaq -0x408(%rbp), %rdi
movq %rdi, -0x900(%rbp)
leaq -0x598(%rbp), %rsi
movq %rsi, -0x908(%rbp)
callq 0x50c30
movq -0x908(%rbp), %rdi
callq 0x3dfa0
movq -0x900(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x430(%rbp), %rdi
callq 0xa060
jmp 0x1148db
leaq -0x408(%rbp), %rdi
movl $0x1, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x450(%rbp), %rdi
callq 0xa060
jmp 0x1148fd
leaq -0x5b8(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0xa250
jmp 0x114912
leaq -0x5b8(%rbp), %rdi
callq 0x7bab0
movsd %xmm0, -0x910(%rbp)
jmp 0x114928
movsd -0x910(%rbp), %xmm0
movsd %xmm0, -0x458(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0xac88
leaq -0x408(%rbp), %rdi
movq %rdi, -0x920(%rbp)
callq 0x44030
movq %rax, -0x5e0(%rbp)
leaq -0x5e0(%rbp), %rdi
movl $0x9, %esi
callq 0x44390
movq -0x920(%rbp), %rdi
movq %rax, -0x5d8(%rbp)
callq 0x44060
movq %rax, -0x5e8(%rbp)
leaq -0x5e9(%rbp), %rdi
movq %rdi, -0x918(%rbp)
callq 0x48e80
movq -0x918(%rbp), %rcx
movq -0x5d8(%rbp), %rsi
movq -0x5e8(%rbp), %rdx
leaq -0x5d0(%rbp), %rdi
callq 0xc6600
jmp 0x1149bf
leaq -0x5e9(%rbp), %rdi
callq 0x40090
leaq -0x408(%rbp), %rdi
movl $0x3, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x610(%rbp), %rdi
callq 0xa250
jmp 0x1149ed
leaq -0x408(%rbp), %rdi
movl $0x4, %esi
callq 0x3d940
movq %rax, %rsi
leaq -0x630(%rbp), %rdi
callq 0xa250
jmp 0x114a0f
movb $0x0, -0x631(%rbp)
leaq 0x397c5(%rip), %rsi     # 0x14e1e2
leaq -0x630(%rbp), %rdi
callq 0x2d770
movb %al, -0x921(%rbp)
jmp 0x114a31
movb -0x921(%rbp), %al
testb $0x1, %al
jne 0x114a40
jmp 0x114ad7
movb $0x1, -0x631(%rbp)
jmp 0x114ad7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x5b8(%rbp), %rdi
callq 0xac88
jmp 0x115854
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x5e9(%rbp), %rdi
callq 0x40090
jmp 0x115854
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x115737
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x11572b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
jmp 0x11571f
testb $0x1, 0x86c12(%rip)     # 0x19b6f0
jne 0x114b0d
leaq -0x610(%rbp), %rdi
callq 0xa930
cmpq $0x1, %rax
ja 0x114b04
leaq -0x630(%rbp), %rdi
callq 0xa930
cmpq $0x1, %rax
jbe 0x114b0b
movb $0x1, -0x631(%rbp)
jmp 0x114b0d
testb $0x1, -0x631(%rbp)
je 0x114b84
leaq -0x610(%rbp), %rdi
movq %rdi, -0x940(%rbp)
callq 0xa7b0
movq -0x940(%rbp), %rdi
callq 0xac30
leaq -0x630(%rbp), %rdi
movq %rdi, -0x938(%rbp)
callq 0xa7b0
movq -0x938(%rbp), %rdi
callq 0xac30
leaq -0x5d0(%rbp), %rdi
movq %rdi, -0x930(%rbp)
callq 0x591f0
movq -0x930(%rbp), %rdi
callq 0xc6680
jmp 0x114b75
movl $0xb, -0x638(%rbp)
jmp 0x1156e8
callq 0xa3a0
movq %rax, -0x468(%rbp)
movl $0x240, %edi            # imm = 0x240
callq 0xa5d0
movq %rax, -0x948(%rbp)
jmp 0x114ba3
leaq -0x5d0(%rbp), %rdi
callq 0x3ffd0
movq -0x948(%rbp), %rdi
movl %eax, %edx
leaq -0x160(%rbp), %rsi
callq 0xc66a0
jmp 0x114bc6
movq -0x948(%rbp), %rax
movq %rax, -0x640(%rbp)
movq -0x640(%rbp), %rdi
leaq -0x5d0(%rbp), %rsi
leaq -0x190(%rbp), %rdx
callq 0x7b530
jmp 0x114bf0
leaq -0x5d0(%rbp), %rdi
movq %rdi, -0x950(%rbp)
callq 0x591f0
movq -0x950(%rbp), %rdi
callq 0xc6680
jmp 0x114c11
callq 0xa3a0
subq -0x468(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x247fe(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x480(%rbp)
callq 0xa3a0
movq %rax, -0x470(%rbp)
movsd -0x458(%rbp), %xmm0
cvtsi2sdl -0x394(%rbp), %xmm1
ucomisd %xmm1, %xmm0
ja 0x114c72
movsd -0x458(%rbp), %xmm1
cvtsi2sdl -0x390(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x11541e
movl 0x84de8(%rip), %eax     # 0x199a60
movl %eax, -0x644(%rbp)
leaq 0x86a4b(%rip), %rdi     # 0x19b6d0
callq 0xaa70
testb $0x1, %al
jne 0x114d52
movsd -0x458(%rbp), %xmm0
cvtsi2sdl -0x394(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x114d09
movq -0x2c0(%rbp), %rdi
movl -0x390(%rbp), %edx
movl 0x84da5(%rip), %eax     # 0x199a60
movl %edx, %ecx
addl %eax, %ecx
leaq -0x430(%rbp), %rsi
callq 0x95230
movl %eax, -0x954(%rbp)
jmp 0x114cd3
movl -0x954(%rbp), %eax
movl %eax, -0x644(%rbp)
jmp 0x114d50
movq -0x948(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
movl $0x240, %esi            # imm = 0x240
callq 0xa5e0
jmp 0x11571f
movsd -0x458(%rbp), %xmm1
cvtsi2sdl -0x390(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x114d4e
movq -0x2c0(%rbp), %rdi
movl 0x84d34(%rip), %ecx     # 0x199a60
leaq -0x430(%rbp), %rsi
xorl %edx, %edx
callq 0x95230
movl %eax, -0x958(%rbp)
jmp 0x114d42
movl -0x958(%rbp), %eax
movl %eax, -0x644(%rbp)
jmp 0x114d50
jmp 0x114d52
movl $0x0, -0x648(%rbp)
movslq -0x648(%rbp), %rax
movq %rax, -0x960(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x960(%rbp), %rax
cmpq %rcx, %rax
je 0x1152ca
movl $0x0, -0x64c(%rbp)
movslq -0x64c(%rbp), %rax
movq %rax, -0x968(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x968(%rbp), %rax
cmpq %rcx, %rax
je 0x1150c4
movslq -0x648(%rbp), %rsi
leaq -0x300(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
callq 0x3ebf0
movl %eax, -0x650(%rbp)
cmpl $0x0, -0x650(%rbp)
jle 0x115058
movslq -0x648(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x705d0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x4d100
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, -0x978(%rbp)
movl -0x650(%rbp), %eax
movl %eax, -0x96c(%rbp)
movslq -0x648(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x705d0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x4d100
movsd -0x978(%rbp), %xmm0
movq %rax, %rcx
movl -0x96c(%rbp), %eax
addl (%rcx), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x658(%rbp)
movsd -0x658(%rbp), %xmm0
movsd 0x19282(%rip), %xmm1    # 0x12e108
ucomisd %xmm1, %xmm0
jbe 0x114ebf
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x3ec30
movsd 0x2628a(%rip), %xmm0    # 0x13b140
movsd %xmm0, (%rax)
jmp 0x115056
movslq -0x648(%rbp), %rsi
leaq -0x300(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x651e0
movq %rax, %rsi
leaq -0x670(%rbp), %rdi
callq 0x53120
jmp 0x114ef2
movl -0x644(%rbp), %esi
leaq -0x670(%rbp), %rdi
callq 0xe3970
movsd %xmm0, -0x980(%rbp)
jmp 0x114f0e
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x3ec30
movsd -0x980(%rbp), %xmm0
movsd %xmm0, (%rax)
leaq -0x670(%rbp), %rdi
callq 0x3ecb0
cvtsi2sdl -0x650(%rbp), %xmm0
movsd %xmm0, -0x998(%rbp)
movl -0x650(%rbp), %eax
movl %eax, -0x98c(%rbp)
movslq -0x648(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x705d0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x4d100
movsd -0x998(%rbp), %xmm0
movq %rax, %rcx
movl -0x98c(%rbp), %eax
addl (%rcx), %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x678(%rbp)
movsd -0x658(%rbp), %xmm1
divsd -0x678(%rbp), %xmm1
movsd 0x1d2f7(%rip), %xmm0    # 0x1322b8
addsd %xmm1, %xmm0
movsd %xmm0, -0x680(%rbp)
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
mulsd -0x680(%rbp), %xmm0
movsd %xmm0, -0x988(%rbp)
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x3ec30
movsd -0x988(%rbp), %xmm0
movsd %xmm0, (%rax)
jmp 0x115056
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x670(%rbp), %rdi
callq 0x3ecb0
jmp 0x11571f
jmp 0x115086
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x3ec30
movsd 0x260be(%rip), %xmm0    # 0x13b140
movsd %xmm0, (%rax)
movslq -0x648(%rbp), %rsi
leaq -0x300(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movslq -0x64c(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
callq 0x53210
movl -0x64c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x64c(%rbp)
jmp 0x114d90
movslq -0x648(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
callq 0xffd00
movq (%rax), %rdi
leaq -0x430(%rbp), %rsi
callq 0xa520
movq %rax, -0x9a0(%rbp)
jmp 0x1150ef
movq -0x9a0(%rbp), %rdi
leaq 0x20de1(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x9a8(%rbp)
jmp 0x11510b
movq -0x9a8(%rbp), %rdi
movl -0x390(%rbp), %esi
callq 0xab20
movq %rax, -0x9b0(%rbp)
jmp 0x115126
movq -0x9b0(%rbp), %rdi
leaq 0x20daa(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x9b8(%rbp)
jmp 0x115142
movq -0x9b8(%rbp), %rdi
movl -0x394(%rbp), %esi
callq 0xab20
movq %rax, -0x9c0(%rbp)
jmp 0x11515d
movq -0x9c0(%rbp), %rdi
leaq 0x20d73(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x9c8(%rbp)
jmp 0x115179
movslq -0x648(%rbp), %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x4d100
movq -0x9c8(%rbp), %rdi
movl (%rax), %esi
callq 0xab20
movq %rax, -0x9d0(%rbp)
jmp 0x1151a3
movq -0x9d0(%rbp), %rdi
leaq 0x20d2d(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x9d8(%rbp)
jmp 0x1151bf
movslq -0x648(%rbp), %rsi
leaq -0x3d0(%rbp), %rdi
callq 0x4d100
movq -0x9d8(%rbp), %rdi
movl (%rax), %esi
callq 0xab20
movq %rax, -0x9e0(%rbp)
jmp 0x1151e9
movq -0x9e0(%rbp), %rdi
leaq 0x20ce7(%rip), %rsi     # 0x135ede
callq 0xa5c0
movq %rax, -0x9e8(%rbp)
jmp 0x115205
movq -0x9e8(%rbp), %rdi
movl -0x644(%rbp), %esi
callq 0xab20
movq %rax, -0x9f0(%rbp)
jmp 0x115220
movq -0x9f0(%rbp), %rdi
leaq 0x20cb0(%rip), %rsi     # 0x135ede
callq 0xa5c0
jmp 0x115235
movslq -0x648(%rbp), %rsi
leaq -0x388(%rbp), %rdi
callq 0x651e0
movq %rax, %rsi
leaq -0x698(%rbp), %rdi
callq 0x53120
jmp 0x115259
movslq -0x648(%rbp), %rsi
leaq -0x1d0(%rbp), %rdi
callq 0xffd00
movq (%rax), %rsi
leaq -0x698(%rbp), %rdi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x92580
jmp 0x115287
leaq -0x698(%rbp), %rdi
callq 0x3ecb0
movl -0x648(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x648(%rbp)
jmp 0x114d5c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xb0(%rbp)
movl %eax, -0xb4(%rbp)
leaq -0x698(%rbp), %rdi
callq 0x3ecb0
jmp 0x11571f
movl $0x0, -0x69c(%rbp)
movslq -0x69c(%rbp), %rax
movq %rax, -0x9f8(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0x9f8(%rbp), %rax
cmpq %rcx, %rax
je 0x1153af
movslq -0x69c(%rbp), %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x4d100
movl $0x0, (%rax)
movslq -0x69c(%rbp), %rsi
leaq -0x3d0(%rbp), %rdi
callq 0x4d100
movl $0x0, (%rax)
movl $0x0, -0x6a0(%rbp)
movslq -0x6a0(%rbp), %rax
movq %rax, -0xa00(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xa00(%rbp), %rax
cmpq %rcx, %rax
je 0x115399
movslq -0x69c(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x705d0
movq %rax, %rdi
movslq -0x6a0(%rbp), %rsi
callq 0x4d100
movl $0x0, (%rax)
movl -0x6a0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6a0(%rbp)
jmp 0x11533a
jmp 0x11539b
movl -0x69c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x69c(%rbp)
jmp 0x1152d4
movsd -0x458(%rbp), %xmm0
cvtsi2sdl -0x394(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x1153eb
movl -0x390(%rbp), %eax
addl 0x8468f(%rip), %eax     # 0x199a60
movl %eax, -0x390(%rbp)
movl -0x394(%rbp), %eax
addl 0x8467d(%rip), %eax     # 0x199a60
movl %eax, -0x394(%rbp)
jmp 0x11541c
movsd -0x458(%rbp), %xmm1
cvtsi2sdl -0x390(%rbp), %xmm0
ucomisd %xmm1, %xmm0
jbe 0x11541a
movl $0x0, -0x390(%rbp)
movl 0x8464f(%rip), %eax     # 0x199a60
addl $0x0, %eax
movl %eax, -0x394(%rbp)
jmp 0x11541c
jmp 0x11541e
movl $0x0, -0x6ac(%rbp)
movslq -0x6ac(%rbp), %rax
movq %rax, -0xa08(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xa08(%rbp), %rax
cmpq %rcx, %rax
je 0x115688
movq -0x640(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0xa18(%rbp)
movslq -0x6ac(%rbp), %rsi
leaq -0x60(%rbp), %rdi
callq 0x3d940
movq -0xa18(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xa10(%rbp)
jmp 0x11548e
movq -0xa10(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6a8(%rbp)
movsd -0x6a8(%rbp), %xmm0
movsd 0x1e20f(%rip), %xmm1    # 0x1336c0
ucomisd %xmm1, %xmm0
jne 0x1154d8
jp 0x1154d8
movslq -0x6ac(%rbp), %rsi
leaq -0x3d0(%rbp), %rdi
callq 0x4d100
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x115674
movslq -0x6ac(%rbp), %rsi
leaq -0x3b0(%rbp), %rdi
callq 0x4d100
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
movl $0x0, -0x6b0(%rbp)
movslq -0x6b0(%rbp), %rax
movq %rax, -0xa20(%rbp)
leaq -0x78(%rbp), %rdi
callq 0x3ffd0
movq %rax, %rcx
movq -0xa20(%rbp), %rax
cmpq %rcx, %rax
je 0x115672
movq -0x640(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0xa30(%rbp)
movslq -0x6b0(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x3d940
movq -0xa30(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xa28(%rbp)
jmp 0x115562
movq -0xa28(%rbp), %rax
movsd (%rax), %xmm0
movsd %xmm0, -0x6b8(%rbp)
movsd -0x6b8(%rbp), %xmm0
movsd 0x1e13b(%rip), %xmm1    # 0x1336c0
ucomisd %xmm1, %xmm0
jne 0x115592
jp 0x115592
jmp 0x115633
movsd -0x6a8(%rbp), %xmm0
movsd %xmm0, -0xa48(%rbp)
movq -0x640(%rbp), %rax
addq $0xe0, %rax
movq %rax, -0xa40(%rbp)
movslq -0x6b0(%rbp), %rsi
leaq -0x78(%rbp), %rdi
callq 0x3d940
movq -0xa40(%rbp), %rdi
movq %rax, %rsi
callq 0x847c0
movq %rax, -0xa38(%rbp)
jmp 0x1155de
movsd -0xa48(%rbp), %xmm0
movq -0xa38(%rbp), %rax
movsd (%rax), %xmm1
callq 0x113310
movsd %xmm0, -0x6c0(%rbp)
movslq -0x6ac(%rbp), %rsi
leaq -0x300(%rbp), %rdi
callq 0xf57b0
movq %rax, %rdi
movslq -0x6b0(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
leaq -0x6c0(%rbp), %rsi
callq 0xb77b0
jmp 0x115631
jmp 0x11565c
movslq -0x6ac(%rbp), %rsi
leaq -0x340(%rbp), %rdi
callq 0x705d0
movq %rax, %rdi
movslq -0x6b0(%rbp), %rsi
callq 0x4d100
movl (%rax), %ecx
addl $0x1, %ecx
movl %ecx, (%rax)
jmp 0x11565e
movl -0x6b0(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6b0(%rbp)
jmp 0x1154fc
jmp 0x115674
movl -0x6ac(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x6ac(%rbp)
jmp 0x115428
callq 0xa3a0
subq -0x470(%rbp), %rax
cvtsi2sd %rax, %xmm0
movsd 0x23d87(%rip), %xmm1    # 0x139428
divsd %xmm1, %xmm0
movsd %xmm0, -0x488(%rbp)
movq -0x640(%rbp), %rax
movq %rax, -0xa50(%rbp)
cmpq $0x0, %rax
je 0x1156de
movq -0xa50(%rbp), %rdi
callq 0xc6bd0
movq -0xa50(%rbp), %rdi
movl $0x240, %esi            # imm = 0x240
callq 0xa5e0
movl $0x0, -0x638(%rbp)
leaq -0x630(%rbp), %rdi
callq 0xac88
leaq -0x610(%rbp), %rdi
callq 0xac88
leaq -0x5d0(%rbp), %rdi
callq 0x3dfa0
movl -0x638(%rbp), %eax
testl %eax, %eax
je 0x11571d
jmp 0x115718
jmp 0x113ffe
jmp 0x115748
leaq -0x630(%rbp), %rdi
callq 0xac88
leaq -0x610(%rbp), %rdi
callq 0xac88
leaq -0x5d0(%rbp), %rdi
callq 0x3dfa0
jmp 0x115854
jmp 0x11574a
jmp 0x113ffe
movl $0x1, -0x638(%rbp)
leaq -0x450(%rbp), %rdi
callq 0xac88
leaq -0x430(%rbp), %rdi
callq 0xac88
leaq -0x408(%rbp), %rdi
callq 0x3dfa0
leaq -0x3f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x3d0(%rbp), %rdi
callq 0x48290
leaq -0x3b0(%rbp), %rdi
callq 0x48290
leaq -0x388(%rbp), %rdi
callq 0x65200
leaq -0x360(%rbp), %rdi
callq 0x3ecb0
leaq -0x340(%rbp), %rdi
callq 0x6d0b0
leaq -0x320(%rbp), %rdi
callq 0x48290
leaq -0x300(%rbp), %rdi
callq 0xf57d0
leaq -0x2e0(%rbp), %rdi
callq 0x65200
leaq -0x1d0(%rbp), %rdi
callq 0x1007c0
leaq -0x190(%rbp), %rdi
callq 0x95b50
leaq -0x160(%rbp), %rdi
callq 0x95b70
leaq -0x130(%rbp), %rdi
callq 0x58620
leaq -0x100(%rbp), %rdi
callq 0x58f00
leaq -0x78(%rbp), %rdi
callq 0x3dfa0
leaq -0x60(%rbp), %rdi
callq 0x3dfa0
leaq -0x48(%rbp), %rdi
callq 0x3dfa0
leaq -0x30(%rbp), %rdi
callq 0xac88
xorl %eax, %eax
addq $0xa50, %rsp            # imm = 0xA50
popq %rbp
retq
leaq -0x450(%rbp), %rdi
callq 0xac88
leaq -0x430(%rbp), %rdi
callq 0xac88
leaq -0x408(%rbp), %rdi
callq 0x3dfa0
leaq -0x3f0(%rbp), %rdi
callq 0x3dfa0
leaq -0x3d0(%rbp), %rdi
callq 0x48290
leaq -0x3b0(%rbp), %rdi
callq 0x48290
leaq -0x388(%rbp), %rdi
callq 0x65200
leaq -0x360(%rbp), %rdi
callq 0x3ecb0
leaq -0x340(%rbp), %rdi
callq 0x6d0b0
leaq -0x320(%rbp), %rdi
callq 0x48290
leaq -0x300(%rbp), %rdi
callq 0xf57d0
leaq -0x2e0(%rbp), %rdi
callq 0x65200
leaq -0x1d0(%rbp), %rdi
callq 0x1007c0
leaq -0x190(%rbp), %rdi
callq 0x95b50
leaq -0x160(%rbp), %rdi
callq 0x95b70
leaq -0x130(%rbp), %rdi
callq 0x58620
leaq -0x100(%rbp), %rdi
callq 0x58f00
leaq -0x78(%rbp), %rdi
callq 0x3dfa0
leaq -0x60(%rbp), %rdi
callq 0x3dfa0
leaq -0x48(%rbp), %rdi
callq 0x3dfa0
leaq -0x30(%rbp), %rdi
callq 0xac88
movq -0xb0(%rbp), %rdi
callq 0xab50