// File: Alcaro[P]bridges/arlib/json.cpp
// Function: jsonparser::next()
jsonparser::event jsonparser::next()
{
	uint8_t ch = nextch();
	if (m_want_key)
	{
		m_want_key = false;
		if (ch == '"') goto parse_key;
		else if (ch == '}') goto close_brace;
		else return do_error();
	}
	
	if (ch == '\0')
	{
		if (m_need_value)
		{
			m_need_value = false;
			return do_error();
		}
		if (m_nesting)
		{
			if (!m_unexpected_end)
			{
				m_unexpected_end = true;
				return do_error();
			}
			bool map = (m_nesting[m_nesting.size()-1] == true);
			m_nesting.resize(m_nesting.size()-1);
			return { map ? exit_map : exit_list };
		}
		return { finish };
	}
	if (m_need_value && (ch == ']' || ch == '}'))
	{
		m_need_value = false;
		m_data--;
		return do_error();
	}
	m_need_value = false;
	
	if (ch == '"')
	{
		bool is_key;
		is_key = false;
		if (false)
		{
		parse_key:
			is_key = true;
		}
		uint8_t * val_out_start = m_data;
		uint8_t * val_out = m_data;
		
		//most strings don't contain escapes, special case them
		uint8_t * fast_iter = m_data;
#ifdef __SSE2__
		while (fast_iter+16 <= m_data_end)
		{
			__m128i chs = _mm_loadu_si128((__m128i*)fast_iter);
			
			// xor 128 because signed compare; xor 2 to fold " to beside the control chars and not check it separately
			__m128i bad1 = _mm_cmplt_epi8(_mm_xor_si128(chs, _mm_set1_epi8(0x82)), _mm_set1_epi8((int8_t)(0x21^0x80)));
			__m128i bad2 = _mm_cmpeq_epi8(chs, _mm_set1_epi8(0x5C)); // can't find any way to optimize out the \ check
			__m128i bad = _mm_or_si128(bad1, bad2);
			int mask = _mm_movemask_epi8(bad); // always in uint16 range, but gcc doesn't know that; keeping it as int optimizes better
			if (mask == 0)
			{
				fast_iter += 16;
				continue;
			}
			fast_iter += ctz32(mask);
			val_out = fast_iter;
			m_data = fast_iter;
			if (LIKELY(*m_data == '"'))
			{
				m_data++;
				goto skip_escape_parse;
			}
			break;
		}
		//just take the slow path for the last 16 bytes of the document
#else
		while (true)
		{
			uint8_t ch = *fast_iter;
			if (UNLIKELY((ch^2) <= 32 || ch == '\\'))
			{
				val_out = fast_iter;
				m_data = fast_iter;
				if (LIKELY(ch == '"'))
				{
					m_data++;
					goto skip_escape_parse;
				}
				break;
			}
			fast_iter++;
		}
#endif
		
		while (true)
		{
			uint8_t ch = *(m_data++);
			if (ch == '\\')
			{
				uint8_t esc = *(m_data++);
				switch (esc)
				{
				case '"': *val_out++ =  '"'; break;
				case '\\':*val_out++ = '\\'; break;
				case '/': *val_out++ =  '/'; break;
				case 'b': *val_out++ = '\b'; break;
				case 'f': *val_out++ = '\f'; break;
				case 'n': *val_out++ = '\n'; break;
				case 'r': *val_out++ = '\r'; break;
				case 't': *val_out++ = '\t'; break;
				case 'u':
				{
					if (UNLIKELY(m_data+4 > m_data_end)) return do_error();
					
					uint32_t codepoint;
					if (UNLIKELY(!fromstringhex(arrayview<uint8_t>(m_data, 4), codepoint))) return do_error();
					m_data += 4;
					
					// curse utf16 forever
					if (codepoint >= 0xD800 && codepoint <= 0xDBFF && m_data[0] == '\\' && m_data[1] == 'u')
					{
						uint16_t low_sur;
						if (UNLIKELY(!fromstringhex(arrayview<uint8_t>(m_data+2, 4), low_sur))) return do_error();
						
						if (low_sur >= 0xDC00 && low_sur <= 0xDFFF)
						{
							m_data += 6;
							codepoint = 0x10000 + ((codepoint-0xD800)<<10) + (low_sur-0xDC00);
						}
					}
					// else leave as is, string::codepoint will return fffd for unpaired surrogates
					
					val_out += string::codepoint(val_out, codepoint);
					break;
				}
				default:
					m_data--;
					return do_error();
				}
				continue;
			}
			if (ch == '"') break;
			if (ch < 32)
			{
				m_data--;
				return do_error();
			}
			*val_out++ = ch;
		}
	skip_escape_parse:
		*val_out = '\0';
		cstring val(arrayview<uint8_t>(val_out_start, val_out-val_out_start), true);
		if (is_key)
		{
			if (nextch() != ':') return do_error();
			return { map_key, val };
		}
		else
		{
			if (!skipcomma()) return do_error();
			return { str, val };
		}
	}
	if (ch == '[')
	{
		m_nesting.append(false);
		return { enter_list };
	}
	if (ch == ']')
	{
		if (!m_nesting || m_nesting[m_nesting.size()-1] != false) return do_error();
		if (!skipcomma(2)) return do_error();
		m_nesting.resize(m_nesting.size()-1);
		return { exit_list };
	}
	if (ch == '{')
	{
		m_nesting.append(true);
		m_want_key = true;
		return { enter_map };
	}
	if (ch == '}')
	{
	close_brace:
		m_want_key = false;
		if (!m_nesting || m_nesting[m_nesting.size()-1] != true) return do_error();
		if (!skipcomma(2)) return do_error();
		m_nesting.resize(m_nesting.size()-1);
		return { exit_map };
	}
	if (ch == '-' || isdigit(ch))
	{
		m_data--;
		const uint8_t * start = m_data;
		if (*m_data == '-') m_data++;
		if (*m_data == '0') m_data++;
		else
		{
			if (!isdigit(*m_data)) return do_error();
			while (isdigit(*m_data)) m_data++;
		}
		if (*m_data == '.')
		{
			m_data++;
			if (!isdigit(*m_data)) return do_error();
			while (isdigit(*m_data)) m_data++;
		}
		if (*m_data == 'e' || *m_data == 'E')
		{
			m_data++;
			if (*m_data == '+' || *m_data == '-') m_data++;
			if (!isdigit(*m_data)) return do_error();
			while (isdigit(*m_data)) m_data++;
		}
		
		size_t len = m_data-start;
		if (!skipcomma()) return do_error();
		return { num, arrayview<uint8_t>(start, len) };
	}
	if (ch == 't' && m_data+3 <= m_data_end && readu_le32(m_data-1) == 0x65757274) // true
	{
		m_data += 3;
		if (!skipcomma()) return do_error();
		return { jtrue };
	}
	if (ch == 'f' && m_data+4 <= m_data_end && readu_le32(m_data) == 0x65736c61) // alse
	{
		m_data += 4;
		if (!skipcomma()) return do_error();
		return { jfalse };
	}
	if (ch == 'n' && m_data+3 <= m_data_end && readu_le32(m_data-1) == 0x6c6c756e) // null
	{
		m_data += 3;
		if (!skipcomma()) return do_error();
		return { jnull };
	}
	
	return do_error();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x310, %rsp            # imm = 0x310
movq %rdi, -0x2b0(%rbp)
movq %rdi, -0x2a8(%rbp)
movq %rsi, -0x160(%rbp)
movq -0x160(%rbp), %rdi
movq %rdi, -0x2a0(%rbp)
callq 0x284e0
movb %al, %cl
movq -0x2a0(%rbp), %rax
movb %cl, -0x161(%rbp)
testb $0x1, 0x20(%rax)
je 0x2872d
movq -0x2a0(%rbp), %rax
movb $0x0, 0x20(%rax)
movzbl -0x161(%rbp), %eax
cmpl $0x22, %eax
jne 0x28704
jmp 0x288f8
movzbl -0x161(%rbp), %eax
cmpl $0x7d, %eax
jne 0x28715
jmp 0x2949f
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x0, %eax
jne 0x2887f
movq -0x2a0(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x28766
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
movb $0x0, 0x21(%rsi)
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
addq $0x28, %rdi
callq 0x2abe0
testb $0x1, %al
jne 0x2877f
jmp 0x28864
movq -0x2a0(%rbp), %rax
testb $0x1, 0x22(%rax)
jne 0x287a8
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
movb $0x1, 0x22(%rsi)
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x2c0(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x2c0(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0xa130
movq %rax, -0x178(%rbp)
movq %rdx, -0x170(%rbp)
leaq -0x178(%rbp), %rdi
callq 0xa160
movq -0x2a0(%rbp), %rdi
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
sete %al
andb $0x1, %al
movb %al, -0x162(%rbp)
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x2b8(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x2b8(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x66f0
movq -0x2b0(%rbp), %rdi
movb -0x162(%rbp), %dl
movl $0x7, %eax
movl $0xa, %ecx
testb $0x1, %dl
cmovnel %ecx, %eax
movl %eax, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movq -0x2b0(%rbp), %rdi
movl $0xc, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movq -0x2a0(%rbp), %rax
testb $0x1, 0x21(%rax)
je 0x288cc
movzbl -0x161(%rbp), %eax
cmpl $0x5d, %eax
je 0x288a4
movzbl -0x161(%rbp), %eax
cmpl $0x7d, %eax
jne 0x288cc
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
movb $0x0, 0x21(%rsi)
movq 0x10(%rsi), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsi)
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rax
movb $0x0, 0x21(%rax)
movzbl -0x161(%rbp), %eax
cmpl $0x22, %eax
jne 0x292e3
movb $0x0, -0x179(%rbp)
xorl %eax, %eax
testb $0x1, %al
jne 0x288f6
jmp 0x288ff
jmp 0x288f8
movb $0x1, -0x179(%rbp)
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x188(%rbp)
movq 0x10(%rax), %rcx
movq %rcx, -0x190(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x198(%rbp)
movq -0x2a0(%rbp), %rcx
movq -0x198(%rbp), %rax
addq $0x10, %rax
cmpq 0x18(%rcx), %rax
ja 0x28df0
movq -0x198(%rbp), %rax
movq %rax, -0x158(%rbp)
movq -0x158(%rbp), %rax
movups (%rax), %xmm0
movaps %xmm0, -0x1b0(%rbp)
movaps -0x1b0(%rbp), %xmm1
movb $-0x7e, -0x101(%rbp)
movb -0x101(%rbp), %al
movb %al, -0x2c3(%rbp)
movb %al, -0x41(%rbp)
movb %al, -0x42(%rbp)
movb %al, -0x43(%rbp)
movb %al, -0x44(%rbp)
movb %al, -0x45(%rbp)
movb %al, -0x46(%rbp)
movb %al, -0x47(%rbp)
movb %al, -0x48(%rbp)
movb %al, -0x49(%rbp)
movb %al, -0x4a(%rbp)
movb %al, -0x4b(%rbp)
movb %al, -0x4c(%rbp)
movb %al, -0x4d(%rbp)
movb %al, -0x4e(%rbp)
movb %al, -0x4f(%rbp)
movb %al, -0x50(%rbp)
movzbl -0x41(%rbp), %eax
movd %eax, %xmm0
movzbl -0x42(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
movzbl -0x43(%rbp), %eax
movd %eax, %xmm3
movzbl -0x44(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
punpcklwd %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
movzbl -0x45(%rbp), %eax
movd %eax, %xmm2
movzbl -0x46(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
movzbl -0x47(%rbp), %eax
movd %eax, %xmm4
movzbl -0x48(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
punpcklwd %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
punpckldq %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
movzbl -0x49(%rbp), %eax
movd %eax, %xmm3
movzbl -0x4a(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
movzbl -0x4b(%rbp), %eax
movd %eax, %xmm4
movzbl -0x4c(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm4, %xmm3    # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
punpcklwd %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
movzbl -0x4d(%rbp), %eax
movd %eax, %xmm0
movzbl -0x4e(%rbp), %eax
movd %eax, %xmm4
punpcklbw %xmm0, %xmm4    # xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
movzbl -0x4f(%rbp), %eax
movd %eax, %xmm5
movzbl -0x50(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm5, %xmm0    # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
punpcklwd %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
punpcklqdq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0]
movaps %xmm0, -0x60(%rbp)
movaps -0x60(%rbp), %xmm0
movaps %xmm1, -0x120(%rbp)
movaps %xmm0, -0x130(%rbp)
movaps -0x120(%rbp), %xmm1
movaps -0x130(%rbp), %xmm0
pxor %xmm0, %xmm1
movb $-0x5f, -0x102(%rbp)
movb -0x102(%rbp), %al
movb %al, -0x2c2(%rbp)
movb %al, -0x21(%rbp)
movb %al, -0x22(%rbp)
movb %al, -0x23(%rbp)
movb %al, -0x24(%rbp)
movb %al, -0x25(%rbp)
movb %al, -0x26(%rbp)
movb %al, -0x27(%rbp)
movb %al, -0x28(%rbp)
movb %al, -0x29(%rbp)
movb %al, -0x2a(%rbp)
movb %al, -0x2b(%rbp)
movb %al, -0x2c(%rbp)
movb %al, -0x2d(%rbp)
movb %al, -0x2e(%rbp)
movb %al, -0x2f(%rbp)
movb %al, -0x30(%rbp)
movzbl -0x21(%rbp), %eax
movd %eax, %xmm0
movzbl -0x22(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
movzbl -0x23(%rbp), %eax
movd %eax, %xmm3
movzbl -0x24(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
punpcklwd %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
movzbl -0x25(%rbp), %eax
movd %eax, %xmm2
movzbl -0x26(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
movzbl -0x27(%rbp), %eax
movd %eax, %xmm4
movzbl -0x28(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
punpcklwd %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
punpckldq %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
movzbl -0x29(%rbp), %eax
movd %eax, %xmm3
movzbl -0x2a(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
movzbl -0x2b(%rbp), %eax
movd %eax, %xmm4
movzbl -0x2c(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm4, %xmm3    # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
punpcklwd %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
movzbl -0x2d(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2e(%rbp), %eax
movd %eax, %xmm4
punpcklbw %xmm0, %xmm4    # xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
movzbl -0x2f(%rbp), %eax
movd %eax, %xmm5
movzbl -0x30(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm5, %xmm0    # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
punpcklwd %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
punpcklqdq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0]
movaps %xmm0, -0x40(%rbp)
movaps -0x40(%rbp), %xmm0
movaps %xmm1, -0x140(%rbp)
movaps %xmm0, -0x150(%rbp)
movaps -0x150(%rbp), %xmm1
movaps -0x140(%rbp), %xmm0
movaps %xmm1, -0x70(%rbp)
movaps %xmm0, -0x80(%rbp)
movaps -0x70(%rbp), %xmm0
movaps -0x80(%rbp), %xmm1
pcmpgtb %xmm1, %xmm0
movaps %xmm0, -0x1c0(%rbp)
movaps -0x1b0(%rbp), %xmm1
movb $0x5c, -0x103(%rbp)
movb -0x103(%rbp), %al
movb %al, -0x2c1(%rbp)
movb %al, -0x1(%rbp)
movb %al, -0x2(%rbp)
movb %al, -0x3(%rbp)
movb %al, -0x4(%rbp)
movb %al, -0x5(%rbp)
movb %al, -0x6(%rbp)
movb %al, -0x7(%rbp)
movb %al, -0x8(%rbp)
movb %al, -0x9(%rbp)
movb %al, -0xa(%rbp)
movb %al, -0xb(%rbp)
movb %al, -0xc(%rbp)
movb %al, -0xd(%rbp)
movb %al, -0xe(%rbp)
movb %al, -0xf(%rbp)
movb %al, -0x10(%rbp)
movzbl -0x1(%rbp), %eax
movd %eax, %xmm0
movzbl -0x2(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
movzbl -0x3(%rbp), %eax
movd %eax, %xmm3
movzbl -0x4(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
punpcklwd %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
movzbl -0x5(%rbp), %eax
movd %eax, %xmm2
movzbl -0x6(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
movzbl -0x7(%rbp), %eax
movd %eax, %xmm4
movzbl -0x8(%rbp), %eax
movd %eax, %xmm2
punpcklbw %xmm4, %xmm2    # xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
punpcklwd %xmm3, %xmm2    # xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3]
punpckldq %xmm0, %xmm2    # xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
movzbl -0x9(%rbp), %eax
movd %eax, %xmm3
movzbl -0xa(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
movzbl -0xb(%rbp), %eax
movd %eax, %xmm4
movzbl -0xc(%rbp), %eax
movd %eax, %xmm3
punpcklbw %xmm4, %xmm3    # xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
punpcklwd %xmm0, %xmm3    # xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
movzbl -0xd(%rbp), %eax
movd %eax, %xmm0
movzbl -0xe(%rbp), %eax
movd %eax, %xmm4
punpcklbw %xmm0, %xmm4    # xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
movzbl -0xf(%rbp), %eax
movd %eax, %xmm5
movzbl -0x10(%rbp), %eax
movd %eax, %xmm0
punpcklbw %xmm5, %xmm0    # xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
punpcklwd %xmm4, %xmm0    # xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
punpcklqdq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0]
movaps %xmm0, -0x20(%rbp)
movaps -0x20(%rbp), %xmm0
movaps %xmm1, -0xf0(%rbp)
movaps %xmm0, -0x100(%rbp)
movaps -0xf0(%rbp), %xmm0
movaps -0x100(%rbp), %xmm1
pcmpeqb %xmm1, %xmm0
movdqa %xmm0, -0x1d0(%rbp)
movdqa -0x1c0(%rbp), %xmm1
movdqa -0x1d0(%rbp), %xmm0
movdqa %xmm1, -0xd0(%rbp)
movdqa %xmm0, -0xe0(%rbp)
movdqa -0xd0(%rbp), %xmm0
por -0xe0(%rbp), %xmm0
movdqa %xmm0, -0x1e0(%rbp)
movdqa -0x1e0(%rbp), %xmm0
movdqa %xmm0, -0xc0(%rbp)
movdqa -0xc0(%rbp), %xmm0
pmovmskb %xmm0, %eax
movl %eax, -0x1e4(%rbp)
cmpl $0x0, -0x1e4(%rbp)
jne 0x28d7e
movq -0x198(%rbp), %rax
addq $0x10, %rax
movq %rax, -0x198(%rbp)
jmp 0x28927
movl -0x1e4(%rbp), %edi
callq 0x29ab0
movl %eax, %edx
movq -0x2a0(%rbp), %rax
movq -0x198(%rbp), %rcx
movslq %edx, %rdx
addq %rdx, %rcx
movq %rcx, -0x198(%rbp)
movq -0x198(%rbp), %rcx
movq %rcx, -0x190(%rbp)
movq -0x198(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x22, %eax
sete %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x28dd6
jmp 0x28dee
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x291e4
jmp 0x28df0
jmp 0x28df2
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, 0x10(%rcx)
movb (%rax), %al
movb %al, -0x1e5(%rbp)
movzbl -0x1e5(%rbp), %eax
cmpl $0x5c, %eax
jne 0x29182
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
movq %rax, %rdx
incq %rdx
movq %rdx, 0x10(%rcx)
movb (%rax), %al
movb %al, -0x1e6(%rbp)
movzbl -0x1e6(%rbp), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x2d0(%rbp)
subl $0x53, %eax
ja 0x29159
movq -0x2d0(%rbp), %rax
leaq 0x3aa99(%rip), %rcx     # 0x63900
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0x22, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0x5c, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0x2f, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0x8, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0xc, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0xa, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0xd, (%rax)
jmp 0x2917d
movq -0x190(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x190(%rbp)
movb $0x9, (%rax)
jmp 0x2917d
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
addq $0x4, %rax
cmpq 0x18(%rcx), %rax
seta %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x28f78
jmp 0x28f90
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rsi
leaq -0x210(%rbp), %rdi
movl $0x4, %edx
callq 0x5d70
movq -0x210(%rbp), %rsi
movq -0x208(%rbp), %rdx
leaq -0x200(%rbp), %rdi
callq 0x2ac10
movq -0x200(%rbp), %rdi
movq -0x1f8(%rbp), %rsi
leaq -0x1ec(%rbp), %rdx
callq 0x403f0
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x28fec
jmp 0x29004
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x4, %rcx
movq %rcx, 0x10(%rax)
cmpl $0xd800, -0x1ec(%rbp)   # imm = 0xD800
jb 0x29137
cmpl $0xdbff, -0x1ec(%rbp)   # imm = 0xDBFF
ja 0x29137
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x5c, %eax
jne 0x29137
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl 0x1(%rax), %eax
cmpl $0x75, %eax
jne 0x29137
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rsi
addq $0x2, %rsi
leaq -0x238(%rbp), %rdi
movl $0x4, %edx
callq 0x5d70
movq -0x238(%rbp), %rsi
movq -0x230(%rbp), %rdx
leaq -0x228(%rbp), %rdi
callq 0x2ac10
movq -0x228(%rbp), %rdi
movq -0x220(%rbp), %rsi
leaq -0x212(%rbp), %rdx
callq 0x40300
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x290c6
jmp 0x290de
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movzwl -0x212(%rbp), %eax
cmpl $0xdc00, %eax           # imm = 0xDC00
jl 0x29135
movzwl -0x212(%rbp), %eax
cmpl $0xdfff, %eax           # imm = 0xDFFF
jg 0x29135
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x6, %rcx
movq %rcx, 0x10(%rax)
movl -0x1ec(%rbp), %eax
subl $0xd800, %eax           # imm = 0xD800
shll $0xa, %eax
addl $0x10000, %eax          # imm = 0x10000
movzwl -0x212(%rbp), %ecx
subl $0xdc00, %ecx           # imm = 0xDC00
addl %ecx, %eax
movl %eax, -0x1ec(%rbp)
jmp 0x29137
movq -0x190(%rbp), %rdi
movl -0x1ec(%rbp), %esi
callq 0x3d020
addq -0x190(%rbp), %rax
movq %rax, -0x190(%rbp)
jmp 0x2917d
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
movq 0x10(%rsi), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsi)
callq 0x2aba0
jmp 0x29a96
jmp 0x28df2
movzbl -0x1e5(%rbp), %eax
cmpl $0x22, %eax
jne 0x29190
jmp 0x291e2
movzbl -0x1e5(%rbp), %eax
cmpl $0x20, %eax
jge 0x291c0
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
movq 0x10(%rsi), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsi)
callq 0x2aba0
jmp 0x29a96
movb -0x1e5(%rbp), %cl
movq -0x190(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x190(%rbp)
movb %cl, (%rax)
jmp 0x28df2
jmp 0x291e4
movq -0x190(%rbp), %rax
movb $0x0, (%rax)
movq -0x188(%rbp), %rsi
movq -0x190(%rbp), %rdx
movq -0x188(%rbp), %rax
subq %rax, %rdx
leaq -0x258(%rbp), %rdi
callq 0x5d70
movq -0x258(%rbp), %rsi
movq -0x250(%rbp), %rdx
leaq -0x248(%rbp), %rdi
movl $0x1, %ecx
callq 0xa320
testb $0x1, -0x179(%rbp)
je 0x2928e
movq -0x2a0(%rbp), %rdi
callq 0x284e0
movzbl %al, %eax
cmpl $0x3a, %eax
je 0x29266
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rax
movl $0x9, (%rax)
movq -0x248(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x240(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movl $0x1, %esi
callq 0x285a0
testb $0x1, %al
jne 0x292bb
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rax
movl $0x4, (%rax)
movq -0x248(%rbp), %rcx
movq %rcx, 0x8(%rax)
movq -0x240(%rbp), %rcx
movq %rcx, 0x10(%rax)
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x5b, %eax
jne 0x2931c
movq -0x2a0(%rbp), %rdi
addq $0x28, %rdi
xorl %esi, %esi
callq 0x2ac50
movq -0x2b0(%rbp), %rdi
movl $0x6, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x5d, %eax
jne 0x29446
movq -0x2a0(%rbp), %rdi
addq $0x28, %rdi
callq 0x2abe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2d1(%rbp)
jne 0x2934d
jmp 0x293a9
movq -0x2a0(%rbp), %rdi
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x2e0(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x2e0(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0xa130
movq %rax, -0x268(%rbp)
movq %rdx, -0x260(%rbp)
leaq -0x268(%rbp), %rdi
callq 0xa160
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
setne %al
movb %al, -0x2d1(%rbp)
movb -0x2d1(%rbp), %al
testb $0x1, %al
jne 0x293b5
jmp 0x293cd
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movl $0x2, %esi
callq 0x285a0
testb $0x1, %al
jne 0x293fa
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x2e8(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x2e8(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x66f0
movq -0x2b0(%rbp), %rdi
movl $0x7, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x7b, %eax
jne 0x2948d
movq -0x2a0(%rbp), %rdi
addq $0x28, %rdi
movl $0x1, %esi
callq 0x2ac50
movq -0x2a0(%rbp), %rax
movq -0x2b0(%rbp), %rdi
movb $0x1, 0x20(%rax)
movl $0x8, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x7d, %eax
jne 0x295bd
jmp 0x2949f
movq -0x2a0(%rbp), %rdi
movb $0x0, 0x20(%rdi)
addq $0x28, %rdi
callq 0x2abe0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x2e9(%rbp)
jne 0x294c4
jmp 0x29520
movq -0x2a0(%rbp), %rdi
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x2f8(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x2f8(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0xa130
movq %rax, -0x278(%rbp)
movq %rdx, -0x270(%rbp)
leaq -0x278(%rbp), %rdi
callq 0xa160
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
setne %al
movb %al, -0x2e9(%rbp)
movb -0x2e9(%rbp), %al
testb $0x1, %al
jne 0x2952c
jmp 0x29544
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movl $0x2, %esi
callq 0x285a0
testb $0x1, %al
jne 0x29571
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2a0(%rbp), %rdi
movq %rdi, %rax
addq $0x28, %rax
movq %rax, -0x300(%rbp)
addq $0x28, %rdi
callq 0x9ee0
movq -0x300(%rbp), %rdi
movq %rax, %rsi
subq $0x1, %rsi
callq 0x66f0
movq -0x2b0(%rbp), %rdi
movl $0xa, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x2d, %eax
je 0x295de
movzbl -0x161(%rbp), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x295de
jmp 0x29887
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $-0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x10(%rax), %rcx
movq %rcx, -0x280(%rbp)
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x2961b
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x30, %eax
jne 0x29643
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x296a4
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x29672
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
jmp 0x29674
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x2968d
jmp 0x296a2
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x29674
jmp 0x296a4
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x2e, %eax
jne 0x29724
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x296f2
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
jmp 0x296f4
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x2970d
jmp 0x29722
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x296f4
jmp 0x29724
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x65, %eax
je 0x2974e
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x45, %eax
jne 0x297f4
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x2b, %eax
je 0x29780
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0x2d, %eax
jne 0x29793
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x297c2
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
jmp 0x297c4
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %edi
callq 0x29ac0
testb $0x1, %al
jne 0x297dd
jmp 0x297f2
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rcx
addq $0x1, %rcx
movq %rcx, 0x10(%rax)
jmp 0x297c4
jmp 0x297f4
movq -0x2a0(%rbp), %rdi
movq 0x10(%rdi), %rax
movq -0x280(%rbp), %rcx
subq %rcx, %rax
movq %rax, -0x288(%rbp)
movl $0x1, %esi
callq 0x285a0
testb $0x1, %al
jne 0x29836
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rax
movl $0x5, (%rax)
addq $0x8, %rax
movq %rax, -0x308(%rbp)
movq -0x280(%rbp), %rsi
movq -0x288(%rbp), %rdx
leaq -0x298(%rbp), %rdi
callq 0x5d70
movq -0x308(%rbp), %rdi
movq -0x298(%rbp), %rsi
movq -0x290(%rbp), %rdx
callq 0x2ac10
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x74, %eax
jne 0x29935
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
addq $0x3, %rax
cmpq 0x18(%rcx), %rax
ja 0x29935
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
addq $-0x1, %rax
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x8c(%rbp)
cmpl $0x65757274, -0x8c(%rbp) # imm = 0x65757274
jne 0x29935
movq -0x2a0(%rbp), %rdi
movq 0x10(%rdi), %rax
addq $0x3, %rax
movq %rax, 0x10(%rdi)
movl $0x1, %esi
callq 0x285a0
testb $0x1, %al
jne 0x2991a
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rdi
movl $0x1, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x66, %eax
jne 0x299df
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
addq $0x4, %rax
cmpq 0x18(%rcx), %rax
ja 0x299df
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x9c(%rbp)
cmpl $0x65736c61, -0x9c(%rbp) # imm = 0x65736C61
jne 0x299df
movq -0x2a0(%rbp), %rdi
movq 0x10(%rdi), %rax
addq $0x4, %rax
movq %rax, 0x10(%rdi)
movl $0x1, %esi
callq 0x285a0
testb $0x1, %al
jne 0x299c4
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rdi
movl $0x2, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movzbl -0x161(%rbp), %eax
cmpl $0x6e, %eax
jne 0x29a83
movq -0x2a0(%rbp), %rcx
movq 0x10(%rcx), %rax
addq $0x3, %rax
cmpq 0x18(%rcx), %rax
ja 0x29a83
movq -0x2a0(%rbp), %rax
movq 0x10(%rax), %rax
addq $-0x1, %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movl (%rax), %eax
movl %eax, -0xac(%rbp)
cmpl $0x6c6c756e, -0xac(%rbp) # imm = 0x6C6C756E
jne 0x29a83
movq -0x2a0(%rbp), %rdi
movq 0x10(%rdi), %rax
addq $0x3, %rax
movq %rax, 0x10(%rdi)
movl $0x1, %esi
callq 0x285a0
testb $0x1, %al
jne 0x29a6b
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
jmp 0x29a96
movq -0x2b0(%rbp), %rdi
movl $0x3, (%rdi)
addq $0x8, %rdi
callq 0x5f70
jmp 0x29a96
movq -0x2a0(%rbp), %rsi
movq -0x2b0(%rbp), %rdi
callq 0x2aba0
movq -0x2a8(%rbp), %rax
addq $0x310, %rsp            # imm = 0x310
popq %rbp
retq
nopw %cs:(%rax,%rax)