Function at 0x4caa80
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x18
cmp dword [esp + 0x24], 0
xorps xmm0, xmm0
mov eax, dword [esp + 0x1c]
mov ecx, dword [esp + 0x20]
push ebx
push esi
movups xmmword [eax], xmm0
push edi
mov dword [esp + 0x20], eax
lea ebx, [eax + 0x10]
mov dword [esp + 0x18], ecx
movups xmmword [eax + 0x10], xmm0
jbe 0x4cac9c
mov eax, dword [esp + 0x30]
mov dword [esp + 0x1c], ebx
push ebp
nop word [eax + eax]
movups xmm1, xmmword [ecx]
movd ecx, xmm1
movaps xmm0, xmm1
psrldq xmm0, 4
mov edx, ecx
shr edx, 6
xor edx, ecx
and edx, 0xcc00cc
mov esi, edx
shl esi, 6
xor esi, ecx
xor esi, edx
mov ecx, esi
shr ecx, 0xc
xor ecx, esi
and ecx, 0xf0f0
mov edx, ecx
shl edx, 0xc
xor edx, ecx
movd ecx, xmm0
xor edx, esi
movaps xmm0, xmm1
mov dword [esp + 0x14], edx
mov edx, ecx
psrldq xmm0, 8
shr edx, 6
xor edx, ecx
psrldq xmm1, 0xc
and edx, 0xcc00cc
mov esi, edx
shl esi, 6
xor esi, ecx
xor esi, edx
mov ecx, esi
shr ecx, 0xc
xor ecx, esi
and ecx, 0xf0f0
mov edx, ecx
shl edx, 0xc
xor edx, ecx
movd ecx, xmm0
xor edx, esi
mov dword [esp + 0x10], edx
mov edx, ecx
shr edx, 6
xor edx, ecx
and edx, 0xcc00cc
mov esi, edx
shl esi, 6
xor esi, ecx
xor esi, edx
mov ecx, esi
shr ecx, 0xc
xor ecx, esi
and ecx, 0xf0f0
mov edx, ecx
shl edx, 0xc
xor edx, ecx
movd ecx, xmm1
xor edx, esi
mov dword [esp + 0x18], edx
mov edx, ecx
shr edx, 6
xor edx, ecx
and edx, 0xcc00cc
mov esi, edx
shl esi, 6
xor esi, ecx
xor esi, edx
mov edx, dword [esp + 0x18]
mov ecx, esi
shr ecx, 0xc
xor ecx, esi
and ecx, 0xf0f0
mov ebx, ecx
shl ebx, 0xc
xor ebx, ecx
movzx ecx, dl
xor ebx, esi
movzx edi, bl
shl edi, 8
or edi, ecx
mov ebp, dword [esp + 0x14]
mov ecx, dword [esp + 0x10]
movzx ecx, cl
shl edi, 8
or edi, ecx
shr ebp, 8
mov ecx, dword [esp + 0x14]
movzx ecx, cl
shl edi, 8
or edi, ecx
mov ecx, ebx
shr ecx, 8
movzx esi, cl
mov ecx, edx
shr ecx, 8
movzx ecx, cl
shl esi, 8
or esi, ecx
mov ecx, dword [esp + 0x10]
shr ecx, 8
movzx ecx, cl
shl esi, 8
or esi, ecx
mov ecx, dword [esp + 0x14]
shr ecx, 8
movzx ecx, cl
shl esi, 8
or esi, ecx
mov ecx, ebx
shr ecx, 0x10
and ebx, 0xff000000
movzx edx, cl
mov ecx, dword [esp + 0x18]
shr ecx, 0x10
movzx ecx, cl
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x10]
shr ecx, 0x10
movzx ecx, cl
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x14]
shr ecx, 0x10
movzx ecx, cl
shl edx, 8
or edx, ecx
mov ecx, dword [esp + 0x10]
and ecx, 0xff00ffff
or ecx, ebp
shr ecx, 8
mov dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x18]
and ecx, 0xff0000ff
or dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x10]
shr ecx, 8
or ecx, ebx
mov ebx, dword [esp + 0x20]
mov dword [ebx + 8], ecx
mov ecx, dword [esp + 0x1c]
mov dword [ebx - 0x10], edi
add ecx, 0x10
mov dword [ebx - 8], esi
mov dword [ebx], edx
add ebx, 4
mov dword [esp + 0x1c], ecx
mov dword [esp + 0x20], ebx
sub eax, 1
jne 0x4caac0
mov eax, dword [esp + 0x24]
pop ebp
lea ebx, [eax + 0x10]
mov esi, dword [eax]
mov edi, dword [eax + 4]
shr esi, 1
xor esi, edi
and esi, 0x55555555
xor edi, esi
mov dword [eax + 4], edi
mov edi, dword [eax + 0xc]
lea ecx, [esi + esi]
mov esi, dword [eax + 8]
xor dword [eax], ecx
shr esi, 1
xor esi, edi
and esi, 0x55555555
xor edi, esi
mov dword [eax + 0xc], edi
mov edi, dword [eax + 0x14]
lea ecx, [esi + esi]
mov esi, dword [ebx]
xor dword [eax + 8], ecx
shr esi, 1
xor esi, edi
and esi, 0x55555555
xor edi, esi
mov dword [eax + 0x14], edi
mov edi, dword [eax + 0x1c]
lea ecx, [esi + esi]
mov esi, dword [eax + 0x18]
xor dword [ebx], ecx
shr esi, 1
xor esi, edi
and esi, 0x55555555
lea ecx, [esi + esi]
xor dword [eax + 0x18], ecx
xor edi, esi
mov dword [eax + 0x1c], edi
pop edi
pop esi
pop ebx
add esp, 0x18
ret