user: 下面的汇编指令对应的C源代码是什么:

```asm
<parse_name>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %rdi,-0x78(%rbp)
  mov    %rsi,-0x80(%rbp)
  mov    %rdx,-0x88(%rbp)
  mov    %rcx,-0x90(%rbp)
  mov    %r8,-0x98(%rbp)
  mov    %r9,-0xa0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x68(%rbp)
  movl   $0x0,-0x64(%rbp)
  mov    -0x78(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  movl   $0x0,-0x6c(%rbp)
  movzbl -0x60(%rbp),%eax
  mov    %al,-0x6d(%rbp)
  jmp    L320
L65:
  mov    -0x6c(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <tolower@plt>
  mov    %eax,%edx
  mov    -0x6c(%rbp),%eax
  cltq
  mov    %dl,-0x60(%rbp,%rax,1)
  addl   $0x1,-0x6c(%rbp)
  mov    -0x6c(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  mov    %al,-0x6d(%rbp)
L320:
  cmpb   $0x0,-0x6d(%rbp)
  jne    L65
  movzbl -0x60(%rbp),%eax
  mov    %al,-0x6d(%rbp)
  jmp    L162
L179:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x3,%edx
  lea    D14(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L191
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x1,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L191:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x5,%edx
  lea    D65(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L77
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x2,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x90(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L77:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x4,%edx
  lea    D69(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L336
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x4,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x98(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x98(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L336:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x5,%edx
  lea    D62(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L315
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x8,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x90(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x98(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x98(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L315:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x7,%edx
  lea    D32(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L39
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x10,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x98(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x98(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L39:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x6,%edx
  lea    D20(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L186
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x20,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x88(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x88(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x90(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L186:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x4,%edx
  lea    D66(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L293
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x40,%eax
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x98(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x98(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x90(%rbp),%rax
  mov    (%rax),%eax
  lea    0xff(%rax),%edx
  mov    -0x90(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L293:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0x5,%edx
  lea    D48(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L4
  mov    -0x80(%rbp),%rax
  mov    (%rax),%eax
  or     $0x80,%al
  mov    %eax,%edx
  mov    -0x80(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L301
L4:
  mov    -0x68(%rbp),%eax
  cltq
  lea    -0x60(%rbp),%rdx
  add    %rdx,%rax
  mov    $0xb,%edx
  lea    D52(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L278
  mov    -0xa0(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L301
L278:
  movl   $0x1,-0x64(%rbp)
L301:
  cmpl   $0x0,-0x64(%rbp)
  jne    L162
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L162
  mov    -0x68(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  mov    %al,-0x6d(%rbp)
  jmp    L18
L121:
  addl   $0x1,-0x68(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  mov    %al,-0x6d(%rbp)
L18:
  cmpb   $0x2c,-0x6d(%rbp)
  je     L302
  cmpb   $0x20,-0x6d(%rbp)
  je     L302
  cmpb   $0x0,-0x6d(%rbp)
  jne    L121
L302:
  cmpb   $0x0,-0x6d(%rbp)
  je     L162
  mov    -0x68(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  mov    %al,-0x6d(%rbp)
  jmp    L11
L73:
  addl   $0x1,-0x68(%rbp)
  mov    -0x68(%rbp),%eax
  cltq
  movzbl -0x60(%rbp,%rax,1),%eax
  mov    %al,-0x6d(%rbp)
L11:
  cmpb   $0x2c,-0x6d(%rbp)
  je     L73
  cmpb   $0x20,-0x6d(%rbp)
  je     L73
L162:
  cmpb   $0x0,-0x6d(%rbp)
  je     L285
  cmpl   $0x0,-0x64(%rbp)
  jne    L285
  mov    -0xa0(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L179
L285:
  cmpl   $0x0,-0x64(%rbp)
  sete   %al
  movzbl %al,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L288
  call   <__stack_chk_fail@plt>
L288:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: data_label: D14
type: string
name: unpack_data
arguments: data_label: D65
type: string
name: unpack_data
arguments: data_label: D69
type: string
name: unpack_data
arguments: data_label: D62
type: string
name: unpack_data
arguments: data_label: D32
type: string
name: unpack_data
arguments: data_label: D20
type: string
name: unpack_data
arguments: data_label: D66
type: string
name: unpack_data
arguments: data_label: D48
type: string
name: unpack_data
arguments: data_label: D52
type: string

tool: D14: red

tool: D65: green

tool: D69: blue

tool: D62: white

tool: D32: magenta

tool: D20: yellow

tool: D66: cyan

tool: D48: black

tool: D52: transparent

assistant: ```c
int parse_name(name, colors, R, G, B, transparent)
char name[];
int *colors, *R, *G, *B, *transparent;
{
  int i, stringptr = 0, badstring = 0;
  char c, tempstr[80];
  strcpy(tempstr, name);
  for (i = 0, c = tempstr[0]; c != '\0'; c = tempstr[++i])
    tempstr[i] = tolower(tempstr[i]);
  c = tempstr[0];
  while ((c != '\0') && !badstring && !(*transparent)) {
    if (strncmp(tempstr + stringptr, "red", 3) == 0) {
      *colors = *colors | 0x01;
      *R += 255;
    } else if (strncmp(tempstr + stringptr, "green", 5) == 0) {
      *colors = *colors | 0x02;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "blue", 4) == 0) {
      *colors = *colors | 0x04;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "white", 5) == 0) {
      *colors = *colors | 0x08;
      *R += 255;
      *G += 255;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "magenta", 7) == 0) {
      *colors = *colors | 0x10;
      *R += 255;
      *B += 255;
    } else if (strncmp(tempstr + stringptr, "yellow", 6) == 0) {
      *colors = *colors | 0x20;
      *R += 255;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "cyan", 4) == 0) {
      *colors = *colors | 0x40;
      *B += 255;
      *G += 255;
    } else if (strncmp(tempstr + stringptr, "black", 5) == 0) {
      *colors = *colors | 0x80;
    } else if (strncmp(tempstr + stringptr, "transparent", 11)) {
      *transparent = 1;
    } else {
      badstring = 1;
    }
    if (!badstring && !(*transparent)) {
      for (c = tempstr[stringptr]; ((c != ',') && (c != ' ') && (c != '\0'));)
        c = tempstr[++stringptr];
      if (c != '\0') {
        for (c = tempstr[stringptr]; ((c == ',') || (c == ' '));)
          c = tempstr[++stringptr];
      }
    }
  }
  return (!badstring);
}
```