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

Disassembly:
sub esp, 0x44
push ebx
push ebp
push esi
mov esi, ecx
push edi
mov dword [esp + 0x30], esi
call fcn.00436075
test eax, eax
jne case.default.0x43637d
mov eax, dword [esi + 0xc]
mov dword [esp + 0x2c], eax
test eax, eax
je case.default.0x43637d
mov eax, dword [esi]
mov dword [esp + 0x14], eax
test eax, eax
jne 0x4362ff
cmp dword [esi + 4], eax
jne case.default.0x43637d
mov ebp, dword [esi + 0x1c]
mov edx, 0x3f40
mov ecx, dword [ebp + 4]
cmp ecx, 0x3f3f
jne 0x436324
mov dword [ebp + 4], edx
mov ecx, edx
mov eax, dword [esi + 0xc]
mov dword [esp + 0x2c], eax
mov eax, dword [esi]
mov dword [esp + 0x14], eax
mov eax, dword [esi + 0x10]
mov edi, dword [esi + 4]
mov edx, dword [ebp + 0x3c]
mov ebx, dword [ebp + 0x40]
mov dword [esp + 0x28], eax
mov dword [esp + 0x34], eax
xor eax, eax
mov dword [esp + 0x38], eax
lea eax, [ecx - 0x3f34]
mov dword [esp + 0x1c], edi
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [esp + 0x44], edi
cmp eax, 0x1e
ja case.default.0x43637d
mov dword [esp + 0x3c], 0x1f
mov dword [esp + 0x48], 0x3f51
mov dword [esp + 0x4c], 1
mov dword [esp + 0x50], 0x3f46
jmp dword [eax*4 + 0x437813]
mov eax, dword [ebp + 0xc]
test eax, eax
jne 0x436397
mov dword [ebp + 4], 0x3f40
jmp 0x4369aa
push 0x10
pop ecx
cmp ebx, ecx
jae 0x4363d4
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
inc eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], ebx
cmp ebx, 0x10
jb 0x4363a2
mov eax, dword [ebp + 0xc]
test al, 2
je 0x436431
cmp edx, 0x8b1f
jne 0x436431
xor ebx, ebx
cmp dword [ebp + 0x28], ebx
jne 0x4363ee
mov dword [ebp + 0x28], 0xf
push ebx
xor edx, edx
xor ecx, ecx
call fcn.00438343
mov dword [ebp + 0x1c], eax
lea edx, [esp + 0x28]
mov eax, dword [esp + 0x40]
mov byte [esp + 0x28], al
mov byte [esp + 0x29], 0x8b
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438343
pop ecx
mov edx, ebx
mov dword [ebp + 0x1c], eax
pop ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f35
jmp 0x4369aa
and dword [ebp + 0x14], 0
mov ecx, dword [ebp + 0x24]
test ecx, ecx
je 0x436443
or dword [ecx + 0x30], 0xffffffff
mov eax, dword [ebp + 0xc]
test al, 1
je 0x4364ee
movzx ecx, dl
mov eax, edx
shr eax, 8
xor edx, edx
shl ecx, 8
add eax, ecx
div dword [esp + 0x3c]
test edx, edx
mov edx, dword [esp + 0x18]
jne 0x4364ee
mov eax, edx
and al, 0xf
cmp al, 8
je 0x43647b
mov dword [esi + 0x18], str.unknown_compression_method
jmp 0x4364f5
mov eax, dword [ebp + 0x28]
sub ebx, 4
shr edx, 4
mov ecx, edx
mov dword [esp + 0x18], edx
and ecx, 0xf
mov dword [esp + 0x20], ebx
add ecx, 8
test eax, eax
jne 0x43649d
mov dword [ebp + 0x28], ecx
mov eax, ecx
cmp ecx, 0xf
ja 0x4364e5
cmp ecx, eax
ja 0x4364e5
xor eax, eax
xor ebx, ebx
inc eax
xor edx, edx
shl eax, cl
xor ecx, ecx
push ebx
mov dword [ebp + 0x18], eax
call fcn.004378e3
mov edx, dword [esp + 0x1c]
shr edx, 8
not edx
mov dword [ebp + 0x1c], eax
and edx, 2
mov dword [esi + 0x30], eax
or edx, 0x3f3d
mov dword [ebp + 4], edx
mov edx, ebx
pop ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x4369aa
mov dword [esi + 0x18], str.invalid_window_size
jmp 0x4364f5
mov dword [esi + 0x18], str.incorrect_header_check
mov dword [ebp + 4], 0x3f51
jmp 0x4369aa
push 0x10
pop eax
cmp ebx, eax
jae 0x43653d
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
mov dword [esp + 0x20], ebx
cmp ebx, ecx
jb 0x43650c
mov dword [ebp + 0x14], edx
cmp dl, 8
jne 0x436472
test edx, 0xe000
je 0x43655a
mov dword [esi + 0x18], str.unknown_header_flags_set
jmp 0x4364f5
mov edi, dword [ebp + 0x24]
mov ecx, edx
shr ecx, 8
mov eax, edx
test edi, edi
je 0x436572
mov eax, ecx
and eax, 1
mov dword [edi], eax
mov eax, dword [ebp + 0x14]
test eax, 0x200
je 0x436599
test byte [ebp + 0xc], 4
je 0x436599
mov byte [esp + 0x24], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x25], cl
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438343
pop ecx
mov dword [ebp + 0x1c], eax
mov edi, dword [esp + 0x1c]
xor eax, eax
mov edx, eax
mov dword [ebp + 4], 0x3f36
mov dword [esp + 0x18], edx
mov ebx, eax
cmp ebx, 0x20
jae 0x4365e2
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
inc eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], eax
cmp ebx, 0x20
jb 0x4365b7
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4365ec
mov dword [eax + 4], edx
test dword [ebp + 0x14], 0x200
je 0x43662a
test byte [ebp + 0xc], 4
je 0x43662a
mov eax, edx
mov byte [esp + 0x24], dl
shr eax, 8
mov byte [esp + 0x25], al
mov eax, edx
shr edx, 0x18
shr eax, 0x10
mov byte [esp + 0x27], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x26], al
mov ecx, dword [ebp + 0x1c]
push 4
call fcn.00438343
pop ecx
mov dword [ebp + 0x1c], eax
xor eax, eax
mov dword [ebp + 4], 0x3f37
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
push 0x10
pop eax
cmp ebx, eax
jae 0x436673
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
cmp ebx, ecx
jb 0x436646
mov edi, dword [ebp + 0x24]
mov ecx, edx
shr ecx, 8
test edi, edi
je 0x43668b
movzx eax, dl
mov dword [edi + 8], eax
mov eax, dword [ebp + 0x24]
mov dword [eax + 0xc], ecx
test dword [ebp + 0x14], 0x200
je 0x4366b4
test byte [ebp + 0xc], 4
je 0x4366b4
mov byte [esp + 0x24], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x25], cl
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438343
pop ecx
mov dword [ebp + 0x1c], eax
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov edx, ecx
mov dword [ebp + 4], 0x3f38
mov ebx, ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x4366d1
xor ecx, ecx
test dword [ebp + 0x14], 0x400
je 0x436759
push 0x10
pop eax
cmp ebx, eax
jae 0x436712
mov eax, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [eax]
mov ecx, ebx
shl eax, cl
dec edi
add edx, eax
mov dword [esp + 0x1c], edi
mov eax, dword [esp + 0x14]
add ebx, 8
push 0x10
inc eax
mov dword [esp + 0x1c], edx
pop ecx
mov dword [esp + 0x14], eax
cmp ebx, ecx
jb 0x4366e5
mov eax, dword [ebp + 0x24]
mov dword [ebp + 0x44], edx
test eax, eax
je 0x43671f
mov dword [eax + 0x14], edx
test dword [ebp + 0x14], 0x200
je 0x43674b
test byte [ebp + 0xc], 4
je 0x43674b
mov byte [esp + 0x24], dl
shr edx, 8
mov byte [esp + 0x25], dl
lea edx, [esp + 0x24]
mov ecx, dword [ebp + 0x1c]
push 2
call fcn.00438343
pop ecx
mov dword [ebp + 0x1c], eax
xor eax, eax
mov ebx, eax
mov dword [esp + 0x18], eax
mov dword [esp + 0x20], ebx
jmp 0x436763
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x436763
mov dword [eax + 0x10], ecx
mov dword [ebp + 4], 0x3f39
mov eax, dword [ebp + 0x14]
test eax, 0x400
je 0x4367ff
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [esp + 0x1c]
cmovbe edi, ecx
test edi, edi
je 0x4367f7
mov edx, dword [ebp + 0x24]
test edx, edx
je 0x4367cb
mov esi, dword [edx + 0x10]
test esi, esi
mov dword [esp + 0x40], esi
mov esi, dword [esp + 0x30]
je 0x4367cb
mov edx, dword [edx + 0x14]
sub edx, ecx
mov ecx, dword [ebp + 0x24]
mov ecx, dword [ecx + 0x18]
lea eax, [edi + edx]
cmp eax, ecx
jbe 0x4367b2
sub ecx, edx
jmp 0x4367b4
mov ecx, edi
mov eax, dword [esp + 0x40]
push ecx
push dword [esp + 0x18]
add eax, edx
push eax
call fcn.0043be80
mov eax, dword [ebp + 0x14]
add esp, 0xc
test eax, 0x200
je 0x4367e9
test byte [ebp + 0xc], 4
je 0x4367e9
mov edx, dword [esp + 0x14]
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438343
pop ecx
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
sub dword [ebp + 0x44], edi
mov ecx, dword [ebp + 0x44]
test ecx, ecx
jne 0x437706
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov dword [ebp + 0x44], ecx
mov dword [ebp + 4], 0x3f3a
jmp 0x436813
xor ecx, ecx
test dword [ebp + 0x14], 0x800
je 0x4368a0
test edi, edi
je 0x437706
mov esi, dword [esp + 0x1c]
mov edi, ecx
mov edx, dword [esp + 0x14]
mov al, byte [edi + edx]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x43685e
mov edx, dword [eax + 0x1c]
test edx, edx
je 0x43685a
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [eax + 0x20]
jae 0x43685a
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebp + 0x44]
mov edx, dword [esp + 0x14]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x43686a
cmp edi, esi
jb 0x436832
test dword [ebp + 0x14], 0x200
mov esi, dword [esp + 0x30]
je 0x43688e
test byte [ebp + 0xc], 4
je 0x43688e
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438343
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
test cl, cl
jne 0x437706
jmp 0x4368aa
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x4368aa
mov dword [eax + 0x1c], ecx
mov edi, dword [esp + 0x1c]
xor ecx, ecx
mov dword [ebp + 0x44], ecx
mov dword [ebp + 4], 0x3f3b
jmp 0x4368be
xor ecx, ecx
test dword [ebp + 0x14], 0x1000
je 0x43694b
test edi, edi
je 0x437706
mov esi, dword [esp + 0x1c]
mov edi, ecx
mov edx, dword [esp + 0x14]
mov al, byte [edi + edx]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x436909
mov edx, dword [eax + 0x24]
test edx, edx
je 0x436905
mov ecx, dword [ebp + 0x44]
cmp ecx, dword [eax + 0x28]
jae 0x436905
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebp + 0x44]
mov edx, dword [esp + 0x14]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x436915
cmp edi, esi
jb 0x4368dd
test dword [ebp + 0x14], 0x200
mov esi, dword [esp + 0x30]
je 0x436939
test byte [ebp + 0xc], 4
je 0x436939
mov ecx, dword [ebp + 0x1c]
push edi
call fcn.00438343
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebp + 0x1c], eax
sub dword [esp + 0x1c], edi
add dword [esp + 0x14], edi
test cl, cl
jne 0x437706
jmp 0x436955
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x436955
mov dword [eax + 0x24], ecx
mov edx, dword [esp + 0x18]
mov dword [ebp + 4], 0x3f3c
mov edi, dword [ebp + 0x14]
test edi, 0x200
jne 0x4369f4
xor ecx, ecx
mov eax, dword [ebp + 0x24]
test eax, eax
je 0x43698a
mov edx, dword [esp + 0x4c]
sar edi, 9
and edi, edx
mov dword [eax + 0x2c], edi
mov eax, dword [ebp + 0x24]
mov dword [eax + 0x30], edx
push ecx
xor edx, edx
xor ecx, ecx
call fcn.00438343
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
pop ecx
mov dword [ebp + 4], 0x3f3f
mov edx, dword [esp + 0x18]
mov edi, dword [esp + 0x1c]
mov ecx, dword [ebp + 4]
lea eax, [ecx - 0x3f34]
cmp eax, 0x1e
jbe switch.0x0043637d
push 0xfffffffffffffffe
pop eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x44
ret
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
push 0x10
pop eax
cmp ebx, eax
jb 0x4369c7
test byte [ebp + 0xc], 4
je 0x436a19
movzx eax, word [ebp + 0x1c]
cmp edx, eax
je 0x436a19
mov dword [esi + 0x18], str.header_crc_mismatch
mov dword [ebp + 4], 0x3f51
jmp 0x4369a6
xor ecx, ecx
mov ebx, ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x20], ebx
jmp 0x436971
cmp ebx, 0x20
jae 0x436a5e
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 0x20
jb 0x436a33
mov ecx, edx
mov ebx, 0xff00
mov eax, edx
and ecx, ebx
shl eax, 0x10
add ecx, eax
mov eax, edx
shr eax, 8
and eax, ebx
shl ecx, 8
shr edx, 0x18
add eax, ecx
add eax, edx
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
xor eax, eax
mov edx, eax
mov dword [ebp + 4], 0x3f3e
mov dword [esp + 0x18], edx
mov ebx, eax
jmp 0x436a9a
xor eax, eax
cmp dword [ebp + 0x10], eax
je 0x4376c9
push eax
xor edx, edx
xor ecx, ecx
call fcn.004378e3
mov edx, dword [esp + 0x1c]
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
pop ecx
mov dword [ebp + 4], 0x3f3f
cmp dword [ebp + 8], 0
je 0x436ae2
mov ecx, ebx
mov dword [ebp + 4], 0x3f4e
and ecx, 7
shr edx, cl
sub ebx, ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jmp 0x4369aa
cmp ebx, 3
jae 0x436b16
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 3
jb 0x436aeb
mov eax, edx
shr edx, 1
and eax, 1
mov dword [ebp + 8], eax
mov eax, edx
and eax, 3
sub eax, 0
je 0x436b77
sub eax, 1
je 0x436b52
sub eax, 1
je 0x436b49
sub eax, 1
jne 0x436b7e
mov dword [esi + 0x18], str.invalid_block_type
mov dword [ebp + 4], 0x3f51
jmp 0x436b7e
mov dword [ebp + 4], 0x3f44
jmp 0x436b7e
mov dword [ebp + 0x50], 0x473b80
mov dword [ebp + 0x58], 9
mov dword [ebp + 0x54], 0x4743a8
mov dword [ebp + 0x5c], 5
mov dword [ebp + 4], 0x3f47
jmp 0x436b7e
mov dword [ebp + 4], 0x3f41
shr edx, 2
sub ebx, 3
jmp 0x4364d8
mov ecx, ebx
and ecx, 7
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jae 0x436bd2
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x436ba3
mov eax, edx
movzx ecx, dx
not eax
shr eax, 0x10
cmp ecx, eax
je 0x436bec
mov dword [esi + 0x18], str.invalid_stored_block_lengths
jmp 0x4364f5
xor eax, eax
mov dword [ebp + 0x44], ecx
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f43
mov ecx, dword [ebp + 0x44]
test ecx, ecx
je 0x436c4d
cmp ecx, edi
mov eax, edi
mov edi, dword [esp + 0x28]
cmovbe eax, ecx
cmp eax, edi
cmovbe edi, eax
test edi, edi
je 0x437706
mov ecx, dword [esp + 0x2c]
push edi
push dword [esp + 0x18]
push ecx
call fcn.0043be80
sub dword [esp + 0x28], edi
add esp, 0xc
add dword [esp + 0x14], edi
sub dword [esp + 0x28], edi
add dword [esp + 0x2c], edi
sub dword [ebp + 0x44], edi
jmp 0x4369a2
mov dword [ebp + 4], 0x3f3f
jmp 0x4369aa
cmp ebx, 0xe
jae 0x436c8d
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 0xe
jb 0x436c62
mov edi, dword [esp + 0x3c]
mov ecx, edx
shr edx, 5
and ecx, edi
and edi, edx
add ecx, 0x101
shr edx, 5
inc edi
mov eax, edx
mov dword [ebp + 0x64], ecx
and eax, 0xf
shr edx, 4
add eax, 4
mov dword [ebp + 0x68], edi
sub ebx, 0xe
mov dword [ebp + 0x60], eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ecx, 0x11e
ja 0x436ce1
cmp edi, 0x1e
ja 0x436ce1
and dword [ebp + 0x6c], 0
mov edi, dword [esp + 0x1c]
mov dword [ebp + 4], 0x3f45
jmp case.0x43637d.16197
mov dword [esi + 0x18], str.too_many_length_or_distance_symbols
jmp 0x436a10
cmp ebx, 3
jae 0x436d21
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, 3
jb 0x436cf6
mov eax, dword [ebp + 0x6c]
mov ecx, edx
and ecx, 7
shr edx, 3
mov dword [esp + 0x18], edx
movzx eax, word [eax*2 + 0x474380]
mov word [ebp + eax*2 + 0x74], cx
inc dword [ebp + 0x6c]
sub ebx, 3
mov dword [esp + 0x20], ebx
mov eax, dword [ebp + 0x6c]
cmp eax, dword [ebp + 0x60]
jb 0x436ced
cmp eax, 0x13
jae 0x436d6f
mov eax, dword [ebp + 0x6c]
xor ecx, ecx
movzx eax, word [eax*2 + 0x474380]
mov word [ebp + eax*2 + 0x74], cx
inc dword [ebp + 0x6c]
cmp dword [ebp + 0x6c], 0x13
jb 0x436d54
lea eax, [ebp + 0x534]
lea edx, [ebp + 0x70]
mov dword [ebp + 0x50], eax
mov dword [edx], eax
lea ecx, [ebp + 0x58]
lea eax, [ebp + 0x2f4]
mov dword [ecx], 7
push eax
push ecx
push edx
push 0x13
lea edx, [ebp + 0x74]
xor ecx, ecx
call fcn.00437b10
mov edx, dword [esp + 0x28]
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x436db6
mov dword [esi + 0x18], str.invalid_code_lengths_set
jmp 0x4364f5
mov eax, dword [esp + 0x50]
mov ecx, eax
and dword [ebp + 0x6c], 0
mov dword [ebp + 4], eax
mov eax, dword [ebp + 0x68]
add eax, dword [ebp + 0x64]
cmp dword [ebp + 0x6c], eax
jae 0x436fd9
mov ecx, dword [ebp + 0x58]
xor eax, eax
lea edi, [eax + 1]
shl edi, cl
jmp 0x436e07
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
add ebx, 8
mov ecx, dword [ebp + 0x50]
lea eax, [edi - 1]
and eax, edx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x40], eax
cmp ecx, ebx
ja 0x436dde
mov edi, eax
push 0x10
shr edi, 0x10
pop ecx
cmp di, cx
jae 0x436e54
shr eax, 8
movzx ecx, al
mov eax, dword [ebp + 0x6c]
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov word [ebp + eax*2 + 0x74], di
inc dword [ebp + 0x6c]
mov ecx, dword [ebp + 0x6c]
jmp 0x436fac
jne 0x436eca
mov ecx, eax
shr ecx, 8
movzx edi, cl
add edi, 2
cmp ebx, edi
jae 0x436e94
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x437706
dec ecx
mov dword [esp + 0x1c], ecx
mov ecx, dword [esp + 0x14]
movzx edx, byte [ecx]
mov ecx, ebx
shl edx, cl
add ebx, 8
add dword [esp + 0x18], edx
inc dword [esp + 0x14]
cmp ebx, edi
jb 0x436e65
mov edx, dword [esp + 0x18]
movzx ecx, ah
mov eax, dword [ebp + 0x6c]
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
test eax, eax
je 0x436fbf
movzx eax, word [ebp + eax*2 + 0x72]
mov edi, edx
and edi, 3
shr edx, 2
add edi, 3
mov dword [esp + 0x40], eax
sub ebx, 2
jmp 0x436f77
cmp word [esp + 0x42], 0x11
movzx ecx, ah
jne 0x436f22
lea edi, [ecx + 3]
mov dword [esp + 0x40], ecx
cmp ebx, edi
jae 0x436f11
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
add ebx, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
cmp ebx, edi
jb 0x436ee0
mov ecx, dword [esp + 0x40]
shr edx, cl
mov edi, edx
and edi, 7
add edi, 3
shr edx, 3
push 0xfffffffffffffffd
jmp 0x436f6d
lea edi, [ecx + 7]
mov dword [esp + 0x40], ecx
cmp ebx, edi
jae 0x436f5e
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
add ebx, 8
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
cmp ebx, edi
jb 0x436f2d
mov ecx, dword [esp + 0x40]
shr edx, cl
mov edi, edx
and edi, 0x7f
add edi, 0xb
shr edx, 7
push 0xfffffffffffffff9
pop eax
sub eax, ecx
add ebx, eax
and dword [esp + 0x40], 0
mov ecx, dword [ebp + 0x6c]
mov eax, dword [ebp + 0x68]
add ecx, edi
add eax, dword [ebp + 0x64]
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
cmp ecx, eax
ja 0x436fcb
mov esi, dword [esp + 0x40]
mov eax, dword [ebp + 0x6c]
mov word [ebp + eax*2 + 0x74], si
mov ecx, dword [ebp + 0x6c]
lea ecx, [ecx + 1]
mov dword [ebp + 0x6c], ecx
sub edi, 1
jne 0x436f92
mov esi, dword [esp + 0x30]
mov eax, dword [ebp + 0x68]
add eax, dword [ebp + 0x64]
cmp ecx, eax
jb 0x436dd2
mov ecx, dword [ebp + 4]
jmp 0x436fd9
mov dword [esi + 0x18], str.invalid_bit_length_repeat
jmp 0x436a10
mov ecx, dword [esp + 0x48]
mov dword [esi + 0x18], str.invalid_bit_length_repeat
mov dword [ebp + 4], ecx
mov edi, dword [esp + 0x48]
cmp ecx, edi
je 0x4369a6
xor eax, eax
cmp word [ebp + 0x274], ax
jne 0x436fff
mov dword [esi + 0x18], str.invalid_code____missing_end_of_block
mov dword [ebp + 4], edi
jmp 0x4369a6
lea eax, [ebp + 0x534]
lea edi, [ebp + 0x70]
mov dword [ebp + 0x50], eax
lea ecx, [ebp + 0x2f4]
mov dword [edi], eax
push ecx
lea eax, [ebp + 0x58]
xor ecx, ecx
push eax
push edi
push dword [ebp + 0x64]
lea edx, [ebp + 0x74]
mov dword [eax], 9
inc ecx
call fcn.00437b10
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x43704b
mov dword [esi + 0x18], str.invalid_literal_lengths_set
mov dword [ebp + 4], 0x3f51
jmp 0x4369a2
mov eax, dword [edi]
lea ecx, [ebp + 0x2f4]
push ecx
mov dword [ebp + 0x54], eax
lea eax, [ebp + 0x5c]
push eax
mov dword [eax], 6
mov eax, dword [ebp + 0x64]
push edi
push dword [ebp + 0x68]
lea edx, [eax*2 + 0x74]
push 2
add edx, ebp
pop ecx
call fcn.00437b10
mov edx, dword [esp + 0x28]
add esp, 0x10
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x38], eax
test eax, eax
je case.0x43637d.16199
mov dword [esi + 0x18], str.invalid_distances_set
jmp 0x4364f5
mov dword [ebp + 4], 0x3f48
cmp edi, 6
jb 0x437115
mov eax, dword [esp + 0x28]
cmp eax, 0x102
jb 0x437115
mov ecx, dword [esp + 0x2c]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x14]
mov dword [esi + 0xc], ecx
mov ecx, esi
mov dword [esi], eax
mov dword [esi + 4], edi
mov dword [ebp + 0x3c], edx
mov edx, dword [esp + 0x34]
mov dword [ebp + 0x40], ebx
call fcn.00437f25
cmp dword [ebp + 4], 0x3f3f
mov eax, dword [esi + 0xc]
mov edi, dword [esi + 4]
mov edx, dword [ebp + 0x3c]
mov ebx, dword [ebp + 0x40]
mov dword [esp + 0x2c], eax
mov eax, dword [esi + 0x10]
mov dword [esp + 0x28], eax
mov eax, dword [esi]
mov dword [esp + 0x14], eax
mov dword [esp + 0x1c], edi
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
jne 0x4369aa
or dword [ebp + 0x1bc8], 0xffffffff
jmp 0x4369aa
and dword [ebp + 0x1bc8], 0
xor eax, eax
mov ecx, dword [ebp + 0x58]
lea edi, [eax + 1]
shl edi, cl
jmp 0x437155
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov ecx, dword [ebp + 0x50]
lea eax, [edi - 1]
and eax, edx
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, ebx
ja 0x437128
test al, al
je 0x43722b
test al, 0xf0
jne 0x43722b
mov ebx, eax
movzx ecx, al
shr ebx, 8
xor edi, edi
movzx esi, bl
inc edi
add ecx, esi
mov edx, eax
shl edi, cl
mov ecx, esi
dec edi
shr eax, 0x10
and edi, dword [esp + 0x18]
shr edi, cl
mov ecx, dword [ebp + 0x50]
add edi, eax
mov dword [esp + 0x40], edx
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx esi, cl
movzx ecx, bl
mov ebx, dword [esp + 0x20]
add esi, ecx
cmp esi, ebx
jbe 0x437216
mov esi, dword [esp + 0x1c]
test esi, esi
je 0x437706
dec esi
movzx edi, dh
mov dword [esp + 0x1c], esi
mov ecx, ebx
mov esi, dword [esp + 0x14]
add ebx, 8
movzx eax, byte [esi]
shl eax, cl
add dword [esp + 0x18], eax
inc esi
movzx eax, word [esp + 0x42]
mov dword [esp + 0x14], esi
xor esi, esi
inc esi
movzx ecx, dl
add ecx, edi
shl esi, cl
mov ecx, edi
dec esi
and esi, dword [esp + 0x18]
shr esi, cl
add esi, eax
mov eax, dword [ebp + 0x50]
mov eax, dword [eax + esi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, ebx
ja 0x4371bd
mov esi, dword [esp + 0x30]
movzx ecx, dh
mov edx, dword [esp + 0x18]
shr edx, cl
sub ebx, ecx
mov dword [ebp + 0x1bc8], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebp + 0x1bc8], ecx
sub ebx, ecx
shr edx, cl
mov ecx, eax
shr ecx, 0x10
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 0x44], ecx
test al, al
jne 0x43725d
mov dword [ebp + 4], 0x3f4d
jmp 0x4369a6
test al, 0x20
je 0x437274
or dword [ebp + 0x1bc8], 0xffffffff
mov dword [ebp + 4], 0x3f3f
jmp 0x4369a6
mov edi, dword [esp + 0x1c]
test al, 0x40
je 0x437288
mov dword [esi + 0x18], str.invalid_literal_length_code
jmp 0x4364f5
movzx eax, al
and eax, 0xf
mov dword [ebp + 4], 0x3f49
mov dword [ebp + 0x4c], eax
mov esi, dword [ebp + 0x4c]
test esi, esi
je 0x4372f0
cmp ebx, esi
jae 0x4372d1
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
cmp ebx, esi
jb 0x4372a7
xor eax, eax
mov ecx, esi
inc eax
sub ebx, esi
shl eax, cl
dec eax
mov dword [esp + 0x20], ebx
and eax, edx
shr edx, cl
add dword [ebp + 0x44], eax
add dword [ebp + 0x1bc8], esi
mov dword [esp + 0x18], edx
mov eax, dword [ebp + 0x44]
mov dword [ebp + 0x1bcc], eax
mov dword [ebp + 4], 0x3f4a
mov ecx, dword [ebp + 0x5c]
xor eax, eax
mov edi, dword [ebp + 0x54]
lea esi, [eax + 1]
shl esi, cl
jmp 0x43733c
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
add ebx, 8
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
lea eax, [esi - 1]
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, ebx
ja 0x43730f
test al, 0xf0
jne 0x437403
mov ebx, eax
movzx ecx, al
shr ebx, 8
xor edi, edi
movzx esi, bl
inc edi
add ecx, esi
mov edx, eax
shl edi, cl
mov ecx, esi
dec edi
shr eax, 0x10
and edi, dword [esp + 0x18]
shr edi, cl
mov ecx, dword [ebp + 0x54]
add edi, eax
mov dword [esp + 0x40], edx
mov eax, dword [ecx + edi*4]
mov ecx, eax
shr ecx, 8
movzx esi, cl
movzx ecx, bl
mov ebx, dword [esp + 0x20]
add esi, ecx
cmp esi, ebx
jbe 0x4373f2
mov esi, dword [esp + 0x1c]
test esi, esi
je 0x437706
dec esi
movzx edi, dh
mov dword [esp + 0x1c], esi
mov ecx, ebx
mov esi, dword [esp + 0x14]
add ebx, 8
movzx eax, byte [esi]
shl eax, cl
add dword [esp + 0x18], eax
inc esi
movzx eax, word [esp + 0x42]
mov dword [esp + 0x14], esi
xor esi, esi
inc esi
movzx ecx, dl
add ecx, edi
shl esi, cl
mov ecx, edi
dec esi
and esi, dword [esp + 0x18]
shr esi, cl
add esi, eax
mov eax, dword [ebp + 0x54]
mov eax, dword [eax + esi*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, ebx
ja 0x437399
movzx ecx, dh
mov edx, dword [esp + 0x18]
sub ebx, ecx
shr edx, cl
add dword [ebp + 0x1bc8], ecx
mov esi, dword [esp + 0x30]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebp + 0x1bc8], ecx
sub ebx, ecx
shr edx, cl
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
test al, 0x40
je 0x437431
mov dword [esi + 0x18], str.invalid_distance_code
jmp 0x436a10
mov ecx, eax
mov dword [ebp + 4], 0x3f4b
shr ecx, 0x10
movzx eax, al
and eax, 0xf
mov dword [ebp + 0x48], ecx
mov dword [ebp + 0x4c], eax
mov edi, dword [ebp + 0x4c]
test edi, edi
je 0x43749e
jmp 0x43747b
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x437706
dec eax
mov ecx, ebx
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x14]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x14]
mov dword [esp + 0x18], edx
add ebx, 8
cmp ebx, edi
jb 0x437452
xor eax, eax
mov ecx, edi
inc eax
sub ebx, edi
shl eax, cl
dec eax
mov dword [esp + 0x20], ebx
and eax, edx
shr edx, cl
add dword [ebp + 0x48], eax
add dword [ebp + 0x1bc8], edi
mov dword [esp + 0x18], edx
mov edi, dword [esp + 0x1c]
mov dword [ebp + 4], 0x3f4c
mov eax, dword [esp + 0x28]
test eax, eax
je 0x437706
mov ecx, dword [esp + 0x34]
sub ecx, eax
mov eax, dword [ebp + 0x48]
cmp eax, ecx
jbe 0x43750c
sub eax, ecx
cmp eax, dword [ebp + 0x30]
jbe 0x4374de
cmp dword [ebp + 0x1bc4], 0
je 0x4374de
mov dword [esi + 0x18], str.invalid_distance_too_far_back
jmp 0x4364f5
cmp eax, dword [ebp + 0x34]
jbe 0x4374f0
sub eax, dword [ebp + 0x34]
mov ecx, dword [ebp + 0x2c]
sub ecx, eax
add ecx, dword [ebp + 0x38]
jmp 0x4374f8
mov ecx, dword [ebp + 0x38]
sub ecx, eax
add ecx, dword [ebp + 0x34]
mov edi, dword [ebp + 0x44]
cmp eax, edi
mov edx, edi
cmovbe edx, eax
mov dword [esp + 0x40], edx
mov edx, dword [esp + 0x18]
jmp 0x437519
mov ecx, dword [esp + 0x2c]
mov edi, dword [ebp + 0x44]
sub ecx, eax
mov dword [esp + 0x40], edi
mov esi, dword [esp + 0x28]
mov eax, esi
cmp dword [esp + 0x40], esi
cmovbe eax, dword [esp + 0x40]
sub esi, eax
mov dword [esp + 0x40], eax
sub edi, eax
mov dword [esp + 0x28], esi
mov esi, dword [esp + 0x2c]
sub ecx, esi
mov dword [ebp + 0x44], edi
mov edi, eax
mov al, byte [ecx + esi]
mov byte [esi], al
inc esi
sub edi, 1
jne 0x43753f
cmp dword [ebp + 0x44], 0
mov edi, dword [esp + 0x1c]
mov dword [esp + 0x2c], esi
mov esi, dword [esp + 0x30]
jne 0x4369aa
mov dword [ebp + 4], 0x3f48
jmp 0x4369aa
cmp dword [esp + 0x28], 0
je 0x437706
mov ecx, dword [esp + 0x2c]
mov al, byte [ebp + 0x44]
mov byte [ecx], al
inc ecx
dec dword [esp + 0x28]
mov dword [esp + 0x2c], ecx
jmp 0x437560
cmp dword [ebp + 0xc], 0
je 0x43766f
cmp ebx, 0x20
jae 0x4375cd
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x43759e
mov ecx, dword [esp + 0x34]
sub ecx, dword [esp + 0x28]
add dword [esi + 0x14], ecx
add dword [ebp + 0x20], ecx
mov eax, dword [ebp + 0xc]
mov dword [esp + 0x34], ecx
test al, 4
je 0x437617
test ecx, ecx
je 0x437617
mov edx, dword [esp + 0x2c]
push dword [esp + 0x34]
sub edx, ecx
cmp dword [ebp + 0x14], 0
mov ecx, dword [ebp + 0x1c]
je 0x437604
call fcn.00438343
jmp 0x437609
call fcn.004378e3
mov edx, dword [esp + 0x1c]
mov dword [ebp + 0x1c], eax
mov dword [esi + 0x30], eax
mov eax, dword [ebp + 0xc]
pop ecx
mov ecx, dword [esp + 0x28]
mov dword [esp + 0x34], ecx
test al, 4
je 0x437661
mov ecx, edx
mov eax, edx
shl eax, 0x10
and ecx, 0xff00
add ecx, eax
mov eax, edx
shr eax, 8
and eax, 0xff00
shl ecx, 8
add ecx, eax
mov eax, edx
shr eax, 0x18
add ecx, eax
xor eax, eax
cmp dword [ebp + 0x14], eax
cmovne ecx, edx
cmp ecx, dword [ebp + 0x1c]
je 0x437663
mov dword [esi + 0x18], str.incorrect_data_check
jmp 0x4364f5
xor eax, eax
mov edx, eax
mov ebx, eax
mov dword [esp + 0x18], edx
mov dword [esp + 0x20], ebx
mov dword [ebp + 4], 0x3f4f
xor eax, eax
cmp dword [ebp + 0xc], eax
je 0x4376f3
cmp dword [ebp + 0x14], eax
je 0x4376f3
cmp ebx, 0x20
jae 0x4376b8
mov ecx, dword [esp + 0x14]
test edi, edi
je 0x437706
movzx eax, byte [ecx]
dec edi
mov ecx, ebx
mov dword [esp + 0x1c], edi
shl eax, cl
add ebx, 8
mov ecx, dword [esp + 0x14]
add edx, eax
inc ecx
mov dword [esp + 0x18], edx
mov dword [esp + 0x14], ecx
mov dword [esp + 0x20], ebx
cmp ebx, 0x20
jb 0x43768b
xor eax, eax
cmp edx, dword [ebp + 0x20]
je 0x4376ed
mov dword [esi + 0x18], str.incorrect_length_check
jmp 0x4364f5
mov eax, dword [esp + 0x2c]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x14]
mov dword [esi], eax
mov dword [esi + 4], edi
mov dword [ebp + 0x3c], edx
mov dword [ebp + 0x40], ebx
push 2
jmp 0x4369be
mov dword [esp + 0x18], eax
mov ebx, eax
mov dword [ebp + 4], 0x3f50
xor eax, eax
inc eax
jmp 0x437702
push 0xfffffffffffffffd
pop eax
mov dword [esp + 0x38], eax
mov esi, dword [esp + 0x30]
mov eax, dword [esp + 0x2c]
mov edi, dword [esp + 0x1c]
mov ecx, dword [esp + 0x14]
mov dword [esi + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [esi + 0x10], eax
mov eax, dword [esp + 0x18]
mov dword [esi + 4], edi
mov edi, dword [esp + 0x34]
mov dword [esi], ecx
mov dword [ebp + 0x40], ebx
xor ebx, ebx
mov dword [ebp + 0x3c], eax
cmp dword [ebp + 0x2c], ebx
jne 0x437748
cmp edi, dword [esi + 0x10]
je 0x43776b
cmp dword [ebp + 4], 0x3f51
jge 0x43776b
mov edx, dword [esi + 0xc]
mov eax, edi
sub eax, dword [esi + 0x10]
mov ecx, esi
push eax
call fcn.004361ff
pop ecx
test eax, eax
je 0x43776b
mov dword [ebp + 4], 0x3f52
push 0xfffffffffffffffc
jmp 0x4369be
mov edx, dword [esp + 0x44]
sub edx, dword [esi + 4]
sub edi, dword [esi + 0x10]
add dword [esi + 8], edx
add dword [esi + 0x14], edi
add dword [ebp + 0x20], edi
test byte [ebp + 0xc], 4
mov dword [esp + 0x44], edx
je 0x4377b1
test edi, edi
je 0x4377b1
mov edx, dword [esi + 0xc]
mov ecx, dword [ebp + 0x1c]
sub edx, edi
push edi
cmp dword [ebp + 0x14], ebx
je 0x4377a1
call fcn.00438343
jmp 0x4377a6
call fcn.004378e3
mov edx, dword [esp + 0x48]
mov dword [ebp + 0x1c], eax
pop ecx
mov dword [esi + 0x30], eax
cmp dword [ebp + 4], 0x3f47
je 0x4377c3
cmp dword [ebp + 4], 0x3f42
jne 0x4377c8
mov ebx, 0x100
mov ecx, dword [ebp + 8]
neg ecx
mov dword [esp + 0x50], 0x80
sbb ecx, ecx
xor eax, eax
and ecx, 0x40
cmp dword [ebp + 4], 0x3f3f
cmove eax, dword [esp + 0x50]
add ecx, eax
mov eax, dword [esp + 0x38]
add ecx, dword [ebp + 0x40]
add ecx, ebx
mov dword [esi + 0x2c], ecx
test edx, edx
jne 0x4369bf
test edi, edi
jne 0x4369bf
push 0xfffffffffffffffb
test eax, eax
pop ecx
cmove eax, ecx
jmp 0x4369bf