// File: chhylp123[P]hifiasm/Overlaps.cpp
// Function: get_ref_nid_flank(u_trans_t*, ma_ug_t*, ma_ug_t*, ma_ug_t*, scaf_res_t*, scaf_res_t*, unsigned long, unsigned long, unsigned long, asg32_v*)
uint64_t get_ref_nid_flank(u_trans_t *z, ma_ug_t *ref, ma_ug_t *hu1, ma_ug_t *hu2, scaf_res_t *cp1, scaf_res_t *cp2, uint64_t is_beg, uint64_t gap_bd, uint64_t flank_len, asg32_v *res)
{
    scaf_res_t *sc = NULL; uint64_t id, s_end, e_end, rn = res->n;
    if(z->tn < hu1->u.n) {
        sc = cp1; id = z->tn;
    } else {
        sc = cp2; id = z->tn - hu1->u.n;
    }

    if(is_beg) {
        s_end = 0; e_end = 1;
    } else {
        s_end = 1; e_end = 0;
    }

    if(z->rev) {
        s_end ^= 1; e_end ^= 1;
    }


    ul_vec_t *idx = &(sc->a[id]); uint64_t k, m, a_n, os, oe, m0; 
    uc_block_t *a, *am = NULL; uint64_t max_len = 0, cgap, clen; int64_t ami, amn = 0, as, ae, amz; 
    // if(z->tn == 5) {
    //     fprintf(stderr, "\n[M::%s] h1tg%.6u%c(%c)\ts::%u\te::%u\ts_end::%lu\te_end::%lu\n", __func__, z->tn+1, "lc"[hu1->u.a[z->tn].circ], "+-"[z->rev], z->ts, z->te, s_end, e_end);
    // }
    
    for (k = 0; k < idx->bb.n; k++) {
        a = idx->bb.a + idx->bb.a[k].ts; a_n = idx->bb.a[k].te - idx->bb.a[k].ts;
        os = MAX(z->ts, idx->bb.a[k].qs); 
        oe = MIN(z->te, idx->bb.a[k].qe);
        // if(z->tn == 5) {
        //     fprintf(stderr, "[M::%s] idx->bb.a[%lu]::[%u, %u), o[%lu, %lu), a_n::%lu\n", __func__, k, idx->bb.a[k].qs, idx->bb.a[k].qe, os, oe, a_n);
        // }
        if(os >= oe) continue;
        for(m = 0; m < a_n && a[m].qe <= os; m++); 
        // {
            // if(z->tn == 5) fprintf(stderr, "+(%lu)utg%.6u%c[%u,%u),", m, (a[m].hid)+1, "lc"[ref->u.a[a[m].hid].circ], a[m].qs, a[m].qe);
        // }
        // if(z->tn == 5) fprintf(stderr, "\n[M::%s] +m::%lu\n", __func__, m);
        if(m >= a_n) continue;
        for(m0 = m; m < a_n && a[m].qs < oe; m++); 
        // {
            // if(z->tn == 5) fprintf(stderr, "-(%lu)utg%.6u%c[%u,%u),", m, (a[m].hid)+1, "lc"[ref->u.a[a[m].hid].circ], a[m].qs, a[m].qe);
        // }
        // if(z->tn == 5) fprintf(stderr, "\n[M::%s] -m::%lu\n", __func__, m);
        if(m <= m0) continue;

        os = MAX(z->ts, a[m0].qs); 
        oe = MIN(z->te, a[m-1].qe);
        // if(z->tn == 5) {
        //     fprintf(stderr, "[M::%s] m0::%lu, m::%lu, o[%lu, %lu), a_n::%lu\n", __func__, m0, m, os, oe, a_n);
        // }
        if(oe <= os) continue;
        clen = oe - os; cgap = 0;
        if(s_end) {
            cgap = os - z->ts;
        } else if(e_end) {
            cgap = z->te - oe;
        }
        if(cgap > gap_bd) continue;
        if(clen > max_len) {
            max_len = clen; am = a + m0; amn = m - m0;
        }
    }

    // if(z->tn == 49 && z->ts == 0 && z->te == 2143149) {
    //     fprintf(stderr, "-0-[M::%s] h1tg%.6ul(%c)\tts::%u\tte::%u\tamn::%ld\ts_end::%lu\te_end::%lu\n", __func__,
    //     z->tn+1, "+-"[z->rev], z->ts, z->te, amn, s_end, e_end);
    // }

    // if(z->tn == 5) fprintf(stderr, "[M::%s] amn::%ld\n", __func__, amn);

    if((!am) || (!amn)) return 0;
    os = oe = 0; as = 0; ae = amn;
    if(s_end) {
        for(ami = 0; (ami < amn) && ((z->ts + flank_len) >= am[ami].qe); ami++);
        if((ami < amn) && ((z->ts + flank_len) >= am[ami].qs)) ami++;
        as = 0; ae = ami;
    } else if(e_end) {
        for(ami = amn - 1; (ami >= 0) && (z->te <= (am[ami].qs + flank_len)); ami--);
        if((ami >= 0) && (z->te <= (am[ami].qe + flank_len))) ami--;
        ami++; as = ami; ae = amn;
    }
    // if(z->tn == 49 && z->ts == 0 && z->te == 2143149) {
    //     fprintf(stderr, "-1-[M::%s] h1tg%.6ul(%c)\tts::%u\tte::%u\tas::%ld\tae::%ld\n", __func__,
    //     z->tn+1, "+-"[z->rev], z->ts, z->te, as, ae);
    // }
    // if(z->tn == 5) fprintf(stderr, "+[M::%s] as::%ld, ae::%ld\n", __func__, as, ae);
    if(as >= ae) return 0;
    
    ///make sure there are no identical node
    if(s_end) {
        for (ami = as; ami < ae; ami++) {
            for (amz = ami + 1; (amz < ae) && (am[ami].hid != am[amz].hid); amz++);
            if(amz < ae) {
                ae = ami + 1; break;
            }
        }
    } else if(e_end) {
        for (ami = ae - 1; ami >= as; ami--) {
            for (amz = ami - 1; (amz >= as) && (am[ami].hid != am[amz].hid); amz--);
            if(amz >= as) {
                as = ami; break;
            }
        }
    }
    // if(z->tn == 49 && z->ts == 0 && z->te == 2143149) {
    //     fprintf(stderr, "-1-[M::%s] h1tg%.6ul(%c)\tts::%u\tte::%u\tas::%ld\tae::%ld\n", __func__,
    //     z->tn+1, "+-"[z->rev], z->ts, z->te, as, ae);
    // }
    // if(z->tn == 5) fprintf(stderr, "+[M::%s] as::%ld, ae::%ld\n", __func__, as, ae);
    if(as >= ae) return 0;

    uint32_t *fp = NULL, r2n = 0;
    kv_resize(uint32_t, *res, rn + ((ae - as)<<1));
    for (ami = as; ami < ae; ami++) {
        m = ((uint64_t)(am[ami].hid<<1))|((uint64_t)(!!(am[ami].rev))); m ^= ((uint64_t)(!!(z->rev)));
        kv_push(uint32_t, *res, m);
    }
    rn = res->n - rn;
    if(z->rev) {
        fp = res->a + res->n - rn; r2n = rn>>1;
        for (k = 0; k < r2n; k++) {
            m = fp[k]; fp[k] = fp[rn - k -1]; fp[rn - k -1] = m;
        }
    }

    if(s_end) {
        for (ami = as; ami < ae; ami++) {
            m = ((am[ami].qs>=z->ts)?(am[ami].qs-z->ts):(0));
            kv_push(uint32_t, *res, m);
        }
    } else if(e_end) {
        for (ami = as; ami < ae; ami++) {
            m = ((z->te>=am[ami].qe)?(z->te-am[ami].qe):(0));
            kv_push(uint32_t, *res, m);
        }
    }
    if(z->rev) {
        fp = res->a + res->n - rn; r2n = rn>>1;
        for (k = 0; k < r2n; k++) {
            m = fp[k]; fp[k] = fp[rn - k - 1]; fp[rn - k - 1] = m;
        }
    }
    
    return rn;
    // return ((uint64_t)(am->hid<<1))|((uint64_t)(!!(am->rev))); 
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
movq $0x0, -0x40(%rbp)
movq 0x28(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movq -0x20(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x12992b
movq -0x30(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movq %rax, -0x48(%rbp)
jmp 0x129945
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x10(%rbp), %rax
movl 0x14(%rax), %eax
movq -0x20(%rbp), %rcx
subq (%rcx), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, 0x10(%rbp)
je 0x12995e
movq $0x0, -0x50(%rbp)
movq $0x1, -0x58(%rbp)
jmp 0x12996e
movq $0x1, -0x50(%rbp)
movq $0x0, -0x58(%rbp)
movq -0x10(%rbp), %rax
movb 0x28(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
je 0x129996
movq -0x50(%rbp), %rax
xorq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x58(%rbp), %rax
xorq $0x1, %rax
movq %rax, -0x58(%rbp)
movq -0x40(%rbp), %rax
movq (%rax), %rax
imulq $0x58, -0x48(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq $0x0, -0xa8(%rbp)
movq $0x0, -0xb0(%rbp)
movq $0x0, -0xd0(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq -0x68(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x129d5d
movq -0x68(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x68(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x70(%rbp), %rdx
addq %rdx, %rcx
movl 0xc(%rcx), %ecx
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0x68(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x70(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq -0x68(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x70(%rbp), %rdx
addq %rdx, %rcx
subl 0xc(%rcx), %eax
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0x68(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x70(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
jb 0x129a64
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0xf8(%rbp)
jmp 0x129a7d
movq -0x68(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x70(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0xf8(%rbp)
movl -0xf8(%rbp), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0x68(%rbp), %rcx
movq 0x30(%rcx), %rcx
imulq $0x24, -0x70(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
ja 0x129ab7
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0xfc(%rbp)
jmp 0x129ad0
movq -0x68(%rbp), %rax
movq 0x30(%rax), %rax
imulq $0x24, -0x70(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0xfc(%rbp)
movl -0xfc(%rbp), %eax
movl %eax, %eax
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rax
cmpq -0x90(%rbp), %rax
jb 0x129af4
jmp 0x129d4c
movq $0x0, -0x78(%rbp)
movq -0x78(%rbp), %rcx
xorl %eax, %eax
cmpq -0x80(%rbp), %rcx
movb %al, -0xfd(%rbp)
jae 0x129b30
movq -0xa0(%rbp), %rax
imulq $0x24, -0x78(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
cmpq -0x88(%rbp), %rax
setbe %al
movb %al, -0xfd(%rbp)
movb -0xfd(%rbp), %al
testb $0x1, %al
jne 0x129b3c
jmp 0x129b4c
jmp 0x129b3e
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x129afc
movq -0x78(%rbp), %rax
cmpq -0x80(%rbp), %rax
jb 0x129b5b
jmp 0x129d4c
movq -0x78(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x78(%rbp), %rcx
xorl %eax, %eax
cmpq -0x80(%rbp), %rcx
movb %al, -0xfe(%rbp)
jae 0x129b9a
movq -0xa0(%rbp), %rax
imulq $0x24, -0x78(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
cmpq -0x90(%rbp), %rax
setb %al
movb %al, -0xfe(%rbp)
movb -0xfe(%rbp), %al
testb $0x1, %al
jne 0x129ba6
jmp 0x129bb6
jmp 0x129ba8
movq -0x78(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x78(%rbp)
jmp 0x129b66
movq -0x78(%rbp), %rax
cmpq -0x98(%rbp), %rax
ja 0x129bc8
jmp 0x129d4c
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movq -0xa0(%rbp), %rcx
imulq $0x24, -0x98(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x4(%rcx), %eax
jb 0x129bf5
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, -0x104(%rbp)
jmp 0x129c10
movq -0xa0(%rbp), %rax
imulq $0x24, -0x98(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, -0x104(%rbp)
movl -0x104(%rbp), %eax
movl %eax, %eax
movq %rax, -0x88(%rbp)
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xa0(%rbp), %rcx
movq -0x78(%rbp), %rdx
subq $0x1, %rdx
imulq $0x24, %rdx, %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
ja 0x129c50
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, -0x108(%rbp)
jmp 0x129c6f
movq -0xa0(%rbp), %rax
movq -0x78(%rbp), %rcx
subq $0x1, %rcx
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x108(%rbp)
movl -0x108(%rbp), %eax
movl %eax, %eax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x88(%rbp), %rax
ja 0x129c93
jmp 0x129d4c
movq -0x90(%rbp), %rax
subq -0x88(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq $0x0, -0xb8(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x129cd4
movq -0x88(%rbp), %rax
movq -0x10(%rbp), %rcx
movl 0xc(%rcx), %ecx
subq %rcx, %rax
movq %rax, -0xb8(%rbp)
jmp 0x129cf2
cmpq $0x0, -0x58(%rbp)
je 0x129cf0
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
subq -0x90(%rbp), %rax
movq %rax, -0xb8(%rbp)
jmp 0x129cf2
movq -0xb8(%rbp), %rax
cmpq 0x18(%rbp), %rax
jbe 0x129d01
jmp 0x129d4c
movq -0xc0(%rbp), %rax
cmpq -0xb0(%rbp), %rax
jbe 0x129d4a
movq -0xc0(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xa0(%rbp), %rax
imulq $0x24, -0x98(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xa8(%rbp)
movq -0x78(%rbp), %rax
subq -0x98(%rbp), %rax
movq %rax, -0xd0(%rbp)
jmp 0x129d4c
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x1299d2
cmpq $0x0, -0xa8(%rbp)
je 0x129d71
cmpq $0x0, -0xd0(%rbp)
jne 0x129d7e
movq $0x0, -0x8(%rbp)
jmp 0x12a7ee
movq $0x0, -0x90(%rbp)
movq $0x0, -0x88(%rbp)
movq $0x0, -0xd8(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
cmpq $0x0, -0x50(%rbp)
je 0x129e8e
movq $0x0, -0xc8(%rbp)
movq -0xc8(%rbp), %rcx
xorl %eax, %eax
cmpq -0xd0(%rbp), %rcx
movb %al, -0x109(%rbp)
jge 0x129e07
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
addq 0x20(%rbp), %rax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
cmpq %rcx, %rax
setae %al
movb %al, -0x109(%rbp)
movb -0x109(%rbp), %al
testb $0x1, %al
jne 0x129e13
jmp 0x129e29
jmp 0x129e15
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x129dc3
movq -0xc8(%rbp), %rax
cmpq -0xd0(%rbp), %rax
jge 0x129e70
movq -0x10(%rbp), %rax
movl 0xc(%rax), %eax
addq 0x20(%rbp), %rax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
movl 0x4(%rcx), %ecx
cmpq %rcx, %rax
jb 0x129e70
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
movq $0x0, -0xd8(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0xe0(%rbp)
jmp 0x129f7c
cmpq $0x0, -0x58(%rbp)
je 0x129f7a
movq -0xd0(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xc8(%rbp)
xorl %eax, %eax
cmpq $0x0, -0xc8(%rbp)
movb %al, -0x10a(%rbp)
jl 0x129ee9
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
movl 0x4(%rcx), %ecx
addq 0x20(%rbp), %rcx
cmpq %rcx, %rax
setbe %al
movb %al, -0x10a(%rbp)
movb -0x10a(%rbp), %al
testb $0x1, %al
jne 0x129ef5
jmp 0x129f0b
jmp 0x129ef7
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x129eab
cmpq $0x0, -0xc8(%rbp)
jl 0x129f4c
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
addq 0x20(%rbp), %rcx
cmpq %rcx, %rax
ja 0x129f4c
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xd0(%rbp), %rax
movq %rax, -0xe0(%rbp)
jmp 0x129f7c
movq -0xd8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jl 0x129f99
movq $0x0, -0x8(%rbp)
jmp 0x12a7ee
cmpq $0x0, -0x50(%rbp)
je 0x12a085
movq -0xd8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x12a080
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rcx
xorl %eax, %eax
cmpq -0xe0(%rbp), %rcx
movb %al, -0x10b(%rbp)
jge 0x12a021
movq -0xa8(%rbp), %rax
imulq $0x24, -0xc8(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xe8(%rbp), %rdx
addq %rdx, %rcx
cmpl (%rcx), %eax
setne %al
movb %al, -0x10b(%rbp)
movb -0x10b(%rbp), %al
testb $0x1, %al
jne 0x12a02d
jmp 0x12a043
jmp 0x12a02f
movq -0xe8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe8(%rbp)
jmp 0x129fd8
movq -0xe8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x12a067
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xe0(%rbp)
jmp 0x12a080
jmp 0x12a069
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x129fb2
jmp 0x12a170
cmpq $0x0, -0x58(%rbp)
je 0x12a16e
movq -0xe0(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpq -0xd8(%rbp), %rax
jl 0x12a16c
movq -0xc8(%rbp), %rax
subq $0x1, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rcx
xorl %eax, %eax
cmpq -0xd8(%rbp), %rcx
movb %al, -0x10c(%rbp)
jl 0x12a111
movq -0xa8(%rbp), %rax
imulq $0x24, -0xc8(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xe8(%rbp), %rdx
addq %rdx, %rcx
cmpl (%rcx), %eax
setne %al
movb %al, -0x10c(%rbp)
movb -0x10c(%rbp), %al
testb $0x1, %al
jne 0x12a11d
jmp 0x12a133
jmp 0x12a11f
movq -0xe8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xe8(%rbp)
jmp 0x12a0c8
movq -0xe8(%rbp), %rax
cmpq -0xd8(%rbp), %rax
jl 0x12a153
movq -0xc8(%rbp), %rax
movq %rax, -0xd8(%rbp)
jmp 0x12a16c
jmp 0x12a155
movq -0xc8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x12a0a2
jmp 0x12a16e
jmp 0x12a170
movq -0xd8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jl 0x12a18d
movq $0x0, -0x8(%rbp)
jmp 0x12a7ee
movq $0x0, -0xf0(%rbp)
movl $0x0, -0xf4(%rbp)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x60(%rbp), %rcx
movq -0xe0(%rbp), %rdx
subq -0xd8(%rbp), %rdx
shlq %rdx
addq %rdx, %rcx
cmpq %rcx, %rax
jae 0x12a2a6
movq -0x60(%rbp), %rcx
movq -0xe0(%rbp), %rax
subq -0xd8(%rbp), %rax
shlq %rax
addq %rax, %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq 0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq 0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq 0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq 0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq 0x28(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x12a2a8
movq -0xd8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x12a3e4
movq -0xa8(%rbp), %rax
imulq $0x24, -0xc8(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
shll %eax
movl %eax, %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
movb 0x20(%rcx), %cl
shrb $0x5, %cl
andb $0x1, %cl
cmpb $0x0, %cl
setne %cl
xorb $-0x1, %cl
xorb $-0x1, %cl
andb $0x1, %cl
movzbl %cl, %ecx
orq %rcx, %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rax
movb 0x28(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
xorq -0x78(%rbp), %rax
movq %rax, -0x78(%rbp)
movq 0x28(%rbp), %rax
movq (%rax), %rax
movq 0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x12a3a9
movq 0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x12a368
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x118(%rbp)
jmp 0x12a376
movl $0x2, %eax
movq %rax, -0x118(%rbp)
jmp 0x12a376
movq -0x118(%rbp), %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x78(%rbp), %rax
movl %eax, %edx
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rbp), %rsi
movq (%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, (%rsi)
movl %edx, (%rax,%rcx,4)
jmp 0x12a3cd
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x12a2b6
movq 0x28(%rbp), %rax
movq (%rax), %rax
subq -0x60(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movb 0x28(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
je 0x12a4b7
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rbp), %rcx
movq (%rcx), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
xorl %ecx, %ecx
subq -0x60(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0xf0(%rbp)
movq -0x60(%rbp), %rax
shrq %rax
movl %eax, -0xf4(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl -0xf4(%rbp), %ecx
cmpq %rcx, %rax
jae 0x12a4b5
movq -0xf0(%rbp), %rax
movq -0x70(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq %rax, -0x78(%rbp)
movq -0xf0(%rbp), %rax
movq -0x60(%rbp), %rcx
subq -0x70(%rbp), %rcx
subq $0x1, %rcx
movl (%rax,%rcx,4), %edx
movq -0xf0(%rbp), %rax
movq -0x70(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x78(%rbp), %rax
movl %eax, %edx
movq -0xf0(%rbp), %rax
movq -0x60(%rbp), %rcx
subq -0x70(%rbp), %rcx
subq $0x1, %rcx
movl %edx, (%rax,%rcx,4)
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x12a446
jmp 0x12a4b7
cmpq $0x0, -0x50(%rbp)
je 0x12a5ed
movq -0xd8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x12a5e8
movq -0xa8(%rbp), %rax
imulq $0x24, -0xc8(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
cmpl 0xc(%rcx), %eax
jb 0x12a526
movq -0xa8(%rbp), %rax
imulq $0x24, -0xc8(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movq -0x10(%rbp), %rcx
subl 0xc(%rcx), %eax
movl %eax, -0x11c(%rbp)
jmp 0x12a530
xorl %eax, %eax
movl %eax, -0x11c(%rbp)
jmp 0x12a530
movl -0x11c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq 0x28(%rbp), %rax
movq (%rax), %rax
movq 0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x12a5ad
movq 0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x12a56c
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x128(%rbp)
jmp 0x12a57a
movl $0x2, %eax
movq %rax, -0x128(%rbp)
jmp 0x12a57a
movq -0x128(%rbp), %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x78(%rbp), %rax
movl %eax, %edx
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rbp), %rsi
movq (%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, (%rsi)
movl %edx, (%rax,%rcx,4)
jmp 0x12a5d1
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x12a4d0
jmp 0x12a722
cmpq $0x0, -0x58(%rbp)
je 0x12a720
movq -0xd8(%rbp), %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpq -0xe0(%rbp), %rax
jge 0x12a71e
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
cmpl 0x8(%rcx), %eax
jb 0x12a65c
movq -0x10(%rbp), %rax
movl 0x10(%rax), %eax
movq -0xa8(%rbp), %rcx
imulq $0x24, -0xc8(%rbp), %rdx
addq %rdx, %rcx
subl 0x8(%rcx), %eax
movl %eax, -0x12c(%rbp)
jmp 0x12a666
xorl %eax, %eax
movl %eax, -0x12c(%rbp)
jmp 0x12a666
movl -0x12c(%rbp), %eax
movl %eax, %eax
movq %rax, -0x78(%rbp)
movq 0x28(%rbp), %rax
movq (%rax), %rax
movq 0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x12a6e3
movq 0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x12a6a2
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x138(%rbp)
jmp 0x12a6b0
movl $0x2, %eax
movq %rax, -0x138(%rbp)
jmp 0x12a6b0
movq -0x138(%rbp), %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq 0x28(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq 0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x78(%rbp), %rax
movl %eax, %edx
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rbp), %rsi
movq (%rsi), %rcx
movq %rcx, %rdi
addq $0x1, %rdi
movq %rdi, (%rsi)
movl %edx, (%rax,%rcx,4)
jmp 0x12a707
movq -0xc8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xc8(%rbp)
jmp 0x12a606
jmp 0x12a720
jmp 0x12a722
movq -0x10(%rbp), %rax
movb 0x28(%rax), %al
shrb $0x6, %al
andb $0x1, %al
cmpb $0x0, %al
je 0x12a7e6
movq 0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x28(%rbp), %rcx
movq (%rcx), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
xorl %ecx, %ecx
subq -0x60(%rbp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, -0xf0(%rbp)
movq -0x60(%rbp), %rax
shrq %rax
movl %eax, -0xf4(%rbp)
movq $0x0, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl -0xf4(%rbp), %ecx
cmpq %rcx, %rax
jae 0x12a7e4
movq -0xf0(%rbp), %rax
movq -0x70(%rbp), %rcx
movl (%rax,%rcx,4), %eax
movq %rax, -0x78(%rbp)
movq -0xf0(%rbp), %rax
movq -0x60(%rbp), %rcx
subq -0x70(%rbp), %rcx
subq $0x1, %rcx
movl (%rax,%rcx,4), %edx
movq -0xf0(%rbp), %rax
movq -0x70(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x78(%rbp), %rax
movl %eax, %edx
movq -0xf0(%rbp), %rax
movq -0x60(%rbp), %rcx
subq -0x70(%rbp), %rcx
subq $0x1, %rcx
movl %edx, (%rax,%rcx,4)
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
jmp 0x12a775
jmp 0x12a7e6
movq -0x60(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
nopl (%rax,%rax)