Function at 0x1006a610
Capabilities:
Encode data using xor

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff0
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x38
mov eax, dword [ebx + 0x10]
mov dword [ebp - 0x10], ecx
push esi
push edi
test ecx, ecx
je 0x1006a9a1
test edx, edx
je 0x1006a9a1
mov edi, dword [ebx + 8]
test edi, edi
je 0x1006a9a1
mov esi, dword [ebx + 0xc]
test esi, esi
jle 0x1006a9a1
test eax, eax
je 0x1006a9a1
cmp dword [ebx + 0x14], 0
je 0x1006a9a1
cmp dword [eax], 0
jne 0x1006a9a1
mov eax, dword [edx + 0x2c]
test eax, eax
jne 0x1006a736
lea eax, [esi + 0x50]
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x1006a974
xor ecx, ecx
cmp esi, 0x40
jb 0x1006a719
lea edx, [esi + 0x4f]
add edx, eax
add eax, 0x50
mov dword [ebp - 0x10], edx
lea edx, [edi - 1]
add edx, esi
cmp eax, edx
ja 0x1006a6b7
cmp dword [ebp - 0x10], edi
jae 0x1006a716
mov eax, esi
and eax, 0x8000003f
jns 0x1006a6c5
dec eax
or eax, 0xffffffc0
inc eax
movups xmm1, xmmword [0x102ca420]
mov edx, esi
sub edx, eax
mov eax, dword [ebp - 8]
movups xmm0, xmmword [edi + ecx]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x50], xmm0
movups xmm0, xmmword [edi + ecx + 0x10]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x60], xmm0
movups xmm0, xmmword [edi + ecx + 0x20]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x70], xmm0
movups xmm0, xmmword [edi + ecx + 0x30]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x80], xmm0
add ecx, 0x40
cmp ecx, edx
jl 0x1006a6d3
jmp 0x1006a719
mov eax, dword [ebp - 8]
cmp ecx, esi
jge 0x1006a959
lea edx, [eax + 0x50]
mov al, byte [ecx + edi]
not al
mov byte [edx + ecx], al
inc ecx
cmp ecx, esi
jl 0x1006a724
jmp 0x1006a959
cmp eax, 1
jne 0x1006a816
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
movsx eax, al
movd xmm0, eax
lea eax, [esi + 0x50]
punpcklbw xmm0, xmm0
punpcklwd xmm0, xmm0
pshufd xmm0, xmm0, 0
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
movaps xmmword [ebp - 0x30], xmm0
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x1006a974
xor edx, edx
cmp esi, 0x40
jb 0x1006a7f6
lea ecx, [esi + 0x4f]
add ecx, eax
add eax, 0x50
mov dword [ebp - 0x10], ecx
lea ecx, [edi - 1]
add ecx, esi
cmp eax, ecx
ja 0x1006a797
cmp dword [ebp - 0x10], edi
jae 0x1006a7f3
mov eax, esi
and eax, 0x8000003f
jns 0x1006a7a5
dec eax
or eax, 0xffffffc0
inc eax
movaps xmm1, xmmword [ebp - 0x30]
mov ecx, esi
sub ecx, eax
mov eax, dword [ebp - 8]
movups xmm0, xmmword [edi + edx]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x50], xmm0
movups xmm0, xmmword [edi + edx + 0x10]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x60], xmm0
movups xmm0, xmmword [edi + edx + 0x20]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x70], xmm0
movups xmm0, xmmword [edi + edx + 0x30]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x80], xmm0
add edx, 0x40
cmp edx, ecx
jl 0x1006a7b0
jmp 0x1006a7f6
mov eax, dword [ebp - 8]
cmp edx, esi
jge 0x1006a959
lea ecx, [eax + 0x50]
mov ah, byte [ebp - 1]
mov al, byte [edx + edi]
xor al, ah
mov byte [ecx + edx], al
inc edx
cmp edx, esi
jl 0x1006a804
jmp 0x1006a959
cmp eax, 2
jne 0x1006a90b
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
movsx eax, al
movd xmm0, eax
lea eax, [esi + 0x50]
punpcklbw xmm0, xmm0
punpcklwd xmm0, xmm0
pshufd xmm0, xmm0, 0
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
movups xmmword [ebp - 0x30], xmm0
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x1006a974
xor edx, edx
cmp esi, 0x10
jb 0x1006a8e4
lea ecx, [eax + 0x50]
add eax, 0x4f
add eax, esi
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0x10], eax
lea eax, [edi - 1]
add eax, esi
cmp ecx, eax
ja 0x1006a87e
cmp dword [ebp - 0x10], edi
jae 0x1006a8e1
mov eax, esi
and eax, 0x8000000f
jns 0x1006a88c
dec eax
or eax, 0xfffffff0
inc eax
movups xmm5, xmmword [0x102ca420]
mov ecx, esi
movups xmm6, xmmword [ebp - 0x30]
sub ecx, eax
mov eax, dword [ebp - 0x14]
xorps xmm4, xmm4
movups xmm0, xmmword [edx + edi]
movaps xmm3, xmm4
movaps xmm2, xmm6
pxor xmm2, xmm0
pcmpeqb xmm3, xmm0
movups xmm0, xmmword [eax + edx]
pandn xmm3, xmm5
pand xmm2, xmm3
movaps xmm1, xmm3
pandn xmm1, xmm0
por xmm2, xmm1
pand xmm2, xmm3
pandn xmm3, xmm4
por xmm2, xmm3
movups xmmword [eax + edx], xmm2
add edx, 0x10
cmp edx, ecx
jl 0x1006a8a1
mov eax, dword [ebp - 8]
cmp edx, esi
jge 0x1006a959
mov ch, byte [ebp - 1]
add eax, 0x50
mov dword [ebp - 0x14], eax
mov cl, byte [edx + edi]
mov al, ch
xor al, cl
neg cl
sbb cl, cl
and cl, al
mov eax, dword [ebp - 0x14]
mov byte [eax + edx], cl
inc edx
cmp edx, esi
jl 0x1006a8f1
jmp 0x1006a959
cmp eax, 3
jne 0x1006a977
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
lea eax, [esi + 0x50]
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
call eax
mov edx, eax
add esp, 4
mov dword [ebp - 8], edx
test edx, edx
je 0x1006a974
xor ecx, ecx
test esi, esi
jle 0x1006a95c
lea eax, [edx + 0x50]
mov dl, byte [ebp - 1]
mov dword [ebp - 0x14], eax
nop dword [eax]
mov al, byte [ecx + edi]
test al, al
je 0x1006a94d
cmp al, dl
je 0x1006a94d
xor al, dl
mov esi, dword [ebp - 0x14]
mov byte [esi + ecx], al
inc ecx
cmp ecx, dword [ebx + 0xc]
jl 0x1006a940
mov edx, dword [ebp - 8]
mov esi, dword [ebx + 0x10]
mov ecx, dword [ebx + 0x14]
mov eax, dword [ebp - 0xc]
mov dword [esi], edx
mov dword [ecx], eax
xor eax, eax
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret
mov ecx, dword [ebp - 0x10]
mov esi, dword [ebx + 0x10]
mov eax, dword [ecx + 0xc]
push dword [esi]
call eax
mov eax, dword [ebx + 0x14]
add esp, 4
mov dword [esi], 0
mov dword [eax], 0
mov eax, 0xfffffffe
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret
pop edi
or eax, 0xffffffff
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret