contract Ownable {
    
    address public owner;

    event OwnershipTransferred(address from, address to);

    /**
     * The address whcih deploys this contrcat is automatically assgined ownership.
     * */
    function Ownable() public {
        owner = msg.sender;
    }

    /**
     * Functions with this modifier can only be executed by the owner of the contract. 
     * */
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    /**
     * Transfers ownership provided that a valid address is given. This function can 
     * only be called by the owner of the contract. 
     */
    function transferOwnership(address _newOwner) public onlyOwner {
        require(_newOwner != 0x0);
        OwnershipTransferred(owner, _newOwner);
        owner = _newOwner;
    }
}
function transferOwnership(address _newOwner) public onlyOwner {
    require(_newOwner != 0x0);
    OwnershipTransferred(owner, _newOwner);
    owner = _newOwner;
}

/**
 * Transfers ownership provided that a valid address is given. This function can 
 * only be called by the owner of the contract. 
 */