// File: MatthewZMD[P]TetrisDual/concreteboard.cc
// Function: ConcreteBoard::genThis()
void ConcreteBoard::genThis(){
    std::vector<Cell*> cells;
    Coordinate btmLft{3, 0};
    switch (nextType){
        case CellType::I:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 3)));
            break;
        case CellType::J:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            break;
        case CellType::L:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::O:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            break;
        case CellType::S:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::Z:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 2)));
            break;
        case CellType::T:
            cells.emplace_back(&(allCells.at(btmLft.row).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 1)));
            cells.emplace_back(&(allCells.at(btmLft.row - 1).at(btmLft.col + 2)));
            break;
        case CellType::Star:
            break;
        case CellType::E:
            break; // Do nothing
    }
    thisBlock = std::make_shared<Block>(nextType, level->getLevel(), cells);

    nextType = CellType::E;
    notifyObservers();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x320, %rsp            # imm = 0x320
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xd170
movq -0x140(%rbp), %rax
movq $0x3, -0x28(%rbp)
movl 0x58(%rax), %eax
movq %rax, -0x138(%rbp)
subq $0x8, %rax
ja 0x1340d
movq -0x138(%rbp), %rax
leaq 0x1a9a4(%rip), %rcx     # 0x2d3b8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x148(%rbp)
jmp 0x12a3a
movq -0x148(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x150(%rbp)
jmp 0x12a53
movq -0x150(%rbp), %rax
movq %rax, -0x30(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x13e90
jmp 0x12a6d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x158(%rbp)
jmp 0x12a8a
movq -0x158(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x160(%rbp)
jmp 0x12aa7
movq -0x160(%rbp), %rax
movq %rax, -0x48(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x48(%rbp), %rsi
callq 0x13e90
jmp 0x12ac1
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x168(%rbp)
jmp 0x12ade
movq -0x168(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x170(%rbp)
jmp 0x12afc
movq -0x170(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x13e90
jmp 0x12b16
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x178(%rbp)
jmp 0x12b33
movq -0x178(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x3, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x180(%rbp)
jmp 0x12b51
movq -0x180(%rbp), %rax
movq %rax, -0x58(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x58(%rbp), %rsi
callq 0x13e90
jmp 0x12b6b
jmp 0x1340d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x20(%rbp), %rdi
callq 0xd2f0
jmp 0x134b8
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x188(%rbp)
jmp 0x12ba7
movq -0x188(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x190(%rbp)
jmp 0x12bc0
movq -0x190(%rbp), %rax
movq %rax, -0x60(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0x13e90
jmp 0x12bda
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x198(%rbp)
jmp 0x12bfb
movq -0x198(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x1a0(%rbp)
jmp 0x12c14
movq -0x1a0(%rbp), %rax
movq %rax, -0x68(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x68(%rbp), %rsi
callq 0x13e90
jmp 0x12c2e
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x1a8(%rbp)
jmp 0x12c4b
movq -0x1a8(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x1b0(%rbp)
jmp 0x12c68
movq -0x1b0(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x70(%rbp), %rsi
callq 0x13e90
jmp 0x12c82
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x1b8(%rbp)
jmp 0x12c9f
movq -0x1b8(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x1c0(%rbp)
jmp 0x12cbd
movq -0x1c0(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x13e90
jmp 0x12cd7
jmp 0x1340d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x1c8(%rbp)
jmp 0x12cf9
movq -0x1c8(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x1d0(%rbp)
jmp 0x12d12
movq -0x1d0(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x80(%rbp), %rsi
callq 0x13e90
jmp 0x12d2c
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x1d8(%rbp)
jmp 0x12d49
movq -0x1d8(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x1e0(%rbp)
jmp 0x12d66
movq -0x1e0(%rbp), %rax
movq %rax, -0x88(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x88(%rbp), %rsi
callq 0x13e90
jmp 0x12d86
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x1e8(%rbp)
jmp 0x12da3
movq -0x1e8(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x1f0(%rbp)
jmp 0x12dc1
movq -0x1f0(%rbp), %rax
movq %rax, -0x90(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x13e90
jmp 0x12de1
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x1f8(%rbp)
jmp 0x12e02
movq -0x1f8(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x200(%rbp)
jmp 0x12e20
movq -0x200(%rbp), %rax
movq %rax, -0x98(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x98(%rbp), %rsi
callq 0x13e90
jmp 0x12e40
jmp 0x1340d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x208(%rbp)
jmp 0x12e62
movq -0x208(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x210(%rbp)
jmp 0x12e7b
movq -0x210(%rbp), %rax
movq %rax, -0xa0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xa0(%rbp), %rsi
callq 0x13e90
jmp 0x12e9b
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x218(%rbp)
jmp 0x12ebc
movq -0x218(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x220(%rbp)
jmp 0x12ed5
movq -0x220(%rbp), %rax
movq %rax, -0xa8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xa8(%rbp), %rsi
callq 0x13e90
jmp 0x12ef5
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x228(%rbp)
jmp 0x12f16
movq -0x228(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x230(%rbp)
jmp 0x12f33
movq -0x230(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x13e90
jmp 0x12f53
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x238(%rbp)
jmp 0x12f70
movq -0x238(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x240(%rbp)
jmp 0x12f8d
movq -0x240(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xb8(%rbp), %rsi
callq 0x13e90
jmp 0x12fad
jmp 0x1340d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x248(%rbp)
jmp 0x12fcf
movq -0x248(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x250(%rbp)
jmp 0x12fe8
movq -0x250(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xc0(%rbp), %rsi
callq 0x13e90
jmp 0x13008
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x258(%rbp)
jmp 0x13025
movq -0x258(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x260(%rbp)
jmp 0x13042
movq -0x260(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xc8(%rbp), %rsi
callq 0x13e90
jmp 0x13062
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x268(%rbp)
jmp 0x13083
movq -0x268(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x270(%rbp)
jmp 0x130a0
movq -0x270(%rbp), %rax
movq %rax, -0xd0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xd0(%rbp), %rsi
callq 0x13e90
jmp 0x130c0
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x278(%rbp)
jmp 0x130e1
movq -0x278(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x280(%rbp)
jmp 0x130ff
movq -0x280(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xd8(%rbp), %rsi
callq 0x13e90
jmp 0x1311f
jmp 0x1340d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x288(%rbp)
jmp 0x13141
movq -0x288(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x290(%rbp)
jmp 0x1315e
movq -0x290(%rbp), %rax
movq %rax, -0xe0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xe0(%rbp), %rsi
callq 0x13e90
jmp 0x1317e
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x298(%rbp)
jmp 0x1319f
movq -0x298(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x2a0(%rbp)
jmp 0x131b8
movq -0x2a0(%rbp), %rax
movq %rax, -0xe8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x13e90
jmp 0x131d8
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x2a8(%rbp)
jmp 0x131f9
movq -0x2a8(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x2b0(%rbp)
jmp 0x13216
movq -0x2b0(%rbp), %rax
movq %rax, -0xf0(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x13e90
jmp 0x13236
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x2b8(%rbp)
jmp 0x13253
movq -0x2b8(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x2c0(%rbp)
jmp 0x13271
movq -0x2c0(%rbp), %rax
movq %rax, -0xf8(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0xf8(%rbp), %rsi
callq 0x13e90
jmp 0x13291
jmp 0x1340d
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movslq -0x28(%rbp), %rsi
callq 0x14070
movq %rax, -0x2c8(%rbp)
jmp 0x132b3
movq -0x2c8(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x2d0(%rbp)
jmp 0x132d0
movq -0x2d0(%rbp), %rax
movq %rax, -0x100(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x100(%rbp), %rsi
callq 0x13e90
jmp 0x132f0
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x2d8(%rbp)
jmp 0x13311
movq -0x2d8(%rbp), %rdi
movslq -0x24(%rbp), %rsi
callq 0x140b0
movq %rax, -0x2e0(%rbp)
jmp 0x1332a
movq -0x2e0(%rbp), %rax
movq %rax, -0x108(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x108(%rbp), %rsi
callq 0x13e90
jmp 0x1334a
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x2e8(%rbp)
jmp 0x1336b
movq -0x2e8(%rbp), %rdi
movl -0x24(%rbp), %eax
incl %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x2f0(%rbp)
jmp 0x13388
movq -0x2f0(%rbp), %rax
movq %rax, -0x110(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x13e90
jmp 0x133a8
movq -0x140(%rbp), %rdi
addq $0x78, %rdi
movl -0x28(%rbp), %eax
decl %eax
movslq %eax, %rsi
callq 0x14070
movq %rax, -0x2f8(%rbp)
jmp 0x133c9
movq -0x2f8(%rbp), %rdi
movl -0x24(%rbp), %eax
addl $0x2, %eax
movslq %eax, %rsi
callq 0x140b0
movq %rax, -0x300(%rbp)
jmp 0x133e7
movq -0x300(%rbp), %rax
movq %rax, -0x118(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x118(%rbp), %rsi
callq 0x13e90
jmp 0x13407
jmp 0x1340d
jmp 0x1340d
jmp 0x1340d
movq -0x140(%rbp), %rdi
movq %rdi, %rax
addq $0x58, %rax
movq %rax, -0x310(%rbp)
addq $0x60, %rdi
callq 0x13b10
movq %rax, %rdi
callq 0x24930
movl %eax, -0x304(%rbp)
jmp 0x1343b
movq -0x310(%rbp), %rsi
movl -0x304(%rbp), %eax
movl %eax, -0x12c(%rbp)
leaq -0x128(%rbp), %rdi
leaq -0x12c(%rbp), %rdx
leaq -0x20(%rbp), %rcx
callq 0x140f0
jmp 0x13467
movq -0x140(%rbp), %rdi
addq $0x48, %rdi
leaq -0x128(%rbp), %rsi
movq %rsi, -0x318(%rbp)
callq 0x13f90
movq -0x318(%rbp), %rdi
callq 0x13e50
movq -0x140(%rbp), %rdi
movl $0x7, 0x58(%rdi)
callq 0x25430
jmp 0x134a6
leaq -0x20(%rbp), %rdi
callq 0xd2f0
addq $0x320, %rsp            # imm = 0x320
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x6630
nopw %cs:(%rax,%rax)