// File: bobverity[P]MavericK/MCMCobject_admixture.cpp
// Function: MCMCobject_admixture::perform_MCMC(globals&, bool, bool, bool, bool, bool, int)
void MCMCobject_admixture::perform_MCMC(globals &globals, bool drawAlleleFreqs, bool storeLoglike, bool fixLabels, bool outputLikelihood, bool outputPosteriorGrouping, int mainRep) {
    
    // perform MCMC
    int thinSwitch = 1;
    for (int rep=0; rep<(burnin+samples); rep++) {
        
        // thinning loop (becomes active after burn-in)
        for (int thin=0; thin<thinSwitch; thin++) {
            
            // update group allocation at the gene copy level
            group_update();
            
            // update group allocation at individual level. Improves mixing when alpha very small.
            group_update_indLevel();
            
            // if alpha not fixed update by Metropolis step
            if (globals.fixAlpha_on==0)
                alpha_update();
            
        }
        if (rep==burnin)
            thinSwitch = thinning;
        
        // if fix label-switching problem
        if (fixLabels) {
            // calculate logQmatrix_gene_new for this iteration
            produceQmatrix();
            
            // fix label-switching problem
            chooseBestLabelPermutation(globals, rep);
            
            // add logQmatrix_gene_new to logQmatrix_gene_running
            updateQmatrix(rep);
        
            // store Qmatrix values if no longer in burn-in
            if (rep>=burnin)
                storeQmatrix();
        }
            
        // calculate marginal likelihood
        d_logLikeGroup();
        
        // optionally draw allele frequencies and admixture proportions and calculate joint likelihood
        if (drawAlleleFreqs) {
            drawFreqs();
            d_logLikeJoint();
        }
        
        // add likelihoods to running sums
        if (rep>=burnin) {
            logLikeGroup_sum += logLikeGroup;
            logLikeGroup_sumSquared += logLikeGroup*logLikeGroup;
            
            if (storeLoglike) {
                logLikeGroup_store[rep-burnin] = logLikeGroup;
            }
            
            harmonic = logSum(harmonic, -logLikeGroup);
            if (drawAlleleFreqs==true) {
                logLikeJoint_sum += logLikeJoint;
                logLikeJoint_sumSquared += logLikeJoint*logLikeJoint;
            }
        }
        
        // write to outputLikelihoods file
        if (outputLikelihood) {
            globals.outputLikelihood_fileStream << K << "," << mainRep+1 << "," << rep-burnin+1 << "," << logLikeGroup << "," << logLikeJoint << "," << alpha << "\n";
			globals.outputLikelihood_fileStream.flush();
        }
        // write to outputPosteriorGrouping file
        if (outputPosteriorGrouping) {
            globals.outputPosteriorGrouping_fileStream << K << "," << mainRep+1 << "," << rep-burnin+1;
            groupIndex=-1;
            for (int i=0; i<n; i++) {
                for (int l=0; l<loci; l++) {
                    for (int p=0; p<ploidy_vec[i]; p++) {
                        groupIndex++;
                        globals.outputPosteriorGrouping_fileStream << "," << linearGroup[groupIndex];
                    }
                }
            }
            globals.outputPosteriorGrouping_fileStream << "\n";
			globals.outputPosteriorGrouping_fileStream.flush();
        }
        
    } // end of MCMC
    
    
    // finish off Qmatrices
    if (fixLabels) {
        
        // finish off gene level Qmatrices
        groupIndex=-1;
        for (int ind=0; ind<n; ind++) {
            for (int l=0; l<loci; l++) {
                for (int p=0; p<ploidy_vec[ind]; p++) {
                    groupIndex++;
                    for (int k=0; k<K; k++) {
                        Qmatrix_gene[groupIndex][k] = exp(logQmatrix_gene[groupIndex][k] - log(double(samples)));
                    } // k
                } // p
            } // l
        } // ind
        
        
        // calculate individual level Qmatrices
        groupIndex=-1;
        for (int ind=0; ind<n; ind++) {
            for (int l=0; l<loci; l++) {
                for (int p=0; p<ploidy_vec[ind]; p++) {
                    groupIndex++;
                    for (int k=0; k<K; k++) {
                        Qmatrix_ind[ind][k] += Qmatrix_gene[groupIndex][k];
                    }
                }
            }
            for (int k=0; k<K; k++) {
                Qmatrix_ind[ind][k] /= double(ploidy_vec[ind]*loci);
            }
        }
        
        // calculate population level Qmatrices
        if (outputQmatrix_pop_on) {
            for (int i=0; i<n; i++) {
                for (int k=0; k<K; k++) {
                    Qmatrix_pop[globals.pop_index[i]][k] += Qmatrix_ind[i][k];
                }
            }
            for (int i=0; i<int(uniquePops.size()); i++) {
                for (int k=0; k<K; k++) {
                    Qmatrix_pop[i][k] /= double(globals.uniquePop_counts[i]);
                }
            }
        }
        
    } // end of if fixLabels
    
    // finish off harmonic mean
    harmonic = log(double(samples))-harmonic;
     
}

// Assembly:
subq $0xe8, %rsp
movl %r9d, 0x6c(%rsp)
movl %r8d, 0x70(%rsp)
movl %ecx, %eax
movl 0x6c(%rsp), %ecx
movl %eax, 0x74(%rsp)
movl %edx, %eax
movl 0x70(%rsp), %edx
movq %rsi, %r8
movl 0x74(%rsp), %esi
movq %rdi, %r9
movb %al, %dil
movl 0xf8(%rsp), %eax
movb 0xf0(%rsp), %al
movq %r9, 0xe0(%rsp)
movq %r8, 0xd8(%rsp)
andb $0x1, %dil
movb %dil, 0xd7(%rsp)
andb $0x1, %sil
movb %sil, 0xd6(%rsp)
andb $0x1, %dl
movb %dl, 0xd5(%rsp)
andb $0x1, %cl
movb %cl, 0xd4(%rsp)
andb $0x1, %al
movb %al, 0xd3(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x78(%rsp)
movl $0x1, 0xcc(%rsp)
movl $0x0, 0xc8(%rsp)
movq 0x78(%rsp), %rdx
movl 0xc8(%rsp), %eax
movl 0xa4(%rdx), %ecx
addl 0xa8(%rdx), %ecx
cmpl %ecx, %eax
jge 0x1229d
movl $0x0, 0xc4(%rsp)
movl 0xc4(%rsp), %eax
cmpl 0xcc(%rsp), %eax
jge 0x11dca
movq 0x78(%rsp), %rdi
callq 0x128a0
movq 0x78(%rsp), %rdi
callq 0x131f0
movq 0xd8(%rsp), %rax
movb 0x2bd1(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
jne 0x11db5
movq 0x78(%rsp), %rdi
callq 0x145c0
jmp 0x11db7
movl 0xc4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc4(%rsp)
jmp 0x11d6f
movq 0x78(%rsp), %rcx
movl 0xc8(%rsp), %eax
cmpl 0xa4(%rcx), %eax
jne 0x11df0
movq 0x78(%rsp), %rax
movl 0xac(%rax), %eax
movl %eax, 0xcc(%rsp)
testb $0x1, 0xd5(%rsp)
je 0x11e4e
movq 0x78(%rsp), %rdi
callq 0x14940
movq 0x78(%rsp), %rdi
movq 0xd8(%rsp), %rsi
movl 0xc8(%rsp), %edx
callq 0x14d20
movq 0x78(%rsp), %rdi
movl 0xc8(%rsp), %esi
callq 0x155d0
movq 0x78(%rsp), %rcx
movl 0xc8(%rsp), %eax
cmpl 0xa4(%rcx), %eax
jl 0x11e4c
movq 0x78(%rsp), %rdi
callq 0x156e0
jmp 0x11e4e
movq 0x78(%rsp), %rdi
callq 0x15880
testb $0x1, 0xd7(%rsp)
je 0x11e76
movq 0x78(%rsp), %rdi
callq 0x15a80
movq 0x78(%rsp), %rdi
callq 0x15e00
movq 0x78(%rsp), %rcx
movl 0xc8(%rsp), %eax
cmpl 0xa4(%rcx), %eax
jl 0x11faf
movq 0x78(%rsp), %rax
movsd 0x1e8(%rax), %xmm0
addsd 0x1f0(%rax), %xmm0
movsd %xmm0, 0x1f0(%rax)
movsd 0x1e8(%rax), %xmm0
movsd 0x1e8(%rax), %xmm2
movsd 0x210(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x210(%rax)
testb $0x1, 0xd6(%rsp)
je 0x11f19
movq 0x78(%rsp), %rcx
movsd 0x1e8(%rcx), %xmm0
movsd %xmm0, 0x60(%rsp)
movq %rcx, %rdi
addq $0x1f8, %rdi            # imm = 0x1F8
movl 0xc8(%rsp), %eax
subl 0xa4(%rcx), %eax
movslq %eax, %rsi
callq 0x8c20
movsd 0x60(%rsp), %xmm0
movsd %xmm0, (%rax)
movq 0x78(%rsp), %rax
movsd 0x230(%rax), %xmm0
movsd 0x1e8(%rax), %xmm1
movq %xmm1, %rax
movabsq $-0x8000000000000000, %rcx # imm = 0x8000000000000000
xorq %rcx, %rax
movq %rax, %xmm1
callq 0x339b0
movq 0x78(%rsp), %rax
movsd %xmm0, 0x230(%rax)
movb 0xd7(%rsp), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x11fad
movq 0x78(%rsp), %rax
movsd 0x218(%rax), %xmm0
addsd 0x220(%rax), %xmm0
movsd %xmm0, 0x220(%rax)
movsd 0x218(%rax), %xmm0
movsd 0x218(%rax), %xmm2
movsd 0x228(%rax), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x228(%rax)
jmp 0x11faf
testb $0x1, 0xd4(%rsp)
je 0x120b5
movq 0x78(%rsp), %rax
movq 0xd8(%rsp), %rdi
addq $0xb70, %rdi            # imm = 0xB70
movl 0x1c(%rax), %esi
callq 0x4700
movq %rax, %rdi
leaq 0x4a245(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movl 0xf8(%rsp), %esi
addl $0x1, %esi
callq 0x4700
movq %rax, %rdi
leaq 0x4a224(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movq 0x78(%rsp), %rax
movl 0xc8(%rsp), %esi
subl 0xa4(%rax), %esi
addl $0x1, %esi
callq 0x4700
movq %rax, %rdi
leaq 0x4a1f8(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movq 0x78(%rsp), %rax
movsd 0x1e8(%rax), %xmm0
callq 0x4790
movq %rax, %rdi
leaq 0x4a1d4(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movq 0x78(%rsp), %rax
movsd 0x218(%rax), %xmm0
callq 0x4790
movq %rax, %rdi
leaq 0x4a1b0(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movq 0x78(%rsp), %rax
movsd 0x88(%rax), %xmm0
callq 0x4790
movq %rax, %rdi
leaq 0x4a7f6(%rip), %rsi     # 0x5c892
callq 0x4430
movq 0xd8(%rsp), %rdi
addq $0xb70, %rdi            # imm = 0xB70
callq 0x42b0
testb $0x1, 0xd3(%rsp)
je 0x12285
movq 0x78(%rsp), %rax
movq 0xd8(%rsp), %rdi
addq $0x1f70, %rdi           # imm = 0x1F70
movl 0x1c(%rax), %esi
callq 0x4700
movq %rax, %rdi
leaq 0x4a13f(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movl 0xf8(%rsp), %esi
addl $0x1, %esi
callq 0x4700
movq %rax, %rdi
leaq 0x4a11e(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rdi
movq 0x78(%rsp), %rax
movl 0xc8(%rsp), %esi
subl 0xa4(%rax), %esi
addl $0x1, %esi
callq 0x4700
movq 0x78(%rsp), %rax
movl $0xffffffff, 0x108(%rax) # imm = 0xFFFFFFFF
movl $0x0, 0xc0(%rsp)
movq 0x78(%rsp), %rcx
movl 0xc0(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x12256
movl $0x0, 0xbc(%rsp)
movq 0x78(%rsp), %rcx
movl 0xbc(%rsp), %eax
cmpl 0x24(%rcx), %eax
jge 0x1223e
movl $0x0, 0xb8(%rsp)
movq 0x78(%rsp), %rdi
movl 0xb8(%rsp), %eax
movl %eax, 0x5c(%rsp)
addq $0x40, %rdi
movslq 0xc0(%rsp), %rsi
callq 0x8ba0
movq %rax, %rcx
movl 0x5c(%rsp), %eax
cmpl (%rcx), %eax
jge 0x12226
movq 0x78(%rsp), %rax
movl 0x108(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x108(%rax)
movq 0xd8(%rsp), %rdi
addq $0x1f70, %rdi           # imm = 0x1F70
leaq 0x4a04c(%rip), %rsi     # 0x5c228
callq 0x4430
movq %rax, %rcx
movq 0x78(%rsp), %rax
movq %rcx, 0x50(%rsp)
movq %rax, %rdi
addq $0xc0, %rdi
movslq 0x108(%rax), %rsi
callq 0x8ba0
movq 0x50(%rsp), %rdi
movl (%rax), %esi
callq 0x4700
movl 0xb8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb8(%rsp)
jmp 0x12186
jmp 0x12228
movl 0xbc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xbc(%rsp)
jmp 0x12166
jmp 0x12240
movl 0xc0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc0(%rsp)
jmp 0x12146
movq 0xd8(%rsp), %rdi
addq $0x1f70, %rdi           # imm = 0x1F70
leaq 0x4a626(%rip), %rsi     # 0x5c892
callq 0x4430
movq 0xd8(%rsp), %rdi
addq $0x1f70, %rdi           # imm = 0x1F70
callq 0x42b0
jmp 0x12287
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x11d44
testb $0x1, 0xd5(%rsp)
je 0x12866
movq 0x78(%rsp), %rax
movl $0xffffffff, 0x108(%rax) # imm = 0xFFFFFFFF
movl $0x0, 0xb4(%rsp)
movq 0x78(%rsp), %rcx
movl 0xb4(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x1245e
movl $0x0, 0xb0(%rsp)
movq 0x78(%rsp), %rcx
movl 0xb0(%rsp), %eax
cmpl 0x24(%rcx), %eax
jge 0x12446
movl $0x0, 0xac(%rsp)
movq 0x78(%rsp), %rdi
movl 0xac(%rsp), %eax
movl %eax, 0x4c(%rsp)
addq $0x40, %rdi
movslq 0xb4(%rsp), %rsi
callq 0x8ba0
movq %rax, %rcx
movl 0x4c(%rsp), %eax
cmpl (%rcx), %eax
jge 0x1242e
movq 0x78(%rsp), %rax
movl 0x108(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x108(%rax)
movl $0x0, 0xa8(%rsp)
movq 0x78(%rsp), %rcx
movl 0xa8(%rsp), %eax
cmpl 0x1c(%rcx), %eax
jge 0x12416
movq 0x78(%rsp), %rax
movq %rax, %rdi
addq $0x2e0, %rdi            # imm = 0x2E0
movslq 0x108(%rax), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0xa8(%rsp), %rsi
callq 0x8c20
movq %rax, %rcx
movq 0x78(%rsp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, 0x38(%rsp)
cvtsi2sdl 0xa8(%rax), %xmm0
callq 0x4390
movaps %xmm0, %xmm1
movsd 0x38(%rsp), %xmm0
subsd %xmm1, %xmm0
callq 0x4760
movq 0x78(%rsp), %rax
movsd %xmm0, 0x40(%rsp)
movq %rax, %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
movslq 0x108(%rax), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0xa8(%rsp), %rsi
callq 0x8c20
movsd 0x40(%rsp), %xmm0
movsd %xmm0, (%rax)
movl 0xa8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa8(%rsp)
jmp 0x12354
jmp 0x12418
movl 0xac(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xac(%rsp)
jmp 0x12305
jmp 0x12430
movl 0xb0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb0(%rsp)
jmp 0x122e5
jmp 0x12448
movl 0xb4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xb4(%rsp)
jmp 0x122c5
movq 0x78(%rsp), %rax
movl $0xffffffff, 0x108(%rax) # imm = 0xFFFFFFFF
movl $0x0, 0xa4(%rsp)
movq 0x78(%rsp), %rcx
movl 0xa4(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x12679
movl $0x0, 0xa0(%rsp)
movq 0x78(%rsp), %rcx
movl 0xa0(%rsp), %eax
cmpl 0x24(%rcx), %eax
jge 0x125ce
movl $0x0, 0x9c(%rsp)
movq 0x78(%rsp), %rdi
movl 0x9c(%rsp), %eax
movl %eax, 0x34(%rsp)
addq $0x40, %rdi
movslq 0xa4(%rsp), %rsi
callq 0x8ba0
movq %rax, %rcx
movl 0x34(%rsp), %eax
cmpl (%rcx), %eax
jge 0x125b6
movq 0x78(%rsp), %rax
movl 0x108(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x108(%rax)
movl $0x0, 0x98(%rsp)
movq 0x78(%rsp), %rcx
movl 0x98(%rsp), %eax
cmpl 0x1c(%rcx), %eax
jge 0x1259e
movq 0x78(%rsp), %rax
movq %rax, %rdi
addq $0x2f8, %rdi            # imm = 0x2F8
movslq 0x108(%rax), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x98(%rsp), %rsi
callq 0x8c20
movq 0x78(%rsp), %rdi
movsd (%rax), %xmm0
movsd %xmm0, 0x28(%rsp)
addq $0x310, %rdi            # imm = 0x310
movslq 0xa4(%rsp), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x98(%rsp), %rsi
callq 0x8c20
movsd 0x28(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl 0x98(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x98(%rsp)
jmp 0x12507
jmp 0x125a0
movl 0x9c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x9c(%rsp)
jmp 0x124b8
jmp 0x125b8
movl 0xa0(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa0(%rsp)
jmp 0x12498
movl $0x0, 0x94(%rsp)
movq 0x78(%rsp), %rcx
movl 0x94(%rsp), %eax
cmpl 0x1c(%rcx), %eax
jge 0x12661
movq 0x78(%rsp), %rdi
addq $0x40, %rdi
movslq 0xa4(%rsp), %rsi
callq 0x8ba0
movq 0x78(%rsp), %rdi
movl (%rax), %eax
imull 0x24(%rdi), %eax
cvtsi2sd %eax, %xmm0
movsd %xmm0, 0x20(%rsp)
addq $0x310, %rdi            # imm = 0x310
movslq 0xa4(%rsp), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x94(%rsp), %rsi
callq 0x8c20
movsd 0x20(%rsp), %xmm1
movsd (%rax), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x94(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x94(%rsp)
jmp 0x125d9
jmp 0x12663
movl 0xa4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xa4(%rsp)
jmp 0x12478
movq 0x78(%rsp), %rax
testb $0x1, 0xa0(%rax)
je 0x12864
movl $0x0, 0x90(%rsp)
movq 0x78(%rsp), %rcx
movl 0x90(%rsp), %eax
cmpl 0x20(%rcx), %eax
jge 0x12786
movl $0x0, 0x8c(%rsp)
movq 0x78(%rsp), %rcx
movl 0x8c(%rsp), %eax
cmpl 0x1c(%rcx), %eax
jge 0x1276e
movq 0x78(%rsp), %rdi
addq $0x310, %rdi            # imm = 0x310
movslq 0x90(%rsp), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x8c(%rsp), %rsi
callq 0x8c20
movq %rax, %rcx
movq 0x78(%rsp), %rax
movsd (%rcx), %xmm0
movsd %xmm0, 0x18(%rsp)
addq $0x328, %rax            # imm = 0x328
movq %rax, 0x10(%rsp)
movq 0xd8(%rsp), %rdi
addq $0x2cb8, %rdi           # imm = 0x2CB8
movslq 0x90(%rsp), %rsi
callq 0x8ba0
movq 0x10(%rsp), %rdi
movslq (%rax), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x8c(%rsp), %rsi
callq 0x8c20
movsd 0x18(%rsp), %xmm0
addsd (%rax), %xmm0
movsd %xmm0, (%rax)
movl 0x8c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x8c(%rsp)
jmp 0x126b6
jmp 0x12770
movl 0x90(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x90(%rsp)
jmp 0x12696
movl $0x0, 0x88(%rsp)
movq 0x78(%rsp), %rdi
movl 0x88(%rsp), %eax
movl %eax, 0xc(%rsp)
addq $0x58, %rdi
callq 0x16bb0
movq %rax, %rcx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x12862
movl $0x0, 0x84(%rsp)
movq 0x78(%rsp), %rcx
movl 0x84(%rsp), %eax
cmpl 0x1c(%rcx), %eax
jge 0x1284a
movq 0xd8(%rsp), %rdi
addq $0x2ca0, %rdi           # imm = 0x2CA0
movslq 0x88(%rsp), %rsi
callq 0x8ba0
movq 0x78(%rsp), %rdi
cvtsi2sdl (%rax), %xmm0
movsd %xmm0, (%rsp)
addq $0x328, %rdi            # imm = 0x328
movslq 0x88(%rsp), %rsi
callq 0x8bc0
movq %rax, %rdi
movslq 0x84(%rsp), %rsi
callq 0x8c20
movsd (%rsp), %xmm1
movsd (%rax), %xmm0
divsd %xmm1, %xmm0
movsd %xmm0, (%rax)
movl 0x84(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x84(%rsp)
jmp 0x127c4
jmp 0x1284c
movl 0x88(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x88(%rsp)
jmp 0x12791
jmp 0x12864
jmp 0x12866
movq 0x78(%rsp), %rax
cvtsi2sdl 0xa8(%rax), %xmm0
callq 0x4390
movq 0x78(%rsp), %rax
subsd 0x230(%rax), %xmm0
movsd %xmm0, 0x230(%rax)
addq $0xe8, %rsp
retq
nopw %cs:(%rax,%rax)