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

```asm
<gendifferentialtime>:
  endbr64
  mov    %rdi,%rcx
  mov    %rsi,%rdi
  movzbl 0xb(%rsi),%esi
  mov    %edx,%r8d
  movzbl 0xa(%rdi),%eax
  movzbl 0x8(%rdi),%r9d
  mov    %esi,%edx
  and    $0xf,%esi
  shr    $0x4,%dl
  lea    (%rsi,%rsi,4),%esi
  movzbl %dl,%edx
  imul   $0x64,%edx,%edx
  lea    (%rdx,%rsi,2),%esi
  mov    %eax,%edx
  and    $0xf,%eax
  shr    $0x4,%dl
  imul   $0x2710,%eax,%eax
  movzbl %dl,%edx
  add    %edx,%esi
  movzbl 0x9(%rdi),%edx
  mov    %edx,%edi
  and    $0xf,%edx
  shr    $0x4,%dil
  imul   $0x64,%edx,%edx
  movzbl %dil,%edi
  imul   $0x3e8,%edi,%edi
  add    %edi,%eax
  add    %edx,%eax
  mov    %r9d,%edx
  and    $0xf,%r9d
  shr    $0x4,%dl
  movzbl %dl,%edx
  lea    (%rdx,%rdx,4),%edx
  lea    (%rax,%rdx,2),%eax
  add    %r9d,%eax
  add    %r8d,%eax
  js     L29
  cmp    $0x1517f,%eax
  jg     L23
  mov    $0xcccccccd,%r9d
  mov    %esi,%edx
  imul   %r9,%rdx
  shr    $0x23,%rdx
  mov    %rdx,%r8
  lea    (%rdx,%rdx,4),%edx
  add    %edx,%edx
  sub    %edx,%esi
  mov    %r8d,%edx
  imul   %r9,%rdx
  shl    $0x4,%esi
  shr    $0x23,%rdx
  mov    %edx,%edi
  imul   %r9,%rdi
  shr    $0x23,%rdi
  lea    (%rdi,%rdi,4),%r9d
  mov    %edx,%edi
  add    %r9d,%r9d
  sub    %r9d,%edi
  lea    (%rdx,%rdx,4),%r9d
  mov    %r8d,%edx
  add    %r9d,%r9d
  shl    $0x4,%edi
  sub    %r9d,%edx
  add    %edx,%edi
L32:
  movslq %eax,%rdx
  mov    %eax,%r8d
  mov    %dil,0x3(%rcx)
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%r8d
  sar    $0x22,%rdx
  sub    %r8d,%edx
  movslq %edx,%r9
  mov    %edx,%r8d
  imul   $0x66666667,%r9,%r9
  sar    $0x1f,%r8d
  sar    $0x22,%r9
  sub    %r8d,%r9d
  mov    %edx,%r8d
  lea    (%rdx,%rdx,4),%edx
  lea    (%r9,%r9,4),%r10d
  add    %edx,%edx
  add    %r10d,%r10d
  sub    %edx,%eax
  movslq %r9d,%rdx
  sub    %r10d,%r8d
  imul   $0x66666667,%rdx,%rdx
  shl    $0x4,%r8d
  add    %r8d,%eax
  mov    %al,(%rcx)
  mov    %r9d,%eax
  sar    $0x22,%rdx
  sar    $0x1f,%eax
  sub    %eax,%edx
  movslq %edx,%rax
  mov    %edx,%r8d
  imul   $0x66666667,%rax,%rax
  sar    $0x1f,%r8d
  sar    $0x22,%rax
  sub    %r8d,%eax
  mov    %edx,%r8d
  lea    (%rax,%rax,4),%r10d
  add    %r10d,%r10d
  sub    %r10d,%r8d
  lea    (%rdx,%rdx,4),%r10d
  mov    %r9d,%edx
  add    %r10d,%r10d
  shl    $0x4,%r8d
  sub    %r10d,%edx
  add    %r8d,%edx
  mov    %eax,%r8d
  mov    %dl,0x1(%rcx)
  movslq %eax,%rdx
  sar    $0x1f,%r8d
  imul   $0x66666667,%rdx,%rdx
  sar    $0x22,%rdx
  sub    %r8d,%edx
  lea    (%rdx,%rdx,4),%edx
  add    %edx,%edx
  sub    %edx,%eax
  add    %eax,%esi
  mov    %sil,0x2(%rcx)
  ret
  nopw   0x0(%rax,%rax,1)
L23:
  lea    0x1(%rsi),%edi
  sub    $0x15180,%eax
  cmp    $0x3e7,%edi
  jg     L78
  mov    %edi,%edx
  mov    $0xcccccccd,%r9d
  imul   %r9,%rdx
  shr    $0x23,%rdx
  lea    (%rdx,%rdx,4),%esi
  mov    %edx,%r8d
  add    %esi,%esi
  imul   %r9,%r8
  sub    %esi,%edi
  mov    %edi,%esi
  shl    $0x4,%esi
  shr    $0x23,%r8
L24:
  mov    %r8d,%edi
  jmp    L48
  nopl   0x0(%rax,%rax,1)
L29:
  add    $0x15180,%eax
  lea    -0x1(%rsi),%edi
  test   %esi,%esi
  je     L22
  movslq %edi,%rdx
  mov    %edi,%esi
  mov    $0xcccccccd,%r9d
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%esi
  sar    $0x22,%rdx
  sub    %esi,%edx
  mov    %edx,%r8d
  lea    (%rdx,%rdx,4),%esi
  imul   %r9,%r8
  add    %esi,%esi
  sub    %esi,%edi
  mov    %edi,%esi
  shr    $0x23,%r8
  shl    $0x4,%esi
  mov    %r8d,%edi
  imul   %r9,%rdi
  shr    $0x23,%rdi
  lea    (%rdi,%rdi,4),%r9d
  mov    %r8d,%edi
  add    %r9d,%r9d
  sub    %r9d,%edi
L48:
  lea    (%r8,%r8,4),%r8d
  shl    $0x4,%edi
  add    %r8d,%r8d
  sub    %r8d,%edx
  add    %edx,%edi
  jmp    L32
  xchg   %ax,%ax
L78:
  sub    $0x3e7,%esi
  movslq %esi,%rdx
  mov    %esi,%edi
  imul   $0x66666667,%rdx,%rdx
  sar    $0x1f,%edi
  sar    $0x22,%rdx
  sub    %edi,%edx
  movslq %edx,%r8
  lea    (%rdx,%rdx,4),%edi
  imul   $0x66666667,%r8,%r8
  add    %edi,%edi
  sub    %edi,%esi
  mov    %edx,%edi
  sar    $0x1f,%edi
  shl    $0x4,%esi
  sar    $0x22,%r8
  sub    %edi,%r8d
  jmp    L24
L22:
  mov    $0xffffff99,%edi
  mov    $0xffffff90,%esi
  jmp    L32
```

assistant: ```c
void gendifferentialtime(unsigned char timebytes[4], const unsigned char *cur, int dt) {
  int newday;
  int newsec;
  newday = (cur[11] >> 4) * 100 + (cur[11] & 0x0F) * 10 + (cur[10] >> 4);
  newsec = (cur[10] & 0x0F) * 10000 + (cur[9] >> 4) * 1000 + (cur[9] & 0x0F) * 100 + (cur[8] >> 4) * 10 + (cur[8] & 0x0F);
  newsec += dt;
  if (newsec < 0) {
    newsec += 86400;
    --newday;
    if (newday < 0) {
      newday += 1000;
    }
  } else if (newsec >= 86400) {
    newsec -= 86400;
    ++newday;
    if (newday >= 1000) {
      newday -= 1000;
    }
  }
  timebytes[0] = newsec % 10;
  newsec /= 10;
  timebytes[0] += (newsec % 10) << 4;
  newsec /= 10;
  timebytes[1] = newsec % 10;
  newsec /= 10;
  timebytes[1] += (newsec % 10) << 4;
  newsec /= 10;
  timebytes[2] = newsec % 10;
  timebytes[2] += (newday % 10) << 4;
  newday /= 10;
  timebytes[3] = newday % 10;
  newday /= 10;
  timebytes[3] += (newday % 10) << 4;
}
```