user: 下面的汇编指令对应的C源代码是什么：

```asm
<DoArithmEval>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,%r12
  mov    %esi,%ebx
  mov    %edx,%ebp
  mov    %rcx,%r13
  mov    %fs:0x28,%rax
  mov    %rax,0x18(%rsp)
  xor    %eax,%eax
  cmp    %edx,%esi
  jge    L1441
  movslq %esi,%r14
  add    %rdi,%r14
L1221:
  movsbl (%r14),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L354
  add    $0x1,%ebx
  add    $0x1,%r14
  cmp    %ebx,%ebp
  jne    L1221
  mov    $0x0,%eax
  jmp    L362
L354:
  cmp    %ebx,%ebp
  jle    L1441
  movslq %ebp,%rax
  lea    -0x1(%r12,%rax,1),%r14
L861:
  movsbl (%r14),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L1441
  sub    $0x1,%ebp
  sub    $0x1,%r14
  cmp    %ebx,%ebp
  jne    L861
  mov    $0x0,%eax
L362:
  mov    0x18(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L940
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L1441:
  cmp    %ebp,%ebx
  je     L1500
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D5(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L1503
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  or     0x10(%rsp),%eax
  setne  %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1503:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D90(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L880
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  test   %eax,%eax
  je     L653
  cmpl   $0x0,0x10(%rsp)
  setne  %al
  movzbl %al,%eax
L653:
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L880:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D70(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L115
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  or     0x10(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L115:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D125(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L1029
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  xor    0x10(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1029:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D196(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L875
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  and    0x10(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L875:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D84(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L809
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D139(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L34
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D96(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L1028
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D111(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L558
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D47(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L1250
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D161(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L1060
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D76(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L443
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D144(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L986
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0x10(%rsp),%eax
  add    0xc(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L809:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1307
L30:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L1337
L100:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L1337
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L100
L1337:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L812
L1443:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L812
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L1443
L812:
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    0x8(%rsp),%eax
  sub    %eax,%ebp
  cmp    %ebp,%edx
  je     L1208
  movl   $0x1,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1307:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L30
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1208:
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  setne  %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L34:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1115
L1204:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L383
L1049:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L383
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L1049
L383:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L574
L375:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L574
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L375
L574:
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    0x8(%rsp),%eax
  sub    %eax,%ebp
  cmp    %ebp,%edx
  je     L829
  movl   $0x0,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1115:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L1204
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L829:
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  sete   %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1028:
  lea    D127(%rip),%rdi
  call   <bug@plt>
  mov    $0x1,%eax
  jmp    L362
L558:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1138
L154:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L85
L1336:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L85
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L1336
L85:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L1242
L1416:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L1242
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L1416
L1242:
  mov    0x8(%rsp),%eax
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    %ebp,%ecx
  sub    %eax,%ecx
  cmp    %ecx,%edx
  cmovg  %ecx,%edx
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  mov    $0x1,%edx
  test   %eax,%eax
  jle    L1367
L1126:
  mov    %edx,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1138:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L154
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  setge  %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1367:
  mov    $0x0,%edx
  jne    L1126
  mov    0x4(%rsp),%eax
  sub    %ebx,%eax
  sub    0x8(%rsp),%ebp
  cmp    %ebp,%eax
  setge  %dl
  movzbl %dl,%edx
  jmp    L1126
L1250:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L675
L760:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L93
L1249:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L93
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L1249
L93:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L832
L991:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L832
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L991
L832:
  mov    0x8(%rsp),%eax
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    %ebp,%ecx
  sub    %eax,%ecx
  cmp    %ecx,%edx
  cmovg  %ecx,%edx
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  mov    $0x1,%edx
  test   %eax,%eax
  jle    L500
L1136:
  mov    %edx,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L675:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L760
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  setg   %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L500:
  mov    $0x0,%edx
  jne    L1136
  mov    0x4(%rsp),%eax
  sub    %ebx,%eax
  sub    0x8(%rsp),%ebp
  cmp    %ebp,%eax
  setg   %dl
  movzbl %dl,%edx
  jmp    L1136
L1060:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L1482
L847:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L1120
L519:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L1120
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L519
L1120:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L462
L1501:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L462
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L1501
L462:
  mov    0x8(%rsp),%eax
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    %ebp,%ecx
  sub    %eax,%ecx
  cmp    %ecx,%edx
  cmovg  %ecx,%edx
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  mov    $0x1,%edx
  test   %eax,%eax
  js     L112
  mov    $0x0,%edx
  jne    L112
  mov    0x4(%rsp),%eax
  sub    %ebx,%eax
  sub    0x8(%rsp),%ebp
  cmp    %ebp,%eax
  setle  %dl
  movzbl %dl,%edx
L112:
  mov    %edx,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1482:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L847
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  setle  %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L443:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  jne    L23
L64:
  mov    0x4(%rsp),%eax
  cmp    %eax,%ebx
  jge    L130
L955:
  cltq
  movsbl -0x1(%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L130
  mov    0x4(%rsp),%eax
  sub    $0x1,%eax
  mov    %eax,0x4(%rsp)
  cmp    %ebx,%eax
  jg     L955
L130:
  mov    0x8(%rsp),%eax
  cmp    %ebp,%eax
  jge    L22
L415:
  cltq
  movsbl (%r12,%rax,1),%edi
  call   <iswhite@plt>
  test   %rax,%rax
  je     L22
  mov    0x8(%rsp),%eax
  add    $0x1,%eax
  mov    %eax,0x8(%rsp)
  cmp    %ebp,%eax
  jl     L415
L22:
  mov    0x8(%rsp),%eax
  mov    0x4(%rsp),%edx
  sub    %ebx,%edx
  mov    %ebp,%ecx
  sub    %eax,%ecx
  cmp    %ecx,%edx
  cmovg  %ecx,%edx
  cltq
  lea    (%r12,%rax,1),%rsi
  movslq %ebx,%rdi
  add    %r12,%rdi
  call   <strncmp@plt>
  mov    $0x1,%edx
  test   %eax,%eax
  js     L1119
  mov    $0x0,%edx
  jne    L1119
  mov    0x4(%rsp),%eax
  sub    %ebx,%eax
  sub    0x8(%rsp),%ebp
  cmp    %ebp,%eax
  setl   %dl
  movzbl %dl,%edx
L1119:
  mov    %edx,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L23:
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L64
  mov    0x10(%rsp),%eax
  cmp    %eax,0xc(%rsp)
  setl   %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L986:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D132(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L407
  mov    0x4(%rsp),%edx
  cmp    %ebx,%edx
  jne    L924
L407:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D13(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L736
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  imul   0x10(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L924:
  lea    0xc(%rsp),%rcx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  sub    0x10(%rsp),%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L736:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D52(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  je     L1439
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0x10(%rsp),%ebx
  test   %ebx,%ebx
  je     L628
L53:
  mov    0xc(%rsp),%eax
  cltd
  idiv   %ebx
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L628:
  lea    D63(%rip),%rdi
  call   <bug@plt>
  jmp    L53
L1439:
  lea    0x8(%rsp),%r9
  lea    0x4(%rsp),%r8
  lea    D72(%rip),%rcx
  mov    %ebp,%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <SpliceInfix@plt>
  test   %rax,%rax
  jne    L681
  movslq %ebx,%r14
  add    %r12,%r14
  movzbl (%r14),%eax
  cmp    $0x7e,%al
  je     L590
  cmp    $0x21,%al
  je     L160
  cmp    $0x2d,%al
  je     L702
  lea    D50(%rip),%r15
  mov    %r15,%rdi
  call   <strlen@plt>
  mov    %eax,%edx
  mov    %r15,%rsi
  mov    %r14,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L1373
  movslq %ebp,%rdx
  cmpb   $0x29,-0x1(%r12,%rdx,1)
  jne    L362
  sub    %ebx,%ebp
  lea    D183(%rip),%rdi
  call   <strlen@plt>
  sub    %eax,%ebp
  mov    %ebp,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L681:
  lea    0xc(%rsp),%rcx
  mov    0x4(%rsp),%edx
  mov    %ebx,%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  lea    0x10(%rsp),%rcx
  mov    %ebp,%edx
  mov    0x8(%rsp),%esi
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0x10(%rsp),%ebx
  test   %ebx,%ebx
  je     L788
L1244:
  mov    0xc(%rsp),%eax
  cltd
  idiv   %ebx
  mov    %edx,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L788:
  lea    D63(%rip),%rdi
  call   <bug@plt>
  jmp    L1244
L590:
  lea    0xc(%rsp),%rcx
  lea    0x1(%rbx),%esi
  mov    %ebp,%edx
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  not    %eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L160:
  lea    0xc(%rsp),%rcx
  lea    0x1(%rbx),%esi
  mov    %ebp,%edx
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  cmpl   $0x0,0xc(%rsp)
  sete   %al
  movzbl %al,%eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L702:
  lea    0xc(%rsp),%rcx
  lea    0x1(%rbx),%esi
  mov    %ebp,%edx
  mov    %r12,%rdi
  call   <DoArithmEval>
  test   %eax,%eax
  je     L362
  mov    0xc(%rsp),%eax
  neg    %eax
  mov    %eax,0x0(%r13)
  mov    $0x1,%eax
  jmp    L362
L1373:
  cmpb   $0x28,(%r14)
  jne    L1361
  movslq %ebp,%rdx
  mov    $0x0,%eax
  cmpb   $0x29,-0x1(%r12,%rdx,1)
  jne    L362
  lea    -0x1(%rbp),%edx
  lea    0x1(%rbx),%esi
  mov    %r13,%rcx
  mov    %r12,%rdi
  call   <DoArithmEval>
  jmp    L362
L1361:
  movslq %ebp,%rbp
  add    %rbp,%r12
  movzbl (%r12),%ebx
  movb   $0x0,(%r12)
  lea    0x10(%rsp),%rsi
  mov    $0x0,%edx
  mov    %r14,%rdi
  call   <strtol@plt>
  mov    %eax,0x0(%r13)
  mov    %bl,(%r12)
  cmp    %r12,0x10(%rsp)
  sete   %al
  movzbl %al,%eax
  jmp    L362
L1500:
  mov    $0x0,%eax
  jmp    L362
L940:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: label: D5
type: string
name: extract_symbolic_data
arguments: label: D90
type: string
name: extract_symbolic_data
arguments: label: D70
type: string
name: extract_symbolic_data
arguments: label: D125
type: string
name: extract_symbolic_data
arguments: label: D196
type: string
name: extract_symbolic_data
arguments: label: D84
type: string
name: extract_symbolic_data
arguments: label: D139
type: string
name: extract_symbolic_data
arguments: label: D96
type: string
name: extract_symbolic_data
arguments: label: D111
type: string
name: extract_symbolic_data
arguments: label: D47
type: string
name: extract_symbolic_data
arguments: label: D161
type: string
name: extract_symbolic_data
arguments: label: D76
type: string
name: extract_symbolic_data
arguments: label: D144
type: string
name: extract_symbolic_data
arguments: label: D127
type: string
name: extract_symbolic_data
arguments: label: D132
type: string
name: extract_symbolic_data
arguments: label: D13
type: string
name: extract_symbolic_data
arguments: label: D52
type: string
name: extract_symbolic_data
arguments: label: D63
type: string
name: extract_symbolic_data
arguments: label: D72
type: string
name: extract_symbolic_data
arguments: label: D50
type: string
name: extract_symbolic_data
arguments: label: D183
type: string

tool: D5: ||

tool: D90: &&

tool: D70: |

tool: D125: ^

tool: D196: &

tool: D84: !=

tool: D139: ==

tool: D96: =~

tool: D111: >=

tool: D47: >

tool: D161: <=

tool: D76: <

tool: D144: +

tool: D127: globbing support has not been compiled in

tool: D132: -

tool: D13: *

tool: D52: /

tool: D63: Division by zero in expression

tool: D72: %

tool: D50: length(

tool: D183: length()

assistant: ```c
int DoArithmEval(char *buf, int pos1, int pos2, int *result) {
  int spl1, spl2, result1, result2, l;
  char c, *p;
  while ((pos1 < pos2) && iswhite(buf[pos1]))
    pos1++;
  while ((pos1 < pos2) && iswhite(buf[pos2 - 1]))
    pos2--;
  if (pos1 == pos2)
    return 0;
  if (SpliceInfix(buf, pos1, pos2, "||", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 || result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 && result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "|", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 | result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "^", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 ^ result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "&", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 & result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "!=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 1;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) != 0);
    } else
      *result = (result1 != result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "==", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      if (spl1 - pos1 != pos2 - spl2)
        *result = 0;
      else
        *result = (strncmp(buf + pos1, buf + spl2, spl1 - pos1) == 0);
    } else
      *result = (result1 == result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "=~", &spl1, &spl2)) {
    bug("globbing support has not been compiled in");
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 >= pos2 - spl2));
    } else
      *result = (result1 >= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, ">", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 > 0) || ((result1 == 0) && (spl1 - pos1 > pos2 - spl2));
    } else
      *result = (result1 > result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<=", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 <= pos2 - spl2));
    } else
      *result = (result1 <= result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "<", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2)) {
      while ((pos1 < spl1) && iswhite(buf[spl1 - 1]))
        spl1--;
      while ((pos2 > spl2) && iswhite(buf[spl2]))
        spl2++;
      l = spl1 - pos1;
      if (l > pos2 - spl2)
        l = pos2 - spl2;
      result1 = strncmp(buf + pos1, buf + spl2, l);
      *result = (result1 < 0) || ((result1 == 0) && (spl1 - pos1 < pos2 - spl2));
    } else
      *result = (result1 < result2);
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "+", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 + result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "-", &spl1, &spl2))
    if (spl1 != pos1) {
      if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
        return 0;
      *result = result1 - result2;
      return 1;
    }
  if (SpliceInfix(buf, pos1, pos2, "*", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    *result = result1 * result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "/", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 / result2;
    return 1;
  }
  if (SpliceInfix(buf, pos1, pos2, "%", &spl1, &spl2)) {
    if (!DoArithmEval(buf, pos1, spl1, &result1) || !DoArithmEval(buf, spl2, pos2, &result2))
      return 0;
    if (result2 == 0)
      bug("Division by zero in expression");
    *result = result1 % result2;
    return 1;
  }
  if (buf[pos1] == '~') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = ~result1;
    return 1;
  }
  if (buf[pos1] == '!') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = !result1;
    return 1;
  }
  if (buf[pos1] == '-') {
    if (!DoArithmEval(buf, pos1 + 1, pos2, &result1))
      return 0;
    *result = -result1;
    return 1;
  }
  if (strncmp(buf + pos1, "length(", strlen("length(")) == 0) {
    if (buf[pos2 - 1] != ')')
      return 0;
    *result = pos2 - pos1 - strlen("length()");
    return 1;
  }
  if (buf[pos1] == '(') {
    if (buf[pos2 - 1] != ')')
      return 0;
    return DoArithmEval(buf, pos1 + 1, pos2 - 1, result);
  }
  c = buf[pos2];
  buf[pos2] = 0;
  *result = (int)strtol(buf + pos1, &p, 0);
  buf[pos2] = c;
  return (p == buf + pos2);
}
```