user: 请显示与下面列出的汇编代码相匹配的C语言实现：

```asm
<uInCIDR6Format32>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  mov    -0x18(%rbp),%rax
  mov    $0x2f,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L27
  movl   $0x0,-0xc(%rbp)
  mov    0x28(%rbp),%rdx
  mov    -0x8(%rbp),%rax
  lea    D15(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  mov    %eax,-0xc(%rbp)
  cmpl   $0x0,-0xc(%rbp)
  je     L89
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isdigit@plt>
  test   %eax,%eax
  jne    L12
L89:
  lea    D9(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L94
L12:
  mov    0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x80,%eax
  jbe    L41
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L94
L41:
  mov    -0x8(%rbp),%rax
  movb   $0x0,(%rax)
  mov    -0x40(%rbp),%r8
  mov    -0x38(%rbp),%rdi
  mov    -0x30(%rbp),%rcx
  mov    -0x28(%rbp),%rdx
  mov    -0x20(%rbp),%rsi
  mov    -0x18(%rbp),%rax
  sub    $0x8,%rsp
  push   0x20(%rbp)
  push   0x18(%rbp)
  push   0x10(%rbp)
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <uInIpv6Format32@plt>
  add    $0x20,%rsp
  test   %eax,%eax
  jne    L50
  jmp    L37
L27:
  lea    D1(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L94
L37:
  lea    D6(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  jmp    L94
L50:
  mov    -0x8(%rbp),%rax
  movb   $0x2f,(%rax)
  mov    0x28(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,%esi
  lea    D48(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%eax
L94:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D15
datatype: string
name: extract_symbolic_data
arguments: data_label: D9
datatype: string
name: extract_symbolic_data
arguments: data_label: D2
datatype: string
name: extract_symbolic_data
arguments: data_label: D1
datatype: string
name: extract_symbolic_data
arguments: data_label: D6
datatype: string
name: extract_symbolic_data
arguments: data_label: D48
datatype: string

tool: D15: /%u

tool: D9: err /(invalid CIDR mask)

tool: D2: err CIDR mask out of range 0-128

tool: D1: err no /

tool: D6: err !uInIpv6Format

tool: D48: uInCIDR6Format32: /%u


assistant: ```c
unsigned uInCIDR6Format32(const char *cCIDR6, unsigned *h1, unsigned *h2, unsigned *h3, unsigned *h4, unsigned *h5, unsigned *h6, unsigned *h7, unsigned *h8, unsigned *uCIDR) {
  char *cp;
  if ((cp = strchr(cCIDR6, '/'))) {
    unsigned uCount = 0;
    uCount = sscanf(cp, "/%u", uCIDR);
    if (!uCount || !isdigit(*(cp + 1))) {
      printf("err /(invalid CIDR mask)\n");
      return (0);
    } else if (*uCIDR > 128) {
      printf("err CIDR mask out of range 0-128\n");
      return (0);
    }
    *cp = 0;
  } else {
    printf("err no /\n");
    return (0);
  }
  if (!uInIpv6Format32(cCIDR6, h1, h2, h3, h4, h5, h6, h7, h8)) {
    printf("err !uInIpv6Format\n");
    return (0);
  }
  *cp = '/';
  printf("uInCIDR6Format32: /%u\n", *uCIDR);
  return (1);
}
```