Function at 0x10041780
Capabilities:
Compress data via zlib inflate or deflate

Disassembly:
push ebp
mov ebp, esp
mov edx, dword [ebp + 8]
sub esp, 0x2c
push edi
test edx, edx
je 0x100425b8
mov edi, dword [edx + 0x1c]
test edi, edi
je 0x100425b8
mov ecx, dword [edx + 0xc]
test ecx, ecx
je 0x100425b8
mov eax, dword [edx]
test eax, eax
jne 0x100417b7
cmp dword [edx + 4], eax
jne 0x100425b8
cmp dword [edi], 0xb
jne 0x100417c2
mov dword [edi], 0xc
mov dword [ebp - 0x14], ecx
mov ecx, dword [edx + 0x10]
mov dword [ebp - 0x10], ecx
mov ecx, dword [edx + 4]
mov dword [ebp - 4], ecx
mov dword [ebp - 0x2c], ecx
mov ecx, dword [ebp - 0x10]
push ebx
mov ebx, dword [edi + 0x38]
mov dword [ebp - 0x1c], ecx
mov ecx, dword [edi]
push esi
mov esi, dword [edi + 0x3c]
mov dword [ebp - 8], eax
mov dword [ebp - 0x24], 0
cmp ecx, 0x1e
jbe switch.0x10041804
mov eax, 0xfffffffe
pop esi
pop ebx
pop edi
mov esp, ebp
pop ebp
ret 4
mov edx, dword [ebp + 8]
jmp dword [ecx*4 + 0x100425c4]
cmp dword [edi + 8], 0
jne 0x1004181c
mov dword [edi], 0xc
jmp 0x10042483
cmp esi, 0x10
jae 0x10041843
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 0x10
jb 0x10041821
movzx eax, bl
shl eax, 8
mov ecx, ebx
shr ecx, 8
add eax, ecx
xor edx, edx
mov ecx, 0x1f
div ecx
test edx, edx
je 0x10041875
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 8]
mov dword [edx + 0x18], 0x1004ad19
mov dword [edi], 0x1d
jmp 0x10042483
mov eax, ebx
and al, 0xf
cmp al, 8
je 0x10041885
mov eax, dword [ebp - 8]
jmp 0x10042473
mov eax, dword [edi + 0x24]
shr ebx, 4
mov ecx, ebx
and ecx, 0xf
sub esi, 4
add ecx, 8
test eax, eax
jne 0x1004189f
mov dword [edi + 0x24], ecx
jmp 0x100418a3
cmp ecx, eax
ja 0x1004185d
mov eax, 1
shl eax, cl
push 0
xor ecx, ecx
mov dword [edi + 0x14], eax
xor eax, eax
call fcn.10043e90
mov ecx, dword [ebp + 8]
shr ebx, 8
not ebx
and ebx, 2
or ebx, 9
mov dword [edi], ebx
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov eax, dword [ebp - 8]
xor ebx, ebx
xor esi, esi
jmp 0x10042483
cmp esi, 0x20
jae 0x10041902
nop
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 0x20
jb 0x100418e0
mov ecx, ebx
and ecx, 0xff00
mov edx, ebx
shl edx, 0x10
add ecx, edx
mov edx, ebx
shr edx, 8
shl ecx, 8
and edx, 0xff00
add ecx, edx
mov edx, dword [ebp + 8]
shr ebx, 0x18
add ecx, ebx
xor ebx, ebx
mov dword [edi + 0x18], ecx
mov dword [edx + 0x30], ecx
xor esi, esi
mov dword [edi], 0xa
cmp dword [edi + 0xc], 0
je 0x1004249c
push 0
xor eax, eax
xor ecx, ecx
call fcn.10043e90
mov ecx, dword [ebp + 8]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov eax, dword [ebp - 8]
mov dword [edi], 0xb
cmp dword [edi + 4], 0
je 0x1004197a
mov ecx, esi
and ecx, 7
shr ebx, cl
sub esi, ecx
mov dword [edi], 0x1a
jmp 0x10042483
cmp esi, 3
jae 0x100419a2
nop
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 3
jb 0x10041980
mov ecx, ebx
and ecx, 1
shr ebx, 1
mov dword [edi + 4], ecx
mov ecx, ebx
and ecx, 3
cmp ecx, 3
ja case.default.0x100419b6
jmp dword [ecx*4 + 0x10042640]
shr ebx, 2
mov dword [edi], 0xd
sub esi, 3
jmp 0x10042483
shr ebx, 2
mov dword [edi + 0x4c], 0x10046e80
mov dword [edi + 0x54], 9
mov dword [edi + 0x50], 0x10047680
mov dword [edi + 0x58], 5
mov dword [edi], 0x13
sub esi, 3
jmp 0x10042483
shr ebx, 2
mov dword [edi], 0x10
sub esi, 3
jmp 0x10042483
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x1004ad19
mov dword [edi], 0x1d
shr ebx, 2
sub esi, 3
jmp 0x10042483
mov ecx, esi
and ecx, 7
sub esi, ecx
shr ebx, cl
cmp esi, 0x20
jae 0x10041a57
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 0x20
jb 0x10041a35
mov edx, ebx
mov ecx, ebx
not edx
and ecx, 0xffff
shr edx, 0x10
cmp ecx, edx
jne 0x10042473
xor ebx, ebx
mov dword [edi + 0x40], ecx
xor esi, esi
mov dword [edi], 0xe
mov dword [edi], 0xf
mov ecx, dword [edi + 0x40]
mov dword [ebp - 0xc], ecx
test ecx, ecx
je 0x100420c2
mov edx, dword [ebp - 4]
cmp ecx, edx
jbe 0x10041a9b
mov ecx, edx
mov dword [ebp - 0xc], edx
mov edx, dword [ebp - 0x10]
cmp ecx, edx
jbe 0x10041aa7
mov ecx, edx
mov dword [ebp - 0xc], ecx
test ecx, ecx
je 0x100424de
mov edx, dword [ebp - 0xc]
mov eax, dword [ebp - 8]
mov ecx, dword [ebp - 0x14]
push edx
push eax
push ecx
call sub.MSVCRT.dll_memcpy
mov eax, dword [ebp - 0xc]
sub dword [ebp - 4], eax
add dword [ebp - 8], eax
sub dword [ebp - 0x10], eax
add dword [ebp - 0x14], eax
add esp, 0xc
sub dword [edi + 0x40], eax
mov eax, dword [ebp - 8]
jmp 0x10042483
cmp esi, 0xe
jae 0x10041b04
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 0xe
jb 0x10041ae2
mov ecx, ebx
and ecx, 0x1f
shr ebx, 5
add ecx, 0x101
mov edx, ebx
mov dword [edi + 0x60], ecx
shr ebx, 5
mov ecx, ebx
and edx, 0x1f
and ecx, 0xf
inc edx
add ecx, 4
shr ebx, 4
sub esi, 0xe
cmp dword [edi + 0x60], 0x11e
mov dword [edi + 0x64], edx
mov dword [edi + 0x5c], ecx
ja 0x10041e56
cmp edx, 0x1e
ja 0x10041e56
mov dword [edi + 0x68], 0
mov dword [edi], 0x11
mov ecx, dword [edi + 0x68]
cmp ecx, dword [edi + 0x5c]
jae 0x10041bad
lea ecx, [ecx]
cmp esi, 3
jae 0x10041b87
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 3
jb 0x10041b65
mov edx, dword [edi + 0x68]
movzx edx, word [edx*2 + 0x10047700]
mov ecx, ebx
and ecx, 7
mov word [edi + edx*2 + 0x70], cx
inc dword [edi + 0x68]
mov ecx, dword [edi + 0x68]
shr ebx, 3
sub esi, 3
cmp ecx, dword [edi + 0x5c]
jb 0x10041b60
mov eax, 0x13
cmp dword [edi + 0x68], eax
jae 0x10041bda
jmp 0x10041bc0
mov edx, dword [edi + 0x68]
movzx ecx, word [edx*2 + 0x10047700]
xor edx, edx
mov word [edi + ecx*2 + 0x70], dx
inc dword [edi + 0x68]
cmp dword [edi + 0x68], eax
jb 0x10041bc0
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x54]
push eax
push ecx
mov dword [eax], 7
push 0x13
lea eax, [edi + 0x70]
push eax
push 0
call fcn.100448a0
mov dword [ebp - 0x24], eax
test eax, eax
mov eax, dword [ebp - 8]
jne 0x10042473
mov dword [edi + 0x68], 0
mov dword [edi], 0x12
mov edx, dword [edi + 0x64]
add edx, dword [edi + 0x60]
cmp dword [edi + 0x68], edx
jae 0x10041e43
mov ecx, dword [edi + 0x54]
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x4c]
dec edx
and edx, ebx
mov ecx, dword [ecx + edx*4]
mov edx, ecx
shr edx, 8
movzx edx, dl
mov dword [ebp - 0xc], ecx
cmp edx, esi
jbe 0x10041c92
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [edi + 0x54]
inc eax
add esi, 8
add ebx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x4c]
mov dword [ebp - 8], eax
dec edx
and edx, ebx
mov ecx, dword [ecx + edx*4]
mov edx, ecx
shr edx, 8
movzx edx, dl
mov dword [ebp - 0xc], ecx
cmp edx, esi
ja 0x10041c53
mov edx, ecx
shr edx, 0x10
cmp edx, 0x10
jae 0x10041cf2
mov edx, ecx
shr edx, 8
movzx edx, dl
cmp esi, edx
jae 0x10041cd7
jmp 0x10041cb0
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0xc]
inc eax
add esi, 8
add ebx, edx
movzx edx, ch
mov dword [ebp - 8], eax
cmp esi, edx
jb 0x10041cb0
mov dx, word [ebp - 0xa]
movzx ecx, ch
shr ebx, cl
sub esi, ecx
mov ecx, dword [edi + 0x68]
mov word [edi + ecx*2 + 0x70], dx
inc dword [edi + 0x68]
jmp 0x10041e34
mov dx, word [ebp - 0xa]
movzx ecx, ch
mov dword [ebp - 0x20], ecx
cmp dx, 0x10
jne 0x10041d64
lea edx, [ecx + 2]
cmp esi, edx
jae 0x10041d37
lea esp, [esp]
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0x20]
inc eax
add esi, 8
add ebx, edx
lea edx, [ecx + 2]
mov dword [ebp - 8], eax
cmp esi, edx
jb 0x10041d10
shr ebx, cl
sub esi, ecx
mov ecx, dword [edi + 0x68]
test ecx, ecx
je 0x10041e56
movzx ecx, word [edi + ecx*2 + 0x6e]
mov dword [ebp - 0x20], ecx
mov ecx, ebx
and ecx, 3
add ecx, 3
shr ebx, 2
mov dword [ebp - 0xc], ecx
sub esi, 2
jmp 0x10041e00
cmp dx, 0x11
jne 0x10041daf
lea edx, [ecx + 3]
cmp esi, edx
jae 0x10041d98
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0x20]
inc eax
add esi, 8
add ebx, edx
lea edx, [ecx + 3]
mov dword [ebp - 8], eax
cmp esi, edx
jb 0x10041d71
shr ebx, cl
mov edx, ebx
and edx, 7
add edx, 3
mov dword [ebp - 0xc], edx
shr ebx, 3
mov edx, 0xfffffffd
jmp 0x10041df2
lea edx, [ecx + 7]
cmp esi, edx
jae 0x10041ddd
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0x20]
inc eax
add esi, 8
add ebx, edx
lea edx, [ecx + 7]
mov dword [ebp - 8], eax
cmp esi, edx
jb 0x10041db6
shr ebx, cl
mov edx, ebx
and edx, 0x7f
add edx, 0xb
mov dword [ebp - 0xc], edx
shr ebx, 7
mov edx, 0xfffffff9
sub edx, ecx
mov ecx, dword [ebp - 0xc]
add esi, edx
mov dword [ebp - 0x20], 0
mov edx, dword [edi + 0x68]
add edx, ecx
mov ecx, dword [edi + 0x64]
add ecx, dword [edi + 0x60]
cmp edx, ecx
ja 0x10042473
cmp dword [ebp - 0xc], 0
je 0x10041e34
mov ecx, dword [ebp - 0x20]
lea esp, [esp]
mov edx, dword [edi + 0x68]
dec dword [ebp - 0xc]
mov word [edi + edx*2 + 0x70], cx
inc dword [edi + 0x68]
cmp dword [ebp - 0xc], 0
jne 0x10041e20
mov ecx, dword [edi + 0x64]
add ecx, dword [edi + 0x60]
cmp dword [edi + 0x68], ecx
jb 0x10041c31
cmp dword [edi], 0x1d
je 0x10042483
cmp word [edi + 0x270], 0
jne 0x10041e65
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x1004ad19
jmp 0x1004247d
lea eax, [edi + 0x530]
lea ecx, [edi + 0x6c]
mov dword [ecx], eax
mov dword [edi + 0x4c], eax
lea edx, [edi + 0x2f0]
push edx
lea eax, [edi + 0x54]
push eax
push ecx
mov dword [eax], 9
mov eax, dword [edi + 0x60]
push eax
lea ecx, [edi + 0x70]
push ecx
push 1
call fcn.100448a0
mov dword [ebp - 0x24], eax
test eax, eax
jne 0x1004185d
mov eax, dword [edi + 0x6c]
lea ecx, [edi + 0x6c]
mov dword [edi + 0x50], eax
lea edx, [edi + 0x2f0]
push edx
mov edx, dword [edi + 0x60]
lea eax, [edi + 0x58]
push eax
push ecx
mov ecx, dword [edi + 0x64]
mov dword [eax], 6
push ecx
lea eax, [edi + edx*2 + 0x70]
push eax
push 2
call fcn.100448a0
mov dword [ebp - 0x24], eax
test eax, eax
mov eax, dword [ebp - 8]
jne 0x10042473
mov dword [edi], 0x13
mov dword [edi], 0x14
cmp dword [ebp - 4], 6
jb 0x10041f5a
cmp dword [ebp - 0x10], 0x102
jb 0x10041f5a
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x14]
mov ecx, dword [ebp - 0x10]
mov dword [eax + 0xc], edx
mov edx, dword [ebp - 8]
mov dword [eax], edx
mov edx, dword [ebp - 0x1c]
mov dword [eax + 0x10], ecx
mov ecx, dword [ebp - 4]
push edx
push eax
mov dword [eax + 4], ecx
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], esi
call fcn.100444a0
cmp dword [edi], 0xb
mov eax, dword [ebp + 8]
mov ecx, dword [eax + 0xc]
mov edx, dword [eax + 0x10]
mov ebx, dword [edi + 0x38]
mov esi, dword [edi + 0x3c]
mov dword [ebp - 0x14], ecx
mov ecx, dword [eax]
mov dword [ebp - 0x10], edx
mov edx, dword [eax + 4]
mov dword [ebp - 8], ecx
mov dword [ebp - 4], edx
mov eax, ecx
jne 0x10042483
mov dword [edi + 0x1bc4], 0xffffffff
jmp 0x10042483
mov ecx, dword [edi + 0x54]
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x4c]
mov dword [edi + 0x1bc4], 0
dec edx
and edx, ebx
mov edx, dword [ecx + edx*4]
mov ecx, edx
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], edx
cmp ecx, esi
jbe 0x10041fc5
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [edi + 0x54]
inc eax
add esi, 8
add ebx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x4c]
mov dword [ebp - 8], eax
dec edx
and edx, ebx
mov edx, dword [ecx + edx*4]
mov ecx, edx
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], edx
cmp ecx, esi
ja 0x10041f86
test dl, dl
je 0x10042087
test dl, 0xf0
jne 0x10042087
mov ecx, edx
shr ecx, 8
mov dword [ebp - 0x28], ecx
movzx ecx, cl
mov dword [ebp - 0x18], ecx
movzx ecx, dl
add ecx, dword [ebp - 0x18]
mov dword [ebp - 0x20], edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
dec edx
and edx, ebx
shr edx, cl
mov ecx, dword [ebp - 0xc]
shr ecx, 0x10
add edx, ecx
mov ecx, dword [edi + 0x4c]
mov ecx, dword [ecx + edx*4]
mov dword [ebp - 0xc], ecx
shr ecx, 8
movzx edx, cl
movzx ecx, byte [ebp - 0x28]
add edx, ecx
cmp edx, esi
jbe 0x10042076
lea ecx, [ecx]
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0x20]
dec dword [ebp - 4]
inc eax
add ebx, edx
movzx edx, ch
movzx ecx, cl
add ecx, edx
mov dword [ebp - 0x18], edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
add esi, 8
mov dword [ebp - 8], eax
dec edx
and edx, ebx
shr edx, cl
movzx ecx, word [ebp - 0x1e]
add edx, ecx
mov ecx, dword [edi + 0x4c]
mov ecx, dword [ecx + edx*4]
mov dword [ebp - 0xc], ecx
shr ecx, 8
movzx edx, cl
add edx, dword [ebp - 0x18]
cmp edx, esi
ja 0x10042020
movzx ecx, byte [ebp - 0x1f]
mov edx, dword [ebp - 0xc]
shr ebx, cl
sub esi, ecx
mov dword [edi + 0x1bc4], ecx
mov ecx, edx
shr ecx, 8
movzx ecx, cl
add dword [edi + 0x1bc4], ecx
shr ebx, cl
sub esi, ecx
mov dword [ebp - 0x18], ecx
mov ecx, edx
shr ecx, 0x10
mov dword [edi + 0x40], ecx
test dl, dl
jne 0x100420b3
mov dword [edi], 0x19
jmp 0x10042483
test dl, 0x20
je 0x100420cd
mov dword [edi + 0x1bc4], 0xffffffff
mov dword [edi], 0xb
jmp 0x10042483
test dl, 0x40
je 0x100420e1
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x1004ad19
jmp 0x1004247d
movzx ecx, dl
and ecx, 0xf
mov dword [edi + 0x48], ecx
mov dword [edi], 0x15
mov ecx, dword [edi + 0x48]
test ecx, ecx
je 0x1004213c
cmp esi, ecx
jae 0x10042122
jmp 0x10042100
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, dword [edi + 0x48]
jb 0x10042100
mov ecx, dword [edi + 0x48]
mov edx, 1
shl edx, cl
sub esi, ecx
dec edx
and edx, ebx
add dword [edi + 0x40], edx
shr ebx, cl
add dword [edi + 0x1bc4], ecx
mov ecx, dword [edi + 0x40]
mov dword [edi + 0x1bc8], ecx
mov dword [edi], 0x16
mov ecx, dword [edi + 0x58]
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x50]
dec edx
and edx, ebx
mov edx, dword [ecx + edx*4]
mov ecx, edx
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], edx
cmp ecx, esi
jbe 0x100421af
lea ecx, [ecx]
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
mov ecx, dword [edi + 0x58]
inc eax
add esi, 8
add ebx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [edi + 0x50]
mov dword [ebp - 8], eax
dec edx
and edx, ebx
mov edx, dword [ecx + edx*4]
mov ecx, edx
shr ecx, 8
movzx ecx, cl
mov dword [ebp - 0xc], edx
cmp ecx, esi
ja 0x10042170
test dl, 0xf0
jne 0x10042267
mov ecx, edx
shr ecx, 8
mov dword [ebp - 0x28], ecx
movzx ecx, cl
mov dword [ebp - 0x18], ecx
movzx ecx, dl
add ecx, dword [ebp - 0x18]
mov dword [ebp - 0x20], edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
dec edx
and edx, ebx
shr edx, cl
mov ecx, dword [ebp - 0xc]
shr ecx, 0x10
add edx, ecx
mov ecx, dword [edi + 0x50]
mov ecx, dword [ecx + edx*4]
mov dword [ebp - 0xc], ecx
shr ecx, 8
movzx edx, cl
movzx ecx, byte [ebp - 0x28]
add edx, ecx
cmp edx, esi
jbe 0x10042256
nop
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
mov ecx, esi
shl edx, cl
mov ecx, dword [ebp - 0x20]
dec dword [ebp - 4]
inc eax
add ebx, edx
movzx edx, ch
movzx ecx, cl
add ecx, edx
mov dword [ebp - 0x18], edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
add esi, 8
mov dword [ebp - 8], eax
dec edx
and edx, ebx
shr edx, cl
movzx ecx, word [ebp - 0x1e]
add edx, ecx
mov ecx, dword [edi + 0x50]
mov ecx, dword [ecx + edx*4]
mov dword [ebp - 0xc], ecx
shr ecx, 8
movzx edx, cl
add edx, dword [ebp - 0x18]
cmp edx, esi
ja 0x10042200
movzx ecx, byte [ebp - 0x1f]
mov edx, dword [ebp - 0xc]
shr ebx, cl
sub esi, ecx
add dword [edi + 0x1bc4], ecx
mov ecx, edx
shr ecx, 8
movzx ecx, cl
add dword [edi + 0x1bc4], ecx
shr ebx, cl
sub esi, ecx
mov dword [ebp - 0x18], ecx
test dl, 0x40
je 0x10042290
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], 0x1004ad19
jmp 0x1004247d
mov ecx, edx
movzx edx, dl
shr ecx, 0x10
and edx, 0xf
mov dword [edi + 0x44], ecx
mov dword [edi + 0x48], edx
mov dword [edi], 0x17
mov ecx, dword [edi + 0x48]
test ecx, ecx
je 0x100422ee
cmp esi, ecx
jae 0x100422d4
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, dword [edi + 0x48]
jb 0x100422b2
mov ecx, dword [edi + 0x48]
mov edx, 1
shl edx, cl
sub esi, ecx
dec edx
and edx, ebx
add dword [edi + 0x44], edx
shr ebx, cl
add dword [edi + 0x1bc4], ecx
mov dword [edi], 0x18
cmp dword [ebp - 0x10], 0
je 0x100424de
mov edx, dword [ebp - 0x1c]
sub edx, dword [ebp - 0x10]
mov ecx, dword [edi + 0x44]
cmp ecx, edx
jbe 0x10042354
sub ecx, edx
mov dword [ebp - 0xc], ecx
cmp ecx, dword [edi + 0x2c]
jbe 0x10042322
cmp dword [edi + 0x1bc0], 0
jne 0x10042473
mov edx, dword [edi + 0x30]
cmp ecx, edx
jbe 0x10042338
sub ecx, edx
mov edx, dword [edi + 0x34]
add edx, dword [edi + 0x28]
mov dword [ebp - 0xc], ecx
sub edx, ecx
jmp 0x10042343
mov edx, dword [edi + 0x34]
sub edx, ecx
add edx, dword [edi + 0x30]
mov ecx, dword [ebp - 0xc]
mov dword [ebp - 0x28], edx
mov edx, dword [edi + 0x40]
mov dword [ebp - 0x20], edx
cmp ecx, edx
jbe 0x10042365
mov ecx, edx
jmp 0x10042362
mov edx, dword [ebp - 0x14]
sub edx, ecx
mov ecx, dword [edi + 0x40]
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x20], ecx
mov dword [ebp - 0xc], ecx
mov edx, dword [ebp - 0x10]
cmp ecx, edx
jbe 0x10042371
mov ecx, edx
mov dword [ebp - 0xc], ecx
sub edx, ecx
mov dword [ebp - 0x10], edx
mov edx, dword [ebp - 0x20]
sub edx, ecx
mov ecx, dword [ebp - 0x28]
sub ecx, dword [ebp - 0x14]
mov dword [edi + 0x40], edx
mov dword [ebp - 0x28], ecx
jmp 0x10042393
mov ecx, dword [ebp - 0x28]
mov edx, dword [ebp - 0x14]
mov dl, byte [ecx + edx]
mov ecx, dword [ebp - 0x14]
mov byte [ecx], dl
inc ecx
dec dword [ebp - 0xc]
mov dword [ebp - 0x14], ecx
jne 0x10042390
cmp dword [edi + 0x40], 0
jne 0x10042483
mov dword [edi], 0x14
jmp 0x10042483
cmp dword [ebp - 0x10], 0
je 0x100424de
mov ecx, dword [ebp - 0x14]
mov dl, byte [edi + 0x40]
mov byte [ecx], dl
inc ecx
dec dword [ebp - 0x10]
mov dword [ebp - 0x14], ecx
mov dword [edi], 0x14
jmp 0x10042483
cmp dword [edi + 8], 0
je 0x100424c8
cmp esi, 0x20
jae 0x10042412
nop
cmp dword [ebp - 4], 0
je 0x100424de
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, esi
shl edx, cl
inc eax
add esi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp esi, 0x20
jb 0x100423f0
mov ecx, dword [ebp - 0x1c]
sub ecx, dword [ebp - 0x10]
mov edx, dword [ebp + 8]
add dword [edx + 0x14], ecx
add dword [edi + 0x1c], ecx
mov dword [ebp - 0x1c], ecx
test ecx, ecx
je 0x10042442
mov eax, dword [ebp - 0x14]
push ecx
sub eax, ecx
mov ecx, dword [edi + 0x18]
call fcn.10043e90
mov ecx, dword [ebp + 8]
mov dword [edi + 0x18], eax
mov dword [ecx + 0x30], eax
mov eax, dword [ebp - 8]
mov edx, dword [ebp - 0x10]
mov dword [ebp - 0x1c], edx
mov ecx, ebx
and ecx, 0xff00
mov edx, ebx
shl edx, 0x10
add ecx, edx
mov edx, ebx
shr edx, 8
and edx, 0xff00
shl ecx, 8
add ecx, edx
mov edx, ebx
shr edx, 0x18
add ecx, edx
cmp ecx, dword [edi + 0x18]
je 0x100424c4
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], 0x1004ad19
mov dword [edi], 0x1d
mov ecx, dword [edi]
cmp ecx, 0x1e
jbe 0x10041801
pop esi
pop ebx
mov eax, 0xfffffffe
pop edi
mov esp, ebp
pop ebp
ret 4
mov ecx, dword [ebp - 0x14]
mov dword [edi + 0x3c], esi
mov dword [edx], eax
mov eax, dword [ebp - 4]
pop esi
mov dword [edi + 0x38], ebx
mov dword [edx + 0xc], ecx
mov ecx, dword [ebp - 0x10]
pop ebx
mov dword [edx + 4], eax
mov dword [edx + 0x10], ecx
mov eax, 2
pop edi
mov esp, ebp
pop ebp
ret 4
xor ebx, ebx
xor esi, esi
mov dword [edi], 0x1c
mov dword [ebp - 0x24], 1
jmp 0x100424de
mov dword [ebp - 0x24], 0xfffffffd
cmp dword [edi + 0x28], 0
mov ecx, dword [ebp + 8]
mov edx, dword [ebp - 0x14]
mov dword [ecx + 0xc], edx
mov edx, dword [ebp - 0x10]
mov dword [ecx], eax
mov eax, dword [ebp - 4]
mov dword [ecx + 0x10], edx
mov dword [ecx + 4], eax
mov dword [edi + 0x38], ebx
mov dword [edi + 0x3c], esi
jne 0x1004250d
cmp dword [edi], 0x1a
jge 0x10042531
mov ecx, edx
cmp dword [ebp - 0x1c], ecx
je 0x10042531
mov edx, dword [ebp + 8]
mov eax, dword [ebp - 0x1c]
push edx
call fcn.10041670
test eax, eax
je 0x10042531
mov dword [edi], 0x1e
pop esi
pop ebx
mov eax, 0xfffffffc
pop edi
mov esp, ebp
pop ebp
ret 4
mov esi, dword [ebp + 8]
mov eax, dword [ebp - 0x2c]
mov ecx, dword [ebp - 0x1c]
sub ecx, dword [esi + 0x10]
sub eax, dword [esi + 4]
add dword [esi + 0x14], ecx
add dword [esi + 8], eax
add dword [edi + 0x1c], ecx
cmp dword [edi + 8], 0
je 0x10042567
test ecx, ecx
je 0x10042567
mov eax, dword [esi + 0xc]
push ecx
sub eax, ecx
mov ecx, dword [edi + 0x18]
call fcn.10043e90
mov dword [edi + 0x18], eax
mov dword [esi + 0x30], eax
mov eax, dword [edi]
cmp eax, 0x13
je 0x10042577
cmp eax, 0xe
je 0x10042577
xor ecx, ecx
jmp 0x1004257c
mov ecx, 0x100
mov edx, dword [edi + 4]
neg edx
sbb edx, edx
xor ebx, ebx
and edx, 0x40
cmp eax, 0xb
mov eax, dword [ebp - 0x24]
setne bl
add edx, ecx
dec ebx
and ebx, 0x80
add ebx, edx
add ebx, dword [edi + 0x3c]
mov dword [esi + 0x2c], ebx
test eax, eax
jne 0x100417f8
pop esi
pop ebx
mov eax, 0xfffffffb
pop edi
mov esp, ebp
pop ebp
ret 4
mov eax, 0xfffffffe
pop edi
mov esp, ebp
pop ebp
ret 4