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

```asm
<fig08_02>:
  endbr64
  push   %r15
  mov    $0x23,%edi
  lea    D305(%rip),%r15
  push   %r14
  lea    D266(%rip),%r14
  push   %r13
  lea    D43(%rip),%r13
  push   %r12
  lea    D316(%rip),%r12
  push   %rbp
  lea    D152(%rip),%rbp
  push   %rbx
  lea    D36(%rip),%rbx
  sub    $0x18,%rsp
  call   <isdigit@plt>
  mov    $0x38,%edi
  test   %rax,%rax
  cmove  %r15,%rbx
  call   <isdigit@plt>
  lea    D220(%rip),%rdx
  lea    D240(%rip),%r9
  test   %rax,%rax
  mov    %rbx,%r8
  lea    D263(%rip),%rsi
  mov    %r9,%rcx
  cmove  %r14,%rdx
  lea    D198(%rip),%rdi
  xor    %eax,%eax
  lea    D15(%rip),%rbx
  call   <printf@plt>
  mov    $0x34,%edi
  call   <isalpha@plt>
  lea    D99(%rip),%rdx
  mov    $0x26,%edi
  test   %rax,%rax
  lea    D163(%rip),%rax
  cmovne %rdx,%rax
  mov    %rax,0x8(%rsp)
  call   <isalpha@plt>
  mov    $0x62,%edi
  test   %rax,%rax
  lea    D258(%rip),%rax
  cmove  %rax,%r12
  call   <isalpha@plt>
  mov    $0x41,%edi
  test   %rax,%rax
  lea    D200(%rip),%rax
  cmove  %rax,%rbp
  call   <isalpha@plt>
  lea    D143(%rip),%rcx
  mov    %r13,%rdx
  push   %rcx
  mov    0x10(%rsp),%rsi
  test   %rax,%rax
  mov    %rcx,%r9
  cmovne %rbx,%rdx
  mov    %rbp,%r8
  lea    D250(%rip),%rdi
  xor    %eax,%eax
  push   %rsi
  lea    D224(%rip),%rsi
  lea    D325(%rip),%rbp
  push   %rcx
  push   %r12
  lea    D125(%rip),%r12
  call   <printf@plt>
  add    $0x20,%rsp
  mov    $0x23,%edi
  call   <isalnum@plt>
  mov    $0x38,%edi
  test   %rax,%rax
  cmove  %r15,%r12
  call   <isalnum@plt>
  mov    $0x41,%edi
  test   %rax,%rax
  cmove  %r14,%rbp
  call   <isalnum@plt>
  lea    D75(%rip),%rcx
  mov    %r13,%rdx
  push   %rcx
  test   %rax,%rax
  mov    %rcx,%r9
  mov    %rbp,%r8
  push   %r12
  cmovne %rbx,%rdx
  xor    %eax,%eax
  lea    D328(%rip),%rsi
  lea    D324(%rip),%rdi
  lea    D86(%rip),%r13
  lea    D165(%rip),%r12
  lea    D277(%rip),%rbp
  call   <printf@plt>
  mov    $0x66,%edi
  lea    D168(%rip),%rbx
  call   <isxdigit@plt>
  pop    %rdx
  mov    $0x24,%edi
  pop    %rcx
  test   %rax,%rax
  lea    D92(%rip),%rax
  cmove  %rax,%r13
  call   <isxdigit@plt>
  mov    $0x37,%edi
  test   %rax,%rax
  lea    D154(%rip),%rax
  cmove  %rax,%r12
  call   <isxdigit@plt>
  mov    $0x4a,%edi
  test   %rax,%rax
  lea    D47(%rip),%rax
  cmove  %rax,%rbp
  call   <isxdigit@plt>
  mov    $0x46,%edi
  test   %rax,%rax
  lea    D329(%rip),%rax
  cmove  %rax,%rbx
  call   <isxdigit@plt>
  lea    D54(%rip),%rcx
  lea    D290(%rip),%rdx
  push   %rcx
  test   %rax,%rax
  lea    D20(%rip),%rax
  mov    %rbx,%r8
  push   %r13
  cmove  %rax,%rdx
  mov    %rcx,%r9
  lea    D1(%rip),%rsi
  push   %rcx
  lea    D56(%rip),%rdi
  xor    %eax,%eax
  push   %r12
  push   %rcx
  push   %rbp
  call   <printf@plt>
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: unpack_data
arguments: tag: D305
type_infered: string
name: unpack_data
arguments: tag: D266
type_infered: string
name: unpack_data
arguments: tag: D43
type_infered: string
name: unpack_data
arguments: tag: D316
type_infered: string
name: unpack_data
arguments: tag: D152
type_infered: string
name: unpack_data
arguments: tag: D36
type_infered: string
name: unpack_data
arguments: tag: D220
type_infered: string
name: unpack_data
arguments: tag: D240
type_infered: string
name: unpack_data
arguments: tag: D263
type_infered: string
name: unpack_data
arguments: tag: D198
type_infered: string
name: unpack_data
arguments: tag: D15
type_infered: string
name: unpack_data
arguments: tag: D99
type_infered: string
name: unpack_data
arguments: tag: D163
type_infered: string
name: unpack_data
arguments: tag: D258
type_infered: string
name: unpack_data
arguments: tag: D200
type_infered: string
name: unpack_data
arguments: tag: D143
type_infered: string
name: unpack_data
arguments: tag: D250
type_infered: string
name: unpack_data
arguments: tag: D224
type_infered: string
name: unpack_data
arguments: tag: D325
type_infered: string
name: unpack_data
arguments: tag: D125
type_infered: string
name: unpack_data
arguments: tag: D75
type_infered: string
name: unpack_data
arguments: tag: D328
type_infered: string
name: unpack_data
arguments: tag: D324
type_infered: string
name: unpack_data
arguments: tag: D86
type_infered: string
name: unpack_data
arguments: tag: D165
type_infered: string
name: unpack_data
arguments: tag: D277
type_infered: string
name: unpack_data
arguments: tag: D168
type_infered: string
name: unpack_data
arguments: tag: D92
type_infered: string
name: unpack_data
arguments: tag: D154
type_infered: string
name: unpack_data
arguments: tag: D47
type_infered: string
name: unpack_data
arguments: tag: D329
type_infered: string
name: unpack_data
arguments: tag: D54
type_infered: string
name: unpack_data
arguments: tag: D290
type_infered: string
name: unpack_data
arguments: tag: D20
type_infered: string
name: unpack_data
arguments: tag: D1
type_infered: string
name: unpack_data
arguments: tag: D56
type_infered: string

tool: D305: # is not a 

tool: D266: 8 is not a 

tool: D43: A is not a 

tool: D316: & is a 

tool: D152: b is a 

tool: D36: # is a

tool: D220: 8 is a

tool: D240: digit

tool: D263: According to isdigit:

tool: D198: %s
%s%s
%s%s



tool: D15: A is a 

tool: D99: 4 is a 

tool: D163: 4 is not a 

tool: D258: & is not a 

tool: D200: b is not a 

tool: D143: letter

tool: D250: %s
%s%s
%s%s
%s%s
%s%s



tool: D224: According to isalpha:

tool: D325: 8 is a 

tool: D125: # is a 

tool: D75: digit or a letter

tool: D328: According to isalnum:

tool: D324: %s
%s%s
%s%s
%s%s



tool: D86: f is a 

tool: D165: $ is a 

tool: D277: 7 is a 

tool: D168: J is a 

tool: D92: f is not a 

tool: D154: $ is not a 

tool: D47: 7 is not a 

tool: D329: J is not a 

tool: D54: hexadecimal digit

tool: D290: F is a 

tool: D20: F is not a 

tool: D1: According to isxdigit:

tool: D56: %s
%s%s
%s%s
%s%s
%s%s
%s%s



assistant: ```c
void fig08_02() {
  printf("%s\n%s%s\n%s%s\n\n", "According to isdigit:", isdigit('8') ? "8 is a" : "8 is not a ", "digit", isdigit('#') ? "# is a" : "# is not a ", "digit");
  printf("%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n", "According to isalpha:", isalpha('A') ? "A is a " : "A is not a ", "letter", isalpha('b') ? "b is a " : "b is not a ", "letter", isalpha('&') ? "& is a " : "& is not a ", "letter", isalpha('4') ? "4 is a " : "4 is not a ", "letter");
  printf("%s\n%s%s\n%s%s\n%s%s\n\n", "According to isalnum:", isalnum('A') ? "A is a " : "A is not a ", "digit or a letter", isalnum('8') ? "8 is a " : "8 is not a ", "digit or a letter", isalnum('#') ? "# is a " : "# is not a ", "digit or a letter");
  printf("%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s\n\n", "According to isxdigit:", isxdigit('F') ? "F is a " : "F is not a ", "hexadecimal digit", isxdigit('J') ? "J is a " : "J is not a ", "hexadecimal digit", isxdigit('7') ? "7 is a " : "7 is not a ", "hexadecimal digit", isxdigit('$') ? "$ is a " : "$ is not a ", "hexadecimal digit", isxdigit('f') ? "f is a " : "f is not a ", "hexadecimal digit");
}
```