user: 请从给定的汇编指令推导出C源代码：

```asm
<convertLine>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x18(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <parseHex@plt>
  cltq
  add    %rax,-0x28(%rbp)
  mov    -0x18(%rbp),%rax
  cmp    $0xffff,%rax
  ja     L241
  jmp    L155
L212:
  addq   $0x1,-0x28(%rbp)
L155:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L239
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x6b,%al
  jne    L212
L239:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L122
  mov    -0x28(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  jmp    L46
L204:
  addq   $0x1,-0x28(%rbp)
L46:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L88
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L88
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  jne    L204
L88:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L132
  mov    -0x28(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x28(%rbp)
  movb   $0x0,(%rax)
  jmp    L57
L186:
  addq   $0x1,-0x28(%rbp)
L57:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L138
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  je     L186
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x9,%al
  je     L186
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xd,%al
  je     L186
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xa,%al
  je     L186
L138:
  mov    -0x28(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  je     L216
  mov    -0x10(%rbp),%rax
  lea    D16(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L87
  lea    -0x1c(%rbp),%rdx
  lea    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <parseKuTen@plt>
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%ecx
  mov    -0x18(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <processJis0208@plt>
  jmp    L43
L87:
  mov    -0x10(%rbp),%rax
  lea    D1(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L43
  lea    -0x1c(%rbp),%rdx
  lea    -0x20(%rbp),%rcx
  mov    -0x28(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <parseKuTen@plt>
  mov    -0x1c(%rbp),%edx
  mov    -0x20(%rbp),%ecx
  mov    -0x18(%rbp),%rax
  mov    %ecx,%esi
  mov    %rax,%rdi
  call   <processJis0212@plt>
  jmp    L43
L241:
  nop
  jmp    L43
L122:
  nop
  jmp    L43
L132:
  nop
  jmp    L43
L216:
  nop
L43:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L242
  call   <__stack_chk_fail@plt>
L242:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D16
type_infered: string
name: extract_symbolic_data
arguments: label: D1
type_infered: string

tool: D16: kJis0

tool: D1: kJis1

assistant: ```c
void convertLine(char *buf) {
  unsigned long code;
  const char *key;
  int ku, ten;
  buf += parseHex(buf, &code);
  if (code >= 0x10000) {
    return;
  }
  while (*buf != '\0' && *buf != 'k') {
    ++buf;
  }
  if (*buf == '\0') {
    return;
  }
  key = buf;
  while (*buf != '\0' && *buf != ' ' && *buf != '\t') {
    ++buf;
  }
  if (*buf == '\0') {
    return;
  }
  *buf++ = '\0';
  while (*buf != '\0' && (*buf == ' ' || *buf == '\t' || *buf == '\r' || *buf == '\n')) {
    ++buf;
  }
  if (*buf == '\0') {
    return;
  }
  if (!strcmp(key, "kJis0")) {
    parseKuTen(buf, &ku, &ten);
    processJis0208(code, ku, ten);
  } else if (!strcmp(key, "kJis1")) {
    parseKuTen(buf, &ku, &ten);
    processJis0212(code, ku, ten);
  }
}
```