// File: /workspace/github_cpp_makefile_star2_O1/CK7[P]abawaca/src/ScafDpData.cpp
// Function: ScafDpData::ScafDpData(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
ScafDpData::ScafDpData(string esom_names_file, string fasta_file, string info_file)
{
	FILE* fp = NULL;
	char line[8192] = {};

	if(!(fp = fopen(info_file.c_str(), "r"))) {
		throw invalid_argument(string(__FILE__) + " (" + to_string(__LINE__) + "): could not read " + info_file);
	}

	map<string, double>	scaf_name2cvg;
	while(fgets(line, 8192, fp)) {
		// gwd1_scaffold_0 556922  17.599  0.363   0
		char seq_name[512];
		double cvg, gc;
		size_t Ns, length;
		if(sscanf(line, "%s %lu %lf %lf %lu", seq_name, &length, &cvg, &gc, &Ns) != 5) {
			char s[2048];
			sprintf(s, "%s (%d): Illegal line in file %s:\n%s", __FILE__, __LINE__, info_file.c_str(), line);
			throw invalid_argument(s);
		}
		scaf_name2cvg.insert(pair<string, double>(seq_name, cvg));
	}
	fclose(fp);

	if(!(fp = fopen(esom_names_file.c_str(), "r"))) {
		char s[2048];
		sprintf(s, "%s (%d): could not read %s", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	if(!fgets(line, 8192, fp)) {
		char s[2048];
		sprintf(s, "%s (%d): file %s is empty", __FILE__, __LINE__, esom_names_file.c_str());
		throw invalid_argument(s);
	}

	// % 8430
	unsigned int t1, t2;
	char	c;
	if((sscanf(line, "%c %u", &c, &t1) != 2) || (c != '%')) {
		char s[2048];
		sprintf(s, "%s (%d): unexpected line in file %s:\n%s", __FILE__, __LINE__, esom_names_file.c_str(), line);
		throw invalid_argument(s);
	}

	map<string, set<DataPoint> >	scaf2dps;
	while(fgets(line, 8192, fp)) {
		// 1    gwd1_scaffold_20283_1   gwd1_scaffold_20283:(1,2072), 1 segment(s), 2072/2072 non-N bps
		// 1	gwd1_scaffold_0_1	gwd1_scaffold_0(1, 2003), 2003/2003 non-Ns bps
		size_t 	dp=0, start=0, end=0, non_Ns=0, length=0, nsegments=0;
		char	scaf[512]{}, gene_name[512]={}, *p1, *p2, *p3, *p4, *p5;

		p1 = strchr(line, ':');
		p2 = strchr(line, '(');
		p3 = strchr(line, ')');
		p4 = strchr(line, '/');
		p5 = strchr(line, ',');
		if(!p1 || !p2 || !p3 || !p4 || !p5) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%s\n", __FILE__, __LINE__, esom_names_file.c_str(), line);
			throw invalid_argument(s);
		}
		*p1 = *p2 = *p3 = *p4 = *p5 = ' ';
		if((sscanf(line, "%lu %s %s %lu %lu , %lu segment(s), %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &nsegments, &non_Ns, &length) != 8) &&
		   (sscanf(line, "%lu %s %s %lu %lu , %lu %lu non-N bps", &dp, gene_name, scaf, &start, &end, &non_Ns, &length) != 7)) {
			char s[2048];
			sprintf(s, "\n%s (%d): unexpected line in file %s:\n%sdp=%lu, gene_name=%s, scaf=%s, start=%lu, end=%lu, nsegments=%lu, non_Ns=%lu, length=%lu\nMake sure that your esom files were generated using prepare_esom_files.pl v1.05 or later\n",
				 __FILE__, __LINE__, esom_names_file.c_str(), line, dp, gene_name, scaf, start, end, nsegments, non_Ns, length);
			throw invalid_argument(s);
		}
		auto sit = scaf2dps.find(scaf);
		if(sit == scaf2dps.end()) {
			scaf2dps.insert(pair<string, set<DataPoint> >(scaf, set<DataPoint>()));
			sit = scaf2dps.find(scaf);
		}
		sit->second.insert(DataPoint(0, dp, 0, start, end, length-non_Ns));
	}
	fclose(fp);

	dps.resize(1);
	for(auto sit = scaf2dps.begin(); sit != scaf2dps.end(); sit++) {
		if(sit->second.size() == 1)
			continue;
		scaf_name2id_map.insert(pair<string, size_t>(sit->first, scaf_name2id_map.size()+1));
		for(auto dpit=sit->second.begin(); dpit != sit->second.end(); dpit++) {
			dps.push_back(DataPoint(dps.size(), dpit->get_name(), scaf_name2id_map.size(), dpit->get_start(), dpit->get_end(), dpit->get_Ns()));
			dp_name2id_map.insert(pair<size_t, size_t>(dps.back().get_name(), dps.back().get_iid()));
		}
	}

	scafs.resize(scaf_name2id_map.size()+1);
	Bio::SeqIORead_fasta<Bio::DNASequence>	reader(fasta_file);
	Bio::DNASequence* seq_obj;

	while((seq_obj = reader.next_seq()) != NULL) {
		auto it=scaf_name2id_map.find(seq_obj->display_id());
		auto mit = scaf_name2cvg.find(seq_obj->display_id());
		double cvg = (mit == scaf_name2cvg.end())? 0 : mit->second;
		if(it != scaf_name2id_map.end()) {
			scafs[it->second] = Seq(it->second, seq_obj, cvg);
		}
		else {
			delete(seq_obj);
		}
	}

	auto it=dps.begin();
	for(++it; it!=dps.end(); it++)
		scafs[it->get_scaf_id()] += *it;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2d38, %rsp           # imm = 0x2D38
movq %rcx, %r14
movq %rdx, -0xf8(%rbp)
movq %rsi, -0x40(%rbp)
movq %rdi, %rbx
leaq 0x8(%rdi), %rcx
xorl %eax, %eax
movl %eax, 0x8(%rdi)
movq %rax, 0x10(%rdi)
movq %rcx, 0x18(%rdi)
movq %rcx, -0x100(%rbp)
movq %rcx, 0x20(%rdi)
movq %rax, 0x28(%rdi)
leaq 0x30(%rdi), %rcx
movq %rcx, -0x88(%rbp)
leaq 0x38(%rdi), %rcx
movl %eax, 0x38(%rdi)
movq %rax, 0x40(%rdi)
movq %rcx, 0x48(%rdi)
movq %rcx, 0x50(%rdi)
leaq 0x60(%rdi), %rcx
movq %rcx, -0x80(%rbp)
leaq 0x78(%rdi), %rcx
movq %rcx, -0x58(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%rdi)
movups %xmm0, 0x68(%rdi)
movups %xmm0, 0x78(%rdi)
movq %rax, 0x88(%rdi)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %edx           # imm = 0x2000
xorl %esi, %esi
callq 0x51f0
movq %r14, -0x50(%rbp)
movq (%r14), %rdi
leaq 0xe267(%rip), %rsi      # 0x1a131
callq 0x5450
testq %rax, %rax
movq %rbx, -0x30(%rbp)
je 0xc841
leaq -0x128(%rbp), %rcx
movl $0x0, (%rcx)
xorl %edx, %edx
movq %rdx, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rdx, 0x20(%rcx)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rax, %r15
movq %rax, %rdx
callq 0x55e0
testq %rax, %rax
je 0xbfec
leaq -0x2d60(%rbp), %r12
leaq -0x360(%rbp), %r13
leaq -0xb60(%rbp), %r14
subq $0x8, %rsp
movq %r12, %rdi
leaq 0xe888(%rip), %rsi      # 0x1a7c6
movq %r13, %rdx
leaq -0x48(%rbp), %rcx
leaq -0xd60(%rbp), %r8
leaq -0xc0(%rbp), %r9
xorl %eax, %eax
leaq -0xf0(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x10, %rsp
cmpl $0x5, %eax
jne 0xc6f5
leaq -0xb50(%rbp), %rax
movq %rax, -0xb60(%rbp)
movq %r13, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
movq %r14, %rdi
movq %r13, %rsi
callq 0xb314
movsd -0xd60(%rbp), %xmm0
movsd %xmm0, -0xb40(%rbp)
leaq -0x130(%rbp), %rdi
movq %r14, %rsi
callq 0xe1f8
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xbfd3
callq 0x5340
movq %r12, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %r15, %rdx
callq 0x55e0
testq %rax, %rax
jne 0xbf30
movq %r15, %rdi
callq 0x5390
movq -0x40(%rbp), %rax
movq (%rax), %rdi
leaq 0xe12f(%rip), %rsi      # 0x1a131
callq 0x5450
testq %rax, %rax
je 0xc8af
movq %rax, %r13
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %rax, %rdx
callq 0x55e0
testq %rax, %rax
je 0xc90d
leaq 0xe7fc(%rip), %rsi      # 0x1a833
leaq -0x2d60(%rbp), %rdi
leaq -0x31(%rbp), %rdx
leaq -0x134(%rbp), %rcx
xorl %eax, %eax
callq 0x5370
cmpl $0x2, %eax
jne 0xc96b
cmpb $0x25, -0x31(%rbp)
jne 0xc96b
leaq -0xb8(%rbp), %rcx
movl $0x0, (%rcx)
xorl %eax, %eax
movq %rax, 0x8(%rcx)
movq %rcx, 0x10(%rcx)
movq %rcx, 0x18(%rcx)
movq %rax, 0x20(%rcx)
leaq -0x2d60(%rbp), %rdi
movl $0x2000, %esi           # imm = 0x2000
movq %r13, %rdx
callq 0x55e0
testq %rax, %rax
je 0xc3be
xorl %r15d, %r15d
leaq -0x360(%rbp), %r12
leaq -0x2d60(%rbp), %r14
movq %r13, -0x50(%rbp)
movq %r15, -0x48(%rbp)
movq %r15, -0x78(%rbp)
movq %r15, -0x70(%rbp)
movq %r15, -0x68(%rbp)
movq %r15, -0x60(%rbp)
movq %r15, -0x90(%rbp)
movl $0x200, %edx            # imm = 0x200
movq %r12, %rdi
xorl %esi, %esi
callq 0x51f0
movl $0x200, %edx            # imm = 0x200
leaq -0xd60(%rbp), %rdi
xorl %esi, %esi
callq 0x51f0
movq %r14, %rdi
movl $0x3a, %esi
callq 0x5150
movq %rax, %rbx
movq %r14, %rdi
movl $0x28, %esi
callq 0x5150
movq %rax, %r15
movq %r14, %rdi
movl $0x29, %esi
callq 0x5150
movq %rax, %r12
movq %r14, %rdi
movl $0x2f, %esi
callq 0x5150
movq %rax, %r13
movq %r14, %rdi
movl $0x2c, %esi
callq 0x5150
testq %rbx, %rbx
je 0xc75a
testq %r15, %r15
je 0xc75a
testq %r12, %r12
je 0xc75a
testq %r13, %r13
je 0xc75a
testq %rax, %rax
je 0xc75a
movb $0x20, %cl
movb %cl, (%rax)
movb %cl, (%r13)
movb %cl, (%r12)
movb %cl, (%r15)
movb %cl, (%rbx)
leaq -0x2d60(%rbp), %rbx
movq %rbx, %rdi
leaq 0xe6fe(%rip), %rsi      # 0x1a88b
leaq -0x48(%rbp), %rdx
leaq -0xd60(%rbp), %r14
movq %r14, %rcx
leaq -0x360(%rbp), %r12
movq %r12, %r8
leaq -0x78(%rbp), %r9
xorl %eax, %eax
leaq -0x60(%rbp), %r10
pushq %r10
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x90(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x20, %rsp
cmpl $0x8, %eax
je 0xc216
subq $0x8, %rsp
movq %rbx, %rdi
leaq 0xe6df(%rip), %rsi      # 0x1a8c1
leaq -0x48(%rbp), %rdx
movq %r14, %rcx
movq %r12, %r8
leaq -0x78(%rbp), %r9
xorl %eax, %eax
leaq -0x60(%rbp), %r10
pushq %r10
leaq -0x68(%rbp), %r10
pushq %r10
leaq -0x70(%rbp), %r10
pushq %r10
callq 0x5370
addq $0x20, %rsp
cmpl $0x7, %eax
jne 0xc7bf
leaq -0xb50(%rbp), %r15
movq %r15, -0xb60(%rbp)
movq %r12, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
leaq -0xb60(%rbp), %r13
movq %r13, %rdi
movq %r12, %rsi
movq -0x30(%rbp), %rbx
callq 0xb314
leaq -0xc0(%rbp), %rdi
movq %r13, %rsi
callq 0xe3f6
movq %rax, %r14
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc270
callq 0x5340
leaq -0xb8(%rbp), %rax
cmpq %rax, %r14
jne 0xc34a
xorps %xmm0, %xmm0
movaps %xmm0, -0xe0(%rbp)
movaps %xmm0, -0xd0(%rbp)
movaps %xmm0, -0xf0(%rbp)
leaq -0xe8(%rbp), %rax
movq %rax, -0xd8(%rbp)
movq %rax, -0xd0(%rbp)
movq $0x0, -0xc8(%rbp)
movq %r13, %rdi
movq %r12, %rsi
leaq -0xf0(%rbp), %rdx
callq 0xd106
leaq -0xc0(%rbp), %rdi
movq %r13, %rsi
callq 0xe494
leaq -0xb40(%rbp), %rdi
callq 0xd93a
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc2f6
callq 0x5340
leaq -0xf0(%rbp), %rdi
callq 0xd93a
movq %r15, -0xb60(%rbp)
movq %r12, %rdi
callq 0x5180
leaq (%rax,%rbp), %rdx
addq $-0x360, %rdx           # imm = 0xFCA0
movq %r13, %rdi
movq %r12, %rsi
callq 0xb314
leaq -0xc0(%rbp), %rdi
movq %r13, %rsi
callq 0xe3f6
movq %rax, %r14
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xc34a
callq 0x5340
addq $0x40, %r14
movq -0x48(%rbp), %rax
movq -0x78(%rbp), %rcx
movq -0x70(%rbp), %rdx
movq -0x60(%rbp), %rsi
subq -0x68(%rbp), %rsi
xorl %r15d, %r15d
movq %r15, -0xb60(%rbp)
movq %rax, -0xb58(%rbp)
movq %r15, -0xb50(%rbp)
movq %rcx, -0xb48(%rbp)
movq %rdx, -0xb40(%rbp)
movq %rsi, -0xb38(%rbp)
movq %r14, %rdi
movq %r13, %rsi
callq 0xe680
leaq -0x2d60(%rbp), %r14
movq %r14, %rdi
movl $0x2000, %esi           # imm = 0x2000
movq -0x50(%rbp), %r13
movq %r13, %rdx
callq 0x55e0
testq %rax, %rax
jne 0xc0b4
movq %r13, %rdi
callq 0x5390
movl $0x1, %esi
movq -0x80(%rbp), %rdi
callq 0xd180
movq -0xa8(%rbp), %r15
leaq -0xb8(%rbp), %rax
cmpq %rax, %r15
je 0xc542
leaq -0xb60(%rbp), %r12
cmpq $0x1, 0x68(%r15)
je 0xc527
movq 0x28(%rbx), %r14
leaq -0xb50(%rbp), %rax
movq %rax, -0xb60(%rbp)
movq 0x20(%r15), %rsi
movq 0x28(%r15), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0xb27a
incq %r14
movq %r14, -0xb40(%rbp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0xe998
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xc44f
callq 0x5340
movq 0x58(%r15), %r14
leaq 0x48(%r15), %r13
cmpq %r13, %r14
je 0xc527
movq 0x28(%rbx), %rax
movq 0x68(%rbx), %rsi
movq %rsi, %rcx
subq 0x60(%rbx), %rcx
sarq $0x4, %rcx
movabsq $-0x5555555555555555, %rdx # imm = 0xAAAAAAAAAAAAAAAB
imulq %rdx, %rcx
movq 0x28(%r14), %rdx
movups 0x38(%r14), %xmm0
movq 0x48(%r14), %rdi
movq %rcx, -0xb60(%rbp)
movq %rdx, -0xb58(%rbp)
movq %rax, -0xb50(%rbp)
movups %xmm0, -0xb48(%rbp)
movq %rdi, -0xb38(%rbp)
cmpq 0x70(%rbx), %rsi
je 0xc4de
movups -0xb60(%rbp), %xmm0
movups -0xb50(%rbp), %xmm1
movups -0xb40(%rbp), %xmm2
movups %xmm2, 0x20(%rsi)
movups %xmm1, 0x10(%rsi)
movups %xmm0, (%rsi)
addq $0x30, 0x68(%rbx)
jmp 0xc4ea
movq -0x80(%rbp), %rdi
movq %r12, %rdx
callq 0xeb94
movq 0x68(%rbx), %rax
movq -0x30(%rax), %rcx
movq -0x28(%rax), %rax
movq %rax, -0xb60(%rbp)
movq %rcx, -0xb58(%rbp)
movq -0x88(%rbp), %rdi
movq %r12, %rsi
callq 0xecce
movq %r14, %rdi
callq 0x5430
movq %rax, %r14
cmpq %r13, %rax
jne 0xc460
movq %r15, %rdi
callq 0x5260
movq %rax, %r15
leaq -0xb8(%rbp), %rax
cmpq %rax, %r15
jne 0xc3f2
movq 0x28(%rbx), %rsi
incq %rsi
movq -0x58(%rbp), %rdi
callq 0xd1cc
leaq -0x148(%rbp), %r14
movq %r14, -0x10(%r14)
movq -0xf8(%rbp), %rax
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
leaq -0x158(%rbp), %rdi
callq 0xb27a
leaq -0xb60(%rbp), %rdi
leaq -0x158(%rbp), %rsi
callq 0xd246
movq -0x158(%rbp), %rdi
cmpq %r14, %rdi
je 0xc59e
callq 0x5340
xorl %r12d, %r12d
leaq -0xb60(%rbp), %rdi
callq 0xd2d8
movq %rax, %r14
testq %rax, %rax
je 0xc67a
leaq 0x8(%r14), %r13
movq %rbx, %rdi
movq %r13, %rsi
callq 0xf5b0
movq %rax, %r15
leaq -0x130(%rbp), %rdi
movq %r13, %rsi
callq 0xf64e
leaq -0x128(%rbp), %rcx
cmpq %rcx, %rax
je 0xc5ed
movsd 0x40(%rax), %xmm0
jmp 0xc5f0
xorps %xmm0, %xmm0
cmpq -0x100(%rbp), %r15
je 0xc66c
movq 0x40(%r15), %rax
movq %rax, -0x360(%rbp)
movl $0x0, -0x350(%rbp)
movq %r12, -0x348(%rbp)
leaq -0x350(%rbp), %rcx
movq %rcx, -0x340(%rbp)
movq %rcx, -0x338(%rbp)
movq %r12, -0x330(%rbp)
movq %r14, -0x328(%rbp)
movsd %xmm0, -0x320(%rbp)
leaq (%rax,%rax,8), %rdi
shlq $0x3, %rdi
movq -0x58(%rbp), %rax
addq (%rax), %rdi
leaq -0x360(%rbp), %rsi
callq 0xd7fc
leaq -0x358(%rbp), %rdi
callq 0x9e44
jmp 0xc5a1
movq (%r14), %rax
movq %r14, %rdi
callq *0x8(%rax)
jmp 0xc5a1
movq 0x60(%rbx), %r15
addq $0x30, %r15
cmpq 0x68(%rbx), %r15
je 0xc6bf
leaq -0x360(%rbp), %r14
movq 0x10(%r15), %rax
movq -0x58(%rbp), %rcx
movq (%rcx), %rcx
leaq (%rax,%rax,8), %rax
leaq (%rcx,%rax,8), %rdi
addq $0x8, %rdi
movq %r15, -0x360(%rbp)
movq %r14, %rsi
callq 0xdc92
addq $0x30, %r15
cmpq 0x68(%rbx), %r15
jne 0xc68f
leaq -0xb60(%rbp), %rdi
callq 0xdd4c
leaq -0xc0(%rbp), %rdi
callq 0xe0ac
leaq -0x130(%rbp), %rdi
callq 0xe13a
addq $0x2d38, %rsp           # imm = 0x2D38
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq -0x50(%rbp), %rax
movq (%rax), %r8
leaq 0xe0d6(%rip), %rsi      # 0x1a7d9
leaq 0xe096(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x1c, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x16882(%rip), %rsi     # 0x22fc8
movq 0x1686b(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xe0f9(%rip), %rsi      # 0x1a861
leaq 0xe031(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x46, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x1681d(%rip), %rsi     # 0x22fc8
movq 0x16806(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xe11a(%rip), %rsi      # 0x1a8e7
leaq 0xdfcc(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x4e, %ecx
xorl %eax, %eax
pushq -0x60(%rbp)
pushq -0x68(%rbp)
pushq -0x90(%rbp)
pushq -0x70(%rbp)
pushq -0x78(%rbp)
pushq %r12
pushq %r14
pushq -0x48(%rbp)
callq 0x5090
addq $0x40, %rsp
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x1679b(%rip), %rsi     # 0x22fc8
movq 0x16784(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movl $0x10, %edi
callq 0x51b0
movq %rax, %r15
leaq -0xb0(%rbp), %r14
movq %r14, -0x10(%r14)
leaq 0xdf40(%rip), %rsi      # 0x1a7a0
leaq 0xdf4b(%rip), %rdx      # 0x1a7b2
leaq -0xc0(%rbp), %rdi
callq 0xb314
leaq 0xe6c3(%rip), %rsi      # 0x1af3d
leaq -0xc0(%rbp), %rdi
callq 0x5740
leaq -0x120(%rbp), %rbx
movq %rbx, -0x10(%rbx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xc9d0
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
jmp 0xc9e1
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xdf41(%rip), %rsi      # 0x1a7fe
leaq 0xdedc(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
movq %r15, %rdi
movl $0x25, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x166cf(%rip), %rsi     # 0x22fc8
movq 0x166b8(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xdefe(%rip), %rsi      # 0x1a819
leaq 0xde7e(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
movq %r15, %rdi
movl $0x2b, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x16671(%rip), %rsi     # 0x22fc8
movq 0x1665a(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movq -0x40(%rbp), %rax
movq (%rax), %r8
leaq 0xdec0(%rip), %rsi      # 0x1a839
leaq 0xde20(%rip), %rdx      # 0x1a7a0
leaq -0xb60(%rbp), %r15
leaq -0x2d60(%rbp), %r9
movq %r15, %rdi
movl $0x34, %ecx
xorl %eax, %eax
callq 0x5090
movl $0x10, %edi
callq 0x51b0
movq %rax, %r14
movq %rax, %rdi
movq %r15, %rsi
callq 0x5730
movq 0x1660c(%rip), %rsi     # 0x22fc8
movq 0x165f5(%rip), %rdx     # 0x22fb8
movq %r14, %rdi
callq 0x5660
jmp 0xcacc
movq %rdx, -0x130(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x120(%rbp)
movq 0x8(%rax), %rdx
movq %rdx, -0x128(%rbp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xf0(%rbp), %rdi
movl $0x11, %esi
callq 0xd05c
leaq -0xd60(%rbp), %rdi
leaq -0x130(%rbp), %rsi
leaq -0xf0(%rbp), %rdx
callq 0xcfaa
leaq 0xdd86(%rip), %rsi      # 0x1a7b3
leaq -0xd60(%rbp), %rdi
callq 0x5740
leaq -0x350(%rbp), %rcx
movq %rcx, -0x10(%rcx)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
jne 0xca62
movups (%rcx), %xmm0
leaq -0x350(%rbp), %rdx
movups %xmm0, (%rdx)
jmp 0xca73
movq %rdx, -0x360(%rbp)
movq (%rcx), %rdx
movq %rdx, -0x350(%rbp)
movq 0x8(%rax), %rdx
leaq -0x360(%rbp), %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq -0xb60(%rbp), %rdi
movq -0x50(%rbp), %rdx
callq 0xcf46
movb $0x1, %r12b
leaq -0xb60(%rbp), %rsi
movq %r15, %rdi
callq 0x5690
xorl %r12d, %r12d
movq 0x1650b(%rip), %rsi     # 0x22fc8
movq 0x164f4(%rip), %rdx     # 0x22fb8
movq %r15, %rdi
callq 0x5660
movq %rax, %r13
leaq -0xb50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcaec
callq 0x5340
jmp 0xcaec
movq %rax, %r13
movb $0x1, %r12b
movq -0x360(%rbp), %rdi
leaq -0x350(%rbp), %rax
cmpq %rax, %rdi
je 0xcb0c
callq 0x5340
jmp 0xcb0c
movq %rax, %r13
movb $0x1, %r12b
leaq -0xd50(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcb29
callq 0x5340
jmp 0xcb29
movq %rax, %r13
movb $0x1, %r12b
leaq -0xe0(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0xcb46
callq 0x5340
jmp 0xcb46
movq %rax, %r13
movb $0x1, %r12b
movq -0x130(%rbp), %rdi
cmpq %rbx, %rdi
je 0xcb5f
callq 0x5340
jmp 0xcb5f
movq %rax, %r13
movb $0x1, %r12b
movq -0xc0(%rbp), %rdi
cmpq %r14, %rdi
je 0xcb96
callq 0x5340
jmp 0xcb96
jmp 0xcc7a
jmp 0xcc39
jmp 0xcc7a
jmp 0xcc39
jmp 0xcc7a
jmp 0xcc39
movq %rax, %r13
movb $0x1, %r12b
testb %r12b, %r12b
je 0xcba3
movq %r15, %rdi
callq 0x5280
movq -0x30(%rbp), %rbx
jmp 0xccd2
movq %rax, %r13
movq -0x158(%rbp), %rdi
cmpq %r14, %rdi
je 0xcc72
jmp 0xcc6d
jmp 0xccb7
jmp 0xccb7
jmp 0xcc59
jmp 0xcc2a
movq %rax, %r13
jmp 0xcc00
movq %rax, %r13
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xcc72
jmp 0xcc6d
jmp 0xcc59
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0xd154
leaq -0xf0(%rbp), %rdi
callq 0xd93a
jmp 0xcc72
movq %rax, %r13
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xcc72
jmp 0xcc6d
jmp 0xcc59
jmp 0xcc59
movq %rax, %r13
movq %r14, %rdi
callq 0x5280
jmp 0xcc72
jmp 0xcc7a
movq %rax, %r13
movq %r14, %rdi
callq 0x5280
jmp 0xcc9a
movq %rax, %r13
leaq -0x358(%rbp), %rdi
callq 0x9e44
jmp 0xcca7
jmp 0xcca4
movq %rax, %r13
jmp 0xcc72
movq %rax, %r13
movq -0xb60(%rbp), %rdi
cmpq %r15, %rdi
je 0xcc72
callq 0x5340
movq -0x30(%rbp), %rbx
jmp 0xccba
jmp 0xccb7
movq %rax, %r13
jmp 0xcc9a
movq %rax, %r13
movq -0xb60(%rbp), %rdi
leaq -0xb50(%rbp), %rax
cmpq %rax, %rdi
je 0xcc9a
callq 0x5340
movq -0x30(%rbp), %rbx
jmp 0xccc6
jmp 0xcca4
jmp 0xcca4
movq %rax, %r13
leaq -0xb60(%rbp), %rdi
callq 0xdd4c
jmp 0xccba
jmp 0xccb7
movq %rax, %r13
leaq -0xc0(%rbp), %rdi
callq 0xe0ac
leaq -0x130(%rbp), %rdi
callq 0xe13a
movq -0x58(%rbp), %rdi
callq 0x9dfe
movq -0x80(%rbp), %rax
movq (%rax), %rdi
testq %rdi, %rdi
je 0xccec
callq 0x5340
movq -0x88(%rbp), %rdi
callq 0x9d4e
movq %rbx, %rdi
callq 0x9e9c
movq %r13, %rdi
callq 0x56a0