// File: /workspace/github_c_makefile_star2_O1/adelciotto[P]plasma/src/cube_plasma.c
// Function: DrawFrame
void DrawFrame(double elapsedTimeSecs) {
    float camX = 0.0f;
    float camY = 0.0f;
    float camZ = 1.5f + Min(sinf(elapsedTimeSecs * PI / 4.0) +
                                cosf(elapsedTimeSecs * 0.5f * PI / 4.0) +
                                sinf(elapsedTimeSecs * 0.2f * PI / 6.0),
                            0.5);

    Mat4LookAt((Vec3){camX, camY, camZ}, (Vec3){0.0f, 0.0f, 0.0f},
               (Vec3){0.0f, 1.0f, 0.0f}, gView);

    Mat4 identity = MAT4_IDENTITY_INIT;
    Mat4 transform = MAT4_IDENTITY_INIT;
    float t = elapsedTimeSecs * 0.5;
    Mat4RotateZ(identity, transform, sinf(t * PI / 2.0) + sinf(t * PI / 6.0));

    Mat4 out;
    Mat4RotateX(transform, out, cosf(t * PI / 2.0));

    Mat4 outA;
    Mat4RotateY(out, outA, sinf(t * PI / 4.0) + cosf(t * PI / 2.0));

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glUseProgram(gProgramId);

    glUniformMatrix4fv(gUniformModelLocation, 1, GL_FALSE, outA);
    glUniformMatrix4fv(gUniformViewLocation, 1, GL_FALSE, gView);
    glUniformMatrix4fv(gUniformProjectionLocation, 1, GL_FALSE, gProj);
    glUniform3f(gUniformViewPositionLocation, camX, camY, camZ);
    glUniform1f(gUniformScaleLocation, 20.0f);
    glUniform1f(gUniformTimeLocation, elapsedTimeSecs);

    glDrawArrays(GL_TRIANGLES, 0, 36);
}

// Assembly:
pushq %r15
pushq %r14
pushq %rbx
subq $0x100, %rsp            # imm = 0x100
movsd %xmm0, 0x38(%rsp)
movapd %xmm0, %xmm1
mulsd 0x132d(%rip), %xmm1     # 0x4048
mulsd 0x132d(%rip), %xmm1     # 0x4050
xorps %xmm0, %xmm0
cvtsd2ss %xmm1, %xmm0
callq 0x2030
movss %xmm0, 0x10(%rsp)
movsd 0x38(%rsp), %xmm0
mulsd 0x1315(%rip), %xmm0     # 0x4058
movsd %xmm0, (%rsp)
mulsd 0x12f8(%rip), %xmm0     # 0x4048
mulsd 0x12f8(%rip), %xmm0     # 0x4050
cvtsd2ss %xmm0, %xmm0
callq 0x21a0
addss 0x10(%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
movsd 0x12eb(%rip), %xmm0     # 0x4060
mulsd 0x38(%rsp), %xmm0
mulsd 0x12c5(%rip), %xmm0     # 0x4048
divsd 0x12dd(%rip), %xmm0     # 0x4068
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss 0x10(%rsp), %xmm0
cvtss2sd %xmm0, %xmm0
maxsd 0x12b2(%rip), %xmm0     # 0x4058
addsd 0x12c2(%rip), %xmm0     # 0x4070
cvtsd2ss %xmm0, %xmm0
xorps %xmm2, %xmm2
xorps %xmm6, %xmm6
movss %xmm0, 0x34(%rsp)
subss %xmm0, %xmm6
movaps %xmm6, %xmm0
mulss %xmm6, %xmm0
addss %xmm2, %xmm0
ucomiss %xmm2, %xmm0
jb 0x2dd8
sqrtss %xmm0, %xmm0
jmp 0x2dea
movaps %xmm6, 0x10(%rsp)
callq 0x2210
xorps %xmm2, %xmm2
movaps 0x10(%rsp), %xmm6
xorps %xmm7, %xmm7
divss %xmm0, %xmm7
divss %xmm0, %xmm6
movaps 0x1234(%rip), %xmm0     # 0x4030
movaps %xmm6, %xmm4
xorps %xmm0, %xmm4
movaps %xmm7, %xmm8
mulss %xmm2, %xmm8
subss %xmm6, %xmm8
movaps %xmm7, %xmm5
xorps %xmm0, %xmm5
movss 0x1265(%rip), %xmm9     # 0x4084
mulss %xmm7, %xmm9
movaps %xmm6, %xmm10
mulss %xmm2, %xmm10
addss %xmm9, %xmm10
addss %xmm7, %xmm9
movaps %xmm10, %xmm0
mulss %xmm10, %xmm0
movaps %xmm8, %xmm1
mulss %xmm8, %xmm1
addss %xmm0, %xmm1
movaps %xmm9, %xmm0
mulss %xmm9, %xmm0
addss %xmm1, %xmm0
ucomiss %xmm2, %xmm0
jb 0x2e65
sqrtss %xmm0, %xmm0
jmp 0x2ece
movaps %xmm6, 0x10(%rsp)
movaps %xmm7, 0xb0(%rsp)
movaps %xmm8, 0xa0(%rsp)
movaps %xmm9, 0x90(%rsp)
movaps %xmm4, 0x80(%rsp)
movaps %xmm10, 0x70(%rsp)
movaps %xmm5, 0x60(%rsp)
callq 0x2210
movaps 0x60(%rsp), %xmm5
movaps 0x70(%rsp), %xmm10
movaps 0x80(%rsp), %xmm4
movaps 0x90(%rsp), %xmm9
movaps 0xa0(%rsp), %xmm8
movaps 0xb0(%rsp), %xmm7
movaps 0x10(%rsp), %xmm6
divss %xmm0, %xmm8
divss %xmm0, %xmm10
divss %xmm0, %xmm9
movaps %xmm10, %xmm0
mulss %xmm6, %xmm0
movaps %xmm9, %xmm1
mulss %xmm7, %xmm1
subss %xmm1, %xmm0
movaps %xmm6, %xmm2
mulss %xmm8, %xmm2
subss %xmm2, %xmm1
movaps %xmm7, %xmm3
mulss %xmm10, %xmm3
movaps %xmm8, %xmm2
mulss %xmm7, %xmm2
subss %xmm3, %xmm2
movss %xmm8, 0x3286(%rip)     # 0x61a0
leaq 0x327f(%rip), %rbx      # 0x61a0
movss %xmm0, 0x327b(%rip)     # 0x61a4
movss %xmm5, 0x3277(%rip)     # 0x61a8
movss %xmm10, 0x3276(%rip)    # 0x61b0
movss %xmm1, 0x3272(%rip)     # 0x61b4
movss %xmm5, 0x326e(%rip)     # 0x61b8
movss %xmm9, 0x326d(%rip)     # 0x61c0
movss %xmm2, 0x3269(%rip)     # 0x61c4
movss %xmm4, 0x3265(%rip)     # 0x61c8
xorps %xmm5, %xmm5
mulss %xmm5, %xmm10
mulss %xmm5, %xmm8
addss %xmm10, %xmm8
movss 0x34(%rsp), %xmm3
mulss %xmm3, %xmm9
movaps %xmm3, %xmm4
addss %xmm8, %xmm9
movaps 0x10a1(%rip), %xmm3     # 0x4030
xorps %xmm3, %xmm9
movss %xmm9, 0x3234(%rip)     # 0x61d0
mulss %xmm5, %xmm1
mulss %xmm5, %xmm0
addss %xmm1, %xmm0
mulss %xmm4, %xmm2
addss %xmm0, %xmm2
xorps %xmm3, %xmm2
movss %xmm2, 0x3219(%rip)     # 0x61d4
mulss %xmm5, %xmm7
addss %xmm7, %xmm7
mulss %xmm4, %xmm6
addss %xmm7, %xmm6
movss %xmm6, 0x3205(%rip)     # 0x61d8
xorl %eax, %eax
movl %eax, 0x31f1(%rip)      # 0x61cc
movl %eax, 0x31db(%rip)      # 0x61bc
movl %eax, 0x31c5(%rip)      # 0x61ac
xorps %xmm0, %xmm0
cvtsd2ss (%rsp), %xmm0
movl $0x3f800000, 0x31e3(%rip) # imm = 0x3F800000
xorps %xmm1, %xmm1
cvtss2sd %xmm0, %xmm1
mulsd 0x1040(%rip), %xmm1     # 0x4048
movsd %xmm1, 0x28(%rsp)
movsd 0x1042(%rip), %xmm0     # 0x4058
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0x60(%rsp)
callq 0x2030
movss %xmm0, (%rsp)
movsd 0x28(%rsp), %xmm0
divsd 0x102c(%rip), %xmm0     # 0x4068
cvtsd2ss %xmm0, %xmm0
callq 0x2030
addss (%rsp), %xmm0
movss %xmm0, 0x10(%rsp)
callq 0x21a0
movss %xmm0, (%rsp)
movss 0x10(%rsp), %xmm0
callq 0x2030
movaps %xmm0, %xmm1
mulss 0x1014(%rip), %xmm1     # 0x4084
movss (%rsp), %xmm3
movaps %xmm3, %xmm2
addss %xmm1, %xmm2
movaps %xmm1, %xmm4
xorps %xmm1, %xmm1
addss %xmm1, %xmm2
movss %xmm2, 0x80(%rsp)
movaps %xmm3, %xmm2
movaps %xmm3, %xmm5
mulss %xmm1, %xmm2
movaps %xmm0, %xmm3
addss %xmm2, %xmm3
addss %xmm1, %xmm3
movss %xmm3, 0x70(%rsp)
movaps %xmm2, %xmm3
subss %xmm0, %xmm3
addss %xmm1, %xmm3
movss %xmm3, 0x90(%rsp)
mulss %xmm1, %xmm0
movaps %xmm5, %xmm3
addss %xmm0, %xmm3
addss %xmm1, %xmm3
movss %xmm3, (%rsp)
addss %xmm2, %xmm4
addss %xmm1, %xmm4
movss %xmm4, 0xa0(%rsp)
addss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x10(%rsp)
movss 0x60(%rsp), %xmm0
callq 0x21a0
movss %xmm0, 0xc(%rsp)
callq 0x21a0
movss %xmm0, 0xb0(%rsp)
movss 0xc(%rsp), %xmm0
callq 0x2030
movss 0x70(%rsp), %xmm6
movaps %xmm6, %xmm1
xorps %xmm5, %xmm5
mulss %xmm5, %xmm1
movss 0x80(%rsp), %xmm2
movaps %xmm2, %xmm3
addss %xmm1, %xmm3
movss %xmm3, 0x4c(%rsp)
movaps %xmm6, %xmm4
movaps %xmm6, %xmm13
movss 0xb0(%rsp), %xmm15
mulss %xmm15, %xmm4
mulss %xmm5, %xmm2
addss %xmm2, %xmm4
movaps %xmm2, %xmm3
movss 0xf1a(%rip), %xmm2      # 0x4084
mulss %xmm0, %xmm2
addss %xmm2, %xmm4
addss %xmm5, %xmm4
xorps %xmm14, %xmm14
movss %xmm4, 0x48(%rsp)
mulss %xmm0, %xmm13
addss %xmm3, %xmm13
addss %xmm1, %xmm3
movaps %xmm3, %xmm12
movss (%rsp), %xmm6
movaps %xmm6, %xmm1
mulss %xmm14, %xmm1
movss 0x90(%rsp), %xmm3
movaps %xmm3, %xmm4
addss %xmm1, %xmm4
movss %xmm4, 0x58(%rsp)
movaps %xmm6, %xmm4
mulss %xmm15, %xmm4
mulss %xmm14, %xmm3
addss %xmm3, %xmm4
addss %xmm2, %xmm4
movaps %xmm4, %xmm10
movaps %xmm2, %xmm5
mulss %xmm0, %xmm6
addss %xmm3, %xmm6
movaps %xmm6, %xmm11
addss %xmm1, %xmm3
movaps %xmm3, %xmm8
movss 0x10(%rsp), %xmm3
movaps %xmm3, %xmm1
movss 0xa0(%rsp), %xmm2
movaps %xmm2, %xmm9
movaps %xmm3, %xmm7
movaps %xmm3, %xmm4
mulss %xmm15, %xmm7
mulss %xmm14, %xmm2
addss %xmm2, %xmm7
movaps %xmm2, %xmm6
addss %xmm7, %xmm5
subss %xmm0, %xmm7
mulss %xmm0, %xmm4
movaps %xmm15, %xmm0
xorps %xmm2, %xmm2
mulss %xmm2, %xmm0
movaps %xmm13, %xmm3
addss %xmm0, %xmm3
addss %xmm2, %xmm3
movss %xmm3, 0x70(%rsp)
addss %xmm2, %xmm12
movss %xmm12, 0x80(%rsp)
addss %xmm2, %xmm10
movss %xmm10, 0x44(%rsp)
movaps %xmm11, %xmm3
addss %xmm0, %xmm3
addss %xmm2, %xmm3
movss %xmm3, (%rsp)
addss %xmm2, %xmm8
movss %xmm8, 0x90(%rsp)
mulss %xmm2, %xmm1
addss %xmm1, %xmm9
movss %xmm9, 0x54(%rsp)
addss %xmm2, %xmm7
movss %xmm7, 0x50(%rsp)
addss %xmm6, %xmm4
movaps %xmm15, %xmm3
addss %xmm4, %xmm3
addss %xmm2, %xmm3
movss %xmm3, 0xb0(%rsp)
addss %xmm1, %xmm6
addss %xmm2, %xmm6
movss %xmm6, 0xa0(%rsp)
addss %xmm2, %xmm5
movss %xmm5, 0x5c(%rsp)
addss %xmm0, %xmm4
addss %xmm2, %xmm4
movss %xmm4, 0x10(%rsp)
movaps %xmm6, %xmm0
addss 0xdab(%rip), %xmm0      # 0x4088
movss %xmm0, 0xc(%rsp)
movsd 0x28(%rsp), %xmm0
mulsd 0xd5f(%rip), %xmm0      # 0x4050
cvtsd2ss %xmm0, %xmm0
callq 0x2030
movss %xmm0, 0x28(%rsp)
movss 0x60(%rsp), %xmm0
callq 0x21a0
addss 0x28(%rsp), %xmm0
movss %xmm0, 0x28(%rsp)
callq 0x21a0
movss %xmm0, 0x60(%rsp)
movss 0x28(%rsp), %xmm0
callq 0x2030
movss 0x48(%rsp), %xmm9
movaps %xmm9, %xmm1
xorps %xmm5, %xmm5
mulss %xmm5, %xmm1
movss 0x4c(%rsp), %xmm4
movaps %xmm4, %xmm2
movss 0x60(%rsp), %xmm11
mulss %xmm11, %xmm2
addss %xmm1, %xmm2
movss 0x70(%rsp), %xmm8
movaps %xmm8, %xmm3
mulss %xmm0, %xmm3
addss %xmm2, %xmm3
movss 0x80(%rsp), %xmm7
movaps %xmm7, %xmm2
mulss %xmm5, %xmm2
addss %xmm2, %xmm3
leaq 0xc0(%rsp), %r14
movss %xmm3, (%r14)
movaps %xmm4, %xmm3
movaps %xmm4, %xmm6
mulss %xmm5, %xmm3
addss %xmm3, %xmm9
movaps %xmm8, %xmm4
movaps %xmm8, %xmm10
mulss %xmm5, %xmm4
xorps %xmm8, %xmm8
addss %xmm4, %xmm9
addss %xmm2, %xmm9
movss %xmm9, 0x4(%r14)
mulss %xmm0, %xmm6
addss %xmm1, %xmm3
subss %xmm6, %xmm1
movaps %xmm10, %xmm5
mulss %xmm11, %xmm5
addss %xmm1, %xmm5
addss %xmm2, %xmm5
movss %xmm5, 0x8(%r14)
addss %xmm4, %xmm3
addss %xmm7, %xmm3
movss %xmm3, 0xc(%r14)
movss 0x44(%rsp), %xmm6
movaps %xmm6, %xmm1
mulss %xmm8, %xmm1
movss 0x58(%rsp), %xmm4
movaps %xmm4, %xmm2
mulss %xmm11, %xmm2
addss %xmm1, %xmm2
movss (%rsp), %xmm9
movaps %xmm9, %xmm3
mulss %xmm0, %xmm3
addss %xmm2, %xmm3
movss 0x90(%rsp), %xmm7
movaps %xmm7, %xmm2
mulss %xmm8, %xmm2
addss %xmm2, %xmm3
movss %xmm3, 0x10(%r14)
movaps %xmm4, %xmm3
movaps %xmm4, %xmm5
mulss %xmm8, %xmm3
addss %xmm3, %xmm6
movaps %xmm9, %xmm4
movaps %xmm9, %xmm10
mulss %xmm8, %xmm4
addss %xmm4, %xmm6
addss %xmm2, %xmm6
movss %xmm6, 0x14(%r14)
mulss %xmm0, %xmm5
addss %xmm1, %xmm3
subss %xmm5, %xmm1
movaps %xmm11, %xmm9
movaps %xmm10, %xmm5
mulss %xmm11, %xmm5
addss %xmm1, %xmm5
addss %xmm2, %xmm5
movss %xmm5, 0x18(%r14)
addss %xmm4, %xmm3
addss %xmm7, %xmm3
movss %xmm3, 0x1c(%r14)
movss 0x50(%rsp), %xmm7
movaps %xmm7, %xmm3
mulss %xmm8, %xmm3
movss 0x54(%rsp), %xmm6
movaps %xmm6, %xmm2
mulss %xmm11, %xmm2
movaps %xmm2, %xmm1
addss %xmm3, %xmm1
movss 0xb0(%rsp), %xmm10
movaps %xmm10, %xmm4
mulss %xmm0, %xmm4
addss %xmm1, %xmm4
movss 0xa0(%rsp), %xmm11
movaps %xmm11, %xmm5
mulss %xmm8, %xmm5
addss %xmm5, %xmm4
movss %xmm4, 0x20(%r14)
movaps %xmm6, %xmm1
mulss %xmm8, %xmm1
addss %xmm1, %xmm7
movaps %xmm10, %xmm4
mulss %xmm8, %xmm4
addss %xmm4, %xmm7
addss %xmm5, %xmm7
movss %xmm7, 0x24(%r14)
movaps 0xb18(%rip), %xmm7      # 0x4030
xorps %xmm0, %xmm7
mulss %xmm6, %xmm7
movaps %xmm7, %xmm6
addss %xmm3, %xmm6
mulss %xmm9, %xmm10
addss %xmm6, %xmm10
addss %xmm5, %xmm10
movss %xmm10, 0x28(%r14)
addss %xmm1, %xmm3
addss %xmm4, %xmm3
addss %xmm11, %xmm3
movss %xmm3, 0x2c(%r14)
movaps %xmm1, %xmm3
movss 0x5c(%rsp), %xmm4
addss %xmm4, %xmm3
mulss %xmm8, %xmm4
addss %xmm4, %xmm2
movss 0x10(%rsp), %xmm6
mulss %xmm6, %xmm0
addss %xmm2, %xmm0
movss 0xc(%rsp), %xmm5
movaps %xmm5, %xmm2
mulss %xmm8, %xmm2
addss %xmm2, %xmm0
movss %xmm0, 0x30(%r14)
movaps %xmm6, %xmm0
mulss %xmm8, %xmm0
addss %xmm0, %xmm3
addss %xmm2, %xmm3
movss %xmm3, 0x34(%r14)
movaps %xmm6, %xmm3
mulss %xmm9, %xmm3
addss %xmm4, %xmm7
addss %xmm7, %xmm3
addss %xmm2, %xmm3
movss %xmm3, 0x38(%r14)
addss %xmm1, %xmm4
addss %xmm0, %xmm4
addss %xmm5, %xmm4
movss %xmm4, 0x3c(%r14)
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
xorps %xmm2, %xmm2
movss 0xaab(%rip), %xmm3      # 0x4088
callq 0x2070
movl $0x4100, %edi           # imm = 0x4100
callq 0x2180
movq 0x29fd(%rip), %rax      # 0x5ff0
movl 0x2c17(%rip), %edi      # 0x6210
callq *(%rax)
movq 0x291e(%rip), %r15      # 0x5f20
movl 0x2b80(%rip), %edi      # 0x6188
movl $0x1, %esi
xorl %edx, %edx
movq %r14, %rcx
callq *(%r15)
movl 0x2b71(%rip), %edi      # 0x618c
movl $0x1, %esi
xorl %edx, %edx
movq %rbx, %rcx
callq *(%r15)
movl 0x2b62(%rip), %edi      # 0x6190
leaq 0x2beb(%rip), %rcx      # 0x6220
movl $0x1, %esi
xorl %edx, %edx
callq *(%r15)
movq 0x2942(%rip), %rax      # 0x5f88
movl 0x2b48(%rip), %edi      # 0x6194
xorps %xmm0, %xmm0
xorps %xmm1, %xmm1
movss 0x34(%rsp), %xmm2
callq *(%rax)
movq 0x2917(%rip), %rbx      # 0x5f78
movl 0x2b1d(%rip), %edi      # 0x6184
movss 0xa1d(%rip), %xmm0      # 0x408c
callq *(%rbx)
movl 0x2b09(%rip), %edi      # 0x6180
xorps %xmm0, %xmm0
cvtsd2ss 0x38(%rsp), %xmm0
callq *(%rbx)
movl $0x4, %edi
xorl %esi, %esi
movl $0x24, %edx
callq 0x2250
addq $0x100, %rsp            # imm = 0x100
popq %rbx
popq %r14
popq %r15
retq