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

```asm
<flipBoard>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %esi,-0x2c(%rbp)
  mov    %ecx,%eax
  mov    %r8d,%ecx
  mov    %r9d,-0x3c(%rbp)
  mov    %dl,-0x30(%rbp)
  mov    %al,-0x34(%rbp)
  mov    %ecx,%eax
  mov    %al,-0x38(%rbp)
  movsbl -0x30(%rbp),%eax
  sub    $0x61,%eax
  mov    %eax,-0x10(%rbp)
  movsbl -0x34(%rbp),%eax
  sub    $0x61,%eax
  mov    %eax,-0xc(%rbp)
  movb   $0x42,-0x11(%rbp)
  cmpb   $0x42,-0x38(%rbp)
  jne    L70
  movb   $0x57,-0x11(%rbp)
L70:
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%ecx
  mov    -0x2c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <positionInBounds@plt>
  mov    %eax,-0x8(%rbp)
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x55,%al
  jne    L122
  mov    -0x3c(%rbp),%eax
  add    %eax,-0x10(%rbp)
  mov    0x10(%rbp),%eax
  add    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x11(%rbp)
  jne    L2
  mov    -0x3c(%rbp),%eax
  add    %eax,-0x10(%rbp)
  mov    0x10(%rbp),%eax
  add    %eax,-0xc(%rbp)
  jmp    L53
L35:
  mov    -0xc(%rbp),%edx
  mov    -0x10(%rbp),%ecx
  mov    -0x2c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <positionInBounds@plt>
  mov    %eax,-0x8(%rbp)
  cmpl   $0x0,-0x8(%rbp)
  jne    L62
  movl   $0x0,-0x4(%rbp)
L62:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    %al,-0x38(%rbp)
  jne    L5
  movl   $0x1,-0x4(%rbp)
  movl   $0x0,-0x8(%rbp)
L110:
  mov    -0x3c(%rbp),%eax
  sub    %eax,-0x10(%rbp)
  mov    0x10(%rbp),%eax
  sub    %eax,-0xc(%rbp)
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  movzbl -0x38(%rbp),%edx
  mov    %dl,(%rcx,%rax,1)
  movsbl -0x30(%rbp),%eax
  lea    -0x61(%rax),%edx
  mov    -0x3c(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0x10(%rbp)
  jne    L110
  movsbl -0x34(%rbp),%eax
  lea    -0x61(%rax),%edx
  mov    0x10(%rbp),%eax
  add    %edx,%eax
  cmp    %eax,-0xc(%rbp)
  jne    L110
  jmp    L27
L5:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rax,%rdx
  mov    -0xc(%rbp),%eax
  cltq
  movzbl (%rdx,%rax,1),%eax
  cmp    $0x55,%al
  jne    L27
  movl   $0x0,-0x4(%rbp)
  movl   $0x0,-0x8(%rbp)
L27:
  mov    -0x3c(%rbp),%eax
  add    %eax,-0x10(%rbp)
  mov    0x10(%rbp),%eax
  add    %eax,-0xc(%rbp)
L53:
  cmpl   $0x1,-0x8(%rbp)
  je     L35
  jmp    L16
L2:
  movl   $0x0,-0x4(%rbp)
  jmp    L16
L122:
  movl   $0x0,-0x4(%rbp)
L16:
  nop
  leave
  ret
```

assistant: ```c
void flipBoard(char board[][26], int n, char row, char col, char colour, int deltaRow, int deltaCol) {
  int rowNum = row - 'a';
  int colNum = col - 'a';
  bool q;
  char anticolour = 'B';
  if (colour == 'B')
    anticolour = 'W';
  bool judge = positionInBounds(n, rowNum, colNum);
  if (board[rowNum][colNum] == 'U') {
    rowNum = rowNum + deltaRow;
    colNum = colNum + deltaCol;
    if (board[rowNum][colNum] == anticolour) {
      rowNum = rowNum + deltaRow;
      colNum = colNum + deltaCol;
      for (; judge == true; rowNum = rowNum + deltaRow, colNum = colNum + deltaCol) {
        judge = positionInBounds(n, rowNum, colNum);
        if (judge == false)
          q = false;
        if (board[rowNum][colNum] == colour) {
          q = true;
          judge = false;
          do {
            rowNum = rowNum - deltaRow;
            colNum = colNum - deltaCol;
            board[rowNum][colNum] = colour;
          } while (rowNum != row - 'a' + deltaRow || colNum != col - 'a' + deltaCol);
        } else if (board[rowNum][colNum] == 'U') {
          q = false;
          judge = false;
        }
      }
    } else
      q = false;
  } else
    q = false;
}
```