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

```asm
<spread_success>:
  endbr64
  push   %r15
  mov    %rdx,%r15
  push   %r14
  mov    %rdi,%r14
  push   %r13
  mov    %rsi,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  push   %rbx
  mov    %r9d,%ebx
  sub    $0xc8,%rsp
  cmp    %r8d,%r9d
  jge    L992
  mov    %r9d,(%r15)
  mov    %rcx,%rsi
  mov    %r13,%rdi
  lea    -0x1(%rbx),%ebp
  call   *%r14
  cmp    %r12,%r15
  je     L330
L299:
  test   %ebp,%ebp
  jle    L330
  lea    0x4(%r15),%rax
  sub    %ebp,%ebx
  mov    %rax,0x80(%rsp)
  lea    0x8(%r15),%rax
  mov    %rax,0x58(%rsp)
  lea    0xc(%r15),%rax
  mov    %rax,0x60(%rsp)
  lea    0x10(%r15),%rax
  mov    %rax,0x68(%rsp)
  lea    0x14(%r15),%rax
  mov    %rax,0x50(%rsp)
  lea    0x18(%r15),%rax
  mov    %rax,0x10(%rsp)
  lea    0x1c(%r15),%rax
  mov    %rax,0x28(%rsp)
  lea    0x20(%r15),%rax
  mov    %ebx,0x7c(%rsp)
  sub    %ebp,%ebx
  mov    %rax,0x30(%rsp)
  lea    0x24(%r15),%rax
  mov    %ebx,0xa4(%rsp)
  mov    %rax,0xa8(%rsp)
  mov    %r12,%rax
  mov    %r14,%r12
  mov    %r15,%r14
  mov    %r13,%r15
  mov    %rax,%r13
L69:
  mov    0x7c(%rsp),%ebx
  mov    %ebp,(%r14)
  cmp    %ebp,%ebx
  jge    L454
  mov    %ebx,0x4(%r14)
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%r12
  lea    -0x1(%rbp),%eax
  mov    %eax,0x98(%rsp)
  cmp    %r13,0x80(%rsp)
  je     L66
  lea    -0x1(%rbx),%eax
L7:
  mov    %eax,%ebx
  mov    0x7c(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,0x78(%rsp)
  sub    %ebx,%eax
  mov    %eax,0xa0(%rsp)
  test   %ebx,%ebx
  jle    L66
  mov    %r13,%rax
  mov    %r12,%r13
  mov    %rax,%r12
L113:
  mov    0x78(%rsp),%ebp
  mov    %ebx,0x4(%r14)
  cmp    %ebx,%ebp
  jge    L823
  mov    %ebp,0x8(%r14)
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%r13
  lea    -0x1(%rbx),%eax
  mov    %eax,0x94(%rsp)
  cmp    0x58(%rsp),%r12
  je     L441
  lea    -0x1(%rbp),%eax
L581:
  mov    %eax,%ebx
  mov    0x78(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,0x74(%rsp)
  sub    %ebx,%eax
  mov    %eax,0x9c(%rsp)
  test   %ebx,%ebx
  jle    L441
  mov    %r12,%rax
  mov    %r13,%r12
  mov    %rax,%r13
L83:
  mov    0x74(%rsp),%ebp
  mov    %ebx,0x8(%r14)
  cmp    %ebx,%ebp
  jge    L960
  mov    %ebp,0xc(%r14)
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%r12
  lea    -0x1(%rbx),%eax
  mov    %eax,0x90(%rsp)
  cmp    0x60(%rsp),%r13
  je     L951
  lea    -0x1(%rbp),%eax
L630:
  mov    %eax,%ebx
  mov    0x74(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,0x70(%rsp)
  sub    %ebx,%eax
  mov    %eax,0x8c(%rsp)
  test   %ebx,%ebx
  jle    L951
  mov    %r13,%rax
  mov    %r12,%r13
  mov    %rax,%r12
L153:
  mov    0x70(%rsp),%ebp
  mov    %ebx,0xc(%r14)
  cmp    %ebx,%ebp
  jge    L987
  mov    %ebp,0x10(%r14)
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%r13
  lea    -0x1(%rbx),%eax
  mov    %eax,0x88(%rsp)
  cmp    0x68(%rsp),%r12
  je     L646
  lea    -0x1(%rbp),%ebx
L547:
  mov    0x70(%rsp),%eax
  sub    %ebx,%eax
  mov    %eax,0x8(%rsp)
  sub    %ebx,%eax
  mov    %eax,0x4c(%rsp)
  test   %ebx,%ebx
  jle    L646
  mov    %r13,(%rsp)
  mov    %r12,%r13
  mov    %r15,%r12
L820:
  mov    0x8(%rsp),%r15d
  mov    %ebx,0x10(%r14)
  cmp    %ebx,%r15d
  jge    L726
  mov    (%rsp),%rax
  mov    %r15d,0x14(%r14)
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   *%rax
  lea    -0x1(%rbx),%eax
  mov    %eax,0x38(%rsp)
  cmp    0x50(%rsp),%r13
  je     L889
  lea    -0x1(%r15),%ebx
L875:
  mov    0x8(%rsp),%r15d
  sub    %ebx,%r15d
  mov    %r15d,%eax
  sub    %ebx,%eax
  mov    %eax,0x3c(%rsp)
  test   %ebx,%ebx
  jle    L889
  mov    %r13,%rax
  mov    %r15d,%r13d
  mov    %r12,%r15
  mov    %rax,%r12
L677:
  mov    %ebx,0x14(%r14)
  cmp    %ebx,%r13d
  jge    L1083
  mov    (%rsp),%rax
  mov    %r13d,0x18(%r14)
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%rax
  lea    -0x1(%rbx),%eax
  mov    %eax,0x44(%rsp)
  cmp    0x10(%rsp),%r12
  je     L1028
  lea    -0x1(%r13),%ebx
L347:
  test   %ebx,%ebx
  jle    L1028
  mov    %r13d,%eax
  lea    -0x1(%rbx),%edx
  mov    %ebx,0x1c(%rsp)
  sub    %ebx,%eax
  mov    %edx,0x18(%rsp)
  mov    %eax,0x24(%rsp)
  lea    -0x1(%rax),%edx
  sub    %ebx,%eax
  mov    %edx,0x20(%rsp)
  mov    %eax,0x40(%rsp)
  mov    %r13d,0xc(%rsp)
  mov    %r12,%r13
L574:
  mov    0x1c(%rsp),%edi
  mov    0x24(%rsp),%eax
  mov    %edi,0x18(%r14)
  cmp    %edi,%eax
  jge    L1087
  mov    %eax,0x1c(%r14)
  mov    %r13,%rsi
  mov    (%rsp),%rax
  mov    %r15,%rdi
  call   *%rax
  mov    0x18(%rsp),%eax
  mov    %eax,0x48(%rsp)
  cmp    0x28(%rsp),%r13
  je     L212
  mov    0x20(%rsp),%ebp
L82:
  test   %ebp,%ebp
  jle    L212
  mov    0x24(%rsp),%r12d
  mov    %r13,%rcx
  lea    -0x1(%rbp),%ebx
  sub    %ebp,%r12d
  mov    %r12d,%r11d
  sub    %ebp,%r11d
  mov    %r11d,%r13d
L461:
  mov    %ebp,0x1c(%r14)
  cmp    %ebp,%r12d
  jge    L1058
  mov    %rcx,%rsi
  mov    %r12d,0x20(%r14)
  mov    (%rsp),%rax
  mov    %r15,%rdi
  mov    %rcx,0xb0(%rsp)
  call   *%rax
  mov    0xb0(%rsp),%rcx
  mov    %ebx,%r10d
  cmp    0x30(%rsp),%rcx
  je     L1043
  lea    -0x1(%r12),%r8d
L859:
  test   %r8d,%r8d
  jle    L1043
L14:
  mov    %r8d,0x20(%r14)
  mov    (%rsp),%rdi
  mov    %r12d,%r9d
  mov    %r15,%rsi
  mov    0xa8(%rsp),%rdx
  sub    %r8d,%r9d
  mov    %r10d,0xbc(%rsp)
  mov    %rcx,0xb0(%rsp)
  mov    %r8d,0xb8(%rsp)
  call   <spread_success>
  mov    0xb0(%rsp),%rcx
  mov    0xbc(%rsp),%r10d
  test   %eax,%eax
  je     L1043
  mov    0xb8(%rsp),%r8d
  sub    $0x1,%r8d
  jne    L14
L1043:
  sub    $0x1,%ebp
  add    $0x1,%r12d
  sub    $0x1,%ebx
  add    $0x2,%r13d
  movl   $0x0,0x20(%r14)
  test   %r10d,%r10d
  jne    L461
  mov    %rcx,%r13
L212:
  mov    0x48(%rsp),%eax
  subl   $0x1,0x1c(%rsp)
  addl   $0x1,0x24(%rsp)
  subl   $0x1,0x18(%rsp)
  addl   $0x1,0x20(%rsp)
  addl   $0x2,0x40(%rsp)
  movl   $0x0,0x1c(%r14)
  test   %eax,%eax
  jne    L574
  mov    %r13,%r12
  mov    0xc(%rsp),%r13d
L1028:
  mov    0x44(%rsp),%ebx
  addl   $0x2,0x3c(%rsp)
  add    $0x1,%r13d
  movl   $0x0,0x18(%r14)
  test   %ebx,%ebx
  jne    L677
  mov    %r12,%r13
  mov    %r15,%r12
L889:
  mov    0x38(%rsp),%ebx
  addl   $0x1,0x8(%rsp)
  addl   $0x2,0x4c(%rsp)
  movl   $0x0,0x14(%r14)
  test   %ebx,%ebx
  jne    L820
  mov    %r12,%r15
  mov    %r13,%r12
  mov    (%rsp),%r13
L646:
  mov    0x88(%rsp),%ebx
  addl   $0x1,0x70(%rsp)
  addl   $0x2,0x8c(%rsp)
  movl   $0x0,0x10(%r14)
  test   %ebx,%ebx
  jne    L153
  mov    %r12,%rax
  mov    %r13,%r12
  mov    %rax,%r13
L951:
  mov    0x90(%rsp),%ebx
  addl   $0x1,0x74(%rsp)
  addl   $0x2,0x9c(%rsp)
  movl   $0x0,0xc(%r14)
  test   %ebx,%ebx
  jne    L83
  mov    %r13,%rax
  mov    %r12,%r13
  mov    %rax,%r12
L441:
  mov    0x94(%rsp),%ebx
  addl   $0x1,0x78(%rsp)
  addl   $0x2,0xa0(%rsp)
  movl   $0x0,0x8(%r14)
  test   %ebx,%ebx
  jne    L113
  mov    %r12,%rax
  mov    %r13,%r12
  mov    %rax,%r13
L66:
  mov    0x98(%rsp),%ebp
  addl   $0x1,0x7c(%rsp)
  addl   $0x2,0xa4(%rsp)
  movl   $0x0,0x4(%r14)
  test   %ebp,%ebp
  jne    L69
  mov    %r14,%r15
L330:
  mov    $0x1,%eax
L411:
  movl   $0x0,(%r15)
  add    $0xc8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L992:
  mov    %r8d,(%r15)
  mov    %r8d,%ebp
  je     L389
  cmp    %r12,%r15
  je     L330
L95:
  cmp    %ebp,%ebx
  jg     L141
L251:
  sub    $0x1,%ebp
  jmp    L299
  nop
L1087:
  mov    %edi,0x1c(%r14)
  je     L534
  cmp    0x28(%rsp),%r13
  je     L850
  cmp    %edi,0x24(%rsp)
  jle    L204
  mov    %edi,%r8d
  mov    0x40(%rsp),%r9d
  mov    0x30(%rsp),%rdx
  mov    %r13,%rcx
  mov    (%rsp),%rdi
  mov    %r15,%rsi
  call   <spread_success>
  test   %eax,%eax
  je     L811
L204:
  mov    0x18(%rsp),%eax
  mov    %eax,0x48(%rsp)
  mov    %eax,%ebp
  jmp    L82
  nopw   0x0(%rax,%rax,1)
L534:
  mov    (%rsp),%rax
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%rax
  cmp    0x28(%rsp),%r13
  jne    L204
L850:
  mov    0x18(%rsp),%eax
  mov    %eax,0x48(%rsp)
  jmp    L212
L811:
  mov    %r13,%r12
  movl   $0x0,0x1c(%r14)
  mov    0xc(%rsp),%r13d
  jmp    L1028
L726:
  mov    %ebx,0x14(%r14)
  je     L800
  cmp    0x50(%rsp),%r13
  je     L279
  cmp    %ebx,0x8(%rsp)
  jle    L59
  mov    0x4c(%rsp),%r9d
  mov    0x10(%rsp),%rdx
  mov    %ebx,%r8d
  mov    %r13,%rcx
  mov    (%rsp),%rdi
  mov    %r12,%rsi
  call   <spread_success>
  test   %eax,%eax
  je     L334
L59:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x38(%rsp)
  mov    %eax,%ebx
  jmp    L875
  nopw   0x0(%rax,%rax,1)
L1083:
  mov    %ebx,0x18(%r14)
  je     L295
  cmp    0x10(%rsp),%r12
  je     L742
  cmp    %ebx,%r13d
  jle    L624
  mov    0x3c(%rsp),%r9d
  mov    0x28(%rsp),%rdx
  mov    %ebx,%r8d
  mov    %r12,%rcx
  mov    (%rsp),%rdi
  mov    %r15,%rsi
  call   <spread_success>
  test   %eax,%eax
  je     L133
L624:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x44(%rsp)
  mov    %eax,%ebx
  jmp    L347
L295:
  mov    (%rsp),%rax
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%rax
  cmp    0x10(%rsp),%r12
  jne    L624
L742:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x44(%rsp)
  jmp    L1028
L800:
  mov    (%rsp),%rax
  mov    %r13,%rsi
  mov    %r12,%rdi
  call   *%rax
  cmp    0x50(%rsp),%r13
  jne    L59
L279:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x38(%rsp)
  jmp    L889
L133:
  mov    %r12,%r13
  movl   $0x0,0x18(%r14)
  mov    %r15,%r12
  jmp    L889
  nopl   (%rax)
L1058:
  mov    %ebp,0x20(%r14)
  je     L579
  cmp    0x30(%rsp),%rcx
  je     L3
  cmp    %ebp,%r12d
  jle    L1081
  mov    (%rsp),%rdi
  mov    %r13d,%r9d
  mov    %ebp,%r8d
  mov    %r15,%rsi
  mov    0xa8(%rsp),%rdx
  mov    %rcx,0xb0(%rsp)
  call   <spread_success>
  mov    0xb0(%rsp),%rcx
  test   %eax,%eax
  je     L53
L1081:
  mov    %ebx,%r8d
  mov    %ebx,%r10d
  jmp    L859
L53:
  movl   $0x0,0x20(%r14)
  mov    %rcx,%r13
  jmp    L212
  nopl   0x0(%rax,%rax,1)
L579:
  mov    %rcx,0xb0(%rsp)
  mov    %rcx,%rsi
  mov    (%rsp),%rax
  mov    %r15,%rdi
  call   *%rax
  mov    0xb0(%rsp),%rcx
  cmp    0x30(%rsp),%rcx
  jne    L1081
L3:
  mov    %ebx,%r10d
  jmp    L1043
L987:
  mov    %ebx,0x10(%r14)
  je     L863
  cmp    0x68(%rsp),%r12
  je     L386
  cmp    %ebx,0x70(%rsp)
  jle    L270
  mov    0x50(%rsp),%rdx
  mov    %ebx,%r8d
  mov    %r12,%rcx
  mov    %r15,%rsi
  mov    0x8c(%rsp),%r9d
  mov    %r13,%rdi
  call   <spread_success>
  test   %eax,%eax
  je     L964
L270:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x88(%rsp)
  mov    %eax,%ebx
  jmp    L547
L863:
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%r13
  cmp    0x68(%rsp),%r12
  jne    L270
L386:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x88(%rsp)
  jmp    L646
L960:
  mov    %ebx,0xc(%r14)
  je     L1086
  cmp    0x60(%rsp),%r13
  je     L699
  cmp    %ebx,0x74(%rsp)
  jle    L851
  mov    0x68(%rsp),%rdx
  mov    %ebx,%r8d
  mov    %r13,%rcx
  mov    %r15,%rsi
  mov    0x9c(%rsp),%r9d
  mov    %r12,%rdi
  call   <spread_success>
  test   %eax,%eax
  je     L595
L851:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x90(%rsp)
  jmp    L630
L334:
  mov    %r12,%r15
  movl   $0x0,0x14(%r14)
  mov    %r13,%r12
  mov    (%rsp),%r13
  jmp    L646
L1086:
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%r12
  cmp    0x60(%rsp),%r13
  jne    L851
L699:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x90(%rsp)
  jmp    L951
L964:
  mov    %r12,%rax
  movl   $0x0,0x10(%r14)
  mov    %r13,%r12
  mov    %rax,%r13
  jmp    L951
L823:
  mov    %ebx,0x8(%r14)
  je     L1005
  cmp    0x58(%rsp),%r12
  je     L465
  cmp    %ebx,0x78(%rsp)
  jle    L593
  mov    0x60(%rsp),%rdx
  mov    %ebx,%r8d
  mov    %r12,%rcx
  mov    %r15,%rsi
  mov    0xa0(%rsp),%r9d
  mov    %r13,%rdi
  call   <spread_success>
  test   %eax,%eax
  je     L377
L593:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x94(%rsp)
  jmp    L581
L1005:
  mov    %r12,%rsi
  mov    %r15,%rdi
  call   *%r13
  cmp    0x58(%rsp),%r12
  jne    L593
L465:
  lea    -0x1(%rbx),%eax
  mov    %eax,0x94(%rsp)
  jmp    L441
L454:
  mov    %ebp,0x4(%r14)
  je     L764
  cmp    %r13,0x80(%rsp)
  je     L836
  cmp    %ebp,0x7c(%rsp)
  jle    L898
  mov    0x58(%rsp),%rdx
  mov    %ebp,%r8d
  mov    %r13,%rcx
  mov    %r15,%rsi
  mov    0xa4(%rsp),%r9d
  mov    %r12,%rdi
  call   <spread_success>
  test   %eax,%eax
  je     L277
L898:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x98(%rsp)
  jmp    L7
L764:
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   *%r12
  cmp    %r13,0x80(%rsp)
  jne    L898
L836:
  lea    -0x1(%rbp),%eax
  mov    %eax,0x98(%rsp)
  jmp    L66
L377:
  mov    %r12,%rax
  movl   $0x0,0x8(%r14)
  mov    %r13,%r12
  mov    %rax,%r13
  jmp    L66
L595:
  mov    %r13,%rax
  movl   $0x0,0xc(%r14)
  mov    %r12,%r13
  mov    %rax,%r12
  jmp    L441
L389:
  mov    %rcx,%rsi
  mov    %r13,%rdi
  call   *%r14
  cmp    %r12,%r15
  jne    L95
  jmp    L330
L277:
  movl   $0x0,0x4(%r14)
  mov    %r14,%r15
  jmp    L330
L141:
  mov    %ebx,%r9d
  lea    0x4(%r15),%rdx
  mov    %ebp,%r8d
  mov    %r12,%rcx
  sub    %ebp,%r9d
  mov    %r13,%rsi
  mov    %r14,%rdi
  call   <spread_success>
  test   %eax,%eax
  jne    L251
  jmp    L411
```

assistant: ```c
int spread_success(void (*report_pattern)(int *base, int *lim), int *base, int *next, int *lim, int max, int n) {
  int i;
  if (n < max) {
    *next = n;
    report_pattern(base, lim);
    if (next == lim) {
      *next = 0;
      return 1;
    }
    i = n - 1;
  } else {
    *next = max;
    if (n == max)
      report_pattern(base, lim);
    if (next == lim) {
      *next = 0;
      return 1;
    }
    if (n > max && !spread_success(report_pattern, base, next + 1, lim, max, n - max)) {
      *next = 0;
      return 0;
    }
    i = max - 1;
  }
  for (; i > 0; i--) {
    *next = i;
    if (!spread_success(report_pattern, base, next + 1, lim, i, n - i)) {
      *next = 0;
      return 1;
    }
  }
  *next = 0;
  return 1;
}
```