user: Translate the below assembly code into C programming language:

```asm
<reducerankLB>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %rdx,-0xd8(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x3b9aca00,-0x98(%rbp)
  movl   $0xffffffff,-0x9c(%rbp)
  mov    -0x9c(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  movl   $0x0,-0xb8(%rbp)
  jmp    L90
L69:
  movl   $0x0,-0xb4(%rbp)
  jmp    L393
L187:
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    %eax,-0x98(%rbp)
  jle    L2
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  mov    %eax,-0x98(%rbp)
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0xa0(%rbp)
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0x9c(%rbp)
L2:
  addl   $0x1,-0xb4(%rbp)
L393:
  cmpl   $0xf,-0xb4(%rbp)
  jle    L187
  addl   $0x1,-0xb8(%rbp)
L90:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L69
  movl   $0x0,-0xb8(%rbp)
  jmp    L14
L219:
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rax,%rdx
  mov    -0x9c(%rbp),%eax
  cltq
  mov    (%rcx,%rax,4),%eax
  mov    %eax,(%rdx)
  mov    -0xa0(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb8(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  mov    -0xb8(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd8(%rbp),%rdx
  add    %rcx,%rdx
  sub    -0x98(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0xb8(%rbp)
L14:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L219
  movl   $0x0,-0xbc(%rbp)
  movl   $0x0,-0xb8(%rbp)
  jmp    L275
L100:
  mov    -0xb8(%rbp),%eax
  cltq
  movl   $0x0,-0x50(%rbp,%rax,4)
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%edx
  mov    -0xb8(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  addl   $0x1,-0xb8(%rbp)
L275:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L100
  movl   $0x0,-0xb8(%rbp)
  jmp    L234
L23:
  movl   $0x0,-0xb4(%rbp)
  jmp    L216
L146:
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    %eax,%ecx
  jle    L112
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    -0xb8(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0xb4(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  lea    0x1(%rax),%edx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    %edx,-0x50(%rbp,%rax,4)
  addl   $0x1,-0xbc(%rbp)
L112:
  addl   $0x1,-0xb4(%rbp)
L216:
  cmpl   $0xf,-0xb4(%rbp)
  jle    L146
  addl   $0x1,-0xb8(%rbp)
L234:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L23
  jmp    L282
L313:
  movl   $0x0,-0xa8(%rbp)
  movl   $0xffffffff,-0xb0(%rbp)
  movl   $0x0,-0xb8(%rbp)
  jmp    L43
L170:
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  cmp    %eax,-0xa8(%rbp)
  jge    L55
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,-0xa8(%rbp)
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0xb0(%rbp)
L55:
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  cmp    %eax,-0xa8(%rbp)
  jge    L84
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  mov    %eax,-0xa8(%rbp)
  mov    -0xb8(%rbp),%eax
  add    $0x10,%eax
  mov    %eax,-0xb0(%rbp)
L84:
  addl   $0x1,-0xb8(%rbp)
L43:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L170
  cmpl   $0xf,-0xb0(%rbp)
  jg     L336
  movl   $0x3b9aca00,-0xa4(%rbp)
  movl   $0xffffffff,-0xac(%rbp)
  movl   $0x0,-0xb4(%rbp)
  jmp    L424
L27:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xb0(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  mov    %eax,-0x94(%rbp)
  cmpl   $0x0,-0x94(%rbp)
  jle    L317
  mov    -0x94(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jge    L317
  mov    -0x94(%rbp),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xb4(%rbp),%eax
  mov    %eax,-0xac(%rbp)
L317:
  addl   $0x1,-0xb4(%rbp)
L424:
  cmpl   $0xf,-0xb4(%rbp)
  jle    L27
  mov    -0xac(%rbp),%eax
  not    %eax
  shr    $0x1f,%eax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0xb0(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd0(%rbp),%rdx
  add    %rcx,%rdx
  sub    -0xa4(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x0,-0xb4(%rbp)
  jmp    L417
L318:
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xb4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xb0(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    %eax,%ecx
  jne    L210
  mov    -0xb0(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  lea    -0x1(%rax),%edx
  mov    -0xb0(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0xb4(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  lea    -0x1(%rax),%edx
  mov    -0xb4(%rbp),%eax
  cltq
  mov    %edx,-0x50(%rbp,%rax,4)
  subl   $0x1,-0xbc(%rbp)
  mov    -0xb0(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  test   %eax,%eax
  js     L131
  mov    -0xb4(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  test   %eax,%eax
  js     L131
  cmpl   $0x0,-0xbc(%rbp)
  js     L131
  mov    $0x1,%eax
  jmp    L236
L131:
  mov    $0x0,%eax
L236:
  mov    %eax,%edi
  call   <assert@plt>
L210:
  addl   $0x1,-0xb4(%rbp)
L417:
  cmpl   $0xf,-0xb4(%rbp)
  jle    L318
  jmp    L282
L336:
  subl   $0x10,-0xb0(%rbp)
  movl   $0x3b9aca00,-0xa4(%rbp)
  movl   $0xffffffff,-0xc0(%rbp)
  movl   $0x0,-0xb8(%rbp)
  jmp    L294
L277:
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%edx
  mov    %ecx,%eax
  sub    %edx,%eax
  mov    %eax,-0x94(%rbp)
  cmpl   $0x0,-0x94(%rbp)
  jle    L307
  mov    -0x94(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jge    L307
  mov    -0x94(%rbp),%eax
  mov    %eax,-0xa4(%rbp)
  mov    -0xb8(%rbp),%eax
  mov    %eax,-0xc0(%rbp)
L307:
  addl   $0x1,-0xb8(%rbp)
L294:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L277
  mov    -0xc0(%rbp),%eax
  not    %eax
  shr    $0x1f,%eax
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0xb0(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,4),%rcx
  mov    -0xd8(%rbp),%rdx
  add    %rcx,%rdx
  sub    -0xa4(%rbp),%eax
  mov    %eax,(%rdx)
  movl   $0x0,-0xb8(%rbp)
  jmp    L47
L113:
  mov    -0xb8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0xb0(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0xd8(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0xb8(%rbp),%eax
  cltq
  shl    $0x6,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rax,%rdx
  mov    -0xb0(%rbp),%eax
  cltq
  mov    (%rdx,%rax,4),%eax
  cmp    %eax,%ecx
  jne    L171
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  lea    -0x1(%rax),%edx
  mov    -0xb8(%rbp),%eax
  cltq
  mov    %edx,-0x90(%rbp,%rax,4)
  mov    -0xb0(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  lea    -0x1(%rax),%edx
  mov    -0xb0(%rbp),%eax
  cltq
  mov    %edx,-0x50(%rbp,%rax,4)
  subl   $0x1,-0xbc(%rbp)
  mov    -0xb8(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  test   %eax,%eax
  js     L425
  mov    -0xb0(%rbp),%eax
  cltq
  mov    -0x50(%rbp,%rax,4),%eax
  test   %eax,%eax
  js     L425
  cmpl   $0x0,-0xbc(%rbp)
  js     L425
  mov    $0x1,%eax
  jmp    L132
L425:
  mov    $0x0,%eax
L132:
  mov    %eax,%edi
  call   <assert@plt>
L171:
  addl   $0x1,-0xb8(%rbp)
L47:
  cmpl   $0xf,-0xb8(%rbp)
  jle    L113
L282:
  cmpl   $0x0,-0xbc(%rbp)
  jg     L313
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L403
  call   <__stack_chk_fail@plt>
L403:
  leave
  ret
```

assistant: ```c
void reducerankLB(int t[16][16], int t0[16], int t1[16]) {
  int d, i, j, dd, nd, i1, j1, nmax, dmin, imin, jmin, vmin, n0[16], n1[16];
  vmin = 1000000000;
  imin = jmin = -1;
  for (i = 0; i < 16; i++)
    for (j = 0; j < 16; j++)
      if (t[i][j] < vmin) {
        vmin = t[i][j];
        imin = i;
        jmin = j;
      }
  for (i = 0; i < 16; i++) {
    t0[i] = t[i][jmin];
    t1[i] = t[imin][i] - vmin;
  }
  nd = 0;
  for (i = 0; i < 16; i++)
    n0[i] = n1[i] = 0;
  for (i = 0; i < 16; i++)
    for (j = 0; j < 16; j++)
      if (t0[i] + t1[j] > t[i][j]) {
        n0[i]++;
        n1[j]++;
        nd++;
      }
  while (nd > 0) {
    if (0) {
      printf("             ");
      for (j = 0; j < 16; j++)
        printf(" %4d", n1[j]);
      printf("\n");
      printf("             ");
      for (j = 0; j < 16; j++)
        printf(" %4d", t1[j]);
      printf("\n");
      for (i = 0; i < 16; i++) {
        printf("%4d %4d : ", n0[i], t0[i]);
        for (j = 0; j < 16; j++)
          printf(" %4d", t0[i] + t1[j] - t[i][j]);
        printf("\n");
      }
      printf("\n");
    }
    nmax = 0;
    dd = -1;
    for (i = 0; i < 16; i++) {
      if (n0[i] > nmax) {
        nmax = n0[i];
        dd = i;
      }
      if (n1[i] > nmax) {
        nmax = n1[i];
        dd = 16 + i;
      }
    }
    if (dd < 16) {
      dmin = 1000000000;
      j1 = -1;
      for (j = 0; j < 16; j++) {
        d = (t0[dd] + t1[j]) - t[dd][j];
        if (d > 0 && d < dmin) {
          dmin = d;
          j1 = j;
        }
      }
      assert(j1 >= 0);
      t0[dd] -= dmin;
      for (j = 0; j < 16; j++)
        if (t0[dd] + t1[j] == t[dd][j]) {
          n0[dd]--;
          n1[j]--;
          nd--;
          assert(n0[dd] >= 0 && n1[j] >= 0 && nd >= 0);
        }
    } else {
      dd -= 16;
      dmin = 1000000000;
      i1 = -1;
      for (i = 0; i < 16; i++) {
        d = (t0[i] + t1[dd]) - t[i][dd];
        if (d > 0 && d < dmin) {
          dmin = d;
          i1 = i;
        }
      }
      assert(i1 >= 0);
      t1[dd] -= dmin;
      for (i = 0; i < 16; i++)
        if (t0[i] + t1[dd] == t[i][dd]) {
          n0[i]--;
          n1[dd]--;
          nd--;
          assert(n0[i] >= 0 && n1[dd] >= 0 && nd >= 0);
        }
    }
  }
}
```