user: Please show me the C implementation that matches the assembly code listed below:

```asm
<print_info>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r12
  push   %rbx
  sub    $0x10,%rsp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_ssid@plt>
  mov    %rax,%rdx
  mov    -0x20(%rbp),%rax
  mov    %rax,%rsi
  lea    D96(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_bssid@plt>
  mov    %rax,%rsi
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_frequency@plt>
  mov    %rax,%r12
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_channel@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_mode@plt>
  mov    %r12,%rcx
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D36(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_quality_max@plt>
  mov    %rax,%r12
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_quality@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_txpower@plt>
  mov    %r12,%rcx
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_noise@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_signal@plt>
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D113(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_rate@plt>
  mov    %rax,%rsi
  lea    D27(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_encryption@plt>
  mov    %rax,%rsi
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_hwmodes@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_type@plt>
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_hardware_name@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_hardware_id@plt>
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D47(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_txpower_offset@plt>
  mov    %rax,%rsi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_frequency_offset@plt>
  mov    %rax,%rsi
  lea    D46(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_phyname@plt>
  mov    %rax,%rbx
  mov    -0x20(%rbp),%rdx
  mov    -0x18(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <print_mbssid_supp@plt>
  mov    %rbx,%rdx
  mov    %rax,%rsi
  lea    D16(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  nop
  add    $0x10,%rsp
  pop    %rbx
  pop    %r12
  pop    %rbp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D96
data_type: string
name: extract_symbolic_data
arguments: label: D2
data_type: string
name: extract_symbolic_data
arguments: label: D36
data_type: string
name: extract_symbolic_data
arguments: label: D49
data_type: string
name: extract_symbolic_data
arguments: label: D113
data_type: string
name: extract_symbolic_data
arguments: label: D27
data_type: string
name: extract_symbolic_data
arguments: label: D98
data_type: string
name: extract_symbolic_data
arguments: label: D91
data_type: string
name: extract_symbolic_data
arguments: label: D47
data_type: string
name: extract_symbolic_data
arguments: label: D3
data_type: string
name: extract_symbolic_data
arguments: label: D46
data_type: string
name: extract_symbolic_data
arguments: label: D16
data_type: string

tool: D96: %-9s ESSID: %s


tool: D2:           Access Point: %s


tool: D36:           Mode: %s  Channel: %s (%s)


tool: D49:           Tx-Power: %s  Link Quality: %s/%s


tool: D113:           Signal: %s  Noise: %s


tool: D27:           Bit Rate: %s


tool: D98:           Encryption: %s


tool: D91:           Type: %s  HW Mode(s): %s


tool: D47:           Hardware: %s [%s]


tool: D3:           TX power offset: %s


tool: D46:           Frequency offset: %s


tool: D16:           Supports VAPs: %s  PHY name: %s


assistant: ```c
void print_info(const struct iwinfo_ops *iw, const char *ifname) {
  printf("%-9s ESSID: %s\n", ifname, print_ssid(iw, ifname));
  printf("          Access Point: %s\n", print_bssid(iw, ifname));
  printf("          Mode: %s  Channel: %s (%s)\n", print_mode(iw, ifname), print_channel(iw, ifname), print_frequency(iw, ifname));
  printf("          Tx-Power: %s  Link Quality: %s/%s\n", print_txpower(iw, ifname), print_quality(iw, ifname), print_quality_max(iw, ifname));
  printf("          Signal: %s  Noise: %s\n", print_signal(iw, ifname), print_noise(iw, ifname));
  printf("          Bit Rate: %s\n", print_rate(iw, ifname));
  printf("          Encryption: %s\n", print_encryption(iw, ifname));
  printf("          Type: %s  HW Mode(s): %s\n", print_type(iw, ifname), print_hwmodes(iw, ifname));
  printf("          Hardware: %s [%s]\n", print_hardware_id(iw, ifname), print_hardware_name(iw, ifname));
  printf("          TX power offset: %s\n", print_txpower_offset(iw, ifname));
  printf("          Frequency offset: %s\n", print_frequency_offset(iw, ifname));
  printf("          Supports VAPs: %s  PHY name: %s\n", print_mbssid_supp(iw, ifname), print_phyname(iw, ifname));
}
```