user: 这段汇编代码用C语言表示是什么样的？

```asm
<get_input_to>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %esi,-0x28(%rbp)
  mov    %edx,-0x2c(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x18(%rbp),%r8
  lea    -0x1c(%rbp),%rdi
  lea    -0x20(%rbp),%rcx
  mov    -0x2c(%rbp),%edx
  mov    -0x28(%rbp),%esi
  mov    -0x24(%rbp),%eax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <get_span@plt>
  mov    -0x24(%rbp),%eax
  mov    %eax,%edi
  call   <get_depth@plt>
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  cmp    %eax,-0x28(%rbp)
  ja     L37
  cmpl   $0x0,-0x28(%rbp)
  jne    L42
  movl   $0x0,-0x14(%rbp)
  mov    -0x24(%rbp),%eax
  mov    %eax,-0x10(%rbp)
  movl   $0x1,-0xc(%rbp)
  jmp    L44
L42:
  mov    -0x28(%rbp),%eax
  lea    -0x1(%rax),%esi
  lea    -0xc(%rbp),%r8
  lea    -0x10(%rbp),%rdi
  lea    -0x14(%rbp),%rcx
  mov    -0x2c(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %r8,%r9
  mov    %rdi,%r8
  mov    %eax,%edi
  call   <get_span@plt>
L44:
  mov    -0xc(%rbp),%eax
  test   %eax,%eax
  je     L145
  mov    -0x2c(%rbp),%eax
  jmp    L99
L145:
  mov    -0x20(%rbp),%edx
  mov    -0x14(%rbp),%eax
  cmp    %eax,%edx
  jne    L139
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  jmp    L99
L139:
  mov    -0x14(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  and    $0xfffffffe,%eax
  lea    0x1(%rax),%edx
  mov    -0x10(%rbp),%eax
  cmp    %eax,%edx
  jb     L21
  mov    -0x2c(%rbp),%eax
  jmp    L99
L21:
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  lea    (%rax,%rax,1),%edx
  mov    -0x14(%rbp),%eax
  add    %edx,%eax
  add    $0x1,%eax
  jmp    L99
L37:
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  je     L43
  mov    -0x2c(%rbp),%eax
  jmp    L99
L43:
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  and    $0xfffffffe,%eax
  lea    0x1(%rax),%edx
  mov    -0x1c(%rbp),%eax
  cmp    %eax,%edx
  jb     L87
  mov    -0x2c(%rbp),%eax
  jmp    L99
L87:
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  and    $0x1,%eax
  test   %eax,%eax
  jne    L101
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  add    %edx,%eax
  jmp    L99
L101:
  mov    -0x1c(%rbp),%eax
  shr    %eax
  mov    %eax,%edx
  mov    -0x20(%rbp),%eax
  lea    (%rdx,%rax,1),%ecx
  mov    -0x20(%rbp),%edx
  mov    -0x2c(%rbp),%eax
  sub    %edx,%eax
  sub    $0x1,%eax
  shr    %eax
  add    %ecx,%eax
L99:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L150
  call   <__stack_chk_fail@plt>
L150:
  leave
  ret
```

assistant: ```c
unsigned get_input_to(unsigned inputs, unsigned x, unsigned y) {
  unsigned start, len, is_pipeline;
  get_span(inputs, x, y, &start, &len, &is_pipeline);
  if (x <= get_depth(inputs) / 2) {
    unsigned prev_start, prev_len, prev_was_pipeline;
    if (x == 0) {
      prev_start = 0;
      prev_len = inputs;
      prev_was_pipeline = 1;
    } else {
      get_span(inputs, x - 1, y, &prev_start, &prev_len, &prev_was_pipeline);
    }
    if (prev_was_pipeline) {
      return y;
    } else if (start == prev_start) {
      return prev_start + (y - start) * 2;
    } else {
      if ((y - prev_start) / 2 * 2 + 1 >= prev_len)
        return y;
      return prev_start + (y - start) * 2 + 1;
    }
  } else {
    if (is_pipeline) {
      return y;
    } else if ((y - start) / 2 * 2 + 1 >= len) {
      return y;
    } else if ((y - start) % 2 == 0) {
      return start + (y - start) / 2;
    } else {
      return start + len / 2 + (y - start - 1) / 2;
    }
  }
}
```