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

```asm
<json_string_dump>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  mov    %rdi,%r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  test   %rdx,%rdx
  je     L283
  mov    %rsi,%r15
  mov    %rdx,%r14
  xor    %ebx,%ebx
  mov    %rsp,%r13
  jmp    L78
  nopl   0x0(%rax,%rax,1)
L231:
  cmp    $0x22,%al
  je     L263
  mov    %r12,%rdx
  cmp    $0x5c,%al
  je     L263
L190:
  mov    %al,(%rdx)
  lea    0x1(%rdx),%r12
L227:
  add    $0x1,%rbx
L27:
  cmp    %r14,%rbx
  jae    L283
L78:
  lea    (%r15,%rbx,1),%rbp
  movzbl 0x0(%rbp),%eax
  lea    -0x20(%rax),%edx
  cmp    $0x5e,%dl
  jbe    L231
  cmp    $0x9,%al
  je     L214
  cmp    $0xa,%al
  je     L26
  mov    %r14,%rdx
  mov    %rbp,%rsi
  sub    %rbx,%rdx
  cmp    $0x1f,%al
  ja     L86
  mov    %r13,%rdi
  call   <utf8_read@plt>
  mov    (%rsp),%edi
  add    %rax,%rbx
  call   <htons@plt>
  lea    0x2(%r12),%rdi
  lea    0x4(%rsp),%rsi
  mov    $0x4,%edx
  mov    %eax,0x4(%rsp)
  mov    $0x755c,%eax
  mov    %ax,(%r12)
  call   <format_hex@plt>
  mov    %rax,%r12
  cmp    %r14,%rbx
  jb     L78
L283:
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L233
  add    $0x18,%rsp
  mov    %r12,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L263:
  movb   $0x5c,(%r12)
  lea    0x1(%r12),%rdx
  movzbl 0x0(%rbp),%eax
  jmp    L190
  nopl   0x0(%rax,%rax,1)
L214:
  mov    $0x745c,%ecx
  add    $0x2,%r12
  mov    %cx,-0x2(%r12)
  jmp    L227
  nopl   0x0(%rax)
L26:
  mov    $0x6e5c,%edx
  add    $0x2,%r12
  mov    %dx,-0x2(%r12)
  jmp    L227
  nopl   0x0(%rax)
L86:
  xor    %edi,%edi
  call   <utf8_read@plt>
  mov    %rax,%rdx
  lea    -0x1(%rax),%rcx
  test   %rax,%rax
  je     L27
  lea    0x1(%r15,%rbx,1),%rsi
  mov    %r12,%rax
  sub    %rsi,%rax
  cmp    $0xe,%rax
  jbe    L313
  cmp    $0x6,%rcx
  jbe    L313
  cmp    $0xe,%rcx
  jbe    L96
  mov    %rdx,%rsi
  xor    %eax,%eax
  and    $0xfffffffffffffff0,%rsi
  nopl   0x0(%rax)
L181:
  movdqu 0x0(%rbp,%rax,1),%xmm0
  movups %xmm0,(%r12,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%rsi
  jne    L181
  mov    %rdx,%rsi
  and    $0xfffffffffffffff0,%rsi
  lea    (%r12,%rsi,1),%rdi
  lea    (%rbx,%rsi,1),%rax
  sub    %rsi,%rcx
  cmp    %rsi,%rdx
  je     L236
  mov    %rdx,%r8
  sub    %rsi,%r8
  lea    -0x1(%r8),%r9
  cmp    $0x6,%r9
  jbe    L229
L201:
  mov    0x0(%rbp,%rsi,1),%r9
  mov    %r9,(%r12,%rsi,1)
  mov    %r8,%rsi
  and    $0xfffffffffffffff8,%rsi
  add    %rsi,%rdi
  add    %rsi,%rax
  sub    %rsi,%rcx
  cmp    %rsi,%r8
  je     L102
L229:
  movzbl (%r15,%rax,1),%esi
  mov    %sil,(%rdi)
  test   %rcx,%rcx
  je     L102
  movzbl 0x1(%r15,%rax,1),%esi
  mov    %sil,0x1(%rdi)
  cmp    $0x1,%rcx
  je     L102
  movzbl 0x2(%r15,%rax,1),%esi
  mov    %sil,0x2(%rdi)
  cmp    $0x2,%rcx
  je     L102
  movzbl 0x3(%r15,%rax,1),%esi
  mov    %sil,0x3(%rdi)
  cmp    $0x3,%rcx
  je     L102
  movzbl 0x4(%r15,%rax,1),%esi
  mov    %sil,0x4(%rdi)
  cmp    $0x4,%rcx
  je     L102
  movzbl 0x5(%r15,%rax,1),%esi
  mov    %sil,0x5(%rdi)
  cmp    $0x5,%rcx
  je     L102
  movzbl 0x6(%r15,%rax,1),%eax
  mov    %al,0x6(%rdi)
L102:
  lea    (%rbx,%rdx,1),%rax
L236:
  mov    %rax,%rbx
  add    %rdx,%r12
  jmp    L27
L313:
  mov    %r12,%rsi
  lea    (%rdx,%rbx,1),%rax
  sub    %rbx,%rsi
  nopl   0x0(%rax)
L304:
  add    $0x1,%rbx
  movzbl -0x1(%r15,%rbx,1),%ecx
  mov    %cl,-0x1(%rsi,%rbx,1)
  cmp    %rax,%rbx
  jne    L304
  jmp    L236
L96:
  mov    %rdx,%r8
  mov    %rbx,%rax
  mov    %r12,%rdi
  xor    %esi,%esi
  jmp    L201
L233:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
char *json_string_dump(unsigned char *restrict dest, const unsigned char *restrict src, size_t size) {
  size_t i = 0;
  while (i < size) {
    if ((0x1f < src[i]) && (src[i] < 0x7f)) {
      if ((src[i] == '"') || (src[i] == '\\'))
        *dest++ = '\\';
      *dest++ = src[i];
    } else if (src[i] == '\t') {
      *dest++ = '\\';
      *dest++ = 't';
    } else if (src[i] == '\n') {
      *dest++ = '\\';
      *dest++ = 'n';
    } else if (src[i] <= 0x1f) {
      uint32_t code;
      uint16_t character;
      i += utf8_read(&code, src + i, size - i);
      character = htons(code);
      *dest++ = '\\';
      *dest++ = 'u';
      dest = format_hex(dest, (char *)&character, sizeof(character));
      continue;
    } else {
      size_t bytes = utf8_read(0, src + i, size - i);
      while (bytes--)
        *dest++ = src[i++];
      continue;
    }
    ++i;
  }
  return dest;
}
```