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

```asm
<gg_message_text_to_html_110_buff>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  movslq %edx,%rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  cmp    $0xffffffff,%ebx
  je     L229
L17:
  lea    0x10(%rsp),%r14
  mov    $0x6,%ecx
  mov    %r13,%rdi
  movq   $0x0,0x10(%rsp)
  lea    D33(%rip),%rdx
  mov    %r14,%rsi
  lea    D91(%rip),%r12
  call   <gg_append@plt>
  xor    %r8d,%r8d
  test   %rbx,%rbx
  je     L6
  nopl   0x0(%rax,%rax,1)
L142:
  movzbl 0x0(%rbp,%r8,1),%eax
  lea    0x1(%r8),%r15
  cmp    $0x3c,%al
  je     L106
  cmp    $0x27,%al
  jg     L32
  cmp    $0x9,%al
  jle    L125
  lea    -0xa(%rax),%edx
  cmp    $0x1d,%dl
  ja     L192
  movzbl %dl,%edx
  movslq (%r12,%rdx,4),%rdx
  add    %r12,%rdx
  notrack jmp *%rdx
  nopl   0x0(%rax,%rax,1)
L125:
  cmp    $0xc2,%al
  jne    L192
  cmpb   $0xa0,0x0(%rbp,%r15,1)
  je     L165
  nopl   0x0(%rax,%rax,1)
L192:
  mov    0x10(%rsp),%rdx
  test   %r13,%r13
  je     L102
  mov    %al,0x0(%r13,%rdx,1)
L102:
  add    $0x1,%rdx
  mov    %r15,%r8
  mov    %rdx,0x10(%rsp)
  nopl   0x0(%rax,%rax,1)
L184:
  cmp    %r8,%rbx
  ja     L142
L6:
  mov    $0x7,%ecx
  lea    D34(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  test   %r13,%r13
  je     L129
  mov    0x10(%rsp),%rax
  movb   $0x0,0x0(%r13,%rax,1)
L66:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L220
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
  mov    $0x6,%ecx
  lea    D73(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nopl   0x0(%rax)
  mov    $0x5,%ecx
  lea    D62(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nopw   0x0(%rax,%rax,1)
  mov    $0x6,%ecx
  lea    D38(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nop
  mov    $0x4,%ecx
  lea    D64(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nop
L32:
  cmp    $0x3e,%al
  jne    L192
  mov    $0x4,%ecx
  lea    D5(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nopw   0x0(%rax,%rax,1)
L106:
  mov    $0x4,%ecx
  lea    D28(%rip),%rdx
  mov    %r14,%rsi
  mov    %r13,%rdi
  call   <gg_append@plt>
  mov    %r15,%r8
  jmp    L184
  nop
  mov    %r15,%r8
  jmp    L184
  nopl   0x0(%rax,%rax,1)
L129:
  mov    0x10(%rsp),%rax
  jmp    L66
  nopw   0x0(%rax,%rax,1)
L229:
  mov    %rsi,%rdi
  call   <strlen@plt>
  movslq %eax,%rbx
  jmp    L17
L165:
  mov    $0x6,%ecx
  mov    %r14,%rsi
  mov    %r13,%rdi
  mov    %r8,0x8(%rsp)
  lea    D12(%rip),%rdx
  call   <gg_append@plt>
  mov    0x8(%rsp),%r8
  add    $0x2,%r8
  jmp    L184
L220:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_label: D33
type: string
name: unpack_data
arguments: data_label: D34
type: string
name: unpack_data
arguments: data_label: D73
type: string
name: unpack_data
arguments: data_label: D62
type: string
name: unpack_data
arguments: data_label: D38
type: string
name: unpack_data
arguments: data_label: D64
type: string
name: unpack_data
arguments: data_label: D5
type: string
name: unpack_data
arguments: data_label: D28
type: string
name: unpack_data
arguments: data_label: D12
type: string

tool: D33: <span>

tool: D34: </span>

tool: D73: &apos;

tool: D62: &amp;

tool: D38: &quot;

tool: D64: <br>

tool: D5: &gt;

tool: D28: &lt;

tool: D12: &nbsp;

assistant: ```c
size_t gg_message_text_to_html_110_buff(char *dst, const char *text, ssize_t text_len) {
  size_t i, dst_len;
  if (text_len == -1)
    text_len = strlen(text);
  dst_len = 0;
  gg_append(dst, &dst_len, "<span>", 6);
  for (i = 0; i < (size_t)text_len; i++) {
    char c = text[i];
    if (c == '<')
      gg_append(dst, &dst_len, "&lt;", 4);
    else if (c == '>')
      gg_append(dst, &dst_len, "&gt;", 4);
    else if (c == '&')
      gg_append(dst, &dst_len, "&amp;", 5);
    else if (c == '"')
      gg_append(dst, &dst_len, "&quot;", 6);
    else if (c == '\'')
      gg_append(dst, &dst_len, "&apos;", 6);
    else if (c == '\n')
      gg_append(dst, &dst_len, "<br>", 4);
    else if (c == '\r')
      continue;
    else if (c == '\xc2' && text[i + 1] == '\xa0') {
      gg_append(dst, &dst_len, "&nbsp;", 6);
      i++;
    } else {
      if (dst)
        dst[dst_len] = c;
      dst_len++;
    }
  }
  gg_append(dst, &dst_len, "</span>", 7);
  if (dst)
    dst[dst_len] = '\0';
  return dst_len;
}
```