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

```asm
<create_palette>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x28(%rbp)
  movl   $0x0,-0x10(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L104
L42:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0xc(%rbp)
  addl   $0x1,-0x14(%rbp)
L104:
  cmpl   $0xe,-0x14(%rbp)
  jle    L42
  movl   $0x0,-0x14(%rbp)
  jmp    L65
L127:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x8(%rbp)
  addl   $0x1,-0x14(%rbp)
L65:
  cmpl   $0xe,-0x14(%rbp)
  jle    L127
  movl   $0x0,-0x14(%rbp)
  jmp    L83
L112:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  subl   $0x1,-0xc(%rbp)
  addl   $0x1,-0x14(%rbp)
L83:
  cmpl   $0xe,-0x14(%rbp)
  jle    L112
  movl   $0x0,-0x14(%rbp)
  jmp    L23
L94:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x4(%rbp)
  addl   $0x1,-0x14(%rbp)
L23:
  cmpl   $0xe,-0x14(%rbp)
  jle    L94
  movl   $0x0,-0x14(%rbp)
  jmp    L51
L31:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  subl   $0x1,-0x8(%rbp)
  addl   $0x1,-0x14(%rbp)
L51:
  cmpl   $0xe,-0x14(%rbp)
  jle    L31
  movl   $0x0,-0x14(%rbp)
  jmp    L4
L17:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0xc(%rbp)
  addl   $0x1,-0x14(%rbp)
L4:
  cmpl   $0xe,-0x14(%rbp)
  jle    L17
  movl   $0x0,-0x14(%rbp)
  jmp    L14
L111:
  mov    -0xc(%rbp),%eax
  shl    $0x14,%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%eax
  shl    $0xc,%eax
  lea    (%rdx,%rax,1),%esi
  mov    -0x4(%rbp),%eax
  shl    $0x4,%eax
  mov    %eax,%ecx
  mov    -0x10(%rbp),%eax
  lea    0x1(%rax),%edx
  mov    %edx,-0x10(%rbp)
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  lea    (%rsi,%rcx,1),%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x8(%rbp)
  addl   $0x1,-0x14(%rbp)
L14:
  cmpl   $0xe,-0x14(%rbp)
  jle    L111
  mov    -0x10(%rbp),%eax
  pop    %rbp
  ret
```

assistant: ```c
int create_palette(uint32_t palet[]) {
  int i;
  int k = 0;
  int r = 0, g = 0, b = 0;
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    r++;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    g++;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    r--;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    b++;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    g--;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    r++;
  }
  for (i = 0; i < 15; i++) {
    palet[k++] = (r << 20) + (g << 12) + (b << 4);
    g++;
  }
  return k;
}
```