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

```asm
<isNumber>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x110,%rsp
  mov    %rdi,-0x108(%rbp)
  mov    %rsi,-0x110(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xfa(%rbp)
  movsbl -0xfa(%rbp),%eax
  mov    %eax,-0xe0(%rbp)
  cmpl   $0x2d,-0xe0(%rbp)
  jne    L91
  addq   $0x1,-0x108(%rbp)
  jmp    L30
L91:
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf9(%rbp)
  movsbl -0xf9(%rbp),%eax
  mov    %eax,-0xdc(%rbp)
  cmpl   $0x2b,-0xdc(%rbp)
  jne    L30
  addq   $0x1,-0x108(%rbp)
L30:
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x90(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf8(%rbp)
  movsbl -0xf8(%rbp),%eax
  mov    %eax,-0xd8(%rbp)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x88(%rbp)
  mov    -0xd8(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x88(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x80(%rbp)
  mov    -0x80(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xec(%rbp)
  movzwl -0xec(%rbp),%eax
  mov    %eax,-0xd4(%rbp)
  mov    -0xd4(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  jne    L54
  mov    $0x0,%eax
  jmp    L86
L54:
  addq   $0x1,-0x108(%rbp)
  cmpq   $0x0,-0x110(%rbp)
  je     L109
  mov    -0x110(%rbp),%rax
  movl   $0x0,(%rax)
  jmp    L186
L109:
  nop
L186:
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x78(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf7(%rbp)
  movsbl -0xf7(%rbp),%eax
  mov    %eax,-0xd0(%rbp)
  mov    -0x78(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x70(%rbp)
  mov    -0xd0(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x70(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x68(%rbp)
  mov    -0x68(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xea(%rbp)
  movzwl -0xea(%rbp),%eax
  mov    %eax,-0xcc(%rbp)
  mov    -0xcc(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L136
  addq   $0x1,-0x108(%rbp)
  jmp    L186
L136:
  nop
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf6(%rbp)
  movsbl -0xf6(%rbp),%eax
  mov    %eax,-0xc8(%rbp)
  cmpl   $0x2e,-0xc8(%rbp)
  jne    L67
  addq   $0x1,-0x108(%rbp)
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x60(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf5(%rbp)
  movsbl -0xf5(%rbp),%eax
  mov    %eax,-0xc4(%rbp)
  mov    -0x60(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x58(%rbp)
  mov    -0xc4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x50(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xe8(%rbp)
  movzwl -0xe8(%rbp),%eax
  mov    %eax,-0xc0(%rbp)
  mov    -0xc0(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  jne    L68
  mov    $0x0,%eax
  jmp    L86
L68:
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x48(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf4(%rbp)
  movsbl -0xf4(%rbp),%eax
  mov    %eax,-0xbc(%rbp)
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x40(%rbp)
  mov    -0xbc(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xe6(%rbp)
  movzwl -0xe6(%rbp),%eax
  mov    %eax,-0xb8(%rbp)
  mov    -0xb8(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L42
  addq   $0x1,-0x108(%rbp)
  jmp    L68
L42:
  nop
  cmpq   $0x0,-0x110(%rbp)
  je     L67
  mov    -0x110(%rbp),%rax
  movl   $0x1,(%rax)
L67:
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf3(%rbp)
  movsbl -0xf3(%rbp),%eax
  mov    %eax,-0xb4(%rbp)
  cmpl   $0x65,-0xb4(%rbp)
  je     L250
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf2(%rbp)
  movsbl -0xf2(%rbp),%eax
  mov    %eax,-0xb0(%rbp)
  cmpl   $0x45,-0xb0(%rbp)
  jne    L8
  jmp    L205
L250:
  nop
L205:
  addq   $0x1,-0x108(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf1(%rbp)
  movsbl -0xf1(%rbp),%eax
  mov    %eax,-0xac(%rbp)
  cmpl   $0x2b,-0xac(%rbp)
  jne    L226
  addq   $0x1,-0x108(%rbp)
  jmp    L35
L226:
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xf0(%rbp)
  movsbl -0xf0(%rbp),%eax
  mov    %eax,-0xa8(%rbp)
  cmpl   $0x2d,-0xa8(%rbp)
  jne    L35
  addq   $0x1,-0x108(%rbp)
L35:
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x30(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xef(%rbp)
  movsbl -0xef(%rbp),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0x30(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0xa4(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x20(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xe4(%rbp)
  movzwl -0xe4(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0xa0(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  jne    L239
  mov    $0x0,%eax
  jmp    L86
L239:
  mov    $0x0,%eax
  call   <__ctype_b_loc@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xee(%rbp)
  movsbl -0xee(%rbp),%eax
  mov    %eax,-0x9c(%rbp)
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x9c(%rbp),%eax
  cltq
  lea    (%rax,%rax,1),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x8(%rbp),%rax
  movzwl (%rax),%eax
  mov    %ax,-0xe2(%rbp)
  movzwl -0xe2(%rbp),%eax
  mov    %eax,-0x98(%rbp)
  mov    -0x98(%rbp),%eax
  and    $0x800,%eax
  test   %eax,%eax
  je     L27
  addq   $0x1,-0x108(%rbp)
  jmp    L239
L27:
  nop
  cmpq   $0x0,-0x110(%rbp)
  je     L8
  mov    -0x110(%rbp),%rax
  movl   $0x1,(%rax)
L8:
  mov    -0x108(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,-0xed(%rbp)
  movsbl -0xed(%rbp),%eax
  mov    %eax,-0x94(%rbp)
  cmpl   $0x0,-0x94(%rbp)
  sete   %al
  movzbl %al,%eax
L86:
  leave
  ret
```

assistant: ```c
int isNumber(char const *z, int *realnum) {
  unsigned short const **tmp;
  unsigned short const **tmp___0;
  unsigned short const **tmp___1;
  unsigned short const **tmp___2;
  unsigned short const **tmp___3;
  unsigned short const **tmp___4;
  char __cil_tmp9;
  int __cil_tmp10;
  char __cil_tmp11;
  int __cil_tmp12;
  char __cil_tmp13;
  int __cil_tmp14;
  unsigned short const *__cil_tmp15;
  unsigned short const *__cil_tmp16;
  unsigned short __cil_tmp17;
  int __cil_tmp18;
  char __cil_tmp19;
  int __cil_tmp20;
  unsigned short const *__cil_tmp21;
  unsigned short const *__cil_tmp22;
  unsigned short __cil_tmp23;
  int __cil_tmp24;
  char __cil_tmp25;
  int __cil_tmp26;
  char __cil_tmp27;
  int __cil_tmp28;
  unsigned short const *__cil_tmp29;
  unsigned short const *__cil_tmp30;
  unsigned short __cil_tmp31;
  int __cil_tmp32;
  char __cil_tmp33;
  int __cil_tmp34;
  unsigned short const *__cil_tmp35;
  unsigned short const *__cil_tmp36;
  unsigned short __cil_tmp37;
  int __cil_tmp38;
  char __cil_tmp39;
  int __cil_tmp40;
  char __cil_tmp41;
  int __cil_tmp42;
  char __cil_tmp43;
  int __cil_tmp44;
  char __cil_tmp45;
  int __cil_tmp46;
  char __cil_tmp47;
  int __cil_tmp48;
  unsigned short const *__cil_tmp49;
  unsigned short const *__cil_tmp50;
  unsigned short __cil_tmp51;
  int __cil_tmp52;
  char __cil_tmp53;
  int __cil_tmp54;
  unsigned short const *__cil_tmp55;
  unsigned short const *__cil_tmp56;
  unsigned short __cil_tmp57;
  int __cil_tmp58;
  char __cil_tmp59;
  int __cil_tmp60;
  {
    {
      __cil_tmp9 = *z;
      __cil_tmp10 = (int const)__cil_tmp9;
      if (__cil_tmp10 == 45) {
        z = z + 1;
      } else {
        {
          __cil_tmp11 = *z;
          __cil_tmp12 = (int const)__cil_tmp11;
          if (__cil_tmp12 == 43) {
            z = z + 1;
          } else {
          }
        }
      }
    }
    { tmp = __ctype_b_loc(); }
    {
      __cil_tmp13 = *z;
      __cil_tmp14 = (int)__cil_tmp13;
      __cil_tmp15 = *tmp;
      __cil_tmp16 = __cil_tmp15 + __cil_tmp14;
      __cil_tmp17 = *__cil_tmp16;
      __cil_tmp18 = (int const)__cil_tmp17;
      if (__cil_tmp18 & 2048) {
      } else {
        return (0);
      }
    }
    z = z + 1;
    if (realnum) {
      *realnum = 0;
    } else {
    }
    {
      while (1) {
      while_0_continue:;
        { tmp___0 = __ctype_b_loc(); }
        {
          __cil_tmp19 = *z;
          __cil_tmp20 = (int)__cil_tmp19;
          __cil_tmp21 = *tmp___0;
          __cil_tmp22 = __cil_tmp21 + __cil_tmp20;
          __cil_tmp23 = *__cil_tmp22;
          __cil_tmp24 = (int const)__cil_tmp23;
          if (__cil_tmp24 & 2048) {
          } else {
            goto while_0_break;
          }
        }
        z = z + 1;
      }
    while_0_break:;
    }
    {
      __cil_tmp25 = *z;
      __cil_tmp26 = (int const)__cil_tmp25;
      if (__cil_tmp26 == 46) {
        {
          z = z + 1;
          tmp___1 = __ctype_b_loc();
        }
        {
          __cil_tmp27 = *z;
          __cil_tmp28 = (int)__cil_tmp27;
          __cil_tmp29 = *tmp___1;
          __cil_tmp30 = __cil_tmp29 + __cil_tmp28;
          __cil_tmp31 = *__cil_tmp30;
          __cil_tmp32 = (int const)__cil_tmp31;
          if (__cil_tmp32 & 2048) {
          } else {
            return (0);
          }
        }
        {
          while (1) {
          while_1_continue:;
            { tmp___2 = __ctype_b_loc(); }
            {
              __cil_tmp33 = *z;
              __cil_tmp34 = (int)__cil_tmp33;
              __cil_tmp35 = *tmp___2;
              __cil_tmp36 = __cil_tmp35 + __cil_tmp34;
              __cil_tmp37 = *__cil_tmp36;
              __cil_tmp38 = (int const)__cil_tmp37;
              if (__cil_tmp38 & 2048) {
              } else {
                goto while_1_break;
              }
            }
            z = z + 1;
          }
        while_1_break:;
        }
        if (realnum) {
          *realnum = 1;
        } else {
        }
      } else {
      }
    }
    {
      __cil_tmp39 = *z;
      __cil_tmp40 = (int const)__cil_tmp39;
      if (__cil_tmp40 == 101) {
        goto _L;
      } else {
        {
          __cil_tmp41 = *z;
          __cil_tmp42 = (int const)__cil_tmp41;
          if (__cil_tmp42 == 69) {
          _L:
            z = z + 1;
            {
              __cil_tmp43 = *z;
              __cil_tmp44 = (int const)__cil_tmp43;
              if (__cil_tmp44 == 43) {
                z = z + 1;
              } else {
                {
                  __cil_tmp45 = *z;
                  __cil_tmp46 = (int const)__cil_tmp45;
                  if (__cil_tmp46 == 45) {
                    z = z + 1;
                  } else {
                  }
                }
              }
            }
            { tmp___3 = __ctype_b_loc(); }
            {
              __cil_tmp47 = *z;
              __cil_tmp48 = (int)__cil_tmp47;
              __cil_tmp49 = *tmp___3;
              __cil_tmp50 = __cil_tmp49 + __cil_tmp48;
              __cil_tmp51 = *__cil_tmp50;
              __cil_tmp52 = (int const)__cil_tmp51;
              if (__cil_tmp52 & 2048) {
              } else {
                return (0);
              }
            }
            {
              while (1) {
              while_2_continue:;
                { tmp___4 = __ctype_b_loc(); }
                {
                  __cil_tmp53 = *z;
                  __cil_tmp54 = (int)__cil_tmp53;
                  __cil_tmp55 = *tmp___4;
                  __cil_tmp56 = __cil_tmp55 + __cil_tmp54;
                  __cil_tmp57 = *__cil_tmp56;
                  __cil_tmp58 = (int const)__cil_tmp57;
                  if (__cil_tmp58 & 2048) {
                  } else {
                    goto while_2_break;
                  }
                }
                z = z + 1;
              }
            while_2_break:;
            }
            if (realnum) {
              *realnum = 1;
            } else {
            }
          } else {
          }
        }
      }
    }
    {
      __cil_tmp59 = *z;
      __cil_tmp60 = (int const)__cil_tmp59;
      return (__cil_tmp60 == 0);
    }
  }
}
```