user: Demonstrate the C code that generates the assembly output below:

```asm
<uniquePathsWithObstacles>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %esi,-0x1c(%rbp)
  mov    %edx,-0x20(%rbp)
  cmpl   $0x0,-0x1c(%rbp)
  jle    L95
  cmpl   $0x0,-0x20(%rbp)
  jg     L172
L95:
  mov    $0x0,%eax
  jmp    L99
L172:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  sete   %dl
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rax
  movzbl %dl,%edx
  mov    %edx,(%rax)
  movl   $0x1,-0x10(%rbp)
  jmp    L119
L83:
  mov    -0x10(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L165
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L165
  mov    $0x1,%edx
  jmp    L143
L165:
  mov    $0x0,%edx
L143:
  mov    -0x10(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rcx
  mov    -0x18(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%rax
  mov    %edx,(%rax)
  addl   $0x1,-0x10(%rbp)
L119:
  mov    -0x10(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L83
  movl   $0x1,-0xc(%rbp)
  jmp    L107
L4:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L89
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  je     L89
  mov    $0x1,%edx
  jmp    L130
L89:
  mov    $0x0,%edx
L130:
  mov    -0x18(%rbp),%rax
  mov    (%rax),%rcx
  mov    -0xc(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %edx,(%rax)
  addl   $0x1,-0xc(%rbp)
L107:
  mov    -0xc(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L4
  movl   $0x1,-0x8(%rbp)
  jmp    L100
L74:
  movl   $0x1,-0x4(%rbp)
  jmp    L158
L157:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L60
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  movl   $0x0,(%rax)
  jmp    L175
L60:
  mov    -0x8(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%ecx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rsi
  mov    -0x18(%rbp),%rax
  add    %rsi,%rax
  mov    (%rax),%rsi
  mov    -0x4(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rsi,%rax
  add    %ecx,%edx
  mov    %edx,(%rax)
L175:
  addl   $0x1,-0x4(%rbp)
L158:
  mov    -0x4(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L157
  addl   $0x1,-0x8(%rbp)
L100:
  mov    -0x8(%rbp),%eax
  cmp    -0x1c(%rbp),%eax
  jl     L74
  mov    -0x1c(%rbp),%eax
  cltq
  shl    $0x3,%rax
  lea    -0x8(%rax),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  shl    $0x2,%rax
  sub    $0x4,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
L99:
  pop    %rbp
  ret
```

assistant: ```c
int uniquePathsWithObstacles(int **obstacleGrid, int obstacleGridRowSize, int obstacleGridColSize) {
  if (obstacleGridRowSize <= 0 || obstacleGridColSize <= 0)
    return 0;
  obstacleGrid[0][0] = obstacleGrid[0][0] == 0;
  for (int i = 1; i < obstacleGridRowSize; ++i)
    obstacleGrid[i][0] = obstacleGrid[i - 1][0] == 1 && obstacleGrid[i][0] != 1;
  for (int j = 1; j < obstacleGridColSize; ++j)
    obstacleGrid[0][j] = obstacleGrid[0][j - 1] == 1 && obstacleGrid[0][j] != 1;
  for (int i = 1; i < obstacleGridRowSize; ++i)
    for (int j = 1; j < obstacleGridColSize; ++j)
      if (obstacleGrid[i][j] == 1)
        obstacleGrid[i][j] = 0;
      else
        obstacleGrid[i][j] = obstacleGrid[i - 1][j] + obstacleGrid[i][j - 1];
  return obstacleGrid[obstacleGridRowSize - 1][obstacleGridColSize - 1];
}
```