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

```asm
<xml_parse_tag_only>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  mov    %edx,%r13d
  push   %r12
  mov    %rsi,%r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %rcx,0x8(%rsp)
L32:
  mov    %rbp,%rdi
  call   <getc@plt>
  mov    %eax,%ebx
  cmp    $0xa,%al
  je     L310
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    $0x3c,%bl
  je     L125
  test   %eax,%eax
  je     L32
L125:
  xor    %ebx,%ebx
  xor    %r15d,%r15d
  jmp    L41
  nopw   0x0(%rax,%rax,1)
L339:
  mov    %al,(%r14)
  cmp    $0xd,%al
  je     L201
L262:
  add    $0x1,%ebx
  cmp    $0x3,%ebx
  je     L203
L148:
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    %r13d,%ebx
  jge    L75
  test   %eax,%eax
  jne    L75
  movslq %ebx,%r15
  cmpb   $0x3e,-0x1(%r12,%r15,1)
  je     L75
L41:
  mov    %rbp,%rdi
  lea    (%r12,%r15,1),%r14
  call   <getc@plt>
  cmp    $0xa,%al
  jne    L339
  add    $0x1,%ebx
  movb   $0x20,(%r14)
  cmp    $0x3,%ebx
  jne    L148
L203:
  cmpb   $0x21,(%r12)
  jne    L148
  cmpb   $0x2d,0x1(%r12)
  jne    L148
  cmpb   $0x2d,0x2(%r12)
  jne    L148
  xor    %ebx,%ebx
L40:
  mov    %rbp,%rdi
  call   <getc@plt>
  cmp    $0x2d,%al
  je     L95
  mov    %rbp,%rdi
  cmp    $0x3e,%al
  jne    L130
  cmp    $0x1,%ebx
  je     L130
  call   <feof@plt>
  test   %eax,%eax
  jne    L317
  cmp    $0x1,%ebx
  jle    L40
  nopw   0x0(%rax,%rax,1)
L317:
  mov    %rbp,%rdi
  call   <getc@plt>
  mov    %eax,%ebx
  cmp    $0xa,%al
  je     L93
  mov    %rbp,%rdi
  call   <feof@plt>
  cmp    $0x3c,%bl
  je     L113
  test   %eax,%eax
  je     L317
L113:
  xor    %ebx,%ebx
  jmp    L148
  xchg   %ax,%ax
L310:
  mov    0x8(%rsp),%rax
  mov    %rbp,%rdi
  addl   $0x1,(%rax)
  call   <feof@plt>
  test   %eax,%eax
  je     L32
  jmp    L125
  nopl   (%rax)
L201:
  mov    %rbp,%rdi
  call   <feof@plt>
  test   %eax,%eax
  je     L41
  jmp    L262
  nopl   (%rax)
L75:
  mov    %r12,%rax
  test   %ebx,%ebx
  je     L196
  movslq %ebx,%rbx
  lea    -0x1(%r12,%rbx,1),%rax
L196:
  movb   $0x0,(%rax)
  add    $0x18,%rsp
  mov    %r12,%rdi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1070 <xml_remove_leading_trailing_spaces@plt>
L93:
  mov    0x8(%rsp),%rax
  mov    %rbp,%rdi
  addl   $0x1,(%rax)
  call   <feof@plt>
  test   %eax,%eax
  je     L317
  xor    %ebx,%ebx
  jmp    L148
  nop
L95:
  mov    %rbp,%rdi
  add    $0x1,%ebx
  call   <feof@plt>
  test   %eax,%eax
  je     L40
  jmp    L317
  nopl   0x0(%rax,%rax,1)
L130:
  call   <feof@plt>
  mov    %eax,%ebx
  test   %eax,%eax
  je     L40
  jmp    L317
```

assistant: ```c
void xml_parse_tag_only(FILE *fileptr, char *tag, int maxlen, int *lnn) {
  int i;
  char ch;
  do {
    ch = getc(fileptr);
    if (ch == '\n')
      (*lnn)++;
  } while ((!feof(fileptr)) && (ch != '<'));
  i = 0;
  do {
    do {
      tag[i] = getc(fileptr);
      if (tag[i] == '\n')
        tag[i] = ' ';
    } while ((tag[i] == '\r') && (!feof(fileptr)));
    i = i + 1;
    if ((i == 3) && (tag[0] == '!') && (tag[1] == '-') && (tag[2] == '-')) {
      i = 0;
      do {
        ch = getc(fileptr);
        if (ch == '-')
          i = i + 1;
        else if ((ch != '>') || (i == 1))
          i = 0;
      } while ((!feof(fileptr)) && ((i < 2) || (ch != '>')));
      do {
        ch = getc(fileptr);
        if (ch == '\n')
          (*lnn)++;
      } while ((!feof(fileptr)) && (ch != '<'));
      i = 0;
    }
  } while ((!feof(fileptr)) && (i < maxlen) && (tag[i - 1] != '>'));
  if (i == 0)
    i = 1;
  tag[i - 1] = '\0';
  xml_remove_leading_trailing_spaces(tag);
}
```