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

```asm
<process_gquad_enumeration>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x78,%rsp
  mov    %rdi,%r12
  mov    %esi,0x30(%rsp)
  mov    %edx,%eax
  mov    %rcx,0x8(%rsp)
  mov    %r8,0x10(%rsp)
  mov    %r9,0x18(%rsp)
  mov    0xb0(%rsp),%rdi
  mov    %rdi,0x20(%rsp)
  mov    0xb8(%rsp),%rdi
  mov    %rdi,0x38(%rsp)
  mov    %fs:0x28,%rdx
  mov    %rdx,0x68(%rsp)
  xor    %edx,%edx
  mov    %eax,%edx
  sub    %esi,%edx
  lea    -0xa(%rdx),%ecx
  cmp    $0x3e,%ecx
  ja     L90
  movslq %esi,%rcx
  mov    (%r12,%rcx,4),%ecx
  mov    $0x7,%ebx
  cmp    %ebx,%ecx
  cmovle %ecx,%ebx
  cmp    $0x1,%ecx
  jle    L90
  cltq
  movslq %ebx,%rcx
  sub    %rcx,%rax
  lea    (%r12,%rax,4),%r13
  add    $0x1,%edx
  lea    0x0(,%rbx,4),%eax
  sub    %eax,%edx
  mov    %edx,%r15d
  lea    0x5c(%rsp),%rax
  mov    %rax,0x28(%rsp)
  jmp    L32
L73:
  mov    0x60(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x60(%rsp)
  cmp    %eax,%ebp
  jle    L58
L46:
  mov    0x5c(%rsp),%ecx
  lea    (%rcx,%r14,1),%edx
  add    %eax,%edx
  movslq %edx,%rdx
  cmp    %ebx,(%r12,%rdx,4)
  jl     L73
  mov    %r13d,%edx
  sub    %ecx,%edx
  sub    %eax,%edx
  mov    %edx,0x64(%rsp)
  sub    $0x8,%rsp
  push   %r15
  mov    0x30(%rsp),%r9
  mov    0x28(%rsp),%r8
  mov    0x20(%rsp),%rcx
  mov    0x38(%rsp),%rdx
  mov    %ebx,%esi
  mov    0x40(%rsp),%edi
  mov    0x18(%rsp),%rax
  call   *%rax
  add    $0x10,%rsp
  jmp    L73
L58:
  mov    0x5c(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x5c(%rsp)
  cmp    0x34(%rsp),%eax
  jg     L67
L99:
  mov    0x48(%rsp),%esi
  lea    (%rsi,%rax,1),%edx
  movslq %edx,%rdx
  cmp    %ebx,(%r12,%rdx,4)
  jl     L58
  mov    %r13d,%edx
  sub    %eax,%edx
  mov    $0x10,%ebp
  cmp    %ebp,%edx
  cmovle %edx,%ebp
  movl   $0x1,0x60(%rsp)
  cmp    $0x1,%edx
  jle    L58
  mov    $0x1,%eax
  jmp    L46
L67:
  mov    0x40(%rsp),%r13
  mov    0x4c(%rsp),%r15d
L78:
  sub    $0x1,%ebx
  add    $0x4,%r13
  add    $0x4,%r15d
  cmp    $0x1,%ebx
  jle    L90
L32:
  cmp    %ebx,0x4(%r13)
  jl     L78
  lea    -0x3(%r15),%eax
  cmp    $0x2a,%eax
  ja     L78
  mov    $0x11,%eax
  cmp    %eax,%r15d
  cmovle %r15d,%eax
  sub    $0x2,%eax
  mov    %eax,0x34(%rsp)
  movl   $0x1,0x5c(%rsp)
  mov    0x30(%rsp),%edi
  lea    (%rdi,%rbx,2),%r14d
  mov    $0x1,%eax
  lea    (%rdi,%rbx,1),%esi
  mov    %esi,0x48(%rsp)
  mov    %r13,0x40(%rsp)
  mov    %r15d,%r13d
  mov    %r15d,0x4c(%rsp)
  mov    0x38(%rsp),%r15
  jmp    L99
L90:
  mov    0x68(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L126
  add    $0x78,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L126:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void process_gquad_enumeration(int *gg, int i, int j, void (*f)(int, int, int *, void *, void *, void *, void *), void *data, void *P, void *aux1, void *aux2) {
  int L, l[3], n, max_linker, maxl0, maxl1;
  n = j - i + 1;
  if ((n >= ((4 * 2) + (3 * 1))) && (n <= ((4 * 7) + (3 * 15))))
    for (L = ((gg[i]) < (7) ? (gg[i]) : (7)); L >= 2; L--)
      if (gg[j - L + 1] >= L) {
        max_linker = n - 4 * L;
        if ((max_linker >= 3 * 1) && (max_linker <= 3 * 15)) {
          maxl0 = ((15) < (max_linker - 2 * 1) ? (15) : (max_linker - 2 * 1));
          for (l[0] = 1; l[0] <= maxl0; l[0]++)
            if (gg[i + L + l[0]] >= L) {
              maxl1 = ((15) < (max_linker - l[0] - 1) ? (15) : (max_linker - l[0] - 1));
              for (l[1] = 1; l[1] <= maxl1; l[1]++)
                if (gg[i + 2 * L + l[0] + l[1]] >= L) {
                  l[2] = max_linker - l[0] - l[1];
                  f(i, L, &(l[0]), data, P, aux1, aux2);
                }
            }
        }
      }
}
```