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

```asm
<getmet>:
  endbr64
  andpd  D63(%rip),%xmm0
  movsd  D68(%rip),%xmm1
  comisd %xmm0,%xmm1
  jb     L3
  movdqa D20(%rip),%xmm0
  xor    %edx,%edx
  movabs $0x400628f5c28f5c29,%rax
  mov    %rax,0x20(%rdi)
  movups %xmm0,(%rdi)
  movdqa D64(%rip),%xmm0
  mov    %rdx,0x28(%rdi)
  movups %xmm0,0x10(%rdi)
  pxor   %xmm0,%xmm0
  movups %xmm0,0x30(%rdi)
  movups %xmm0,0x40(%rdi)
  ret
  nopw   0x0(%rax,%rax,1)
L3:
  comisd D2(%rip),%xmm0
  jb     L10
  movdqa D7(%rip),%xmm0
  movups %xmm0,(%rdi)
  movdqa D77(%rip),%xmm0
  movups %xmm0,0x10(%rdi)
  movdqa D26(%rip),%xmm0
  movups %xmm0,0x20(%rdi)
  movdqa D71(%rip),%xmm0
  movups %xmm0,0x30(%rdi)
  movdqa D35(%rip),%xmm0
  movups %xmm0,0x40(%rdi)
  ret
  xchg   %ax,%ax
L10:
  movapd %xmm0,%xmm2
  lea    D75(%rip),%rcx
  divsd  %xmm1,%xmm2
  cvttsd2si %xmm2,%eax
  pxor   %xmm2,%xmm2
  cvtsi2sd %eax,%xmm2
  cltq
  lea    (%rax,%rax,4),%rax
  shl    $0x4,%rax
  lea    -0x50(%rcx,%rax,1),%rdx
  add    %rcx,%rax
  mulsd  %xmm1,%xmm2
  movapd (%rax),%xmm3
  subsd  %xmm2,%xmm0
  movapd (%rdx),%xmm2
  divsd  %xmm1,%xmm0
  movsd  D11(%rip),%xmm1
  subsd  %xmm0,%xmm1
  unpcklpd %xmm0,%xmm0
  mulpd  %xmm0,%xmm3
  unpcklpd %xmm1,%xmm1
  mulpd  %xmm1,%xmm2
  addpd  %xmm3,%xmm2
  movups %xmm2,(%rdi)
  movapd 0x10(%rax),%xmm2
  movapd 0x10(%rdx),%xmm3
  mulpd  %xmm0,%xmm2
  mulpd  %xmm1,%xmm3
  addpd  %xmm3,%xmm2
  movups %xmm2,0x10(%rdi)
  movapd 0x20(%rdx),%xmm2
  movapd 0x20(%rax),%xmm3
  mulpd  %xmm1,%xmm2
  mulpd  %xmm0,%xmm3
  addpd  %xmm3,%xmm2
  movups %xmm2,0x20(%rdi)
  movapd 0x30(%rdx),%xmm2
  movapd 0x30(%rax),%xmm3
  mulpd  %xmm1,%xmm2
  mulpd  %xmm0,%xmm3
  addpd  %xmm3,%xmm2
  movups %xmm2,0x30(%rdi)
  mulpd  0x40(%rdx),%xmm1
  mulpd  0x40(%rax),%xmm0
  addpd  %xmm0,%xmm1
  movups %xmm1,0x40(%rdi)
  ret
```

tool_calls: name: read_data
arguments: data_tag: D63
data_type: qword[2]
name: read_data
arguments: data_tag: D68
data_type: f64
name: read_data
arguments: data_tag: D20
data_type: f64[2]
name: read_data
arguments: data_tag: D64
data_type: f64[2]
name: read_data
arguments: data_tag: D2
data_type: f64[2]
name: read_data
arguments: data_tag: D7
data_type: f64[2]
name: read_data
arguments: data_tag: D77
data_type: f64[2]
name: read_data
arguments: data_tag: D26
data_type: f64[2]
name: read_data
arguments: data_tag: D71
data_type: f64[2]
name: read_data
arguments: data_tag: D35
data_type: byte[16]
name: read_data
arguments: data_tag: D75
data_type: f64
name: read_data
arguments: data_tag: D11
data_type: f64

tool: {"D63": [0x7fffffffffffffff,0x0000000000000000]}

tool: D68: 15

tool: {"D20": [1013.25,299.65]}

tool: {"D64": [26.31,0.0063]}

tool: {"D2": [75.0,1.0]}

tool: {"D7": [1013.0,263.65]}

tool: {"D77": [4.11,0.00453]}

tool: {"D26": [1.55,-0.5]}

tool: {"D71": [14.5,3.39]}

tool: {"D35": [0xa9,0x4d,0x9c,0xdc,0xef,0x50,0x44,0x3f,0x33,0x33,0x33,0x33,0x33,0x33,0xd3,0x3f]}

tool: D75: 1013.25

tool: D11: 1

assistant: ```c
void getmet(double lat, double *met) {
  static const double metprm[][10] = {{1013.25, 299.65, 26.31, 6.30E-3, 2.77, 0.00, 0.00, 0.00, 0.00E-3, 0.00}, {1017.25, 294.15, 21.79, 6.05E-3, 3.15, -3.75, 7.00, 8.85, 0.25E-3, 0.33}, {1015.75, 283.15, 11.66, 5.58E-3, 2.57, -2.25, 11.00, 7.24, 0.32E-3, 0.46}, {1011.75, 272.15, 6.78, 5.39E-3, 1.81, -1.75, 15.00, 5.36, 0.81E-3, 0.74}, {1013.00, 263.65, 4.11, 4.53E-3, 1.55, -0.50, 14.50, 3.39, 0.62E-3, 0.30}};
  int i, j;
  double a;
  lat = fabs(lat);
  if (lat <= 15.0)
    for (i = 0; i < 10; i++)
      met[i] = metprm[0][i];
  else if (lat >= 75.0)
    for (i = 0; i < 10; i++)
      met[i] = metprm[4][i];
  else {
    j = (int)(lat / 15.0);
    a = (lat - j * 15.0) / 15.0;
    for (i = 0; i < 10; i++)
      met[i] = (1.0 - a) * metprm[j - 1][i] + a * metprm[j][i];
  }
}
```