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

```asm
<main>:
  endbr64
  sub    $0x18,%rsp
  lea    D110(%rip),%rdi
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    D148(%rip),%rdi
  call   <printf@plt>
  lea    0x4(%rsp),%rsi
  lea    D121(%rip),%rdi
  call   <scanf@plt>
  cmpl   $0x5,0x4(%rsp)
  ja     L39
  mov    0x4(%rsp),%eax
  lea    D96(%rip),%rdx
  movslq (%rdx,%rax,4),%rax
  add    %rdx,%rax
  notrack jmp *%rax
  lea    D70(%rip),%rdi
  call   <puts@plt>
  lea    D119(%rip),%rdi
  call   <puts@plt>
  nopl   0x0(%rax)
L55:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L45
  xor    %eax,%eax
  add    $0x18,%rsp
  ret
  lea    D97(%rip),%rdi
  call   <puts@plt>
  lea    D115(%rip),%rdi
  call   <puts@plt>
  jmp    L55
  lea    D79(%rip),%rdi
  call   <puts@plt>
  lea    D23(%rip),%rdi
  call   <puts@plt>
  jmp    L55
  lea    D41(%rip),%rdi
  call   <puts@plt>
  lea    D10(%rip),%rdi
  call   <puts@plt>
  jmp    L55
  lea    D6(%rip),%rdi
  call   <puts@plt>
  lea    D0(%rip),%rdi
  call   <puts@plt>
  jmp    L55
L39:
  lea    D113(%rip),%rdi
  call   <puts@plt>
  lea    D114(%rip),%rdi
  call   <puts@plt>
  jmp    L55
L45:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D110
type_infered: string
name: extract_symbolic_data
arguments: data_label: D148
type_infered: string
name: extract_symbolic_data
arguments: data_label: D121
type_infered: string
name: extract_symbolic_data
arguments: data_label: D70
type_infered: string
name: extract_symbolic_data
arguments: data_label: D119
type_infered: string
name: extract_symbolic_data
arguments: data_label: D97
type_infered: string
name: extract_symbolic_data
arguments: data_label: D115
type_infered: string
name: extract_symbolic_data
arguments: data_label: D79
type_infered: string
name: extract_symbolic_data
arguments: data_label: D23
type_infered: string
name: extract_symbolic_data
arguments: data_label: D41
type_infered: string
name: extract_symbolic_data
arguments: data_label: D10
type_infered: string
name: extract_symbolic_data
arguments: data_label: D6
type_infered: string
name: extract_symbolic_data
arguments: data_label: D0
type_infered: string
name: extract_symbolic_data
arguments: data_label: D113
type_infered: string
name: extract_symbolic_data
arguments: data_label: D114
type_infered: string

tool: D110: Enter the error code number


tool: D148: Range 1 through 5 : 

tool: D121: %d

tool: D70: Divide by Zero

tool: D119: Solution: Mess with the numbers until it works.

tool: D97: San Andreas Fault

tool: D115: Solution: Move your house.

tool: D79: Illegal Operation

tool: D23: Solution: Find another doctor.

tool: D41: Bad Filename

tool: D10: Solution: Spank the filename and put it to bed without any supper.

tool: D6: Missing Socket

tool: D0: Solution: Look in the dryer.

tool: D113: Error code value out of range

tool: D114: Solution: Read the directions next time.

assistant: ```c
int main() {
  int code;
  printf("Enter the error code number\n");
  printf("Range 1 through 5 : ");
  scanf("%d", &code);
  switch (code) {
  case 1: {
    puts("San Andreas Fault");
    puts("Solution: Move your house.");
    break;
  }
  case 2: {
    puts("Illegal Operation");
    puts("Solution: Find another doctor.");
    break;
  }
  case 3: {
    puts("Bad Filename");
    puts("Solution: Spank the filename and put it to bed without any supper.");
    break;
  }
  case 4: {
    puts("Missing Socket");
    puts("Solution: Look in the dryer.");
    break;
  }
  case 5: {
    puts("Divide by Zero");
    puts("Solution: Mess with the numbers until it works.");
    break;
  }
  default: {
    puts("Error code value out of range");
    puts("Solution: Read the directions next time.");
  }
  }
  return 0;
}
```