Function at 0x408100
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push 0xffffffffffffffff
push 0x417ee6
mov eax, dword fs:[0]
push eax
sub esp, 0x9c
push ebx
push esi
push edi
mov eax, dword [0x42a018]
xor eax, ebp
push eax
lea eax, [ebp - 0xc]
mov dword fs:[0], eax
mov esi, ecx
xor ebx, ebx
mov dword [ebp - 4], ebx
mov edi, dword [ebp + 8]
cmp edi, ebx
je 0x4089bb
mov dword [ebp - 0x44], ebx
mov dword [ebp - 0x6c], ebx
mov dword [ebp - 0x18], ebx
mov byte [ebp - 4], 1
mov eax, dword [edi]
mov edx, dword [eax + 0x34]
lea ecx, [ebp - 0x18]
push ecx
push edi
call edx
test eax, eax
jne 0x40816d
mov eax, dword [ebp - 0x18]
cmp eax, ebx
je 0x40816d
mov ecx, dword [eax]
lea edx, [ebp - 0x44]
push edx
push eax
mov eax, dword [ecx + 0x14]
call eax
mov dword [ebp - 0x1c], ebx
mov byte [ebp - 4], 2
mov ecx, dword [edi]
mov eax, dword [ecx + 0x30]
lea edx, [ebp - 0x1c]
push edx
push edi
call eax
test eax, eax
jne 0x408197
mov eax, dword [ebp - 0x1c]
cmp eax, ebx
je 0x408197
mov ecx, dword [eax]
lea edx, [ebp - 0x6c]
push edx
push eax
mov eax, dword [ecx + 0x14]
call eax
mov dword [ebp - 0x10], ebx
mov dword [ebp - 0x14], ebx
mov byte [ebp - 4], 4
cmp byte [esi + 0x862], 1
jne 0x408256
mov eax, dword [esi + 0x668]
mov ecx, dword [edi]
lea edx, [ebp - 0x14]
push edx
mov edx, dword [ebp - 0x44]
push eax
mov eax, dword [ebp - 0x6c]
push eax
mov eax, dword [ecx + 0x3c]
push edx
push edi
call eax
test eax, eax
jne 0x40823f
mov eax, dword [ebp - 0x14]
cmp eax, ebx
je 0x40823f
mov ecx, dword [edi]
lea edx, [ebp - 0x10]
push edx
push eax
mov eax, dword [ecx + 0x44]
push 7
push edi
call eax
test eax, eax
jne 0x4081f0
cmp dword [ebp - 0x10], ebx
jne 0x40827e
mov esi, dword [esi + 0x668]
mov ecx, dword [edi]
mov eax, dword [ecx + 0x2c]
lea edx, [ebp - 0x10]
push edx
push esi
push 7
push edi
call eax
test eax, eax
mov eax, dword [ebp - 0x10]
jne 0x408210
cmp eax, ebx
jne 0x40827e
mov byte [ebp - 4], 3
mov ecx, dword [ebp - 0x14]
cmp ecx, ebx
je 0x408226
mov edx, dword [ecx]
mov eax, dword [edx + 8]
push ecx
call eax
mov eax, dword [ebp - 0x10]
cmp eax, ebx
mov byte [ebp - 4], 2
je 0x408986
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
jmp 0x408986
mov esi, dword [esi + 0x668]
mov edx, dword [edi]
mov ecx, dword [edx + 0x2c]
lea eax, [ebp - 0x10]
push eax
push esi
push 7
push edi
call ecx
jmp 0x408205
mov esi, dword [esi + 0x668]
mov edx, dword [edi]
mov ecx, dword [edx + 0x2c]
lea eax, [ebp - 0x10]
push eax
push esi
push 7
push edi
call ecx
test eax, eax
mov eax, dword [ebp - 0x10]
jne 0x408960
cmp eax, ebx
je 0x408960
push 0x2f8
call dword [sym.imp.opennurbs.dll_public:_static_void____cdecl_ON_Object::operator_new_unsigned_int_]
mov ebx, eax
add esp, 4
mov dword [ebp - 0x24], ebx
test ebx, ebx
mov byte [ebp - 4], 5
je 0x4082a9
mov ecx, ebx
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_Mesh::constructor_void_]
mov dword [ebx], vtable.ON_Mesh.0
jmp 0x4082ab
xor ebx, ebx
test ebx, ebx
mov byte [ebp - 4], 4
jne 0x4082fa
mov byte [ebp - 4], 3
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x4082c6
mov edx, dword [eax]
push eax
mov eax, dword [edx + 8]
call eax
mov byte [ebp - 4], 2
mov eax, dword [ebp - 0x10]
test eax, eax
je 0x4082d9
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x1c]
test eax, eax
je 0x4082ec
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x18]
test eax, eax
jmp 0x4089a2
mov eax, dword [ebp - 0x10]
mov edx, dword [eax]
mov edx, dword [edx + 0x10]
lea ecx, [ebp - 0x20]
push ecx
push eax
call edx
mov esi, 1
cmp dword [ebp - 0x20], esi
jl 0x408586
mov edi, dword [sym.imp.opennurbs.dll_public:_class_ON_2fPoint____thiscall_ON_SimpleArray_class_ON_2fPoint_::AppendNew_void_]
lea ecx, [ecx]
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x94]
push edx
push esi
push eax
mov eax, dword [ecx + 0x14]
call eax
test eax, eax
jne 0x40857a
lea ecx, [ebx + 0xc]
call dword [sym.imp.opennurbs.dll_public:_class_ON_3fPoint____thiscall_ON_SimpleArray_class_ON_3fPoint_::AppendNew_void_]
fld qword [ebp - 0x94]
cmp byte [ebp + 0xc], 1
fstp dword [eax]
fld qword [ebp - 0x8c]
fstp dword [eax + 4]
fld qword [ebp - 0x84]
fstp dword [eax + 8]
jne 0x408475
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x4083da
fld qword [ebp - 0x84]
mov ecx, dword [eax]
lea edx, [ebp - 0x2c]
push edx
lea edx, [ebp - 0x34]
push edx
lea edx, [ebp - 0x3c]
push edx
sub esp, 0x18
fstp qword [esp + 0x10]
fld qword [ebp - 0x8c]
fstp qword [esp + 8]
fld qword [ebp - 0x94]
fstp qword [esp]
push eax
mov eax, dword [ecx + 0xc]
call eax
fld qword [ebp - 0x84]
mov eax, dword [ebp - 0x14]
mov ecx, dword [eax]
lea edx, [ebp - 0x2c]
push edx
lea edx, [ebp - 0x34]
push edx
lea edx, [ebp - 0x3c]
push edx
sub esp, 0x18
fstp qword [esp + 0x10]
fld qword [ebp - 0x8c]
fstp qword [esp + 8]
fld qword [ebp - 0x94]
fstp qword [esp]
push eax
mov eax, dword [ecx + 0x10]
call eax
mov dword [ebp - 0x40], 0
mov byte [ebp - 4], 6
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x40]
push edx
push esi
push eax
mov eax, dword [ecx + 0x38]
call eax
test eax, eax
jne 0x408414
mov eax, dword [ebp - 0x40]
test eax, eax
je 0x408414
mov ecx, dword [eax]
lea edx, [ebp - 0x2c]
push edx
lea edx, [ebp - 0x34]
push edx
lea edx, [ebp - 0x3c]
push edx
push eax
mov eax, dword [ecx + 0xc]
call eax
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x3c]
push edx
push esi
push eax
mov eax, dword [ecx + 0x1c]
call eax
test eax, eax
jne 0x408469
lea ecx, [ebx + 0xe8]
call edi
fld qword [ebp - 0x2c]
fcom qword [0x41d718]
mov ecx, eax
fnstsw ax
test ah, 0x44
jnp 0x40845c
fdivr qword [ebp - 0x3c]
fstp dword [ecx]
fld qword [ebp - 0x34]
fdiv qword [ebp - 0x2c]
mov byte [ebp - 4], 4
fstp dword [ecx + 4]
mov eax, dword [ebp - 0x40]
jmp 0x4084fe
fstp st(0)
fld qword [ebp - 0x3c]
fstp dword [ecx]
fld qword [ebp - 0x34]
fstp dword [ecx + 4]
mov byte [ebp - 4], 4
mov eax, dword [ebp - 0x40]
jmp 0x4084fe
mov dword [ebp - 0x24], 0
mov byte [ebp - 4], 7
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x24]
push edx
push esi
push eax
mov eax, dword [ecx + 0x3c]
call eax
test eax, eax
jne 0x4084af
mov eax, dword [ebp - 0x24]
test eax, eax
je 0x4084af
mov ecx, dword [eax]
lea edx, [ebp - 0x2c]
push edx
lea edx, [ebp - 0x34]
push edx
lea edx, [ebp - 0x3c]
push edx
push eax
mov eax, dword [ecx + 0xc]
call eax
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x3c]
push edx
push esi
push eax
mov eax, dword [ecx + 0x20]
call eax
test eax, eax
jne 0x4084f7
lea ecx, [ebx + 0xe8]
call edi
fld qword [ebp - 0x2c]
fcom qword [0x41d718]
mov ecx, eax
fnstsw ax
test ah, 0x44
jnp 0x4084ea
fdivr qword [ebp - 0x3c]
fstp dword [ecx]
fld qword [ebp - 0x34]
fdiv qword [ebp - 0x2c]
jmp 0x4084f4
fstp st(0)
fld qword [ebp - 0x3c]
fstp dword [ecx]
fld qword [ebp - 0x34]
fstp dword [ecx + 4]
mov byte [ebp - 4], 4
mov eax, dword [ebp - 0x24]
test eax, eax
je 0x40850a
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
lea ecx, [ebp - 0xa4]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_3fVector::constructor_void_]
mov eax, dword [ebp - 0x10]
mov ecx, dword [eax]
lea edx, [ebp - 0x94]
push edx
push esi
push eax
mov eax, dword [ecx + 0x24]
call eax
test eax, eax
jne 0x40857a
fld qword [ebp - 0x94]
lea ecx, [ebp - 0xa4]
fstp dword [ebp - 0xa4]
fld qword [ebp - 0x8c]
fstp dword [ebp - 0xa0]
fld qword [ebp - 0x84]
fstp dword [ebp - 0x9c]
call dword [sym.imp.opennurbs.dll_public:_double___thiscall_ON_3fVector::Length_void_const]
fcomp qword [0x41d718]
fnstsw ax
test ah, 0x41
jne 0x40857a
lea ecx, [ebp - 0xa4]
push ecx
lea ecx, [ebx + 0x2c]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_SimpleArray_class_ON_3fVector_::Append_class_ON_3fVector_const__]
add esi, 1
cmp esi, dword [ebp - 0x20]
jle 0x408320
mov eax, dword [ebp - 0x10]
mov edx, dword [eax]
mov edx, dword [edx + 0xc]
lea ecx, [ebp - 0x20]
push ecx
push eax
call edx
mov eax, 1
cmp dword [ebp - 0x20], eax
mov dword [ebp + 0xc], eax
jl 0x40868a
mov ecx, dword [ebp - 0x10]
mov edx, dword [ecx]
lea edi, [ebp - 0x68]
push edi
push eax
mov eax, dword [edx + 0x2c]
push ecx
xor esi, esi
call eax
test eax, eax
jne 0x408678
mov eax, dword [ebp - 0x68]
lea ecx, [eax - 3]
cmp ecx, 1
ja 0x408678
mov dword [ebp - 0x70], esi
mov dword [ebp - 0x74], esi
mov dword [ebp - 0x78], esi
mov dword [ebp - 0x7c], esi
mov esi, 1
cmp eax, esi
jl 0x40861b
lea edi, [ebp - 0x7c]
mov eax, dword [ebp - 0x10]
mov edx, dword [eax]
mov edx, dword [edx + 0x30]
lea ecx, [ebp - 0x98]
push ecx
mov ecx, dword [ebp + 0xc]
push esi
push ecx
push eax
call edx
mov eax, dword [ebp - 0x98]
cdq
xor eax, edx
sub eax, edx
sub eax, 1
mov dword [edi], eax
mov eax, dword [ebp - 0x68]
add esi, 1
add edi, 4
cmp esi, eax
jle 0x4085e7
cmp eax, 3
jne 0x408626
mov eax, dword [ebp - 0x74]
mov dword [ebp - 0x70], eax
mov edi, dword [sym.imp.opennurbs.dll_public:_class_ON_3fPoint____thiscall_ON_SimpleArray_class_ON_3fPoint_::Array_void_]
lea esi, [ebx + 0xc]
mov ecx, esi
call edi
push eax
mov ecx, esi
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_3fPoint_::Count_void_const]
push eax
lea ecx, [ebp - 0x7c]
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_MeshFace::IsValid_int__class_ON_3fPoint_const__const]
cmp al, 1
jne 0x408650
lea ecx, [ebp - 0x7c]
push ecx
jmp 0x40866f
mov ecx, esi
call edi
push eax
mov ecx, esi
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_3fPoint_::Count_void_const]
push eax
lea ecx, [ebp - 0x7c]
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_MeshFace::Repair_int__class_ON_3fPoint_const__]
cmp al, 1
jne 0x408678
lea edx, [ebp - 0x7c]
push edx
lea ecx, [ebx + 0x1c]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_SimpleArray_class_ON_MeshFace_::Append_class_ON_MeshFace_const__]
mov eax, dword [ebp + 0xc]
add eax, 1
cmp eax, dword [ebp - 0x20]
mov dword [ebp + 0xc], eax
jle 0x4085a6
fld1
mov esi, dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_Interval::constructor_double__double_]
sub esp, 0x10
fstp qword [esp + 8]
fldz
lea ecx, [ebp - 0x64]
fstp qword [esp]
call esi
mov byte [ebp - 4], 8
fld1
sub esp, 0x10
fstp qword [esp + 8]
fldz
lea ecx, [ebp - 0x54]
fstp qword [esp]
call esi
fld qword [ebp + 0x10]
mov byte [ebp - 4], 9
fcom qword [0x41d748]
mov esi, dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_Interval::Set_double__double_]
fnstsw ax
test ah, 0x44
jnp 0x4086e7
sub esp, 0x10
fstp qword [esp + 8]
lea ecx, [ebp - 0x64]
fldz
fstp qword [esp]
call esi
jmp 0x4086e9
fstp st(0)
fld qword [ebp + 0x18]
fcom qword [0x41d748]
fnstsw ax
test ah, 0x44
jnp 0x40870c
sub esp, 0x10
fstp qword [esp + 8]
lea ecx, [ebp - 0x54]
fldz
fstp qword [esp]
call esi
jmp 0x40870e
fstp st(0)
mov eax, dword [ebp - 0x64]
mov dword [ebx + 0x148], eax
mov ecx, dword [ebp - 0x60]
mov dword [ebx + 0x14c], ecx
mov edx, dword [ebp - 0x5c]
mov dword [ebx + 0x150], edx
mov eax, dword [ebp - 0x58]
mov dword [ebx + 0x154], eax
mov ecx, dword [ebp - 0x54]
mov dword [ebx + 0x158], ecx
mov edx, dword [ebp - 0x50]
mov dword [ebx + 0x15c], edx
mov eax, dword [ebp - 0x4c]
mov dword [ebx + 0x160], eax
mov ecx, dword [ebp - 0x48]
mov dword [ebx + 0x164], ecx
mov ecx, ebx
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_Mesh::HasTextureCoordinates_void_const]
test al, al
je 0x40882b
mov ecx, ebx
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_Mesh::HasSurfaceParameters_void_const]
test al, al
jne 0x40882b
mov edx, dword [ebp - 0x64]
mov dword [ebx + 0x118], edx
mov eax, dword [ebp - 0x60]
mov dword [ebx + 0x11c], eax
mov ecx, dword [ebp - 0x5c]
mov dword [ebx + 0x120], ecx
mov edx, dword [ebp - 0x58]
mov dword [ebx + 0x124], edx
mov eax, dword [ebp - 0x54]
mov dword [ebx + 0x128], eax
mov ecx, dword [ebp - 0x50]
mov dword [ebx + 0x12c], ecx
mov edx, dword [ebp - 0x4c]
mov dword [ebx + 0x130], edx
mov eax, dword [ebp - 0x48]
lea edi, [ebx + 0xe8]
mov ecx, edi
mov dword [ebx + 0x134], eax
lea esi, [ebx + 0x108]
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_2fPoint_::Count_void_const]
push eax
mov ecx, esi
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_SimpleArray_class_ON_2dPoint_::Reserve_int_]
mov ecx, edi
xor esi, esi
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_2fPoint_::Count_void_const]
test eax, eax
jle 0x408822
lea esp, [esp]
push esi
mov ecx, edi
call dword [sym.imp.opennurbs.dll_public:_class_ON_2fPoint____thiscall_ON_SimpleArray_class_ON_2fPoint_::operator___int_]
push eax
lea ecx, [ebp - 0xa8]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_2dPoint::constructor_class_ON_2fPoint_const__]
push eax
lea ecx, [ebx + 0x108]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_SimpleArray_class_ON_2dPoint_::Append_class_ON_2dPoint_const__]
mov ecx, edi
add esi, 1
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_2fPoint_::Count_void_const]
cmp esi, eax
jl 0x4087f0
lea ecx, [ebx + 0x50]
call dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_MappingTag::SetDefaultSurfaceParameterMappingTag_void_]
lea ecx, [ebx + 0x1c]
call dword [sym.imp.opennurbs.dll_public:_int___thiscall_ON_SimpleArray_class_ON_MeshFace_::Count_void_const]
test eax, eax
mov ecx, ebx
jne 0x4088c2
mov edx, dword [ebx]
mov eax, dword [edx + 8]
push 1
call eax
mov byte [ebp - 4], 8
mov esi, dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_Interval::destructor_void_]
lea ecx, [ebp - 0x54]
call esi
lea ecx, [ebp - 0x64]
mov byte [ebp - 4], 4
call esi
mov byte [ebp - 4], 3
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x408872
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 2
mov eax, dword [ebp - 0x10]
test eax, eax
je 0x408885
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x1c]
test eax, eax
je 0x408898
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x4088ab
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp + 8]
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
jmp 0x4089bb
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_Mesh::HasVertexNormals_void_const]
test al, al
jne 0x4088d4
mov ecx, ebx
call dword [sym.imp.opennurbs.dll_public:_bool___thiscall_ON_Mesh::ComputeVertexNormals_void_]
mov byte [ebp - 4], 8
mov esi, dword [sym.imp.opennurbs.dll_public:_void___thiscall_ON_Interval::destructor_void_]
lea ecx, [ebp - 0x54]
call esi
lea ecx, [ebp - 0x64]
mov byte [ebp - 4], 4
call esi
mov byte [ebp - 4], 3
mov eax, dword [ebp - 0x14]
test eax, eax
je 0x4088ff
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 2
mov eax, dword [ebp - 0x10]
test eax, eax
je 0x408912
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x1c]
test eax, eax
je 0x408925
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x18]
test eax, eax
je 0x408938
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov dword [ebp - 4], 0xffffffff
mov eax, dword [ebp + 8]
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov eax, ebx
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x18
mov byte [ebp - 4], 3
mov ecx, dword [ebp - 0x14]
cmp ecx, ebx
je 0x408976
mov eax, dword [ecx]
push ecx
mov ecx, dword [eax + 8]
call ecx
mov eax, dword [ebp - 0x10]
cmp eax, ebx
mov byte [ebp - 4], 2
je 0x408986
mov edx, dword [eax]
push eax
mov eax, dword [edx + 8]
call eax
mov byte [ebp - 4], 1
mov eax, dword [ebp - 0x1c]
cmp eax, ebx
je 0x408999
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov byte [ebp - 4], 0
mov eax, dword [ebp - 0x18]
cmp eax, ebx
je 0x4089ac
mov ecx, dword [eax]
mov edx, dword [ecx + 8]
push eax
call edx
mov dword [ebp - 4], 0xffffffff
mov eax, dword [edi]
mov ecx, dword [eax + 8]
push edi
call ecx
xor eax, eax
mov ecx, dword [ebp - 0xc]
mov dword fs:[0], ecx
pop ecx
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 0x18