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

```asm
<vp8cx_last_vertical_band_4_5_scale_c>:
  endbr64
  mov    %edx,%ecx
  test   %ecx,%ecx
  je     L7
  mov    %rdi,%rax
  lea    (%rsi,%rsi,1),%edi
  lea    0x0(,%rsi,4),%r9d
  push   %r14
  lea    (%rdi,%rsi,1),%r8d
  mov    %esi,%esi
  lea    -0x1(%rcx),%r11d
  push   %r13
  lea    -0x1(%rsi),%rdx
  lea    -0x1(%r9),%r10
  push   %r12
  cmp    $0xe,%rdx
  lea    0x10(%rdi),%r12
  push   %rbp
  lea    0x10(%rsi),%rbp
  seta   %dl
  cmp    $0xe,%r11d
  push   %rbx
  lea    0x10(%r8),%rbx
  seta   %r13b
  and    %r13d,%edx
  lea    -0x1(%rdi),%r13
  cmp    $0xe,%r13
  seta   %r13b
  and    %r13d,%edx
  lea    -0x1(%r8),%r13
  cmp    $0xe,%r13
  seta   %r13b
  and    %r13d,%edx
  mov    %r9,%r13
  sub    %rsi,%r13
  sub    $0x1,%r13
  cmp    $0xe,%r13
  seta   %r13b
  and    %r13d,%edx
  cmp    $0xe,%r10
  seta   %r13b
  and    %r13d,%edx
  cmp    %r8,%r12
  setle  %r13b
  cmp    %rdi,%rbx
  setle  %r14b
  or     %r14d,%r13d
  and    %r13d,%edx
  mov    %r10,%r13
  sub    %rdi,%r13
  cmp    $0xe,%r13
  seta   %r13b
  and    %r13d,%edx
  cmp    %rbp,%rdi
  setge  %r13b
  cmp    %rsi,%r12
  setle  %r12b
  sub    %r8,%r10
  or     %r13d,%r12d
  and    %r12d,%edx
  cmp    $0xe,%r10
  seta   %r10b
  test   %r10b,%dl
  je     L25
  cmp    %rbp,%r8
  setge  %dl
  cmp    %rsi,%rbx
  setle  %r10b
  or     %r10b,%dl
  je     L25
  movdqa D1(%rip),%xmm11
  mov    %ecx,%r12d
  movdqa D35(%rip),%xmm10
  pxor   %xmm2,%xmm2
  shr    $0x4,%r12d
  lea    (%rax,%rsi,1),%rbp
  lea    (%rax,%rdi,1),%rbx
  xor    %edx,%edx
  movdqa D56(%rip),%xmm7
  lea    (%rax,%r8,1),%r10
  lea    (%rax,%r9,1),%r13
  movdqa D48(%rip),%xmm9
  shl    $0x4,%r12
  punpcklbw %xmm2,%xmm11
  punpcklbw %xmm2,%xmm10
  movdqa D58(%rip),%xmm5
  movdqa D32(%rip),%xmm4
  punpcklbw %xmm2,%xmm9
  punpcklbw %xmm2,%xmm7
  nopl   0x0(%rax)
L34:
  movdqu (%rax,%rdx,1),%xmm3
  movdqu 0x0(%rbp,%rdx,1),%xmm0
  movdqa %xmm10,%xmm8
  movdqa %xmm3,%xmm6
  movdqa %xmm0,%xmm1
  punpckhbw %xmm2,%xmm0
  punpcklbw %xmm2,%xmm1
  punpcklbw %xmm2,%xmm6
  punpckhbw %xmm2,%xmm3
  pmullw %xmm1,%xmm8
  pmullw %xmm11,%xmm6
  pmullw %xmm11,%xmm3
  pmullw %xmm7,%xmm1
  paddw  %xmm8,%xmm6
  movdqa %xmm0,%xmm8
  pmullw %xmm10,%xmm8
  pmullw %xmm7,%xmm0
  paddw  %xmm5,%xmm6
  psrlw  $0x8,%xmm6
  pand   %xmm4,%xmm6
  paddw  %xmm8,%xmm3
  paddw  %xmm5,%xmm3
  psrlw  $0x8,%xmm3
  pand   %xmm4,%xmm3
  packuswb %xmm3,%xmm6
  movups %xmm6,0x0(%rbp,%rdx,1)
  movdqu (%rbx,%rdx,1),%xmm3
  movdqu (%r10,%rdx,1),%xmm8
  movdqa %xmm3,%xmm6
  punpckhbw %xmm2,%xmm3
  punpcklbw %xmm2,%xmm6
  pmullw %xmm9,%xmm3
  pmullw %xmm9,%xmm6
  paddw  %xmm3,%xmm0
  paddw  %xmm6,%xmm1
  paddw  %xmm5,%xmm0
  paddw  %xmm5,%xmm1
  psrlw  $0x8,%xmm0
  psrlw  $0x8,%xmm1
  pand   %xmm4,%xmm0
  pand   %xmm4,%xmm1
  packuswb %xmm0,%xmm1
  movdqa %xmm8,%xmm0
  movups %xmm1,(%rbx,%rdx,1)
  movdqa %xmm8,%xmm1
  punpcklbw %xmm2,%xmm0
  punpckhbw %xmm2,%xmm1
  pmullw %xmm7,%xmm0
  pmullw %xmm7,%xmm1
  paddw  %xmm6,%xmm0
  paddw  %xmm3,%xmm1
  paddw  %xmm5,%xmm0
  paddw  %xmm5,%xmm1
  psrlw  $0x8,%xmm0
  psrlw  $0x8,%xmm1
  pand   %xmm4,%xmm0
  pand   %xmm4,%xmm1
  packuswb %xmm1,%xmm0
  movups %xmm0,(%r10,%rdx,1)
  movups %xmm8,0x0(%r13,%rdx,1)
  add    $0x10,%rdx
  cmp    %r12,%rdx
  jne    L34
  mov    %ecx,%edx
  and    $0xfffffff0,%edx
  mov    %edx,%r10d
  add    %r10,%rax
  cmp    %edx,%ecx
  je     L40
  sub    %edx,%r11d
  lea    0x1(%rax,%r11,1),%r11
L42:
  movzbl (%rax,%rsi,1),%ecx
  movzbl (%rax),%edx
  add    $0x1,%rax
  imul   $0xcd,%ecx,%r10d
  imul   $0x33,%edx,%edx
  imul   $0x66,%ecx,%ecx
  lea    0x80(%rdx,%r10,1),%edx
  mov    %dh,-0x1(%rax,%rsi,1)
  movzbl -0x1(%rax,%rdi,1),%edx
  movzbl -0x1(%rax,%r8,1),%r10d
  imul   $0x9a,%edx,%edx
  lea    0x80(%rdx,%rcx,1),%ecx
  mov    %ch,-0x1(%rax,%rdi,1)
  movzbl %r10b,%ecx
  imul   $0x66,%ecx,%ecx
  lea    0x80(%rdx,%rcx,1),%edx
  movzbl %dh,%ebx
  mov    %bl,-0x1(%rax,%r8,1)
  mov    %r10b,-0x1(%rax,%r9,1)
  cmp    %rax,%r11
  ja     L42
L40:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax)
L25:
  add    %rax,%rcx
  nopl   0x0(%rax,%rax,1)
L58:
  movzbl (%rax,%rsi,1),%r10d
  movzbl (%rax),%edx
  add    $0x1,%rax
  imul   $0xcd,%r10d,%r11d
  imul   $0x33,%edx,%edx
  imul   $0x66,%r10d,%r10d
  lea    0x80(%rdx,%r11,1),%edx
  mov    %dh,-0x1(%rax,%rsi,1)
  movzbl -0x1(%rax,%rdi,1),%edx
  movzbl -0x1(%rax,%r8,1),%r11d
  imul   $0x9a,%edx,%edx
  lea    0x80(%rdx,%r10,1),%ebx
  movzbl %r11b,%r10d
  imul   $0x66,%r10d,%r10d
  mov    %bh,-0x1(%rax,%rdi,1)
  lea    0x80(%rdx,%r10,1),%edx
  movzbl %dh,%ebx
  mov    %bl,-0x1(%rax,%r8,1)
  mov    %r11b,-0x1(%rax,%r9,1)
  cmp    %rax,%rcx
  jne    L58
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  cs nopw 0x0(%rax,%rax,1)
L7:
  ret
```

tool_calls: name: retrieve_data
arguments: label: D1
type: byte[16]
name: retrieve_data
arguments: label: D35
type: byte[16]
name: retrieve_data
arguments: label: D56
type: byte[16]
name: retrieve_data
arguments: label: D48
type: byte[16]
name: retrieve_data
arguments: label: D58
type: byte[16]
name: retrieve_data
arguments: label: D32
type: byte[16]

tool: {"D1": [0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33]}

tool: {"D35": [0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd,0xcd]}

tool: {"D56": [0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66]}

tool: {"D48": [0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a,0x9a]}

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

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

assistant: ```c
void vp8cx_last_vertical_band_4_5_scale_c(unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) {
  unsigned int i;
  unsigned int a, b, c, d;
  unsigned char *des = dest;
  for (i = 0; i < dest_width; ++i) {
    a = des[0];
    b = des[dest_pitch];
    des[dest_pitch] = (unsigned char)((a * 51 + 205 * b + 128) >> 8);
    c = des[dest_pitch * 2] * 154;
    d = des[dest_pitch * 3];
    des[dest_pitch * 2] = (unsigned char)((b * 102 + c + 128) >> 8);
    des[dest_pitch * 3] = (unsigned char)((c + 102 * d + 128) >> 8);
    des[dest_pitch * 4] = (unsigned char)d;
    des++;
  }
}
```