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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x350,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x1000,%edi
  call   <malloc@plt>
  mov    %rax,-0x338(%rbp)
  movl   $0x0,-0x34c(%rbp)
  jmp    L73
L57:
  mov    -0x34c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x338(%rbp),%rax
  add    %rax,%rdx
  mov    $0x400,%eax
  sub    -0x34c(%rbp),%eax
  mov    %eax,(%rdx)
  addl   $0x1,-0x34c(%rbp)
L73:
  cmpl   $0x3ff,-0x34c(%rbp)
  jle    L57
  movl   $0x0,-0x348(%rbp)
  jmp    L65
L46:
  movl   $0x0,-0x344(%rbp)
  jmp    L54
L37:
  mov    -0x344(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x348(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  movl   $0x0,-0x330(%rbp,%rax,4)
  addl   $0x1,-0x344(%rbp)
L54:
  cmpl   $0x9,-0x344(%rbp)
  jle    L37
  addl   $0x1,-0x348(%rbp)
L65:
  cmpl   $0x13,-0x348(%rbp)
  jle    L46
  movl   $0x0,-0x34c(%rbp)
  jmp    L23
L67:
  mov    -0x34c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x338(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x3,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,-0x340(%rbp)
  mov    -0x340(%rbp),%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  shl    $0x2,%eax
  sub    %eax,%edx
  mov    %edx,-0x340(%rbp)
  mov    -0x34c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x338(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  movslq %edx,%rax
  imul   $0x66666667,%rax,%rax
  shr    $0x20,%rax
  sar    $0x2,%eax
  mov    %edx,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%eax
  mov    %eax,-0x33c(%rbp)
  mov    -0x33c(%rbp),%ecx
  mov    %ecx,%eax
  shl    $0x2,%eax
  add    %ecx,%eax
  add    %eax,%eax
  sub    %eax,%edx
  mov    %edx,-0x33c(%rbp)
  mov    -0x33c(%rbp),%eax
  movslq %eax,%rcx
  mov    -0x340(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rcx,%rax
  mov    -0x330(%rbp,%rax,4),%eax
  lea    0x1(%rax),%ecx
  mov    -0x33c(%rbp),%eax
  movslq %eax,%rsi
  mov    -0x340(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  shl    $0x2,%rax
  add    %rdx,%rax
  add    %rax,%rax
  add    %rsi,%rax
  mov    %ecx,-0x330(%rbp,%rax,4)
  addl   $0x1,-0x34c(%rbp)
L23:
  cmpl   $0x3ff,-0x34c(%rbp)
  jle    L67
  mov    -0x338(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    D6(%rip),%rax
  mov    (%rax),%eax
  mov    %eax,%edi
  call   <fflush@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L60
  call   <__stack_chk_fail@plt>
L60:
  leave
  ret
```

assistant: ```c
int main(void) {
  int i, p, q;
  int index1, index2;
  int *in = (int *)malloc(1024 * sizeof(int));
  int B[20][10];
  for (i = 0; i < 1024; i++) {
    in[i] = (1024 - i);
  }
  for (p = 0; p < 20; p++) {
    for (q = 0; q < 10; q++) {
      B[p][q] = 0;
    }
  }
#pragma scop
  {
#pragma species kernel in[0 : SIZE - 1] | element ^ B[0 : 19, 0 : 9] | full->B[0 : 19, 0 : 9] | shared
    for (i = 0; i < 1024; i++) {
      index1 = in[i] % 20;
      index2 = in[i] % 10;
      B[index1][index2] = B[index1][index2] + 1;
    }
#pragma species endkernel example03_k1
  }
#pragma endscop
  free(in);
  fflush(stdout);
  return 0;
}
```