// File: chhylp123[P]hifiasm/gfa_ut.cpp
// Function: update_poa_dp(poa_g_t*, unsigned int, ma_ug_t*)
uint32_t update_poa_dp(poa_g_t *g, uint32_t debug_qid, ma_ug_t *debug_ug)
{
    uint32_t is_srt = 0/**, is_up_aln = 0**/, k, is_circle = 0;
    if(g->seq.n > g->update_seq || g->arc.n > g->update_arc) {
        if(g->seq.n > g->update_seq) {
            kv_resize(uint32_t, g->srt_b.res, g->seq.n);
            kv_resize(uint32_t, g->srt_b.res2nid, g->seq.n);
            // kv_resize(uint64_t, g->srt_b.aln, g->seq.n); g->srt_b.aln.n = g->seq.n;
            g->srt_b.res.n = g->srt_b.res2nid.n = g->seq.n;
            for (k = g->update_seq; k < g->seq.n; k++) {
                g->srt_b.res.a[k] = g->srt_b.res2nid.a[k] = k;
                // g->srt_b.aln.a[k] = (((uint64_t)(g->seq.a[k].nid))<<32)+k;
                // if(k > 0 && is_up_aln == 0) {
                //     if((g->srt_b.aln.a[k]>>32) < (g->srt_b.aln.a[k-1]>>32)) is_up_aln = 1;
                // }
            }
        }
        if(g->arc.n > g->update_arc) { ///check if it is necessary to resort
            for (k = g->update_arc; k < g->arc.n; k++) {
                if((g->arc.a[k].ul>>32)&1) continue;
                if(g->srt_b.res2nid.a[g->arc.a[k].ul>>33] >= g->srt_b.res2nid.a[g->arc.a[k].v>>1]) break;
            }
            if(k < g->arc.n) is_srt = 1;
        }
        // fprintf(stderr, "[M::%s::] is_srt::%u\n", __func__, is_srt);
        clean_poa_g_t(g); 
        if(is_srt) {
            is_circle = 1 - topo_srt_gen(g, debug_qid, debug_ug);
        } 
        // else if(is_up_aln) {
        //     radix_sort_srt64(g->srt_b.aln.a, g->srt_b.aln.a + g->srt_b.aln.n);
        // }
    }

    return is_circle;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movl $0x0, -0x1c(%rbp)
movl $0x0, -0x24(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x48(%rcx), %ecx
cmpq %rcx, %rax
ja 0x3320ec
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x4c(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x3324bb
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x48(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x3323be
jmp 0x332105
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x33222c
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x88(%rax), %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x88(%rax), %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x88(%rax), %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x88(%rax), %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x88(%rax), %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x88(%rax)
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x88(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x90(%rax)
jmp 0x33222e
jmp 0x332230
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x332357
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0xa0(%rax), %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0xa0(%rax), %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0xa0(%rax), %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0xa0(%rax), %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0xa0(%rax), %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0xa0(%rax)
movq -0x8(%rbp), %rax
movq 0xa8(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0xa0(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0xa8(%rax)
jmp 0x332359
movq -0x8(%rbp), %rax
movq (%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x98(%rax)
movq -0x8(%rbp), %rax
movq %rcx, 0x80(%rax)
movq -0x8(%rbp), %rax
movl 0x48(%rax), %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x3323bc
movl -0x20(%rbp), %edx
movq -0x8(%rbp), %rax
movq 0xa8(%rax), %rax
movl -0x20(%rbp), %ecx
movl %edx, (%rax,%rcx,4)
movq -0x8(%rbp), %rax
movq 0x90(%rax), %rax
movl -0x20(%rbp), %ecx
movl %edx, (%rax,%rcx,4)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x332380
jmp 0x3323be
movq -0x8(%rbp), %rax
movq 0x18(%rax), %rax
movq -0x8(%rbp), %rcx
movl 0x4c(%rcx), %ecx
cmpq %rcx, %rax
jbe 0x33248e
movq -0x8(%rbp), %rax
movl 0x4c(%rax), %eax
movl %eax, -0x20(%rbp)
movl -0x20(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jae 0x332478
movq -0x8(%rbp), %rax
movq 0x28(%rax), %rax
movl -0x20(%rbp), %ecx
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
shrq $0x20, %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x332416
jmp 0x33246a
movq -0x8(%rbp), %rax
movq 0xa8(%rax), %rax
movq -0x8(%rbp), %rcx
movq 0x28(%rcx), %rcx
movl -0x20(%rbp), %edx
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
shrq $0x21, %rcx
movl (%rax,%rcx,4), %eax
movq -0x8(%rbp), %rcx
movq 0xa8(%rcx), %rcx
movq -0x8(%rbp), %rdx
movq 0x28(%rdx), %rdx
movl -0x20(%rbp), %esi
shlq $0x4, %rsi
addq %rsi, %rdx
movl 0x8(%rdx), %edx
shrl %edx
movl %edx, %edx
cmpl (%rcx,%rdx,4), %eax
jb 0x332468
jmp 0x332478
jmp 0x33246a
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x3323e0
movl -0x20(%rbp), %eax
movq -0x8(%rbp), %rcx
cmpq 0x18(%rcx), %rax
jae 0x33248c
movl $0x1, -0x1c(%rbp)
jmp 0x33248e
movq -0x8(%rbp), %rdi
callq 0x32ece0
cmpl $0x0, -0x1c(%rbp)
je 0x3324b9
movq -0x8(%rbp), %rdi
movl -0xc(%rbp), %esi
movq -0x18(%rbp), %rdx
callq 0x331070
movl %eax, %ecx
movl $0x1, %eax
subl %ecx, %eax
movl %eax, -0x24(%rbp)
jmp 0x3324bb
movl -0x24(%rbp), %eax
addq $0x30, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)