user: 请将以下的汇编代码转换成C语言代码:

```asm
<test_split_multiple_delims>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x2c(%rbp)
  movabs $0x61626473616f6f66,%rax
  movabs $0x6967616d64736172,%rdx
  mov    %rax,-0x20(%rbp)
  mov    %rdx,-0x18(%rbp)
  movw   $0x63,-0x10(%rbp)
  lea    -0x2c(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  lea    D47(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <pl_split@plt>
  cltq
  mov    %rax,-0x28(%rbp)
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rcx
  lea    D110(%rip),%rdx
  mov    %rax,%rsi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <assert_equal_str@plt>
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    D70(%rip),%rdx
  mov    %rdx,%rcx
  lea    D110(%rip),%rdx
  mov    %rax,%rsi
  lea    D49(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <assert_equal_str@plt>
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rcx
  lea    D110(%rip),%rdx
  mov    %rax,%rsi
  lea    D85(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <assert_equal_str@plt>
  mov    -0x2c(%rbp),%eax
  lea    D79(%rip),%rdx
  mov    %rdx,%rcx
  lea    D110(%rip),%rdx
  mov    %eax,%esi
  mov    $0x3,%edi
  mov    $0x0,%eax
  call   <assert_equal_int@plt>
  mov    -0x28(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L6
  call   <__stack_chk_fail@plt>
L6:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_tag: D47
type_guessed: string
name: disassemble_data
arguments: data_tag: D2
type_guessed: string
name: disassemble_data
arguments: data_tag: D110
type_guessed: string
name: disassemble_data
arguments: data_tag: D50
type_guessed: string
name: disassemble_data
arguments: data_tag: D70
type_guessed: string
name: disassemble_data
arguments: data_tag: D49
type_guessed: string
name: disassemble_data
arguments: data_tag: D17
type_guessed: string
name: disassemble_data
arguments: data_tag: D85
type_guessed: string
name: disassemble_data
arguments: data_tag: D79
type_guessed: string

tool: D47: asd

tool: D2: Test 1: Strings are not equal.

tool: D110: test_split_multiple_delims

tool: D50: foo

tool: D70: Test 2: Strings are not equal.

tool: D49: bar

tool: D17: Test 3: Strings are not equal

tool: D85: magic

tool: D79: Test 4: Size is not correct.

assistant: ```c
void test_split_multiple_delims() {
  int size = 0;
  char the_string[] = "fooasdbarasdmagic";
  char **ret_val;
  ret_val = pl_split(the_string, "asd", &size);
  assert_equal_str("foo", ret_val[0], "test_split_multiple_delims", "Test 1: Strings are not equal.");
  assert_equal_str("bar", ret_val[1], "test_split_multiple_delims", "Test 2: Strings are not equal.");
  assert_equal_str("magic", ret_val[2], "test_split_multiple_delims", "Test 3: Strings are not equal");
  assert_equal_int(3, size, "test_split_multiple_delims", "Test 4: Size is not correct.");
  free(ret_val[0]);
  free(ret_val[1]);
  free(ret_val[2]);
  free(ret_val);
}
```