// File: /workspace/github_cpp_makefile_star2_O3/mbourand[P]webserv/srcs/Utils/CGI.cpp
// Function: CGI::CGI(Request const&, ConfigContext const&, ServerSocket const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
CGI::CGI(const Request& request, const ConfigContext& config, const ServerSocket& socket, const std::string& realPath)
	: m_realPath(realPath)
{
	std::ostringstream	convert;
	int					code;
	Header				*auth_type = NULL;
	Header				*content_type = NULL;
	std::string			extension;

	if ((code = ParseURI(request, config)) != 0)
		throw CGI::CGIException("ParseURI failed.", code);
	for (Request::HeadersVector::const_iterator it = request._headers.begin(); it != request._headers.end(); it++)
	{
		if ((*it)->getType() == AuthorizationHeader().getType())
			auth_type = *it;
		else if ((*it)->getType() == ContentTypeHeader().getType())
			content_type = *it;
	}
	std::string document_root = ft::simplify_path(config.getParam("root").front(), false, 0);
	if (ft::contains(m_env_Script_Name, '.'))
		extension = m_env_Script_Name.substr(m_env_Script_Name.find('.'));
	if (!extension.empty() && config.getCGIExtensions().find(extension) != config.getCGIExtensions().end())
	{
		m_args.push_back(config.getCGIExtensions().find(extension)->second); // c'est le chemin vers l'exécutable cgi
		m_args.push_back(document_root + m_env_Script_Name);
		if (extension == ".php")
			m_env.push_back("REDIRECT_STATUS=200");
	}
	else
	{
		m_args.push_back(document_root + m_env_Script_Name);
		if (!m_env_Path_Info.empty())
			m_args.push_back(document_root + m_env_Path_Info);
	}
	if (auth_type)
	{
		m_env.push_back("AUTH_TYPE="+auth_type->getValue().substr(0, auth_type->getValue().find(' ')));
		m_env.push_back("REMOTE_IDENT="+auth_type->getValue().substr(auth_type->getValue().find(' ')+1));
		m_env.push_back("REMOTE_USER="+auth_type->getValue().substr(auth_type->getValue().find(' ')+1));
	}
	if (request._method->requestHasBody() && !request._body.empty())
	{
		convert << request._body.size();
		m_env.push_back("CONTENT_LENGTH="+convert.str());
		if (content_type)
			m_env.push_back("CONTENT_TYPE="+content_type->getValue());
		else
			m_env.push_back("CONTENT_TYPE=US-ASCII");
	}
	m_env.push_back("GATEWAY_INTERFACE=CGI/1.1");
	if (m_args[0].find("ubuntu_cgi_tester") != std::string::npos)
		m_env.push_back("PATH_INFO="+request._url._path);
	else if (!m_env_Path_Info.empty())
		m_env.push_back("PATH_INFO="+m_env_Path_Info);
	if (document_root.find("..") != std::string::npos)
	{
		chdir(document_root.substr(0, document_root.find_last_of('/')).c_str());
		document_root = ft::get_cwd();
		chdir(g_webserv.cwd.c_str());
	}
	m_env.push_back("PATH_TRANSLATED=" + document_root + m_env_Script_Name);
	if (!request._url._query.empty())
		m_env.push_back("QUERY_STRING="+request._url._query);
	m_env.push_back("REMOTE_ADDR="+socket.getIPAddress());
	m_env.push_back("REQUEST_METHOD="+request._method->getType());
	m_env.push_back("REQUEST_URI="+request._url._path);
	m_env.push_back("SCRIPT_NAME="+m_env_Script_Name);
	m_env.push_back("SERVER_NAME="+config.getNames().front());
	m_env.push_back("SERVER_PORT="+socket.getServerPort_Str());
	m_env.push_back("SERVER_PROTOCOL=HTTP/1.1");
	m_env.push_back("SERVER_SOFTWARE=Webserv");
	add_http_headers(request._headers);
	convert.str("");
	convert << socket.GetSocket();
	m_tmpfilename = "/tmp/webserv_" + convert.str() + "-";
	convert.str("");
	struct timeval	tv;
	gettimeofday(&tv, NULL);
	convert << tv.tv_usec;
	m_tmpfilename += convert.str() + ".tmp";
	this->execute(request._body);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
movq %rcx, 0x98(%rsp)
movq %rdx, 0xa8(%rsp)
movq %rsi, 0x48(%rsp)
movq %rdi, %r15
leaq 0x10(%rdi), %rbx
movq %rbx, (%rdi)
xorl %eax, %eax
movq %rax, 0x8(%rdi)
movb %al, 0x10(%rdi)
leaq 0x20(%rdi), %r14
leaq 0x30(%rdi), %r12
movq %r12, 0x20(%rdi)
movq %rax, 0x28(%rdi)
movb %al, 0x30(%rdi)
leaq 0x40(%rdi), %rcx
movq %rcx, 0x68(%rsp)
leaq 0x50(%rdi), %rbp
movq %rbp, 0x40(%rdi)
movq %rax, 0x48(%rdi)
movb %al, 0x50(%rdi)
leaq 0x70(%rdi), %rcx
movq %rcx, 0x118(%rsp)
movq %rcx, 0x60(%rdi)
movq %rax, 0x68(%rdi)
movb %al, 0x70(%rdi)
leaq 0x90(%rdi), %rcx
movq %rcx, 0x110(%rsp)
movq %rcx, 0x80(%rdi)
movq %rax, 0x88(%rdi)
movb %al, 0x90(%rdi)
leaq 0xb0(%rdi), %rcx
movq %rcx, 0x108(%rsp)
movq %rcx, 0xa0(%rdi)
movq %rax, 0xa8(%rdi)
movb %al, 0xb0(%rdi)
leaq 0xd0(%rdi), %rax
movq %rax, 0x100(%rsp)
movq %rax, 0xc0(%rdi)
movq (%r8), %rsi
movq 0x8(%r8), %rdx
addq %rsi, %rdx
leaq 0x60(%rdi), %rax
movq %rax, 0x90(%rsp)
addq $0xc0, %rdi
movq %rdi, 0xf8(%rsp)
callq 0x8a92
leaq 0xe0(%r15), %rax
movq %rax, 0x50(%rsp)
leaq 0xf8(%r15), %rax
movq %rax, 0x20(%rsp)
xorps %xmm0, %xmm0
movups %xmm0, 0x100(%r15)
movups %xmm0, 0xf0(%r15)
movups %xmm0, 0xe0(%r15)
leaq 0x140(%rsp), %rdi
callq 0x75e0
leaq 0xe8(%rsp), %rax
movq %rax, -0x10(%rax)
movq $0x0, -0x8(%rax)
movb $0x0, (%rax)
movq %r15, %rdi
movq 0x48(%rsp), %r13
movq %r13, %rsi
movq 0xa8(%rsp), %rdx
callq 0x14aa8
movq %rbp, 0x78(%rsp)
movq %r14, 0x60(%rsp)
movq %r12, 0x80(%rsp)
movq %r15, 0x70(%rsp)
movq %rbx, 0x88(%rsp)
movq 0x140(%r13), %r14
cmpq 0x148(%r13), %r14
je 0x13840
movq $0x0, 0xa0(%rsp)
movq %rsp, %rbp
leaq 0xb0(%rsp), %r12
leaq 0x28(%rsp), %r15
movq $0x0, 0x58(%rsp)
movq (%r14), %rsi
movq (%rsi), %rax
movq %rbp, %rdi
callq *0x10(%rax)
movq %r12, %rdi
callq 0x83f4
movq %r15, %rdi
movq %r12, %rsi
callq 0x849a
movq 0x8(%rsp), %rdx
cmpq 0x30(%rsp), %rdx
jne 0x13729
movq 0x28(%rsp), %rbx
testq %rdx, %rdx
je 0x13733
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x74c0
testl %eax, %eax
sete %r13b
jmp 0x13736
movq 0x28(%rsp), %rbx
xorl %r13d, %r13d
jmp 0x13736
movb $0x1, %r13b
leaq 0x38(%rsp), %rax
cmpq %rax, %rbx
je 0x13750
movq 0x38(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x74b0
movq %r12, %rdi
callq 0x8434
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x13773
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
testb %r13b, %r13b
je 0x13785
movq (%r14), %rax
movq %rax, 0x58(%rsp)
jmp 0x13828
movq (%r14), %rsi
movq (%rsi), %rax
movq %rbp, %rdi
callq *0x10(%rax)
movq %r12, %rdi
callq 0x87d4
movq %r15, %rdi
movq %r12, %rsi
callq 0x887a
movq 0x8(%rsp), %rdx
cmpq 0x30(%rsp), %rdx
jne 0x137ce
movq 0x28(%rsp), %rbx
testq %rdx, %rdx
je 0x137d8
movq (%rsp), %rdi
movq %rbx, %rsi
callq 0x74c0
testl %eax, %eax
sete %r13b
jmp 0x137db
movq 0x28(%rsp), %rbx
xorl %r13d, %r13d
jmp 0x137db
movb $0x1, %r13b
leaq 0x38(%rsp), %rax
cmpq %rax, %rbx
je 0x137f5
movq 0x38(%rsp), %rsi
incq %rsi
movq %rbx, %rdi
callq 0x74b0
movq %r12, %rdi
callq 0x8814
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x13818
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
testb %r13b, %r13b
je 0x13828
movq (%r14), %rax
movq %rax, 0xa0(%rsp)
addq $0x8, %r14
movq 0x48(%rsp), %rax
cmpq 0x148(%rax), %r14
jne 0x136e0
jmp 0x13855
movq $0x0, 0x58(%rsp)
movq $0x0, 0xa0(%rsp)
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x2700f(%rip), %rsi     # 0x3a874
leaq 0x2700c(%rip), %rdx     # 0x3a878
movq %rsp, %rdi
callq 0x80f4
movq %rsp, %rsi
movq 0xa8(%rsp), %r14
movq %r14, %rdi
movq 0x70(%rsp), %r13
callq 0x2b17e
movq 0x58(%rsp), %r12
movq (%rax), %rsi
addq $0x10, %rsi
leaq 0xb0(%rsp), %rdi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x1d26b
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x138bf
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdx
movb $0x2e, (%rdx)
movq 0x40(%r13), %rdi
movq 0x48(%r13), %rsi
addq %rdi, %rsi
callq 0xf389
movq 0x40(%r13), %rcx
addq 0x48(%r13), %rcx
cmpq %rcx, %rax
je 0x13933
movq 0x68(%rsp), %rbx
movq %rbx, %rdi
movl $0x2e, %esi
xorl %edx, %edx
callq 0x75c0
movq %rsp, %rdi
movq %rbx, %rsi
movq %rax, %rdx
movq $-0x1, %rcx
callq 0x74d0
leaq 0xd8(%rsp), %rdi
movq %rsp, %rbx
movq %rbx, %rsi
callq 0x7590
movq (%rbx), %rdi
cmpq %r15, %rdi
je 0x13933
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
cmpq $0x0, 0xe0(%rsp)
je 0x13a17
movq %r14, %rdi
callq 0x2b14c
leaq 0xd8(%rsp), %rsi
movq %rax, %rdi
callq 0xf300
movq %rax, %rbx
movq %r14, %rdi
callq 0x2b14c
addq $0x8, %rax
cmpq %rax, %rbx
je 0x13a17
movq %r14, %rdi
callq 0x2b14c
leaq 0xd8(%rsp), %rsi
movq %rax, %rdi
callq 0xf300
addq $0x40, %rax
movq 0x50(%rsp), %rdi
movq %rax, %rsi
callq 0x16870
movq %rsp, %rdi
leaq 0xb0(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xe3a9
movq %rsp, %rsi
movq 0x50(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x139d3
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x270bf(%rip), %rsi     # 0x3aa99
leaq 0xd8(%rsp), %rdi
callq 0x7180
testl %eax, %eax
jne 0x13a91
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x270a2(%rip), %rsi     # 0x3aa9e
leaq 0x270ae(%rip), %rdx     # 0x3aab1
callq 0x80f4
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
jmp 0x13a7b
movq %rsp, %rdi
leaq 0xb0(%rsp), %rsi
movq 0x68(%rsp), %rdx
callq 0xe3a9
movq %rsp, %rsi
movq 0x50(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13a4f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
cmpq $0x0, 0x68(%r13)
je 0x13a91
movq %rsp, %rdi
leaq 0xb0(%rsp), %rsi
movq 0x90(%rsp), %rdx
callq 0xe3a9
movq %rsp, %rsi
movq 0x50(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13a91
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
testq %r12, %r12
je 0x13d0c
movq %r12, %rdi
callq 0x8e50
movq %rax, %rbx
movq %r12, %rdi
callq 0x8e50
movq %rax, %rdi
movl $0x20, %esi
xorl %edx, %edx
callq 0x75c0
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x74d0
leaq 0x26fdd(%rip), %rcx     # 0x3aab2
leaq 0x28(%rsp), %rdi
movl $0xa, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x13b0a
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x13b11
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13b4b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x38(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x13b67
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x58(%rsp), %rdi
callq 0x8e50
movq %rax, %rbx
movq 0x58(%rsp), %rdi
callq 0x8e50
movq %rax, %rdi
movl $0x20, %esi
xorl %edx, %edx
callq 0x75c0
leaq 0x1(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
movq $-0x1, %rcx
callq 0x74d0
leaq 0x26f11(%rip), %rcx     # 0x3aabd
leaq 0x28(%rsp), %rdi
movl $0xd, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x13be1
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x13be8
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13c22
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x13c39
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x58(%rsp), %rbp
movq %rbp, %rdi
callq 0x8e50
movq %rax, %rbx
movq %rbp, %rdi
callq 0x8e50
movq %rax, %rdi
movl $0x20, %esi
xorl %edx, %edx
callq 0x75c0
leaq 0x1(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rbx, %rsi
movq $-0x1, %rcx
callq 0x74d0
leaq 0x26e4c(%rip), %rcx     # 0x3aacb
leaq 0x28(%rsp), %rdi
movl $0xc, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x13cb4
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x13cbb
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13cf5
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x13d0c
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x48(%rsp), %rax
movq 0x28(%rax), %rdi
movq (%rdi), %rax
callq *0x40(%rax)
testb %al, %al
je 0x13e5e
movq 0x48(%rsp), %rax
movq 0x160(%rax), %rsi
testq %rsi, %rsi
je 0x13e5e
leaq 0x140(%rsp), %rdi
callq 0x7330
leaq 0x148(%rsp), %rsi
leaq 0x28(%rsp), %rdi
callq 0x7710
leaq 0x26d7a(%rip), %rcx     # 0x3aad8
leaq 0x28(%rsp), %rdi
movl $0xf, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x13d93
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x13d9a
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13dd4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x13def
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0xa0(%rsp), %rdi
testq %rdi, %rdi
je 0x13e22
callq 0x8e50
leaq 0x26ce0(%rip), %rsi     # 0x3aae8
movq %rsp, %rdi
movq %rax, %rdx
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
jmp 0x13e48
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x26cc7(%rip), %rsi     # 0x3aaf6
leaq 0x26cd5(%rip), %rdx     # 0x3ab0b
callq 0x80f4
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13e5e
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x26ca1(%rip), %rsi     # 0x3ab0c
leaq 0x26cb3(%rip), %rdx     # 0x3ab25
callq 0x80f4
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13e9a
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x50(%rsp), %rax
movq (%rax), %rdi
leaq 0x26c7d(%rip), %rsi     # 0x3ab26
movl $0x11, %ecx
xorl %edx, %edx
callq 0x77f0
cmpq $-0x1, %rax
je 0x13ee5
movq 0x48(%rsp), %rax
leaq 0xb8(%rax), %rdx
leaq 0x26c6a(%rip), %rsi     # 0x3ab38
movq %rsp, %rdi
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
jmp 0x13f10
cmpq $0x0, 0x68(%r13)
je 0x13f26
leaq 0x26c45(%rip), %rsi     # 0x3ab38
movq %rsp, %rdi
movq 0x90(%rsp), %rdx
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13f26
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x29453(%rip), %rsi     # 0x3d380
leaq 0xb0(%rsp), %rdi
movl $0x2, %ecx
xorl %edx, %edx
callq 0x77f0
cmpq $-0x1, %rax
je 0x13fd6
leaq 0xb0(%rsp), %rbx
movq %rbx, %rdi
movl $0x2f, %esi
movq $-0x1, %rdx
callq 0x7900
movq %rsp, %rdi
movq %rbx, %rsi
xorl %edx, %edx
movq %rax, %rcx
callq 0x74d0
movq (%rsp), %rdi
callq 0x7670
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x13f96
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdi
callq 0x1ce54
leaq 0xb0(%rsp), %rdi
movq %rsp, %rbx
movq %rbx, %rsi
callq 0x7590
movq (%rbx), %rdi
cmpq %r15, %rdi
je 0x13fc6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x3a59b(%rip), %rax     # 0x4e568
movq 0x48(%rax), %rdi
callq 0x7670
leaq 0x26b66(%rip), %rsi     # 0x3ab43
leaq 0x28(%rsp), %rdi
leaq 0xb0(%rsp), %rdx
callq 0xe2cb
movq 0x40(%r13), %rsi
movq 0x48(%r13), %rdx
leaq 0x28(%rsp), %rdi
callq 0x7190
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x14022
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x14029
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x14063
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x38(%rsp), %r12
movq -0x10(%r12), %rdi
cmpq %r12, %rdi
je 0x1407f
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x48(%rsp), %rax
cmpq $0x0, 0xe0(%rax)
je 0x140cc
movq 0x48(%rsp), %rax
leaq 0xd8(%rax), %rdx
leaq 0x26ab3(%rip), %rsi     # 0x3ab54
movq %rsp, %rdi
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x140cc
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x28(%rsp), %rdi
movq 0x98(%rsp), %rsi
callq 0x123b0
leaq 0x26a7d(%rip), %rcx     # 0x3ab62
leaq 0x28(%rsp), %rdi
movl $0xc, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1411a
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x14121
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1415b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x14172
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x48(%rsp), %rax
movq 0x28(%rax), %rsi
movq (%rsi), %rax
leaq 0x28(%rsp), %rdi
callq *0x10(%rax)
leaq 0x269e2(%rip), %rcx     # 0x3ab6f
leaq 0x28(%rsp), %rdi
movl $0xf, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x141c2
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x141c9
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x14203
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x1421a
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x48(%rsp), %rax
leaq 0xb8(%rax), %rdx
leaq 0x26952(%rip), %rsi     # 0x3ab7f
movq %rsp, %rdi
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x14258
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x2692d(%rip), %rsi     # 0x3ab8c
movq %rsp, %rdi
movq 0x68(%rsp), %rdx
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1428f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %r14, %rdi
callq 0x2b160
movq (%rax), %rdx
addq $0x10, %rdx
leaq 0x268f4(%rip), %rsi     # 0x3ab99
movq %rsp, %rdi
callq 0xe2cb
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x142d0
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x28(%rsp), %rdi
movq 0x98(%rsp), %rsi
callq 0x1238c
leaq 0x268bd(%rip), %rcx     # 0x3aba6
leaq 0x28(%rsp), %rdi
movl $0xc, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x1431e
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x14325
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rsi
movq %rdx, 0x8(%rsi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1435f
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x14376
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x26830(%rip), %rsi     # 0x3abb3
leaq 0x26841(%rip), %rdx     # 0x3abcb
callq 0x80f4
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x143b2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x2680d(%rip), %rsi     # 0x3abcc
leaq 0x2681d(%rip), %rdx     # 0x3abe3
callq 0x80f4
movq %rsp, %rsi
movq 0x20(%rsp), %rdi
callq 0x16bba
movq 0x48(%rsp), %rax
leaq 0x140(%rax), %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x143fa
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %r13, %rdi
movq %rbx, %rsi
callq 0x14c74
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x26989(%rip), %rdx     # 0x3ad9b
movq %rdx, %rsi
callq 0x80f4
leaq 0x148(%rsp), %r14
movq %rsp, %rsi
movq %r14, %rdi
callq 0x7690
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x14443
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x98(%rsp), %rdi
callq 0x12bfe
leaq 0x140(%rsp), %rdi
movl %eax, %esi
callq 0x77e0
leaq 0x120(%rsp), %rdi
movq %r14, %rsi
callq 0x7710
leaq 0x2676e(%rip), %rcx     # 0x3abe4
leaq 0x120(%rsp), %rdi
movl $0xd, %r8d
xorl %esi, %esi
xorl %edx, %edx
callq 0x7500
movq %r12, 0x28(%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x144b0
movq %rdx, 0x28(%rsp)
movq (%rcx), %rdx
movq %rdx, 0x38(%rsp)
jmp 0x144b8
movups (%rcx), %xmm0
movups %xmm0, (%r12)
movq 0x8(%rax), %rdx
leaq 0x28(%rsp), %rdi
movq %rdx, 0x8(%rdi)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
leaq 0x2671d(%rip), %rsi     # 0x3abf8
callq 0x78d0
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x14501
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x14508
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rsp, %rbx
movq %rdx, 0x8(%rbx)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x7590
movq (%rbx), %rdi
cmpq %r15, %rdi
je 0x14544
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x1455b
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x130(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1457c
movq 0x130(%rsp), %rsi
incq %rsi
callq 0x74b0
movq %rsp, %rdi
movq %r15, (%rdi)
leaq 0x26812(%rip), %rdx     # 0x3ad9b
movq %rdx, %rsi
callq 0x80f4
movq %rsp, %rsi
movq %r14, %rdi
callq 0x7690
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x145b2
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
leaq 0x120(%rsp), %rbx
movq %rbx, %rdi
xorl %esi, %esi
callq 0x7740
movq 0x8(%rbx), %rsi
leaq 0x140(%rsp), %rdi
callq 0x7470
leaq 0x28(%rsp), %rdi
movq %r14, %rsi
callq 0x7710
leaq 0x26609(%rip), %rsi     # 0x3abf2
leaq 0x28(%rsp), %rdi
callq 0x78d0
movq %r15, (%rsp)
movq (%rax), %rdx
movq %rax, %rcx
addq $0x10, %rcx
cmpq %rcx, %rdx
je 0x14614
movq %rdx, (%rsp)
movq (%rcx), %rdx
movq %rdx, 0x10(%rsp)
jmp 0x1461b
movups (%rcx), %xmm0
movups %xmm0, (%r15)
movq 0x8(%rax), %rdx
movq %rdx, 0x8(%rsp)
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movb $0x0, 0x10(%rax)
movq (%rsp), %rsi
movq 0x8(%rsp), %rdx
movq 0x60(%rsp), %rdi
callq 0x7190
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1465c
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
movq 0x48(%rsp), %rbx
je 0x14678
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
addq $0x158, %rbx            # imm = 0x158
movq %r13, %rdi
movq %rbx, %rsi
callq 0x155ea
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x146ab
movq 0xc0(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x146d0
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x398c9(%rip), %rsi     # 0x4dfa0
leaq 0x140(%rsp), %rdi
callq 0x72b0
leaq 0x1b0(%rsp), %rdi
callq 0x71c0
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148a4
jmp 0x148f9
jmp 0x1486f
jmp 0x1488a
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x1483d
jmp 0x14858
jmp 0x1483d
jmp 0x14858
jmp 0x1486f
jmp 0x1488a
jmp 0x148f9
jmp 0x148f9
jmp 0x1483d
jmp 0x14858
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
movq %rax, %r13
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
je 0x147d6
movq 0x38(%rsp), %rsi
incq %rsi
callq 0x74b0
jmp 0x147d6
movq %rax, %r13
leaq 0x130(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x148fc
movq 0x130(%rsp), %rsi
jmp 0x148b5
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x1483d
jmp 0x14858
jmp 0x148f9
jmp 0x148a4
jmp 0x148a4
jmp 0x148f9
jmp 0x148a4
jmp 0x148f9
jmp 0x1483d
jmp 0x14858
jmp 0x148f9
movq %rax, %r13
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1485b
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
jmp 0x1485b
movq %rax, %r13
movq 0x28(%rsp), %rdi
cmpq %r12, %rdi
jne 0x1489b
jmp 0x148fc
jmp 0x148f9
movq %rax, %r13
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x1488d
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
jmp 0x1488d
movq %rax, %r13
leaq 0x38(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x148fc
movq 0x38(%rsp), %rsi
jmp 0x148b5
jmp 0x148f9
movq %rax, %r13
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x148fc
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
jmp 0x148fc
jmp 0x148f9
jmp 0x148f9
jmp 0x1492d
movq %rax, %r13
jmp 0x14981
movq %rax, %r13
jmp 0x149c7
movq %rax, %r13
jmp 0x149fe
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
jmp 0x148f9
movq %rax, %r13
movq (%rsp), %rdi
cmpq %r15, %rdi
jne 0x14955
jmp 0x14962
movq %rax, %r13
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x14962
movq 0xc0(%rsp), %rsi
jmp 0x1495a
jmp 0x14932
jmp 0x1492d
movq %rax, %r13
leaq 0xb0(%rsp), %rdi
callq 0x8814
jmp 0x14947
movq %rax, %r13
jmp 0x14962
movq %rax, %r13
jmp 0x14947
movq %rax, %r13
leaq 0xb0(%rsp), %rdi
callq 0x8434
movq (%rsp), %rdi
leaq 0x10(%rsp), %rax
cmpq %rax, %rdi
je 0x14962
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x88(%rsp), %rbx
movq 0x70(%rsp), %r15
movq 0x80(%rsp), %r12
movq 0x60(%rsp), %r14
movq 0x78(%rsp), %rbp
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x149a6
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x74b0
movq 0x395f3(%rip), %rsi     # 0x4dfa0
leaq 0x140(%rsp), %rdi
callq 0x72b0
leaq 0x1b0(%rsp), %rdi
callq 0x71c0
movq 0x20(%rsp), %rdi
callq 0x168ae
movq 0x50(%rsp), %rdi
callq 0x168ae
movq 0xf8(%rsp), %rax
movq (%rax), %rdi
movq 0x100(%rsp), %rax
cmpq %rax, %rdi
je 0x149fe
movq (%rax), %rsi
incq %rsi
callq 0x74b0
movq 0xa0(%r15), %rdi
movq 0x108(%rsp), %rax
cmpq %rax, %rdi
je 0x14a1d
movq (%rax), %rsi
incq %rsi
callq 0x74b0
movq 0x80(%r15), %rdi
movq 0x110(%rsp), %rax
cmpq %rax, %rdi
je 0x14a3c
movq (%rax), %rsi
incq %rsi
callq 0x74b0
movq 0x90(%rsp), %rax
movq (%rax), %rdi
movq 0x118(%rsp), %rax
cmpq %rax, %rdi
je 0x14a5f
movq (%rax), %rsi
incq %rsi
callq 0x74b0
movq 0x68(%rsp), %rax
movq (%rax), %rdi
cmpq %rbp, %rdi
je 0x14a78
movq (%rbp), %rsi
incq %rsi
callq 0x74b0
movq (%r14), %rdi
cmpq %r12, %rdi
je 0x14a8c
movq (%r12), %rsi
incq %rsi
callq 0x74b0
movq (%r15), %rdi
cmpq %rbx, %rdi
je 0x14a9f
movq (%rbx), %rsi
incq %rsi
callq 0x74b0
movq %r13, %rdi
callq 0x7810
nop