user: What would the C source look like for the assembly code provided here:

```asm
<print_sys_cfg_rates_ext_usage>:
  endbr64
  sub    $0x8,%rsp
  lea    D78(%rip),%rdi
  call   <printf@plt>
  lea    D33(%rip),%rdi
  call   <printf@plt>
  lea    D16(%rip),%rdi
  call   <printf@plt>
  lea    D105(%rip),%rdi
  call   <printf@plt>
  lea    D90(%rip),%rdi
  call   <printf@plt>
  lea    D113(%rip),%rdi
  call   <printf@plt>
  lea    D109(%rip),%rdi
  call   <printf@plt>
  lea    D136(%rip),%rdi
  call   <printf@plt>
  lea    D59(%rip),%rdi
  call   <printf@plt>
  lea    D66(%rip),%rdi
  call   <printf@plt>
  lea    D98(%rip),%rdi
  call   <printf@plt>
  lea    D37(%rip),%rdi
  call   <printf@plt>
  lea    D58(%rip),%rdi
  call   <printf@plt>
  lea    D18(%rip),%rdi
  add    $0x8,%rsp
  jmp    1050 <printf@plt>
```

tool_calls: name: read_data
arguments: data_tag: D78
type: string
name: read_data
arguments: data_tag: D33
type: string
name: read_data
arguments: data_tag: D16
type: string
name: read_data
arguments: data_tag: D105
type: string
name: read_data
arguments: data_tag: D90
type: string
name: read_data
arguments: data_tag: D113
type: string
name: read_data
arguments: data_tag: D109
type: string
name: read_data
arguments: data_tag: D136
type: string
name: read_data
arguments: data_tag: D59
type: string
name: read_data
arguments: data_tag: D66
type: string
name: read_data
arguments: data_tag: D98
type: string
name: read_data
arguments: data_tag: D37
type: string
name: read_data
arguments: data_tag: D58
type: string
name: read_data
arguments: data_tag: D18
type: string

tool: D78: 
Usage : sys_cfg_rates_ext [rates RATES] [mbrate RATE]


tool: D33: 
If 'Rate' provided, a 'set' is performed else a 'get' is performed

tool: D16: 
RATES is provided as a set of data rates, in unit of 500 kilobits

tool: D105: 
A rate with MSB bit is basic rate, i.e 0x82 is basic rate.


tool: D90: 
Following is the list of supported rates in units of 500 Kbps:

tool: D113: 
Decimal: (2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108)

tool: D109: 
Hex: (0x02, 0x04, 0x0b, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c)

tool: D136: 
Basic rates: (0x82, 0x84, 0x8b, 0x96, 0x8C, 0x92, 0x98, 0xA4, 0xB0, 0xC8, 0xE0, 0xEc)


tool: D59: 
Rates 2, 4, 11 and 22 (in units of 500 Kbps) must be present in either of basic or

tool: D66: 
non-basic rates. If OFDM rates are enabled then 12, 24 and 48 (in units of 500 Kbps)

tool: D98: 
must be present in either basic or non-basic rates

tool: D37: 
Each rate must be separated by a space.

tool: D58: 
rates followed by RATES for setting operational rates.

tool: D18: 
mbrate followed by RATE for setting multicast and broadcast rate.

assistant: ```c
void print_sys_cfg_rates_ext_usage(void) {
  printf("\nUsage : sys_cfg_rates_ext [rates RATES] [mbrate RATE]\n");
  printf("\nIf 'Rate' provided, a 'set' is performed else a 'get' is performed");
  printf("\nRATES is provided as a set of data rates, in unit of 500 kilobits");
  printf("\nA rate with MSB bit is basic rate, i.e 0x82 is basic rate.\n");
  printf("\nFollowing is the list of supported rates in units of 500 Kbps:");
  printf("\nDecimal: (2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108)");
  printf("\nHex: (0x02, 0x04, 0x0b, 0x16, 0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c)");
  printf("\nBasic rates: (0x82, 0x84, 0x8b, 0x96, 0x8C, 0x92, 0x98, 0xA4, 0xB0, 0xC8, 0xE0, 0xEc)\n");
  printf("\nRates 2, 4, 11 and 22 (in units of 500 Kbps) must be present in either of basic or");
  printf("\nnon-basic rates. If OFDM rates are enabled then 12, 24 and 48 (in units of 500 Kbps)");
  printf("\nmust be present in either basic or non-basic rates");
  printf("\nEach rate must be separated by a space.");
  printf("\nrates followed by RATES for setting operational rates.");
  printf("\nmbrate followed by RATE for setting multicast and broadcast rate.");
  return;
}
```