// File: /workspace/github_cpp_makefile_star2_O3/millanek[P]evo/evo_codingStats_from_alignment.cpp
// Function: getCodingStats(int, char**)
int getCodingStats(int argc, char** argv) {
    parseCodingStatsOptions(argc, argv);
    std::vector<string> allAligmentFiles; string statsFileName; string pcaVectorsFileName;
    
    std::vector<std::vector<std::string>> genomeWide_Dxy;
    if (opt::genomeWide_DxyMatrixFile != "") {
        std::ifstream* genomeWide_DxyMatrixFile = new std::ifstream(opt::genomeWide_DxyMatrixFile);
        string line;
        while (getline(*genomeWide_DxyMatrixFile, line)) {
            std::vector<string> thisIndDxyVec = split(line, '\t');
            genomeWide_Dxy.push_back(thisIndDxyVec);
        }
    }
    
    pNsets* sets;
    if (opt::pNgroupsFile != "") {
        std::ifstream* pNgroupsF = new std::ifstream(opt::pNgroupsFile);
        sets = new pNsets(pNgroupsF);
    } else {
        sets = new pNsets();
    }
    if (sets->initialised == true) {
        std::cerr << "Sets are initialised" << std::endl;
    }
    
    std::cerr << "Calculating gene coding statistics" << std::endl;
    
    if (opt::alignmentFile != "") {
        allAligmentFiles.push_back(opt::alignmentFile);
        // look at suffix
        size_t suffixPos = opt::alignmentFile.find_last_of('.');
        if (suffixPos !=  std::string::npos) {
            if (opt::alignmentFile.substr(suffixPos) == ".fa" || opt::alignmentFile.substr(suffixPos) == ".fasta") {
                statsFileName = stripExtension(opt::alignmentFile) + "_stats.txt";
                std::cerr << "for the gene: " << stripExtension(opt::alignmentFile) << std::endl;
            } else {
                statsFileName = opt::alignmentFile + "_stats.txt";
                std::cerr << "for the gene: " << opt::alignmentFile << std::endl;
            }
        }
    } else {
        std::ifstream* alignmentList = new std::ifstream(opt::alignmentListFile.c_str());
        statsFileName = stripExtension(opt::alignmentListFile) + "_stats.txt";
        pcaVectorsFileName = stripExtension(opt::alignmentListFile) + "_pcaVectors.txt";
        std::cerr << "for the genes in: " << opt::alignmentListFile << std::endl;
        std::string line;
        while (getline(*alignmentList, line)) {
            allAligmentFiles.push_back(line);
        }
    } 
      
    std::ofstream* statsFile = new std::ofstream(statsFileName.c_str());
    std::ofstream* pcaVectorsFile = new std::ofstream(pcaVectorsFileName.c_str());
    if (opt::ploidy == 'd') {
        if (opt::pNgroupsFile != "") {
            std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << "\t" << "withinSet1pN" << "\t" << "withinSet2pN" << "\t" << "withinSet3pN"<< "\t" << "pNset1vsSet2" << "\t" << "pNset1andSet2vsSet3" << "\t" << "pNwithinSet1andSet2" << std::endl;
            *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << "\t" << "withinSet1pN" << "\t" << "withinSet2pN" << "\t" << "withinSet3pN"<< "\t" << "pNset1vsSet2" << "\t" << "pNset1andSet2vsSet3" << "\t" << "pNwithinSet1andSet2" << std::endl;
        } else {
            std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << std::endl;
            *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "hetN" << "\t" << "hetS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << "\t" << "pNpSstdErrAllComparisons" << std::endl;
        }
    } else {
        std::cout << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << std::endl;
        *statsFile << "transcript" << "\t" << "ntLengh" << "\t" << "pN" << "\t" << "pS" << "\t" << "pNstdErr" << "\t" << "pSstdErr" << "\t" << "pNpSstdErr" << std::endl;
    }
    // Loop over the mutiple alignment files:
    for (std::vector<std::string>::size_type i = 0; i != allAligmentFiles.size(); i++) {
        std::ifstream* alignment = new std::ifstream(allAligmentFiles[i].c_str());
        std::vector<string> allSeqs; std::vector<string> allSeqsH2;
        std::string line; int lineNum = 1;
        while (getline(*alignment, line)) {
            if (lineNum % 2 == 1) assert(line[0] == '>');
            lineNum++;
            if (line[0] == '>') continue;
            if (opt::ploidy == 'd' && allSeqsH2.size() == (allSeqs.size() - 1))
                allSeqsH2.push_back(line);
            else
                allSeqs.push_back(line);
        } alignment->close();
        
        //std::cerr << "loaded seqs for: " << allAligmentFiles[i] << std::endl;
        //std::cerr << "allSeqs.size(): " << allSeqs.size() << std::endl;
        if (allSeqs.size() > 0) {
            assert(allSeqs[0].length() % 3 == 0); // The gene length must be divisible by three
            if (opt::ploidy == 'd')
                assert(allSeqs[0].length() == allSeqsH2[0].length());
            
            std::vector<string> statsThisGene; statsThisGene.push_back(allAligmentFiles[i]);
            if (opt::ploidy == 'd') {
                std::vector<std::vector<double> > combinedVectorForPCA;
                getStatsBothPhasedHaps(allSeqs, allSeqsH2, statsThisGene, combinedVectorForPCA, sets, opt::tStVratio, opt::nonCodingNull);
                std::cerr << "got stats for: " << allAligmentFiles[i] << std::endl;
                if (opt::pNgroupsFile != "") {
                    int ns1 = (int)sets->set1Loci.size(); int ns2 = (int)sets->set2Loci.size(); int ns3 = (int)sets->set3Loci.size();
                    statsThisGene.push_back(numToString(sets->withinSet1pN/(2*ns1*(ns1-1))));
                    statsThisGene.push_back(numToString(sets->withinSet2pN/(2*ns2*(ns2-1))));
                    statsThisGene.push_back(numToString(sets->withinSet3pN/(2*ns3*(ns3-1))));
                    statsThisGene.push_back(numToString(sets->set1vsSet2pN/(2*ns1*ns2)));
                    statsThisGene.push_back(numToString(sets->sets1and2vsSet3pN/(2*(ns1+ns2)*ns3)));
                    statsThisGene.push_back(numToString(sets->withinSet1andSet2pN/(2*(ns1+ns2)*(ns1+ns2-1))));
                    sets->withinSet1pN = 0;
                    sets->withinSet2pN = 0;
                    sets->withinSet3pN = 0;
                    sets->set1vsSet2pN = 0;
                    sets->sets1and2vsSet3pN = 0;
                    sets->withinSet1andSet2pN = 0;
                }
                print_vector(statsThisGene, std::cout);
                print_vector(statsThisGene, *statsFile);
                for (int i = 0; i < combinedVectorForPCA.size() - 1; i++) {
                    for (int j = i+1; j < combinedVectorForPCA.size(); j++) {
                        if (j == (combinedVectorForPCA.size() - 1) && i == (combinedVectorForPCA.size() - 2))
                            *pcaVectorsFile << combinedVectorForPCA[i][j] << std::endl;
                        else
                            *pcaVectorsFile << combinedVectorForPCA[i][j] << '\t';
                    }
                }
            } else {
                getStatsHaploidSeq(allSeqs,statsThisGene, opt::tStVratio);
                print_vector(statsThisGene, std::cout);
                print_vector(statsThisGene, *statsFile);
            }
        } else{
            std::cout << allAligmentFiles[i] << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << std::endl;
            *statsFile << allAligmentFiles[i] << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << "\t" << "NA" << std::endl;
        }
    }
    return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1b8, %rsp            # imm = 0x1B8
callq 0x4260b
xorl %eax, %eax
movq %rax, 0x80(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0x70(%rsp)
leaq 0x108(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x128(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq %rax, 0x150(%rsp)
movapd %xmm0, 0x140(%rsp)
leaq 0xc2af6(%rip), %rdi     # 0x102fa0
leaq 0x8d51a(%rip), %rsi     # 0xcd9cb
callq 0x8160
testl %eax, %eax
je 0x40573
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %rbx
leaq 0xc2ace(%rip), %rsi     # 0x102fa0
movq %rax, %rdi
movl $0x8, %edx
callq 0x8740
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq $0x0, -0x8(%r13)
movb $0x0, (%r13)
leaq 0x28(%rsp), %r14
leaq 0x8(%rsp), %r15
leaq 0x140(%rsp), %r12
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x4055c
movq %r15, %rdi
movq %r14, %rsi
movl $0x9, %edx
callq 0x4d650
movq %r12, %rdi
movq %r15, %rsi
callq 0x2f876
movq %r15, %rdi
callq 0x2e784
jmp 0x40507
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x40573
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xc2a06(%rip), %rdi     # 0x102f80
leaq 0x8d44a(%rip), %rsi     # 0xcd9cb
callq 0x8160
testl %eax, %eax
je 0x405cf
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %rbx
leaq 0xc29e2(%rip), %rsi     # 0x102f80
movq %rax, %rdi
movl $0x8, %edx
callq 0x8740
movq %rbx, 0x28(%rsp)
movl $0xe0, %edi
callq 0x8470
movq %rax, %r12
leaq 0x28(%rsp), %rsi
movq %rax, %rdi
callq 0x429aa
jmp 0x40683
movl $0xe0, %edi
callq 0x8470
movq %rax, %r12
addq $0x30, %rax
movq %rax, (%r12)
movl $0x1, %eax
movq %rax, 0x8(%r12)
xorpd %xmm0, %xmm0
movupd %xmm0, 0x10(%r12)
movl $0x3f800000, %ecx       # imm = 0x3F800000
movl %ecx, 0x20(%r12)
movupd %xmm0, 0x28(%r12)
leaq 0x68(%r12), %rdx
movq %rdx, 0x38(%r12)
movq %rax, 0x40(%r12)
movupd %xmm0, 0x48(%r12)
movl %ecx, 0x58(%r12)
movupd %xmm0, 0x60(%r12)
movq %r12, %rdx
addq $0xa0, %rdx
movq %rdx, 0x70(%r12)
movq %rax, 0x78(%r12)
movupd %xmm0, 0x80(%r12)
movl %ecx, 0x90(%r12)
movupd %xmm0, 0x98(%r12)
movupd %xmm0, 0xa8(%r12)
movupd %xmm0, 0xb8(%r12)
movupd %xmm0, 0xc8(%r12)
movb $0x0, 0xd8(%r12)
cmpb $0x1, 0xd8(%r12)
jne 0x406d4
movq 0xc1953(%rip), %rbx     # 0x101fe8
leaq 0x8dabc(%rip), %rsi     # 0xce158
movl $0x14, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc1921(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0xc190d(%rip), %rbx     # 0x101fe8
leaq 0x8da8b(%rip), %rsi     # 0xce16d
movl $0x22, %edx
movq %rbx, %rdi
callq 0x84e0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc18db(%rip), %rdi     # 0x101fe8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0xc281f(%rip), %rdi     # 0x102f40
leaq 0x8d2a3(%rip), %rsi     # 0xcd9cb
callq 0x8160
testl %eax, %eax
je 0x407f4
leaq 0xc2804(%rip), %rsi     # 0x102f40
leaq 0x70(%rsp), %rdi
callq 0x3133c
leaq 0xc27f3(%rip), %rdi     # 0x102f40
movl $0x2e, %esi
movq $-0x1, %rdx
callq 0x88f0
cmpq $-0x1, %rax
je 0x40b64
movq %rax, %rbx
leaq 0xc27ce(%rip), %rsi     # 0x102f40
leaq 0x28(%rsp), %rdi
movq %rax, %rdx
movq $-0x1, %rcx
callq 0x84a0
leaq 0x98e0d(%rip), %rsi     # 0xd959a
leaq 0x28(%rsp), %rdi
callq 0x8160
testl %eax, %eax
je 0x40865
leaq 0xc279a(%rip), %rsi     # 0x102f40
leaq 0x8(%rsp), %rdi
movq %rbx, %rdx
movq $-0x1, %rcx
callq 0x84a0
leaq 0x8d5d2(%rip), %rsi     # 0xcdd93
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x8160
testl %eax, %eax
sete %bpl
movq (%rbx), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x40868
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x40868
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %r14
movq 0xc2758(%rip), %rsi     # 0x102f60
movq %rax, %rdi
movl $0x8, %edx
callq 0x8860
leaq 0xc2744(%rip), %rsi     # 0x102f60
leaq 0x8(%rsp), %rdi
callq 0x4d82f
leaq 0x8d963(%rip), %rsi     # 0xce190
leaq 0x8(%rsp), %rdi
callq 0x88c0
leaq 0x38(%rsp), %r13
movq %r13, -0x10(%r13)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x4098e
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x40998
movb $0x1, %bpl
leaq 0x38(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %r14, %rdi
je 0x40883
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
testb %bpl, %bpl
je 0x408d4
leaq 0xc26b1(%rip), %rsi     # 0x102f40
leaq 0x8(%rsp), %rdi
callq 0x4d82f
leaq 0x8d8f0(%rip), %rsi     # 0xce190
leaq 0x8(%rsp), %rdi
callq 0x88c0
movq %r14, 0x28(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x42245
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x4224e
leaq 0x28(%rsp), %rdi
movq %r14, (%rdi)
movq 0xc265d(%rip), %rsi     # 0x102f40
movq 0xc265e(%rip), %rdx     # 0x102f48
addq %rsi, %rdx
callq 0x2ba06
leaq 0x8d897(%rip), %rsi     # 0xce190
leaq 0x28(%rsp), %rdi
callq 0x88c0
leaq 0xf8(%rsp), %rdi
leaq 0x28(%rsp), %rbx
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x4092d
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xc16b4(%rip), %rdi     # 0x101fe8
leaq 0x8d00e(%rip), %rsi     # 0xcd949
movl $0xe, %edx
callq 0x84e0
movq 0xc25f4(%rip), %rsi     # 0x102f40
movq 0xc25f5(%rip), %rdx     # 0x102f48
movq 0xc168e(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x40b64
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r13, %rdi
je 0x409d9
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x18(%rsp), %r15
movq -0x10(%r15), %rdi
cmpq %r15, %rdi
je 0x409f4
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xc2565(%rip), %rsi     # 0x102f60
leaq 0x8(%rsp), %rdi
callq 0x4d82f
leaq 0x8d78f(%rip), %rsi     # 0xce19b
leaq 0x8(%rsp), %rdi
callq 0x88c0
movq %r13, 0x28(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x40a39
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x40a43
movupd (%rcx), %xmm0
movupd %xmm0, (%r13)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x118(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r13, %rdi
je 0x40a84
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
je 0x40a9b
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xc1546(%rip), %rdi     # 0x101fe8
leaq 0x8b777(%rip), %rsi     # 0xcc220
movl $0x12, %edx
callq 0x84e0
movq 0xc24a6(%rip), %rsi     # 0x102f60
movq 0xc24a7(%rip), %rdx     # 0x102f68
movq 0xc1520(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x28(%rsp), %rbx
movq %r13, (%rbx)
movq $0x0, 0x8(%rbx)
movb $0x0, 0x10(%rbx)
leaq 0x70(%rsp), %r15
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x40b4d
movq %r15, %rdi
movq %rbx, %rsi
callq 0x3133c
jmp 0x40b10
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x40b64
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, %r13
movq 0xf8(%rsp), %rsi
movq %rax, %rdi
movl $0x10, %edx
callq 0x84c0
movl $0x200, %edi            # imm = 0x200
callq 0x8470
movq %rax, 0x68(%rsp)
movq 0x118(%rsp), %rsi
movq 0x68(%rsp), %rdi
movl $0x10, %edx
callq 0x84c0
cmpb $0x64, 0xc190d(%rip)    # 0x1024c0
jne 0x41150
leaq 0xc23c0(%rip), %rdi     # 0x102f80
leaq 0x8ce04(%rip), %rsi     # 0xcd9cb
callq 0x8160
testl %eax, %eax
je 0x413b4
movq 0xc13dd(%rip), %rdi     # 0x101fb8
leaq 0x8d5c9(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
callq 0x84e0
movq 0xc13c5(%rip), %rdi     # 0x101fb8
leaq 0x8cdd0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc13ad(%rip), %rdi     # 0x101fb8
leaq 0x8d5a4(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
callq 0x84e0
movq 0xc1395(%rip), %rdi     # 0x101fb8
leaq 0x8cda0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc137d(%rip), %rdi     # 0x101fb8
leaq 0x8d5c0(%rip), %rsi     # 0xce202
movl $0x2, %edx
callq 0x84e0
movq 0xc1365(%rip), %rdi     # 0x101fb8
leaq 0x8cd70(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc134d(%rip), %rdi     # 0x101fb8
leaq 0x8d54c(%rip), %rsi     # 0xce1be
movl $0x2, %edx
callq 0x84e0
movq 0xc1335(%rip), %rdi     # 0x101fb8
leaq 0x8cd40(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc131d(%rip), %rdi     # 0x101fb8
leaq 0x8d51f(%rip), %rsi     # 0xce1c1
movl $0x4, %edx
callq 0x84e0
movq 0xc1305(%rip), %rdi     # 0x101fb8
leaq 0x8cd10(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc12ed(%rip), %rdi     # 0x101fb8
leaq 0x8d4f4(%rip), %rsi     # 0xce1c6
movl $0x4, %edx
callq 0x84e0
movq 0xc12d5(%rip), %rdi     # 0x101fb8
leaq 0x8cce0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc12bd(%rip), %rdi     # 0x101fb8
leaq 0x8d4c9(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
callq 0x84e0
movq 0xc12a5(%rip), %rdi     # 0x101fb8
leaq 0x8ccb0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc128d(%rip), %rdi     # 0x101fb8
leaq 0x8d4a4(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
callq 0x84e0
movq 0xc1275(%rip), %rdi     # 0x101fb8
leaq 0x8cc80(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc125d(%rip), %rdi     # 0x101fb8
leaq 0x8d472(%rip), %rsi     # 0xce1d4
movl $0xa, %edx
callq 0x84e0
movq 0xc1245(%rip), %rdi     # 0x101fb8
leaq 0x8cc50(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc122d(%rip), %rdi     # 0x101fb8
leaq 0x8d44d(%rip), %rsi     # 0xce1df
movl $0x18, %edx
callq 0x84e0
movq 0xc1215(%rip), %rdi     # 0x101fb8
leaq 0x8cc20(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc11fd(%rip), %rdi     # 0x101fb8
leaq 0x8d436(%rip), %rsi     # 0xce1f8
movl $0xc, %edx
callq 0x84e0
movq 0xc11e5(%rip), %rdi     # 0x101fb8
leaq 0x8cbf0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc11cd(%rip), %rdi     # 0x101fb8
leaq 0x8d413(%rip), %rsi     # 0xce205
movl $0xc, %edx
callq 0x84e0
movq 0xc11b5(%rip), %rdi     # 0x101fb8
leaq 0x8cbc0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc119d(%rip), %rdi     # 0x101fb8
leaq 0x8d3f0(%rip), %rsi     # 0xce212
movl $0xc, %edx
callq 0x84e0
movq 0xc1185(%rip), %rdi     # 0x101fb8
leaq 0x8cb90(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc116d(%rip), %rdi     # 0x101fb8
leaq 0x8d3cd(%rip), %rsi     # 0xce21f
movl $0xc, %edx
callq 0x84e0
movq 0xc1155(%rip), %rdi     # 0x101fb8
leaq 0x8cb60(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc113d(%rip), %rdi     # 0x101fb8
leaq 0x8d3aa(%rip), %rsi     # 0xce22c
movl $0x13, %edx
callq 0x84e0
movq 0xc1125(%rip), %rdi     # 0x101fb8
leaq 0x8cb30(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc110d(%rip), %r14     # 0x101fb8
leaq 0x8d38e(%rip), %rbx     # 0xce240
movl $0x13, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc10d8(%rip), %rdi     # 0x101fb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x8d2b7(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cac2(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d29a(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ca9a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d2be(%rip), %rsi     # 0xce202
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ca72(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d252(%rip), %rsi     # 0xce1be
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ca4a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d22d(%rip), %rsi     # 0xce1c1
movl $0x4, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ca22(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d20a(%rip), %rsi     # 0xce1c6
movl $0x4, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c9fa(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d1e7(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c9d2(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d1ca(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c9aa(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d1a0(%rip), %rsi     # 0xce1d4
movl $0xa, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c982(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d183(%rip), %rsi     # 0xce1df
movl $0x18, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c95a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d174(%rip), %rsi     # 0xce1f8
movl $0xc, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c932(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d159(%rip), %rsi     # 0xce205
movl $0xc, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c90a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d13e(%rip), %rsi     # 0xce212
movl $0xc, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c8e2(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d123(%rip), %rsi     # 0xce21f
movl $0xc, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c8ba(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8d108(%rip), %rsi     # 0xce22c
movl $0x13, %r14d
movl $0x13, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c88c(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
jmp 0x4171b
movq 0xc0e61(%rip), %rdi     # 0x101fb8
leaq 0x8d04d(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
callq 0x84e0
movq 0xc0e49(%rip), %rdi     # 0x101fb8
leaq 0x8c854(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0e31(%rip), %rdi     # 0x101fb8
leaq 0x8d028(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
callq 0x84e0
movq 0xc0e19(%rip), %rdi     # 0x101fb8
leaq 0x8c824(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0e01(%rip), %rdi     # 0x101fb8
leaq 0x8d044(%rip), %rsi     # 0xce202
movl $0x2, %edx
callq 0x84e0
movq 0xc0de9(%rip), %rdi     # 0x101fb8
leaq 0x8c7f4(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0dd1(%rip), %rdi     # 0x101fb8
leaq 0x8cfd0(%rip), %rsi     # 0xce1be
movl $0x2, %edx
callq 0x84e0
movq 0xc0db9(%rip), %rdi     # 0x101fb8
leaq 0x8c7c4(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0da1(%rip), %rdi     # 0x101fb8
leaq 0x8cfad(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
callq 0x84e0
movq 0xc0d89(%rip), %rdi     # 0x101fb8
leaq 0x8c794(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0d71(%rip), %rdi     # 0x101fb8
leaq 0x8cf88(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
callq 0x84e0
movq 0xc0d59(%rip), %rdi     # 0x101fb8
leaq 0x8c764(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0d41(%rip), %r14     # 0x101fb8
leaq 0x8cf56(%rip), %rbx     # 0xce1d4
movl $0xa, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc0d0c(%rip), %rdi     # 0x101fb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x8ceeb(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c6f6(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cece(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c6ce(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cef2(%rip), %rsi     # 0xce202
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c6a6(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ce86(%rip), %rsi     # 0xce1be
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c67e(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ce6b(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c656(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8ce4e(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
movl $0xa, %r14d
leaq 0x8c628(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
jmp 0x4171b
movq 0xc0bfd(%rip), %rdi     # 0x101fb8
leaq 0x8cde9(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
callq 0x84e0
movq 0xc0be5(%rip), %rdi     # 0x101fb8
leaq 0x8c5f0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0bcd(%rip), %rdi     # 0x101fb8
leaq 0x8cdc4(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
callq 0x84e0
movq 0xc0bb5(%rip), %rdi     # 0x101fb8
leaq 0x8c5c0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0b9d(%rip), %rdi     # 0x101fb8
leaq 0x8cde0(%rip), %rsi     # 0xce202
movl $0x2, %edx
callq 0x84e0
movq 0xc0b85(%rip), %rdi     # 0x101fb8
leaq 0x8c590(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0b6d(%rip), %rdi     # 0x101fb8
leaq 0x8cd6c(%rip), %rsi     # 0xce1be
movl $0x2, %edx
callq 0x84e0
movq 0xc0b55(%rip), %rdi     # 0x101fb8
leaq 0x8c560(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0b3d(%rip), %rdi     # 0x101fb8
leaq 0x8cd3f(%rip), %rsi     # 0xce1c1
movl $0x4, %edx
callq 0x84e0
movq 0xc0b25(%rip), %rdi     # 0x101fb8
leaq 0x8c530(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0b0d(%rip), %rdi     # 0x101fb8
leaq 0x8cd14(%rip), %rsi     # 0xce1c6
movl $0x4, %edx
callq 0x84e0
movq 0xc0af5(%rip), %rdi     # 0x101fb8
leaq 0x8c500(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0add(%rip), %rdi     # 0x101fb8
leaq 0x8cce9(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
callq 0x84e0
movq 0xc0ac5(%rip), %rdi     # 0x101fb8
leaq 0x8c4d0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0aad(%rip), %rdi     # 0x101fb8
leaq 0x8ccc4(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
callq 0x84e0
movq 0xc0a95(%rip), %rdi     # 0x101fb8
leaq 0x8c4a0(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0a7d(%rip), %rdi     # 0x101fb8
leaq 0x8cc92(%rip), %rsi     # 0xce1d4
movl $0xa, %edx
callq 0x84e0
movq 0xc0a65(%rip), %rdi     # 0x101fb8
leaq 0x8c470(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
callq 0x84e0
movq 0xc0a4d(%rip), %r14     # 0x101fb8
leaq 0x8cc6d(%rip), %rbx     # 0xce1df
movl $0x18, %edx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x84e0
movq (%r14), %rax
addq -0x18(%rax), %r14
movq %r14, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq 0xc0a18(%rip), %rdi     # 0x101fb8
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0x8cbf7(%rip), %rsi     # 0xce1ab
movl $0xa, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c402(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cbda(%rip), %rsi     # 0xce1b6
movl $0x7, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c3da(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cbfe(%rip), %rsi     # 0xce202
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c3b2(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cb92(%rip), %rsi     # 0xce1be
movl $0x2, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c38a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cb6d(%rip), %rsi     # 0xce1c1
movl $0x4, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c362(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cb4a(%rip), %rsi     # 0xce1c6
movl $0x4, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c33a(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cb27(%rip), %rsi     # 0xce1cb
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c312(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cb0a(%rip), %rsi     # 0xce1d6
movl $0x8, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8c2ea(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
leaq 0x8cae0(%rip), %rsi     # 0xce1d4
movl $0xa, %edx
movq %r13, %rdi
callq 0x84e0
movl $0x18, %r14d
leaq 0x8c2bc(%rip), %rsi     # 0xcd9ca
movl $0x1, %edx
movq %r13, %rdi
callq 0x84e0
movq %r13, %rdi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x84e0
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %r13, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x70(%rsp), %r15
cmpq %r15, 0x78(%rsp)
je 0x421d0
leaq 0xa8(%r12), %rax
movq %rax, 0x138(%rsp)
movabsq $-0x5555555555555555, %r14 # imm = 0xAAAAAAAAAAAAAAAB
movq $0x0, 0x88(%rsp)
movq %r12, 0x48(%rsp)
movq %r13, 0xf0(%rsp)
movl $0x208, %edi            # imm = 0x208
callq 0x8470
movq %rax, %rbx
movq 0x88(%rsp), %rbp
shlq $0x5, %rbp
movq (%r15,%rbp), %rsi
movq %rax, %rdi
movl $0x8, %edx
callq 0x8860
xorpd %xmm0, %xmm0
movapd %xmm0, 0x90(%rsp)
xorl %ecx, %ecx
movq %rcx, 0xa0(%rsp)
movq %rcx, 0xe0(%rsp)
movapd %xmm0, 0xd0(%rsp)
leaq 0x38(%rsp), %rax
movq %rax, 0x28(%rsp)
movq %rcx, 0x30(%rsp)
movb $0x0, 0x38(%rsp)
movl $0x1, %r15d
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %edx
movq %rbx, %rdi
leaq 0x28(%rsp), %rsi
callq 0x8870
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x418af
movq 0x28(%rsp), %rax
movb (%rax), %al
testb $0x1, %r15b
jne 0x4189f
orl $0x1, %r15d
cmpb $0x3e, %al
je 0x41800
cmpb $0x64, 0xc0c72(%rip)    # 0x1024c0
jne 0x41888
movq 0xd8(%rsp), %rax
subq 0xd0(%rsp), %rax
sarq $0x5, %rax
movq 0x98(%rsp), %rcx
subq 0x90(%rsp), %rcx
sarq $0x5, %rcx
decq %rcx
leaq 0xd0(%rsp), %rdi
cmpq %rcx, %rax
je 0x41890
leaq 0x90(%rsp), %rdi
leaq 0x28(%rsp), %rsi
callq 0x3133c
jmp 0x41800
cmpb $0x3e, %al
jne 0x42326
incl %r15d
jmp 0x41800
movq %rbx, %rdi
callq 0x80f0
leaq 0x8c10c(%rip), %r15     # 0xcd9ca
movq 0x90(%rsp), %rax
cmpq %rax, 0x98(%rsp)
je 0x41dc6
movq 0x8(%rax), %rax
movq %rax, %rcx
imulq %r14, %rcx
movabsq $0x5555555555555556, %rdx # imm = 0x5555555555555556
cmpq %rdx, %rcx
jae 0x42345
cmpb $0x64, 0xc0bc7(%rip)    # 0x1024c0
leaq 0x1a0(%rsp), %r15
jne 0x41915
movq 0xd0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x42364
xorpd %xmm0, %xmm0
movapd %xmm0, 0x50(%rsp)
movq $0x0, 0x60(%rsp)
movq 0x70(%rsp), %rsi
addq %rbp, %rsi
leaq 0x50(%rsp), %rdi
callq 0x3133c
cmpb $0x64, 0xc0b7f(%rip)    # 0x1024c0
jne 0x420d7
xorpd %xmm0, %xmm0
movapd %xmm0, 0xb0(%rsp)
movq $0x0, 0xc0(%rsp)
movsd 0xc0b60(%rip), %xmm0    # 0x1024c8
movzbl 0xc1650(%rip), %r9d     # 0x102fc0
leaq 0x90(%rsp), %rdi
leaq 0xd0(%rsp), %rsi
leaq 0x50(%rsp), %rdx
leaq 0xb0(%rsp), %rcx
movq %r12, %r8
callq 0x72c0d
movl $0xf, %edx
movq 0xc0647(%rip), %rdi     # 0x101fe8
leaq 0x8c93a(%rip), %rsi     # 0xce2e2
callq 0x84e0
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq 0xc0626(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
leaq 0xc1588(%rip), %rdi     # 0x102f80
leaq 0x8bfcc(%rip), %rsi     # 0xcd9cb
callq 0x8160
testl %eax, %eax
je 0x41c49
movl 0x18(%r12), %eax
movl 0x50(%r12), %ebx
movl 0x88(%r12), %ebp
movsd 0xa8(%r12), %xmm0
leal (%rax,%rax), %r12d
movq %rax, %r13
decl %eax
imull %r12d, %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x3e784
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x41a73
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xb0(%rax), %xmm0
leal -0x1(%rbx), %eax
imull %ebx, %eax
addl %eax, %eax
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x3e784
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x41ac9
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xb8(%rax), %xmm0
leal -0x1(%rbp), %eax
imull %ebp, %eax
addl %eax, %eax
xorps %xmm1, %xmm1
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x3e784
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x41b1f
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x48(%rsp), %rax
movsd 0xc8(%rax), %xmm0
imull %ebx, %r12d
xorps %xmm1, %xmm1
cvtsi2sd %r12d, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %r15
movq %r15, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %r15, %rsi
callq 0x3e784
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
movq 0x48(%rsp), %r12
je 0x41b77
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movsd 0xd0(%r12), %xmm0
addl %r13d, %ebx
leal (%rbx,%rbx), %r15d
imull %r15d, %ebp
xorps %xmm1, %xmm1
cvtsi2sd %ebp, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %rbp
movq %rbp, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %rbp, %rsi
callq 0x3e784
movq 0xf0(%rsp), %r13
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x41bd5
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movsd 0xc0(%r12), %xmm0
decl %ebx
imull %ebx, %r15d
xorps %xmm1, %xmm1
cvtsi2sd %r15d, %xmm1
divsd %xmm1, %xmm0
leaq 0x8(%rsp), %rbx
movq %rbx, %rdi
callq 0x42f10
leaq 0x50(%rsp), %rdi
movq %rbx, %rsi
callq 0x3e784
leaq 0x1a0(%rsp), %r15
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x41c2f
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0x138(%rsp), %rax
xorpd %xmm0, %xmm0
movupd %xmm0, 0x20(%rax)
movupd %xmm0, 0x10(%rax)
movupd %xmm0, (%rax)
movq %r15, %rdi
leaq 0x50(%rsp), %rsi
callq 0x2fc8e
movq %r15, %rdi
movq 0xc0358(%rip), %rsi     # 0x101fb8
movl $0x9, %edx
movl $0x1, %ecx
callq 0x36ba0
movq %r15, %rdi
callq 0x2e784
leaq 0x188(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x2fc8e
leaq 0x188(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x36ba0
movq %rbx, %rdi
callq 0x2e784
movq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %rcx
movq %rcx, %rdx
subq %rax, %rdx
cmpq $0x18, %rdx
je 0x41da7
movl $0x1, %r15d
xorl %r13d, %r13d
movq %r13, %r12
incq %r13
movq %rcx, %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r14, %rdx
cmpq %r13, %rdx
jbe 0x41d98
movq %r15, %rbp
leaq -0x1(%rdx), %rcx
xorq %rbp, %rcx
addq $-0x2, %rdx
xorq %r12, %rdx
leaq (%r12,%r12,2), %rsi
movq (%rax,%rsi,8), %rax
movsd (%rax,%rbp,8), %xmm0
orq %rcx, %rdx
jne 0x41d4d
movq 0x68(%rsp), %rdi
callq 0x8730
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x41d6e
movq 0x68(%rsp), %rdi
callq 0x8730
movb $0x9, 0x8(%rsp)
movl $0x1, %edx
movq %rax, %rdi
leaq 0x8(%rsp), %rsi
callq 0x84e0
incq %rbp
movq 0xb0(%rsp), %rax
movq 0xb8(%rsp), %rcx
movq %rcx, %rdx
subq %rax, %rdx
sarq $0x3, %rdx
imulq %r14, %rdx
cmpq %rbp, %rdx
ja 0x41cf7
decq %rdx
incq %r15
cmpq %r13, %rdx
ja 0x41cd7
leaq 0xb0(%rsp), %rdi
callq 0x42ffa
movq 0x48(%rsp), %r12
movq 0xf0(%rsp), %r13
jmp 0x42163
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq 0xc01dd(%rip), %rdi     # 0x101fb8
callq 0x84e0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x88432(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8840e(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x883ea(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x883c6(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x883a2(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8837e(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8835a(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x88336(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x88312(%rip), %rsi     # 0xca234
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x70(%rsp), %rax
movq (%rax,%rbp), %rsi
movq 0x8(%rax,%rbp), %rdx
movq %r13, %rdi
callq 0x84e0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x882ae(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8828a(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x88266(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x88242(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8821e(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x881fa(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x881d6(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x881b2(%rip), %rsi     # 0xca234
callq 0x84e0
movl $0x1, %edx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x84e0
movl $0x2, %edx
movq %rbx, %rdi
leaq 0x8818e(%rip), %rsi     # 0xca234
callq 0x84e0
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
jmp 0x4216d
movsd 0xc03e9(%rip), %xmm0    # 0x1024c8
leaq 0x90(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x72077
leaq 0x170(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x2fc8e
leaq 0x170(%rsp), %rbx
movq %rbx, %rdi
movq 0xbfea3(%rip), %rsi     # 0x101fb8
movl $0x9, %edx
movl $0x1, %ecx
callq 0x36ba0
movq %rbx, %rdi
callq 0x2e784
leaq 0x158(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x2fc8e
leaq 0x158(%rsp), %rbx
movq %rbx, %rdi
movq %r13, %rsi
movl $0x9, %edx
movl $0x1, %ecx
callq 0x36ba0
movq %rbx, %rdi
callq 0x2e784
leaq 0x50(%rsp), %rdi
callq 0x2e784
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x42189
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xd0(%rsp), %rdi
callq 0x2e784
leaq 0x90(%rsp), %rdi
callq 0x2e784
movq 0x88(%rsp), %rdx
incq %rdx
movq 0x70(%rsp), %r15
movq 0x78(%rsp), %rax
subq %r15, %rax
sarq $0x5, %rax
movq %rdx, 0x88(%rsp)
cmpq %rax, %rdx
jne 0x41794
leaq 0x140(%rsp), %rdi
callq 0x2efec
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x42202
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x42227
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x70(%rsp), %rdi
callq 0x2e784
xorl %eax, %eax
addq $0x1b8, %rsp            # imm = 0x1B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movupd (%rcx), %xmm0
movupd %xmm0, (%r14)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0xf8(%rsp), %rdi
movq %rbx, %rsi
callq 0x8540
movq (%rbx), %rdi
cmpq %r14, %rdi
je 0x4228f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x422aa
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xbfd37(%rip), %rdi     # 0x101fe8
leaq 0x8b691(%rip), %rsi     # 0xcd949
movl $0xe, %edx
callq 0x84e0
leaq 0xc0c77(%rip), %rsi     # 0x102f40
leaq 0x28(%rsp), %rdi
callq 0x4d82f
movq 0x28(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0xbfd04(%rip), %rdi     # 0x101fe8
callq 0x84e0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x8450
movsbl %al, %esi
movq %rbx, %rdi
callq 0x8040
movq %rax, %rdi
callq 0x8300
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
jne 0x40b57
jmp 0x40b64
leaq 0x89f06(%rip), %rdi     # 0xcc233
leaq 0x8bf20(%rip), %rsi     # 0xce254
leaq 0x8bf3c(%rip), %rcx     # 0xce277
movl $0x87, %edx
callq 0x82c0
leaq 0x8bf4c(%rip), %rdi     # 0xce298
leaq 0x8bf01(%rip), %rsi     # 0xce254
leaq 0x8bf1d(%rip), %rcx     # 0xce277
movl $0x93, %edx
callq 0x82c0
leaq 0x8bf4a(%rip), %rdi     # 0xce2b5
leaq 0x8bee2(%rip), %rsi     # 0xce254
leaq 0x8befe(%rip), %rcx     # 0xce277
movl $0x95, %edx
callq 0x82c0
jmp 0x42544
jmp 0x42422
jmp 0x423ca
jmp 0x42544
jmp 0x42544
movq %rax, %r12
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x42535
jmp 0x425a2
movq %rax, %r12
movq 0x8(%rsp), %rdi
cmpq %r15, %rdi
jne 0x423df
jmp 0x425a2
jmp 0x42544
movq %rax, %r12
leaq 0x18(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x425a2
movq 0x18(%rsp), %rsi
jmp 0x4253a
jmp 0x42544
movq %rax, %r12
movl $0x208, %esi            # imm = 0x208
movq %r14, %rdi
jmp 0x4253d
jmp 0x42544
movq %r12, %rdi
movq %rax, %r12
movl $0xe0, %esi
jmp 0x4253d
jmp 0x42514
jmp 0x42514
jmp 0x42544
movq %rax, %r12
movq 0x28(%rsp), %rdi
cmpq %r14, %rdi
jne 0x42535
jmp 0x425a2
movq %rax, %r12
movl $0x200, %esi            # imm = 0x200
movq 0x68(%rsp), %rdi
jmp 0x4253d
movq %rax, %r12
movl $0x200, %esi            # imm = 0x200
movq %r13, %rdi
jmp 0x4253d
jmp 0x42544
jmp 0x42544
jmp 0x42544
jmp 0x42544
jmp 0x42491
jmp 0x42552
jmp 0x42491
jmp 0x42552
jmp 0x42491
jmp 0x42552
jmp 0x42491
jmp 0x42552
jmp 0x42491
jmp 0x42552
movq %rax, %r12
movq 0x8(%rsp), %rdi
leaq 0x18(%rsp), %rax
cmpq %rax, %rdi
je 0x42555
movq 0x18(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x42555
jmp 0x42552
movq %rax, %r12
leaq 0x158(%rsp), %rdi
jmp 0x424d6
movq %rax, %r12
leaq 0x170(%rsp), %rdi
callq 0x2e784
jmp 0x42562
movq %rax, %r12
leaq 0x1a0(%rsp), %rdi
jmp 0x424f8
movq %rax, %r12
leaq 0x188(%rsp), %rdi
callq 0x2e784
jmp 0x42555
jmp 0x42544
movq %rax, %r12
leaq 0x8(%rsp), %rdi
callq 0x2e784
jmp 0x4252b
jmp 0x42528
jmp 0x42544
movq %rax, %r12
movl $0x208, %esi            # imm = 0x208
movq %rbx, %rdi
jmp 0x4253d
movq %rax, %r12
jmp 0x42562
jmp 0x42528
movq %rax, %r12
movq 0x28(%rsp), %rdi
cmpq %r13, %rdi
je 0x425a2
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
jmp 0x425a2
movq %rax, %r12
jmp 0x425a2
jmp 0x42552
jmp 0x4254d
movq %rax, %r12
jmp 0x4256c
movq %rax, %r12
leaq 0xb0(%rsp), %rdi
callq 0x42ffa
leaq 0x50(%rsp), %rdi
callq 0x2e784
movq 0x28(%rsp), %rdi
leaq 0x38(%rsp), %rax
cmpq %rax, %rdi
je 0x42588
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0xd0(%rsp), %rdi
callq 0x2e784
leaq 0x90(%rsp), %rdi
callq 0x2e784
leaq 0x140(%rsp), %rdi
callq 0x2efec
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x425d4
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x8480
movq 0xf8(%rsp), %rdi
leaq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x425f9
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x8480
leaq 0x70(%rsp), %rdi
callq 0x2e784
movq %r12, %rdi
callq 0x8840