// File: t0mm4rx[P]piscine_cpp/day05/ex02/main.cpp
// Function: main
int main(void)
{
	Bureaucrat				john("John", 4);
	Bureaucrat				johnson("Johnson", 140);
	ShrubberyCreationForm	form1("tree");
	RobotomyRequestForm		form2("Micheal");
	PresidentialPardonForm	form3("Johson");

	johnson.signForm(form1);
	johnson.executeForm(form1);
	john.executeForm(form1);
	john.executeForm(form2);
	john.signForm(form2);
	john.executeForm(form2);
	johnson.signForm(form3);
	john.executeForm(form3);
	john.signForm(form3);
	john.executeForm(form3);
	return (0);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x260, %rsp            # imm = 0x260
movl $0x0, -0x4(%rbp)
leaq -0x51(%rbp), %rdi
movq %rdi, -0x240(%rbp)
callq 0x2230
movq -0x240(%rbp), %rdx
leaq 0xeaf(%rip), %rsi       # 0x541f
leaq -0x50(%rbp), %rdi
callq 0x38a0
jmp 0x457b
leaq -0x30(%rbp), %rdi
leaq -0x50(%rbp), %rsi
movl $0x4, %edx
callq 0x2590
jmp 0x458f
leaq -0x50(%rbp), %rdi
callq 0x2298
leaq -0x51(%rbp), %rdi
callq 0x2150
leaq -0xb1(%rbp), %rdi
movq %rdi, -0x248(%rbp)
callq 0x2230
movq -0x248(%rbp), %rdx
leaq 0xe62(%rip), %rsi       # 0x5424
leaq -0xb0(%rbp), %rdi
callq 0x38a0
jmp 0x45d0
leaq -0x90(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
movl $0x8c, %edx
callq 0x2590
jmp 0x45ea
leaq -0xb0(%rbp), %rdi
callq 0x2298
leaq -0xb1(%rbp), %rdi
callq 0x2150
leaq -0x131(%rbp), %rdi
movq %rdi, -0x250(%rbp)
callq 0x2230
movq -0x250(%rbp), %rdx
leaq 0xe09(%rip), %rsi       # 0x542c
leaq -0x130(%rbp), %rdi
callq 0x38a0
jmp 0x4631
leaq -0x110(%rbp), %rdi
leaq -0x130(%rbp), %rsi
callq 0x3f60
jmp 0x4646
leaq -0x130(%rbp), %rdi
callq 0x2298
leaq -0x131(%rbp), %rdi
callq 0x2150
leaq -0x1b1(%rbp), %rdi
movq %rdi, -0x258(%rbp)
callq 0x2230
movq -0x258(%rbp), %rdx
leaq 0xdb2(%rip), %rsi       # 0x5431
leaq -0x1b0(%rbp), %rdi
callq 0x38a0
jmp 0x468d
leaq -0x190(%rbp), %rdi
leaq -0x1b0(%rbp), %rsi
callq 0x3be0
jmp 0x46a2
leaq -0x1b0(%rbp), %rdi
callq 0x2298
leaq -0x1b1(%rbp), %rdi
callq 0x2150
leaq -0x231(%rbp), %rdi
movq %rdi, -0x260(%rbp)
callq 0x2230
movq -0x260(%rbp), %rdx
leaq 0xd5e(%rip), %rsi       # 0x5439
leaq -0x230(%rbp), %rdi
callq 0x38a0
jmp 0x46e9
leaq -0x210(%rbp), %rdi
leaq -0x230(%rbp), %rsi
callq 0x3540
jmp 0x46fe
leaq -0x230(%rbp), %rdi
callq 0x2298
leaq -0x231(%rbp), %rdi
callq 0x2150
leaq -0x90(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x2820
jmp 0x472b
leaq -0x90(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x2980
jmp 0x4740
leaq -0x30(%rbp), %rdi
leaq -0x110(%rbp), %rsi
callq 0x2980
jmp 0x4752
leaq -0x30(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2980
jmp 0x4764
leaq -0x30(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2820
jmp 0x4776
leaq -0x30(%rbp), %rdi
leaq -0x190(%rbp), %rsi
callq 0x2980
jmp 0x4788
leaq -0x90(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x2820
jmp 0x479d
leaq -0x30(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x2980
jmp 0x47af
leaq -0x30(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x2820
jmp 0x47c1
leaq -0x30(%rbp), %rdi
leaq -0x210(%rbp), %rsi
callq 0x2980
jmp 0x47d3
movl $0x0, -0x4(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x3790
leaq -0x190(%rbp), %rdi
callq 0x3e30
leaq -0x110(%rbp), %rdi
callq 0x41b0
leaq -0x90(%rbp), %rdi
callq 0x2770
leaq -0x30(%rbp), %rdi
callq 0x2770
movl -0x4(%rbp), %eax
addq $0x260, %rsp            # imm = 0x260
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x4842
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x2298
leaq -0x51(%rbp), %rdi
callq 0x2150
jmp 0x496b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x4876
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xb0(%rbp), %rdi
callq 0x2298
leaq -0xb1(%rbp), %rdi
callq 0x2150
jmp 0x4962
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x48ad
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x130(%rbp), %rdi
callq 0x2298
leaq -0x131(%rbp), %rdi
callq 0x2150
jmp 0x4956
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x48e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x1b0(%rbp), %rdi
callq 0x2298
leaq -0x1b1(%rbp), %rdi
callq 0x2150
jmp 0x494a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
jmp 0x4918
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x230(%rbp), %rdi
callq 0x2298
leaq -0x231(%rbp), %rdi
callq 0x2150
jmp 0x493e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x3790
leaq -0x190(%rbp), %rdi
callq 0x3e30
leaq -0x110(%rbp), %rdi
callq 0x41b0
leaq -0x90(%rbp), %rdi
callq 0x2770
leaq -0x30(%rbp), %rdi
callq 0x2770
movq -0x60(%rbp), %rdi
callq 0x2220