user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %r15
  mov    $0xb4,%edi
  xor    %r15d,%r15d
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  call   <malloc@plt>
  mov    %rax,%rdi
  mov    %rax,%rbx
  xor    %eax,%eax
  call   <assert@plt>
  mov    $0xb4,%edi
  xor    %eax,%eax
  lea    0x3(%rbx),%r13
  call   <acc_malloc@plt>
  movslq %eax,%rbp
  xor    %eax,%eax
  mov    %rbp,%rdi
  lea    0x3(%rbp),%r12
  lea    0xb4(%rbp),%r14
  call   <assert@plt>
L12:
  mov    $0xb4,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_map_data@plt>
  mov    %rbx,%rdi
  xor    %eax,%eax
  mov    $0xb4,%esi
  call   <acc_is_present@plt>
  mov    %eax,%edi
  xor    %eax,%eax
  call   <assert@plt>
  test   %r15d,%r15d
  je     L41
L26:
  mov    $0x67,%esi
  mov    %r13,%rdi
  xor    %eax,%eax
  call   <acc_create@plt>
  xor    %edi,%edi
  cltq
  cmp    %rax,%r12
  sete   %dil
  xor    %eax,%eax
  call   <assert@plt>
  mov    $0xb4,%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_create@plt>
  xor    %edi,%edi
  cltq
  cmp    %rax,%rbp
  sete   %dil
  xor    %eax,%eax
  call   <assert@plt>
  mov    $0xb4,%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_is_present@plt>
  mov    %eax,%edi
  xor    %eax,%eax
  call   <assert@plt>
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_unmap_data@plt>
  mov    $0xb4,%esi
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_is_present@plt>
  xor    %edi,%edi
  test   %eax,%eax
  sete   %dil
  xor    %eax,%eax
  call   <assert@plt>
  mov    %r15d,%ecx
  mov    %rbp,%rax
  xor    %edx,%edx
  nopl   0x0(%rax)
L16:
  add    %dl,(%rax)
  add    $0x1,%rax
  add    %ecx,%edx
  cmp    %rax,%r14
  jne    L16
  add    $0x1,%r15d
  cmp    $0x219,%r15d
  jne    L12
  mov    $0xb4,%edx
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  xor    %eax,%eax
  call   <acc_memcpy_from_device@plt>
  mov    $0x25,%r12d
L21:
  xor    %edi,%edi
  cmp    %r12b,(%rbx)
  sete   %dil
  xor    %eax,%eax
  add    $0x2322c,%r12d
  add    $0x1,%rbx
  call   <assert@plt>
  cmp    $0x18b4715,%r12d
  jne    L21
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <acc_free@plt>
  add    $0x8,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L41:
  movdqa D5(%rip),%xmm0
  movl   $0x25252525,0xb0(%rbx)
  movups %xmm0,(%rbx)
  movups %xmm0,0x10(%rbx)
  movups %xmm0,0x20(%rbx)
  movups %xmm0,0x30(%rbx)
  movups %xmm0,0x40(%rbx)
  movups %xmm0,0x50(%rbx)
  movups %xmm0,0x60(%rbx)
  movups %xmm0,0x70(%rbx)
  movups %xmm0,0x80(%rbx)
  movups %xmm0,0x90(%rbx)
  movups %xmm0,0xa0(%rbx)
  jmp    L26
```

tool_calls: name: read_data
arguments: data_tag: D5
data_type: byte[16]

tool: {"D5": [0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25]}

assistant: ```c
int main() {
  const int N = 180;
  const int N_i = 537;
  const int C = 37;
  unsigned char *h = (unsigned char *)malloc(N);
  assert(h);
  unsigned char *d = (unsigned char *)acc_malloc(N);
  assert(d);
  for (int i = 0; i < N_i; ++i) {
    acc_map_data(h, d, N);
    assert(acc_is_present(h, N));
#pragma acc parallel present(h [0:N])
    {
      if (i == 0)
        memset(h, C, N);
    }
    unsigned char *d_ = (unsigned char *)acc_create(h + 3, N - 77);
    assert(d_ == d + 3);
#pragma acc data create(h [6:N - 44])
    {
      d_ = (unsigned char *)acc_create(h, N);
      assert(d_ == d);
#pragma acc enter data create(h [0:N])
      assert(acc_is_present(h, N));
      acc_unmap_data(h);
      assert(!acc_is_present(h, N));
    }
#pragma acc parallel loop deviceptr(d)
    for (int j = 0; j < N; ++j)
      d[j] += i * j;
  }
  acc_memcpy_from_device(h, d, N);
  for (int j = 0; j < N; ++j)
    assert(h[j] == ((C + N_i * (N_i - 1) / 2 * j) % 256));
  acc_free(d);
  return 0;
}
```