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

```asm
<menu_principal>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x58(%rbp)
  mov    %rsi,-0x60(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
L18:
  lea    -0x44(%rbp),%rax
  mov    %rax,%rsi
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    -0x44(%rbp),%eax
  test   %eax,%eax
  js     L18
  mov    -0x44(%rbp),%eax
  cmp    $0x6,%eax
  jg     L18
  mov    -0x44(%rbp),%eax
  test   %eax,%eax
  jne    L22
  mov    $0x0,%edi
  call   <exit@plt>
L22:
  lea    D114(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D43(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D118(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D31(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D78(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D12(%rip),%rax
  mov    %rax,-0x18(%rbp)
  lea    D61(%rip),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x44(%rbp),%eax
  cltq
  mov    -0x40(%rbp,%rax,8),%rdx
  mov    -0x58(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  mov    -0x58(%rbp),%rax
  mov    %rax,%rsi
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L15
  call   <__stack_chk_fail@plt>
L15:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D10
datatype: string
name: unpack_data
arguments: tag: D104
datatype: string
name: unpack_data
arguments: tag: D26
datatype: string
name: unpack_data
arguments: tag: D6
datatype: string
name: unpack_data
arguments: tag: D114
datatype: string
name: unpack_data
arguments: tag: D43
datatype: string
name: unpack_data
arguments: tag: D118
datatype: string
name: unpack_data
arguments: tag: D31
datatype: string
name: unpack_data
arguments: tag: D78
datatype: string
name: unpack_data
arguments: tag: D12
datatype: string
name: unpack_data
arguments: tag: D61
datatype: string
name: unpack_data
arguments: tag: D72
datatype: string

tool: D10: King of Tokyo


tool: D104: Jogador escolha um monstro:
---------------------------

tool: D26: 1-Godzilla
2-Feto Gigante Zumbi Nazista
3-Pac-Man
4-Blanca
5-Penha
6-Nemesis

0-SAIR


tool: D6: %d

tool: 

tool: D43: Godzilla

tool: D118: Feto Gigante Zumbi Nazista

tool: D31: Pac-Man

tool: D78: Blanca

tool: D12: Penha

tool: D61: Nemesis

tool: D72: VOCE ESCOLHEU: %s



assistant: ```c
void menu_principal(char *monstro1, char *monstro2) {
  printf("King of Tokyo\n\n");
  printf("Jogador escolha um monstro:\n---------------------------\n");
  printf("1-Godzilla\n2-Feto Gigante Zumbi Nazista\n3-Pac-Man\n4-Blanca\n5-Penha\n6-Nemesis\n\n0-SAIR\n\n");
  int escolha;
  do {
    scanf("%d", &escolha);
  } while (escolha < 0 || escolha > 6);
  if (escolha == 0)
    exit(0);
  char *monstros[] = {"", "Godzilla", "Feto Gigante Zumbi Nazista", "Pac-Man", "Blanca", "Penha", "Nemesis"};
  strcpy(monstro1, monstros[escolha]);
  printf("VOCE ESCOLHEU: %s\n\n", monstro1);
}
```