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

```asm
<palette_feu>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x320,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    $0x0,%eax
  call   <cng_clear_screen@plt>
  movl   $0x0,-0x314(%rbp)
  jmp    L88
L24:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x310,%rax
  movb   $0x0,(%rax)
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30f,%rax
  movb   $0x0,(%rax)
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30e,%rax
  movb   $0x0,(%rax)
  addl   $0x1,-0x314(%rbp)
L88:
  cmpl   $0xff,-0x314(%rbp)
  jle    L24
  movl   $0x0,-0x314(%rbp)
  jmp    L113
L7:
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x310,%rax
  movb   $0xff,(%rax)
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30f,%rax
  movb   $0xff,(%rax)
  mov    -0x314(%rbp),%eax
  shl    $0x2,%eax
  not    %eax
  mov    %eax,%ecx
  mov    -0x314(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30e,%rax
  mov    %cl,(%rax)
  addl   $0x1,-0x314(%rbp)
L113:
  cmpl   $0x3f,-0x314(%rbp)
  jle    L7
  movl   $0x0,-0x314(%rbp)
  jmp    L39
L37:
  mov    -0x314(%rbp),%eax
  add    $0x40,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x310,%rax
  movb   $0xff,(%rax)
  mov    -0x314(%rbp),%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x314(%rbp),%eax
  add    $0x40,%eax
  mov    %edx,%ecx
  not    %ecx
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30f,%rax
  mov    %cl,(%rax)
  mov    -0x314(%rbp),%eax
  add    $0x40,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30e,%rax
  movb   $0x0,(%rax)
  addl   $0x1,-0x314(%rbp)
L39:
  cmpl   $0x3f,-0x314(%rbp)
  jle    L37
  movl   $0x0,-0x314(%rbp)
  jmp    L126
L114:
  mov    -0x314(%rbp),%eax
  sub    $0xffffff80,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x310,%rax
  movb   $0xff,(%rax)
  mov    $0x40,%eax
  sub    -0x314(%rbp),%eax
  mov    %eax,%edx
  mov    -0x314(%rbp),%eax
  sub    $0xffffff80,%eax
  lea    (%rdx,%rdx,1),%ecx
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30f,%rax
  mov    %cl,(%rax)
  mov    -0x314(%rbp),%eax
  sub    $0xffffff80,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30e,%rax
  movb   $0x0,(%rax)
  addl   $0x1,-0x314(%rbp)
L126:
  cmpl   $0x3f,-0x314(%rbp)
  jle    L114
  movl   $0x0,-0x314(%rbp)
  jmp    L108
L75:
  mov    -0x314(%rbp),%eax
  lea    0x0(,%rax,4),%edx
  mov    -0x314(%rbp),%eax
  add    $0xc0,%eax
  mov    %edx,%ecx
  not    %ecx
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x310,%rax
  mov    %cl,(%rax)
  mov    -0x314(%rbp),%eax
  add    $0xc0,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30f,%rax
  movb   $0x0,(%rax)
  mov    -0x314(%rbp),%eax
  add    $0xc0,%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  add    %rbp,%rax
  sub    $0x30e,%rax
  movb   $0x0,(%rax)
  addl   $0x1,-0x314(%rbp)
L108:
  cmpl   $0x3f,-0x314(%rbp)
  jle    L75
  lea    -0x310(%rbp),%rax
  mov    %rax,%rdi
  call   <cng_palette@plt>
  mov    $0x0,%edi
  call   <cng_current_color_index@plt>
  mov    $0x0,%eax
  call   <cng_clear_screen@plt>
  movl   $0x0,-0x314(%rbp)
  jmp    L5
L32:
  mov    -0x314(%rbp),%eax
  mov    %eax,%edi
  call   <cng_current_color_index@plt>
  mov    -0x314(%rbp),%edx
  mov    -0x314(%rbp),%eax
  mov    %edx,%ecx
  mov    $0x280,%edx
  mov    %eax,%esi
  mov    $0x0,%edi
  call   <cng_line@plt>
  addl   $0x1,-0x314(%rbp)
L5:
  cmpl   $0xff,-0x314(%rbp)
  jle    L32
  mov    $0x7d0,%edi
  call   <cng_delay@plt>
  mov    $0x0,%eax
  call   <menu@plt>
  nop
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L54
  call   <__stack_chk_fail@plt>
L54:
  leave
  ret
```

assistant: ```c
int palette_feu() {
  unsigned char feu[256][3];
  int i, r, v, b;
  cng_clear_screen();
  for (i = 0; i < 256; i++) {
    feu[i][0] = 0;
    feu[i][1] = 0;
    feu[i][2] = 0;
  }
  for (i = 0; i < 64; i++) {
    feu[i][0] = 255;
    feu[i][1] = 255;
    feu[i][2] = 255 - (i * 4);
  }
  for (i = 0; i < 64; i++) {
    feu[i + 64][0] = 255;
    feu[i + 64][1] = 255 - (i * 2);
    feu[i + 64][2] = 0;
  }
  for (i = 0; i < 64; i++) {
    feu[i + 128][0] = 255;
    feu[i + 128][1] = 128 - (i * 2);
    feu[i + 128][2] = 0;
  }
  for (i = 0; i < 64; i++) {
    feu[i + 192][0] = 255 - (i * 4);
    feu[i + 192][1] = 0;
    feu[i + 192][2] = 0;
  }
  cng_palette(feu);
  cng_current_color_index(0);
  cng_clear_screen();
  for (i = 0; i < 256; i++) {
    cng_current_color_index(i);
    cng_line(0, i, 640, i);
  }
  cng_delay(2000);
  menu();
}
```