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

Disassembly:
sub esp, 0x44
push ebx
push ebp
push esi
mov ebp, ecx
mov dword [esp + 0x3c], edx
push edi
mov dword [esp + 0x30], ebp
call fcn.0050e4ff
test eax, eax
jne case.0x50e848.16211
lea eax, [ebp + 0xc]
xor edi, edi
cmp dword [eax], edi
je case.0x50e848.16211
cmp dword [ebp], edi
jne 0x50e7d0
cmp dword [ebp + 4], edi
jne case.0x50e848.16211
lea edx, [ebp + 0xc]
jmp 0x50e7d2
mov edx, eax
mov ebx, dword [ebp + 0x1c]
mov esi, 0x3f40
mov dword [esp + 0x44], eax
mov ecx, dword [ebx + 4]
cmp ecx, 0x3f3f
jne 0x50e7f2
mov dword [ebx + 4], esi
mov ecx, esi
mov dword [esp + 0x44], edx
mov eax, dword [eax]
add ecx, 0xffffc0cc
mov edx, dword [ebx + 0x3c]
mov esi, dword [ebx + 0x40]
mov dword [esp + 0x2c], eax
mov eax, dword [ebp + 0x10]
mov dword [esp + 0x28], eax
mov eax, dword [ebp]
mov dword [esp + 0x20], eax
mov eax, dword [ebp + 4]
mov dword [esp + 0x1c], eax
mov dword [esp + 0x4c], eax
mov eax, dword [esp + 0x28]
push 0x1f
mov dword [esp + 0x40], eax
pop eax
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov dword [esp + 0x38], edi
cmp ecx, eax
ja case.0x50e848.16211
mov dword [esp + 0x50], 0x10
mov eax, esi
mov edi, esi
jmp dword [ecx*4 + 0x50fdc2]
xor eax, eax
cmp dword [ebx + 0xc], eax
jne 0x50e862
mov dword [ebx + 4], 0x3f40
jmp 0x50fc6a
push 0x10
pop ecx
cmp esi, ecx
jae 0x50e8a0
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
push 0x10
inc edi
mov dword [esp + 0x18], edx
pop eax
mov dword [esp + 0x20], edi
cmp esi, eax
jb 0x50e86d
xor eax, eax
test byte [ebx + 0xc], 2
je 0x50e8f4
cmp edx, 0x8b1f
jne 0x50e8f4
cmp dword [ebx + 0x28], eax
jne 0x50e8ba
mov dword [ebx + 0x28], 0xf
push 0x1f
mov dword [ebx + 0x1c], eax
lea edx, [esp + 0x28]
pop eax
push 2
xor ecx, ecx
mov byte [esp + 0x28], al
mov byte [esp + 0x29], 0x8b
call fcn.00511f5e
mov dword [ebx + 0x1c], eax
xor eax, eax
mov edx, eax
mov dword [ebx + 4], 0x3f35
mov esi, eax
mov dword [esp + 0x18], edx
pop ecx
mov dword [esp + 0x18], esi
jmp 0x50fc6a
mov dword [ebx + 0x14], eax
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50e902
or dword [eax + 0x30], 0xffffffff
test byte [ebx + 0xc], 1
je 0x50e9a7
mov ecx, edx
movzx eax, dl
shl eax, 8
xor edx, edx
shr ecx, 8
push 0x1f
add eax, ecx
pop edi
div edi
test edx, edx
mov edx, dword [esp + 0x14]
jne 0x50e9a7
mov eax, edx
and al, 0xf
cmp al, 8
je 0x50e93c
mov dword [ebp + 0x18], str.unknown_compression_method
jmp 0x50fc63
mov eax, dword [ebx + 0x28]
sub esi, 4
shr edx, 4
mov ecx, edx
mov dword [esp + 0x14], edx
and ecx, 0xf
mov dword [esp + 0x18], esi
add ecx, 8
test eax, eax
jne 0x50e95e
mov dword [ebx + 0x28], ecx
mov eax, ecx
cmp ecx, 0xf
ja 0x50e99b
cmp ecx, eax
ja 0x50e99b
xor esi, esi
shr edx, 8
inc esi
not edx
mov eax, esi
mov dword [ebx + 0x1c], esi
and edx, 2
shl eax, cl
or edx, 0x3f3d
mov dword [ebx + 0x18], eax
mov dword [ebp + 0x30], esi
xor edi, edi
mov dword [ebx + 4], edx
mov esi, edi
mov edx, edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
jmp 0x50fc6a
mov dword [ebp + 0x18], str.invalid_window_size
jmp 0x50fc63
mov dword [ebp + 0x18], str.incorrect_header_check
jmp 0x50fc63
push 0x10
pop eax
cmp esi, eax
jae 0x50e9ef
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
push 0x10
inc edi
mov dword [esp + 0x18], edx
pop eax
mov dword [esp + 0x20], edi
cmp esi, eax
jb 0x50e9be
mov dword [ebx + 0x14], edx
cmp dl, 8
jne 0x50e930
test edx, 0xe000
je 0x50ea0f
mov dword [ebp + 0x18], str.unknown_header_flags_set
jmp 0x50fc63
mov ecx, dword [ebx + 0x24]
test ecx, ecx
je 0x50ea20
mov eax, edx
shr eax, 8
and eax, 1
mov dword [ecx], eax
test dword [ebx + 0x14], 0x200
je 0x50ea4c
test byte [ebx + 0xc], 4
je 0x50ea4c
mov ecx, dword [ebx + 0x1c]
mov byte [esp + 0x24], dl
shr edx, 8
mov byte [esp + 0x25], dl
lea edx, [esp + 0x24]
push 2
call fcn.00511f5e
pop ecx
mov dword [ebx + 0x1c], eax
mov ebp, dword [esp + 0x20]
xor eax, eax
mov edx, eax
mov dword [ebx + 4], 0x3f36
mov ecx, eax
mov dword [esp + 0x14], edx
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcfe
dec eax
mov dword [esp + 0x1c], eax
movzx eax, byte [ebp]
shl eax, cl
add ecx, 8
add edx, eax
mov eax, dword [esp + 0x1c]
inc ebp
cmp ecx, 0x20
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], ebp
jb 0x50ea65
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50ea99
mov dword [eax + 4], edx
test dword [ebx + 0x14], 0x200
je 0x50ead7
test byte [ebx + 0xc], 4
je 0x50ead7
mov ecx, dword [ebx + 0x1c]
mov eax, edx
shr eax, 8
mov byte [esp + 0x25], al
mov eax, edx
mov byte [esp + 0x24], dl
shr edx, 0x18
shr eax, 0x10
mov byte [esp + 0x27], dl
lea edx, [esp + 0x24]
push 4
mov byte [esp + 0x2a], al
call fcn.00511f5e
pop ecx
mov dword [ebx + 0x1c], eax
xor eax, eax
mov dword [ebx + 4], 0x3f37
mov edx, eax
mov ecx, eax
push 0x10
mov dword [esp + 0x18], edx
pop esi
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcfe
dec eax
mov dword [esp + 0x1c], eax
movzx eax, byte [ebp]
shl eax, cl
add ecx, 8
add edx, eax
inc ebp
cmp ecx, esi
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], ebp
jb 0x50eaeb
mov esi, dword [ebx + 0x24]
mov ecx, edx
shr ecx, 8
test esi, esi
je 0x50eb2c
movzx eax, dl
mov dword [esi + 8], eax
mov eax, dword [ebx + 0x24]
mov dword [eax + 0xc], ecx
test dword [ebx + 0x14], 0x200
je 0x50eb55
test byte [ebx + 0xc], 4
je 0x50eb55
mov byte [esp + 0x24], dl
lea edx, [esp + 0x24]
mov byte [esp + 0x25], cl
mov ecx, dword [ebx + 0x1c]
push 2
call fcn.00511f5e
pop ecx
mov dword [ebx + 0x1c], eax
xor edi, edi
mov dword [ebx + 4], 0x3f38
mov edx, edi
mov esi, edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
jmp 0x50eba4
mov eax, dword [esp + 0x1c]
mov ecx, edi
mov ebp, dword [esp + 0x20]
cmp edi, 0x20
mov dword [esp + 0x1c], eax
mov dword [esp + 0x48], edx
jmp 0x50ea85
mov ecx, dword [esp + 0x1c]
mov ebp, dword [esp + 0x20]
push 0x10
pop esi
mov dword [esp + 0x1c], ecx
cmp eax, esi
mov dword [esp + 0x48], edx
mov ecx, eax
jmp 0x50eb0a
xor edi, edi
test dword [ebx + 0x14], 0x400
je 0x50ec35
push 0x10
pop eax
cmp esi, eax
jae 0x50ebee
mov ebp, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [ebp]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
push 0x10
inc ebp
mov dword [esp + 0x18], edx
pop eax
mov dword [esp + 0x20], ebp
cmp esi, eax
jb 0x50ebbc
mov eax, dword [ebx + 0x24]
mov dword [ebx + 0x44], edx
test eax, eax
je 0x50ebfb
mov dword [eax + 0x14], edx
test dword [ebx + 0x14], 0x200
je 0x50ec27
test byte [ebx + 0xc], 4
je 0x50ec27
mov ecx, dword [ebx + 0x1c]
mov byte [esp + 0x24], dl
shr edx, 8
mov byte [esp + 0x25], dl
lea edx, [esp + 0x24]
push 2
call fcn.00511f5e
pop ecx
mov dword [ebx + 0x1c], eax
mov ebp, edi
mov esi, edi
mov dword [esp + 0x14], ebp
mov dword [esp + 0x18], esi
jmp 0x50ec43
mov eax, dword [ebx + 0x24]
mov ebp, dword [esp + 0x14]
test eax, eax
je 0x50ec43
mov dword [eax + 0x10], edi
mov dword [ebx + 4], 0x3f39
jmp 0x50ec50
mov ebp, dword [esp + 0x14]
test dword [ebx + 0x14], 0x400
je 0x50ece6
mov eax, dword [ebx + 0x44]
mov edi, dword [esp + 0x1c]
cmp eax, edi
cmovbe edi, eax
test edi, edi
je 0x50ecde
mov ecx, dword [ebx + 0x24]
test ecx, ecx
je 0x50eca8
mov edx, dword [ecx + 0x10]
mov dword [esp + 0x48], edx
test edx, edx
je 0x50eca8
mov edx, dword [ecx + 0x14]
mov ecx, dword [ecx + 0x18]
sub edx, eax
lea eax, [edi + edx]
cmp eax, ecx
jbe 0x50ec92
sub ecx, edx
jmp 0x50ec94
mov ecx, edi
mov eax, dword [esp + 0x48]
push ecx
push dword [esp + 0x24]
add eax, edx
push eax
call fcn.0051c650
add esp, 0xc
test dword [ebx + 0x14], 0x200
je 0x50ecce
test byte [ebx + 0xc], 4
je 0x50ecce
mov eax, dword [esp + 0x20]
test eax, eax
je 0x50eccb
mov ecx, dword [ebx + 0x1c]
mov edx, eax
push edi
call fcn.00511f5e
pop ecx
mov dword [ebx + 0x1c], eax
mov eax, dword [ebx + 0x44]
sub dword [esp + 0x1c], edi
add dword [esp + 0x20], edi
sub eax, edi
mov dword [ebx + 0x44], eax
test eax, eax
jne 0x50f076
xor ecx, ecx
mov dword [ebx + 4], 0x3f3a
mov dword [ebx + 0x44], ecx
jmp 0x50ecfa
mov ebp, dword [esp + 0x14]
xor ecx, ecx
test dword [ebx + 0x14], 0x800
je 0x50ed99
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcea
mov esi, dword [esp + 0x20]
mov edi, ecx
mov ebp, eax
mov al, byte [edi + esi]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50ed43
mov edx, dword [eax + 0x1c]
test edx, edx
je 0x50ed43
mov ecx, dword [ebx + 0x44]
cmp ecx, dword [eax + 0x20]
jae 0x50ed43
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebx + 0x44]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x50ed4f
cmp edi, ebp
jb 0x50ed1b
test dword [ebx + 0x14], 0x200
mov ebp, dword [esp + 0x14]
mov esi, dword [esp + 0x18]
je 0x50ed81
test byte [ebx + 0xc], 4
je 0x50ed81
mov eax, dword [esp + 0x20]
test eax, eax
je 0x50ed7e
mov ecx, dword [ebx + 0x1c]
mov edx, eax
push edi
call fcn.00511f5e
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebx + 0x1c], eax
mov eax, dword [esp + 0x1c]
add dword [esp + 0x20], edi
sub eax, edi
mov dword [esp + 0x1c], eax
test cl, cl
jne 0x50fcea
jmp 0x50eda3
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50eda3
mov dword [eax + 0x1c], ecx
xor ecx, ecx
mov dword [ebx + 4], 0x3f3b
mov dword [ebx + 0x44], ecx
jmp 0x50edb7
mov ebp, dword [esp + 0x14]
xor ecx, ecx
test dword [ebx + 0x14], 0x1000
je 0x50ee56
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcea
mov ebp, dword [esp + 0x20]
mov edi, ecx
mov esi, eax
mov al, byte [edi + ebp]
inc edi
mov byte [esp + 0x13], al
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50ee00
mov edx, dword [eax + 0x24]
test edx, edx
je 0x50ee00
mov ecx, dword [ebx + 0x44]
cmp ecx, dword [eax + 0x28]
jae 0x50ee00
mov al, byte [esp + 0x13]
mov byte [ecx + edx], al
inc dword [ebx + 0x44]
mov cl, byte [esp + 0x13]
test cl, cl
je 0x50ee0c
cmp edi, esi
jb 0x50edd8
test dword [ebx + 0x14], 0x200
mov ebp, dword [esp + 0x14]
mov esi, dword [esp + 0x18]
je 0x50ee3e
test byte [ebx + 0xc], 4
je 0x50ee3e
mov eax, dword [esp + 0x20]
test eax, eax
je 0x50ee3b
mov ecx, dword [ebx + 0x1c]
mov edx, eax
push edi
call fcn.00511f5e
pop ecx
mov cl, byte [esp + 0x13]
mov dword [ebx + 0x1c], eax
mov eax, dword [esp + 0x1c]
add dword [esp + 0x20], edi
sub eax, edi
mov dword [esp + 0x1c], eax
test cl, cl
jne 0x50fcea
jmp 0x50ee60
mov eax, dword [ebx + 0x24]
test eax, eax
je 0x50ee60
mov dword [eax + 0x24], ecx
mov edx, dword [esp + 0x14]
mov ebp, dword [esp + 0x30]
mov dword [ebx + 4], 0x3f3c
test dword [ebx + 0x14], 0x200
je 0x50eede
push 0x10
pop eax
cmp esi, eax
jae 0x50eeb4
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
push 0x10
inc edi
mov dword [esp + 0x18], edx
pop eax
mov dword [esp + 0x20], edi
cmp esi, eax
jb 0x50ee83
test byte [ebx + 0xc], 4
je 0x50eece
movzx eax, word [ebx + 0x1c]
cmp edx, eax
je 0x50eece
mov dword [ebp + 0x18], str.header_crc_mismatch
jmp 0x50fc63
xor edi, edi
mov edx, edi
mov esi, edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
jmp 0x50eee0
xor edi, edi
mov ecx, dword [ebx + 0x24]
test ecx, ecx
je 0x50eefd
mov eax, dword [ebx + 0x14]
sar eax, 9
and eax, 1
mov dword [ecx + 0x2c], eax
mov eax, dword [ebx + 0x24]
mov dword [eax + 0x30], 1
mov dword [ebx + 0x1c], edi
mov dword [ebp + 0x30], edi
mov dword [ebx + 4], 0x3f3f
jmp 0x50fc6a
cmp esi, 0x20
jae 0x50ef47
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
inc edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], edi
cmp esi, 0x20
jb 0x50ef18
bswap edx
mov dword [ebx + 0x1c], edx
xor eax, eax
mov dword [ebp + 0x30], edx
mov esi, eax
mov edx, eax
mov dword [esp + 0x18], esi
mov dword [esp + 0x14], edx
mov dword [ebx + 4], 0x3f3e
jmp 0x50ef68
xor eax, eax
cmp dword [ebx + 0x10], eax
je 0x50fc89
xor eax, eax
inc eax
mov dword [ebx + 0x1c], eax
mov dword [ebp + 0x30], eax
mov dword [ebx + 4], 0x3f3f
mov eax, dword [esp + 0x40]
cmp eax, 5
je 0x50f072
cmp eax, 6
je 0x50f072
xor edi, edi
cmp dword [ebx + 8], edi
je 0x50efe8
mov ecx, esi
mov dword [ebx + 4], 0x3f4e
and ecx, 7
shr edx, cl
sub esi, ecx
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
jmp 0x50fc6a
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, 3
jb 0x50efbb
mov eax, edx
shr edx, 1
and eax, 1
mov dword [ebx + 8], eax
mov eax, edx
and eax, 3
sub eax, edi
je 0x50f0fb
sub eax, 1
je 0x50f036
sub eax, 1
je 0x50f02a
sub eax, 1
jne 0x50f102
mov dword [ebp + 0x18], str.invalid_block_type
mov dword [ebx + 4], 0x3f51
jmp 0x50f102
mov dword [ebx + 4], 0x3f44
jmp 0x50f102
cmp dword [esp + 0x40], 6
mov dword [ebx + 0x50], 0x5809d0
mov dword [ebx + 0x58], 9
mov dword [ebx + 0x54], 0x5811d0
mov dword [ebx + 0x5c], 5
mov dword [ebx + 4], 0x3f47
jne 0x50f102
shr edx, 2
sub esi, 3
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov ebp, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
mov eax, dword [esp + 0x1c]
mov esi, dword [esp + 0x30]
mov edi, dword [esp + 0x2c]
mov edx, dword [esp + 0x28]
mov dword [esi + 0xc], edi
mov edi, dword [esp + 0x20]
mov dword [esi], edi
mov edi, dword [esp + 0x3c]
mov dword [esi + 0x10], edx
mov dword [esi + 4], eax
mov dword [ebx + 0x3c], ebp
xor ebp, ebp
mov dword [ebx + 0x40], ecx
cmp dword [ebx + 0x2c], ebp
jne 0x50f0d4
cmp edi, dword [esi + 0x10]
je 0x50fd07
cmp dword [ebx + 4], 0x3f51
jge 0x50fd07
cmp dword [ebx + 4], 0x3f4e
jl 0x50f0d4
cmp dword [esp + 0x40], 4
je 0x50fd07
mov edx, dword [esi + 0xc]
mov eax, edi
sub eax, dword [esi + 0x10]
mov ecx, esi
push eax
call fcn.0050e6d1
pop ecx
test eax, eax
je 0x50fd07
mov dword [ebx + 4], 0x3f52
push 0xfffffffffffffffc
jmp 0x50fc80
mov dword [ebx + 4], 0x3f41
shr edx, 2
sub esi, 3
jmp 0x50e98e
mov ecx, esi
and ecx, 7
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, 0x20
jae 0x50f156
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
inc edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], edi
cmp esi, 0x20
jb 0x50f127
mov eax, edx
movzx ecx, dx
not eax
shr eax, 0x10
cmp ecx, eax
je 0x50f170
mov dword [ebp + 0x18], str.invalid_stored_block_lengths
jmp 0x50fc63
xor eax, eax
mov dword [ebx + 0x44], ecx
cmp dword [esp + 0x40], 6
mov edx, eax
mov esi, eax
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov dword [ebx + 4], 0x3f42
je 0x50fcf3
mov dword [ebx + 4], 0x3f43
mov eax, dword [ebx + 0x44]
test eax, eax
je 0x50ef03
mov edi, dword [esp + 0x1c]
cmp eax, edi
cmovbe edi, eax
cmp edi, dword [esp + 0x28]
cmova edi, dword [esp + 0x28]
test edi, edi
je 0x50f072
push edi
push dword [esp + 0x24]
push dword [esp + 0x34]
call fcn.0051c650
sub dword [esp + 0x28], edi
add esp, 0xc
add dword [esp + 0x20], edi
sub dword [esp + 0x28], edi
add dword [esp + 0x2c], edi
sub dword [ebx + 0x44], edi
mov edx, dword [esp + 0x14]
jmp 0x50fc6a
cmp esi, 0xe
jae 0x50f224
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
inc edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], edi
cmp esi, 0xe
jb 0x50f1f5
mov ecx, edx
sub esi, 0xe
push 0x1f
shr edx, 5
pop edi
and ecx, edi
mov dword [esp + 0x18], esi
and edi, edx
add ecx, 0x101
shr edx, 5
inc edi
mov eax, edx
mov dword [ebx + 0x64], ecx
and eax, 0xf
shr edx, 4
add eax, 4
mov dword [ebx + 0x68], edi
mov dword [ebx + 0x60], eax
mov dword [esp + 0x14], edx
cmp ecx, 0x11e
ja 0x50f274
cmp edi, 0x1e
ja 0x50f274
xor edi, edi
mov dword [ebx + 4], 0x3f45
mov dword [ebx + 0x6c], edi
jmp 0x50f2dc
mov dword [ebp + 0x18], str.too_many_length_or_distance_symbols
jmp 0x50fc63
xor edi, edi
jmp 0x50f2dc
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, 3
jb 0x50f284
mov eax, dword [ebx + 0x6c]
mov ecx, edx
and ecx, 7
shr edx, 3
mov dword [esp + 0x14], edx
movzx eax, word [eax*2 + 0x581250]
mov word [ebx + eax*2 + 0x74], cx
inc dword [ebx + 0x6c]
sub esi, 3
mov dword [esp + 0x18], esi
mov eax, dword [ebx + 0x6c]
cmp eax, dword [ebx + 0x60]
jb 0x50f2b1
jmp 0x50f2fc
movzx eax, word [eax*2 + 0x581250]
xor ecx, ecx
mov word [ebx + eax*2 + 0x74], cx
mov eax, dword [ebx + 0x6c]
inc eax
mov dword [ebx + 0x6c], eax
cmp eax, 0x13
jb 0x50f2e6
lea eax, [ebx + 0x534]
lea edx, [ebx + 0x70]
mov dword [ebx + 0x50], eax
mov dword [edx], eax
lea ecx, [ebx + 0x58]
lea eax, [ebx + 0x2f4]
mov dword [ecx], 7
push eax
push ecx
push edx
push 0x13
lea edx, [ebx + 0x74]
xor ecx, ecx
call fcn.005121e1
mov edx, dword [esp + 0x24]
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x50f348
mov dword [ebp + 0x18], str.invalid_code_lengths_set
jmp 0x50fc63
mov dword [ebx + 0x6c], edi
mov dword [ebx + 4], 0x3f46
mov eax, dword [ebx + 0x68]
add eax, dword [ebx + 0x64]
cmp dword [ebx + 0x6c], eax
jae 0x50f570
mov edi, dword [ebx + 0x50]
jmp 0x50f393
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov ecx, dword [ebx + 0x58]
xor eax, eax
inc eax
shl eax, cl
dec eax
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
mov dword [esp + 0x34], eax
cmp ecx, esi
ja 0x50f366
mov edi, eax
shr edi, 0x10
mov ecx, edi
cmp di, word [esp + 0x50]
jae 0x50f3e4
shr eax, 8
movzx ecx, al
mov eax, dword [ebx + 0x6c]
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov word [ebx + eax*2 + 0x74], di
inc dword [ebx + 0x6c]
mov ecx, dword [ebx + 0x6c]
jmp 0x50f552
push 0x10
pop edi
cmp cx, di
jne 0x50f460
shr eax, 8
movzx edi, al
add edi, 2
jmp 0x50f424
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, edi
jb 0x50f3f7
movzx ecx, byte [esp + 0x35]
mov eax, dword [ebx + 0x6c]
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
test eax, eax
je 0x50f562
movzx eax, word [ebx + eax*2 + 0x72]
mov edi, edx
and edi, 3
shr edx, 2
add edi, 3
mov dword [esp + 0x34], eax
sub esi, 2
jmp 0x50f518
cmp word [esp + 0x36], 0x11
mov al, byte [esp + 0x35]
movzx edi, al
jne 0x50f4be
add edi, 3
cmp esi, edi
jae 0x50f4ab
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
mov eax, dword [esp + 0x20]
mov dword [esp + 0x18], esi
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
mov dword [esp + 0x14], edx
cmp esi, edi
jb 0x50f476
mov al, byte [esp + 0x35]
mov cl, al
shr edx, cl
mov edi, edx
and edi, 7
add edi, 3
shr edx, 3
push 0xfffffffffffffffd
jmp 0x50f50b
add edi, 7
cmp esi, edi
jae 0x50f4fa
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
mov eax, dword [esp + 0x20]
mov dword [esp + 0x18], esi
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
mov dword [esp + 0x14], edx
cmp esi, edi
jb 0x50f4c5
mov al, byte [esp + 0x35]
mov cl, al
shr edx, cl
mov edi, edx
and edi, 0x7f
add edi, 0xb
shr edx, 7
push 0xfffffffffffffff9
movzx eax, al
pop ecx
sub ecx, eax
add esi, ecx
and dword [esp + 0x34], 0
mov eax, dword [ebx + 0x6c]
mov ecx, dword [ebx + 0x68]
add ecx, dword [ebx + 0x64]
mov dword [esp + 0x48], eax
add eax, edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp eax, ecx
ja 0x50f562
mov ecx, dword [esp + 0x48]
mov ebp, dword [esp + 0x34]
mov word [ebx + ecx*2 + 0x74], bp
mov ecx, dword [ebx + 0x6c]
lea ecx, [ecx + 1]
mov dword [ebx + 0x6c], ecx
sub edi, 1
jne 0x50f53b
mov ebp, dword [esp + 0x30]
mov eax, dword [ebx + 0x68]
add eax, dword [ebx + 0x64]
cmp ecx, eax
jb 0x50f361
jmp 0x50f570
mov dword [ebp + 0x18], str.invalid_bit_length_repeat
mov dword [ebx + 4], 0x3f51
cmp dword [ebx + 4], 0x3f51
je 0x50fc6a
xor eax, eax
cmp word [ebx + 0x274], ax
jne 0x50f594
mov dword [ebp + 0x18], str.invalid_code____missing_end_of_block
jmp 0x50fc63
lea eax, [ebx + 0x534]
lea edi, [ebx + 0x70]
mov dword [ebx + 0x50], eax
lea ecx, [ebx + 0x2f4]
mov dword [edi], eax
push ecx
lea eax, [ebx + 0x58]
xor ecx, ecx
push eax
push edi
push dword [ebx + 0x64]
lea edx, [ebx + 0x74]
mov dword [eax], 9
inc ecx
call fcn.005121e1
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x50f5e0
mov dword [ebp + 0x18], str.invalid_literal_lengths_set
mov dword [ebx + 4], 0x3f51
jmp 0x50f1e3
mov eax, dword [edi]
lea ecx, [ebx + 0x2f4]
push ecx
mov dword [ebx + 0x54], eax
lea eax, [ebx + 0x5c]
push eax
mov dword [eax], 6
mov eax, dword [ebx + 0x64]
push edi
push dword [ebx + 0x68]
add eax, 0x3a
push 2
pop ecx
lea edx, [ebx + eax*2]
call fcn.005121e1
add esp, 0x10
mov dword [esp + 0x38], eax
test eax, eax
je 0x50f61f
mov dword [ebp + 0x18], str.invalid_distances_set
jmp 0x50f5d4
cmp dword [esp + 0x40], 6
mov dword [ebx + 4], 0x3f47
je 0x50f072
mov edx, dword [esp + 0x14]
mov dword [ebx + 4], 0x3f48
mov eax, dword [esp + 0x1c]
cmp eax, 6
jb 0x50f6c4
mov ecx, dword [esp + 0x28]
cmp ecx, 0x102
jb 0x50f6c4
mov ebp, dword [esp + 0x44]
mov edi, dword [esp + 0x2c]
mov dword [ebp], edi
mov ebp, dword [esp + 0x30]
mov dword [ebp + 0x10], ecx
mov ecx, dword [esp + 0x20]
mov dword [ebp], ecx
mov ecx, ebp
mov dword [ebp + 4], eax
mov dword [ebx + 0x3c], edx
mov edx, dword [esp + 0x3c]
mov dword [ebx + 0x40], esi
call fcn.00512611
cmp dword [ebx + 4], 0x3f3f
mov ecx, dword [esp + 0x44]
mov edx, dword [ebx + 0x3c]
mov esi, dword [ebx + 0x40]
mov dword [esp + 0x14], edx
mov eax, dword [ecx]
mov dword [esp + 0x2c], eax
mov eax, dword [ebp + 0x10]
mov dword [esp + 0x28], eax
mov eax, dword [ebp]
mov dword [esp + 0x20], eax
mov eax, dword [ebp + 4]
mov dword [esp + 0x1c], eax
mov dword [esp + 0x18], esi
jne 0x50fc6a
or dword [ebx + 0x1bc8], 0xffffffff
jmp 0x50fc6a
mov ecx, dword [ebx + 0x58]
xor eax, eax
and dword [ebx + 0x1bc8], 0
inc eax
mov edi, dword [ebx + 0x50]
shl eax, cl
dec eax
mov dword [esp + 0x48], edi
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
jbe 0x50f737
mov dword [esp + 0x48], edi
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
mov eax, dword [esp + 0x20]
mov dword [esp + 0x18], esi
movzx eax, byte [eax]
shl eax, cl
mov ecx, dword [ebx + 0x58]
add edx, eax
inc dword [esp + 0x20]
xor eax, eax
inc eax
mov dword [esp + 0x14], edx
shl eax, cl
dec eax
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
ja 0x50f6f0
test al, al
je 0x50f7f3
test al, 0xf0
jne 0x50f7f3
mov ebp, dword [esp + 0x14]
mov ecx, eax
shr ecx, 8
xor esi, esi
movzx edi, cl
inc esi
movzx ecx, al
mov edx, eax
add ecx, edi
shr eax, 0x10
shl esi, cl
mov ecx, edi
dec esi
mov dword [esp + 0x34], edx
and esi, ebp
shr esi, cl
mov ecx, dword [esp + 0x48]
add esi, eax
mov eax, dword [ecx + esi*4]
jmp 0x50f7ca
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcea
mov edi, dword [esp + 0x20]
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
mov dword [esp + 0x18], esi
xor esi, esi
movzx eax, byte [edi]
inc esi
shl eax, cl
add ebp, eax
movzx ecx, dl
movzx eax, word [esp + 0x36]
inc edi
mov dword [esp + 0x20], edi
movzx edi, byte [esp + 0x35]
add ecx, edi
mov dword [esp + 0x14], ebp
shl esi, cl
mov ecx, edi
dec esi
and esi, ebp
shr esi, cl
add esi, eax
mov eax, dword [esp + 0x48]
mov eax, dword [eax + esi*4]
mov esi, dword [esp + 0x18]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, esi
ja 0x50f778
movzx ecx, byte [esp + 0x35]
mov edx, dword [esp + 0x14]
mov ebp, dword [esp + 0x30]
shr edx, cl
sub esi, ecx
mov dword [ebx + 0x1bc8], ecx
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebx + 0x1bc8], ecx
sub esi, ecx
shr edx, cl
mov ecx, eax
shr ecx, 0x10
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov dword [ebx + 0x44], ecx
test al, al
jne 0x50f825
mov dword [ebx + 4], 0x3f4d
jmp 0x50fc6a
test al, 0x20
je 0x50f835
or dword [ebx + 0x1bc8], 0xffffffff
jmp 0x50ef03
test al, 0x40
je 0x50f845
mov dword [ebp + 0x18], str.invalid_literal_length_code
jmp 0x50fc63
movzx eax, al
and eax, 0xf
mov dword [ebx + 4], 0x3f49
mov dword [ebx + 0x4c], eax
mov edi, dword [ebx + 0x4c]
test edi, edi
je 0x50f8b2
cmp esi, edi
jae 0x50f893
mov ebp, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [ebp]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
inc ebp
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], ebp
cmp esi, edi
jb 0x50f864
xor eax, eax
mov ecx, edi
inc eax
sub esi, edi
shl eax, cl
dec eax
mov dword [esp + 0x18], esi
and eax, edx
shr edx, cl
add dword [ebx + 0x44], eax
add dword [ebx + 0x1bc8], edi
mov dword [esp + 0x14], edx
mov eax, dword [ebx + 0x44]
mov dword [ebx + 0x1bcc], eax
mov dword [ebx + 4], 0x3f4a
mov ecx, dword [ebx + 0x5c]
xor eax, eax
mov edi, dword [ebx + 0x54]
inc eax
shl eax, cl
dec eax
mov dword [esp + 0x48], edi
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
jbe 0x50f930
mov ebp, dword [esp + 0x20]
mov dword [esp + 0x48], edi
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [ebp]
shl eax, cl
mov ecx, dword [ebx + 0x5c]
add edx, eax
xor eax, eax
mov dword [esp + 0x14], edx
inc eax
mov dword [esp + 0x18], esi
shl eax, cl
inc ebp
dec eax
mov dword [esp + 0x20], ebp
and eax, edx
mov eax, dword [edi + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
cmp ecx, esi
ja 0x50f8eb
test al, 0xf0
jne 0x50f9e0
mov ebp, dword [esp + 0x14]
mov ecx, eax
shr ecx, 8
xor esi, esi
movzx edi, cl
inc esi
movzx ecx, al
mov edx, eax
add ecx, edi
shr eax, 0x10
shl esi, cl
mov ecx, edi
dec esi
mov dword [esp + 0x34], edx
and esi, ebp
shr esi, cl
mov ecx, dword [esp + 0x48]
add esi, eax
mov eax, dword [ecx + esi*4]
jmp 0x50f9bb
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fcea
mov edi, dword [esp + 0x20]
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
mov dword [esp + 0x18], esi
xor esi, esi
movzx eax, byte [edi]
inc esi
shl eax, cl
add ebp, eax
movzx ecx, dl
movzx eax, word [esp + 0x36]
inc edi
mov dword [esp + 0x20], edi
movzx edi, byte [esp + 0x35]
add ecx, edi
mov dword [esp + 0x14], ebp
shl esi, cl
mov ecx, edi
dec esi
and esi, ebp
shr esi, cl
add esi, eax
mov eax, dword [esp + 0x48]
mov eax, dword [eax + esi*4]
mov esi, dword [esp + 0x18]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edi
cmp ecx, esi
ja 0x50f969
movzx ecx, byte [esp + 0x35]
mov edx, dword [esp + 0x14]
sub esi, ecx
shr edx, cl
add dword [ebx + 0x1bc8], ecx
mov ebp, dword [esp + 0x30]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add dword [ebx + 0x1bc8], ecx
sub esi, ecx
shr edx, cl
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
test al, 0x40
je 0x50fa0e
mov dword [ebp + 0x18], str.invalid_distance_code
jmp 0x50fc63
mov ecx, eax
mov dword [ebx + 4], 0x3f4b
shr ecx, 0x10
movzx eax, al
and eax, 0xf
mov dword [ebx + 0x48], ecx
mov dword [ebx + 0x4c], eax
mov edi, dword [ebx + 0x4c]
test edi, edi
je 0x50fa7f
jmp 0x50fa5c
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, edi
jb 0x50fa2f
xor eax, eax
mov ecx, edi
inc eax
sub esi, edi
shl eax, cl
dec eax
mov dword [esp + 0x18], esi
and eax, edx
shr edx, cl
add dword [ebx + 0x48], eax
add dword [ebx + 0x1bc8], edi
mov dword [esp + 0x14], edx
mov dword [ebx + 4], 0x3f4c
mov eax, dword [esp + 0x28]
test eax, eax
je 0x50f072
mov ecx, dword [esp + 0x3c]
sub ecx, eax
mov eax, dword [ebx + 0x48]
cmp eax, ecx
jbe 0x50fad8
sub eax, ecx
cmp eax, dword [ebx + 0x30]
jbe 0x50fabb
cmp dword [ebx + 0x1bc4], 0
je 0x50fabb
mov dword [ebp + 0x18], str.invalid_distance_too_far_back
jmp 0x50fc63
mov ecx, dword [ebx + 0x34]
cmp eax, ecx
jbe 0x50fac7
sub eax, ecx
mov ecx, dword [ebx + 0x2c]
mov ebp, dword [ebx + 0x44]
sub ecx, eax
add ecx, dword [ebx + 0x38]
mov edi, ebp
cmp eax, ebp
cmovbe edi, eax
jmp 0x50fae3
mov ecx, dword [esp + 0x2c]
mov ebp, dword [ebx + 0x44]
sub ecx, eax
mov edi, ebp
mov eax, dword [esp + 0x28]
cmp edi, eax
mov edx, dword [esp + 0x2c]
cmova edi, eax
sub eax, edi
sub ebp, edi
mov dword [esp + 0x28], eax
sub ecx, edx
mov dword [ebx + 0x44], ebp
mov al, byte [ecx + edx]
mov byte [edx], al
inc edx
sub edi, 1
jne 0x50fafd
mov ebp, dword [esp + 0x30]
mov dword [esp + 0x2c], edx
mov edx, dword [esp + 0x14]
cmp dword [ebx + 0x44], edi
jne 0x50fc6a
mov dword [ebx + 4], 0x3f48
jmp 0x50fc6a
mov ecx, dword [esp + 0x28]
test ecx, ecx
je 0x50f072
mov edi, dword [esp + 0x2c]
mov al, byte [ebx + 0x44]
mov byte [edi], al
inc edi
dec ecx
mov dword [esp + 0x2c], edi
mov dword [esp + 0x28], ecx
jmp 0x50fb1d
xor edi, edi
cmp dword [ebx + 0xc], edi
je 0x50fc02
jmp 0x50fb84
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
mov eax, dword [esp + 0x20]
movzx eax, byte [eax]
shl eax, cl
add edx, eax
inc dword [esp + 0x20]
add esi, 8
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
cmp esi, 0x20
jb 0x50fb57
mov eax, dword [esp + 0x3c]
sub eax, dword [esp + 0x28]
add dword [ebp + 0x14], eax
add dword [ebx + 0x20], eax
test byte [ebx + 0xc], 4
je 0x50fbd0
test eax, eax
je 0x50fbd0
mov edx, dword [esp + 0x2c]
mov ecx, dword [ebx + 0x1c]
sub edx, eax
cmp dword [ebx + 0x14], edi
je 0x50fbbf
test edx, edx
jne 0x50fbb7
mov eax, edi
jmp 0x50fbc6
push eax
call fcn.00511f5e
jmp 0x50fbc5
push eax
call fcn.00511d31
pop ecx
mov edx, dword [esp + 0x14]
mov dword [ebx + 0x1c], eax
mov dword [ebp + 0x30], eax
test byte [ebx + 0xc], 4
mov eax, dword [esp + 0x28]
mov dword [esp + 0x3c], eax
je 0x50fbf6
cmp dword [ebx + 0x14], edi
mov eax, edx
bswap eax
cmovne eax, edx
cmp eax, dword [ebx + 0x1c]
je 0x50fbf6
mov dword [ebp + 0x18], str.incorrect_data_check
jmp 0x50fc63
mov edx, edi
mov esi, edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x18], esi
mov dword [ebx + 4], 0x3f4f
xor eax, eax
cmp dword [ebx + 0xc], eax
je 0x50fcb5
cmp dword [ebx + 0x14], eax
je 0x50fcb5
cmp esi, 0x20
jae 0x50fc57
mov edi, dword [esp + 0x20]
mov eax, dword [esp + 0x1c]
test eax, eax
je 0x50fce6
dec eax
mov ecx, esi
mov dword [esp + 0x1c], eax
add esi, 8
movzx eax, byte [edi]
shl eax, cl
add edx, eax
mov dword [esp + 0x18], esi
inc edi
mov dword [esp + 0x14], edx
mov dword [esp + 0x20], edi
cmp esi, 0x20
jb 0x50fc26
xor eax, eax
cmp edx, dword [ebx + 0x20]
je 0x50fcaf
mov dword [ebp + 0x18], str.incorrect_length_check
mov dword [ebx + 4], 0x3f51
mov ecx, dword [ebx + 4]
push 0x1f
sub ecx, 0x3f34
pop eax
cmp ecx, eax
jbe 0x50e844
push 0xfffffffffffffffe
pop eax
pop edi
pop esi
pop ebp
pop ebx
add esp, 0x44
ret
mov eax, dword [esp + 0x2c]
mov dword [ebp + 0xc], eax
mov eax, dword [esp + 0x28]
mov dword [ebp + 0x10], eax
mov eax, dword [esp + 0x20]
mov dword [ebp], eax
mov eax, dword [esp + 0x1c]
mov dword [ebp + 4], eax
mov dword [ebx + 0x3c], edx
mov dword [ebx + 0x40], esi
push 2
jmp 0x50fc80
mov ebp, eax
mov ecx, eax
jmp 0x50fcbd
mov ecx, dword [esp + 0x18]
mov ebp, dword [esp + 0x14]
mov dword [ebx + 4], 0x3f50
jmp 0x50fcce
mov ebp, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
xor eax, eax
inc eax
mov dword [esp + 0x38], eax
jmp 0x50f07a
push 0xfffffffffffffffd
pop eax
mov dword [esp + 0x38], eax
jmp 0x50f072
mov ebp, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
jmp 0x50f07e
mov ebp, dword [esp + 0x14]
mov ecx, eax
jmp 0x50f07a
mov ebp, dword [esp + 0x14]
jmp 0x50f07e
mov edx, dword [esp + 0x4c]
sub edx, dword [esi + 4]
sub edi, dword [esi + 0x10]
add dword [esi + 8], edx
add dword [esi + 0x14], edi
add dword [ebx + 0x20], edi
test byte [ebx + 0xc], 4
mov dword [esp + 0x4c], edx
je 0x50fd56
test edi, edi
je 0x50fd56
mov edx, dword [esi + 0xc]
mov ecx, dword [ebx + 0x1c]
cmp dword [ebx + 0x14], ebp
je 0x50fd43
sub edx, edi
jne 0x50fd3b
mov eax, ebp
jmp 0x50fd4c
push edi
call fcn.00511f5e
jmp 0x50fd4b
push edi
sub edx, edi
call fcn.00511d31
pop ecx
mov edx, dword [esp + 0x4c]
mov dword [ebx + 0x1c], eax
mov dword [esi + 0x30], eax
cmp dword [ebx + 4], 0x3f47
je 0x50fd68
cmp dword [ebx + 4], 0x3f42
jne 0x50fd6d
mov ebp, 0x100
mov ecx, dword [ebx + 8]
neg ecx
mov dword [esp + 0x50], 0x80
sbb ecx, ecx
xor eax, eax
and ecx, 0x40
cmp dword [ebx + 4], 0x3f3f
cmove eax, dword [esp + 0x50]
add ecx, eax
add ecx, dword [ebx + 0x40]
add ecx, ebp
mov dword [esi + 0x2c], ecx
test edx, edx
jne 0x50fd9f
test edi, edi
je 0x50fda6
cmp dword [esp + 0x40], 4
jne 0x50fdb7
mov eax, dword [esp + 0x38]
test eax, eax
push 0xfffffffffffffffb
pop ecx
cmove eax, ecx
jmp 0x50fc81
mov eax, dword [esp + 0x38]
jmp 0x50fc81