user: What would the C source look like for the assembly code provided here:

```asm
<goodv>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rsi,-0x8(%rsp)
  mov    %edx,-0x48(%rsp)
  test   %ecx,%ecx
  jle    L100
  lea    0x50(%rdi),%rax
  mov    %rax,-0x40(%rsp)
  movl   $0x1,-0x44(%rsp)
  movl   $0x0,-0x18(%rsp)
  movl   $0x0,-0x50(%rsp)
  mov    %edx,%r15d
  lea    -0x1(%rdx),%eax
  mov    %eax,-0x14(%rsp)
  lea    -0x1(%rcx),%eax
  mov    %eax,-0x10(%rsp)
  mov    %ecx,-0x54(%rsp)
  jmp    L45
L182:
  mov    %ebp,%eax
L56:
  sub    $0x1,%esi
  lea    -0x1(%rax,%rdi,1),%eax
  cmp    %r10d,%eax
  setg   %dl
  cmp    %r11d,%esi
  setg   %al
  add    $0x1,%r10d
  add    $0x54,%rbx
  sub    $0x1,%r9d
  sub    $0x1,%r8d
  test   %al,%dl
  je     L148
L20:
  lea    -0x1(%r10),%edi
  mov    %r11d,%esi
  add    $0x1,%r11d
  cmp    %r11d,%r12d
  jle    L142
  cmp    %r10d,%r13d
  jle    L131
  lea    -0x50(%rbx),%rcx
  mov    %rbx,%rdx
  mov    %r11d,%esi
  mov    $0x1,%eax
  mov    %r8d,%ebp
  mov    %r9d,-0x4c(%rsp)
L17:
  mov    0x4(%rcx),%r14d
  cmp    %r14d,(%rdx)
  jne    L56
  add    $0x1,%eax
  add    $0x1,%esi
  cmp    %r8d,%eax
  je     L182
  add    $0x50,%rdx
  add    $0x4,%rcx
  cmp    %r9d,%eax
  jne    L17
  mov    -0x4c(%rsp),%r14d
  mov    %r14d,%eax
  jmp    L56
L142:
  mov    %r11d,%esi
  mov    $0x1,%eax
  jmp    L56
L148:
  mov    -0x38(%rsp),%r14
  mov    -0x30(%rsp),%rdi
  mov    -0x28(%rsp),%r13
  mov    -0x20(%rsp),%r12
L27:
  mov    -0x50(%rsp),%ebx
  sub    %ebx,%esi
  lea    0x1(%rsi),%eax
  cmp    -0x18(%rsp),%eax
  jle    L254
  mov    -0x8(%rsp),%rsi
  mov    %ebx,(%rsi)
  mov    -0x58(%rsp),%ebx
  mov    %ebx,0x4(%rsi)
  mov    %eax,-0x18(%rsp)
L126:
  add    $0x1,%rdi
  add    $0x4,%r13
  cmp    %r15,%rdi
  je     L110
L90:
  mov    %edi,-0x58(%rsp)
  mov    0x4(%r12,%rdi,4),%ebx
  cmp    %ebx,(%r14,%rdi,4)
  jne    L126
  lea    0x1(%rdi),%r10d
  cmp    %r10d,-0x54(%rsp)
  jle    L126
  mov    -0x44(%rsp),%esi
  cmp    %esi,-0x48(%rsp)
  jle    L126
  mov    -0x14(%rsp),%ecx
  mov    %ecx,%esi
  mov    %edi,-0xc(%rsp)
  cmp    %edi,-0x10(%rsp)
  jle    L27
  mov    -0x50(%rsp),%r11d
  cmp    %r11d,%ecx
  jle    L27
  mov    -0x54(%rsp),%esi
  mov    %esi,%r9d
  sub    %edi,%r9d
  mov    -0x48(%rsp),%eax
  mov    %eax,%r8d
  sub    %r11d,%r8d
  mov    %r13,%rbx
  mov    %r14,-0x38(%rsp)
  mov    %rdi,-0x30(%rsp)
  mov    %r13,-0x28(%rsp)
  mov    %r12,-0x20(%rsp)
  mov    %eax,%r12d
  mov    %esi,%r13d
  jmp    L20
L131:
  mov    -0x38(%rsp),%r14
  mov    -0x30(%rsp),%rdi
  mov    -0x28(%rsp),%r13
  mov    -0x20(%rsp),%r12
  jmp    L27
L254:
  cmp    -0x18(%rsp),%eax
  jne    L126
  mov    -0x8(%rsp),%rax
  mov    -0x50(%rsp),%ebx
  cmp    %ebx,(%rax)
  jl     L126
  mov    -0xc(%rsp),%esi
  cmp    %esi,0x4(%rax)
  jle    L126
  mov    %ebx,(%rax)
  mov    -0x58(%rsp),%ebx
  mov    %ebx,0x4(%rax)
  jmp    L126
L110:
  addl   $0x1,-0x50(%rsp)
  mov    -0x50(%rsp),%eax
  addl   $0x1,-0x44(%rsp)
  addq   $0x50,-0x40(%rsp)
  cmp    %eax,-0x54(%rsp)
  je     L73
L45:
  cmpl   $0x0,-0x48(%rsp)
  jle    L110
  mov    -0x40(%rsp),%r13
  mov    %r13,%r14
  lea    -0x50(%r13),%rbp
  mov    $0x0,%edi
  mov    %rbp,%r12
  jmp    L90
L100:
  movl   $0x0,-0x18(%rsp)
L73:
  mov    -0x18(%rsp),%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

assistant: ```c
int goodv(int m[][20], int ind[], int r, int c) {
  int endi[2], i, j, k, k1, k2, maxg = 0, tmpg;
  int tmpi[2];
  for (i = 0; i < c; ++i)
    for (j = 0; j < r; ++j) {
      endi[0] = r - 1;
      endi[1] = c - 1;
      if (m[i + 1][j] == m[i][j + 1] && (i + 1) < r && (j + 1) < c) {
        tmpi[0] = k1 = i;
        tmpi[1] = k2 = j;
        tmpg = 0;
        while (k1 < endi[0] && k2 < endi[1]) {
          k = 1;
          while ((((k1 + k) < r) && ((k2 + k) < c)) && (m[k1 + k][k2] == m[k1][k2 + k]))
            k++;
          endi[0] = k1 + k - 1;
          endi[1] = k2 + k - 1;
          k1++;
          k2++;
        }
        tmpg = endi[0] - i + 1;
        if (tmpg > maxg) {
          maxg = tmpg;
          ind[0] = tmpi[0];
          ind[1] = tmpi[1];
        } else if (tmpg == maxg) {
          if (((tmpi[0] < ind[0]) || (tmpi[0] == ind[0])) && (tmpi[1] < ind[1])) {
            ind[0] = tmpi[0];
            ind[1] = tmpi[1];
          }
        }
      }
    }
  return maxg;
}
```