// File: mouda[P]LTE_random_access-simulate/alglibinternal.cpp
// Function: alglib_impl::matrixmatrixmultiply(alglib_impl::ae_matrix*, long, long, long, long, bool, alglib_impl::ae_matrix*, long, long, long, long, bool, double, alglib_impl::ae_matrix*, long, long, long, long, double, alglib_impl::ae_vector*, alglib_impl::ae_state*)
void matrixmatrixmultiply(/* Real    */ ae_matrix* a,
     ae_int_t ai1,
     ae_int_t ai2,
     ae_int_t aj1,
     ae_int_t aj2,
     ae_bool transa,
     /* Real    */ ae_matrix* b,
     ae_int_t bi1,
     ae_int_t bi2,
     ae_int_t bj1,
     ae_int_t bj2,
     ae_bool transb,
     double alpha,
     /* Real    */ ae_matrix* c,
     ae_int_t ci1,
     ae_int_t ci2,
     ae_int_t cj1,
     ae_int_t cj2,
     double beta,
     /* Real    */ ae_vector* work,
     ae_state *_state)
{
    ae_int_t arows;
    ae_int_t acols;
    ae_int_t brows;
    ae_int_t bcols;
    ae_int_t crows;
    ae_int_t ccols;
    ae_int_t i;
    ae_int_t j;
    ae_int_t k;
    ae_int_t l;
    ae_int_t r;
    double v;


    
    /*
     * Setup
     */
    if( !transa )
    {
        arows = ai2-ai1+1;
        acols = aj2-aj1+1;
    }
    else
    {
        arows = aj2-aj1+1;
        acols = ai2-ai1+1;
    }
    if( !transb )
    {
        brows = bi2-bi1+1;
        bcols = bj2-bj1+1;
    }
    else
    {
        brows = bj2-bj1+1;
        bcols = bi2-bi1+1;
    }
    ae_assert(acols==brows, "MatrixMatrixMultiply: incorrect matrix sizes!", _state);
    if( ((arows<=0||acols<=0)||brows<=0)||bcols<=0 )
    {
        return;
    }
    crows = arows;
    ccols = bcols;
    
    /*
     * Test WORK
     */
    i = ae_maxint(arows, acols, _state);
    i = ae_maxint(brows, i, _state);
    i = ae_maxint(i, bcols, _state);
    work->ptr.p_double[1] = 0;
    work->ptr.p_double[i] = 0;
    
    /*
     * Prepare C
     */
    if( ae_fp_eq(beta,0) )
    {
        for(i=ci1; i<=ci2; i++)
        {
            for(j=cj1; j<=cj2; j++)
            {
                c->ptr.pp_double[i][j] = 0;
            }
        }
    }
    else
    {
        for(i=ci1; i<=ci2; i++)
        {
            ae_v_muld(&c->ptr.pp_double[i][cj1], 1, ae_v_len(cj1,cj2), beta);
        }
    }
    
    /*
     * A*B
     */
    if( !transa&&!transb )
    {
        for(l=ai1; l<=ai2; l++)
        {
            for(r=bi1; r<=bi2; r++)
            {
                v = alpha*a->ptr.pp_double[l][aj1+r-bi1];
                k = ci1+l-ai1;
                ae_v_addd(&c->ptr.pp_double[k][cj1], 1, &b->ptr.pp_double[r][bj1], 1, ae_v_len(cj1,cj2), v);
            }
        }
        return;
    }
    
    /*
     * A*B'
     */
    if( !transa&&transb )
    {
        if( arows*acols<brows*bcols )
        {
            for(r=bi1; r<=bi2; r++)
            {
                for(l=ai1; l<=ai2; l++)
                {
                    v = ae_v_dotproduct(&a->ptr.pp_double[l][aj1], 1, &b->ptr.pp_double[r][bj1], 1, ae_v_len(aj1,aj2));
                    c->ptr.pp_double[ci1+l-ai1][cj1+r-bi1] = c->ptr.pp_double[ci1+l-ai1][cj1+r-bi1]+alpha*v;
                }
            }
            return;
        }
        else
        {
            for(l=ai1; l<=ai2; l++)
            {
                for(r=bi1; r<=bi2; r++)
                {
                    v = ae_v_dotproduct(&a->ptr.pp_double[l][aj1], 1, &b->ptr.pp_double[r][bj1], 1, ae_v_len(aj1,aj2));
                    c->ptr.pp_double[ci1+l-ai1][cj1+r-bi1] = c->ptr.pp_double[ci1+l-ai1][cj1+r-bi1]+alpha*v;
                }
            }
            return;
        }
    }
    
    /*
     * A'*B
     */
    if( transa&&!transb )
    {
        for(l=aj1; l<=aj2; l++)
        {
            for(r=bi1; r<=bi2; r++)
            {
                v = alpha*a->ptr.pp_double[ai1+r-bi1][l];
                k = ci1+l-aj1;
                ae_v_addd(&c->ptr.pp_double[k][cj1], 1, &b->ptr.pp_double[r][bj1], 1, ae_v_len(cj1,cj2), v);
            }
        }
        return;
    }
    
    /*
     * A'*B'
     */
    if( transa&&transb )
    {
        if( arows*acols<brows*bcols )
        {
            for(r=bi1; r<=bi2; r++)
            {
                k = cj1+r-bi1;
                for(i=1; i<=crows; i++)
                {
                    work->ptr.p_double[i] = 0.0;
                }
                for(l=ai1; l<=ai2; l++)
                {
                    v = alpha*b->ptr.pp_double[r][bj1+l-ai1];
                    ae_v_addd(&work->ptr.p_double[1], 1, &a->ptr.pp_double[l][aj1], 1, ae_v_len(1,crows), v);
                }
                ae_v_add(&c->ptr.pp_double[ci1][k], c->stride, &work->ptr.p_double[1], 1, ae_v_len(ci1,ci2));
            }
            return;
        }
        else
        {
            for(l=aj1; l<=aj2; l++)
            {
                k = ai2-ai1+1;
                ae_v_move(&work->ptr.p_double[1], 1, &a->ptr.pp_double[ai1][l], a->stride, ae_v_len(1,k));
                for(r=bi1; r<=bi2; r++)
                {
                    v = ae_v_dotproduct(&work->ptr.p_double[1], 1, &b->ptr.pp_double[r][bj1], 1, ae_v_len(1,k));
                    c->ptr.pp_double[ci1+l-aj1][cj1+r-bi1] = c->ptr.pp_double[ci1+l-aj1][cj1+r-bi1]+alpha*v;
                }
            }
            return;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x150, %rsp            # imm = 0x150
movl %r9d, %eax
movq %rcx, -0xb8(%rbp)
movq %rdx, %rcx
movq -0xb8(%rbp), %rdx
movq %rcx, -0xb0(%rbp)
movq %rsi, %rcx
movq -0xb0(%rbp), %rsi
movq %rcx, -0xa8(%rbp)
movq %rdi, %r9
movq -0xa8(%rbp), %rdi
movb %al, %cl
movq 0x70(%rbp), %rax
movq 0x68(%rbp), %rax
movq 0x60(%rbp), %rax
movq 0x58(%rbp), %rax
movq 0x50(%rbp), %rax
movq 0x48(%rbp), %rax
movq 0x40(%rbp), %rax
movb 0x38(%rbp), %al
movq 0x30(%rbp), %r10
movq 0x28(%rbp), %r10
movq 0x20(%rbp), %r10
movq 0x18(%rbp), %r10
movq 0x10(%rbp), %r10
movq %r9, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
andb $0x1, %cl
movb %cl, -0x29(%rbp)
andb $0x1, %al
movb %al, -0x2a(%rbp)
movsd %xmm0, -0x38(%rbp)
movsd %xmm1, -0x40(%rbp)
testb $0x1, -0x29(%rbp)
jne 0x23ea7
movq -0x18(%rbp), %rax
subq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
movq -0x28(%rbp), %rax
subq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x23ec7
movq -0x28(%rbp), %rax
subq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
subq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
testb $0x1, -0x2a(%rbp)
jne 0x23eef
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
movq 0x30(%rbp), %rax
subq 0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
jmp 0x23f0f
movq 0x30(%rbp), %rax
subq 0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x58(%rbp)
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x50(%rbp), %rax
cmpq -0x58(%rbp), %rax
sete %al
movq 0x70(%rbp), %rdx
movzbl %al, %edi
andl $0x1, %edi
leaq 0x33dd9(%rip), %rsi     # 0x57d04
callq 0x3b240
cmpq $0x0, -0x48(%rbp)
jle 0x23f4c
cmpq $0x0, -0x50(%rbp)
jle 0x23f4c
cmpq $0x0, -0x58(%rbp)
jle 0x23f4c
cmpq $0x0, -0x60(%rbp)
jg 0x23f51
jmp 0x249ed
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq 0x70(%rbp), %rdx
callq 0x3c9f0
movq %rax, -0x78(%rbp)
movq -0x58(%rbp), %rdi
movq -0x78(%rbp), %rsi
movq 0x70(%rbp), %rdx
callq 0x3c9f0
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rdi
movq -0x60(%rbp), %rsi
movq 0x70(%rbp), %rdx
callq 0x3c9f0
movq %rax, -0x78(%rbp)
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
xorps %xmm0, %xmm0
movsd %xmm0, 0x8(%rax)
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x78(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movsd -0x40(%rbp), %xmm0
xorps %xmm1, %xmm1
callq 0x3c3d0
testb $0x1, %al
jne 0x23fd7
jmp 0x24037
movq 0x48(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
cmpq 0x50(%rbp), %rax
jg 0x24035
movq 0x58(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq 0x60(%rbp), %rax
jg 0x24025
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x80(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x23ff1
jmp 0x24027
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x23fdf
jmp 0x240a1
movq 0x48(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
cmpq 0x50(%rbp), %rax
jg 0x2409f
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x78(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xc0(%rbp)
movq 0x58(%rbp), %rdi
movq 0x60(%rbp), %rsi
callq 0x42370
movq -0xc0(%rbp), %rdi
movq %rax, %rdx
movsd -0x40(%rbp), %xmm0
movl $0x1, %esi
callq 0x422d0
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x2403f
jmp 0x240a1
testb $0x1, -0x29(%rbp)
jne 0x241e9
testb $0x1, -0x2a(%rbp)
jne 0x241e9
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x241e4
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x241cb
movsd -0x38(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x20(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq 0x48(%rbp), %rax
addq -0x90(%rbp), %rax
subq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x88(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq 0x58(%rbp), %rdi
movq 0x60(%rbp), %rsi
callq 0x42370
movq -0xd0(%rbp), %rdi
movq -0xc8(%rbp), %rdx
movq %rax, %r8
movsd -0xa0(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41fe0
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x240dc
jmp 0x241cd
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x240c0
jmp 0x249ed
testb $0x1, -0x29(%rbp)
jne 0x244d2
testb $0x1, -0x2a(%rbp)
je 0x244d2
movq -0x48(%rbp), %rax
imulq -0x50(%rbp), %rax
movq -0x58(%rbp), %rcx
imulq -0x60(%rbp), %rcx
cmpq %rcx, %rax
jge 0x24375
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x24370
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x24357
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x20(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xe0(%rbp)
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xd8(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x42370
movq -0xe0(%rbp), %rdi
movq -0xd8(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41940
movsd %xmm0, -0xa0(%rbp)
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd -0x38(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2423f
jmp 0x24359
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x24223
jmp 0x249ed
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x244cd
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x244b4
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x20(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xf0(%rbp)
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xe8(%rbp)
movq -0x20(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x42370
movq -0xf0(%rbp), %rdi
movq -0xe8(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41940
movsd %xmm0, -0xa0(%rbp)
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd -0x38(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2439c
jmp 0x244b6
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x24380
jmp 0x249ed
testb $0x1, -0x29(%rbp)
je 0x2461a
testb $0x1, -0x2a(%rbp)
jne 0x2461a
movq -0x20(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x28(%rbp), %rax
jg 0x24615
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x245fc
movsd -0x38(%rbp), %xmm0
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x10(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x90(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq 0x48(%rbp), %rax
addq -0x90(%rbp), %rax
subq -0x20(%rbp), %rax
movq %rax, -0x88(%rbp)
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x88(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x100(%rbp)
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0xf8(%rbp)
movq 0x58(%rbp), %rdi
movq 0x60(%rbp), %rsi
callq 0x42370
movq -0x100(%rbp), %rdi
movq -0xf8(%rbp), %rdx
movq %rax, %r8
movsd -0xa0(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41fe0
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x2450d
jmp 0x245fe
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x244f1
jmp 0x249ed
testb $0x1, -0x29(%rbp)
je 0x249ed
testb $0x1, -0x2a(%rbp)
je 0x249ed
movq -0x48(%rbp), %rax
imulq -0x50(%rbp), %rax
movq -0x58(%rbp), %rcx
imulq -0x60(%rbp), %rcx
cmpq %rcx, %rax
jge 0x24814
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x2480f
movq 0x58(%rbp), %rax
addq -0x98(%rbp), %rax
subq 0x18(%rbp), %rax
movq %rax, -0x88(%rbp)
movq $0x1, -0x78(%rbp)
movq -0x78(%rbp), %rax
cmpq -0x68(%rbp), %rax
jg 0x246af
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x78(%rbp), %rcx
xorps %xmm0, %xmm0
movsd %xmm0, (%rax,%rcx,8)
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x24683
movq -0x10(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x18(%rbp), %rax
jg 0x24782
movsd -0x38(%rbp), %xmm0
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x10(%rbp), %rcx
mulsd (%rax,%rcx,8), %xmm0
movsd %xmm0, -0xa0(%rbp)
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x8, %rax
movq %rax, -0x110(%rbp)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x90(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x20(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x108(%rbp)
movq -0x68(%rbp), %rsi
movl $0x1, %edi
callq 0x42370
movq -0x110(%rbp), %rdi
movq -0x108(%rbp), %rdx
movq %rax, %r8
movsd -0xa0(%rbp), %xmm0
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41fe0
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x246ba
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x88(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x128(%rbp)
movq 0x40(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x120(%rbp)
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x8, %rax
movq %rax, -0x118(%rbp)
movq 0x48(%rbp), %rdi
movq 0x50(%rbp), %rsi
callq 0x42370
movq -0x128(%rbp), %rdi
movq -0x120(%rbp), %rsi
movq -0x118(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
callq 0x41ec0
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x24654
jmp 0x249ed
movq -0x20(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x28(%rbp), %rax
jg 0x249eb
movq -0x18(%rbp), %rax
subq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x88(%rbp)
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x8, %rax
movq %rax, -0x140(%rbp)
movq -0x8(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq -0x90(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x138(%rbp)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x130(%rbp)
movq -0x88(%rbp), %rsi
movl $0x1, %edi
callq 0x42370
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rdx
movq -0x130(%rbp), %rcx
movq %rax, %r8
movl $0x1, %esi
callq 0x41b10
movq 0x18(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
cmpq 0x20(%rbp), %rax
jg 0x249d2
movq 0x68(%rbp), %rax
movq 0x28(%rax), %rax
addq $0x8, %rax
movq %rax, -0x150(%rbp)
movq 0x10(%rbp), %rax
movq 0x38(%rax), %rax
movq -0x98(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x28(%rbp), %rcx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x148(%rbp)
movq -0x88(%rbp), %rsi
movl $0x1, %edi
callq 0x42370
movq -0x150(%rbp), %rdi
movq -0x148(%rbp), %rdx
movq %rax, %r8
movl $0x1, %ecx
movq %rcx, %rsi
callq 0x41940
movsd %xmm0, -0xa0(%rbp)
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd (%rax,%rcx,8), %xmm1
movsd -0x38(%rbp), %xmm0
movsd -0xa0(%rbp), %xmm2
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movq 0x40(%rbp), %rax
movq 0x38(%rax), %rax
movq 0x48(%rbp), %rcx
addq -0x90(%rbp), %rcx
subq -0x20(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq 0x58(%rbp), %rcx
addq -0x98(%rbp), %rcx
subq 0x18(%rbp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movq -0x98(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x98(%rbp)
jmp 0x248c8
jmp 0x249d4
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
jmp 0x2481f
jmp 0x249ed
addq $0x150, %rsp            # imm = 0x150
popq %rbp
retq
nopw %cs:(%rax,%rax)