Function at 0x402020
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x41e3d8
mov eax, dword fs:[0]
push eax
sub esp, 0x2c
mov eax, dword [0x42f00c]
xor eax, ebp
mov dword [ebp - 0x10], eax
push ebx
push esi
push edi
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov esi, ecx
mov dword [ebp - 0x2c], esi
xor ecx, ecx
mov dword [ebp - 0x20], ecx
cmp dword [esi + 4], ecx
jle 0x40208e
nop word [eax + eax]
mov bl, cl
not bl
and ebx, 0xffffff01
push ebx
push ecx
push 6
mov ecx, esi
call fcn.004026d0
push ebx
push 6
push dword [ebp - 0x20]
mov ecx, esi
call fcn.004026d0
mov ecx, dword [ebp - 0x20]
inc ecx
mov dword [ebp - 0x20], ecx
cmp ecx, dword [esi + 4]
jl 0x402060
push 3
push 3
mov ecx, esi
call fcn.00402640
mov eax, dword [esi + 4]
mov ecx, esi
push 3
sub eax, 4
push eax
call fcn.00402640
mov eax, dword [esi + 4]
mov ecx, esi
sub eax, 4
push eax
push 3
call fcn.00402640
mov edx, dword [esi]
lea ecx, [ebp - 0x1c]
xorps xmm0, xmm0
mov dword [ebp - 0x14], 0
movq qword [ebp - 0x1c], xmm0
call fcn.00403760
mov dword [ebp - 4], 0
xor ebx, ebx
mov edx, dword [ebp - 0x18]
mov edi, dword [ebp - 0x1c]
sub edx, edi
sar edx, 2
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x24], ebx
test edx, edx
jle 0x4021b9
xor eax, eax
mov dword [ebp - 0x34], eax
nop dword [eax]
test ebx, ebx
jne 0x402119
test eax, eax
je 0x40219e
lea ecx, [edx - 1]
cmp eax, ecx
je 0x40219e
jmp 0x40211c
lea ecx, [edx - 1]
cmp ebx, ecx
jne 0x402124
test eax, eax
je 0x40219e
cmp edx, eax
jbe 0x4022b0
cmp edx, ebx
jbe 0x4022b0
mov ecx, dword [edi + eax*4]
mov esi, 0xfffffffe
mov eax, dword [edi + ebx*4]
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0x30], eax
mov eax, esi
mov edi, 0xfffffffe
cdq
mov ebx, eax
xor ebx, edx
sub ebx, edx
mov eax, edi
cdq
mov ecx, eax
mov eax, esi
xor ecx, edx
sub ecx, edx
cmp ebx, ecx
mov ecx, dword [ebp - 0x2c]
cmovle eax, edi
cdq
xor eax, edx
sub eax, edx
cmp eax, 1
setne al
movzx eax, al
push eax
mov eax, dword [ebp - 0x20]
add eax, esi
push eax
mov eax, dword [ebp - 0x30]
add eax, edi
push eax
call fcn.004026d0
inc edi
cmp edi, 2
jle 0x402153
inc esi
cmp esi, 2
jle 0x402145
mov eax, dword [ebp - 0x34]
mov edx, dword [ebp - 0x28]
mov ebx, dword [ebp - 0x24]
mov edi, dword [ebp - 0x1c]
inc eax
mov dword [ebp - 0x34], eax
cmp eax, edx
jl 0x402100
inc ebx
mov dword [ebp - 0x24], ebx
cmp ebx, edx
jl 0x4020f4
mov esi, dword [ebp - 0x2c]
push 0
mov ecx, esi
call fcn.004022c0
mov ebx, dword [esi]
cmp ebx, 7
jl 0x40224c
mov edx, ebx
mov edi, 0xc
mov eax, edx
add edx, edx
sar eax, 0xb
imul ecx, eax, 0x1f25
xor edx, ecx
sub edi, 1
jne 0x4021d4
shl ebx, 0xc
or ebx, edx
mov dword [ebp - 0x30], ebx
test ebx, 0xfffc0000
jne 0x40229b
xor ecx, ecx
mov dword [ebp - 0x24], ecx
mov edi, dword [esi + 4]
mov eax, ebx
sar eax, cl
and al, 1
mov byte [ebp - 0x28], al
mov eax, 0xaaaaaaab
mov esi, dword [ebp - 0x28]
mul ecx
push esi
mov ebx, edx
shr ebx, 1
push ebx
lea eax, [ebx + ebx*2]
sub ecx, eax
add ecx, 0xfffffff5
add edi, ecx
mov ecx, dword [ebp - 0x2c]
push edi
call fcn.004026d0
push esi
mov esi, dword [ebp - 0x2c]
mov ecx, esi
push edi
push ebx
call fcn.004026d0
mov ecx, dword [ebp - 0x24]
mov ebx, dword [ebp - 0x30]
inc ecx
mov dword [ebp - 0x24], ecx
cmp ecx, 0x12
jl 0x402201
mov edx, dword [ebp - 0x1c]
test edx, edx
je 0x40227f
mov ecx, dword [ebp - 0x14]
mov eax, edx
sub ecx, edx
and ecx, 0xfffffffc
cmp ecx, 0x1000
jb 0x402275
mov edx, dword [edx - 4]
add ecx, 0x23
sub eax, edx
add eax, 0xfffffffc
cmp eax, 0x1f
ja 0x4022b5
push ecx
push edx
call fcn.0040bc4d
add esp, 8
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov ecx, dword [ebp - 0x10]
xor ecx, ebp
call fcn.0040bc0c
mov esp, ebp
pop ebp
ret
push 0x42d950
lea eax, [ebp - 0x28]
mov dword [ebp - 0x28], str.Assertion_error
push eax
call fcn.0040db64
call fcn.00403e20
call fcn.0040ffc4
int3