user: 下面的汇编指令对应的C源代码是什么:

```asm
<menu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x130,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D162(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D250(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D287(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D13(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D51(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    D117(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,-0x120(%rbp)
  lea    -0xe0(%rbp),%rax
  add    $0x32,%rax
  mov    %rax,-0x118(%rbp)
  lea    -0xe0(%rbp),%rax
  add    $0x64,%rax
  mov    %rax,-0x110(%rbp)
  jmp    L24
L36:
  lea    D241(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  movzbl -0x40(%rbp),%eax
  movsbl %al,%eax
  sub    $0x31,%eax
  cmp    $0x4,%eax
  ja     L77
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D49(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D49(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  add    $0x32,%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D61(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  add    $0x64,%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    -0x130(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x5,%edi
  call   <add@plt>
  jmp    L24
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    -0x130(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x3,%edi
  call   <del@plt>
  jmp    L24
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D158(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  add    $0x32,%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  add    $0x64,%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    -0x130(%rbp),%rax
  mov    %rax,%rsi
  mov    $0x5,%edi
  call   <edit@plt>
  jmp    L24
  lea    D121(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  lea    -0xe0(%rbp),%rax
  add    $0x32,%rax
  mov    %rax,%rsi
  lea    D224(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  mov    $0x0,%eax
  call   <getchar@plt>
  lea    -0x130(%rbp),%rax
  mov    $0x1,%edx
  mov    %rax,%rsi
  mov    $0x4,%edi
  call   <verify@plt>
  jmp    L24
L77:
  lea    D199(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L24:
  movzbl -0x40(%rbp),%eax
  cmp    $0x35,%al
  jne    L36
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L64
  call   <__stack_chk_fail@plt>
L64:
  leave
  ret
```

tool_calls: name: parse_data
arguments: tag: D162
datatype: string
name: parse_data
arguments: tag: D250
datatype: string
name: parse_data
arguments: tag: D287
datatype: string
name: parse_data
arguments: tag: D13
datatype: string
name: parse_data
arguments: tag: D51
datatype: string
name: parse_data
arguments: tag: D117
datatype: string
name: parse_data
arguments: tag: D241
datatype: string
name: parse_data
arguments: tag: D224
datatype: string
name: parse_data
arguments: tag: D121
datatype: string
name: parse_data
arguments: tag: D16
datatype: string
name: parse_data
arguments: tag: D61
datatype: string
name: parse_data
arguments: tag: D7
datatype: string
name: parse_data
arguments: tag: D158
datatype: string
name: parse_data
arguments: tag: D91
datatype: string
name: parse_data
arguments: tag: D199
datatype: string

tool: D162: Password database control


tool: D250: 1. Add a user


tool: D287: 2. Delete a user


tool: D13: 3. Edit a user


tool: D51: 4. Verify a user


tool: D117: 5. Quit


tool: D241: Input an option: 

tool: D224: %s

tool: D121: Input username: 

tool: D16: Input password: 

tool: D61: Input type: 

tool: D7: Input username to delete: 

tool: D158: Input new password: 

tool: D91: Input new type: 

tool: D199: Error: Invalid option


assistant: ```c
void menu() {
  printf("Password database control\n");
  printf("1. Add a user\n");
  printf("2. Delete a user\n");
  printf("3. Edit a user\n");
  printf("4. Verify a user\n");
  printf("5. Quit\n");
  char option[50];
  char array[3][50];
  char *input[10];
  input[2] = array[0];
  input[3] = array[1];
  input[4] = array[2];
  char buffer;
  while (option[0] != '5') {
    printf("Input an option: ");
    scanf("%s", option);
    getchar();
    switch (option[0]) {
    case '1':
      printf("Input username: ");
      scanf("%s", array[0]);
      getchar();
      printf("Input password: ");
      scanf("%s", array[1]);
      getchar();
      printf("Input type: ");
      scanf("%s", array[2]);
      getchar();
      add(5, input);
      continue;
    case '2':
      printf("Input username to delete: ");
      scanf("%s", array[0]);
      getchar();
      del(3, input);
      continue;
    case '3':
      printf("Input username: ");
      scanf("%s", array[0]);
      getchar();
      printf("Input new password: ");
      scanf("%s", array[1]);
      getchar();
      printf("Input new type: ");
      scanf("%s", array[2]);
      getchar();
      edit(5, input);
      continue;
    case '4':
      printf("Input username: ");
      scanf("%s", array[0]);
      getchar();
      printf("Input password: ");
      scanf("%s", array[1]);
      getchar();
      verify(4, input, 1);
      continue;
    case '5':
      break;
    default:
      printf("Error: Invalid option\n");
    }
  }
}
```