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

```asm
<readInput>:
  endbr64
  push   %r15
  xor    %r15d,%r15d
  push   %r14
  push   %r13
  mov    %rdi,%r13
  push   %r12
  push   %rbp
  lea    D2(%rip),%rbp
  push   %rbx
  xor    %ebx,%ebx
  sub    $0x18,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  movb   $0x20,0x7(%rsp)
  lea    0x7(%rsp),%r12
L73:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  cmp    $0x1,%r15d
  jne    L160
  movzbl 0x7(%rsp),%eax
  cmp    $0x7c,%al
  je     L82
  nopl   (%rax)
L40:
  cmp    $0xa,%al
  je     L55
  cmp    $0x8,%al
  je     L202
  cmp    $0xa,%al
  lea    0x1(%rbx),%r14d
  movslq %ebx,%rbx
  setne  %cl
  cmp    $0x20,%al
  mov    %al,0x0(%r13,%rbx,1)
  setne  %al
  and    %ecx,%eax
  xor    $0x1,%eax
  movzbl %al,%r15d
  test   %al,%al
  jne    L182
  test   %cl,%cl
  je     L36
L182:
  mov    %r14d,%ebx
  jmp    L73
  nopl   0x0(%rax,%rax,1)
L36:
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
  xor    %eax,%eax
  test   %r14d,%r14d
  setg   %al
L80:
  mov    0x8(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L128
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L202:
  sub    $0x1,%ebx
  movslq %ebx,%rax
  movb   $0x0,0x0(%r13,%rax,1)
L58:
  xor    %r15d,%r15d
  jmp    L73
  nopl   0x0(%rax)
L160:
  movzbl 0x7(%rsp),%eax
  mov    %ebx,%r14d
  xor    %ecx,%ecx
  cmp    $0x8,%al
  je     L45
  xchg   %ax,%ax
L108:
  cmp    $0xa,%al
  je     L187
  movslq %r14d,%rdx
  lea    0x1(%r14),%ebx
  mov    %al,0x0(%r13,%rdx,1)
  cmp    $0x7c,%al
  jne    L156
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movzbl 0x7(%rsp),%eax
  cmp    $0x7c,%al
  jne    L40
L82:
  lea    D15(%rip),%rdi
  call   <printf@plt>
  xor    %eax,%eax
  jmp    L80
L156:
  mov    %ebx,%r14d
  nopw   0x0(%rax,%rax,1)
L187:
  cmp    $0x1,%ecx
  je     L138
  cmp    $0xa,%al
  je     L36
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  movzbl 0x7(%rsp),%eax
  xor    %ecx,%ecx
  cmp    $0x8,%al
  jne    L108
L45:
  sub    $0x1,%r14d
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
L13:
  mov    %r12,%rsi
  mov    %rbp,%rdi
  call   <scanf@plt>
  xor    %ecx,%ecx
L109:
  movzbl 0x7(%rsp),%eax
  cmp    $0x8,%al
  jne    L108
  sub    $0x1,%r14d
  movslq %r14d,%rax
  movb   $0x0,0x0(%r13,%rax,1)
  cmp    $0x1,%ecx
  jne    L13
  mov    %r14d,%ebx
  jmp    L58
L55:
  lea    D13(%rip),%rdi
  mov    %ebx,%r14d
  call   <printf@plt>
  mov    $0x1,%ecx
  jmp    L109
  cs nopw 0x0(%rax,%rax,1)
L138:
  cmp    $0xa,%al
  mov    %r14d,%ebx
  setne  %r15b
  cmp    $0x20,%al
  setne  %al
  and    %eax,%r15d
  xor    $0x1,%r15d
  movzbl %r15b,%r15d
  jmp    L73
L128:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_label: D2
type: string
name: parse_data
arguments: data_label: D15
type: string
name: parse_data
arguments: data_label: D13
type: string

tool: D2: %c

tool: D15: -bash: syntax error near unexpected token | 


tool: D13: >

assistant: ```c
int readInput(char *input_line) {
  char c = ' ';
  int i = 0;
  int pipeFound = 0;
  while (c != '\n' || pipeFound == 1) {
    scanf("%c", &c);
    if (pipeFound == 1 && c == '|') {
      printf("-bash: syntax error near unexpected token | \n");
      return 0;
    }
    if (c == '\n' && pipeFound == 1) {
      printf(">");
    }
    if (c == '\b') {
      i--;
      input_line[i] = '\0';
    } else if (c != '\n')
      input_line[i++] = c;
    if (c == '|') {
      pipeFound = 1;
    } else if (pipeFound == 1 && c != ' ' && c != '\n') {
      pipeFound = 0;
    }
  }
  input_line[i] = '\0';
  if (i < 1)
    return 0;
  return 1;
}
```