user: Converte this assembly snippet into its equivalent C code:

```asm
<ares_strerror>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %edi,-0x94(%rbp)
  mov    %rsi,-0xa0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    D87(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D29(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D93(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D41(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D59(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D66(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D36(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D150(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D1(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D95(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D45(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D139(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D28(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D88(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D111(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D73(%rip),%rax
  mov    %rax,-0x18(%rbp)
  cmpl   $0x0,-0x94(%rbp)
  js     L23
  mov    -0x94(%rbp),%eax
  cmp    $0xf,%eax
  ja     L23
  mov    $0x1,%eax
  jmp    L28
L23:
  mov    $0x0,%eax
L28:
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x94(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,8),%rax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L31
  call   <__stack_chk_fail@plt>
L31:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: data_label: D87
datatype: string
name: retrieve_data
arguments: data_label: D29
datatype: string
name: retrieve_data
arguments: data_label: D93
datatype: string
name: retrieve_data
arguments: data_label: D41
datatype: string
name: retrieve_data
arguments: data_label: D59
datatype: string
name: retrieve_data
arguments: data_label: D66
datatype: string
name: retrieve_data
arguments: data_label: D36
datatype: string
name: retrieve_data
arguments: data_label: D150
datatype: string
name: retrieve_data
arguments: data_label: D1
datatype: string
name: retrieve_data
arguments: data_label: D95
datatype: string
name: retrieve_data
arguments: data_label: D45
datatype: string
name: retrieve_data
arguments: data_label: D139
datatype: string
name: retrieve_data
arguments: data_label: D28
datatype: string
name: retrieve_data
arguments: data_label: D88
datatype: string
name: retrieve_data
arguments: data_label: D111
datatype: string
name: retrieve_data
arguments: data_label: D73
datatype: string

tool: D87: Successful completion

tool: D29: DNS server returned answer with no data

tool: D93: DNS server claims query was misformatted

tool: D41: DNS server returned general failure

tool: D59: Domain name not found

tool: D66: DNS server does not implement requested operation

tool: D36: DNS server refused query

tool: D150: Misformatted DNS query

tool: D1: Misformatted domain name

tool: D95: Unsupported address family

tool: D45: Misformatted DNS reply

tool: D139: Could not contact DNS servers

tool: D28: Timeout while contacting DNS servers

tool: D88: End of file

tool: D111: Error reading file

tool: D73: Out of memory

assistant: ```c
const char *ares_strerror(int code, char **memptr) {
  const char *errtext[] = {"Successful completion", "DNS server returned answer with no data", "DNS server claims query was misformatted", "DNS server returned general failure", "Domain name not found", "DNS server does not implement requested operation", "DNS server refused query", "Misformatted DNS query", "Misformatted domain name", "Unsupported address family", "Misformatted DNS reply", "Could not contact DNS servers", "Timeout while contacting DNS servers", "End of file", "Error reading file", "Out of memory"};
  assert(code >= 0 && code < (sizeof(errtext) / sizeof(*errtext)));
  return errtext[code];
}
```