// File: chhylp123[P]hifiasm/gfa_ut.cpp
// Function: load_scaf_base(all_ul_t*, char*, char const*)
uint32_t load_scaf_base(all_ul_t *x, char* file_name, const char *bin_file)
{
    char *gfa_name = (char*)malloc(strlen(file_name)+50);
	sprintf(gfa_name, "%s.%s.uidx.ucr.bin", file_name, bin_file);
    // fprintf(stderr, "[M::%s] open %s...\n", __func__, gfa_name);
    FILE *fp = fopen(gfa_name, "r"); free(gfa_name);
    if (!fp) return 0;
    // fprintf(stderr, "[M::%s] open sucess\n", __func__);
    uint64_t rid; uint32_t len; ul_vec_t ss, *z; memset(&ss, 0, sizeof(ss));
    while(1) {
        fread(&rid, sizeof(rid), 1, fp);
        if(feof(fp)) break;
        z = &(x->a[rid]);
        fread(&len, sizeof(len), 1, fp); assert(z->rlen == len);
        fread(&(ss.N_site.n), sizeof(ss.N_site.n), 1, fp);
        kv_resize(uint32_t, ss.N_site, ss.N_site.n);
        fread(ss.N_site.a, sizeof((*(ss.N_site.a))), ss.N_site.n, fp);
        ss.r_base.n = B4Lg(len); kv_resize(uint8_t, ss.r_base, ss.r_base.n); 
        fread(ss.r_base.a, sizeof((*(ss.r_base.a))), ss.r_base.n, fp);
        // if(rid == 37238) {
        //     fprintf(stderr, "[M::%s::37238] z->dd::%u\n", __func__, z->dd);
        // }
        // fprintf(stderr, "[M::%s::rid->%lu] z->dd::%u\n", __func__, rid, z->dd);
        if(z->dd != 4) continue;

        
        kv_resize(uint32_t, z->N_site, ss.N_site.n); z->N_site.n = ss.N_site.n;
        memcpy(z->N_site.a, ss.N_site.a, sizeof((*(z->N_site.a)))*z->N_site.n);

        kv_resize(uint8_t, z->r_base, ss.r_base.n); z->r_base.n = ss.r_base.n;
        memcpy(z->r_base.a, ss.r_base.a, sizeof((*(z->r_base.a)))*z->r_base.n);
    }
    // load_compress_base_disk(fp, &rid, des.a, &ulen, &(sl->ucr_s->u));

    fclose(fp); free(ss.N_site.a); free(ss.r_base.a);
    return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0x20a0
movq %rax, %rdi
addq $0x32, %rdi
callq 0x2270
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
leaq 0x3564d(%rip), %rsi     # 0x39a510
movb $0x0, %al
callq 0x2050
movq -0x28(%rbp), %rdi
leaq 0x2b501(%rip), %rsi     # 0x3903d6
callq 0x2200
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rdi
callq 0x2210
cmpq $0x0, -0x30(%rbp)
jne 0x364efa
movl $0x0, -0x4(%rbp)
jmp 0x36544e
leaq -0x98(%rbp), %rdi
xorl %esi, %esi
movl $0x58, %edx
callq 0x2100
movq -0x30(%rbp), %rcx
leaq -0x38(%rbp), %rdi
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x30(%rbp), %rdi
callq 0x2310
cmpl $0x0, %eax
je 0x364f37
jmp 0x365429
movq -0x10(%rbp), %rax
movq 0x48(%rax), %rax
imulq $0x58, -0x38(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xa0(%rbp)
movq -0x30(%rbp), %rcx
leaq -0x3c(%rbp), %rdi
movl $0x4, %esi
movl $0x1, %edx
callq 0x22e0
movq -0xa0(%rbp), %rax
movl 0x18(%rax), %eax
cmpl -0x3c(%rbp), %eax
jne 0x364f76
jmp 0x364f95
leaq 0x355a6(%rip), %rdi     # 0x39a523
leaq 0x31235(%rip), %rsi     # 0x3961b9
movl $0x38b4, %edx           # imm = 0x38B4
leaq 0x355a2(%rip), %rcx     # 0x39a532
callq 0x2130
leaq -0x98(%rbp), %rdi
addq $0x38, %rdi
addq $0x8, %rdi
movq -0x30(%rbp), %rcx
movl $0x8, %esi
movl $0x1, %edx
callq 0x22e0
movq -0x50(%rbp), %rax
cmpq -0x58(%rbp), %rax
jae 0x365049
movq -0x58(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq %rax
orq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq $0x2, %rax
orq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq $0x4, %rax
orq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq $0x8, %rax
orq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
shrq $0x10, %rax
orq -0x50(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
movq -0x60(%rbp), %rdi
movq -0x50(%rbp), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, -0x60(%rbp)
jmp 0x36504b
movq -0x60(%rbp), %rdi
movq -0x58(%rbp), %rdx
movq -0x30(%rbp), %rcx
movl $0x4, %esi
callq 0x22e0
movl -0x3c(%rbp), %eax
shrl $0x2, %eax
movl -0x3c(%rbp), %esi
andl $0x3, %esi
xorl %ecx, %ecx
movl $0x1, %edx
cmpl $0x0, %esi
cmovnel %edx, %ecx
addl %ecx, %eax
movl %eax, %eax
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
cmpq -0x98(%rbp), %rax
jae 0x365165
movq -0x98(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shrq %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shrq $0x2, %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shrq $0x4, %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shrq $0x8, %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
shrq $0x10, %rax
orq -0x90(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x90(%rbp)
movq -0x88(%rbp), %rdi
movq -0x90(%rbp), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, -0x88(%rbp)
jmp 0x365167
movq -0x88(%rbp), %rdi
movq -0x98(%rbp), %rdx
movq -0x30(%rbp), %rcx
movl $0x1, %esi
callq 0x22e0
movq -0xa0(%rbp), %rax
movzbl 0x50(%rax), %eax
cmpl $0x4, %eax
je 0x365198
jmp 0x364f0d
jmp 0x36519a
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rax
cmpq -0x58(%rbp), %rax
jae 0x3652a6
movq -0x58(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
shrq %rcx
movq -0xa0(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x2, %rcx
movq -0xa0(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x4, %rcx
movq -0xa0(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x8, %rcx
movq -0xa0(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
shrq $0x10, %rcx
movq -0xa0(%rbp), %rax
orq 0x48(%rax), %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x48(%rax)
movq -0xa0(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0xa0(%rbp), %rax
movq 0x48(%rax), %rsi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x38(%rax)
jmp 0x3652a8
movq -0x58(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x40(%rax)
movq -0xa0(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0x60(%rbp), %rsi
movq -0xa0(%rbp), %rax
movq 0x40(%rax), %rdx
shlq $0x2, %rdx
callq 0x2180
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0x98(%rbp), %rax
jae 0x3653ec
movq -0x98(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0xa0(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0xa0(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0xa0(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0xa0(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0xa0(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0xa0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0xa0(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0xa0(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x3653ee
movq -0x98(%rbp), %rcx
movq -0xa0(%rbp), %rax
movq %rcx, (%rax)
movq -0xa0(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x88(%rbp), %rsi
movq -0xa0(%rbp), %rax
movq (%rax), %rdx
shlq $0x0, %rdx
callq 0x2180
jmp 0x364f0d
movq -0x30(%rbp), %rdi
callq 0x21a0
movq -0x60(%rbp), %rdi
callq 0x2210
movq -0x88(%rbp), %rdi
callq 0x2210
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xa0, %rsp
popq %rbp
retq
nopw (%rax,%rax)