Function at 0x500d00
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x10
mov eax, dword [ebp + 8]
mov edx, dword [ebp + 0xc]
lea esi, [eax + 3]
and esi, 0xfffffffc
mov ecx, esi
sub ecx, eax
mov eax, edx
sub eax, ecx
jb 0x500d28
cmp eax, 4
jae 0x500de3
xor ebx, ebx
test edx, edx
je 0x5010cc
mov esi, dword [ebp + 8]
cmp edx, 8
mov ecx, 0
jb 0x500dcb
movdqa xmm2, xmmword [0x6cdb60]
movdqa xmm3, xmmword [0x6cdb70]
mov ecx, edx
lea eax, [esi + 4]
pxor xmm0, xmm0
pxor xmm1, xmm1
and ecx, 0xfffffff8
mov edi, ecx
nop word cs:[eax + eax]
nop
movd xmm5, dword [eax - 4]
movd xmm4, dword [eax]
add eax, 8
add edi, 0xfffffff8
pcmpgtb xmm5, xmm2
pcmpgtb xmm4, xmm2
punpcklbw xmm5, xmm5
punpcklwd xmm5, xmm5
pand xmm5, xmm3
paddd xmm0, xmm5
punpcklbw xmm4, xmm4
punpcklwd xmm4, xmm4
pand xmm4, xmm3
paddd xmm1, xmm4
jne 0x500d70
paddd xmm1, xmm0
cmp ecx, edx
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd ebx, xmm1
je 0x5010cc
sub edx, ecx
add esi, ecx
nop
xor eax, eax
cmp byte [esi], 0xc0
setge al
inc esi
add ebx, eax
dec edx
jne 0x500dd0
jmp 0x5010cc
mov edx, eax
xor edi, edi
mov dword [ebp - 0x14], ecx
and edx, 3
cmp esi, dword [ebp + 8]
mov dword [ebp - 0x18], edx
mov edx, 0
je 0x500e1e
mov ebx, dword [ebp + 8]
xor edx, edx
mov ecx, ebx
sub ecx, esi
mov esi, ebx
nop word cs:[eax + eax]
nop
xor ebx, ebx
cmp byte [esi], 0xc0
setge bl
inc esi
add edx, ebx
inc ecx
jne 0x500e10
mov esi, dword [ebp + 8]
mov dword [ebp - 0x10], edx
mov edx, dword [ebp - 0x18]
add esi, dword [ebp - 0x14]
test edx, edx
je 0x500e4e
mov ebx, eax
xor edi, edi
and ebx, 0xfffffffc
add ebx, esi
nop word [eax + eax]
xor ecx, ecx
cmp byte [ebx], 0xc0
setge cl
inc ebx
add edi, ecx
dec edx
jne 0x500e40
add edi, dword [ebp - 0x10]
movdqa xmm2, xmmword [0x6cdb50]
shr eax, 2
pcmpeqd xmm7, xmm7
jmp 0x500ea8
mov eax, edx
shr edx, 8
mov ecx, dword [ebp - 0x18]
and eax, 0xff00ff
and edx, 0xff00ff
add edx, eax
mov eax, dword [ebp - 0x10]
mov edi, edx
shl edi, 0x10
add edi, edx
mov edx, esi
shr edi, 0x10
lea esi, [esi + eax*4]
add edi, ebx
mov ebx, eax
mov eax, ecx
sub eax, ebx
test bl, 3
jne 0x501062
mov ebx, edi
test eax, eax
je 0x5010cc
cmp eax, 0xc0
mov ecx, 0xc0
mov dword [ebp - 0x18], eax
cmovb ecx, eax
xor edx, edx
cmp ecx, 4
mov dword [ebp - 0x10], ecx
jb 0x500e70
mov ecx, dword [ebp - 0x10]
xor edx, edx
mov edi, esi
shr ecx, 2
lea eax, [ecx - 1]
and eax, 0xfffffff
cmp eax, 3
jb 0x501013
inc eax
mov edx, esi
pxor xmm3, xmm3
mov dword [ebp - 0x14], eax
and eax, 0xfffffffc
mov edi, eax
mov dword [ebp - 0x1c], eax
shl edi, 4
add edi, esi
mov esi, eax
mov eax, edx
nop word cs:[eax + eax]
nop dword [eax]
movdqu xmm2, xmmword [edx]
movdqu xmm1, xmmword [edx + 0x20]
movdqu xmm4, xmmword [edx + 0x10]
movdqu xmm7, xmmword [edx + 0x30]
add edx, 0x40
add esi, 0xfffffffc
movdqa xmm5, xmm2
movdqa xmm0, xmm1
punpckhdq xmm1, xmm7
punpckhdq xmm2, xmm4
punpckldq xmm5, xmm4
punpckldq xmm0, xmm7
pcmpeqd xmm7, xmm7
movdqa xmm4, xmm2
punpckhqdq xmm2, xmm1
movdqa xmm6, xmm5
punpckhqdq xmm5, xmm0
punpcklqdq xmm4, xmm1
movdqa xmm1, xmmword [0x6cdb50]
punpcklqdq xmm6, xmm0
movdqa xmm0, xmm6
psrld xmm6, 6
pxor xmm0, xmm7
psrld xmm0, 7
por xmm6, xmm0
movdqa xmm0, xmm5
psrld xmm5, 6
pxor xmm0, xmm7
pand xmm6, xmm1
psrld xmm0, 7
paddd xmm6, xmm3
movdqa xmm3, xmm2
psrld xmm2, 6
por xmm5, xmm0
movdqa xmm0, xmm4
pxor xmm3, xmm7
psrld xmm4, 6
pxor xmm0, xmm7
psrld xmm3, 7
pand xmm5, xmm1
psrld xmm0, 7
por xmm2, xmm3
por xmm4, xmm0
pand xmm2, xmm1
pand xmm4, xmm1
movdqa xmm3, xmm2
paddd xmm4, xmm5
paddd xmm4, xmm6
paddd xmm3, xmm4
jne 0x500f10
mov esi, dword [ebp - 0x1c]
pshufd xmm0, xmm3, 0xee
movdqa xmm2, xmmword [0x6cdb50]
paddd xmm0, xmm3
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
cmp dword [ebp - 0x14], esi
movd edx, xmm1
mov esi, eax
je 0x500e70
shl ecx, 4
add ecx, esi
nop dword [eax + eax]
movdqu xmm0, xmmword [edi]
add edi, 0x10
movdqa xmm1, xmm0
psrld xmm0, 6
pxor xmm1, xmm7
psrld xmm1, 7
por xmm0, xmm1
pand xmm0, xmm2
pshufd xmm1, xmm0, 0xee
paddd xmm1, xmm0
pshufd xmm0, xmm1, 0x55
paddd xmm0, xmm1
movd eax, xmm0
add edx, eax
cmp edi, ecx
jne 0x501020
jmp 0x500e70
and ebx, 0xfc
cmp ecx, 0xc0
lea eax, [edx + ebx*4]
mov edx, 0xc0
cmovb edx, ecx
xor ecx, ecx
and edx, 3
shl edx, 2
nop word cs:[eax + eax]
nop dword [eax + eax]
mov esi, dword [eax]
add eax, 4
mov ebx, esi
shr esi, 6
not ebx
shr ebx, 7
or esi, ebx
and esi, 0x1010101
add ecx, esi
add edx, 0xfffffffc
jne 0x501090
mov eax, ecx
shr ecx, 8
and eax, 0xff00ff
and ecx, 0xff00ff
add ecx, eax
mov ebx, ecx
shl ebx, 0x10
add ebx, ecx
shr ebx, 0x10
add ebx, edi
mov eax, ebx
add esp, 0x10
pop esi
pop edi
pop ebx
pop ebp
ret