// File: chhylp123[P]hifiasm/ecovlp.cpp
// Function: worker_hap_post_rev(void*, long, int)
static void worker_hap_post_rev(void *data, long i, int tid)
{
    ec_ovec_buf_t0 *b = &(((ec_ovec_buf_t*)data)->a[tid]);
    uint64_t k, l, kl, nn; char *a, c;
    // fprintf(stderr, "-0-[M::%s-beg] rid->%ld\n", __func__, i);
    // if (memcmp("m64012_190921_234837/139067658/ccs", Get_NAME((R_INF), i), Get_NAME_LENGTH((R_INF),i)) == 0) {
    //     fprintf(stderr, "-0-[M::%s-beg] rid->%ld\n", __func__, i);
    // } else if (memcmp("m64012_190921_234837/28968323/ccs", Get_NAME((R_INF), i), Get_NAME_LENGTH((R_INF),i)) == 0) {
    //     fprintf(stderr, "-1-[M::%s-beg] rid->%ld\n", __func__, i);
    // } else {
    //     return;
    // }
    // if(i != 2851) return;

    // if(scb.a[i].m < scc.a[i].n) {
    //     scb.a[i].m = scc.a[i].n;
    //     REALLOC(scb.a[i].a, scb.a[i].m);
    // }
    // scb.a[i].n = scc.a[i].n;
    // memcpy(scb.a[i].a, scc.a[i].a, scc.a[i].n*sizeof((*(scb.a[i].a))));

    flip_paf_rc(i, &(R_INF.paf[i]), &R_INF);
    flip_paf_rc(i, &(R_INF.reverse_paf[i]), &R_INF);

    recover_UC_Read(&b->self_read, &R_INF, i); 
    l = b->self_read.length; kl = l>>1; a = b->self_read.seq;
    for (k = nn = 0; k < kl; k++) {
        c = a[l-k-1]; a[l-k-1] = RC_CHAR(a[k]); a[k] = RC_CHAR(c);
        if(a[k] == 'N') nn++;
        if(a[l-k-1] == 'N') nn++;
    }
    if(l&1) {
        a[k] = RC_CHAR(a[k]); 
        if(a[k] == 'N') nn++;
    }

    ha_compress_base(Get_READ(R_INF, i), a, l, &R_INF.N_site[i], nn);

    if(asm_opt.is_sc) {
        retrive_bqual(&(b->v8q), NULL, i, -1, -1, 0, sc_bn);
        for (k = 0; k < l; k++) a[l - k - 1] = b->v8q.a[k];
        ha_compress_qual_bit(Get_QUAL(R_INF, i), a, l, sc_bn);
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x60, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq -0x8(%rbp), %rax
movq (%rax), %rax
movslq -0x14(%rbp), %rcx
imulq $0x5c0, %rcx, %rcx      # imm = 0x5C0
addq %rcx, %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rdi
leaq 0x15b5b9(%rip), %rax    # 0x3c52d0
movq 0x78(%rax), %rsi
imulq $0x18, -0x10(%rbp), %rax
addq %rax, %rsi
leaq 0x15b5a6(%rip), %rdx    # 0x3c52d0
callq 0x25afd0
movq -0x10(%rbp), %rdi
leaq 0x15b596(%rip), %rax    # 0x3c52d0
movq 0x80(%rax), %rsi
imulq $0x18, -0x10(%rbp), %rax
addq %rax, %rsi
leaq 0x15b580(%rip), %rdx    # 0x3c52d0
callq 0x25afd0
movq -0x20(%rbp), %rdi
movq -0x10(%rbp), %rdx
leaq 0x15b56c(%rip), %rsi    # 0x3c52d0
callq 0xa380
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
shrq %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x40(%rbp)
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x269e74
movq -0x48(%rbp), %rax
movq -0x30(%rbp), %rcx
subq -0x28(%rbp), %rcx
subq $0x1, %rcx
movb (%rax,%rcx), %al
movb %al, -0x49(%rbp)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
leaq 0x15a87c(%rip), %rax    # 0x3c4650
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
leaq 0x15a974(%rip), %rax    # 0x3c4755
movb (%rax,%rcx), %dl
movq -0x48(%rbp), %rax
movq -0x30(%rbp), %rcx
subq -0x28(%rbp), %rcx
subq $0x1, %rcx
movb %dl, (%rax,%rcx)
movzbl -0x49(%rbp), %eax
movl %eax, %ecx
leaq 0x15a84c(%rip), %rax    # 0x3c4650
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
leaq 0x15a944(%rip), %rax    # 0x3c4755
movb (%rax,%rcx), %dl
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x4e, %eax
jne 0x269e3c
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x48(%rbp), %rax
movq -0x30(%rbp), %rcx
subq -0x28(%rbp), %rcx
subq $0x1, %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x4e, %eax
jne 0x269e61
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x269e63
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x269d9b
movq -0x30(%rbp), %rax
andq $0x1, %rax
cmpq $0x0, %rax
je 0x269ed1
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
leaq 0x15a7b9(%rip), %rax    # 0x3c4650
movzbl (%rax,%rcx), %eax
movl %eax, %ecx
leaq 0x15a8b1(%rip), %rax    # 0x3c4755
movb (%rax,%rcx), %dl
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movb %dl, (%rax,%rcx)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x4e, %eax
jne 0x269ecf
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x269ed1
leaq 0x15b3f8(%rip), %rax    # 0x3c52d0
movq 0x10(%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x48(%rbp), %rsi
movq -0x30(%rbp), %rdx
leaq 0x15b3dd(%rip), %rax    # 0x3c52d0
movq (%rax), %rcx
movq -0x10(%rbp), %rax
shlq $0x3, %rax
addq %rax, %rcx
movq -0x40(%rbp), %r8
callq 0xa710
leaq 0x15a8e7(%rip), %rax    # 0x3c47f8
cmpq $0x0, 0x2b0(%rax)
je 0x269fb6
movq -0x20(%rbp), %rdi
addq $0x518, %rdi            # imm = 0x518
movq -0x10(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
movq $-0x1, %r8
xorl %r9d, %r9d
movq %r8, %rcx
movq $0x2, (%rsp)
callq 0xaec0
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x269f91
movq -0x20(%rbp), %rax
movq 0x528(%rax), %rax
movq -0x28(%rbp), %rcx
movb (%rax,%rcx), %dl
movq -0x48(%rbp), %rax
movq -0x30(%rbp), %rcx
subq -0x28(%rbp), %rcx
subq $0x1, %rcx
movb %dl, (%rax,%rcx)
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x269f54
leaq 0x15b338(%rip), %rax    # 0x3c52d0
movq 0x30(%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rax,%rcx,8), %rdi
movq -0x48(%rbp), %rsi
movq -0x30(%rbp), %rdx
movl $0x2, %ecx
callq 0xab10
addq $0x60, %rsp
popq %rbp
retq
nopl (%rax)