user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x14(%rbp)
  lea    -0x10(%rbp),%rax
  mov    %rax,%rsi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L164
L135:
  movsd  -0x10(%rbp),%xmm0
  movsd  D32(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L164:
  movsd  -0x10(%rbp),%xmm0
  comisd D32(%rip),%xmm0
  jae    L135
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D344(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L218
L181:
  movsd  -0x10(%rbp),%xmm0
  movsd  D7(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L218:
  movsd  -0x10(%rbp),%xmm0
  comisd D7(%rip),%xmm0
  jae    L181
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D171(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L86
L122:
  movsd  -0x10(%rbp),%xmm0
  movsd  D14(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L86:
  movsd  -0x10(%rbp),%xmm0
  comisd D14(%rip),%xmm0
  jae    L122
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D62(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L29
L145:
  movsd  -0x10(%rbp),%xmm0
  movsd  D4(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L29:
  movsd  -0x10(%rbp),%xmm0
  comisd D4(%rip),%xmm0
  jae    L145
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D230(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L158
L77:
  movsd  -0x10(%rbp),%xmm0
  movsd  D157(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L158:
  movsd  -0x10(%rbp),%xmm0
  comisd D157(%rip),%xmm0
  jae    L77
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D123(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L234
L193:
  movsd  -0x10(%rbp),%xmm0
  movsd  D78(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L234:
  movsd  -0x10(%rbp),%xmm0
  comisd D78(%rip),%xmm0
  jae    L193
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D101(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  lea    D270(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  jmp    L185
L226:
  movsd  -0x10(%rbp),%xmm0
  movsd  D140(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L185:
  movsd  -0x10(%rbp),%xmm0
  movsd  D140(%rip),%xmm1
  comisd %xmm1,%xmm0
  jae    L226
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D136(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L35
L53:
  movsd  -0x10(%rbp),%xmm0
  movsd  D257(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L35:
  movsd  -0x10(%rbp),%xmm0
  comisd D257(%rip),%xmm0
  jae    L53
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L76
L142:
  movsd  -0x10(%rbp),%xmm0
  movsd  D58(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L76:
  movsd  -0x10(%rbp),%xmm0
  comisd D58(%rip),%xmm0
  jae    L142
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D212(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L116
L186:
  movsd  -0x10(%rbp),%xmm0
  movsd  D161(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L116:
  movsd  -0x10(%rbp),%xmm0
  comisd D161(%rip),%xmm0
  jae    L186
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D134(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L112
L30:
  movsd  -0x10(%rbp),%xmm0
  movsd  D173(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L112:
  movsd  -0x10(%rbp),%xmm0
  comisd D173(%rip),%xmm0
  jae    L30
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D225(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movl   $0x0,-0x14(%rbp)
  jmp    L96
L131:
  movsd  -0x10(%rbp),%xmm0
  movsd  D164(%rip),%xmm1
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
L96:
  movsd  -0x10(%rbp),%xmm0
  comisd D164(%rip),%xmm0
  jae    L131
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D99(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L239
  call   <__stack_chk_fail@plt>
L239:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D10
type: string
name: retrieve_data
arguments: label: D9
type: string
name: retrieve_data
arguments: label: D32
type: byte[16]
name: retrieve_data
arguments: label: D344
type: string
name: retrieve_data
arguments: label: D7
type: byte[16]
name: retrieve_data
arguments: label: D171
type: string
name: retrieve_data
arguments: label: D14
type: byte[16]
name: retrieve_data
arguments: label: D62
type: string
name: retrieve_data
arguments: label: D4
type: byte[16]
name: retrieve_data
arguments: label: D230
type: string
name: retrieve_data
arguments: label: D157
type: byte[16]
name: retrieve_data
arguments: label: D123
type: string
name: retrieve_data
arguments: label: D78
type: byte[16]
name: retrieve_data
arguments: label: D101
type: string
name: retrieve_data
arguments: label: D270
type: string
name: retrieve_data
arguments: label: D140
type: byte[8]
name: retrieve_data
arguments: label: D136
type: string
name: retrieve_data
arguments: label: D257
type: f64[2]
name: retrieve_data
arguments: label: D3
type: string
name: retrieve_data
arguments: label: D58
type: f64[2]
name: retrieve_data
arguments: label: D212
type: string
name: retrieve_data
arguments: label: D161
type: f64[2]
name: retrieve_data
arguments: label: D134
type: string
name: retrieve_data
arguments: label: D173
type: f64[2]
name: retrieve_data
arguments: label: D225
type: string
name: retrieve_data
arguments: label: D164
type: f64
name: retrieve_data
arguments: label: D99
type: string

tool: D10: %lf

tool: D9: NOTAS:

tool: {"D32": [0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x40]}

tool: D344: %d nota(s) de R$ 100.00


tool: {"D7": [0x00,0x00,0x00,0x00,0x00,0x00,0x49,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x40]}

tool: D171: %d nota(s) de R$ 50.00


tool: {"D14": [0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40]}

tool: D62: %d nota(s) de R$ 20.00


tool: {"D4": [0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: D230: %d nota(s) de R$ 10.00


tool: {"D157": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40]}

tool: D123: %d nota(s) de R$ 5.00


tool: {"D78": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D101: %d nota(s) de R$ 2.00


tool: D270: MOEDAS:

tool: {"D140": [0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f]}

tool: D136: %d moeda(s) de R$ 1.00


tool: {"D257": [0.5,0.25]}

tool: D3: %d moeda(s) de R$ 0.50


tool: {"D58": [0.25,0.1]}

tool: D212: %d moeda(s) de R$ 0.25


tool: {"D161": [0.1,0.05]}

tool: D134: %d moeda(s) de R$ 0.10


tool: {"D173": [0.05,0.01]}

tool: D225: %d moeda(s) de R$ 0.05


tool: D164: 0.01

tool: D99: %d moeda(s) de R$ 0.01


assistant: ```c
int main() {
  double N;
  int cont = 0;
  scanf("%lf", &N);
  printf("NOTAS:\n");
  while (N >= 100) {
    N = N - 100;
    cont++;
  }
  printf("%d nota(s) de R$ 100.00\n", cont);
  cont = 0;
  while (N >= 50) {
    N = N - 50;
    cont++;
  }
  printf("%d nota(s) de R$ 50.00\n", cont);
  cont = 0;
  while (N >= 20) {
    N = N - 20;
    cont++;
  }
  printf("%d nota(s) de R$ 20.00\n", cont);
  cont = 0;
  while (N >= 10) {
    N = N - 10;
    cont++;
  }
  printf("%d nota(s) de R$ 10.00\n", cont);
  cont = 0;
  while (N >= 5) {
    N = N - 5;
    cont++;
  }
  printf("%d nota(s) de R$ 5.00\n", cont);
  cont = 0;
  while (N >= 2) {
    N = N - 2;
    cont++;
  }
  printf("%d nota(s) de R$ 2.00\n", cont);
  cont = 0;
  printf("MOEDAS:\n");
  while (N >= 1) {
    N = N - 1;
    cont++;
  }
  printf("%d moeda(s) de R$ 1.00\n", cont);
  cont = 0;
  while (N >= 0.50) {
    N = N - 0.50;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.50\n", cont);
  cont = 0;
  while (N >= 0.25) {
    N = N - 0.25;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.25\n", cont);
  cont = 0;
  while (N >= 0.10) {
    N = N - 0.10;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.10\n", cont);
  cont = 0;
  while (N >= 0.05) {
    N = N - 0.05;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.05\n", cont);
  cont = 0;
  while (N >= 0.01) {
    N = N - 0.01;
    cont++;
  }
  printf("%d moeda(s) de R$ 0.01\n", cont);
  return 0;
}
```