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

```asm
<print_usage>:
  endbr64
  push   %rbp
  lea    D90(%rip),%rdi
  lea    D151(%rip),%rbp
  call   <printf@plt>
  lea    D84(%rip),%rdi
  call   <printf@plt>
  lea    D226(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D100(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D169(%rip),%rdi
  call   <printf@plt>
  lea    D18(%rip),%rdi
  call   <printf@plt>
  lea    D22(%rip),%rdi
  call   <printf@plt>
  lea    D65(%rip),%rdi
  call   <printf@plt>
  lea    D118(%rip),%rdi
  call   <printf@plt>
  lea    D195(%rip),%rdi
  call   <printf@plt>
  lea    D189(%rip),%rdi
  call   <printf@plt>
  lea    D7(%rip),%rdi
  call   <printf@plt>
  lea    D176(%rip),%rdi
  call   <printf@plt>
  lea    D251(%rip),%rdi
  call   <printf@plt>
  lea    D177(%rip),%rdi
  call   <printf@plt>
  lea    D46(%rip),%rdi
  call   <printf@plt>
  lea    D190(%rip),%rdi
  call   <printf@plt>
  lea    D115(%rip),%rdi
  call   <printf@plt>
  lea    D238(%rip),%rdi
  call   <printf@plt>
  lea    D103(%rip),%rdi
  call   <printf@plt>
  lea    D207(%rip),%rdi
  call   <printf@plt>
  lea    D58(%rip),%rdi
  call   <printf@plt>
  lea    D87(%rip),%rdi
  call   <printf@plt>
  lea    D168(%rip),%rdi
  call   <printf@plt>
  lea    D124(%rip),%rdi
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <printf@plt>
  lea    D162(%rip),%rdi
  call   <printf@plt>
  lea    D204(%rip),%rdi
  pop    %rbp
  jmp    1050 <printf@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D90
type: string
name: parse_data
arguments: data_tag: D151
type: string
name: parse_data
arguments: data_tag: D84
type: string
name: parse_data
arguments: data_tag: D226
type: string
name: parse_data
arguments: data_tag: D100
type: string
name: parse_data
arguments: data_tag: D169
type: string
name: parse_data
arguments: data_tag: D18
type: string
name: parse_data
arguments: data_tag: D22
type: string
name: parse_data
arguments: data_tag: D65
type: string
name: parse_data
arguments: data_tag: D118
type: string
name: parse_data
arguments: data_tag: D195
type: string
name: parse_data
arguments: data_tag: D189
type: string
name: parse_data
arguments: data_tag: D7
type: string
name: parse_data
arguments: data_tag: D176
type: string
name: parse_data
arguments: data_tag: D251
type: string
name: parse_data
arguments: data_tag: D177
type: string
name: parse_data
arguments: data_tag: D46
type: string
name: parse_data
arguments: data_tag: D190
type: string
name: parse_data
arguments: data_tag: D115
type: string
name: parse_data
arguments: data_tag: D238
type: string
name: parse_data
arguments: data_tag: D103
type: string
name: parse_data
arguments: data_tag: D207
type: string
name: parse_data
arguments: data_tag: D58
type: string
name: parse_data
arguments: data_tag: D87
type: string
name: parse_data
arguments: data_tag: D168
type: string
name: parse_data
arguments: data_tag: D124
type: string
name: parse_data
arguments: data_tag: D162
type: string
name: parse_data
arguments: data_tag: D204
type: string

tool: D90: 


tool: D151: * 


tool: D84: * Usage:


tool: D226: * ./kmul.exe [options]


tool: D100: * Options:


tool: D169: *   -h:


tool: D18: *         Print this help.


tool: D22: *   -d:


tool: D65: *         Enable debug/diagnostic output.


tool: D118: *   -bindecomp:


tool: D195: *         Use binary decomposition instead of the Bernstein-Briggs algorithm.


tool: D189: *   -mul <num>:


tool: D7: *         Set the value of the multiplier. Default: 1.


tool: D176: *   -width <num>:


tool: D251: *         Set the bitwidth of all operands: multiplier, multiplicand and


tool: D177: *         product. Default: 32.


tool: D46: *   -signed:


tool: D190: *         Construct optimized routine for signed multiplication.


tool: D115: *   -unsigned:


tool: D238: *         Construct optimized routine for unsigned multiplication (default).


tool: D103: *   -nac:


tool: D207: *         Emit software routine in the NAC general assembly language (default).


tool: D58: *   -ansic:


tool: D87: *         Emit software routine in ANSI C (for widths up to 32 bits).


tool: D168: *   -c99:


tool: D124: *         Emit software routine in C99 (for widths up to 64 bits).


tool: D162: * For further information, please refer to the website:


tool: D204: * http://www.nkavvadias.com


assistant: ```c
void print_usage() {
  printf("\n");
  printf("* Usage:\n");
  printf("* ./kmul.exe [options]\n");
  printf("* \n");
  printf("* Options:\n");
  printf("* \n");
  printf("*   -h:\n");
  printf("*         Print this help.\n");
  printf("*   -d:\n");
  printf("*         Enable debug/diagnostic output.\n");
  printf("*   -bindecomp:\n");
  printf("*         Use binary decomposition instead of the Bernstein-Briggs algorithm.\n");
  printf("*   -mul <num>:\n");
  printf("*         Set the value of the multiplier. Default: 1.\n");
  printf("*   -width <num>:\n");
  printf("*         Set the bitwidth of all operands: multiplier, multiplicand and\n");
  printf("*         product. Default: 32.\n");
  printf("*   -signed:\n");
  printf("*         Construct optimized routine for signed multiplication.\n");
  printf("*   -unsigned:\n");
  printf("*         Construct optimized routine for unsigned multiplication (default).\n");
  printf("*   -nac:\n");
  printf("*         Emit software routine in the NAC general assembly language (default).\n");
  printf("*   -ansic:\n");
  printf("*         Emit software routine in ANSI C (for widths up to 32 bits).\n");
  printf("*   -c99:\n");
  printf("*         Emit software routine in C99 (for widths up to 64 bits).\n");
  printf("* \n");
  printf("* For further information, please refer to the website:\n");
  printf("* http://www.nkavvadias.com\n");
}
```