user: What is the c source code of the assembly code below:

```asm
<print_equation3>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  mov    %edi,%ebp
  mov    %esi,%r12d
  mov    %edx,%ebx
  lea    D86(%rip),%rdi
  call   <puts@plt>
  test   %ebp,%ebp
  jne    L148
  lea    D40(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    $0x1,%r12d
  sete   %al
  test   %ebx,%ebx
  setne  %dl
  cmp    $0xffffffff,%r12d
  sete   %sil
  mov    $0x0,%edi
  mov    $0x0,%r8d
L201:
  test   %ebx,%ebx
  sete   %cl
  jne    L299
  test   %dil,%dil
  jne    L281
L299:
  test   %cl,%cl
  je     L129
  test   %r8b,%r8b
  jne    L72
L129:
  test   %al,%al
  je     L138
  test   %dl,%dl
  jne    L195
L138:
  test   %sil,%sil
  je     L232
  test   %dl,%dl
  jne    L171
L232:
  test   %cl,%cl
  je     L301
  test   %al,%al
  jne    L66
L301:
  test   %cl,%cl
  je     L216
  test   %sil,%sil
  je     L216
  lea    D58(%rip),%rdi
  call   <puts@plt>
  jmp    L3
L148:
  mov    %ebp,%esi
  lea    D36(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  cmp    $0x1,%r12d
  sete   %al
  test   %ebx,%ebx
  setne  %dl
  test   %al,%al
  je     L261
  test   %dl,%dl
  jne    L64
L261:
  cmp    $0xffffffff,%r12d
  sete   %sil
  jne    L247
  test   %dl,%dl
  je     L247
  lea    D91(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L216
L64:
  lea    D100(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L216:
  test   %ebx,%ebx
  jle    L21
  mov    %ebx,%esi
  lea    D47(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L3:
  test   %ebp,%ebp
  jg     L318
  js     L93
L200:
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L247:
  mov    %eax,%edi
  mov    %esi,%r8d
  jmp    L201
L281:
  lea    D3(%rip),%rdi
  call   <puts@plt>
  jmp    L3
L72:
  lea    D71(%rip),%rdi
  call   <puts@plt>
  jmp    L3
L195:
  lea    D103(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L216
L171:
  lea    D147(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L216
L66:
  lea    D92(%rip),%rdi
  call   <puts@plt>
  jmp    L3
L21:
  jns    L3
  mov    %ebx,%esi
  neg    %esi
  cmovs  %ebx,%esi
  lea    D76(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L3
L318:
  lea    D32(%rip),%rdi
  call   <puts@plt>
  jmp    L200
L93:
  lea    D38(%rip),%rdi
  call   <puts@plt>
  jmp    L200
```

tool_calls: name: disassemble_data
arguments: tag: D86
type_guessed: string
name: disassemble_data
arguments: tag: D40
type_guessed: string
name: disassemble_data
arguments: tag: D58
type_guessed: string
name: disassemble_data
arguments: tag: D36
type_guessed: string
name: disassemble_data
arguments: tag: D91
type_guessed: string
name: disassemble_data
arguments: tag: D100
type_guessed: string
name: disassemble_data
arguments: tag: D47
type_guessed: string
name: disassemble_data
arguments: tag: D3
type_guessed: string
name: disassemble_data
arguments: tag: D71
type_guessed: string
name: disassemble_data
arguments: tag: D103
type_guessed: string
name: disassemble_data
arguments: tag: D147
type_guessed: string
name: disassemble_data
arguments: tag: D92
type_guessed: string
name: disassemble_data
arguments: tag: D76
type_guessed: string
name: disassemble_data
arguments: tag: D32
type_guessed: string
name: disassemble_data
arguments: tag: D38
type_guessed: string

tool: D86: 
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

tool: D40: The equation is y = 

tool: D58: -x

tool: D36: The equation is y = %dx^2 

tool: D91: - x 

tool: D100: + x 

tool: D47: + %d


tool: D3: + x

tool: D71: - x

tool: D103: x 

tool: D147: -x 

tool: D92: x

tool: D76: - %d


tool: D32: The parabola opens upward.

tool: D38: The parabola opens downward.

assistant: ```c
void print_equation3(int CoeffA, int CoeffB, int CoeffC) {
  printf("\n-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-\n");
  if (CoeffA == 0)
    printf("The equation is y = ");
  else
    printf("The equation is y = %dx^2 ", CoeffA);
  if (!(CoeffA == 0) && CoeffB == 1 && !(CoeffC == 0))
    printf("+ x ");
  else if (!(CoeffA == 0) && CoeffB == -1 && !(CoeffC == 0))
    printf("- x ");
  else if (!(CoeffA == 0) && CoeffB == 1 && CoeffC == 0)
    printf("+ x\n");
  else if (!(CoeffA == 0) && CoeffB == -1 && CoeffC == 0)
    printf("- x\n");
  else if (!(CoeffC == 0) && CoeffB == 1)
    printf("x ");
  else if (!(CoeffC == 0) && CoeffB == -1)
    printf("-x ");
  else if (CoeffB == 1 && CoeffC == 0)
    printf("x\n");
  else if (CoeffB == -1 && CoeffC == 0)
    printf("-x\n");
  if (CoeffC > 0)
    printf("+ %d\n", CoeffC);
  else if (CoeffC < 0)
    printf("- %d\n", abs(CoeffC));
  if (CoeffA > 0)
    printf("The parabola opens upward.\n");
  else if (CoeffA < 0)
    printf("The parabola opens downward.\n");
  return;
}
```