user: What is the c source code of the assembly code below?

```asm
<image_normalization>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x38(%rbp)
  mov    %rsi,-0x40(%rbp)
  mov    %rdx,-0x48(%rbp)
  mov    %rcx,-0x50(%rbp)
  mov    %r8d,-0x54(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x54(%rbp),%ecx
  mov    -0x38(%rbp),%rdx
  lea    -0x2c(%rbp),%rsi
  lea    -0x24(%rbp),%rax
  mov    %rax,%rdi
  call   <getminmax@plt>
  mov    -0x54(%rbp),%ecx
  mov    -0x40(%rbp),%rdx
  lea    -0x28(%rbp),%rsi
  lea    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <getminmax@plt>
  movss  -0x2c(%rbp),%xmm0
  movss  -0x28(%rbp),%xmm1
  comiss %xmm1,%xmm0
  jbe    L82
  movss  -0x2c(%rbp),%xmm0
  jmp    L46
L82:
  movss  -0x28(%rbp),%xmm0
L46:
  movss  %xmm0,-0x14(%rbp)
  movss  -0x24(%rbp),%xmm1
  movss  -0x20(%rbp),%xmm0
  comiss %xmm1,%xmm0
  jbe    L96
  movss  -0x24(%rbp),%xmm0
  jmp    L21
L96:
  movss  -0x20(%rbp),%xmm0
L21:
  movss  %xmm0,-0x10(%rbp)
  movss  -0x14(%rbp),%xmm0
  subss  -0x10(%rbp),%xmm0
  movss  %xmm0,-0xc(%rbp)
  movss  -0xc(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  comiss %xmm1,%xmm0
  jbe    L27
  movl   $0x0,-0x1c(%rbp)
  jmp    L94
L38:
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x10(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D13(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd -0xc(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x48(%rbp),%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  movss  (%rax),%xmm0
  subss  -0x10(%rbp),%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd %xmm0,%xmm1
  movsd  D13(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd -0xc(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  mov    -0x1c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x1c(%rbp)
L94:
  mov    -0x1c(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L38
  jmp    L81
L27:
  movl   $0x0,-0x18(%rbp)
  jmp    L35
L49:
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x48(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x40(%rbp),%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x50(%rbp),%rax
  add    %rcx,%rax
  movss  (%rdx),%xmm0
  movss  %xmm0,(%rax)
  addl   $0x1,-0x18(%rbp)
L35:
  mov    -0x18(%rbp),%eax
  cmp    -0x54(%rbp),%eax
  jl     L49
L81:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L75
  call   <__stack_chk_fail@plt>
L75:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: data_label: D13
type: f64

tool: D13: 255

assistant: ```c
void image_normalization(const float *I0, const float *I1, float *I0n, float *I1n, int size) {
  float max0, max1, min0, min1;
  getminmax(&min0, &max0, I0, size);
  getminmax(&min1, &max1, I1, size);
  const float max = (max0 > max1) ? max0 : max1;
  const float min = (min0 < min1) ? min0 : min1;
  const float den = max - min;
  if (den > 0)
    for (int i = 0; i < size; i++) {
      I0n[i] = 255.0 * (I0[i] - min) / den;
      I1n[i] = 255.0 * (I1[i] - min) / den;
    }
  else
    for (int i = 0; i < size; i++) {
      I0n[i] = I0[i];
      I1n[i] = I1[i];
    }
}
```