// File: chhylp123[P]hifiasm/inter.cpp
// Function: gl_chain_refine_advance(overlap_region_alloc*, Correct_dumy*, haplotype_evdience_alloc*, glchain_t*, st_mt_t*, ul_idx_t const*, double, long, long, ug_opt_t const*, long, void*)
int64_t gl_chain_refine_advance(overlap_region_alloc* olist, Correct_dumy* dumy, haplotype_evdience_alloc *hap, glchain_t *ll, st_mt_t *sps, const ul_idx_t *uref, double diff_ec_ul, int64_t winLen, int64_t qlen, const ug_opt_t *uopt, 
int64_t debug_i, void *km)
{
	// ll->tk.n = ll->lo.n = 0;
	kv_ul_ov_t *idx = &(ll->lo);
	ul_contain *ct = uref->ct;
	uint64_t o2 = gl_chain_gen(olist, uref, idx, 0, hap, km);
	if(idx->n == 0) return 0;
	// fprintf(stderr, "[M::%s] qlen:%ld, idx->n:%u\n", __func__, qlen, (uint32_t)idx->n);
	uint64_t k, an, cn, si = 0, ei = 0, resc = 0, resc_tk = 0, tk_pl = 0, f = 0, occ = 0, cis_occ = 0, t_cis = 0;
	ma_utg_t *u = NULL; overlap_region *o = NULL;

	kv_resize_km(km, uint64_t, ll->srt.a, idx->n);
    kv_resize_km(km, uint64_t, hap->snp_srt, idx->n);
	kv_resize_km(km, ul_ov_t, ll->tk, ll->tk.n+idx->n);
	///note: there are three rounds of gl_chain_advance()
	///the first two rounds could reuse dumy->overlapID. But for the last round, dumy->overlapID is not long enough 
	occ = gl_chain_advance(idx, ll->tk.a+ll->tk.n, uref, uopt, G_CHAIN_BW, diff_ec_ul, qlen, UG_SKIP, dumy->overlapID, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_TRANS_WEIGHT, 0, NULL, uref->ug, debug_i, km);
	if(occ) {
		if(ff_chain(idx, qlen, P_CHAIN_COV, -1/**G_CHAIN_TRANS_RATE**/, ll->tk.a+ll->tk.n, NULL, NULL, NULL, diff_ec_ul, winLen, km)) {
			f = 1; //dump_chain(idx, ll->tk.a+ll->tk.n, &(idx->a[idx->n-1]), km); 
			for (k = idx->a[idx->n-1].ts; k < idx->a[idx->n-1].te; k++) {
				olist->list[ll->tk.a[ll->tk.n+k].qn].x_pos_strand = 1;
			}
		} else if(o2) {///means there are trans overlaps
			gl_chain_gen(olist, uref, idx, 1, hap, km);
			kv_resize_km(km, uint64_t, ll->srt.a, idx->n);
    		kv_resize_km(km, uint64_t, hap->snp_srt, idx->n);
			kv_resize_km(km, ul_ov_t, ll->tk, ll->tk.n+idx->n);
			///chain all U-matches
			occ = gl_chain_advance(idx, ll->tk.a+ll->tk.n, uref, uopt, G_CHAIN_BW, diff_ec_ul, qlen, UG_SKIP, dumy->overlapID, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_TRANS_WEIGHT, 0, NULL, uref->ug, debug_i, km);
			if(ff_chain(idx, qlen, P_CHAIN_COV, G_CHAIN_TRANS_RATE, ll->tk.a+ll->tk.n, olist, hap, uref, diff_ec_ul, winLen, km)) {
				f = 1; //dump_chain(idx, ll->tk.a+ll->tk.n, &(idx->a[idx->n-1]), km); 
				for (k = idx->a[idx->n-1].ts; k < idx->a[idx->n-1].te; k++) {
					olist->list[ll->tk.a[ll->tk.n+k].qn].x_pos_strand = 1;
				}
			}
		}
	}

	if(!f) {///if f == 1, only dump primary chain; otherwise dump all chains
		///we can save all data to buffer like ll->srt.a in advance; in case we don't need third round of chaining
		///means no trans overlaps, no need to do third round of chaining
		// if(!o2) {
		// 	;
		// }
		/**
		uint64_t z;
		for (k = 0; k < idx->n; k++) {
			if(check_trans_rate(ll->tk.a+ll->tk.n+idx->a[k].ts, idx->a[k].te-idx->a[k].ts, G_CHAIN_TRANS_RATE)) {
				for (z = idx->a[k].ts; z < idx->a[k].te; z++) {
					olist->list[ll->tk.a[ll->tk.n+z].qn].x_pos_strand = 1;
				}
			} else {
				for (z = idx->a[k].ts; z < idx->a[k].te; z++) {
					if(!(ll->tk.a[ll->tk.n+z].el)) continue;
					olist->list[ll->tk.a[ll->tk.n+z].qn].x_pos_strand = 1;
				}
			}	
		}
		**/
		for (k = 0; k < occ; k++) {
			olist->list[ll->tk.a[ll->tk.n+k].qn].x_pos_strand = 1;
		}
		// kv_resize_km(km, ul_ov_t, *idx, occ); idx->n = occ;
		// memcpy(idx->a, ll->tk.a+ll->tk.n, occ*sizeof((*(idx->a))));
	}
	// for (k = 0; k < idx->n; k++) olist->list[idx->a[k].qn].x_pos_strand = 1;
		
	for (k = 0, idx->n = 0, tk_pl = ll->tk.n, t_cis = 0; k < olist->length; k++) {
		o = &(olist->list[k]);
		///if f == 1, no matter 
		if(o->x_pos_strand && (f || o->is_match == 1)){
			u = &(uref->ug->u.a[o->y_id]);///overlaped reads
			resc_tk += rescue_trans_ul_chains(uref, o, NULL, 0, u, &(ll->tk), -1, -1, 0, NULL, km);
		} else if((!f) && o->is_match == 2) {
			// fprintf(stderr, "###[M::%s] # k:%lu, # o->y_id:%u\n", __func__, k, o->y_id);
			an = update_ava_het_site(hap, k, &si, &ei, 1);
			// if(an != get_het_site(hap, k)) fprintf(stderr, "an->%lu, get_het_site->%lu\n", an, get_het_site(hap, k));
			assert(an > 0);

			cn = ((uint32_t)(ct->idx.a[o->y_id]));		
			if(cn > 0) {
				resc += rescue_contain_ul_chains(uref, o, hap->list+si, an, 
				ct->rids.a + ((ct->idx.a[o->y_id])>>32), cn, idx, diff_ec_ul, winLen, 0, km);
			}

			u = &(uref->ug->u.a[o->y_id]);
			if(u->n > 1 || o->x_pos_strand) {///no redundant items here
				resc_tk += rescue_trans_ul_chains(uref, o, hap->list+si, an, u, 
				&(ll->tk), diff_ec_ul, winLen, o->x_pos_strand, &cis_occ, km);
				t_cis += cis_occ;
			}

			si = ei;
		} 
	}

	assert(ll->tk.n == resc_tk+tk_pl);
	assert(idx->n == resc);
	if(f) assert(resc==0);

		
	if(!f) {///dedup contained alignments
		if(idx->n) {///if some contained alignments have been rescued
			radix_sort_ul_ov_srt_tn(idx->a, idx->a + idx->n);
			idx->n = dedup_sort_ul_ov_t(idx->a, idx->n);///different trans alignments may have the same contained alignment
		}
		resc = idx->n;
		// fprintf(stderr, "***[M::%s] # contain:%lu, # non-contain:%lu\n", __func__, resc, (uint64_t)(ll->tk.n-tk_pl));
		for (k = tk_pl; k < ll->tk.n; k++) {///dump all non-contained reads
			kv_push_km(km, ul_ov_t, *idx, ll->tk.a[k]);
			if(idx->a[idx->n-1].tn&((uint32_t)(0x80000000))) {
				idx->a[idx->n-1].tn -= ((uint32_t)(0x80000000));
			}
		}
		ll->tk.n = tk_pl;

		radix_sort_ul_ov_srt_qe(idx->a, idx->a + idx->n);
		if(resc) {///need to dedup contained alignment again
			// fprintf(stderr, "[M::%s] idx->n:%lu, resc:%lu\n", __func__, (uint64_t)idx->n, resc);
			idx->n = dedup_sort_contains(idx->a, idx->n, ct, uopt);
		}
		
		///note: need sps for third round of gl_chain_advance() as dumy->overlapID might be not long enough
		kv_resize_km(km, uint64_t, *sps, idx->n);
		kv_resize_km(km, uint64_t, ll->srt.a, idx->n);
		kv_resize_km(km, uint64_t, hap->snp_srt, idx->n);
		kv_resize_km(km, ul_ov_t, ll->tk, ll->tk.n+idx->n);
		occ = gl_chain_advance(idx, ll->tk.a+ll->tk.n, uref, uopt, G_CHAIN_BW, diff_ec_ul, qlen, UG_SKIP, sps->a, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_TRANS_WEIGHT, 1, &R_INF, NULL, debug_i, km);
		// fprintf(stderr, "***[M::%s] ll->tk.n:%u, occ:%lu\n", __func__, (uint32_t)ll->tk.n, occ);
		f = dump_all_chain_simple(idx, &(ll->tk), occ, qlen, P_CHAIN_COV, P_FRAGEMENT_CHAIN_COV, 
		P_FRAGEMENT_PRIMARY_CHAIN_COV, 0.1/**P_FRAGEMENT_PRIMARY_SECOND_COV**/, G_CHAIN_TRANS_RATE, PRIMARY_UL_CHAIN_MIN);
		// fprintf(stderr, ">>>[M::%s] ll->tk.n:%u\n", __func__, (uint32_t)ll->tk.n);
		// dump_all_chain(idx, &(ll->tk), occ, qlen, P_CHAIN_COV, P_CHAIN_SCORE);
	} else {
		///for primary chain, each element x: (x->tn & (uint32_t)(0x80000000))
		assgin_primary_chains(ll->tk.a+tk_pl, ll->tk.n-tk_pl, 1, NULL, NULL, NULL, NULL, G_CHAIN_BW, diff_ec_ul, qlen, 1);
		// radix_sort_ul_ov_srt_qe(ll->tk.a+tk_pl, ll->tk.a+ll->tk.n);
	} 

	///if f == 0, results have already been sorted by qe|qs
	if(f) {
		kv_resize_km(km, uint64_t, ll->srt.a, ll->tk.n-tk_pl); kv_resize_km(km, uint64_t, hap->snp_srt, ll->tk.n-tk_pl);
		assgin_primary_chains(ll->tk.a+tk_pl, ll->tk.n-tk_pl, 0, uref, uopt, ll->srt.a.a, hap->snp_srt.a, G_CHAIN_BW, diff_ec_ul, qlen, 1);
	}
	// debug_reverse_chain(ll->tk.a+tk_pl, ll->tk.n-tk_pl);
	/**
	if(idx->n > 0) {
		an = infer_read_ovlp(uref, olist, idx	, &(ll->tk), diff_ec_ul, winLen, uopt, ct, km);
		// if(an) fill_edge_weight(ll->tk.a+ll->tk.n-an, an, uopt, G_CHAIN_BW, diff_ec_ul, qlen);
	}
	**/
	return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x120, %rsp            # imm = 0x120
movq 0x30(%rbp), %rax
movq 0x28(%rbp), %rax
movq 0x20(%rbp), %rax
movq 0x18(%rbp), %rax
movq 0x10(%rbp), %rax
movq %rdi, -0x30(%rbp)
movq %rsi, -0x38(%rbp)
movq %rdx, -0x40(%rbp)
movq %rcx, -0x48(%rbp)
movq %r8, -0x50(%rbp)
movq %r9, -0x58(%rbp)
movsd %xmm0, -0x60(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x58(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x70(%rbp)
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq -0x40(%rbp), %r8
movq 0x30(%rbp), %r9
xorl %ecx, %ecx
callq 0x28cb20
movq %rax, -0x78(%rbp)
movq -0x68(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x296b8e
movq $0x0, -0x28(%rbp)
jmp 0x2983f0
movq $0x0, -0x98(%rbp)
movq $0x0, -0xa0(%rbp)
movq $0x0, -0xa8(%rbp)
movq $0x0, -0xb0(%rbp)
movq $0x0, -0xb8(%rbp)
movq $0x0, -0xc0(%rbp)
movq $0x0, -0xc8(%rbp)
movq $0x0, -0xd0(%rbp)
movq $0x0, -0xd8(%rbp)
movq $0x0, -0xe0(%rbp)
movq $0x0, -0xe8(%rbp)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x296cec
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x58(%rax), %rsi
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x296cee
jmp 0x296cf0
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x296e1d
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x30(%rbp), %rdi
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x296e1f
jmp 0x296e21
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq -0x68(%rbp), %rdx
addq 0x8(%rdx), %rcx
cmpq %rcx, %rax
jae 0x296f16
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x68(%rbp), %rax
addq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x28(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x296f18
movq -0x68(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x20(%rax), %rax
addq %rax, %rsi
movq -0x58(%rbp), %rdx
movq 0x20(%rbp), %rcx
movsd -0x60(%rbp), %xmm0
movq 0x18(%rbp), %r9
movq -0x38(%rbp), %rax
movq 0x28(%rax), %r15
movq -0x48(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rbx
movq -0x58(%rbp), %rax
movq (%rax), %r11
movq 0x28(%rbp), %r10
movq 0x30(%rbp), %rax
movl $0x10, %r8d
xorl %r12d, %r12d
movq $0x5, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq $-0x1, 0x20(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x292be0
movq %rax, -0xc8(%rbp)
cmpq $0x0, -0xc8(%rbp)
je 0x2975a0
movq -0x68(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x48(%rbp), %rax
imulq $0x1c, 0x20(%rax), %rax
addq %rax, %rdx
movsd -0x60(%rbp), %xmm2
movq 0x10(%rbp), %r10
movq 0x30(%rbp), %rax
movss 0xf9780(%rip), %xmm0    # 0x390780
movss 0xe8068(%rip), %xmm1    # 0x37f070
xorl %ecx, %ecx
movl %ecx, %r9d
movq %r9, %rcx
movq %r9, %r8
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x294890
cmpl $0x0, %eax
je 0x2970c4
movq $0x1, -0xc0(%rbp)
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x68(%rbp), %rcx
movq (%rcx), %rcx
movq -0x68(%rbp), %rdx
movq 0x8(%rdx), %rdx
subq $0x1, %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
movl 0x14(%rcx), %ecx
cmpq %rcx, %rax
jae 0x2970bf
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq 0x20(%rdx), %rdx
addq -0x80(%rbp), %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
imulq $0xa8, %rcx, %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x297056
jmp 0x29759e
cmpq $0x0, -0x78(%rbp)
je 0x29759c
movq -0x30(%rbp), %rdi
movq -0x58(%rbp), %rsi
movq -0x68(%rbp), %rdx
movq -0x40(%rbp), %r8
movq 0x30(%rbp), %r9
movl $0x1, %ecx
callq 0x28cb20
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x2971d2
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x58(%rax), %rsi
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x2971d4
jmp 0x2971d6
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x297303
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x30(%rbp), %rdi
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x297305
jmp 0x297307
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq -0x68(%rbp), %rdx
addq 0x8(%rdx), %rcx
cmpq %rcx, %rax
jae 0x2973fc
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x68(%rbp), %rax
addq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x28(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x2973fe
movq -0x68(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x20(%rax), %rax
addq %rax, %rsi
movq -0x58(%rbp), %rdx
movq 0x20(%rbp), %rcx
movsd -0x60(%rbp), %xmm0
movq 0x18(%rbp), %r9
movq -0x38(%rbp), %rax
movq 0x28(%rax), %r15
movq -0x48(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rbx
movq -0x58(%rbp), %rax
movq (%rax), %r11
movq 0x28(%rbp), %r10
movq 0x30(%rbp), %rax
movl $0x10, %r8d
xorl %r12d, %r12d
movq $0x5, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq $-0x1, 0x20(%rsp)
movq $0x0, 0x28(%rsp)
movq $0x0, 0x30(%rsp)
movq %r11, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x292be0
movq %rax, -0xc8(%rbp)
movq -0x68(%rbp), %rdi
movq 0x18(%rbp), %rsi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rdx
movq -0x48(%rbp), %rax
imulq $0x1c, 0x20(%rax), %rax
addq %rax, %rdx
movq -0x30(%rbp), %rcx
movq -0x40(%rbp), %r8
movq -0x58(%rbp), %r9
movsd -0x60(%rbp), %xmm2
movq 0x10(%rbp), %r10
movq 0x30(%rbp), %rax
movss 0xf929c(%rip), %xmm0    # 0x390780
movss 0xf9298(%rip), %xmm1    # 0x390784
movq %r10, (%rsp)
movq %rax, 0x8(%rsp)
callq 0x294890
cmpl $0x0, %eax
je 0x29759a
movq $0x1, -0xc0(%rbp)
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x68(%rbp), %rcx
movq (%rcx), %rcx
movq -0x68(%rbp), %rdx
movq 0x8(%rdx), %rdx
subq $0x1, %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
movl 0x14(%rcx), %ecx
cmpq %rcx, %rax
jae 0x297598
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq 0x20(%rdx), %rdx
addq -0x80(%rbp), %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
imulq $0xa8, %rcx, %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x29752f
jmp 0x29759a
jmp 0x29759c
jmp 0x29759e
jmp 0x2975a0
cmpq $0x0, -0xc0(%rbp)
jne 0x297604
movq $0x0, -0x80(%rbp)
movq -0x80(%rbp), %rax
cmpq -0xc8(%rbp), %rax
jae 0x297602
movq -0x30(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq 0x20(%rdx), %rdx
addq -0x80(%rbp), %rdx
imulq $0x1c, %rdx, %rdx
addq %rdx, %rcx
movl (%rcx), %ecx
imulq $0xa8, %rcx, %rcx
addq %rcx, %rax
movl $0x1, 0xc(%rax)
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x2975b2
jmp 0x297604
movq $0x0, -0x80(%rbp)
movq -0x68(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0xb8(%rbp)
movq $0x0, -0xd8(%rbp)
movq -0x80(%rbp), %rax
movq -0x30(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jae 0x297938
movq -0x30(%rbp), %rax
movq (%rax), %rax
imulq $0xa8, -0x80(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xe8(%rbp)
movq -0xe8(%rbp), %rax
cmpl $0x0, 0xc(%rax)
je 0x297711
cmpq $0x0, -0xc0(%rbp)
jne 0x29768c
movq -0xe8(%rbp), %rax
movzbl 0x2c(%rax), %eax
cmpl $0x1, %eax
jne 0x297711
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq -0xe8(%rbp), %rcx
movl 0x10(%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xe0(%rbp)
movq -0x58(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %r8
movq -0x48(%rbp), %r9
addq $0x18, %r9
movq 0x30(%rbp), %rax
xorl %ecx, %ecx
movsd 0xeaba1(%rip), %xmm0    # 0x382278
movq %rcx, %rdx
movq $-0x1, (%rsp)
movq $0x0, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x28f130
addq -0xb0(%rbp), %rax
movq %rax, -0xb0(%rbp)
jmp 0x297925
cmpq $0x0, -0xc0(%rbp)
jne 0x297923
movq -0xe8(%rbp), %rax
movzbl 0x2c(%rax), %eax
cmpl $0x2, %eax
jne 0x297923
movq -0x40(%rbp), %rdi
movq -0x80(%rbp), %rsi
leaq -0x98(%rbp), %rdx
leaq -0xa0(%rbp), %rcx
movl $0x1, %r8d
callq 0x28c790
movq %rax, -0x88(%rbp)
cmpq $0x0, -0x88(%rbp)
jbe 0x297767
jmp 0x297786
leaq 0xf9d49(%rip), %rdi     # 0x3914b7
leaq 0xf90ba(%rip), %rsi     # 0x39082f
movl $0x113d, %edx           # imm = 0x113D
leaq 0xf9d3d(%rip), %rcx     # 0x3914be
callq 0x2130
movq -0x70(%rbp), %rax
movq 0x10(%rax), %rax
movq -0xe8(%rbp), %rcx
movl 0x10(%rcx), %ecx
movq (%rax,%rcx,8), %rax
movl %eax, %eax
movq %rax, -0x90(%rbp)
cmpq $0x0, -0x90(%rbp)
jbe 0x297845
movq -0x58(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq -0x40(%rbp), %rax
movq (%rax), %rdx
imulq $0x18, -0x98(%rbp), %rax
addq %rax, %rdx
movq -0x88(%rbp), %rcx
movq -0x70(%rbp), %rax
movq 0x28(%rax), %r8
movq -0x70(%rbp), %rax
movq 0x10(%rax), %rax
movq -0xe8(%rbp), %r9
movl 0x10(%r9), %r9d
movq (%rax,%r9,8), %rax
shrq $0x20, %rax
imulq $0xc, %rax, %rax
addq %rax, %r8
movq -0x90(%rbp), %r9
movq -0x68(%rbp), %r11
movsd -0x60(%rbp), %xmm0
movq 0x10(%rbp), %r10
movq 0x30(%rbp), %rax
xorl %ebx, %ebx
movq %r11, (%rsp)
movq %r10, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x28ec10
addq -0xa8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0x58(%rbp), %rax
movq (%rax), %rax
movq 0x10(%rax), %rax
movq -0xe8(%rbp), %rcx
movl 0x10(%rcx), %ecx
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rax
cmpl $0x1, 0x10(%rax)
ja 0x297886
movq -0xe8(%rbp), %rax
cmpl $0x0, 0xc(%rax)
je 0x297915
movq -0x58(%rbp), %rdi
movq -0xe8(%rbp), %rsi
movq -0x40(%rbp), %rax
movq (%rax), %rdx
imulq $0x18, -0x98(%rbp), %rax
addq %rax, %rdx
movq -0x88(%rbp), %rcx
movq -0xe0(%rbp), %r8
movq -0x48(%rbp), %r9
addq $0x18, %r9
movsd -0x60(%rbp), %xmm0
movq 0x10(%rbp), %rbx
movq -0xe8(%rbp), %rax
movl 0xc(%rax), %eax
movl %eax, %r11d
movq 0x30(%rbp), %rax
leaq -0xd0(%rbp), %r10
movq %rbx, (%rsp)
movq %r11, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x28f130
addq -0xb0(%rbp), %rax
movq %rax, -0xb0(%rbp)
movq -0xd0(%rbp), %rax
addq -0xd8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq -0xa0(%rbp), %rax
movq %rax, -0x98(%rbp)
jmp 0x297925
jmp 0x297927
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x297632
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rax
movq -0xb0(%rbp), %rcx
addq -0xb8(%rbp), %rcx
cmpq %rcx, %rax
jne 0x297955
jmp 0x297974
leaq 0xf9c2d(%rip), %rdi     # 0x391589
leaq 0xf8ecc(%rip), %rsi     # 0x39082f
movl $0x1150, %edx           # imm = 0x1150
leaq 0xf9b4f(%rip), %rcx     # 0x3914be
callq 0x2130
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rax
cmpq -0xa8(%rbp), %rax
jne 0x297987
jmp 0x2979a6
leaq 0xf9c15(%rip), %rdi     # 0x3915a3
leaq 0xf8e9a(%rip), %rsi     # 0x39082f
movl $0x1151, %edx           # imm = 0x1151
leaq 0xf9b1d(%rip), %rcx     # 0x3914be
callq 0x2130
cmpq $0x0, -0xc0(%rbp)
je 0x2979dd
cmpq $0x0, -0xa8(%rbp)
jne 0x2979bc
jmp 0x2979db
leaq 0xf9bef(%rip), %rdi     # 0x3915b2
leaq 0xf8e65(%rip), %rsi     # 0x39082f
movl $0x1152, %edx           # imm = 0x1152
leaq 0xf9ae8(%rip), %rcx     # 0x3914be
callq 0x2130
jmp 0x2979dd
cmpq $0x0, -0xc0(%rbp)
jne 0x2980d7
movq -0x68(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x297a34
movq -0x68(%rbp), %rax
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq (%rax), %rsi
movq -0x68(%rbp), %rax
imulq $0x1c, 0x8(%rax), %rax
addq %rax, %rsi
callq 0x27bdd0
movq -0x68(%rbp), %rax
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x28f730
movq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0xa8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq -0x48(%rbp), %rcx
cmpq 0x20(%rcx), %rax
jae 0x297b80
jmp 0x297a62
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x10(%rcx), %rax
jne 0x297ad3
movq -0x68(%rbp), %rax
cmpq $0x0, 0x10(%rax)
je 0x297a93
movq -0x68(%rbp), %rax
movq 0x10(%rax), %rax
shlq %rax
movq %rax, -0xf0(%rbp)
jmp 0x297aa1
movl $0x2, %eax
movq %rax, -0xf0(%rbp)
jmp 0x297aa1
movq -0xf0(%rbp), %rcx
movq -0x68(%rbp), %rax
movq %rcx, 0x10(%rax)
movq 0x30(%rbp), %rdi
movq -0x68(%rbp), %rax
movq (%rax), %rsi
movq -0x68(%rbp), %rax
imulq $0x1c, 0x10(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rcx, (%rax)
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rcx
imulq $0x1c, -0x80(%rbp), %rax
addq %rax, %rcx
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rsi
movq 0x8(%rsi), %rdx
movq %rdx, %rdi
addq $0x1, %rdi
movq %rdi, 0x8(%rsi)
imulq $0x1c, %rdx, %rdx
addq %rdx, %rax
movq (%rcx), %rdx
movq %rdx, (%rax)
movq 0x8(%rcx), %rdx
movq %rdx, 0x8(%rax)
movq 0x10(%rcx), %rdx
movq %rdx, 0x10(%rax)
movl 0x18(%rcx), %ecx
movl %ecx, 0x18(%rax)
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
andl $0x80000000, %eax       # imm = 0x80000000
cmpl $0x0, %eax
je 0x297b6d
movq -0x68(%rbp), %rax
movq (%rax), %rax
movq -0x68(%rbp), %rcx
movq 0x8(%rcx), %rcx
subq $0x1, %rcx
imulq $0x1c, %rcx, %rcx
addq %rcx, %rax
movl 0xc(%rax), %ecx
subl $0x80000000, %ecx       # imm = 0x80000000
movl %ecx, 0xc(%rax)
jmp 0x297b6f
movq -0x80(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x80(%rbp)
jmp 0x297a4e
movq -0xb8(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x68(%rbp), %rax
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq (%rax), %rsi
movq -0x68(%rbp), %rax
imulq $0x1c, 0x8(%rax), %rax
addq %rax, %rsi
callq 0x27b350
cmpq $0x0, -0xa8(%rbp)
je 0x297bdf
movq -0x68(%rbp), %rax
movq (%rax), %rdi
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rsi
movq -0x70(%rbp), %rdx
movq 0x20(%rbp), %rcx
callq 0x294df0
movq %rax, %rcx
movq -0x68(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x297be1
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x297cc6
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
shrq %rcx
movq -0x50(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x2, %rcx
movq -0x50(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x4, %rcx
movq -0x50(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x8, %rcx
movq -0x50(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
shrq $0x10, %rcx
movq -0x50(%rbp), %rax
orq 0x8(%rax), %rcx
movq %rcx, 0x8(%rax)
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x8(%rax)
movq 0x30(%rbp), %rdi
movq -0x50(%rbp), %rax
movq 0x10(%rax), %rsi
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x50(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x297cc8
jmp 0x297cca
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x297daf
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x58(%rax), %rsi
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x297db1
jmp 0x297db3
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x68(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x297ee0
movq -0x68(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x30(%rbp), %rdi
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x297ee2
jmp 0x297ee4
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x20(%rcx), %rcx
movq -0x68(%rbp), %rdx
addq 0x8(%rdx), %rcx
cmpq %rcx, %rax
jae 0x297fd9
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rcx
movq -0x68(%rbp), %rax
addq 0x8(%rax), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x28(%rax), %rcx
movq %rcx, 0x28(%rax)
movq -0x48(%rbp), %rax
movq 0x28(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x28(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x28(%rax), %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x297fdb
movq -0x68(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rsi
movq -0x48(%rbp), %rax
imulq $0x1c, 0x20(%rax), %rax
addq %rax, %rsi
movq -0x58(%rbp), %rdx
movq 0x20(%rbp), %rcx
movsd -0x60(%rbp), %xmm0
movq 0x18(%rbp), %r9
movq -0x50(%rbp), %rax
movq 0x10(%rax), %r15
movq -0x48(%rbp), %rax
movq 0x58(%rax), %r14
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rbx
movq 0x28(%rbp), %r10
movq 0x30(%rbp), %rax
movl $0x10, %r8d
leaq 0x12d29c(%rip), %r11    # 0x3c52d0
xorl %r12d, %r12d
movq $0x5, (%rsp)
movq %r15, 0x8(%rsp)
movq %r14, 0x10(%rsp)
movq %rbx, 0x18(%rsp)
movq $-0x1, 0x20(%rsp)
movq $0x1, 0x28(%rsp)
movq %r11, 0x30(%rsp)
movq $0x0, 0x38(%rsp)
movq %r10, 0x40(%rsp)
movq %rax, 0x48(%rsp)
callq 0x292be0
movq %rax, -0xc8(%rbp)
movq -0x68(%rbp), %rdi
movq -0x48(%rbp), %rsi
addq $0x18, %rsi
movq -0xc8(%rbp), %rdx
movq 0x18(%rbp), %rcx
movss 0xf86dd(%rip), %xmm0    # 0x390780
movss 0xe6fc1(%rip), %xmm1    # 0x37f06c
movss 0xf86d5(%rip), %xmm2    # 0x390788
movss 0xee7dd(%rip), %xmm3    # 0x386898
movss 0xf86c1(%rip), %xmm4    # 0x390784
movl $0x124f8, %r8d          # imm = 0x124F8
callq 0x295960
movq %rax, -0xc0(%rbp)
jmp 0x298136
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rdi
imulq $0x1c, -0xb8(%rbp), %rax
addq %rax, %rdi
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rsi
subq -0xb8(%rbp), %rsi
movsd -0x60(%rbp), %xmm0
movq 0x18(%rbp), %rax
movl $0x1, %edx
xorl %ecx, %ecx
movl %ecx, %r9d
movq %r9, %rcx
movq %r9, %r8
movq $0x0, (%rsp)
movq $0x10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
callq 0x2964c0
cmpq $0x0, -0xc0(%rbp)
je 0x2983e8
jmp 0x298146
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x20(%rcx), %rcx
subq -0xb8(%rbp), %rcx
cmpq %rcx, %rax
jae 0x29823c
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rcx
subq -0xb8(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x2, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x4, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x8, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
shrq $0x10, %rcx
movq -0x48(%rbp), %rax
orq 0x50(%rax), %rcx
movq %rcx, 0x50(%rax)
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x50(%rax)
movq 0x30(%rbp), %rdi
movq -0x48(%rbp), %rax
movq 0x58(%rax), %rsi
movq -0x48(%rbp), %rax
movq 0x50(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x58(%rax)
jmp 0x29823e
jmp 0x298240
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rax
movq -0x48(%rbp), %rcx
movq 0x20(%rcx), %rcx
subq -0xb8(%rbp), %rcx
cmpq %rcx, %rax
jae 0x29837e
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rcx
subq -0xb8(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x2, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x4, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x8, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
shrq $0x10, %rcx
movq -0x40(%rbp), %rax
orq 0x240(%rax), %rcx
movq %rcx, 0x240(%rax)
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x240(%rax)
movq 0x30(%rbp), %rdi
movq -0x40(%rbp), %rax
movq 0x248(%rax), %rsi
movq -0x40(%rbp), %rax
movq 0x240(%rax), %rdx
shlq $0x3, %rdx
callq 0x30e740
movq %rax, %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x248(%rax)
jmp 0x298380
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rdi
imulq $0x1c, -0xb8(%rbp), %rax
addq %rax, %rdi
movq -0x48(%rbp), %rax
movq 0x20(%rax), %rsi
subq -0xb8(%rbp), %rsi
movq -0x58(%rbp), %rcx
movq 0x20(%rbp), %r8
movq -0x48(%rbp), %rax
movq 0x58(%rax), %r9
movq -0x40(%rbp), %rax
movq 0x248(%rax), %r10
movsd -0x60(%rbp), %xmm0
movq 0x18(%rbp), %rax
xorl %edx, %edx
movq %r10, (%rsp)
movq $0x10, 0x8(%rsp)
movq %rax, 0x10(%rsp)
movq $0x1, 0x18(%rsp)
callq 0x2964c0
movq $0x1, -0x28(%rbp)
movq -0x28(%rbp), %rax
addq $0x120, %rsp            # imm = 0x120
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
nopw %cs:(%rax,%rax)