user: 请将以下的汇编代码转换成C语言代码:

```asm
<juliam_KP>:
  endbr64
  push   %r15
  mov    $0x4,%edx
  push   %r14
  xor    %r14d,%r14d
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  cmpb   $0x2e,(%rdi)
  lea    0x13(%rsp),%r12
  sete   %r14b
  lea    0x2(%rdi,%r14,1),%rsi
  mov    %r12,%rdi
  call   <strncpy@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  movb   $0x0,0x17(%rsp)
  call   <atol@plt>
  lea    0x6(%r13,%r14,1),%rsi
  mov    $0x2,%edx
  mov    %r12,%rdi
  movslq %eax,%rbx
  call   <strncpy@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  movb   $0x0,0x15(%rsp)
  call   <atol@plt>
  lea    0x8(%r13,%r14,1),%rsi
  mov    $0x2,%edx
  mov    %r12,%rdi
  mov    %eax,%r15d
  call   <strncpy@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  movb   $0x0,0x15(%rsp)
  call   <atol@plt>
  lea    0xa(%r13,%r14,1),%rsi
  mov    $0x2,%edx
  mov    %r12,%rdi
  movslq %eax,%rbp
  call   <strncpy@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  movb   $0x0,0x15(%rsp)
  call   <atol@plt>
  lea    0xc(%r13,%r14,1),%rsi
  mov    $0x2,%edx
  mov    %r12,%rdi
  movslq %eax,%r8
  mov    %r8,0x8(%rsp)
  call   <strncpy@plt>
  mov    %r12,%rdi
  xor    %eax,%eax
  movb   $0x0,0x15(%rsp)
  call   <atol@plt>
  test   %rbp,%rbp
  mov    $0x1,%edx
  mov    %rbx,%r10
  movslq %eax,%rsi
  mov    $0x1,%eax
  lea    0x3(%rbx),%r9
  mov    0x8(%rsp),%r8
  cmovle %rax,%rbp
  lea    (%rbx,%rbx,8),%rax
  lea    (%rbx,%rax,8),%rax
  lea    (%rax,%rax,4),%rdi
  movslq %r15d,%rax
  test   %rax,%rax
  cmovle %rdx,%rax
  lea    D1(%rip),%rdx
  movswq %ax,%rax
  add    (%rdx,%rax,8),%rbp
  test   %rbx,%rbx
  mov    %rbx,%rax
  movabs $0xa3d70a3d70a3d70b,%rdx
  cmovns %rbx,%r9
  imul   %rdx
  mov    %rbx,%rax
  sar    $0x3f,%r10
  sar    $0x2,%r9
  lea    (%rdx,%rbx,1),%rcx
  movabs $0x20c49ba5e353f7cf,%rdx
  imul   %rdx
  sar    $0x6,%rcx
  mov    %r9,%rax
  shl    $0x2,%r9
  sub    %r10,%rcx
  sub    %rcx,%rax
  sar    $0x7,%rdx
  sub    %r10,%rdx
  add    %rdx,%rax
  cmp    %rbx,%r9
  je     L45
L19:
  add    %rbp,%rdi
  add    %rax,%rdi
  lea    (%rdi,%rdi,2),%rax
  lea    (%r8,%rax,8),%rdx
  mov    %rdx,%rax
  shl    $0x4,%rax
  sub    %rdx,%rax
  lea    (%rsi,%rax,4),%rax
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L49
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L45:
  lea    (%rcx,%rcx,4),%rcx
  lea    (%rcx,%rcx,4),%rcx
  shl    $0x2,%rcx
  cmp    %r9,%rcx
  je     L29
L37:
  cmp    $0x2,%r15d
  jg     L19
  sub    $0x1,%rax
  jmp    L19
  nopl   (%rax)
L29:
  imul   $0x3e8,%rdx,%rdx
  cmp    %rcx,%rdx
  jne    L19
  jmp    L37
L49:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: data_tag: D1
type_guessed: string

tool: 

assistant: ```c
long int juliam_KP(filename)
char *filename;
{
  static long kmo[13] = {0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
  long leap = 1;
  long ky;
  long km;
  long kd;
  long temp;
  long l = 0;
  long kl;
  long ky4;
  long ky1;
  long ky0;
  long khour;
  long kmin;
  char temp_str[5];
  int pos;
  if (filename[0] == '.') {
    pos = 1;
  } else {
    pos = 0;
  }
  strncpy(temp_str, filename + 2 + pos, 4);
  temp_str[4] = 0;
  ky = atol(temp_str);
  strncpy(temp_str, filename + 6 + pos, 2);
  temp_str[2] = 0;
  km = atol(temp_str);
  strncpy(temp_str, filename + 8 + pos, 2);
  temp_str[2] = 0;
  kd = atol(temp_str);
  strncpy(temp_str, filename + 10 + pos, 2);
  temp_str[2] = 0;
  khour = atol(temp_str);
  strncpy(temp_str, filename + 12 + pos, 2);
  temp_str[2] = 0;
  kmin = atol(temp_str);
  if (km <= 0)
    km = 1;
  if (kd <= 0)
    kd = 1;
  temp = 365 * ky;
  kd = kmo[(short)km] + kd;
  ky4 = ky / 4;
  ky1 = ky / 100;
  ky0 = ky / 1000;
  kl = leap * (ky4 - ky1 + ky0);
  if (((ky4 * 4) == ky) && (((ky1 * 100) != ky) || ((ky0 * 1000) == ky)))
    l = leap;
  if ((l != 0) && (km < 3))
    kl = kl - leap;
  temp = temp + kd + kl;
  temp = temp * 24 + khour;
  temp = temp * 60 + kmin;
  return (temp);
}
```