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

```asm
<func_1ca0_c>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x90,%rsp
  mov    %edi,-0x74(%rbp)
  mov    %esi,-0x78(%rbp)
  mov    %edx,-0x7c(%rbp)
  mov    %ecx,-0x80(%rbp)
  mov    %r8d,-0x84(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x64(%rbp)
  lea    -0x40(%rbp),%rax
  mov    %eax,-0x60(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,-0x5c(%rbp)
  mov    -0x78(%rbp),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  mov    -0x5c(%rbp),%eax
  add    $0x3,%eax
  mov    %eax,-0x58(%rbp)
  movl   $0x1e9,-0x68(%rbp)
  addl   $0x4,-0x78(%rbp)
  mov    -0x80(%rbp),%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x7c(%rbp),%eax
  mov    %eax,-0x50(%rbp)
  mov    -0x74(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  movl   $0x1e9,-0x7c(%rbp)
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    %rax,%rdx
  mov    -0x68(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,(%rdx)
  mov    -0x80(%rbp),%ecx
  mov    -0x7c(%rbp),%edx
  mov    -0x78(%rbp),%esi
  mov    -0x74(%rbp),%eax
  mov    %eax,%edi
  call   <func_1c30_c@plt>
  mov    -0x58(%rbp),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  mov    %eax,-0x78(%rbp)
  movl   $0x2,-0x7c(%rbp)
  movl   $0x2,-0x80(%rbp)
  movl   $0x1,-0x58(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    %rax,%rdx
  mov    -0x58(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,(%rdx)
  mov    -0x78(%rbp),%eax
  cltq
  mov    %rax,%rsi
  mov    -0x74(%rbp),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <memcmp@plt>
  mov    %eax,-0x4c(%rbp)
  mov    -0x5c(%rbp),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x5c(%rbp),%eax
  add    $0x1ec,%eax
  mov    %eax,-0x78(%rbp)
  movl   $0x1ec,-0x7c(%rbp)
  cmpl   $0x0,-0x4c(%rbp)
  je     L48
  movl   $0x18,-0x68(%rbp)
  jmp    L41
L48:
  movl   $0x18,-0x68(%rbp)
  movl   $0x1ec,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    %rax,%rdx
  mov    -0x80(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,(%rdx)
  mov    -0x78(%rbp),%eax
  cltq
  mov    %rax,%rsi
  mov    -0x74(%rbp),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <func_abc_c@plt>
  mov    %eax,-0x4c(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x5c(%rbp),%eax
  add    $0xd,%eax
  mov    %eax,-0x78(%rbp)
  movl   $0x2,-0x7c(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  cmpl   $0x0,-0x4c(%rbp)
  je     L37
  movl   $0x2,-0x68(%rbp)
  jmp    L41
L37:
  movl   $0x2,-0x68(%rbp)
  mov    -0x50(%rbp),%eax
  cltq
  mov    %rax,%rdx
  mov    -0x58(%rbp),%eax
  movzbl %al,%eax
  mov    %eax,(%rdx)
  mov    -0x78(%rbp),%eax
  cltq
  mov    %rax,%rsi
  mov    -0x74(%rbp),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    (%rax),%eax
  mov    %eax,-0x48(%rbp)
  mov    -0x54(%rbp),%eax
  add    $0x18,%eax
  cltq
  mov    (%rax),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x48(%rbp),%eax
  add    $0x10,%eax
  mov    %eax,-0x44(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x78(%rbp)
  movl   $0x20,-0x7c(%rbp)
  movl   $0x1,-0x80(%rbp)
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    %rax,%rdx
  mov    -0x44(%rbp),%eax
  movzwl %ax,%eax
  mov    %eax,(%rdx)
  mov    -0x74(%rbp),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x7c(%rbp),%edx
  mov    -0x78(%rbp),%eax
  mov    %eax,%esi
  mov    %rcx,%rdi
  call   <memset@plt>
  mov    -0x60(%rbp),%eax
  add    $0x10,%eax
  cltq
  mov    (%rax),%eax
  mov    %eax,-0x7c(%rbp)
  mov    -0x54(%rbp),%eax
  add    $0x18,%eax
  cltq
  mov    (%rax),%eax
  mov    %eax,-0x74(%rbp)
  mov    -0x7c(%rbp),%edx
  mov    -0x5c(%rbp),%eax
  add    %edx,%eax
  mov    %eax,-0x78(%rbp)
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x80(%rbp)
  movl   $0x1e,-0x7c(%rbp)
  mov    -0x78(%rbp),%eax
  cltq
  mov    %rax,%rsi
  mov    -0x74(%rbp),%eax
  cltq
  mov    %rax,%rcx
  mov    -0x7c(%rbp),%eax
  mov    %eax,%edx
  mov    %rcx,%rdi
  call   <memcpy@plt>
  mov    -0x64(%rbp),%eax
  mov    %eax,-0x68(%rbp)
L41:
  mov    -0x68(%rbp),%eax
  mov    %eax,-0x4c(%rbp)
  mov    -0x4c(%rbp),%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L17
  call   <__stack_chk_fail@plt>
L17:
  leave
  ret
```

assistant: ```c
int func_1ca0_c(uint32_t a0, uint32_t a1, uint32_t a2, uint32_t a3, uint32_t a4) {
  uint32_t s0, s1, s3, s4, sp, t0, t1, v0, v1, zero;
  zero = 0;
  uint32_t stack[12];
  sp = (uint32_t)stack;
  s1 = a0;
  a0 = a1;
  a1 = a4;
  s0 = s1 + 3;
  v1 = 489;
  a1 = a1 + 4;
  s3 = a3;
  s4 = a2;
  a3 = a0;
  a2 = 489;
  a0 = s0;
  *((uint16_t *)(sp + 16)) = (v1 & 0xffff);
  func_1c30_c(a0, a1, a2, a3);
  a0 = s0;
  a1 = sp + 16;
  a2 = 2;
  a3 = 2;
  s0 = 1;
  *((uint16_t *)(sp + 16)) = (s0 & 0xffff);
  v0 = memcmp((void *)a0, (void *)a1, a2);
  a0 = s1;
  a1 = s1 + 492;
  a2 = 492;
  if (v0 != 0) {
    v1 = 24;
    goto __1d90;
  } else {
    v1 = 24;
  };
  a3 = 492;
  *((uint16_t *)(sp + 16)) = (a3 & 0xffff);
  v0 = func_abc_c((void *)a0, (void *)a1, a2);
  a0 = sp + 16;
  a1 = s1 + 13;
  a2 = 2;
  a3 = zero;
  if (v0 != 0) {
    v1 = 2;
    goto __1d90;
  } else {
    v1 = 2;
  };
  *((uint8_t *)(s4 + 0)) = (s0 & 0xff);
  memcpy((void *)a0, (void *)a1, a2);
  t1 = *((uint16_t *)(16 + sp));
  a0 = *((uint32_t *)(s3 + 24));
  t0 = t1 + 16;
  a1 = zero;
  a2 = 32;
  a3 = 1;
  *((uint16_t *)(sp + 16)) = (t0 & 0xffff);
  memset((void *)a0, a1, a2);
  a2 = *((int16_t *)(16 + sp));
  a0 = *((uint32_t *)(s3 + 24));
  a1 = a2 + s1;
  a3 = zero;
  a2 = 30;
  memcpy((void *)a0, (void *)a1, a2);
  v1 = zero;
__1d90:
  v0 = v1;
  return v0;
}
```