// File: /workspace/github_cpp_makefile_star2_O1/fjamour[P]icentral/src/_bc_mem.cc
// Function: iCentral_iter_mem(std::vector<double, std::allocator<double>>&, component_t&, unsigned int, std::pair<unsigned int, unsigned int>, iter_info_t&)
void iCentral_iter_mem(
        vector<double>& dBC_vec,    // delta BC of vertices
        component_t&    comp,       // component could be BCC, MUC, or just a graph
        node_id_t       s,          // source of the iteration
        edge_t          e,          // inserted edge
        iter_info_t&    iter_info   //TODO to be used later?
        )
{
//    RBFS(dBC_vec, comp, s, iter_info, false, true);
//    partial_BBFS(iter_info, comp, s, e);
//    RBFS(dBC_vec, comp, s, iter_info, true, false);
//    fill(iter_info.sigma_inc_vec.begin(), iter_info.sigma_inc_vec.end(), 0);
//    fill(iter_info.visited_vec.begin(), iter_info.visited_vec.end(), false);
    
    subgraph_t& g = comp.subgraph;
    
    vector<vector<node_id_t> >&  P = iter_info.P;
    vector<int>&                 sigma_vec = iter_info.sigma_vec;
    vector<int>&                 sigma_inc_vec = iter_info.sigma_inc_vec;
    vector<int>&                 dist_map = iter_info.dist_vec;
    vector<bool>&                visited_vec = iter_info.visited_vec;
    //vector<node_id_t>&           S = iter_info.S;
    
    vector<double>&              delta_vec = iter_info.delta_vec;
    
    vector<double>&              new_delta_vec = iter_info.new_delta_vec;
    new_delta_vec = delta_vec;
    
    static vector<vector<node_id_t> >   new_P;
    fill_vec<vector<node_id_t> >(new_P, g.size(), vector<node_id_t>());
    //static vector<vector<node_id_t> >   lost_P;;
    //fill_vec<vector<node_id_t> >(lost_P, g.size(), vector<node_id_t>());
    static vector<int>                  new_sigma_vec = iter_info.new_sigma_vec;
    new_sigma_vec = sigma_vec;
    static vector<stack<node_id_t> >    level_vec;

    queue<node_id_t>             Q;
    node_id_t src, dst;
    if(dist_map[e.first] > dist_map[e.second]) {
        src = e.second;
        dst = e.first;
    } else {
        src = e.first;
        dst = e.second;
    }
    
    //S.clear();
    level_vec.resize(dist_map[dst]+1);
    
    //Compute new path counts and paths
    if(dist_map[dst] != dist_map[src]+1) {
        //lost_P[dst] = P[dst];
        new_P[dst].push_back(src);
        for(int p = 0; p < P[dst].size(); ++p){
            node_id_t parent = P[dst][p];
            new_delta_vec[parent] -= (((double) sigma_vec[parent] / sigma_vec[dst]) * (1 + delta_vec[dst]));
            if(dist_map[parent] == dist_map[src]+1) {
                level_vec[dist_map[parent]].push(parent);
            }
        }
        P[dst].clear();
        //P[dst].push_back(src);
        new_sigma_vec[dst] = new_sigma_vec[src];
    } else {
        new_P[dst].push_back(src);
        //P[dst].push_back(src);
        new_sigma_vec[dst] += new_sigma_vec[src];
    }
        
    Q.push(dst);
    dist_map[dst] = dist_map[src] + 1;
    sigma_inc_vec[dst] = sigma_vec[src];
    visited_vec[dst] = true;

    while (!Q.empty()) {
        node_id_t v = Q.front();
        if(dist_map[v] >= level_vec.size()) {
            stack<node_id_t> qq;
            level_vec.push_back(qq);
            level_vec[dist_map[v]].push(v);
        } else {
            level_vec[dist_map[v]].push(v);
        }
        Q.pop();
        vector<node_id_t> nbr_vec = g.get_nbrs(v);
        for (int nbr_idx = 0; nbr_idx < nbr_vec.size(); ++nbr_idx) {
            node_id_t w = nbr_vec[nbr_idx];
            if (dist_map[w] > (dist_map[v] + 1)) {
                dist_map[w] = dist_map[v] + 1;
                //lost_P[w] = P[w];
                new_P[w].push_back(v);
                for(int p = 0; p < P[w].size(); ++p){
                    node_id_t parent = P[w][p];
                    new_delta_vec[parent] -= (((double) sigma_vec[parent] / sigma_vec[w]) * (1 + delta_vec[w]));
                }
                P[w].clear();
                //P[w].push_back(v);
                new_sigma_vec[w] = 0;
                sigma_inc_vec[w] = sigma_inc_vec[v];
                new_sigma_vec[w] += sigma_inc_vec[w];
                if (!visited_vec[w]) {
                    visited_vec[w] = true;
                    //if(new_sigma_vec[w] != sigma_vec[w])
                        Q.push(w);
                }
            } else if (dist_map[w] == (dist_map[v] + 1)) {
                sigma_inc_vec[w] += sigma_inc_vec[v];
                new_sigma_vec[w] += sigma_inc_vec[v];
                if (find(P[w].begin(), P[w].end(), v) == P[w].end()) {
                    new_P[w].push_back(v);
                }
                if (!visited_vec[w]) {
                    visited_vec[w] = true;
                    //if(new_sigma_vec[w] != sigma_vec[w])
                        Q.push(w);
                }
            }
        }
    }
    
    fill_vec<bool>(visited_vec, g.size(), false);
    
    for(int level = level_vec.size()-1; level >= 0; --level) {
        while(!level_vec[level].empty()) {
            node_id_t w = level_vec[level].top();
            level_vec[level].pop();
            if(!visited_vec[w]) {
                visited_vec[w] = true;
                for (int idx = 0; idx < P[w].size(); ++idx) {
                    node_id_t v = P[w][idx];
                    new_delta_vec[v] -= (((double) sigma_vec[v] / sigma_vec[w]) * (1 + delta_vec[w]));
                    new_delta_vec[v] += (((double) new_sigma_vec[v] / new_sigma_vec[w]) * (1 + new_delta_vec[w]));
                    if(level > 0)
                        level_vec[level-1].push(v);
                }
                for (int idx = 0; idx < new_P[w].size(); ++idx) {
                    node_id_t v = new_P[w][idx];
                    new_delta_vec[v] += (((double) new_sigma_vec[v] / new_sigma_vec[w]) * (1 + new_delta_vec[w]));
                    if(level > 0)
                        level_vec[level-1].push(v);
                }
                //has to update P with new_P for the next edge insertions
                P[w] = new_P[w];
                if (w != s) {
                    dBC_vec[w] -= delta_vec[w]/2.0;
                    dBC_vec[w] += new_delta_vec[w]/2.0;
                }
            }
        }
    }
    
    iter_info.delta_vec = new_delta_vec;
    iter_info.sigma_vec = new_sigma_vec;
    fill(iter_info.sigma_inc_vec.begin(), iter_info.sigma_inc_vec.end(), 0);
    fill(iter_info.visited_vec.begin(), iter_info.visited_vec.end(), false);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %r8, %r13
movq %rcx, %r12
movl %edx, 0x34(%rsp)
movq %rsi, %r14
movq %rdi, 0xe0(%rsp)
leaq 0x48(%r8), %rsi
leaq 0x90(%r8), %r15
movq %r15, %rdi
movq %rsi, 0x10(%rsp)
callq 0x8b6c
movb 0x382d3(%rip), %al      # 0x40240
testb %al, %al
je 0x8a60
movq %r14, %rdi
callq 0x2ed3a
xorpd %xmm0, %xmm0
leaq 0xf0(%rsp), %rdx
movapd %xmm0, (%rdx)
movq $0x0, 0x10(%rdx)
leaq 0x3828c(%rip), %rdi     # 0x40228
movq %rax, %rsi
callq 0x8c41
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x7fc1
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movb 0x38299(%rip), %al      # 0x40260
testb %al, %al
movq %r13, 0x18(%rsp)
je 0x8a6a
movq %r12, %rbx
shrq $0x20, %rbx
leaq 0x18(%r13), %rsi
leaq 0x38262(%rip), %rdi     # 0x40248
movq %rsi, 0x28(%rsp)
callq 0x8c74
movb 0x3828a(%rip), %al      # 0x40280
testb %al, %al
je 0x8abe
xorpd %xmm0, %xmm0
leaq 0x40(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %esi, %esi
callq 0x6b50
movl %r12d, %eax
movq 0x30(%r13), %rcx
movl (%rcx,%rax,4), %eax
cmpl (%rcx,%rbx,4), %eax
movl %r12d, %eax
cmovgl %ebx, %eax
cmovgl %r12d, %ebx
movl %eax, 0xc(%rsp)
movl %ebx, 0x4(%rsp)
movslq (%rcx,%rbx,4), %rsi
incq %rsi
leaq 0x38215(%rip), %rdi     # 0x40268
callq 0x8d8c
movl 0x4(%rsp), %edx
movq 0x30(%r13), %r8
movl 0xc(%rsp), %eax
movl (%r8,%rax,4), %r9d
incl %r9d
movq 0x381b6(%rip), %rcx     # 0x40228
leaq (%rdx,%rdx,2), %rsi
leaq (%rcx,%rsi,8), %rdi
movq 0x8(%rdi), %rsi
movq 0x10(%rdi), %rcx
cmpl %r9d, (%r8,%rdx,4)
jne 0x8099
cmpq %rcx, %rsi
je 0x80aa
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x80b4
cmpq %rcx, %rsi
je 0x80ce
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x80d8
leaq 0xc(%rsp), %rdx
callq 0x6f98
movl 0xc(%rsp), %eax
movq 0x38189(%rip), %rcx     # 0x40248
movl (%rcx,%rax,4), %eax
movl 0x4(%rsp), %edx
addl %eax, (%rcx,%rdx,4)
jmp 0x81e4
leaq 0xc(%rsp), %rdx
callq 0x6f98
movl 0x4(%rsp), %eax
movq (%r13), %rsi
leaq (%rax,%rax,2), %rdi
movq (%rsi,%rdi,8), %rcx
movq 0x8(%rsi,%rdi,8), %rdx
cmpq %rcx, %rdx
je 0x81c6
xorl %ebx, %ebx
leaq 0x90(%rsp), %r12
movl (%rcx,%rbx,4), %ecx
movl %ecx, 0x90(%rsp)
movq 0x18(%r13), %rdx
movq 0x48(%r13), %rsi
xorps %xmm0, %xmm0
cvtsi2sdl (%rdx,%rcx,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdl (%rdx,%rax,4), %xmm1
divsd %xmm1, %xmm0
movsd (%rsi,%rax,8), %xmm1
addsd 0x28efd(%rip), %xmm1    # 0x31030
mulsd %xmm0, %xmm1
movq 0x90(%r13), %rax
movsd (%rax,%rcx,8), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq 0x30(%r13), %rdx
movslq (%rdx,%rcx,4), %rax
movl 0xc(%rsp), %esi
movl (%rdx,%rsi,4), %edx
incl %edx
cmpl %edx, %eax
jne 0x819b
movq 0x38100(%rip), %rdx     # 0x40268
leaq (%rax,%rax,4), %rsi
shlq $0x4, %rsi
leaq (%rdx,%rsi), %rdi
movq 0x30(%rdx,%rsi), %rax
movq 0x40(%rdx,%rsi), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rax
je 0x8193
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x30(%rdi)
jmp 0x819b
movq %r12, %rsi
callq 0x7644
incq %rbx
movl 0x4(%rsp), %eax
movq (%r13), %rsi
leaq (%rax,%rax,2), %rdi
movq (%rsi,%rdi,8), %rcx
movq 0x8(%rsi,%rdi,8), %rdx
movq %rdx, %r8
subq %rcx, %r8
sarq $0x2, %r8
cmpq %rbx, %r8
ja 0x8100
leaq (%rsi,%rdi,8), %rsi
cmpq %rcx, %rdx
je 0x81d3
movq %rcx, 0x8(%rsi)
movl 0xc(%rsp), %ecx
movq 0x3806a(%rip), %rdx     # 0x40248
movl (%rdx,%rcx,4), %ecx
movl %ecx, (%rdx,%rax,4)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0x820b
movl 0x4(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x70(%rsp)
jmp 0x821a
leaq 0x40(%rsp), %rdi
leaq 0x4(%rsp), %rsi
callq 0x7644
leaq 0xd8(%r13), %rax
movq %rax, 0x20(%rsp)
movl 0xc(%rsp), %eax
movq 0x30(%r13), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0x4(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0xc(%rsp), %eax
movq 0x18(%r13), %rcx
movq 0xc0(%r13), %rdx
movl (%rcx,%rax,4), %eax
movl 0x4(%rsp), %ecx
movl %eax, (%rdx,%rcx,4)
movl 0x4(%rsp), %ecx
movq 0xd8(%r13), %rax
movl %ecx, %edx
movl $0x1, %esi
shlq %cl, %rsi
shrl $0x6, %edx
orq %rsi, (%rax,%rdx,8)
movq 0x50(%rsp), %rax
cmpq %rax, 0x70(%rsp)
je 0x8674
leaq 0x8(%rsp), %rbp
leaq 0x90(%rsp), %rbx
movl (%rax), %eax
movl %eax, 0x8(%rsp)
movq 0x30(%r13), %rcx
movslq (%rcx,%rax,4), %rdx
movq 0x37fcf(%rip), %rsi     # 0x40270
movq 0x37fc0(%rip), %rcx     # 0x40268
subq %rcx, %rsi
sarq $0x4, %rsi
movabsq $-0x3333333333333333, %rdi # imm = 0xCCCCCCCCCCCCCCCD
imulq %rdi, %rsi
cmpq %rdx, %rsi
jbe 0x82f4
leaq (%rdx,%rdx,4), %rsi
shlq $0x4, %rsi
leaq (%rcx,%rsi), %rdi
movq 0x30(%rcx,%rsi), %rdx
movq 0x40(%rcx,%rsi), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rdx
je 0x837c
movl %eax, (%rdx)
addq $0x4, %rdx
movq %rdx, 0x30(%rdi)
jmp 0x8396
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movapd %xmm0, 0xc0(%rsp)
movapd %xmm0, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
movapd %xmm0, 0x90(%rsp)
movq %rbx, %rdi
xorl %esi, %esi
callq 0x6b50
leaq 0x37f32(%rip), %rdi     # 0x40268
movq %rbx, %rsi
callq 0x8e0a
movl 0x8(%rsp), %eax
movq 0x30(%r13), %rcx
movslq (%rcx,%rax,4), %rcx
movq 0x37f17(%rip), %rdx     # 0x40268
leaq (%rcx,%rcx,4), %rsi
shlq $0x4, %rsi
leaq (%rdx,%rsi), %rdi
movq 0x30(%rdx,%rsi), %rcx
movq 0x40(%rdx,%rsi), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0x8386
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x30(%rdi)
jmp 0x838e
movq %rbp, %rsi
callq 0x7644
jmp 0x8396
movq %rbp, %rsi
callq 0x7644
movq %rbx, %rdi
callq 0x6998
movq 0x50(%rsp), %rax
movq 0x60(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0x83af
addq $0x4, %rax
jmp 0x83e1
movq 0x58(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x68(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x68(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x58(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x60(%rsp)
movq %rax, 0x50(%rsp)
movl 0x8(%rsp), %esi
movq %r14, %rdi
callq 0x2ea64
movq %rbx, %rdi
movq %rax, %rsi
callq 0x61a0
movq 0x90(%rsp), %rdi
cmpq %rdi, 0x98(%rsp)
je 0x864f
movq %r14, %r12
xorl %r14d, %r14d
movl (%rdi,%r14,4), %eax
movl %eax, (%rsp)
movq 0x30(%r13), %rdx
movl 0x8(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jle 0x8468
movl %esi, (%rdx,%rax,4)
movl (%rsp), %eax
movq 0x37de9(%rip), %rcx     # 0x40228
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x84ed
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x84f5
jne 0x8621
movq 0xc0(%r13), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0x8(%rsp), %eax
movl (%rdx,%rax,4), %eax
movl (%rsp), %ecx
movq 0x37dbc(%rip), %rdx     # 0x40248
addl %eax, (%rdx,%rcx,4)
movl (%rsp), %eax
movq (%r13), %rcx
leaq (%rax,%rax,2), %rax
movq (%rcx,%rax,8), %rdi
movq 0x8(%rcx,%rax,8), %rsi
movq %rbp, %rdx
callq 0x7bff
movl (%rsp), %ecx
movq (%r13), %rdx
leaq (%rcx,%rcx,2), %rcx
cmpq 0x8(%rdx,%rcx,8), %rax
jne 0x85c8
movq 0x37d60(%rip), %rax     # 0x40228
leaq (%rax,%rcx,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0x85c0
movl 0x8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0x85c8
movq %rbp, %rdx
callq 0x6f98
movl (%rsp), %eax
movq (%r13), %rcx
leaq (%rax,%rax,2), %rsi
movq (%rcx,%rsi,8), %rdx
movq 0x8(%rcx,%rsi,8), %rdi
movq %rdi, %r8
subq %rdx, %r8
movsd 0x28b19(%rip), %xmm4    # 0x31030
je 0x8577
sarq $0x2, %r8
movq 0x28(%rsp), %r9
movq (%r9), %r9
cvtsi2sdl (%r9,%rax,4), %xmm0
movq 0x10(%rsp), %r10
movq (%r10), %r10
movq (%r15), %r11
cmpq $0x1, %r8
adcq $0x0, %r8
xorl %ebx, %ebx
movl (%rdx,%rbx,4), %r13d
xorps %xmm1, %xmm1
cvtsi2sdl (%r9,%r13,4), %xmm1
divsd %xmm0, %xmm1
movsd (%r10,%rax,8), %xmm2
addsd %xmm4, %xmm2
movsd (%r11,%r13,8), %xmm3
mulsd %xmm1, %xmm2
subsd %xmm2, %xmm3
movsd %xmm3, (%r11,%r13,8)
incq %rbx
cmpq %rbx, %r8
jne 0x8540
cmpq %rdx, %rdi
je 0x8584
leaq (%rcx,%rsi,8), %rcx
movq %rdx, 0x8(%rcx)
movq 0x37cbd(%rip), %rcx     # 0x40248
movl $0x0, (%rcx,%rax,4)
movl 0x8(%rsp), %eax
movq 0x18(%rsp), %r13
movq 0xc0(%r13), %rdx
movl (%rdx,%rax,4), %eax
movl (%rsp), %esi
movl %eax, (%rdx,%rsi,4)
movl (%rsp), %eax
movl (%rdx,%rax,4), %edx
addl %edx, (%rcx,%rax,4)
movl (%rsp), %ecx
movq 0xd8(%r13), %rax
jmp 0x85d3
movq %rbp, %rdx
callq 0x6f98
movl (%rsp), %ecx
movq 0x20(%rsp), %rax
movq (%rax), %rax
movl $0x1, %edx
shlq %cl, %rdx
movl %ecx, %esi
shrl $0x6, %esi
movq (%rax,%rsi,8), %rdi
btq %rcx, %rdi
jb 0x8621
orq %rdi, %rdx
movq %rdx, (%rax,%rsi,8)
movq 0x70(%rsp), %rax
movq 0x80(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rax
je 0x8614
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x70(%rsp)
jmp 0x8621
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0x7644
incq %r14
movq 0x90(%rsp), %rdi
movq 0x98(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %r14, %rax
ja 0x8419
movq %r12, %r14
leaq 0x90(%rsp), %rbx
testq %rdi, %rdi
je 0x8664
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x50(%rsp), %rax
cmpq %rax, 0x70(%rsp)
jne 0x828c
movq %r14, %rdi
callq 0x2ed3a
movq 0x20(%rsp), %rdi
movq %rax, %rsi
xorl %edx, %edx
callq 0x8e36
movq 0x37bde(%rip), %rax     # 0x40270
subq 0x37bcf(%rip), %rax     # 0x40268
sarq $0x4, %rax
movabsq $-0x3333333333333333, %rcx # imm = 0xCCCCCCCCCCCCCCCD
imulq %rcx, %rax
movl %eax, %ecx
decl %ecx
js 0x89b9
movl %ecx, %r14d
movl %eax, %eax
movq %rax, 0x38(%rsp)
movq 0x37ba2(%rip), %rdi     # 0x40268
leaq (%r14,%r14,4), %rbp
shlq $0x4, %rbp
movq 0x30(%rdi,%rbp), %rax
cmpq 0x10(%rdi,%rbp), %rax
je 0x89a4
addq %rbp, %rdi
movl $0xfffffffe, %ecx       # imm = 0xFFFFFFFE
movq 0x38(%rsp), %rdx
leal (%rdx,%rcx), %ebx
movq %rbp, 0xe8(%rsp)
cmpq 0x38(%rdi), %rax
jne 0x870c
movq 0x48(%rdi), %rax
movq -0x8(%rax), %rax
movl $0x200, %ecx            # imm = 0x200
addq %rcx, %rax
movl -0x4(%rax), %r12d
callq 0x9d14
movq 0x20(%rsp), %rax
movq (%rax), %rax
movl $0x1, %edx
movl %r12d, %ecx
shlq %cl, %rdx
movl %r12d, %ecx
shrl $0x6, %ecx
movq (%rax,%rcx,8), %rsi
btq %r12, %rsi
jb 0x8989
orq %rdx, %rsi
movq %rsi, (%rax,%rcx,8)
movq (%r13), %rcx
leaq (%r12,%r12,2), %rbp
movq (%rcx,%rbp,8), %rax
cmpq %rax, 0x8(%rcx,%rbp,8)
je 0x884f
xorl %r13d, %r13d
movl (%rax,%r13,4), %eax
movl %eax, 0x90(%rsp)
movq 0x28(%rsp), %rcx
movq (%rcx), %rcx
xorps %xmm0, %xmm0
cvtsi2sdl (%rcx,%rax,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdl (%rcx,%r12,4), %xmm1
divsd %xmm1, %xmm0
movq 0x10(%rsp), %rcx
movq (%rcx), %rcx
movsd (%rcx,%r12,8), %xmm1
movsd 0x28895(%rip), %xmm3    # 0x31030
addsd %xmm3, %xmm1
mulsd %xmm0, %xmm1
movq (%r15), %rcx
movsd (%rcx,%rax,8), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, (%rcx,%rax,8)
movq 0x37a8d(%rip), %rdx     # 0x40248
xorps %xmm1, %xmm1
cvtsi2sdl (%rdx,%rax,4), %xmm1
xorps %xmm2, %xmm2
cvtsi2sdl (%rdx,%r12,4), %xmm2
divsd %xmm2, %xmm1
movsd (%rcx,%r12,8), %xmm2
addsd %xmm3, %xmm2
mulsd %xmm1, %xmm2
addsd %xmm0, %xmm2
movsd %xmm2, (%rcx,%rax,8)
testq %r14, %r14
je 0x882b
movq 0x37a75(%rip), %rdx     # 0x40268
leaq (%rbx,%rbx,4), %rsi
shlq $0x4, %rsi
leaq (%rdx,%rsi), %rdi
movq 0x30(%rdx,%rsi), %rcx
movq 0x40(%rdx,%rsi), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0x881e
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x30(%rdi)
jmp 0x882b
leaq 0x90(%rsp), %rsi
callq 0x7644
incq %r13
movq 0x18(%rsp), %rax
movq (%rax), %rcx
movq (%rcx,%rbp,8), %rax
movq 0x8(%rcx,%rbp,8), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r13, %rcx
ja 0x875d
movq 0x379d2(%rip), %rcx     # 0x40228
movq (%rcx,%rbp,8), %rax
cmpq %rax, 0x8(%rcx,%rbp,8)
je 0x8915
xorl %r13d, %r13d
movl (%rax,%r13,4), %eax
movl %eax, 0x90(%rsp)
movq 0x379ce(%rip), %rcx     # 0x40248
xorps %xmm0, %xmm0
cvtsi2sdl (%rcx,%rax,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdl (%rcx,%r12,4), %xmm1
divsd %xmm1, %xmm0
movq (%r15), %rcx
movsd (%rcx,%r12,8), %xmm1
addsd 0x28790(%rip), %xmm1    # 0x31030
mulsd %xmm0, %xmm1
addsd (%rcx,%rax,8), %xmm1
movsd %xmm1, (%rcx,%rax,8)
testq %r14, %r14
je 0x88f2
movq 0x379ae(%rip), %rdx     # 0x40268
leaq (%rbx,%rbx,4), %rsi
shlq $0x4, %rsi
leaq (%rdx,%rsi), %rdi
movq 0x30(%rdx,%rsi), %rcx
movq 0x40(%rdx,%rsi), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0x88e5
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x30(%rdi)
jmp 0x88f2
leaq 0x90(%rsp), %rsi
callq 0x7644
incq %r13
movq 0x3792c(%rip), %rcx     # 0x40228
movq (%rcx,%rbp,8), %rax
movq 0x8(%rcx,%rbp,8), %rdx
subq %rax, %rdx
sarq $0x2, %rdx
cmpq %r13, %rdx
ja 0x8868
leaq (%rcx,%rbp,8), %rsi
shlq $0x3, %rbp
movq 0x18(%rsp), %r13
addq (%r13), %rbp
movq %rbp, %rdi
callq 0x5dd6
cmpl 0x34(%rsp), %r12d
movq 0xe8(%rsp), %rbp
je 0x8989
movq 0x10(%rsp), %rax
movq (%rax), %rax
movsd (%rax,%r12,8), %xmm0
movsd 0x286e5(%rip), %xmm2    # 0x31038
mulsd %xmm2, %xmm0
movq 0xe0(%rsp), %rax
movq (%rax), %rax
movsd (%rax,%r12,8), %xmm1
subsd %xmm0, %xmm1
movsd %xmm1, (%rax,%r12,8)
movq (%r15), %rcx
movsd (%rcx,%r12,8), %xmm0
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, (%rax,%r12,8)
movq 0x378d8(%rip), %rcx     # 0x40268
leaq (%rcx,%rbp), %rdi
movq 0x30(%rcx,%rbp), %rax
cmpq 0x10(%rcx,%rbp), %rax
jne 0x86f6
leaq -0x1(%r14), %rax
decq 0x38(%rsp)
testq %r14, %r14
movq %rax, %r14
jg 0x86bf
movq 0x10(%rsp), %rdi
movq %r15, %rsi
callq 0x8b6c
leaq 0x3787b(%rip), %rsi     # 0x40248
movq 0x28(%rsp), %rdi
callq 0x8c74
movq 0xc0(%r13), %rdi
movq 0xc8(%r13), %rdx
cmpq %rdx, %rdi
je 0x8a00
subq %rdi, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
xorl %esi, %esi
callq 0x2110
movq 0xd8(%r13), %rdi
movq 0xe8(%r13), %r14
movl 0xf0(%r13), %ebx
cmpq %r14, %rdi
je 0x8a29
movq %r14, %rdx
subq %rdi, %rdx
xorl %esi, %esi
callq 0x2110
jmp 0x8a2c
movq %rdi, %r14
testl %ebx, %ebx
je 0x8a44
negb %bl
movq $-0x1, %rax
movl %ebx, %ecx
shrq %cl, %rax
notq %rax
andq %rax, (%r14)
leaq 0x40(%rsp), %rdi
callq 0x6998
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
callq 0x24bb
jmp 0x7f75
leaq 0x377ef(%rip), %rdi     # 0x40260
callq 0x23d0
testl %eax, %eax
je 0x7fd4
leaq 0x78(%r13), %rsi
leaq 0x377bf(%rip), %rdi     # 0x40248
callq 0x7b64
leaq 0xbf(%rip), %rdi        # 0x8b54
leaq 0x377ac(%rip), %rsi     # 0x40248
leaq 0x37765(%rip), %rdx     # 0x40208
callq 0x2200
leaq 0x377b1(%rip), %rdi     # 0x40260
callq 0x2170
movq 0x18(%rsp), %r13
jmp 0x7fd4
callq 0x2507
jmp 0x7ffe
movq %rax, %rbx
leaq 0x3778e(%rip), %rdi     # 0x40260
callq 0x2160
jmp 0x8b4c
movq %rax, %rbx
movq 0xf0(%rsp), %rdi
testq %rdi, %rdi
je 0x8b4c
movq 0x100(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
jmp 0x8b4c
jmp 0x8b3f
jmp 0x8b3f
jmp 0x8b3f
jmp 0x8b3f
movq %rax, %rbx
leaq 0x90(%rsp), %rdi
callq 0x6998
jmp 0x8b42
jmp 0x8b3f
jmp 0x8b19
movq %rax, %rbx
movq 0x90(%rsp), %rdi
testq %rdi, %rdi
je 0x8b42
movq 0xa0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
jmp 0x8b42
jmp 0x8b3f
jmp 0x8b3f
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x6998
movq %rbx, %rdi
callq 0x23b0