Function at 0x40dec0
Capabilities:
Encrypt data using des

Disassembly:
push ebp
sub esp, 0x40
mov edx, dword [esp + 0x48]
xor ecx, ecx
mov ebp, dword [esp + 0x4c]
mov eax, dword [esp + 0x50]
mov dword [esp + 0x20], ecx
mov dword [esp + 0x24], ecx
mov dword [esp + 0x18], eax
mov dword [esp], ebx
mov dword [esp + 4], esi
mov dword [esp + 8], edi
mov dword [esp + 0x14], edx
xor eax, eax
mov byte [esp + 0x28], al
xor esi, esi
mov byte [esp + 0x29], al
mov byte [esp + 0x2a], al
mov byte [esp + 0x2b], al
mov byte [esp + 0x2c], al
mov byte [esp + 0x2d], al
mov byte [esp + 0x2e], al
mov byte [esp + 0x2f], al
movsx ecx, byte [esi + 0x42a640]
test ecx, ecx
je 0x40df88
lea eax, [ecx - 1]
mov edx, eax
sar edx, 2
shr edx, 0x1d
lea edx, [edx + ecx - 1]
sar edx, 3
and eax, 0x80000007
jge 0x40df3a
dec eax
or eax, 0xfffffff8
inc eax
movsx edx, byte [esp + edx + 0x20]
neg eax
add eax, 7
mov ecx, eax
mov ebx, 1
shl ebx, cl
mov eax, esi
movsx edi, bl
and edi, edx
xor ebx, ebx
test edi, edi
setne bl
mov edi, esi
sar edi, 2
shr edi, 0x1d
add edi, esi
sar edi, 3
and eax, 0x80000007
movzx edx, byte [esp + edi + 0x28]
jge 0x40df79
dec eax
or eax, 0xfffffff8
inc eax
neg eax
add eax, 7
mov ecx, eax
shl ebx, cl
or edx, ebx
mov byte [esp + edi + 0x28], dl
add esi, 1
cmp esi, 0x40
jl 0x40df11
mov edx, dword [esp + 0x14]
movzx eax, byte [esp + 0x2c]
mov byte [esp + 0x13], al
movzx eax, byte [esp + 0x2b]
mov byte [esp + 0xc], al
movzx eax, byte [esp + 0x28]
mov byte [esp + 0xf], al
movzx eax, byte [esp + 0x2f]
mov byte [esp + 0x10], al
movzx eax, byte [esp + 0x2a]
mov byte [esp + 0xd], al
movzx eax, byte [esp + 0x2e]
mov byte [esp + 0x11], al
movzx eax, byte [esp + 0x29]
mov byte [esp + 0xe], al
movzx eax, byte [esp + 0x2d]
mov byte [esp + 0x12], al
mov ecx, dword [esp + 0x10]
mov eax, ecx
rol eax, 0x1f
mov ebx, eax
shr ebx, 0x1a
xor ebx, 0xfffffffb
and ebx, 0x3f
mov esi, dword [ebx*4 + 0x42abc0]
mov ebx, eax
shr ebx, 0x16
xor ebx, 0xffffffe2
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42a8c0]
mov ebx, eax
xor ebx, 0x1c0000
shr ebx, 0x12
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42aac0]
mov ebx, eax
xor ebx, 0x74000
shr ebx, 0xe
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42aec0]
mov ebx, eax
xor ebx, 0x5800
shr ebx, 0xa
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42acc0]
mov ebx, eax
xor ebx, 0x700
shr ebx, 6
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42adc0]
xor eax, 0x24
and eax, 0xfc
or esi, dword [eax + 0x42a9c0]
mov eax, ecx
rol eax, 1
xor eax, 0x19
and eax, 0x3f
or esi, dword [eax*4 + 0x42afc0]
xor esi, dword [esp + 0xc]
mov eax, esi
rol eax, 0x1f
mov ebx, eax
xor ebx, 0x18000000
shr ebx, 0x1a
mov edi, dword [ebx*4 + 0x42abc0]
mov ebx, eax
shr ebx, 0x16
xor ebx, 0xfffffff7
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42a8c0]
mov ebx, eax
xor ebx, 0x5c0000
shr ebx, 0x12
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42aac0]
mov ebx, eax
shr ebx, 0xe
xor ebx, 0xfffffff7
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42aec0]
mov ebx, eax
shr ebx, 0xa
xor ebx, 0xfffffffc
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42acc0]
mov ebx, eax
xor ebx, 0x200
shr ebx, 6
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42adc0]
and eax, 0xfffffffc
xor eax, 0xffffffe0
and eax, 0xfc
or edi, dword [eax + 0x42a9c0]
mov eax, esi
rol eax, 1
xor eax, 0xfffffffc
and eax, 0x3f
or edi, dword [eax*4 + 0x42afc0]
xor edi, ecx
mov ecx, edi
rol ecx, 0x1f
mov eax, ecx
shr eax, 0x1a
not eax
and eax, 0x3f
mov eax, dword [eax*4 + 0x42abc0]
mov ebx, ecx
xor ebx, 0x5000000
shr ebx, 0x16
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42a8c0]
mov ebx, ecx
shr ebx, 0x12
xor ebx, 0xfffffff7
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42aac0]
mov ebx, ecx
xor ebx, 0x24000
shr ebx, 0xe
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42aec0]
mov ebx, ecx
xor ebx, 0x1800
shr ebx, 0xa
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42acc0]
mov ebx, ecx
xor ebx, 0x440
shr ebx, 6
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42adc0]
and ecx, 0xfffffffc
xor ecx, 0xffffffe8
and ecx, 0xfc
or eax, dword [ecx + 0x42a9c0]
mov ecx, edi
rol ecx, 1
xor ecx, 0x1e
and ecx, 0x3f
or eax, dword [ecx*4 + 0x42afc0]
xor eax, esi
mov ebx, eax
rol ebx, 0x1f
mov ecx, ebx
xor ecx, 0x50000000
shr ecx, 0x1a
mov ecx, dword [ecx*4 + 0x42abc0]
mov esi, ebx
shr esi, 0x16
xor esi, 0xfffffffe
and esi, 0x3f
or ecx, dword [esi*4 + 0x42a8c0]
mov esi, ebx
xor esi, 0x380000
shr esi, 0x12
and esi, 0x3f
or ecx, dword [esi*4 + 0x42aac0]
mov esi, ebx
shr esi, 0xe
xor esi, 0xffffffed
and esi, 0x3f
or ecx, dword [esi*4 + 0x42aec0]
mov esi, ebx
xor esi, 0x1c00
shr esi, 0xa
and esi, 0x3f
or ecx, dword [esi*4 + 0x42acc0]
mov esi, ebx
xor esi, 0x5c0
shr esi, 6
and esi, 0x3f
or ecx, dword [esi*4 + 0x42adc0]
xor ebx, 8
and ebx, 0xfc
or ecx, dword [ebx + 0x42a9c0]
mov ebx, eax
rol ebx, 1
xor ebx, 0xfffffff1
and ebx, 0x3f
or ecx, dword [ebx*4 + 0x42afc0]
xor ecx, edi
mov esi, ecx
rol esi, 0x1f
mov ebx, esi
shr ebx, 0x1a
xor ebx, 0xffffffe6
and ebx, 0x3f
mov ebx, dword [ebx*4 + 0x42abc0]
mov edi, esi
xor edi, 0x6400000
shr edi, 0x16
and edi, 0x3f
or ebx, dword [edi*4 + 0x42a8c0]
mov edi, esi
shr edi, 0x12
xor edi, 0xfffffff6
and edi, 0x3f
or ebx, dword [edi*4 + 0x42aac0]
mov edi, esi
xor edi, 0x5c000
shr edi, 0xe
and edi, 0x3f
or ebx, dword [edi*4 + 0x42aec0]
mov edi, esi
xor edi, 0x2000
shr edi, 0xa
and edi, 0x3f
or ebx, dword [edi*4 + 0x42acc0]
mov edi, esi
shr edi, 6
xor edi, 0xfffffff6
and edi, 0x3f
or ebx, dword [edi*4 + 0x42adc0]
and esi, 0xfffffffc
xor esi, 0xffffff84
and esi, 0xfc
or ebx, dword [esi + 0x42a9c0]
mov esi, ecx
rol esi, 1
xor esi, 0xffffffe5
and esi, 0x3f
or ebx, dword [esi*4 + 0x42afc0]
xor ebx, eax
mov esi, ebx
rol esi, 0x1f
mov eax, esi
xor eax, 0x74000000
shr eax, 0x1a
mov eax, dword [eax*4 + 0x42abc0]
mov edi, esi
xor edi, 0x4800000
shr edi, 0x16
and edi, 0x3f
or eax, dword [edi*4 + 0x42a8c0]
mov edi, esi
shr edi, 0x12
xor edi, 0xffffffeb
and edi, 0x3f
or eax, dword [edi*4 + 0x42aac0]
mov edi, esi
shr edi, 0xe
xor edi, 0xffffffef
and edi, 0x3f
or eax, dword [edi*4 + 0x42aec0]
mov edi, esi
shr edi, 0xa
xor edi, 0xffffffe8
and edi, 0x3f
or eax, dword [edi*4 + 0x42acc0]
mov edi, esi
shr edi, 6
xor edi, 0xffffffea
and edi, 0x3f
or eax, dword [edi*4 + 0x42adc0]
and esi, 0xfffffffc
xor esi, 0xffffff98
and esi, 0xfc
or eax, dword [esi + 0x42a9c0]
mov esi, ebx
rol esi, 1
xor esi, 0x16
and esi, 0x3f
or eax, dword [esi*4 + 0x42afc0]
xor eax, ecx
mov esi, eax
rol esi, 0x1f
mov ecx, esi
shr ecx, 0x1a
xor ecx, 0xffffffec
and ecx, 0x3f
mov ecx, dword [ecx*4 + 0x42abc0]
mov edi, esi
shr edi, 0x16
not edi
and edi, 0x3f
or ecx, dword [edi*4 + 0x42a8c0]
mov edi, esi
xor edi, 0x480000
shr edi, 0x12
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aac0]
mov edi, esi
shr edi, 0xe
xor edi, 0xffffffe4
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aec0]
mov edi, esi
shr edi, 0xa
xor edi, 0xffffffe9
and edi, 0x3f
or ecx, dword [edi*4 + 0x42acc0]
mov edi, esi
xor edi, 0x400
shr edi, 6
and edi, 0x3f
or ecx, dword [edi*4 + 0x42adc0]
xor esi, 0x78
and esi, 0xfc
or ecx, dword [esi + 0x42a9c0]
mov esi, eax
rol esi, 1
xor esi, 0x17
and esi, 0x3f
or ecx, dword [esi*4 + 0x42afc0]
xor ecx, ebx
mov esi, ecx
rol esi, 0x1f
mov ebx, esi
shr ebx, 0x1a
xor ebx, 0xfffffff6
and ebx, 0x3f
mov ebx, dword [ebx*4 + 0x42abc0]
mov edi, esi
shr edi, 0x16
and edi, 0x3f
or ebx, dword [edi*4 + 0x42a8c0]
mov edi, esi
shr edi, 0x12
not edi
and edi, 0x3f
or ebx, dword [edi*4 + 0x42aac0]
mov edi, esi
shr edi, 0xe
xor edi, 0xfffffff6
and edi, 0x3f
or ebx, dword [edi*4 + 0x42aec0]
mov edi, esi
xor edi, 0x5c00
shr edi, 0xa
and edi, 0x3f
or ebx, dword [edi*4 + 0x42acc0]
mov edi, esi
shr edi, 6
xor edi, 0xfffffff0
and edi, 0x3f
or ebx, dword [edi*4 + 0x42adc0]
xor esi, 0x2c
and esi, 0xfc
or ebx, dword [esi + 0x42a9c0]
mov esi, ecx
rol esi, 1
xor esi, 3
and esi, 0x3f
or ebx, dword [esi*4 + 0x42afc0]
xor ebx, eax
mov esi, ebx
rol esi, 0x1f
mov eax, esi
xor eax, 0x60000000
shr eax, 0x1a
mov eax, dword [eax*4 + 0x42abc0]
mov edi, esi
shr edi, 0x16
xor edi, 0xfffffffe
and edi, 0x3f
or eax, dword [edi*4 + 0x42a8c0]
mov edi, esi
shr edi, 0x12
xor edi, 0xfffffff9
and edi, 0x3f
or eax, dword [edi*4 + 0x42aac0]
mov edi, esi
shr edi, 0xe
xor edi, 0xfffffff2
and edi, 0x3f
or eax, dword [edi*4 + 0x42aec0]
mov edi, esi
xor edi, 0x7000
shr edi, 0xa
and edi, 0x3f
or eax, dword [edi*4 + 0x42acc0]
mov edi, esi
xor edi, 0x280
shr edi, 6
and edi, 0x3f
or eax, dword [edi*4 + 0x42adc0]
xor esi, 0x34
and esi, 0xfc
or eax, dword [esi + 0x42a9c0]
mov esi, ebx
rol esi, 1
xor esi, 0xffffffe6
and esi, 0x3f
or eax, dword [esi*4 + 0x42afc0]
xor eax, ecx
mov esi, eax
rol esi, 0x1f
mov ecx, esi
shr ecx, 0x1a
xor ecx, 0xfffffffb
and ecx, 0x3f
mov ecx, dword [ecx*4 + 0x42abc0]
mov edi, esi
xor edi, 0x3c00000
shr edi, 0x16
and edi, 0x3f
or ecx, dword [edi*4 + 0x42a8c0]
mov edi, esi
shr edi, 0x12
xor edi, 0xfffffff6
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aac0]
mov edi, esi
shr edi, 0xe
xor edi, 0xffffffe6
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aec0]
mov edi, esi
xor edi, 0x7400
shr edi, 0xa
mov dword [esp + 0x14], edx
and edi, 0x3f
or ecx, dword [edi*4 + 0x42acc0]
mov edi, esi
xor edi, 0x200
shr edi, 6
and edi, 0x3f
and esi, 0xfffffffc
xor esi, 0xffffffc8
or ecx, dword [edi*4 + 0x42adc0]
and esi, 0xfc
or ecx, dword [esi + 0x42a9c0]
mov esi, eax
rol esi, 1
xor esi, 0xe
and esi, 0x3f
or ecx, dword [esi*4 + 0x42afc0]
xor ecx, ebx
mov ebx, ecx
rol ebx, 0x1f
mov esi, ebx
shr esi, 0x1a
xor esi, 0xfffffffc
and esi, 0x3f
mov esi, dword [esi*4 + 0x42abc0]
mov edi, ebx
shr edi, 0x16
xor edi, 0xffffffea
and edi, 0x3f
or esi, dword [edi*4 + 0x42a8c0]
mov edi, ebx
xor edi, 0x740000
shr edi, 0x12
and edi, 0x3f
or esi, dword [edi*4 + 0x42aac0]
mov edi, ebx
xor edi, 0x6c000
shr edi, 0xe
and edi, 0x3f
or esi, dword [edi*4 + 0x42aec0]
mov edi, ebx
xor edi, 0x4c00
shr edi, 0xa
and edi, 0x3f
or esi, dword [edi*4 + 0x42acc0]
mov edi, ebx
xor edi, 0xc0
shr edi, 6
and edi, 0x3f
or esi, dword [edi*4 + 0x42adc0]
xor ebx, 0x4c
and ebx, 0xfc
or esi, dword [ebx + 0x42a9c0]
mov ebx, ecx
rol ebx, 1
xor ebx, 0x1b
and ebx, 0x3f
or esi, dword [ebx*4 + 0x42afc0]
xor esi, eax
mov eax, esi
rol eax, 0x1f
mov ebx, eax
xor ebx, 0x6c000000
shr ebx, 0x1a
mov edi, dword [ebx*4 + 0x42abc0]
mov ebx, eax
xor ebx, 0x7400000
shr ebx, 0x16
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42a8c0]
mov ebx, eax
xor ebx, 0x600000
shr ebx, 0x12
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42aac0]
mov ebx, eax
shr ebx, 0xe
xor ebx, 0xfffffff3
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42aec0]
mov ebx, eax
xor ebx, 0x2c00
shr ebx, 0xa
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42acc0]
mov ebx, eax
shr ebx, 6
not ebx
and ebx, 0x3f
or edi, dword [ebx*4 + 0x42adc0]
xor eax, 4
and eax, 0xfc
or edi, dword [eax + 0x42a9c0]
mov eax, esi
rol eax, 1
xor eax, 0xffffffe9
and eax, 0x3f
or edi, dword [eax*4 + 0x42afc0]
xor edi, ecx
mov eax, edi
rol eax, 0x1f
mov ecx, eax
shr ecx, 0x1a
xor ecx, 0xfffffff9
and ecx, 0x3f
mov ebx, dword [ecx*4 + 0x42abc0]
mov ecx, eax
shr ecx, 0x16
xor ecx, 0xfffffff9
and ecx, 0x3f
or ebx, dword [ecx*4 + 0x42a8c0]
mov ecx, eax
shr ecx, 0x12
xor ecx, 0xffffffe7
and ecx, 0x3f
or ebx, dword [ecx*4 + 0x42aac0]
mov ecx, eax
xor ecx, 0x78000
shr ecx, 0xe
and ecx, 0x3f
or ebx, dword [ecx*4 + 0x42aec0]
mov ecx, eax
xor ecx, 0x2000
shr ecx, 0xa
and ecx, 0x3f
or ebx, dword [ecx*4 + 0x42acc0]
mov ecx, eax
shr ecx, 6
xor ecx, 0xffffffed
and ecx, 0x3f
or ebx, dword [ecx*4 + 0x42adc0]
and eax, 0xfffffffc
xor eax, 0xffffffd4
and eax, 0xfc
or ebx, dword [eax + 0x42a9c0]
mov eax, edi
rol eax, 1
xor eax, 0xffffffe2
and eax, 0x3f
or ebx, dword [eax*4 + 0x42afc0]
xor ebx, esi
mov eax, ebx
rol eax, 0x1f
mov ecx, eax
xor ecx, 0x3c000000
shr ecx, 0x1a
mov esi, dword [ecx*4 + 0x42abc0]
mov ecx, eax
shr ecx, 0x16
xor ecx, 0xffffffee
and ecx, 0x3f
or esi, dword [ecx*4 + 0x42a8c0]
mov ecx, eax
xor ecx, 0x2c0000
shr ecx, 0x12
and ecx, 0x3f
or esi, dword [ecx*4 + 0x42aac0]
mov ecx, eax
xor ecx, 0x4c000
shr ecx, 0xe
and ecx, 0x3f
or esi, dword [ecx*4 + 0x42aec0]
mov ecx, eax
shr ecx, 0xa
xor ecx, 0xffffffe3
and ecx, 0x3f
or esi, dword [ecx*4 + 0x42acc0]
mov ecx, eax
xor ecx, 0x200
shr ecx, 6
and ecx, 0x3f
or esi, dword [ecx*4 + 0x42adc0]
and eax, 0xfffffffc
xor eax, 0xffffffd0
and eax, 0xfc
or esi, dword [eax + 0x42a9c0]
mov eax, ebx
rol eax, 1
xor eax, 0xfffffff6
and eax, 0x3f
or esi, dword [eax*4 + 0x42afc0]
xor esi, edi
mov eax, esi
rol eax, 0x1f
mov ecx, eax
xor ecx, 0x3c000000
shr ecx, 0x1a
mov ecx, dword [ecx*4 + 0x42abc0]
mov edi, eax
shr edi, 0x16
xor edi, 0xfffffff5
and edi, 0x3f
or ecx, dword [edi*4 + 0x42a8c0]
mov edi, eax
shr edi, 0x12
xor edi, 0xfffffff4
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aac0]
mov edi, eax
shr edi, 0xe
xor edi, 0xfffffffa
and edi, 0x3f
or ecx, dword [edi*4 + 0x42aec0]
mov edi, eax
shr edi, 0xa
xor edi, 0xfffffff3
and edi, 0x3f
or ecx, dword [edi*4 + 0x42acc0]
mov edi, eax
xor edi, 0x500
shr edi, 6
and edi, 0x3f
or ecx, dword [edi*4 + 0x42adc0]
and eax, 0xfffffffc
xor eax, 0xffffffec
and eax, 0xfc
or ecx, dword [eax + 0x42a9c0]
mov eax, esi
rol eax, 1
xor eax, 0x10
and eax, 0x3f
or ecx, dword [eax*4 + 0x42afc0]
xor ecx, ebx
mov dword [esp + 0x10], ecx
mov ebx, ecx
mov byte [esp + 0x37], cl
rol ebx, 0x1f
mov eax, ebx
xor eax, 0x4000000
shr eax, 0x1a
mov eax, dword [eax*4 + 0x42abc0]
mov edi, ebx
shr edi, 0x16
not edi
and edi, 0x3f
or eax, dword [edi*4 + 0x42a8c0]
mov edi, ebx
shr edi, 0x12
xor edi, 0xffffffef
and edi, 0x3f
or eax, dword [edi*4 + 0x42aac0]
mov edi, ebx
xor edi, 0x24000
shr edi, 0xe
and edi, 0x3f
or eax, dword [edi*4 + 0x42aec0]
mov edi, ebx
shr edi, 0xa
xor edi, 0xfffffff0
and edi, 0x3f
or eax, dword [edi*4 + 0x42acc0]
mov edi, ebx
xor edi, 0x6c0
shr edi, 6
and edi, 0x3f
or eax, dword [edi*4 + 0x42adc0]
and ebx, 0xfffffffc
xor ebx, 0xffffffa4
and ebx, 0xfc
or eax, dword [ebx + 0x42a9c0]
mov ebx, ecx
rol ebx, 1
xor ebx, 0xffffffe0
and ebx, 0x3f
or eax, dword [ebx*4 + 0x42afc0]
xor eax, esi
mov dword [esp + 0x1c], eax
xor esi, esi
mov dword [esp + 0xc], eax
shr eax, 0x18
mov byte [esp + 0x30], al
mov eax, dword [esp + 0x1c]
mov byte [esp + 0x33], al
mov eax, ecx
shr eax, 0x18
mov byte [esp + 0x34], al
mov eax, dword [esp + 0x1c]
shr eax, 0x10
mov byte [esp + 0x31], al
mov eax, ecx
shr eax, 0x10
shr ecx, 8
mov byte [esp + 0x35], al
mov eax, dword [esp + 0x1c]
mov byte [esp + 0x36], cl
shr eax, 8
mov byte [esp + 0x32], al
xor eax, eax
mov byte [esp + 0x38], al
mov byte [esp + 0x39], al
mov byte [esp + 0x3a], al
mov byte [esp + 0x3b], al
mov byte [esp + 0x3c], al
mov byte [esp + 0x3d], al
mov byte [esp + 0x3e], al
mov byte [esp + 0x3f], al
movsx ecx, byte [esi + 0x42a680]
test ecx, ecx
je 0x40ea81
lea eax, [ecx - 1]
mov edx, eax
sar edx, 2
shr edx, 0x1d
lea edx, [edx + ecx - 1]
sar edx, 3
and eax, 0x80000007
jge 0x40ea33
dec eax
or eax, 0xfffffff8
inc eax
movsx edx, byte [esp + edx + 0x30]
neg eax
add eax, 7
mov ecx, eax
mov ebx, 1
shl ebx, cl
mov eax, esi
movsx edi, bl
and edi, edx
xor ebx, ebx
test edi, edi
setne bl
mov edi, esi
sar edi, 2
shr edi, 0x1d
add edi, esi
sar edi, 3
and eax, 0x80000007
movzx edx, byte [esp + edi + 0x38]
jge 0x40ea72
dec eax
or eax, 0xfffffff8
inc eax
neg eax
add eax, 7
mov ecx, eax
shl ebx, cl
or edx, ebx
mov byte [esp + edi + 0x38], dl
add esi, 1
cmp esi, 0x40
jl 0x40ea0a
mov edx, dword [esp + 0x14]
movzx esi, byte [esp + 0x38]
movzx eax, byte [ebp]
xor eax, esi
mov byte [edx], al
mov edi, dword [esp + 0x21]
mov dword [esp + 0x20], edi
movzx ecx, word [esp + 0x25]
mov word [esp + 0x24], cx
movzx ebx, byte [esp + 0x27]
mov byte [esp + 0x26], bl
mov ecx, dword [esp + 0x18]
movzx eax, byte [ebp]
mov byte [esp + 0x27], al
add edx, 1
add ebp, 1
add ecx, 0xffffffff
mov dword [esp + 0x18], ecx
jne 0x40dee9
mov ebx, dword [esp]
mov esi, dword [esp + 4]
mov edi, dword [esp + 8]
add esp, 0x40
pop ebp
ret