// File: gchen98[P]macs/algorithm.cpp
// Function: GraphBuilder::invokeRecombination(GeneConversion*&)
void GraphBuilder::invokeRecombination(GeneConversionPtr & geneConversionPtr){
    double dSplitPoint=0.0;
    double dRandomSpot = pRandNumGenerator->unifRV() * dLastTreeLength;
    EdgePtr selectedXoverEdge = getRandomEdgeOnTree(dSplitPoint,dRandomSpot);
    xOverNode = NodePtr(new Node(Node::XOVER,
    selectedXoverEdge->getBottomNodeRef()->getPopulation(),dSplitPoint));
    // save old edge if gene conversion
    if (this->bBeginGeneConversion) geneConversionPtr->xOverNode = xOverNode;

    if(pConfig->bDebug){
         cerr<<"Adding xover point at "<<dSplitPoint<<
        " for edge "<<selectedXoverEdge->getBottomNodeRef()->getHeight()<<
        " to "<<selectedXoverEdge->getTopNodeRef()->getHeight()<<
        " of population "<<selectedXoverEdge->getBottomNodeRef()->getPopulation()<<endl;
    }
    EventPtr pXoverEventWrapper = EventPtr(new XoverEvent
    (Event::XOVER,dSplitPoint,xOverNode->getPopulation()));
    // insert the xover node at the selected edge
    insertNodeInEdge(xOverNode,selectedXoverEdge);

    // mark the edge above the xover.  this is the old coalescing line to prune.
    // set up a coalescing line that is visible to the
    // event building method
    NodePtr nodeAboveXover = NodePtr(new Node
    (Node::QUERY,xOverNode->getPopulation(),Node::MAX_HEIGHT));
    coalescingEdge = EdgePtr(new Edge(nodeAboveXover,xOverNode));
    nodeAboveXover->addNewEdge(Node::BOTTOM_EDGE,coalescingEdge);
    xOverNode->addNewEdge(Node::TOP_EDGE,coalescingEdge);
    // similarly, set up a line that runs straight up from the grandMRCA
    // in case migration events need to be inserted above the grandMRCA.
    NodePtr nodeAboveOrigin = NodePtr(new Node
    (Node::QUERY,grandMRCA->getPopulation(),Node::MAX_HEIGHT));
    originExtension = EdgePtr(new Edge(nodeAboveOrigin,grandMRCA));
    nodeAboveOrigin->addNewEdge(Node::BOTTOM_EDGE,originExtension);
    grandMRCA->addNewEdge(Node::TOP_EDGE,originExtension);
    // now initialize the parameters that will be sent to the event traversal routine
    EventPtr newCoalEvent;
    // Traverse the events to find the proper coalescent waiting time.
    if (pConfig->bDebug){
      cerr<<"Calling traverse events\n";
    }
    traverseEvents(true,xOverNode,newCoalEvent);
    if (pConfig->bDebug){
      cerr<<"Traverse events completed successfully\n";
    }
    dSplitPoint = newCoalEvent->getTime();
    bool bNewOrigin = false;
    EdgePtr selectedCoalEdge;
    if (dSplitPoint<this->grandMRCA->getHeight()){
        if(pConfig->bDebug) cerr<<"Coalescing at height "<<dSplitPoint<<endl;
        try{
            selectedCoalEdge = getRandomEdgeToCoalesce(
            coalescingEdge,dSplitPoint);
        }catch(unsigned int numEdges){
            printDataStructures();
            throw
             "Didn't find an edge to coalesce with, exiting\n";
        }
    }else{
        bNewOrigin = true;
    }
    NodePtr coalNode;
    // save the previous grand MRCA
    NodePtr oldGrandMRCA = grandMRCA;
    // discard the grandMRCA extending edge above the grandMRCA
    grandMRCA = originExtension->getBottomNodeRef();
    grandMRCA->clearTopEdges();
    if (bNewOrigin){
        coalNode = NodePtr(new Node(Node::COAL,
        grandMRCA->getPopulation(),dSplitPoint));
        if(pConfig->bDebug) cerr<<"Creating new grand ancestor at "<<
        coalNode->getHeight()<<endl;
        #ifdef DIAG
        if (grandMRCA->getPopulation()!=coalNode->getPopulation()){
            throw "Old grandMRCA and new grandMRCA don't match in pop\n";
        }
        #endif
        EdgePtr shortEdge = EdgePtr(new Edge(coalNode,grandMRCA));
        shortEdge->iGraphIteration=iGraphIteration;
        addEdge(shortEdge);
        grandMRCA->addNewEdge(Node::TOP_EDGE,shortEdge);
        grandMRCA = coalNode;
        grandMRCA->addNewEdge(Node::BOTTOM_EDGE,shortEdge);
    }else{
        coalNode = NodePtr(new Node(
        Node::COAL,coalescingEdge->getBottomNodeRef()->getPopulation(),
        dSplitPoint));
        insertNodeInEdge(coalNode,selectedCoalEdge);
    }
    // set the variable proposed grandMRCA so that marking current tree can reach at least this
    // height
    localMRCA = coalNode;
    coalNode->setEvent(newCoalEvent);
    EdgePtr coalEdgeCopy = coalescingEdge;
    coalescingEdge = EdgePtr(new Edge(coalNode,coalescingEdge->getBottomNodeRef()));
    coalescingEdge->iGraphIteration = coalEdgeCopy->iGraphIteration;
    coalescingEdge->getBottomNodeRef()->replaceOldWithNewEdge(Node::TOP_EDGE,
    coalEdgeCopy,coalescingEdge);
    coalescingEdge->getTopNodeRef()->addNewEdge(Node::BOTTOM_EDGE,
    coalescingEdge);
    addEdge(coalescingEdge);
    coalescingEdge->iGraphIteration=iGraphIteration;
    EdgePtr edgeBelowXover = xOverNode->getBottomEdgeByIndex(0);
    markEdgesBelow(edgeBelowXover);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x2f0, %rsp            # imm = 0x2F0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x128(%rbp)
movq $0x0, -0x18(%rbp)
movq (%rax), %rdi
callq 0x1e170
movq -0x128(%rbp), %rsi
movsd 0x30(%rsi), %xmm1
mulsd %xmm1, %xmm0
movsd %xmm0, -0x20(%rbp)
movsd -0x20(%rbp), %xmm0
leaq -0x30(%rbp), %rdi
leaq -0x18(%rbp), %rdx
callq 0x14e50
movl $0x78, %edi
callq 0x42c0
movq %rax, -0x120(%rbp)
jmp 0x15eb8
leaq -0x30(%rbp), %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x130(%rbp)
jmp 0x15ed2
movq -0x130(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x132(%rbp)
jmp 0x15eef
movq -0x120(%rbp), %rdi
movw -0x132(%rbp), %ax
movsd -0x18(%rbp), %xmm0
movswl %ax, %edx
movl $0x1, %esi
callq 0x279f0
jmp 0x15f11
movq -0x120(%rbp), %rsi
leaq -0x38(%rbp), %rdi
movl $0x1, %edx
callq 0x1e520
jmp 0x15f28
movq -0x128(%rbp), %rdi
addq $0x48, %rdi
leaq -0x38(%rbp), %rsi
callq 0x1e570
leaq -0x38(%rbp), %rdi
callq 0x1e420
movq -0x128(%rbp), %rax
testb $0x1, 0xf8(%rax)
je 0x15fa7
movq -0x128(%rbp), %rsi
addq $0x48, %rsi
movq -0x10(%rbp), %rax
movq (%rax), %rdi
addq $0x10, %rdi
callq 0x1e300
jmp 0x15f72
jmp 0x15fa7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16eaa
movq -0x120(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x78, %esi
callq 0x42d0
jmp 0x16eaa
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x48(%rax)
je 0x1615d
movq 0x3302d(%rip), %rdi     # 0x48ff0
leaq 0x1ddbe(%rip), %rsi     # 0x33d88
callq 0x42b0
movq %rax, -0x140(%rbp)
jmp 0x15fd8
movq -0x140(%rbp), %rdi
movsd -0x18(%rbp), %xmm0
callq 0x4550
movq %rax, -0x148(%rbp)
jmp 0x15ff2
movq -0x148(%rbp), %rdi
leaq 0x1dd9f(%rip), %rsi     # 0x33d9f
callq 0x42b0
movq %rax, -0x150(%rbp)
jmp 0x1600e
leaq -0x30(%rbp), %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x158(%rbp)
jmp 0x16028
movq -0x158(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1df20
movsd %xmm0, -0x160(%rbp)
jmp 0x16046
movsd -0x160(%rbp), %xmm0
movq -0x150(%rbp), %rdi
callq 0x4550
movq %rax, -0x168(%rbp)
jmp 0x16063
movq -0x168(%rbp), %rdi
leaq 0x1d0f8(%rip), %rsi     # 0x33169
callq 0x42b0
movq %rax, -0x170(%rbp)
jmp 0x1607f
leaq -0x30(%rbp), %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1e1e0
movq %rax, -0x178(%rbp)
jmp 0x16099
movq -0x178(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1df20
movsd %xmm0, -0x180(%rbp)
jmp 0x160b7
movsd -0x180(%rbp), %xmm0
movq -0x170(%rbp), %rdi
callq 0x4550
movq %rax, -0x188(%rbp)
jmp 0x160d4
movq -0x188(%rbp), %rdi
leaq 0x1dcc8(%rip), %rsi     # 0x33daa
callq 0x42b0
movq %rax, -0x190(%rbp)
jmp 0x160f0
leaq -0x30(%rbp), %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x198(%rbp)
jmp 0x1610a
movq -0x198(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x19a(%rbp)
jmp 0x16127
movq -0x190(%rbp), %rdi
movw -0x19a(%rbp), %ax
movswl %ax, %esi
callq 0x4290
movq %rax, -0x1a8(%rbp)
jmp 0x16146
movq -0x1a8(%rbp), %rdi
movq 0x32e5c(%rip), %rsi     # 0x48fb0
callq 0x4300
jmp 0x1615b
jmp 0x1615d
movl $0x28, %edi
callq 0x42c0
movq %rax, -0x1b0(%rbp)
jmp 0x16170
movq -0x128(%rbp), %rdi
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x1c0(%rbp)
addq $0x48, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x1b2(%rbp)
jmp 0x1619e
movsd -0x1c0(%rbp), %xmm0
movq -0x1b0(%rbp), %rdi
movw -0x1b2(%rbp), %ax
movswl %ax, %edx
movl $0x5, %esi
callq 0x27f50
jmp 0x161c3
movq -0x1b0(%rbp), %rsi
leaq -0x50(%rbp), %rdi
movl $0x1, %edx
callq 0xc0b0
jmp 0x161da
movq -0x128(%rbp), %rdi
movq %rdi, %rsi
addq $0x48, %rsi
leaq -0x30(%rbp), %rdx
callq 0x2a460
jmp 0x161f3
movl $0x78, %edi
callq 0x42c0
movq %rax, -0x1c8(%rbp)
jmp 0x16206
movq -0x128(%rbp), %rdi
addq $0x48, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x1ca(%rbp)
jmp 0x16227
movq -0x1c8(%rbp), %rdi
movw -0x1ca(%rbp), %ax
leaq 0x1bf4c(%rip), %rcx     # 0x32188
movsd (%rcx), %xmm0
movswl %ax, %edx
movl $0x4, %esi
callq 0x279f0
jmp 0x1624f
movq -0x1c8(%rbp), %rsi
leaq -0x58(%rbp), %rdi
movl $0x1, %edx
callq 0x1e520
jmp 0x16266
movl $0x30, %edi
callq 0x42c0
movq %rax, -0x1d8(%rbp)
jmp 0x16279
movq -0x1d8(%rbp), %rdi
movq -0x128(%rbp), %rdx
addq $0x48, %rdx
leaq -0x58(%rbp), %rsi
callq 0x27460
jmp 0x16296
movq -0x1d8(%rbp), %rsi
leaq -0x68(%rbp), %rdi
callq 0x1e5c0
jmp 0x162a8
movq -0x128(%rbp), %rdi
addq $0x78, %rdi
movq %rdi, -0x1e0(%rbp)
leaq -0x68(%rbp), %rsi
movq %rsi, -0x1e8(%rbp)
callq 0x1e630
movq -0x1e8(%rbp), %rdi
callq 0x1e090
leaq -0x58(%rbp), %rdi
callq 0x1ded0
movq -0x1e0(%rbp), %rdx
movq %rax, %rdi
movl $0x1, %esi
callq 0x276f0
jmp 0x162f5
movq -0x128(%rbp), %rdi
addq $0x48, %rdi
callq 0x1ded0
movq -0x128(%rbp), %rdx
movq %rax, %rdi
addq $0x78, %rdx
xorl %esi, %esi
callq 0x276f0
jmp 0x1631c
movl $0x78, %edi
callq 0x42c0
movq %rax, -0x1f0(%rbp)
jmp 0x1632f
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x1f2(%rbp)
jmp 0x16350
movq -0x1f0(%rbp), %rdi
movw -0x1f2(%rbp), %ax
leaq 0x1be23(%rip), %rcx     # 0x32188
movsd (%rcx), %xmm0
movswl %ax, %edx
movl $0x4, %esi
callq 0x279f0
jmp 0x16378
movq -0x1f0(%rbp), %rsi
leaq -0x70(%rbp), %rdi
movl $0x1, %edx
callq 0x1e520
jmp 0x1638f
movl $0x30, %edi
callq 0x42c0
movq %rax, -0x200(%rbp)
jmp 0x163a2
movq -0x200(%rbp), %rdi
movq -0x128(%rbp), %rdx
addq $0x38, %rdx
leaq -0x70(%rbp), %rsi
callq 0x27460
jmp 0x163bf
movq -0x200(%rbp), %rsi
leaq -0x80(%rbp), %rdi
callq 0x1e5c0
jmp 0x163d1
movq -0x128(%rbp), %rdi
addq $0x88, %rdi
movq %rdi, -0x208(%rbp)
leaq -0x80(%rbp), %rsi
movq %rsi, -0x210(%rbp)
callq 0x1e630
movq -0x210(%rbp), %rdi
callq 0x1e090
leaq -0x70(%rbp), %rdi
callq 0x1ded0
movq -0x208(%rbp), %rdx
movq %rax, %rdi
movl $0x1, %esi
callq 0x276f0
jmp 0x16421
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq -0x128(%rbp), %rdx
movq %rax, %rdi
addq $0x88, %rdx
xorl %esi, %esi
callq 0x276f0
jmp 0x1644b
leaq -0x88(%rbp), %rdi
callq 0xbde0
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x48(%rax)
je 0x16574
movq 0x32b7d(%rip), %rdi     # 0x48ff0
leaq 0x1d940(%rip), %rsi     # 0x33dba
callq 0x42b0
jmp 0x16481
jmp 0x16574
movq -0x1b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x28, %esi
callq 0x42d0
jmp 0x16eaa
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16ea1
movq -0x1c8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x78, %esi
callq 0x42d0
jmp 0x16ea1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e98
movq -0x1d8(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x30, %esi
callq 0x42d0
jmp 0x16e98
movq -0x1f0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x78, %esi
callq 0x42d0
jmp 0x16e98
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e8f
movq -0x200(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x30, %esi
callq 0x42d0
jmp 0x16e8f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e83
movq -0x128(%rbp), %rdi
movq %rdi, %rdx
addq $0x48, %rdx
movl $0x1, %esi
leaq -0x88(%rbp), %rcx
callq 0x16ec0
jmp 0x16595
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x48(%rax)
je 0x165bd
movq 0x32a43(%rip), %rdi     # 0x48ff0
leaq 0x1d81f(%rip), %rsi     # 0x33dd3
callq 0x42b0
jmp 0x165bb
jmp 0x165bd
leaq -0x88(%rbp), %rdi
callq 0x12c00
movq %rax, %rdi
callq 0x12c50
movsd %xmm0, -0x218(%rbp)
jmp 0x165db
movsd -0x218(%rbp), %xmm0
movsd %xmm0, -0x18(%rbp)
movb $0x0, -0x89(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0x1dfb0
movq -0x128(%rbp), %rdi
movsd -0x18(%rbp), %xmm0
movsd %xmm0, -0x228(%rbp)
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1df20
movsd %xmm0, -0x220(%rbp)
jmp 0x1662a
movsd -0x220(%rbp), %xmm0
movsd -0x228(%rbp), %xmm1
ucomisd %xmm1, %xmm0
jbe 0x16774
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x48(%rax)
je 0x166b3
movq 0x32994(%rip), %rdi     # 0x48ff0
leaq 0x1d798(%rip), %rsi     # 0x33dfb
callq 0x42b0
movq %rax, -0x230(%rbp)
jmp 0x16671
movq -0x230(%rbp), %rdi
movsd -0x18(%rbp), %xmm0
callq 0x4550
movq %rax, -0x238(%rbp)
jmp 0x1668b
movq -0x238(%rbp), %rdi
movq 0x32917(%rip), %rsi     # 0x48fb0
callq 0x4300
jmp 0x166a0
jmp 0x166b3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e77
movq -0x128(%rbp), %rsi
movq %rsi, %rdx
addq $0x78, %rdx
movsd -0x18(%rbp), %xmm0
leaq -0xb0(%rbp), %rdi
callq 0x150e0
jmp 0x166d4
leaq -0xa0(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x1e630
leaq -0xb0(%rbp), %rdi
callq 0x1e090
jmp 0x16772
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl -0x44(%rbp), %eax
movl $0x1, %ecx
cmpl %ecx, %eax
jne 0x16e77
movq -0x40(%rbp), %rdi
callq 0x40e0
movq -0x128(%rbp), %rdi
movl (%rax), %eax
movl %eax, -0xb4(%rbp)
callq 0x29490
jmp 0x16730
movl $0x8, %edi
callq 0x4130
movq %rax, %rdi
leaq 0x1d6cd(%rip), %rax     # 0x33e11
movq %rax, (%rdi)
movq 0x3286a(%rip), %rsi     # 0x48fb8
xorl %eax, %eax
movl %eax, %edx
callq 0x44c0
jmp 0x16ebc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
callq 0x4490
jmp 0x16e77
jmp 0x1677b
movb $0x1, -0x89(%rbp)
leaq -0xc0(%rbp), %rdi
callq 0x1e680
movq -0x128(%rbp), %rsi
addq $0x38, %rsi
leaq -0xc8(%rbp), %rdi
callq 0x1e2c0
jmp 0x167a0
movq -0x128(%rbp), %rdi
addq $0x88, %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x240(%rbp)
jmp 0x167c4
movq -0x240(%rbp), %rsi
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1e300
jmp 0x167dd
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e460
jmp 0x167f7
testb $0x1, -0x89(%rbp)
je 0x16a95
movl $0x78, %edi
callq 0x42c0
movq %rax, -0x248(%rbp)
jmp 0x16817
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x24a(%rbp)
jmp 0x16838
movq -0x248(%rbp), %rdi
movw -0x24a(%rbp), %ax
movsd -0x18(%rbp), %xmm0
movswl %ax, %edx
xorl %esi, %esi
callq 0x279f0
jmp 0x16857
movq -0x248(%rbp), %rsi
leaq -0xd0(%rbp), %rdi
movl $0x1, %edx
callq 0x1e520
jmp 0x16871
leaq -0xc0(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x1e570
leaq -0xd0(%rbp), %rdi
callq 0x1e420
movq -0x128(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x48(%rax)
je 0x16957
movq 0x32744(%rip), %rdi     # 0x48ff0
leaq 0x1d58d(%rip), %rsi     # 0x33e40
callq 0x42b0
movq %rax, -0x258(%rbp)
jmp 0x168c1
leaq -0xc0(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1df20
movsd %xmm0, -0x260(%rbp)
jmp 0x168df
movsd -0x260(%rbp), %xmm0
movq -0x258(%rbp), %rdi
callq 0x4550
movq %rax, -0x268(%rbp)
jmp 0x168fc
movq -0x268(%rbp), %rdi
movq 0x326a6(%rip), %rsi     # 0x48fb0
callq 0x4300
jmp 0x16911
jmp 0x16957
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e6b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e5f
movq -0x248(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x78, %esi
callq 0x42d0
jmp 0x16e5f
movl $0x30, %edi
callq 0x42c0
movq %rax, -0x270(%rbp)
jmp 0x1696a
movq -0x270(%rbp), %rdi
movq -0x128(%rbp), %rdx
addq $0x38, %rdx
leaq -0xc0(%rbp), %rsi
callq 0x27460
jmp 0x1698a
movq -0x270(%rbp), %rsi
leaq -0xe0(%rbp), %rdi
callq 0x1e5c0
jmp 0x1699f
movq -0x128(%rbp), %rax
movl 0xd0(%rax), %eax
movl %eax, -0x27c(%rbp)
leaq -0xe0(%rbp), %rdi
movq %rdi, -0x278(%rbp)
callq 0x1de60
movl -0x27c(%rbp), %ecx
movq -0x128(%rbp), %rdi
movq -0x278(%rbp), %rsi
movl %ecx, 0x14(%rax)
callq 0x29f50
jmp 0x169e3
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
xorl %esi, %esi
leaq -0xe0(%rbp), %rdx
callq 0x276f0
jmp 0x16a06
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x1e300
jmp 0x16a1f
movq -0x128(%rbp), %rdi
addq $0x38, %rdi
callq 0x1ded0
movq %rax, %rdi
movl $0x1, %esi
leaq -0xe0(%rbp), %rdx
callq 0x276f0
jmp 0x16a45
leaq -0xe0(%rbp), %rdi
callq 0x1e090
jmp 0x16b8c
movq -0x270(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x30, %esi
callq 0x42d0
jmp 0x16e5f
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x1e090
jmp 0x16e5f
movl $0x78, %edi
callq 0x42c0
movq %rax, -0x288(%rbp)
jmp 0x16aa8
movq -0x128(%rbp), %rdi
addq $0x78, %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x290(%rbp)
jmp 0x16ac9
movq -0x290(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
callq 0x1e0b0
movw %ax, -0x292(%rbp)
jmp 0x16ae6
movq -0x288(%rbp), %rdi
movw -0x292(%rbp), %ax
movsd -0x18(%rbp), %xmm0
movswl %ax, %edx
xorl %esi, %esi
callq 0x279f0
jmp 0x16b05
movq -0x288(%rbp), %rsi
leaq -0xe8(%rbp), %rdi
movl $0x1, %edx
callq 0x1e520
jmp 0x16b1f
leaq -0xc0(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
leaq -0xe8(%rbp), %rsi
movq %rsi, -0x2a8(%rbp)
callq 0x1e570
movq -0x2a8(%rbp), %rdi
callq 0x1e420
movq -0x128(%rbp), %rdi
movq -0x2a0(%rbp), %rsi
leaq -0xa0(%rbp), %rdx
callq 0x2a460
jmp 0x16b68
jmp 0x16b8c
movq -0x288(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x78, %esi
callq 0x42d0
jmp 0x16e5f
movq -0x128(%rbp), %rdi
addq $0x40, %rdi
leaq -0xc0(%rbp), %rsi
callq 0x1e300
jmp 0x16ba5
leaq -0xc0(%rbp), %rdi
callq 0x1ded0
movq %rax, %rdi
leaq -0x88(%rbp), %rsi
callq 0x1e6a0
jmp 0x16bc2
movq -0x128(%rbp), %rsi
addq $0x78, %rsi
leaq -0xf8(%rbp), %rdi
callq 0x1df40
movl $0x30, %edi
callq 0x42c0
movq %rax, -0x2b0(%rbp)
jmp 0x16bec
movq -0x128(%rbp), %rdi
addq $0x78, %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x2b8(%rbp)
jmp 0x16c0d
movq -0x2b8(%rbp), %rdx
movq -0x2b0(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x27460
jmp 0x16c29
movq -0x2b0(%rbp), %rsi
leaq -0x108(%rbp), %rdi
callq 0x1e5c0
jmp 0x16c3e
movq -0x128(%rbp), %rdi
addq $0x78, %rdi
movq %rdi, -0x2c8(%rbp)
leaq -0x108(%rbp), %rsi
movq %rsi, -0x2d8(%rbp)
callq 0x1e630
movq -0x2d8(%rbp), %rdi
callq 0x1e090
leaq -0xf8(%rbp), %rdi
callq 0x1de60
movq -0x2c8(%rbp), %rdi
movl 0x14(%rax), %eax
movl %eax, -0x2cc(%rbp)
callq 0x1de60
movl -0x2cc(%rbp), %ecx
movq -0x2c8(%rbp), %rdi
movl %ecx, 0x14(%rax)
callq 0x1de60
movq %rax, %rdi
callq 0x1deb0
movq %rax, -0x2c0(%rbp)
jmp 0x16cb6
movq -0x2c0(%rbp), %rdi
callq 0x1ded0
movq -0x128(%rbp), %rcx
movq %rax, %rdi
addq $0x78, %rcx
xorl %esi, %esi
leaq -0xf8(%rbp), %rdx
callq 0x277b0
jmp 0x16ce0
movq -0x128(%rbp), %rdi
addq $0x78, %rdi
callq 0x1de60
movq %rax, %rdi
callq 0x1e1e0
movq %rax, -0x2e0(%rbp)
jmp 0x16d01
movq -0x2e0(%rbp), %rdi
callq 0x1ded0
movq -0x128(%rbp), %rdx
movq %rax, %rdi
addq $0x78, %rdx
movl $0x1, %esi
callq 0x276f0
jmp 0x16d27
movq -0x128(%rbp), %rdi
movq %rdi, %rsi
addq $0x78, %rsi
callq 0x29f50
jmp 0x16d3c
movq -0x128(%rbp), %rdi
movl 0xd0(%rdi), %eax
movl %eax, -0x2e4(%rbp)
addq $0x78, %rdi
callq 0x1de60
movl -0x2e4(%rbp), %ecx
movq -0x128(%rbp), %rdi
movl %ecx, 0x14(%rax)
addq $0x48, %rdi
callq 0x1ded0
movq %rax, %rsi
leaq -0x118(%rbp), %rdi
xorl %edx, %edx
callq 0x1e260
jmp 0x16d84
movq -0x128(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x15a30
jmp 0x16d99
leaq -0x118(%rbp), %rdi
callq 0x1e090
leaq -0xf8(%rbp), %rdi
callq 0x1e090
leaq -0xc8(%rbp), %rdi
callq 0x1e420
leaq -0xc0(%rbp), %rdi
callq 0x1e420
leaq -0xa0(%rbp), %rdi
callq 0x1e090
leaq -0x88(%rbp), %rdi
callq 0xc150
leaq -0x70(%rbp), %rdi
callq 0x1e420
leaq -0x58(%rbp), %rdi
callq 0x1e420
leaq -0x50(%rbp), %rdi
callq 0xc150
leaq -0x30(%rbp), %rdi
callq 0x1e090
addq $0x2f0, %rsp            # imm = 0x2F0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x16e53
movq -0x2b0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
movl $0x30, %esi
callq 0x42d0
jmp 0x16e53
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x118(%rbp), %rdi
callq 0x1e090
leaq -0xf8(%rbp), %rdi
callq 0x1e090
leaq -0xc8(%rbp), %rdi
callq 0x1e420
leaq -0xc0(%rbp), %rdi
callq 0x1e420
leaq -0xa0(%rbp), %rdi
callq 0x1e090
leaq -0x88(%rbp), %rdi
callq 0xc150
leaq -0x70(%rbp), %rdi
callq 0x1e420
leaq -0x58(%rbp), %rdi
callq 0x1e420
leaq -0x50(%rbp), %rdi
callq 0xc150
leaq -0x30(%rbp), %rdi
callq 0x1e090
movq -0x40(%rbp), %rdi
callq 0x44e0
nopl (%rax)