// File: /workspace/github_cpp_makefile_star2_O3/readmapping[P]alfalfa/src/mapper.cpp
// Function: extendAlignmentChain(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::vector<match_t, std::allocator<match_t>> const&, int, int, int, align_opt const&, long, long, read_t&, bool)
int extendAlignmentChain(const string& S, const string& P, 
        const vector<match_t>& matches, int editDist, int minScore, int minCoverage, 
        const align_opt & alnOptions, long chrStart, long chrEnd, read_t & read, bool fw){
    int maxAlnScore = min(-1, minScore-10);
    if(alnOptions.print >= 5){
        cerr << "min Score is " << minScore << endl;
        cerr << "seeds are: " << endl;
        for(size_t i = 0; i < matches.size(); i++)
            cerr << matches[i].query << "," << matches[i].ref << "," << matches[i].len << endl;
    }
    list<size_t> chain;
    //seeds in order of 
    vector<long> seedOrder;
    seedOrder.reserve(matches.size());
    vector<bool> used;
    used.assign(matches.size(),false);
    for(size_t i = 0; i < matches.size(); i++)
        seedOrder.push_back((long)matches[i].len<<32 | i);
    sort(seedOrder.begin(), seedOrder.end());
    //for all seeds:
    vector<boundaries> alnBounds;
    vector<int> alnScores;
    vector<long> alnBegins;
    for(int i = seedOrder.size()-1; i >=0; i--){
        size_t anchorPos = (uint32_t)seedOrder[i];
        match_t anchor = matches[anchorPos];
        if(alnOptions.print >= 5) cerr << "anchor " << anchor.query << "," << anchor.ref << "," << anchor.len << endl;
        //check if current anchor is not already in alignment
        bool extend = !used[anchorPos];
        size_t j = 0;
        while(j < alnBounds.size() && extend){
            bool notContained = anchor.query < alnBounds[j].queryB || anchor.query+anchor.len >= alnBounds[j].queryE || anchor.ref < alnBounds[j].refB || anchor.ref+anchor.len >= alnBounds[j].refE;
            if(!notContained){
                int qDist = anchor.query - alnBounds[j].queryB;
                int refDist = anchor.ref - alnBounds[j].refB;
                int max_gapL = min(alnOptions.fixedBandSize, (int)((min(qDist,refDist)*alnOptions.match + alnOptions.openGap)/alnOptions.extendGap + 1.));
                extend = max(qDist,refDist) >= max_gapL;
                if(extend){
                    qDist = alnBounds[j].queryE - (anchor.query+anchor.len);
                    refDist = alnBounds[j].refE - (anchor.ref+anchor.len);
                    max_gapL = min(alnOptions.fixedBandSize, (int)((min(qDist,refDist)*alnOptions.match + alnOptions.openGap)/alnOptions.extendGap + 1.));
                    extend = max(qDist,refDist) >= max_gapL;
                }
            }
            j++;
        }
        if(extend){
            //CREATE CHAIN AROUND THIS ANCHOR
            int curScore = 0;
            int minEdit = nextChain(matches, chain, anchorPos, alnOptions.errorPercent, used, P.length(), curScore);
            int chainScore = curScore;//for debug purpose
            if(alnOptions.print >= 2){
                cerr << "#CHAIN " << chain.size() << endl;
                cerr << "#CHAINSCORE " << curScore << endl;
                cerr << "#CHAINSKEW " << minEdit << endl;
                cerr << "#CHAINMINSCORE " << minCoverage << endl;
                if(alnOptions.print >= 5)
                        cerr << "extend chain of size " << chain.size() << " elements and minEdit,curScore =  " << minEdit << "," << curScore << endl;
            }
            //ITERATE THROUGH CHAIN
            if(minEdit <= editDist && (chain.size() > 1 || anchor.len >= minCoverage )){
                std::list<size_t>::const_iterator iterator = chain.begin(), itEnd = chain.end();
                int bandSize = min(alnOptions.fixedBandSize, (int)(editDist-minEdit+1));
                anchor = matches[*iterator];
                iterator++;
                int tmpQB = anchor.query;
                int tmpQE = anchor.query+anchor.len-1;
                long tmpRB = anchor.ref;
                long tmpRE = anchor.ref + anchor.len-1L;
                if(alnOptions.print >= 7) cerr << "first seed (q/r/l): " << tmpQB << "," << tmpRB << "," << anchor.len << endl;
                //INSIDE CHAIN
                while(iterator != itEnd){
                    match_t seed = matches[*iterator];
                    if(alnOptions.print >= 6) cerr << "current seed (q/r/l): " << seed.query << "," << seed.ref << "," << seed.len << endl;
                    long qDist = seed.query - tmpQE;
                    long refDist = seed.ref - tmpRE;
                    if (qDist < 0 || refDist < 0) {
                        if (qDist >= refDist)
                            qDist -= refDist; //qDist insertions
                        else
                            refDist -= qDist;
                    }
                    if (qDist <= 0) {//minRefDist deletions
                        //1+|qDist| matches lost of next mem
                        curScore += alnOptions.openGap + alnOptions.extendGap*refDist;
                        if(alnOptions.print >= 7) cerr << "added deletion of size " << refDist << endl;
                    } else if (refDist <= 0) {
                        curScore += alnOptions.openGap + alnOptions.extendGap*qDist;
                        if(alnOptions.print >= 7) cerr << "added insertion of size " << qDist << endl;
                    } else if (qDist == 1) {
                        curScore += alnOptions.openGap + alnOptions.extendGap*(refDist-1);
                        if(alnOptions.print >= 7) cerr << "added deletion of size " << refDist-1 << endl;
                    } else if (refDist == 1) {
                        curScore += alnOptions.openGap + alnOptions.extendGap*(qDist-1);
                        if(alnOptions.print >= 7) cerr << "added insertion of size " << qDist-1 << endl;
                    } else if (refDist == 2 && qDist==2) {
                        curScore += alnOptions.mismatch;
                        if(alnOptions.print >= 7) cerr << "added mutation" << endl;
                    } else {//both distances are positive and not equal to (1,1), otherwise seeds would not be maximal!
                        uint8_t *target;
                        int tLen = seed.ref - tmpRE - 1;
                        target = (uint8_t *)malloc(tLen);
                        for (int j = 0; j < tLen; ++j) // convert to the nt4 encoding
                            target[j] = Utils::ORDVALUE[(size_t)S[tmpRE+1+j]];
                        uint8_t *query;
                        int qLen = seed.query - tmpQE - 1;
                        query = (uint8_t *)malloc(qLen);
                        for (int j = 0; j < qLen; ++j)
                            query[j] = Utils::ORDVALUE[(size_t)P[tmpQE+1+j]];
                        int innerBand = min(alnOptions.fixedBandSize, (int)(editDist-minEdit+abs(qLen-tLen)+3));
                        innerBand = max(innerBand,abs(qLen-tLen)+(int)(abs(qLen-tLen)*alnOptions.errorPercent));
                        if(alnOptions.print >= 2) cerr << "#DP " << (tLen*innerBand) << endl;
                        if(alnOptions.print >= 7) cerr << "dp called with dimension " << (seed.query-tmpQE+1) << "x" << (seed.ref-tmpRE+1) << " and band " << innerBand << endl;
                        curScore += ksw_nw(qLen, query, tLen, target, 5, alnOptions.mat, 
                                -1*alnOptions.openGap, -1*alnOptions.extendGap, innerBand);
                        free(query);
                        free(target);
                    }
                    if(alnOptions.print >= 6) cerr << "curScore is " << curScore << endl;
                    //update bounds
                    tmpRE = seed.ref + seed.len - 1L;
                    tmpQE = seed.query + seed.len - 1;            
                    ++iterator;
                }
                //lef-right extensions
                if(tmpQB <= (int)(P.length()-1)-tmpQE){
                    leftExtension(S, P, tmpQB, tmpRB, chrStart, alnOptions, curScore, bandSize, editDist-minEdit+1);
                    rightExtension(S, P, tmpQE, tmpRE, chrEnd, alnOptions, curScore, bandSize, editDist);
                }
                else{
                    rightExtension(S, P, tmpQE, tmpRE, chrEnd, alnOptions, curScore, bandSize, editDist);
                    leftExtension(S, P, tmpQB, tmpRB, chrStart, alnOptions, curScore, bandSize, editDist-minEdit+1);
                }
                if(alnOptions.print >= 5) cerr << "current alignments startpos would be " << tmpRB << endl;
                maxAlnScore = max(maxAlnScore, curScore);
                if(curScore >= minScore){
                    if(alnOptions.print >= 2) cerr << "#SUCCES " << curScore << endl;
                    bool equal = false;
                    for(size_t i = 0; i < alnScores.size(); i++){
                        if(alnScores[i]>= curScore && abs(alnBegins[i]-tmpRB) < editDist)
                            equal = true;
                    }
                    if(!equal){
                        alignment_t * alignmentFound = new alignment_t();
                        alignmentFound->refB = tmpRB;
                        alignmentFound->refE = tmpRE;
                        alignmentFound->qB = tmpQB;
                        alignmentFound->qE = tmpQE;
                        alignmentFound->alignmentScore = curScore;
                        if(!fw){
                            alignmentFound->flag.set(4,true);
                        }
                        alignmentFound->refLength = (tmpRE-tmpRB+1);
                        for(std::list<size_t>::const_iterator iterator = chain.begin(); iterator != chain.end(); iterator++){
                            match_t seed = matches[*iterator];
                            alignmentFound->chain.push_back(seed);
                        }
                        read.alignments.push_back(alignmentFound);
                        alnScores.push_back(curScore);
                        alnBegins.push_back(tmpRB);
                    }
                }
                else if(alnOptions.print >= 2)
                    cerr << "#FAIL " << curScore << endl;
                if(alnOptions.print >= 5) cerr << "final score is " << curScore << endl;
                alnBounds.push_back(boundaries(tmpRB, tmpRE, tmpQB, tmpQE));
#ifndef NDEBUG
                if(alnOptions.debugFile != NULL){
                    //print alignment
                    fprintf(alnOptions.debugFile,"@CHA %lu %d %d\n", chain.size(), chainScore, anchor.len);
                    for( list<size_t>::const_iterator iterator = chain.begin(); iterator != chain.end(); iterator++){
                        fprintf(alnOptions.debugFile,"%d %ld %d\n", matches[*iterator].query, matches[*iterator].ref, matches[*iterator].len);
                    }
                    if(curScore >= (int) (P.length()*alnOptions.match + (alnOptions.mismatch-alnOptions.match)*editDist)){
                        alignment_t * alignmentFound = new alignment_t();
                        alignmentFound->refB = tmpRB;
                        alignmentFound->refE = tmpRE;
                        alignmentFound->qB = tmpQB;
                        alignmentFound->qE = tmpQE;
                        alignmentFound->alignmentScore = curScore;
                        for(std::list<size_t>::const_iterator iterator = chain.begin(); iterator != chain.end(); iterator++){
                            match_t seed = matches[*iterator];
                            alignmentFound->chain.push_back(seed);
                        }
                        uint8_t *query;
                        query = (uint8_t *)malloc(P.length());
                        for (size_t i = 0; i < P.length(); ++i) // convert to the nt4 encoding
                            query[i] = Utils::ORDVALUE[(size_t)P[i]];
                        alignmentFound->constructCIGAR(S, query, P.length(), alnOptions.fixedBandSize, alnOptions.mat, 
                                alnOptions.match, alnOptions.openGap, alnOptions.extendGap, 0);
                        free(query);
                        fprintf(alnOptions.debugFile,"@SUC %d %ld %s %d\n", alignmentFound->editDist, tmpRB, alignmentFound->NMtag.c_str(), curScore);
                        delete alignmentFound;
                    }
                    else{//print fail reason
                        fprintf(alnOptions.debugFile,"@ERR %ld %d\n", tmpRB, curScore);
                    }
                    //print best possible alignment
                    long refB = matches[chain.front()].ref - matches[chain.front()].query - 3*editDist;
                    long refE = refB+P.length() + 6*editDist;
                    dp_output output = dpInRegion(S, P, refB, refE, 0, P.length());
                    string cigarstring = createCigar(output.cigarChars, output.cigarLengths);
                    fprintf(alnOptions.debugFile,"@BEST %d %ld %s %d\n", output.editDist, refB, cigarstring.c_str(), output.dpScore);
                }
#endif
            }
        }
    }
    int scoreReturned = -1;
    if(maxAlnScore >= minScore)
        scoreReturned = maxAlnScore;
    return scoreReturned;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movl %r9d, 0x74(%rsp)
movq %rcx, 0x90(%rsp)
movq %rdx, %r15
movq %rsi, 0x50(%rsp)
movq %rdi, 0x48(%rsp)
movq 0x1d0(%rsp), %rcx
cmpl $0x9, %r8d
movl $0x9, %eax
cmovll %r8d, %eax
movl %eax, 0x24(%rsp)
cmpl $0x4, 0x78(%rcx)
movl %r8d, 0x70(%rsp)
jle 0x22918
movl %r8d, %ebp
movq 0x31822(%rip), %rbx     # 0x53fe8
leaq 0x22782(%rip), %rsi     # 0x44f4f
movl $0xd, %edx
movq %rbx, %rdi
callq 0x7340
movq %rbx, %rdi
movl %ebp, %esi
callq 0x75d0
movq %rax, %r14
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r14, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
leaq 0x22748(%rip), %rsi     # 0x44f5d
movl $0xb, %edx
movq %rbx, %rdi
callq 0x7340
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq (%r15), %rcx
movq 0x8(%r15), %rax
movq %rax, %rsi
cmpq %rcx, %rax
movq %r15, %rbp
je 0x22922
xorl %r12d, %r12d
movq 0x3177f(%rip), %rbx     # 0x53fe8
leaq 0x22620(%rip), %r14     # 0x44e90
movq %rcx, %rax
xorl %r13d, %r13d
movl 0x8(%rax,%r12), %esi
movq %rbx, %rdi
callq 0x75d0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x7340
movq (%rbp), %rax
movq (%rax,%r12), %rsi
movq %r15, %rdi
callq 0x72a0
movq %rax, %r15
movl $0x1, %edx
movq %rax, %rdi
movq %r14, %rsi
callq 0x7340
movq (%rbp), %rax
movl 0xc(%rax,%r12), %esi
movq %r15, %rdi
callq 0x75d0
movq %rax, %r15
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r15, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r15, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
incq %r13
movq (%rbp), %rax
movq 0x8(%rbp), %rsi
movq %rsi, %rcx
subq %rax, %rcx
sarq $0x4, %rcx
addq $0x10, %r12
cmpq %rcx, %r13
jb 0x22876
jmp 0x22922
movq (%r15), %rax
movq 0x8(%r15), %rsi
movq %r15, %rbp
movq %rbp, 0x30(%rsp)
subq %rax, %rsi
leaq 0x78(%rsp), %r13
movq %r13, 0x8(%r13)
movq %r13, (%r13)
xorl %ebx, %ebx
movq %rbx, 0x10(%r13)
leaq 0xc0(%rsp), %rdi
movq %rbx, 0x10(%rdi)
xorpd %xmm0, %xmm0
movapd %xmm0, (%rdi)
sarq $0x4, %rsi
callq 0x2b9d4
leaq 0x158(%rsp), %rdi
movq %rbx, (%rdi)
movl %ebx, 0x8(%rdi)
movq %rbx, 0x10(%rdi)
movl %ebx, 0x18(%rdi)
movq %rbx, 0x20(%rdi)
movq 0x30(%rsp), %rbx
movq 0x8(%rbx), %rsi
subq (%rbx), %rsi
sarq $0x4, %rsi
xorl %edx, %edx
callq 0x2fe26
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
cmpq %rax, %rcx
je 0x22a10
movl $0xc, %ebx
xorl %r12d, %r12d
leaq 0xc0(%rsp), %r14
leaq 0xa0(%rsp), %r15
movl (%rax,%rbx), %edx
shlq $0x20, %rdx
orq %r12, %rdx
movq %rdx, 0xa0(%rsp)
movq 0xc8(%rsp), %rsi
cmpq 0xd0(%rsp), %rsi
je 0x229e3
movq %rdx, (%rsi)
addq $0x8, %rsi
movq %rsi, 0xc8(%rsp)
jmp 0x229fa
movq %r14, %rdi
movq %r15, %rdx
callq 0x17184
movq 0x30(%rsp), %rcx
movq (%rcx), %rax
movq 0x8(%rcx), %rcx
incq %r12
movq %rcx, %rdx
subq %rax, %rdx
sarq $0x4, %rdx
addq $0x10, %rbx
cmpq %rdx, %r12
jb 0x229ae
movq 0xc0(%rsp), %r14
movq 0xc8(%rsp), %r15
cmpq %r15, %r14
je 0x22a64
movq %r15, %rax
subq %r14, %rax
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %r14, %rdi
movq %r15, %rsi
callq 0x304d6
movq %r14, %rdi
movq %r15, %rsi
callq 0x305bf
movq 0xc0(%rsp), %r14
movq 0xc8(%rsp), %rax
jmp 0x22a67
movq %r14, %rax
subq %r14, %rax
addl $-0xa, 0x24(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xa0(%rsp)
xorl %ecx, %ecx
movq %rcx, 0xb0(%rsp)
movq %rcx, 0xf0(%rsp)
movapd %xmm0, 0xe0(%rsp)
movq %rcx, 0x120(%rsp)
movapd %xmm0, 0x110(%rsp)
shrq $0x3, %rax
decl %eax
js 0x23c80
movq 0x1e8(%rsp), %rdx
movq 0x1d0(%rsp), %rcx
addq $0x10, %rcx
movq %rcx, 0x188(%rsp)
movslq 0x90(%rsp), %rcx
movq %rcx, 0x190(%rsp)
leaq 0xb0(%rdx), %rcx
movq %rcx, 0x180(%rsp)
movl %eax, %ecx
movq 0xc0(%rsp), %rax
movq %rcx, 0x68(%rsp)
movq (%rax,%rcx,8), %rbp
movl %ebp, %ecx
movq 0x30(%rsp), %rax
movq (%rax), %rax
movq %rcx, 0x100(%rsp)
shlq $0x4, %rcx
movq (%rax,%rcx), %r15
movl 0x8(%rax,%rcx), %r12d
movslq 0xc(%rax,%rcx), %rcx
movq %rcx, 0x28(%rsp)
movl %ecx, %r14d
movq 0x1d0(%rsp), %rax
cmpl $0x5, 0x78(%rax)
jl 0x22bd5
movl $0x7, %edx
movq 0x3149c(%rip), %rdi     # 0x53fe8
leaq 0x22416(%rip), %rsi     # 0x44f69
callq 0x7340
movq 0x31489(%rip), %rdi     # 0x53fe8
movl %r12d, %esi
callq 0x75d0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x22317(%rip), %rsi     # 0x44e90
callq 0x7340
movq %rbx, %rdi
movq %r15, %rsi
callq 0x72a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x222f5(%rip), %rsi     # 0x44e90
callq 0x7340
movq %rbx, %rdi
movl %r14d, %esi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x158(%rsp), %rax
movl $0x1, %edx
movl %ebp, %ecx
shlq %cl, %rdx
shrl $0x6, %ebp
andq (%rax,%rbp,8), %rdx
sete %al
movq 0xa0(%rsp), %rcx
movq 0xa8(%rsp), %rsi
subq %rcx, %rsi
je 0x22d2f
testq %rdx, %rdx
jne 0x22d2f
sarq $0x3, %rsi
movabsq $-0x5555555555555555, %rax # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rsi
leal (%r14,%r12), %edi
movq 0x28(%rsp), %rax
leaq (%r15,%rax), %r10
movq 0x1d0(%rsp), %rax
movl (%rax), %edx
movl %edx, 0x14(%rsp)
movl 0x8(%rax), %edx
movl %edx, 0x60(%rsp)
movl 0xc(%rax), %edx
movl %edx, 0x40(%rsp)
movl 0x90(%rax), %eax
movl %eax, 0x98(%rsp)
addq %r15, %r14
movq %r14, 0x58(%rsp)
addq $0x14, %rcx
movl $0x1, %ebp
movb $0x1, %al
movl %r12d, %edx
subl -0x4(%rcx), %edx
jl 0x22d16
movl (%rcx), %r13d
subl %edi, %r13d
jle 0x22d16
movq -0x14(%rcx), %r9
cmpq %r9, %r15
jl 0x22d16
movq -0xc(%rcx), %r14
cmpq %r14, %r10
jge 0x22d16
movq %r15, %rbx
movl %r15d, %r8d
subl %r9d, %r8d
cmpl %r8d, %edx
movl %r8d, %eax
cmovll %edx, %eax
cmovgl %edx, %r8d
movl 0x14(%rsp), %r9d
imull %r9d, %eax
movl 0x60(%rsp), %r11d
addl %r11d, %eax
cltd
movl 0x40(%rsp), %r15d
idivl %r15d
incl %eax
movl 0x98(%rsp), %edx
cmpl %eax, %edx
cmovll %edx, %eax
cmpl %eax, %r8d
jl 0x23ade
subl 0x58(%rsp), %r14d
cmpl %r14d, %r13d
movl %r14d, %eax
cmovll %r13d, %eax
cmovgl %r13d, %r14d
imull %r9d, %eax
addl %r11d, %eax
movl %edx, %r8d
cltd
idivl %r15d
incl %eax
cmpl %eax, %r8d
cmovll %r8d, %eax
cmpl %eax, %r14d
setge %al
movq %rbx, %r15
cmpq %rsi, %rbp
leaq 0x78(%rsp), %r13
jae 0x22d2f
incq %rbp
addq $0x18, %rcx
testb %al, %al
jne 0x22c6c
testb %al, %al
je 0x23c33
movl $0x0, 0x8(%rsp)
movq 0x1d0(%rsp), %rbx
movsd 0x30(%rbx), %xmm0
movq 0x50(%rsp), %rax
movq 0x8(%rax), %r8
movq 0x30(%rsp), %rdi
movq %r13, %rsi
movq 0x100(%rsp), %rdx
leaq 0x158(%rsp), %rcx
leaq 0x8(%rsp), %r9
callq 0x22396
movq 0x68(%rsp), %r15
movl %eax, %r14d
cmpl $0x2, 0x78(%rbx)
jl 0x22f81
movl $0x7, %edx
movq 0x31253(%rip), %rdi     # 0x53fe8
leaq 0x221d5(%rip), %rsi     # 0x44f71
callq 0x7340
movq 0x88(%rsp), %rsi
movq 0x31238(%rip), %rdi     # 0x53fe8
callq 0x71c0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0xc, %edx
movq 0x311fd(%rip), %rdi     # 0x53fe8
leaq 0x22187(%rip), %rsi     # 0x44f79
callq 0x7340
movl 0x8(%rsp), %esi
movq 0x311e6(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0xb, %edx
movq 0x311ab(%rip), %rdi     # 0x53fe8
leaq 0x22142(%rip), %rsi     # 0x44f86
callq 0x7340
movq 0x31198(%rip), %rdi     # 0x53fe8
movl %r14d, %esi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl $0xf, %edx
movq 0x3115a(%rip), %rdi     # 0x53fe8
leaq 0x220fd(%rip), %rsi     # 0x44f92
callq 0x7340
movq 0x31147(%rip), %rdi     # 0x53fe8
movl 0x74(%rsp), %esi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x1d0(%rsp), %rax
cmpl $0x5, 0x78(%rax)
jl 0x22f81
movl $0x15, %edx
movq 0x310f6(%rip), %rdi     # 0x53fe8
leaq 0x220a9(%rip), %rsi     # 0x44fa2
callq 0x7340
movq 0x88(%rsp), %rsi
movq 0x310db(%rip), %rdi     # 0x53fe8
callq 0x71c0
movq %rax, %rbx
movl $0x22, %edx
movq %rax, %rdi
leaq 0x22094(%rip), %rsi     # 0x44fb8
callq 0x7340
movq %rbx, %rdi
movl %r14d, %esi
callq 0x75d0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x21f4a(%rip), %rsi     # 0x44e90
callq 0x7340
movl 0x8(%rsp), %esi
movq %rbx, %rdi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x90(%rsp), %rax
subl %r14d, %eax
jl 0x23c38
cmpq $0x1, 0x88(%rsp)
ja 0x22fac
movq 0x28(%rsp), %rcx
cmpl 0x74(%rsp), %ecx
jl 0x23c38
movq %rax, 0x60(%rsp)
leal 0x1(%rax), %ecx
movq 0x1d0(%rsp), %rdi
movl 0x90(%rdi), %eax
cmpl %eax, %ecx
movq %rcx, 0x148(%rsp)
cmovll %ecx, %eax
movq %rax, 0x40(%rsp)
movq 0x78(%rsp), %rax
movq (%rax), %r15
movq 0x10(%rax), %rax
movq 0x30(%rsp), %rcx
movq (%rcx), %rcx
shlq $0x4, %rax
movq (%rcx,%rax), %rdx
movl 0x8(%rcx,%rax), %esi
movslq 0xc(%rcx,%rax), %r14
movl %esi, 0x10(%rsp)
leal -0x1(%rsi,%r14), %eax
movl %eax, 0xc(%rsp)
movq %rdx, 0x18(%rsp)
leaq (%rdx,%r14), %rax
decq %rax
movq %rax, 0x38(%rsp)
cmpl $0x7, 0x78(%rdi)
jl 0x230b9
movl $0x14, %edx
movq 0x30fbb(%rip), %rdi     # 0x53fe8
leaq 0x21fa7(%rip), %rsi     # 0x44fdb
callq 0x7340
movl 0x10(%rsp), %esi
movq 0x30fa4(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x21e35(%rip), %rsi     # 0x44e90
callq 0x7340
movq 0x18(%rsp), %rsi
movq %rbx, %rdi
callq 0x72a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x21e11(%rip), %rsi     # 0x44e90
callq 0x7340
movq %rbx, %rdi
movl %r14d, %esi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpq %r13, %r15
je 0x2373a
movq 0x60(%rsp), %rax
addl $0x3, %eax
movq %rax, 0x60(%rsp)
movq 0x10(%r15), %rax
movq 0x30(%rsp), %rcx
movq (%rcx), %rcx
shlq $0x4, %rax
movq (%rcx,%rax), %rdx
movq %rdx, 0x28(%rsp)
movslq 0x8(%rcx,%rax), %r12
movslq 0xc(%rcx,%rax), %r14
movq 0x1d0(%rsp), %rax
cmpl $0x6, 0x78(%rax)
jl 0x2319b
movl $0x16, %edx
movq 0x30ed8(%rip), %rdi     # 0x53fe8
leaq 0x21ed9(%rip), %rsi     # 0x44ff0
callq 0x7340
movq 0x30ec5(%rip), %rdi     # 0x53fe8
movl %r12d, %esi
callq 0x75d0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x21d53(%rip), %rsi     # 0x44e90
callq 0x7340
movq %rbx, %rdi
movq 0x28(%rsp), %rsi
callq 0x72a0
movq %rax, %rbx
movl $0x1, %edx
movq %rax, %rdi
leaq 0x21d2f(%rip), %rsi     # 0x44e90
callq 0x7340
movq %rbx, %rdi
movl %r14d, %esi
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq %r14, 0x100(%rsp)
movslq 0xc(%rsp), %r13
movq %r12, %rbx
subq %r13, %r12
movq 0x38(%rsp), %r14
movq 0x28(%rsp), %rbp
subq %r14, %rbp
testl %r12d, %r12d
js 0x231c5
testq %rbp, %rbp
jns 0x231d5
movq %rbp, %rax
subq %r12, %rax
jle 0x231d2
movq %rax, %rbp
jmp 0x231d5
subq %rbp, %r12
testq %r12, %r12
jle 0x23260
testq %rbp, %rbp
jle 0x232cc
cmpq $0x1, %r12
jne 0x23339
decq %rbp
movq 0x1d0(%rsp), %rcx
movl 0xc(%rcx), %eax
imull %ebp, %eax
addl 0x8(%rcx), %eax
addl %eax, 0x8(%rsp)
movl 0x78(%rcx), %eax
cmpl $0x7, %eax
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jl 0x23437
movl $0x17, %edx
movq 0x30dbf(%rip), %rdi     # 0x53fe8
leaq 0x21dd7(%rip), %rsi     # 0x45007
callq 0x7340
movq 0x30dac(%rip), %rdi     # 0x53fe8
movq %rbp, %rsi
callq 0x72a0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
jmp 0x23419
movq 0x1d0(%rsp), %rcx
movl 0xc(%rcx), %eax
imull %ebp, %eax
addl 0x8(%rcx), %eax
addl %eax, 0x8(%rsp)
movl 0x78(%rcx), %eax
cmpl $0x7, %eax
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jl 0x23437
movl $0x17, %edx
movq 0x30d53(%rip), %rdi     # 0x53fe8
leaq 0x21d6b(%rip), %rsi     # 0x45007
callq 0x7340
movq 0x30d40(%rip), %rdi     # 0x53fe8
movq %rbp, %rsi
callq 0x72a0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
jmp 0x23419
movq 0x1d0(%rsp), %rcx
movl 0xc(%rcx), %eax
imull %r12d, %eax
addl 0x8(%rcx), %eax
addl %eax, 0x8(%rsp)
movl 0x78(%rcx), %eax
cmpl $0x7, %eax
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jl 0x23437
movl $0x18, %edx
movq 0x30ce6(%rip), %rdi     # 0x53fe8
leaq 0x21d16(%rip), %rsi     # 0x4501f
callq 0x7340
movq 0x30cd3(%rip), %rdi     # 0x53fe8
movq %r12, %rsi
callq 0x72a0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
jmp 0x23419
cmpq $0x1, %rbp
jne 0x233ac
decq %r12
movq 0x1d0(%rsp), %rcx
movl 0xc(%rcx), %eax
imull %r12d, %eax
addl 0x8(%rcx), %eax
addl %eax, 0x8(%rsp)
movl 0x78(%rcx), %eax
cmpl $0x7, %eax
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jl 0x23437
movl $0x18, %edx
movq 0x30c70(%rip), %rdi     # 0x53fe8
leaq 0x21ca0(%rip), %rsi     # 0x4501f
callq 0x7340
movq 0x30c5d(%rip), %rdi     # 0x53fe8
movq %r12, %rsi
callq 0x72a0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
jmp 0x23419
cmpq $0x2, %r12
jne 0x234c1
cmpq $0x2, %rbp
jne 0x234c1
movq 0x1d0(%rsp), %rcx
movl 0x4(%rcx), %eax
addl %eax, 0x8(%rsp)
movl 0x78(%rcx), %eax
cmpl $0x7, %eax
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jl 0x23437
movl $0xe, %edx
movq 0x30bfd(%rip), %rdi     # 0x53fe8
leaq 0x21c46(%rip), %rsi     # 0x45038
callq 0x7340
movq 0x30bea(%rip), %rcx     # 0x53fe8
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x72b0
movq 0x30bcf(%rip), %r12     # 0x53fe8
movsbl %al, %esi
movq %r12, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x1d0(%rsp), %rax
movl 0x78(%rax), %eax
cmpl $0x6, %eax
jl 0x2348e
movl $0xc, %edx
movq 0x30ba0(%rip), %rdi     # 0x53fe8
leaq 0x21bfd(%rip), %rsi     # 0x4504c
callq 0x7340
movl 0x8(%rsp), %esi
movq 0x30b89(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x100(%rsp), %rcx
movq 0x28(%rsp), %rax
addq %rcx, %rax
decq %rax
movq %rax, 0x38(%rsp)
leal (%r14,%rcx), %eax
decl %eax
movl %eax, 0xc(%rsp)
movq (%r15), %r15
cmpq %r13, %r15
jne 0x230cf
jmp 0x2373e
movq %r14, %rax
notq %rax
addq 0x28(%rsp), %rax
movq %rax, 0x150(%rsp)
movslq %eax, %r12
movq %r12, %rdi
callq 0x7430
movq %rax, %rdi
testl %r12d, %r12d
leaq 0x21714(%rip), %r12     # 0x44c00
jle 0x23521
movq 0x48(%rsp), %rax
movq (%rax), %rax
addq %r14, %rax
incq %rax
movq 0x150(%rsp), %rcx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
xorl %edx, %edx
movsbq (%rax,%rdx), %rsi
movb (%rsi,%r12), %sil
movb %sil, (%rdi,%rdx)
incq %rdx
cmpq %rdx, %rcx
jne 0x2350c
movq %rdi, 0x98(%rsp)
movl %r13d, %eax
notl %eax
addl %ebx, %eax
movl %eax, 0x14(%rsp)
movslq %eax, %r14
movq %r14, %rdi
callq 0x7430
movq %rax, %rbp
testl %r14d, %r14d
jle 0x23571
movq 0x50(%rsp), %rax
movq (%rax), %rcx
movl 0x14(%rsp), %eax
addq %r13, %rcx
incq %rcx
xorl %edx, %edx
movsbq (%rcx,%rdx), %rsi
movb (%rsi,%r12), %sil
movb %sil, (%rbp,%rdx)
incq %rdx
cmpq %rdx, %rax
jne 0x2355b
movl 0x14(%rsp), %eax
movq 0x150(%rsp), %r13
subl %r13d, %eax
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
movq 0x60(%rsp), %rax
addl %ecx, %eax
movq 0x1d0(%rsp), %r14
movl 0x90(%r14), %edx
cmpl %edx, %eax
cmovll %eax, %edx
cvtsi2sd %ecx, %xmm0
mulsd 0x30(%r14), %xmm0
cvttsd2si %xmm0, %eax
addl %ecx, %eax
cmpl %eax, %edx
cmovgl %edx, %eax
movq %rax, 0x58(%rsp)
cmpl $0x1, 0x78(%r14)
jle 0x236d3
movl $0x4, %edx
movq 0x30a15(%rip), %rdi     # 0x53fe8
leaq 0x21a6d(%rip), %rsi     # 0x45047
callq 0x7340
movq 0x58(%rsp), %rax
movl %eax, %esi
imull %r13d, %esi
movq 0x309f7(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r12, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
cmpl $0x7, 0x78(%r14)
jl 0x236d3
movl $0x19, %edx
movq 0x309b1(%rip), %rdi     # 0x53fe8
leaq 0x2171a(%rip), %rsi     # 0x44d58
callq 0x7340
movl 0xc(%rsp), %eax
movl %ebx, %esi
subl %eax, %esi
incl %esi
movq 0x30994(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %r12
movl $0x1, %edx
movq %rax, %rdi
leaq 0x1d7d0(%rip), %rsi     # 0x40e3b
callq 0x7340
movq 0x28(%rsp), %rsi
subq 0x38(%rsp), %rsi
incq %rsi
movq %r12, %rdi
callq 0x72a0
movq %rax, %r12
movl $0xa, %edx
movq %rax, %rdi
leaq 0x216db(%rip), %rsi     # 0x44d72
callq 0x7340
movq %r12, %rdi
movq 0x58(%rsp), %rsi
callq 0x75d0
movq %rax, %r12
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %r12, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
xorl %eax, %eax
subl 0x8(%r14), %eax
xorl %r10d, %r10d
subl 0xc(%r14), %r10d
subq $0x8, %rsp
movl 0x1c(%rsp), %edi
movq %rbp, %rsi
movl %r13d, %edx
movq 0xa0(%rsp), %rcx
movl $0x5, %r8d
movq 0x190(%rsp), %r9
pushq 0x60(%rsp)
pushq %r10
pushq %rax
callq 0x8651
addq $0x20, %rsp
addl %eax, 0x8(%rsp)
movq %rbp, %rdi
callq 0x7380
movq 0x98(%rsp), %rdi
callq 0x7380
leaq 0x78(%rsp), %r13
movq %rbx, %r14
jmp 0x2342c
movl 0xc(%rsp), %eax
notl %eax
movq 0x50(%rsp), %rsi
addl 0x8(%rsi), %eax
cmpl %eax, 0x10(%rsp)
jle 0x237d3
subq $0x8, %rsp
movq 0x50(%rsp), %rdi
leaq 0x14(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movq 0x1e8(%rsp), %r8
movq 0x1d8(%rsp), %r9
pushq 0x98(%rsp)
pushq 0x50(%rsp)
leaq 0x20(%rsp), %rax
pushq %rax
callq 0x2bf57
addq $0x20, %rsp
subq $0x8, %rsp
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
leaq 0x18(%rsp), %rdx
leaq 0x20(%rsp), %rcx
movq 0x1e0(%rsp), %r8
movq 0x1d8(%rsp), %r9
pushq 0x150(%rsp)
pushq 0x50(%rsp)
leaq 0x20(%rsp), %rax
pushq %rax
callq 0x2ba6f
addq $0x20, %rsp
jmp 0x23852
subq $0x8, %rsp
movq 0x50(%rsp), %rdi
leaq 0x18(%rsp), %rdx
leaq 0x20(%rsp), %rcx
movq 0x1e0(%rsp), %r8
movq 0x1d8(%rsp), %r9
pushq 0x150(%rsp)
pushq 0x50(%rsp)
leaq 0x20(%rsp), %rax
pushq %rax
callq 0x2ba6f
addq $0x20, %rsp
subq $0x8, %rsp
movq 0x50(%rsp), %rdi
movq 0x58(%rsp), %rsi
leaq 0x14(%rsp), %rdx
leaq 0x40(%rsp), %rcx
movq 0x1e8(%rsp), %r8
movq 0x1d8(%rsp), %r9
pushq 0x98(%rsp)
pushq 0x50(%rsp)
leaq 0x20(%rsp), %rax
pushq %rax
callq 0x2bf57
addq $0x20, %rsp
movq 0x1d0(%rsp), %rax
cmpl $0x5, 0x78(%rax)
jl 0x238b3
movl $0x25, %edx
movq 0x3077c(%rip), %rdi     # 0x53fe8
leaq 0x217e6(%rip), %rsi     # 0x45059
callq 0x7340
movq 0x18(%rsp), %rsi
movq 0x30764(%rip), %rdi     # 0x53fe8
callq 0x72a0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movl 0x8(%rsp), %ecx
movl 0x24(%rsp), %eax
cmpl %ecx, %eax
cmovlel %ecx, %eax
movl %eax, 0x24(%rsp)
movq 0x1d0(%rsp), %rax
movl 0x78(%rax), %eax
cmpl 0x70(%rsp), %ecx
jge 0x23935
cmpl $0x2, %eax
jl 0x23bcf
movl $0x6, %edx
movq 0x306fe(%rip), %rdi     # 0x53fe8
leaq 0x21797(%rip), %rsi     # 0x45088
callq 0x7340
movl 0x8(%rsp), %esi
movq 0x306e7(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
jmp 0x23b6f
cmpl $0x2, %eax
jl 0x2398c
movl $0x8, %edx
movq 0x306a2(%rip), %rdi     # 0x53fe8
leaq 0x21732(%rip), %rsi     # 0x4507f
callq 0x7340
movl 0x8(%rsp), %esi
movq 0x3068b(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0xe0(%rsp), %rax
movq 0xe8(%rsp), %rcx
subq %rax, %rcx
je 0x239fc
sarq $0x2, %rcx
movl 0x8(%rsp), %edx
movq 0x110(%rsp), %rsi
movq 0x18(%rsp), %rdi
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r8d, %r8d
xorl %r9d, %r9d
cmpl %edx, (%rax,%r8,4)
jl 0x239ea
movq (%rsi,%r8,8), %r10
subq %rdi, %r10
movq %r10, %r11
negq %r11
cmovsq %r10, %r11
cmpq 0x190(%rsp), %r11
setl %r10b
orb %r10b, %r9b
incq %r8
cmpq %r8, %rcx
jne 0x239c4
testb $0x1, %r9b
jne 0x23b6f
movl $0x100, %edi            # imm = 0x100
callq 0x72e0
movq %rax, %r15
movq %rax, %rdi
callq 0x2c490
movq %r15, 0x108(%rsp)
movq 0x18(%rsp), %rcx
movq %rcx, (%r15)
movq 0x38(%rsp), %rax
movq %rax, 0x8(%r15)
movl 0x10(%rsp), %edx
movl %edx, 0x10(%r15)
movl 0xc(%rsp), %edx
movl %edx, 0x14(%r15)
movl 0x8(%rsp), %edx
movl %edx, 0x70(%r15)
cmpb $0x0, 0x1f0(%rsp)
jne 0x23a51
orb $0x10, 0x40(%r15)
subl %ecx, %eax
incl %eax
movl %eax, 0x98(%r15)
movq 0x78(%rsp), %rbx
cmpq %r13, %rbx
je 0x23ab1
movq 0x10(%rbx), %rax
movq 0x30(%rsp), %rcx
movq (%rcx), %rcx
shlq $0x4, %rax
movq (%rcx,%rax), %rdx
movq %rdx, 0x130(%rsp)
movq 0x8(%rcx,%rax), %rax
movq %rax, 0x138(%rsp)
movq 0x108(%rsp), %rdi
movl $0xe8, %eax
addq %rax, %rdi
leaq 0x130(%rsp), %rsi
callq 0x2b8f4
movq (%rbx), %rbx
jmp 0x23a61
movq 0x1e8(%rsp), %rcx
movq 0xb8(%rcx), %rsi
cmpq 0xc0(%rcx), %rsi
je 0x23ae8
movq 0x108(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, 0xb8(%rcx)
jmp 0x23afd
leaq 0x78(%rsp), %r13
jmp 0x23c33
movq 0x180(%rsp), %rdi
leaq 0x108(%rsp), %rdx
callq 0x30830
movq 0xe8(%rsp), %rsi
cmpq 0xf0(%rsp), %rsi
je 0x23b23
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0xe8(%rsp)
jmp 0x23b35
leaq 0xe0(%rsp), %rdi
leaq 0x8(%rsp), %rdx
callq 0x30950
movq 0x118(%rsp), %rsi
cmpq 0x120(%rsp), %rsi
je 0x23b5d
movq 0x18(%rsp), %rax
movq %rax, (%rsi)
addq $0x8, %rsi
movq %rsi, 0x118(%rsp)
jmp 0x23b6f
leaq 0x110(%rsp), %rdi
leaq 0x18(%rsp), %rdx
callq 0x174cc
movq 0x1d0(%rsp), %rax
cmpl $0x5, 0x78(%rax)
jl 0x23bcf
movl $0xf, %edx
movq 0x3045f(%rip), %rdi     # 0x53fe8
leaq 0x214ff(%rip), %rsi     # 0x4508f
callq 0x7340
movl 0x8(%rsp), %esi
movq 0x30448(%rip), %rdi     # 0x53fe8
callq 0x75d0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x72b0
movsbl %al, %esi
movq %rbx, %rdi
callq 0x7040
movq %rax, %rdi
callq 0x71d0
movq 0x18(%rsp), %rax
movq 0x38(%rsp), %rcx
movl 0x10(%rsp), %edx
movl 0xc(%rsp), %esi
movq %rax, 0x130(%rsp)
movq %rcx, 0x138(%rsp)
movl %edx, 0x140(%rsp)
movl %esi, 0x144(%rsp)
movq 0xa8(%rsp), %rsi
cmpq 0xb0(%rsp), %rsi
je 0x23c47
movq 0x140(%rsp), %rax
movq %rax, 0x10(%rsi)
movupd 0x130(%rsp), %xmm0
movupd %xmm0, (%rsi)
addq $0x18, 0xa8(%rsp)
movq 0x68(%rsp), %r15
leaq -0x1(%r15), %rcx
testq %r15, %r15
jg 0x22af1
jmp 0x23c63
leaq 0xa0(%rsp), %rdi
leaq 0x130(%rsp), %rdx
callq 0x30a2c
movq 0x68(%rsp), %r15
jmp 0x23c38
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x23c80
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x23c9d
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x23cba
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x23cee
movq 0x178(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq $0x0, 0x158(%rsp)
movl $0x0, 0x160(%rsp)
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x23d0b
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x23d2a
movq (%rdi), %rbx
movl $0x18, %esi
callq 0x72f0
movq %rbx, %rdi
cmpq %r13, %rbx
jne 0x23d15
movl 0x24(%rsp), %ecx
cmpl 0x70(%rsp), %ecx
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmovgel %ecx, %eax
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
movl $0x100, %esi            # imm = 0x100
movq %r15, %rdi
callq 0x72f0
jmp 0x23d8c
jmp 0x23d89
jmp 0x23d6e
movq %rax, %r14
jmp 0x23e17
jmp 0x23d6e
jmp 0x23d89
movq %rax, %r14
jmp 0x23de3
jmp 0x23d89
movq %rax, %r14
leaq 0x78(%rsp), %r13
jmp 0x23d8c
jmp 0x23d89
jmp 0x23d89
jmp 0x23d89
jmp 0x23d89
jmp 0x23d89
movq %rax, %r14
movq 0x110(%rsp), %rdi
testq %rdi, %rdi
je 0x23da9
movq 0x120(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0xe0(%rsp), %rdi
testq %rdi, %rdi
je 0x23dc6
movq 0xf0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x23de3
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0x158(%rsp), %rdi
testq %rdi, %rdi
je 0x23e17
movq 0x178(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq $0x0, 0x158(%rsp)
movl $0x0, 0x160(%rsp)
movq 0xc0(%rsp), %rdi
testq %rdi, %rdi
je 0x23e34
movq 0xd0(%rsp), %rsi
subq %rdi, %rsi
callq 0x72f0
movq 0x78(%rsp), %rdi
cmpq %r13, %rdi
je 0x23e53
movq (%rdi), %rbx
movl $0x18, %esi
callq 0x72f0
movq %rbx, %rdi
cmpq %r13, %rbx
jne 0x23e3e
movq %r14, %rdi
callq 0x7600