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

```asm
<filtre_1>:
  endbr64
  push   %r15
  lea    -0x1(%rdx),%eax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rcx,-0x48(%rsp)
  mov    %eax,-0x20(%rsp)
  cmp    $0x1,%eax
  jle    L20
  lea    -0x1(%rsi),%r8d
  cmp    $0x1,%r8d
  jle    L20
  lea    (%rsi,%rsi,1),%ecx
  lea    -0x2(%rsi),%ebx
  movslq %esi,%r12
  mov    %rdi,%rbp
  movslq %ecx,%rcx
  lea    (%rdi,%r12,1),%rax
  mov    %rdi,%rdx
  mov    %ebx,-0x38(%rsp)
  add    %rdi,%rcx
  mov    %ebx,%edi
  and    $0xfffffff0,%ebx
  movl   $0x1,-0x3c(%rsp)
  shr    $0x4,%edi
  mov    %ebx,-0x1c(%rsp)
  mov    %r12,%r14
  xor    %r10d,%r10d
  sub    $0x1,%edi
  mov    %rbp,-0x18(%rsp)
  xor    %r15d,%r15d
  pxor   %xmm5,%xmm5
  add    $0x1,%rdi
  movl   $0x0,-0x40(%rsp)
  movdqa D30(%rip),%xmm9
  movdqa D0(%rip),%xmm14
  shl    $0x4,%rdi
  movdqa D89(%rip),%xmm13
  mov    %rdi,-0x28(%rsp)
  lea    0x1(%rbx),%edi
  movslq %edi,%rbx
  mov    %rbx,-0x10(%rsp)
  lea    -0x3(%rsi),%ebx
  mov    %ebx,-0x34(%rsp)
  nopl   0x0(%rax)
L112:
  mov    -0x48(%rsp),%rbx
  movslq -0x40(%rsp),%r9
  lea    0x1(%rax),%rbp
  lea    0x2(%rcx),%r11
  addl   $0x1,-0x3c(%rsp)
  lea    (%rbx,%r9,1),%rdi
  lea    0x1(%rdx),%rbx
  mov    %rdi,%rsi
  sub    %rbp,%rsi
  cmp    $0x10,%rsi
  mov    %rdi,%rsi
  seta   %bpl
  sub    %r11,%rsi
  cmp    $0xf,%rsi
  seta   %sil
  and    %ebp,%esi
  cmpl   $0xe,-0x34(%rsp)
  seta   %bpl
  test   %bpl,%sil
  je     L108
  mov    %rdi,%rsi
  sub    %rbx,%rsi
  cmp    $0xf,%rsi
  jbe    L108
  mov    -0x28(%rsp),%r13
  lea    0x2(%rax),%rbp
  lea    0x1(%rcx),%r9
  xor    %esi,%esi
  pxor   %xmm11,%xmm11
  pxor   %xmm8,%xmm8
  nopl   0x0(%rax,%rax,1)
L106:
  movdqu (%rdx,%rsi,1),%xmm3
  movdqu (%rbx,%rsi,1),%xmm7
  movdqa %xmm11,%xmm1
  movdqa %xmm8,%xmm12
  movdqu (%rax,%rsi,1),%xmm6
  movdqu 0x0(%rbp,%rsi,1),%xmm4
  movdqa %xmm3,%xmm10
  movdqu (%r9,%rsi,1),%xmm2
  movdqu (%r11,%rsi,1),%xmm0
  punpckhbw %xmm5,%xmm3
  punpcklbw %xmm5,%xmm10
  psubw  %xmm10,%xmm1
  movdqa %xmm7,%xmm10
  punpckhbw %xmm5,%xmm7
  punpcklbw %xmm5,%xmm10
  psubw  %xmm10,%xmm1
  movdqa %xmm6,%xmm10
  punpckhbw %xmm5,%xmm6
  punpcklbw %xmm5,%xmm10
  psubw  %xmm10,%xmm1
  movdqa %xmm4,%xmm10
  punpckhbw %xmm5,%xmm4
  punpcklbw %xmm5,%xmm10
  paddw  %xmm10,%xmm1
  movdqa %xmm2,%xmm10
  punpckhbw %xmm5,%xmm2
  punpcklbw %xmm5,%xmm10
  paddw  %xmm10,%xmm1
  movdqa %xmm0,%xmm10
  punpckhbw %xmm5,%xmm0
  punpcklbw %xmm5,%xmm10
  paddw  %xmm10,%xmm1
  movdqa %xmm3,%xmm10
  movdqa %xmm11,%xmm3
  psubw  %xmm10,%xmm3
  paddw  D82(%rip),%xmm1
  psubw  %xmm7,%xmm3
  psubw  %xmm6,%xmm3
  movdqa %xmm1,%xmm7
  paddw  %xmm4,%xmm3
  movdqa %xmm11,%xmm4
  paddw  %xmm2,%xmm3
  movdqa %xmm11,%xmm2
  paddw  %xmm0,%xmm3
  paddw  D82(%rip),%xmm3
  pcmpgtw %xmm1,%xmm2
  movdqa %xmm1,%xmm0
  pand   %xmm9,%xmm1
  pcmpgtw %xmm3,%xmm4
  movdqa %xmm3,%xmm6
  punpcklwd %xmm2,%xmm0
  punpckhwd %xmm2,%xmm7
  movdqa %xmm3,%xmm2
  pand   %xmm9,%xmm3
  pcmpgtd %xmm7,%xmm12
  punpcklwd %xmm4,%xmm2
  punpckhwd %xmm4,%xmm6
  packuswb %xmm3,%xmm1
  movdqa %xmm0,%xmm4
  movdqa %xmm8,%xmm3
  movdqa %xmm2,%xmm10
  pcmpgtd %xmm14,%xmm4
  pcmpgtd %xmm0,%xmm3
  psubd  %xmm13,%xmm0
  pcmpgtd %xmm14,%xmm10
  pcmpgtd D8(%rip),%xmm0
  movdqa %xmm6,%xmm15
  pcmpgtd %xmm14,%xmm15
  pandn  %xmm4,%xmm3
  movdqa %xmm7,%xmm4
  psubd  %xmm13,%xmm7
  pcmpgtd %xmm14,%xmm4
  pcmpgtd D8(%rip),%xmm7
  pcmpeqd %xmm8,%xmm0
  pandn  %xmm4,%xmm12
  pcmpeqd %xmm8,%xmm7
  movdqa %xmm8,%xmm4
  pcmpgtd %xmm2,%xmm4
  psubd  %xmm13,%xmm2
  pcmpgtd D8(%rip),%xmm2
  pandn  %xmm10,%xmm4
  movdqa %xmm8,%xmm10
  pcmpgtd %xmm6,%xmm10
  pcmpeqd %xmm8,%xmm2
  psubd  %xmm13,%xmm6
  pcmpgtd D8(%rip),%xmm6
  pandn  %xmm15,%xmm10
  movdqa %xmm0,%xmm15
  punpcklwd %xmm7,%xmm0
  pcmpeqd %xmm8,%xmm6
  punpckhwd %xmm7,%xmm15
  movdqa %xmm0,%xmm7
  punpckhwd %xmm15,%xmm7
  punpcklwd %xmm15,%xmm0
  punpcklwd %xmm7,%xmm0
  movdqa %xmm2,%xmm7
  punpcklwd %xmm6,%xmm2
  punpckhwd %xmm6,%xmm7
  pand   %xmm9,%xmm0
  movdqa %xmm2,%xmm6
  punpcklwd %xmm7,%xmm2
  punpckhwd %xmm7,%xmm6
  punpcklwd %xmm6,%xmm2
  pand   %xmm9,%xmm2
  packuswb %xmm2,%xmm0
  movdqa %xmm3,%xmm2
  punpcklwd %xmm12,%xmm3
  punpckhwd %xmm12,%xmm2
  movdqa %xmm3,%xmm6
  pand   %xmm0,%xmm1
  punpckhwd %xmm2,%xmm6
  punpcklwd %xmm2,%xmm3
  movdqa %xmm4,%xmm2
  punpcklwd %xmm10,%xmm4
  punpcklwd %xmm6,%xmm3
  punpckhwd %xmm10,%xmm2
  movdqa %xmm4,%xmm6
  punpcklwd %xmm2,%xmm4
  pand   %xmm9,%xmm3
  punpckhwd %xmm2,%xmm6
  punpcklwd %xmm6,%xmm4
  pand   %xmm9,%xmm4
  packuswb %xmm4,%xmm3
  pandn  %xmm3,%xmm0
  por    %xmm1,%xmm0
  movups %xmm0,(%rdi,%rsi,1)
  add    $0x10,%rsi
  cmp    %rsi,%r13
  jne    L106
  mov    -0x1c(%rsp),%esi
  cmp    %esi,-0x38(%rsp)
  je     L50
  mov    -0x10(%rsp),%rsi
  jmp    L58
  nopl   0x0(%rax)
L111:
  mov    $0xffffffff,%r9d
  mov    %r9b,-0x1(%rdi,%rsi,1)
  add    $0x1,%rsi
  cmp    %esi,%r8d
  jle    L50
L58:
  movzbl -0x1(%rdx,%rsi,1),%r9d
  movzbl (%rdx,%rsi,1),%r11d
  neg    %r9d
  sub    %r11d,%r9d
  movzbl -0x1(%rax,%rsi,1),%r11d
  sub    %r11d,%r9d
  movzbl 0x1(%rax,%rsi,1),%r11d
  add    %r11d,%r9d
  movzbl (%rcx,%rsi,1),%r11d
  add    %r11d,%r9d
  movzbl 0x1(%rcx,%rsi,1),%r11d
  lea    0x80(%r9,%r11,1),%r9d
  cmp    $0xff,%r9d
  jg     L111
  test   %r9d,%r9d
  cmovs  %r15d,%r9d
  mov    %r9b,-0x1(%rdi,%rsi,1)
  add    $0x1,%rsi
  cmp    %esi,%r8d
  jg     L58
L50:
  lea    (%r14,%r12,1),%rbp
L48:
  mov    -0x38(%rsp),%edi
  add    %r12,%rcx
  add    %edi,-0x40(%rsp)
  add    %r12,%rax
  mov    -0x3c(%rsp),%edi
  add    %r12,%rdx
  add    %r12,%r10
  mov    %rbp,%r14
  cmp    %edi,-0x20(%rsp)
  jne    L112
L20:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L108:
  lea    (%r14,%r12,1),%rbp
  mov    -0x18(%rsp),%r13
  mov    %r14,%rbx
  mov    -0x34(%rsp),%edi
  mov    %rbp,%r11
  sub    %r10,%rbx
  mov    %rax,-0x30(%rsp)
  sub    %r10,%r9
  sub    %r10,%r11
  mov    %r10,%rsi
  add    %r13,%rbx
  add    -0x48(%rsp),%r9
  add    %r13,%r11
  lea    0x1(%r10,%rdi,1),%r14
  mov    %r13,%rax
L61:
  movzbl (%rax,%rsi,1),%edi
  movzbl 0x1(%rax,%rsi,1),%r13d
  neg    %edi
  sub    %r13d,%edi
  movzbl (%rbx,%rsi,1),%r13d
  sub    %r13d,%edi
  movzbl 0x2(%rbx,%rsi,1),%r13d
  add    %edi,%r13d
  movzbl 0x1(%r11,%rsi,1),%edi
  add    %r13d,%edi
  movzbl 0x2(%r11,%rsi,1),%r13d
  lea    0x80(%rdi,%r13,1),%edi
  mov    $0xffffffff,%r13d
  cmp    $0xff,%edi
  jg     L103
  test   %edi,%edi
  mov    %edi,%r13d
  cmovs  %r15d,%r13d
L103:
  mov    %r13b,(%r9,%rsi,1)
  add    $0x1,%rsi
  cmp    %rsi,%r14
  jne    L61
  mov    -0x30(%rsp),%rax
  jmp    L48
```

tool_calls: name: unpack_data
arguments: tag: D30
type: byte[16]
name: unpack_data
arguments: tag: D0
type: byte[16]
name: unpack_data
arguments: tag: D89
type: byte[16]
name: unpack_data
arguments: tag: D82
type: byte[16]
name: unpack_data
arguments: tag: D8
type: byte[16]

tool: {"D30": [0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00]}

tool: {"D0": [0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0xff,0x00,0x00,0x00]}

tool: {"D89": [0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x80]}

tool: {"D82": [0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00]}

tool: {"D8": [0xff,0x00,0x00,0x80,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0x80,0xff,0x00,0x00,0x80]}

assistant: ```c
void filtre_1(char *data, int largeur, int hauteur, char *data_sortie) {
  int cpt_out, tmp_i;
  int x, y;
  unsigned char p0, p1, p2, p3, p4, p5, p6, p7, p8;
  int coef[9];
  int alpha, beta;
  coef[0] = -1;
  coef[1] = -1;
  coef[2] = 0;
  coef[3] = -1;
  coef[4] = 0;
  coef[5] = +1;
  coef[6] = 0;
  coef[7] = +1;
  coef[8] = +1;
  alpha = 1;
  beta = 128;
  cpt_out = 0;
  for (y = 1; y < hauteur - 1; y++) {
    for (x = 1; x < largeur - 1; x++) {
      p0 = data[(y - 1) * largeur + x - 1];
      p1 = data[(y - 1) * largeur + x];
      p2 = data[(y - 1) * largeur + x + 1];
      p3 = data[y * largeur + x - 1];
      p4 = data[y * largeur + x];
      p5 = data[y * largeur + x + 1];
      p6 = data[(y + 1) * largeur + x - 1];
      p7 = data[(y + 1) * largeur + x];
      p8 = data[(y + 1) * largeur + x + 1];
      tmp_i = coef[0] * p0 + coef[1] * p1 + coef[2] * p2 + coef[3] * p3 + coef[4] * p4 + coef[5] * p5 + coef[6] * p6 + coef[7] * p7 + coef[8] * p8;
      tmp_i = alpha * (tmp_i + beta);
      if (tmp_i > 255) {
        data_sortie[cpt_out] = 255;
      } else if (tmp_i < 0) {
        data_sortie[cpt_out] = 0;
      } else {
        data_sortie[cpt_out] = (unsigned char)tmp_i;
      }
      cpt_out++;
    }
  }
}
```