user: 请从给定的汇编指令推导出C源代码:

```asm
<adjmin>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x20,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,%eax
  mov    %edx,-0x10(%rbp)
  mov    %ecx,-0x14(%rbp)
  mov    %al,-0xc(%rbp)
  cmpl   $0x0,-0x10(%rbp)
  jns    L15
  mov    $0x0,%eax
  jmp    L77
L15:
  movsbl -0xc(%rbp),%eax
  cmp    $0x2b,%eax
  je     L32
  cmp    $0x2d,%eax
  je     L59
  jmp    L213
L32:
  cmpl   $0x0,-0x10(%rbp)
  je     L221
  mov    -0x8(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    %edx,%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x2b,%esi
  mov    %rax,%rdi
  call   <adjhour@plt>
  test   %eax,%eax
  jne    L7
  mov    $0x0,%eax
  jmp    L77
L7:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x3c,%edx,%edx
  sub    %edx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x10(%rbp),%eax
  add    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0x3b,%eax
  jle    L221
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  lea    -0x3c(%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L221
L59:
  cmpl   $0x0,-0x10(%rbp)
  je     L103
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x5,%edx
  sar    $0x1f,%eax
  sub    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x2d,%esi
  mov    %rax,%rdi
  call   <adjhour@plt>
  test   %eax,%eax
  jne    L182
  mov    $0x0,%eax
  jmp    L77
L182:
  mov    -0x10(%rbp),%eax
  movslq %eax,%rdx
  imul   $0xffffffff88888889,%rdx,%rdx
  shr    $0x20,%rdx
  add    %eax,%edx
  sar    $0x5,%edx
  mov    %eax,%ecx
  sar    $0x1f,%ecx
  sub    %ecx,%edx
  imul   $0x3c,%edx,%edx
  sub    %edx,%eax
  mov    %eax,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x10(%rbp)
  jle    L52
  mov    -0x8(%rbp),%rax
  mov    $0x0,%ecx
  mov    $0x1,%edx
  mov    $0x2d,%esi
  mov    %rax,%rdi
  call   <adjhour@plt>
  test   %eax,%eax
  jne    L191
  mov    $0x0,%eax
  jmp    L77
L191:
  subl   $0x3c,-0x10(%rbp)
L52:
  mov    -0x8(%rbp),%rax
  mov    (%rax),%eax
  sub    -0x10(%rbp),%eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,(%rax)
  jmp    L103
L213:
  cmpl   $0x3b,-0x10(%rbp)
  jle    L236
  mov    $0x0,%eax
  jmp    L77
L236:
  mov    -0x8(%rbp),%rax
  mov    -0x10(%rbp),%edx
  mov    %edx,(%rax)
  jmp    L220
L221:
  nop
  jmp    L220
L103:
  nop
L220:
  cmpl   $0x0,-0x14(%rbp)
  je     L85
  movsbl -0xc(%rbp),%edx
  mov    -0x8(%rbp),%rax
  mov    %edx,%esi
  mov    %rax,%rdi
  call   <domktime@plt>
  cmp    $0xffffffff,%eax
  je     L193
L85:
  mov    $0x1,%eax
  jmp    L77
L193:
  mov    $0x0,%eax
L77:
  leave
  ret
```

assistant: ```c
int adjmin(struct tm *t, char type, int val, int mk) {
  if (val < 0)
    return 0;
  switch (type) {
  case '+':
    if (val) {
      if (!adjhour(t, '+', (t->tm_min + val) / 60, 0))
        return 0;
      val %= 60;
      t->tm_min += val;
      if (t->tm_min > 59)
        t->tm_min -= 60;
    }
    break;
  case '-':
    if (val) {
      if (!adjhour(t, '-', val / 60, 0))
        return 0;
      val %= 60;
      if (val > t->tm_min) {
        if (!adjhour(t, '-', 1, 0))
          return 0;
        val -= 60;
      }
      t->tm_min -= val;
    }
    break;
  default:
    if (val > 59)
      return 0;
    t->tm_min = val;
  }
  return !mk || domktime(t, type) != -1;
}
```