user: What is the c source code of the assembly code below?

```asm
<generate>:
  endbr64
  push   %r15
  xor    %eax,%eax
  mov    %esi,%r15d
  push   %r14
  mov    %r9,%r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0xb8,%rsp
  mov    %rdi,0x8(%rsp)
  mov    %edx,0x14(%rsp)
  mov    %ecx,0x9c(%rsp)
  mov    %r8d,(%rsp)
  call   <rand@plt>
  mov    (%rsp),%r8d
  mov    0x8(%rsp),%rdi
  movq   $0x0,0x68(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  test   %r15d,%r15d
  js     L59
  mov    0x68(%rsp),%rsi
  mov    %r14,(%rsp)
  mov    %r15d,%r14d
  mov    %rdi,%r15
L407:
  mov    (%rsp),%rdi
  mov    (%rdi,%rsi,4),%edx
  mov    %edx,%ecx
  imul   %r8d,%ecx
  test   %ecx,%ecx
  js     L334
  cmp    %esi,%r14d
  mov    0x14(%rsp),%ecx
  sete   0x98(%rsp)
  movzbl 0x98(%rsp),%ebx
  test   %ecx,%ecx
  sete   0x8(%rsp)
  movzbl 0x8(%rsp),%edi
  test   %bl,%bl
  je     L821
  test   %dil,%dil
  jne    L334
L821:
  movq   $0x0,0x80(%rsp)
L788:
  mov    0x68(%rsp),%rbx
  mov    0x80(%rsp),%rsi
  mov    (%r15,%rbx,8),%rcx
  cmp    %eax,(%rcx,%rsi,4)
  je     L54
L736:
  mov    %r8d,%r9d
  mov    0x80(%rsp),%esi
  imul   %edx,%r9d
  lea    0x1(%rsi),%ecx
  cmp    %ecx,%r9d
  jl     L334
  addq   $0x1,0x80(%rsp)
  cmp    %ecx,0x14(%rsp)
  jne    L788
  cmpb   $0x0,0x98(%rsp)
  je     L788
L334:
  addq   $0x1,0x68(%rsp)
  mov    0x68(%rsp),%rbx
  cmp    %ebx,%r14d
  jl     L59
  mov    %rbx,%rsi
  jmp    L407
L54:
  xor    %eax,%eax
  mov    %r8d,0x18(%rsp)
  call   <rand@plt>
  mov    0x18(%rsp),%r8d
  movq   $0x0,0x70(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L650:
  mov    (%rsp),%rdi
  mov    0x70(%rsp),%rbx
  mov    %r8d,%ecx
  mov    (%rdi,%rbx,4),%edx
  imul   %edx,%ecx
  test   %ecx,%ecx
  js     L816
  cmp    %ebx,%r14d
  sete   0x99(%rsp)
  cmpb   $0x0,0x8(%rsp)
  movzbl 0x99(%rsp),%edi
  je     L586
  test   %dil,%dil
  jne    L816
L586:
  movq   $0x0,0x88(%rsp)
L692:
  mov    0x70(%rsp),%rdi
  mov    0x88(%rsp),%rbx
  mov    (%r15,%rdi,8),%rcx
  cmp    %eax,(%rcx,%rbx,4)
  je     L741
L630:
  mov    %r8d,%r9d
  mov    0x88(%rsp),%esi
  imul   %edx,%r9d
  lea    0x1(%rsi),%ecx
  cmp    %ecx,%r9d
  jl     L816
  addq   $0x1,0x88(%rsp)
  cmp    %ecx,0x14(%rsp)
  jne    L692
  cmpb   $0x0,0x99(%rsp)
  je     L692
L816:
  addq   $0x1,0x70(%rsp)
  mov    0x70(%rsp),%rdi
  cmp    %edi,%r14d
  jge    L650
  mov    (%rsp),%rbx
  mov    0x68(%rsp),%rsi
  mov    (%rbx,%rsi,4),%edx
  jmp    L736
L741:
  xor    %eax,%eax
  mov    %r8d,0x18(%rsp)
  call   <rand@plt>
  mov    0x18(%rsp),%r8d
  movq   $0x0,0x78(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L226:
  mov    (%rsp),%rbx
  mov    0x78(%rsp),%rdi
  mov    %r8d,%ecx
  mov    (%rbx,%rdi,4),%edx
  imul   %edx,%ecx
  test   %ecx,%ecx
  js     L251
  cmp    %edi,%r14d
  sete   0x9a(%rsp)
  cmpb   $0x0,0x8(%rsp)
  movzbl 0x9a(%rsp),%esi
  je     L811
  test   %sil,%sil
  jne    L251
L811:
  movq   $0x0,0x90(%rsp)
L629:
  mov    0x78(%rsp),%rbx
  mov    0x90(%rsp),%rsi
  mov    (%r15,%rbx,8),%rcx
  cmp    %eax,(%rcx,%rsi,4)
  je     L501
L263:
  mov    %r8d,%r9d
  mov    0x90(%rsp),%ebx
  imul   %edx,%r9d
  lea    0x1(%rbx),%ecx
  cmp    %ecx,%r9d
  jl     L251
  addq   $0x1,0x90(%rsp)
  cmp    %ecx,0x14(%rsp)
  jne    L629
  cmpb   $0x0,0x9a(%rsp)
  je     L629
L251:
  addq   $0x1,0x78(%rsp)
  mov    0x78(%rsp),%rbx
  cmp    %ebx,%r14d
  jge    L226
  mov    (%rsp),%rsi
  mov    0x70(%rsp),%rdi
  mov    (%rsi,%rdi,4),%edx
  jmp    L630
L501:
  xor    %eax,%eax
  mov    %r8d,0x18(%rsp)
  call   <rand@plt>
  mov    0x18(%rsp),%r8d
  movq   $0x0,0x60(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L756:
  mov    (%rsp),%rsi
  mov    0x60(%rsp),%rbx
  mov    %r8d,%edx
  mov    (%rsi,%rbx,4),%r9d
  imul   %r9d,%edx
  test   %edx,%edx
  js     L461
  cmp    %ebx,%r14d
  sete   0x9b(%rsp)
  jne    L12
  cmpb   $0x0,0x8(%rsp)
  jne    L461
L12:
  movq   $0x0,0x50(%rsp)
L721:
  mov    0x60(%rsp),%rsi
  mov    0x50(%rsp),%rbx
  mov    (%r15,%rsi,8),%rdx
  cmp    %eax,(%rdx,%rbx,4)
  je     L96
L823:
  mov    %r8d,%ecx
  mov    0x50(%rsp),%edi
  imul   %r9d,%ecx
  lea    0x1(%rdi),%edx
  cmp    %edx,%ecx
  jl     L461
  addq   $0x1,0x50(%rsp)
  cmp    %edx,0x14(%rsp)
  jne    L721
  cmpb   $0x0,0x9b(%rsp)
  je     L721
L461:
  addq   $0x1,0x60(%rsp)
  mov    0x60(%rsp),%rdi
  cmp    %edi,%r14d
  jge    L756
  mov    (%rsp),%rsi
  mov    0x78(%rsp),%rdi
  mov    (%rsi,%rdi,4),%edx
  jmp    L263
L96:
  xor    %eax,%eax
  mov    %r8d,0x18(%rsp)
  call   <rand@plt>
  mov    0x18(%rsp),%r8d
  movq   $0x0,0x40(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L28:
  mov    (%rsp),%rbx
  mov    0x40(%rsp),%rsi
  mov    %r8d,%edx
  mov    (%rbx,%rsi,4),%r9d
  imul   %r9d,%edx
  test   %edx,%edx
  js     L219
  cmp    %esi,%r14d
  sete   0x4f(%rsp)
  cmpb   $0x0,0x8(%rsp)
  movzbl 0x4f(%rsp),%edi
  je     L185
  test   %dil,%dil
  jne    L219
L185:
  movq   $0x0,0x20(%rsp)
  mov    %r8d,%r13d
L173:
  mov    0x40(%rsp),%rbx
  mov    0x20(%rsp),%rdi
  mov    (%r15,%rbx,8),%rdx
  cmp    %eax,(%rdx,%rdi,4)
  je     L415
L243:
  mov    %r13d,%ecx
  mov    0x20(%rsp),%ebx
  imul   %r9d,%ecx
  lea    0x1(%rbx),%edx
  cmp    %edx,%ecx
  jl     L761
  addq   $0x1,0x20(%rsp)
  cmp    %edx,0x14(%rsp)
  jne    L173
  cmpb   $0x0,0x4f(%rsp)
  je     L173
L761:
  mov    %r13d,%r8d
L219:
  addq   $0x1,0x40(%rsp)
  mov    0x40(%rsp),%rdi
  cmp    %edi,%r14d
  jge    L28
  mov    (%rsp),%rdi
  mov    0x60(%rsp),%rbx
  mov    (%rdi,%rbx,4),%r9d
  jmp    L823
L415:
  xor    %eax,%eax
  mov    %r13d,%r12d
  call   <rand@plt>
  movq   $0x0,0x18(%rsp)
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L183:
  mov    (%rsp),%rdi
  mov    0x18(%rsp),%rsi
  mov    %r12d,%edx
  mov    (%rdi,%rsi,4),%r9d
  imul   %r9d,%edx
  test   %edx,%edx
  js     L200
  cmp    %esi,%r14d
  sete   0x4e(%rsp)
  cmpb   $0x0,0x8(%rsp)
  movzbl 0x4e(%rsp),%ebx
  je     L577
  test   %bl,%bl
  jne    L200
L577:
  xor    %r13d,%r13d
  mov    %r12d,%esi
  mov    %r15,%r12
  mov    %r13,%r15
  mov    %esi,%r13d
L500:
  mov    0x18(%rsp),%rsi
  mov    (%r12,%rsi,8),%rdx
  cmp    %eax,(%rdx,%r15,4)
  je     L536
L198:
  mov    %r13d,%ecx
  lea    0x1(%r15),%edx
  imul   %r9d,%ecx
  cmp    %edx,%ecx
  jl     L442
  add    $0x1,%r15
  cmp    %edx,0x14(%rsp)
  jne    L500
  cmpb   $0x0,0x4e(%rsp)
  je     L500
L442:
  mov    %r12,%r15
  mov    %r13d,%r12d
L200:
  addq   $0x1,0x18(%rsp)
  mov    0x18(%rsp),%rdi
  cmp    %edi,%r14d
  jge    L183
  mov    (%rsp),%rdi
  mov    0x40(%rsp),%rbx
  mov    %r12d,%r13d
  mov    (%rdi,%rbx,4),%r9d
  jmp    L243
L536:
  xor    %eax,%eax
  xor    %ebp,%ebp
  call   <rand@plt>
  mov    %r15,0x58(%rsp)
  mov    %r13d,%r15d
  mov    %r14d,%r13d
  mov    %eax,%edx
  cltq
  mov    %r12,%r14
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L418:
  mov    (%rsp),%rdi
  mov    %r15d,%ecx
  mov    (%rdi,%rbp,4),%edx
  imul   %edx,%ecx
  test   %ecx,%ecx
  js     L220
  cmp    %ebp,%r13d
  sete   0x4d(%rsp)
  cmpb   $0x0,0x8(%rsp)
  movzbl 0x4d(%rsp),%esi
  je     L208
  test   %sil,%sil
  jne    L220
L208:
  mov    %r13d,%esi
  xor    %r12d,%r12d
  mov    %r14,%r13
  mov    %rbp,%r14
L103:
  mov    0x0(%r13,%r14,8),%rcx
  cmp    %eax,(%rcx,%r12,4)
  je     L58
L276:
  mov    %r15d,%r8d
  lea    0x1(%r12),%ecx
  imul   %edx,%r8d
  cmp    %ecx,%r8d
  jl     L719
  add    $0x1,%r12
  cmp    %ecx,0x14(%rsp)
  jne    L103
  cmpb   $0x0,0x4d(%rsp)
  je     L103
L719:
  mov    %r14,%rbp
  mov    %r13,%r14
  mov    %esi,%r13d
L220:
  add    $0x1,%rbp
  cmp    %ebp,%r13d
  jge    L418
  mov    (%rsp),%rsi
  mov    0x18(%rsp),%rbx
  mov    %r14,%r12
  mov    %r13d,%r14d
  mov    %r15d,%r13d
  mov    0x58(%rsp),%r15
  mov    (%rsi,%rbx,4),%r9d
  jmp    L198
  nopl   0x0(%rax,%rax,1)
L58:
  xor    %eax,%eax
  mov    %esi,0x48(%rsp)
  xor    %ebx,%ebx
  call   <rand@plt>
  mov    %r14,0x28(%rsp)
  mov    0x48(%rsp),%ebp
  mov    %r13,%rdi
  mov    %eax,%edx
  cltq
  mov    %r12,0x30(%rsp)
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L391:
  mov    (%rsp),%rsi
  mov    %r15d,%ecx
  mov    (%rsi,%rbx,4),%edx
  imul   %edx,%ecx
  test   %ecx,%ecx
  js     L702
  cmp    %ebx,%ebp
  sete   %r14b
  cmpb   $0x0,0x8(%rsp)
  je     L182
  test   %r14b,%r14b
  jne    L702
L182:
  movl   $0x0,0x48(%rsp)
  xor    %r13d,%r13d
L467:
  mov    (%rdi,%rbx,8),%rcx
  cmp    %eax,(%rcx,%r13,1)
  je     L745
L224:
  mov    %r15d,%ecx
  addl   $0x1,0x48(%rsp)
  mov    0x48(%rsp),%esi
  imul   %edx,%ecx
  cmp    %ecx,%esi
  jg     L702
  add    $0x4,%r13
  cmp    %esi,0x14(%rsp)
  jne    L467
  test   %r14b,%r14b
  je     L467
L702:
  add    $0x1,%rbx
  cmp    %ebx,%ebp
  jge    L391
  mov    0x28(%rsp),%r14
  mov    %rdi,%r13
  mov    (%rsp),%rdi
  mov    %ebp,%esi
  mov    0x30(%rsp),%r12
  mov    (%rdi,%r14,4),%edx
  jmp    L276
  nopl   0x0(%rax)
L745:
  xor    %eax,%eax
  mov    %rdi,0x38(%rsp)
  call   <rand@plt>
  mov    0x38(%rsp),%rdi
  xor    %r10d,%r10d
  mov    %eax,%edx
  cltq
  imul   $0x68db8bad,%rax,%rax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sar    $0x2c,%rax
  sub    %ecx,%eax
  imul   $0x2710,%eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
L828:
  mov    (%rsp),%rsi
  mov    %r15d,%edx
  mov    (%rsi,%r10,4),%esi
  imul   %esi,%edx
  test   %edx,%edx
  js     L580
  cmp    %r10d,%ebp
  sete   %r12b
  cmpb   $0x0,0x8(%rsp)
  je     L228
  test   %r12b,%r12b
  jne    L580
L228:
  xor    %r11d,%r11d
L444:
  mov    (%rdi,%r10,8),%rdx
  cmp    %eax,(%rdx,%r11,4)
  je     L339
L303:
  mov    %r15d,%ecx
  lea    0x1(%r11),%edx
  imul   %esi,%ecx
  cmp    %edx,%ecx
  jl     L580
  add    $0x1,%r11
  cmp    %edx,0x14(%rsp)
  jne    L444
  test   %r12b,%r12b
  je     L444
L580:
  add    $0x1,%r10
  cmp    %r10d,%ebp
  jge    L828
  mov    (%rsp),%rsi
  mov    (%rsi,%rbx,4),%edx
  jmp    L224
L339:
  mov    (%rsp),%r9
  mov    0x9c(%rsp),%ecx
  mov    %ebp,%esi
  mov    %r15d,%r8d
  mov    0x14(%rsp),%edx
  mov    %r11,0xa8(%rsp)
  mov    %r10,0xa0(%rsp)
  mov    %rdi,0x38(%rsp)
  call   <generate>
  mov    (%rsp),%rdi
  mov    0xa0(%rsp),%r10
  mov    0xa8(%rsp),%r11
  mov    (%rdi,%r10,4),%esi
  mov    0x38(%rsp),%rdi
  jmp    L303
L59:
  add    $0xb8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
int generate(int **A, int x, int y, int k, int m, int *p) {
  int rdm, i, j;
  rdm = rand() % 10000;
  for (i = 0; i <= x; i++) {
    for (j = 0; j <= p[i] * m; j++) {
      if (i == x && j == y)
        break;
      else {
        if (rdm == A[i][j])
          rdm = generate(A, x, y, k, m, p);
      }
    }
  }
  return rdm;
}
```