user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x70(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0xd,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L111
L40:
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <isalpha@plt>
  test   %rax,%rax
  je     L114
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  sub    $0x41,%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  mov    -0x74(%rbp),%edx
  lea    -0x41(%rdx),%ecx
  lea    0x1(%rax),%edx
  movslq %ecx,%rax
  mov    %edx,-0x70(%rbp,%rax,4)
  jmp    L111
L114:
  nop
L111:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %eax,-0x74(%rbp)
  cmpl   $0xa,-0x74(%rbp)
  jne    L40
  lea    D25(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L48
L50:
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <isalpha@plt>
  test   %rax,%rax
  je     L80
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <toupper@plt>
  mov    %eax,-0x74(%rbp)
  mov    -0x74(%rbp),%eax
  sub    $0x41,%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  mov    -0x74(%rbp),%edx
  lea    -0x41(%rdx),%ecx
  lea    -0x1(%rax),%edx
  movslq %ecx,%rax
  mov    %edx,-0x70(%rbp,%rax,4)
  jmp    L48
L80:
  nop
L48:
  mov    $0x0,%eax
  call   <getchar@plt>
  mov    %eax,-0x74(%rbp)
  cmpl   $0xa,-0x74(%rbp)
  jne    L50
  movl   $0x0,-0x78(%rbp)
  jmp    L55
L20:
  mov    -0x78(%rbp),%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  test   %eax,%eax
  je     L148
  lea    D26(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  jmp    L146
L148:
  cmpl   $0x19,-0x78(%rbp)
  jne    L27
  mov    -0x78(%rbp),%eax
  cltq
  mov    -0x70(%rbp,%rax,4),%eax
  test   %eax,%eax
  jne    L27
  lea    D21(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L27:
  addl   $0x1,-0x78(%rbp)
L55:
  cmpl   $0x19,-0x78(%rbp)
  jle    L20
L146:
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L97
  call   <__stack_chk_fail@plt>
L97:
  leave
  ret
```

tool_calls: name: read_data
arguments: data_tag: D29
data_type: string
name: read_data
arguments: data_tag: D25
data_type: string
name: read_data
arguments: data_tag: D26
data_type: string
name: read_data
arguments: data_tag: D21
data_type: string

tool: D29: Enter the first word: 

tool: D25: Enter the second word: 

tool: D26: The words are not anagrams


tool: D21: The words are anagrams


assistant: ```c
int main(void) {
  int alphabet[26] = {0};
  int letter;
  int i;
  printf("Enter the first word: ");
  while ((letter = getchar()) != '\n') {
    if (isalpha(letter)) {
      letter = toupper(letter);
      alphabet[letter - 65] += 1;
    } else {
      continue;
    }
  }
  printf("Enter the second word: ");
  while ((letter = getchar()) != '\n') {
    if (isalpha(letter)) {
      letter = toupper(letter);
      alphabet[letter - 65] -= 1;
    } else {
      continue;
    }
  }
  i = 0;
  while (i < 26) {
    if (alphabet[i] != 0) {
      printf("The words are not anagrams\n");
      break;
    }
    if (i == 25 && alphabet[i] == 0) {
      printf("The words are anagrams\n");
    }
    i += 1;
  }
  return 0;
}
```