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

Disassembly:
push ebp
mov ebp, esp
push ecx
push ecx
mov eax, dword [ebp + 0xc]
push ebx
push esi
push edi
mov edi, dword [ebp + 8]
test edi, edi
je 0x1014a245
mov esi, dword [edi + 0x1c]
test esi, esi
je 0x1014a245
cmp eax, 5
ja 0x1014a245
xor ebx, ebx
cmp dword [edi + 0xc], ebx
je 0x1014a23d
cmp dword [edi], ebx
jne 0x10149ab7
cmp dword [edi + 4], ebx
jne 0x1014a23d
cmp dword [esi + 4], 0x29a
jne 0x10149ac9
cmp eax, 4
jne 0x1014a23d
cmp dword [edi + 0x10], ebx
jne 0x10149add
mov eax, dword [str.buffer_error]
mov dword [edi + 0x18], eax
push 0xfffffffffffffffb
jmp 0x1014a247
cmp dword [esi + 4], 0x2a
mov ecx, dword [esi + 0x28]
mov dword [esi], edi
mov dword [ebp - 8], ecx
mov dword [esi + 0x28], eax
jne 0x10149d77
cmp dword [esi + 0x18], 2
jne 0x10149cde
push ebx
push ebx
push ebx
call fcn.1014cd2f
mov dword [edi + 0x30], eax
add esp, 0xc
mov eax, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov byte [ecx + eax], 0x1f
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0x8b
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
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 0x10149bb7
mov eax, dword [esi + 8]
mov byte [edx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], bl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
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 0x10149b88
mov cl, 2
jmp 0x10149b9a
cmp dword [esi + 0x88], 2
jge 0x10149b98
mov cl, bl
cmp eax, 2
jge 0x10149b9a
mov cl, 4
mov eax, dword [esi + 8]
push 0x71
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov ecx, dword [esi + 0x14]
mov eax, dword [esi + 8]
mov byte [ecx + eax], 0xb
inc dword [esi + 0x14]
jmp 0x10149cd5
cmp dword [ebx + 0x24], 0
sete cl
dec cl
and cl, 0x10
cmp dword [ebx + 0x2c], 0
sete al
dec al
and al, 2
add cl, al
cmp dword [ebx + 0x1c], 0
sete al
dec al
and al, 8
add cl, al
cmp dword [ebx + 0x10], 0
sete al
dec 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
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
mov al, byte [eax + 4]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
mov al, byte [eax + 5]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [eax + 6]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, 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 0x10149c56
mov cl, 2
jmp 0x10149c6c
cmp dword [esi + 0x88], 2
jge 0x10149c6a
cmp eax, 2
jl 0x10149c6a
xor ebx, ebx
mov cl, bl
jmp 0x10149c6e
mov cl, 4
xor ebx, ebx
mov eax, dword [esi + 8]
mov byte [edx + eax], cl
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
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], ebx
je 0x10149cb9
mov al, byte [eax + 0x14]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [eax + 0x15]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], ebx
je 0x10149cd0
push edx
push dword [esi + 8]
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 0x20], ebx
push 0x45
pop eax
mov dword [esi + 4], eax
jmp 0x10149d77
mov eax, dword [esi + 0x30]
shl eax, 0xc
sub eax, 0x7800
cmp dword [esi + 0x88], 2
jge 0x10149d1f
mov ecx, dword [esi + 0x84]
cmp ecx, 2
jl 0x10149d1f
cmp ecx, 6
jge 0x10149d09
push 0x40
pop edx
push 0x60
jmp 0x10149d23
jne 0x10149d15
mov edx, 0x80
lea ecx, [edx + 0x20]
jmp 0x10149d24
mov edx, 0xc0
lea ecx, [edx + 0x20]
jmp 0x10149d24
mov edx, ebx
push 0x20
pop ecx
cmp dword [esi + 0x6c], ebx
push 0x1f
cmove ecx, edx
mov dword [esi + 4], 0x71
or ecx, eax
xor edx, edx
mov eax, ecx
pop ebx
div ebx
sub ecx, edx
add ecx, ebx
push ecx
push esi
call fcn.1014b165
xor ebx, ebx
pop ecx
pop ecx
cmp dword [esi + 0x6c], ebx
je 0x10149d69
movzx eax, word [edi + 0x32]
push eax
push esi
call fcn.1014b165
movzx eax, word [edi + 0x30]
push eax
push esi
call fcn.1014b165
add esp, 0x10
push ebx
push ebx
push ebx
call fcn.1014ea8f
add esp, 0xc
mov dword [edi + 0x30], eax
mov eax, dword [esi + 4]
cmp eax, 0x45
jne 0x10149e3b
mov edx, dword [esi + 0x1c]
cmp dword [edx + 0x10], ebx
je 0x10149e35
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
jmp 0x10149df5
cmp ebx, dword [esi + 0xc]
jne 0x10149dd3
cmp dword [edx + 0x2c], 0
je 0x10149dbf
cmp ebx, ecx
jbe 0x10149dbf
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
push edi
call fcn.1014af36
pop ecx
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ecx, dword [esi + 0xc]
je 0x10149dfe
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 8]
mov edx, dword [eax + 0x10]
mov eax, dword [esi + 0x20]
mov al, byte [edx + eax]
mov byte [ebx + ecx], al
mov ebx, dword [esi + 0x14]
mov ecx, dword [ebp + 8]
inc ebx
inc dword [esi + 0x20]
mov dword [esi + 0x14], ebx
mov edx, dword [esi + 0x1c]
movzx eax, word [edx + 0x14]
cmp dword [esi + 0x20], eax
jb 0x10149d99
mov edx, dword [esi + 0x1c]
cmp dword [edx + 0x2c], 0
je 0x10149e25
cmp ebx, ecx
jbe 0x10149e25
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
mov dword [edi + 0x30], eax
add esp, 0xc
mov edx, dword [esi + 0x1c]
mov eax, dword [esi + 0x20]
cmp eax, dword [edx + 0x14]
jne 0x10149ec6
and dword [esi + 0x20], 0
push 0x49
pop eax
mov dword [esi + 4], eax
cmp eax, 0x49
jne 0x10149f0d
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x1c], 0
je 0x10149f07
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ebx, dword [esi + 0xc]
jne 0x10149e96
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10149e82
cmp ebx, ecx
jbe 0x10149e82
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
push edi
call fcn.1014af36
pop ecx
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ecx, dword [esi + 0xc]
je 0x10149ece
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x1c]
mov dl, byte [ecx + eax]
movzx eax, dl
mov dword [ebp - 4], eax
lea eax, [ecx + 1]
mov ecx, dword [ebp + 8]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
cmp dword [ebp - 4], 0
mov dword [esi + 0x14], ebx
je 0x10149ed5
jmp 0x10149e59
mov eax, dword [esi + 4]
jmp 0x10149e3b
mov dword [ebp - 4], 1
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10149ef9
cmp ebx, ecx
jbe 0x10149ef9
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
cmp dword [ebp - 4], 0
jne 0x10149f98
and dword [esi + 0x20], 0
push 0x5b
pop eax
mov dword [esi + 4], eax
cmp eax, 0x5b
jne 0x10149fdc
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x24], 0
je 0x10149fd6
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ebx, dword [esi + 0xc]
jne 0x10149f68
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10149f54
cmp ebx, ecx
jbe 0x10149f54
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
push edi
call fcn.1014af36
pop ecx
mov ecx, dword [esi + 0x14]
mov ebx, ecx
mov dword [ebp + 8], ecx
cmp ecx, dword [esi + 0xc]
je 0x10149fa0
mov eax, dword [esi + 0x1c]
mov ecx, dword [esi + 0x20]
mov eax, dword [eax + 0x24]
mov dl, byte [ecx + eax]
movzx eax, dl
mov dword [ebp - 4], eax
lea eax, [ecx + 1]
mov ecx, dword [ebp + 8]
mov dword [esi + 0x20], eax
mov eax, dword [esi + 8]
mov byte [ebx + eax], dl
mov ebx, dword [esi + 0x14]
inc ebx
cmp dword [ebp - 4], 0
mov dword [esi + 0x14], ebx
je 0x10149fa7
jmp 0x10149f2b
mov eax, dword [esi + 4]
jmp 0x10149f0d
mov dword [ebp - 4], 1
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], 0
je 0x10149fcb
cmp ebx, ecx
jbe 0x10149fcb
mov eax, dword [esi + 8]
sub ebx, ecx
push ebx
add eax, ecx
push eax
push dword [edi + 0x30]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
cmp dword [ebp - 4], 0
je 0x10149fd6
mov eax, dword [esi + 4]
jmp 0x10149fdc
push 0x67
pop eax
mov dword [esi + 4], eax
xor ebx, ebx
cmp eax, 0x67
jne 0x1014a03c
mov eax, dword [esi + 0x1c]
cmp dword [eax + 0x2c], ebx
je 0x1014a035
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 0xc]
lea eax, [edx + 2]
cmp eax, ecx
jbe 0x1014a005
push edi
call fcn.1014af36
mov edx, dword [esi + 0x14]
pop ecx
mov ecx, dword [esi + 0xc]
lea eax, [edx + 2]
cmp eax, ecx
ja 0x1014a03c
mov ecx, dword [esi + 8]
mov al, byte [edi + 0x30]
push ebx
push ebx
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [edi + 0x31]
push ebx
mov byte [edx + ecx], al
inc dword [esi + 0x14]
call fcn.1014cd2f
add esp, 0xc
mov dword [edi + 0x30], eax
mov dword [esi + 4], 0x71
cmp dword [esi + 0x14], ebx
je 0x1014a058
push edi
call fcn.1014af36
pop ecx
cmp dword [edi + 0x10], ebx
jne 0x1014a06f
or dword [esi + 0x28], 0xffffffff
xor eax, eax
jmp 0x1014a248
cmp dword [edi + 4], ebx
mov ebx, dword [ebp + 0xc]
jne 0x1014a072
cmp ebx, dword [ebp - 8]
jg 0x1014a072
cmp ebx, 4
je 0x1014a072
jmp 0x10149ace
mov ebx, dword [ebp + 0xc]
mov eax, 0x29a
cmp dword [esi + 4], eax
jne 0x1014a087
cmp dword [edi + 4], 0
je 0x1014a08d
jmp 0x10149ace
cmp dword [edi + 4], 0
jne 0x1014a0a4
cmp dword [esi + 0x74], 0
jne 0x1014a0a4
test ebx, ebx
je 0x1014a161
cmp dword [esi + 4], eax
je 0x1014a161
mov eax, dword [esi + 0x88]
push ebx
push esi
cmp eax, 2
jne 0x1014a0b8
call fcn.1014aa38
jmp 0x1014a0d1
cmp eax, 3
jne 0x1014a0c4
call fcn.1014ab44
jmp 0x1014a0d1
imul eax, dword [esi + 0x84], 0xc
call dword [eax + 0x10185bc0]
pop ecx
pop ecx
cmp eax, 2
je 0x1014a0dd
cmp eax, 3
jne 0x1014a0e4
mov dword [esi + 4], 0x29a
test eax, eax
je 0x1014a22e
cmp eax, 2
je 0x1014a22e
cmp eax, 1
jne 0x1014a161
cmp ebx, eax
jne 0x1014a107
push esi
call fcn.1014d125
pop ecx
jmp 0x1014a150
cmp ebx, 5
je 0x1014a150
xor eax, eax
push eax
push eax
push eax
push esi
call fcn.1014d559
add esp, 0x10
cmp ebx, 3
jne 0x1014a150
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.100e5140
xor eax, eax
add esp, 0xc
cmp dword [esi + 0x74], eax
jne 0x1014a150
mov dword [esi + 0x6c], eax
mov dword [esi + 0x5c], eax
push edi
call fcn.1014af36
cmp dword [edi + 0x10], 0
pop ecx
je 0x1014a04d
cmp ebx, 4
jne 0x1014a051
cmp dword [esi + 0x18], 0
jg 0x1014a178
xor eax, eax
inc eax
jmp 0x1014a248
cmp dword [esi + 0x18], 2
jne 0x1014a1f8
mov ecx, dword [esi + 0x14]
mov al, byte [edi + 0x30]
mov edx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov al, byte [edi + 0x31]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov al, byte [edi + 0x32]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov al, byte [edi + 0x33]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov al, byte [edi + 8]
mov ecx, dword [esi + 8]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [edi + 9]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [edi + 0xa]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
mov edx, dword [esi + 0x14]
mov ecx, dword [esi + 8]
mov al, byte [edi + 0xb]
mov byte [edx + ecx], al
inc dword [esi + 0x14]
jmp 0x1014a211
movzx eax, word [edi + 0x32]
push eax
push esi
call fcn.1014b165
movzx eax, word [edi + 0x30]
push eax
push esi
call fcn.1014b165
add esp, 0x10
push edi
call fcn.1014af36
mov eax, dword [esi + 0x18]
pop ecx
test eax, eax
jle 0x1014a224
neg eax
mov dword [esi + 0x18], eax
xor eax, eax
cmp dword [esi + 0x14], eax
sete al
jmp 0x1014a248
cmp dword [edi + 0x10], 0
jne 0x1014a051
jmp 0x1014a04d
mov eax, dword [str.stream_error]
mov dword [edi + 0x18], eax
push 0xfffffffffffffffe
pop eax
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret