// File: /workspace/github_cpp_makefile_star2_O2/chhylp123[P]hifiasm/Overlaps.cpp
// Function: gen_fg(ma_ug_t*, asg_t*, ma_hit_t_alloc*, ma_sub_t*, int, int, int)
ma_ug_t* gen_fg(ma_ug_t *ug, asg_t *rg, ma_hit_t_alloc* src, ma_sub_t *cov, int32_t max_hang, int32_t min_ovlp, int32_t gap_fuzz)
{
    uint32_t *idx; MALLOC(idx, rg->n_seq); 
    memset(idx, -1, sizeof((*idx))*rg->n_seq);
    ma_ug_t *fg = copy_untig_graph(ug); asg_cleanup(fg->g);///some edges might be deleted
    kvec_t(uint64_t) srt; kv_init(srt);    
    uint64_t i, k, l, m, rv, rw, uv, uw, zn, z, nist = 0; ma_utg_t *u;
    for (k = 0; k < fg->u.n; k++) {
        u = &(ug->u.a[k]); fg->g->seq[k].c = PRIMARY_LABLE;
        if((u->circ) || (u->n == 0)) continue;
        m = k<<1; m |= (((uint64_t)Uc_beg((*u)))<<32); kv_push(uint64_t, srt, m);///((uint32_t)(((*u)).a[0]>>32));
        m = (k<<1)+1; m |= (((uint64_t)Uc_end((*u)))<<32); kv_push(uint64_t, srt, m);
    }
    

    radix_sort_arch64(srt.a, srt.a+srt.n);
    for (k = 1, l = 0; k <= srt.n; k++) {
        if(k == srt.n || (srt.a[k]>>33) != (srt.a[l]>>33)) {
            idx[srt.a[l]>>33] = l;
            l = k;
        }
    }

    ma_hit_t_alloc* x; asg_arc_t *za; 
    ma_hit_t *h; ma_sub_t *sq, *st;
    int32_t r; asg_arc_t t0, t1, *p;
    for (k = 0; k < fg->u.n; k++) {
        u = &(ug->u.a[k]);
        if((u->circ) || (u->n == 0)) continue;

        uv = k<<1; rv = Uc_end((*u))^1;
        x = &(src[rv>>1]); 
        za = asg_arc_a(ug->g, uv); 
        zn = asg_arc_n(ug->g, uv); 
        for (i = 0; i < x->length; i++) {
            h = &(x->buffer[i]);
            // if(!(h->el)) continue;
            sq = &(cov[Get_qn(*h)]); st = &(cov[Get_tn(*h)]);
            if(st->del || rg->seq[Get_tn(*h)].del) continue;
            r = ma_hit2arc(h, sq->e - sq->s, st->e - st->s, max_hang, 
                                asm_opt.max_hang_rate, min_ovlp, &t0);
        
            ///if it is a contained read, skip
            if(r < 0) continue;
            if((t0.ul>>32) != rv) continue;
            rw = t0.v;
            if(idx[rw>>1] == ((uint32_t)-1)) continue;
            if(!(get_edge_from_source(src, cov, NULL, max_hang, min_ovlp, t0.ul>>32, t0.v, &t0))) continue;

            m = idx[rw>>1]; assert((srt.a[m]>>33) == (rw>>1));
            for (; m < srt.n && (srt.a[m]>>33) == (rw>>1); m++) {
                if(rw == (srt.a[m]>>32)) {
                    uw = (uint32_t)srt.a[m];
                    if(uv == uw) continue;
                    for (z = 0; z < zn; z++) {
                        if((!za[z].del) && (za[z].v==uw)) break;
                    }
                    if(z < zn) continue;
                    if(get_edge_from_source(src, cov, NULL, max_hang, min_ovlp, (t0.v^1), ((t0.ul>>32)^1), &t1)) {
                        p = asg_arc_pushp(fg->g); *p = t0; 
                        p->ul<<=32; p->ul>>=32; p->ul |= (uv<<32); p->v = uw;

                        p = asg_arc_pushp(fg->g); *p = t1;
                        p->ul<<=32; p->ul>>=32; p->ul |= ((uw^1)<<32); p->v = uv^1;
                        nist++;
                    }
                }
            }
        }


        uv = (k<<1)+1; rv = Uc_beg((*u))^1;
        x = &(src[rv>>1]); 
        za = asg_arc_a(ug->g, uv); 
        zn = asg_arc_n(ug->g, uv); 
        for (i = 0; i < x->length; i++) {
            h = &(x->buffer[i]);
            // if(!(h->el)) continue;
            sq = &(cov[Get_qn(*h)]); st = &(cov[Get_tn(*h)]);
            if(st->del || rg->seq[Get_tn(*h)].del) continue;
            r = ma_hit2arc(h, sq->e - sq->s, st->e - st->s, max_hang, 
                                asm_opt.max_hang_rate, min_ovlp, &t0);
        
            ///if it is a contained read, skip
            if(r < 0) continue;
            if((t0.ul>>32) != rv) continue;
            rw = t0.v;
            if(idx[rw>>1] == ((uint32_t)-1)) continue;
            if(!(get_edge_from_source(src, cov, NULL, max_hang, min_ovlp, t0.ul>>32, t0.v, &t0))) continue;

            m = idx[rw>>1]; assert((srt.a[m]>>33) == (rw>>1));
            for (; m < srt.n && (srt.a[m]>>33) == (rw>>1); m++) {
                if(rw == (srt.a[m]>>32)) {
                    uw = (uint32_t)srt.a[m];
                    if(uv == uw) continue;
                    for (z = 0; z < zn; z++) {
                        if((!za[z].del) && (za[z].v==uw)) break;
                    }
                    if(z < zn) continue;
                    if(get_edge_from_source(src, cov, NULL, max_hang, min_ovlp, (t0.v^1), ((t0.ul>>32)^1), &t1)) {
                        p = asg_arc_pushp(fg->g); *p = t0; 
                        p->ul<<=32; p->ul>>=32; p->ul |= (uv<<32); p->v = uw;

                        p = asg_arc_pushp(fg->g); *p = t1;
                        p->ul<<=32; p->ul>>=32; p->ul |= ((uw^1)<<32); p->v = uv^1;
                        nist++;
                    }
                }
            }
        }
    }

    if(nist) {
        free(fg->g->idx);
        fg->g->idx = 0;
        fg->g->is_srt = 0;
        asg_cleanup(fg->g);
        asg_symm(fg->g);
        asg_arc_del_trans(fg->g, gap_fuzz);
        ///some of old edges might be lost due the transitive reduction
        recall_arcs(fg->g, ug->g);
    }

    kv_destroy(srt); free(idx);
    return fg;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xe8, %rsp
movl %r9d, 0x1c(%rsp)
movl %r8d, 0x18(%rsp)
movq %rcx, 0x8(%rsp)
movq %rdx, 0x50(%rsp)
movq %rsi, %rbp
movq %rdi, %r15
movl 0x14(%rsi), %ebx
andl $0x7fffffff, %ebx       # imm = 0x7FFFFFFF
shlq $0x2, %rbx
movq %rbx, %rdi
callq 0x2280
movq %rax, 0x80(%rsp)
movq %rax, %rdi
movl $0xff, %esi
movq %rbx, %rdx
callq 0x20e0
movq %r15, %rdi
callq 0x8c99a
movq %rax, %r13
movq 0x18(%rax), %rdi
callq 0x694eb
pushq $0xc
popq %rbx
xorl %r14d, %r14d
xorl %edi, %edi
xorl %eax, %eax
movq $0x0, 0x20(%rsp)
xorl %r12d, %r12d
movq %r15, 0x70(%rsp)
movq %r13, 0x78(%rsp)
movq %rbp, 0x28(%rsp)
cmpq (%r13), %r12
jae 0x96138
movq 0x10(%r15), %rbp
movq 0x18(%r13), %rcx
movq 0x20(%rcx), %rcx
movb $0x0, 0x4(%rcx,%r12,8)
cmpl $0x0, -0x18(%rbp,%rbx,2)
js 0x96123
movl -0x8(%rbp,%rbx,2), %ecx
testl %ecx, %ecx
je 0x96123
movq (%rbp,%rbx,2), %rdx
movq (%rdx), %r13
movabsq $-0x100000000, %rsi     # imm = 0xFFFFFFFF00000000
andq %rsi, %r13
cmpq %rax, 0x20(%rsp)
jne 0x960a2
leaq (%rax,%rax), %r15
testq %rax, %rax
pushq $0x2
popq %rax
cmoveq %rax, %r15
leaq (,%r15,8), %rsi
callq 0x2370
movq %rax, %rdi
movq (%rbp,%rbx,2), %rdx
movl -0x8(%rbp,%rbx,2), %ecx
movq %r15, %rax
orq %r14, %r13
movq 0x20(%rsp), %r8
leaq 0x1(%r8), %rsi
movq %r13, (%rdi,%r8,8)
decl %ecx
movq (%rdx,%rcx,8), %r13
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
andq %rcx, %r13
cmpq %rax, %rsi
movq 0x28(%rsp), %rbp
jne 0x960f0
leaq (%rax,%rax), %r15
testq %rax, %rax
pushq $0x2
popq %rax
cmoveq %rax, %r15
leaq (,%r15,8), %rsi
callq 0x2370
movq %rax, %rdi
movq %r15, %rax
movq 0x70(%rsp), %r15
movabsq $0x100000000, %rcx      # imm = 0x100000000
xorq %rcx, %r13
orq %r14, %r13
orq $0x1, %r13
movq 0x20(%rsp), %rcx
movq %r13, 0x8(%rdi,%rcx,8)
addq $0x2, %rcx
movq %rcx, 0x20(%rsp)
movq 0x78(%rsp), %r13
jmp 0x96128
movq 0x28(%rsp), %rbp
incq %r12
addq $0x14, %rbx
addq $0x2, %r14
jmp 0x96029
movq 0x20(%rsp), %rax
leaq (%rdi,%rax,8), %rsi
movq %rdi, 0x10(%rsp)
callq 0x66c25
pushq $0x1
popq %rax
xorl %ecx, %ecx
movq 0x8(%rsp), %r9
cmpq 0x20(%rsp), %rax
ja 0x96196
jne 0x96169
movq 0x10(%rsp), %rdx
movq (%rdx,%rcx,8), %rdx
jmp 0x9617f
movq 0x10(%rsp), %rsi
movq (%rsi,%rcx,8), %rdx
movq (%rsi,%rax,8), %rsi
xorq %rdx, %rsi
shrq $0x21, %rsi
je 0x96191
shrq $0x21, %rdx
movq 0x80(%rsp), %rsi
movl %ecx, (%rsi,%rdx,4)
movq %rax, %rcx
incq %rax
jmp 0x96155
movq (%r13), %rcx
xorl %esi, %esi
movq $0x0, 0xa0(%rsp)
movq 0x10(%rsp), %rdi
movq %rcx, 0xb8(%rsp)
cmpq %rcx, %rsi
je 0x96846
movq 0x10(%r15), %rdx
imulq $0x28, %rsi, %rax
cmpl $0x0, (%rdx,%rax)
js 0x9683e
addq %rax, %rdx
movl 0x10(%rdx), %eax
testl %eax, %eax
je 0x9683e
leaq (%rsi,%rsi), %r8
movq %rdx, 0xc8(%rsp)
movq 0x18(%rdx), %rcx
decl %eax
movq (%rcx,%rax,8), %rax
movq %rax, %rcx
shrq $0x20, %rcx
movq %rcx, 0x88(%rsp)
shrq $0x21, %rax
imulq $0x18, %rax, %rbx
addq 0x50(%rsp), %rbx
movq 0x18(%r15), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rax), %rax
movq %rsi, %rdx
shlq $0x4, %rdx
movq (%rax,%rdx), %rax
movl %eax, %edx
shrq $0x20, %rax
movq %rsi, 0xc0(%rsp)
shlq $0x21, %rsi
movq %rsi, 0x98(%rsp)
movq %r8, 0xb0(%rsp)
leal 0x1(%r8), %esi
movl %esi, 0x90(%rsp)
imulq $0x18, %rdx, %r14
imulq $0x18, %rax, %rax
leaq (%rcx,%rax), %r15
addq $0xc, %r15
xorl %r12d, %r12d
movl 0xc(%rbx), %eax
cmpq %rax, %r12
jae 0x964f1
movq (%rbx), %rdx
imulq $0x28, %r12, %rsi
movl 0xc(%rdx,%rsi), %r10d
imulq $0xc, %r10, %rcx
movl (%r9,%rcx), %eax
testl %eax, %eax
js 0x964e9
movq 0x20(%rbp), %r8
cmpl $0x0, (%r8,%r10,8)
js 0x964e9
leaq (%rdx,%rsi), %rdi
movl 0x4(%rdx,%rsi), %edx
imulq $0xc, %rdx, %rdx
addq %r9, %rdx
addq %r9, %rcx
movl 0x4(%rdx), %esi
movl (%rdx), %edx
movl $0x7fffffff, %r8d       # imm = 0x7FFFFFFF
andl %r8d, %edx
subl %edx, %esi
movl 0x4(%rcx), %edx
subl %eax, %edx
leaq 0x1bd48c(%rip), %rax    # 0x253758
movss 0x158(%rax), %xmm0
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
leaq 0x58(%rsp), %r9
callq 0x6a4a7
testl %eax, %eax
js 0x964d1
movq 0x88(%rsp), %rax
cmpl %eax, 0x5c(%rsp)
movq 0x10(%rsp), %rdi
jne 0x964dd
movl 0x60(%rsp), %edx
movl %edx, %ecx
shrl %ecx
movq 0x80(%rsp), %rax
movl (%rax,%rcx,4), %r13d
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rax, %r13
movq 0x8(%rsp), %r9
je 0x964e9
movq %rcx, 0x38(%rsp)
movq 0x50(%rsp), %rdi
movq %r9, %rsi
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
movq 0x88(%rsp), %r9
leaq 0x58(%rsp), %rax
pushq %rax
movq %rdx, 0x38(%rsp)
pushq %rdx
callq 0x79204
popq %rcx
popq %rdx
testl %eax, %eax
je 0x964d1
movq 0x10(%rsp), %rdi
movq (%rdi,%r13,8), %rax
shrq $0x21, %rax
movq 0x38(%rsp), %rdx
cmpl %edx, %eax
jne 0x968dd
movl 0x5c(%rsp), %eax
movl 0x60(%rsp), %ecx
xorl $0x1, %ecx
movl %ecx, 0x44(%rsp)
xorl $0x1, %eax
movq %rax, 0xa8(%rsp)
movq 0x8(%rsp), %r9
movq 0x30(%rsp), %rcx
cmpq 0x20(%rsp), %r13
jae 0x964e4
movq (%rdi,%r13,8), %rbp
movq %rbp, %rax
shrq $0x21, %rax
cmpl %edx, %eax
jne 0x964e4
movq %rbp, %rax
shrq $0x20, %rax
cmpl %ecx, %eax
jne 0x964c9
movl %ebp, %eax
cmpq %rax, 0xb0(%rsp)
je 0x964c9
xorl %eax, %eax
cmpq %rax, %r14
je 0x96400
cmpl $0x0, (%r15,%rax)
js 0x963fa
cmpl %ebp, -0x4(%r15,%rax)
je 0x964c9
addq $0x18, %rax
jmp 0x963e3
movq 0x50(%rsp), %rdi
movq %r9, %rsi
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
movl 0x44(%rsp), %r9d
leaq 0xd0(%rsp), %rax
pushq %rax
pushq 0xb0(%rsp)
callq 0x79204
popq %rcx
popq %rdx
testl %eax, %eax
je 0x964b5
movq 0x78(%rsp), %rax
movq 0x18(%rax), %rdi
movq %rdi, 0x48(%rsp)
callq 0x6c45d
movups 0x58(%rsp), %xmm0
movups %xmm0, (%rax)
movq 0x68(%rsp), %rcx
movq %rcx, 0x10(%rax)
movl (%rax), %ecx
orq 0x98(%rsp), %rcx
movq %rcx, (%rax)
movl %ebp, 0x8(%rax)
movq 0x48(%rsp), %rdi
callq 0x6c45d
movups 0xd0(%rsp), %xmm0
movups %xmm0, (%rax)
movq 0xe0(%rsp), %rcx
movq %rcx, 0x10(%rax)
movl (%rax), %ecx
shlq $0x20, %rbp
orq %rcx, %rbp
movabsq $0x100000000, %rcx      # imm = 0x100000000
xorq %rcx, %rbp
movq %rbp, (%rax)
movl 0x90(%rsp), %ecx
movl %ecx, 0x8(%rax)
incq 0xa0(%rsp)
movq 0x8(%rsp), %r9
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rcx
movq 0x38(%rsp), %rdx
incq %r13
jmp 0x963a4
movq 0x8(%rsp), %r9
movq 0x10(%rsp), %rdi
jmp 0x964e9
movq 0x8(%rsp), %r9
jmp 0x964e9
movq 0x28(%rsp), %rbp
incq %r12
jmp 0x96267
movq 0xc8(%rsp), %rax
movq 0x18(%rax), %rax
movq (%rax), %r12
movq %r12, %rax
shrq $0x21, %rax
imulq $0x18, %rax, %r13
addq 0x50(%rsp), %r13
movq 0x70(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x8(%rax), %rcx
movq 0x28(%rax), %rax
movq 0xb0(%rsp), %rdx
movq 0x8(%rax,%rdx,8), %rax
movq %rdx, %rsi
orq $0x1, %rsi
movl %eax, %edx
shrq $0x20, %rax
movq %rsi, 0x88(%rsp)
shlq $0x20, %rsi
movq %rsi, 0x90(%rsp)
imulq $0x18, %rdx, %rbx
imulq $0x18, %rax, %rax
leaq (%rcx,%rax), %r15
addq $0xc, %r15
xorl %r14d, %r14d
movq %r12, 0x48(%rsp)
movl 0xc(%r13), %eax
cmpq %rax, %r14
jae 0x96824
movq (%r13), %rdx
imulq $0x28, %r14, %rsi
movl 0xc(%rdx,%rsi), %r10d
imulq $0xc, %r10, %rcx
movl (%r9,%rcx), %eax
testl %eax, %eax
js 0x9681c
movq 0x20(%rbp), %r8
cmpl $0x0, (%r8,%r10,8)
js 0x9681c
leaq (%rdx,%rsi), %rdi
movl 0x4(%rdx,%rsi), %edx
imulq $0xc, %rdx, %rdx
addq %r9, %rdx
addq %r9, %rcx
movl 0x4(%rdx), %esi
movl (%rdx), %edx
movl $0x7fffffff, %r8d       # imm = 0x7FFFFFFF
andl %r8d, %edx
subl %edx, %esi
movl 0x4(%rcx), %edx
subl %eax, %edx
leaq 0x1bd18a(%rip), %rax    # 0x253758
movss 0x158(%rax), %xmm0
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
leaq 0x58(%rsp), %r9
callq 0x6a4a7
testl %eax, %eax
js 0x967ec
movq 0x58(%rsp), %r9
movq %r9, %rax
xorq %r12, %rax
movabsq $-0x100000000, %rcx     # imm = 0xFFFFFFFF00000000
andq %rcx, %rax
movabsq $0x100000000, %rcx      # imm = 0x100000000
cmpq %rcx, %rax
movq 0x10(%rsp), %rdi
jne 0x967f8
movl 0x60(%rsp), %edx
movl %edx, %ecx
shrl %ecx
movq 0x80(%rsp), %rax
movl (%rax,%rcx,4), %r12d
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpq %rax, %r12
je 0x96806
movq %rcx, 0x38(%rsp)
shrq $0x20, %r9
movq 0x50(%rsp), %rdi
movq 0x8(%rsp), %rsi
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
leaq 0x58(%rsp), %rax
pushq %rax
movq %rdx, 0x38(%rsp)
pushq %rdx
callq 0x79204
popq %rcx
popq %rdx
testl %eax, %eax
je 0x9680d
movq 0x10(%rsp), %rdi
movq (%rdi,%r12,8), %rax
shrq $0x21, %rax
movq 0x38(%rsp), %rdx
cmpl %edx, %eax
jne 0x968be
movl 0x5c(%rsp), %eax
movl 0x60(%rsp), %ecx
xorl $0x1, %ecx
movl %ecx, 0x44(%rsp)
xorl $0x1, %eax
movq %rax, 0xa8(%rsp)
movq 0x8(%rsp), %r9
movq 0x30(%rsp), %rcx
cmpq 0x20(%rsp), %r12
jae 0x967ff
movq (%rdi,%r12,8), %rbp
movq %rbp, %rax
shrq $0x21, %rax
cmpl %edx, %eax
jne 0x967ff
movq %rbp, %rax
shrq $0x20, %rax
cmpl %ecx, %eax
jne 0x967e4
movl %ebp, %eax
cmpq %rax, 0x88(%rsp)
je 0x967e4
xorl %eax, %eax
cmpq %rax, %rbx
je 0x96714
cmpl $0x0, (%r15,%rax)
js 0x9670e
cmpl %ebp, -0x4(%r15,%rax)
je 0x967e4
addq $0x18, %rax
jmp 0x966f7
movq 0x50(%rsp), %rdi
movq %r9, %rsi
movl 0x18(%rsp), %ecx
movl 0x1c(%rsp), %r8d
movl 0x44(%rsp), %r9d
leaq 0xd0(%rsp), %rax
pushq %rax
pushq 0xb0(%rsp)
callq 0x79204
popq %rcx
popq %rdx
testl %eax, %eax
je 0x967d0
movq 0x78(%rsp), %rax
movq 0x18(%rax), %rdi
movq %rdi, 0x98(%rsp)
callq 0x6c45d
movups 0x58(%rsp), %xmm0
movups %xmm0, (%rax)
movq 0x68(%rsp), %rcx
movq %rcx, 0x10(%rax)
movl (%rax), %ecx
orq 0x90(%rsp), %rcx
movq %rcx, (%rax)
movl %ebp, 0x8(%rax)
movq 0x98(%rsp), %rdi
callq 0x6c45d
movups 0xd0(%rsp), %xmm0
movups %xmm0, (%rax)
movq 0xe0(%rsp), %rcx
movq %rcx, 0x10(%rax)
movl (%rax), %ecx
shlq $0x20, %rbp
orq %rcx, %rbp
movabsq $0x100000000, %rcx      # imm = 0x100000000
xorq %rcx, %rbp
movq %rbp, (%rax)
movq 0xb0(%rsp), %rcx
movl %ecx, 0x8(%rax)
incq 0xa0(%rsp)
movq 0x8(%rsp), %r9
movq 0x10(%rsp), %rdi
movq 0x30(%rsp), %rcx
movq 0x38(%rsp), %rdx
incq %r12
jmp 0x966b8
movq 0x8(%rsp), %r9
movq 0x10(%rsp), %rdi
jmp 0x9681c
movq 0x8(%rsp), %r9
jmp 0x9681c
movq 0x28(%rsp), %rbp
jmp 0x96817
movq 0x8(%rsp), %r9
jmp 0x96817
movq 0x8(%rsp), %r9
movq 0x10(%rsp), %rdi
movq 0x48(%rsp), %r12
incq %r14
jmp 0x96567
movq 0x70(%rsp), %r15
movq 0x78(%rsp), %r13
movq 0xb8(%rsp), %rcx
movq 0xc0(%rsp), %rsi
incq %rsi
jmp 0x961b5
cmpq $0x0, 0xa0(%rsp)
je 0x96897
movq 0x18(%r13), %rbx
movq 0x28(%rbx), %rdi
callq 0x2220
andq $0x0, 0x28(%rbx)
andb $0x7f, 0x7(%rbx)
movq %rbx, %rdi
callq 0x694eb
movq %rbx, %rdi
callq 0x69638
movq %rbx, %rdi
movl 0x120(%rsp), %esi
callq 0x701c4
movq 0x18(%r15), %rsi
movq %rbx, %rdi
callq 0x95da6
movq 0x10(%rsp), %rdi
callq 0x2220
movq 0x80(%rsp), %rdi
callq 0x2220
movq %r13, %rax
addq $0xe8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x152be5(%rip), %rdi    # 0x1e94aa
leaq 0x1514c5(%rip), %rsi    # 0x1e7d91
leaq 0x152bf1(%rip), %rcx    # 0x1e94c4
movl $0x4d0b, %edx           # imm = 0x4D0B
callq 0x2110
leaq 0x152bc6(%rip), %rdi    # 0x1e94aa
leaq 0x1514a6(%rip), %rsi    # 0x1e7d91
leaq 0x152bd2(%rip), %rcx    # 0x1e94c4
movl $0x4ce2, %edx           # imm = 0x4CE2
callq 0x2110