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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  movl   $0x0,-0x5c(%rbp)
  jmp    L26
L78:
  movl   $0x0,-0x58(%rbp)
  jmp    L41
L130:
  mov    $0x0,%eax
  call   <rand@plt>
  movslq %eax,%rdx
  imul   $0x51eb851f,%rdx,%rdx
  shr    $0x20,%rdx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x64,%edx,%ecx
  sub    %ecx,%eax
  mov    %eax,%edx
  mov    -0x58(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    %edx,-0x50(%rbp,%rax,4)
  addl   $0x1,-0x58(%rbp)
L41:
  cmpl   $0x3,-0x58(%rbp)
  jle    L130
  addl   $0x1,-0x5c(%rbp)
L26:
  cmpl   $0x3,-0x5c(%rbp)
  jle    L78
  movl   $0x0,-0x5c(%rbp)
  jmp    L100
L80:
  movl   $0x0,-0x58(%rbp)
  jmp    L60
L85:
  mov    -0x58(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x50(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  addl   $0x1,-0x58(%rbp)
L60:
  cmpl   $0x3,-0x58(%rbp)
  jle    L85
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x5c(%rbp)
L100:
  cmpl   $0x3,-0x5c(%rbp)
  jle    L80
  lea    D5(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movl   $0x0,-0x5c(%rbp)
  jmp    L115
L86:
  mov    -0x5c(%rbp),%eax
  add    $0x1,%eax
  mov    %eax,-0x58(%rbp)
  jmp    L109
L131:
  mov    -0x58(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x50(%rbp,%rax,4),%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x5c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x50(%rbp,%rax,4),%eax
  mov    -0x58(%rbp),%edx
  movslq %edx,%rcx
  mov    -0x5c(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    %eax,-0x50(%rbp,%rdx,4)
  mov    -0x5c(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x58(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x54(%rbp),%eax
  mov    %eax,-0x50(%rbp,%rdx,4)
  addl   $0x1,-0x58(%rbp)
L109:
  cmpl   $0x3,-0x58(%rbp)
  jle    L131
  addl   $0x1,-0x5c(%rbp)
L115:
  cmpl   $0x2,-0x5c(%rbp)
  jle    L86
  movl   $0x0,-0x5c(%rbp)
  jmp    L142
L47:
  movl   $0x0,-0x58(%rbp)
  jmp    L104
L102:
  mov    -0x58(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x5c(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x50(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D28(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  addl   $0x1,-0x58(%rbp)
L104:
  cmpl   $0x3,-0x58(%rbp)
  jle    L102
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x5c(%rbp)
L142:
  cmpl   $0x3,-0x5c(%rbp)
  jle    L47
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L163
  call   <__stack_chk_fail@plt>
L163:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D28
type_infered: string
name: parse_data
arguments: data_tag: D5
type_infered: string

tool: D28: %4d

tool: D5: -----------------

assistant: ```c
int main() {
  int a[4][4];
  int i, j, t;
  srand(time(NULL));
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++)
      a[i][j] = rand() % 100;
  }
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++)
      printf("%4d", a[i][j]);
    putchar('\n');
  }
  puts("-----------------");
  for (i = 0; i < 4 - 1; i++) {
    for (j = i + 1; j < 4; j++) {
      t = a[i][j];
      a[i][j] = a[j][i];
      a[j][i] = t;
    }
  }
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 4; j++)
      printf("%4d", a[i][j]);
    putchar('\n');
  }
}
```