// File: /workspace/github_c_makefile_star2_O2/ToniWestbrook[P]paladin/align.c
// Function: command_align
int command_align(int argc, char *argv[]) {
	mem_opt_t *opt, opt0;
	int fd, fd2, i, c, ignore_alt = 0, no_mt_io = 0;
	int fixed_chunk_size = -1;
	gzFile fp, fp2 = 0;
	char *p, *rg_line = 0, *hdr_line = 0;
	const char *mode = 0;
	void *ko = 0, *ko2 = 0;
	mem_pestat_t pes[VALUE_DOMAIN];
	ktp_aux_t aux;
	FILE * reportPriStream = 0, * reportSecStream = 0;
	char * readsProName = 0, * indexProName = 0, * prefixName = 0;
	char * samName = 0, * reportPriName = 0, * reportSecName = 0;
    const char * proxyAddress;

	memset(&aux, 0, sizeof(ktp_aux_t));
	memset(pes, 0, VALUE_DOMAIN * sizeof(mem_pestat_t));
	for (i = 0; i < VALUE_DOMAIN; ++i) pes[i].failed = 1;

	aux.opt = opt = mem_opt_init();
	memset(&opt0, 0, sizeof(mem_opt_t));
    proxyAddress = NULL;

	while ((c = getopt(argc, argv, "1epqabgnMCSVYJjf:F:z:u:k:o:c:v:s:r:t:R:A:B:O:E:U:w:L:d:T:Q:D:m:I:N:W:x:G:h:y:K:X:H:P:")) >= 0) {
		if (c == 'k') opt->min_seed_len = atoi(optarg), opt0.min_seed_len = 1;
		else if (c == 'u') opt->outputType = atoi(optarg);
		else if (c == 'f') opt->min_orf_len = atoi(optarg);
		else if (c == 'F') opt->min_orf_percent = atof(optarg);
        else if (c == 'z') opt->translations = convertTransArgs(optarg);
		else if (c == 'o') prefixName = optarg;
		else if (c == '1') no_mt_io = 1;
		else if (c == 'x') mode = optarg;
		else if (c == 'w') opt->w = atoi(optarg), opt0.w = 1;
		else if (c == 'A') opt->a = atoi(optarg), opt0.a = 1;
		else if (c == 'B') opt->b = atoi(optarg), opt0.b = 1;
		else if (c == 'T') opt->T = atoi(optarg), opt0.T = 1;
		else if (c == 'U') opt->pen_unpaired = atoi(optarg), opt0.pen_unpaired = 1;
		else if (c == 't') opt->n_threads = atoi(optarg), opt->n_threads = opt->n_threads > 1? opt->n_threads : 1;
		//else if (c == 'P') opt->flag |= MEM_F_NOPAIRING;
		else if (c == 'a') opt->flag |= MEM_F_ALL;
		//else if (c == 'p') opt->flag |= MEM_F_PE | MEM_F_SMARTPE;
		else if (c == 'M') opt->flag |= MEM_F_NO_MULTI;
		else if (c == 'S') opt->flag |= MEM_F_NO_RESCUE;
		else if (c == 'e') opt->flag |= MEM_F_SELF_OVLP;
		else if (c == 'F') opt->flag |= MEM_F_ALN_REG;
		else if (c == 'Y') opt->flag |= MEM_F_SOFTCLIP;
		else if (c == 'V') opt->flag |= MEM_F_REF_HDR;
		else if (c == 'b') opt->proteinFlag &= ~ALIGN_FLAG_BRUTE_ORF;
		else if (c == 'g') opt->proteinFlag |= ALIGN_FLAG_GEN_NT;
		else if (c == 'n') opt->proteinFlag |= ALIGN_FLAG_KEEP_PRO;
		else if (c == 'J') opt->proteinFlag &= ~ALIGN_FLAG_ADJUST_ORF;
        else if (c == 'p') opt->proteinFlag |= ALIGN_FLAG_MANUAL_PRO;
        else if (c == 'q') opt->proteinFlag |= ALIGN_FLAG_MANUAL_TRANSCRIPT;
		else if (c == 'c') opt->max_occ = atoi(optarg), opt0.max_occ = 1;
		else if (c == 'd') opt->zdrop = atoi(optarg), opt0.zdrop = 1;
		else if (c == 'v') bwa_verbose = atoi(optarg);
		else if (c == 'j') ignore_alt = 1;
		else if (c == 'r') opt->split_factor = atof(optarg), opt0.split_factor = 1.;
		else if (c == 'D') opt->drop_ratio = atof(optarg), opt0.drop_ratio = 1.;
		else if (c == 'm') opt->max_matesw = atoi(optarg), opt0.max_matesw = 1;
		else if (c == 's') opt->split_width = atoi(optarg), opt0.split_width = 1;
		else if (c == 'G') opt->max_chain_gap = atoi(optarg), opt0.max_chain_gap = 1;
		else if (c == 'N') opt->max_chain_extend = atoi(optarg), opt0.max_chain_extend = 1;
		else if (c == 'W') opt->min_chain_weight = atoi(optarg), opt0.min_chain_weight = 1;
		else if (c == 'y') opt->max_mem_intv = atol(optarg), opt0.max_mem_intv = 1;
		else if (c == 'C') aux.copy_comment = 1;
		else if (c == 'K') fixed_chunk_size = atoi(optarg);
		else if (c == 'X') opt->mask_level = atof(optarg);
        else if (c == 'P') proxyAddress = optarg;
		else if (c == 'h') {
			opt0.max_XA_hits = opt0.max_XA_hits_alt = 1;
			opt->max_XA_hits = opt->max_XA_hits_alt = strtol(optarg, &p, 10);
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				opt->max_XA_hits_alt = strtol(p+1, &p, 10);
		}
		else if (c == 'Q') {
			opt0.mapQ_coef_len = 1;
			opt->mapQ_coef_len = atoi(optarg);
			opt->mapQ_coef_fac = opt->mapQ_coef_len > 0? log(opt->mapQ_coef_len) : 0;
		} else if (c == 'O') {
			opt0.o_del = opt0.o_ins = 1;
			opt->o_del = opt->o_ins = strtol(optarg, &p, 10);
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				opt->o_ins = strtol(p+1, &p, 10);
		} else if (c == 'E') {
			opt0.e_del = opt0.e_ins = 1;
			opt->e_del = opt->e_ins = strtol(optarg, &p, 10);
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				opt->e_ins = strtol(p+1, &p, 10);
		} else if (c == 'L') {
			opt0.pen_clip5 = opt0.pen_clip3 = 1;
			opt->pen_clip5 = opt->pen_clip3 = strtol(optarg, &p, 10);
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				opt->pen_clip3 = strtol(p+1, &p, 10);
		} else if (c == 'R') {
			if ((rg_line = bwa_set_rg(optarg)) == 0) return 1; // FIXME: memory leak
		} else if (c == 'H') {
			if (optarg[0] != '@') {
				FILE *fp;
				if ((fp = fopen(optarg, "r")) != 0) {
					char *buf;
					buf = calloc(1, 0x10000);
					while (fgets(buf, 0xffff, fp)) {
						i = strlen(buf);
						assert(buf[i-1] == '\n'); // a long line
						buf[i-1] = 0;
						hdr_line = bwa_insert_header(buf, hdr_line);
					}
					free(buf);
					fclose(fp);
				}
			} else hdr_line = bwa_insert_header(optarg, hdr_line);
		} else if (c == 'I') { // specify the insert size distribution
			aux.pes0 = pes;
			pes[1].failed = 0;
			pes[1].avg = strtod(optarg, &p);
			pes[1].std = pes[1].avg * .1;
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				pes[1].std = strtod(p+1, &p);
			pes[1].high = (int)(pes[1].avg + 4. * pes[1].std + .499);
			pes[1].low  = (int)(pes[1].avg - 4. * pes[1].std + .499);
			if (pes[1].low < 1) pes[1].low = 1;
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				pes[1].high = (int)(strtod(p+1, &p) + .499);
			if (*p != 0 && ispunct(*p) && isdigit(p[1]))
				pes[1].low  = (int)(strtod(p+1, &p) + .499);

			logMessage(__func__, LOG_LEVEL_MESSAGE, "mean insert size: %.3f, stddev: %.3f, max: %d, min: %d\n",
			   									     pes[1].avg, pes[1].std, pes[1].high, pes[1].low);

		}
		else return 1;
	}

	if (rg_line) {
		hdr_line = bwa_insert_header(rg_line, hdr_line);
		free(rg_line);
	}

	if (opt->n_threads < 1) opt->n_threads = 1;
	if (optind + 1 >= argc || optind + 3 < argc) {
		renderAlignUsage(opt);
		free(opt);
		return 1;
	}

	if (mode) {
		if (strcmp(mode, "intractg") == 0) {
			if (!opt0.o_del) opt->o_del = 16;
			if (!opt0.o_ins) opt->o_ins = 16;
			if (!opt0.b) opt->b = 9;
			if (!opt0.pen_clip5) opt->pen_clip5 = 5;
			if (!opt0.pen_clip3) opt->pen_clip3 = 5;
		} else if (strcmp(mode, "pacbio") == 0 || strcmp(mode, "pbref") == 0 || strcmp(mode, "pbread") == 0 || strcmp(mode, "ont2d") == 0) {
			if (!opt0.o_del) opt->o_del = 1;
			if (!opt0.e_del) opt->e_del = 1;
			if (!opt0.o_ins) opt->o_ins = 1;
			if (!opt0.e_ins) opt->e_ins = 1;
			if (!opt0.b) opt->b = 1;
			if (opt0.split_factor == 0.) opt->split_factor = 10.;
			if (strcmp(mode, "pbread") == 0) { // pacbio read-to-read setting; NOT working well!
				opt->flag |= MEM_F_ALL | MEM_F_SELF_OVLP | MEM_F_ALN_REG;
				if (!opt0.min_chain_weight) opt->min_chain_weight = 40;
				if (!opt0.max_occ) opt->max_occ = 1000;
				if (!opt0.min_seed_len) opt->min_seed_len = 13;
				if (!opt0.max_chain_extend) opt->max_chain_extend = 25;
				if (opt0.drop_ratio == 0.) opt->drop_ratio = .001;
			} else if (strcmp(mode, "ont2d") == 0) {
				if (!opt0.min_chain_weight) opt->min_chain_weight = 20;
				if (!opt0.min_seed_len) opt->min_seed_len = 14;
				if (!opt0.pen_clip5) opt->pen_clip5 = 0;
				if (!opt0.pen_clip3) opt->pen_clip3 = 0;
			} else {
				if (!opt0.min_chain_weight) opt->min_chain_weight = 40;
				if (!opt0.min_seed_len) opt->min_seed_len = 17;
				if (!opt0.pen_clip5) opt->pen_clip5 = 0;
				if (!opt0.pen_clip3) opt->pen_clip3 = 0;
			}
		} else {
			logMessage(__func__, LOG_LEVEL_ERROR, "Unknown read type '%s'\n", mode);
			return 1; // FIXME memory leak
		}
	} else update_a(opt, &opt0);

    // Check for incompatible options
    if ((opt->proteinFlag & ALIGN_FLAG_MANUAL_PRO) && (opt->proteinFlag & ALIGN_FLAG_MANUAL_TRANSCRIPT)) {
		logMessage(__func__, LOG_LEVEL_ERROR, "Both protein and transcriptome mode selected.\n");
        return 1;
    }

    // Default to standard genetic code for translations
    if (!opt->translations) opt->translations = convertTransArgs("");

	// Create scoring weight matrix
	bwa_fill_scmat(opt->a, opt->b, opt->mat);

	// Prepare header check and filenames
	indexProName = malloc(strlen(argv[optind]) + 5);
	readsProName = malloc(strlen(argv[optind + 1]) + 5);
	sprintf(indexProName, "%s.pro", argv[optind]);
	sprintf(readsProName, "%s.pro", argv[optind + 1]);
	opt->indexInfo = getIndexHeader(indexProName);

	// Before loading index, ensure it's compatible
	switch (getIndexCompatible(opt->indexInfo)) {
		case INDEX_COMPATIBILITY_NONE:
			logMessage(__func__, LOG_LEVEL_ERROR,
					   "Index version %d.%d.%d is incompatible, please reindex the reference.\n",
						opt->indexInfo.version[0],
						opt->indexInfo.version[1],
						opt->indexInfo.version[2]);

			return 1;

		case INDEX_COMPATBILITY_FUTURE:
			logMessage(__func__, LOG_LEVEL_WARNING,
					   "Index version %d.%d.%d is newer than program version, compatibility not guaranteed.\n",
						opt->indexInfo.version[0],
						opt->indexInfo.version[1],
						opt->indexInfo.version[2]);

			break;
		default:
			break;
	}

	// Load index
	aux.idx = index_load_from_shm(argv[optind]);
	if (aux.idx == 0) {
		logMessage(__func__, LOG_LEVEL_MESSAGE, "Loading the index for reference '%s'...\n", argv[optind]);
		if ((aux.idx = index_load(argv[optind], BWA_IDX_ALL)) == 0) return 1; // FIXME: memory leak
	}
	else {
		logMessage(__func__, LOG_LEVEL_MESSAGE, "Loading the index from shared memory...\n");
	}

	if (ignore_alt)
		for (i = 0; i < aux.idx->bns->n_seqs; ++i)
			aux.idx->bns->anns[i].is_alt = 0;

	// Ready output files if requested (else stdout)
	if (prefixName != NULL) {
		if (opt->indexInfo.referenceType == 0) {
			logMessage(__func__, LOG_LEVEL_ERROR, "Reporting can only be used on prepared indices.\n");
 			return 1;
		}

		samName = malloc(strlen(prefixName) + 5);
		reportPriName = malloc(strlen(prefixName) + 23);
		reportSecName = malloc(strlen(prefixName) + 23);
		sprintf(samName, "%s.sam", prefixName);
		sprintf(reportPriName, "%s_uniprot.tsv", prefixName);

		if (opt->flag & MEM_F_ALL) {
			sprintf(reportPriName, "%s_uniprot_primary.tsv", prefixName);
			sprintf(reportSecName, "%s_uniprot_secondary.tsv", prefixName);
		}

		// Open files
		opt->outputStream = err_xopen_core(__func__, samName, "w");
		reportPriStream = err_xopen_core(__func__, reportPriName, "w");
		if (opt->flag & MEM_F_ALL) reportSecStream = err_xopen_core(__func__, reportSecName, "w");

	}

    if (opt->proteinFlag & ALIGN_FLAG_MANUAL_PRO) {
        // Protein input given, skip ORF detection
        sprintf(readsProName, "%s", argv[optind + 1]);
    }
    else {
        // Detect ORFs and write protein file
        writeReadsProtein(argv[optind + 1], readsProName, opt);
    }

	// Open ORFs sequence
	ko = kopen(readsProName, &fd);
	if (ko == 0) {
		logMessage(__func__, LOG_LEVEL_ERROR, "Failed to open file `%s'.\n", argv[optind + 1]);
		return 1;
	}

	fp = gzdopen(fd, "r");
	aux.ks = kseq_init(fp);
	if (optind + 2 < argc) {
		if (opt->flag&MEM_F_PE) {
			logMessage(__func__, LOG_LEVEL_WARNING, "When '-p' is in use, the second query file is ignored.\n");
		} else {
			ko2 = kopen(argv[optind + 2], &fd2);
			if (ko2 == 0) {
				logMessage(__func__, LOG_LEVEL_ERROR, "Failed to open file `%s'.\n", argv[optind + 2]);
				return 1;
			}
			fp2 = gzdopen(fd2, "r");
			aux.ks2 = kseq_init(fp2);
			opt->flag |= MEM_F_PE;
		}
	}

	// Render SAM header
	if (!(opt->flag & MEM_F_ALN_REG)) {
		bwa_print_sam_hdr(aux.idx->bns, hdr_line, opt->outputStream);
	}

	// Align and render
	aux.actual_chunk_size = fixed_chunk_size > 0? fixed_chunk_size : opt->chunk_size * opt->n_threads;
	kt_pipeline(no_mt_io? 1 : 2, process, &aux, 3);

	// Report number aligned
	renderNumberAligned(opt);

	// Generate UniProt report if requested
	if (prefixName != NULL) {
		renderUniprotReport(opt->outputType, 1, reportPriStream, proxyAddress);
		if (opt->flag & MEM_F_ALL) {
			renderUniprotReport(opt->outputType, 0, reportSecStream, proxyAddress);
		}
	}

	// Delete generated protein file unless requested otherwise
	if (!(opt->proteinFlag & ALIGN_FLAG_KEEP_PRO) && !(opt->proteinFlag & ALIGN_FLAG_MANUAL_PRO)) {
		remove(readsProName);
	}

	// Cleanup
	if (opt->outputStream != stdout) fclose (opt->outputStream);
	if (reportPriStream) fclose(reportPriStream);
	if (reportSecStream) fclose(reportSecStream);

	free(indexProName);
	free(readsProName);
	free(samName);
	free(reportPriName);
	free(reportSecName);
	free(hdr_line);
	free(opt);

	index_destroy(aux.idx);
	kseq_destroy(aux.ks);
	err_gzclose(fp); kclose(ko);
	if (aux.ks2) {
		kseq_destroy(aux.ks2);
		err_gzclose(fp2); kclose(ko2);
	}

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x528, %rsp            # imm = 0x528
movq %rsi, %rbx
movl %edi, 0x50(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0xf0(%rsp)
movaps %xmm0, 0xe0(%rsp)
movaps %xmm0, 0xd0(%rsp)
andq $0x0, 0x100(%rsp)
leaq 0x120(%rsp), %rdi
movl $0x400, %edx            # imm = 0x400
xorl %esi, %esi
callq 0x3140
pushq $0x8
popq %rax
cmpq $0x408, %rax            # imm = 0x408
je 0x6028
movl $0x1, 0x120(%rsp,%rax)
addq $0x20, %rax
jmp 0x600f
movq %rbx, 0x20(%rsp)
callq 0x11834
movq %rax, %rbx
movq %rax, 0xe0(%rsp)
pushq $-0x1
popq %rax
movl %eax, 0x74(%rsp)
xorps %xmm0, %xmm0
movss %xmm0, 0x94(%rsp)
movq $0x0, 0x38(%rsp)
leaq 0x1a754(%rip), %r15     # 0x207b4
movl $0x0, 0x48(%rsp)
movl $0x0, 0x68(%rsp)
movl $0x0, 0x8c(%rsp)
movl $0x0, 0x30(%rsp)
movl $0x0, 0x88(%rsp)
movl $0x0, 0xa0(%rsp)
movl $0x0, 0x84(%rsp)
movl $0x0, 0x44(%rsp)
movl $0x0, 0x40(%rsp)
movss %xmm0, 0x80(%rsp)
movl $0x0, 0x7c(%rsp)
movl $0x0, 0x78(%rsp)
xorl %edx, %edx
movl $0x0, 0x90(%rsp)
movq $0x0, 0xa8(%rsp)
xorl %ebp, %ebp
movq $0x0, 0x58(%rsp)
movq $0x0, 0x60(%rsp)
movq $0x0, 0xb0(%rsp)
movl %edx, %r13d
movl 0x50(%rsp), %edi
movq 0x20(%rsp), %r14
movq %r14, %rsi
leaq 0x1a7c0(%rip), %rdx     # 0x208dc
callq 0x3090
testl %eax, %eax
js 0x6a95
addl $-0x31, %eax
cmpl $0x49, %eax
ja 0x6b04
movslq (%r15,%rax,4), %rcx
addq %r15, %rcx
pushq $0x1
popq %rdx
jmpq *%rcx
movq 0x25e70(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, (%rbx)
pushq $0x1
popq %rax
movl %eax, 0xa0(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25e50(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x7d80
movq %rax, 0x70(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25e38(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
leaq 0x28(%rsp), %r14
pushq $0xa
popq %rdx
movq %r14, %rsi
callq 0x34e0
movl %eax, 0xc0(%rbx)
movl %eax, 0xbc(%rbx)
movq (%r14), %r14
movsbq (%r14), %r12
movl %r13d, %edx
testq %r12, %r12
je 0x6106
callq 0x3320
movq (%rax), %rcx
testb $0x4, (%rcx,%r12,2)
movl %r13d, %edx
je 0x6106
movsbq 0x1(%r14), %rax
testb $0x8, 0x1(%rcx,%rax,2)
movl %r13d, %edx
je 0x6106
incq %r14
leaq 0x28(%rsp), %rsi
pushq $0xa
popq %rdx
movq %r14, %rdi
callq 0x34e0
movl %eax, 0xc0(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25db5(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0xb8(%rbx)
movl %r13d, %edx
jmp 0x6106
orb $0x40, 0x48(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25d8c(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x78(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x44(%rsp)
movl %r13d, %edx
jmp 0x6106
orb $0x4, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25d5f(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
cvtsi2ss %eax, %xmm0
movss %xmm0, 0xac(%rbx)
testl %eax, %eax
jle 0x690e
cvtss2sd %xmm0, %xmm0
callq 0x3250
cvttsd2si %xmm0, %eax
jmp 0x6910
orb $0x2, 0x49(%rbx)
movl %r13d, %edx
jmp 0x6106
orb $0x20, 0x48(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25d12(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x24(%rbx)
movl %r13d, %edx
jmp 0x6106
orb $0x8, 0x48(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25cec(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x74(%rsp)
movl %r13d, %edx
jmp 0x6106
orb $0x20, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
orb $0x1, 0x49(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25cb9(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x18(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x8c(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25c95(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
cmpb $0x40, (%rdi)
jne 0x688f
movq %rbp, %rsi
callq 0x1178b
movq %rax, %rbp
movl %r13d, %edx
jmp 0x6106
movq 0x25c6f(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x28(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x88(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25c4b(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
leaq 0x28(%rsp), %r14
pushq $0xa
popq %rdx
movq %r14, %rsi
callq 0x34e0
movl %eax, 0x14(%rbx)
movl %eax, 0xc(%rbx)
movq (%r14), %r14
movsbq (%r14), %r12
pushq $0x1
popq %rax
movl %eax, 0x68(%rsp)
movl %r13d, %edx
testq %r12, %r12
je 0x6106
callq 0x3320
movq (%rax), %rcx
testb $0x4, (%rcx,%r12,2)
movl %r13d, %edx
je 0x6106
movsbq 0x1(%r14), %rax
testb $0x8, 0x1(%rcx,%rax,2)
movl %r13d, %edx
je 0x6106
incq %r14
leaq 0x28(%rsp), %rsi
pushq $0xa
popq %rdx
movq %r14, %rdi
callq 0x34e0
movl %eax, 0x14(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25bca(%rip), %rax     # 0x2bfb8
movq (%rax), %rax
movq %rax, 0x58(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25bb3(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x33e0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x6c(%rbx)
movl %r13d, %edx
jmp 0x6106
movl $0x1, 0xf8(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25b80(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x33e0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0xa0(%rbx)
movss 0x1a35c(%rip), %xmm0    # 0x207b0
movss %xmm0, 0x80(%rsp)
movl %r13d, %edx
jmp 0x6106
andb $-0x2, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25b40(%rip), %rax     # 0x2bfb8
movq (%rax), %rax
movq %rax, 0x60(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25b29(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x4(%rbx)
pushq $0x1
popq %rax
movq %rax, 0x38(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25b07(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
leaq 0x28(%rsp), %r14
pushq $0xa
popq %rdx
movq %r14, %rsi
callq 0x34e0
movl %eax, 0x20(%rbx)
movl %eax, 0x1c(%rbx)
movq (%r14), %r14
movsbq (%r14), %r12
pushq $0x1
popq %rax
movl %eax, 0x30(%rsp)
movl %r13d, %edx
testq %r12, %r12
je 0x6106
callq 0x3320
movq (%rax), %rcx
testb $0x4, (%rcx,%r12,2)
movl %r13d, %edx
je 0x6106
movsbq 0x1(%r14), %rax
testb $0x8, 0x1(%rcx,%rax,2)
movl %r13d, %edx
je 0x6106
incq %r14
leaq 0x28(%rsp), %rsi
pushq $0xa
popq %rdx
movq %r14, %rdi
callq 0x34e0
movl %eax, 0x20(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25a86(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x80(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x7c(%rsp)
movl %r13d, %edx
jmp 0x6106
orb $0x2, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
andl $0x0, 0x148(%rsp)
leaq 0x120(%rsp), %rax
movq %rax, 0xe8(%rsp)
movq 0x25a3e(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
leaq 0x28(%rsp), %r14
movq %r14, %rsi
callq 0x3210
movaps %xmm0, %xmm3
movsd %xmm0, 0x150(%rsp)
mulsd 0x1a1f2(%rip), %xmm0    # 0x20790
movsd %xmm0, 0x158(%rsp)
movq (%r14), %r14
movsbq (%r14), %r12
testq %r12, %r12
movq %rbp, 0x98(%rsp)
je 0x695f
movsd %xmm3, 0xc0(%rsp)
movsd %xmm0, 0xc8(%rsp)
callq 0x3320
movq (%rax), %rax
testb $0x4, (%rax,%r12,2)
je 0x65f0
movsbq 0x1(%r14), %rcx
testb $0x8, 0x1(%rax,%rcx,2)
jne 0x6936
movsd 0xc8(%rsp), %xmm0
movsd 0xc0(%rsp), %xmm3
jmp 0x695f
movq 0x259aa(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x11648
movl %r13d, %edx
movq %rax, 0xa8(%rsp)
testq %rax, %rax
jne 0x6106
jmp 0x6b04
movq 0x25982(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x7c(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x40(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25961(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x44(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x84(%rsp)
movl %r13d, %edx
jmp 0x6106
orb $0x10, 0x48(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25931(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x90(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25914(%rip), %rax     # 0x2bfb8
movq (%rax), %rax
movq %rax, 0xb0(%rsp)
movl %r13d, %edx
jmp 0x6106
andb $-0x9, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x258ee(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x33e0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x84(%rbx)
movss 0x1a0ca(%rip), %xmm0    # 0x207b0
movss %xmm0, 0x94(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x258ba(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
leaq 0x28(%rsp), %r14
pushq $0xa
popq %rdx
movq %r14, %rsi
callq 0x34e0
movl %eax, 0x10(%rbx)
movl %eax, 0x8(%rbx)
movq (%r14), %r14
movsbq (%r14), %r12
pushq $0x1
popq %rax
movl %eax, 0x48(%rsp)
movl %r13d, %edx
testq %r12, %r12
je 0x6106
callq 0x3320
movq (%rax), %rcx
testb $0x4, (%rcx,%r12,2)
movl %r13d, %edx
je 0x6106
movsbq 0x1(%r14), %rax
testb $0x8, 0x1(%rcx,%rax,2)
movl %r13d, %edx
je 0x6106
incq %r14
leaq 0x28(%rsp), %rsi
pushq $0xa
popq %rdx
movq %r14, %rdi
callq 0x34e0
movl %eax, 0x10(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25839(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x88(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x2581c(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x40(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25802(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x33e0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x9c(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x257df(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x68(%rbx)
movl %r13d, %edx
jmp 0x6106
orb $0x10, 0x4c(%rbx)
movl %r13d, %edx
jmp 0x6106
pushq $0x1
popq %rax
movl %eax, 0x90(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x257a7(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
movl %eax, 0x8c(%rbx)
pushq $0x1
popq %rax
movl %eax, 0x78(%rsp)
movl %r13d, %edx
jmp 0x6106
movq 0x25783(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
leaq 0x265fc(%rip), %rcx     # 0x2ce40
movl %eax, (%rcx)
movl %r13d, %edx
jmp 0x6106
movq 0x25763(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x33a0
movq %rax, 0x30(%rbx)
movl %r13d, %edx
jmp 0x6106
movq 0x25748(%rip), %rax     # 0x2bfb8
movq (%rax), %rdi
callq 0x35b0
cmpl $0x2, %eax
pushq $0x1
popq %rcx
cmovgel %eax, %ecx
movl %ecx, 0x94(%rbx)
movl %r13d, %edx
jmp 0x6106
leaq 0x1b588(%rip), %rsi     # 0x21e1e
callq 0x3380
movl %r13d, %edx
testq %rax, %rax
je 0x6106
movq %rax, %r14
leaq 0x1a081(%rip), %rdx     # 0x20932
leaq 0x1a082(%rip), %r8      # 0x2093a
pushq $0x1
popq %rdi
movl $0x10000, %esi          # imm = 0x10000
movl $0xc7, %ecx
callq 0x1dfd0
movq %rax, %r12
movq %r12, %rdi
movl $0xffff, %esi           # imm = 0xFFFF
movq %r14, %rdx
callq 0x35d0
testq %rax, %rax
je 0x691e
movq %r12, %rdi
callq 0x3100
decl %eax
cltq
cmpb $0xa, (%r12,%rax)
jne 0x74cb
movb $0x0, (%r12,%rax)
movq %r12, %rdi
movq %rbp, %rsi
callq 0x1178b
movq %rax, %rbp
jmp 0x68cd
xorl %eax, %eax
movl %eax, 0xb0(%rbx)
movl %r13d, %edx
jmp 0x6106
movq %r12, %rdi
callq 0x3390
movq %r14, %rdi
callq 0x32f0
movl %r13d, %edx
jmp 0x6106
incq %r14
leaq 0x28(%rsp), %r12
movq %r14, %rdi
movq %r12, %rsi
callq 0x3210
movsd %xmm0, 0x158(%rsp)
movsd 0x150(%rsp), %xmm3
movq (%r12), %r14
movsd 0x19e31(%rip), %xmm2    # 0x20798
mulsd %xmm0, %xmm2
addsd %xmm3, %xmm2
movsd 0x19e29(%rip), %xmm1    # 0x207a0
addsd %xmm1, %xmm2
cvttsd2si %xmm2, %r12d
mulsd 0x19e20(%rip), %xmm0    # 0x207a8
addsd %xmm3, %xmm0
addsd %xmm1, %xmm0
cvttsd2si %xmm0, %eax
cmpl $0x2, %eax
pushq $0x1
popq %rcx
cmovgel %eax, %ecx
movl %r12d, 0x144(%rsp)
movl %ecx, 0x140(%rsp)
movsbq (%r14), %rbp
testq %rbp, %rbp
je 0x6a50
callq 0x3320
movq (%rax), %rax
testb $0x4, (%rax,%rbp,2)
je 0x6a07
movsbq 0x1(%r14), %rcx
testb $0x8, 0x1(%rax,%rcx,2)
je 0x6a07
incq %r14
leaq 0x28(%rsp), %rbp
movq %r14, %rdi
movq %rbp, %rsi
callq 0x3210
addsd 0x19db2(%rip), %xmm0    # 0x207a0
cvttsd2si %xmm0, %r12d
movl %r12d, 0x144(%rsp)
movq (%rbp), %r14
movb (%r14), %bpl
testb %bpl, %bpl
je 0x6a50
callq 0x3320
movq (%rax), %rax
movsbq %bpl, %rcx
testb $0x4, (%rax,%rcx,2)
je 0x6a50
movsbq 0x1(%r14), %rcx
testb $0x8, 0x1(%rax,%rcx,2)
je 0x6a50
incq %r14
leaq 0x28(%rsp), %rsi
movq %r14, %rdi
callq 0x3210
addsd 0x19d63(%rip), %xmm0    # 0x207a0
cvttsd2si %xmm0, %eax
movl %eax, 0x140(%rsp)
movl 0x144(%rsp), %r12d
movsd 0x150(%rsp), %xmm0
movsd 0x158(%rsp), %xmm1
movl 0x140(%rsp), %r8d
leaq 0x19ec9(%rip), %rdi     # 0x2093a
leaq 0x19f01(%rip), %rdx     # 0x20979
pushq $0x3
popq %rsi
movl %r12d, %ecx
movb $0x2, %al
callq 0xc78e
movl %r13d, %edx
movq 0x98(%rsp), %rbp
jmp 0x6106
movq 0xa8(%rsp), %r15
testq %r15, %r15
je 0x6ab8
movq %r15, %rdi
movq %rbp, %rsi
callq 0x1178b
movq %rax, %rbp
movq %r15, %rdi
callq 0x3390
cmpl $0x0, 0x94(%rbx)
movq 0x58(%rsp), %r12
jg 0x6ad0
movl $0x1, 0x94(%rbx)
movq 0x25501(%rip), %r15     # 0x2bfd8
movl (%r15), %eax
leal 0x1(%rax), %ecx
movl 0x50(%rsp), %edx
cmpl %edx, %ecx
setge %cl
addl $0x3, %eax
cmpl %edx, %eax
setl %al
orb %cl, %al
cmpb $0x1, %al
jne 0x6b0c
movq %rbx, %rdi
callq 0x74ea
movq %rbx, %rdi
callq 0x3390
pushq $0x1
popq %rax
jmp 0x72ed
testq %r12, %r12
je 0x6ba3
leaq 0x19e95(%rip), %rsi     # 0x209b1
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6d13
leaq 0x19e87(%rip), %rsi     # 0x209ba
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6c5d
leaq 0x19e77(%rip), %rsi     # 0x209c1
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6c5d
leaq 0x19e66(%rip), %rsi     # 0x209c7
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6c5d
leaq 0x19e56(%rip), %rsi     # 0x209ce
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6c5d
leaq 0x19dab(%rip), %rdi     # 0x2093a
leaq 0x19e3e(%rip), %rdx     # 0x209d4
pushq $0x1
popq %rbx
movl %ebx, %esi
movq %r12, %rcx
jmp 0x72e4
cmpl $0x0, 0xa0(%rsp)
je 0x6def
cmpl $0x0, 0x38(%rsp)
jne 0x6bc1
movl 0x4(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x4(%rbx)
cmpl $0x0, 0x84(%rsp)
movl 0x30(%rsp), %ecx
movl 0x68(%rsp), %edx
movl 0x48(%rsp), %esi
jne 0x6be0
movl 0x44(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x44(%rbx)
testl %esi, %esi
jne 0x6bed
movl 0x8(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x8(%rbx)
testl %edx, %edx
jne 0x6bfa
movl 0xc(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0xc(%rbx)
testl %esi, %esi
jne 0x6c07
movl 0x10(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x10(%rbx)
testl %edx, %edx
jne 0x6c14
movl 0x14(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x14(%rbx)
cmpl $0x0, 0x88(%rsp)
jne 0x6c27
movl 0x28(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x28(%rbx)
testl %ecx, %ecx
jne 0x6c34
movl 0x1c(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x1c(%rbx)
testl %ecx, %ecx
jne 0x6c41
movl 0x20(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x20(%rbx)
cmpl $0x0, 0x8c(%rsp)
jne 0x6def
movl 0x18(%rbx), %eax
imull (%rbx), %eax
movl %eax, 0x18(%rbx)
jmp 0x6def
movl 0x48(%rsp), %ecx
testl %ecx, %ecx
jne 0x6c6c
movl $0x1, 0x8(%rbx)
movl 0x68(%rsp), %eax
testl %eax, %eax
jne 0x6c7b
movl $0x1, 0xc(%rbx)
testl %ecx, %ecx
jne 0x6c86
movl $0x1, 0x10(%rbx)
testl %eax, %eax
jne 0x6c91
movl $0x1, 0x14(%rbx)
cmpl $0x0, 0x38(%rsp)
jne 0x6c9f
movl $0x1, 0x4(%rbx)
xorps %xmm0, %xmm0
movss 0x94(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jne 0x6cbc
jp 0x6cbc
movl $0x41200000, 0x84(%rbx) # imm = 0x41200000
leaq 0x19d04(%rip), %rsi     # 0x209c7
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6d5e
leaq 0x19cf4(%rip), %rsi     # 0x209ce
movq %r12, %rdi
callq 0x34d0
testl %eax, %eax
je 0x6dbf
cmpl $0x0, 0x40(%rsp)
movl 0x30(%rsp), %eax
jne 0x6cfc
movl $0x28, 0x7c(%rbx)
cmpl $0x0, 0x44(%rsp)
jne 0x6ddf
movl $0x11, 0x78(%rbx)
jmp 0x6ddf
movl 0x48(%rsp), %eax
testl %eax, %eax
jne 0x6d22
movl $0x10, 0x8(%rbx)
testl %eax, %eax
movl 0x30(%rsp), %eax
jne 0x6d31
movl $0x10, 0x10(%rbx)
cmpl $0x0, 0x38(%rsp)
jne 0x6d3f
movl $0x9, 0x4(%rbx)
testl %eax, %eax
jne 0x6d4a
movl $0x5, 0x1c(%rbx)
testl %eax, %eax
jne 0x6def
movl $0x5, 0x20(%rbx)
jmp 0x6def
orb $-0x38, 0x48(%rbx)
cmpl $0x0, 0x40(%rsp)
jne 0x6d70
movl $0x28, 0x7c(%rbx)
cmpl $0x0, 0x78(%rsp)
jne 0x6d81
movl $0x3e8, 0x8c(%rbx)      # imm = 0x3E8
cmpl $0x0, 0x44(%rsp)
jne 0x6d8f
movl $0xd, 0x78(%rbx)
cmpl $0x0, 0x7c(%rsp)
jne 0x6da0
movl $0x19, 0x80(%rbx)
xorps %xmm0, %xmm0
movss 0x80(%rsp), %xmm1
ucomiss %xmm0, %xmm1
jne 0x6def
jp 0x6def
movl $0x3a83126f, 0xa0(%rbx) # imm = 0x3A83126F
jmp 0x6def
cmpl $0x0, 0x40(%rsp)
movl 0x30(%rsp), %eax
jne 0x6dd1
movl $0x14, 0x7c(%rbx)
cmpl $0x0, 0x44(%rsp)
jne 0x6ddf
movl $0xe, 0x78(%rbx)
testl %eax, %eax
jne 0x6de7
andl $0x0, 0x1c(%rbx)
testl %eax, %eax
jne 0x6def
andl $0x0, 0x20(%rbx)
movl 0x4c(%rbx), %eax
notl %eax
testb $0x30, %al
jne 0x6e17
leaq 0x19b3b(%rip), %rdi     # 0x2093a
leaq 0x19be6(%rip), %rdx     # 0x209ec
pushq $0x1
popq %rbx
movl %ebx, %esi
xorl %eax, %eax
callq 0xc78e
jmp 0x72eb
movq %rbp, 0x98(%rsp)
cmpq $0x0, 0x70(%rbx)
jne 0x6e36
leaq 0x1c831(%rip), %rdi     # 0x2365e
callq 0x7d80
movq %rax, 0x70(%rbx)
movl (%rbx), %edi
movl 0x4(%rbx), %esi
movq %rbx, %rdx
addq $0xc4, %rdx
callq 0x1050a
movslq (%r15), %rax
movq (%r14,%rax,8), %rdi
callq 0x3100
leaq 0x5(%rax), %rdi
leaq 0x19ad1(%rip), %r14     # 0x20932
leaq 0x19ad2(%rip), %r12     # 0x2093a
movq %r14, %rsi
movl $0x127, %edx            # imm = 0x127
movq %r12, %rcx
callq 0x1e045
movq %r15, %rbp
movq %rax, %r15
movslq (%rbp), %rax
movq 0x20(%rsp), %rcx
movq 0x8(%rcx,%rax,8), %rdi
callq 0x3100
leaq 0x5(%rax), %rdi
movq %r14, %rsi
movl $0x128, %edx            # imm = 0x128
movq %r12, %rcx
movq 0x20(%rsp), %r14
callq 0x1e045
movq %rax, %r12
movslq (%rbp), %rax
movq (%r14,%rax,8), %rdx
leaq 0x1953f(%rip), %rsi     # 0x203fb
movq %r15, %rdi
xorl %eax, %eax
callq 0x3070
movslq (%rbp), %rax
movq 0x8(%r14,%rax,8), %rdx
movq %r12, 0x58(%rsp)
movq %r12, %rdi
leaq 0x1951d(%rip), %rsi     # 0x203fb
xorl %eax, %eax
callq 0x3070
leaq 0x108(%rsp), %r14
movq %r14, %rdi
movq %r15, 0xa8(%rsp)
movq %r15, %rsi
callq 0x4203
movq 0x10(%r14), %rax
movq %rax, 0x60(%rbx)
movups (%r14), %xmm0
movups %xmm0, 0x50(%rbx)
movq 0x60(%rbx), %rax
movq %rax, 0x10(%rsp)
movups 0x50(%rbx), %xmm0
movups %xmm0, (%rsp)
callq 0x42cf
cmpl $0x2, %eax
je 0x6f59
testl %eax, %eax
jne 0x6f7c
movl 0x5c(%rbx), %ecx
movl 0x60(%rbx), %r8d
movl 0x64(%rbx), %r9d
leaq 0x199f9(%rip), %rdi     # 0x2093a
leaq 0x19ad3(%rip), %rdx     # 0x20a1b
pushq $0x1
popq %rbx
movl %ebx, %esi
xorl %eax, %eax
callq 0xc78e
jmp 0x72eb
movl 0x5c(%rbx), %ecx
movl 0x60(%rbx), %r8d
movl 0x64(%rbx), %r9d
leaq 0x199cf(%rip), %rdi     # 0x2093a
leaq 0x19af0(%rip), %rdx     # 0x20a62
pushq $0x2
popq %rsi
xorl %eax, %eax
callq 0xc78e
movq 0x25055(%rip), %r12     # 0x2bfd8
movslq (%r12), %rax
movq 0x20(%rsp), %r15
movq (%r15,%rax,8), %rdi
callq 0xa7ea
movq %rax, 0x100(%rsp)
testq %rax, %rax
je 0x6fbf
movq %rax, %r14
leaq 0x1998e(%rip), %rdi     # 0x2093a
leaq 0x19b2d(%rip), %rdx     # 0x20ae0
pushq $0x3
popq %rsi
xorl %eax, %eax
callq 0xc78e
jmp 0x7006
movslq (%r12), %rax
movq (%r15,%rax,8), %rcx
leaq 0x1996c(%rip), %rdi     # 0x2093a
leaq 0x19ae2(%rip), %rdx     # 0x20ab7
pushq $0x3
popq %rsi
xorl %eax, %eax
callq 0xc78e
movslq (%r12), %rax
movq (%r15,%rax,8), %rdi
pushq $0x7
popq %rsi
callq 0x10fe8
movq %rax, %r14
movq %rax, 0x100(%rsp)
testq %rax, %rax
pushq $0x1
popq %rax
je 0x72ed
cmpl $0x0, 0x90(%rsp)
je 0x7036
movq 0x8(%r14), %rax
movl 0x8(%rax), %edx
xorl %ecx, %ecx
testl %edx, %edx
cmovlel %ecx, %edx
imulq $0x28, %rdx, %rdx
cmpq %rcx, %rdx
je 0x7036
movq 0x10(%rax), %rsi
andl $0x0, 0x14(%rsi,%rcx)
addq $0x28, %rcx
jmp 0x7022
cmpq $0x0, 0x60(%rsp)
je 0x7172
cmpl $0x0, 0x58(%rbx)
je 0x7195
movq 0x60(%rsp), %r12
movq %r12, %rdi
callq 0x3100
leaq 0x5(%rax), %rdi
leaq 0x198ce(%rip), %rbp     # 0x20932
leaq 0x198cf(%rip), %r14     # 0x2093a
movq %rbp, %rsi
movl $0x159, %edx            # imm = 0x159
movq %r14, %rcx
callq 0x1e045
movq %rax, %r15
movq %r12, %rdi
callq 0x3100
leaq 0x17(%rax), %rdi
movq %rbp, %rsi
movl $0x15a, %edx            # imm = 0x15A
movq %r14, %rcx
callq 0x1e045
movq %rax, %r14
movq %r12, %rdi
callq 0x3100
leaq 0x17(%rax), %rdi
movq %rbp, %rsi
movl $0x15b, %edx            # imm = 0x15B
leaq 0x19882(%rip), %rcx     # 0x2093a
callq 0x1e045
movq %rax, 0x38(%rsp)
leaq 0x19a71(%rip), %rsi     # 0x20b3a
movq %r15, 0x48(%rsp)
movq %r15, %rdi
movq %r14, %r15
movq %r12, %rdx
xorl %eax, %eax
callq 0x3070
leaq 0x19a5c(%rip), %rsi     # 0x20b41
movq %r14, %rdi
movq %r12, %rdx
xorl %eax, %eax
callq 0x3070
testb $0x8, 0x48(%rbx)
je 0x7127
leaq 0x19a51(%rip), %rsi     # 0x20b50
movq %r15, %rdi
movq 0x60(%rsp), %r14
movq %r14, %rdx
xorl %eax, %eax
callq 0x3070
leaq 0x19a4f(%rip), %rsi     # 0x20b67
movq 0x38(%rsp), %rdi
movq %r14, %rdx
xorl %eax, %eax
callq 0x3070
leaq 0x1980c(%rip), %r14     # 0x2093a
leaq 0x1d3aa(%rip), %rbp     # 0x244df
movq %r14, %rdi
movq 0x48(%rsp), %rsi
movq %rbp, %rdx
callq 0xc931
movq %rax, 0x38(%rbx)
movq %r14, %rdi
movq %r15, %rsi
movq %rbp, %rdx
callq 0xc931
movq %rax, %r14
testb $0x8, 0x48(%rbx)
movq 0x24e73(%rip), %r12     # 0x2bfd8
jne 0x71a8
movq $0x0, 0x30(%rsp)
jmp 0x71c5
xorl %r14d, %r14d
movq $0x0, 0x30(%rsp)
movq $0x0, 0x48(%rsp)
xorl %r15d, %r15d
movq $0x0, 0x38(%rsp)
jmp 0x71c5
leaq 0x1979e(%rip), %rdi     # 0x2093a
leaq 0x19966(%rip), %rdx     # 0x20b09
jmp 0x6e06
leaq 0x1978b(%rip), %rdi     # 0x2093a
leaq 0x1d329(%rip), %rdx     # 0x244df
movq 0x38(%rsp), %rsi
callq 0xc931
movq %rax, 0x30(%rsp)
testb $0x10, 0x4c(%rbx)
movslq (%r12), %rax
movq 0x20(%rsp), %rcx
movq 0x8(%rcx,%rax,8), %rsi
jne 0x71ee
movq %rsi, %rdi
movq 0x58(%rsp), %rbp
movq %rbp, %rsi
movq %rbx, %rdx
callq 0x8b5e
jmp 0x71fb
movq 0x58(%rsp), %rbp
movq %rbp, %rdi
callq 0x32c0
leaq 0x108(%rsp), %rsi
movq %rbp, %rdi
callq 0x5134
testq %rax, %rax
je 0x72c3
movq %rax, %rbp
movl 0x108(%rsp), %edi
leaq 0x1abf9(%rip), %rsi     # 0x21e1e
callq 0x36f0
movq %rax, 0x68(%rsp)
movq %rax, %rdi
callq 0xc1ce
movq %rax, 0xd0(%rsp)
movslq (%r12), %rcx
leal 0x2(%rcx), %edx
movl 0x48(%rbx), %eax
cmpl 0x50(%rsp), %edx
jge 0x72ff
testb $0x2, %al
jne 0x730a
movq %r14, 0xa0(%rsp)
movq 0x20(%rsp), %r14
movq 0x10(%r14,%rcx,8), %rdi
leaq 0xbc(%rsp), %rsi
callq 0x5134
testq %rax, %rax
je 0x74bd
movq %rax, 0x20(%rsp)
movl 0xbc(%rsp), %edi
leaq 0x1ab88(%rip), %rsi     # 0x21e1e
callq 0x36f0
movq %rax, 0x50(%rsp)
movq %rax, %rdi
callq 0xc1ce
movq %rax, 0xd8(%rsp)
movl 0x48(%rbx), %eax
orl $0x2, %eax
movl %eax, 0x48(%rbx)
movq 0xa0(%rsp), %r14
jmp 0x7337
movslq (%r12), %rax
movq 0x20(%rsp), %rcx
movq 0x8(%rcx,%rax,8), %rcx
leaq 0x19662(%rip), %rdi     # 0x2093a
leaq 0x198a1(%rip), %rdx     # 0x20b80
pushq $0x1
popq %rbx
movl %ebx, %esi
xorl %eax, %eax
callq 0xc78e
movl %ebx, %eax
addq $0x528, %rsp            # imm = 0x528
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq $0x0, 0x50(%rsp)
jmp 0x732e
leaq 0x19629(%rip), %rdi     # 0x2093a
leaq 0x19883(%rip), %rdx     # 0x20b9b
movq $0x0, 0x50(%rsp)
pushq $0x2
popq %rsi
xorl %eax, %eax
callq 0xc78e
movl 0x48(%rbx), %eax
movq $0x0, 0x20(%rsp)
testb %al, %al
movq 0x58(%rsp), %r12
js 0x735d
movq 0x100(%rsp), %rax
movq 0x8(%rax), %rdi
movq 0x38(%rbx), %rdx
movq 0x98(%rsp), %rsi
callq 0x11530
movl 0x74(%rsp), %eax
testl %eax, %eax
jg 0x7372
movl 0x94(%rbx), %eax
imull 0x98(%rbx), %eax
leaq 0xd0(%rsp), %rdx
movl %eax, 0x2c(%rdx)
xorl %edi, %edi
cmpl $0x1, %r13d
adcl $0x1, %edi
leaq 0x6d7(%rip), %rsi       # 0x7a64
pushq $0x3
popq %rcx
callq 0xd281
movq %rbx, %rdi
callq 0x9dc1
cmpq $0x0, 0x60(%rsp)
movq 0x30(%rsp), %r13
je 0x73db
movl 0x40(%rbx), %edi
pushq $0x1
popq %rsi
movq %r14, %rdx
movq 0xb0(%rsp), %rcx
callq 0x9640
testb $0x8, 0x48(%rbx)
je 0x73db
movl 0x40(%rbx), %edi
xorl %esi, %esi
movq %r13, %rdx
movq 0xb0(%rsp), %rcx
callq 0x9640
testb $0x14, 0x4c(%rbx)
jne 0x73e9
movq %r12, %rdi
callq 0x36e0
movq 0x38(%rbx), %rdi
movq 0x24bb4(%rip), %rax     # 0x2bfa8
cmpq (%rax), %rdi
je 0x73fe
callq 0x32f0
testq %r14, %r14
je 0x740b
movq %r14, %rdi
callq 0x32f0
testq %r13, %r13
je 0x7418
movq %r13, %rdi
callq 0x32f0
movq 0xa8(%rsp), %rdi
callq 0x3390
movq %r12, %rdi
callq 0x3390
movq 0x48(%rsp), %rdi
callq 0x3390
movq %r15, %rdi
callq 0x3390
movq 0x38(%rsp), %rdi
callq 0x3390
movq 0x98(%rsp), %rdi
callq 0x3390
movq %rbx, %rdi
callq 0x3390
movq 0x100(%rsp), %rdi
callq 0x10fed
movq 0xd0(%rsp), %rdi
callq 0xc251
movq 0x68(%rsp), %rdi
callq 0xd044
movq %rbp, %rdi
callq 0x5c2e
movq 0xd8(%rsp), %rdi
xorl %eax, %eax
testq %rdi, %rdi
je 0x72ed
callq 0xc251
movq 0x50(%rsp), %rdi
callq 0xd044
movq 0x20(%rsp), %rdi
callq 0x5c2e
xorl %eax, %eax
jmp 0x72ed
movslq (%r12), %rax
movq 0x10(%r14,%rax,8), %rcx
jmp 0x72d1
leaq 0x19476(%rip), %rdi     # 0x20948
leaq 0x19459(%rip), %rsi     # 0x20932
leaq 0x19479(%rip), %rcx     # 0x20959
movl $0xca, %edx
callq 0x31a0