contract MLK is ERC721A, ContextMixin, NativeMetaTransaction, Ownable {
    using SafeMath for uint256;

    string public _baseTokenURI = "";

    address proxyRegistryAddress;

    constructor(address _proxyRegistryAddress)
        ERC721A("Meta Lion Kingdom", "MLK")
    {
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    /**
        @dev Returns the prepended path to tokenURI's
     */
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    /**
        @dev Start from 1 to lower initial gas
     */
    function _startTokenId() internal view virtual override returns (uint256) {
        return 1;
    }

    /**
     * @dev Mints a token to an address with a tokenURI.
     * @param _to address of the future owner of the token
     * @param _quantity number of ERC721 tokens to mint
     */
    function mintTo(address _to, uint256 _quantity) public onlyOwner {
        _safeMint(_to, _quantity);
    }

    /**
        @dev Sets the _baseTokenURI prepended to tokenURI's
      * @param __baseTokenURI IPFS URI used to resolve metadata
     */

    function setBaseTokenURI(string memory __baseTokenURI) public onlyOwner {
        _baseTokenURI = __baseTokenURI;
    }

    /**
     * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-less listings.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        override
        returns (bool)
    {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(owner)) == operator) {
            return true;
        }

        return super.isApprovedForAll(owner, operator);
    }

    /**
     * This is used instead of msg.sender as transactions won't be sent by the original token owner, but by OpenSea.
     */
    function _msgSender() internal view override returns (address sender) {
        return ContextMixin.msgSender();
    }
}
function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
}

/**
 @dev Start from 1 to lower initial gas
 */