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

```asm
<checkWlanCli>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0x50(%rbp)
  movq   $0x0,-0x48(%rbp)
  movq   $0x0,-0x40(%rbp)
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  movq   $0x0,-0x28(%rbp)
  movq   $0x0,-0x20(%rbp)
  movq   $0x0,-0x18(%rbp)
  movq   $0x0,-0x70(%rbp)
  movq   $0x0,-0x68(%rbp)
  movq   $0x0,-0x60(%rbp)
  movq   $0x0,-0x58(%rbp)
  movq   $0x0,-0x78(%rbp)
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <system@plt>
  lea    D24(%rip),%rax
  mov    %rax,%rsi
  lea    D55(%rip),%rax
  mov    %rax,%rdi
  call   <popen@plt>
  mov    %rax,-0x80(%rbp)
  cmpq   $0x0,-0x80(%rbp)
  jne    L28
  mov    $0xffffffff,%eax
  jmp    L46
L78:
  lea    -0x90(%rbp),%r8
  lea    -0x94(%rbp),%rdi
  lea    -0x98(%rbp),%rcx
  lea    -0x70(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  lea    -0x84(%rbp),%rsi
  push   %rsi
  lea    -0x88(%rbp),%rsi
  push   %rsi
  lea    -0x8c(%rbp),%rsi
  push   %rsi
  lea    -0x78(%rbp),%rsi
  push   %rsi
  mov    %r8,%r9
  mov    %rdi,%r8
  lea    D38(%rip),%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  add    $0x20,%rsp
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  cmp    $0xf,%eax
  jg     L56
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <pclose@plt>
  mov    $0x0,%eax
  jmp    L46
L56:
  lea    -0x70(%rbp),%rcx
  mov    -0xa8(%rbp),%rax
  mov    $0x11,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcmp@plt>
  test   %rax,%rax
  jne    L28
  lea    -0x70(%rbp),%rdx
  mov    -0xa8(%rbp),%rax
  mov    %rax,%rsi
  lea    D44(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <pclose@plt>
  mov    $0x1,%eax
  jmp    L46
L28:
  mov    -0x80(%rbp),%rdx
  lea    -0x50(%rbp),%rax
  mov    $0x40,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L78
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <pclose@plt>
  mov    $0x0,%eax
L46:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L37
  call   <__stack_chk_fail@plt>
L37:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D35
type_guessed: string
name: parse_data
arguments: data_tag: D50
type_guessed: string
name: parse_data
arguments: data_tag: D24
type_guessed: string
name: parse_data
arguments: data_tag: D55
type_guessed: string
name: parse_data
arguments: data_tag: D38
type_guessed: string
name: parse_data
arguments: data_tag: D44
type_guessed: string

tool: D35: echo  > /proc/wl_list

tool: D50: iwpriv ra0 show stainfo

tool: D24: r

tool: D55: cat /proc/wl_list

tool: D38: %s %d %d %d %s %d %d %d

tool: D44: usermac = %s,mac_str = %s


assistant: ```c
int checkWlanCli(char *usermac) {
  FILE *fp;
  char buf[64] = {0};
  char mac_str[32] = {0};
  int aid, psm, mimops, mcs, sgi, stbc;
  char bw[8] = {0};
  system("echo "
         " > /proc/wl_list");
  system("iwpriv ra0 show stainfo");
  fp = popen("cat /proc/wl_list", "r");
  if (!fp) {
    return -1;
  }
  while (fgets(buf, sizeof(buf), fp)) {
    sscanf(buf, "%s %d %d %d %s %d %d %d", mac_str, &aid, &psm, &mimops, bw, &mcs, &sgi, &stbc);
    if (16 > strlen(mac_str)) {
      pclose(fp);
      return 0;
    }
    if (0 == memcmp(usermac, mac_str, 17)) {
      printf("usermac = %s,mac_str = %s\n", usermac, mac_str);
      pclose(fp);
      return 1;
    }
  }
  pclose(fp);
  return 0;
}
```