// File: rcolomina[P]the_charmed_house/src/operaciones.cpp
// Function: Colocar::execute()
void Colocar::execute(){

    bool existOrigin  = inventory.get_existe_objeto(parametro);	 
    bool existDestiny = (*scene)->get_existe_objeto_escenario(parametro2);
    bool p1void = (parametro=="");
    bool p2void = (parametro2=="");

    if(p1void)
    {
        // TODO: Parametrise this phrase
        cout<<Color::magenta<<"Colocar que?"<<Color::def<<endl;
    }

    if(not p1void and p2void)
    {
        // TODO: Parametrise this phrase
        cout<<Color::magenta<<"Colocar "<<parametro<<" sobre que?"<<Color::def<<endl;
    }

    if(not p1void and not p2void)
    {
        if(existOrigin)
        {			 
            if(existDestiny)
            {
                Objeto *obj1=inventory.get_objeto(parametro);
                Objeto *obj2=(*scene)->get_objeto(parametro2);

                assert(obj1!=NULL);
                assert(obj2!=NULL);								 
						  
                bool isKey  =  true;//obj1->get_value<bool>("key");
                bool isLock =  true;//obj2->get_value<bool>("lock");
                if(isKey and isLock)
                {								
                    int code1 = obj1->get_value<int>("code");
                    int code2 = obj2->get_value<int>("code");
                    if(code1==code2)
                    {
                        // TODO: Parametrise this phrase										
                        cout<<Color::yellow<<"Has colocado "<<parametro<<" sobre "<<parametro2;
                        cout<<". Un mecanismo se ha activado."<<Color::def<<endl;			
                        IEvent* event=obj2->activate_event();	
                        if(event!=NULL)
                            eventsQueue.push(event);
                    }
                    else
                    {
                        // TODO: Parametrise this phrase
                        cout<<Color::magenta<<"Has colocado "<<parametro<<" sobre "<<parametro2;
                        cout<<Color::magenta<<", pero nada sucede."<<Color::def<<endl;
                    }
										
                }						  
                else
                {
                    // TODO: Parametrise this phrase							      
                    cout<<Color::red<<"No puedes hacer eso."<<Color::def<<endl;
                }								 
						  
            }
            else
            {

                // TODO: Parametrise this phrase								 
                cout<<Color::red<<"No hay nada parecido a "<<parametro2<<Color::def<<endl;
            }
        }
        else
        {
            // TODO: Parametrise this phrase								 
            cout<<Color::red<<"No puedes colocar "<<parametro<<" sobre "<<parametro2<<Color::def<<endl;
        }
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x140, %rsp            # imm = 0x140
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq 0x30(%rax), %rcx
movq %rcx, -0xe8(%rbp)
movq 0x40(%rax), %rsi
leaq -0x30(%rbp), %rdi
movq %rdi, -0xe0(%rbp)
callq 0x5180
movq -0xe8(%rbp), %rdi
movq -0xe0(%rbp), %rsi
callq 0x38550
movb %al, -0xd1(%rbp)
jmp 0x46094
leaq -0x30(%rbp), %rdi
callq 0x5748
movb -0xd1(%rbp), %al
movq -0xf0(%rbp), %rcx
andb $0x1, %al
movb %al, -0x9(%rbp)
movq 0x28(%rcx), %rax
movq 0x48(%rcx), %rsi
movq (%rax), %rax
movq %rax, -0x108(%rbp)
leaq -0x60(%rbp), %rdi
movq %rdi, -0x100(%rbp)
callq 0x5180
movq -0x108(%rbp), %rdi
movq -0x100(%rbp), %rsi
callq 0x2c800
movb %al, -0xf1(%rbp)
jmp 0x460ec
leaq -0x60(%rbp), %rdi
callq 0x5748
movb -0xf1(%rbp), %cl
movq -0xf0(%rbp), %rax
andb $0x1, %cl
movb %cl, -0x3d(%rbp)
movq 0x40(%rax), %rdi
leaq 0xa528(%rip), %rsi      # 0x5063b
callq 0x2d7d0
movb %al, %cl
movq -0xf0(%rbp), %rax
andb $0x1, %cl
movb %cl, -0x61(%rbp)
movq 0x48(%rax), %rdi
leaq 0xa509(%rip), %rsi      # 0x5063b
callq 0x2d7d0
andb $0x1, %al
movb %al, -0x62(%rbp)
testb $0x1, -0x61(%rbp)
je 0x461b8
movq 0x2ae6f(%rip), %rdi     # 0x70fb8
leaq 0x32638(%rip), %rsi     # 0x78788
callq 0x46680
movq %rax, %rdi
leaq 0xaf12(%rip), %rsi      # 0x51071
callq 0x53a0
movq %rax, %rdi
leaq 0x32602(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2ae13(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x461b8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x5748
jmp 0x46673
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x5748
jmp 0x46673
testb $0x1, -0x61(%rbp)
jne 0x46226
testb $0x1, -0x62(%rbp)
je 0x46226
movq 0x2aded(%rip), %rdi     # 0x70fb8
leaq 0x325b6(%rip), %rsi     # 0x78788
callq 0x46680
movq %rax, %rdi
leaq 0xae9d(%rip), %rsi      # 0x5107e
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0xae84(%rip), %rsi      # 0x51087
callq 0x53a0
movq %rax, %rdi
leaq 0x3255e(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2ad6f(%rip), %rsi     # 0x70f90
callq 0x5400
testb $0x1, -0x61(%rbp)
jne 0x4666a
testb $0x1, -0x62(%rbp)
jne 0x4666a
testb $0x1, -0x9(%rbp)
je 0x465f3
testb $0x1, -0x3d(%rbp)
je 0x4659e
movq -0xf0(%rbp), %rax
movq 0x30(%rax), %rcx
movq %rcx, -0x120(%rbp)
movq 0x40(%rax), %rsi
leaq -0x90(%rbp), %rdi
movq %rdi, -0x118(%rbp)
callq 0x5180
movq -0x120(%rbp), %rdi
movq -0x118(%rbp), %rsi
callq 0x385e0
movq %rax, -0x110(%rbp)
jmp 0x46293
leaq -0x90(%rbp), %rdi
callq 0x5748
movq -0x110(%rbp), %rax
movq -0xf0(%rbp), %rcx
movq %rax, -0x70(%rbp)
movq 0x28(%rcx), %rax
movq 0x48(%rcx), %rsi
movq (%rax), %rax
movq %rax, -0x138(%rbp)
leaq -0xb8(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x5180
movq -0x138(%rbp), %rdi
movq -0x130(%rbp), %rsi
callq 0x466d0
movq %rax, -0x128(%rbp)
jmp 0x462f2
leaq -0xb8(%rbp), %rdi
callq 0x5748
movq -0x128(%rbp), %rax
movq %rax, -0x98(%rbp)
cmpq $0x0, -0x70(%rbp)
je 0x46315
jmp 0x4636e
leaq 0xad77(%rip), %rdi      # 0x51093
leaq 0xad7b(%rip), %rsi      # 0x5109e
movl $0x12f, %edx            # imm = 0x12F
leaq 0xad83(%rip), %rcx      # 0x510b2
callq 0x5250
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x90(%rbp), %rdi
callq 0x5748
jmp 0x46673
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0xb8(%rbp), %rdi
callq 0x5748
jmp 0x46673
cmpq $0x0, -0x98(%rbp)
je 0x4637a
jmp 0x46399
leaq 0xad51(%rip), %rdi      # 0x510d2
leaq 0xad16(%rip), %rsi      # 0x5109e
movl $0x130, %edx            # imm = 0x130
leaq 0xad1e(%rip), %rcx      # 0x510b2
callq 0x5250
movb $0x1, -0xb9(%rbp)
movb $0x1, -0xba(%rbp)
testb $0x1, -0xb9(%rbp)
je 0x4655c
testb $0x1, -0xba(%rbp)
je 0x4655c
movq -0x70(%rbp), %rdi
leaq 0xad11(%rip), %rsi      # 0x510dd
callq 0x41780
movl %eax, -0xc0(%rbp)
movq -0x98(%rbp), %rdi
leaq 0xacf8(%rip), %rsi      # 0x510dd
callq 0x41780
movl %eax, -0xc4(%rbp)
movl -0xc0(%rbp), %eax
cmpl -0xc4(%rbp), %eax
jne 0x464c3
movq 0x2abaf(%rip), %rdi     # 0x70fb8
leaq 0x32370(%rip), %rsi     # 0x78780
callq 0x46680
movq %rax, %rdi
leaq 0xacc3(%rip), %rsi      # 0x510e2
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0xacaf(%rip), %rsi      # 0x510f0
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0x5350
movq 0x2ab58(%rip), %rdi     # 0x70fb8
leaq 0xac91(%rip), %rsi      # 0x510f8
callq 0x53a0
movq %rax, %rdi
leaq 0x322fa(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2ab0b(%rip), %rsi     # 0x70f90
callq 0x5400
movq -0x98(%rbp), %rdi
callq 0x41890
movq %rax, -0xd0(%rbp)
cmpq $0x0, -0xd0(%rbp)
je 0x464be
movq -0xf0(%rbp), %rax
movq 0x38(%rax), %rdi
movq -0xd0(%rbp), %rsi
callq 0x33180
jmp 0x4655a
movq 0x2aaee(%rip), %rdi     # 0x70fb8
leaq 0x322b7(%rip), %rsi     # 0x78788
callq 0x46680
movq %rax, %rdi
leaq 0xac02(%rip), %rsi      # 0x510e2
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0xabee(%rip), %rsi      # 0x510f0
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0x5350
movq 0x2aa97(%rip), %rdi     # 0x70fb8
leaq 0x32260(%rip), %rsi     # 0x78788
callq 0x46680
movq %rax, %rdi
leaq 0xabe0(%rip), %rsi      # 0x51117
callq 0x53a0
movq %rax, %rdi
leaq 0x3222a(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2aa3b(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x4659c
movq 0x2aa55(%rip), %rdi     # 0x70fb8
leaq 0x3220e(%rip), %rsi     # 0x78778
callq 0x46680
movq %rax, %rdi
leaq 0xabb2(%rip), %rsi      # 0x5112b
callq 0x53a0
movq %rax, %rdi
leaq 0x321e8(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2a9f9(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x465f1
movq 0x2aa13(%rip), %rdi     # 0x70fb8
leaq 0x321cc(%rip), %rsi     # 0x78778
callq 0x46680
movq %rax, %rdi
leaq 0xab85(%rip), %rsi      # 0x51140
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0x32193(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2a9a4(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x46668
movq 0x2a9be(%rip), %rdi     # 0x70fb8
leaq 0x32177(%rip), %rsi     # 0x78778
callq 0x46680
movq %rax, %rdi
leaq 0xab48(%rip), %rsi      # 0x51158
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x40(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0xaabe(%rip), %rsi      # 0x510f0
callq 0x53a0
movq %rax, %rdi
movq -0xf0(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0x5350
movq %rax, %rdi
leaq 0x3211c(%rip), %rsi     # 0x78770
callq 0x46680
movq %rax, %rdi
movq 0x2a92d(%rip), %rsi     # 0x70f90
callq 0x5400
jmp 0x4666a
addq $0x140, %rsp            # imm = 0x140
popq %rbp
retq
movq -0x38(%rbp), %rdi
callq 0x56c0
nopl (%rax)