contract Shitties is ERC721, ERC721Enumerable, Ownable, ERC721Burnable {
    
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;
    
    uint public maxSupply = 100;

    constructor() ERC721("Shitties", "SHIT") {
        _tokenIdCounter.increment();
    }
    
    function _baseURI() internal pure override returns (string memory) {
        return "ipfs://Qmdbx5k1YKRkGFJSiHRgG2HFi4isfAbemLT7VqiALo6Sdq/";
    }

    function safeMint() external onlyOwner {
        require(_tokenIdCounter.current() < 101, "Sale finished!");
        _safeMint(msg.sender, _tokenIdCounter.current());
        _tokenIdCounter.increment();
    }
    
    function safeMintBatch(uint amount) external onlyOwner {
        require(_tokenIdCounter.current() < 101, "Sale finished!");
        for (uint i=0; i<amount; i++){
            _safeMint(msg.sender, _tokenIdCounter.current());
            _tokenIdCounter.increment();
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 tokenId)
        internal
        override(ERC721, ERC721Enumerable)
    {
        super._beforeTokenTransfer(from, to, tokenId);
    }

    // The following functions are overrides required by Solidity.

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721, ERC721Enumerable)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}
function supportsInterface(bytes4 interfaceId)
    public
    view
    override(ERC721, ERC721Enumerable)
    returns (bool)
{
    return super.supportsInterface(interfaceId);
}

// The following functions are overrides required by Solidity.