// File: karel-brinda[P]ococo/ext/htslib/cram/cram_encode.c
// Function: cram_encode_aux
static char *cram_encode_aux(cram_fd *fd, bam_seq_t *b, cram_container *c,
			     cram_slice *s, cram_record *cr) {
    char *aux, *orig, *tmp, *rg = NULL;
    int aux_size = bam_get_l_aux(b);
    cram_block *td_b = c->comp_hdr->TD_blk;
    int TD_blk_size = BLOCK_SIZE(td_b), new;
    char *key;
    khint_t k;


    /* Worst case is 1 nul char on every ??:Z: string, so +33% */
    BLOCK_GROW(s->aux_blk, aux_size*1.34+1);
    tmp = (char *)BLOCK_END(s->aux_blk);


    orig = aux = (char *)bam_aux(b);

    // Copy aux keys to td_b and aux values to s->aux_blk
    while (aux - orig < aux_size && aux[0] != 0) {
	uint32_t i32;
	int r;

	// RG:Z
	if (aux[0] == 'R' && aux[1] == 'G' && aux[2] == 'Z') {
	    rg = &aux[3];
	    while (*aux++);
	    continue;
	}

	// MD:Z
	if (aux[0] == 'M' && aux[1] == 'D' && aux[2] == 'Z') {
	    if (cr->len && !fd->no_ref && !(cr->flags & BAM_FUNMAP)) {
		while (*aux++);
		continue;
	    }
	}

	// NM:i
	if (aux[0] == 'N' && aux[1] == 'M') {
	    if (cr->len && !fd->no_ref && !(cr->flags & BAM_FUNMAP)) {
		switch(aux[2]) {
		case 'A': case 'C': case 'c': aux+=4; break;
		case 'S': case 's':           aux+=5; break;
		case 'I': case 'i': case 'f': aux+=7; break;
		default:
		    fprintf(stderr, "Unhandled type code for NM tag\n");
		    return NULL;
		}
		continue;
	    }
	}

	BLOCK_APPEND(td_b, aux, 3);

	i32 = (aux[0]<<16) | (aux[1]<<8) | aux[2];
	kh_put(s_i2i, c->tags_used, i32, &r);
	if (-1 == r)
	    return NULL;

	// BQ:Z
	if (aux[0] == 'B' && aux[1] == 'Q' && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_BQ_blk)
		if (!(s->aux_BQ_blk = cram_new_block(EXTERNAL, DS_aux_BQ)))
		    return NULL;
	    BLOCK_GROW(s->aux_BQ_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_BQ_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_BQ_blk) = (uc *)tmp - BLOCK_DATA(s->aux_BQ_blk);
	    continue;
	}

	// BD:Z
	if (aux[0] == 'B' && aux[1]=='D' && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_BD_blk)
		if (!(s->aux_BD_blk = cram_new_block(EXTERNAL, DS_aux_BD)))
		    return NULL;
	    BLOCK_GROW(s->aux_BD_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_BD_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_BD_blk) = (uc *)tmp - BLOCK_DATA(s->aux_BD_blk);
	    continue;
	}

	// BI:Z
	if (aux[0] == 'B' && aux[1]=='I' && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_BI_blk)
		if (!(s->aux_BI_blk = cram_new_block(EXTERNAL, DS_aux_BI)))
		    return NULL;
	    BLOCK_GROW(s->aux_BI_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_BI_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_BI_blk) = (uc *)tmp - BLOCK_DATA(s->aux_BI_blk);
	    continue;
	}

	// OQ:Z:
	if (aux[0] == 'O' && aux[1] == 'Q' && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_OQ_blk)
		if (!(s->aux_OQ_blk = cram_new_block(EXTERNAL, DS_aux_OQ)))
		    return NULL;
	    BLOCK_GROW(s->aux_OQ_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_OQ_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_OQ_blk) = (uc *)tmp - BLOCK_DATA(s->aux_OQ_blk);
	    continue;
	}

	// FZ:B or ZM:B
	if ((aux[0] == 'F' && aux[1] == 'Z' && aux[2] == 'B') ||
	    (aux[0] == 'Z' && aux[1] == 'M' && aux[2] == 'B')) {
	    int type = aux[3], blen;
	    uint32_t count = (uint32_t)((((unsigned char *)aux)[4]<< 0) +
					(((unsigned char *)aux)[5]<< 8) +
					(((unsigned char *)aux)[6]<<16) +
					(((unsigned char *)aux)[7]<<24));
	    char *tmp;
	    if (!s->aux_FZ_blk)
		if (!(s->aux_FZ_blk = cram_new_block(EXTERNAL, DS_aux_FZ)))
		    return NULL;
	    BLOCK_GROW(s->aux_FZ_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_FZ_blk);

	    // skip TN field
	    aux+=3;

	    // We use BYTE_ARRAY_LEN with external length, so store that first
	    switch (type) {
	    case 'c': case 'C':
		blen = count;
		break;
	    case 's': case 'S':
		blen = 2*count;
		break;
	    case 'i': case 'I': case 'f':
		blen = 4*count;
		break;
	    default:
		fprintf(stderr, "Unknown sub-type '%c' for aux type 'B'\n",
			type);
		return NULL;
		    
	    }

	    blen += 5; // sub-type & length
	    tmp += itf8_put(tmp, blen);

	    // The tag data itself
	    memcpy(tmp, aux, blen); tmp += blen; aux += blen;

	    BLOCK_SIZE(s->aux_FZ_blk) = (uc *)tmp - BLOCK_DATA(s->aux_FZ_blk);
	    continue;
	}

	// Other quality data - {Q2,E2,U2,CQ}:Z and similar
	if (((aux[0] == 'Q' && aux[1] == '2') ||
	     (aux[0] == 'U' && aux[1] == '2') ||
	     (aux[0] == 'Q' && aux[1] == 'T') ||
	     (aux[0] == 'C' && aux[1] == 'Q')) && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_oq_blk)
		if (!(s->aux_oq_blk = cram_new_block(EXTERNAL, DS_aux_oq)))
		    return NULL;
	    BLOCK_GROW(s->aux_oq_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_oq_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_oq_blk) = (uc *)tmp - BLOCK_DATA(s->aux_oq_blk);
	    continue;
	}

	// Other sequence data - {R2,E2,CS,BC,RT}:Z and similar
	if (((aux[0] == 'R' && aux[1] == '2') ||
	     (aux[0] == 'E' && aux[1] == '2') ||
	     (aux[0] == 'C' && aux[1] == 'S') ||
	     (aux[0] == 'B' && aux[1] == 'C') ||
	     (aux[0] == 'R' && aux[1] == 'T')) && aux[2] == 'Z') {
	    char *tmp;
	    if (!s->aux_os_blk)
		if (!(s->aux_os_blk = cram_new_block(EXTERNAL, DS_aux_os)))
		    return NULL;
	    BLOCK_GROW(s->aux_os_blk, aux_size*1.34+1);
	    tmp = (char *)BLOCK_END(s->aux_os_blk);
	    aux += 3;
	    while ((*tmp++=*aux++));
	    *tmp++ = '\t';
	    BLOCK_SIZE(s->aux_os_blk) = (uc *)tmp - BLOCK_DATA(s->aux_os_blk);
	    continue;
	}


	switch(aux[2]) {
	case 'A': case 'C': case 'c':
	    aux+=3;
	    *tmp++=*aux++;
	    break;

	case 'S': case 's':
	    aux+=3;
	    *tmp++=*aux++; *tmp++=*aux++;
	    break;

	case 'I': case 'i': case 'f':
	    aux+=3;
	    *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++;
	    break;

	case 'd':
	    aux+=3; //*tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++;
	    *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++;
	    *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++; *tmp++=*aux++;
	    break;

	case 'Z': case 'H':
	    {
		char *tmp;
		if (!s->aux_oz_blk)
		    if (!(s->aux_oz_blk = cram_new_block(EXTERNAL, DS_aux_oz)))
			return NULL;
		BLOCK_GROW(s->aux_oz_blk, aux_size*1.34+1);
		tmp = (char *)BLOCK_END(s->aux_oz_blk);
		aux += 3;
		while ((*tmp++=*aux++));
		*tmp++ = '\t';
		BLOCK_SIZE(s->aux_oz_blk) = (uc *)tmp -
		    BLOCK_DATA(s->aux_oz_blk);
	    }
	    break;

	case 'B': {
	    int type = aux[3], blen;
	    uint32_t count = (uint32_t)((((unsigned char *)aux)[4]<< 0) +
					(((unsigned char *)aux)[5]<< 8) +
					(((unsigned char *)aux)[6]<<16) +
					(((unsigned char *)aux)[7]<<24));
	    // skip TN field
	    aux+=3;

	    // We use BYTE_ARRAY_LEN with external length, so store that first
	    switch (type) {
	    case 'c': case 'C':
		blen = count;
		break;
	    case 's': case 'S':
		blen = 2*count;
		break;
	    case 'i': case 'I': case 'f':
		blen = 4*count;
		break;
	    default:
		fprintf(stderr, "Unknown sub-type '%c' for aux type 'B'\n",
			type);
		return NULL;
		    
	    }

	    blen += 5; // sub-type & length
	    tmp += itf8_put(tmp, blen);

	    // The tag data itself
	    memcpy(tmp, aux, blen); tmp += blen; aux += blen;

	    //cram_stats_add(c->aux_B_stats, blen);
	    break;
	}
	default:
	    fprintf(stderr, "Unknown aux type '%c'\n", aux[2]);
	    return NULL;
	}
    }

    // FIXME: sort BLOCK_DATA(td_b) by char[3] triples
    
    // And and increment TD hash entry
    BLOCK_APPEND_CHAR(td_b, 0);

    // Duplicate key as BLOCK_DATA() can be realloced to a new pointer.
    key = string_ndup(c->comp_hdr->TD_keys, 
		      (char *)BLOCK_DATA(td_b) + TD_blk_size,
		      BLOCK_SIZE(td_b) - TD_blk_size);
    k = kh_put(m_s2i, c->comp_hdr->TD_hash, key, &new);
    if (new < 0) {
	return NULL;
    } else if (new == 0) {
	BLOCK_SIZE(td_b) = TD_blk_size;
    } else {
	kh_val(c->comp_hdr->TD_hash, k) = c->comp_hdr->nTL;
	c->comp_hdr->nTL++;
    }

    cr->TL = kh_val(c->comp_hdr->TD_hash, k);
    cram_stats_add(c->stats[DS_TL], cr->TL);

    cr->aux = BLOCK_SIZE(s->aux_blk);
    cr->aux_size = (uc *)tmp - (BLOCK_DATA(s->aux_blk) + cr->aux);
    BLOCK_SIZE(s->aux_blk) = (uc *)tmp - BLOCK_DATA(s->aux_blk);
    assert(s->aux_blk->byte <= s->aux_blk->alloc);

    return rg;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x180, %rsp            # imm = 0x180
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq $0x0, -0x50(%rbp)
movq -0x18(%rbp), %rax
movl 0x20(%rax), %eax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
shrq $0x30, %rcx
shll $0x2, %ecx
subl %ecx, %eax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
shrq $0x18, %rcx
andq $0xff, %rcx
subl %ecx, %eax
movq -0x18(%rbp), %rcx
subl 0x10(%rcx), %eax
movq -0x18(%rbp), %rcx
movl 0x10(%rcx), %ecx
addl $0x1, %ecx
sarl %ecx
subl %ecx, %eax
movl %eax, -0x54(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x50(%rax), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rax
movl %eax, -0x64(%rbp)
jmp 0x3cde9
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3dce0(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3dce4(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3f038(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3b23c(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3cf41
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3ceb8
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3dc59(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3dc5d(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3ec2e(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0xe8(%rbp)
jmp 0x3ceca
movsd 0x3ec10(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0xe8(%rbp)
jmp 0x3ceca
movsd -0xe8(%rbp), %xmm0
movsd 0x3dbe6(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3cde9
jmp 0x3cf43
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x88(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
shrq $0x30, %rcx
shll $0x2, %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq -0x18(%rbp), %rcx
movq 0x8(%rcx), %rcx
shrq $0x18, %rcx
andq $0xff, %rcx
movslq %ecx, %rcx
addq %rcx, %rax
movq -0x18(%rbp), %rcx
movl 0x10(%rcx), %ecx
addl $0x1, %ecx
sarl %ecx
movslq %ecx, %rcx
addq %rcx, %rax
movq -0x18(%rbp), %rcx
movslq 0x10(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq %rax, -0x40(%rbp)
movq -0x38(%rbp), %rcx
movq -0x40(%rbp), %rax
subq %rax, %rcx
movslq -0x54(%rbp), %rdx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, -0xe9(%rbp)
jge 0x3cfef
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
setne %al
movb %al, -0xe9(%rbp)
movb -0xe9(%rbp), %al
testb $0x1, %al
jne 0x3cffe
jmp 0x3f06f
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x52, %eax
jne 0x3d04b
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x47, %eax
jne 0x3d04b
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3d04b
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x50(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
cmpb $0x0, (%rax)
je 0x3d046
jmp 0x3d030
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4d, %eax
jne 0x3d0b6
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x44, %eax
jne 0x3d0b6
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3d0b6
movq -0x30(%rbp), %rax
cmpl $0x0, 0x14(%rax)
je 0x3d0b4
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20c(%rax)
jne 0x3d0b4
movq -0x30(%rbp), %rax
movl 0xc(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0x3d0b4
jmp 0x3d099
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
cmpb $0x0, (%rax)
je 0x3d0af
jmp 0x3d099
jmp 0x3cfc0
jmp 0x3d0b6
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4e, %eax
jne 0x3d1cf
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x4d, %eax
jne 0x3d1cf
movq -0x30(%rbp), %rax
cmpl $0x0, 0x14(%rax)
je 0x3d1cd
movq -0x10(%rbp), %rax
cmpl $0x0, 0x20c(%rax)
jne 0x3d1cd
movq -0x30(%rbp), %rax
movl 0xc(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
jne 0x3d1cd
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
movl %eax, -0xf0(%rbp)
subl $0x41, %eax
je 0x3d179
jmp 0x3d11e
movl -0xf0(%rbp), %eax
subl $0x43, %eax
je 0x3d179
jmp 0x3d12b
movl -0xf0(%rbp), %eax
subl $0x49, %eax
je 0x3d195
jmp 0x3d138
movl -0xf0(%rbp), %eax
subl $0x53, %eax
je 0x3d187
jmp 0x3d145
movl -0xf0(%rbp), %eax
subl $0x63, %eax
je 0x3d179
jmp 0x3d152
movl -0xf0(%rbp), %eax
subl $0x66, %eax
je 0x3d195
jmp 0x3d15f
movl -0xf0(%rbp), %eax
subl $0x69, %eax
je 0x3d195
jmp 0x3d16c
movl -0xf0(%rbp), %eax
subl $0x73, %eax
je 0x3d187
jmp 0x3d1a3
movq -0x38(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x38(%rbp)
jmp 0x3d1c8
movq -0x38(%rbp), %rax
addq $0x5, %rax
movq %rax, -0x38(%rbp)
jmp 0x3d1c8
movq -0x38(%rbp), %rax
addq $0x7, %rax
movq %rax, -0x38(%rbp)
jmp 0x3d1c8
movq 0x4ce26(%rip), %rax     # 0x89fd0
movq (%rax), %rdi
leaq 0x3f537(%rip), %rsi     # 0x7c6eb
movb $0x0, %al
callq 0x4830
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3cfc0
jmp 0x3d1cf
jmp 0x3d1d1
jmp 0x3d1d3
jmp 0x3d1d5
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x30(%rcx), %rcx
addq $0x3, %rcx
cmpq %rcx, %rax
ja 0x3d2ab
movq -0x60(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x3d23e
movq -0x60(%rbp), %rax
movq 0x28(%rax), %xmm0
movaps 0x3d8d3(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3d8d7(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3e8a8(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0xf8(%rbp)
jmp 0x3d250
movsd 0x3e88a(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0xf8(%rbp)
jmp 0x3d250
movsd -0xf8(%rbp), %xmm0
movsd 0x3d860(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x3d1d5
jmp 0x3d2ad
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x30(%rcx), %rcx
movq -0x38(%rbp), %rdx
movw (%rdx), %si
movw %si, (%rax,%rcx)
movb 0x2(%rdx), %dl
movb %dl, 0x2(%rax,%rcx)
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rcx
addq $0x3, %rcx
movq %rcx, 0x30(%rax)
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
shll $0x10, %eax
movq -0x38(%rbp), %rcx
movsbl 0x1(%rcx), %ecx
shll $0x8, %ecx
orl %ecx, %eax
movq -0x38(%rbp), %rcx
movsbl 0x2(%rcx), %ecx
orl %ecx, %eax
movl %eax, -0x78(%rbp)
movq -0x20(%rbp), %rax
movq 0x238(%rax), %rdi
movl -0x78(%rbp), %esi
leaq -0x7c(%rbp), %rdx
callq 0x40960
movl $0xffffffff, %eax       # imm = 0xFFFFFFFF
cmpl -0x7c(%rbp), %eax
jne 0x3d331
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x42, %eax
jne 0x3d5a2
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x51, %eax
jne 0x3d5a2
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3d5a2
movq -0x28(%rbp), %rax
cmpq $0x0, 0x98(%rax)
jne 0x3d3a0
movl $0x4, %edi
movl $0x3, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0x98(%rcx)
cmpq $0x0, %rax
jne 0x3d39e
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3d3a0
jmp 0x3d3a2
jmp 0x3d3a4
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3d725(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3d729(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3ea7d(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3ac81(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3d4fc
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3d473
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3d69e(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3d6a2(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3e673(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x100(%rbp)
jmp 0x3d485
movsd 0x3e655(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x100(%rbp)
jmp 0x3d485
movsd -0x100(%rbp), %xmm0
movsd 0x3d62b(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3d3a4
jmp 0x3d4fe
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x98(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0x88(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0x88(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x88(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3d55d
jmp 0x3d52f
movq -0x88(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x88(%rbp)
movb $0x9, (%rax)
movq -0x88(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x98(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x42, %eax
jne 0x3d810
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x44, %eax
jne 0x3d810
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3d810
movq -0x28(%rbp), %rax
cmpq $0x0, 0xa0(%rax)
jne 0x3d60e
movl $0x4, %esi
movl %esi, %edi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xa0(%rcx)
cmpq $0x0, %rax
jne 0x3d60c
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3d60e
jmp 0x3d610
jmp 0x3d612
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3d4b7(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3d4bb(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3e80f(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3aa13(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3d76a
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3d6e1
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3d430(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3d434(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3e405(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x108(%rbp)
jmp 0x3d6f3
movsd 0x3e3e7(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x108(%rbp)
jmp 0x3d6f3
movsd -0x108(%rbp), %xmm0
movsd 0x3d3bd(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3d612
jmp 0x3d76c
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xa0(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0x90(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0x90(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x90(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3d7cb
jmp 0x3d79d
movq -0x90(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x90(%rbp)
movb $0x9, (%rax)
movq -0x90(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa0(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x42, %eax
jne 0x3da81
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x49, %eax
jne 0x3da81
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3da81
movq -0x28(%rbp), %rax
cmpq $0x0, 0xa8(%rax)
jne 0x3d87f
movl $0x4, %edi
movl $0x5, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xa8(%rcx)
cmpq $0x0, %rax
jne 0x3d87d
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3d87f
jmp 0x3d881
jmp 0x3d883
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3d246(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3d24a(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3e59e(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3a7a2(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3d9db
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3d952
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3d1bf(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3d1c3(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3e194(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x110(%rbp)
jmp 0x3d964
movsd 0x3e176(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x110(%rbp)
jmp 0x3d964
movsd -0x110(%rbp), %xmm0
movsd 0x3d14c(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3d883
jmp 0x3d9dd
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xa8(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0x98(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0x98(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x98(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3da3c
jmp 0x3da0e
movq -0x98(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x98(%rbp)
movb $0x9, (%rax)
movq -0x98(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xa8(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x4f, %eax
jne 0x3dcf2
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x51, %eax
jne 0x3dcf2
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3dcf2
movq -0x28(%rbp), %rax
cmpq $0x0, 0x90(%rax)
jne 0x3daf0
movl $0x4, %edi
movl $0x2, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0x90(%rcx)
cmpq $0x0, %rax
jne 0x3daee
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3daf0
jmp 0x3daf2
jmp 0x3daf4
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3cfd5(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3cfd9(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3e32d(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3a531(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3dc4c
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3dbc3
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3cf4e(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3cf52(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3df23(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x118(%rbp)
jmp 0x3dbd5
movsd 0x3df05(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x118(%rbp)
jmp 0x3dbd5
movsd -0x118(%rbp), %xmm0
movsd 0x3cedb(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3daf4
jmp 0x3dc4e
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x90(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0xa0(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0xa0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xa0(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3dcad
jmp 0x3dc7f
movq -0xa0(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xa0(%rbp)
movb $0x9, (%rax)
movq -0xa0(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x90(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x46, %eax
jne 0x3dd18
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x5a, %eax
jne 0x3dd18
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x42, %eax
je 0x3dd4a
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x5a, %eax
jne 0x3e2c7
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x4d, %eax
jne 0x3e2c7
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x42, %eax
jne 0x3e2c7
movq -0x38(%rbp), %rax
movsbl 0x3(%rax), %eax
movl %eax, -0xa4(%rbp)
movq -0x38(%rbp), %rax
movzbl 0x4(%rax), %eax
shll $0x0, %eax
movq -0x38(%rbp), %rcx
movzbl 0x5(%rcx), %ecx
shll $0x8, %ecx
addl %ecx, %eax
movq -0x38(%rbp), %rcx
movzbl 0x6(%rcx), %ecx
shll $0x10, %ecx
addl %ecx, %eax
movq -0x38(%rbp), %rcx
movzbl 0x7(%rcx), %ecx
shll $0x18, %ecx
addl %ecx, %eax
movl %eax, -0xac(%rbp)
movq -0x28(%rbp), %rax
cmpq $0x0, 0xb0(%rax)
jne 0x3ddcd
movl $0x4, %edi
movl $0x6, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xb0(%rcx)
cmpq $0x0, %rax
jne 0x3ddcb
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3ddcd
jmp 0x3ddcf
jmp 0x3ddd1
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3ccf8(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3ccfc(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3e050(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x3a254(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3df29
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3dea0
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3cc71(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3cc75(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3dc46(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x120(%rbp)
jmp 0x3deb2
movsd 0x3dc28(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x120(%rbp)
jmp 0x3deb2
movsd -0x120(%rbp), %xmm0
movsd 0x3cbfe(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3ddd1
jmp 0x3df2b
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rcx
movq 0x20(%rcx), %rax
movq 0x30(%rcx), %rcx
addq %rcx, %rax
movq %rax, -0xb8(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movl -0xa4(%rbp), %eax
movl %eax, -0x124(%rbp)
subl $0x43, %eax
je 0x3dfb5
jmp 0x3df67
movl -0x124(%rbp), %eax
subl $0x49, %eax
je 0x3dfd3
jmp 0x3df74
movl -0x124(%rbp), %eax
subl $0x53, %eax
je 0x3dfc3
jmp 0x3df81
movl -0x124(%rbp), %eax
subl $0x63, %eax
je 0x3dfb5
jmp 0x3df8e
movl -0x124(%rbp), %eax
subl $0x66, %eax
je 0x3dfd3
jmp 0x3df9b
movl -0x124(%rbp), %eax
subl $0x69, %eax
je 0x3dfd3
jmp 0x3dfa8
movl -0x124(%rbp), %eax
subl $0x73, %eax
je 0x3dfc3
jmp 0x3dfe4
movl -0xac(%rbp), %eax
movl %eax, -0xa8(%rbp)
jmp 0x3e00f
movl -0xac(%rbp), %eax
shll %eax
movl %eax, -0xa8(%rbp)
jmp 0x3e00f
movl -0xac(%rbp), %eax
shll $0x2, %eax
movl %eax, -0xa8(%rbp)
jmp 0x3e00f
movq 0x4bfe5(%rip), %rax     # 0x89fd0
movq (%rax), %rdi
movl -0xa4(%rbp), %edx
leaq 0x3e710(%rip), %rsi     # 0x7c70b
movb $0x0, %al
callq 0x4830
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
movl -0xa8(%rbp), %eax
addl $0x5, %eax
movl %eax, -0xa8(%rbp)
movl -0xa8(%rbp), %eax
andl $-0x80, %eax
cmpl $0x0, %eax
jne 0x3e04d
movl -0xa8(%rbp), %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, (%rax)
movl $0x1, %eax
movl %eax, -0x128(%rbp)
jmp 0x3e23b
movl -0xa8(%rbp), %eax
andl $0xffffc000, %eax       # imm = 0xFFFFC000
cmpl $0x0, %eax
jne 0x3e09d
movl -0xa8(%rbp), %eax
sarl $0x8, %eax
orl $0x80, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, (%rax)
movl -0xa8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x1(%rax)
movl $0x2, %eax
movl %eax, -0x12c(%rbp)
jmp 0x3e22f
movl -0xa8(%rbp), %eax
andl $0xffe00000, %eax       # imm = 0xFFE00000
cmpl $0x0, %eax
jne 0x3e107
movl -0xa8(%rbp), %eax
sarl $0x10, %eax
orl $0xc0, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, (%rax)
movl -0xa8(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xa8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x2(%rax)
movl $0x3, %eax
movl %eax, -0x130(%rbp)
jmp 0x3e223
movl -0xa8(%rbp), %eax
andl $0xf0000000, %eax       # imm = 0xF0000000
cmpl $0x0, %eax
jne 0x3e18b
movl -0xa8(%rbp), %eax
sarl $0x18, %eax
orl $0xe0, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, (%rax)
movl -0xa8(%rbp), %eax
sarl $0x10, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xa8(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x2(%rax)
movl -0xa8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x3(%rax)
movl $0x4, %eax
movl %eax, -0x134(%rbp)
jmp 0x3e217
movl -0xa8(%rbp), %eax
sarl $0x1c, %eax
andl $0xff, %eax
orl $0xf0, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, (%rax)
movl -0xa8(%rbp), %eax
sarl $0x14, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xa8(%rbp), %eax
sarl $0xc, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x2(%rax)
movl -0xa8(%rbp), %eax
sarl $0x4, %eax
andl $0xff, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x3(%rax)
movl -0xa8(%rbp), %eax
andl $0xf, %eax
movb %al, %cl
movq -0xb8(%rbp), %rax
movb %cl, 0x4(%rax)
movl $0x5, %eax
movl %eax, -0x134(%rbp)
movl -0x134(%rbp), %eax
movl %eax, -0x130(%rbp)
movl -0x130(%rbp), %eax
movl %eax, -0x12c(%rbp)
movl -0x12c(%rbp), %eax
movl %eax, -0x128(%rbp)
movl -0x128(%rbp), %ecx
movq -0xb8(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rdi
movq -0x38(%rbp), %rsi
movslq -0xa8(%rbp), %rdx
callq 0x4460
movl -0xa8(%rbp), %ecx
movq -0xb8(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0xb8(%rbp)
movl -0xa8(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
movq -0xb8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb0(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x51, %eax
jne 0x3e2e0
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x32, %eax
je 0x3e333
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x55, %eax
jne 0x3e2f9
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x32, %eax
je 0x3e333
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x51, %eax
jne 0x3e312
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x54, %eax
je 0x3e333
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x43, %eax
jne 0x3e583
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x51, %eax
jne 0x3e583
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3e583
movq -0x28(%rbp), %rax
cmpq $0x0, 0xb8(%rax)
jne 0x3e381
movl $0x4, %edi
movl $0x7, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xb8(%rcx)
cmpq $0x0, %rax
jne 0x3e37f
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3e381
jmp 0x3e383
jmp 0x3e385
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3c744(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3c748(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3da9c(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x39ca0(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3e4dd
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3e454
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3c6bd(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3c6c1(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3d692(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x140(%rbp)
jmp 0x3e466
movsd 0x3d674(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x140(%rbp)
jmp 0x3e466
movsd -0x140(%rbp), %xmm0
movsd 0x3c64a(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3e385
jmp 0x3e4df
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xb8(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0xc0(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0xc0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc0(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3e53e
jmp 0x3e510
movq -0xc0(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xc0(%rbp)
movb $0x9, (%rax)
movq -0xc0(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xb8(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x52, %eax
jne 0x3e59c
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x32, %eax
je 0x3e608
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x45, %eax
jne 0x3e5b5
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x32, %eax
je 0x3e608
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x43, %eax
jne 0x3e5ce
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x53, %eax
je 0x3e608
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x42, %eax
jne 0x3e5e7
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x43, %eax
je 0x3e608
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x52, %eax
jne 0x3e858
movq -0x38(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x54, %eax
jne 0x3e858
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
cmpl $0x5a, %eax
jne 0x3e858
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc0(%rax)
jne 0x3e656
movl $0x4, %edi
movl $0x8, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xc0(%rcx)
cmpq $0x0, %rax
jne 0x3e654
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3e656
jmp 0x3e658
jmp 0x3e65a
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3c46f(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3c473(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3d7c7(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x399cb(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3e7b2
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3e729
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3c3e8(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3c3ec(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3d3bd(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x148(%rbp)
jmp 0x3e73b
movsd 0x3d39f(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x148(%rbp)
jmp 0x3e73b
movsd -0x148(%rbp), %xmm0
movsd 0x3c375(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3e65a
jmp 0x3e7b4
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xc0(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0xc8(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0xc8(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xc8(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3e813
jmp 0x3e7e5
movq -0xc8(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xc8(%rbp)
movb $0x9, (%rax)
movq -0xc8(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc0(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3cfc0
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %eax
addl $-0x41, %eax
movl %eax, %ecx
movq %rcx, -0x150(%rbp)
subl $0x32, %eax
ja 0x3f03d
movq -0x150(%rbp), %rax
leaq 0x3d879(%rip), %rcx     # 0x7c0fc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
jmp 0x3f06a
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
jmp 0x3f06a
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
jmp 0x3f06a
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %cl
movq -0x48(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x48(%rbp)
movb %cl, (%rax)
jmp 0x3f06a
movq -0x28(%rbp), %rax
cmpq $0x0, 0xc8(%rax)
jne 0x3eb0b
movl $0x4, %edi
movl $0x9, %esi
callq 0x45b10
movq -0x28(%rbp), %rcx
movq %rax, 0xc8(%rcx)
cmpq $0x0, %rax
jne 0x3eb09
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3eb0b
jmp 0x3eb0d
jmp 0x3eb0f
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x28(%rax), %xmm1
movaps 0x3bfba(%rip), %xmm3    # 0x7aae0
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
movapd 0x3bfbe(%rip), %xmm2    # 0x7aaf0
subpd %xmm2, %xmm1
movaps %xmm1, %xmm0
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm0, %xmm1
movq 0x30(%rax), %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm2
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm2, %xmm0
cvtsi2sdl -0x54(%rbp), %xmm2
movsd 0x3d312(%rip), %xmm3    # 0x7be78
mulsd %xmm3, %xmm2
movsd 0x39516(%rip), %xmm3    # 0x78088
addsd %xmm3, %xmm2
addsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jb 0x3ec67
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
cmpq $0x0, 0x28(%rax)
je 0x3ebde
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x28(%rax), %xmm0
movaps 0x3bf33(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3bf37(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3cf08(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x158(%rbp)
jmp 0x3ebf0
movsd 0x3ceea(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x158(%rbp)
jmp 0x3ebf0
movsd -0x158(%rbp), %xmm0
movsd 0x3bec0(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq %rcx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x20(%rax), %rdi
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq %rcx, 0x20(%rax)
jmp 0x3eb0f
jmp 0x3ec69
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x20(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0xc8(%rcx), %rcx
addq 0x30(%rcx), %rax
movq %rax, -0xd0(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x38(%rbp)
movb (%rax), %al
movq -0xd0(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0xd0(%rbp)
movb %al, (%rcx)
cmpb $0x0, %al
je 0x3ecc8
jmp 0x3ec9a
movq -0xd0(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0xd0(%rbp)
movb $0x9, (%rax)
movq -0xd0(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0xc8(%rax), %rax
movq %rcx, 0x30(%rax)
jmp 0x3f06a
movq -0x38(%rbp), %rax
movsbl 0x3(%rax), %eax
movl %eax, -0xd4(%rbp)
movq -0x38(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0xdc(%rbp)
movq -0x38(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x38(%rbp)
movl -0xd4(%rbp), %eax
movl %eax, -0x15c(%rbp)
subl $0x43, %eax
je 0x3ed95
jmp 0x3ed47
movl -0x15c(%rbp), %eax
subl $0x49, %eax
je 0x3edb3
jmp 0x3ed54
movl -0x15c(%rbp), %eax
subl $0x53, %eax
je 0x3eda3
jmp 0x3ed61
movl -0x15c(%rbp), %eax
subl $0x63, %eax
je 0x3ed95
jmp 0x3ed6e
movl -0x15c(%rbp), %eax
subl $0x66, %eax
je 0x3edb3
jmp 0x3ed7b
movl -0x15c(%rbp), %eax
subl $0x69, %eax
je 0x3edb3
jmp 0x3ed88
movl -0x15c(%rbp), %eax
subl $0x73, %eax
je 0x3eda3
jmp 0x3edc4
movl -0xdc(%rbp), %eax
movl %eax, -0xd8(%rbp)
jmp 0x3edef
movl -0xdc(%rbp), %eax
shll %eax
movl %eax, -0xd8(%rbp)
jmp 0x3edef
movl -0xdc(%rbp), %eax
shll $0x2, %eax
movl %eax, -0xd8(%rbp)
jmp 0x3edef
movq 0x4b205(%rip), %rax     # 0x89fd0
movq (%rax), %rdi
movl -0xd4(%rbp), %edx
leaq 0x3d930(%rip), %rsi     # 0x7c70b
movb $0x0, %al
callq 0x4830
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
movl -0xd8(%rbp), %eax
addl $0x5, %eax
movl %eax, -0xd8(%rbp)
movl -0xd8(%rbp), %eax
andl $-0x80, %eax
cmpl $0x0, %eax
jne 0x3ee2a
movl -0xd8(%rbp), %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, (%rax)
movl $0x1, %eax
movl %eax, -0x160(%rbp)
jmp 0x3efeb
movl -0xd8(%rbp), %eax
andl $0xffffc000, %eax       # imm = 0xFFFFC000
cmpl $0x0, %eax
jne 0x3ee74
movl -0xd8(%rbp), %eax
sarl $0x8, %eax
orl $0x80, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, (%rax)
movl -0xd8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x1(%rax)
movl $0x2, %eax
movl %eax, -0x164(%rbp)
jmp 0x3efdf
movl -0xd8(%rbp), %eax
andl $0xffe00000, %eax       # imm = 0xFFE00000
cmpl $0x0, %eax
jne 0x3eed5
movl -0xd8(%rbp), %eax
sarl $0x10, %eax
orl $0xc0, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, (%rax)
movl -0xd8(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xd8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x2(%rax)
movl $0x3, %eax
movl %eax, -0x168(%rbp)
jmp 0x3efd3
movl -0xd8(%rbp), %eax
andl $0xf0000000, %eax       # imm = 0xF0000000
cmpl $0x0, %eax
jne 0x3ef4a
movl -0xd8(%rbp), %eax
sarl $0x18, %eax
orl $0xe0, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, (%rax)
movl -0xd8(%rbp), %eax
sarl $0x10, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xd8(%rbp), %eax
sarl $0x8, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x2(%rax)
movl -0xd8(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x3(%rax)
movl $0x4, %eax
movl %eax, -0x16c(%rbp)
jmp 0x3efc7
movl -0xd8(%rbp), %eax
sarl $0x1c, %eax
andl $0xff, %eax
orl $0xf0, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, (%rax)
movl -0xd8(%rbp), %eax
sarl $0x14, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x1(%rax)
movl -0xd8(%rbp), %eax
sarl $0xc, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x2(%rax)
movl -0xd8(%rbp), %eax
sarl $0x4, %eax
andl $0xff, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x3(%rax)
movl -0xd8(%rbp), %eax
andl $0xf, %eax
movb %al, %cl
movq -0x48(%rbp), %rax
movb %cl, 0x4(%rax)
movl $0x5, %eax
movl %eax, -0x16c(%rbp)
movl -0x16c(%rbp), %eax
movl %eax, -0x168(%rbp)
movl -0x168(%rbp), %eax
movl %eax, -0x164(%rbp)
movl -0x164(%rbp), %eax
movl %eax, -0x160(%rbp)
movl -0x160(%rbp), %ecx
movq -0x48(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rdi
movq -0x38(%rbp), %rsi
movslq -0xd8(%rbp), %rdx
callq 0x4460
movl -0xd8(%rbp), %ecx
movq -0x48(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x48(%rbp)
movl -0xd8(%rbp), %ecx
movq -0x38(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x38(%rbp)
jmp 0x3f06a
movq 0x4af8c(%rip), %rax     # 0x89fd0
movq (%rax), %rdi
movq -0x38(%rbp), %rax
movsbl 0x2(%rax), %edx
leaq 0x3d6dd(%rip), %rsi     # 0x7c733
movb $0x0, %al
callq 0x4830
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
jmp 0x3cfc0
jmp 0x3f071
jmp 0x3f073
jmp 0x3f075
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rax
movq -0x60(%rbp), %rcx
movq 0x30(%rcx), %rcx
addq $0x1, %rcx
cmpq %rcx, %rax
ja 0x3f14b
movq -0x60(%rbp), %rax
cmpq $0x0, 0x28(%rax)
je 0x3f0de
movq -0x60(%rbp), %rax
movq 0x28(%rax), %xmm0
movaps 0x3ba33(%rip), %xmm1    # 0x7aae0
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0x3ba37(%rip), %xmm1    # 0x7aaf0
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movsd 0x3ca08(%rip), %xmm1    # 0x7bad8
mulsd %xmm1, %xmm0
movsd %xmm0, -0x178(%rbp)
jmp 0x3f0f0
movsd 0x3c9ea(%rip), %xmm0    # 0x7bad0
movsd %xmm0, -0x178(%rbp)
jmp 0x3f0f0
movsd -0x178(%rbp), %xmm0
movsd 0x3b9c0(%rip), %xmm2    # 0x7aac0
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rcx
movq %rcx, %rdx
sarq $0x3f, %rdx
andq %rdx, %rax
orq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x28(%rax)
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x28(%rax), %rsi
callq 0x4990
movq %rax, %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x3f075
jmp 0x3f14d
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rax
movq -0x60(%rbp), %rdx
movq 0x30(%rdx), %rcx
movq %rcx, %rsi
addq $0x1, %rsi
movq %rsi, 0x30(%rdx)
movb $0x0, (%rax,%rcx)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x70(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x20(%rax), %rsi
movslq -0x64(%rbp), %rax
addq %rax, %rsi
movq -0x60(%rbp), %rax
movq 0x30(%rax), %rdx
movslq -0x64(%rbp), %rax
subq %rax, %rdx
callq 0x601b0
movq %rax, -0x70(%rbp)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x68(%rax), %rdi
movq -0x70(%rbp), %rsi
leaq -0x68(%rbp), %rdx
callq 0x40600
movl %eax, -0x74(%rbp)
cmpl $0x0, -0x68(%rbp)
jge 0x3f1ce
movq $0x0, -0x8(%rbp)
jmp 0x3f2fa
cmpl $0x0, -0x68(%rbp)
jne 0x3f1e2
movslq -0x64(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x3f214
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movl 0x58(%rax), %edx
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x68(%rax), %rax
movq 0x20(%rax), %rax
movl -0x74(%rbp), %ecx
movl %edx, (%rax,%rcx,4)
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movl 0x58(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x58(%rax)
jmp 0x3f216
movq -0x20(%rbp), %rax
movq 0x40(%rax), %rax
movq 0x68(%rax), %rax
movq 0x20(%rax), %rax
movl -0x74(%rbp), %ecx
movl (%rax,%rcx,4), %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x48(%rax)
movq -0x20(%rbp), %rax
movq 0x1c0(%rax), %rdi
movq -0x30(%rbp), %rax
movl 0x48(%rax), %esi
callq 0x54c30
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x30(%rax), %rax
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x3c(%rax)
movq -0x48(%rbp), %rax
movq -0x28(%rbp), %rcx
movq 0x88(%rcx), %rcx
movq 0x20(%rcx), %rcx
movq -0x30(%rbp), %rdx
movslq 0x3c(%rdx), %rdx
addq %rdx, %rcx
subq %rcx, %rax
movl %eax, %ecx
movq -0x30(%rbp), %rax
movl %ecx, 0x40(%rax)
movq -0x48(%rbp), %rcx
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x20(%rax), %rax
subq %rax, %rcx
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq %rcx, 0x30(%rax)
movq -0x28(%rbp), %rax
movq 0x88(%rax), %rax
movq 0x30(%rax), %rax
movq -0x28(%rbp), %rcx
movq 0x88(%rcx), %rcx
cmpq 0x28(%rcx), %rax
ja 0x3f2d3
jmp 0x3f2f2
leaq 0x3d470(%rip), %rdi     # 0x7c74a
leaq 0x3d25d(%rip), %rsi     # 0x7c53e
movl $0x9bb, %edx            # imm = 0x9BB
leaq 0x3d4e4(%rip), %rcx     # 0x7c7d1
callq 0x4360
movq -0x50(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x180, %rsp            # imm = 0x180
popq %rbp
retq
nopw (%rax,%rax)