// File: chhylp123[P]hifiasm/Correct.cpp
// Function: hc_aln_exz_simi_adv(long, long, ul_idx_t const*, hpc_t*, All_reads*, char*, UC_Read*, long, long, long, long, long, long, long, long, long, bit_extz_t*, long, double, long, long, long, long, overlap_region*, long)
int64_t hc_aln_exz_simi_adv(int64_t id, int64_t rev, const ul_idx_t *uref, hpc_t *hpc_g, 
All_reads *rref, char* qstr, UC_Read *tu, int64_t qs, int64_t qe, int64_t ts, int64_t te, 
int64_t qmin, int64_t qmax, int64_t tmin, int64_t tmax, int64_t mode, bit_extz_t *exz, int64_t q_tot, 
double e_rate, int64_t maxl, int64_t maxe, int64_t force_l, int64_t estimate_err, overlap_region *z,
int64_t gen_trace)
{
    clear_align(*exz); exz->thre = 0; ///mode cannot be 3
    int64_t thre, ql = qe - qs, thre0, pts = -1, pte = -1, pthre = -1, t_tot;
    if(estimate_err < 0) estimate_err = ql*e_rate;
    if(ql <= 0) return 0;
    if(hpc_g) t_tot = hpc_len(*hpc_g, id);
    else if(uref) t_tot = uref->ug->u.a[id].len;
    else t_tot = Get_READ_LENGTH((*rref), id);

    // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
    //     fprintf(stderr, "-0-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld)\n", 
    //     __func__, mode, qs, qe, ts, te);
    // }

    if(ql <= 16) {
        if(cal_exact_simi_exz(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, q_tot,
        t_tot, rev, id, mode, z)) {
            // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
            // fprintf(stderr, ", err::%d, thre::%d, scale::0(+)\n", exz->err, exz->thre);
            return 1;
        }
    }

    // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
    //     fprintf(stderr, "-a-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), ql::%ld, maxl::%ld, estimate_err::%ld, maxe::%ld\n", 
    //     __func__, mode, qs, qe, ts, te, ql, maxl, estimate_err, maxe);
    // }

    if(ql <= maxl && (estimate_err>>1) <= maxe) {
        thre = scale_ed_thre(estimate_err, maxe); 
        // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
        //     fprintf(stderr, "-1-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), thre::%ld\n", 
        //     __func__, mode, qs, qe, ts, te, thre);
        // }
        if(cal_exz_infi_simi_adv(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, thre, &pthre, 
                qmin, qmax, tmin, tmax, rev, id, mode, z, gen_trace)) {
            // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
            // fprintf(stderr, ", err::%d, thre::%d, scale::%ld(+)\n", exz->err, exz->thre, thre);
            // push_alnw(aux_o, exz);
            return 1;
        }

        thre0 = thre; thre = ql*e_rate; thre = scale_ed_thre(thre, maxe); 
        // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
        //     fprintf(stderr, "-2-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), thre::%ld\n", 
        //     __func__, mode, qs, qe, ts, te, thre);
        // }
        if(thre > thre0) {
            if(cal_exz_infi_simi_adv(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, thre, &pthre, 
                qmin, qmax, tmin, tmax, rev, id, mode, z, gen_trace)) {
                // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
                // fprintf(stderr, ", err::%d, thre::%d, scale::%ld(-)\n", exz->err, exz->thre, thre);
                // push_alnw(aux_o, exz);
                return 1;
            }
        }

        thre0 = thre; thre <<= 1; thre = scale_ed_thre(thre, maxe); 
        // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
        //     fprintf(stderr, "-3-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), thre::%ld\n", 
        //     __func__, mode, qs, qe, ts, te, thre);
        // }
        if(thre > thre0) {
            if(cal_exz_infi_simi_adv(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, thre, &pthre, 
                qmin, qmax, tmin, tmax, rev, id, mode, z, gen_trace)) {
                // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
                // fprintf(stderr, ", err::%d, thre::%d, scale::%ld(-)\n", exz->err, exz->thre, thre);
                // push_alnw(aux_o, exz);
                return 1;
            }
        }

        thre0 = thre; thre = ql*0.51; thre = scale_ed_thre(thre, maxe); 
        // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
        //     fprintf(stderr, "-4-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), thre::%ld\n", 
        //     __func__, mode, qs, qe, ts, te, thre);
        // }
        if(thre > thre0) {
            if(cal_exz_infi_simi_adv(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, thre, &pthre, 
                qmin, qmax, tmin, tmax, rev, id, mode, z, gen_trace)) {
                // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
                // fprintf(stderr, ", err::%d, thre::%d, scale::%ld(*)\n", exz->err, exz->thre, thre);
                // push_alnw(aux_o, exz);
                return 1;
            }
        }

        if(ql <= force_l) {
            thre = maxe; 
            // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
            //     fprintf(stderr, "-5-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld), thre::%ld\n", 
            //     __func__, mode, qs, qe, ts, te, thre);
            // }
            if(cal_exz_infi_simi_adv(uref, hpc_g, rref, exz, qstr, tu, qs, qe, ts, te, &pts, &pte, thre, &pthre, 
                qmin, qmax, tmin, tmax, rev, id, mode, z, gen_trace)) {
                // ref_cigar_check(qstr, tu, uref, hpc_g, rref, z->y_id, z->y_pos_strand, exz);
                // fprintf(stderr, ", err::%d, thre::%d, scale::%ld(*)\n", exz->err, exz->thre, thre);
                // push_alnw(aux_o, exz);
                return 1;
            }
        }
    }

    // if(ts == 18327 && te == 18601 && qs == 145990 && qe == 146191) {
    //     fprintf(stderr, "-b-[M::%s::] mode::%ld, q::[%ld, %ld), t::[%ld, %ld)\n", 
    //     __func__, mode, qs, qe, ts, te);
    // }
    // fprintf(stderr, ", err::%d, thre::%d\n", INT32_MAX, exz->thre);
    // if(mode == 0) {
    //     fprintf(stderr, "[M::%s::] pstr::%.*s\n", __func__, (int32_t)tu->length, tu->seq);
    //     fprintf(stderr, "[M::%s::] tstr::%.*s\n", __func__, (int32_t)(qe-qs), qstr+qs);
    // }
    return 0;
    
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq 0x98(%rbp), %rax
movq 0x90(%rbp), %rax
movq 0x88(%rbp), %rax
movq 0x80(%rbp), %rax
movq 0x78(%rbp), %rax
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
movq 0x38(%rbp), %rax
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x38(%rbp)
movq %rsi, -0x40(%rbp)
movq %rdx, -0x48(%rbp)
movq %rcx, -0x50(%rbp)
movq %r8, -0x58(%rbp)
movq %r9, -0x60(%rbp)
movsd %xmm0, -0x68(%rbp)
movq 0x60(%rbp), %rax
movl $0x7fffffff, 0x2c(%rax) # imm = 0x7FFFFFFF
movq 0x60(%rbp), %rax
movl $0x0, 0x28(%rax)
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
movq %rax, -0x78(%rbp)
movq $-0x1, -0x88(%rbp)
movq $-0x1, -0x90(%rbp)
movq $-0x1, -0x98(%rbp)
cmpq $0x0, 0x88(%rbp)
jge 0x8e719
cvtsi2sdq -0x78(%rbp), %xmm0
mulsd -0x68(%rbp), %xmm0
cvttsd2si %xmm0, %rax
movq %rax, 0x88(%rbp)
cmpq $0x0, -0x78(%rbp)
jg 0x8e72d
movq $0x0, -0x30(%rbp)
jmp 0x8f0c0
cmpq $0x0, -0x50(%rbp)
je 0x8e75b
movq -0x50(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x38(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
sarl %eax
cltq
movq %rax, -0xa0(%rbp)
jmp 0x8e7a0
cmpq $0x0, -0x48(%rbp)
je 0x8e787
movq -0x48(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x38(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movq %rax, -0xa0(%rbp)
jmp 0x8e79e
movq -0x58(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x38(%rbp), %rcx
movq (%rax,%rcx,8), %rax
movq %rax, -0xa0(%rbp)
jmp 0x8e7a0
cmpq $0x10, -0x78(%rbp)
jg 0x8e891
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq 0x20(%rbp), %r10
movq %r10, -0xc0(%rbp)
movq 0x28(%rbp), %r10
movq %r10, -0xb8(%rbp)
movq 0x30(%rbp), %r10
movq %r10, -0xb0(%rbp)
movq 0x68(%rbp), %r15
movq -0xa0(%rbp), %r14
movq -0x40(%rbp), %r10
movl %r10d, %ebx
movq -0x38(%rbp), %r10
movl %r10d, %r11d
movq 0x58(%rbp), %r10
movq 0x90(%rbp), %r12
movq %r12, -0xa8(%rbp)
leaq -0x88(%rbp), %r13
leaq -0x90(%rbp), %r12
movq %rax, (%rsp)
movq -0xc0(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0xb8(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0xb0(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0xa8(%rbp), %rax
movq %r13, 0x20(%rsp)
movq %r12, 0x28(%rsp)
movq %r15, 0x30(%rsp)
movq %r14, 0x38(%rsp)
movl %ebx, 0x40(%rsp)
movl %r11d, 0x48(%rsp)
movq %r10, 0x50(%rsp)
movq %rax, 0x58(%rsp)
callq 0x60560
cmpq $0x0, %rax
je 0x8e88f
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
jmp 0x8e891
movq -0x78(%rbp), %rax
cmpq 0x70(%rbp), %rax
jg 0x8f0b8
movq 0x88(%rbp), %rax
sarq %rax
cmpq 0x78(%rbp), %rax
jg 0x8f0b8
movq 0x88(%rbp), %rax
movl %eax, %edi
movq 0x78(%rbp), %rax
movl %eax, %esi
callq 0xb7290
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq %rax, -0x110(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x108(%rbp)
movq 0x28(%rbp), %rax
movq %rax, -0x100(%rbp)
movq 0x30(%rbp), %rax
movq %rax, -0xf8(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq 0x38(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq 0x40(%rbp), %r13
movq 0x48(%rbp), %r12
movq 0x50(%rbp), %r15
movq -0x40(%rbp), %rax
movl %eax, %r14d
movq -0x38(%rbp), %rax
movl %eax, %ebx
movq 0x58(%rbp), %r11
movq 0x90(%rbp), %r10
movq 0x98(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0xe8(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0x110(%rbp), %rax
movq %rax, (%rsp)
movq -0x108(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x100(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0xf8(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0xf0(%rbp), %rax
movq %rax, 0x20(%rsp)
movq -0xe8(%rbp), %rax
movq %rax, 0x28(%rsp)
movq -0xe0(%rbp), %rax
movq %rax, 0x30(%rsp)
movq -0xd8(%rbp), %rax
movq %rax, 0x38(%rsp)
movq -0xd0(%rbp), %rax
movq %rax, 0x40(%rsp)
movq -0xc8(%rbp), %rax
movq %r13, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movl %r14d, 0x60(%rsp)
movl %ebx, 0x68(%rsp)
movq %r11, 0x70(%rsp)
movq %r10, 0x78(%rsp)
movq %rax, 0x80(%rsp)
callq 0x5ffa0
cmpq $0x0, %rax
je 0x8ea35
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
movq -0x70(%rbp), %rax
movq %rax, -0x80(%rbp)
cvtsi2sdq -0x78(%rbp), %xmm0
mulsd -0x68(%rbp), %xmm0
cvttsd2si %xmm0, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl %eax, %edi
movq 0x78(%rbp), %rax
movl %eax, %esi
callq 0xb7290
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x80(%rbp), %rax
jle 0x8ebe0
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq %rax, -0x160(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x158(%rbp)
movq 0x28(%rbp), %rax
movq %rax, -0x150(%rbp)
movq 0x30(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x130(%rbp)
movq 0x38(%rbp), %rax
movq %rax, -0x120(%rbp)
movq 0x40(%rbp), %r13
movq 0x48(%rbp), %r12
movq 0x50(%rbp), %r15
movq -0x40(%rbp), %rax
movl %eax, %r14d
movq -0x38(%rbp), %rax
movl %eax, %ebx
movq 0x58(%rbp), %r11
movq 0x90(%rbp), %r10
movq 0x98(%rbp), %rax
movq %rax, -0x118(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0x138(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x128(%rbp)
movq -0x160(%rbp), %rax
movq %rax, (%rsp)
movq -0x158(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x150(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0x148(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0x140(%rbp), %rax
movq %rax, 0x20(%rsp)
movq -0x138(%rbp), %rax
movq %rax, 0x28(%rsp)
movq -0x130(%rbp), %rax
movq %rax, 0x30(%rsp)
movq -0x128(%rbp), %rax
movq %rax, 0x38(%rsp)
movq -0x120(%rbp), %rax
movq %rax, 0x40(%rsp)
movq -0x118(%rbp), %rax
movq %r13, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movl %r14d, 0x60(%rsp)
movl %ebx, 0x68(%rsp)
movq %r11, 0x70(%rsp)
movq %r10, 0x78(%rsp)
movq %rax, 0x80(%rsp)
callq 0x5ffa0
cmpq $0x0, %rax
je 0x8ebde
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
jmp 0x8ebe0
movq -0x70(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x70(%rbp), %rax
shlq %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl %eax, %edi
movq 0x78(%rbp), %rax
movl %eax, %esi
callq 0xb7290
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x80(%rbp), %rax
jle 0x8ed82
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq %rax, -0x1b0(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x1a8(%rbp)
movq 0x28(%rbp), %rax
movq %rax, -0x1a0(%rbp)
movq 0x30(%rbp), %rax
movq %rax, -0x198(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x180(%rbp)
movq 0x38(%rbp), %rax
movq %rax, -0x170(%rbp)
movq 0x40(%rbp), %r13
movq 0x48(%rbp), %r12
movq 0x50(%rbp), %r15
movq -0x40(%rbp), %rax
movl %eax, %r14d
movq -0x38(%rbp), %rax
movl %eax, %ebx
movq 0x58(%rbp), %r11
movq 0x90(%rbp), %r10
movq 0x98(%rbp), %rax
movq %rax, -0x168(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0x190(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0x188(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x178(%rbp)
movq -0x1b0(%rbp), %rax
movq %rax, (%rsp)
movq -0x1a8(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x1a0(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0x198(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0x190(%rbp), %rax
movq %rax, 0x20(%rsp)
movq -0x188(%rbp), %rax
movq %rax, 0x28(%rsp)
movq -0x180(%rbp), %rax
movq %rax, 0x30(%rsp)
movq -0x178(%rbp), %rax
movq %rax, 0x38(%rsp)
movq -0x170(%rbp), %rax
movq %rax, 0x40(%rsp)
movq -0x168(%rbp), %rax
movq %r13, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movl %r14d, 0x60(%rsp)
movl %ebx, 0x68(%rsp)
movq %r11, 0x70(%rsp)
movq %r10, 0x78(%rsp)
movq %rax, 0x80(%rsp)
callq 0x5ffa0
cmpq $0x0, %rax
je 0x8ed80
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
jmp 0x8ed82
movq -0x70(%rbp), %rax
movq %rax, -0x80(%rbp)
cvtsi2sdq -0x78(%rbp), %xmm0
movsd 0x2f3520(%rip), %xmm1   # 0x3822b8
mulsd %xmm1, %xmm0
cvttsd2si %xmm0, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl %eax, %edi
movq 0x78(%rbp), %rax
movl %eax, %esi
callq 0xb7290
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
cmpq -0x80(%rbp), %rax
jle 0x8ef34
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq %rax, -0x200(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x1f8(%rbp)
movq 0x28(%rbp), %rax
movq %rax, -0x1f0(%rbp)
movq 0x30(%rbp), %rax
movq %rax, -0x1e8(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x1d0(%rbp)
movq 0x38(%rbp), %rax
movq %rax, -0x1c0(%rbp)
movq 0x40(%rbp), %r13
movq 0x48(%rbp), %r12
movq 0x50(%rbp), %r15
movq -0x40(%rbp), %rax
movl %eax, %r14d
movq -0x38(%rbp), %rax
movl %eax, %ebx
movq 0x58(%rbp), %r11
movq 0x90(%rbp), %r10
movq 0x98(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0x1e0(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0x1d8(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x1c8(%rbp)
movq -0x200(%rbp), %rax
movq %rax, (%rsp)
movq -0x1f8(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x1f0(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0x1e8(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0x1e0(%rbp), %rax
movq %rax, 0x20(%rsp)
movq -0x1d8(%rbp), %rax
movq %rax, 0x28(%rsp)
movq -0x1d0(%rbp), %rax
movq %rax, 0x30(%rsp)
movq -0x1c8(%rbp), %rax
movq %rax, 0x38(%rsp)
movq -0x1c0(%rbp), %rax
movq %rax, 0x40(%rsp)
movq -0x1b8(%rbp), %rax
movq %r13, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movl %r14d, 0x60(%rsp)
movl %ebx, 0x68(%rsp)
movq %r11, 0x70(%rsp)
movq %r10, 0x78(%rsp)
movq %rax, 0x80(%rsp)
callq 0x5ffa0
cmpq $0x0, %rax
je 0x8ef32
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
jmp 0x8ef34
movq -0x78(%rbp), %rax
cmpq 0x80(%rbp), %rax
jg 0x8f0b6
movq 0x78(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x48(%rbp), %rdi
movq -0x50(%rbp), %rsi
movq -0x58(%rbp), %rdx
movq 0x60(%rbp), %rcx
movq -0x60(%rbp), %r8
movq 0x10(%rbp), %r9
movq 0x18(%rbp), %rax
movq %rax, -0x250(%rbp)
movq 0x20(%rbp), %rax
movq %rax, -0x248(%rbp)
movq 0x28(%rbp), %rax
movq %rax, -0x240(%rbp)
movq 0x30(%rbp), %rax
movq %rax, -0x238(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x220(%rbp)
movq 0x38(%rbp), %rax
movq %rax, -0x210(%rbp)
movq 0x40(%rbp), %r13
movq 0x48(%rbp), %r12
movq 0x50(%rbp), %r15
movq -0x40(%rbp), %rax
movl %eax, %r14d
movq -0x38(%rbp), %rax
movl %eax, %ebx
movq 0x58(%rbp), %r11
movq 0x90(%rbp), %r10
movq 0x98(%rbp), %rax
movq %rax, -0x208(%rbp)
leaq -0x88(%rbp), %rax
movq %rax, -0x230(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0x228(%rbp)
leaq -0x98(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x250(%rbp), %rax
movq %rax, (%rsp)
movq -0x248(%rbp), %rax
movq %rax, 0x8(%rsp)
movq -0x240(%rbp), %rax
movq %rax, 0x10(%rsp)
movq -0x238(%rbp), %rax
movq %rax, 0x18(%rsp)
movq -0x230(%rbp), %rax
movq %rax, 0x20(%rsp)
movq -0x228(%rbp), %rax
movq %rax, 0x28(%rsp)
movq -0x220(%rbp), %rax
movq %rax, 0x30(%rsp)
movq -0x218(%rbp), %rax
movq %rax, 0x38(%rsp)
movq -0x210(%rbp), %rax
movq %rax, 0x40(%rsp)
movq -0x208(%rbp), %rax
movq %r13, 0x48(%rsp)
movq %r12, 0x50(%rsp)
movq %r15, 0x58(%rsp)
movl %r14d, 0x60(%rsp)
movl %ebx, 0x68(%rsp)
movq %r11, 0x70(%rsp)
movq %r10, 0x78(%rsp)
movq %rax, 0x80(%rsp)
callq 0x5ffa0
cmpq $0x0, %rax
je 0x8f0b4
movq $0x1, -0x30(%rbp)
jmp 0x8f0c0
jmp 0x8f0b6
jmp 0x8f0b8
movq $0x0, -0x30(%rbp)
movq -0x30(%rbp), %rax
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)