user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<test_strncat_chk>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movb   $0x0,-0x30(%rbp)
  lea    -0x30(%rbp),%rax
  mov    $0x20,%ecx
  mov    $0x4,%edx
  lea    D85(%rip),%rsi
  mov    %rax,%rdi
  call   <__strncat_chk@plt>
  lea    -0x30(%rbp),%rdx
  cmp    %rdx,%rax
  je     L3
  mov    $0x114,%edx
  lea    D44(%rip),%rax
  mov    %rax,%rsi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L59
L3:
  lea    -0x30(%rbp),%rax
  lea    D85(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L38
  mov    $0x115,%edx
  lea    D59(%rip),%rax
  mov    %rax,%rsi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L59
L38:
  lea    -0x30(%rbp),%rax
  mov    $0x20,%ecx
  mov    $0x1,%edx
  lea    D85(%rip),%rsi
  mov    %rax,%rdi
  call   <__strncat_chk@plt>
  lea    -0x30(%rbp),%rdx
  cmp    %rdx,%rax
  je     L88
  mov    $0x116,%edx
  lea    D18(%rip),%rax
  mov    %rax,%rsi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L59
L88:
  lea    -0x30(%rbp),%rax
  lea    D25(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %rax,%rax
  je     L57
  mov    $0x117,%edx
  lea    D30(%rip),%rax
  mov    %rax,%rsi
  lea    D35(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L59
L57:
  mov    $0x1,%eax
L59:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L20
  call   <__stack_chk_fail@plt>
L20:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D85
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D44
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D35
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D59
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D18
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D25
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D30
type_guessed: string

tool: D85: xyz

tool: D44: dest == __strncat_chk(dest, "xyz", 4, sizeof dest)

tool: D35: expression '%s' untrue at %d


tool: D59: strcmp(dest, "xyz") == 0

tool: D18: dest == __strncat_chk(dest, "xyz", 1, sizeof dest)

tool: D25: xyzx

tool: D30: strcmp(dest, "xyzx") == 0

assistant: ```c
int test_strncat_chk(void) {
  char dest[32];
  dest[0] = 0;
  do {
    if (!(dest == __strncat_chk(dest, "xyz", 4, sizeof dest))) {
      printf("expression '%s' untrue at %d\n", "dest == __strncat_chk(dest, \"xyz\", 4, sizeof dest)", 276);
      return 0;
    }
  } while (0);
  do {
    if (!(strcmp(dest, "xyz") == 0)) {
      printf("expression '%s' untrue at %d\n", "strcmp(dest, \"xyz\") == 0", 277);
      return 0;
    }
  } while (0);
  do {
    if (!(dest == __strncat_chk(dest, "xyz", 1, sizeof dest))) {
      printf("expression '%s' untrue at %d\n", "dest == __strncat_chk(dest, \"xyz\", 1, sizeof dest)", 278);
      return 0;
    }
  } while (0);
  do {
    if (!(strcmp(dest, "xyzx") == 0)) {
      printf("expression '%s' untrue at %d\n", "strcmp(dest, \"xyzx\") == 0", 279);
      return 0;
    }
  } while (0);
  return 1;
}
```