Function at 0x40ba90
Capabilities:
Reference http user-agent string

Disassembly:
mov ecx, dword [0x99504c]
mov ecx, dword fs:[ecx]
mov ecx, dword [ecx]
cmp esp, dword [ecx + 8]
jbe 0x40c3d7
sub esp, 0x50
cmp dword [0x994f54], 2
je 0x40c3c0
mov eax, dword [esp + 0x54]
test eax, eax
je 0x40c32c
movzx ecx, byte [0x995690]
test cl, cl
je 0x40bb8b
mov ecx, dword [0x99569c]
test ecx, ecx
je 0x40bb39
mov ecx, dword [esp + 0x58]
test ecx, ecx
je 0x40bb12
test eax, 7
jne 0x40baef
mov ecx, 8
jmp 0x40bb17
test eax, 3
jne 0x40bafd
mov ecx, 4
jmp 0x40bb17
test eax, 1
jne 0x40bb0b
mov ecx, 2
jmp 0x40bb17
mov ecx, 1
jmp 0x40bb17
mov ecx, 0x10
mov dword [esp], eax
mov dword [esp + 4], ecx
lea eax, [0x99c258]
mov dword [esp + 8], eax
call fcn.0040c850
mov eax, dword [esp + 0xc]
mov dword [esp + 0x60], eax
add esp, 0x50
ret
movzx ecx, byte [0x995410]
test cl, cl
je 0x40bb8b
mov ecx, dword [0x99504c]
mov ecx, dword fs:[ecx]
mov ecx, dword [ecx]
mov edx, dword [ecx + 0x50]
mov ecx, dword [ecx + 0x54]
cmp dword [0x995414], edx
sete dl
cmp dword [0x995418], ecx
sete cl
and ecx, edx
test cl, cl
je 0x40bb8b
mov ecx, dword [0x99541c]
mov edx, dword [0x995420]
add ecx, 1
mov dword [0x99541c], ecx
adc edx, 0
mov dword [0x995420], edx
mov dword [esp], eax
call fcn.0040c3f0
mov eax, dword [0x99504c]
mov eax, dword fs:[eax]
mov eax, dword [eax]
mov ecx, dword [eax + 0x18]
mov edx, dword [esp + 4]
nop
inc dword [ecx + 0x7c]
mov eax, dword [eax + 0x18]
mov ecx, dword [eax + 0x6c]
test ecx, ecx
jne 0x40c3aa
mov ebx, dword [0x99504c]
mov ebx, dword fs:[ebx]
mov ebx, dword [ebx]
cmp dword [eax + 0x30], ebx
je 0x40c394
mov dword [eax + 0x6c], 1
mov ebx, dword [eax + 0x58]
test ebx, ebx
je 0x40bbde
mov ebx, dword [ebx + 0x30]
jmp 0x40bbe4
mov ebx, dword [0x994fbc]
test ebx, ebx
je 0x40c37e
mov ebp, dword [esp + 0x58]
test ebp, ebp
je 0x40bc02
mov esi, dword [ebp + 4]
test esi, esi
xchg esi, ebx
sete bl
xchg esi, ebx
jmp 0x40bc07
mov esi, 1
mov dword [esp + 0x4c], edx
mov dword [esp + 0x44], eax
mov dword [esp + 0x2c], ebx
xchg esi, eax
mov byte [esp + 0x16], al
xchg esi, eax
mov edi, dword [esp + 0x54]
cmp edi, 0x8000
ja 0x40c03d
xchg esi, eax
test al, al
xchg esi, eax
je 0x40be32
cmp edi, 0x10
jae 0x40be32
mov ecx, dword [ebx + 0xc]
test edi, 7
jne 0x40bc4f
add ecx, 7
and ecx, 0xfffffff8
jmp 0x40bc79
cmp edi, 0xc
jne 0x40bc5c
add ecx, 7
and ecx, 0xfffffff8
jmp 0x40bc79
test edi, 3
jne 0x40bc6c
add ecx, 3
and ecx, 0xfffffffc
jmp 0x40bc79
test edi, 1
jne 0x40bc79
inc ecx
nop
and ecx, 0xfffffffe
lea edx, [ecx + edi]
cmp edx, 0x10
ja 0x40bcce
mov ebp, dword [ebx + 8]
test ebp, ebp
je 0x40bcca
add ecx, ebp
mov dword [ebx + 0xc], edx
inc dword [ebx + 0x10]
mov dword [eax + 0x6c], 0
mov edx, dword [eax + 0x7c]
lea ebx, [edx - 1]
nop
mov ebp, dword [0x99504c]
mov ebp, dword fs:[ebp]
mov ebp, dword [ebp]
mov dword [eax + 0x7c], ebx
cmp edx, 1
jne 0x40bcc2
movzx eax, byte [ebp + 0x65]
test al, al
je 0x40bcc2
mov dword [ebp + 8], 0xfffffade
mov dword [esp + 0x60], ecx
add esp, 0x50
ret
mov ebp, dword [esp + 0x58]
mov edx, dword [ebx + 0x28]
mov ecx, dword [edx + 0x24]
bsf eax, ecx
jne 0x40bcde
mov eax, 0x20
mov ebp, dword [edx + 0x20]
bsf esi, ebp
jne 0x40bceb
mov esi, 0x20
cmp ebp, 1
sbb ebx, ebx
xor ebx, 0xffffffff
not ebx
and eax, ebx
lea ebx, [esi + eax]
cmp ebx, 0x40
jge 0x40bdc5
mov dword [esp + 0x18], edx
mov dword [esp + 0x34], ebp
mov edi, dword [edx + 0x18]
lea ebp, [edi + ebx]
mov edx, dword [edx + 0x1c]
cmp edx, ebp
jbe 0x40bdbd
lea ebx, [edi + ebx + 1]
test ebx, 0x3f
jne 0x40bd3b
cmp edx, ebx
je 0x40bd3b
mov edx, dword [esp + 0x18]
mov edi, dword [esp + 0x54]
xor eax, eax
jmp 0x40bdc7
mov dword [esp + 0x20], ebp
mov dword [esp + 0x28], ebx
mov dword [esp + 0x30], ecx
lea edx, [esi + eax - 0x1f]
mov edi, ecx
mov ecx, edx
shr edi, cl
neg ecx
mov ebp, dword [esp + 0x30]
shl ebp, cl
lea eax, [esi + eax + 1]
mov esi, ecx
mov ecx, eax
mov ebx, dword [esp + 0x30]
shr ebx, cl
mov dword [esp + 0x30], ebx
mov ebx, dword [esp + 0x34]
shr ebx, cl
cmp edx, 0x20
sbb edx, edx
and edi, edx
cmp esi, 0x20
sbb edx, edx
and ebp, edx
cmp eax, 0x20
sbb eax, eax
and ebx, eax
or ebx, ebp
or ebx, edi
mov edx, dword [esp + 0x18]
mov dword [edx + 0x20], ebx
mov ebx, dword [esp + 0x30]
and ebx, eax
mov dword [edx + 0x24], ebx
mov eax, dword [esp + 0x28]
mov dword [edx + 0x18], eax
movzx eax, word [edx + 0x3c]
inc eax
mov word [edx + 0x3c], ax
mov eax, dword [edx + 0x44]
mov ebx, dword [esp + 0x20]
imul eax, ebx
add eax, dword [edx + 0xc]
mov edi, dword [esp + 0x54]
jmp 0x40bdc7
mov edx, dword [esp + 0x18]
mov edi, dword [esp + 0x54]
xor eax, eax
test eax, eax
je 0x40bdcf
xor ecx, ecx
jmp 0x40bdf1
mov eax, dword [esp + 0x2c]
mov dword [esp], eax
mov byte [esp + 4], 5
call fcn.0040b870
mov eax, dword [esp + 8]
mov edx, dword [esp + 0xc]
movzx ecx, byte [esp + 0x10]
mov edi, dword [esp + 0x54]
mov dword [eax], 0
mov dword [eax + 4], 0
mov dword [eax + 8], 0
mov dword [eax + 0xc], 0
mov ebx, dword [esp + 0x2c]
cmp dword [ebx + 0xc], edi
ja 0x40be1c
mov ebp, dword [ebx + 8]
test ebp, ebp
jne 0x40be26
mov ebp, eax
mov dword [ebx + 8], eax
mov dword [ebx + 0xc], edi
jmp 0x40be28
mov ebp, eax
mov eax, 0x10
jmp 0x40c036
cmp edi, 0x3f8
ja 0x40be58
lea ecx, [edi + 7]
shr ecx, 3
cmp ecx, 0x81
jae 0x40c372
lea edx, [0x93ac20]
movzx edx, byte [edx + ecx]
jmp 0x40be7e
lea ecx, [edi - 0x381]
shr ecx, 7
cmp ecx, 0xf9
jae 0x40c366
lea ebp, str._______________________....______0001123333333333444444444455666677777888888888889999999999::::::___________________________________________________________________________AAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
movzx ebp, byte [ebp + ecx]
mov edx, ebp
mov ebp, dword [esp + 0x58]
movzx ecx, dl
cmp ecx, 0x44
jae 0x40c35a
shl edx, 1
xchg esi, ebx
movzx eax, bl
xchg esi, ebx
or edx, eax
movzx eax, dl
lea ebp, [0x93ad60]
movzx ebp, word [ebp + ecx*2]
nop
cmp eax, 0x88
jae 0x40c350
mov byte [esp + 0x14], dl
mov dword [esp + 0x40], ebp
mov eax, dword [ebx + eax*4 + 0x14]
mov ecx, dword [eax + 0x24]
bsf edi, ecx
jne 0x40bec8
mov edi, 0x20
mov edx, dword [eax + 0x20]
bsf ebx, edx
jne 0x40bed5
mov ebx, 0x20
cmp edx, 1
sbb esi, esi
xor esi, 0xffffffff
xchg esi, ebx
not ebx
xchg esi, ebx
and edi, esi
lea esi, [ebx + edi]
cmp esi, 0x40
jge 0x40bfbc
mov dword [esp + 0x18], eax
mov dword [esp + 0x34], edx
mov ebp, dword [eax + 0x18]
lea edx, [ebp + esi]
mov eax, dword [eax + 0x1c]
cmp eax, edx
jbe 0x40bfb4
lea ebp, [ebp + esi + 1]
test ebp, 0x3f
jne 0x40bf2a
cmp eax, ebp
je 0x40bf2a
mov eax, dword [esp + 0x18]
mov ebp, dword [esp + 0x40]
xor edx, edx
jmp 0x40bfbe
mov dword [esp + 0x1c], edx
mov dword [esp + 0x24], ebp
mov dword [esp + 0x30], ecx
lea eax, [ebx + edi - 0x1f]
mov dword [esp + 0x3c], eax
mov esi, ecx
mov ecx, eax
shr esi, cl
neg eax
mov ecx, eax
mov edx, dword [esp + 0x30]
shl edx, cl
lea ebx, [ebx + edi + 1]
mov ecx, ebx
mov edi, dword [esp + 0x34]
shr edi, cl
mov dword [esp + 0x34], edi
mov ebp, dword [esp + 0x30]
shr ebp, cl
mov edi, dword [esp + 0x3c]
cmp edi, 0x20
sbb edi, edi
and esi, edi
cmp eax, 0x20
sbb eax, eax
and edx, eax
cmp ecx, 0x20
sbb eax, eax
and ebp, eax
mov ebx, dword [esp + 0x34]
and ebx, eax
or ebx, edx
or ebx, esi
mov eax, dword [esp + 0x18]
mov dword [eax + 0x20], ebx
mov dword [eax + 0x24], ebp
mov edx, dword [esp + 0x24]
mov dword [eax + 0x18], edx
movzx edx, word [eax + 0x3c]
inc edx
mov word [eax + 0x3c], dx
mov edx, dword [eax + 0x44]
mov ebx, dword [esp + 0x1c]
imul edx, ebx
add edx, dword [eax + 0xc]
mov ebp, dword [esp + 0x40]
jmp 0x40bfbe
mov eax, dword [esp + 0x18]
mov ebp, dword [esp + 0x40]
xor edx, edx
test edx, edx
je 0x40bfc6
xor ecx, ecx
jmp 0x40bfec
mov eax, dword [esp + 0x2c]
mov dword [esp], eax
movzx ecx, byte [esp + 0x14]
mov byte [esp + 4], cl
call fcn.0040b870
mov edx, dword [esp + 8]
mov eax, dword [esp + 0xc]
movzx ecx, byte [esp + 0x10]
mov ebp, dword [esp + 0x40]
movzx ebx, byte [esp + 0x5c]
test bl, bl
je 0x40c026
movzx ebx, byte [eax + 0x40]
test bl, bl
je 0x40c026
mov dword [esp + 0x48], edx
mov byte [esp + 0x15], cl
mov dword [esp + 0x38], eax
mov dword [esp], edx
mov dword [esp + 4], ebp
call fcn.00469620
mov eax, dword [esp + 0x38]
movzx ecx, byte [esp + 0x15]
mov edx, dword [esp + 0x48]
mov ebp, dword [esp + 0x40]
mov ebx, dword [esp + 0x2c]
mov edi, dword [esp + 0x54]
mov ebp, edx
mov edx, eax
mov eax, dword [esp + 0x40]
xor esi, esi
jmp 0x40c0d8
mov dword [esp], ebx
mov dword [esp + 4], edi
xchg esi, eax
mov byte [esp + 8], al
xchg esi, eax
call fcn.004140c0
mov eax, dword [esp + 0xc]
mov dword [eax + 0x18], 1
mov word [eax + 0x3c], 1
mov ecx, dword [eax + 0xc]
mov edx, dword [eax + 0x44]
movzx ebx, byte [esp + 0x5c]
test bl, bl
je 0x40c0b6
movzx ebx, byte [eax + 0x40]
test bl, bl
je 0x40c0ad
movzx ebx, byte [esp + 0x16]
test bl, bl
jne 0x40c0a9
mov dword [esp + 0x18], eax
mov dword [esp + 0x40], edx
mov dword [esp + 0x48], ecx
mov dword [esp], ecx
mov dword [esp + 4], edx
call fcn.00469620
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x48]
mov edx, dword [esp + 0x40]
movzx ebx, byte [esp + 0x16]
mov ebp, ebx
jmp 0x40c0bd
movzx ebp, byte [esp + 0x16]
xor ebx, ebx
jmp 0x40c0bd
movzx ebp, byte [esp + 0x16]
xor ebx, ebx
mov edi, dword [esp + 0x54]
mov esi, ebx
mov ebp, ecx
mov ebx, dword [esp + 0x2c]
mov ecx, 1
mov ebx, edx
mov edx, eax
mov eax, ebx
mov ebx, dword [esp + 0x2c]
mov dword [esp + 0x48], ebp
mov dword [esp + 0x40], eax
mov byte [esp + 0x15], cl
xchg esi, eax
mov byte [esp + 0x17], al
xchg esi, eax
mov dword [esp + 0x18], edx
movzx ecx, byte [esp + 0x16]
test cl, cl
jne 0x40c13f
mov dword [esp], ebp
mov dword [esp + 4], eax
mov dword [esp + 8], edi
mov edx, dword [esp + 0x58]
mov dword [esp + 0xc], edx
call fcn.00413270
mov eax, dword [esp + 0x58]
mov ecx, dword [eax]
mov edx, dword [esp + 0x54]
cmp edx, ecx
jbe 0x40c133
mov ebx, dword [eax + 4]
test ebx, ebx
je 0x40c12d
mov ebp, edx
sub edx, ecx
lea ecx, [edx + ebx]
jmp 0x40c138
mov ebp, edx
xor ecx, ecx
jmp 0x40c138
mov ecx, dword [eax + 4]
mov ebp, edx
mov edx, dword [esp + 0x2c]
add dword [edx + 4], ecx
call fcn.00468ae0
mov eax, dword [esp + 0x18]
mov ecx, dword [eax + 0x18]
mov dword [eax + 0x5c], ecx
mov ecx, dword [0x994f54]
test ecx, ecx
je 0x40c170
mov ecx, dword [esp + 0x48]
mov dword [esp], eax
mov dword [esp + 4], ecx
mov eax, dword [esp + 0x40]
mov dword [esp + 8], eax
call fcn.00420160
mov eax, dword [0x93725c]
test eax, eax
jle 0x40c1b5
cmp eax, 1
je 0x40c193
mov eax, dword [esp + 0x2c]
mov ecx, dword [eax]
mov edx, dword [esp + 0x40]
cmp edx, ecx
jae 0x40c197
sub ecx, edx
mov dword [eax], ecx
jmp 0x40c1b9
mov edx, dword [esp + 0x40]
mov eax, dword [esp + 0x44]
mov dword [esp], eax
mov ecx, dword [esp + 0x48]
mov dword [esp + 4], ecx
mov dword [esp + 8], edx
call fcn.0040c5e0
mov edx, dword [esp + 0x40]
jmp 0x40c1b9
mov edx, dword [esp + 0x40]
mov eax, dword [esp + 0x44]
mov dword [eax + 0x6c], 0
mov ecx, dword [eax + 0x7c]
lea ebx, [ecx - 1]
nop
mov ebp, dword [0x99504c]
mov ebp, dword fs:[ebp]
mov ebp, dword [ebp]
mov dword [eax + 0x7c], ebx
cmp ecx, 1
jne 0x40c1ef
movzx eax, byte [ebp + 0x65]
test al, al
je 0x40c1ef
mov dword [ebp + 8], 0xfffffade
movzx eax, byte [esp + 0x17]
test al, al
je 0x40c219
movzx eax, byte [esp + 0x16]
test al, al
je 0x40c33a
mov dword [esp], edx
mov eax, dword [esp + 0x48]
mov dword [esp + 4], eax
call fcn.0040c470
mov edx, dword [esp + 0x40]
movzx eax, byte [0x995690]
test al, al
je 0x40c29b
mov eax, dword [0x995694]
test eax, eax
je 0x40c24a
mov eax, dword [esp + 0x48]
mov dword [esp], eax
mov dword [esp + 4], edx
mov ecx, dword [esp + 0x58]
mov dword [esp + 8], ecx
call fcn.004313c0
mov edx, dword [esp + 0x40]
movzx eax, byte [0x995410]
test al, al
je 0x40c29b
mov eax, dword [0x995418]
mov ecx, dword [0x99504c]
mov ecx, dword fs:[ecx]
mov ecx, dword [ecx]
mov ebx, dword [ecx + 0x50]
cmp dword [0x995414], ebx
sete bl
cmp dword [ecx + 0x54], eax
sete al
and ebx, eax
test bl, bl
je 0x40c29b
mov eax, dword [0x995424]
mov ecx, dword [0x995428]
add eax, edx
mov dword [0x995424], eax
adc ecx, 0
mov dword [0x995428], ecx
mov eax, dword [esp + 0x4c]
test eax, eax
je 0x40c2c6
mov ecx, dword [eax + 0xf4]
mov ebx, dword [eax + 0xf8]
mov ebp, dword [esp + 0x54]
sub edx, ebp
sub ecx, edx
mov dword [eax + 0xf4], ecx
sbb ebx, 0
mov dword [eax + 0xf8], ebx
movzx eax, byte [esp + 0x15]
test al, al
je 0x40c320
mov dword [esp], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp + 0xc], 0
call fcn.00418640
movzx eax, byte [esp + 0x10]
test al, al
je 0x40c320
mov dword [esp], 0
mov dword [esp + 8], 0
mov dword [esp + 4], 0
mov dword [esp + 0xc], 0
call fcn.004187b0
mov eax, dword [esp + 0x48]
mov dword [esp + 0x60], eax
add esp, 0x50
ret
lea eax, [0x994f00]
mov dword [esp + 0x60], eax
add esp, 0x50
ret
lea eax, [0x74da6b]
mov dword [esp], eax
mov dword [esp + 4], 0x31
call fcn.00439230
mov ecx, 0x88
call fcn.00468ed0
mov eax, ecx
mov ecx, 0x44
call fcn.00468ed0
mov eax, ecx
mov ecx, 0xf9
call fcn.00468ee0
mov eax, ecx
mov ecx, 0x81
call fcn.00468ee0
lea eax, [0x74e775]
mov dword [esp], eax
mov dword [esp + 4], 0x34
call fcn.00439230
lea eax, [0x73fec6]
mov dword [esp], eax
mov dword [esp + 4], 0x14
call fcn.00439230
lea eax, [0x73db2e]
mov dword [esp], eax
mov dword [esp + 4], 0xf
call fcn.00439230
lea eax, [0x74dff9]
mov dword [esp], eax
mov dword [esp + 4], 0x32
call fcn.00439230
nop
call fcn.00467a60
jmp fcn.0040ba90