user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x1c(%rbp)
L124:
  lea    D148(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D20(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D143(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D104(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D111(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x21(%rbp),%rax
  mov    %rax,%rsi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movzbl -0x21(%rbp),%eax
  cmp    $0x69,%al
  jne    L96
  movl   $0x1,-0x1c(%rbp)
L31:
  lea    D147(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D90(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
L96:
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    -0x21(%rbp),%rax
  mov    %rax,%rsi
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movl   $0x0,-0x1c(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  je     L6
  lea    D89(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L31
L6:
  movzbl -0x21(%rbp),%eax
  cmp    $0x73,%al
  jne    L112
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <sumOfDigits@plt>
  mov    %eax,-0xc(%rbp)
  mov    -0xc(%rbp),%eax
  mov    %eax,%esi
  lea    D17(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L124
L112:
  movzbl -0x21(%rbp),%eax
  cmp    $0x72,%al
  jne    L8
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <revDigits@plt>
  mov    %eax,-0x10(%rbp)
  mov    -0x10(%rbp),%eax
  mov    %eax,%esi
  lea    D114(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L124
L8:
  movzbl -0x21(%rbp),%eax
  cmp    $0x63,%al
  jne    L42
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <cntDigits@plt>
  mov    %eax,-0x14(%rbp)
  mov    -0x14(%rbp),%eax
  mov    %eax,%esi
  lea    D154(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L124
L42:
  movzbl -0x21(%rbp),%eax
  cmp    $0x6f,%al
  jne    L115
  mov    -0x20(%rbp),%eax
  mov    %eax,%edi
  call   <cntOddDigits@plt>
  mov    %eax,-0x18(%rbp)
  mov    -0x18(%rbp),%eax
  mov    %eax,%esi
  lea    D10(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L124
L115:
  movzbl -0x21(%rbp),%eax
  cmp    $0x71,%al
  jne    L124
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L26
  call   <__stack_chk_fail@plt>
L26:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D148
datatype: string
name: unpack_data
arguments: data_tag: D20
datatype: string
name: unpack_data
arguments: data_tag: D143
datatype: string
name: unpack_data
arguments: data_tag: D104
datatype: string
name: unpack_data
arguments: data_tag: D111
datatype: string
name: unpack_data
arguments: data_tag: D67
datatype: string
name: unpack_data
arguments: data_tag: D48
datatype: string
name: unpack_data
arguments: data_tag: D147
datatype: string
name: unpack_data
arguments: data_tag: D90
datatype: string
name: unpack_data
arguments: data_tag: D95
datatype: string
name: unpack_data
arguments: data_tag: D63
datatype: string
name: unpack_data
arguments: data_tag: D89
datatype: string
name: unpack_data
arguments: data_tag: D17
datatype: string
name: unpack_data
arguments: data_tag: D114
datatype: string
name: unpack_data
arguments: data_tag: D154
datatype: string
name: unpack_data
arguments: data_tag: D10
datatype: string

tool: D148: MENU: 
i:> Input integer

tool: D20: s:> Sum of digit

tool: D143: r:> reverse digit

tool: D104: c:> count digit

tool: D111: o:> no. of odd digits

tool: D67: q:> quit

tool: D48: %c

tool: D147: Enter number: 

tool: D90: %d

tool: D95: enter choice :

tool: D63:  %c

tool: D89: No data supplied

tool: D17: The sum of digits is: %d


tool: D114: Reversed digits is: %d


tool: D154: Digit count is: %d


tool: D10: No. of odd digits is: %d


assistant: ```c
main() {
  int data, flag = 0, s, r, c, d;
  char choice;
  while (1) {
    printf("MENU: \ni:> Input integer\n");
    printf("s:> Sum of digit\n");
    printf("r:> reverse digit\n");
    printf("c:> count digit\n");
    printf("o:> no. of odd digits\n");
    printf("q:> quit\n");
    scanf("%c", &choice);
    if (choice == 'i') {
      flag = 1;
    Input:
      printf("Enter number: \n");
      scanf("%d", &data);
    }
    printf("enter choice :\n");
    scanf(" %c", &choice);
    if (flag = 0) {
      printf("No data supplied");
      goto Input;
    }
    if (choice == 's') {
      s = sumOfDigits(data);
      printf("The sum of digits is: %d\n", s);
    } else if (choice == 'r') {
      r = revDigits(data);
      printf("Reversed digits is: %d\n", r);
    } else if (choice == 'c') {
      c = cntDigits(data);
      printf("Digit count is: %d\n", c);
    } else if (choice == 'o') {
      d = cntOddDigits(data);
      printf("No. of odd digits is: %d\n", d);
    } else if (choice == 'q') {
      return 0;
    }
  }
}
```