// File: /workspace/github_cpp_makefile_star2_O1/fjamour[P]icentral/src/bc.cc
// Function: brandes_delta_iter(graph_t&, unsigned int, unsigned int, unsigned int, int, int, std::vector<double, std::allocator<double>>&)
void brandes_delta_iter(graph_t& graph_in,
        node_id_t s,
        node_id_t src,
        node_id_t dst,
        int d_src,
        int d_dst,
        vector<double>& bc_vec)
{
    //make sure that @src is the closer to source node
    if(d_src > d_dst) {
        node_id_t       tmp_v;
        int             tmp_i;
        tmp_v = src; src = dst; dst = tmp_v;
        tmp_i = d_src; d_src = d_dst; d_dst = tmp_i;
        
    }
    
    //case 1: d_dst - d_src = 1 (the sort of easier case)
    if(d_dst - d_src == 1) {//if(d_dst - d_src == 1) {
        stack<node_id_t> S;
        vector<vector<node_id_t> > P;
        vector<int> old_path_cnt_vec;
        vector<int> new_path_cnt_vec; //NEW
        vector<int> dist_vec;
        queue<node_id_t> Q;
        vector<double> old_pair_dep_vec;
        vector<double> new_pair_dep_vec;//NEW

        P.resize(graph_in.size());
        new_path_cnt_vec.resize(graph_in.size());
        old_path_cnt_vec.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        fill(old_path_cnt_vec.begin(), old_path_cnt_vec.end(), 0);
        fill(new_path_cnt_vec.begin(), new_path_cnt_vec.end(), 0);
        fill(dist_vec.begin(), dist_vec.end(), -1);
        old_path_cnt_vec[s] = 1;
        new_path_cnt_vec[s] = 1;
        dist_vec[s] = 0;
        old_pair_dep_vec.resize(graph_in.size());
        new_pair_dep_vec.resize(graph_in.size());
        fill(old_pair_dep_vec.begin(), old_pair_dep_vec.end(), 0.0);
        fill(new_pair_dep_vec.begin(), new_pair_dep_vec.end(), 0.0);

        Q.push(s);

        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            S.push(v);
            if(v == dst) {//NEW
                new_path_cnt_vec[v] += old_path_cnt_vec[src];
            }
            vector<node_id_t> nbr_vec = graph_in.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_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    old_path_cnt_vec[w] += old_path_cnt_vec[v];
                    new_path_cnt_vec[w] += new_path_cnt_vec[v];//NEW
                    P[w].push_back(v);
                }
            }
        }

        while (!S.empty()) {
            node_id_t w = S.top();
            S.pop();
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                old_pair_dep_vec[v] += (((double) old_path_cnt_vec[v] / old_path_cnt_vec[w]) * (1 + old_pair_dep_vec[w]));
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            //IMP: this is the only change that happens to P, @src should be added as parent for dst
            if(w == dst) {
                node_id_t v = src;
                new_pair_dep_vec[v] += (((double) new_path_cnt_vec[v] / new_path_cnt_vec[w]) * (1 + new_pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += (new_pair_dep_vec[w] - old_pair_dep_vec[w])/2.0;
                //bc_vec[w] += (0 - old_pair_dep_vec[w])/2.0;
            }
        }
    } else {
        vector<vector<node_id_t> > P;
        vector<int> path_cnt_vec;
        vector<int> path_cnt_inc_vec;
        vector<int> dist_vec;
        vector<double> pair_dep_vec;
        vector<bool>& visited_vec = graph_in.tmp_bool_vec;
        queue<node_id_t> Q;
        vector<node_id_t> S;
        
        P.resize(graph_in.size());
        dist_vec.resize(graph_in.size());
        path_cnt_vec.resize(graph_in.size());
        pair_dep_vec.resize(graph_in.size());
        path_cnt_inc_vec.resize(graph_in.size());
        
        fill(path_cnt_vec.begin(), path_cnt_vec.end(), 0);
        path_cnt_vec[s] = 1;
        fill(dist_vec.begin(), dist_vec.end(), -1);
        dist_vec[s] = 0;
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        fill(path_cnt_inc_vec.begin(), path_cnt_inc_vec.end(), 0);
        
        Q.push(s);
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            S.push_back(v);
            vector<node_id_t> nbr_vec = graph_in.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_vec[w] < 0) {
                    Q.push(w);
                    dist_vec[w] = dist_vec[v] + 1;
                }
                if (dist_vec[w] == dist_vec[v] + 1) {
                    path_cnt_vec[w] += path_cnt_vec[v];
                    P[w].push_back(v);
                }
            }
        }

        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] -= pair_dep_vec[w]/2.0;
            }
        }

        //vector<int> old_dist_vec = dist_vec;    
        Q.push(dst);
        dist_vec[dst] = dist_vec[src] + 1;
        P[dst].clear();
        P[dst].push_back(src);
        path_cnt_inc_vec[dst] = path_cnt_vec[src];
        path_cnt_vec[dst] = path_cnt_inc_vec[dst];
        //tr1::unordered_set<node_id_t> visited_set;
        
        //visited_vec.resize(graph_in.size());
        fill(visited_vec.begin(), visited_vec.end(), false);
        visited_vec[dst] = true;
        //visited_set.insert(dst);
        
        while (!Q.empty()) {
            node_id_t v = Q.front();
            Q.pop();
            //S.push(v);
            vector<node_id_t> nbr_vec = graph_in.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_vec[w] > (dist_vec[v] + 1)) {
                    dist_vec[w] = dist_vec[v] + 1;
                    P[w].clear();
                    P[w].push_back(v);
                    path_cnt_vec[w] = 0;
                    path_cnt_inc_vec[w] = path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[w];
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                } else if (dist_vec[w] == (dist_vec[v] + 1)) {
                    path_cnt_inc_vec[w] += path_cnt_inc_vec[v];
                    path_cnt_vec[w] += path_cnt_inc_vec[v];
                    //if(old_dist_vec[w] == old_dist_vec[v] || v == dst) {
                    if(find(P[w].begin(), P[w].end(), v) == P[w].end()) {
                        P[w].push_back(v);
                    } 
//                    if(!visited_vec[w]) {
//                        visited_vec[w] = true;
//                        Q.push(w);
//                    }
                }
                if(!visited_vec[w]) {
                    visited_vec[w] = true;
                    Q.push(w);
                }
            }
        }
        
        
        //IMP::THIS CAN BE MADE MUCH BETTER!
        //HEAP FOR EXAMPLE
        //EVEN THE SWAPPING CAN BE DONE MORE EFFICIENTLY
        for(int i = 1; i < S.size(); ++i) {
            if(dist_vec[S[i-1]] > dist_vec[S[i]]) {
                int j = i;
                while(dist_vec[S[j-1]] > dist_vec[S[j]]) {
                    node_id_t tmp = S[j-1];
                    S[j-1] = S[j];
                    S[j] = tmp;
                    --j;
                }
            }
        }
        
        fill(pair_dep_vec.begin(), pair_dep_vec.end(), 0.0);
        for(int i = S.size()-1; i >= 0; --i) {
            node_id_t w = S[i];
            for (int idx = 0; idx < P[w].size(); ++idx) {
                node_id_t v = P[w][idx];
                pair_dep_vec[v] += (((double) path_cnt_vec[v] / path_cnt_vec[w]) * (1 + pair_dep_vec[w]));
            }
            if (w != s) {
                bc_vec[w] += pair_dep_vec[w]/2.0;
            }
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x198, %rsp            # imm = 0x198
movq %rdi, %rbx
movl %esi, 0x10(%rsp)
movl %edx, 0x18(%rsp)
movl %ecx, 0x14(%rsp)
cmpl %r9d, %r8d
jle 0xbad2
movl %ecx, 0x18(%rsp)
movl %edx, 0x14(%rsp)
movl %r8d, %eax
jmp 0xbad8
movl %r9d, %eax
movl %r8d, %r9d
subl %r9d, %eax
xorpd %xmm0, %xmm0
cmpl $0x1, %eax
jne 0xbd44
leaq 0xf0(%rsp), %rdi
movapd %xmm0, 0x40(%rdi)
movapd %xmm0, 0x30(%rdi)
movapd %xmm0, 0x20(%rdi)
movapd %xmm0, 0x10(%rdi)
movapd %xmm0, (%rdi)
xorl %r14d, %r14d
xorl %esi, %esi
callq 0x6b50
movq %r14, 0xe0(%rsp)
xorpd %xmm0, %xmm0
movapd %xmm0, 0xd0(%rsp)
movq %r14, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
movq %r14, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %r14, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
leaq 0x140(%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
xorpd %xmm0, %xmm0
movapd %xmm0, 0x60(%rsp)
xorl %eax, %eax
movq %rax, 0x70(%rsp)
movq %rax, 0x30(%rsp)
movapd %xmm0, 0x20(%rsp)
movq %rbx, %rdi
callq 0x1e160
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0x5eac
movq %rbx, %rdi
callq 0x1e160
leaq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq %rbx, %rdi
callq 0x1e160
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq %rbx, %rdi
callq 0x1e160
leaq 0x80(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq 0xa0(%rsp), %r14
movq 0xa8(%rsp), %rdx
cmpq %rdx, %r14
je 0xbc22
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
movq 0x40(%rsp), %r15
movq 0x48(%rsp), %rdx
cmpq %rdx, %r15
je 0xbc4a
subq %r15, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r15, %rdi
xorl %esi, %esi
callq 0x2110
movq 0x80(%rsp), %r12
movq 0x88(%rsp), %rdx
cmpq %rdx, %r12
je 0xbc7b
subq %r12, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r12, %rdi
movl $0xff, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x1, %ecx
movl %ecx, (%r14,%rax,4)
movl 0x10(%rsp), %eax
movl %ecx, (%r15,%rax,4)
movl 0x10(%rsp), %eax
movl $0x0, (%r12,%rax,4)
movq %rbx, %rdi
callq 0x1e160
leaq 0x60(%rsp), %rdi
movq %rax, %rsi
callq 0x5c58
movq %rbx, %rdi
callq 0x1e160
leaq 0x20(%rsp), %rdi
movq %rax, %rsi
callq 0x5c58
movq 0x60(%rsp), %rdi
movq 0x68(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbceb
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbd10
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x170(%rsp), %rax
movq 0x180(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc255
movl 0x10(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x170(%rsp)
jmp 0xc267
movapd %xmm0, 0x140(%rsp)
xorl %eax, %eax
movq %rax, 0x150(%rsp)
movq %rax, 0xe0(%rsp)
movapd %xmm0, 0xd0(%rsp)
movq %rax, 0xb0(%rsp)
movapd %xmm0, 0xa0(%rsp)
movq %rax, 0x50(%rsp)
movapd %xmm0, 0x40(%rsp)
movq %rax, 0x90(%rsp)
movapd %xmm0, 0x80(%rsp)
leaq 0xf0(%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
xorpd %xmm0, %xmm0
movapd %xmm0, 0x60(%rsp)
movq $0x0, 0x70(%rsp)
movq %rbx, %rdi
callq 0x1e160
leaq 0x140(%rsp), %rdi
movq %rax, %rsi
callq 0x5eac
movq %rbx, %rdi
callq 0x1e160
leaq 0x40(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq %rbx, %rdi
callq 0x1e160
leaq 0xd0(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq %rbx, %rdi
callq 0x1e160
leaq 0x80(%rsp), %rdi
movq %rax, %rsi
callq 0x5c58
movq %rbx, %rdi
callq 0x1e160
leaq 0xa0(%rsp), %rdi
movq %rax, %rsi
callq 0xd7da
movq 0xd0(%rsp), %r14
movq 0xd8(%rsp), %rdx
cmpq %rdx, %r14
je 0xbe72
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x1, (%r14,%rax,4)
movq 0x40(%rsp), %r14
movq 0x48(%rsp), %rdx
cmpq %rdx, %r14
je 0xbea9
subq %r14, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
movq %r14, %rdi
movl $0xff, %esi
callq 0x2110
movl 0x10(%rsp), %eax
movl $0x0, (%r14,%rax,4)
movq 0x80(%rsp), %rdi
movq 0x88(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbee0
subq %rdi, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
xorl %esi, %esi
callq 0x2110
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rdx
cmpq %rdx, %rdi
je 0xbf0b
subq %rdi, %rdx
addq $-0x4, %rdx
andq $-0x4, %rdx
addq $0x4, %rdx
xorl %esi, %esi
callq 0x2110
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xbf38
movl 0x10(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xbf4a
leaq 0xf0(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7644
movq 0x100(%rsp), %rcx
movq 0x120(%rsp), %rax
cmpq %rcx, %rax
je 0xc148
leaq 0xb8(%rsp), %r15
leaq 0x20(%rsp), %r12
leaq 0xf0(%rsp), %r13
leaq 0xc(%rsp), %rbp
movl (%rcx), %eax
movl %eax, 0xb8(%rsp)
movq 0x110(%rsp), %rax
addq $-0x4, %rax
cmpq %rax, %rcx
je 0xbf9d
addq $0x4, %rcx
jmp 0xbfde
movq 0x108(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x118(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x118(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x108(%rsp)
leaq 0x200(%rcx), %rax
movq %rax, 0x110(%rsp)
movq %rcx, 0x100(%rsp)
movq 0x68(%rsp), %rsi
cmpq 0x70(%rsp), %rsi
je 0xc006
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x68(%rsp)
jmp 0xc013
leaq 0x60(%rsp), %rdi
movq %r15, %rdx
callq 0x6f98
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x1ddf8
movq %r12, %rdi
movq %rax, %rsi
callq 0x61a0
movq 0x20(%rsp), %rdi
cmpq %rdi, 0x28(%rsp)
je 0xc11d
xorl %r14d, %r14d
movl (%rdi,%r14,4), %eax
movl %eax, 0xc(%rsp)
movq 0x40(%rsp), %rcx
cmpl $0x0, (%rcx,%rax,4)
jns 0xc09f
movq 0x120(%rsp), %rcx
movq 0x130(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xc07c
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x120(%rsp)
jmp 0xc087
movq %r13, %rdi
movq %rbp, %rsi
callq 0x7644
movl 0xb8(%rsp), %eax
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0xc(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0xc(%rsp), %eax
movq 0x40(%rsp), %rdx
movl 0xb8(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jne 0xc100
movq 0xd0(%rsp), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc0f8
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc100
movq %r15, %rdx
callq 0x6f98
incq %r14
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %r14, %rax
ja 0xc040
testq %rdi, %rdi
je 0xc12f
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x100(%rsp), %rcx
movq 0x120(%rsp), %rax
cmpq %rcx, %rax
jne 0xbf7d
movq 0x60(%rsp), %rcx
movq 0x68(%rsp), %r10
subq %rcx, %r10
shrq $0x2, %r10
decl %r10d
js 0xc229
movq 0x140(%rsp), %rdx
movq 0xd0(%rsp), %rsi
movq 0x80(%rsp), %rdi
movl 0x10(%rsp), %r8d
movq 0x1d0(%rsp), %r9
movq (%r9), %r9
movl %r10d, %r10d
movsd 0x24eab(%rip), %xmm0    # 0x31040
movsd 0x24e93(%rip), %xmm1    # 0x31030
movl (%rcx,%r10,4), %r11d
leaq (%r11,%r11,2), %r15
movq (%rdx,%r15,8), %r14
movq 0x8(%rdx,%r15,8), %r15
subq %r14, %r15
je 0xc1fe
sarq $0x2, %r15
xorps %xmm2, %xmm2
cvtsi2sdl (%rsi,%r11,4), %xmm2
cmpq $0x1, %r15
adcq $0x0, %r15
xorl %r12d, %r12d
movl (%r14,%r12,4), %r13d
xorps %xmm3, %xmm3
cvtsi2sdl (%rsi,%r13,4), %xmm3
divsd %xmm2, %xmm3
movsd (%rdi,%r11,8), %xmm4
addsd %xmm1, %xmm4
mulsd %xmm3, %xmm4
addsd (%rdi,%r13,8), %xmm4
movsd %xmm4, (%rdi,%r13,8)
incq %r12
cmpq %r12, %r15
jne 0xc1cb
cmpl %r8d, %r11d
je 0xc219
movsd (%rdi,%r11,8), %xmm2
mulsd %xmm0, %xmm2
addsd (%r9,%r11,8), %xmm2
movsd %xmm2, (%r9,%r11,8)
leaq -0x1(%r10), %r11
testq %r10, %r10
movq %r11, %r10
jg 0xc19d
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc73b
movl 0x14(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xc74d
leaq 0x140(%rsp), %rdi
leaq 0x10(%rsp), %rsi
callq 0x7644
movq 0x150(%rsp), %rax
cmpq %rax, 0x170(%rsp)
je 0xc4ac
leaq 0xc(%rsp), %r15
leaq 0xb8(%rsp), %r12
leaq 0x140(%rsp), %r13
leaq 0x1c(%rsp), %rbp
movl (%rax), %ecx
movl %ecx, 0xc(%rsp)
movq 0x160(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc2b4
addq $0x4, %rax
jmp 0xc2f5
movq 0x158(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x168(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x168(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x158(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x160(%rsp)
movq %rax, 0x150(%rsp)
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc32a
movl 0xc(%rsp), %ecx
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xc33a
leaq 0xf0(%rsp), %rdi
movq %r15, %rsi
callq 0x7644
movl 0xc(%rsp), %eax
cmpl 0x14(%rsp), %eax
jne 0xc35b
movl 0x18(%rsp), %ecx
movq 0xa0(%rsp), %rdx
movl (%rdx,%rcx,4), %ecx
movq 0x40(%rsp), %rdx
addl %ecx, (%rdx,%rax,4)
movl 0xc(%rsp), %esi
movq %rbx, %rdi
callq 0x1ddf8
movq %r12, %rdi
movq %rax, %rsi
callq 0x61a0
movq 0xb8(%rsp), %rdi
cmpq %rdi, 0xc0(%rsp)
je 0xc481
xorl %r14d, %r14d
movl (%rdi,%r14,4), %eax
movl %eax, 0x1c(%rsp)
movq 0x80(%rsp), %rcx
cmpl $0x0, (%rcx,%rax,4)
jns 0xc3ed
movq 0x170(%rsp), %rcx
movq 0x180(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rcx
je 0xc3ca
movl %eax, (%rcx)
addq $0x4, %rcx
movq %rcx, 0x170(%rsp)
jmp 0xc3d5
movq %r13, %rdi
movq %rbp, %rsi
callq 0x7644
movl 0xc(%rsp), %eax
movq 0x80(%rsp), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0x1c(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0x1c(%rsp), %eax
movq 0x80(%rsp), %rdx
movl 0xc(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jne 0xc45e
movq 0xa0(%rsp), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl 0x1c(%rsp), %edx
addl %eax, (%rcx,%rdx,4)
movl 0x1c(%rsp), %eax
movq 0xd0(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc456
movl 0xc(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc45e
movq %r15, %rdx
callq 0x6f98
incq %r14
movq 0xb8(%rsp), %rdi
movq 0xc0(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %r14, %rax
ja 0xc38b
testq %rdi, %rdi
je 0xc496
movq 0xc8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x150(%rsp), %rax
cmpq %rax, 0x170(%rsp)
jne 0xc297
movq 0x120(%rsp), %rax
cmpq 0x100(%rsp), %rax
movq 0x1d0(%rsp), %r15
je 0xc690
movl $0x200, %ebx            # imm = 0x200
movsd 0x24b59(%rip), %xmm4    # 0x31030
movq 0x128(%rsp), %rdi
movq %rax, %rcx
cmpq %rdi, %rax
jne 0xc4f6
movq 0x138(%rsp), %rcx
movq -0x8(%rcx), %rcx
addq %rbx, %rcx
movl -0x4(%rcx), %r14d
cmpq %rdi, %rax
je 0xc505
addq $-0x4, %rax
jmp 0xc54c
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movsd 0x24b19(%rip), %xmm4    # 0x31030
movq 0x138(%rsp), %rax
leaq -0x8(%rax), %rcx
movq %rcx, 0x138(%rsp)
movq -0x8(%rax), %rax
movq %rax, 0x128(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x130(%rsp)
addq $0x1fc, %rax            # imm = 0x1FC
movq %rax, 0x120(%rsp)
movq 0xd0(%rsp), %rcx
leaq (%r14,%r14,2), %rdx
movq (%rcx,%rdx,8), %rax
movq 0x8(%rcx,%rdx,8), %rcx
subq %rax, %rcx
je 0xc604
sarq $0x2, %rcx
movq 0xa0(%rsp), %rdx
xorps %xmm0, %xmm0
cvtsi2sdl (%rdx,%r14,4), %xmm0
movq 0x60(%rsp), %rsi
movq 0x40(%rsp), %rdi
xorps %xmm1, %xmm1
cvtsi2sdl (%rdi,%r14,4), %xmm1
movq 0x20(%rsp), %r8
cmpq $0x1, %rcx
adcq $0x0, %rcx
xorl %r9d, %r9d
movl (%rax,%r9,4), %r10d
xorps %xmm2, %xmm2
cvtsi2sdl (%rdx,%r10,4), %xmm2
divsd %xmm0, %xmm2
movsd (%rsi,%r14,8), %xmm3
addsd %xmm4, %xmm3
mulsd %xmm2, %xmm3
addsd (%rsi,%r10,8), %xmm3
movsd %xmm3, (%rsi,%r10,8)
xorps %xmm2, %xmm2
cvtsi2sdl (%rdi,%r10,4), %xmm2
divsd %xmm1, %xmm2
movsd (%r8,%r14,8), %xmm3
addsd %xmm4, %xmm3
mulsd %xmm2, %xmm3
addsd (%r8,%r10,8), %xmm3
movsd %xmm3, (%r8,%r10,8)
incq %r9
cmpq %r9, %rcx
jne 0xc5aa
cmpl 0x14(%rsp), %r14d
jne 0xc646
movl 0x18(%rsp), %eax
movq 0x40(%rsp), %rcx
xorps %xmm0, %xmm0
cvtsi2sdl (%rcx,%rax,4), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdl (%rcx,%r14,4), %xmm1
divsd %xmm1, %xmm0
movq 0x20(%rsp), %rcx
movsd (%rcx,%r14,8), %xmm1
addsd %xmm4, %xmm1
mulsd %xmm0, %xmm1
addsd (%rcx,%rax,8), %xmm1
movsd %xmm1, (%rcx,%rax,8)
cmpl 0x10(%rsp), %r14d
je 0xc67a
movq 0x20(%rsp), %rax
movsd (%rax,%r14,8), %xmm0
movq 0x60(%rsp), %rax
subsd (%rax,%r14,8), %xmm0
mulsd 0x249cd(%rip), %xmm0    # 0x31038
movq (%r15), %rax
addsd (%rax,%r14,8), %xmm0
movsd %xmm0, (%rax,%r14,8)
movq 0x120(%rsp), %rax
cmpq 0x100(%rsp), %rax
jne 0xc4d7
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xc6a7
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xc6be
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x6998
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xc6e8
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xc6ff
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xc71c
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xd0(%rsp), %rdi
callq 0x60b8
leaq 0xf0(%rsp), %rdi
callq 0x6998
jmp 0xcce6
leaq 0xf0(%rsp), %rdi
leaq 0x14(%rsp), %rsi
callq 0x7644
movl 0x18(%rsp), %eax
movq 0x40(%rsp), %rcx
movl (%rcx,%rax,4), %eax
incl %eax
movl 0x14(%rsp), %edx
movl %eax, (%rcx,%rdx,4)
movl 0x14(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq (%rdi), %rax
cmpq %rax, 0x8(%rdi)
je 0xc783
movq %rax, 0x8(%rdi)
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc79d
movl 0x18(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc7a7
leaq 0x18(%rsp), %rdx
callq 0x6f98
movl 0x18(%rsp), %eax
movq 0xd0(%rsp), %rcx
movl (%rcx,%rax,4), %eax
movl 0x14(%rsp), %edx
movq 0xa0(%rsp), %rsi
movl %eax, (%rsi,%rdx,4)
movl 0x14(%rsp), %eax
movl (%rsi,%rax,4), %edx
movl %edx, (%rcx,%rax,4)
movq 0x90(%rbx), %rdi
movq 0xa0(%rbx), %r14
movl 0xa8(%rbx), %ebp
cmpq %r14, %rdi
je 0xc7f7
movq %r14, %rdx
subq %rdi, %rdx
xorl %esi, %esi
callq 0x2110
jmp 0xc7fa
movq %rdi, %r14
testl %ebp, %ebp
je 0xc813
negb %bpl
movq $-0x1, %rax
movl %ebp, %ecx
shrq %cl, %rax
notq %rax
andq %rax, (%r14)
movl 0x14(%rsp), %ecx
movq 0x90(%rbx), %rax
movl %ecx, %edx
movl $0x1, %esi
shlq %cl, %rsi
shrl $0x6, %edx
orq %rsi, (%rax,%rdx,8)
movq 0x100(%rsp), %rax
cmpq %rax, 0x120(%rsp)
je 0xcad1
leaq 0x20(%rsp), %r14
leaq 0xb8(%rsp), %r15
leaq 0xf0(%rsp), %r12
leaq 0xc(%rsp), %r13
movl (%rax), %ecx
movl %ecx, 0xb8(%rsp)
movq 0x110(%rsp), %rcx
addq $-0x4, %rcx
cmpq %rcx, %rax
je 0xc87f
addq $0x4, %rax
jmp 0xc8c0
movq 0x108(%rsp), %rdi
movl $0x200, %esi            # imm = 0x200
callq 0x2250
movq 0x118(%rsp), %rax
leaq 0x8(%rax), %rcx
movq %rcx, 0x118(%rsp)
movq 0x8(%rax), %rax
movq %rax, 0x108(%rsp)
leaq 0x200(%rax), %rcx
movq %rcx, 0x110(%rsp)
movq %rax, 0x100(%rsp)
movl 0xb8(%rsp), %esi
movq %rbx, %rdi
callq 0x1ddf8
movq %r14, %rdi
movq %rax, %rsi
callq 0x61a0
movq 0x20(%rsp), %rdi
cmpq %rdi, 0x28(%rsp)
je 0xcaa9
xorl %ebp, %ebp
movl (%rdi,%rbp,4), %eax
movl %eax, 0xc(%rsp)
movq 0x40(%rsp), %rdx
movl 0xb8(%rsp), %ecx
movl (%rdx,%rcx,4), %esi
incl %esi
cmpl %esi, (%rdx,%rax,4)
jle 0xc959
movl %esi, (%rdx,%rax,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
leaq (%rcx,%rax,8), %rdi
movq (%rdi), %rax
cmpq %rax, 0x8(%rdi)
je 0xc935
movq %rax, 0x8(%rdi)
movq 0x8(%rdi), %rsi
cmpq 0x10(%rdi), %rsi
je 0xc9e2
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xc9ea
jne 0xca20
movq 0xa0(%rsp), %rdx
movl (%rdx,%rcx,4), %ecx
addl %ecx, (%rdx,%rax,4)
movl 0xb8(%rsp), %eax
movl (%rdx,%rax,4), %eax
movl 0xc(%rsp), %ecx
movq 0xd0(%rsp), %rdx
addl %eax, (%rdx,%rcx,4)
movl 0xc(%rsp), %eax
movq 0x140(%rsp), %rcx
leaq (%rax,%rax,2), %rax
movq (%rcx,%rax,8), %rdi
movq 0x8(%rcx,%rax,8), %rsi
movq %r15, %rdx
callq 0x7bff
movl 0xc(%rsp), %edx
movq 0x140(%rsp), %rcx
leaq (%rdx,%rdx,2), %rdx
movq 0x8(%rcx,%rdx,8), %rsi
cmpq %rsi, %rax
jne 0xca20
leaq (%rcx,%rdx,8), %rdi
cmpq 0x10(%rdi), %rsi
je 0xca9c
movl 0xb8(%rsp), %eax
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, 0x8(%rdi)
jmp 0xca20
movq %r15, %rdx
callq 0x6f98
movl 0xc(%rsp), %eax
movq 0xd0(%rsp), %rcx
movl $0x0, (%rcx,%rax,4)
movl 0xb8(%rsp), %eax
movq 0xa0(%rsp), %rdx
movl (%rdx,%rax,4), %eax
movl 0xc(%rsp), %esi
movl %eax, (%rdx,%rsi,4)
movl 0xc(%rsp), %eax
movl (%rdx,%rax,4), %edx
addl %edx, (%rcx,%rax,4)
movl 0xc(%rsp), %ecx
movq 0x90(%rbx), %rax
movl $0x1, %edx
shlq %cl, %rdx
movl %ecx, %esi
shrl $0x6, %esi
movq (%rax,%rsi,8), %rdi
btq %rcx, %rdi
jb 0xca7d
orq %rdi, %rdx
movq %rdx, (%rax,%rsi,8)
movq 0x120(%rsp), %rax
movq 0x130(%rsp), %rdx
addq $-0x4, %rdx
cmpq %rdx, %rax
je 0xca72
movl %ecx, (%rax)
addq $0x4, %rax
movq %rax, 0x120(%rsp)
jmp 0xca7d
movq %r12, %rdi
movq %r13, %rsi
callq 0x7644
incq %rbp
movq 0x20(%rsp), %rdi
movq 0x28(%rsp), %rax
subq %rdi, %rax
sarq $0x2, %rax
cmpq %rbp, %rax
ja 0xc8f4
jmp 0xcaa9
movq %r15, %rdx
callq 0x6f98
jmp 0xca20
testq %rdi, %rdi
je 0xcabb
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x100(%rsp), %rax
cmpq %rax, 0x120(%rsp)
jne 0xc85f
movq 0x60(%rsp), %rbx
movq 0x68(%rsp), %r15
subq %rbx, %r15
sarq $0x2, %r15
cmpq $0x2, %r15
movq 0x1d0(%rsp), %r12
jb 0xcb5b
movq 0x40(%rsp), %rax
leaq -0x2(%r15), %rcx
movl $0x1, %edx
xorl %edi, %edi
movq %rbx, %rsi
movl -0x4(%rbx,%rdx,4), %r8d
movl (%rbx,%rdx,4), %r9d
movl (%rax,%r8,4), %r8d
cmpl (%rax,%r9,4), %r8d
jle 0xcb48
movl -0x4(%rbx,%rdx,4), %r9d
movl (%rbx,%rdx,4), %r8d
movl (%rax,%r9,4), %r10d
cmpl (%rax,%r8,4), %r10d
jle 0xcb48
movl %r8d, %r10d
movq %rsi, %r11
movl %r8d, (%r11)
movl %r9d, 0x4(%r11)
movl -0x4(%r11), %r9d
addq $-0x4, %r11
movl (%rax,%r9,4), %ebp
cmpl (%rax,%r10,4), %ebp
jg 0xcb2f
incq %rdx
leaq 0x1(%rdi), %r8
addq $0x4, %rsi
cmpq %rcx, %rdi
movq %r8, %rdi
jne 0xcb03
movq 0x80(%rsp), %r14
movq 0x88(%rsp), %rdx
cmpq %rdx, %r14
je 0xcb89
subq %r14, %rdx
addq $-0x8, %rdx
andq $-0x8, %rdx
addq $0x8, %rdx
movq %r14, %rdi
xorl %esi, %esi
callq 0x2110
decl %r15d
js 0xcc49
movq 0x140(%rsp), %rax
movq 0xd0(%rsp), %rcx
movl 0x10(%rsp), %edx
movq (%r12), %rsi
movl %r15d, %edi
movsd 0x24483(%rip), %xmm0    # 0x31038
movsd 0x24473(%rip), %xmm1    # 0x31030
movl (%rbx,%rdi,4), %r8d
leaq (%r8,%r8,2), %r10
movq (%rax,%r10,8), %r9
movq 0x8(%rax,%r10,8), %r10
subq %r9, %r10
je 0xcc1e
sarq $0x2, %r10
xorps %xmm2, %xmm2
cvtsi2sdl (%rcx,%r8,4), %xmm2
cmpq $0x1, %r10
adcq $0x0, %r10
xorl %r11d, %r11d
movl (%r9,%r11,4), %r15d
xorps %xmm3, %xmm3
cvtsi2sdl (%rcx,%r15,4), %xmm3
divsd %xmm2, %xmm3
movsd (%r14,%r8,8), %xmm4
addsd %xmm1, %xmm4
mulsd %xmm3, %xmm4
addsd (%r14,%r15,8), %xmm4
movsd %xmm4, (%r14,%r15,8)
incq %r11
cmpq %r11, %r10
jne 0xcbeb
cmpl %edx, %r8d
je 0xcc39
movsd (%r14,%r8,8), %xmm2
mulsd %xmm0, %xmm2
addsd (%rsi,%r8,8), %xmm2
movsd %xmm2, (%rsi,%r8,8)
leaq -0x1(%rdi), %r8
testq %rdi, %rdi
movq %r8, %rdi
jg 0xcbbd
testq %rbx, %rbx
je 0xcc5e
movq 0x70(%rsp), %rsi
subq %rbx, %rsi
movq %rbx, %rdi
callq 0x2250
leaq 0xf0(%rsp), %rdi
callq 0x6998
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xcc88
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xcc9f
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xccbc
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xccd9
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x60b8
addq $0x198, %rsp            # imm = 0x198
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0xce2c
movq %rax, %rbx
jmp 0xcd7c
jmp 0xcd0f
jmp 0xcd14
jmp 0xcd14
jmp 0xcd0f
jmp 0xcd14
movq %rax, %rbx
jmp 0xcd41
movq %rax, %rbx
jmp 0xce08
jmp 0xcdee
movq %rax, %rbx
movq 0xb8(%rsp), %rdi
testq %rdi, %rdi
je 0xcd41
movq 0xc8(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xcd58
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xcd6f
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x6998
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xcd99
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xcdb0
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xcdcd
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xd0(%rsp), %rdi
callq 0x60b8
leaq 0xf0(%rsp), %rdi
callq 0x6998
jmp 0xcea7
jmp 0xcdee
movq %rax, %rbx
movq 0x20(%rsp), %rdi
testq %rdi, %rdi
je 0xce08
movq 0x30(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x60(%rsp), %rdi
testq %rdi, %rdi
je 0xce1f
movq 0x70(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0xf0(%rsp), %rdi
callq 0x6998
movq 0x80(%rsp), %rdi
testq %rdi, %rdi
je 0xce49
movq 0x90(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0xce60
movq 0x50(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0xce7d
movq 0xb0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
movq 0xd0(%rsp), %rdi
testq %rdi, %rdi
je 0xce9a
movq 0xe0(%rsp), %rsi
subq %rdi, %rsi
callq 0x2250
leaq 0x140(%rsp), %rdi
callq 0x60b8
movq %rbx, %rdi
callq 0x23b0