Function at 0x4fa180
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x70
mov dword [ebp - 0x1c], esp
mov dword [ebp - 0x10], 0xffffffff
mov dword [ebp - 0x14], 0x539340
mov edi, ecx
lea eax, [ebp - 0x18]
mov esi, edx
mov ecx, dword fs:[0]
mov dword [ebp - 0x18], ecx
mov dword fs:[0], eax
mov eax, dword [edx]
movzx eax, byte [eax + 0x14]
cmp al, 2
je 0x4fa1c3
and al, 1
je 0x4fa39c
mov ebx, dword [ebp + 8]
movzx eax, byte [ebx + 0x18]
cmp eax, 2
je 0x4fa1e5
lea ecx, [ebp - 0x6c]
cmp eax, 1
jne 0x4fa2cf
call fcn.004fe3a0
jmp 0x4fa2d4
movzx eax, byte [0x5b9430]
xor ecx, ecx
mov edx, 0x1818
call fcn.0051b940
test eax, eax
je 0x4fa3b0
movdqa xmm0, xmmword [0x5473a0]
mov ecx, 0xffffe7f0
mov dword [ebp - 0x24], esi
mov dword [ebp - 0x20], edi
nop word cs:[eax + eax]
nop dword [eax]
movdqu xmm2, xmmword [ecx + 0x568560]
pshufd xmm1, xmm2, 0xe8
pshufd xmm3, xmm2, 0xed
movdqa xmm4, xmm1
movdqa xmm2, xmm3
pxor xmm4, xmm0
pxor xmm2, xmm0
pcmpgtd xmm2, xmm4
movdqa xmm4, xmm2
movdqa xmm5, xmm2
pandn xmm5, xmm1
pand xmm1, xmm2
pand xmm2, xmm3
pandn xmm4, xmm3
por xmm1, xmm4
por xmm2, xmm5
punpckldq xmm1, xmm2
movdqu xmmword [eax + ecx + 0x1810], xmm1
add ecx, 0x10
jne 0x4fa220
lea ecx, [ebp - 0x4c]
mov dword [eax + 0x1810], 0xe0100
mov dword [eax + 0x1814], 0xe01ef
mov dword [ebp - 0x4c], 0x303
mov dword [ebp - 0x48], eax
mov dword [ebp - 0x44], 0x303
mov byte [ebp - 0x40], 0
mov dword [ebp - 0x10], 0
call fcn.004f6d50
movsd xmm0, qword [ebp - 0x4c]
movsd xmm1, qword [ebp - 0x44]
mov edi, dword [ebp - 0x20]
mov esi, dword [ebp - 0x24]
mov ebx, dword [ebp + 8]
movsd qword [ebp - 0x64], xmm1
movsd qword [ebp - 0x6c], xmm0
jmp 0x4fa2d4
call fcn.004fe250
mov eax, dword [esi + 8]
mov edx, dword [esi + 4]
lea esi, [ebp - 0x6c]
mov dword [ebp - 0x10], 0xffffffff
lea ecx, [ebp - 0x4c]
push esi
push ebx
push eax
call fcn.004fe4b0
add esp, 0xc
mov eax, dword [ebp - 0x4c]
cmp eax, 0x80000000
jne 0x4fa347
movsd xmm0, qword [ebp - 0x48]
movsd xmm1, qword [ebp - 0x40]
cmp byte [ebx + 0x19], 0
movsd qword [ebp - 0x5c], xmm0
movsd qword [ebp - 0x54], xmm1
je 0x4fa32b
lea ecx, [ebp - 0x5c]
mov dword [ebp - 0x10], 1
mov dword [ebp - 0x20], edi
call fcn.004f80b0
mov edi, dword [ebp - 0x20]
movsd xmm0, qword [ebp - 0x5c]
movsd xmm1, qword [ebp - 0x54]
movsd qword [edi + 0xc], xmm1
movsd qword [edi + 4], xmm0
mov dword [edi], 0x80000000
jmp 0x4fa38b
movsd xmm1, qword [ebp - 0x40]
movsd xmm0, qword [ebp - 0x48]
movsd xmm2, qword [ebp - 0x30]
mov ecx, dword [ebp - 0x28]
movsd qword [ebp - 0x74], xmm1
movsd xmm1, qword [ebp - 0x38]
movsd qword [ebp - 0x7c], xmm0
movsd qword [edi + 0x1c], xmm2
mov dword [edi + 0x24], ecx
movq xmm2, qword [ebp - 0x7c]
movsd qword [edi + 0x14], xmm1
movsd xmm1, qword [ebp - 0x74]
movq qword [edi + 4], xmm2
movsd qword [edi + 0xc], xmm1
mov dword [edi], eax
mov eax, dword [ebp - 0x18]
mov dword fs:[0], eax
add esp, 0x70
pop esi
pop edi
pop ebx
pop ebp
ret
mov ecx, str.assertion_failed:_self.flags__.unicode__8
mov edx, 0x28
push 0x5668b8
call fcn.0053bbd0
mov ecx, 4
mov edx, 0x1818
call fcn.0053b730
nop
push ebp
sub esp, 0xc
add ebp, 0xc
cmp dword [ebp - 0x4c], 0
je 0x4fa3de
push dword [ebp - 0x48]
push 0
push dword [0x5b93c8]
call dword [sym.imp.kernel32.dll_HeapFree]
add esp, 0xc
pop ebp
ret