// File: vsklad[P]cgen/./bal/cnf/cnf/cnfclauses.hpp
// Function: bal::print_clause(std::ostream&, unsigned int const*, char const*)
inline void print_clause(std::ostream& stream, const uint32_t* const p_clause, const char* final_token = nullptr) {
        uint16_t clauses_bitmap = _clause_flags(p_clause);
        const clause_size_t clause_size = _clause_size(p_clause);
        
        if (clause_size <= 4 && clauses_bitmap != 0) {
            uint16_t clause_bitmap = 0;
            while (clauses_bitmap > 0) {
                if (clauses_bitmap & 1) {
                    for (auto i = 0; i < clause_size; i++) {
                        literal_t literal(literal_t__negated_onlyif(_clause_literal(p_clause, i), (clause_bitmap & (1 << i)) == 0));
                        stream << ((i > 0) ? " " : "") << literal;
                    };
                    
                    if (final_token != nullptr) {
                        stream << final_token;
                    };
                };
                clause_bitmap++;
                clauses_bitmap >>= 1;
            };
        } else {
            for (auto i = 0; i < clause_size; i++) {
                stream << ((i > 0) ? " " : "") << literal_t(*(p_clause + i + 1));
            };
            
            if (final_token != nullptr) {
                stream << final_token;
            };
        };
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
shrl $0x10, %eax
movw %ax, -0x1a(%rbp)
movq -0x10(%rbp), %rax
movl (%rax), %eax
andl $0x7fff, %eax           # imm = 0x7FFF
movw %ax, -0x1c(%rbp)
movzwl -0x1c(%rbp), %eax
cmpl $0x4, %eax
jg 0x12c3e
movzwl -0x1a(%rbp), %eax
cmpl $0x0, %eax
je 0x12c3e
movw $0x0, -0x1e(%rbp)
movzwl -0x1a(%rbp), %eax
cmpl $0x0, %eax
jle 0x12c3c
movzwl -0x1a(%rbp), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x12c21
movl $0x0, -0x24(%rbp)
movl -0x24(%rbp), %eax
movzwl -0x1c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x12c0b
movq -0x10(%rbp), %rax
movslq -0x24(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %esi
movzwl -0x1e(%rbp), %edx
movl -0x24(%rbp), %ecx
movl $0x1, %eax
shll %cl, %eax
andl %eax, %edx
xorl %eax, %eax
movl $0x1, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
xorl %eax, %esi
leaq -0x28(%rbp), %rdi
callq 0x12e30
movq -0x8(%rbp), %rdi
movl -0x24(%rbp), %ecx
leaq 0x557db(%rip), %rsi     # 0x683bc
leaq 0x4f85f(%rip), %rax     # 0x62447
cmpl $0x0, %ecx
cmovgq %rax, %rsi
callq 0xd320
movq %rax, %rdi
leaq -0x28(%rbp), %rsi
callq 0x12d50
movl -0x24(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x24(%rbp)
jmp 0x12b94
cmpq $0x0, -0x18(%rbp)
je 0x12c1f
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xd320
jmp 0x12c21
movw -0x1e(%rbp), %ax
addw $0x1, %ax
movw %ax, -0x1e(%rbp)
movzwl -0x1a(%rbp), %eax
sarl %eax
movw %ax, -0x1a(%rbp)
jmp 0x12b70
jmp 0x12cb8
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
movzwl -0x1c(%rbp), %ecx
cmpl %ecx, %eax
jge 0x12ca2
movq -0x8(%rbp), %rdi
movl -0x2c(%rbp), %ecx
leaq 0x5575e(%rip), %rsi     # 0x683bc
leaq 0x4f7e2(%rip), %rax     # 0x62447
cmpl $0x0, %ecx
cmovgq %rax, %rsi
callq 0xd320
movq %rax, -0x38(%rbp)
movq -0x10(%rbp), %rax
movslq -0x2c(%rbp), %rcx
movl 0x4(%rax,%rcx,4), %esi
leaq -0x30(%rbp), %rdi
callq 0x12e30
movq -0x38(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x12d50
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x12c45
cmpq $0x0, -0x18(%rbp)
je 0x12cb6
movq -0x8(%rbp), %rdi
movq -0x18(%rbp), %rsi
callq 0xd320
jmp 0x12cb8
addq $0x40, %rsp
popq %rbp
retq
nop