Function at 0x4a7880
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x20
push ebx
push esi
mov ebx, edx
mov dword [ebp - 0xc], 0
mov edx, dword [ebp + 0xc]
push edi
mov edi, ecx
mov dword [ebp - 0x18], edi
movzx ecx, byte [edx + 1]
shl cx, 8
mov eax, dword [edi + 0x108e8]
mov dword [ebp - 4], eax
mov eax, dword [edi + 0x108ec]
mov dword [ebp - 8], eax
movzx eax, byte [edx]
or cx, ax
mov esi, dword [edi + 0x90]
movzx eax, cx
movzx ecx, byte [edx + 5]
mov dword [ebp + 0xc], eax
movzx eax, byte [edx + 4]
shl ecx, 8
add ecx, eax
mov dword [ebp - 0x10], esi
movzx eax, byte [edx + 3]
shl ecx, 8
add ecx, eax
movzx eax, byte [edx + 2]
shl ecx, 8
add ecx, eax
mov dword [edi + 0x109b0], 1
lea eax, [edx + 6]
mov dword [ebp - 0x1c], ecx
mov edx, dword [ebp + 0x10]
mov dword [ebp - 0x14], eax
add edx, 0xfffffffa
mov dword [edi + 0x108e8], eax
mov eax, dword [ebp + 8]
mov dword [edi + 0x109b8], eax
mov eax, dword [ebp + 0xc]
movzx ecx, ax
mov eax, ecx
mov dword [edi + 0x90], edx
mov dword [edi + 0x108ec], edx
mov dword [edi + 0x109b4], ebx
sub eax, 0
je 0x4a7a58
sub eax, 8
je 0x4a79aa
sub eax, 1
je 0x4a79aa
cmp dword [edi + 0x44], 0
je 0x4a7953
mov eax, ecx
shl eax, 8
or eax, 2
mov dword [ebp - 0xc], eax
jmp 0x4a7a2b
push 0x401
push ecx
push ecx
lea esi, [edi + 0x8dc]
push str._nerror:__unsupported_extra_field_compression_type___u___skipping_n
push esi
call fcn.0047daf0
add esp, 0x10
push eax
mov eax, dword [edi + 0x10b54]
push esi
push edi
call eax
mov ecx, dword [ebp - 4]
mov eax, dword [ebp - 0x10]
mov dword [edi + 0x108e8], ecx
mov ecx, dword [ebp - 8]
mov dword [edi + 0x90], eax
mov eax, 2
mov dword [edi + 0x108ec], ecx
mov dword [edi + 0x109b0], 0
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
xor edx, edx
mov dword [edi + 0x109ec], 0
cmp word [ebp + 0xc], 9
mov ecx, edi
sete dl
call fcn.004a8f70
mov ecx, eax
mov dword [ebp + 0xc], ecx
test ecx, ecx
je 0x4a7a29
cmp dword [edi + 0x44], 0
jne 0x4a7a15
push 0x401
push ecx
cmp ecx, 3
lea esi, [edi + 0x8dc]
mov edx, str.invalid_compressed_data_to
mov eax, str.not_enough_memory_to
push str.inflate
cmovne eax, edx
push eax
push str._n__error:___s_s_n
push esi
call fcn.0047daf0
add esp, 0x14
push eax
mov eax, dword [edi + 0x10b54]
push esi
push edi
call eax
mov ecx, dword [ebp + 0xc]
mov esi, dword [ebp - 0x10]
xor eax, eax
cmp ecx, 3
sete al
lea eax, [eax*4 + 2]
mov dword [ebp - 0xc], eax
jmp 0x4a7a2b
xor eax, eax
mov ecx, dword [ebp - 4]
mov dword [edi + 0x108e8], ecx
mov ecx, dword [ebp - 8]
mov dword [edi + 0x108ec], ecx
mov dword [edi + 0x90], esi
mov dword [edi + 0x109b0], 0
test eax, eax
je 0x4a7a93
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push edx
push dword [ebp - 0x14]
push ebx
call fcn.00512db0
mov ecx, dword [ebp - 4]
add esp, 0xc
mov eax, dword [edi + 0x90]
mov dword [edi + 0x108e8], ecx
mov ecx, dword [ebp - 8]
mov dword [edi + 0x109ec], eax
mov dword [edi + 0x108ec], ecx
mov dword [edi + 0x90], esi
mov dword [edi + 0x109b0], 0
mov esi, dword [edi + 0x109ec]
test ebx, ebx
jne 0x4a7aa4
xor eax, eax
jmp 0x4a7b68
call fcn.004a4a60
mov edx, eax
or eax, 0xffffffff
cmp esi, 8
jb 0x4a7b49
mov edi, esi
shr edi, 3
nop dword [eax]
movzx ecx, byte [ebx]
sub esi, 8
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 1]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 2]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 3]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 4]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 5]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 6]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
movzx ecx, byte [ebx + 7]
add ebx, 8
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
sub edi, 1
jne 0x4a7ac0
mov edi, dword [ebp - 0x18]
test esi, esi
je 0x4a7b66
nop dword [eax]
movzx ecx, byte [ebx]
lea ebx, [ebx + 1]
xor ecx, eax
shr eax, 8
movzx ecx, cl
xor eax, dword [edx + ecx*4]
sub esi, 1
jne 0x4a7b50
not eax
mov ecx, dword [ebp - 0x1c]
cmp eax, ecx
je 0x4a7bba
cmp dword [edi + 0x44], 0
je 0x4a7b81
mov eax, 0x802
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
push 0x401
push ecx
push ecx
push eax
push dword [edi + 0x10904]
lea esi, [edi + 0x8dc]
push str.error___s_:__bad_extra_field_CRC__08lx__should_be__08lx__n
push esi
call fcn.0047daf0
add esp, 0x18
push eax
mov eax, dword [edi + 0x10b54]
push esi
push edi
call eax
mov eax, 2
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [ebp - 0xc]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret