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

```asm
<quickSort>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  movl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x8(%rbp)
  cmpl   $0x1,-0x14(%rbp)
  jg     L30
  mov    $0x0,%eax
  jmp    L90
L45:
  subl   $0x1,-0x8(%rbp)
L30:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L104
  mov    -0xc(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jl     L45
  jmp    L104
L42:
  addl   $0x1,-0xc(%rbp)
L104:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jg     L48
  mov    -0xc(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  jl     L42
L48:
  mov    -0xc(%rbp),%eax
  cmp    -0x8(%rbp),%eax
  je     L70
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    -0xc(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0x20(%rbp),%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x4(%rbp),%eax
  mov    %eax,(%rdx)
  subl   $0x1,-0x8(%rbp)
  jmp    L30
L70:
  nop
  mov    -0x20(%rbp),%rax
  mov    (%rax),%edx
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L68
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    %eax,-0x4(%rbp)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x20(%rbp),%rax
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  mov    -0x20(%rbp),%rax
  mov    -0x4(%rbp),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x8(%rbp)
L68:
  cmpl   $0x1,-0xc(%rbp)
  jle    L117
  mov    -0x20(%rbp),%rdx
  mov    -0xc(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <quickSort>
L117:
  mov    -0x14(%rbp),%eax
  sub    -0x8(%rbp),%eax
  cmp    $0x1,%eax
  jle    L102
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  mov    -0x14(%rbp),%eax
  sub    -0x8(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <quickSort>
L102:
  mov    $0x0,%eax
L90:
  leave
  ret
```

assistant: ```c
int quickSort(int arrayLength, int *pArray) {
  int i = 1, j = arrayLength - 1;
  int tempValue;
  if (arrayLength <= 1)
    return 0;
  while (true) {
    while ((pArray[j] > pArray[0]) && (i < j))
      j--;
    while ((pArray[i] <= pArray[0]) && (i < j))
      i++;
    if (i == j)
      break;
    tempValue = pArray[i];
    pArray[i] = pArray[j];
    pArray[j] = tempValue;
    j--;
  }
  if (pArray[0] > pArray[i]) {
    tempValue = pArray[i];
    pArray[i] = pArray[0];
    pArray[0] = tempValue;
    j++;
  }
  if (i > 1)
    quickSort(i, pArray);
  if (arrayLength - j > 1)
    quickSort(arrayLength - j, &(pArray[j]));
  return 0;
}
```