// File: jliesch[P]ofxget/pugixml/pugixml.cpp
// Function: pugi::impl::(anonymous namespace)::xml_parser::parse_tree(char*, pugi::xml_node_struct*, unsigned int, char)
char_t* parse_tree(char_t* s, xml_node_struct* root, unsigned int optmsk, char_t endch)
		{
			strconv_attribute_t strconv_attribute = get_strconv_attribute(optmsk);
			strconv_pcdata_t strconv_pcdata = get_strconv_pcdata(optmsk);

			char_t ch = 0;
			xml_node_struct* cursor = root;
			char_t* mark = s;

			while (*s != 0)
			{
				if (*s == '<')
				{
					++s;

				LOC_TAG:
					if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // '<#...'
					{
						PUGI__PUSHNODE(node_element); // Append a new node to the tree.

						cursor->name = s;

						PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator.
						PUGI__ENDSEG(); // Save char in 'ch', terminate & step over.

						if (ch == '>')
						{
							// end of tag
						}
						else if (PUGI__IS_CHARTYPE(ch, ct_space))
						{
						LOC_ATTRIBUTES:
							while (true)
							{
								PUGI__SKIPWS(); // Eat any whitespace.

								if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // <... #...
								{
									xml_attribute_struct* a = append_new_attribute(cursor, *alloc); // Make space for this attribute.
									if (!a) PUGI__THROW_ERROR(status_out_of_memory, s);

									a->name = s; // Save the offset.

									PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator.
									PUGI__ENDSEG(); // Save char in 'ch', terminate & step over.

									if (PUGI__IS_CHARTYPE(ch, ct_space))
									{
										PUGI__SKIPWS(); // Eat any whitespace.

										ch = *s;
										++s;
									}

									if (ch == '=') // '<... #=...'
									{
										PUGI__SKIPWS(); // Eat any whitespace.

										if (*s == '"' || *s == '\'') // '<... #="...'
										{
											ch = *s; // Save quote char to avoid breaking on "''" -or- '""'.
											++s; // Step over the quote.
											a->value = s; // Save the offset.

											s = strconv_attribute(s, ch);

											if (!s) PUGI__THROW_ERROR(status_bad_attribute, a->value);

											// After this line the loop continues from the start;
											// Whitespaces, / and > are ok, symbols and EOF are wrong,
											// everything else will be detected
											if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_attribute, s);
										}
										else PUGI__THROW_ERROR(status_bad_attribute, s);
									}
									else PUGI__THROW_ERROR(status_bad_attribute, s);
								}
								else if (*s == '/')
								{
									++s;

									if (*s == '>')
									{
										PUGI__POPNODE();
										s++;
										break;
									}
									else if (*s == 0 && endch == '>')
									{
										PUGI__POPNODE();
										break;
									}
									else PUGI__THROW_ERROR(status_bad_start_element, s);
								}
								else if (*s == '>')
								{
									++s;

									break;
								}
								else if (*s == 0 && endch == '>')
								{
									break;
								}
								else PUGI__THROW_ERROR(status_bad_start_element, s);
							}

							// !!!
						}
						else if (ch == '/') // '<#.../'
						{
							if (!PUGI__ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_start_element, s);

							PUGI__POPNODE(); // Pop.

							s += (*s == '>');
						}
						else if (ch == 0)
						{
							// we stepped over null terminator, backtrack & handle closing tag
							--s;

							if (endch != '>') PUGI__THROW_ERROR(status_bad_start_element, s);
						}
						else PUGI__THROW_ERROR(status_bad_start_element, s);
					}
					else if (*s == '/')
					{
						++s;

						mark = s;

						char_t* name = cursor->name;
						if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, mark);

						while (PUGI__IS_CHARTYPE(*s, ct_symbol))
						{
							if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, mark);
						}

						if (*name)
						{
							if (*s == 0 && name[0] == endch && name[1] == 0) PUGI__THROW_ERROR(status_bad_end_element, s);
							else PUGI__THROW_ERROR(status_end_element_mismatch, mark);
						}

						PUGI__POPNODE(); // Pop.

						PUGI__SKIPWS();

						if (*s == 0)
						{
							if (endch != '>') PUGI__THROW_ERROR(status_bad_end_element, s);
						}
						else
						{
							if (*s != '>') PUGI__THROW_ERROR(status_bad_end_element, s);
							++s;
						}
					}
					else if (*s == '?') // '<?...'
					{
						s = parse_question(s, cursor, optmsk, endch);
						if (!s) return s;

						assert(cursor);
						if (PUGI__NODETYPE(cursor) == node_declaration) goto LOC_ATTRIBUTES;
					}
					else if (*s == '!') // '<!...'
					{
						s = parse_exclamation(s, cursor, optmsk, endch);
						if (!s) return s;
					}
					else if (*s == 0 && endch == '?') PUGI__THROW_ERROR(status_bad_pi, s);
					else PUGI__THROW_ERROR(status_unrecognized_tag, s);
				}
				else
				{
					mark = s; // Save this offset while searching for a terminator.

					PUGI__SKIPWS(); // Eat whitespace if no genuine PCDATA here.

					if (*s == '<' || !*s)
					{
						// We skipped some whitespace characters because otherwise we would take the tag branch instead of PCDATA one
						assert(mark != s);

						if (!PUGI__OPTSET(parse_ws_pcdata | parse_ws_pcdata_single) || PUGI__OPTSET(parse_trim_pcdata))
						{
							continue;
						}
						else if (PUGI__OPTSET(parse_ws_pcdata_single))
						{
							if (s[0] != '<' || s[1] != '/' || cursor->first_child) continue;
						}
					}

					if (!PUGI__OPTSET(parse_trim_pcdata))
						s = mark;

					if (cursor->parent || PUGI__OPTSET(parse_fragment))
					{
						if (PUGI__OPTSET(parse_embed_pcdata) && cursor->parent && !cursor->first_child && !cursor->value)
						{
							cursor->value = s; // Save the offset.
						}
						else
						{
							PUGI__PUSHNODE(node_pcdata); // Append a new node on the tree.

							cursor->value = s; // Save the offset.

							PUGI__POPNODE(); // Pop since this is a standalone.
						}

						s = strconv_pcdata(s);

						if (!*s) break;
					}
					else
					{
						PUGI__SCANFOR(*s == '<'); // '...<'
						if (!*s) break;

						++s;
					}

					// We're after '<'
					goto LOC_TAG;
				}
			}

			// check that last tag is closed
			if (cursor != root) PUGI__THROW_ERROR(status_end_element_mismatch, s);

			return s;
		}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movb %r8b, %al
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movl %ecx, -0x24(%rbp)
movb %al, -0x25(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x78(%rbp)
movl -0x24(%rbp), %edi
callq 0x52ce0
movq %rax, -0x30(%rbp)
movl -0x24(%rbp), %edi
callq 0x52e30
movq %rax, -0x38(%rbp)
movb $0x0, -0x39(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x52c5a
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3c, %eax
jne 0x52a4c
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x19010(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x52754
movq -0x78(%rbp), %rax
movq -0x48(%rbp), %rdi
movq (%rax), %rsi
movl $0x2, %edx
callq 0x4fb50
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jne 0x52112
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x51(%rbp)
movzbl -0x51(%rbp), %eax
movl %eax, %ecx
leaq 0x18f9c(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x52149
jmp 0x5214e
jmp 0x52210
movq -0x18(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0x51(%rbp)
movzbl -0x51(%rbp), %eax
movl %eax, %ecx
leaq 0x18f6b(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5217a
jmp 0x5218b
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52210
movq -0x18(%rbp), %rax
movb 0x2(%rax), %al
movb %al, -0x51(%rbp)
movzbl -0x51(%rbp), %eax
movl %eax, %ecx
leaq 0x18f2e(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x521b7
jmp 0x521c5
movq -0x18(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x18(%rbp)
jmp 0x52210
movq -0x18(%rbp), %rax
movb 0x3(%rax), %al
movb %al, -0x51(%rbp)
movzbl -0x51(%rbp), %eax
movl %eax, %ecx
leaq 0x18ef4(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x521f1
jmp 0x521ff
movq -0x18(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x18(%rbp)
jmp 0x52210
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
jmp 0x5211e
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x39(%rbp)
movq -0x18(%rbp), %rax
movb $0x0, (%rax)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movsbl -0x39(%rbp), %eax
cmpl $0x3e, %eax
jne 0x5223a
jmp 0x5274f
movzbl -0x39(%rbp), %eax
movl %eax, %ecx
leaq 0x18e89(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52671
jmp 0x52259
jmp 0x5225b
jmp 0x5225d
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18e63(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52287
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x5225d
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18e39(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x52592
movq -0x78(%rbp), %rax
movq -0x48(%rbp), %rdi
movq (%rax), %rsi
callq 0x4fbc0
movq %rax, -0x60(%rbp)
cmpq $0x0, -0x60(%rbp)
jne 0x522e4
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x8(%rax)
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x61(%rbp)
movzbl -0x61(%rbp), %eax
movl %eax, %ecx
leaq 0x18dca(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5231b
jmp 0x52320
jmp 0x523e2
movq -0x18(%rbp), %rax
movb 0x1(%rax), %al
movb %al, -0x61(%rbp)
movzbl -0x61(%rbp), %eax
movl %eax, %ecx
leaq 0x18d99(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5234c
jmp 0x5235d
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x523e2
movq -0x18(%rbp), %rax
movb 0x2(%rax), %al
movb %al, -0x61(%rbp)
movzbl -0x61(%rbp), %eax
movl %eax, %ecx
leaq 0x18d5c(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x52389
jmp 0x52397
movq -0x18(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x18(%rbp)
jmp 0x523e2
movq -0x18(%rbp), %rax
movb 0x3(%rax), %al
movb %al, -0x61(%rbp)
movzbl -0x61(%rbp), %eax
movl %eax, %ecx
leaq 0x18d22(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
setne %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x523c3
jmp 0x523d1
movq -0x18(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x18(%rbp)
jmp 0x523e2
movq -0x18(%rbp), %rax
addq $0x4, %rax
movq %rax, -0x18(%rbp)
jmp 0x522f0
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x39(%rbp)
movq -0x18(%rbp), %rax
movb $0x0, (%rax)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movzbl -0x39(%rbp), %eax
movl %eax, %ecx
leaq 0x18cc5(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52458
jmp 0x52419
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18ca7(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52443
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52419
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x39(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movsbl -0x39(%rbp), %eax
cmpl $0x3d, %eax
jne 0x5256d
jmp 0x52467
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18c59(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52491
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52467
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x22, %eax
je 0x524ad
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x27, %eax
jne 0x5254b
movq -0x18(%rbp), %rax
movb (%rax), %al
movb %al, -0x39(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rcx
movq -0x60(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x30(%rbp), %rax
movq -0x18(%rbp), %rdi
movsbl -0x39(%rbp), %esi
callq *%rax
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x5250b
movq -0x78(%rbp), %rax
movq -0x60(%rbp), %rcx
movq 0x10(%rcx), %rcx
movq %rcx, 0x8(%rax)
movl $0xc, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18bb5(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x80, %eax
cmpl $0x0, %eax
je 0x52549
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xc, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x5256b
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xc, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x5258d
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xc, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x52667
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0x52616
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
jne 0x525d3
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x5266c
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x525f6
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
jne 0x525f6
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
jmp 0x5266c
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xb, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
jne 0x52630
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x5266c
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x52647
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
jne 0x52647
jmp 0x5266c
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xb, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x5225b
jmp 0x5274d
movsbl -0x39(%rbp), %eax
cmpl $0x2f, %eax
jne 0x526e9
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
je 0x526bb
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x5269b
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
je 0x526bb
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xb, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
sete %al
andb $0x1, %al
movzbl %al, %ecx
movq -0x18(%rbp), %rax
movslq %ecx, %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
jmp 0x5274b
movsbl -0x39(%rbp), %eax
cmpl $0x0, %eax
jne 0x52729
movq -0x18(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x18(%rbp)
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
je 0x52727
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xb, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x52749
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xb, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x5274b
jmp 0x5274d
jmp 0x5274f
jmp 0x52a47
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x2f, %eax
jne 0x5292e
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x48(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
jne 0x527ab
movq -0x78(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xe, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x527ad
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18913(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x40, %eax
cmpl $0x0, %eax
je 0x52813
movq -0x18(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x18(%rbp)
movsbl (%rax), %eax
movq -0x70(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x70(%rbp)
movsbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x52811
movq -0x78(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xe, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x527ad
movq -0x70(%rbp), %rax
cmpb $0x0, (%rax)
je 0x52884
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x52864
movq -0x70(%rbp), %rax
movsbl (%rax), %eax
movsbl -0x25(%rbp), %ecx
cmpl %ecx, %eax
jne 0x52864
movq -0x70(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x0, %eax
jne 0x52864
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xd, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x78(%rbp), %rax
movq -0x50(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xe, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x18830(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x528ba
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52890
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x528f1
movsbl -0x25(%rbp), %eax
cmpl $0x3e, %eax
je 0x528ef
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xd, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x52929
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3e, %eax
je 0x5291d
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xd, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52a45
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3f, %eax
jne 0x529ad
movq -0x78(%rbp), %rdi
movq -0x18(%rbp), %rsi
movl -0x24(%rbp), %ecx
leaq -0x48(%rbp), %rdx
movsbl -0x25(%rbp), %r8d
callq 0x52f00
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x5296b
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x52c89
cmpq $0x0, -0x48(%rbp)
je 0x52974
jmp 0x52993
leaq 0x19eb7(%rip), %rdi     # 0x6c832
leaq 0x189d3(%rip), %rsi     # 0x6b355
movl $0xd4f, %edx            # imm = 0xD4F
leaq 0x19eab(%rip), %rcx     # 0x6c839
callq 0x7180
movq -0x48(%rbp), %rax
movq (%rax), %rax
andq $0xf, %rax
cmpl $0x7, %eax
jne 0x529a8
jmp 0x52259
jmp 0x52a43
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x21, %eax
jne 0x529ec
movq -0x78(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x48(%rbp), %rdx
movl -0x24(%rbp), %ecx
movsbl -0x25(%rbp), %r8d
callq 0x53440
movq %rax, -0x18(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x529ea
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x52c89
jmp 0x52a41
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
jne 0x52a21
movsbl -0x25(%rbp), %eax
cmpl $0x3f, %eax
jne 0x52a21
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x6, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x5, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
jmp 0x52a43
jmp 0x52a45
jmp 0x52a47
jmp 0x52c55
movq -0x18(%rbp), %rax
movq %rax, -0x50(%rbp)
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
movl %eax, %ecx
leaq 0x1866c(%rip), %rax     # 0x6b0d0
movzbl (%rax,%rcx), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x52a7e
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52a54
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3c, %eax
je 0x52a97
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
jne 0x52b1d
movq -0x50(%rbp), %rax
cmpq -0x18(%rbp), %rax
je 0x52aa3
jmp 0x52ac2
leaq 0x19e04(%rip), %rdi     # 0x6c8ae
leaq 0x188a4(%rip), %rsi     # 0x6b355
movl $0xd63, %edx            # imm = 0xD63
leaq 0x19d7c(%rip), %rcx     # 0x6c839
callq 0x7180
movl -0x24(%rbp), %eax
andl $0x408, %eax            # imm = 0x408
cmpl $0x0, %eax
je 0x52adc
movl -0x24(%rbp), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0x52ae1
jmp 0x52084
movl -0x24(%rbp), %eax
andl $0x400, %eax            # imm = 0x400
cmpl $0x0, %eax
je 0x52b19
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3c, %eax
jne 0x52b12
movq -0x18(%rbp), %rax
movsbl 0x1(%rax), %eax
cmpl $0x2f, %eax
jne 0x52b12
movq -0x48(%rbp), %rax
cmpq $0x0, 0x20(%rax)
je 0x52b17
jmp 0x52084
jmp 0x52b19
jmp 0x52b1b
jmp 0x52b1d
movl -0x24(%rbp), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
jne 0x52b32
movq -0x50(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x48(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x52b4e
movl -0x24(%rbp), %eax
andl $0x1000, %eax           # imm = 0x1000
cmpl $0x0, %eax
je 0x52bfd
movl -0x24(%rbp), %eax
andl $0x2000, %eax           # imm = 0x2000
cmpl $0x0, %eax
je 0x52b8a
movq -0x48(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x52b8a
movq -0x48(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x52b8a
movq -0x48(%rbp), %rax
cmpq $0x0, 0x10(%rax)
jne 0x52b8a
movq -0x18(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x52be2
movq -0x78(%rbp), %rax
movq -0x48(%rbp), %rdi
movq (%rax), %rsi
movl $0x3, %edx
callq 0x4fb50
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jne 0x52bca
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0x3, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rcx
movq -0x48(%rbp), %rax
movq %rcx, 0x10(%rax)
movq -0x48(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x48(%rbp)
movq -0x38(%rbp), %rax
movq -0x18(%rbp), %rdi
callq *%rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
jne 0x52bfb
jmp 0x52c5a
jmp 0x52c50
jmp 0x52bff
movq -0x18(%rbp), %rax
movsbl (%rax), %ecx
xorl %eax, %eax
cmpl $0x0, %ecx
movb %al, -0x79(%rbp)
je 0x52c22
movq -0x18(%rbp), %rax
movsbl (%rax), %eax
cmpl $0x3c, %eax
sete %al
xorb $-0x1, %al
movb %al, -0x79(%rbp)
movb -0x79(%rbp), %al
testb $0x1, %al
jne 0x52c2b
jmp 0x52c39
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x52bff
movq -0x18(%rbp), %rax
cmpb $0x0, (%rax)
jne 0x52c44
jmp 0x52c5a
movq -0x18(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x18(%rbp)
jmp 0x520b0
jmp 0x52084
movq -0x48(%rbp), %rax
cmpq -0x20(%rbp), %rax
je 0x52c81
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x8(%rax)
movl $0xe, 0x10(%rax)
movq $0x0, -0x8(%rbp)
jmp 0x52c89
movq -0x18(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)