// File: misohena[P]drawstars/./vmath.h
// Function: Mat4<float> operator*<float>(Mat4<float> const&, Mat4<float> const&)
Mat4<T> operator*(const Mat4<T> &lhs, const Mat4<T> &rhs)
{
    return Mat4<T>(
        lhs.e00*rhs.e00 + lhs.e01*rhs.e10 + lhs.e02*rhs.e20 + lhs.e03*rhs.e30,
        lhs.e10*rhs.e00 + lhs.e11*rhs.e10 + lhs.e12*rhs.e20 + lhs.e13*rhs.e30,
        lhs.e20*rhs.e00 + lhs.e21*rhs.e10 + lhs.e22*rhs.e20 + lhs.e23*rhs.e30,
        lhs.e30*rhs.e00 + lhs.e31*rhs.e10 + lhs.e32*rhs.e20 + lhs.e33*rhs.e30,

        lhs.e00*rhs.e01 + lhs.e01*rhs.e11 + lhs.e02*rhs.e21 + lhs.e03*rhs.e31,
        lhs.e10*rhs.e01 + lhs.e11*rhs.e11 + lhs.e12*rhs.e21 + lhs.e13*rhs.e31,
        lhs.e20*rhs.e01 + lhs.e21*rhs.e11 + lhs.e22*rhs.e21 + lhs.e23*rhs.e31,
        lhs.e30*rhs.e01 + lhs.e31*rhs.e11 + lhs.e32*rhs.e21 + lhs.e33*rhs.e31,

        lhs.e00*rhs.e02 + lhs.e01*rhs.e12 + lhs.e02*rhs.e22 + lhs.e03*rhs.e32,
        lhs.e10*rhs.e02 + lhs.e11*rhs.e12 + lhs.e12*rhs.e22 + lhs.e13*rhs.e32,
        lhs.e20*rhs.e02 + lhs.e21*rhs.e12 + lhs.e22*rhs.e22 + lhs.e23*rhs.e32,
        lhs.e30*rhs.e02 + lhs.e31*rhs.e12 + lhs.e32*rhs.e22 + lhs.e33*rhs.e32,

        lhs.e00*rhs.e03 + lhs.e01*rhs.e13 + lhs.e02*rhs.e23 + lhs.e03*rhs.e33,
        lhs.e10*rhs.e03 + lhs.e11*rhs.e13 + lhs.e12*rhs.e23 + lhs.e13*rhs.e33,
        lhs.e20*rhs.e03 + lhs.e21*rhs.e13 + lhs.e22*rhs.e23 + lhs.e23*rhs.e33,
        lhs.e30*rhs.e03 + lhs.e31*rhs.e13 + lhs.e32*rhs.e23 + lhs.e33*rhs.e33);
}

// Assembly:
subq $0x68, %rsp
movq %rdi, %rax
movq %rax, 0x50(%rsp)
movq %rsi, 0x60(%rsp)
movq %rdx, 0x58(%rsp)
movq 0x60(%rsp), %rax
movss (%rax), %xmm0
movq 0x58(%rsp), %rax
movss (%rax), %xmm2
movq 0x60(%rsp), %rax
movss 0x10(%rax), %xmm1
movq 0x58(%rsp), %rax
mulss 0x4(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x20(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x30(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0xc(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x4c(%rsp)
movq 0x60(%rsp), %rax
movss 0x4(%rax), %xmm0
movq 0x58(%rsp), %rax
movss (%rax), %xmm2
movq 0x60(%rsp), %rax
movss 0x14(%rax), %xmm1
movq 0x58(%rsp), %rax
mulss 0x4(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x24(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x34(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0xc(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x44(%rsp)
movq 0x60(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss (%rax), %xmm2
movq 0x60(%rsp), %rax
movss 0x18(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x4(%rax), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x28(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x38(%rax), %xmm2
movq 0x58(%rsp), %rax
movss 0xc(%rax), %xmm1
mulss %xmm1, %xmm2
addss %xmm0, %xmm2
movq 0x60(%rsp), %rax
movss 0xc(%rax), %xmm1
movq 0x58(%rsp), %rax
movss (%rax), %xmm3
movq 0x60(%rsp), %rax
movss 0x1c(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x4(%rax), %xmm0
mulss %xmm3, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x2c(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x8(%rax), %xmm3
mulss %xmm3, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x3c(%rax), %xmm3
movq 0x58(%rsp), %rax
movss 0xc(%rax), %xmm1
mulss %xmm1, %xmm3
addss %xmm0, %xmm3
movq 0x60(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x10(%rax), %xmm4
movq 0x60(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x14(%rax), %xmm0
mulss %xmm4, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x20(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm4
mulss %xmm4, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x30(%rax), %xmm4
movq 0x58(%rsp), %rax
movss 0x1c(%rax), %xmm1
mulss %xmm1, %xmm4
addss %xmm0, %xmm4
movq 0x60(%rsp), %rax
movss 0x4(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x10(%rax), %xmm5
movq 0x60(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x14(%rax), %xmm0
mulss %xmm5, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x24(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm5
mulss %xmm5, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x34(%rax), %xmm5
movq 0x58(%rsp), %rax
movss 0x1c(%rax), %xmm1
mulss %xmm1, %xmm5
addss %xmm0, %xmm5
movq 0x60(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x10(%rax), %xmm6
movq 0x60(%rsp), %rax
movss 0x18(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x14(%rax), %xmm0
mulss %xmm6, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x28(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm6
mulss %xmm6, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x38(%rax), %xmm6
movq 0x58(%rsp), %rax
movss 0x1c(%rax), %xmm1
mulss %xmm1, %xmm6
addss %xmm0, %xmm6
movq 0x60(%rsp), %rax
movss 0xc(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x10(%rax), %xmm7
movq 0x60(%rsp), %rax
movss 0x1c(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x14(%rax), %xmm0
mulss %xmm7, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x2c(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x18(%rax), %xmm7
mulss %xmm7, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x3c(%rax), %xmm7
movq 0x58(%rsp), %rax
movss 0x1c(%rax), %xmm1
mulss %xmm1, %xmm7
addss %xmm0, %xmm7
movq 0x60(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x24(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x20(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x28(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x30(%rax), %xmm15
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm1
mulss %xmm1, %xmm15
addss %xmm0, %xmm15
movq 0x60(%rsp), %rax
movss 0x4(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x24(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x24(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x28(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x34(%rax), %xmm14
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm1
mulss %xmm1, %xmm14
addss %xmm0, %xmm14
movq 0x60(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x18(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x24(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x28(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x28(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x38(%rax), %xmm13
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm1
mulss %xmm1, %xmm13
addss %xmm0, %xmm13
movq 0x60(%rsp), %rax
movss 0xc(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x20(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x1c(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x24(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x2c(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x28(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x3c(%rax), %xmm12
movq 0x58(%rsp), %rax
movss 0x2c(%rax), %xmm1
mulss %xmm1, %xmm12
addss %xmm0, %xmm12
movq 0x60(%rsp), %rax
movss (%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x30(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x10(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x34(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x20(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x38(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x30(%rax), %xmm11
movq 0x58(%rsp), %rax
movss 0x3c(%rax), %xmm1
mulss %xmm1, %xmm11
addss %xmm0, %xmm11
movq 0x60(%rsp), %rax
movss 0x4(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x30(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x14(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x34(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x24(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x38(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x34(%rax), %xmm10
movq 0x58(%rsp), %rax
movss 0x3c(%rax), %xmm1
mulss %xmm1, %xmm10
addss %xmm0, %xmm10
movq 0x60(%rsp), %rax
movss 0x8(%rax), %xmm1
movq 0x58(%rsp), %rax
movss 0x30(%rax), %xmm8
movq 0x60(%rsp), %rax
movss 0x18(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x34(%rax), %xmm0
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movq 0x60(%rsp), %rax
movss 0x28(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x38(%rax), %xmm8
mulss %xmm8, %xmm0
addss %xmm1, %xmm0
movq 0x60(%rsp), %rax
movss 0x38(%rax), %xmm9
movq 0x58(%rsp), %rax
movss 0x3c(%rax), %xmm1
mulss %xmm1, %xmm9
addss %xmm0, %xmm9
movq 0x60(%rsp), %rax
movss 0xc(%rax), %xmm8
movq 0x58(%rsp), %rax
movss 0x30(%rax), %xmm1
movq 0x60(%rsp), %rax
movss 0x1c(%rax), %xmm0
movq 0x58(%rsp), %rax
mulss 0x34(%rax), %xmm0
mulss %xmm1, %xmm8
addss %xmm0, %xmm8
movq 0x60(%rsp), %rax
movss 0x2c(%rax), %xmm0
movq 0x58(%rsp), %rax
movss 0x38(%rax), %xmm1
mulss %xmm1, %xmm0
movss 0x44(%rsp), %xmm1
addss %xmm8, %xmm0
movss %xmm0, 0x48(%rsp)
movq 0x60(%rsp), %rax
movss 0x3c(%rax), %xmm8
movq 0x58(%rsp), %rax
movss 0x3c(%rax), %xmm0
mulss %xmm0, %xmm8
movss 0x48(%rsp), %xmm0
addss %xmm0, %xmm8
movss 0x4c(%rsp), %xmm0
movss %xmm15, (%rsp)
movss %xmm14, 0x8(%rsp)
movss %xmm13, 0x10(%rsp)
movss %xmm12, 0x18(%rsp)
movss %xmm11, 0x20(%rsp)
movss %xmm10, 0x28(%rsp)
movss %xmm9, 0x30(%rsp)
movss %xmm8, 0x38(%rsp)
callq 0x12050
movq 0x50(%rsp), %rax
addq $0x68, %rsp
retq