Function at 0x54d040
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], 0x579af0
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 0x54d083
and al, 1
je 0x54d25c
mov ebx, dword [ebp + 8]
movzx eax, byte [ebx + 0x18]
cmp eax, 2
je 0x54d0a5
lea ecx, [ebp - 0x6c]
cmp eax, 1
jne 0x54d18f
call fcn.00551260
jmp 0x54d194
movzx eax, byte [0x5fd2ec]
xor ecx, ecx
mov edx, 0x1818
call fcn.0056a9f0
test eax, eax
je 0x54d270
movdqa xmm0, xmmword [0x589850]
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 + 0x5aeba0]
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 0x54d0e0
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.00549b80
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 0x54d194
call fcn.00551110
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.00551370
add esp, 0xc
mov eax, dword [ebp - 0x4c]
cmp eax, 0x80000000
jne 0x54d207
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 0x54d1eb
lea ecx, [ebp - 0x5c]
mov dword [ebp - 0x10], 1
mov dword [ebp - 0x20], edi
call fcn.0054aee0
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 0x54d24b
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__t
mov edx, 0x28
push 0x5acef8
call fcn.0057f7d0
mov ecx, 4
mov edx, 0x1818
call fcn.0057f230
nop
push ebp
sub esp, 0xc
add ebp, 0xc
cmp dword [ebp - 0x4c], 0
je 0x54d29e
push dword [ebp - 0x48]
push 0
push dword [0x5fd290]
call dword [sym.imp.kernel32.dll_HeapFree]
add esp, 0xc
pop ebp
ret