user: What is the c source code of the assembly code below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x70,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x1,-0x64(%rbp)
  movl   $0x0,-0x60(%rbp)
  movl   $0x0,-0x5c(%rbp)
  movl   $0x0,-0x58(%rbp)
  movl   $0x0,-0x54(%rbp)
  movl   $0x0,-0x50(%rbp)
  movl   $0x33333339,-0x26(%rbp)
  movw   $0x3634,-0x22(%rbp)
  movl   $0x38353535,-0x2b(%rbp)
  movb   $0x33,-0x27(%rbp)
  movl   $0x30313234,-0x37(%rbp)
  movw   $0x3130,-0x39(%rbp)
  movl   $0x2d383739,-0x33(%rbp)
  movl   $0x2d393739,-0x2f(%rbp)
  lea    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <scanf@plt>
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0x11,%eax
  je     L281
  movl   $0x0,-0x64(%rbp)
L281:
  movl   $0x0,-0x5c(%rbp)
  jmp    L179
L118:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  jne    L210
  addl   $0x1,-0x60(%rbp)
L210:
  cmpl   $0x2,-0x60(%rbp)
  jne    L294
  cmpl   $0x0,-0x50(%rbp)
  jne    L294
  mov    -0x5c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x50(%rbp)
L294:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x2f,%al
  jle    L38
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x39,%al
  jle    L436
L38:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  je     L436
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0xa,%al
  je     L436
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x20,%al
  je     L436
  movl   $0x0,-0x64(%rbp)
  jmp    L110
L436:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x2f,%al
  jle    L110
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x39,%al
  jg     L110
  addl   $0x1,-0x58(%rbp)
  cmpl   $0xc,-0x58(%rbp)
  jg     L110
  mov    -0x58(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L420
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  add    %eax,-0x54(%rbp)
  jmp    L110
L420:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  movsbl %al,%eax
  lea    -0x30(%rax),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  add    %eax,-0x54(%rbp)
L110:
  addl   $0x1,-0x5c(%rbp)
L179:
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    %eax,-0x5c(%rbp)
  jl     L118
  cmpl   $0x4,-0x60(%rbp)
  je     L280
  movl   $0x0,-0x64(%rbp)
  jmp    L59
L280:
  mov    -0x54(%rbp),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%esi
  sar    $0x1f,%esi
  sub    %esi,%eax
  mov    %eax,%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x54(%rbp)
  cmpl   $0x0,-0x54(%rbp)
  je     L262
  mov    $0xa,%eax
  sub    -0x54(%rbp),%eax
  mov    %eax,-0x54(%rbp)
L262:
  movzbl -0x10(%rbp),%eax
  movsbl %al,%eax
  sub    $0x30,%eax
  cmp    %eax,-0x54(%rbp)
  je     L59
  movl   $0x0,-0x64(%rbp)
L59:
  movl   $0x0,-0x5c(%rbp)
  jmp    L439
L163:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x33(%rbp,%rax,1),%eax
  cmp    %al,%dl
  je     L435
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x2f(%rbp,%rax,1),%eax
  cmp    %al,%dl
  je     L435
  movl   $0x0,-0x64(%rbp)
L435:
  addl   $0x1,-0x5c(%rbp)
L439:
  cmpl   $0x3,-0x5c(%rbp)
  jle    L163
  movl   $0x0,-0x4c(%rbp)
  movl   $0x0,-0x48(%rbp)
  movl   $0x0,-0x44(%rbp)
  movl   $0x0,-0x40(%rbp)
  cmpl   $0x0,-0x64(%rbp)
  je     L384
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x50(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  jmp    L299
L243:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cltq
  movzbl -0x26(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L168
  addl   $0x1,-0x4c(%rbp)
  jmp    L135
L168:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cltq
  movzbl -0x2b(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L45
  addl   $0x1,-0x48(%rbp)
  jmp    L135
L45:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cltq
  movzbl -0x37(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L146
  addl   $0x1,-0x44(%rbp)
  jmp    L135
L146:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%edx
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cltq
  movzbl -0x39(%rbp,%rax,1),%eax
  cmp    %al,%dl
  jne    L135
  addl   $0x1,-0x40(%rbp)
L135:
  addl   $0x1,-0x5c(%rbp)
L299:
  mov    -0x5c(%rbp),%eax
  cltq
  movzbl -0x20(%rbp,%rax,1),%eax
  cmp    $0x2d,%al
  jne    L243
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cmp    %eax,-0x4c(%rbp)
  jne    L233
  lea    D57(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L180
L233:
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cmp    %eax,-0x48(%rbp)
  jne    L332
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L180
L332:
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cmp    %eax,-0x44(%rbp)
  jne    L335
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L180
L335:
  mov    -0x5c(%rbp),%eax
  sub    -0x50(%rbp),%eax
  cmp    %eax,-0x40(%rbp)
  jne    L180
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L180
L384:
  lea    D34(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L180:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L34
  call   <__stack_chk_fail@plt>
L34:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: label: D5
type: string
name: disassemble_data
arguments: label: D47
type: string
name: disassemble_data
arguments: label: D57
type: string
name: disassemble_data
arguments: label: D38
type: string
name: disassemble_data
arguments: label: D6
type: string
name: disassemble_data
arguments: label: D35
type: string
name: disassemble_data
arguments: label: D34
type: string

tool: D5: %s

tool: D47: 1

tool: D57: 
Bluebridge

tool: D38: 
Alyson Books

tool: D6: 
FUNimation Productions, Ltd.

tool: D35: 
Pyramid Books

tool: D34: 0

assistant: ```c
int main() {
  char ISBN[20];
  int v = 1, d = 0, i = 0, count = 0, digit_check = 0, pub_ptr = 0;
  char pub1[6] = "933346", pub2[5] = "55583", pub3[4] = "4210", pub4[2] = "01";
  char ex1[4] = "978-", ex2[4] = "979-";
  int pub1_result, pub2_result, pub3_result, pub4_result;
  scanf("%s", ISBN);
  if (strlen(ISBN) != 17)
    v = 0;
  for (i = 0; i < strlen(ISBN); i++) {
    if (ISBN[i] == '-')
      d++;
    if (d == 2 && pub_ptr == 0)
      pub_ptr = i + 1;
    if ((ISBN[i] < '0' || ISBN[i] > '9') && ISBN[i] != '-' && ISBN[i] != '\n' && ISBN[i] != ' ')
      v = 0;
    else if (ISBN[i] >= '0' && ISBN[i] <= '9') {
      count++;
      if (count <= 12) {
        if (count % 2)
          digit_check = digit_check + (ISBN[i] - '0');
        else
          digit_check = digit_check + (ISBN[i] - '0') * 3;
      }
    }
  }
  if (d != 4)
    v = 0;
  else {
    digit_check = digit_check % 10;
    if (digit_check)
      digit_check = 10 - digit_check;
    if ((ISBN[16] - '0') != digit_check)
      v = 0;
  }
  for (i = 0; i < 4; i++) {
    if (ISBN[i] != ex1[i] && ISBN[i] != ex2[i])
      v = 0;
  }
  pub1_result = 0;
  pub2_result = 0;
  pub3_result = 0;
  pub4_result = 0;
  if (v) {
    printf("1");
    for (i = pub_ptr; ISBN[i] != '-'; i++) {
      if (ISBN[i] == pub1[i - pub_ptr]) {
        pub1_result++;
      } else if (ISBN[i] == pub2[i - pub_ptr]) {
        pub2_result++;
      } else if (ISBN[i] == pub3[i - pub_ptr]) {
        pub3_result++;
      } else if (ISBN[i] == pub4[i - pub_ptr]) {
        pub4_result++;
      }
    }
    if (i - pub_ptr == pub1_result) {
      printf("\nBluebridge");
    } else if (i - pub_ptr == pub2_result) {
      printf("\nAlyson Books");
    } else if (i - pub_ptr == pub3_result) {
      printf("\nFUNimation Productions, Ltd.");
    } else if (i - pub_ptr == pub4_result) {
      printf("\nPyramid Books");
    }
  } else
    printf("0");
}
```