// File: /workspace/github_c_makefile_star2_O3/SimpleDoger[P]Darknet_CPU_Only/lstm_layer.c
// Function: backward_lstm_layer
void backward_lstm_layer(layer l, network state)
{
    network s = { 0 };
    s.train = state.train;
    int i;
    layer wf = *(l.wf);
    layer wi = *(l.wi);
    layer wg = *(l.wg);
    layer wo = *(l.wo);

    layer uf = *(l.uf);
    layer ui = *(l.ui);
    layer ug = *(l.ug);
    layer uo = *(l.uo);

    increment_layer(&wf, l.steps - 1);
    increment_layer(&wi, l.steps - 1);
    increment_layer(&wg, l.steps - 1);
    increment_layer(&wo, l.steps - 1);

    increment_layer(&uf, l.steps - 1);
    increment_layer(&ui, l.steps - 1);
    increment_layer(&ug, l.steps - 1);
    increment_layer(&uo, l.steps - 1);

    state.input += l.inputs*l.batch*(l.steps - 1);
    if (state.delta) state.delta += l.inputs*l.batch*(l.steps - 1);

    l.output += l.outputs*l.batch*(l.steps - 1);
    l.cell_cpu += l.outputs*l.batch*(l.steps - 1);
    l.delta += l.outputs*l.batch*(l.steps - 1);

    for (i = l.steps - 1; i >= 0; --i) {
        if (i != 0) copy_cpu(l.outputs*l.batch, l.cell_cpu - l.outputs*l.batch, 1, l.prev_cell_cpu, 1);
        copy_cpu(l.outputs*l.batch, l.cell_cpu, 1, l.c_cpu, 1);
        if (i != 0) copy_cpu(l.outputs*l.batch, l.output - l.outputs*l.batch, 1, l.prev_state_cpu, 1);
        copy_cpu(l.outputs*l.batch, l.output, 1, l.h_cpu, 1);

        l.dh_cpu = (i == 0) ? 0 : l.delta - l.outputs*l.batch;

        copy_cpu(l.outputs*l.batch, wf.output, 1, l.f_cpu, 1);			
        axpy_cpu(l.outputs*l.batch, 1, uf.output, 1, l.f_cpu, 1);			

        copy_cpu(l.outputs*l.batch, wi.output, 1, l.i_cpu, 1);			
        axpy_cpu(l.outputs*l.batch, 1, ui.output, 1, l.i_cpu, 1);			

        copy_cpu(l.outputs*l.batch, wg.output, 1, l.g_cpu, 1);			
        axpy_cpu(l.outputs*l.batch, 1, ug.output, 1, l.g_cpu, 1);			

        copy_cpu(l.outputs*l.batch, wo.output, 1, l.o_cpu, 1);			
        axpy_cpu(l.outputs*l.batch, 1, uo.output, 1, l.o_cpu, 1);			

        activate_array(l.f_cpu, l.outputs*l.batch, LOGISTIC);			
        activate_array(l.i_cpu, l.outputs*l.batch, LOGISTIC);		
        activate_array(l.g_cpu, l.outputs*l.batch, TANH);			
        activate_array(l.o_cpu, l.outputs*l.batch, LOGISTIC);		

        copy_cpu(l.outputs*l.batch, l.delta, 1, l.temp3_cpu, 1);		

        copy_cpu(l.outputs*l.batch, l.c_cpu, 1, l.temp_cpu, 1);			
        activate_array(l.temp_cpu, l.outputs*l.batch, TANH);			

        copy_cpu(l.outputs*l.batch, l.temp3_cpu, 1, l.temp2_cpu, 1);		
        mul_cpu(l.outputs*l.batch, l.o_cpu, 1, l.temp2_cpu, 1);			

        gradient_array(l.temp_cpu, l.outputs*l.batch, TANH, l.temp2_cpu);
        axpy_cpu(l.outputs*l.batch, 1, l.dc_cpu, 1, l.temp2_cpu, 1);		

        copy_cpu(l.outputs*l.batch, l.c_cpu, 1, l.temp_cpu, 1);			
        activate_array(l.temp_cpu, l.outputs*l.batch, TANH);			
        mul_cpu(l.outputs*l.batch, l.temp3_cpu, 1, l.temp_cpu, 1);		
        gradient_array(l.o_cpu, l.outputs*l.batch, LOGISTIC, l.temp_cpu);
        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, wo.delta, 1);
        s.input = l.prev_state_cpu;
        s.delta = l.dh_cpu;															
        backward_connected_layer(wo, s);	

        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, uo.delta, 1);
        s.input = state.input;
        s.delta = state.delta;
        backward_connected_layer(uo, s);									

        copy_cpu(l.outputs*l.batch, l.temp2_cpu, 1, l.temp_cpu, 1);			
        mul_cpu(l.outputs*l.batch, l.i_cpu, 1, l.temp_cpu, 1);				
        gradient_array(l.g_cpu, l.outputs*l.batch, TANH, l.temp_cpu);		
        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, wg.delta, 1);
        s.input = l.prev_state_cpu;
        s.delta = l.dh_cpu;														
        backward_connected_layer(wg, s);	

        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, ug.delta, 1);
        s.input = state.input;
        s.delta = state.delta;
        backward_connected_layer(ug, s);																

        copy_cpu(l.outputs*l.batch, l.temp2_cpu, 1, l.temp_cpu, 1);			
        mul_cpu(l.outputs*l.batch, l.g_cpu, 1, l.temp_cpu, 1);				
        gradient_array(l.i_cpu, l.outputs*l.batch, LOGISTIC, l.temp_cpu);	
        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, wi.delta, 1);
        s.input = l.prev_state_cpu;
        s.delta = l.dh_cpu;
        backward_connected_layer(wi, s);						

        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, ui.delta, 1);
        s.input = state.input;
        s.delta = state.delta;
        backward_connected_layer(ui, s);									

        copy_cpu(l.outputs*l.batch, l.temp2_cpu, 1, l.temp_cpu, 1);		
        mul_cpu(l.outputs*l.batch, l.prev_cell_cpu, 1, l.temp_cpu, 1);
        gradient_array(l.f_cpu, l.outputs*l.batch, LOGISTIC, l.temp_cpu);
        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, wf.delta, 1);
        s.input = l.prev_state_cpu;
        s.delta = l.dh_cpu;
        backward_connected_layer(wf, s);						

        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, uf.delta, 1);
        s.input = state.input;
        s.delta = state.delta;
        backward_connected_layer(uf, s);									

        copy_cpu(l.outputs*l.batch, l.temp2_cpu, 1, l.temp_cpu, 1);			
        mul_cpu(l.outputs*l.batch, l.f_cpu, 1, l.temp_cpu, 1);				
        copy_cpu(l.outputs*l.batch, l.temp_cpu, 1, l.dc_cpu, 1);				

        state.input -= l.inputs*l.batch;
        if (state.delta) state.delta -= l.inputs*l.batch;
        l.output -= l.outputs*l.batch;
        l.cell_cpu -= l.outputs*l.batch;
        l.delta -= l.outputs*l.batch;

        increment_layer(&wf, -1);
        increment_layer(&wi, -1);
        increment_layer(&wg, -1);
        increment_layer(&wo, -1);

        increment_layer(&uf, -1);
        increment_layer(&ui, -1);
        increment_layer(&ug, -1);
        increment_layer(&uo, -1);
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2bc8, %rsp           # imm = 0x2BC8
leaq 0x30a0(%rsp), %r14
leaq 0x2c00(%rsp), %r12
leaq 0x5b8(%rsp), %rbx
movl $0x110, %edx            # imm = 0x110
movq %rbx, %rdi
xorl %esi, %esi
callq 0x31c0
movl 0xf8(%r14), %eax
movl %eax, 0xf8(%rbx)
movq 0x468(%r12), %rsi
leaq 0x2728(%rsp), %r13
movl $0x4a0, %edx            # imm = 0x4A0
movq %r13, %rdi
callq 0x32b0
movq 0x478(%r12), %rsi
leaq 0x2288(%rsp), %rbp
movl $0x4a0, %edx            # imm = 0x4A0
movq %rbp, %rdi
callq 0x32b0
movq 0x488(%r12), %rsi
leaq 0x14a8(%rsp), %rdi
movl $0x4a0, %edx            # imm = 0x4A0
callq 0x32b0
movq 0x458(%r12), %rsi
leaq 0x1008(%rsp), %rdi
movl $0x4a0, %edx            # imm = 0x4A0
callq 0x32b0
movq 0x460(%r12), %rsi
leaq 0x1de8(%rsp), %r15
movl $0x4a0, %edx            # imm = 0x4A0
movq %r15, %rdi
callq 0x32b0
movq 0x470(%r12), %rsi
leaq 0x1948(%rsp), %rbx
movl $0x4a0, %edx            # imm = 0x4A0
movq %rbx, %rdi
callq 0x32b0
movq 0x480(%r12), %rsi
leaq 0xb68(%rsp), %rdi
movl $0x4a0, %edx            # imm = 0x4A0
callq 0x32b0
movq 0x450(%r12), %rsi
leaq 0x6c8(%rsp), %rdi
movl $0x4a0, %edx            # imm = 0x4A0
callq 0x32b0
movq %r14, %rsi
movl 0xc0(%r12), %r14d
leal -0x1(%r14), %eax
movl 0x58(%r13), %ecx
imull %eax, %ecx
imull 0x48(%r13), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, 0x268(%r13)
addq %rcx, 0x260(%r13)
addq %rcx, 0x2c0(%r13)
addq %rcx, 0x2c8(%r13)
movl 0x58(%rbp), %ecx
imull %eax, %ecx
imull 0x48(%rbp), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, 0x268(%rbp)
addq %rcx, 0x260(%rbp)
addq %rcx, 0x2c0(%rbp)
addq %rcx, 0x2c8(%rbp)
leaq 0x14a8(%rsp), %rdx
movl 0x58(%rdx), %ecx
imull %eax, %ecx
imull 0x48(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, 0x268(%rdx)
addq %rcx, 0x260(%rdx)
addq %rcx, 0x2c0(%rdx)
addq %rcx, 0x2c8(%rdx)
leaq 0x1008(%rsp), %rdx
movl 0x58(%rdx), %ecx
imull %eax, %ecx
imull 0x48(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
addq %rcx, 0x268(%rdx)
addq %rcx, 0x260(%rdx)
addq %rcx, 0x2c0(%rdx)
addq %rcx, 0x2c8(%rdx)
movl 0x58(%r15), %ecx
imull %eax, %ecx
imull 0x48(%r15), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
movq 0x268(%r15), %r13
addq %rcx, %r13
movq %r13, 0x268(%r15)
addq %rcx, 0x260(%r15)
addq %rcx, 0x2c0(%r15)
addq %rcx, 0x2c8(%r15)
movl 0x58(%rbx), %ecx
imull %eax, %ecx
imull 0x48(%rbx), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
movq 0x268(%rbx), %rbp
addq %rcx, %rbp
movq %rbp, 0x268(%rbx)
addq %rcx, 0x260(%rbx)
addq %rcx, 0x2c0(%rbx)
addq %rcx, 0x2c8(%rbx)
leaq 0xb68(%rsp), %rdx
movl 0x58(%rdx), %ecx
imull %eax, %ecx
imull 0x48(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
movq 0x268(%rdx), %rbx
addq %rcx, %rbx
movq %rbx, 0x268(%rdx)
addq %rcx, 0x260(%rdx)
addq %rcx, 0x2c0(%rdx)
addq %rcx, 0x2c8(%rdx)
leaq 0x6c8(%rsp), %rdx
movl 0x58(%rdx), %ecx
imull %eax, %ecx
imull 0x48(%rdx), %ecx
movslq %ecx, %rcx
shlq $0x2, %rcx
movq 0x268(%rdx), %r15
addq %rcx, %r15
movq %r15, 0x268(%rdx)
addq %rcx, 0x260(%rdx)
addq %rcx, 0x2c0(%rdx)
addq %rcx, 0x2c8(%rdx)
imull 0x48(%r12), %eax
movl 0x54(%r12), %ecx
imull %eax, %ecx
movslq %ecx, %rcx
leaq (,%rcx,4), %rdx
addq %rdx, 0xd8(%rsi)
movq 0xe8(%rsi), %rdx
testq %rdx, %rdx
je 0x40260
leaq (%rdx,%rcx,4), %rcx
movq %rcx, 0xe8(%rsi)
imull 0x58(%r12), %eax
cltq
shlq $0x2, %rax
addq %rax, 0x268(%r12)
addq %rax, 0x350(%r12)
addq %rax, 0x260(%r12)
testl %r14d, %r14d
jle 0x40f16
incl %r14d
movslq 0x58(%r12), %rax
movslq 0x48(%r12), %rdi
imulq %rax, %rdi
movq 0x350(%r12), %rsi
cmpl $0x2, %r14d
jne 0x40301
movq 0x378(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x268(%r12), %rsi
movq 0x310(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
xorl %eax, %eax
jmp 0x403d1
movq %rdi, %rax
shlq $0x2, %rax
subq %rax, %rsi
movq 0x348(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x350(%r12), %rsi
movq 0x378(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movslq 0x58(%r12), %rax
movslq 0x48(%r12), %rdi
imulq %rax, %rdi
movq %rdi, %rax
shlq $0x2, %rax
movq 0x268(%r12), %rsi
subq %rax, %rsi
movq 0x318(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x268(%r12), %rsi
movq 0x310(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x260(%r12), %rax
movslq 0x58(%r12), %rcx
movslq 0x48(%r12), %rdi
imulq %rcx, %rdi
movq %rdi, %rcx
shlq $0x2, %rcx
subq %rcx, %rax
movq %rax, 0x338(%r12)
movq 0x2990(%rsp), %rsi
movq 0x358(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x358(%r12), %rcx
movss 0x14bf4(%rip), %xmm0    # 0x55008
movq %r13, %rsi
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29d31
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x24f0(%rsp), %rsi
movq 0x360(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x360(%r12), %rcx
movss 0x14b9b(%rip), %xmm0    # 0x55008
movq %rbp, %rsi
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29d31
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x1710(%rsp), %rsi
movq 0x368(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x368(%r12), %rcx
movss 0x14b42(%rip), %xmm0    # 0x55008
movq %rbx, %rsi
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29d31
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x1270(%rsp), %rsi
movq 0x370(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x370(%r12), %rcx
movss 0x14ae9(%rip), %xmm0    # 0x55008
movq %r15, %rsi
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29d31
movq 0x358(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
xorl %edx, %edx
callq 0x28c99
movq 0x360(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
xorl %edx, %edx
callq 0x28c99
movq 0x368(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movl $0x5, %edx
callq 0x28c99
movq 0x370(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
xorl %edx, %edx
callq 0x28c99
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x260(%r12), %rsi
movq 0x330(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x378(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x320(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movl $0x5, %edx
callq 0x28c99
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x330(%r12), %rsi
movq 0x328(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x370(%r12), %rsi
movq 0x328(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movq 0x320(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movq 0x328(%r12), %rcx
movl $0x5, %edx
callq 0x28ee8
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x380(%r12), %rsi
movq 0x328(%r12), %rcx
movss 0x1495a(%rip), %xmm0    # 0x55008
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29d31
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x378(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x320(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movl $0x5, %edx
callq 0x28c99
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x330(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movq 0x370(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movq 0x320(%r12), %rcx
xorl %edx, %edx
callq 0x28ee8
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x1268(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x318(%r12), %rax
movq %rax, 0x690(%rsp)
movq 0x338(%r12), %rax
movq %rax, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x1008(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
leaq 0x5b8(%rsp), %rbp
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x928(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
leaq 0x30a0(%rsp), %r13
movq 0xd8(%r13), %r15
movq %r15, 0x690(%rsp)
movq 0xe8(%r13), %rbx
movq %rbx, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x6c8(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x328(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x360(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movq 0x368(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movq 0x320(%r12), %rcx
movl $0x5, %edx
callq 0x28ee8
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x1708(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x318(%r12), %rax
movq %rax, 0x690(%rsp)
movq 0x338(%r12), %rax
movq %rax, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x14a8(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0xdc8(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq %r15, 0x690(%rsp)
movq %rbx, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0xb68(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x328(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x368(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movq 0x360(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movq 0x320(%r12), %rcx
xorl %edx, %edx
callq 0x28ee8
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x24e8(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x318(%r12), %rax
movq %rax, 0x690(%rsp)
movq 0x338(%r12), %rax
movq %rax, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x2288(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x1ba8(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq %r15, 0x690(%rsp)
movq %rbx, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x1948(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x328(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x348(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movq 0x358(%r12), %rdi
movl 0x48(%r12), %esi
imull 0x58(%r12), %esi
movq 0x320(%r12), %rcx
xorl %edx, %edx
callq 0x28ee8
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x2988(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq 0x318(%r12), %rax
movq %rax, 0x690(%rsp)
movq 0x338(%r12), %rax
movq %rax, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x2728(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x2048(%rsp), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movq %r15, 0x690(%rsp)
movq %rbx, 0x6a0(%rsp)
movl $0x94, %ecx
movq %rsp, %rdi
leaq 0x1de8(%rsp), %rsi
rep  movsq (%rsi), %es:(%rdi)
leaq 0x4a0(%rsp), %rdi
movl $0x22, %ecx
movq %rbp, %rsi
rep  movsq (%rsi), %es:(%rdi)
callq 0x336ce
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x328(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x358(%r12), %rsi
movq 0x320(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29c9f
movl 0x48(%r12), %edi
imull 0x58(%r12), %edi
movq 0x320(%r12), %rsi
movq 0x380(%r12), %rcx
movl $0x1, %edx
movl $0x1, %r8d
callq 0x29fe0
movslq 0x54(%r12), %rcx
movslq 0x48(%r12), %rax
imulq %rax, %rcx
leaq (,%rcx,4), %rdx
subq %rdx, %r15
movq %r15, 0xd8(%r13)
testq %rbx, %rbx
je 0x40d00
negq %rcx
leaq (%rbx,%rcx,4), %rcx
movq %rcx, 0xe8(%r13)
movslq 0x58(%r12), %rcx
imulq %rax, %rcx
shlq $0x2, %rcx
subq %rcx, 0x268(%r12)
subq %rcx, 0x350(%r12)
subq %rcx, 0x260(%r12)
movl 0x2780(%rsp), %eax
imull 0x2770(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
addq %rax, 0x2990(%rsp)
addq %rax, 0x2988(%rsp)
addq %rax, 0x29e8(%rsp)
addq %rax, 0x29f0(%rsp)
movl 0x22e0(%rsp), %eax
imull 0x22d0(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
addq %rax, 0x24f0(%rsp)
addq %rax, 0x24e8(%rsp)
addq %rax, 0x2548(%rsp)
addq %rax, 0x2550(%rsp)
movl 0x1500(%rsp), %eax
imull 0x14f0(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
addq %rax, 0x1710(%rsp)
addq %rax, 0x1708(%rsp)
addq %rax, 0x1768(%rsp)
addq %rax, 0x1770(%rsp)
movl 0x1060(%rsp), %eax
imull 0x1050(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
addq %rax, 0x1270(%rsp)
addq %rax, 0x1268(%rsp)
addq %rax, 0x12c8(%rsp)
addq %rax, 0x12d0(%rsp)
movl 0x1e40(%rsp), %eax
imull 0x1e30(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
movq 0x2050(%rsp), %r13
addq %rax, %r13
movq %r13, 0x2050(%rsp)
addq %rax, 0x2048(%rsp)
addq %rax, 0x20a8(%rsp)
addq %rax, 0x20b0(%rsp)
movl 0x19a0(%rsp), %eax
imull 0x1990(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
movq 0x1bb0(%rsp), %rbp
addq %rax, %rbp
movq %rbp, 0x1bb0(%rsp)
addq %rax, 0x1ba8(%rsp)
addq %rax, 0x1c08(%rsp)
addq %rax, 0x1c10(%rsp)
movl 0xbc0(%rsp), %eax
imull 0xbb0(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
movq 0xdd0(%rsp), %rbx
addq %rax, %rbx
movq %rbx, 0xdd0(%rsp)
addq %rax, 0xdc8(%rsp)
addq %rax, 0xe28(%rsp)
addq %rax, 0xe30(%rsp)
movl 0x720(%rsp), %eax
imull 0x710(%rsp), %eax
negl %eax
cltq
shlq $0x2, %rax
movq 0x930(%rsp), %r15
addq %rax, %r15
movq %r15, 0x930(%rsp)
addq %rax, 0x928(%rsp)
addq %rax, 0x988(%rsp)
addq %rax, 0x990(%rsp)
decl %r14d
cmpl $0x1, %r14d
ja 0x40290
addq $0x2bc8, %rsp           # imm = 0x2BC8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq