user: 下面的汇编指令对应的C源代码是什么:

```asm
<SV_WipeSavegame>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0xa8(%rbp),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <Com_DPrintf@plt>
  mov    $0x0,%eax
  call   <FS_Gamedir@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%r8
  mov    %edx,%ecx
  lea    D20(%rip),%rdx
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <remove@plt>
  mov    $0x0,%eax
  call   <FS_Gamedir@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%r8
  mov    %edx,%ecx
  lea    D47(%rip),%rdx
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <remove@plt>
  mov    $0x0,%eax
  call   <FS_Gamedir@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%r8
  mov    %edx,%ecx
  lea    D45(%rip),%rdx
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    %rax,%rdi
  call   <remove@plt>
  mov    $0x0,%eax
  call   <FS_Gamedir@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%r8
  mov    %edx,%ecx
  lea    D2(%rip),%rdx
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <Sys_FindFirst@plt>
  mov    %rax,-0x98(%rbp)
  jmp    L30
L2:
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <remove@plt>
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <Sys_FindNext@plt>
  mov    %rax,-0x98(%rbp)
L30:
  cmpq   $0x0,-0x98(%rbp)
  jne    L2
  mov    $0x0,%eax
  call   <Sys_FindClose@plt>
  mov    $0x0,%eax
  call   <FS_Gamedir@plt>
  mov    %eax,%edx
  mov    -0xa8(%rbp),%rcx
  lea    -0x90(%rbp),%rax
  mov    %rcx,%r8
  mov    %edx,%ecx
  lea    D18(%rip),%rdx
  mov    $0x80,%esi
  mov    %rax,%rdi
  call   <Com_sprintf@plt>
  lea    -0x90(%rbp),%rax
  mov    $0x0,%edx
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <Sys_FindFirst@plt>
  mov    %rax,-0x98(%rbp)
  jmp    L40
L38:
  mov    -0x98(%rbp),%rax
  mov    %rax,%rdi
  call   <remove@plt>
  mov    $0x0,%esi
  mov    $0x0,%edi
  call   <Sys_FindNext@plt>
  mov    %rax,-0x98(%rbp)
L40:
  cmpq   $0x0,-0x98(%rbp)
  jne    L38
  mov    $0x0,%eax
  call   <Sys_FindClose@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L16
  call   <__stack_chk_fail@plt>
L16:
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: tag: D29
type: string
name: retrieve_data
arguments: tag: D20
type: string
name: retrieve_data
arguments: tag: D47
type: string
name: retrieve_data
arguments: tag: D45
type: string
name: retrieve_data
arguments: tag: D2
type: string
name: retrieve_data
arguments: tag: D18
type: string

tool: D29: SV_WipeSaveGame(%s)


tool: D20: %s/save/%s/server.ssv

tool: D47: %s/save/%s/game.ssv

tool: D45: %s/save/%s/shot.jpg

tool: D2: %s/save/%s/*.sav

tool: D18: %s/save/%s/*.sv2

assistant: ```c
void SV_WipeSavegame(char *savename) {
  char name[128];
  char *s;
  Com_DPrintf("SV_WipeSaveGame(%s)\n", savename);
  Com_sprintf(name, sizeof(name), "%s/save/%s/server.ssv", FS_Gamedir(), savename);
  remove(name);
  Com_sprintf(name, sizeof(name), "%s/save/%s/game.ssv", FS_Gamedir(), savename);
  remove(name);
  Com_sprintf(name, sizeof(name), "%s/save/%s/shot.jpg", FS_Gamedir(), savename);
  remove(name);
  Com_sprintf(name, sizeof(name), "%s/save/%s/*.sav", FS_Gamedir(), savename);
  s = Sys_FindFirst(name, 0, 0);
  while (s) {
    remove(s);
    s = Sys_FindNext(0, 0);
  }
  Sys_FindClose();
  Com_sprintf(name, sizeof(name), "%s/save/%s/*.sv2", FS_Gamedir(), savename);
  s = Sys_FindFirst(name, 0, 0);
  while (s) {
    remove(s);
    s = Sys_FindNext(0, 0);
  }
  Sys_FindClose();
}
```