user: Translate the below assembly code into C programming language:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x29(%rbp),%rsi
  lea    -0x2a(%rbp),%rcx
  lea    -0x2b(%rbp),%rdx
  lea    -0x2c(%rbp),%rax
  mov    %rsi,%r8
  mov    %rax,%rsi
  lea    D118(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  lea    -0x18(%rbp),%rcx
  lea    -0x20(%rbp),%rdx
  lea    -0x28(%rbp),%rax
  mov    %rax,%rsi
  lea    D7(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <scanf@plt>
  movzbl -0x2c(%rbp),%eax
  cmp    $0x43,%al
  jne    L10
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L25
L11:
  movsd  -0x10(%rbp),%xmm1
  movsd  D35(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D98(%rip),%xmm2
  movapd %xmm0,%xmm1
  divsd  %xmm2,%xmm1
  movsd  D99(%rip),%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x10(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L25:
  movsd  -0x20(%rbp),%xmm1
  movsd  D121(%rip),%xmm0
  addsd  %xmm1,%xmm0
  comisd -0x10(%rbp),%xmm0
  jae    L11
L10:
  movzbl -0x2c(%rbp),%eax
  cmp    $0x46,%al
  jne    L62
  lea    D68(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  jmp    L7
L60:
  movsd  -0x10(%rbp),%xmm0
  movsd  D99(%rip),%xmm2
  movapd %xmm0,%xmm1
  subsd  %xmm2,%xmm1
  movsd  D98(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  D35(%rip),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x10(%rbp),%rax
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  lea    D95(%rip),%rax
  mov    %rax,%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  -0x18(%rbp),%xmm0
  movsd  -0x10(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x10(%rbp)
L7:
  movsd  -0x20(%rbp),%xmm1
  movsd  D121(%rip),%xmm0
  addsd  %xmm1,%xmm0
  comisd -0x10(%rbp),%xmm0
  jae    L60
L62:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L59
  call   <__stack_chk_fail@plt>
L59:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: tag: D118
data_type: string
name: unpack_data
arguments: tag: D7
data_type: string
name: unpack_data
arguments: tag: D76
data_type: string
name: unpack_data
arguments: tag: D35
data_type: byte[8]
name: unpack_data
arguments: tag: D98
data_type: byte[8]
name: unpack_data
arguments: tag: D99
data_type: byte[8]
name: unpack_data
arguments: tag: D95
data_type: string
name: unpack_data
arguments: tag: D121
data_type: f64
name: unpack_data
arguments: tag: D68
data_type: string

tool: D118: %c%c%c%c

tool: D7: %lf %lf %lf

tool: D76:    C  ->    F

tool: {"D35": [0x00,0x00,0x00,0x00,0x00,0x00,0x22,0x40]}

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

tool: {"D99": [0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40]}

tool: D95: %5.1lf -> %5.1lf


tool: D121: 0.01

tool: D68:    F  ->    C

assistant: ```c
int main() {
  double a, b, i, s;
  char w, x, y, z;
  scanf("%c%c%c%c", &w, &x, &y, &z);
  scanf("%lf %lf %lf", &a, &b, &s);
  if (w == 'C') {
    printf("   C  ->    F\n");
    for (i = a; i <= b + 0.01; i += s)
      printf("%5.1lf -> %5.1lf\n", i, (9 * i / 5 + 32));
  }
  if (w == 'F') {
    printf("   F  ->    C\n");
    for (i = a; i <= b + 0.01; i += s)
      printf("%5.1lf -> %5.1lf\n", i, ((i - 32) * 5 / 9));
  }
}
```