user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %r15
  lea    D162(%rip),%rdi
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x8(%rsp),%rsi
  lea    0xc(%rsp),%rdx
  xor    %eax,%eax
  lea    D42(%rip),%rdi
  call   <scanf@plt>
  mov    0x8(%rsp),%esi
  test   %esi,%esi
  jle    L38
  mov    0xc(%rsp),%eax
  lea    D53(%rip),%r14
  xor    %r13d,%r13d
  lea    D28(%rip),%r12
  lea    D82(%rip),%rbp
  test   %eax,%eax
  jle    L38
  xchg   %ax,%ax
L72:
  mov    %r14,%rbx
  xor    %r15d,%r15d
  cs nopw 0x0(%rax,%rax,1)
L230:
  mov    %r12,%rdi
  xor    %eax,%eax
  add    $0x1,%r15d
  call   <printf@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  mov    0xc(%rsp),%eax
  add    $0x4,%rbx
  cmp    %r15d,%eax
  jg     L230
  lea    0x1(%r13),%edx
  cmp    %edx,0x8(%rsp)
  jle    L38
  add    $0x1,%r13
  add    $0x10,%r14
  test   %eax,%eax
  jg     L72
L38:
  lea    D106(%rip),%rdi
  call   <puts@plt>
  mov    0x8(%rsp),%ecx
  test   %ecx,%ecx
  jle    L105
  lea    D53(%rip),%rbp
  xor    %r13d,%r13d
  lea    D149(%rip),%r12
L109:
  mov    0xc(%rsp),%edx
  xor    %ebx,%ebx
  test   %edx,%edx
  jle    L129
L135:
  mov    0x0(%rbp,%rbx,4),%esi
  mov    %r12,%rdi
  xor    %eax,%eax
  add    $0x1,%rbx
  call   <printf@plt>
  cmp    %ebx,0xc(%rsp)
  jg     L135
L129:
  mov    $0xa,%edi
  add    $0x1,%r13d
  add    $0x10,%rbp
  call   <putchar@plt>
  cmp    %r13d,0x8(%rsp)
  jg     L109
L105:
  lea    D23(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    D84(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x14(%rsp),%rdx
  lea    0x10(%rsp),%rsi
  xor    %eax,%eax
  lea    D42(%rip),%rdi
  call   <scanf@plt>
  lea    D155(%rip),%rdi
  call   <puts@plt>
  mov    0x8(%rsp),%ecx
  test   %ecx,%ecx
  jle    L128
  movslq 0x10(%rsp),%r8
  movslq 0x14(%rsp),%rdi
  mov    %r8,%rdx
  lea    -0x1(%r8),%r11d
  lea    -0x1(%rdi),%r9d
  mov    %rdi,%rax
  shl    $0x4,%rdx
  shl    $0x4,%rax
  lea    -0x10(%rdx),%r10
  lea    -0x10(%rax),%rsi
  cmp    %r10,%rax
  setle  %al
  cmp    %rdx,%rsi
  setge  %dl
  or     %dl,%al
  je     L125
  cmp    $0x1,%ecx
  je     L125
  lea    -0x1(%rcx),%eax
  cmp    $0x2,%eax
  jbe    L30
  lea    D53(%rip),%rax
  add    %rax,%rsi
  add    %rax,%r10
  movdqa (%rsi),%xmm1
  movdqa (%r10),%xmm0
  movaps %xmm1,(%r10)
  movaps %xmm0,(%rsi)
  mov    %ecx,%esi
  and    $0xfffffffc,%esi
  mov    %esi,%edx
  cmp    %esi,%ecx
  je     L130
  sub    %esi,%ecx
  cmp    $0x1,%ecx
  je     L152
L201:
  lea    (%rsi,%r8,4),%r8
  lea    (%rsi,%rdi,4),%rsi
  lea    -0x10(%rax,%rsi,4),%rsi
  lea    -0x10(%rax,%r8,4),%r8
  mov    (%rsi),%r10
  mov    (%r8),%rdi
  mov    %r10,(%r8)
  mov    %rdi,(%rsi)
  mov    %ecx,%esi
  and    $0xfffffffe,%esi
  add    %esi,%edx
  cmp    %ecx,%esi
  je     L130
L152:
  movslq %edx,%rdx
  movslq %r11d,%rcx
  movslq %r9d,%r9
  lea    (%rdx,%rcx,4),%rcx
  lea    (%rdx,%r9,4),%rdx
  mov    (%rax,%rcx,4),%esi
  mov    (%rax,%rdx,4),%edi
  mov    %edi,(%rax,%rcx,4)
  mov    %esi,(%rax,%rdx,4)
L130:
  lea    D53(%rip),%rbp
  xor    %r13d,%r13d
  lea    D149(%rip),%r12
L47:
  mov    0xc(%rsp),%eax
  xor    %ebx,%ebx
  test   %eax,%eax
  jle    L119
L144:
  mov    0x0(%rbp,%rbx,4),%esi
  mov    %r12,%rdi
  xor    %eax,%eax
  add    $0x1,%rbx
  call   <printf@plt>
  cmp    %ebx,0xc(%rsp)
  jg     L144
L119:
  mov    $0xa,%edi
  add    $0x1,%r13d
  add    $0x10,%rbp
  call   <putchar@plt>
  cmp    %r13d,0x8(%rsp)
  jg     L47
L128:
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L40
  add    $0x28,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L125:
  movslq %r11d,%rdx
  movslq %r9d,%r9
  lea    D53(%rip),%rax
  shl    $0x4,%rdx
  shl    $0x4,%r9
  add    %rax,%rdx
  add    %r9,%rax
  mov    (%rdx),%esi
  mov    (%rax),%edi
  mov    %edi,(%rdx)
  mov    %esi,(%rax)
  cmp    $0x1,%ecx
  je     L130
  mov    0x4(%rdx),%esi
  mov    0x4(%rax),%edi
  mov    %edi,0x4(%rdx)
  mov    %esi,0x4(%rax)
  cmp    $0x2,%ecx
  je     L130
  mov    0x8(%rdx),%esi
  mov    0x8(%rax),%edi
  mov    %edi,0x8(%rdx)
  mov    %esi,0x8(%rax)
  cmp    $0x3,%ecx
  je     L130
  mov    0xc(%rdx),%ecx
  mov    0xc(%rax),%esi
  mov    %esi,0xc(%rdx)
  mov    %ecx,0xc(%rax)
  jmp    L130
L30:
  xor    %esi,%esi
  xor    %edx,%edx
  lea    D53(%rip),%rax
  jmp    L201
L40:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D162
type: string
name: unpack_data
arguments: tag: D42
type: string
name: unpack_data
arguments: tag: D28
type: string
name: unpack_data
arguments: tag: D82
type: string
name: unpack_data
arguments: tag: D106
type: string
name: unpack_data
arguments: tag: D149
type: string
name: unpack_data
arguments: tag: D23
type: string
name: unpack_data
arguments: tag: D84
type: string
name: unpack_data
arguments: tag: D155
type: string

tool: D162: Please enter the first two numbers, seperated by a space, specified in the pdf: 

tool: D42: %d %d

tool: D28: Please enter one number from the input: 

tool: D82: %d,

tool: D106: 
Before:

tool: D149: %d 

tool: D23: Please enter two numbers, seperated by a space, specified in the pdf, these 

tool: D84: should be the numbers immediately after where you left of before: 

tool: D155: 
After:

assistant: ```c
int main(void) {
  static int array1[4][4];
  int i, j, m, n, a, b, c, p, q, r;
  printf("Please enter the first two numbers, seperated by a space, specified in the pdf: ");
  scanf("%d %d", &m, &n);
  for (i = 0; i < m; ++i) {
    for (j = 0; j < n; ++j) {
      printf("Please enter one number from the input: ");
      scanf("%d,", &array1[i][j]);
    }
  }
  printf("\nBefore:\n");
  for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
      printf("%d ", array1[i][j]);
    }
    printf("\n");
  }
  printf("Please enter two numbers, seperated by a space, specified in the pdf, these ");
  printf("should be the numbers immediately after where you left of before: ");
  scanf("%d %d", &a, &b);
  printf("\nAfter:\n");
  for (i = 0; i < m; ++i) {
    c = array1[a - 1][i];
    array1[a - 1][i] = array1[b - 1][i];
    array1[b - 1][i] = c;
  }
  for (i = 0; i < m; i++) {
    for (j = 0; j < n; j++) {
      printf("%d ", array1[i][j]);
    }
    printf("\n");
  }
  return 0;
}
```