// File: eryxcc[P]lois/src/formula.cpp
// Function: lois::operator&&(lois::rbool, lois::rbool)
rbool operator && (rbool a, rbool b) {
  if(a.isTrue()) return b;
  if(b.isTrue()) return a;
  if(a.isFalse() || b.isFalse()) return ffalse;
  if(a.p == b.p) return a;

  auto ae = std::dynamic_pointer_cast<FormulaEq>(a.p);
  auto be = std::dynamic_pointer_cast<FormulaEq>(b.p);
  if(ae) if(be) {
    if(eqterm(ae->t1, be->t1) && eqterm(ae->t2, be->t2))
      return ae->type == be->type ? a : ffalse;
    if(eqterm(ae->t1, be->t2) && eqterm(ae->t2, be->t1))
      return ae->type == be->type ? a : ffalse;
    }

  // if(a->formulasize() > b->formulasize()) swap(a, b);
  
  return rbool(std::make_shared<FormulaBi> (true, a, b));
  }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x100, %rsp            # imm = 0x100
movq %rdx, -0x90(%rbp)
movq %rsi, -0x88(%rbp)
movq %rdi, %rax
movq -0x88(%rbp), %rdi
movq %rax, -0x80(%rbp)
movq %rax, %rcx
movq %rcx, -0x78(%rbp)
movq %rax, -0x8(%rbp)
movq %rdi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
callq 0x29750
testb $0x1, %al
jne 0x42195
jmp 0x421aa
movq -0x90(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42536
movq -0x90(%rbp), %rdi
callq 0x29750
testb $0x1, %al
jne 0x421bc
jmp 0x421d1
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42536
movq -0x88(%rbp), %rdi
callq 0x45150
testb $0x1, %al
jne 0x421f3
movq -0x90(%rbp), %rdi
callq 0x45150
testb $0x1, %al
jne 0x421f3
jmp 0x42208
movq -0x80(%rbp), %rdi
leaq 0x63642(%rip), %rsi     # 0xa5840
callq 0x11030
jmp 0x42536
movq -0x90(%rbp), %rsi
movq -0x88(%rbp), %rdi
callq 0x29780
testb $0x1, %al
jne 0x42221
jmp 0x42236
movq -0x88(%rbp), %rsi
movq -0x80(%rbp), %rdi
callq 0x22430
jmp 0x42536
movq -0x88(%rbp), %rsi
leaq -0x28(%rbp), %rdi
callq 0x44cc0
movq -0x90(%rbp), %rsi
leaq -0x38(%rbp), %rdi
callq 0x44cc0
leaq -0x28(%rbp), %rdi
callq 0x44d50
testb $0x1, %al
jne 0x42268
jmp 0x4248c
leaq -0x38(%rbp), %rdi
callq 0x44d50
testb $0x1, %al
jne 0x4227a
jmp 0x4248a
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x18, %rax
movq %rax, -0xa0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xa0(%rbp), %rdi
movq %rax, %rsi
addq $0x18, %rsi
callq 0x45180
movb %al, -0x91(%rbp)
jmp 0x422b2
movb -0x91(%rbp), %al
testb $0x1, %al
jne 0x422c1
jmp 0x4238b
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x28, %rax
movq %rax, -0xb0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xb0(%rbp), %rdi
movq %rax, %rsi
addq $0x28, %rsi
callq 0x45180
movb %al, -0xa1(%rbp)
jmp 0x422f9
movb -0xa1(%rbp), %al
testb $0x1, %al
jne 0x42308
jmp 0x4238b
leaq -0x28(%rbp), %rdi
callq 0x44d70
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0xb4(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq %rax, %rcx
movl -0xb4(%rbp), %eax
movb 0x10(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x4234e
movq -0x88(%rbp), %rax
movq %rax, -0xc0(%rbp)
jmp 0x4235e
leaq 0x634eb(%rip), %rax     # 0xa5840
movq %rax, -0xc0(%rbp)
jmp 0x4235e
movq -0x80(%rbp), %rdi
movq -0xc0(%rbp), %rsi
callq 0x11030
movl $0x1, -0x48(%rbp)
jmp 0x4250e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x42522
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x18, %rax
movq %rax, -0xd0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xd0(%rbp), %rdi
movq %rax, %rsi
addq $0x28, %rsi
callq 0x45180
movb %al, -0xc1(%rbp)
jmp 0x423c3
movb -0xc1(%rbp), %al
testb $0x1, %al
jne 0x423d2
jmp 0x42488
leaq -0x28(%rbp), %rdi
callq 0x44d70
addq $0x28, %rax
movq %rax, -0xe0(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq -0xe0(%rbp), %rdi
movq %rax, %rsi
addq $0x18, %rsi
callq 0x45180
movb %al, -0xd1(%rbp)
jmp 0x4240a
movb -0xd1(%rbp), %al
testb $0x1, %al
jne 0x42416
jmp 0x42488
leaq -0x28(%rbp), %rdi
callq 0x44d70
movb 0x10(%rax), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0xe4(%rbp)
leaq -0x38(%rbp), %rdi
callq 0x44d70
movq %rax, %rcx
movl -0xe4(%rbp), %eax
movb 0x10(%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x4245c
movq -0x88(%rbp), %rax
movq %rax, -0xf0(%rbp)
jmp 0x4246c
leaq 0x633dd(%rip), %rax     # 0xa5840
movq %rax, -0xf0(%rbp)
jmp 0x4246c
movq -0x80(%rbp), %rdi
movq -0xf0(%rbp), %rsi
callq 0x11030
movl $0x1, -0x48(%rbp)
jmp 0x4250e
jmp 0x4248a
jmp 0x4248c
movq -0x90(%rbp), %rcx
movq -0x88(%rbp), %rdx
movb $0x1, -0x69(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x69(%rbp), %rsi
callq 0x45230
jmp 0x424ad
leaq -0x58(%rbp), %rdi
movq %rdi, -0xf8(%rbp)
leaq -0x68(%rbp), %rsi
callq 0x452b0
movq -0x80(%rbp), %rdi
movq -0xf8(%rbp), %rsi
callq 0x449f0
jmp 0x424d3
leaq -0x58(%rbp), %rdi
callq 0x14ad0
leaq -0x68(%rbp), %rdi
callq 0x44b70
movl $0x1, -0x48(%rbp)
jmp 0x4250e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
leaq -0x58(%rbp), %rdi
callq 0x14ad0
leaq -0x68(%rbp), %rdi
callq 0x44b70
jmp 0x42522
leaq -0x38(%rbp), %rdi
callq 0x44ff0
leaq -0x28(%rbp), %rdi
callq 0x44ff0
jmp 0x42536
leaq -0x38(%rbp), %rdi
callq 0x44ff0
leaq -0x28(%rbp), %rdi
callq 0x44ff0
jmp 0x42543
movq -0x78(%rbp), %rax
addq $0x100, %rsp            # imm = 0x100
popq %rbp
retq
movq -0x40(%rbp), %rdi
callq 0x84d0
nopl (%rax)