// File: /workspace/github_cpp_makefile_star2_O2/graphitemaster[P]smbf/smbf.cpp
// Function: obj::load(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, int&, int&)
bool obj::load(const u::string &file, int &before, int &after) {
    u::file fp = u::fopen(file, "r");
    if (!fp)
        return false;

    // Processed vertices, normals and coordinates from the OBJ file
    u::vector<m::vec3> vertices;
    u::vector<m::vec3> normals;
    u::vector<m::vec3> coordinates;
    u::vector<m::vec3> tangents;
    u::vector<float> bitangents;

    // Unique vertices are stored in a map keyed by face.
    u::map<face, size_t> uniques;

    size_t count = 0;
    size_t group = 0;
    while (auto get = u::getline(fp)) {
        auto &line = *get;
        // Skip whitespace
        while (line.size() && strchr(" \t", line[0]))
            line.erase(line.begin());
        // Skip comments
        if (strchr("#$", line[0]))
            continue;
        // Skip empty lines
        if (line.empty())
            continue;

        // Process the individual lines
        float x = 0.0f;
        float y = 0.0f;
        float z = 0.0f;
        if (u::sscanf(line, "v %f %f %f", &x, &y, &z) == 3) {
            // v float float float
            vertices.push_back({x, y, z * -1.0f});
        } else if (u::sscanf(line, "vn %f %f %f", &x, &y, &z) == 3) {
            // vn float float float
            normals.push_back({x * -1.0f, y * -1.0f, z});
        } else if (u::sscanf(line, "vt %f %f", &x, &y) == 2) {
            // vt float float
            coordinates.push_back({x, 1.0f - y, 0.0f});
        } else if (line[0] == 'g') {
            group++;
        } else if (line[0] == 'f' && group == 0) { // Only process the first group faces
            u::vector<size_t> v;
            u::vector<size_t> n;
            u::vector<size_t> t;

            // Note: 1 to skip "f"
            auto contents = u::split(line);
            for (size_t i = 1; i < contents.size(); i++) {
                int vi = 0;
                int ni = 0;
                int ti = 0;
                if (u::sscanf(contents[i], "%i/%i/%i", &vi, &ti, &ni) == 3) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    t.push_back(ti < 0 ? t.size() + ti : ti - 1);
                    n.push_back(ni < 0 ? n.size() + ni : ni - 1);
                } else if (u::sscanf(contents[i], "%i//%i", &vi, &ni) == 2) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    n.push_back(ni < 0 ? n.size() + ni : ni - 1);
                } else if (u::sscanf(contents[i], "%i/%i", &vi, &ti) == 2) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                    t.push_back(ti < 0 ? t.size() + ti : ti - 1);
                } else if (u::sscanf(contents[i], "%i", &vi) == 1) {
                    v.push_back(vi < 0 ? v.size() + vi : vi - 1);
                }
            }

            // Triangulate the mesh
            for (size_t i = 1; i < v.size() - 1; ++i) {
                auto index = m_indices.size();
                m_indices.resize(index + 3);
                auto triangulate = [&v, &n, &t, &uniques, &count](size_t index, size_t &out) {
                    face triangle;
                    triangle.vertex = v[index];
                    if (n.size()) triangle.normal = n[index];
                    if (t.size()) triangle.coordinate = t[index];
                    // Only insert in the map if it doesn't exist
                    if (uniques.find(triangle) == uniques.end())
                        uniques[triangle] = count++;
                    out = uniques[triangle];
                };
                triangulate(0,     m_indices[index + 0]);
                triangulate(i + 0, m_indices[index + 1]);
                triangulate(i + 1, m_indices[index + 2]);
            }
        }
    }

    // Construct the model, indices are already generated
    m_positions.resize(count);
    m_normals.resize(count);
    m_coordinates.resize(count);
    for (auto &it : uniques) {
        const auto &first = it.first;
        const auto &second = it.second;
        m_positions[second] = vertices[first.vertex];
        if (normals.size())
            m_normals[second] = normals[first.normal];
        if (coordinates.size())
            m_coordinates[second] = coordinates[first.coordinate];
    }

    // Optimize the indices
    vertexCache cache;
    vertexCacheOptimizer vco;
    vco.optimize(m_indices);

    // Change winding order
    for (size_t i = 0; i < m_indices.size(); i += 3)
        u::swap(m_indices[i], m_indices[i + 2]);

    // Calculate tangents
    m_tangents.resize(count);
    m_bitangents.resize(count);
    createTangents(m_positions, m_coordinates, m_normals, m_indices, m_tangents, m_bitangents);

    before = cache.getCacheMissCount(m_indices);
    after = vco.getCacheMissCount();

    return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x4e8, %rsp            # imm = 0x4E8
movq %rcx, %r14
movq %rdx, %r15
movq %rdi, %rbp
leaq 0x3305(%rip), %rdx      # 0x6120
leaq 0xc0(%rsp), %rbx
movq %rbx, %rdi
callq 0x239c
movq (%rbx), %rax
testq %rax, %rax
je 0x3bc1
movq %r15, 0x118(%rsp)
movq %r14, 0x120(%rsp)
movq %rax, 0x128(%rsp)
xorps %xmm0, %xmm0
leaq 0x140(%rsp), %rax
andq $0x0, 0x10(%rax)
leaq 0x100(%rsp), %rcx
andq $0x0, 0x10(%rcx)
movaps %xmm0, (%rax)
movaps %xmm0, (%rcx)
leaq 0xe0(%rsp), %rax
movaps %xmm0, (%rax)
andq $0x0, 0x10(%rax)
movaps %xmm0, 0x180(%rsp)
andq $0x0, 0x190(%rsp)
movaps %xmm0, 0x160(%rsp)
andq $0x0, 0x170(%rsp)
leaq 0x1e8(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
leaq 0x58(%rsp), %rcx
andq $0x0, (%rcx)
movups %xmm0, -0x8(%rax)
leaq 0x338(%rsp), %r13
leaq 0x40(%rsp), %r14
movabsq $0x100000201, %r12      # imm = 0x100000201
movabsq $0x1800000000, %r15     # imm = 0x1800000000
movq $0x0, (%rsp)
movq %rbp, 0xb8(%rsp)
movq %r13, %rbx
movq %r13, %rdi
leaq 0xc0(%rsp), %rsi
callq 0x23d9
movb 0x338(%rsp), %al
movb %al, 0x98(%rsp)
cmpb $0x1, %al
jne 0x3089
movq 0x340(%rsp), %rsi
movq 0x348(%rsp), %rax
movzbl (%rsi), %edx
movl %edx, %ecx
testq %rax, %rax
je 0x2f5e
cmpl $0x24, %edx
ja 0x2f83
btq %rcx, %r12
jae 0x2f79
leaq 0x340(%rsp), %rdi
callq 0x2170
jmp 0x2f2a
cmpl $0x24, %edx
ja 0x2f83
movabsq $0x1800000001, %rdx     # imm = 0x1800000001
btq %rcx, %rdx
jb 0x3089
jmp 0x2f83
btq %rcx, %r15
jb 0x3089
testq %rax, %rax
je 0x3089
andl $0x0, 0x10(%rsp)
andl $0x0, 0x40(%rsp)
andl $0x0, 0x54(%rsp)
leaq 0x340(%rsp), %rdi
leaq 0x3178(%rip), %rsi      # 0x6122
leaq 0x54(%rsp), %r13
leaq 0x10(%rsp), %r15
movq %r15, %rdx
movq %r14, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x461d
cmpl $0x3, %eax
jne 0x3014
movss 0x10(%rsp), %xmm0
movss 0x40(%rsp), %xmm1
movss 0x54(%rsp), %xmm2
xorps 0x303e(%rip), %xmm2     # 0x6020
movss %xmm0, 0x1f0(%rsp)
movss %xmm1, 0x1f4(%rsp)
movss %xmm2, 0x1f8(%rsp)
leaq 0x140(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x5b4a
jmp 0x307a
leaq 0x340(%rsp), %rdi
leaq 0x310a(%rip), %rsi      # 0x612d
movq %r15, %rdx
movq %r14, %rcx
movq %r13, %r8
xorl %eax, %eax
callq 0x461d
cmpl $0x3, %eax
jne 0x30a7
movss 0x54(%rsp), %xmm0
movss 0x40(%rsp), %xmm1
movss 0x10(%rsp), %xmm2
unpcklps %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
xorps 0x2fcc(%rip), %xmm2     # 0x6020
movlps %xmm2, 0x1f0(%rsp)
movss %xmm0, 0x1f8(%rsp)
leaq 0x100(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x5b4a
leaq 0x40(%rsp), %r14
movabsq $0x1800000000, %r15     # imm = 0x1800000000
movq %rbx, %r13
movq %rbx, %rdi
callq 0x46f8
cmpb $0x0, 0x98(%rsp)
jne 0x2f01
jmp 0x359b
leaq 0x340(%rsp), %rdi
leaq 0x3083(%rip), %rsi      # 0x6139
movq %r15, %rdx
movq %r14, %rcx
xorl %eax, %eax
callq 0x461d
cmpl $0x2, %eax
jne 0x311a
movss 0x10(%rsp), %xmm0
movss 0x2f76(%rip), %xmm1     # 0x604c
subss 0x40(%rsp), %xmm1
movss %xmm0, 0x1f0(%rsp)
movss %xmm1, 0x1f4(%rsp)
andl $0x0, 0x1f8(%rsp)
leaq 0xe0(%rsp), %rdi
leaq 0x1f0(%rsp), %rsi
callq 0x5b4a
movabsq $0x1800000000, %r15     # imm = 0x1800000000
jmp 0x3089
movq 0x340(%rsp), %rsi
movb (%rsi), %al
cmpb $0x67, %al
movabsq $0x1800000000, %r15     # imm = 0x1800000000
jne 0x313b
incq (%rsp)
jmp 0x3089
cmpb $0x66, %al
sete %al
cmpq $0x0, (%rsp)
sete %cl
andb %al, %cl
cmpb $0x1, %cl
jne 0x3089
xorps %xmm0, %xmm0
movaps %xmm0, 0x20(%rsp)
andq $0x0, 0x30(%rsp)
movaps %xmm0, 0x60(%rsp)
andq $0x0, 0x70(%rsp)
movaps %xmm0, 0x80(%rsp)
andq $0x0, 0x90(%rsp)
leaq 0xa0(%rsp), %rdi
pushq $0x20
popq %rdx
callq 0x4810
pushq $0x20
popq %r15
pushq $0x1
popq %rbp
leaq 0x1f0(%rsp), %r13
movq 0xa0(%rsp), %rdi
movq 0xa8(%rsp), %rax
subq %rdi, %rax
sarq $0x5, %rax
cmpq %rax, %rbp
jae 0x3487
movq %rbp, (%rsp)
movq %r13, %rbp
andl $0x0, 0xc(%rsp)
andl $0x0, 0x50(%rsp)
andl $0x0, 0x1c(%rsp)
addq %r15, %rdi
leaq 0x2f66(%rip), %rsi      # 0x6142
leaq 0xc(%rsp), %r14
movq %r14, %rdx
leaq 0x1c(%rsp), %rcx
leaq 0x50(%rsp), %r13
movq %r13, %r8
xorl %eax, %eax
callq 0x461d
cmpl $0x3, %eax
jne 0x3218
movslq 0xc(%rsp), %rax
testq %rax, %rax
movq %rbp, %r13
js 0x32a0
decl %eax
movslq %eax, %rcx
jmp 0x32b1
movq 0xa0(%rsp), %rdi
addq %r15, %rdi
leaq 0x2f21(%rip), %rsi      # 0x614b
movq %r14, %rdx
movq %r13, %rcx
xorl %eax, %eax
callq 0x461d
cmpl $0x2, %eax
jne 0x3257
movslq 0xc(%rsp), %rax
testq %rax, %rax
movq %rbp, %r13
js 0x3387
decl %eax
movslq %eax, %rcx
jmp 0x3398
movq 0xa0(%rsp), %rdi
addq %r15, %rdi
leaq 0x2edc(%rip), %rsi      # 0x6145
movq %r14, %rdx
leaq 0x1c(%rsp), %rcx
xorl %eax, %eax
callq 0x461d
cmpl $0x2, %eax
movq %rbp, %r13
jne 0x3346
movslq 0xc(%rsp), %rax
testq %rax, %rax
movq (%rsp), %rbp
js 0x33ed
decl %eax
movslq %eax, %rcx
jmp 0x33fe
movq 0x28(%rsp), %rcx
subq 0x20(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq (%rsp), %rbp
movq %rcx, 0x1f0(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
movslq 0x1c(%rsp), %rax
testq %rax, %rax
js 0x32db
decl %eax
movslq %eax, %rcx
jmp 0x32f2
movq 0x88(%rsp), %rcx
subq 0x80(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x80(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
movslq 0x50(%rsp), %rax
testq %rax, %rax
js 0x331b
decl %eax
movslq %eax, %rcx
jmp 0x332c
movq 0x68(%rsp), %rcx
subq 0x60(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
jmp 0x347b
movq 0xa0(%rsp), %rdi
addq %r15, %rdi
leaq 0x2df7(%rip), %rsi      # 0x614f
movq %r14, %rdx
xorl %eax, %eax
callq 0x461d
cmpl $0x1, %eax
movq (%rsp), %rbp
jne 0x347b
movslq 0xc(%rsp), %rax
testq %rax, %rax
js 0x3455
decl %eax
movslq %eax, %rcx
jmp 0x3466
movq 0x28(%rsp), %rcx
subq 0x20(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq (%rsp), %rbp
movq %rcx, 0x1f0(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
movslq 0x50(%rsp), %rax
testq %rax, %rax
js 0x33c2
decl %eax
movslq %eax, %rcx
jmp 0x33d3
movq 0x68(%rsp), %rcx
subq 0x60(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x60(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
jmp 0x347b
movq 0x28(%rsp), %rcx
subq 0x20(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
movslq 0x1c(%rsp), %rax
testq %rax, %rax
js 0x3424
decl %eax
movslq %eax, %rcx
jmp 0x343b
movq 0x88(%rsp), %rcx
subq 0x80(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x80(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
jmp 0x347b
movq 0x28(%rsp), %rcx
subq 0x20(%rsp), %rcx
sarq $0x3, %rcx
addq %rax, %rcx
movq %rcx, 0x1f0(%rsp)
leaq 0x20(%rsp), %rdi
movq %r13, %rsi
callq 0x5608
incq %rbp
addq $0x20, %r15
jmp 0x319c
pushq $0x1
popq %r15
leaq 0x338(%rsp), %r14
movq 0x28(%rsp), %rax
subq 0x20(%rsp), %rax
sarq $0x3, %rax
decq %rax
cmpq %rax, %r15
movq 0xb8(%rsp), %rbp
jae 0x355d
movq %rbp, %r14
movq 0x8(%rbp), %rbp
subq (%r14), %rbp
movq %rbp, %rsi
sarq $0x3, %rsi
addq $0x3, %rsi
movq %r14, %rdi
callq 0x46a4
leaq 0x20(%rsp), %rax
movq %rax, 0x1f0(%rsp)
leaq 0x60(%rsp), %rax
movq %rax, 0x1f8(%rsp)
leaq 0x80(%rsp), %rax
movq %rax, 0x200(%rsp)
leaq 0x1b8(%rsp), %rax
movq %rax, 0x208(%rsp)
leaq 0x58(%rsp), %rax
movq %rax, 0x210(%rsp)
movq (%r14), %rdx
addq %rbp, %rdx
movq %r13, %rdi
xorl %esi, %esi
callq 0x3ce6
movq (%r14), %rax
leaq (%rax,%rbp), %rdx
addq $0x8, %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x3ce6
incq %r15
movq (%r14), %rax
leaq (%rax,%rbp), %rdx
addq $0x10, %rdx
movq %r13, %rdi
movq %r15, %rsi
callq 0x3ce6
jmp 0x348b
movq %r14, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x46d6
leaq 0x80(%rsp), %rdi
callq 0x5554
leaq 0x60(%rsp), %rdi
callq 0x5554
leaq 0x20(%rsp), %rdi
callq 0x5554
movq $0x0, (%rsp)
jmp 0x307a
leaq 0x18(%rbp), %r14
movq 0x58(%rsp), %rsi
movq %r14, %rdi
callq 0x4708
leaq 0x30(%rbp), %rdi
movq 0x58(%rsp), %rsi
movq %rdi, (%rsp)
callq 0x4708
leaq 0x48(%rbp), %rdi
movq 0x58(%rsp), %rsi
movq %rdi, 0x98(%rsp)
callq 0x4708
movq 0x1c8(%rsp), %rax
testq %rax, %rax
je 0x3682
movq 0x140(%rsp), %rcx
imulq $0xc, 0x8(%rax), %rdx
imulq $0xc, 0x20(%rax), %rsi
movq (%r14), %rdi
movl 0x8(%rcx,%rdx), %r8d
movl %r8d, 0x8(%rdi,%rsi)
movq (%rcx,%rdx), %rcx
movq %rcx, (%rdi,%rsi)
movq 0x100(%rsp), %rcx
cmpq %rcx, 0x108(%rsp)
je 0x3641
imulq $0xc, 0x10(%rax), %rdx
movq (%rsp), %rsi
movq (%rsi), %rsi
imulq $0xc, 0x20(%rax), %rdi
movl 0x8(%rcx,%rdx), %r8d
movl %r8d, 0x8(%rsi,%rdi)
movq (%rcx,%rdx), %rcx
movq %rcx, (%rsi,%rdi)
movq 0xe0(%rsp), %rcx
cmpq %rcx, 0xe8(%rsp)
je 0x367a
imulq $0xc, 0x18(%rax), %rdx
movq 0x98(%rsp), %rsi
movq (%rsi), %rsi
imulq $0xc, 0x20(%rax), %rdi
movl 0x8(%rcx,%rdx), %r8d
movl %r8d, 0x8(%rsi,%rdi)
movq (%rcx,%rdx), %rcx
movq %rcx, (%rsi,%rdi)
movq (%rax), %rax
jmp 0x35dc
leaq 0x1f0(%rsp), %rdi
callq 0x2602
leaq 0x338(%rsp), %rbx
movq %rbx, %rdi
callq 0x266c
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x269e
movq (%rbp), %rax
movq 0x8(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
xorl %edx, %edx
cmpq %rcx, %rdx
jae 0x36d8
movq (%rax,%rdx,8), %rsi
movq 0x10(%rax,%rdx,8), %rdi
movq %rsi, 0x10(%rax,%rdx,8)
movq %rdi, (%rax,%rdx,8)
addq $0x3, %rdx
jmp 0x36bb
leaq 0x60(%rbp), %rdi
movq 0x58(%rsp), %rsi
movq %rdi, 0xd8(%rsp)
callq 0x4708
leaq 0x78(%rbp), %rdi
movq 0x58(%rsp), %rsi
movq %rdi, 0x130(%rsp)
callq 0x4740
movq 0x20(%rbp), %rax
subq 0x18(%rbp), %rax
pushq $0xc
popq %rcx
cqto
idivq %rcx
movq %rax, %rbx
xorps %xmm0, %xmm0
leaq 0x20(%rsp), %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
movaps %xmm0, 0x60(%rsp)
andq $0x0, 0x70(%rsp)
movq %rax, %rsi
callq 0x4708
leaq 0x60(%rsp), %rdi
movq %rbx, %rsi
callq 0x4708
movq %rbx, 0x138(%rsp)
leaq 0x80(%rsp), %rax
andq $0x0, (%rax)
andl $0x0, 0x8(%rax)
leaq 0xa0(%rsp), %rax
andq $0x0, (%rax)
andl $0x0, 0x8(%rax)
xorl %r13d, %r13d
movq %r14, 0xd0(%rsp)
movq (%rbp), %rax
movq 0x8(%rbp), %rcx
subq %rax, %rcx
sarq $0x3, %rcx
cmpq %rcx, %r13
jae 0x399e
movq 0x10(%rax,%r13,8), %rbp
movq (%r14), %r14
imulq $0xc, (%rax,%r13,8), %r15
leaq (%r14,%r15), %r12
imulq $0xc, 0x8(%rax,%r13,8), %rbx
leaq (%r14,%rbx), %rdi
movq %r12, %rsi
callq 0x4f0c
movaps %xmm0, 0x1a0(%rsp)
movss %xmm1, 0xcc(%rsp)
imulq $0xc, %rbp, %rbp
addq %rbp, %r14
movq %r14, %rdi
movq %r12, %rsi
callq 0x4f0c
movq 0x98(%rsp), %rax
movq (%rax), %rax
movss (%rax,%rbx), %xmm2
movss 0x4(%rax,%rbx), %xmm5
movss (%rax,%r15), %xmm6
movss 0x4(%rax,%r15), %xmm7
subss %xmm6, %xmm2
movss (%rax,%rbp), %xmm3
movss 0x4(%rax,%rbp), %xmm4
subss %xmm6, %xmm3
subss %xmm7, %xmm5
subss %xmm7, %xmm4
movaps %xmm5, %xmm6
mulss %xmm3, %xmm6
movaps %xmm2, %xmm7
mulss %xmm4, %xmm7
subss %xmm6, %xmm7
movaps %xmm7, %xmm6
andps 0x27fe(%rip), %xmm6     # 0x6030
movss 0x281d(%rip), %xmm8     # 0x6058
ucomiss %xmm6, %xmm8
jae 0x38e7
xorps 0x27d4(%rip), %xmm3     # 0x6020
movss 0x27f8(%rip), %xmm6     # 0x604c
divss %xmm7, %xmm6
movaps %xmm1, %xmm8
mulss %xmm5, %xmm8
movaps %xmm4, %xmm7
movss 0xcc(%rsp), %xmm9
mulss %xmm9, %xmm7
subss %xmm8, %xmm7
mulss %xmm6, %xmm7
unpcklps %xmm5, %xmm5            # xmm5 = xmm5[0,0,1,1]
mulps %xmm0, %xmm5
unpcklps %xmm4, %xmm4            # xmm4 = xmm4[0,0,1,1]
movaps 0x1a0(%rsp), %xmm8
mulps %xmm8, %xmm4
subps %xmm5, %xmm4
mulss %xmm2, %xmm1
movaps %xmm3, %xmm5
mulss %xmm9, %xmm5
addss %xmm1, %xmm5
mulss %xmm6, %xmm5
shufps $0x0, %xmm6, %xmm6      # xmm6 = xmm6[0,0,0,0]
mulps %xmm6, %xmm4
movlps %xmm4, 0x80(%rsp)
movss %xmm7, 0x88(%rsp)
unpcklps %xmm2, %xmm2            # xmm2 = xmm2[0,0,1,1]
mulps %xmm0, %xmm2
unpcklps %xmm3, %xmm3            # xmm3 = xmm3[0,0,1,1]
mulps %xmm8, %xmm3
addps %xmm2, %xmm3
mulps %xmm6, %xmm3
movlps %xmm3, 0xa0(%rsp)
movss %xmm5, 0xa8(%rsp)
jmp 0x3915
andl $0x0, 0x88(%rsp)
movq $0x3f800000, 0x80(%rsp) # imm = 0x3F800000
movabsq $0x3f80000000000000, %rax # imm = 0x3F80000000000000
movq %rax, 0xa0(%rsp)
andl $0x0, 0xa8(%rsp)
movq 0xd0(%rsp), %r14
movq 0x20(%rsp), %rdi
addq %r15, %rdi
leaq 0x80(%rsp), %r12
movq %r12, %rsi
callq 0x4ede
movq 0x20(%rsp), %rdi
addq %rbx, %rdi
movq %r12, %rsi
callq 0x4ede
movq 0x20(%rsp), %rdi
addq %rbp, %rdi
movq %r12, %rsi
callq 0x4ede
addq 0x60(%rsp), %r15
movq %r15, %rdi
leaq 0xa0(%rsp), %r15
movq %r15, %rsi
callq 0x4ede
addq 0x60(%rsp), %rbx
movq %rbx, %rdi
movq %r15, %rsi
callq 0x4ede
addq 0x60(%rsp), %rbp
movq %rbp, %rdi
movq %r15, %rsi
callq 0x4ede
addq $0x3, %r13
movq 0xb8(%rsp), %rbp
jmp 0x377a
xorl %r14d, %r14d
leaq 0x40(%rsp), %r15
leaq 0x10(%rsp), %r12
leaq 0x26ae(%rip), %r13      # 0x6060
xorl %ebp, %ebp
cmpq %rbp, 0x138(%rsp)
je 0x3b1b
movq (%rsp), %rax
movq (%rax), %rax
leaq (%rax,%r14), %rbx
movq 0x20(%rsp), %rcx
movq (%rcx,%r14), %rdx
movq %rdx, 0x10(%rsp)
movl 0x8(%rcx,%r14), %ecx
movl %ecx, 0x18(%rsp)
movss 0x4(%rax,%r14), %xmm0
mulss 0x14(%rsp), %xmm0
movss (%rax,%r14), %xmm1
mulss 0x10(%rsp), %xmm1
addss %xmm0, %xmm1
movss 0x8(%rax,%r14), %xmm0
mulss 0x18(%rsp), %xmm0
addss %xmm1, %xmm0
movq %rbx, %rdi
callq 0x4f22
movsd 0x10(%rsp), %xmm2
subps %xmm0, %xmm2
movss 0x18(%rsp), %xmm0
subss %xmm1, %xmm0
movlps %xmm2, 0x40(%rsp)
movss %xmm0, 0x48(%rsp)
movq %r15, %rdi
movss 0x2615(%rip), %xmm0     # 0x6058
callq 0x4f36
testb %al, %al
je 0x3a5a
movsd 0x40(%rsp), %xmm0
movss 0x48(%rsp), %xmm1
jmp 0x3a62
movq %r15, %rdi
callq 0x4f42
movq 0xd8(%rsp), %rcx
movq (%rcx), %rax
movlps %xmm0, (%rax,%r14)
movss %xmm1, 0x8(%rax,%r14)
movq (%rcx), %rdi
addq %r14, %rdi
callq 0x4f88
testb %al, %al
jne 0x3ab6
movq 0xd8(%rsp), %rcx
movq (%rcx), %rax
andl $0x0, 0x8(%rax,%r14)
movq $0x3f800000, (%rax,%r14) # imm = 0x3F800000
movq (%rcx), %rax
movl 0x8(%rax,%r14), %ecx
movl %ecx, 0x18(%rsp)
movq (%rax,%r14), %rax
movq %rax, 0x10(%rsp)
movq %rbx, %rdi
movq %r12, %rsi
callq 0x4fcc
movq 0x60(%rsp), %rax
movaps %xmm0, %xmm2
shufps $0x55, %xmm0, %xmm2     # xmm2 = xmm2[1,1],xmm0[1,1]
mulss 0x4(%rax,%r14), %xmm2
movss (%rax,%r14), %xmm3
mulss %xmm0, %xmm3
addss %xmm2, %xmm3
mulss 0x8(%rax,%r14), %xmm1
addss %xmm3, %xmm1
xorl %eax, %eax
xorps %xmm0, %xmm0
ucomiss %xmm1, %xmm0
seta %al
movss (%r13,%rax,4), %xmm0
movq 0x130(%rsp), %rax
movq (%rax), %rax
movss %xmm0, (%rax,%rbp,4)
incq %rbp
addq $0xc, %r14
jmp 0x39b4
leaq 0x60(%rsp), %rdi
callq 0x51ac
leaq 0x20(%rsp), %rdi
callq 0x51ac
leaq 0x1f0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x2626
movq 0x118(%rsp), %rcx
movl %eax, (%rcx)
leaq 0x338(%rsp), %rdi
movl 0x1a0(%rdi), %eax
movq 0x120(%rsp), %rcx
movl %eax, (%rcx)
callq 0x4772
leaq 0x1b8(%rsp), %rdi
callq 0x5050
leaq 0x160(%rsp), %rdi
callq 0x5afe
leaq 0x180(%rsp), %rdi
callq 0x51ac
leaq 0xe0(%rsp), %rdi
callq 0x51ac
leaq 0x100(%rsp), %rdi
callq 0x51ac
leaq 0x140(%rsp), %rdi
callq 0x51ac
movq 0x128(%rsp), %rax
testq %rax, %rax
setne %bl
leaq 0xc0(%rsp), %rdi
callq 0x2386
movl %ebx, %eax
addq $0x4e8, %rsp            # imm = 0x4E8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
jmp 0x3c1e
jmp 0x3c0e
jmp 0x3c0e
jmp 0x3c0e
jmp 0x3c72
jmp 0x3c0e
jmp 0x3c0e
jmp 0x3c72
jmp 0x3c0e
jmp 0x3c0e
jmp 0x3c0e
jmp 0x3c72
jmp 0x3c4c
jmp 0x3c0e
movq %rax, %rbx
jmp 0x3c63
jmp 0x3c45
movq %rax, %rbx
leaq 0xa0(%rsp), %rdi
callq 0x46d6
leaq 0x80(%rsp), %rdi
callq 0x5554
leaq 0x60(%rsp), %rdi
callq 0x5554
leaq 0x20(%rsp), %rdi
callq 0x5554
jmp 0x3c75
jmp 0x3c4c
jmp 0x3c4c
movq %rax, %rbx
jmp 0x3c82
jmp 0x3c4c
movq %rax, %rbx
leaq 0x60(%rsp), %rdi
callq 0x51ac
leaq 0x20(%rsp), %rdi
callq 0x51ac
leaq 0x338(%rsp), %rdi
callq 0x4772
jmp 0x3c82
movq %rax, %rbx
leaq 0x338(%rsp), %rdi
callq 0x46f8
leaq 0x1b8(%rsp), %rdi
callq 0x5050
leaq 0x160(%rsp), %rdi
callq 0x5afe
leaq 0x180(%rsp), %rdi
callq 0x51ac
leaq 0xe0(%rsp), %rdi
callq 0x51ac
leaq 0x100(%rsp), %rdi
callq 0x51ac
leaq 0x140(%rsp), %rdi
callq 0x51ac
leaq 0xc0(%rsp), %rdi
callq 0x2386
movq %rbx, %rdi
callq 0x2240
nop