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

Disassembly:
push ebp
mov ebp, esp
mov eax, dword [ebp + 8]
sub esp, 0x1c
push esi
push edi
xor edi, edi
cmp eax, edi
je 0x10013f24
mov esi, dword [eax + 0x1c]
cmp esi, edi
je 0x10013f24
mov dword [eax + 0x18], edi
mov dword [esi], 0xb
mov dword [esi + 4], edi
mov dword [esi + 0x2c], edi
mov ecx, dword [eax]
mov dword [ebp - 8], ecx
cmp ecx, edi
je 0x100132db
mov eax, dword [eax + 4]
mov dword [ebp - 4], eax
jmp 0x100132de
mov dword [ebp - 4], edi
mov ecx, dword [esi + 0x34]
mov edx, dword [esi + 0x28]
push ebx
xor ebx, ebx
mov dword [ebp - 0x10], ecx
mov dword [ebp - 0xc], edx
mov eax, dword [esi]
add eax, 0xfffffff5
cmp eax, 0x12
ja case.0x10013302.12
movzx eax, byte [eax + 0x10013f6b]
jmp dword [eax*4 + 0x10013f4f]
cmp dword [esi + 4], 0
je 0x10013320
mov ecx, edi
and ecx, 7
shr ebx, cl
sub edi, ecx
mov dword [esi], 0x1c
jmp 0x100132ed
cmp edi, 3
jae 0x10013365
lea ebx, [ebx]
cmp dword [ebp - 4], 0
jne 0x1001334a
mov edx, dword [ebp + 0x10]
lea ecx, [ebp - 8]
push ecx
push edx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, 3
jb 0x1001332b
mov eax, ebx
and eax, 1
shr ebx, 1
mov dword [esi + 4], eax
mov eax, ebx
and eax, 3
cmp eax, 3
ja case.default.0x10013379
jmp dword [eax*4 + 0x10013f7f]
shr ebx, 2
mov dword [esi], 0xd
sub edi, 3
jmp 0x100132ed
shr ebx, 2
mov dword [esi + 0x4c], 0x1001d210
mov dword [esi + 0x54], 9
mov dword [esi + 0x50], 0x1001da10
mov dword [esi + 0x58], 5
mov dword [esi], 0x14
sub edi, 3
jmp 0x100132ed
shr ebx, 2
mov dword [esi], 0x10
sub edi, 3
jmp 0x100132ed
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_block_type
mov dword [esi], 0x1d
shr ebx, 2
sub edi, 3
jmp 0x100132ed
mov ecx, edi
and ecx, 7
sub edi, ecx
shr ebx, cl
cmp edi, 0x20
jae 0x10013435
lea ecx, [ecx]
cmp dword [ebp - 4], 0
jne 0x1001341a
mov eax, dword [ebp + 0x10]
lea edx, [ebp - 8]
push edx
push eax
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, 0x20
jb 0x100133fb
mov ecx, ebx
mov eax, ebx
not ecx
and eax, 0xffff
shr ecx, 0x10
cmp eax, ecx
je 0x1001345c
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_stored_block_lengths
mov dword [esi], 0x1d
jmp 0x100132ed
xor ebx, ebx
xor edi, edi
mov dword [esi + 0x40], eax
test eax, eax
je 0x10013501
mov eax, dword [esi + 0x40]
mov dword [ebp - 0x14], eax
cmp dword [ebp - 4], ebx
jne 0x1001348f
mov edx, dword [ebp + 0x10]
lea ecx, [ebp - 8]
push ecx
push edx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013ee9
mov eax, dword [ebp - 0xc]
test eax, eax
jne 0x100134bc
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 0x34]
push eax
mov dword [ebp - 0xc], eax
mov dword [esi + 0x2c], eax
mov eax, dword [ebp + 0x18]
push ecx
push eax
mov dword [ebp - 0x10], ecx
call dword [ebp + 0x14]
add esp, 0xc
test eax, eax
jne 0x10013ee2
mov eax, dword [ebp - 0xc]
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 4]
cmp ecx, edx
jbe 0x100134cb
mov ecx, edx
mov dword [ebp - 0x14], ecx
cmp ecx, eax
jbe 0x100134d2
mov dword [ebp - 0x14], eax
mov ecx, dword [ebp - 0x14]
mov edx, dword [ebp - 8]
mov eax, dword [ebp - 0x10]
push ecx
push edx
push eax
call fcn.10009fe0
mov eax, dword [ebp - 0x14]
add dword [ebp - 8], eax
sub dword [ebp - 4], eax
sub dword [ebp - 0xc], eax
add dword [ebp - 0x10], eax
sub dword [esi + 0x40], eax
add esp, 0xc
cmp dword [esi + 0x40], ebx
jne 0x1001346b
mov dword [esi], 0xb
jmp 0x100132ed
cmp edi, 0xe
jae 0x1001354b
cmp dword [ebp - 4], 0
jne 0x10013530
mov edx, dword [ebp + 0x10]
lea ecx, [ebp - 8]
push ecx
push edx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, 0xe
jb 0x10013511
mov eax, ebx
shr ebx, 5
mov ecx, ebx
shr ebx, 5
mov edx, ebx
and eax, 0x1f
and ecx, 0x1f
and edx, 0xf
add eax, 0x101
inc ecx
add edx, 4
shr ebx, 4
sub edi, 0xe
mov dword [esi + 0x60], eax
mov dword [esi + 0x64], ecx
mov dword [esi + 0x5c], edx
cmp eax, 0x11e
ja 0x10013a53
cmp ecx, 0x1e
ja 0x10013a53
mov dword [esi + 0x68], 0
test edx, edx
jbe 0x10013600
lea esp, [esp]
cmp edi, 3
jae 0x100135da
cmp dword [ebp - 4], 0
jne 0x100135bf
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, 3
jb 0x100135a0
mov ecx, dword [esi + 0x68]
movzx edx, word [ecx*2 + 0x1001da90]
mov eax, ebx
and eax, 7
mov word [esi + edx*2 + 0x70], ax
inc dword [esi + 0x68]
mov eax, dword [esi + 0x68]
shr ebx, 3
sub edi, 3
cmp eax, dword [esi + 0x5c]
jb 0x1001359b
mov eax, 0x13
cmp dword [esi + 0x68], eax
jae 0x10013625
nop
mov ecx, dword [esi + 0x68]
movzx edx, word [ecx*2 + 0x1001da90]
xor ecx, ecx
mov word [esi + edx*2 + 0x70], cx
inc dword [esi + 0x68]
cmp dword [esi + 0x68], eax
jb 0x1001360b
lea eax, [esi + 0x530]
lea ecx, [esi + 0x6c]
mov dword [ecx], eax
mov dword [esi + 0x4c], eax
lea eax, [esi + 0x2f0]
push eax
lea edx, [esi + 0x54]
push edx
push ecx
mov dword [edx], 7
push 0
mov edx, 0x13
lea eax, [esi + 0x70]
call fcn.10001560
add esp, 0x10
test eax, eax
je 0x10013670
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_code_lengths_set
mov dword [esi], 0x1d
jmp 0x100132ed
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
mov dword [esi + 0x68], 0
je 0x100138fe
jmp 0x1001368b
mov ecx, dword [esi + 0x54]
mov eax, dword [esi + 0x4c]
mov edx, 1
shl edx, cl
dec edx
and edx, ebx
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [ebp - 0x14], eax
cmp edx, edi
jbe 0x10013705
cmp dword [ebp - 4], 0
jne 0x100136cc
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov dword [ebp - 8], eax
mov ecx, edi
shl edx, cl
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x4c]
add ebx, edx
add edi, 8
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov dword [ebp - 0x14], eax
shr eax, 8
movzx edx, al
cmp edx, edi
ja 0x100136ad
mov eax, dword [ebp - 0x14]
mov ecx, eax
shr ecx, 0x10
cmp ecx, 0x10
jae 0x10013776
mov edx, eax
shr edx, 8
movzx ecx, dl
cmp edi, ecx
jae 0x1001375b
cmp dword [ebp - 4], 0
jne 0x1001373a
mov eax, dword [ebp + 0x10]
lea edx, [ebp - 8]
push edx
push eax
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
inc eax
shl edx, cl
mov dword [ebp - 8], eax
movzx eax, byte [ebp - 0x13]
add edi, 8
add ebx, edx
cmp edi, eax
jb 0x1001371b
mov eax, dword [ebp - 0x14]
mov dx, word [ebp - 0x12]
movzx ecx, ah
shr ebx, cl
sub edi, ecx
mov ecx, dword [esi + 0x68]
mov word [esi + ecx*2 + 0x70], dx
inc dword [esi + 0x68]
jmp 0x100138ef
mov cx, word [ebp - 0x12]
cmp cx, 0x10
jne 0x100137f9
movzx ecx, ah
lea eax, [ecx + 2]
mov dword [ebp - 0x14], ecx
cmp edi, eax
jae 0x100137cf
cmp dword [ebp - 4], 0
jne 0x100137ac
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov ecx, edi
shl edx, cl
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x14]
add edi, 8
add eax, 2
add ebx, edx
cmp edi, eax
jb 0x1001378d
mov ecx, dword [ebp - 0x14]
mov eax, dword [esi + 0x68]
shr ebx, cl
sub edi, ecx
test eax, eax
je 0x10013926
movzx eax, word [esi + eax*2 + 0x6e]
mov dword [ebp - 0x14], eax
mov eax, ebx
and eax, 3
add eax, 3
shr ebx, 2
sub edi, 2
jmp 0x100138ca
cmp cx, 0x11
movzx ecx, ah
mov dword [ebp - 0x14], ecx
jne 0x10013862
lea eax, [ecx + 3]
cmp edi, eax
jae 0x1001384e
cmp dword [ebp - 4], 0
jne 0x1001382b
mov edx, dword [ebp + 0x10]
lea ecx, [ebp - 8]
push ecx
push edx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov ecx, edi
shl edx, cl
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x14]
add edi, 8
add eax, 3
add ebx, edx
cmp edi, eax
jb 0x1001380c
mov ecx, dword [ebp - 0x14]
shr ebx, cl
mov edx, 0xfffffffd
mov eax, ebx
and eax, 7
add eax, 3
shr ebx, 3
jmp 0x100138bf
lea eax, [ecx + 7]
cmp edi, eax
jae 0x100138ad
mov edi, edi
cmp dword [ebp - 4], 0
jne 0x1001388a
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov ecx, edi
shl edx, cl
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x14]
add edi, 8
add eax, 7
add ebx, edx
cmp edi, eax
jb 0x1001386b
mov ecx, dword [ebp - 0x14]
shr ebx, cl
mov edx, 0xfffffff9
mov eax, ebx
and eax, 0x7f
add eax, 0xb
shr ebx, 7
sub edx, ecx
add edi, edx
mov dword [ebp - 0x14], 0
mov ecx, dword [esi + 0x64]
mov edx, dword [esi + 0x68]
add ecx, dword [esi + 0x60]
add edx, eax
cmp edx, ecx
ja 0x1001393b
test eax, eax
je 0x100138ef
mov ecx, dword [esi + 0x68]
mov dx, word [ebp - 0x14]
mov word [esi + ecx*2 + 0x70], dx
inc dword [esi + 0x68]
dec eax
jne 0x100138dd
mov eax, dword [esi + 0x64]
add eax, dword [esi + 0x60]
cmp dword [esi + 0x68], eax
jb 0x1001368b
cmp dword [esi], 0x1d
je 0x100132ed
cmp word [esi + 0x270], 0
jne 0x10013950
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_code____missing_end_of_block
mov dword [esi], 0x1d
jmp 0x100132ed
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_bit_length_repeat
mov dword [esi], 0x1d
jmp 0x100132ed
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_bit_length_repeat
mov dword [esi], 0x1d
jmp 0x100132ed
lea eax, [esi + 0x530]
lea ecx, [esi + 0x6c]
mov dword [ecx], eax
mov dword [esi + 0x4c], eax
lea edx, [esi + 0x2f0]
push edx
mov edx, dword [esi + 0x60]
lea eax, [esi + 0x54]
push eax
push ecx
mov dword [eax], 9
push 1
lea eax, [esi + 0x70]
call fcn.10001560
add esp, 0x10
test eax, eax
je 0x10013999
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_literal_lengths_set
mov dword [esi], 0x1d
jmp 0x100132ed
mov edx, dword [esi + 0x6c]
lea ecx, [esi + 0x6c]
mov dword [esi + 0x50], edx
lea edx, [esi + 0x2f0]
push edx
mov edx, dword [esi + 0x64]
lea eax, [esi + 0x58]
push eax
mov dword [eax], 6
mov eax, dword [esi + 0x60]
push ecx
lea eax, [esi + eax*2 + 0x70]
push 2
call fcn.10001560
add esp, 0x10
test eax, eax
je 0x100139e1
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_distances_set
mov dword [esi], 0x1d
jmp 0x100132ed
mov dword [esi], 0x14
cmp dword [ebp - 4], 6
jb 0x10013a68
mov ecx, dword [ebp - 0xc]
cmp ecx, 0x102
jb 0x10013a68
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 0x10]
mov dword [eax + 0xc], edx
mov edx, dword [ebp - 8]
mov dword [eax], edx
mov edx, dword [ebp - 4]
mov dword [eax + 0x10], ecx
mov dword [eax + 4], edx
mov eax, dword [esi + 0x28]
mov dword [esi + 0x38], ebx
mov dword [esi + 0x3c], edi
cmp dword [esi + 0x2c], eax
jae 0x10013a24
mov edx, eax
sub edx, ecx
mov dword [esi + 0x2c], edx
mov edi, dword [ebp + 8]
push eax
push edi
call fcn.10004bd0
mov eax, dword [edi + 0xc]
mov edx, dword [edi]
mov ecx, dword [edi + 0x10]
mov dword [ebp - 0x10], eax
mov eax, dword [edi + 4]
mov dword [ebp - 8], edx
mov ebx, dword [esi + 0x38]
mov edi, dword [esi + 0x3c]
add esp, 8
mov dword [ebp - 0xc], ecx
mov dword [ebp - 4], eax
jmp 0x100132ed
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.too_many_length_or_distance_symbols
mov dword [esi], 0x1d
jmp 0x100132ed
mov ecx, dword [esi + 0x54]
mov eax, dword [esi + 0x4c]
mov edx, 1
shl edx, cl
dec edx
and edx, ebx
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
cmp edx, edi
jbe 0x10013adf
lea esp, [esp]
cmp dword [ebp - 4], 0
jne 0x10013aaa
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov dword [ebp - 8], eax
mov ecx, edi
shl edx, cl
mov ecx, dword [esi + 0x54]
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x4c]
add ebx, edx
add edi, 8
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov edx, eax
shr edx, 8
movzx ecx, dl
cmp ecx, edi
ja 0x10013a8b
test al, al
je 0x10013ba1
test al, 0xf0
jne 0x10013ba1
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0x18], edx
movzx ecx, al
add ecx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
mov dword [ebp - 0x14], eax
shr eax, 0x10
dec edx
and edx, ebx
shr edx, cl
add edx, eax
mov eax, dword [esi + 0x4c]
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
movzx ecx, byte [ebp - 0x1c]
add edx, ecx
cmp edx, edi
jbe 0x10013b99
cmp dword [ebp - 4], 0
jne 0x10013b50
mov eax, dword [ebp + 0x10]
lea edx, [ebp - 8]
push edx
push eax
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
inc eax
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x14]
mov ecx, edi
shl edx, cl
movzx ecx, al
add ebx, edx
movzx edx, ah
add ecx, edx
dec dword [ebp - 4]
mov eax, 1
shl eax, cl
mov ecx, edx
add edi, 8
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [ebp - 0x12]
add eax, ecx
mov ecx, dword [esi + 0x4c]
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edx
cmp ecx, edi
ja 0x10013b31
movzx ecx, byte [ebp - 0x13]
shr ebx, cl
sub edi, ecx
mov edx, eax
shr edx, 8
movzx ecx, dl
shr ebx, cl
sub edi, ecx
mov ecx, eax
shr ecx, 0x10
mov dword [esi + 0x40], ecx
test al, al
jne 0x10013bfc
cmp dword [ebp - 0xc], 0
jne 0x10013be2
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 0x34]
mov edx, dword [ebp + 0x18]
push eax
push ecx
push edx
mov dword [ebp - 0x10], ecx
mov dword [ebp - 0xc], eax
mov dword [esi + 0x2c], eax
call dword [ebp + 0x14]
add esp, 0xc
test eax, eax
jne 0x10013ee2
mov eax, dword [ebp - 0x10]
mov cl, byte [esi + 0x40]
mov byte [eax], cl
inc eax
dec dword [ebp - 0xc]
mov dword [ebp - 0x10], eax
mov dword [esi], 0x14
jmp 0x100132ed
test al, 0x20
je 0x10013c0b
mov dword [esi], 0xb
jmp 0x100132ed
test al, 0x40
je 0x10013c24
mov edx, dword [ebp + 8]
mov dword [edx + 0x18], str.invalid_literal_length_code
mov dword [esi], 0x1d
jmp 0x100132ed
movzx eax, al
and eax, 0xf
mov dword [esi + 0x48], eax
je 0x10013c81
cmp edi, eax
jae 0x10013c6d
cmp dword [ebp - 4], 0
jne 0x10013c52
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, dword [esi + 0x48]
jb 0x10013c33
mov ecx, dword [esi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [esi + 0x40], eax
shr ebx, cl
sub edi, ecx
mov ecx, dword [esi + 0x58]
mov eax, dword [esi + 0x50]
mov edx, 1
shl edx, cl
dec edx
and edx, ebx
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
cmp edx, edi
jbe 0x10013cf4
cmp dword [ebp - 4], 0
jne 0x10013cbf
mov ecx, dword [ebp + 0x10]
lea eax, [ebp - 8]
push eax
push ecx
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
inc eax
mov dword [ebp - 8], eax
mov ecx, edi
shl edx, cl
mov ecx, dword [esi + 0x58]
mov eax, 1
shl eax, cl
mov ecx, dword [esi + 0x50]
add ebx, edx
add edi, 8
dec eax
and eax, ebx
mov eax, dword [ecx + eax*4]
mov edx, eax
shr edx, 8
movzx ecx, dl
cmp ecx, edi
ja 0x10013ca0
test al, 0xf0
jne 0x10013dae
mov ecx, eax
shr ecx, 8
movzx edx, cl
mov dword [ebp - 0x1c], ecx
mov dword [ebp - 0x18], edx
movzx ecx, al
add ecx, edx
mov edx, 1
shl edx, cl
mov ecx, dword [ebp - 0x18]
mov dword [ebp - 0x14], eax
shr eax, 0x10
dec edx
and edx, ebx
shr edx, cl
add edx, eax
mov eax, dword [esi + 0x50]
mov eax, dword [eax + edx*4]
mov ecx, eax
shr ecx, 8
movzx edx, cl
movzx ecx, byte [ebp - 0x1c]
add edx, ecx
cmp edx, edi
jbe 0x10013da6
cmp dword [ebp - 4], 0
jne 0x10013d5d
mov eax, dword [ebp + 0x10]
lea edx, [ebp - 8]
push edx
push eax
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
inc eax
mov dword [ebp - 8], eax
mov eax, dword [ebp - 0x14]
mov ecx, edi
shl edx, cl
movzx ecx, al
add ebx, edx
movzx edx, ah
add ecx, edx
dec dword [ebp - 4]
mov eax, 1
shl eax, cl
mov ecx, edx
add edi, 8
dec eax
and eax, ebx
shr eax, cl
movzx ecx, word [ebp - 0x12]
add eax, ecx
mov ecx, dword [esi + 0x50]
mov eax, dword [ecx + eax*4]
mov ecx, eax
shr ecx, 8
movzx ecx, cl
add ecx, edx
cmp ecx, edi
ja 0x10013d3e
movzx ecx, byte [ebp - 0x13]
shr ebx, cl
sub edi, ecx
mov edx, eax
shr edx, 8
movzx ecx, dl
shr ebx, cl
sub edi, ecx
test al, 0x40
je 0x10013dd3
mov eax, dword [ebp + 8]
mov dword [eax + 0x18], str.invalid_distance_code
mov dword [esi], 0x1d
jmp 0x100132ed
mov ecx, eax
movzx eax, al
shr ecx, 0x10
and eax, 0xf
mov dword [esi + 0x44], ecx
mov dword [esi + 0x48], eax
je 0x10013e39
cmp edi, eax
jae 0x10013e25
nop
cmp dword [ebp - 4], 0
jne 0x10013e0a
mov eax, dword [ebp + 0x10]
lea edx, [ebp - 8]
push edx
push eax
call dword [ebp + 0xc]
add esp, 8
mov dword [ebp - 4], eax
test eax, eax
je 0x10013edb
mov eax, dword [ebp - 8]
movzx edx, byte [eax]
dec dword [ebp - 4]
mov ecx, edi
shl edx, cl
inc eax
add edi, 8
mov dword [ebp - 8], eax
add ebx, edx
cmp edi, dword [esi + 0x48]
jb 0x10013deb
mov ecx, dword [esi + 0x48]
mov eax, 1
shl eax, cl
dec eax
and eax, ebx
add dword [esi + 0x44], eax
shr ebx, cl
sub edi, ecx
mov eax, dword [esi + 0x28]
cmp dword [esi + 0x2c], eax
sbb ecx, ecx
and ecx, dword [ebp - 0xc]
sub eax, ecx
cmp dword [esi + 0x44], eax
jbe 0x10013e60
mov ecx, dword [ebp + 8]
mov dword [ecx + 0x18], str.invalid_distance_too_far_back
mov dword [esi], 0x1d
jmp 0x100132ed
cmp dword [ebp - 0xc], 0
jne 0x10013e85
mov eax, dword [esi + 0x28]
mov ecx, dword [esi + 0x34]
mov edx, dword [ebp + 0x18]
push eax
push ecx
push edx
mov dword [ebp - 0x10], ecx
mov dword [ebp - 0xc], eax
mov dword [esi + 0x2c], eax
call dword [ebp + 0x14]
add esp, 0xc
test eax, eax
jne 0x10013ee2
mov eax, dword [esi + 0x44]
mov ecx, dword [esi + 0x28]
sub ecx, eax
cmp ecx, dword [ebp - 0xc]
jae 0x10013e9f
mov eax, dword [ebp - 0x10]
lea edx, [ecx + eax]
mov eax, dword [ebp - 0xc]
sub eax, ecx
jmp 0x10013ea7
mov edx, dword [ebp - 0x10]
sub edx, eax
mov eax, dword [ebp - 0xc]
mov ecx, dword [esi + 0x40]
cmp eax, ecx
jbe 0x10013eb0
mov eax, ecx
sub dword [ebp - 0xc], eax
sub ecx, eax
mov dword [esi + 0x40], ecx
mov ecx, dword [ebp - 0x10]
sub edx, ecx
mov dword [ebp - 0x1c], edx
jmp 0x10013ec5
mov edx, dword [ebp - 0x1c]
mov dl, byte [edx + ecx]
mov byte [ecx], dl
inc ecx
dec eax
jne 0x10013ec2
mov dword [ebp - 0x10], ecx
cmp dword [esi + 0x40], eax
jne 0x10013e60
jmp 0x100132ed
mov dword [ebp - 8], 0
mov edi, 0xfffffffb
jmp 0x10013f36
mov dword [ebp - 8], ebx
mov edi, 0xfffffffb
jmp 0x10013f36
mov eax, dword [esi + 0x28]
mov edi, 1
cmp dword [ebp - 0xc], eax
jae 0x10013f36
sub eax, dword [ebp - 0xc]
mov ecx, dword [ebp + 0x18]
push eax
mov eax, dword [esi + 0x34]
push eax
push ecx
call dword [ebp + 0x14]
add esp, 0xc
test eax, eax
je 0x10013f36
mov edi, 0xfffffffb
jmp 0x10013f36
mov edi, 0xfffffffd
jmp 0x10013f36
pop edi
mov eax, 0xfffffffe
pop esi
mov esp, ebp
pop ebp
ret 0x14
mov edi, 0xfffffffe
mov eax, dword [ebp + 8]
mov edx, dword [ebp - 8]
mov ecx, dword [ebp - 4]
pop ebx
mov dword [eax], edx
mov dword [eax + 4], ecx
mov eax, edi
pop edi
pop esi
mov esp, ebp
pop ebp
ret 0x14