user: Demonstrate the C code that generates the assembly output below:

```asm
<SDF_xml_decode_data>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,-0xc(%rbp)
  mov    %rdx,-0x18(%rbp)
  jmp    L62
L123:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x26,%al
  jne    L81
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  lea    D46(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L91
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movb   $0x3c,(%rax)
  addq   $0x4,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x4,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L62
L91:
  mov    -0x8(%rbp),%rax
  mov    $0x4,%edx
  lea    D39(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L105
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movb   $0x3e,(%rax)
  addq   $0x4,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x4,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L62
L105:
  mov    -0x8(%rbp),%rax
  mov    $0x5,%edx
  lea    D25(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L73
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movb   $0x26,(%rax)
  addq   $0x5,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x5,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L62
L73:
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  lea    D17(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L31
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movb   $0x27,(%rax)
  addq   $0x6,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x6,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L62
L31:
  mov    -0x8(%rbp),%rax
  mov    $0x6,%edx
  lea    D10(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L81
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x18(%rbp)
  movb   $0x22,(%rax)
  addq   $0x6,-0x8(%rbp)
  mov    -0xc(%rbp),%eax
  sub    $0x6,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L62
L81:
  mov    -0x8(%rbp),%rdx
  lea    0x1(%rdx),%rax
  mov    %rax,-0x8(%rbp)
  mov    -0x18(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x18(%rbp)
  movzbl (%rdx),%edx
  mov    %dl,(%rax)
  subl   $0x1,-0xc(%rbp)
L62:
  cmpl   $0x0,-0xc(%rbp)
  jg     L123
  mov    -0x18(%rbp),%rax
  movb   $0x0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D46
datatype: string
name: disassemble_data
arguments: data_tag: D39
datatype: string
name: disassemble_data
arguments: data_tag: D25
datatype: string
name: disassemble_data
arguments: data_tag: D17
datatype: string
name: disassemble_data
arguments: data_tag: D10
datatype: string

tool: D46: &lt;

tool: D39: &gt;

tool: D25: &amp;

tool: D17: &apos;

tool: D10: &quot;

assistant: ```c
void SDF_xml_decode_data(char *s, int len, char *t) {
  while (len > 0) {
    if (*s == '&') {
      {
        if (memcmp(s, ("&lt;"), sizeof("&lt;") - 1) == 0) {
          *t++ = ('<');
          s += sizeof("&lt;") - 1;
          len -= sizeof("&lt;") - 1;
          continue;
        }
      }
      {
        if (memcmp(s, ("&gt;"), sizeof("&gt;") - 1) == 0) {
          *t++ = ('>');
          s += sizeof("&gt;") - 1;
          len -= sizeof("&gt;") - 1;
          continue;
        }
      }
      {
        if (memcmp(s, ("&amp;"), sizeof("&amp;") - 1) == 0) {
          *t++ = ('&');
          s += sizeof("&amp;") - 1;
          len -= sizeof("&amp;") - 1;
          continue;
        }
      }
      {
        if (memcmp(s, ("&apos;"), sizeof("&apos;") - 1) == 0) {
          *t++ = ('\'');
          s += sizeof("&apos;") - 1;
          len -= sizeof("&apos;") - 1;
          continue;
        }
      }
      {
        if (memcmp(s, ("&quot;"), sizeof("&quot;") - 1) == 0) {
          *t++ = ('"');
          s += sizeof("&quot;") - 1;
          len -= sizeof("&quot;") - 1;
          continue;
        }
      }
    }
    *t++ = *s++;
    --len;
  }
  *t = '\0';
}
```