// File: chhylp123[P]hifiasm/Process_Read.cpp
// Function: append_ul_t_compress_ovlp(all_ul_t*, unsigned long*, char*, long, char*, long, ul_ov_t*, long)
void append_ul_t_compress_ovlp(all_ul_t *x, uint64_t *rid, char* id, int64_t id_l, char* str, int64_t str_l, ul_ov_t *o, int64_t on) {
	int64_t i, mine, maxs, ovlp, end;
	ul_vec_t *p = NULL;
	nid_t *np = NULL;
	ul_ov_t *z = NULL, *zp = NULL;
	uc_block_t *b = NULL;

	if(id) {
		kv_pushp(nid_t, x->nid, &np);
		np->n = id_l; MALLOC(np->a, np->n+1); memcpy(np->a, id, id_l); np->a[id_l] = '\0';
	}

	if(str) {
		if(rid == NULL) {
			kv_pushp(ul_vec_t, *x, &p);
			memset(p, 0, sizeof(*p));
		} else {
			if((*rid) >= x->m) kv_resize(ul_vec_t, *x, (*rid) + 1);
			if((*rid) >= x->n) {
				memset(x->a+x->n, 0, sizeof(*p)*((*rid) + 1 - x->n));
				x->n = (*rid) + 1;
			}
			p = &(x->a[(*rid)]);
		}
		

		p->bb.n = p->N_site.n = p->r_base.n = 0;
		p->rlen = str_l; 
		
		if(o == NULL || on == 0) on = 0;
		for (i = end = 0, zp = NULL; i < on; i++) {
			z = &(o[i]);
			if(!z->el) continue;
			if(zp) {
				mine = MIN(zp->qe, z->qe); maxs = MAX(zp->qs, z->qs);
				ovlp = mine - maxs; 
				if(zp->qe >= z->qe && zp->qs <= z->qs) continue;
			} else {
				ovlp = -z->qs; 
			}
			if(ovlp < 0) {///push original bases
				kv_pushp(uc_block_t, p->bb, &b);
				b->hid = (uint32_t)-1/**x->mm**/; b->rev = 0; b->base = 1; b->pchain = 0;
				b->qs = end; b->qe = b->qs - ovlp;
				b->ts = p->r_base.n; b->te = b->ts + B4L(-ovlp);
				kv_resize(uint8_t, p->r_base, b->te); p->r_base.n = b->te;
				ha_encode_base(p->r_base.a+b->ts, str+b->qs, b->qe-b->qs, &(p->N_site), b->qs);
			} 

			///push ovlp bases
			kv_pushp(uc_block_t, p->bb, &b);
			b->hid = (z->tn<<1)>>1; b->rev = z->rev; b->base = 0; b->pchain = 0;
			b->qs = z->qs + (ovlp>0?ovlp:0); b->qe = z->qe;
			if(z->rev) {
				b->ts = z->ts; b->te = z->ts + (b->qe - b->qs);
			} else {
				b->ts = z->te - (b->qe - b->qs); b->te = z->te;
			}

			end = MAX(zp?zp->qe:0, z->qe);
		}
		
		if(end < str_l) {///push original bases
			kv_pushp(uc_block_t, p->bb, &b);
			b->hid = (uint32_t)-1/**x->mm**/; b->rev = 0; b->base = 1; b->pchain = 0;
			b->qs = end; b->qe = str_l;
			b->ts = p->r_base.n; b->te = b->ts + B4L(b->qe - b->qs);
			kv_resize(uint8_t, p->r_base, b->te); p->r_base.n = b->te;
			ha_encode_base(p->r_base.a+b->ts, str+b->qs, b->qe-b->qs, &(p->N_site), b->qs);		
			// push_subblock_original_bases(str, x, p, end, str_l, 321);//for debug
		}
		// char *sst = NULL; CALLOC(sst, str_l);//for debug
		// retrieve_ul_t(NULL, sst, x, rid?*rid:x->n-1, 0, 0, -1);
		// if(memcmp(sst, str, str_l)) {
		// 	fprintf(stderr, "ap-Wrong read, id: %ld, [%d, %ld)\n", (int64_t)(rid?*rid:x->n-1), 0, str_l);
		// 	for (i = 0; i < str_l; i++) {
		// 		if(sst[i] != str[i]) fprintf(stderr, "[%ld] input:%c, decompress:%c\n", i, str[i], sst[i]);
		// 	}
		// }
		// free(sst);
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xd0, %rsp
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq $0x0, -0x60(%rbp)
movq $0x0, -0x68(%rbp)
movq $0x0, -0x70(%rbp)
movq $0x0, -0x78(%rbp)
movq $0x0, -0x80(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0xc596
jmp 0xc4b0
movq -0x8(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0xc521
movq -0x8(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xc4e0
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x88(%rbp)
jmp 0xc4ee
movl $0x2, %eax
movq %rax, -0x88(%rbp)
jmp 0xc4ee
movq -0x88(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x8(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x4, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x8(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x8(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
shlq $0x4, %rcx
addq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x20(%rbp), %rax
movl %eax, %ecx
movq -0x68(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x68(%rbp), %rax
movl 0x8(%rax), %eax
addl $0x1, %eax
movl %eax, %eax
movl %eax, %edi
shlq $0x0, %rdi
callq 0x2270
movq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
movq -0x68(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x2180
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x20(%rbp), %rcx
movb $0x0, (%rax,%rcx)
cmpq $0x0, -0x28(%rbp)
je 0xd059
cmpq $0x0, -0x10(%rbp)
jne 0xc658
jmp 0xc5ae
movq -0x8(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x58(%rcx), %rax
jne 0xc61d
movq -0x8(%rbp), %rax
cmpq $0x0, 0x58(%rax)
je 0xc5df
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
shlq %rax
movq %rax, -0x90(%rbp)
jmp 0xc5ed
movl $0x2, %eax
movq %rax, -0x90(%rbp)
jmp 0xc5ed
movq -0x90(%rbp), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x58, 0x58(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x8(%rbp), %rdx
movq 0x50(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x50(%rdx)
imulq $0x58, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rdi
xorl %esi, %esi
movl $0x58, %edx
callq 0x2100
jmp 0xc7c7
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x58(%rcx), %rax
jb 0xc75a
jmp 0xc66f
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rax
movq -0x10(%rbp), %rcx
movq (%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jae 0xc756
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
shrq %rcx
movq -0x8(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x2, %rcx
movq -0x8(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x4, %rcx
movq -0x8(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x8, %rcx
movq -0x8(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
shrq $0x10, %rcx
movq -0x8(%rbp), %rax
orq 0x58(%rax), %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x58(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x58(%rax)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x58, 0x58(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x48(%rax)
jmp 0xc758
jmp 0xc75a
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq -0x8(%rbp), %rcx
cmpq 0x50(%rcx), %rax
jb 0xc7b0
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rdi
movq -0x8(%rbp), %rax
imulq $0x58, 0x50(%rax), %rax
addq %rax, %rdi
movq -0x10(%rbp), %rax
movq (%rax), %rax
addq $0x1, %rax
movq -0x8(%rbp), %rcx
subq 0x50(%rcx), %rax
imulq $0x58, %rax, %rdx
xorl %esi, %esi
callq 0x2100
movq -0x10(%rbp), %rax
movq (%rax), %rcx
addq $0x1, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x8(%rbp), %rax
movq 0x48(%rax), %rax
movq -0x10(%rbp), %rcx
imulq $0x58, (%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq $0x0, (%rax)
movq -0x60(%rbp), %rax
movq $0x0, 0x40(%rax)
movq -0x60(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0x30(%rbp), %rax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movl %ecx, 0x18(%rax)
cmpq $0x0, 0x10(%rbp)
je 0xc805
cmpq $0x0, 0x18(%rbp)
jne 0xc80d
movq $0x0, 0x18(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x38(%rbp)
movq $0x0, -0x78(%rbp)
movq -0x38(%rbp), %rax
cmpq 0x18(%rbp), %rax
jge 0xcdce
movq 0x10(%rbp), %rax
imulq $0x1c, -0x38(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movl 0x18(%rax), %eax
shrl $0x1e, %eax
andl $0x1, %eax
cmpl $0x0, %eax
jne 0xc85a
jmp 0xcdbd
cmpq $0x0, -0x78(%rbp)
je 0xc908
movq -0x78(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x70(%rbp), %rcx
cmpl 0x8(%rcx), %eax
ja 0xc884
movq -0x78(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x94(%rbp)
jmp 0xc891
movq -0x70(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0x94(%rbp)
movl -0x94(%rbp), %eax
movl %eax, %eax
movq %rax, -0x40(%rbp)
movq -0x78(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x70(%rbp), %rcx
cmpl 0x4(%rcx), %eax
jb 0xc8bc
movq -0x78(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x98(%rbp)
jmp 0xc8c9
movq -0x70(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x98(%rbp)
movl -0x98(%rbp), %eax
movl %eax, %eax
movq %rax, -0x48(%rbp)
movq -0x40(%rbp), %rax
subq -0x48(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x78(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x70(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jb 0xc906
movq -0x78(%rbp), %rax
movl 0x4(%rax), %eax
movq -0x70(%rbp), %rcx
cmpl 0x4(%rcx), %eax
ja 0xc906
jmp 0xcdbd
jmp 0xc917
movq -0x70(%rbp), %rcx
xorl %eax, %eax
subl 0x4(%rcx), %eax
movl %eax, %eax
movq %rax, -0x50(%rbp)
cmpq $0x0, -0x50(%rbp)
jge 0xcba0
jmp 0xc924
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jne 0xc993
movq -0x60(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xc955
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rax
shlq %rax
movq %rax, -0xa0(%rbp)
jmp 0xc963
movl $0x2, %eax
movq %rax, -0xa0(%rbp)
jmp 0xc963
movq -0xa0(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x60(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x60(%rbp), %rdx
movq 0x20(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x20(%rdx)
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x21, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x41, %cl
orb $0x40, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x20, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x58(%rbp), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
subq -0x50(%rbp), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq (%rax), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x80(%rbp), %rax
movl 0xc(%rax), %eax
xorl %ecx, %ecx
subq -0x50(%rbp), %rcx
sarq $0x2, %rcx
xorl %edx, %edx
movl %edx, %edi
subq -0x50(%rbp), %rdi
andq $0x3, %rdi
xorl %edx, %edx
movl $0x1, %esi
cmpq $0x0, %rdi
cmovnel %esi, %edx
movslq %edx, %rdx
addq %rdx, %rcx
addq %rcx, %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x80(%rbp), %rcx
movl 0x10(%rcx), %ecx
cmpq %rcx, %rax
jae 0xcb45
movq -0x80(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xcb47
movq -0x80(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x80(%rbp), %rax
movl 0xc(%rax), %eax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
addq %rax, %rsi
movq -0x80(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x80(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movl %eax, %edx
movq -0x60(%rbp), %rcx
addq $0x38, %rcx
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, %r8d
callq 0xbc90
jmp 0xcba2
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jne 0xcc11
movq -0x60(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xcbd3
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rax
shlq %rax
movq %rax, -0xa8(%rbp)
jmp 0xcbe1
movl $0x2, %eax
movq %rax, -0xa8(%rbp)
jmp 0xcbe1
movq -0xa8(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x60(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x60(%rbp), %rdx
movq 0x20(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x20(%rdx)
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x70(%rbp), %rax
movl 0xc(%rax), %ecx
shll %ecx
shrl %ecx
movq -0x80(%rbp), %rax
movl %ecx, (%rax)
movq -0x70(%rbp), %rax
movl 0x18(%rax), %eax
shrl $0x1f, %eax
movb %al, %dl
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $0x1, %dl
shlb $0x5, %dl
andb $-0x21, %cl
orb %dl, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x20, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x70(%rbp), %rax
movl 0x4(%rax), %eax
movq %rax, -0xb0(%rbp)
cmpq $0x0, -0x50(%rbp)
jle 0xccab
movq -0x50(%rbp), %rax
movq %rax, -0xb8(%rbp)
jmp 0xccb6
xorl %eax, %eax
movq %rax, -0xb8(%rbp)
jmp 0xccb6
movq -0xb0(%rbp), %rax
movq -0xb8(%rbp), %rcx
addq %rcx, %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x70(%rbp), %rax
movl 0x8(%rax), %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x70(%rbp), %rax
movl 0x18(%rax), %eax
shrl $0x1f, %eax
cmpl $0x0, %eax
je 0xcd1b
movq -0x70(%rbp), %rax
movl 0x10(%rax), %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x70(%rbp), %rax
movl 0x10(%rax), %ecx
movq -0x80(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x80(%rbp), %rdx
subl 0x4(%rdx), %eax
addl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x10(%rax)
jmp 0xcd47
movq -0x70(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0x80(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x80(%rbp), %rdx
subl 0x4(%rdx), %eax
subl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x70(%rbp), %rax
movl 0x14(%rax), %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x10(%rax)
cmpq $0x0, -0x78(%rbp)
je 0xcd5d
movq -0x78(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xbc(%rbp)
jmp 0xcd67
xorl %eax, %eax
movl %eax, -0xbc(%rbp)
jmp 0xcd67
movl -0xbc(%rbp), %eax
movq -0x70(%rbp), %rcx
cmpl 0x8(%rcx), %eax
jb 0xcda4
cmpq $0x0, -0x78(%rbp)
je 0xcd8c
movq -0x78(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xc0(%rbp)
jmp 0xcd96
xorl %eax, %eax
movl %eax, -0xc0(%rbp)
jmp 0xcd96
movl -0xc0(%rbp), %eax
movl %eax, -0xc4(%rbp)
jmp 0xcdb1
movq -0x70(%rbp), %rax
movl 0x8(%rax), %eax
movl %eax, -0xc4(%rbp)
movl -0xc4(%rbp), %eax
movl %eax, %eax
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0xc825
movq -0x58(%rbp), %rax
cmpq -0x30(%rbp), %rax
jge 0xd057
jmp 0xcdde
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rcx
cmpq 0x28(%rcx), %rax
jne 0xce4d
movq -0x60(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0xce0f
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rax
shlq %rax
movq %rax, -0xd0(%rbp)
jmp 0xce1d
movl $0x2, %eax
movq %rax, -0xd0(%rbp)
jmp 0xce1d
movq -0xd0(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rdi
movq -0x60(%rbp), %rax
imulq $0x24, 0x28(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x30(%rax)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x60(%rbp), %rdx
movq 0x20(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x20(%rdx)
imulq $0x24, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movl $0xffffffff, (%rax)     # imm = 0xFFFFFFFF
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x21, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x41, %cl
orb $0x40, %cl
movb %cl, 0x20(%rax)
movq -0x80(%rbp), %rax
movb 0x20(%rax), %cl
andb $-0x20, %cl
orb $0x0, %cl
movb %cl, 0x20(%rax)
movq -0x58(%rbp), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0x30(%rbp), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq (%rax), %rax
movl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0xc(%rax)
movq -0x80(%rbp), %rax
movl 0xc(%rax), %ecx
movq -0x80(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x80(%rbp), %rdx
subl 0x4(%rdx), %eax
shrl $0x2, %eax
movq -0x80(%rbp), %rdx
movl 0x8(%rdx), %edi
movq -0x80(%rbp), %rdx
subl 0x4(%rdx), %edi
andl $0x3, %edi
xorl %edx, %edx
movl $0x1, %esi
cmpl $0x0, %edi
cmovnel %esi, %edx
addl %edx, %eax
addl %eax, %ecx
movq -0x80(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x80(%rbp), %rcx
movl 0x10(%rcx), %ecx
cmpq %rcx, %rax
jae 0xcffc
movq -0x80(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x60(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x60(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x8(%rax), %rsi
shlq $0x0, %rsi
callq 0x2360
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0xcffe
movq -0x80(%rbp), %rax
movl 0x10(%rax), %eax
movl %eax, %ecx
movq -0x60(%rbp), %rax
movq %rcx, (%rax)
movq -0x60(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x80(%rbp), %rax
movl 0xc(%rax), %eax
addq %rax, %rdi
movq -0x28(%rbp), %rsi
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
addq %rax, %rsi
movq -0x80(%rbp), %rax
movl 0x8(%rax), %eax
movq -0x80(%rbp), %rcx
subl 0x4(%rcx), %eax
movl %eax, %eax
movl %eax, %edx
movq -0x60(%rbp), %rcx
addq $0x38, %rcx
movq -0x80(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, %r8d
callq 0xbc90
jmp 0xd059
addq $0xd0, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)