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

```asm
<fun>:
  endbr64
  push   %r15
  mov    %edi,%r10d
  mov    %esi,%r9d
  mov    %ecx,%esi
  push   %r14
  mov    $0x14,%ecx
  mov    %edx,%r8d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xf8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0xe8(%rsp)
  xor    %eax,%eax
  lea    0x40(%rsp),%rdi
  mov    %rdi,0x8(%rsp)
  rep stos %rax,%es:(%rdi)
  cmp    $0x1,%r10d
  jne    L159
  lea    (%r9,%rsi,1),%eax
  mov    %r8d,%r13d
  lea    (%r8,%rsi,1),%r12d
  mov    %r9d,%r15d
  mov    %eax,0x20(%rsp)
  mov    %esi,%eax
  sub    %esi,%r13d
  sub    %r8d,%r15d
  sub    %r9d,%eax
  mov    %r9d,%r11d
  mov    %edx,%edi
  mov    %r15d,0x24(%rsp)
  mov    %eax,0x28(%rsp)
  mov    %r13d,%eax
  not    %r11d
  not    %edi
  sub    %r9d,%eax
  mov    %r11d,%r10d
  sub    %esi,%edi
  sub    %esi,%r11d
  mov    %eax,0x2c(%rsp)
  mov    %r8d,%eax
  sub    %edx,%r10d
  lea    (%r9,%r8,1),%r14d
  sub    %r9d,%eax
  mov    %r10d,%ebp
  mov    $0x2,%edx
  add    %esi,%r10d
  mov    %eax,0x1c(%rsp)
  mov    %r12d,%eax
  sub    %esi,%ebp
  mov    $0xffffffffffffffff,%rcx
  sub    %r9d,%eax
  mov    %eax,0x18(%rsp)
  mov    %esi,%eax
  sub    %r8d,%eax
  mov    %eax,0x30(%rsp)
  mov    %r15d,%eax
  sub    %esi,%eax
  mov    %eax,0x34(%rsp)
  lea    (%r15,%rsi,1),%eax
  mov    %eax,0x14(%rsp)
  mov    %r9d,%eax
  sub    %esi,%eax
  mov    %eax,0x10(%rsp)
L542:
  test   %ebp,%ebp
  jle    L261
  lea    -0x1(%rbp),%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L261:
  lea    0x0(%rbp,%rsi,1),%eax
  test   %eax,%eax
  jle    L383
  lea    (%r14,%rdx,1),%eax
  neg    %eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L383:
  test   %r10d,%r10d
  jle    L45
  lea    -0x1(%r10),%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L45:
  test   %r11d,%r11d
  jle    L129
  lea    -0x1(%r11),%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L129:
  lea    (%r11,%rsi,1),%eax
  test   %eax,%eax
  jle    L48
  mov    %ecx,%eax
  sub    %r9d,%eax
  sub    $0x1,%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L48:
  lea    (%r10,%r8,1),%eax
  test   %eax,%eax
  jle    L295
  mov    0x28(%rsp),%eax
  sub    %edx,%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L295:
  lea    (%r11,%r8,1),%eax
  test   %eax,%eax
  jle    L257
  mov    0x2c(%rsp),%eax
  sub    %edx,%eax
  cltq
  addl   $0x1,0x40(%rsp,%rax,4)
L257:
  mov    0x1c(%rsp),%r15d
  mov    %ecx,%eax
  lea    (%r15,%rcx,1),%ebx
  test   %ebx,%ebx
  jle    L62
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L62:
  mov    0x18(%rsp),%r15d
  lea    (%r15,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L501
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L501:
  test   %edi,%edi
  jle    L503
  lea    -0x1(%rdi),%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L503:
  lea    (%rdi,%rsi,1),%ebx
  test   %ebx,%ebx
  jle    L100
  mov    %eax,%ebx
  sub    %r8d,%ebx
  sub    $0x1,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L100:
  lea    (%r10,%r9,1),%ebx
  test   %ebx,%ebx
  jle    L570
  mov    0x30(%rsp),%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L570:
  lea    (%rdi,%r8,1),%ebx
  test   %ebx,%ebx
  jle    L189
  mov    %eax,%ebx
  sub    %esi,%ebx
  sub    $0x1,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L189:
  test   %ecx,%ecx
  jle    L564
  mov    0x8(%rsp),%rbx
  addl   $0x1,-0x4(%rbx,%rcx,4)
L564:
  lea    (%rax,%rsi,1),%ebx
  test   %ebx,%ebx
  jle    L17
  mov    %esi,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L17:
  lea    0x0(%r13,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L236
  mov    %r13d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L236:
  lea    (%rax,%r8,1),%ebx
  test   %ebx,%ebx
  jle    L41
  mov    %r8d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L41:
  lea    (%r12,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L50
  mov    %r12d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L50:
  lea    (%rdi,%r9,1),%ebx
  test   %ebx,%ebx
  jle    L418
  mov    0x34(%rsp),%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L418:
  mov    0x24(%rsp),%r15d
  lea    (%r15,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L393
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L393:
  mov    0x14(%rsp),%r15d
  lea    (%r15,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L330
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L330:
  mov    0x10(%rsp),%r15d
  lea    (%r15,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L164
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L164:
  lea    (%r9,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L40
  mov    %r9d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L40:
  mov    0x20(%rsp),%r15d
  lea    (%r15,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L79
  mov    %r15d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L79:
  lea    0x0(%r13,%r9,1),%ebx
  lea    (%rbx,%rax,1),%r15d
  test   %r15d,%r15d
  jle    L103
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L103:
  lea    (%r14,%rax,1),%ebx
  test   %ebx,%ebx
  jle    L123
  mov    %r14d,%ebx
  sub    %edx,%ebx
  movslq %ebx,%rbx
  addl   $0x1,0x40(%rsp,%rbx,4)
L123:
  lea    (%r12,%r9,1),%ebx
  add    %ebx,%eax
  test   %eax,%eax
  jle    L12
  sub    %edx,%ebx
  movslq %ebx,%rax
  addl   $0x1,0x40(%rsp,%rax,4)
L12:
  add    $0x1,%rcx
  sub    $0x1,%edx
  add    $0x1,%ebp
  add    $0x1,%edi
  add    $0x1,%r11d
  add    $0x1,%r10d
  cmp    $0x2,%rcx
  jne    L542
L505:
  mov    0x8(%rsp),%rax
  lea    0xe0(%rsp),%rdx
  jmp    L345
  nopl   0x0(%rax,%rax,1)
L539:
  add    $0x4,%rax
  cmp    %rdx,%rax
  je     L113
L345:
  mov    (%rax),%r8d
  test   %r8d,%r8d
  jne    L539
L6:
  mov    0xe8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L404
  add    $0xf8,%rsp
  mov    %r8d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L113:
  mov    $0x1,%r8d
  jmp    L6
L159:
  mov    %r9d,%ecx
  mov    %r10d,%edx
  mov    %r8d,%ebp
  mov    %esi,%r15d
  sub    %r10d,%ecx
  neg    %edx
  movl   $0x3,0x28(%rsp)
  sub    %r10d,%ebp
  lea    (%rsi,%rcx,1),%eax
  mov    %edx,%edi
  mov    %ecx,%r12d
  sub    %esi,%ebp
  mov    %eax,0x14(%rsp)
  mov    %edx,%eax
  sub    %r9d,%edi
  lea    (%r8,%rcx,1),%r13d
  sub    %esi,%eax
  mov    %edi,%r11d
  sub    %esi,%r12d
  sub    %r8d,%ecx
  mov    %eax,0x18(%rsp)
  lea    (%r8,%rdi,1),%eax
  sub    %r8d,%r11d
  sub    %r10d,%r15d
  lea    (%rsi,%rax,1),%ebx
  mov    %r11d,%r14d
  sub    %esi,%eax
  sub    %r8d,%edx
  mov    %ebx,0x1c(%rsp)
  mov    %r11d,%ebx
  lea    -0x1(%rsi),%r11d
  sub    %esi,%r14d
  mov    %r11d,0x10(%rsp)
  sub    %r8d,%r11d
  mov    %r11d,0x2c(%rsp)
  sub    %r9d,%r11d
  sub    %r10d,%r11d
  mov    %eax,0x20(%rsp)
  xor    %eax,%eax
  mov    %r11d,0x30(%rsp)
  mov    %esi,%r11d
  not    %r11d
  mov    %r11d,0x34(%rsp)
  sub    %r9d,%r11d
  mov    %r11d,0x38(%rsp)
  mov    %r9d,%r11d
  sub    %esi,%r11d
  mov    %r11d,0x24(%rsp)
  sub    $0x1,%r11d
  sub    %r8d,%r11d
  sub    %r10d,%r11d
  mov    %r11d,0x3c(%rsp)
L158:
  test   %r14d,%r14d
  jle    L420
  lea    -0x1(%r14),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L420:
  test   %ebx,%ebx
  jle    L211
  lea    -0x1(%rbx),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L211:
  lea    (%rbx,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L115
  mov    0x30(%rsp),%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L115:
  lea    (%r14,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L407
  mov    0x38(%rsp),%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L407:
  test   %edi,%edi
  jle    L271
  lea    -0x1(%rdi),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L271:
  lea    (%rdi,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L626
  mov    0x10(%rsp),%r11d
  sub    %r9d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L626:
  mov    0x20(%rsp),%r11d
  test   %r11d,%r11d
  jle    L616
  sub    $0x1,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L616:
  lea    (%rdi,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L77
  lea    -0x1(%r8),%r11d
  sub    %r9d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L77:
  mov    0x1c(%rsp),%r11d
  test   %r11d,%r11d
  jle    L369
  sub    $0x1,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L369:
  mov    0x24(%rsp),%r11d
  add    %ebx,%r11d
  test   %r11d,%r11d
  jle    L385
  mov    0x34(%rsp),%r11d
  sub    %r8d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L385:
  test   %edx,%edx
  jle    L47
  lea    -0x1(%rdx),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L47:
  lea    (%rdx,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L525
  mov    0x2c(%rsp),%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L525:
  mov    0x18(%rsp),%r11d
  test   %r11d,%r11d
  jle    L322
  sub    $0x1,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L322:
  lea    (%rdx,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L573
  mov    %eax,%r11d
  sub    %r10d,%r11d
  sub    $0x1,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L573:
  test   %r15d,%r15d
  jle    L577
  lea    -0x1(%r15),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L577:
  test   %ebp,%ebp
  jle    L243
  lea    -0x1(%rbp),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L243:
  lea    0x0(%rbp,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L511
  lea    -0x1(%r8),%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L511:
  lea    (%r15,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L629
  mov    0x10(%rsp),%r11d
  add    %r8d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L629:
  mov    0x24(%rsp),%r11d
  add    %edx,%r11d
  test   %r11d,%r11d
  jle    L22
  mov    0x3c(%rsp),%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L22:
  test   %ecx,%ecx
  jle    L381
  lea    -0x1(%rcx),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L381:
  lea    (%rcx,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L132
  mov    0x10(%rsp),%r11d
  add    %r9d,%r11d
  sub    %r8d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L132:
  test   %r12d,%r12d
  jle    L357
  lea    -0x1(%r12),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L357:
  lea    (%rcx,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L373
  lea    -0x1(%r9),%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L373:
  mov    0x14(%rsp),%r11d
  test   %r11d,%r11d
  jle    L512
  sub    $0x1,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L512:
  lea    (%r12,%r8,1),%r11d
  test   %r11d,%r11d
  jle    L571
  mov    %r8d,%r11d
  sub    %esi,%r11d
  lea    -0x1(%r9,%r11,1),%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L571:
  test   %r13d,%r13d
  jle    L294
  lea    -0x1(%r13),%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L294:
  lea    0x0(%r13,%rsi,1),%r11d
  test   %r11d,%r11d
  jle    L127
  mov    0x10(%rsp),%r11d
  add    %r8d,%r11d
  add    %r9d,%r11d
  sub    %r10d,%r11d
  add    %eax,%r11d
  movslq %r11d,%r11
  addl   $0x1,0x40(%rsp,%r11,4)
L127:
  add    %r10d,0x14(%rsp)
  add    %r10d,%r14d
  add    %r10d,%r13d
  add    %r10d,%r12d
  add    %r10d,0x18(%rsp)
  add    %r10d,%ecx
  add    %r10d,%ebp
  add    %r10d,%r15d
  add    %r10d,0x1c(%rsp)
  add    %r10d,%edx
  add    %r10d,%edi
  add    %r10d,%ebx
  add    %r10d,0x20(%rsp)
  add    %r10d,%eax
  subl   $0x1,0x28(%rsp)
  jne    L158
  jmp    L505
L404:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
int fun(int a0, int a1, int a2, int a3) {
  int b[4], i, sum, c[40] = {0};
  for (b[0] = -1; b[0] < 2; b[0]++)
    for (b[1] = -1; b[1] < 2; b[1]++)
      for (b[2] = -1; b[2] < 2; b[2]++)
        for (b[3] = -1; b[3] < 2; b[3]++) {
          sum = b[0] * a0 + b[1] * a1 + b[2] * a2 + b[3] * a3;
          if (sum > 0)
            c[sum - 1]++;
        }
  for (i = 0; i < 40; i++)
    if (c[i] == 0)
      return 0;
  return 1;
}
```