contract Ownable {
    address public owner; 
    address public newOwner; 

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); 

    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(msg.sender == owner); // Requiring that the function caller must be owner.
        _;
    }

    /**
    * @dev Allows the current owner to transfer control of the contract to a newOwner.
    * @param _newOwner The address to transfer ownership to.
    */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(address(0) != _newOwner); 
        newOwner = _newOwner; // Setting the newOwner.
    }
    
    function acceptOwnership() public {
        require(msg.sender == newOwner); // Requiring that the caller must be newOwner.
        emit OwnershipTransferred(owner, msg.sender); // Triggering the OwnershipTransferred event.
        owner = msg.sender;
        newOwner = address(0); // Resetting the newOwner as zero.
    }
}
function transferOwnership(address _newOwner) public onlyOwner {
    require(address(0) != _newOwner); 
    newOwner = _newOwner; // Setting the newOwner.
}

/**
 * @dev Allows the current owner to transfer control of the contract to a newOwner.
 * @param _newOwner The address to transfer ownership to.
 */