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

```asm
<replace_keyword>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %rdi,-0x98(%rbp)
  movsd  %xmm0,-0xa0(%rbp)
  mov    %rsi,-0xa8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x8,-0x84(%rbp)
  mov    -0xa8(%rbp),%rdx
  lea    -0x6a(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  lea    -0x6a(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x80(%rbp)
  mov    -0x80(%rbp),%eax
  mov    %eax,-0x88(%rbp)
  jmp    L6
L49:
  lea    -0x6a(%rbp),%rax
  lea    D18(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  addl   $0x1,-0x88(%rbp)
L6:
  mov    -0x88(%rbp),%eax
  cmp    -0x84(%rbp),%eax
  jl     L49
  lea    -0x6a(%rbp),%rax
  lea    D15(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x6a(%rbp),%rdx
  mov    -0x98(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x78(%rbp)
  cmpq   $0x0,-0x78(%rbp)
  jne    L16
  mov    $0x1,%eax
  jmp    L28
L16:
  mov    -0x78(%rbp),%rax
  mov    $0x3d,%esi
  mov    %rax,%rdi
  call   <strchr@plt>
  mov    %rax,-0x78(%rbp)
  cmpq   $0x0,-0x78(%rbp)
  jne    L39
  mov    $0x1,%eax
  jmp    L28
L39:
  addq   $0x1,-0x78(%rbp)
  mov    -0x78(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L69
  addq   $0x1,-0x78(%rbp)
L69:
  mov    -0xa0(%rbp),%rdx
  lea    -0x60(%rbp),%rax
  movq   %rdx,%xmm0
  lea    D10(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <sprintf@plt>
  lea    -0x60(%rbp),%rax
  mov    %rax,%rdi
  call   <strlen@plt>
  mov    %eax,-0x7c(%rbp)
  mov    -0x7c(%rbp),%edx
  lea    -0x60(%rbp),%rcx
  mov    -0x78(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncpy@plt>
  mov    -0x7c(%rbp),%eax
  cltq
  add    %rax,-0x78(%rbp)
  jmp    L44
L62:
  mov    -0x78(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x78(%rbp)
  movb   $0x20,(%rax)
L44:
  mov    -0x78(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x20,%al
  jne    L62
  mov    $0x0,%eax
L28:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L86
  call   <__stack_chk_fail@plt>
L86:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D18
type_guessed: string
name: disassemble_data
arguments: data_tag: D15
type_guessed: string
name: disassemble_data
arguments: data_tag: D10
type_guessed: string

tool: D18:  

tool: D15: =

tool: D10: %9.8f

assistant: ```c
int replace_keyword(char *fitsheader, double value, const char *key) {
  int i, length, total_length;
  char *temp;
  char char_value[80];
  int key_length = 8;
  char mod_key[8 + 2];
  strcpy(mod_key, key);
  length = strlen(mod_key);
  for (i = length; i < key_length; i++)
    strcat(mod_key, " ");
  strcat(mod_key, "=");
  temp = strstr(fitsheader, mod_key);
  if (temp == NULL)
    return 1;
  temp = strchr(temp, '=');
  if (temp == NULL)
    return 1;
  if (*(++temp) == ' ')
    temp++;
  sprintf(char_value, "%9.8f", value);
  total_length = strlen(char_value);
  strncpy(temp, char_value, total_length);
  temp += total_length;
  while (*(temp) != ' ') {
    *(temp++) = ' ';
  }
  return 0;
}
```