Function at 0x814560
Capabilities:
Encode data using xor
Terminate process

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0xb4
mov dword [esp], edx
mov ebx, ecx
mov esi, dword [esp + 0xd0]
mov edi, dword [esp + 0xc8]
mov eax, dword [0xbcbae0]
xor eax, esp
mov dword [esp + 0xb0], eax
mov ecx, dword [ecx]
movzx eax, byte [esi + 0x34]
mov dword [esp + 0x2c], ecx
mov ecx, dword [esi + 0x48]
lea eax, [eax + eax*8]
mov dword [esp + 0x18], eax
mov dword [esp + 8], ecx
mov ecx, dword [edi + 4]
mov edx, dword [ecx + eax*8 + 0x34]
mov dword [esp + 0x1c], ecx
lea ecx, [edi + 0x1e8]
mov dword [esp + 0x28], edx
call fcn.008174b0
not edx
not eax
mov ecx, dword [esp + 0xcc]
and eax, dword [esp + 0xd4]
and edx, dword [esp + 0xd8]
mov dword [esi + 0x54], edx
mov dword [esi + 0x50], eax
mov eax, dword [edi + 0x4c]
mov ebp, dword [edi + 0x48]
mov edi, ecx
mov edx, eax
shrd ebp, eax, cl
mov eax, ecx
shr edx, cl
test al, 0x20
mov ecx, ebx
cmovne ebp, edx
mov dword [esp + 0x20], ebp
call fcn.007efdc0
mov ecx, ebx
mov dword [esi + 0x10], eax
mov edi, eax
mov dword [esi + 0xc], eax
mov dword [esp + 4], ebx
call fcn.007efdc0
mov dword [esi + 0x18], eax
mov ecx, dword [esp + 0x1c]
mov dword [esp + 0x60], eax
cmp byte [esi + 0x34], 0
je 0x814653
mov eax, dword [esp + 0x18]
test byte [ecx + eax*8 + 0x2c], 8
je 0x814653
mov ecx, dword [esp + 4]
mov edx, 0x45
mov eax, dword [ecx + 0x2c]
inc eax
mov dword [ecx + 0x2c], eax
mov ecx, dword [esp + 0xd0]
mov dword [ecx], eax
mov ecx, dword [esp]
push eax
push 0
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0xcc]
mov esi, dword [esp + 0xc8]
test eax, eax
jle 0x81467c
mov eax, dword [esp + 0xcc]
imul ecx, eax, 0x58
cmp dword [esi + ecx + 0x2f0], 0
jne 0x81467c
dec eax
jg 0x81466c
mov ebp, dword [esp + 0x18]
mov ebx, dword [esp + 0x1c]
mov dword [esp + 0x10], edi
mov edi, dword [esp]
lea ecx, [esi + 0x50]
mov dword [esp + 0x6c], ecx
mov edx, dword [ebx + ebp*8 + 0x30]
test dl, 0x10
je 0x8146e5
mov esi, dword [ebx + ebp*8 + 0x24]
mov ecx, edi
mov edx, 0xd
push dword [ebx + ebp*8 + 0x20]
push 0
push esi
call fcn.007c5800
add esp, 0xc
mov ecx, edi
mov edx, 0xe
push dword [esp + 0x10]
push esi
mov esi, dword [esp + 0xd0]
call fcn.007c57e0
add esp, 8
mov edi, dword [esp + 0xd0]
xor ecx, ecx
mov dword [edi + 0x3c], eax
mov byte [edi + 0x35], 0xb
jmp 0x815e28
mov ecx, dword [esp + 0x20]
and ecx, 1
mov dword [esp + 0x14], ecx
mov ecx, dword [esp + 8]
mov ebx, dword [ecx + 0x24]
test ebx, 0x400
je 0x814938
movzx ebx, word [ecx + 0x28]
mov ecx, dword [esp + 4]
lea edx, [ebx + 2]
call fcn.007eee80
mov edx, dword [esp + 0xd0]
mov ecx, eax
test ebx, ebx
mov dword [esp + 0x10], ecx
mov esi, dword [edx + 0xc]
je 0x81477d
lea edi, [ecx + 2]
xor ebp, ebp
mov eax, dword [esp + 8]
mov eax, dword [eax + 0x30]
mov edx, dword [eax + ebp*4]
test edx, edx
je 0x814778
test byte [edx + 0xc], 1
lea eax, [edi + ebp]
je 0x814764
mov ecx, dword [esp + 4]
push eax
push dword [esp + 0x18]
push ebp
mov eax, dword [esp + 0xdc]
mov esi, eax
push eax
call fcn.0081da90
add esp, 0x10
mov esi, dword [esi + 0x10]
jmp 0x814778
mov ecx, dword [edx]
mov edx, dword [ecx + 0x10]
mov ecx, dword [esp + 4]
push 1
push eax
call fcn.0081de60
add esp, 8
inc ebp
cmp ebp, ebx
jne 0x81472c
mov dword [esp + 0x14], esi
mov esi, dword [esp]
mov ebp, dword [esp + 0x10]
mov edx, 0x45
mov ecx, esi
push ebp
mov edi, dword [esp + 0xc]
push dword [edi + 0x18]
call fcn.007c57e0
add esp, 8
lea eax, [ebp + 1]
mov ecx, esi
mov edx, 0x45
push eax
push ebx
call fcn.007c57e0
add esp, 8
cmp byte [edi + 0x1c], 1
mov eax, 0
mov ecx, esi
mov edx, 9
sbb eax, eax
or eax, 0xfffffff9
push eax
push dword [edi + 0x20]
push ebp
push dword [esp + 0x20]
mov esi, dword [esp + 0x38]
push esi
call fcn.007ebd50
add esp, 0x14
mov byte [edi + 0x1c], 0
mov edi, dword [esp + 0xd0]
mov al, 0x3d
mov dword [edi + 0x38], esi
mov esi, dword [esp + 0xc8]
cmp byte [esi + 0x2e], 0
je 0x8147fd
mov al, 0xad
mov ecx, dword [esp]
mov byte [edi + 0x35], al
call fcn.007f2430
test bx, bx
mov dword [edi + 0x3c], eax
jne 0x814819
mov ebp, dword [esp + 0x18]
jmp 0x815dce
mov ebp, dword [edi + 0x40]
add dword [esp + 0x10], 2
mov edx, dword [esp + 8]
mov eax, dword [edx + 0x30]
mov edi, dword [eax + ebx*4 - 4]
movzx eax, word [edi + 0xc]
mov ecx, eax
and ecx, 1
sub ebp, ecx
cmp ebx, 0x10
lea ebx, [ebx - 1]
jg 0x81485b
movzx ecx, word [edx + 0x1e]
bt ecx, ebx
jae 0x81485b
mov ecx, dword [esp + 0xd0]
mov edx, edi
call fcn.0081def0
jmp 0x814924
test al, 1
je 0x814924
mov eax, dword [edi]
mov ecx, dword [eax + 0xc]
call fcn.007efd90
cmp eax, 1
jne 0x814924
mov eax, dword [esp + 0x2c]
cmp byte [eax + 0x51], 0
jne 0x8148b2
mov eax, dword [esp + 0xd0]
lea ecx, [ebp + ebp*4]
mov esi, dword [esp]
mov eax, dword [eax + 0x44]
mov edx, dword [eax + ecx*4 + 4]
mov ecx, esi
call fcn.007ebf40
movzx edx, byte [eax]
mov ecx, esi
push dword [eax + 0xc]
push dword [eax + 8]
push dword [eax + 4]
call fcn.007c5800
add esp, 0xc
mov ecx, dword [esp + 4]
mov edx, 0x35
push 0
push 0
call fcn.007cff00
add esp, 8
test eax, eax
je 0x814924
mov esi, eax
mov eax, dword [edi]
mov ecx, dword [esp + 0x2c]
mov edx, 0xad
mov eax, dword [eax + 0xc]
mov dword [esi + 0xc], eax
push 0
call fcn.007d8c20
add esp, 4
test eax, eax
mov dword [esi + 0x10], eax
je 0x814912
mov ecx, dword [esp + 0x10]
lea ecx, [ecx + ebx]
mov dword [eax + 0x1c], ecx
push 0
mov eax, dword [esp + 0xd4]
push dword [eax + 0x18]
push esi
push dword [esp + 0x10]
call fcn.007f0850
add esp, 0x10
mov ecx, dword [esp + 0x2c]
mov edx, esi
mov dword [esi + 0xc], 0
call fcn.007c00e0
test ebx, ebx
jg 0x814821
mov edi, dword [esp + 0xd0]
jmp 0x8149cf
imul eax, eax, 0x58
mov ebp, dword [esp + 0x1c]
test ebx, 0x100
mov eax, dword [esi + eax + 0x2fc]
je 0x8149e7
mov ecx, ebx
and ecx, 5
je 0x8149e7
mov eax, dword [esp + 8]
mov ebp, dword [esp + 4]
mov eax, dword [eax + 0x30]
mov esi, dword [ebp + 0x2c]
mov ecx, ebp
mov edx, dword [eax]
inc esi
mov dword [ebp + 0x2c], esi
mov dword [esp + 8], edx
push esi
push dword [esp + 0x18]
push 0
mov ebx, dword [esp + 0xdc]
push ebx
call fcn.0081da90
add esp, 0x10
mov edi, eax
cmp eax, esi
je 0x81499d
mov ecx, ebp
mov edx, esi
call fcn.007f0bc0
mov ecx, dword [esp]
mov edx, 0x1f
push edi
push dword [ebx + 0x10]
push dword [esp + 0x30]
call fcn.007c5800
add esp, 0xc
mov byte [ebx + 0x35], 0xad
mov edx, dword [esp + 8]
mov edi, ebx
mov eax, dword [ebx + 0x50]
mov ecx, dword [ebx + 0x54]
and ecx, dword [edx + 0x2c]
and eax, dword [edx + 0x28]
or eax, ecx
je 0x8149df
mov esi, dword [esp + 0xc8]
mov ebp, dword [esp + 0x18]
jmp 0x815dce
or byte [edx + 0xa], 4
mov eax, edx
jmp 0x8149cf
mov ecx, ebx
and ecx, 0x102
cmp ecx, 0x102
jne 0x814c00
xor edx, edx
test bl, 0x20
mov esi, 0
mov ecx, 0
je 0x814a1a
mov ecx, dword [esp + 8]
mov ecx, dword [ecx + 0x30]
mov esi, dword [ecx]
mov ecx, 1
mov ebp, dword [esp + 4]
test bl, 0x10
je 0x814a2d
mov edx, dword [esp + 8]
mov edx, dword [edx + 0x30]
mov edx, dword [edx + ecx*4]
mov ebx, dword [esp + 0x14]
mov ecx, edx
test ebx, ebx
cmovne ecx, esi
cmovne esi, edx
test esi, esi
mov dword [esp + 8], ecx
je 0x814aeb
mov ebx, dword [esi]
mov edi, dword [ebx + 0x10]
mov ecx, edi
call fcn.007ee5a0
test eax, eax
je 0x814a88
mov ecx, ebp
call fcn.007f1720
mov dword [esp + 0xac], eax
mov edi, eax
mov ecx, ebp
mov edx, dword [ebx + 0x10]
push 1
push eax
call fcn.0081de60
add esp, 8
mov al, byte [ebx]
mov dword [esp + 0x2c], edi
inc al
and al, 2
or al, 1
movzx eax, al
jmp 0x814abd
lea eax, [esp + 0xac]
mov ecx, ebp
mov edx, edi
push eax
call fcn.007ee980
add esp, 4
mov ecx, dword [esp + 0xd0]
mov edx, esi
mov edi, eax
call fcn.0081def0
movzx eax, byte [ebx]
mov ecx, dword [esp + 0xac]
add eax, 0xffffffca
mov dword [esp + 0x2c], ecx
mov ebx, ebp
mov ebp, dword [esp]
movzx edx, byte [eax + 0xb47ff4]
mov ecx, ebp
push edi
mov edi, dword [esp + 0x14]
push edi
mov esi, dword [esp + 0x30]
push esi
call fcn.007c5800
add esp, 0xc
mov edx, dword [esp + 0x2c]
mov ecx, ebx
call fcn.007f0bc0
jmp 0x814b0c
mov ebp, dword [esp]
xor ecx, ecx
test ebx, ebx
sete cl
lea edx, [ecx*4 + 0x21]
mov ecx, ebp
push eax
mov esi, dword [esp + 0x2c]
push esi
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 8]
test eax, eax
jne 0x814b21
mov ebx, dword [esp + 0x14]
mov esi, 0xad
xor edi, edi
jmp 0x814b8e
mov ecx, dword [esp + 4]
mov ebx, dword [eax]
mov edi, dword [ecx + 0x2c]
inc edi
mov dword [ecx + 0x2c], edi
mov edx, dword [ebx + 0x10]
push 1
push edi
call fcn.0081de60
add esp, 8
mov ecx, dword [ebx + 0x10]
call fcn.007ee5a0
test eax, eax
jne 0x814b83
mov al, byte [ebx]
cmp al, 0x36
je 0x814b73
cmp al, 0x38
je 0x814b73
mov eax, dword [esp + 0x14]
lea esi, [eax + eax + 0x36]
mov edx, dword [esp + 8]
mov ecx, dword [esp + 0xd0]
mov ebp, dword [esp]
call fcn.0081def0
mov ebx, dword [esp + 0x14]
jmp 0x814b8e
xor eax, eax
cmp dword [esp + 0x14], 0
sete al
lea esi, [eax + eax + 0x37]
jmp 0x814b5a
mov ebx, dword [esp + 0x14]
mov ebp, dword [esp]
lea esi, [ebx + ebx + 0x36]
mov ecx, ebp
call fcn.007f2430
mov ecx, dword [esp + 0xd0]
mov edx, dword [esp + 0x28]
xor bl, 5
cmp esi, 0xad
mov byte [ecx + 0x35], bl
mov dword [ecx + 0x38], edx
mov dword [ecx + 0x3c], eax
je 0x81492c
mov ecx, dword [esp + 4]
mov eax, edx
mov edx, 0x7f
mov ebx, dword [ecx + 0x2c]
inc ebx
mov dword [ecx + 0x2c], ebx
mov ecx, ebp
push ebx
push eax
call fcn.007c57e0
add esp, 8
mov ecx, ebp
mov edx, esi
push ebx
push dword [esp + 0x14]
push edi
call fcn.007c5800
add esp, 0xc
mov ecx, ebp
mov edx, 0x53
call fcn.00782720
mov edi, dword [esp + 0xd0]
jmp 0x8149cf
test ebx, 0x200
je 0x815513
mov esi, dword [esp + 8]
test bl, 0x20
mov edi, 0
mov dword [esp + 0xc], 0
movzx eax, word [esi + 0x1a]
movzx edx, word [esi + 0x18]
movzx ebp, word [esi + 0x1c]
mov dword [esp + 0x38], eax
mov eax, dword [esi + 0x20]
mov ecx, edx
mov dword [esp + 0x30], edx
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0xd0]
mov eax, dword [eax + 8]
mov dword [esp + 0x24], eax
mov eax, 0
je 0x814c64
mov edi, dword [esp + 0x30]
mov ecx, dword [esi + 0x30]
movzx eax, word [esp + 0x38]
lea edx, [edi + 1]
mov edi, dword [ecx + edi*4]
test bl, 0x10
mov dword [esp + 0x44], edi
jne 0x814c7a
mov edx, dword [esp + 0x10]
mov edi, eax
xor ebx, ebx
jmp 0x814d61
mov ecx, dword [esi + 0x30]
movzx edi, bp
cmp eax, edi
cmova edi, eax
mov ebx, dword [ecx + edx*4]
test byte [ebx + 0xb], 1
je 0x814d09
mov ecx, dword [esp + 4]
mov esi, dword [esp]
mov edx, 0x45
mov eax, dword [ecx + 0x2c]
inc eax
mov dword [ecx + 0x2c], eax
mov ecx, dword [esp + 0xd0]
mov dword [ecx + 0x2c], eax
mov ecx, esi
push eax
push 1
call fcn.007c57e0
add esp, 8
mov ecx, esi
mov esi, dword [esp + 8]
call fcn.007f2430
mov edx, dword [esp + 0xd0]
mov word [esp + 0x34], bp
mov ebp, ebx
mov ebx, dword [esp + 0x30]
mov dword [edx + 0x30], eax
mov eax, dword [edx + 0x2c]
lea ecx, [eax + eax]
mov dword [edx + 0x2c], ecx
mov ecx, dword [esp + 0x10]
xor edx, edx
mov ecx, dword [ecx + 0x1c]
cmp byte [ecx + ebx], 1
mov ebx, ebp
movzx ebp, word [esp + 0x34]
mov ecx, dword [esp + 0xd0]
sete dl
xor edx, dword [esp + 0x14]
lea eax, [edx + eax*2]
mov dword [ecx + 0x2c], eax
cmp dword [esp + 0x44], 0
je 0x814d1e
mov edx, dword [esp + 0x10]
mov dword [esp + 0xc], 0
jmp 0x814d61
mov edx, dword [esp + 0x10]
mov ecx, dword [esp + 0x30]
mov eax, dword [edx + 4]
movsx eax, word [eax + ecx*2]
test eax, eax
js 0x814d4b
mov ecx, dword [edx + 0xc]
lea eax, [eax + eax*4]
mov ecx, dword [ecx + 4]
cmp byte [ecx + eax*4 + 0xc], 0
je 0x814d5b
mov dword [esp + 0xc], 0
jmp 0x814d61
cmp ax, 0xfffe
je 0x814d5b
mov dword [esp + 0xc], 0
jmp 0x814d61
mov al, 1
mov dword [esp + 0xc], eax
mov eax, 0x80030
mov dword [esp + 0x3c], 0
and eax, dword [esi + 0x24]
cmp eax, 0x80000
jne 0x814daa
mov ecx, dword [esp + 4]
mov eax, dword [esp + 0xd0]
mov edx, dword [ecx + 0x2c]
mov edi, eax
inc edx
mov dword [ecx + 0x2c], edx
mov dword [esp + 0x3c], edx
mov dword [eax + 0x24], edx
call fcn.007efdc0
mov edx, dword [esp + 0x10]
mov dword [edi + 0x28], eax
mov edi, 1
mov al, 1
mov dword [esp + 0xc], eax
movzx eax, word [edx + 0x32]
mov esi, dword [esp + 0x30]
cmp si, ax
jae 0x814dcc
mov ecx, dword [edx + 0x1c]
mov edx, dword [esp + 0x20]
cmp byte [ecx + esi], 0
setne cl
and dl, 1
xor dl, cl
jne 0x814df3
cmp dword [esp + 0x14], 0
jne 0x814dee
mov eax, dword [esp + 0x44]
mov dword [esp + 0x4c], 0
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x38]
mov word [esp + 0x34], ax
jmp 0x814e15
cmp ax, si
jne 0x814dd3
mov word [esp + 0x34], bp
mov dword [esp + 0x40], ebx
movzx ebp, byte [esp + 0x38]
mov ebx, dword [esp + 0x44]
mov eax, dword [esp + 0xc]
mov dword [esp + 0x4c], eax
mov dword [esp + 0xc], 0
mov edx, dword [esp + 0xd0]
mov ecx, dword [esp + 4]
lea eax, [esp + 0xa8]
push eax
push edi
push dword [esp + 0x1c]
call fcn.0081df70
add esp, 0xc
mov edi, dword [esp + 0xa8]
xor edx, edx
test bp, bp
mov dword [esp + 0x20], eax
mov dword [esp + 0x54], ebp
jne 0x814e51
mov ebp, dword [esp + 0x18]
jmp 0x814e67
mov ebp, dword [esp + 0x18]
test edi, edi
je 0x814e67
mov ecx, dword [esp + 0x2c]
lea edx, [edi + esi]
call fcn.0077edc0
mov edx, eax
cmp dword [esp + 0x3c], 0
mov eax, 0x28
mov ecx, 0x10
cmovne ecx, eax
mov eax, dword [esp + 0xd0]
mov eax, dword [eax + ecx]
mov ecx, dword [esp + 0x40]
mov dword [esp + 0x38], eax
mov ah, 1
test ecx, ecx
mov al, 1
je 0x814e9a
test byte [ecx + 0xc], 0x28
setne al
test ebx, ebx
je 0x814ea5
test byte [ebx + 0xc], 0x28
setne ah
mov esi, dword [esp + 0x40]
mov dword [esp + 0x64], ebx
mov ebx, dword [esp + 0x30]
mov dword [esp + 0x48], edi
movzx edi, al
mov dword [esp + 0x44], edx
mov byte [esp + 0x5c], ah
test esi, esi
setne al
test bx, bx
setne cl
or cl, al
test esi, esi
movzx ecx, cl
je 0x814fa2
mov eax, dword [esi]
movzx ebp, word [esp + 0x34]
mov dword [esp + 0x50], edi
mov dword [esp + 0xc], ecx
mov ecx, dword [esp + 4]
mov edi, dword [eax + 0x10]
mov eax, dword [esp + 0x20]
mov dword [esp + 0x34], ebp
lea eax, [eax + ebx]
mov edx, edi
push ebp
mov ebp, eax
push eax
call fcn.0081de60
add esp, 8
mov ebx, dword [esp]
mov edx, dword [esp + 0xd0]
mov ecx, ebx
push esi
call fcn.0081e170
add esp, 4
mov ecx, edi
call fcn.007f2f20
test eax, eax
je 0x814f3b
mov ecx, ebx
mov edx, 0x32
push dword [esp + 0x38]
push ebp
call fcn.007c57e0
add esp, 8
mov ebx, dword [esp + 0x48]
mov ebp, dword [esp + 0x18]
mov eax, dword [esp + 0x30]
mov esi, dword [esp + 0x34]
test ebx, ebx
je 0x814f63
lea eax, [ebx + eax]
mov ecx, edi
mov edx, esi
push eax
call fcn.0081e1a0
mov eax, dword [esp + 0x34]
add esp, 4
mov ecx, edi
add esi, eax
call fcn.007ee5a0
mov ecx, dword [esp + 4]
xor edx, edx
test eax, eax
je 0x814f85
mov dword [esp + 0x50], 1
mov edi, esi
jmp 0x815023
mov edi, ecx
mov ecx, dword [esp + 0xd0]
mov edx, dword [esp + 0x40]
call fcn.0081def0
mov ecx, edi
xor edx, edx
mov edi, esi
jmp 0x815023
cmp byte [esp + 0xc], 0
je 0x814fd9
mov eax, dword [esp + 0x20]
mov esi, dword [esp + 0x30]
mov ecx, dword [esp]
mov edx, 0x48
lea eax, [eax + esi]
push eax
push 0
call fcn.007c57e0
add esp, 8
lea edi, [esi + 1]
mov dword [esp + 0x50], 0
mov edx, 1
jmp 0x815013
xor edx, edx
cmp dword [esp + 0x3c], 0
mov dword [esp + 0x50], edi
jne 0x814ff0
mov edi, dword [esp + 0x30]
mov dword [esp + 0xc], ecx
jmp 0x81501b
mov eax, dword [esp + 0x20]
mov esi, dword [esp + 0x30]
mov ecx, dword [esp]
mov edx, 0x48
lea eax, [eax + esi]
push eax
push 0
call fcn.007c57e0
xor edx, edx
add esp, 8
lea edi, [esi + 1]
mov dword [esp + 0xc], 1
mov ecx, dword [esp + 4]
mov ebx, dword [esp + 0x48]
mov eax, edi
mov dword [esp + 0x34], edx
sub eax, edx
mov edx, dword [esp + 0x20]
push ebx
push eax
call fcn.0081e1f0
add esp, 8
mov eax, dword [esp + 8]
movzx eax, word [eax + 0x2a]
test eax, eax
je 0x81504d
cmp edi, eax
je 0x815119
mov eax, dword [esp + 8]
mov ebx, edi
test byte [eax + 0x26], 4
je 0x81506d
mov ecx, dword [esp]
mov edx, 0x76
push dword [esp + 0x24]
call fcn.007edd80
add esp, 4
mov eax, dword [esp + 0x3c]
mov esi, dword [esp + 0x50]
test eax, eax
je 0x8150ee
mov edi, dword [esp]
mov edx, 0x45
mov ecx, edi
push eax
push 1
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0xc]
mov ecx, dword [esp + 0x14]
lea eax, [ecx + eax*4]
mov ecx, edi
movzx edx, byte [eax + esi*2 + 0xb47ff8]
push ebx
push dword [esp + 0x24]
push dword [esp + 0x40]
push dword [esp + 0x30]
call fcn.007826e0
add esp, 0x10
mov ecx, edi
call fcn.007f2430
add eax, 2
mov ecx, edi
mov edx, 0xb
push eax
push 0
call fcn.007c57e0
add esp, 8
mov ecx, dword [esp + 0x14]
xor eax, eax
cmp ebx, 1
setg al
sub ebx, esi
movzx edx, byte [ecx + eax*4 + 0xb47ffa]
mov ecx, edi
jmp 0x815104
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0xc]
lea eax, [eax + ecx*4]
mov ecx, dword [esp]
movzx edx, byte [eax + esi*2 + 0xb47ff8]
push ebx
push dword [esp + 0x24]
push dword [esp + 0x40]
push dword [esp + 0x30]
call fcn.007826e0
add esp, 0x10
mov esi, dword [esp + 0x64]
movzx edx, byte [esp + 0x5c]
mov ecx, dword [esp + 0x54]
test esi, esi
je 0x8151f3
mov edi, dword [esp + 0x20]
mov eax, dword [esi]
mov dword [esp + 0x40], edx
mov ebx, dword [eax + 0x10]
add edi, dword [esp + 0x30]
movzx eax, cx
mov ecx, dword [esp + 4]
mov dword [esp + 0xc], eax
mov edx, ebx
push eax
push edi
call fcn.0081de60
add esp, 8
mov ebp, dword [esp]
mov edx, dword [esp + 0xd0]
mov ecx, ebp
push esi
call fcn.0081e170
add esp, 4
mov ecx, ebx
mov dword [esp + 0x54], ebx
call fcn.007f2f20
test eax, eax
je 0x81518e
mov ecx, ebp
mov edx, 0x32
push dword [esp + 0x38]
push edi
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0x44]
mov ebp, dword [esp + 0x18]
mov esi, dword [esp + 0xc]
mov ebx, dword [esp + 0x54]
test eax, eax
je 0x8151c2
mov ecx, ebx
mov edx, esi
push eax
call fcn.0081e1a0
add esp, 4
mov ecx, dword [esp + 4]
mov edx, edi
push dword [esp + 0x44]
push esi
call fcn.0081e1f0
add esp, 8
add esi, dword [esp + 0x30]
mov ecx, ebx
call fcn.007ee5a0
test eax, eax
mov dword [esp + 0xc], esi
je 0x8151df
mov dword [esp + 0x40], 1
jmp 0x815238
mov edi, dword [esp + 0xd0]
mov edx, dword [esp + 0x64]
mov ecx, edi
call fcn.0081def0
jmp 0x81523f
cmp byte [esp + 0x4c], 0
mov eax, dword [esp + 0x3c]
jne 0x81520c
mov eax, dword [esp + 0x30]
mov dword [esp + 0x40], edx
mov dword [esp + 0xc], eax
jmp 0x815238
mov esi, dword [esp + 0x30]
test eax, eax
jne 0x81522f
mov eax, dword [esp + 0x20]
mov ecx, dword [esp]
mov edx, 0x48
add eax, esi
push eax
push 0
call fcn.007c57e0
add esp, 8
xor edx, edx
inc esi
mov dword [esp + 0x40], edx
mov dword [esp + 0xc], esi
mov edi, dword [esp + 0xd0]
mov ebx, dword [esp + 0x2c]
mov edx, dword [esp + 0x48]
mov esi, dword [esp + 0xc8]
mov ecx, ebx
call fcn.00774f10
mov edx, dword [esp + 0x44]
mov ecx, ebx
call fcn.00774f10
mov ecx, dword [esp]
call fcn.007f2430
cmp dword [esp + 0xc], 0
mov ebx, dword [esp + 0x3c]
mov dword [edi + 0x3c], eax
je 0x8152c6
mov ebp, dword [esp]
test ebx, ebx
je 0x815298
mov ecx, ebp
call fcn.007f2430
add eax, 3
mov ecx, ebp
mov edx, 0x14
push eax
push ebx
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x40]
movzx edx, byte [ecx + eax*2 + 0xb48000]
mov ecx, ebp
push dword [esp + 0xc]
push dword [esp + 0x24]
push dword [esp + 0x40]
push dword [esp + 0x30]
call fcn.007826e0
add esp, 0x10
mov ebp, dword [esp + 0x18]
test ebx, ebx
mov eax, ebx
mov ebx, dword [esp]
je 0x81531e
mov ecx, ebx
mov dword [esp + 0x3c], eax
call fcn.007f2430
add eax, 2
mov ecx, ebx
mov edx, 0x12
push eax
push dword [esp + 0x40]
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x34]
movzx edx, byte [ecx + eax*2 + 0xb48000]
mov eax, dword [esp + 0xc]
add eax, ecx
mov ecx, ebx
push eax
push dword [esp + 0x24]
push dword [esp + 0x40]
push dword [esp + 0x30]
call fcn.007826e0
add esp, 0x10
mov eax, dword [esp + 8]
mov eax, dword [eax + 0x24]
test eax, 0x40000
je 0x815348
mov ecx, ebx
mov edx, 0x76
push 1
push dword [esp + 0x28]
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 8]
mov eax, dword [eax + 0x24]
test al, 0x40
je 0x815358
test byte [esi + 0x28], 0x20
mov bl, 1
je 0x81548a
mov eax, dword [esp + 0x10]
mov ecx, dword [eax + 0xc]
cmp byte [ecx + 0x24], 0
js 0x8153ef
movzx eax, word [esi + 0x28]
test eax, 0x400
jne 0x81538c
test eax, 0x1000
je 0x8153d2
cmp byte [esi + 0x2e], 1
je 0x81538c
mov eax, dword [esp + 8]
cmp word [eax + 0x28], 0
jne 0x8153d2
mov eax, dword [esp + 4]
mov ebx, dword [esp]
mov edx, 0x86
mov esi, dword [eax + 0x2c]
mov ecx, ebx
inc esi
mov dword [eax + 0x2c], esi
push esi
push dword [esp + 0x28]
call fcn.007c57e0
add esp, 8
mov ecx, ebx
mov edx, 0x20
push esi
mov esi, dword [esp + 0xcc]
push 0
push dword [esp + 0x30]
call fcn.007c5800
add esp, 0xc
xor ebx, ebx
jmp 0x81548a
mov edx, dword [esp + 0x10]
mov ecx, esi
push dword [esp + 0x24]
push dword [esp + 0x2c]
call fcn.0081e240
add esp, 8
xor ebx, ebx
jmp 0x81548a
mov eax, dword [esp + 0x24]
xor ebx, ebx
cmp dword [esp + 0x28], eax
je 0x81548a
call fcn.00787030
movzx edx, word [eax + 0x32]
mov ecx, dword [esp + 4]
mov edi, eax
call fcn.007eee80
cmp word [edi + 0x32], 0
je 0x815467
mov ebp, dword [esp + 0x24]
xor esi, esi
mov dword [esp + 0x2c], eax
mov eax, dword [edi + 4]
mov ecx, dword [esp + 0x10]
movsx edx, word [eax + esi*2]
call fcn.007f0f30
mov ecx, dword [esp + 0x2c]
cwde
mov edx, 0x59
lea ebx, [esi + ecx]
mov ecx, dword [esp]
push ebx
push eax
push ebp
call fcn.007c5800
add esp, 0xc
movzx ebx, word [edi + 0x32]
inc esi
cmp esi, ebx
jb 0x815424
mov esi, dword [esp + 0xc8]
mov ebp, dword [esp + 0x18]
mov eax, dword [esp + 0x2c]
mov ecx, dword [esp]
mov edx, 0x1d
push ebx
push eax
push dword [esp + 0x68]
push dword [esp + 0x34]
call fcn.007826e0
add esp, 0x10
mov edi, dword [esp + 0xd0]
xor ebx, ebx
cmp dword [edi], 0
jne 0x8154c5
test byte [esi + 0x28], 0x20
jne 0x8154aa
mov ecx, dword [esp + 0x10]
mov edx, dword [esp + 0x28]
push esi
push dword [esp + 0x28]
call fcn.0081e310
add esp, 8
mov eax, dword [esp + 0x10]
mov ecx, dword [eax + 0x24]
test ecx, ecx
je 0x8154c5
mov edx, dword [esp + 0x28]
push dword [esp + 0x6c]
call fcn.0081e570
add esp, 4
mov eax, dword [esp + 8]
test byte [eax + 0x25], 0x10
je 0x8154d5
mov byte [edi + 0x35], 0xad
jmp 0x8154e6
cmp dword [esp + 0x14], 0
je 0x8154e2
mov byte [edi + 0x35], 4
jmp 0x8154e6
mov byte [edi + 0x35], 5
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 8]
mov dword [edi + 0x38], eax
mov al, byte [ecx + 0x26]
and al, 1
mov byte [edi + 0x36], al
test byte [ecx + 0x24], 0xf
jne 0x815503
mov byte [edi + 0x37], 1
mov ecx, dword [esp + 0x10]
xor eax, eax
test bl, bl
cmovne ecx, eax
jmp 0x815e24
mov edi, dword [esp + 0xd0]
test ebx, 0x2000
je 0x815de3
mov ecx, dword [esp + 4]
mov ebx, dword [ecx + 0x2c]
mov eax, dword [ecx + 0x28]
mov dword [esp + 0x44], eax
inc eax
inc ebx
mov dword [ecx + 0x28], eax
mov dword [ecx + 0x2c], ebx
call fcn.007efdc0
mov dword [esp + 0x5c], eax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x50], ebx
mov eax, dword [ebp + eax*8 + 0x18]
mov dword [esp + 0x14], eax
mov eax, dword [esp + 8]
mov eax, dword [eax + 0x30]
mov eax, dword [eax]
mov dword [esp + 0x40], eax
mov eax, dword [eax + 0x1c]
mov byte [edi + 0x35], 0x41
mov dword [edi + 0x38], ebx
movzx ebx, byte [esi + 0x2c]
mov dword [esp + 0x3c], eax
cmp ebx, 2
jb 0x815638
sub ebx, dword [esp + 0xcc]
mov ecx, dword [esp + 0x2c]
lea eax, [ebx + ebx*8]
lea edx, [eax*8 + 8]
push 0
call fcn.00784570
add esp, 4
test eax, eax
jne 0x8155b3
mov esi, dword [esp + 0xd8]
mov edi, dword [esp + 0xd4]
jmp 0x816103
mov ecx, eax
mov eax, dword [esp + 0x18]
mov dword [esp + 0x48], ecx
lea esi, [ebp + eax*8 + 8]
movzx eax, bl
mov dword [ecx + 4], eax
mov dword [ecx], eax
mov eax, ecx
mov ecx, 0x12
add eax, 8
cmp ebx, 2
mov edi, eax
rep movsd dword es:[edi], dword [esi]
jge 0x8155ec
mov edi, dword [esp + 0xd0]
mov esi, dword [esp + 0xc8]
jmp 0x81563f
mov ecx, dword [esp + 0xc8]
mov ebp, 1
mov edx, dword [ecx + 4]
mov esi, dword [esp + 0xd0]
lea ecx, [ebp + ebp*8]
lea edi, [eax + ecx*8]
imul ecx, ebp, 0x58
inc ebp
cmp ebp, ebx
movzx ecx, byte [esi + ecx + 0x34]
lea ecx, [ecx + ecx*8]
lea esi, [edx + ecx*8 + 8]
mov ecx, 0x12
rep movsd dword es:[edi], dword [esi]
jne 0x8155fb
mov ebp, dword [esp + 4]
mov edi, dword [esp + 0xd0]
mov esi, dword [esp + 0xc8]
jmp 0x815643
mov eax, dword [esi + 4]
mov dword [esp + 0x48], eax
mov ebp, dword [esp + 4]
xor ebx, ebx
test byte [esi + 0x28], 0x10
mov ecx, dword [esp]
mov dword [esp + 0x58], 0
mov dword [esp + 0x4c], 0
jne 0x8156d4
mov ecx, dword [esp + 0x14]
cmp byte [ecx + 0x24], 0
js 0x815688
mov eax, dword [ebp + 0x2c]
mov ecx, dword [esp]
mov edx, 0x48
inc eax
mov dword [ebp + 0x2c], eax
mov dword [esp + 0x58], eax
push eax
push 0
call fcn.007c57e0
add esp, 8
jmp 0x8156c6
call fcn.00787030
mov esi, dword [ebp + 0x28]
mov dword [esp + 8], eax
mov edx, 0x64
lea ecx, [esi + 1]
mov dword [ebp + 0x28], ecx
mov ecx, dword [esp]
movzx eax, word [eax + 0x32]
push eax
mov dword [esp + 0x5c], esi
push esi
call fcn.007c57e0
add esp, 8
mov edx, dword [esp + 8]
mov esi, dword [esp + 0xc8]
mov ecx, ebp
call fcn.007ec100
mov eax, dword [ebp + 0x2c]
mov ecx, dword [esp]
inc eax
mov dword [esp + 0x4c], eax
mov dword [ebp + 0x2c], eax
mov edx, 0x45
push dword [esp + 0x50]
push 0
call fcn.007c57e0
add esp, 8
mov dword [esp + 0x70], eax
mov eax, dword [esi + 0x5c]
cmp eax, 2
jl 0x815781
xor edi, edi
xor esi, esi
mov ecx, dword [esp + 0xc8]
lea edx, [edi + edi*2]
shl edx, 4
mov ecx, dword [ecx + 0x64]
lea ebx, [ecx + edx]
cmp ebx, dword [esp + 0x40]
je 0x815752
test byte [ecx + edx + 0xa], 6
jne 0x815752
movzx ebx, word [ecx + edx + 0xc]
test ebx, 0x1fff
je 0x815752
mov edx, dword [ecx + edx]
mov ecx, dword [esp + 0x2c]
push 0
call fcn.007f0780
add esp, 4
mov ecx, ebp
mov edx, esi
push eax
call fcn.007defd0
add esp, 4
mov esi, eax
mov eax, dword [esp + 0xc8]
mov eax, dword [eax + 0x5c]
inc edi
cmp edi, eax
jl 0x8156fb
test esi, esi
jne 0x81575f
xor ebx, ebx
jmp 0x815773
mov ecx, ebp
mov edx, 0x1002c
push esi
push 0
call fcn.007cff00
add esp, 8
mov ebx, eax
mov edi, dword [esp + 0xd0]
mov esi, dword [esp + 0xc8]
mov edx, fcn.00810f30
movzx ecx, byte [0xbb2723]
not edx
and edx, 1
mov eax, edx
add eax, fcn.00810f30
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x8158ec
mov al, byte [0xbb2723]
mov ecx, edx
mov ah, 1
add ecx, fcn.00810f30
sete cl
not cl
and cl, 3
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb2723], ah
jne 0x8157b1
mov ecx, fcn.00810f30
movzx eax, al
not ecx
and ecx, 1
mov edx, ecx
add edx, fcn.00810f30
sete dl
not dl
and dl, 3
xor dl, 7
movzx edx, dl
bt eax, edx
jae 0x81581e
mov eax, ecx
movzx edx, byte [0xbb2723]
add eax, fcn.00810f30
sete al
not al
and al, 3
movzx eax, al
bt edx, eax
jae 0x8157fc
jmp 0x8158ec
add ecx, fcn.00810f30
movzx ecx, byte [0xbb2723]
sete al
not al
and al, 3
movzx eax, al
bt ecx, eax
jb 0x8158c8
mov eax, fcn.00810f30
xor ecx, ecx
not eax
and eax, 1
add eax, fcn.00810f30
mov eax, dword [0xbb2710]
sete cl
xor ecx, 0xd44f7683
add ecx, 0x1250
mov edx, ecx
xor eax, ecx
shr edx, 0x1f
mov dword [0xbb2710], eax
not eax
or edx, ecx
and cl, 7
imul edx, eax
mov eax, dword [0xbb2714]
lea esi, [edx + edx]
xor eax, edx
shr edx, 0x1e
mov dword [0xbb2714], eax
or esi, edx
not eax
mov edx, dword [0xbb2718]
imul eax, esi
lea esi, [eax*4]
xor edx, eax
shr eax, 0x1d
mov dword [0xbb2718], edx
or esi, eax
not edx
mov al, 1
imul edx, esi
mov esi, dword [esp + 0xc8]
shl al, cl
xor dword [str.Ti_N], edx
or byte [0xbb2723], al
mov eax, fcn.00810f30
not eax
and eax, 1
add eax, fcn.00810f30
mov al, 0xfe
sete cl
not cl
and cl, 3
xor cl, 7
rol al, cl
and byte [0xbb2723], al
movzx esi, word [esi + 0x28]
push 0xbb2710
push 1
push ebp
call fcn.007f2440
add esp, 0xc
mov eax, dword [esp + 0x3c]
cmp dword [eax + 0xc], 0
jg 0x81591f
mov dword [esp + 0x34], 0
mov dword [esp + 0xc], 0
jmp 0x815d4c
and esi, 0x400
mov edx, dword [esp + 0x28]
xor ecx, ecx
mov dword [esp + 0xc], 0
mov dword [esp + 0x34], 0
mov dword [esp + 0x54], ebx
or esi, 0x20
movzx eax, si
mov esi, dword [esp + 0x3c]
mov dword [esp + 0x64], eax
mov eax, dword [esi + 0x14]
mov dword [esp + 0x10], ecx
lea ecx, [ecx + ecx*2]
shl ecx, 4
cmp dword [eax + ecx + 0x14], edx
je 0x815973
test byte [eax + ecx + 0xd], 4
jne 0x815973
mov eax, dword [esp + 0x10]
inc eax
mov ecx, eax
jmp 0x815d43
mov esi, dword [eax + ecx]
test ebx, ebx
je 0x81597f
mov dword [ebx + 0xc], esi
mov esi, ebx
mov edi, fcn.0081fdb0
mov edx, fcn.0081fdb0
xor eax, eax
or edi, 2
xor edx, 2
mov ecx, edi
add ecx, edx
sete al
mov ecx, eax
xor ecx, 1
lea eax, [ecx + eax*2]
movzx ecx, byte [0xbb2733]
bt ecx, eax
jb 0x815ab2
mov al, byte [0xbb2733]
mov ebx, edi
xor ecx, ecx
mov ah, 1
add ebx, edx
sete cl
mov ebx, ecx
xor ebx, 1
lea ecx, [ebx + ecx*2]
xor cl, 7
shl ah, cl
or ah, al
lock cmpxchg byte [0xbb2733], ah
jne 0x8159b5
mov ebx, edi
xor ecx, ecx
movzx eax, al
add ebx, edx
sete cl
mov ebx, ecx
xor ebx, 1
lea ecx, [ebx + ecx*2]
mov ebx, dword [esp + 0x54]
xor cl, 7
movzx ecx, cl
bt eax, ecx
jae 0x815a1e
mov ecx, edi
xor eax, eax
add ecx, edx
sete al
mov ecx, eax
xor ecx, 1
lea eax, [ecx + eax*2]
movzx ecx, byte [0xbb2733]
bt ecx, eax
jae 0x8159fc
jmp 0x815ab2
mov ecx, edi
xor eax, eax
add ecx, edx
sete al
mov ecx, eax
xor ecx, 1
lea eax, [ecx + eax*2]
movzx ecx, byte [0xbb2733]
bt ecx, eax
jb 0x815a96
mov ecx, edi
xor eax, eax
add ecx, edx
sete al
mov ecx, eax
xor ecx, 0x791469b1
lea ecx, [ecx + eax*2]
mov eax, dword [0xbb2724]
xor eax, ecx
mov dword [0xbb2724], eax
not eax
mov ebx, dword [0xbb2728]
imul eax, ecx
and cl, 3
lea ebp, [eax + eax]
xor ebx, eax
shr eax, 0x1e
mov dword [0xbb2728], ebx
or ebp, eax
not ebx
mov al, 1
imul ebx, ebp
mov ebp, dword [esp + 4]
shl al, cl
xor dword [0xbb272c], ebx
mov ebx, dword [esp + 0x54]
or byte [0xbb2733], al
xor eax, eax
add edi, edx
sete al
mov ecx, eax
xor ecx, 1
lea ecx, [ecx + eax*2]
mov al, 0xfe
xor cl, 7
rol al, cl
and byte [0xbb2733], al
mov eax, dword [esp + 0x10]
inc eax
mov dword [esp + 0x24], eax
push eax
push 0xbb2724
push 1
push ebp
call fcn.007f2440
add esp, 0x10
mov edi, dword [esp + 0x48]
mov ecx, ebp
mov edx, edi
push dword [esp + 0x44]
push dword [esp + 0x68]
push 0
push 0
push esi
call fcn.0080a3b0
add esp, 0x14
test eax, eax
jne 0x815af9
mov edi, dword [esp + 0xd0]
jmp 0x815d37
mov dword [esp + 0x38], eax
add eax, 0x2f0
mov ecx, ebp
mov edx, edi
push 0
push eax
call fcn.00813000
add esp, 8
mov eax, dword [esp + 0xc8]
mov edi, dword [esp + 0xd0]
mov esi, dword [esp + 0x28]
test byte [eax + 0x28], 0x10
je 0x815b46
mov ecx, dword [esp]
mov edx, 0xc
push dword [esp + 0x5c]
push dword [esp + 0x54]
call fcn.007c57e0
add esp, 8
jmp 0x815cd4
mov eax, dword [esp + 0x3c]
mov ebx, dword [esp + 0x10]
mov edx, dword [esp + 0x14]
mov ecx, 0xffffffff
mov eax, dword [eax + 0xc]
dec eax
cmp ebx, eax
cmove ebx, ecx
cmp byte [edx + 0x24], 0
js 0x815b9f
mov ebp, dword [esp]
mov ecx, ebp
push dword [esp + 0x4c]
push 0xffffffffffffffff
push esi
call fcn.007f0be0
add esp, 0xc
mov ecx, ebp
mov edx, 0x2d
push ebx
push dword [esp + 0x50]
mov ebx, dword [esp + 0x5c]
push 0
push dword [esp + 0x64]
call fcn.007826e0
add esp, 0x10
mov esi, eax
jmp 0x815cab
mov ecx, edx
mov dword [esp + 0x68], ebx
call fcn.00787030
movzx ebx, word [eax + 0x32]
mov ecx, ebp
mov edi, eax
mov edx, ebx
call fcn.007eee80
mov ecx, dword [esp]
test ebx, ebx
mov dword [esp + 0x20], eax
je 0x815c04
xor ebp, ebp
mov dword [esp + 0x30], edi
mov edx, dword [edi + 4]
mov edi, esi
mov esi, ebx
lea ebx, [ebp + eax]
movsx edx, word [edx + ebp*2]
mov dword [esp + 8], edx
mov edx, dword [esp + 0x14]
push ebx
mov ebx, esi
mov esi, edi
mov edi, dword [esp + 0x34]
push dword [esp + 0xc]
push esi
call fcn.007f0be0
mov ecx, dword [esp + 0xc]
mov eax, dword [esp + 0x2c]
add esp, 0xc
inc ebp
cmp ebp, ebx
jne 0x815bca
mov esi, dword [esp + 0x68]
test esi, esi
jne 0x815c1a
mov ebp, dword [esp + 0x20]
mov dword [esp + 8], 0
jmp 0x815c3e
mov ecx, dword [esp]
mov edx, 0x1e
push ebx
mov ebp, dword [esp + 0x24]
push ebp
push 0
push dword [esp + 0x64]
call fcn.007826e0
add esp, 0x10
test esi, esi
mov dword [esp + 8], eax
js 0x815c8a
mov edi, dword [esp]
mov esi, dword [esp + 0x4c]
mov edx, 0x5b
mov ecx, edi
push esi
push ebx
push ebp
call fcn.007c5800
add esp, 0xc
mov eax, ebp
mov ebp, ebx
mov ecx, edi
mov edx, 0x83
push ebx
push eax
push esi
push dword [esp + 0x64]
call fcn.007826e0
add esp, 0x10
cmp dword [esp + 0x68], 0
je 0x815c84
mov ecx, edi
mov edx, 0x10
call fcn.00782720
mov ebx, ebp
mov ebp, dword [esp + 0x20]
mov ecx, dword [esp + 4]
mov edx, ebp
push ebx
call fcn.007ef1d0
add esp, 4
mov edi, dword [esp + 0xd0]
mov ebp, dword [esp]
mov ebx, dword [esp + 0x54]
mov esi, dword [esp + 8]
mov ecx, ebp
mov edx, 0xc
push dword [esp + 0x5c]
push dword [esp + 0x54]
call fcn.007c57e0
add esp, 8
mov ebp, dword [esp + 4]
test esi, esi
je 0x815cd4
mov ecx, dword [esp]
mov edx, esi
call fcn.007ebd40
mov ecx, dword [esp + 0x38]
mov edx, dword [esp + 0xc]
mov eax, 1
test byte [ecx + 0x30], 2
cmovne edx, eax
mov eax, dword [ecx + 0x338]
xor esi, esi
mov dword [esp + 0xc], edx
test byte [eax + 0x25], 2
je 0x815d27
cmp dword [esp + 0x10], 0
mov eax, dword [eax + 0x20]
jne 0x815d08
mov edx, eax
jmp 0x815d10
mov edx, dword [esp + 0x34]
cmp eax, edx
jne 0x815d27
mov eax, dword [esp + 0x14]
cmp byte [eax + 0x24], 0
jns 0x815d25
mov eax, dword [edx + 0x38]
and eax, 3
cmp eax, 2
je 0x815d27
mov esi, edx
call fcn.0080c620
mov ecx, ebp
call fcn.00809770
mov dword [esp + 0x34], esi
mov edx, dword [esp + 0x28]
mov esi, dword [esp + 0x3c]
mov ecx, dword [esp + 0x24]
cmp ecx, dword [esi + 0xc]
jl 0x81594d
mov ecx, ebp
call fcn.00809770
mov eax, dword [esp + 0x34]
mov esi, dword [esp + 0xc8]
test eax, eax
mov dword [edi + 0x40], eax
je 0x815d6c
mov eax, dword [esp + 0x44]
mov dword [edi + 8], eax
mov ebp, dword [esp + 0x18]
test ebx, ebx
je 0x815d86
mov ecx, dword [esp + 0x2c]
mov edx, ebx
mov dword [ebx + 0xc], 0
call fcn.007c00e0
mov ebx, dword [esp]
mov ecx, ebx
call fcn.007f2430
mov edx, dword [esp + 0x70]
mov ecx, ebx
push eax
call fcn.007f24e0
add esp, 4
mov edx, dword [edi + 0xc]
mov ecx, ebx
call fcn.007ebf10
mov edx, dword [esp + 0x5c]
mov ecx, ebx
call fcn.007f04f0
cmp byte [esi + 0x2c], 2
jb 0x815dc7
mov ecx, dword [esp + 0x2c]
mov edx, dword [esp + 0x48]
call fcn.00774f10
cmp dword [esp + 0xc], 0
je 0x815dd6
mov ebx, dword [esp + 0x1c]
xor ecx, ecx
jmp 0x815e28
mov edx, dword [esp + 0x40]
mov ecx, edi
call fcn.0081def0
jmp 0x815dce
test dl, 0x20
je 0x815dee
mov byte [edi + 0x35], 0xad
jmp 0x815e1e
mov edx, dword [esp + 0x14]
mov ebx, dword [esp + 0x28]
mov cl, byte [edx + 0xb48004]
movzx edx, byte [edx + 0xb48006]
mov byte [edi + 0x35], cl
mov ecx, dword [esp]
mov dword [edi + 0x38], ebx
push eax
push ebx
call fcn.007c57e0
add esp, 8
inc eax
mov dword [edi + 0x3c], eax
mov byte [edi + 0x37], 1
mov ebp, dword [esp + 0x18]
xor ecx, ecx
mov ebx, dword [esp + 0x1c]
mov dword [esp + 0x10], ecx
cmp ecx, 1
mov ecx, 1
lea eax, [ebx + ebp*8 + 0x2c]
adc ecx, 0
mov dword [esp + 8], eax
mov ebx, dword [esi + 0x5c]
test ebx, ebx
jle 0x816062
mov esi, dword [esi + 0x64]
mov ebp, dword [esp + 4]
mov dword [esp + 0x18], ecx
mov dword [esp + 0x1c], 0
movzx eax, word [esi + 0xa]
test al, 6
jne 0x815f67
mov ecx, dword [edi + 0x50]
mov edx, dword [edi + 0x54]
and edx, dword [esi + 0x2c]
and ecx, dword [esi + 0x28]
or ecx, edx
je 0x815e89
mov eax, dword [esp + 0xc8]
or byte [eax + 0x30], 2
jmp 0x815f67
mov ecx, dword [esp + 8]
mov edi, dword [esi]
test byte [ecx], 8
je 0x815e9e
test byte [edi + 4], 1
je 0x815f60
mov ecx, dword [esp + 0x18]
cmp ecx, 1
jne 0x815ed6
mov eax, dword [esp + 0xd0]
mov ecx, edi
mov edx, dword [eax + 4]
push dword [esp + 0x10]
call fcn.0081b280
add esp, 4
test eax, eax
jne 0x815ed0
mov dword [esp + 0x1c], 2
jmp 0x815f60
movzx eax, word [esi + 0xa]
jmp 0x815edb
cmp ecx, 2
jg 0x815ef6
test eax, 0x1000
je 0x815ef6
mov ecx, dword [esp + 0x1c]
mov eax, 3
test ecx, ecx
cmove ecx, eax
mov dword [esp + 0x1c], ecx
jmp 0x815f60
test eax, 0x200
je 0x815f0b
mov eax, dword [esp + 0xd0]
mov eax, dword [eax + 0x2c]
test eax, eax
jne 0x815f1d
push 0x10
push dword [esp + 0x64]
push edi
push ebp
call fcn.007f0850
add esp, 0x10
jmp 0x815f5c
mov ecx, dword [esp]
mov ebp, eax
and eax, 1
shr ebp, 1
lea edx, [eax + eax + 0x12]
push ebp
mov ebp, dword [esp + 8]
call fcn.007edd80
add esp, 4
mov dword [esp + 0x2c], eax
push 0x10
push dword [esp + 0x64]
push edi
push ebp
call fcn.007f0850
mov edx, dword [esp + 0x3c]
add esp, 0x10
test edx, edx
je 0x815f5c
mov ecx, dword [esp]
call fcn.007ebd40
or byte [esi + 0xa], 4
mov edi, dword [esp + 0xd0]
add esi, 0x30
dec ebx
jg 0x815e5d
mov ecx, dword [esp + 0x1c]
mov esi, dword [esp + 0xc8]
test ecx, ecx
jg 0x815e3f
mov ebx, dword [esi + 0x5c]
test ebx, ebx
jle 0x816062
mov ebp, dword [esi + 0x64]
test byte [ebp + 0xa], 6
jne 0x816058
movzx eax, word [ebp + 0xc]
test al, 0x82
je 0x816058
and eax, 0x800
je 0x816058
mov eax, dword [esp + 0x28]
cmp dword [ebp + 0x14], eax
jne 0x816058
mov eax, dword [esp + 8]
test byte [eax], 8
jne 0x816058
mov eax, dword [ebp]
mov ecx, dword [esp + 0x6c]
mov edx, dword [esp + 0x28]
mov dword [esp + 0x1c], eax
push 0
push 0x83
push dword [esp + 0xe0]
push dword [esp + 0xe0]
push dword [ebp + 0x1c]
call fcn.008186f0
add esp, 0x14
test eax, eax
je 0x816058
test byte [eax + 0xa], 4
jne 0x816058
test byte [eax + 0xc], 1
jne 0x816010
mov esi, dword [eax]
jmp 0x816023
mov esi, dword [eax]
test byte [esi + 5], 8
je 0x816023
mov eax, dword [esi + 0x14]
mov eax, dword [eax + 0x1c]
cmp dword [eax], 1
jg 0x816058
lea edx, [esp + 0x74]
mov ecx, 0xd
mov edi, edx
rep movsd dword es:[edi], dword [esi]
mov edi, dword [esp + 0xd0]
mov eax, dword [esp + 0x1c]
mov eax, dword [eax + 0xc]
mov dword [esp + 0x80], eax
push 0x10
push dword [esp + 0x64]
push edx
push dword [esp + 0x10]
call fcn.007f0850
add esp, 0x10
add ebp, 0x30
dec ebx
jg 0x815f92
mov esi, dword [edi]
mov ebx, dword [esp + 4]
test esi, esi
je 0x8160f6
mov edi, dword [esp]
mov ecx, edi
call fcn.007f2430
mov ecx, dword [esp + 0xd0]
mov edx, 0x45
mov dword [ecx + 0x1c], eax
mov ecx, edi
push esi
push 1
call fcn.007c57e0
add esp, 8
mov eax, dword [esp + 0xc8]
mov eax, dword [eax + 0x5c]
test eax, eax
jle 0x8160f6
mov ecx, dword [esp + 0xc8]
xor edi, edi
mov esi, dword [ecx + 0x64]
test byte [esi + 0xa], 6
jne 0x8160ee
mov ecx, dword [esp + 0xd0]
mov edx, ecx
mov ecx, dword [ecx + 0x50]
mov edx, dword [edx + 0x54]
and ecx, dword [esi + 0x28]
and edx, dword [esi + 0x2c]
or ecx, edx
jne 0x8160ee
push 0x10
push dword [esp + 0x64]
push dword [esi]
push ebx
call fcn.007f0850
add esp, 0x10
mov eax, dword [esp + 0xc8]
or byte [esi + 0xa], 4
mov eax, dword [eax + 0x5c]
inc edi
add esi, 0x30
cmp edi, eax
jl 0x8160b0
mov eax, dword [esp + 0xd0]
mov edi, dword [eax + 0x50]
mov esi, dword [eax + 0x54]
mov ecx, dword [esp + 0xb0]
xor ecx, esp
call fcn.00980459
mov eax, edi
mov edx, esi
add esp, 0xb4
pop esi
pop edi
pop ebx
pop ebp
ret