// File: millanek[P]evo/process_vcf_coding_sequences.cpp
// Function: getStatsHaploidSeq(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>> const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>>&, double)
void getStatsHaploidSeq(const std::vector<std::string>& allSeqs, std::vector<string>& statsThisGene, double tStVratio) {
    std::string::size_type geneLengthNt = allSeqs[0].length();
    int numSamples = (int)allSeqs.size();
    double pN = 0; double pS = 0;
    std::vector<string> altCodons; altCodons.resize(numSamples);
    std::map<std::vector<string>::size_type, int> haveStop;
    
    for (std::vector<string>::size_type i = 0; i != numSamples; i++) {
        assert(allSeqs[i].length() == geneLengthNt);
        altCodons[i] = ""; haveStop[i] = 0; 
    }
    
    CDSComparisonMatrices* pairwiseMatrices = new CDSComparisonMatrices(numSamples);
    for (string::size_type i = 0; i != geneLengthNt; i++) {
        for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
            altCodons[j] += allSeqs[j][i];
        }
        // Find the types of mutation we are dealing with
        if ((i+1)%3 == 0) {
            for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
                if (getAminoAcid(altCodons[j]) == "Stop") haveStop[j] = 1;
            }
           // std::cerr << "Now going to loop through codons: i = " << i << "altCodons.size():" << altCodons.size() << std::endl;
            addAllPairwiseN_S_Nd_Sd_DifferentIndividuals(altCodons,haveStop, *pairwiseMatrices);
            //std::cerr << "Added pairwise among H1:" << std::endl;
            for (std::vector<std::string>::size_type j = 0; j != numSamples; j++) {
             //   std::cerr << "j = " << j << "; altCodons[j]: " << altCodons[j] << std::endl;
                altCodons[j] = "";
               // std::cerr << "j = " << j << "; haveStop[j]: " << haveStop[j] << std::endl;
            }
        }
    }
     
    double sumPn = 0; double sumPs = 0;
    std::vector<double> pNjackknifeVector;
    std::vector<double> pSjackknifeVector;
    std::vector<double> pN_pSjackknifeVector;
    // Add the within H1 and within H2 comparisons
    for (std::vector<std::string>::size_type j = 0; j != numSamples - 1; j++) {
        //std::cerr << "j = " << j << "; sumPn: " << sumPn << "; sumPs:" << sumPs << std::endl;
        for (std::vector<std::string>::size_type k = j+1; k != numSamples; k++) {
            //double pN_jk = pairwiseMatrices.H1p->N_d_jk[j][k]/pairwiseMatrices.H1p->N_jk[j][k];
            double pN_jk = pairwiseMatrices->N_d_jk[j][k]/((2*tStVratio*pairwiseMatrices->tS_N_jk[j][k])+pairwiseMatrices->tV_N_jk[j][k]);
            if (std::isnan(pN_jk) || pairwiseMatrices->tS_N_jk[j][k] == 0) {
            std::cerr << "j = " << j << "; k = " << k << std::endl;
            std::cerr << "N_d_jk[j][k] = " << pairwiseMatrices->N_d_jk[j][k] << "; tS_N_jk[j][k] = " << pairwiseMatrices->tS_N_jk[j][k] << std::endl;
            std::cerr << "pN_jk = " << pN_jk << "; sumPn = " << sumPn << std::endl;
                print_matrix(pairwiseMatrices->N_d_jk, std::cerr);
                print_matrix(pairwiseMatrices->S_d_jk, std::cerr);
            }
            sumPn = sumPn + pN_jk;
            double pS_jk = pairwiseMatrices->S_d_jk[j][k]/((2*tStVratio*pairwiseMatrices->tS_S_jk[j][k])+pairwiseMatrices->tV_S_jk[j][k]);
            sumPs = sumPs + pS_jk;
    
            // make sure each sample is used only once in the jackknife calculation
            // to keep the observations independent
            if ((j % 2 == 0) && (k == j+1)) {
                pNjackknifeVector.push_back(pN_jk); pSjackknifeVector.push_back(pS_jk);
                pN_pSjackknifeVector.push_back(pN_jk-pS_jk);
            }
        }
    }
    pN = (2.0/(numSamples*(numSamples-1)))*sumPn;
    pS = (2.0/(numSamples*(numSamples-1)))*sumPs;
    
    statsThisGene.push_back(numToString(geneLengthNt));
    statsThisGene.push_back(numToString(pN));
    statsThisGene.push_back(numToString(pS));
    if (pNjackknifeVector.size() > 10) {
        double pNstdErr = jackknive_std_err(pNjackknifeVector);
        double pSstdErr = jackknive_std_err(pSjackknifeVector);
        double pNpSstdErr = jackknive_std_err(pN_pSjackknifeVector);
        statsThisGene.push_back(numToString(pNstdErr));
        statsThisGene.push_back(numToString(pSstdErr));
        statsThisGene.push_back(numToString(pNpSstdErr));
    } else {
        statsThisGene.push_back("NA");
        statsThisGene.push_back("NA");
        statsThisGene.push_back("NA");
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x420, %rsp            # imm = 0x420
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movsd %xmm0, -0x18(%rbp)
movq -0x8(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x52960
movq %rax, %rdi
callq 0xa930
movq %rax, -0x20(%rbp)
movq -0x8(%rbp), %rdi
callq 0x3ffd0
movl %eax, -0x24(%rbp)
movq $0x0, -0x30(%rbp)
movq $0x0, -0x38(%rbp)
leaq -0x50(%rbp), %rdi
movq %rdi, -0x2e8(%rbp)
callq 0x48da0
movq -0x2e8(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x5f8f0
jmp 0xb2d7f
leaq -0x90(%rbp), %rdi
callq 0xb7aa0
movq $0x0, -0x98(%rbp)
movq -0x98(%rbp), %rax
movslq -0x24(%rbp), %rcx
cmpq %rcx, %rax
je 0xb2e6c
movq -0x8(%rbp), %rdi
movq -0x98(%rbp), %rsi
callq 0x52960
movq %rax, %rdi
callq 0xa930
cmpq -0x20(%rbp), %rax
jne 0xb2dca
jmp 0xb2dfa
leaq 0x8e068(%rip), %rdi     # 0x140e39
leaq 0x8dede(%rip), %rsi     # 0x140cb6
movl $0x171, %edx            # imm = 0x171
leaq 0x8e079(%rip), %rcx     # 0x140e5d
callq 0xa390
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3c20
movq -0x98(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq 0x830cb(%rip), %rsi     # 0x135edf
callq 0xa810
jmp 0xb2e1b
leaq -0x90(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0xb7ac0
movq %rax, -0x2f0(%rbp)
jmp 0xb2e37
movq -0x2f0(%rbp), %rax
movl $0x0, (%rax)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0xb2d96
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3c14
movl $0xc0, %edi
callq 0xa5d0
movq %rax, -0x2f8(%rbp)
jmp 0xb2e7f
movq -0x2f8(%rbp), %rdi
movl -0x24(%rbp), %esi
callq 0xb7ba0
jmp 0xb2e90
movq -0x2f8(%rbp), %rax
movq %rax, -0xa0(%rbp)
movq $0x0, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0xb30d2
movq $0x0, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movslq -0x24(%rbp), %rcx
cmpq %rcx, %rax
je 0xb2f59
movq -0x8(%rbp), %rdi
movq -0xb0(%rbp), %rsi
callq 0x52960
movq %rax, %rdi
movq -0xa8(%rbp), %rsi
callq 0xa670
movsbl (%rax), %eax
movl %eax, -0x2fc(%rbp)
movq -0xb0(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x3d940
movl -0x2fc(%rbp), %esi
movq %rax, %rdi
callq 0xa380
jmp 0xb2f21
jmp 0xb2f23
movq -0xb0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb0(%rbp)
jmp 0xb2ec5
movq -0x2f8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
movl $0xc0, %esi
callq 0xa5e0
jmp 0xb3c14
movq -0xa8(%rbp), %rax
addq $0x1, %rax
movl $0x3, %ecx
xorl %edx, %edx
divq %rcx
cmpq $0x0, %rdx
jne 0xb30b9
movq $0x0, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movslq -0x24(%rbp), %rcx
cmpq %rcx, %rax
je 0xb304c
movq -0xb8(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x3d940
movq %rax, %rsi
leaq -0xd8(%rbp), %rdi
callq 0xb7da0
jmp 0xb2fb8
leaq 0x8def7(%rip), %rsi     # 0x140eb6
leaq -0xd8(%rbp), %rdi
callq 0x2d770
movb %al, -0x2fd(%rbp)
jmp 0xb2fd3
leaq -0xd8(%rbp), %rdi
callq 0xac88
movb -0x2fd(%rbp), %al
testb $0x1, %al
jne 0xb2feb
jmp 0xb3033
leaq -0x90(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0xb7ac0
movq %rax, -0x308(%rbp)
jmp 0xb3007
movq -0x308(%rbp), %rax
movl $0x1, (%rax)
jmp 0xb3033
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0xac88
jmp 0xb3c14
jmp 0xb3035
movq -0xb8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb8(%rbp)
jmp 0xb2f83
movq -0xa0(%rbp), %rdx
leaq -0x50(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0xb8a70
jmp 0xb3065
movq $0x0, -0xe0(%rbp)
movq -0xe0(%rbp), %rax
movslq -0x24(%rbp), %rcx
cmpq %rcx, %rax
je 0xb30b7
movq -0xe0(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x3d940
movq %rax, %rdi
leaq 0x82e45(%rip), %rsi     # 0x135edf
callq 0xa810
jmp 0xb30a1
jmp 0xb30a3
movq -0xe0(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe0(%rbp)
jmp 0xb3070
jmp 0xb30b9
jmp 0xb30bb
movq -0xa8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xa8(%rbp)
jmp 0xb2ea9
xorps %xmm0, %xmm0
movsd %xmm0, -0xe8(%rbp)
xorps %xmm0, %xmm0
movsd %xmm0, -0xf0(%rbp)
leaq -0x108(%rbp), %rdi
callq 0x48410
leaq -0x120(%rbp), %rdi
callq 0x48410
leaq -0x138(%rbp), %rdi
callq 0x48410
movq $0x0, -0x140(%rbp)
movq -0x140(%rbp), %rax
movl -0x24(%rbp), %ecx
subl $0x1, %ecx
movslq %ecx, %rcx
cmpq %rcx, %rax
je 0xb36c7
movq -0x140(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
movslq -0x24(%rbp), %rcx
cmpq %rcx, %rax
je 0xb36ae
movq -0xa0(%rbp), %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
movsd %xmm0, -0x318(%rbp)
movsd -0x18(%rbp), %xmm0
addsd %xmm0, %xmm0
movsd %xmm0, -0x328(%rbp)
movq -0xa0(%rbp), %rdi
addq $0x60, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
movsd %xmm0, -0x320(%rbp)
movq -0xa0(%rbp), %rdi
addq $0x90, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd -0x328(%rbp), %xmm1
movsd -0x320(%rbp), %xmm3
movsd -0x318(%rbp), %xmm0
movsd (%rax), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x150(%rbp)
movsd -0x150(%rbp), %xmm0
callq 0xb90e0
movb %al, -0x309(%rbp)
jmp 0xb3235
movb -0x309(%rbp), %al
testb $0x1, %al
jne 0xb327e
jmp 0xb3241
movq -0xa0(%rbp), %rdi
addq $0x60, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0xb350e
jp 0xb350e
movq 0xe5d6b(%rip), %rdi     # 0x198ff0
leaq 0x8dc2f(%rip), %rsi     # 0x140ebb
callq 0xa5c0
movq %rax, -0x330(%rbp)
jmp 0xb329a
movq -0x330(%rbp), %rdi
movq -0x140(%rbp), %rsi
callq 0xa140
movq %rax, -0x338(%rbp)
jmp 0xb32b6
movq -0x338(%rbp), %rdi
leaq 0x8dbfc(%rip), %rsi     # 0x140ec0
callq 0xa5c0
movq %rax, -0x340(%rbp)
jmp 0xb32d2
movq -0x340(%rbp), %rdi
movq -0x148(%rbp), %rsi
callq 0xa140
movq %rax, -0x348(%rbp)
jmp 0xb32ee
movq -0x348(%rbp), %rdi
movq 0xe5c8c(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0xb3303
movq 0xe5ce6(%rip), %rdi     # 0x198ff0
leaq 0x8dbb6(%rip), %rsi     # 0x140ec7
callq 0xa5c0
movq %rax, -0x350(%rbp)
jmp 0xb331f
movq -0xa0(%rbp), %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movq -0x350(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xabd0
movq %rax, -0x358(%rbp)
jmp 0xb335a
movq -0x358(%rbp), %rdi
leaq 0x8db6f(%rip), %rsi     # 0x140ed7
callq 0xa5c0
movq %rax, -0x360(%rbp)
jmp 0xb3376
movq -0xa0(%rbp), %rdi
addq $0x60, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movq -0x360(%rbp), %rdi
movsd (%rax), %xmm0
callq 0xabd0
movq %rax, -0x368(%rbp)
jmp 0xb33b5
movq -0x368(%rbp), %rdi
movq 0xe5bc5(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0xb33ca
movq 0xe5c1f(%rip), %rdi     # 0x198ff0
leaq 0x8db12(%rip), %rsi     # 0x140eea
callq 0xa5c0
movq %rax, -0x370(%rbp)
jmp 0xb33e6
movq -0x370(%rbp), %rdi
movsd -0x150(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x378(%rbp)
jmp 0xb3403
movq -0x378(%rbp), %rdi
leaq 0x8dae2(%rip), %rsi     # 0x140ef3
callq 0xa5c0
movq %rax, -0x380(%rbp)
jmp 0xb341f
movq -0x380(%rbp), %rdi
movsd -0xe8(%rbp), %xmm0
callq 0xabd0
movq %rax, -0x388(%rbp)
jmp 0xb343c
movq -0x388(%rbp), %rdi
movq 0xe5b3e(%rip), %rsi     # 0x198f88
callq 0xa610
jmp 0xb3451
movq -0xa0(%rbp), %rsi
leaq -0x168(%rbp), %rdi
callq 0xb9240
jmp 0xb3466
movq 0xe5b83(%rip), %rsi     # 0x198ff0
leaq -0x168(%rbp), %rdi
callq 0xb9100
jmp 0xb347b
leaq -0x168(%rbp), %rdi
callq 0x65200
movq -0xa0(%rbp), %rsi
addq $0x30, %rsi
leaq -0x180(%rbp), %rdi
callq 0xb9240
jmp 0xb34a0
movq 0xe5b49(%rip), %rsi     # 0x198ff0
leaq -0x180(%rbp), %rdi
callq 0xb9100
jmp 0xb34b5
leaq -0x180(%rbp), %rdi
callq 0x65200
jmp 0xb350e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x168(%rbp), %rdi
callq 0x65200
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x180(%rbp), %rdi
callq 0x65200
jmp 0xb3bf0
movsd -0xe8(%rbp), %xmm0
addsd -0x150(%rbp), %xmm0
movsd %xmm0, -0xe8(%rbp)
movq -0xa0(%rbp), %rdi
addq $0x30, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
movsd %xmm0, -0x390(%rbp)
movsd 0x80168(%rip), %xmm0    # 0x1336c8
mulsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x3a0(%rbp)
movq -0xa0(%rbp), %rdi
addq $0x78, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd (%rax), %xmm0
movsd %xmm0, -0x398(%rbp)
movq -0xa0(%rbp), %rdi
addq $0xa8, %rdi
movq -0x140(%rbp), %rsi
callq 0x651e0
movq %rax, %rdi
movq -0x148(%rbp), %rsi
callq 0x3ec30
movsd -0x3a0(%rbp), %xmm1
movsd -0x398(%rbp), %xmm3
movsd -0x390(%rbp), %xmm0
movsd (%rax), %xmm2
mulsd %xmm3, %xmm1
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
movsd %xmm0, -0x188(%rbp)
movsd -0xf0(%rbp), %xmm0
addsd -0x188(%rbp), %xmm0
movsd %xmm0, -0xf0(%rbp)
movq -0x140(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
jne 0xb3695
movq -0x148(%rbp), %rax
movq -0x140(%rbp), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jne 0xb3695
leaq -0x108(%rbp), %rdi
leaq -0x150(%rbp), %rsi
callq 0xb77b0
jmp 0xb364d
leaq -0x120(%rbp), %rdi
leaq -0x188(%rbp), %rsi
callq 0xb77b0
jmp 0xb3662
movsd -0x150(%rbp), %xmm0
movsd -0x188(%rbp), %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, -0x190(%rbp)
leaq -0x138(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x48450
jmp 0xb3693
jmp 0xb3695
jmp 0xb3697
movq -0x148(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x148(%rbp)
jmp 0xb3142
jmp 0xb36b0
movq -0x140(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x140(%rbp)
jmp 0xb3117
movl -0x24(%rbp), %eax
movl %eax, %ecx
decl %ecx
imull %ecx, %eax
cvtsi2sd %eax, %xmm2
movsd 0x7ffeb(%rip), %xmm0    # 0x1336c8
movaps %xmm0, %xmm1
divsd %xmm2, %xmm1
movsd -0xe8(%rbp), %xmm2
mulsd %xmm2, %xmm1
movsd %xmm1, -0x30(%rbp)
movl -0x24(%rbp), %eax
movl %eax, %ecx
decl %ecx
imull %ecx, %eax
cvtsi2sd %eax, %xmm1
divsd %xmm1, %xmm0
movsd -0xf0(%rbp), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x38(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x3a8(%rbp)
movq -0x20(%rbp), %rsi
leaq -0x1b0(%rbp), %rdi
callq 0xae5d0
jmp 0xb3735
movq -0x3a8(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x5f980
jmp 0xb374a
leaq -0x1b0(%rbp), %rdi
callq 0xac88
movq -0x10(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movsd -0x30(%rbp), %xmm0
leaq -0x1d0(%rbp), %rdi
callq 0x650a0
jmp 0xb3774
movq -0x3b0(%rbp), %rdi
leaq -0x1d0(%rbp), %rsi
callq 0x5f980
jmp 0xb3789
leaq -0x1d0(%rbp), %rdi
callq 0xac88
movq -0x10(%rbp), %rax
movq %rax, -0x3b8(%rbp)
movsd -0x38(%rbp), %xmm0
leaq -0x1f0(%rbp), %rdi
callq 0x650a0
jmp 0xb37b3
movq -0x3b8(%rbp), %rdi
leaq -0x1f0(%rbp), %rsi
callq 0x5f980
jmp 0xb37c8
leaq -0x1f0(%rbp), %rdi
callq 0xac88
leaq -0x108(%rbp), %rdi
callq 0x3ebf0
cmpq $0xa, %rax
jbe 0xb39d5
leaq -0x108(%rbp), %rdi
callq 0x52290
movsd %xmm0, -0x3c0(%rbp)
jmp 0xb3800
movsd -0x3c0(%rbp), %xmm0
movsd %xmm0, -0x1f8(%rbp)
leaq -0x120(%rbp), %rdi
callq 0x52290
movsd %xmm0, -0x3c8(%rbp)
jmp 0xb3826
movsd -0x3c8(%rbp), %xmm0
movsd %xmm0, -0x200(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x52290
movsd %xmm0, -0x3d0(%rbp)
jmp 0xb384c
movsd -0x3d0(%rbp), %xmm0
movsd %xmm0, -0x208(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movsd -0x1f8(%rbp), %xmm0
leaq -0x228(%rbp), %rdi
callq 0x650a0
jmp 0xb387d
movq -0x3d8(%rbp), %rdi
leaq -0x228(%rbp), %rsi
callq 0x5f980
jmp 0xb3892
leaq -0x228(%rbp), %rdi
callq 0xac88
movq -0x10(%rbp), %rax
movq %rax, -0x3e0(%rbp)
movsd -0x200(%rbp), %xmm0
leaq -0x248(%rbp), %rdi
callq 0x650a0
jmp 0xb38bf
movq -0x3e0(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x5f980
jmp 0xb38d4
leaq -0x248(%rbp), %rdi
callq 0xac88
movq -0x10(%rbp), %rax
movq %rax, -0x3e8(%rbp)
movsd -0x208(%rbp), %xmm0
leaq -0x268(%rbp), %rdi
callq 0x650a0
jmp 0xb3901
movq -0x3e8(%rbp), %rdi
leaq -0x268(%rbp), %rsi
callq 0x5f980
jmp 0xb3916
leaq -0x268(%rbp), %rdi
callq 0xac88
jmp 0xb3bae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1d0(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x1f0(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x228(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x248(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x268(%rbp), %rdi
callq 0xac88
jmp 0xb3bf0
movq -0x10(%rbp), %rax
movq %rax, -0x3f8(%rbp)
leaq -0x289(%rbp), %rdi
movq %rdi, -0x3f0(%rbp)
callq 0xab60
movq -0x3f0(%rbp), %rdx
leaq 0x7ac83(%rip), %rsi     # 0x12e684
leaq -0x288(%rbp), %rdi
callq 0x2d6c0
jmp 0xb3a0f
movq -0x3f8(%rbp), %rdi
leaq -0x288(%rbp), %rsi
callq 0x5f980
jmp 0xb3a24
leaq -0x288(%rbp), %rdi
callq 0xac88
leaq -0x289(%rbp), %rdi
callq 0xa640
movq -0x10(%rbp), %rax
movq %rax, -0x408(%rbp)
leaq -0x2b1(%rbp), %rdi
movq %rdi, -0x400(%rbp)
callq 0xab60
movq -0x400(%rbp), %rdx
leaq 0x7ac1c(%rip), %rsi     # 0x12e684
leaq -0x2b0(%rbp), %rdi
callq 0x2d6c0
jmp 0xb3a76
movq -0x408(%rbp), %rdi
leaq -0x2b0(%rbp), %rsi
callq 0x5f980
jmp 0xb3a8b
leaq -0x2b0(%rbp), %rdi
callq 0xac88
leaq -0x2b1(%rbp), %rdi
callq 0xa640
movq -0x10(%rbp), %rax
movq %rax, -0x418(%rbp)
leaq -0x2d9(%rbp), %rdi
movq %rdi, -0x410(%rbp)
callq 0xab60
movq -0x410(%rbp), %rdx
leaq 0x7abb5(%rip), %rsi     # 0x12e684
leaq -0x2d8(%rbp), %rdi
callq 0x2d6c0
jmp 0xb3add
movq -0x418(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x5f980
jmp 0xb3af2
leaq -0x2d8(%rbp), %rdi
callq 0xac88
leaq -0x2d9(%rbp), %rdi
callq 0xa640
jmp 0xb3bae
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3b35
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x288(%rbp), %rdi
callq 0xac88
leaq -0x289(%rbp), %rdi
callq 0xa640
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3b6c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2b0(%rbp), %rdi
callq 0xac88
leaq -0x2b1(%rbp), %rdi
callq 0xa640
jmp 0xb3bf0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
jmp 0xb3ba0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x58(%rbp)
movl %eax, -0x5c(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0xac88
leaq -0x2d9(%rbp), %rdi
callq 0xa640
jmp 0xb3bf0
leaq -0x138(%rbp), %rdi
callq 0x3ecb0
leaq -0x120(%rbp), %rdi
callq 0x3ecb0
leaq -0x108(%rbp), %rdi
callq 0x3ecb0
leaq -0x90(%rbp), %rdi
callq 0xb9330
leaq -0x50(%rbp), %rdi
callq 0x3dfa0
addq $0x420, %rsp            # imm = 0x420
popq %rbp
retq
leaq -0x138(%rbp), %rdi
callq 0x3ecb0
leaq -0x120(%rbp), %rdi
callq 0x3ecb0
leaq -0x108(%rbp), %rdi
callq 0x3ecb0
leaq -0x90(%rbp), %rdi
callq 0xb9330
leaq -0x50(%rbp), %rdi
callq 0x3dfa0
movq -0x58(%rbp), %rdi
callq 0xab50
nopw %cs:(%rax,%rax)