// File: /workspace/github_cpp_makefile_star2_O1/rpavlik[P]edid-decode/parse-displayid-block.cpp
// Function: edid_state::parse_displayid_block(unsigned char const*)
void edid_state::parse_displayid_block(const unsigned char *x)
{
	unsigned version = x[1];
	unsigned length = x[2];
	unsigned prod_type = x[3]; // future check: based on type, check for required data blocks
	unsigned ext_count = x[4];
	unsigned i;

	printf("  Version: %u.%u\n  Extension Count: %u\n",
	       version >> 4, version & 0xf, ext_count);

	if (dispid.is_base_block) {
		dispid.version = version;
		printf("  %s: %s\n", product_type(prod_type, true).c_str(),
		       product_type(prod_type, false).c_str());
		if (!prod_type)
			fail("DisplayID Base Block has no product type.\n");
		if (ext_count != dispid.preparsed_displayid_blocks - 1)
			fail("Expected %u DisplayID Extension Block%s, but got %u.\n",
			     ext_count,
			     ext_count > 1 ? "s" : "",
			     dispid.preparsed_displayid_blocks - 1);
	} else {
		if (prod_type)
			fail("Product Type should be 0 in extension block.\n");
		if (ext_count)
			fail("Extension Count should be 0 in extension block.\n");
		if (version != dispid.version)
			fail("Got version %u.%u, expected %u.%u.\n",
			     version >> 4, version & 0xf,
			     dispid.version >> 4, dispid.version & 0xf);
	}

	if (length > 121) {
		fail("DisplayID length %d is greater than 121.\n", length);
		length = 121;
	}

	unsigned offset = 5;
	bool first_data_block = true;
	while (length > 0) {
		unsigned tag = x[offset];
		unsigned oui = 0;

		switch (tag) {
		// DisplayID 1.3:
		case 0x00: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x01: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x02: data_block = "Color Characteristics Data Block"; break;
		case 0x03: data_block = "Video Timing Modes Type 1 - Detailed Timings Data Block"; break;
		case 0x04: data_block = "Video Timing Modes Type 2 - Detailed Timings Data Block"; break;
		case 0x05: data_block = "Video Timing Modes Type 3 - Short Timings Data Block"; break;
		case 0x06: data_block = "Video Timing Modes Type 4 - DMT Timings Data Block"; break;
		case 0x07: data_block = "Supported Timing Modes Type 1 - VESA DMT Timings Data Block"; break;
		case 0x08: data_block = "Supported Timing Modes Type 2 - CTA-861 Timings Data Block"; break;
		case 0x09: data_block = "Video Timing Range Data Block"; break;
		case 0x0a: data_block = "Product Serial Number Data Block"; break;
		case 0x0b: data_block = "GP ASCII String Data Block"; break;
		case 0x0c: data_block = "Display Device Data Data Block"; break;
		case 0x0d: data_block = "Interface Power Sequencing Data Block"; break;
		case 0x0e: data_block = "Transfer Characteristics Data Block"; break;
		case 0x0f: data_block = "Display Interface Data Block"; break;
		case 0x10: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x11: data_block = "Video Timing Modes Type 5 - Short Timings Data Block"; break;
		case 0x12: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x13: data_block = "Video Timing Modes Type 6 - Detailed Timings Data Block"; break;
		// 0x14 .. 0x7e RESERVED for Additional VESA-defined Data Blocks
		// DisplayID 2.0
		case 0x20: data_block = "Product Identification Data Block (" + utohex(tag) + ")"; break;
		case 0x21: data_block = "Display Parameters Data Block (" + utohex(tag) + ")"; break;
		case 0x22: data_block = "Video Timing Modes Type 7 - Detailed Timings Data Block"; break;
		case 0x23: data_block = "Video Timing Modes Type 8 - Enumerated Timing Codes Data Block"; break;
		case 0x24: data_block = "Video Timing Modes Type 9 - Formula-based Timings Data Block"; break;
		case 0x25: data_block = "Dynamic Video Timing Range Limits Data Block"; break;
		case 0x26: data_block = "Display Interface Features Data Block"; break;
		case 0x27: data_block = "Stereo Display Interface Data Block (" + utohex(tag) + ")"; break;
		case 0x28: data_block = "Tiled Display Topology Data Block (" + utohex(tag) + ")"; break;
		case 0x29: data_block = "ContainerID Data Block"; break;
		case 0x32: data_block = "Video Timing Modes Type 10 - Formula-based Timings Data Block"; break;
		// 0x2a .. 0x7d RESERVED for Additional VESA-defined Data Blocks
		case 0x7e: // DisplayID 2.0
		case 0x7f: // DisplayID 1.3
			if ((tag == 0x7e && version >= 0x20) ||
			    (tag == 0x7f && version < 0x20)) {
				oui = (x[offset + 3] << 16) + (x[offset + 4] << 8) + x[offset + 5];
				const char *name = oui_name(oui);
				bool reversed = false;

				if (!name) {
					name = oui_name(oui, true);
					if (name)
						reversed = true;
				}
				if (name)
					data_block = std::string("Vendor-Specific Data Block (") + name + ")";
				else
					data_block = "Vendor-Specific Data Block, OUI " + ouitohex(oui);
				if (reversed)
					fail((std::string("OUI ") + ouitohex(oui) + " is in the wrong byte order.\n").c_str());
			} else {
				data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")";
			}
			break;
		// 0x80 RESERVED
		case 0x81: data_block = "CTA-861 DisplayID Data Block (" + utohex(tag) + ")"; break;
		// 0x82 .. 0xff RESERVED
		default:   data_block = "Unknown DisplayID Data Block (" + utohex(tag) + ")"; break;
		}

		if (version >= 0x20 && (tag < 0x20 || tag == 0x7f))
			fail("Use of DisplayID v1.x tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);
		if (version < 0x20 && tag >= 0x20 && tag <= 0x7e)
			fail("Use of DisplayID v2.0 tag for DisplayID v%u.%u.\n",
			     version >> 4, version & 0xf);

		if (length < 3) {
			// report a problem when the remaining bytes are not 0.
			if (tag || x[offset + 1]) {
				fail("Not enough bytes remain (%d) for a DisplayID data block or the DisplayID filler is non-0.\n", length);
			}
			break;
		}

		unsigned block_rev = x[offset + 1] & 0x07;
		unsigned len = x[offset + 2];

		if (length < len + 3) {
			fail("The length of this DisplayID data block (%d) exceeds the number of bytes remaining (%d).\n", len + 3, length);
			break;
		}

		if (!tag && !len) {
			// A Product Identification Data Block with no payload bytes is not valid - assume this is the end.
			if (!memchk(x + offset, length)) {
				fail("Non-0 filler bytes in the DisplayID block.\n");
			}
			break;
		}

		printf("  %s:\n", data_block.c_str());

		switch (tag) {
		case 0x00: parse_displayid_product_id(x + offset); break;
		case 0x01: parse_displayid_parameters(x + offset); break;
		case 0x02: parse_displayid_color_characteristics(x + offset); break;
		case 0x03:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 20; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + (i * 20)], false, block_rev);
			   break;
		case 0x04:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 11; i++)
				   parse_displayid_type_2_timing(&x[offset + 3 + (i * 11)]);
			   break;
		case 0x05:
			   check_displayid_datablock_revision(x[offset + 1], 0, block_rev & 1);
			   for (i = 0; i < len / 3; i++)
				   parse_displayid_type_3_timing(&x[offset + 3 + (i * 3)]);
			   break;
		case 0x06:
			   check_displayid_datablock_revision(x[offset + 1], 0xc0, 1);
			   for (i = 0; i < len; i++)
				   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6, x[offset + 3 + i]);
			   break;
		case 0x07:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 10) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "DMT 0x%02x", i + 1);
					   print_timings("    ", find_dmt_id(i + 1), type);
				   }
			   break;
		case 0x08:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < min(len, 8) * 8; i++)
				   if (x[offset + 3 + i / 8] & (1 << (i % 8))) {
					   char type[16];
					   sprintf(type, "VIC %3u", i + 1);
					   print_timings("    ", find_vic_id(i + 1), type);
				   }
			   break;
		case 0x09: parse_displayid_video_timing_range_limits(x + offset); break;
		case 0x0a:
		case 0x0b: parse_displayid_string(x + offset); break;
		case 0x0c: parse_displayid_display_device(x + offset); break;
		case 0x0d: parse_displayid_intf_power_sequencing(x + offset); break;
		case 0x0e: parse_displayid_transfer_characteristics(x + offset); break;
		case 0x0f: parse_displayid_display_intf(x + offset); break;
		case 0x10: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x11:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 7; i++)
				   parse_displayid_type_5_timing(&x[offset + 3 + (i * 7)]);
			   break;
		case 0x12: parse_displayid_tiled_display_topology(x + offset, false); break;
		case 0x13:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len; i += (x[offset + 3 + i + 2] & 0x40) ? 17 : 14)
				   parse_displayid_type_6_timing(&x[offset + 3 + i]);
			   break;
		case 0x20: parse_displayid_product_id(x + offset); break;
		case 0x21:
			   if (block_rev >= 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0x80, 0);
			   parse_displayid_parameters_v2(x + offset, block_rev);
			   break;
		case 0x22: {
			   unsigned sz = 20;

			   if (block_rev >= 2)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 2);
			   else if (block_rev == 1)
				   check_displayid_datablock_revision(x[offset + 1], 0x08, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1]);
			   sz += (x[offset + 1] & 0x70) >> 4;
			   if (block_rev >= 1 && (x[offset + 1] & 0x08))
				   printf("    These timings support DSC pass-through\n");
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_1_7_timing(&x[offset + 3 + i * sz], true, block_rev);
			   break;
		}
		case 0x23:
			   if (block_rev)
				   check_displayid_datablock_revision(x[offset + 1], 0xe8, 1);
			   else
				   check_displayid_datablock_revision(x[offset + 1], 0xc8);
			   if (x[offset + 1] & 0x08) {
				   for (i = 0; i < len / 2; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i * 2] |
									   (x[offset + 4 + i * 2] << 8));
			   } else {
				   for (i = 0; i < len; i++)
					   parse_displayid_type_4_8_timing((x[offset + 1] & 0xc0) >> 6,
									   x[offset + 3 + i]);
			   }
			   break;
		case 0x24:
			   check_displayid_datablock_revision(x[offset + 1]);
			   for (i = 0; i < len / 6; i++)
				   parse_displayid_type_9_timing(&x[offset + 3 + i * 6]);
			   break;
		case 0x25: parse_displayid_dynamic_video_timings_range_limits(x + offset); break;
		case 0x26: parse_displayid_interface_features(x + offset); break;
		case 0x27: parse_displayid_stereo_display_intf(x + offset); break;
		case 0x28: parse_displayid_tiled_display_topology(x + offset, true); break;
		case 0x29: parse_displayid_ContainerID(x + offset); break;
		case 0x32: {
			   unsigned sz = 6 + ((x[offset + 1] & 0x70) >> 4);

			   check_displayid_datablock_revision(x[offset + 1], 0x10);
			   for (i = 0; i < len / sz; i++)
				   parse_displayid_type_10_timing(&x[offset + 3 + i * sz]);
			   break;
		}
		case 0x81: parse_displayid_cta_data_block(x + offset); break;
		case 0x7e:
			if (oui == 0x3a0292) {
				parse_displayid_vesa(x + offset);
				break;
			}
			// fall-through
		default: hex_block("    ", x + offset + 3, len); break;
		}

		if ((tag == 0x00 || tag == 0x20) &&
		    (!dispid.is_base_block || !first_data_block))
			fail("%s is required to be the first DisplayID Data Block.\n",
			     data_block.c_str());
		length -= len + 3;
		offset += len + 3;
		first_data_block = false;
	}

	/*
	 * DisplayID length field is number of following bytes
	 * but checksum is calculated over the entire structure
	 * (excluding DisplayID-in-EDID magic byte)
	 */
	data_block.clear();
	do_checksum("  ", x + 1, x[2] + 5);

	if (!memchk(x + 1 + x[2] + 5, 0x7f - (1 + x[2] + 5))) {
		data_block = "Padding";
		fail("DisplayID padding contains non-zero bytes.\n");
	}
	dispid.is_base_block = false;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xf8, %rsp
movq %rsi, %r13
movq %rdi, %r12
movzbl 0x1(%rsi), %r15d
movzbl 0x2(%rsi), %r14d
movb 0x3(%rsi), %bpl
movzbl 0x4(%rsi), %ebx
movl %r15d, %esi
shrl $0x4, %esi
movl %r15d, %edx
andl $0xf, %edx
leaq 0x14a25(%rip), %rdi     # 0x30249
movl %esi, 0xc4(%rsp)
movl %edx, 0xc0(%rsp)
movl %ebx, %ecx
xorl %eax, %eax
callq 0x3030
cmpb $0x1, 0x91c(%r12)
movq %r12, 0x10(%rsp)
movq %r13, 0xa8(%rsp)
movl %r15d, 0xbc(%rsp)
jne 0x1b94e
movb %r15b, 0x910(%r12)
movq %r12, %r13
movzbl %bpl, %r12d
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movq %r13, %rsi
movl %r12d, %edx
movl $0x1, %ecx
callq 0x1b0d0
movq (%r15), %r15
leaq 0x30(%rsp), %rdi
movq %r13, %rsi
movl %r12d, %edx
xorl %ecx, %ecx
callq 0x1b0d0
leaq 0x40(%rsp), %r12
movq -0x10(%r12), %rdx
leaq 0x149c5(%rip), %rdi     # 0x30271
movq %r15, %rsi
xorl %eax, %eax
callq 0x3030
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x1b8cd
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
movq 0x10(%rsp), %r12
movq 0xa8(%rsp), %r13
je 0x1b8f5
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
testb %bpl, %bpl
jne 0x1b90a
leaq 0x1497a(%rip), %rsi     # 0x3027b
xorl %edi, %edi
xorl %eax, %eax
callq 0x37ec
movl 0x918(%r12), %r8d
decl %r8d
cmpl %ebx, %r8d
movl 0xbc(%rsp), %ebp
je 0x1b9b5
cmpb $0x2, %bl
leaq 0x5434(%rip), %rax      # 0x20d63
leaq 0x5343(%rip), %rcx      # 0x20c79
cmovaeq %rax, %rcx
leaq 0x14965(%rip), %rsi     # 0x302a6
xorl %edi, %edi
movl %ebx, %edx
xorl %eax, %eax
callq 0x37ec
jmp 0x1b9b5
testb %bpl, %bpl
je 0x1b963
leaq 0x14982(%rip), %rsi     # 0x302dc
xorl %edi, %edi
xorl %eax, %eax
callq 0x37ec
testl %ebx, %ebx
movl 0xbc(%rsp), %ebp
je 0x1b97e
leaq 0x14995(%rip), %rsi     # 0x3030a
xorl %edi, %edi
xorl %eax, %eax
callq 0x37ec
movzbl 0x910(%r12), %r9d
cmpb %r9b, %bpl
je 0x1b9b5
movl %r9d, %r8d
shrl $0x4, %r8d
andl $0xf, %r9d
leaq 0x1499d(%rip), %rsi     # 0x3033b
xorl %edi, %edi
movl 0xc4(%rsp), %edx
movl 0xc0(%rsp), %ecx
xorl %eax, %eax
callq 0x37ec
cmpb $0x7a, %r14b
jb 0x1b9d4
leaq 0x1499d(%rip), %rsi     # 0x3035f
xorl %edi, %edi
movl %r14d, %edx
xorl %eax, %eax
callq 0x37ec
movl $0x79, %r14d
leaq 0x1(%r13), %rax
movq %rax, 0xf0(%rsp)
leaq 0x40(%rsp), %r15
leaq 0x30(%r12), %rax
movq %rax, 0x20(%rsp)
movb $0x1, %al
movl %eax, 0xc8(%rsp)
movl $0x5, %r12d
leaq 0x78(%rsp), %rdi
testl %r14d, %r14d
je 0x1d40f
movl %r12d, %ecx
movzbl (%r13,%rcx), %ebx
cmpq $0x32, %rbx
movq %rcx, 0x18(%rsp)
ja 0x1ba8b
leaq 0x12d81(%rip), %rcx     # 0x2e7a8
movslq (%rcx,%rbx,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x1493a(%rip), %rcx     # 0x30389
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c2d9
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c2e0
leal -0x7e(%rbx), %eax
cmpl $0x2, %eax
jae 0x1bb12
cmpb $0x20, %bpl
setb %al
setae %dl
cmpl $0x7e, %ebx
sete %sil
cmpl $0x7f, %ebx
sete %cl
testb %sil, %dl
jne 0x1c12a
andb %cl, %al
jne 0x1c12a
leaq 0x78(%rsp), %r15
movq %r15, %rdi
movl %ebx, %esi
callq 0x59df
movl $0x1e, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14d6d(%rip), %rcx     # 0x3084b
callq 0x3290
leaq 0x40(%rsp), %r15
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c511
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c518
cmpl $0x81, %ebx
jne 0x1bb75
movq %r12, 0xa0(%rsp)
movq %r15, %r12
movl %ebx, %esi
movq %rdi, %r15
callq 0x59df
movl $0x1e, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14d27(%rip), %rcx     # 0x3086a
callq 0x3290
movq %r12, %r15
movq %r12, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c546
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c54d
movq %r12, %rbp
movq %r15, %r12
movl %ebx, %esi
movq %rdi, %r15
callq 0x59df
movl $0x1e, %r8d
movq %r15, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x14cb2(%rip), %rcx     # 0x3084b
callq 0x3290
movq %r12, %r15
movq %r12, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c184
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c18b
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14bb6(%rip), %rcx     # 0x30791
jmp 0x1be8c
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x14a55(%rip), %rcx     # 0x30654
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c1c6
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c1cd
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x1499f(%rip), %rcx     # 0x305f9
movl $0x25, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c1fd
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c204
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x148b5(%rip), %rcx     # 0x3055b
jmp 0x1bdbf
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x1492f(%rip), %rcx     # 0x305f9
movl $0x25, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c234
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c23b
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x148c6(%rip), %rcx     # 0x305dc
movq $0x0, 0x28(%rsp)
movl $0x1c, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x146b4(%rip), %rcx     # 0x303ee
jmp 0x1c083
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x148f6(%rip), %rcx     # 0x30654
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c26b
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c272
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1467c(%rip), %rcx     # 0x30426
jmp 0x1c083
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1460e(%rip), %rcx     # 0x303cd
movq $0x0, 0x28(%rsp)
movl $0x20, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x149d4(%rip), %rcx     # 0x307b7
movq $0x0, 0x28(%rsp)
movl $0x16, %r8d
jmp 0x1c092
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x14597(%rip), %rcx     # 0x303ad
movl $0x1f, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c2a2
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c2a9
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x145fc(%rip), %rcx     # 0x3045e
jmp 0x1bf88
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14839(%rip), %rcx     # 0x306b0
jmp 0x1c083
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1472a(%rip), %rcx     # 0x305b6
movq $0x0, 0x28(%rsp)
movl $0x25, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1468d(%rip), %rcx     # 0x3053d
movq $0x0, 0x28(%rsp)
movl $0x1d, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1462e(%rip), %rcx     # 0x30502
movq $0x0, 0x28(%rsp)
movl $0x3a, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1459b(%rip), %rcx     # 0x30493
movq $0x0, 0x28(%rsp)
movl $0x32, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x145aa(%rip), %rcx     # 0x304c6
movq $0x0, 0x28(%rsp)
movl $0x3b, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14657(%rip), %rcx     # 0x30597
movq $0x0, 0x28(%rsp)
movl $0x1e, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14618(%rip), %rcx     # 0x3057c
movq $0x0, 0x28(%rsp)
movl $0x1a, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14697(%rip), %rcx     # 0x3061f
movq $0x0, 0x28(%rsp)
movl $0x34, %r8d
jmp 0x1c092
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x143f2(%rip), %rcx     # 0x303ad
movl $0x1f, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c30d
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c314
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14720(%rip), %rcx     # 0x30727
movq $0x0, 0x28(%rsp)
movl $0x3c, %r8d
jmp 0x1c092
movq %rbx, %rsi
leaq 0x78(%rsp), %rbx
movq %rbx, %rdi
movq %rsi, 0x98(%rsp)
callq 0x59df
leaq 0x14352(%rip), %rcx     # 0x30389
movl $0x23, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c341
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c348
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x145f5(%rip), %rcx     # 0x30678
movq $0x0, 0x28(%rsp)
movl $0x37, %r8d
movq 0x20(%rsp), %rdi
xorl %esi, %esi
callq 0x3390
jmp 0x1c987
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0xf291(%rip), %rcx      # 0x2b344
movq $0x0, 0x28(%rsp)
movl $0x23, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x14614(%rip), %rcx     # 0x306e8
movq $0x0, 0x28(%rsp)
movl $0x3e, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x146d9(%rip), %rcx     # 0x307ce
movq $0x0, 0x28(%rsp)
movl $0x3d, %r8d
jmp 0x1c092
movq 0x10(%rsp), %rax
movq 0x38(%rax), %rdx
leaq 0x1464e(%rip), %rcx     # 0x30764
movq $0x0, 0x28(%rsp)
movl $0x2c, %r8d
jmp 0x1c092
movq %rbx, 0x98(%rsp)
leal 0x3(%r12), %eax
movzbl (%r13,%rax), %eax
shll $0x10, %eax
leal 0x4(%r12), %ecx
movzbl (%r13,%rcx), %ecx
shll $0x8, %ecx
orl %eax, %ecx
movq %r12, 0xa0(%rsp)
leal 0x5(%r12), %eax
movzbl (%r13,%rax), %r12d
orl %ecx, %r12d
xorl %r15d, %r15d
movl %r12d, %edi
xorl %esi, %esi
callq 0x5a2e
testq %rax, %rax
je 0x1c43b
movq %rax, %rbx
jmp 0x1c452
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %rbp, %r12
movq %rbx, %r13
movq 0x8(%rax), %rdx
movq %rdx, 0x38(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x106d0(%rip), %rsi     # 0x2c885
callq 0x3420
movl 0xbc(%rsp), %ebp
jmp 0x1c581
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10692(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1065b(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10624(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x105ed(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x105b6(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1057f(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x1054b(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c373
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %r12, %r13
movq 0x8(%rax), %rdx
leaq 0x30(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x10517(%rip), %rsi     # 0x2c885
callq 0x3420
leaq 0x60(%rsp), %r12
movq %r12, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c39b
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c3a3
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x50(%rsp), %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
movq %rbx, %rsi
callq 0x32d0
movq (%rbx), %rdi
cmpq %r12, %rdi
je 0x1c3e1
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
movq %r13, %r12
movq 0x98(%rsp), %rbx
je 0x1c403
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x1c425
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x3260
movq $0x0, 0x28(%rsp)
movq 0xa8(%rsp), %r13
jmp 0x1c987
movl %r12d, %edi
movl $0x1, %esi
callq 0x5a2e
movq %rax, %rbx
testq %rax, %rax
setne %r15b
testq %rbx, %rbx
leaq 0x78(%rsp), %rdi
je 0x1c4b9
leaq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
leaq 0xee16(%rip), %rsi      # 0x2b286
movq %rdi, %rbp
leaq 0xee28(%rip), %rdx      # 0x2b2a2
callq 0x8f6e
movq %rbp, %rdi
movq %rbx, %rsi
callq 0x3420
leaq 0x40(%rsp), %rsi
movq %rsi, 0x30(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c63f
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c645
leaq 0x30(%rsp), %rbx
movq %rbx, %rdi
movl %r12d, %esi
callq 0x5b32
movl $0x20, %r8d
movq %rbx, %rdi
xorl %esi, %esi
xorl %edx, %edx
leaq 0x1432f(%rip), %rcx     # 0x3080c
callq 0x3290
leaq 0x60(%rsp), %rbx
movq %rbx, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c71a
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c720
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %rbx, %r13
movq 0x8(%rax), %rdx
movq %rdx, 0x38(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x10346(%rip), %rsi     # 0x2c885
callq 0x3420
jmp 0x1c581
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0xa0(%rsp), %r12
movq %rbx, %r13
movq 0x8(%rax), %rdx
movq %rdx, 0x38(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x10309(%rip), %rsi     # 0x2c885
callq 0x3420
leaq 0x60(%rsp), %rbx
movq %rbx, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c5a9
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c5af
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1c5ed
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
movq %r13, %rbx
je 0x1c607
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
movq 0xa8(%rsp), %r13
je 0x1c631
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x3260
movq $0x0, 0x28(%rsp)
jmp 0x1c987
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x38(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x30(%rsp), %rdi
leaq 0x1021c(%rip), %rsi     # 0x2c885
callq 0x3420
leaq 0x60(%rsp), %rbx
movq %rbx, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c696
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c69c
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1c6da
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
movq 0x98(%rsp), %rbx
je 0x1c6fe
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x1c782
movq 0x88(%rsp), %rsi
jmp 0x1c77a
movups (%rcx), %xmm0
movups %xmm0, (%rbx)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
leaq 0x50(%rsp), %rsi
callq 0x32d0
movq 0x50(%rsp), %rdi
cmpq %rbx, %rdi
je 0x1c75e
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
movq 0x98(%rsp), %rbx
je 0x1c782
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
testb %r15b, %r15b
movl 0xbc(%rsp), %ebp
je 0x1c970
leaq 0x88(%rsp), %rax
movq %rax, 0x78(%rsp)
leaq 0x78(%rsp), %rdi
leaq 0x1407d(%rip), %rsi     # 0x30828
leaq 0x1407a(%rip), %rdx     # 0x3082c
callq 0x8f6e
leaq 0xd0(%rsp), %rdi
movl %r12d, %esi
callq 0x5b32
leaq 0x40(%rsp), %r15
movq 0x78(%rsp), %rcx
movl $0xf, %esi
leaq 0x88(%rsp), %rax
cmpq %rax, %rcx
je 0x1c7eb
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %r8
movq 0xd8(%rsp), %rdx
leaq (%rdx,%r8), %rax
cmpq %rsi, %rax
jbe 0x1c828
movl $0xf, %esi
leaq 0xe0(%rsp), %rdi
cmpq %rdi, 0xd0(%rsp)
je 0x1c823
movq 0xe0(%rsp), %rsi
cmpq %rsi, %rax
jbe 0x1c83c
movq 0xd0(%rsp), %rsi
leaq 0x78(%rsp), %rdi
callq 0x30b0
jmp 0x1c84d
leaq 0xd0(%rsp), %rdi
xorl %esi, %esi
xorl %edx, %edx
callq 0x3290
movq %r15, 0x30(%rsp)
movq (%rax), %rdx
leaq 0x10(%rax), %rcx
cmpq %rcx, %rdx
je 0x1c86d
movq %rdx, 0x30(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x40(%rsp)
jmp 0x1c874
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq %rax, %rdx
addq $0x8, %rdx
movq 0x8(%rax), %rsi
movq %rsi, 0x38(%rsp)
movq %rcx, (%rax)
movq $0x0, (%rdx)
movb $0x0, (%rcx)
leaq 0x30(%rsp), %rdi
leaq 0x13f90(%rip), %rsi     # 0x3082d
callq 0x3420
leaq 0x60(%rsp), %rsi
movq %rsi, 0x50(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1c8ca
movq %rdx, 0x50(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x60(%rsp)
jmp 0x1c8d0
movups (%rcx), %xmm0
movups %xmm0, (%rsi)
movq 0x8(%rax), %rdx
movq %rdx, 0x58(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x50(%rsp), %rsi
xorl %edi, %edi
xorl %eax, %eax
callq 0x37ec
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x1c912
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x1c929
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x1c94e
movq 0xe0(%rsp), %rsi
incq %rsi
callq 0x3260
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x1c970
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x3260
cmpl $0x3a0292, %r12d        # imm = 0x3A0292
sete %al
movq %rax, 0x28(%rsp)
movq 0xa0(%rsp), %r12
movq 0x18(%rsp), %rdx
cmpb $0x20, %bpl
jb 0x1c9c6
cmpb $0x20, %bl
setae %al
cmpl $0x7f, %ebx
setne %cl
testb %cl, %al
jne 0x1c9c6
xorl %edi, %edi
movq %rdx, %r15
leaq 0x13edb(%rip), %rsi     # 0x30889
movl 0xc4(%rsp), %edx
movl 0xc0(%rsp), %ecx
xorl %eax, %eax
callq 0x37ec
movq %r15, %rdx
cmpb $0x1f, %bpl
ja 0x1c9f7
leal -0x20(%rbx), %eax
cmpb $0x5e, %al
ja 0x1c9f7
xorl %edi, %edi
movq %rdx, %r15
leaq 0x13edb(%rip), %rsi     # 0x308ba
movl 0xc4(%rsp), %edx
movl 0xc0(%rsp), %ecx
xorl %eax, %eax
callq 0x37ec
movq %r15, %rdx
cmpl $0x2, %r14d
ja 0x1ca34
testl %ebx, %ebx
leaq 0x40(%rsp), %r15
jne 0x1ca17
leal 0x1(%r12), %eax
cmpb $0x0, (%r13,%rax)
je 0x1cb36
xorl %ebx, %ebx
xorl %edi, %edi
leaq 0x13ec9(%rip), %rsi     # 0x308eb
movl %r14d, %edx
xorl %eax, %eax
callq 0x37ec
movl %r14d, %ebp
jmp 0x1d261
movq %rbx, 0x98(%rsp)
leal 0x2(%r12), %eax
movzbl (%r13,%rax), %ebx
leal 0x3(%rbx), %r15d
movl %r14d, %ebp
subl %r15d, %ebp
jae 0x1ca73
xorl %ebx, %ebx
xorl %edi, %edi
leaq 0x13ee8(%rip), %rsi     # 0x30946
movl %r15d, %edx
movl %r14d, %ecx
xorl %eax, %eax
callq 0x37ec
movl %r14d, %ebp
jmp 0x1d25c
addq %r13, %rdx
movl %ebx, %eax
movq %r13, %rcx
movq 0x98(%rsp), %r13
orl %r13d, %eax
je 0x1cb00
movq %rdx, 0x18(%rsp)
movq %r12, 0xa0(%rsp)
leal 0x1(%r12), %eax
movq %rcx, %r12
movq %rax, 0xb0(%rsp)
movzbl (%rcx,%rax), %r14d
movq 0x10(%rsp), %rax
movq 0x30(%rax), %rsi
leaq 0x8301(%rip), %rdi      # 0x24dbb
xorl %eax, %eax
callq 0x3030
cmpl $0x32, %r13d
movl %r15d, 0xcc(%rsp)
ja 0x1cb3d
movl %r14d, %r15d
andl $0x7, %r15d
movl %r13d, %eax
leaq 0x11d94(%rip), %rcx     # 0x2e874
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x162c6
jmp 0x1d204
movq %rcx, %r13
xorl %ebx, %ebx
movq %rdx, %rdi
movl %r14d, %esi
xorl %edx, %edx
callq 0x5b92
testb %al, %al
leaq 0x40(%rsp), %r15
jne 0x1ca2c
xorl %ebx, %ebx
xorl %edi, %edi
leaq 0x13e76(%rip), %rsi     # 0x309a0
xorl %eax, %eax
callq 0x37ec
jmp 0x1ca2c
xorl %ebx, %ebx
jmp 0x1ca2c
cmpl $0x7e, %r13d
je 0x1d1ca
cmpl $0x81, %r13d
jne 0x1d1dd
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x1af88
jmp 0x1d204
movq 0x18(%rsp), %rsi
callq 0x17c84
jmp 0x1d1ff
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x18772
jmp 0x1d204
movq 0x18(%rsp), %rsi
callq 0x1a812
jmp 0x1d1ff
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
movl $0x1, %edx
jmp 0x1d16e
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x1a572
jmp 0x1d204
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x17cce
jmp 0x1d204
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x180b6
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpl $0xa, %ebx
movl $0xa, %r14d
cmovbl %ebx, %r14d
testl %ebx, %ebx
movq 0x10(%rsp), %r13
je 0x1d204
movq %r12, %rdx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r12d
shll $0x3, %r14d
negl %r14d
movl $0x1, %ebx
leal -0x1(%rbx), %eax
movl %eax, %ecx
shrl $0x3, %ecx
addl %r12d, %ecx
movzbl (%rdx,%rcx), %ecx
andl $0x7, %eax
btl %eax, %ecx
jae 0x1cca6
leaq 0x3c6a(%rip), %rsi      # 0x208cf
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movl %ebx, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bl, %edi
callq 0x9000
movl $0x1, (%rsp)
leaq 0x87bb(%rip), %rsi      # 0x25447
leaq 0x3fe6(%rip), %r8       # 0x20c79
movq 0x10(%rsp), %rdi
movq %rax, %rdx
movq %r15, %rcx
xorl %r9d, %r9d
callq 0x3ebe
leal (%r14,%rbx), %eax
incl %eax
movl %ebx, %ecx
incl %ecx
movl %ecx, %ebx
cmpl $0x1, %eax
movq 0x10(%rsp), %r13
movq 0xa8(%rsp), %rdx
jne 0x1cc47
jmp 0x1d204
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x16432
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpl $0x8, %ebx
movl $0x8, %r14d
cmovbl %ebx, %r14d
testq %rbx, %rbx
movq 0x10(%rsp), %r13
je 0x1d204
movq %r12, %rdx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r12d
shll $0x3, %r14d
negl %r14d
movl $0x1, %ebx
leal -0x1(%rbx), %eax
movl %eax, %ecx
shrl $0x3, %ecx
addl %r12d, %ecx
movzbl (%rdx,%rcx), %ecx
andl $0x7, %eax
btl %eax, %ecx
jae 0x1cd8b
leaq 0x3baa(%rip), %rsi      # 0x208f4
leaq 0x50(%rsp), %r15
movq %r15, %rdi
movl %ebx, %edx
xorl %eax, %eax
callq 0x3070
movzbl %bl, %edi
callq 0xe18f
movl $0x1, (%rsp)
leaq 0x86d6(%rip), %rsi      # 0x25447
leaq 0x3f01(%rip), %r8       # 0x20c79
movq 0x10(%rsp), %rdi
movq %rax, %rdx
movq %r15, %rcx
xorl %r9d, %r9d
callq 0x3ebe
leal (%r14,%rbx), %eax
incl %eax
movl %ebx, %ecx
incl %ecx
movl %ecx, %ebx
cmpl $0x1, %eax
movq 0x10(%rsp), %r13
movq 0xa8(%rsp), %rdx
jne 0x1cd2c
jmp 0x1d204
movq 0x18(%rsp), %rsi
callq 0x1a4a2
jmp 0x1d1ff
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
andb $0x1, %r14b
movzbl %r14b, %ecx
xorl %edx, %edx
callq 0x1627c
cmpb $0x3, %bl
movq 0x10(%rsp), %r13
jb 0x1d204
movl %ebx, %eax
imulq $0x55555556, %rax, %rbx # imm = 0x55555556
shrq $0x20, %rbx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %r14d, %esi
addq %r12, %rsi
movq %r13, %rdi
callq 0x1759c
addl $0x3, %r14d
decq %rbx
jne 0x1ce00
jmp 0x1d204
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x1662a
jmp 0x1d204
movq 0x18(%rsp), %rsi
callq 0x17fe2
jmp 0x1d1ff
movq %r12, %r15
movq 0xb0(%rsp), %r12
movzbl (%r15,%r12), %esi
movl $0xc0, %edx
movl $0x1, %ecx
callq 0x1627c
testq %rbx, %rbx
movq 0x10(%rsp), %r13
je 0x1d204
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %ebx, %ebx
movb (%r15,%r12), %al
shrb $0x6, %al
movl %r14d, %ecx
movzbl (%r15,%rcx), %edx
movzbl %al, %esi
movq %r13, %rdi
xorl %ecx, %ecx
callq 0x1793c
incl %r14d
decq %rbx
jne 0x1ce7d
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %r14d, %r14d
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
testq %rbx, %rbx
movq 0x10(%rsp), %r13
je 0x1d204
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r15d
leal (%r15,%r14), %esi
addq %r12, %rsi
movq %r13, %rdi
callq 0x19380
leal (%r15,%r14), %eax
addl $0x2, %eax
movb (%r12,%rax), %al
andb $0x40, %al
shrb $0x6, %al
movzbl %al, %eax
leal (%rax,%rax,2), %eax
addl %eax, %r14d
addl $0xe, %r14d
cmpl %ebx, %r14d
jb 0x1ced9
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
andb $0x1, %r14b
movzbl %r14b, %ecx
xorl %edx, %edx
callq 0x1627c
cmpb $0x14, %bl
movq 0x10(%rsp), %r13
jb 0x1d204
movl %ebx, %eax
imulq $0xccccccd, %rax, %rbx  # imm = 0xCCCCCCD
shrq $0x20, %rbx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %r14d, %esi
addq %r12, %rsi
movq %r13, %rdi
xorl %edx, %edx
movl %r15d, %ecx
xorl %r8d, %r8d
callq 0x1682e
addl $0x14, %r14d
decq %rbx
jne 0x1cf52
jmp 0x1d204
xorl %ecx, %ecx
testb %r15b, %r15b
setne %cl
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
movl $0x80, %edx
callq 0x1627c
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
movl %r15d, %edx
callq 0x19a7a
jmp 0x1d204
movq 0x18(%rsp), %rsi
callq 0x17b78
jmp 0x1d1ff
movq 0xb0(%rsp), %rax
movb (%r12,%rax), %al
movzbl %al, %esi
testb %r15b, %r15b
je 0x1d2a5
movl $0xe8, %edx
movl $0x1, %ecx
jmp 0x1d2ac
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpb $0x6, %bl
movq 0x10(%rsp), %r13
jb 0x1d204
movl %ebx, %eax
imulq $0x2aaaaaab, %rax, %rbx # imm = 0x2AAAAAAB
shrq $0x20, %rbx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %r14d, %esi
addq %r12, %rsi
movq %r13, %rdi
callq 0x19ff2
addl $0x6, %r14d
decq %rbx
jne 0x1d022
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpb $0xb, %bl
movq 0x10(%rsp), %r13
jb 0x1d204
movl %ebx, %eax
imulq $0x1745d175, %rax, %rbx # imm = 0x1745D175
shrq $0x20, %rbx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %r14d, %esi
addq %r12, %rsi
movq %r13, %rdi
callq 0x16f2a
addl $0xb, %r14d
decq %rbx
jne 0x1d07b
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
movl %esi, %r14d
shrb $0x4, %r14b
movl %r14d, %r15d
andb $0x7, %r15b
addb $0x6, %r15b
movl $0x10, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpb %bl, %r15b
movq 0x10(%rsp), %r13
ja 0x1d204
movzbl %bl, %eax
divb %r15b
movq 0xa0(%rsp), %rcx
leal 0x3(%rcx), %ebx
movzbl %al, %eax
cmpb $0x2, %al
movl $0x1, %ecx
cmovael %eax, %ecx
movzbl %cl, %r15d
movzbl %r14b, %r14d
andl $0x7, %r14d
addl $0x6, %r14d
negq %r15
movl %ebx, %esi
addq %r12, %rsi
movq %r13, %rdi
xorl %edx, %edx
callq 0x1a888
addl %r14d, %ebx
incq %r15
jne 0x1d101
jmp 0x1d204
cmpb $0x2, %r15b
jb 0x1d27d
movq 0xb0(%rsp), %r14
movzbl (%r12,%r14), %esi
movl $0x8, %edx
movl $0x2, %ecx
callq 0x1627c
jmp 0x1d37d
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
callq 0x182e0
jmp 0x1d204
movq 0x10(%rsp), %r13
movq %r13, %rdi
movq 0x18(%rsp), %rsi
xorl %edx, %edx
callq 0x19052
jmp 0x1d204
movq 0xb0(%rsp), %rax
movzbl (%r12,%rax), %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
cmpb $0x7, %bl
movq 0x10(%rsp), %r13
jb 0x1d204
movl %ebx, %eax
imulq $0x24924925, %rax, %rbx # imm = 0x24924925
shrq $0x20, %rbx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movl %r14d, %esi
addq %r12, %rsi
movq %r13, %rdi
callq 0x18aa0
addl $0x7, %r14d
decq %rbx
jne 0x1d1b1
jmp 0x1d204
cmpb $0x0, 0x28(%rsp)
je 0x1d1dd
movq 0x18(%rsp), %rsi
callq 0x1ae72
jmp 0x1d1ff
movq 0x18(%rsp), %rsi
addq $0x3, %rsi
leaq 0x825a(%rip), %rdi      # 0x25447
movl %ebx, %edx
movl $0x1, %ecx
movl $0x10, %r8d
callq 0x5bbb
movq 0x10(%rsp), %r13
testb $-0x21, 0x98(%rsp)
jne 0x1d236
cmpb $0x1, 0x91c(%r13)
jne 0x1d222
testb $0x1, 0xc8(%rsp)
jne 0x1d236
movq 0x30(%r13), %rdx
xorl %edi, %edi
leaq 0x1379d(%rip), %rsi     # 0x309cc
xorl %eax, %eax
callq 0x37ec
movl 0xcc(%rsp), %eax
addl 0xa0(%rsp), %eax
movb $0x1, %bl
movl $0x0, 0xc8(%rsp)
movl %eax, %r12d
movq 0xa8(%rsp), %r13
leaq 0x40(%rsp), %r15
leaq 0x78(%rsp), %rdi
movl %ebp, %r14d
testb %bl, %bl
movl 0xbc(%rsp), %ebp
jne 0x1ba03
jmp 0x1d40f
movq 0xb0(%rsp), %rax
movb (%r12,%rax), %al
movzbl %al, %esi
cmpb $0x1, %r15b
jne 0x1d36c
movl $0x8, %edx
movl $0x1, %ecx
jmp 0x1d370
movl $0xc8, %edx
xorl %ecx, %ecx
callq 0x1627c
movq 0xb0(%rsp), %rax
testb $0x8, (%r12,%rax)
movq %rax, %r12
jne 0x1d30d
testl %ebx, %ebx
movq 0x10(%rsp), %r13
movq 0xa8(%rsp), %r15
je 0x1d204
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movb (%r15,%r12), %al
shrb $0x6, %al
movl %r14d, %ecx
movzbl (%r15,%rcx), %edx
movzbl %al, %esi
movq %r13, %rdi
xorl %ecx, %ecx
callq 0x1793c
incl %r14d
decq %rbx
jne 0x1d2e4
jmp 0x1d204
cmpb $0x2, %bl
movq 0x10(%rsp), %r13
movq 0xa8(%rsp), %r15
jb 0x1d204
shrl %ebx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r14d
movb (%r15,%r12), %al
shrb $0x6, %al
movl %r14d, %ecx
movzbl (%r15,%rcx), %ecx
leal 0x1(%r14), %edx
movzbl (%r15,%rdx), %edx
shll $0x8, %edx
orl %ecx, %edx
movzwl %dx, %edx
movzbl %al, %esi
movq %r13, %rdi
xorl %ecx, %ecx
callq 0x1793c
addl $0x2, %r14d
decq %rbx
jne 0x1d331
jmp 0x1d204
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1627c
movq 0xb0(%rsp), %r14
movzbl (%r12,%r14), %r14d
testb %r15b, %r15b
je 0x1d39b
movl %r14d, %eax
andl $0x8, %eax
je 0x1d39b
leaq 0x144f1(%rip), %rdi     # 0x31887
callq 0x3380
shrl $0x4, %r14d
andl $0x7, %r14d
addl $0x14, %r14d
cmpl %ebx, %r14d
movq 0x10(%rsp), %r13
movq 0xa8(%rsp), %rcx
ja 0x1d204
movl %ebx, %eax
xorl %edx, %edx
divl %r14d
movl %eax, %ebx
movq 0xa0(%rsp), %rax
leal 0x3(%rax), %r12d
cmpl $0x1, %ebx
adcl $0x0, %ebx
movl %r12d, %esi
addq %rcx, %rsi
movq %r13, %rdi
movl $0x1, %edx
movl %r14d, %r13d
movq %rcx, %r14
movl %r15d, %ecx
xorl %r8d, %r8d
callq 0x1682e
movq %r14, %rcx
movl %r13d, %r14d
movq 0x10(%rsp), %r13
addl %r14d, %r12d
decq %rbx
jne 0x1d3d8
jmp 0x1d204
movq 0x10(%rsp), %r14
movq $0x0, 0x38(%r14)
movq 0x30(%r14), %rax
movb $0x0, (%rax)
movzbl 0x2(%r13), %edx
addq $0x5, %rdx
leaq 0x8016(%rip), %rdi      # 0x25449
movq 0xf0(%rsp), %rbx
movq %rbx, %rsi
callq 0x3b9c
movzbl 0x2(%r13), %eax
leaq (%rbx,%rax), %rdi
addq $0x5, %rdi
movl $0x79, %esi
subl %eax, %esi
xorl %edx, %edx
callq 0x5b92
testb %al, %al
jne 0x1d48f
movq 0x38(%r14), %rdx
leaq 0xe1db(%rip), %rcx      # 0x2b648
movl $0x7, %r8d
movq 0x20(%rsp), %rdi
xorl %esi, %esi
callq 0x3390
leaq 0x1357c(%rip), %rsi     # 0x30a02
xorl %edi, %edi
xorl %eax, %eax
callq 0x37ec
movb $0x0, 0x91c(%r14)
addq $0xf8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x1d5d4
movq 0x40(%rsp), %rsi
jmp 0x1d5cc
movq %rax, %rbx
movq 0x50(%rsp), %rdi
leaq 0x60(%rsp), %rax
cmpq %rax, %rdi
je 0x1d4ed
movq 0x60(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d4ed
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
je 0x1d50e
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d50e
movq %rax, %rbx
movq 0xd0(%rsp), %rdi
leaq 0xe0(%rsp), %rax
cmpq %rax, %rdi
je 0x1d5b2
movq 0xe0(%rsp), %rsi
jmp 0x1d5a5
jmp 0x1d5af
jmp 0x1d54b
movq %rax, %rbx
movq 0x30(%rsp), %rdi
leaq 0x40(%rsp), %rax
cmpq %rax, %rdi
jne 0x1d5a0
jmp 0x1d5b2
jmp 0x1d5af
movq %rax, %rbx
jmp 0x1d5d4
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
jmp 0x1d593
jmp 0x1d5af
movq %rax, %rbx
leaq 0x60(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1d5d4
movq 0x60(%rsp), %rsi
jmp 0x1d5cc
movq %rax, %rbx
movq 0x30(%rsp), %rdi
cmpq %r15, %rdi
je 0x1d5b2
movq 0x40(%rsp), %rsi
incq %rsi
callq 0x3260
jmp 0x1d5b2
movq %rax, %rbx
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x1d5d4
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x3260
movq %rbx, %rdi
callq 0x3400