user: What would the C source look like for the assembly code provided here?

```asm
<strcmp_natural_tiebroken>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x2(%rbp)
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x1(%rbp)
  jmp    L176
L50:
  nop
  jmp    L47
L114:
  nop
L47:
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  je     L178
  cmpb   $0x60,-0x2(%rbp)
  jle    L32
  cmpb   $0x7a,-0x2(%rbp)
  jg     L32
  movzbl -0x2(%rbp),%eax
  sub    $0x20,%eax
  mov    %al,-0x2(%rbp)
L32:
  cmpb   $0x60,-0x1(%rbp)
  jle    L113
  cmpb   $0x7a,-0x1(%rbp)
  jg     L113
  movzbl -0x1(%rbp),%eax
  sub    $0x20,%eax
  mov    %al,-0x1(%rbp)
L113:
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  jge    L99
  mov    $0xffffffff,%eax
  jmp    L74
L99:
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  jle    L164
  mov    $0x1,%eax
  jmp    L74
L178:
  cmpb   $0x0,-0x2(%rbp)
  jne    L164
  mov    $0xffffffff,%eax
  jmp    L74
L164:
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x2(%rbp)
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x1(%rbp)
L176:
  movsbl -0x2(%rbp),%eax
  mov    %eax,%edi
  call   <is_not_nzdigit@plt>
  test   %rax,%rax
  je     L189
  movsbl -0x1(%rbp),%eax
  mov    %eax,%edi
  call   <is_not_nzdigit@plt>
  test   %rax,%rax
  jne    L50
L189:
  movsbl -0x2(%rbp),%eax
  mov    %eax,%edi
  call   <is_not_nzdigit@plt>
  test   %rax,%rax
  jne    L128
  movsbl -0x1(%rbp),%eax
  mov    %eax,%edi
  call   <is_not_nzdigit@plt>
  test   %rax,%rax
  je     L237
L128:
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  jge    L172
  mov    $0xffffffff,%eax
  jmp    L74
L172:
  mov    $0x1,%eax
  jmp    L74
L237:
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  je     L80
  movsbl -0x1(%rbp),%eax
  mov    %eax,%edi
  call   <is_digit@plt>
  test   %rax,%rax
  je     L31
  movzbl -0x2(%rbp),%eax
  cmp    -0x1(%rbp),%al
  jge    L250
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_natural_scan_forward@plt>
  jmp    L74
L250:
  mov    -0x18(%rbp),%rdx
  mov    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp_natural_scan_forward@plt>
  neg    %eax
  jmp    L74
L31:
  mov    $0x1,%eax
  jmp    L74
L80:
  addq   $0x1,-0x18(%rbp)
  mov    -0x18(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x2(%rbp)
  addq   $0x1,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0x1(%rbp)
  movsbl -0x2(%rbp),%eax
  mov    %eax,%edi
  call   <is_digit@plt>
  test   %rax,%rax
  jne    L237
  movsbl -0x1(%rbp),%eax
  mov    %eax,%edi
  call   <is_digit@plt>
  test   %rax,%rax
  je     L114
  mov    $0xffffffff,%eax
L74:
  leave
  ret
```

assistant: ```c
int strcmp_natural_tiebroken(const char *s1, const char *s2) {
  char c1 = *(++s1);
  char c2 = *(++s2);
  while (is_not_nzdigit(c1) && is_not_nzdigit(c2)) {
  strcmp_natural_tiebroken_state_2:
    if (c1 != c2) {
      if ((c1 >= 'a') && (c1 <= 'z')) {
        c1 -= 32;
      }
      if ((c2 >= 'a') && (c2 <= 'z')) {
        c2 -= 32;
      }
      if (c1 < c2) {
        return -1;
      } else if (c1 > c2) {
        return 1;
      }
    } else if (!c1) {
      return -1;
    }
    c1 = *(++s1);
    c2 = *(++s2);
  }
  if (is_not_nzdigit(c1) || is_not_nzdigit(c2)) {
    return (c1 < c2) ? -1 : 1;
  }
  do {
    if (c1 != c2) {
      if (is_digit(c2)) {
        if (c1 < c2) {
          return strcmp_natural_scan_forward(s1, s2);
        } else {
          return -strcmp_natural_scan_forward(s2, s1);
        }
      }
      return 1;
    }
    c1 = *(++s1);
    c2 = *(++s2);
  } while (is_digit(c1));
  if (is_digit(c2)) {
    return -1;
  }
  goto strcmp_natural_tiebroken_state_2;
}
```