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

```asm
<number>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x100,%rsp
  mov    %rdi,-0xd8(%rbp)
  mov    %rsi,-0xe0(%rbp)
  mov    %rdx,-0xe8(%rbp)
  mov    %ecx,-0xec(%rbp)
  mov    %r8d,-0xf0(%rbp)
  mov    %r9d,-0xf4(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movabs $0x3736353433323130,%rax
  movabs $0x6665646362613938,%rdx
  mov    %rax,-0xb0(%rbp)
  mov    %rdx,-0xa8(%rbp)
  movabs $0x6e6d6c6b6a696867,%rax
  movabs $0x767574737271706f,%rdx
  mov    %rax,-0xa0(%rbp)
  mov    %rdx,-0x98(%rbp)
  movl   $0x7a797877,-0x90(%rbp)
  movb   $0x0,-0x8c(%rbp)
  movabs $0x3736353433323130,%rax
  movabs $0x4645444342413938,%rdx
  mov    %rax,-0x80(%rbp)
  mov    %rdx,-0x78(%rbp)
  movabs $0x4e4d4c4b4a494847,%rax
  movabs $0x565554535251504f,%rdx
  mov    %rax,-0x70(%rbp)
  mov    %rdx,-0x68(%rbp)
  movl   $0x5a595857,-0x60(%rbp)
  movb   $0x0,-0x5c(%rbp)
  mov    0x10(%rbp),%eax
  and    $0x40,%eax
  test   %eax,%eax
  je     L74
  lea    -0x80(%rbp),%rax
  jmp    L139
L74:
  lea    -0xb0(%rbp),%rax
L139:
  mov    %rax,-0xb8(%rbp)
  mov    0x10(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  je     L218
  andl   $0xfffffffe,0x10(%rbp)
L218:
  cmpl   $0x1,-0xec(%rbp)
  jle    L307
  cmpl   $0x24,-0xec(%rbp)
  jle    L319
L307:
  mov    -0xd8(%rbp),%rax
  jmp    L354
L319:
  mov    0x10(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L437
  mov    $0x30,%eax
  jmp    L374
L437:
  mov    $0x20,%eax
L374:
  mov    %al,-0xc9(%rbp)
  movb   $0x0,-0xca(%rbp)
  mov    0x10(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L42
  cmpq   $0x0,-0xe8(%rbp)
  jns    L345
  movb   $0x2d,-0xca(%rbp)
  negq   -0xe8(%rbp)
  subl   $0x1,-0xf0(%rbp)
  jmp    L42
L345:
  mov    0x10(%rbp),%eax
  and    $0x4,%eax
  test   %eax,%eax
  je     L386
  movb   $0x2b,-0xca(%rbp)
  subl   $0x1,-0xf0(%rbp)
  jmp    L42
L386:
  mov    0x10(%rbp),%eax
  and    $0x8,%eax
  test   %eax,%eax
  je     L42
  movb   $0x20,-0xca(%rbp)
  subl   $0x1,-0xf0(%rbp)
L42:
  mov    0x10(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L58
  cmpl   $0x10,-0xec(%rbp)
  jne    L27
  subl   $0x2,-0xf0(%rbp)
  jmp    L58
L27:
  cmpl   $0x8,-0xec(%rbp)
  jne    L58
  subl   $0x1,-0xf0(%rbp)
L58:
  movl   $0x0,-0xc8(%rbp)
  cmpq   $0x0,-0xe8(%rbp)
  jne    L358
  mov    -0xc8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xc8(%rbp)
  cltq
  movb   $0x30,-0x50(%rbp,%rax,1)
  jmp    L243
L358:
  mov    -0xe8(%rbp),%rax
  mov    %rax,-0xc0(%rbp)
  mov    -0xec(%rbp),%eax
  mov    %eax,-0xc4(%rbp)
  jmp    L486
L185:
  mov    -0xc4(%rbp),%ecx
  mov    -0xc0(%rbp),%rax
  mov    $0x0,%edx
  div    %rcx
  mov    -0xb8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xc8(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0xc8(%rbp)
  movzbl (%rcx),%edx
  cltq
  mov    %dl,-0x50(%rbp,%rax,1)
  mov    -0xc4(%rbp),%esi
  mov    -0xc0(%rbp),%rax
  mov    $0x0,%edx
  div    %rsi
  mov    %rax,-0xc0(%rbp)
L486:
  cmpq   $0x0,-0xc0(%rbp)
  jne    L185
L243:
  mov    -0xc8(%rbp),%eax
  cmp    -0xf4(%rbp),%eax
  jle    L5
  mov    -0xc8(%rbp),%eax
  mov    %eax,-0xf4(%rbp)
L5:
  mov    -0xf4(%rbp),%eax
  sub    %eax,-0xf0(%rbp)
  mov    0x10(%rbp),%eax
  and    $0x11,%eax
  test   %eax,%eax
  jne    L474
  jmp    L480
L276:
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L21
  mov    -0xd8(%rbp),%rax
  movb   $0x20,(%rax)
L21:
  addq   $0x1,-0xd8(%rbp)
L480:
  mov    -0xf0(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xf0(%rbp)
  test   %eax,%eax
  jg     L276
L474:
  cmpb   $0x0,-0xca(%rbp)
  je     L314
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L13
  mov    -0xd8(%rbp),%rax
  movzbl -0xca(%rbp),%edx
  mov    %dl,(%rax)
L13:
  addq   $0x1,-0xd8(%rbp)
L314:
  mov    0x10(%rbp),%eax
  and    $0x20,%eax
  test   %eax,%eax
  je     L320
  cmpl   $0x8,-0xec(%rbp)
  jne    L183
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L168
  mov    -0xd8(%rbp),%rax
  movb   $0x30,(%rax)
L168:
  addq   $0x1,-0xd8(%rbp)
  jmp    L320
L183:
  cmpl   $0x10,-0xec(%rbp)
  jne    L320
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L410
  mov    -0xd8(%rbp),%rax
  movb   $0x30,(%rax)
L410:
  addq   $0x1,-0xd8(%rbp)
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L391
  mov    -0xb8(%rbp),%rax
  add    $0x21,%rax
  movzbl (%rax),%edx
  mov    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
L391:
  addq   $0x1,-0xd8(%rbp)
L320:
  mov    0x10(%rbp),%eax
  and    $0x10,%eax
  test   %eax,%eax
  jne    L259
  jmp    L412
L277:
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L193
  mov    -0xd8(%rbp),%rax
  movzbl -0xc9(%rbp),%edx
  mov    %dl,(%rax)
L193:
  addq   $0x1,-0xd8(%rbp)
L412:
  mov    -0xf0(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xf0(%rbp)
  test   %eax,%eax
  jg     L277
  jmp    L259
L315:
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L213
  mov    -0xd8(%rbp),%rax
  movb   $0x30,(%rax)
L213:
  addq   $0x1,-0xd8(%rbp)
L259:
  mov    -0xf4(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xf4(%rbp)
  cmp    %eax,-0xc8(%rbp)
  jl     L315
  jmp    L329
L89:
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L207
  mov    -0xc8(%rbp),%eax
  cltq
  movzbl -0x50(%rbp,%rax,1),%edx
  mov    -0xd8(%rbp),%rax
  mov    %dl,(%rax)
L207:
  addq   $0x1,-0xd8(%rbp)
L329:
  mov    -0xc8(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xc8(%rbp)
  test   %eax,%eax
  jg     L89
  jmp    L487
L156:
  mov    -0xd8(%rbp),%rax
  cmp    -0xe0(%rbp),%rax
  ja     L225
  mov    -0xd8(%rbp),%rax
  movb   $0x20,(%rax)
L225:
  addq   $0x1,-0xd8(%rbp)
L487:
  mov    -0xf0(%rbp),%eax
  lea    -0x1(%rax),%edx
  mov    %edx,-0xf0(%rbp)
  test   %eax,%eax
  jg     L156
  mov    -0xd8(%rbp),%rax
L354:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L122
  call   <__stack_chk_fail@plt>
L122:
  leave
  ret
```

assistant: ```c
char *number(char *buf, char *end, long long num, int base, int size, int precision, int type) {
  char c, sign, tmp[66];
  const char *digits;
  const char small_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz";
  const char large_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  int i;
  digits = (type & 64) ? large_digits : small_digits;
  if (type & 16)
    type &= ~1;
  if (base < 2 || base > 36)
    return buf;
  c = (type & 1) ? '0' : ' ';
  sign = 0;
  if (type & 2) {
    if (num < 0) {
      sign = '-';
      num = -num;
      size--;
    } else if (type & 4) {
      sign = '+';
      size--;
    } else if (type & 8) {
      sign = ' ';
      size--;
    }
  }
  if (type & 32) {
    if (base == 16)
      size -= 2;
    else if (base == 8)
      size--;
  }
  i = 0;
  if (num == 0)
    tmp[i++] = '0';
  else {
    unsigned long long num2 = (unsigned long long)num;
    unsigned int base2 = (unsigned int)base;
    while (num2 != 0) {
      tmp[i++] = digits[num2 % base2];
      num2 /= base2;
    }
  }
  if (i > precision)
    precision = i;
  size -= precision;
  if (!(type & (1 + 16))) {
    while (size-- > 0) {
      if (buf <= end)
        *buf = ' ';
      ++buf;
    }
  }
  if (sign) {
    if (buf <= end)
      *buf = sign;
    ++buf;
  }
  if (type & 32) {
    if (base == 8) {
      if (buf <= end)
        *buf = '0';
      ++buf;
    } else if (base == 16) {
      if (buf <= end)
        *buf = '0';
      ++buf;
      if (buf <= end)
        *buf = digits[33];
      ++buf;
    }
  }
  if (!(type & 16)) {
    while (size-- > 0) {
      if (buf <= end)
        *buf = c;
      ++buf;
    }
  }
  while (i < precision--) {
    if (buf <= end)
      *buf = '0';
    ++buf;
  }
  while (i-- > 0) {
    if (buf <= end)
      *buf = tmp[i];
    ++buf;
  }
  while (size-- > 0) {
    if (buf <= end)
      *buf = ' ';
    ++buf;
  }
  return buf;
}
```