user: What is the c source code of the assembly code below?

```asm
<html_escape_str>:
  endbr64
  mov    %rsi,%rcx
  mov    %rdx,%r8
  test   %rdx,%rdx
  je     L17
  xor    %eax,%eax
  lea    D1(%rip),%r10
  lea    D13(%rip),%r9
  nopl   0x0(%rax,%rax,1)
L127:
  movzbl (%rcx),%edx
  add    $0x1,%rcx
  mov    %rdx,%rsi
  movzbl (%r10,%rdx,1),%edx
  cmp    $0x3e,%dl
  jg     L123
  cmp    $0x25,%dl
  jle    L98
  sub    $0x26,%edx
  cmp    $0x18,%dl
  ja     L98
  movzbl %dl,%edx
  movslq (%r9,%rdx,4),%rdx
  add    %r9,%rdx
  notrack jmp *%rdx
  nopw   0x0(%rax,%rax,1)
  movb   $0x3f,(%rdi)
  add    $0x1,%rax
  add    $0x1,%rdi
  nopl   0x0(%rax,%rax,1)
L98:
  cmp    %rax,%r8
  ja     L127
L67:
  movb   $0x0,(%rdi)
  ret
  nopl   0x0(%rax)
  lea    0x4(%rax),%rdx
  cmp    %r8,%rdx
  ja     L67
  mov    %rdx,%rax
  movl   $0x3b746726,(%rdi)
  add    $0x4,%rdi
  cmp    %rax,%r8
  ja     L127
  jmp    L67
  nopl   (%rax)
  lea    0x4(%rax),%rdx
  cmp    %r8,%rdx
  ja     L67
  mov    %rdx,%rax
  movl   $0x3b746c26,(%rdi)
  add    $0x4,%rdi
  cmp    %rax,%r8
  ja     L127
  jmp    L67
  nopl   0x0(%rax)
  add    $0x1,%rax
  mov    %sil,(%rdi)
  add    $0x1,%rdi
  cmp    %rax,%r8
  ja     L127
  jmp    L67
  xchg   %ax,%ax
  lea    0x5(%rax),%rdx
  cmp    %r8,%rdx
  ja     L67
  mov    %rdx,%rax
  movl   $0x706d6126,(%rdi)
  add    $0x5,%rdi
  movb   $0x3b,-0x1(%rdi)
  cmp    %rax,%r8
  ja     L127
  jmp    L67
  nopl   0x0(%rax,%rax,1)
L123:
  cmp    $0x5a,%dl
  je     L67
  cmp    $0x71,%dl
  jne    L98
  lea    0x6(%rax),%rdx
  cmp    %r8,%rdx
  ja     L67
  mov    $0x3b74,%eax
  movl   $0x6f757126,(%rdi)
  add    $0x6,%rdi
  mov    %ax,-0x2(%rdi)
  mov    %rdx,%rax
  cmp    %rax,%r8
  ja     L127
  jmp    L67
L17:
  xor    %eax,%eax
  jmp    L67
```

tool_calls: name: read_data
arguments: label: D1
datatype: string

tool: D1: Z-------------------------------**q***&*********************<*>****************************************************************---------------------------------************************************************************************************************

assistant: ```c
int html_escape_str(char *dst, const char *src, size_t n) {
  unsigned char c;
  size_t i;
  const char *codes = "Z-------------------------------"
                      "**q***&*********************<*>*"
                      "********************************"
                      "*******************************-"
                      "--------------------------------"
                      "********************************"
                      "********************************"
                      "********************************";
  for (i = 0; i < n;) {
    c = (unsigned char)*(src++);
    switch (codes[c]) {
    case 'Z':
      goto leave;
    case '*':
      i++;
      *(dst++) = c;
      break;
    case '-':
      i++;
      *(dst++) = '?';
      break;
    case '&':
      if (i + 5 > n)
        goto leave;
      i += 5;
      *(dst++) = '&';
      *(dst++) = 'a';
      *(dst++) = 'm';
      *(dst++) = 'p';
      *(dst++) = ';';
      break;
    case '<':
      if (i + 4 > n)
        goto leave;
      i += 4;
      *(dst++) = '&';
      *(dst++) = 'l';
      *(dst++) = 't';
      *(dst++) = ';';
      break;
    case '>':
      if (i + 4 > n)
        goto leave;
      i += 4;
      *(dst++) = '&';
      *(dst++) = 'g';
      *(dst++) = 't';
      *(dst++) = ';';
      break;
    case 'q':
      if (i + 6 > n)
        goto leave;
      i += 6;
      *(dst++) = '&';
      *(dst++) = 'q';
      *(dst++) = 'u';
      *(dst++) = 'o';
      *(dst++) = 't';
      *(dst++) = ';';
      break;
    }
  }
leave:
  *(dst++) = '\0';
  return i;
}
```