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
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r13
  mov    %edx,%ebp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  cmp    $0xffffffff,%edx
  je     L7
L91:
  movq   $0x0,0x10(%rsp)
  lea    0x10(%rsp),%rsi
  mov    $0x6,%ecx
  lea    D46(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  movslq %ebp,%rbp
  test   %rbp,%rbp
  je     L130
  mov    $0x0,%ebx
  lea    D11(%rip),%r15
  lea    D58(%rip),%r14
  jmp    L87
L7:
  mov    %rsi,%rdi
  call   <strlen@plt>
  mov    %eax,%ebp
  jmp    L91
L178:
  lea    0x10(%rsp),%rsi
  mov    $0x4,%ecx
  lea    D43(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
L208:
  add    $0x1,%rbx
  cmp    %rbp,%rbx
  jae    L130
L87:
  movzbl 0x0(%r13,%rbx,1),%eax
  cmp    $0x3c,%al
  je     L178
  cmp    $0x27,%al
  jg     L191
  cmp    $0x9,%al
  jle    L104
  lea    -0xa(%rax),%edx
  cmp    $0x1d,%dl
  ja     L116
  movzbl %dl,%edx
  movslq (%r14,%rdx,4),%rdx
  add    %r14,%rdx
  notrack jmp *%rdx
L104:
  cmp    $0xc2,%al
  jne    L116
  lea    0x1(%rbx),%rcx
  mov    %rcx,0x8(%rsp)
  cmpb   $0xa0,0x1(%r13,%rbx,1)
  je     L31
L116:
  test   %r12,%r12
  je     L60
  mov    0x10(%rsp),%rdx
  mov    %al,(%r12,%rdx,1)
L60:
  addq   $0x1,0x10(%rsp)
  jmp    L208
L191:
  cmp    $0x3e,%al
  jne    L116
  lea    0x10(%rsp),%rsi
  mov    $0x4,%ecx
  mov    %r15,%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  jmp    L208
  lea    0x10(%rsp),%rsi
  mov    $0x5,%ecx
  lea    D45(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  jmp    L208
  lea    0x10(%rsp),%rsi
  mov    $0x6,%ecx
  lea    D21(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  jmp    L208
  lea    0x10(%rsp),%rsi
  mov    $0x6,%ecx
  lea    D74(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  jmp    L208
  lea    0x10(%rsp),%rsi
  mov    $0x4,%ecx
  lea    D19(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  jmp    L208
L31:
  lea    0x10(%rsp),%rsi
  mov    $0x6,%ecx
  lea    D4(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  mov    0x8(%rsp),%rbx
  jmp    L208
L130:
  lea    0x10(%rsp),%rsi
  mov    $0x7,%ecx
  lea    D69(%rip),%rdx
  mov    %r12,%rdi
  call   <gg_append@plt>
  test   %r12,%r12
  je     L171
  mov    0x10(%rsp),%rax
  movb   $0x0,(%r12,%rax,1)
L171:
  mov    0x10(%rsp),%rax
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L115
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L115:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_tag: D46
type_infered: string
name: disassemble_data
arguments: data_tag: D11
type_infered: string
name: disassemble_data
arguments: data_tag: D43
type_infered: string
name: disassemble_data
arguments: data_tag: D45
type_infered: string
name: disassemble_data
arguments: data_tag: D21
type_infered: string
name: disassemble_data
arguments: data_tag: D74
type_infered: string
name: disassemble_data
arguments: data_tag: D19
type_infered: string
name: disassemble_data
arguments: data_tag: D4
type_infered: string
name: disassemble_data
arguments: data_tag: D69
type_infered: string

tool: D46: <span>

tool: D11: &gt;

tool: D43: &lt;

tool: D45: &amp;

tool: D21: &quot;

tool: D74: &apos;

tool: D19: <br>

tool: D4: &nbsp;

tool: D69: </span>

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;
}
```