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

Disassembly:
push ebp
mov ebp, esp
sub esp, 0xc
push ebx
push edi
mov edi, dword [ebp + 8]
test edi, edi
je 0x4038d9
cmp dword [edi + 0x20], 0
je 0x4038d9
cmp dword [edi + 0x24], 0
je 0x4038d9
mov eax, dword [edi + 0x1c]
test eax, eax
je 0x4038d9
cmp dword [eax], edi
jne 0x4038d9
mov eax, dword [eax + 4]
cmp eax, 0x2a
je 0x402c2b
cmp eax, 0x39
je 0x402c2b
cmp eax, 0x45
je 0x402c2b
cmp eax, 0x49
je 0x402c2b
cmp eax, 0x5b
je 0x402c2b
cmp eax, 0x67
je 0x402c2b
cmp eax, 0x71
je 0x402c2b
cmp eax, 0x29a
jne 0x4038d9
mov ebx, dword [ebp + 0xc]
cmp ebx, 5
ja 0x4038d9
cmp dword [edi + 0xc], 0
push esi
mov esi, dword [edi + 0x1c]
je 0x4038c6
cmp dword [edi + 4], 0
je 0x402c54
cmp dword [edi], 0
je 0x4038c6
cmp dword [esi + 4], 0x29a
jne 0x402c66
cmp ebx, 4
jne 0x4038c6
cmp dword [edi + 0x10], 0
je 0x402d20
cmp dword [esi + 0x14], 0
mov edx, dword [esi + 0x28]
mov dword [esi + 0x28], ebx
je 0x402cda
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x402cc4
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x402cc4
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [edi + 0x10], 0
jne 0x402d0c
mov dword [esi + 0x28], 0xffffffff
pop esi
pop edi
xor eax, eax
pop ebx
mov esp, ebp
pop ebp
ret
cmp dword [edi + 4], 0
jne 0x402d0c
xor eax, eax
mov ecx, 9
cmp edx, 4
cmovg eax, ecx
add edx, edx
sub edx, eax
xor ecx, ecx
cmp ebx, 4
mov eax, 9
cmovg ecx, eax
lea eax, [ebx + ebx]
sub eax, ecx
cmp eax, edx
jg 0x402d0c
cmp ebx, 4
jne 0x402d20
mov eax, dword [esi + 4]
cmp eax, 0x29a
jne 0x402d33
cmp dword [edi + 4], 0
je 0x402e92
pop esi
mov dword [edi + 0x18], str.buffer_error
mov eax, 0xfffffffb
pop edi
pop ebx
mov esp, ebp
pop ebp
ret
cmp eax, 0x2a
jne 0x402e92
cmp dword [esi + 0x18], 0
jne 0x402d4e
mov dword [esi + 4], 0x71
jmp 0x402e92
mov ecx, dword [esi + 0x30]
shl ecx, 0xc
sub ecx, 0x7800
cmp dword [esi + 0x88], 2
mov ebx, ecx
jge 0x402d95
mov eax, dword [esi + 0x84]
cmp eax, 2
jl 0x402d95
cmp eax, 6
jge 0x402d7f
mov edx, 0x40
lea eax, [edx + 0x20]
jmp 0x402d9a
jne 0x402d8b
mov edx, 0x80
lea eax, [edx + 0x20]
jmp 0x402d9a
mov edx, 0xc0
lea eax, [edx + 0x20]
jmp 0x402d9a
xor edx, edx
lea eax, [edx + 0x20]
or ecx, edx
cmp dword [esi + 0x6c], 0
je 0x402da6
mov ecx, eax
or ecx, ebx
mov eax, 0x8421085
mul ecx
mov eax, dword [esi + 8]
sub ecx, edx
shr ecx, 1
add ecx, edx
shr ecx, 4
inc ecx
mov ebx, ecx
shl ebx, 5
sub ebx, ecx
mov ecx, dword [esi + 0x14]
mov edx, ebx
shr edx, 8
mov byte [ecx + eax], dl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov ebx, dword [esi + 0x14]
inc ebx
cmp dword [esi + 0x6c], 0
mov dword [esi + 0x14], ebx
je 0x402e28
movzx edx, word [edi + 0x32]
mov eax, dword [esi + 8]
mov ecx, edx
shr ecx, 8
mov byte [ebx + eax], cl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], dl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx ebx, word [edi + 0x30]
mov ecx, ebx
shr ecx, 8
mov byte [edx + eax], cl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
push 0
push 0
push 0
call fcn.00401000
mov dword [edi + 0x30], eax
add esp, 0xc
mov dword [esi + 4], 0x71
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x402e88
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x402e88
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x402cca
cmp dword [esi + 4], 0x39
jne 0x4030e8
push 0
push 0
push 0
call sym.libz.exe_crc32_z
mov dword [edi + 0x30], eax
add esp, 0xc
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0x1f
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], 0x8b
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], 8
mov edx, dword [esi + 0x14]
mov ebx, dword [esi + 0x1c]
inc edx
mov dword [esi + 0x14], edx
test ebx, ebx
jne 0x402fbe
mov eax, dword [esi + 8]
mov byte [edx + eax], bl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x84]
inc edx
mov dword [esi + 0x14], edx
cmp eax, 9
jne 0x402f35
mov cl, 2
jmp 0x402f49
cmp dword [esi + 0x88], 2
jge 0x402f47
cmp eax, 2
jl 0x402f47
xor cl, cl
jmp 0x402f49
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], 0xa
inc dword [esi + 0x14]
mov dword [esi + 4], 0x71
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x402faf
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x402faf
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x402cca
jmp 0x4030e8
mov ecx, dword [ebx + 0x24]
mov eax, dword [ebx + 0x2c]
neg ecx
sbb cl, cl
and cl, 0x10
neg eax
sbb al, al
and al, 2
add cl, al
mov eax, dword [ebx + 0x1c]
neg eax
sbb al, al
and al, 8
add cl, al
mov eax, dword [ebx + 0x10]
neg eax
sbb al, al
and al, 4
add cl, al
cmp dword [ebx], 0
setne al
add cl, al
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
movzx eax, byte [eax + 4]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
movzx eax, byte [eax + 5]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
movzx eax, byte [eax + 6]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
movzx eax, byte [eax + 7]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x84]
inc edx
mov dword [esi + 0x14], edx
cmp eax, 9
jne 0x40305d
mov cl, 2
jmp 0x403071
cmp dword [esi + 0x88], 2
jge 0x40306f
cmp eax, 2
jl 0x40306f
xor cl, cl
jmp 0x403071
mov cl, 4
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
mov al, byte [eax + 0xc]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov dword [esi + 0x14], edx
cmp dword [eax + 0x10], 0
je 0x4030bf
mov ecx, dword [esi + 8]
movzx eax, byte [eax + 0x14]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
inc edx
mov ecx, dword [esi + 8]
mov dword [esi + 0x14], edx
movzx eax, byte [eax + 0x15]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
inc edx
mov dword [esi + 0x14], edx
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x4030da
push edx
push dword [esi + 8]
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x45
mov eax, dword [esi + 4]
cmp eax, 0x45
jne 0x403239
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x10], 0
je 0x403230
movzx edx, word [eax + 0x14]
mov ecx, dword [esi + 0x14]
sub edx, dword [esi + 0x20]
mov ebx, dword [esi + 0xc]
mov dword [ebp - 4], ecx
mov dword [ebp + 8], edx
lea eax, [ecx + edx]
mov dword [ebp - 8], ecx
cmp eax, ebx
jbe 0x4031df
mov eax, dword [esi + 0x1c]
sub ebx, ecx
push ebx
mov dword [ebp - 0xc], ebx
mov eax, dword [eax + 0x10]
add eax, dword [esi + 0x20]
push eax
mov eax, dword [esi + 8]
add eax, ecx
push eax
call fcn.0040edf0
mov eax, dword [esi + 0x1c]
add esp, 0xc
mov edx, dword [esi + 0xc]
mov dword [esi + 0x14], edx
cmp dword [eax + 0x2c], 0
je 0x40316d
mov ecx, dword [ebp - 4]
cmp edx, ecx
jbe 0x40316d
mov eax, dword [esi + 8]
sub edx, ecx
push edx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
add dword [esi + 0x20], ebx
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp - 4], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x4031b8
mov eax, dword [ebp - 4]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp - 4]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x4031b8
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov eax, dword [esi + 0x14]
mov dword [ebp - 8], eax
test eax, eax
jne 0x402cca
mov edx, dword [ebp + 8]
xor ecx, ecx
sub edx, dword [ebp - 0xc]
mov ebx, dword [esi + 0xc]
mov dword [ebp - 4], eax
mov dword [ebp + 8], edx
cmp edx, ebx
ja 0x403122
mov eax, dword [esi + 0x1c]
push edx
mov eax, dword [eax + 0x10]
add eax, dword [esi + 0x20]
push eax
mov eax, dword [esi + 8]
add eax, dword [ebp - 8]
push eax
call fcn.0040edf0
mov edx, dword [esi + 0x14]
add esp, 0xc
mov eax, dword [esi + 0x1c]
add edx, dword [ebp + 8]
mov dword [esi + 0x14], edx
cmp dword [eax + 0x2c], 0
je 0x403229
mov ecx, dword [ebp - 4]
cmp edx, ecx
jbe 0x403229
mov eax, dword [esi + 8]
sub edx, ecx
push edx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x49
jmp 0x403242
cmp eax, 0x49
jne 0x40333d
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x1c], 0
je 0x403334
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ebx, dword [esi + 0xc]
jne 0x4032db
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x403280
cmp ebx, ecx
jbe 0x403280
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x4032c8
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x4032c8
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x402cca
mov dword [ebp + 8], 0
xor ebx, ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x1c]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x403306
mov ecx, dword [ebp + 8]
jmp 0x403257
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x40332d
mov ecx, dword [ebp + 8]
cmp ebx, ecx
jbe 0x40332d
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], 0
mov dword [esi + 4], 0x5b
jmp 0x403346
cmp eax, 0x5b
jne 0x403443
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x24], 0
je 0x40343a
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
nop dword [eax + eax]
cmp ebx, dword [esi + 0xc]
jne 0x4033e8
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x40338d
cmp ebx, ecx
jbe 0x40338d
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x4033d5
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x4033d5
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x402cca
mov dword [ebp + 8], 0
xor ebx, ebx
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x24]
mov dl, byte [ecx + eax]
lea eax, [ecx + 1]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
mov dword [esi + 0x14], ebx
test dl, dl
je 0x403413
mov ecx, dword [ebp + 8]
jmp 0x403360
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x40343a
mov ecx, dword [ebp + 8]
cmp ebx, ecx
jbe 0x40343a
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x67
jmp 0x40344c
cmp eax, 0x67
jne 0x40353f
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x4034e6
mov edx, dword [esi + 0x14]
lea eax, [edx + 2]
cmp eax, dword [esi + 0xc]
jbe 0x4034b7
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x4034ac
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x4034ac
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov edx, dword [esi + 0x14]
test edx, edx
jne 0x402cca
mov ecx, dword [esi + 8]
movzx eax, byte [edi + 0x30]
push 0
push 0
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0x31]
push 0
mov byte [edx + ecx], al
inc dword [esi + 0x14]
call sym.libz.exe_crc32_z
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x71
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x403535
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x403535
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [esi + 0x14], 0
jne 0x402cca
cmp dword [edi + 4], 0
mov ebx, dword [ebp + 0xc]
jne 0x403563
cmp dword [esi + 0x74], 0
jne 0x403563
test ebx, ebx
je 0x402cd1
cmp dword [esi + 4], 0x29a
je 0x40375b
mov eax, dword [esi + 0x84]
test eax, eax
jne 0x403576
push ebx
push esi
call fcn.00403d80
jmp 0x4035aa
mov ecx, dword [esi + 0x88]
cmp ecx, 2
jne 0x40358c
mov edx, ebx
mov ecx, esi
call fcn.00404f40
jmp 0x4035ad
cmp ecx, 3
jne 0x40359c
mov edx, ebx
mov ecx, esi
call fcn.00404bd0
jmp 0x4035ad
lea eax, [eax + eax*2]
mov eax, dword [eax*4 + 0x4298e8]
push ebx
push esi
call eax
add esp, 8
cmp eax, 2
je 0x4035b7
cmp eax, 3
jne 0x4035be
mov dword [esi + 4], 0x29a
test eax, eax
je 0x4038ac
cmp eax, 2
je 0x4038ac
cmp eax, 1
jne 0x40375b
cmp ebx, eax
jne 0x4036aa
mov ecx, dword [esi + 0x16bc]
lea ebx, [esi + 0x16b8]
mov eax, 2
shl ax, cl
or ax, word [ebx]
movzx edx, ax
cmp ecx, 0xd
jle 0x403649
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov word [ebx], dx
mov byte [ecx + eax], dl
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov al, byte [ebx + 1]
mov dword [esi + 0x14], edx
mov byte [edx + ecx], al
movzx eax, word [esi + 0x16bc]
add dword [esi + 0x16bc], 0xfffffff3
mov ecx, dword [esi + 0x16bc]
inc dword [esi + 0x14]
mov dword [ebp + 8], ecx
mov cl, 0x10
sub cl, al
mov eax, 2
shr ax, cl
movzx edx, ax
mov eax, dword [ebp + 8]
jmp 0x403652
lea eax, [ecx + 3]
mov dword [esi + 0x16bc], eax
mov ecx, ebx
mov word [ecx], dx
movzx ecx, dx
cmp eax, 9
jle 0x403693
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov word [ebx], dx
mov byte [ecx + eax], dl
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov al, byte [ebx + 1]
mov dword [esi + 0x14], edx
mov byte [edx + ecx], al
xor eax, eax
inc dword [esi + 0x14]
mov ecx, esi
add dword [esi + 0x16bc], 0xfffffff7
mov word [ebx], ax
call fcn.0040b7c0
jmp 0x403706
add eax, 7
mov dword [esi + 0x16bc], eax
mov eax, ecx
mov ecx, esi
mov word [ebx], ax
call fcn.0040b7c0
jmp 0x403706
cmp ebx, 5
je 0x403706
push 0
push 0
xor edx, edx
mov ecx, esi
call fcn.0040c6e0
add esp, 8
cmp ebx, 3
jne 0x403706
mov eax, dword [esi + 0x44]
xor edx, edx
mov ecx, dword [esi + 0x4c]
mov word [eax + ecx*2 - 2], dx
mov eax, dword [esi + 0x4c]
lea eax, [eax*2 - 2]
push eax
push edx
push dword [esi + 0x44]
call fcn.0040e370
add esp, 0xc
cmp dword [esi + 0x74], 0
jne 0x403706
mov dword [esi + 0x6c], 0
mov dword [esi + 0x5c], 0
mov dword [esi + 0x16b4], 0
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x40374e
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x40374e
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
cmp dword [edi + 0x10], 0
je 0x402cca
mov ebx, dword [ebp + 0xc]
cmp ebx, 4
jne 0x402cd1
mov eax, dword [esi + 0x18]
test eax, eax
jg 0x403775
pop esi
pop edi
lea eax, [ebx - 3]
pop ebx
mov esp, ebp
pop ebp
ret
cmp eax, 2
jne 0x403804
mov edx, dword [esi + 0x14]
movzx eax, byte [edi + 0x30]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0x31]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0x32]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0x33]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 8]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 9]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0xa]
mov byte [edx + ecx], al
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx eax, byte [edi + 0xb]
mov byte [edx + ecx], al
jmp 0x403846
movzx ebx, word [edi + 0x32]
mov ecx, dword [esi + 0x14]
mov edx, ebx
mov eax, dword [esi + 8]
shr edx, 8
mov byte [ecx + eax], dl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc edx
mov dword [esi + 0x14], edx
movzx ebx, word [edi + 0x30]
mov ecx, ebx
shr ecx, 8
mov byte [edx + eax], cl
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
inc ecx
mov dword [esi + 0x14], ecx
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ebx, dword [edi + 0x1c]
mov ecx, ebx
mov dword [ebp + 8], ebx
call fcn.0040b7c0
mov eax, dword [ebx + 0x14]
mov ebx, dword [edi + 0x10]
cmp eax, ebx
cmovbe ebx, eax
test ebx, ebx
je 0x403891
mov eax, dword [ebp + 8]
push ebx
push dword [eax + 0x10]
push dword [edi + 0xc]
call fcn.0040edf0
mov ecx, dword [ebp + 8]
add esp, 0xc
add dword [edi + 0xc], ebx
add dword [ecx + 0x10], ebx
add dword [edi + 0x14], ebx
sub dword [edi + 0x10], ebx
sub dword [ecx + 0x14], ebx
jne 0x403891
mov eax, dword [ecx + 8]
mov dword [ecx + 0x10], eax
mov eax, dword [esi + 0x18]
test eax, eax
jle 0x40389d
neg eax
mov dword [esi + 0x18], eax
xor eax, eax
cmp dword [esi + 0x14], eax
pop esi
pop edi
sete al
pop ebx
mov esp, ebp
pop ebp
ret
cmp dword [edi + 0x10], 0
jne 0x402cd1
mov dword [esi + 0x28], 0xffffffff
xor eax, eax
pop esi
pop edi
pop ebx
mov esp, ebp
pop ebp
ret
pop esi
mov dword [edi + 0x18], str.stream_error
mov eax, 0xfffffffe
pop edi
pop ebx
mov esp, ebp
pop ebp
ret
pop edi
mov eax, 0xfffffffe
pop ebx
mov esp, ebp
pop ebp
ret