// File: /workspace/github_cpp_makefile_star2_O1/conp-solutions[P]cnfmiter/AtLeastTwoSolutions.cc
// Function: main
int main(int argc, char **argv)
{
    int opt;
    int tseitin = 0;
    int maxsat = 0;
    std::cerr << "c AtLeastTwoSolutions generates a CNF formula " << std::endl
              << "c which is satisfiable if the given input formula has at least 2 models" << std::endl
              << "c" << std::endl
              << "c OPTIONS" << std::endl
              << "c -t x ... only force differences among the variables 1 to x" << std::endl
              << "c -W   ... encode a MaxSat formula that tries to get two solutions with largest hamming distance" << std::endl
              << "c -w   ... same as -w, but use the pre 2020 MaxSat format" << std::endl
              << std::endl;

    // Retrieve the options:
    while ((opt = getopt(argc, argv, "t:wW")) != -1) { // for each option...
        switch (opt) {
        case 't':
            tseitin = atoi(optarg);
            std::cerr << "c set tseitin variable to " << tseitin << std::endl;
            break;
        case 'w':
            maxsat = 1;
            std::cerr << "c enable maxsat pre-2021 mode" << std::endl;
            break;
        case 'W':
            maxsat = 2;
            std::cerr << "c enable maxsat post-2020 mode" << std::endl;
            break;
        case '?': // unknown option...
            std::cerr << "c unknown option: '" << char(optopt) << "'!" << std::endl;
            exit(1);
            break;
        }
    }

    if (optind + 1 != argc) {
        std::cerr << "not enough parameters, abort!" << std::endl;
        return 1;
    }

    std::string fn1 = (argv[optind + 0]);
    gzFile in1 = gzopen(fn1.c_str(), "rb");

    if (!in1) {
        std::cerr << "failed to open first file, abort!" << std::endl;
        return 1;
    }
    if (tseitin < 0) {
        std::cerr << "tseitin variable negative, abort" << std::endl;
        return 1;
    }

    Formula f1;

    parse_DIMACS(in1, f1);
    gzclose(in1);

    std::cerr << "c Parsed formula with " << f1.nVars() << " vars and " << f1.clauses.size() << std::endl;

    Formula result;
    int input_vars = f1.nVars();
    int var_offset = input_vars;
    int output_vars = 2 * input_vars;
    while (output_vars > result.nVars()) result.newVar();
    std::vector<Lit> rewritten_clause;

    /* add formula 2 times, once with a full variable offset */
    /* duplicate this, to check whether a formuala has more models */
    for (const auto &clause : f1.clauses) {
        result.addClause_(clause);
        rewritten_clause.clear();
        for (int i = 0; i < clause.size(); ++i) {
            Lit l = clause[i];
            Var v = var(l);
            rewritten_clause.push_back(mkLit(v + var_offset, sign(l)));
        }
        result.addClause_(rewritten_clause);
    }

    /* encode variable differences for given number of variables */
    /* this grows quadratic in the number of models that should be checked for */
    Var max_v = tseitin == 0 ? input_vars : tseitin;
    int next_var = output_vars;
    std::vector<Lit> one_unequal_clause;
    std::cerr << "c encode variable equivalences for first " << max_v << " variables" << std::endl;
    for (Var v = 0; v < max_v; ++v) {
        Lit a = mkLit(v);
        Lit A = mkLit(v + var_offset);
        Lit next_lit = mkLit(next_var++);
        while (var(next_lit) >= result.nVars()) result.newVar();
        /* a <-> (a+offset) <-> next_lit */
        generate_equivalence(result, a, A, next_lit);
        one_unequal_clause.push_back(~next_lit);
    }

    /* enforce that at least one assignment has to be different */
    result.addClause_(one_unequal_clause);

    std::stringstream s;
    if (maxsat == 0) {
        s << "encode formula to check whether there are more than 1 solution for " << fn1;
        if (tseitin != 0) s << " with tseitin base variable " << tseitin;
        /* one of the common literal pair should have unequal truth values has to be */
        print_formula(result, s.str());
    } else {
        s << "encode formula to find two solutions with the highest hamming distance for a given formula, at least 1, for " << fn1;
        if (tseitin != 0) s << " with tseitin base variable " << tseitin;
        /* there is a cost setting variables to equal truth values, hence, pay cost for each unit */
        print_maxsat_formula(result, one_unequal_clause, s.str(), maxsat == 1);
    }


    return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x100128, %rsp         # imm = 0x100128
movq %rsi, %rbx
movl %edi, %r15d
movq 0x4126(%rip), %r13      # 0x6ff0
leaq 0x21b7(%rip), %rsi      # 0x5088
movl $0x2e, %edx
movq %r13, %rdi
callq 0x2190
movq (%r13), %rax
movq -0x18(%rax), %rdi
addq %r13, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r13, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x21a7(%rip), %rsi      # 0x50b7
movl $0x47, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x21b1(%rip), %rsi      # 0x50ff
movl $0x1, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x2175(%rip), %rsi      # 0x5101
movl $0x9, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x2141(%rip), %rsi      # 0x510b
movl $0x3c, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x2140(%rip), %rsi      # 0x5148
movl $0x60, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r14
leaq 0x2163(%rip), %rsi      # 0x51a9
movl $0x39, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movq %rax, %r12
movl $0x0, -0x3c(%rbp)
leaq 0x2158(%rip), %r14      # 0x51e3
movl $0x0, -0x2c(%rbp)
movq (%r12), %rax
movq -0x18(%rax), %rdi
addq %r12, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r12, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl %r15d, %edi
movq %rbx, %rsi
movq %r14, %rdx
callq 0x2050
cmpl $0x73, %eax
jg 0x30e5
cmpl $-0x1, %eax
je 0x3172
cmpl $0x57, %eax
je 0x314f
cmpl $0x3f, %eax
jne 0x30ba
jmp 0x3910
cmpl $0x77, %eax
je 0x312c
cmpl $0x74, %eax
jne 0x30ba
movq 0x3eb2(%rip), %rax      # 0x6fa8
movq (%rax), %rdi
callq 0x2200
movl %eax, %r12d
movl $0x1a, %edx
movq %r13, %rdi
leaq 0x20d8(%rip), %rsi      # 0x51e8
callq 0x2190
movq %r13, %rdi
movl %r12d, -0x2c(%rbp)
movl %r12d, %esi
callq 0x2260
movq %rax, %r12
jmp 0x3092
movl $0x1d, %edx
movq %r13, %rdi
leaq 0x20c8(%rip), %rsi      # 0x5203
callq 0x2190
movl $0x1, -0x3c(%rbp)
movq %r13, %r12
jmp 0x3092
movl $0x1e, %edx
movq %r13, %rdi
leaq 0x20c3(%rip), %rsi      # 0x5221
callq 0x2190
movl $0x2, -0x3c(%rbp)
movq %r13, %r12
jmp 0x3092
movq 0x3e57(%rip), %rax      # 0x6fd0
movslq (%rax), %rax
leal 0x1(%rax), %ecx
cmpl %r15d, %ecx
jne 0x3388
movq (%rbx,%rax,8), %rsi
leaq -0xe8(%rbp), %rbx
leaq -0x100150(%rbp), %rdx
movq %rbx, %rdi
callq 0x2090
movq (%rbx), %rdi
leaq 0x20c9(%rip), %rsi      # 0x5275
callq 0x21e0
testq %rax, %rax
je 0x37ef
cmpl $0x0, -0x2c(%rbp)
js 0x37fd
leaq -0xb8(%rbp), %rcx
movl $0x0, -0x8(%rcx)
xorps %xmm0, %xmm0
movups %xmm0, (%rcx)
xorl %ebx, %ebx
movq %rbx, 0x10(%rcx)
leaq -0x100148(%rbp), %rsi
movq %rax, -0x8(%rsi)
movq %rbx, 0x100000(%rsi)
movq %rax, -0x68(%rbp)
movq %rax, %rdi
movl $0x100000, %edx         # imm = 0x100000
callq 0x2290
leaq -0x100150(%rbp), %r12
movl %eax, 0x10000c(%r12)
leaq -0x60(%rbp), %r13
xorps %xmm0, %xmm0
movaps %xmm0, (%r13)
movq $0x0, 0x10(%r13)
leaq 0x21cf(%rip), %r14      # 0x53fa
xorl %r15d, %r15d
movl $0x0, -0x38(%rbp)
movq %r12, %rdi
callq 0x3a77
movl -0x148(%rbp), %ecx
cmpl -0x144(%rbp), %ecx
jge 0x33d4
movslq %ecx, %rax
movzbl -0x100148(%rbp,%rax), %eax
cmpl $0x70, %eax
je 0x3291
cmpl $0x63, %eax
jne 0x32fa
movslq %ecx, %rax
cmpb $0xa, -0x100148(%rbp,%rax)
je 0x337b
movq %r12, %rdi
callq 0x3f0c
movl -0x148(%rbp), %ecx
cmpl -0x144(%rbp), %ecx
jl 0x3268
jmp 0x3235
movl $0x1, %r15d
xorl %ecx, %ecx
movslq -0x148(%rbp), %rsi
movl $0xffffffff, %edx       # imm = 0xFFFFFFFF
cmpl -0x144(%rbp), %esi
jge 0x32b5
movzbl -0x100148(%rbp,%rsi), %edx
movsbl %al, %eax
cmpl %eax, %edx
jne 0x32d6
movq %r12, %rdi
callq 0x3f0c
movb (%r15,%r14), %al
testb %al, %al
sete %cl
incq %r15
cmpq $0x6, %r15
jne 0x3299
testb $0x1, %cl
je 0x3956
movq %r12, %rdi
callq 0x3ad1
movl %eax, -0x38(%rbp)
movq %r12, %rdi
callq 0x3ad1
movl %eax, %r15d
jmp 0x3235
movq -0x60(%rbp), %rax
cmpq %rax, -0x58(%rbp)
je 0x3308
movq %rax, -0x58(%rbp)
movq %r12, %rdi
callq 0x3ad1
testl %eax, %eax
je 0x3365
movl %eax, %ecx
negl %ecx
cmovsl %eax, %ecx
cmpl -0xc0(%rbp), %ecx
jle 0x3329
movl %ecx, -0xc0(%rbp)
xorl %edx, %edx
testl %eax, %eax
setle %dl
leal (%rdx,%rcx,2), %eax
addl $-0x2, %eax
movl %eax, -0x80(%rbp)
movq -0x58(%rbp), %rsi
cmpq -0x50(%rbp), %rsi
je 0x334f
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x58(%rbp)
jmp 0x335b
movq %r13, %rdi
leaq -0x80(%rbp), %rdx
callq 0x3f54
movq %r12, %rdi
callq 0x3ad1
jmp 0x3310
incl %ebx
leaq -0xb8(%rbp), %rdi
movq %r13, %rsi
callq 0x3c62
jmp 0x3235
movq %r12, %rdi
callq 0x3f0c
jmp 0x3235
movq 0x3c61(%rip), %rbx      # 0x6ff0
leaq 0x1ec1(%rip), %rsi      # 0x5257
movl $0x1d, %edx
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x1, %ebx
jmp 0x385d
movl -0x38(%rbp), %eax
cmpl -0xc0(%rbp), %eax
jne 0x38fc
cmpl %r15d, %ebx
jne 0x3906
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x33fa
callq 0x2150
movq -0x68(%rbp), %rdi
callq 0x2250
movq 0x3be6(%rip), %rdi      # 0x6ff0
leaq 0x1eaa(%rip), %rsi      # 0x52bb
movl $0x16, %edx
callq 0x2190
movl -0xc0(%rbp), %esi
movq 0x3bc8(%rip), %rdi      # 0x6ff0
callq 0x2260
movq %rax, %rbx
leaq 0x1e9b(%rip), %rsi      # 0x52d2
movl $0xa, %edx
movq %rax, %rdi
callq 0x2190
movq -0xb0(%rbp), %rax
subq -0xb8(%rbp), %rax
sarq $0x3, %rax
movabsq $-0x5555555555555555, %rsi # imm = 0xAAAAAAAAAAAAAAAB
imulq %rax, %rsi
movq %rbx, %rdi
callq 0x20f0
movq %rax, %rbx
movq (%rax), %rax
movq -0x18(%rax), %rdi
addq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %rbx, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
movl $0x0, -0x60(%rbp)
xorps %xmm0, %xmm0
movups %xmm0, -0x58(%rbp)
movq $0x0, -0x48(%rbp)
movl -0xc0(%rbp), %eax
leal (%rax,%rax), %ecx
movq %rax, -0x38(%rbp)
testl %eax, %eax
jle 0x34cb
cmpl $0x2, %ecx
movl $0x1, %eax
cmovgel %ecx, %eax
movl %eax, -0x60(%rbp)
movq %rcx, -0x68(%rbp)
leaq -0x58(%rbp), %r12
movaps %xmm0, -0x80(%rbp)
movq $0x0, -0x70(%rbp)
movq -0xb8(%rbp), %rbx
movq -0xb0(%rbp), %rax
movq %rax, -0xc8(%rbp)
cmpq %rax, %rbx
je 0x3599
movq -0x38(%rbp), %rax
leal (%rax,%rax), %r15d
leaq -0x80(%rbp), %r14
leaq -0x100150(%rbp), %r13
movq %r12, %rdi
movq %rbx, %rsi
callq 0x3c62
movq -0x80(%rbp), %rax
cmpq %rax, -0x78(%rbp)
je 0x3529
movq %rax, -0x78(%rbp)
movq (%rbx), %rax
cmpq %rax, 0x8(%rbx)
je 0x3579
xorl %r12d, %r12d
movl (%rax,%r12,4), %eax
addl %r15d, %eax
movl %eax, -0x100150(%rbp)
movq -0x78(%rbp), %rsi
cmpq -0x70(%rbp), %rsi
je 0x3558
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x78(%rbp)
jmp 0x3563
movq %r14, %rdi
movq %r13, %rdx
callq 0x3f54
incq %r12
movq (%rbx), %rax
movq 0x8(%rbx), %rcx
subq %rax, %rcx
sarq $0x2, %rcx
cmpq %r12, %rcx
ja 0x3535
leaq -0x58(%rbp), %r12
movq %r12, %rdi
movq %r14, %rsi
callq 0x3c62
addq $0x18, %rbx
cmpq -0xc8(%rbp), %rbx
jne 0x3510
movl -0x2c(%rbp), %ebx
testl %ebx, %ebx
cmovel -0x38(%rbp), %ebx
xorps %xmm0, %xmm0
movaps %xmm0, -0xa0(%rbp)
movq $0x0, -0x90(%rbp)
movq 0x3a32(%rip), %rdi      # 0x6ff0
leaq 0x1d18(%rip), %rsi      # 0x52dd
movl $0x29, %edx
callq 0x2190
movq 0x3a1a(%rip), %rdi      # 0x6ff0
movl %ebx, %esi
callq 0x2260
movq %rax, %r14
leaq 0x1d20(%rip), %rsi      # 0x5307
movl $0xa, %edx
movq %rax, %rdi
callq 0x2190
movq (%r14), %rax
movq -0x18(%rax), %rdi
addq %r14, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq %r14, %rdi
callq 0x2030
movq %rax, %rdi
callq 0x2100
testl %ebx, %ebx
jle 0x36b2
movq -0x38(%rbp), %rax
shll $0x2, %eax
movq %rax, -0x38(%rbp)
xorl %r14d, %r14d
movq -0x68(%rbp), %rax
movl %eax, %r15d
movl %r15d, %eax
leal 0x1(%rax), %r15d
cmpl -0x60(%rbp), %eax
jl 0x3648
movl %r15d, -0x60(%rbp)
movq -0x68(%rbp), %rax
leal (%rax,%r14), %edx
leaq -0x60(%rbp), %rdi
movl %r14d, %esi
movq -0x38(%rbp), %r13
movl %r13d, %ecx
callq 0x248c
leal 0x1(%r13), %eax
movl %eax, -0x100150(%rbp)
movq -0x98(%rbp), %rsi
cmpq -0x90(%rbp), %rsi
je 0x368c
movl %eax, (%rsi)
addq $0x4, %rsi
movq %rsi, -0x98(%rbp)
jmp 0x369f
leaq -0xa0(%rbp), %rdi
leaq -0x100150(%rbp), %rdx
callq 0x3f54
movq -0x38(%rbp), %rax
addl $0x2, %eax
movq %rax, -0x38(%rbp)
addl $0x2, %r14d
decl %ebx
jne 0x3638
leaq -0xa0(%rbp), %rsi
movq %r12, %rdi
callq 0x3c62
leaq -0x100150(%rbp), %rdi
callq 0x2110
leaq -0x100140(%rbp), %rbx
cmpl $0x0, -0x3c(%rbp)
je 0x3871
leaq 0x1c8e(%rip), %rsi      # 0x5373
movl $0x6c, %edx
movq %rbx, %rdi
callq 0x2190
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2190
cmpl $0x0, -0x2c(%rbp)
je 0x372d
leaq 0x1c41(%rip), %rsi      # 0x5356
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x2190
movq %rbx, %rdi
movl -0x2c(%rbp), %esi
callq 0x2260
leaq -0x100(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x3be2
leaq -0x100138(%rbp), %rsi
leaq -0x120(%rbp), %rdi
callq 0x2210
xorl %ecx, %ecx
cmpl $0x1, -0x3c(%rbp)
sete %cl
leaq -0x60(%rbp), %rdi
leaq -0x100(%rbp), %rsi
leaq -0x120(%rbp), %rdx
callq 0x289a
leaq -0x110(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3788
callq 0x2150
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x3799
callq 0x2150
movq 0x37f8(%rip), %rsi      # 0x6f98
leaq -0x100150(%rbp), %rdi
callq 0x2120
leaq -0x1000d0(%rbp), %rdi
callq 0x2070
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x37c9
callq 0x2150
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x37d7
callq 0x2150
movq %r12, %rdi
callq 0x3ea4
leaq -0xb8(%rbp), %rdi
callq 0x3ea4
xorl %ebx, %ebx
jmp 0x3848
movl $0x21, %edx
leaq 0x1a7d(%rip), %rsi      # 0x5278
jmp 0x3809
movl $0x20, %edx
leaq 0x1a91(%rip), %rsi      # 0x529a
movq 0x37e0(%rip), %rbx      # 0x6ff0
movq %rbx, %rdi
callq 0x2190
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2160
movsbl %al, %esi
movq 0x37ba(%rip), %rdi      # 0x6ff0
callq 0x2030
movl $0x1, %ebx
movq %rax, %rdi
callq 0x2100
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x385d
callq 0x2150
movl %ebx, %eax
addq $0x100128, %rsp         # imm = 0x100128
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x1a9a(%rip), %rsi      # 0x5312
movl $0x43, %edx
movq %rbx, %rdi
callq 0x2190
movq -0xe8(%rbp), %rsi
movq -0xe0(%rbp), %rdx
movq %rbx, %rdi
callq 0x2190
cmpl $0x0, -0x2c(%rbp)
je 0x38c0
leaq 0x1aae(%rip), %rsi      # 0x5356
movl $0x1c, %edx
movq %rbx, %rdi
callq 0x2190
movq %rbx, %rdi
movl -0x2c(%rbp), %esi
callq 0x2260
leaq -0x100138(%rbp), %rsi
leaq -0x140(%rbp), %rdi
callq 0x2210
leaq -0x60(%rbp), %rdi
leaq -0x140(%rbp), %rsi
callq 0x2600
leaq -0x130(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x3794
jmp 0x3799
callq 0x22c0
jmp 0x33e3
callq 0x22e2
jmp 0x33ec
movq 0x36d9(%rip), %rdi      # 0x6ff0
leaq 0x1922(%rip), %rsi      # 0x5240
callq 0x2170
movq 0x368e(%rip), %rcx      # 0x6fb8
movsbl (%rcx), %esi
movq %rax, %rdi
callq 0x21a0
leaq 0x1918(%rip), %rsi      # 0x5254
movq %rax, %rdi
callq 0x2170
movq %rax, %rdi
callq 0x20b0
movl $0x1, %edi
callq 0x21b0
movslq -0x148(%rbp), %rax
movl $0xffffffff, %esi       # imm = 0xFFFFFFFF
cmpl -0x144(%rbp), %eax
jge 0x3972
movzbl -0x100148(%rbp,%rax), %esi
leaq 0x1a87(%rip), %rdi      # 0x5400
xorl %eax, %eax
callq 0x2040
movl $0x3, %edi
callq 0x21b0
movq %rax, %rbx
leaq -0x130(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
jne 0x39c8
jmp 0x39d4
movq %rax, %rbx
leaq -0x110(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x39bc
callq 0x2150
jmp 0x39bc
movq %rax, %rbx
movq -0x100(%rbp), %rdi
testq %rdi, %rdi
je 0x39d4
callq 0x2150
jmp 0x39d4
jmp 0x3a03
movq %rax, %rbx
movq 0x35bd(%rip), %rsi      # 0x6f98
leaq -0x100150(%rbp), %rdi
callq 0x2120
leaq -0x1000d0(%rbp), %rdi
callq 0x2070
jmp 0x3a06
jmp 0x3a03
jmp 0x3a03
movq %rax, %rbx
jmp 0x3a5a
movq %rax, %rbx
jmp 0x3a4e
movq %rax, %rbx
movq -0xa0(%rbp), %rdi
testq %rdi, %rdi
je 0x3a20
callq 0x2150
jmp 0x3a20
jmp 0x3a1d
jmp 0x3a3d
movq %rax, %rbx
movq -0x80(%rbp), %rdi
testq %rdi, %rdi
je 0x3a2e
callq 0x2150
leaq -0x58(%rbp), %rdi
callq 0x3ea4
jmp 0x3a4e
jmp 0x3a3d
jmp 0x3a3d
movq %rax, %rbx
movq -0x60(%rbp), %rdi
testq %rdi, %rdi
je 0x3a4e
callq 0x2150
leaq -0xb8(%rbp), %rdi
callq 0x3ea4
leaq -0xd8(%rbp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3a6f
callq 0x2150
movq %rbx, %rdi
callq 0x2270