user: What would the C source look like for the assembly code provided here:

```asm
<main>:
  endbr64
  push   %r15
  pxor   %xmm1,%xmm1
  push   %r14
  lea    D97(%rip),%r14
  push   %r13
  lea    D61(%rip),%r13
  push   %r12
  lea    D124(%rip),%r12
  push   %rbp
  movd   %xmm1,%ebp
  push   %rbx
  lea    D285(%rip),%rbx
  sub    $0x88,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x78(%rsp)
  xor    %eax,%eax
  lea    0x1c(%rsp),%r15
  movabs $0x40b9999a40600000,%rax
  movl   $0x1,0x1c(%rsp)
  mov    %rax,0x20(%rsp)
  movabs $0x3ff3333340066666,%rax
  mov    %rax,0x28(%rsp)
  movabs $0x3d4ccccd3c23d70a,%rax
  mov    %rax,0x40(%rsp)
  movabs $0x3e8000003dcccccd,%rax
  mov    %rax,0x48(%rsp)
  movabs $0x3f8000003f000000,%rax
  movl   $0x3f333333,0x30(%rsp)
  mov    %rax,0x50(%rsp)
  mov    %r15,(%rsp)
  jmp    L154
  nopw   0x0(%rax,%rax,1)
L183:
  cmp    $0x2,%eax
  jne    L138
  lea    D241(%rip),%rdi
  call   <puts@plt>
  lea    D282(%rip),%rdi
  call   <puts@plt>
  lea    D147(%rip),%rdi
  call   <puts@plt>
  lea    D17(%rip),%rdi
  call   <puts@plt>
  lea    D291(%rip),%rdi
  call   <puts@plt>
  lea    D118(%rip),%rdi
  call   <puts@plt>
  lea    D143(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movslq 0x14(%rsp),%rax
  movd   %ebp,%xmm4
  movss  0x20(%rsp,%rax,4),%xmm2
  comiss %xmm2,%xmm4
  jae    L123
  lea    D206(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    0x1c(%rsp),%eax
L138:
  cmp    $0x2,%eax
  jg     L88
L112:
  test   %eax,%eax
  je     L222
L154:
  movd   %ebp,%xmm6
  mov    %r14,%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd %xmm6,%xmm0
  call   <printf@plt>
  mov    %r13,%rdi
  call   <puts@plt>
  mov    %r12,%rdi
  call   <puts@plt>
  lea    D36(%rip),%rdi
  call   <puts@plt>
  lea    D290(%rip),%rdi
  call   <puts@plt>
  lea    D121(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    (%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  mov    0x1c(%rsp),%eax
  cmp    $0x1,%eax
  jne    L183
  lea    D60(%rip),%rdi
  call   <puts@plt>
  lea    D236(%rip),%rdi
  call   <puts@plt>
  lea    D137(%rip),%rdi
  call   <puts@plt>
  lea    D308(%rip),%rdi
  call   <puts@plt>
  lea    D173(%rip),%rdi
  call   <puts@plt>
  lea    D37(%rip),%rdi
  call   <puts@plt>
  lea    D153(%rip),%rdi
  call   <puts@plt>
  lea    D12(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x18(%rsp),%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  movslq 0x18(%rsp),%rax
  movd   %ebp,%xmm3
  addss  0x40(%rsp,%rax,4),%xmm3
  mov    0x1c(%rsp),%eax
  movd   %xmm3,%ebp
  cmp    $0x2,%eax
  jle    L112
L88:
  lea    D71(%rip),%rdi
  call   <puts@plt>
  mov    0x1c(%rsp),%eax
  test   %eax,%eax
  jne    L154
L222:
  movd   %ebp,%xmm1
  pxor   %xmm5,%xmm5
  ucomiss %xmm5,%xmm1
  jp     L51
  jne    L51
L52:
  lea    D20(%rip),%rdi
  call   <puts@plt>
  mov    0x78(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L211
  add    $0x88,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L123:
  subss  %xmm2,%xmm4
  mov    $0x5,%ecx
  lea    0x60(%rsp),%r15
  movss  D300(%rip),%xmm1
  movaps %xmm4,%xmm0
  nopl   0x0(%rax)
L181:
  comiss %xmm1,%xmm0
  movl   $0x0,(%r15,%rcx,4)
  mov    $0x1,%eax
  jb     L47
  nopw   0x0(%rax,%rax,1)
L42:
  subss  %xmm1,%xmm0
  mov    %eax,%edx
  add    $0x1,%eax
  comiss %xmm1,%xmm0
  jae    L42
  mov    %edx,(%r15,%rcx,4)
L47:
  sub    $0x1,%rcx
  jb     L69
  movss  0x40(%rsp,%rcx,4),%xmm1
  jmp    L181
  nopl   0x0(%rax,%rax,1)
L69:
  lea    D49(%rip),%rdi
  xor    %ebp,%ebp
  call   <puts@plt>
  lea    D208(%rip),%rax
  movss  D53(%rip),%xmm0
  mov    %rax,0x8(%rsp)
  jmp    L225
  nopl   0x0(%rax)
L148:
  movss  0x40(%rsp,%rbp,1),%xmm0
L225:
  mov    (%r15,%rbp,1),%esi
  mov    0x8(%rsp),%rdi
  add    $0x4,%rbp
  cvtss2sd %xmm0,%xmm0
  mov    $0x1,%eax
  call   <printf@plt>
  cmp    $0x18,%rbp
  jne    L148
  mov    0x1c(%rsp),%eax
  xor    %ebp,%ebp
  jmp    L138
L51:
  mov    $0x14,%ecx
  lea    0x60(%rsp),%r12
  lea    0x40(%rsp),%rbp
  nopl   0x0(%rax)
L136:
  movss  0x0(%rbp,%rcx,1),%xmm0
  movl   $0x0,(%r12,%rcx,1)
  mov    $0x1,%eax
  comiss %xmm0,%xmm1
  jb     L188
  nopl   0x0(%rax,%rax,1)
L132:
  subss  %xmm0,%xmm1
  mov    %eax,%edx
  add    $0x1,%eax
  comiss %xmm0,%xmm1
  jae    L132
  mov    %edx,(%r12,%rcx,1)
L188:
  sub    $0x4,%rcx
  cmp    $0xfffffffffffffffc,%rcx
  jne    L136
  lea    D254(%rip),%rdi
  xor    %ebx,%ebx
  lea    D208(%rip),%r13
  call   <puts@plt>
  nopl   0x0(%rax)
L71:
  mov    (%r12,%rbx,1),%esi
  pxor   %xmm0,%xmm0
  mov    %r13,%rdi
  mov    $0x1,%eax
  cvtss2sd 0x0(%rbp,%rbx,1),%xmm0
  add    $0x4,%rbx
  call   <printf@plt>
  cmp    $0x18,%rbx
  jne    L71
  jmp    L52
L211:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D97
data_type: string
name: parse_data
arguments: data_label: D61
data_type: string
name: parse_data
arguments: data_label: D124
data_type: string
name: parse_data
arguments: data_label: D285
data_type: string
name: parse_data
arguments: data_label: D241
data_type: string
name: parse_data
arguments: data_label: D282
data_type: string
name: parse_data
arguments: data_label: D147
data_type: string
name: parse_data
arguments: data_label: D17
data_type: string
name: parse_data
arguments: data_label: D291
data_type: string
name: parse_data
arguments: data_label: D118
data_type: string
name: parse_data
arguments: data_label: D143
data_type: string
name: parse_data
arguments: data_label: D206
data_type: string
name: parse_data
arguments: data_label: D36
data_type: string
name: parse_data
arguments: data_label: D290
data_type: string
name: parse_data
arguments: data_label: D121
data_type: string
name: parse_data
arguments: data_label: D60
data_type: string
name: parse_data
arguments: data_label: D236
data_type: string
name: parse_data
arguments: data_label: D137
data_type: string
name: parse_data
arguments: data_label: D308
data_type: string
name: parse_data
arguments: data_label: D173
data_type: string
name: parse_data
arguments: data_label: D37
data_type: string
name: parse_data
arguments: data_label: D153
data_type: string
name: parse_data
arguments: data_label: D12
data_type: string
name: parse_data
arguments: data_label: D71
data_type: string
name: parse_data
arguments: data_label: D20
data_type: string
name: parse_data
arguments: data_label: D300
data_type: f32
name: parse_data
arguments: data_label: D49
data_type: string
name: parse_data
arguments: data_label: D208
data_type: string
name: parse_data
arguments: data_label: D53
data_type: f32
name: parse_data
arguments: data_label: D254
data_type: string

tool: D97: 

Seu saldo e de: R$%.2f



tool: D61: Escolha a opcao:


tool: D124: 0 - Sair

tool: D285: %i

tool: D241: 

Escolha o Refrigerante


tool: D282: 0 - Coca-Cola - R$3.50

tool: D147: 1 - Ice - R$5.80

tool: D17: 2 - Guarana - R$2.10

tool: D291: 3 - Suco - R$1.90

tool: D118: 4 - Cafe - R$0.70

tool: D143: 
Refrigerante:

tool: D206: 

====== Saldo Insuficiente ======

tool: D36: 1 - Depositar Moeda

tool: D290: 2 - Escolher refrigerante


tool: D121: Opcao:

tool: D60: 

Deposite a sua moeda


tool: D236: 0 - 1 Centavo

tool: D137: 1 - 5 Centavos

tool: D308: 2 - 10 Centavos

tool: D173: 3 - 25 Centavos

tool: D37: 4 - 50 Centavos

tool: D153: 5 - 1 Real

tool: D12: Moeda:

tool: D71: Opcao invalida!


tool: D20: 

Obrigado! Volte sempre!


tool: D300: 1

tool: D49: 

O seu troco e:


tool: D208: Moedas de R$%.2f: %i


tool: D53: 0.01

tool: D254: 

O seu troco e


assistant: ```c
int main(void) {
  float refrigerantes[5], valor[6], troco;
  float saldo = 0;
  int TROCO[6], indice, moeda, cont;
  int caso = 1;
  refrigerantes[0] = 3.50;
  refrigerantes[1] = 5.80;
  refrigerantes[2] = 2.10;
  refrigerantes[3] = 1.90;
  refrigerantes[4] = 0.70;
  valor[0] = 0.01;
  valor[1] = 0.05;
  valor[2] = 0.10;
  valor[3] = 0.25;
  valor[4] = 0.50;
  valor[5] = 1.00;
  while (caso) {
    printf("\n\nSeu saldo e de: R$%.2f\n\n", saldo);
    printf("Escolha a opcao:\n\n");
    printf("0 - Sair\n");
    printf("1 - Depositar Moeda\n");
    printf("2 - Escolher refrigerante\n\n");
    printf("Opcao:");
    scanf("%i", &caso);
    switch (caso) {
    case 1:
      printf("\n\nDeposite a sua moeda\n\n");
      printf("0 - 1 Centavo\n");
      printf("1 - 5 Centavos\n");
      printf("2 - 10 Centavos\n");
      printf("3 - 25 Centavos\n");
      printf("4 - 50 Centavos\n");
      printf("5 - 1 Real\n");
      printf("Moeda:");
      scanf("%i", &moeda);
      saldo = saldo + valor[moeda];
      break;
    case 2:
      printf("\n\nEscolha o Refrigerante\n\n");
      printf("0 - Coca-Cola - R$3.50\n");
      printf("1 - Ice - R$5.80\n");
      printf("2 - Guarana - R$2.10\n");
      printf("3 - Suco - R$1.90\n");
      printf("4 - Cafe - R$0.70\n");
      printf("\nRefrigerante:");
      scanf("%i", &indice);
      if (saldo >= refrigerantes[indice]) {
        troco = saldo - refrigerantes[indice];
        cont = 5;
        while (cont >= 0) {
          TROCO[cont] = 0;
          while (troco >= valor[cont]) {
            TROCO[cont] = TROCO[cont] + 1;
            troco = troco - valor[cont];
          }
          cont = cont - 1;
        }
        cont = 0;
        printf("\n\nO seu troco e:\n\n");
        while (cont < 6) {
          printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
          cont++;
        }
        saldo = 0;
      } else {
        printf("\n\n====== Saldo Insuficiente ======");
      }
      break;
    }
    if (caso > 2) {
      printf("Opcao invalida!\n\n");
    }
  }
  if (saldo != 0) {
    cont = 5;
    while (cont >= 0) {
      TROCO[cont] = 0;
      while (saldo >= valor[cont]) {
        TROCO[cont] = TROCO[cont] + 1;
        saldo = saldo - valor[cont];
      }
      cont = cont - 1;
    }
    cont = 0;
    printf("\n\nO seu troco e\n\n");
    while (cont < 6) {
      printf("Moedas de R$%.2f: %i\n", valor[cont], TROCO[cont]);
      cont++;
    }
    saldo = 0;
  }
  printf("\n\nObrigado! Volte sempre!\n\n");
  return 0;
}
```