// File: chhylp123[P]hifiasm/hic.cpp
// Function: trio_phasing_refine(ma_ug_t*, asg_t*, kv_u_trans_t*, ug_opt_t*)
void trio_phasing_refine(ma_ug_t *iug, asg_t* sg, kv_u_trans_t *ref, ug_opt_t *opt)
{
    ma_ug_t *ug = copy_untig_graph(iug); uint8_t *bf = NULL; 
    uint64_t ug_n0 = ug->g->n_seq, k, i, ul, cis_n, trans_n, w_n, tot_hap, tot_r, frid, mrid, flag; 
    kv_u_trans_t in; memset(&in, 0, sizeof(in)); ma_utg_t *p; u_trans_t *z; int64_t fh, mh;
    bubble_type *bub = gen_bubble_chain(sg, ug, opt, &bf, 0); free(bf);
    clean_u_trans_t_idx_filter_adv(ref, ug, sg, 0.95, 0);
    
    ///update ug itself
    ul = FATHER; frid = ug->g->n_seq; asg_seq_set(ug->g, frid, ul, 0); 
    kv_pushp(ma_utg_t, ug->u, &p); memset(p, 0, sizeof((*p)));
    p->s = 0; p->start = UINT32_MAX; p->end = UINT32_MAX; p->len = ul, p->n = p->m = 1; p->circ = 1;
    kv_roundup32(p->m); p->a = (uint64_t*)malloc(8 * p->m); 
    p->a[0] = UINT32_MAX; p->a[0] <<= 32; p->a[0] |= ul;
    
    ul = MOTHER; mrid = ug->g->n_seq; asg_seq_set(ug->g, mrid, ul, 0); 
    kv_pushp(ma_utg_t, ug->u, &p); memset(p, 0, sizeof((*p)));
    p->s = 0; p->start = UINT32_MAX; p->end = UINT32_MAX; p->len = ul, p->n = p->m = 1; p->circ = 1;
    kv_roundup32(p->m); p->a = (uint64_t*)malloc(8 * p->m); 
    p->a[0] = UINT32_MAX; p->a[0] <<= 32; p->a[0] |= ul;

    free(ug->g->idx); ug->g->idx = 0; ug->g->is_srt = 0; asg_cleanup(ug->g);

    ///update bubble
    REALLOC(bub->index, ug->g->n_seq);
    for (k = ug_n0; k < ug->g->n_seq; k++) bub->index[k] = bub->f_bub+1;
    
    bub->b_s_idx.n = ug->g->n_seq; kv_resize(uint64_t, bub->b_s_idx, ug->g->n_seq);
    for (k = ug_n0; k < bub->b_s_idx.m; k++) bub->b_s_idx.a[k] = (uint64_t)-1;

    ///check if a node has haplotype markers
    CALLOC(bf, ug->g->n_seq);
    for (k = cis_n = tot_hap = tot_r = 0; k < ug_n0; k++) {
        if(ug->g->seq[k].del) continue;
        p = &(ug->u.a[k]); tot_r += p->n;
        if(p->n == 0 || p->m == 0) continue;
        for (i = fh = mh = 0; i < p->n; i++) {
            if(R_INF.trio_flag[p->a[i]>>33] == FATHER) {
                tot_hap++; fh = 1;
            } else if(R_INF.trio_flag[p->a[i]>>33] == MOTHER) {
                tot_hap++; mh = 1;
            }
            if((R_INF.trio_flag[p->a[i]>>33] == FATHER) || (R_INF.trio_flag[p->a[i]>>33] == MOTHER)) {
                tot_hap++; bf[k] = 1; 
            }
        }
        if(fh > 0) {
            bf[k] = 1; cis_n+=2;
        }
        if(mh > 0) {
            bf[k] = 1; cis_n+=2;
        }
    }
    for (; k < ug->g->n_seq; k++) bf[k] = 1;///for father/mother nodes
    

    ///update trans overlaps
    kv_pushp(u_trans_t, *ref, &z); memset(z, 0, sizeof((*z)));
    z->f = RC_2; z->nw = (DBL_MAX/2); z->rev = 0;
    z->qn = ug_n0; z->tn = ug_n0+1; z->del = 0;
    z->qs = 0; z->qe = ug->g->seq[z->qn].len;
    z->ts = 0; z->te = ug->g->seq[z->tn].len;

    kv_pushp(u_trans_t, *ref, &z); memset(z, 0, sizeof((*z)));
    z->f = RC_2; z->nw = (DBL_MAX/2); z->rev = 0;
    z->qn = ug_n0+1; z->tn = ug_n0; z->del = 0;
    z->qs = 0; z->qe = ug->g->seq[z->qn].len;
    z->ts = 0; z->te = ug->g->seq[z->tn].len;

    kt_u_trans_t_idx(ref, ug->g->n_seq);
    // clean_u_trans_t_idx_adv(ref, ug, sg);
    // clean_u_trans_t_idx_filter_adv(ref, ug, sg);

    ///gen all links
    for (k = trans_n = 0; k < ref->n; k++) {
        if(ref->a[k].del) continue;
        if((IF_HOM(ref->a[k].qn, (*bub))) || (IF_HOM(ref->a[k].tn, (*bub)))) continue;
        ///disable bf
        // if((!bf[ref->a[k].qn]) || (!bf[ref->a[k].tn])) continue;
        trans_n++;
    }
    kv_resize(u_trans_t, in, (trans_n+cis_n)); 

    for (k = in.n = 0; k < ref->n; k++) {
        if(ref->a[k].del) continue;
        if((IF_HOM(ref->a[k].qn, (*bub))) || (IF_HOM(ref->a[k].tn, (*bub)))) continue;
        ///disable bf
        // if((!bf[ref->a[k].qn]) || (!bf[ref->a[k].tn])) continue;

        kv_pushp(u_trans_t, in, &z); memset(z, 0, sizeof((*z))); w_n = 0;
        if((ref->a[k].qn < ug_n0) && (ref->a[k].tn < ug_n0)) {
            w_n += ug_occ_hap_w(ref->a[k].qs, ref->a[k].qe, &(ug->u.a[ref->a[k].qn])) + 
            ug_occ_hap_w(ref->a[k].ts, ref->a[k].te, &(ug->u.a[ref->a[k].tn]));
            w_n += ug_occ_w(ref->a[k].qs, ref->a[k].qe, &(ug->u.a[ref->a[k].qn])) + 
            ug_occ_w(ref->a[k].ts, ref->a[k].te, &(ug->u.a[ref->a[k].tn]));
        } else {
            w_n += tot_hap + tot_r;
        }
        w_n >>= 1;///wn/4
        (*z) = ref->a[k]; z->nw = ((w_n)?(w_n):(1));
    }

    for (k = 0; k < ug_n0; k++) {
        if(!bf[k]) continue;
        p = &(ug->u.a[k]);
        if(p->n == 0 || p->m == 0) continue;
        fh = mh = 0;
        for (i = 0; i < p->n; i++) {
            if(R_INF.trio_flag[p->a[i]>>33] == FATHER) fh--;
            if(R_INF.trio_flag[p->a[i]>>33] == MOTHER) mh--;
        }
        if(fh != 0) {
            w_n = frid;

            kv_pushp(u_trans_t, in, &z); memset(z, 0, sizeof((*z)));
            z->f = RC_2; z->nw = fh; z->rev = 0;
            z->qn = w_n; z->tn = k; z->del = 0;
            z->qs = 0; z->qe = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
            z->ts = 0; z->te = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);

            kv_pushp(u_trans_t, in, &z); memset(z, 0, sizeof((*z)));
            z->f = RC_2; z->nw = fh; z->rev = 0;
            z->qn = k; z->tn = w_n; z->del = 0;
            z->qs = 0; z->qe = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
            z->ts = 0; z->te = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
        }

        if(mh != 0) {
            w_n = mrid;

            kv_pushp(u_trans_t, in, &z); memset(z, 0, sizeof((*z)));
            z->f = RC_2; z->nw = mh; z->rev = 0;
            z->qn = w_n; z->tn = k; z->del = 0;
            z->qs = 0; z->qe = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
            z->ts = 0; z->te = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);

            kv_pushp(u_trans_t, in, &z); memset(z, 0, sizeof((*z)));
            z->f = RC_2; z->nw = mh; z->rev = 0;
            z->qn = k; z->tn = w_n; z->del = 0;
            z->qs = 0; z->qe = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
            z->ts = 0; z->te = MIN(ug->g->seq[z->qn].len, ug->g->seq[z->tn].len);
        }
    }
    free(bf);
    assert(in.n == (trans_n+cis_n));
    kt_u_trans_t_idx(&in, ug->g->n_seq);
    // clean_u_trans_t_idx_adv(&in, ug, sg);

    ps_t *s = init_ps_t(11, ug->g->n_seq); s->s[frid] = 1; s->s[mrid] = -1; 
    mc_solve(NULL, NULL, &in, ug, sg, 0.8, NULL, 0, s->s, 1, bub, ref, 0, 0);
    // fprintf(stderr, "[M::%s::] s[frid]::%d, s->s[mrid]::%d\n", __func__, s->s[frid], s->s[mrid]);
    if((s->s[frid] != 0) && (s->s[mrid] != 0) && (s->s[frid] != s->s[mrid])) {
        memset(R_INF.trio_flag, AMBIGU, R_INF.total_reads * sizeof(uint8_t));
        for (i = 0; i < ug_n0; i++) {
            if(ug->g->seq[i].del) continue;
            flag = AMBIGU;
            if(s->s[i] == 0) continue;
            flag = (s->s[i] == s->s[frid]? FATHER:MOTHER);
            p = &ug->u.a[i];
            if(p->m == 0) continue;
            for (k = 0; k < p->n; k++) R_INF.trio_flag[p->a[k]>>33] = flag;
        }
    }

    destory_bubbles(bub); free(bub); ma_ug_destroy(ug);
    destory_ps_t(&s); kv_destroy(in); kv_destroy(in.idx);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1b0, %rsp            # imm = 0x1B0
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rdi
callq 0x10ba70
movq %rax, -0x28(%rbp)
movq $0x0, -0x30(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movq %rax, -0x38(%rbp)
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x20(%rbp), %rdx
leaq -0x30(%rbp), %rcx
xorl %r8d, %r8d
callq 0x322770
movq %rax, -0xe8(%rbp)
movq -0x30(%rbp), %rdi
callq 0x2210
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rsi
movq -0x10(%rbp), %rdx
movsd 0x17484b(%rip), %xmm0   # 0x382220
xorl %eax, %eax
movl %eax, %ecx
callq 0x1054c0
movq $0x1, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movq %rax, -0x80(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x80(%rbp), %rax
movl %eax, %esi
movq -0x50(%rbp), %rax
movl %eax, %edx
xorl %ecx, %ecx
callq 0xcd8f0
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x20da85
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x20da47
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0xf8(%rbp)
jmp 0x20da55
movl $0x2, %eax
movq %rax, -0xf8(%rbp)
jmp 0x20da55
movq -0xf8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
imulq $0x28, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x2100
movq -0xc8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0xc8(%rbp), %rax
movl $0xffffffff, 0x4(%rax)  # imm = 0xFFFFFFFF
movq -0xc8(%rbp), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
movq -0x50(%rbp), %rax
movl %eax, %edx
movq -0xc8(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl $0x80000000, %ecx       # imm = 0x80000000
orl %edx, %ecx
movl %ecx, (%rax)
movq -0xc8(%rbp), %rax
movl $0x1, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl $0x1, 0x10(%rax)
movq -0xc8(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl $0x80000000, %ecx       # imm = 0x80000000
movl %ecx, (%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x2, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x4, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x8, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x10, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %eax
shll $0x3, %eax
movl %eax, %eax
movl %eax, %edi
callq 0x2270
movq %rax, %rcx
movq -0xc8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %rcx, (%rax)
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movq (%rax), %rcx
shlq $0x20, %rcx
movq %rcx, (%rax)
movq -0x50(%rbp), %rcx
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
orq (%rax), %rcx
movq %rcx, (%rax)
movq $0x2, -0x50(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movq %rax, -0x88(%rbp)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x88(%rbp), %rax
movl %eax, %esi
movq -0x50(%rbp), %rax
movl %eax, %edx
xorl %ecx, %ecx
callq 0xcd8f0
movq -0x28(%rbp), %rax
movq (%rax), %rax
movq -0x28(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x20dceb
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x20dcad
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x100(%rbp)
jmp 0x20dcbb
movl $0x2, %eax
movq %rax, -0x100(%rbp)
jmp 0x20dcbb
movq -0x100(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x28(%rbp), %rax
imulq $0x28, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x28(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rdi
xorl %esi, %esi
movl $0x28, %edx
callq 0x2100
movq -0xc8(%rbp), %rax
movq $0x0, 0x20(%rax)
movq -0xc8(%rbp), %rax
movl $0xffffffff, 0x4(%rax)  # imm = 0xFFFFFFFF
movq -0xc8(%rbp), %rax
movl $0xffffffff, 0x8(%rax)  # imm = 0xFFFFFFFF
movq -0x50(%rbp), %rax
movl %eax, %edx
movq -0xc8(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
andl $0x80000000, %ecx       # imm = 0x80000000
orl %edx, %ecx
movl %ecx, (%rax)
movq -0xc8(%rbp), %rax
movl $0x1, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl $0x1, 0x10(%rax)
movq -0xc8(%rbp), %rax
movl (%rax), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl $0x80000000, %ecx       # imm = 0x80000000
movl %ecx, (%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x2, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x4, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x8, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
shrl $0x10, %ecx
movq -0xc8(%rbp), %rax
orl 0xc(%rax), %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0xc(%rax)
movq -0xc8(%rbp), %rax
movl 0xc(%rax), %eax
shll $0x3, %eax
movl %eax, %eax
movl %eax, %edi
callq 0x2270
movq %rax, %rcx
movq -0xc8(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
movq %rcx, (%rax)
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
movq (%rax), %rcx
shlq $0x20, %rcx
movq %rcx, (%rax)
movq -0x50(%rbp), %rcx
movq -0xc8(%rbp), %rax
movq 0x18(%rax), %rax
orq (%rax), %rcx
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x28(%rax), %rdi
callq 0x2210
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq $0x0, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x4(%rax), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
orl $0x0, %ecx
movl %ecx, 0x4(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rdi
callq 0xcdd10
movq -0xe8(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movl %eax, %esi
shlq $0x2, %rsi
callq 0x2360
movq %rax, %rcx
movq -0xe8(%rbp), %rax
movq %rcx, (%rax)
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movl 0x14(%rcx), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x20df74
movq -0xe8(%rbp), %rax
movq 0x80(%rax), %rax
addq $0x1, %rax
movl %eax, %edx
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x40(%rbp), %rcx
movl %edx, (%rax,%rcx,4)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20df25
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movl %eax, %ecx
movq -0xe8(%rbp), %rax
movq %rcx, 0x60(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movl 0x14(%rcx), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x20e0c1
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movl %eax, %ecx
movq -0xe8(%rbp), %rax
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
shrq %rcx
movq -0xe8(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
shrq $0x2, %rcx
movq -0xe8(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
shrq $0x4, %rcx
movq -0xe8(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
shrq $0x8, %rcx
movq -0xe8(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
shrq $0x10, %rcx
movq -0xe8(%rbp), %rax
orq 0x68(%rax), %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x68(%rax)
movq -0xe8(%rbp), %rax
movq 0x70(%rax), %rdi
movq -0xe8(%rbp), %rax
movq 0x68(%rax), %rsi
shlq $0x3, %rsi
callq 0x2360
movq %rax, %rcx
movq -0xe8(%rbp), %rax
movq %rcx, 0x70(%rax)
jmp 0x20e0c3
movq -0x38(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0xe8(%rbp), %rcx
cmpq 0x68(%rcx), %rax
jae 0x20e101
movq -0xe8(%rbp), %rax
movq 0x70(%rax), %rax
movq -0x40(%rbp), %rcx
movq $-0x1, (%rax,%rcx,8)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20e0cb
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movl %eax, %edi
movl $0x1, %esi
callq 0x2140
movq %rax, -0x30(%rbp)
movq $0x0, -0x78(%rbp)
movq $0x0, -0x70(%rbp)
movq $0x0, -0x58(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x20e34e
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0x40(%rbp), %rcx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x0, %eax
je 0x20e171
jmp 0x20e33d
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x40(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
movl 0x10(%rax), %eax
addq -0x78(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0xc8(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0x20e1b4
movq -0xc8(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x20e1b9
jmp 0x20e33d
movq $0x0, -0xe0(%rbp)
movq $0x0, -0xd8(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0xc8(%rbp), %rcx
movl 0x10(%rcx), %ecx
cmpq %rcx, %rax
jae 0x20e2f7
leaq 0x1b70db(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0x20e232
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
movq $0x1, -0xd8(%rbp)
jmp 0x20e276
leaq 0x1b7097(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x2, %eax
jne 0x20e274
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
movq $0x1, -0xe0(%rbp)
jmp 0x20e276
leaq 0x1b7053(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x1, %eax
je 0x20e2cc
leaq 0x1b7028(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x2, %eax
jne 0x20e2e4
movq -0x70(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x70(%rbp)
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
movb $0x1, (%rax,%rcx)
jmp 0x20e2e6
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x20e1d7
cmpq $0x0, -0xd8(%rbp)
jle 0x20e319
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
movb $0x1, (%rax,%rcx)
movq -0x58(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x58(%rbp)
cmpq $0x0, -0xe0(%rbp)
jle 0x20e33b
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
movb $0x1, (%rax,%rcx)
movq -0x58(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x58(%rbp)
jmp 0x20e33d
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20e143
jmp 0x20e350
movq -0x40(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movl 0x14(%rcx), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movl %ecx, %ecx
cmpq %rcx, %rax
jae 0x20e386
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
movb $0x1, (%rax,%rcx)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20e350
jmp 0x20e388
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x20e3f6
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x20e3b8
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x108(%rbp)
jmp 0x20e3c6
movl $0x2, %eax
movq %rax, -0x108(%rbp)
jmp 0x20e3c6
movq -0x108(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x18(%rbp), %rax
imulq $0x30, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movsd 0x17da5e(%rip), %xmm0   # 0x38beb0
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x38(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq 0x8(%rcx), %rax
jne 0x20e57c
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x20e53e
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
shlq %rax
movq %rax, -0x110(%rbp)
jmp 0x20e54c
movl $0x2, %eax
movq %rax, -0x110(%rbp)
jmp 0x20e54c
movq -0x110(%rbp), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x18(%rbp), %rax
imulq $0x30, 0x8(%rax), %rsi
callq 0x2360
movq %rax, %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq -0x18(%rbp), %rdx
movq (%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, (%rdx)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movsd 0x17d8d8(%rip), %xmm0   # 0x38beb0
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x38(%rbp), %rax
addq $0x1, %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x38(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x18(%rbp), %rdi
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %esi
andl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
callq 0x104540
movq $0x0, -0x60(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x20e778
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movb 0x28(%rax), %al
shrb $0x7, %al
cmpb $0x0, %al
je 0x20e6eb
jmp 0x20e767
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,4), %eax
movq -0xe8(%rbp), %rcx
movq 0x80(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
ja 0x20e759
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,4), %eax
movq -0xe8(%rbp), %rcx
movq 0x80(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x20e75b
jmp 0x20e767
movq -0x60(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x60(%rbp)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20e6be
jmp 0x20e77a
movq -0xb8(%rbp), %rax
movq -0x60(%rbp), %rcx
addq -0x58(%rbp), %rcx
cmpq %rcx, %rax
jae 0x20e85c
movq -0x60(%rbp), %rax
addq -0x58(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
shrq %rax
orq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
shrq $0x2, %rax
orq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
shrq $0x4, %rax
orq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
shrq $0x8, %rax
orq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
shrq $0x10, %rax
orq -0xb8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
addq $0x1, %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
jmp 0x20e85e
movq $0x0, -0xc0(%rbp)
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
jae 0x20ec1e
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movb 0x28(%rax), %al
shrb $0x7, %al
cmpb $0x0, %al
je 0x20e8a1
jmp 0x20ec0d
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,4), %eax
movq -0xe8(%rbp), %rcx
movq 0x80(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
ja 0x20e90f
movq -0xe8(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x10(%rcx), %rcx
imulq $0x30, -0x40(%rbp), %rdx
addq %rdx, %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,4), %eax
movq -0xe8(%rbp), %rcx
movq 0x80(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
jbe 0x20e914
jmp 0x20ec0d
jmp 0x20e916
movq -0xc0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jne 0x20e97a
cmpq $0x0, -0xb8(%rbp)
je 0x20e943
movq -0xb8(%rbp), %rax
shlq %rax
movq %rax, -0x118(%rbp)
jmp 0x20e951
movl $0x2, %eax
movq %rax, -0x118(%rbp)
jmp 0x20e951
movq -0x118(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq $0x0, -0x68(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
cmpq -0x38(%rbp), %rax
jae 0x20eb75
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
cmpq -0x38(%rbp), %rax
jae 0x20eb75
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, %edi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, %esi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
imulq $0x28, %rax, %rax
addq %rax, %rdx
callq 0x20d820
movq %rax, -0x128(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, %edi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, %esi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
imulq $0x28, %rax, %rax
addq %rax, %rdx
callq 0x20d820
movq %rax, %rcx
movq -0x128(%rbp), %rax
addq %rcx, %rax
addq -0x68(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl (%rax), %eax
movl %eax, %edi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x4(%rax), %eax
movl %eax, %esi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x8(%rax), %eax
imulq $0x28, %rax, %rax
addq %rax, %rdx
callq 0x327090
movq %rax, -0x120(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0xc(%rax), %eax
movl %eax, %edi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x10(%rax), %eax
movl %eax, %esi
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rdx
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x30, -0x40(%rbp), %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
imulq $0x28, %rax, %rax
addq %rax, %rdx
callq 0x327090
movq %rax, %rcx
movq -0x120(%rbp), %rax
addq %rcx, %rax
addq -0x68(%rbp), %rax
movq %rax, -0x68(%rbp)
jmp 0x20eb85
movq -0x70(%rbp), %rax
addq -0x78(%rbp), %rax
addq -0x68(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
shrq %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
imulq $0x30, -0x40(%rbp), %rax
addq %rax, %rsi
movq -0xd0(%rbp), %rdi
movl $0x30, %edx
callq 0x2180
cmpq $0x0, -0x68(%rbp)
je 0x20ebc5
movq -0x68(%rbp), %rax
movq %rax, -0x130(%rbp)
jmp 0x20ebd3
movl $0x1, %eax
movq %rax, -0x130(%rbp)
jmp 0x20ebd3
movq -0x130(%rbp), %rax
movq %rax, %xmm0
movaps 0x17342a(%rip), %xmm1   # 0x382010
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x17342e(%rip), %xmm1   # 0x382020
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq -0xd0(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20e871
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x20f701
movq -0x30(%rbp), %rax
movq -0x40(%rbp), %rcx
cmpb $0x0, (%rax,%rcx)
jne 0x20ec47
jmp 0x20f6f0
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x40(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0x20ec78
movq -0xc8(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x20ec7d
jmp 0x20f6f0
movq $0x0, -0xe0(%rbp)
movq $0x0, -0xd8(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq -0xc8(%rbp), %rcx
movl 0x10(%rcx), %ecx
cmpq %rcx, %rax
jae 0x20ed3f
leaq 0x1b6617(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x1, %eax
jne 0x20ecef
movq -0xd8(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xd8(%rbp)
leaq 0x1b65da(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x48(%rbp), %rdx
movq (%rcx,%rdx,8), %rcx
shrq $0x21, %rcx
movzbl (%rax,%rcx), %eax
cmpl $0x2, %eax
jne 0x20ed2c
movq -0xe0(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0xe0(%rbp)
jmp 0x20ed2e
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x20ec9b
cmpq $0x0, -0xd8(%rbp)
je 0x20f215
movq -0x80(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xc0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jne 0x20edb9
cmpq $0x0, -0xb8(%rbp)
je 0x20ed82
movq -0xb8(%rbp), %rax
shlq %rax
movq %rax, -0x138(%rbp)
jmp 0x20ed90
movl $0x2, %eax
movq %rax, -0x138(%rbp)
jmp 0x20ed90
movq -0x138(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
cvtsi2sdq -0xd8(%rbp), %xmm0
movq -0xd0(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x68(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20eed8
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x13c(%rbp)
jmp 0x20eefc
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x13c(%rbp)
movl -0x13c(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20ef81
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x140(%rbp)
jmp 0x20efa5
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x140(%rbp)
movl -0x140(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0xc0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jne 0x20f019
cmpq $0x0, -0xb8(%rbp)
je 0x20efe2
movq -0xb8(%rbp), %rax
shlq %rax
movq %rax, -0x148(%rbp)
jmp 0x20eff0
movl $0x2, %eax
movq %rax, -0x148(%rbp)
jmp 0x20eff0
movq -0x148(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
cvtsi2sdq -0xd8(%rbp), %xmm0
movq -0xd0(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x68(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f138
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x14c(%rbp)
jmp 0x20f15c
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x14c(%rbp)
movl -0x14c(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f1e1
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x150(%rbp)
jmp 0x20f205
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x150(%rbp)
movl -0x150(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
cmpq $0x0, -0xe0(%rbp)
je 0x20f6ee
movq -0x88(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0xc0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jne 0x20f292
cmpq $0x0, -0xb8(%rbp)
je 0x20f25b
movq -0xb8(%rbp), %rax
shlq %rax
movq %rax, -0x158(%rbp)
jmp 0x20f269
movl $0x2, %eax
movq %rax, -0x158(%rbp)
jmp 0x20f269
movq -0x158(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
cvtsi2sdq -0xe0(%rbp), %xmm0
movq -0xd0(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x68(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f3b1
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x15c(%rbp)
jmp 0x20f3d5
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x15c(%rbp)
movl -0x15c(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f45a
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x160(%rbp)
jmp 0x20f47e
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x160(%rbp)
movl -0x160(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0xc0(%rbp), %rax
cmpq -0xb8(%rbp), %rax
jne 0x20f4f2
cmpq $0x0, -0xb8(%rbp)
je 0x20f4bb
movq -0xb8(%rbp), %rax
shlq %rax
movq %rax, -0x168(%rbp)
jmp 0x20f4c9
movl $0x2, %eax
movq %rax, -0x168(%rbp)
jmp 0x20f4c9
movq -0x168(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb0(%rbp), %rdi
imulq $0x30, -0xb8(%rbp), %rsi
callq 0x2360
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rdi
xorl %esi, %esi
movl $0x30, %edx
callq 0x2100
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x40, %cl
orb $0x2, %cl
movb %cl, 0x28(%rax)
cvtsi2sdq -0xe0(%rbp), %xmm0
movq -0xd0(%rbp), %rax
movsd %xmm0, 0x20(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $-0x41, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0x40(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x8(%rax)
movq -0x68(%rbp), %rax
movl %eax, %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x14(%rax)
movq -0xd0(%rbp), %rax
movb 0x28(%rax), %cl
andb $0x7f, %cl
orb $0x0, %cl
movb %cl, 0x28(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, (%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f611
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x16c(%rbp)
jmp 0x20f635
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x16c(%rbp)
movl -0x16c(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x4(%rax)
movq -0xd0(%rbp), %rax
movl $0x0, 0xc(%rax)
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movq -0x28(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0xd0(%rbp), %rdx
movl 0x14(%rdx), %edx
movl (%rcx,%rdx,8), %ecx
andl $0x7fffffff, %ecx       # imm = 0x7FFFFFFF
cmpl %ecx, %eax
jg 0x20f6ba
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x8(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x170(%rbp)
jmp 0x20f6de
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0xd0(%rbp), %rcx
movl 0x14(%rcx), %ecx
movl (%rax,%rcx,8), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, -0x170(%rbp)
movl -0x170(%rbp), %ecx
movq -0xd0(%rbp), %rax
movl %ecx, 0x10(%rax)
jmp 0x20f6f0
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20ec26
movq -0x30(%rbp), %rdi
callq 0x2210
movq -0xc0(%rbp), %rax
movq -0x60(%rbp), %rcx
addq -0x58(%rbp), %rcx
cmpq %rcx, %rax
jne 0x20f720
jmp 0x20f73f
leaq 0x17e0b0(%rip), %rdi    # 0x38d7d7
leaq 0x17dfbf(%rip), %rsi    # 0x38d6ed
movl $0x45dd, %edx           # imm = 0x45DD
leaq 0x17e0b5(%rip), %rcx    # 0x38d7ef
callq 0x2130
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %esi
andl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
leaq -0xc0(%rbp), %rdi
callq 0x104540
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movl 0x14(%rax), %eax
andl $0x7fffffff, %eax       # imm = 0x7FFFFFFF
movl %eax, %eax
movl %eax, %esi
movl $0xb, %edi
callq 0x204880
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x80(%rbp), %rcx
movb $0x1, (%rax,%rcx)
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x88(%rbp), %rcx
movb $-0x1, (%rax,%rcx)
movq -0x28(%rbp), %rcx
movq -0x10(%rbp), %r8
movq -0xf0(%rbp), %rax
movq (%rax), %r11
movq -0xe8(%rbp), %r10
movq -0x18(%rbp), %rax
xorl %edx, %edx
movl %edx, %r9d
leaq -0xc0(%rbp), %rdx
movsd 0x172a57(%rip), %xmm0   # 0x382230
xorl %esi, %esi
movq %r9, %rdi
movq %r9, %rsi
movl $0x0, (%rsp)
movq %r11, 0x8(%rsp)
movl $0x1, 0x10(%rsp)
movq %r10, 0x18(%rsp)
movq %rax, 0x20(%rsp)
movl $0x0, 0x28(%rsp)
movl $0x0, 0x30(%rsp)
callq 0x227770
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x80(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x20f9c8
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x88(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
je 0x20f9c8
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x80(%rbp), %rcx
movsbl (%rax,%rcx), %eax
movq -0xf0(%rbp), %rcx
movq (%rcx), %rcx
movq -0x88(%rbp), %rdx
movsbl (%rcx,%rdx), %ecx
cmpl %ecx, %eax
je 0x20f9c8
leaq 0x1b5a4d(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rdi
leaq 0x1b5a42(%rip), %rax    # 0x3c52d0
movq 0x50(%rax), %rdx
shlq $0x0, %rdx
xorl %esi, %esi
callq 0x2100
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
cmpq -0x38(%rbp), %rax
jae 0x20f9c6
movq -0x28(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x20(%rax), %rax
movq -0x48(%rbp), %rcx
movl (%rax,%rcx,8), %eax
shrl $0x1f, %eax
cmpl $0x0, %eax
je 0x20f8d3
jmp 0x20f9b5
movq $0x0, -0x90(%rbp)
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x0, %eax
jne 0x20f8fa
jmp 0x20f9b5
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x48(%rbp), %rcx
movsbl (%rax,%rcx), %edx
movq -0xf0(%rbp), %rax
movq (%rax), %rax
movq -0x80(%rbp), %rcx
movsbl (%rax,%rcx), %esi
movl $0x2, %eax
movl $0x1, %ecx
cmpl %esi, %edx
cmovel %ecx, %eax
cltq
movq %rax, -0x90(%rbp)
movq -0x28(%rbp), %rax
movq 0x10(%rax), %rax
imulq $0x28, -0x48(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0xc8(%rbp)
movq -0xc8(%rbp), %rax
cmpl $0x0, 0xc(%rax)
jne 0x20f95c
jmp 0x20f9b5
movq $0x0, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq -0xc8(%rbp), %rcx
movl 0x10(%rcx), %ecx
cmpq %rcx, %rax
jae 0x20f9b3
movq -0x90(%rbp), %rax
movb %al, %dl
leaq 0x1b5949(%rip), %rax    # 0x3c52d0
movq 0x28(%rax), %rax
movq -0xc8(%rbp), %rcx
movq 0x18(%rcx), %rcx
movq -0x40(%rbp), %rsi
movq (%rcx,%rsi,8), %rcx
shrq $0x21, %rcx
movb %dl, (%rax,%rcx)
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x20f964
jmp 0x20f9b5
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0x20f8a5
jmp 0x20f9c8
movq -0xe8(%rbp), %rdi
callq 0x1c4a90
movq -0xe8(%rbp), %rdi
callq 0x2210
movq -0x28(%rbp), %rdi
callq 0xcd6f0
leaq -0xf0(%rbp), %rdi
callq 0x2048f0
movq -0xb0(%rbp), %rdi
callq 0x2210
movq -0x98(%rbp), %rdi
callq 0x2210
addq $0x1b0, %rsp            # imm = 0x1B0
popq %rbp
retq
nopw %cs:(%rax,%rax)