contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );
    
    constructor() internal {
        address msgSender = _msgSender();
        _owner =msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
     function owner() public view returns (address) {
        return _owner;
    }



    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }



    /**

     * @dev Leaves the contract without owner. It will not be possible to call

     * `onlyOwner` functions anymore. Can only be called by the current owner.

     *

     * NOTE: Renouncing ownership will leave the contract without an owner,

     * thereby removing any functionality that is only available to the owner.

     */

    function renounceOwnership() public virtual onlyOwner {

        emit OwnershipTransferred(_owner, address(0));

        _owner = address(0);

    }



    /**

     * @dev Transfers ownership of the contract to a new account (`newOwner`).

     * Can only be called by the current owner.

     */

    function transferOwnership(address newOwner) public virtual onlyOwner {

        require(

            newOwner != address(0),

            "Ownable: new owner is the zero address"

        );

        emit OwnershipTransferred(_owner, newOwner);

        _owner = newOwner;

    }

}
function transferOwnership(address newOwner) public virtual onlyOwner {

    require(

        newOwner != address(0),

        "Ownable: new owner is the zero address"

    );

    emit OwnershipTransferred(_owner, newOwner);

    _owner = newOwner;

}

/**
 
 * @dev Transfers ownership of the contract to a new account (`newOwner`).
 
 * Can only be called by the current owner.
 
 */