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

```asm
<sentrycrashdl_convertBinaryImageUUID>:
  endbr64
  sub    $0x28,%rsp
  mov    %rdi,%rax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x18(%rsp)
  xor    %edx,%edx
  movabs $0x3736353433323130,%rdx
  movabs $0x4645444342413938,%rcx
  mov    %rdx,(%rsp)
  mov    %rcx,0x8(%rsp)
  mov    $0x0,%edx
L27:
  movzbl (%rax,%rdx,1),%ecx
  shr    $0x4,%cl
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,(%rsi,%rdx,2)
  movzbl (%rax,%rdx,1),%ecx
  and    $0xf,%ecx
  movzbl (%rsp,%rcx,1),%ecx
  mov    %cl,0x1(%rsi,%rdx,2)
  add    $0x1,%rdx
  cmp    $0x4,%rdx
  jne    L27
  movb   $0x2d,0x8(%rsi)
  movzbl 0x4(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x9(%rsi)
  movzbl 0x4(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0xa(%rsi)
  movzbl 0x5(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0xb(%rsi)
  movzbl 0x5(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0xc(%rsi)
  movb   $0x2d,0xd(%rsi)
  movzbl 0x6(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0xe(%rsi)
  movzbl 0x6(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0xf(%rsi)
  movzbl 0x7(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x10(%rsi)
  movzbl 0x7(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x11(%rsi)
  movb   $0x2d,0x12(%rsi)
  movzbl 0x8(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x13(%rsi)
  movzbl 0x8(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x14(%rsi)
  movzbl 0x9(%rax),%edx
  shr    $0x4,%dl
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x15(%rsi)
  movzbl 0x9(%rax),%edx
  and    $0xf,%edx
  movzbl (%rsp,%rdx,1),%edx
  mov    %dl,0x16(%rsi)
  lea    0xa(%rax),%rdx
  lea    0x18(%rsi),%rdi
  movb   $0x2d,0x17(%rsi)
  lea    0x10(%rax),%rcx
L18:
  movzbl (%rdx),%eax
  shr    $0x4,%al
  and    $0xf,%eax
  movzbl (%rsp,%rax,1),%eax
  mov    %al,(%rdi)
  add    $0x1,%rdx
  add    $0x2,%rdi
  movzbl -0x1(%rdx),%eax
  and    $0xf,%eax
  movzbl (%rsp,%rax,1),%eax
  mov    %al,-0x1(%rdi)
  cmp    %rcx,%rdx
  jne    L18
  movb   $0x0,0x24(%rsi)
  mov    0x18(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L20
  add    $0x28,%rsp
  ret
L20:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void sentrycrashdl_convertBinaryImageUUID(const unsigned char *src, char *dst) {
  const char g_hexNybbles[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
  for (int i = 0; i < 4; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 2; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '-';
  for (int i = 0; i < 6; i++) {
    *dst++ = g_hexNybbles[(*src >> 4) & 15];
    *dst++ = g_hexNybbles[(*src++) & 15];
  }
  *dst++ = '\0';
}
```