contract Owned is Ownable {
    address private _newOwner;

    /**
     * @dev Initiate transfer ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner. Current owner will still be owner until
     * new owner accept ownership.
     * @param newOwner new owner address
     */
    function transferOwnership(address newOwner) public override onlyOwner {
        require(newOwner != address(0), "New owner is the zero address");
        _newOwner = newOwner;
    }

    /**
     * @dev Allows new owner to accept ownership of the contract.
     */
    function acceptOwnership() public {
        require(msg.sender == _newOwner, "Caller is not the new owner");
        emit OwnershipTransferred(_owner, _newOwner);
        _owner = _newOwner;
        _newOwner = address(0);
    }
}
/**
 * @dev Contract module extends Ownable and provide a way for safe transfer ownership.
 * New owner has to call acceptOwnership in order to complete ownership trasnfer.
 */
function transferOwnership(address newOwner) public override onlyOwner {
    require(newOwner != address(0), "New owner is the zero address");
    _newOwner = newOwner;
}

/**
 * @dev Initiate transfer ownership of the contract to a new account (`newOwner`).
 * Can only be called by the current owner. Current owner will still be owner until
 * new owner accept ownership.
 * @param newOwner new owner address
 */