creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/1_Storage.sol": {
        "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n\nimport \"@openzeppelin/contracts/access/Ownable.sol\";\n\ninterface IUniswapV2Router01 {\n    function factory() external pure returns (address);\n    function WETH() external pure returns (address);\n\n    function addLiquidity(\n        address tokenA,\n        address tokenB,\n        uint amountADesired,\n        uint amountBDesired,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline\n    ) external returns (uint amountA, uint amountB, uint liquidity);\n    function addLiquidityETH(\n        address token,\n        uint amountTokenDesired,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline\n    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);\n    function removeLiquidity(\n        address tokenA,\n        address tokenB,\n        uint liquidity,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline\n    ) external returns (uint amountA, uint amountB);\n    function removeLiquidityETH(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline\n    ) external returns (uint amountToken, uint amountETH);\n    function removeLiquidityWithPermit(\n        address tokenA,\n        address tokenB,\n        uint liquidity,\n        uint amountAMin,\n        uint amountBMin,\n        address to,\n        uint deadline,\n        bool approveMax, uint8 v, bytes32 r, bytes32 s\n    ) external returns (uint amountA, uint amountB);\n    function removeLiquidityETHWithPermit(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline,\n        bool approveMax, uint8 v, bytes32 r, bytes32 s\n    ) external returns (uint amountToken, uint amountETH);\n    function swapExactTokensForTokens(\n        uint amountIn,\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external returns (uint[] memory amounts);\n    function swapTokensForExactTokens(\n        uint amountOut,\n        uint amountInMax,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external returns (uint[] memory amounts);\n    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)\n        external\n        payable\n        returns (uint[] memory amounts);\n    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)\n        external\n        returns (uint[] memory amounts);\n    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)\n        external\n        returns (uint[] memory amounts);\n    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)\n        external\n        payable\n        returns (uint[] memory amounts);\n\n    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);\n    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);\n    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);\n    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);\n    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);\n}\n\ninterface IUniswapV2Router02 is IUniswapV2Router01 {\n    function removeLiquidityETHSupportingFeeOnTransferTokens(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline\n    ) external returns (uint amountETH);\n    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(\n        address token,\n        uint liquidity,\n        uint amountTokenMin,\n        uint amountETHMin,\n        address to,\n        uint deadline,\n        bool approveMax, uint8 v, bytes32 r, bytes32 s\n    ) external returns (uint amountETH);\n\n    function swapExactTokensForTokensSupportingFeeOnTransferTokens(\n        uint amountIn,\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external;\n    function swapExactETHForTokensSupportingFeeOnTransferTokens(\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external payable;\n    function swapExactTokensForETHSupportingFeeOnTransferTokens(\n        uint amountIn,\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external;\n}\n\ninterface IERC20 {\n    function totalSupply() external view returns (uint256);\n\n    function balanceOf(address account) external view returns (uint256);\n\n    function transfer(\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    function allowance(\n        address owner,\n        address spender\n    ) external view returns (uint256);\n\n    function approve(address spender, uint256 amount) external returns (bool);\n\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) external returns (bool);\n\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(\n        address indexed owner,\n        address indexed spender,\n        uint256 value\n    );\n}\n\ninterface IERC20Metadata is IERC20 {\n    function name() external view returns (string memory);\n\n    function symbol() external view returns (string memory);\n\n    function decimals() external view returns (uint8);\n}\n\nlibrary Address {\n    function isContract(address account) internal view returns (bool) {\n        return account.code.length > 0;\n    }\n\n    function sendValue(\n        address payable recipient,\n        uint256 amount\n    ) internal returns (bool) {\n        require(\n            address(this).balance >= amount,\n            \"Address: insufficient balance\"\n        );\n\n        (bool success, ) = recipient.call{value: amount}(\"\");\n        return success;\n    }\n\n    function functionCall(\n        address target,\n        bytes memory data\n    ) internal returns (bytes memory) {\n        return\n            functionCallWithValue(\n                target,\n                data,\n                0,\n                \"Address: low-level call failed\"\n            );\n    }\n\n    function functionCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        return functionCallWithValue(target, data, 0, errorMessage);\n    }\n\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value\n    ) internal returns (bytes memory) {\n        return\n            functionCallWithValue(\n                target,\n                data,\n                value,\n                \"Address: low-level call with value failed\"\n            );\n    }\n\n    function functionCallWithValue(\n        address target,\n        bytes memory data,\n        uint256 value,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        require(\n            address(this).balance >= value,\n            \"Address: insufficient balance for call\"\n        );\n        (bool success, bytes memory returndata) = target.call{value: value}(\n            data\n        );\n        return\n            verifyCallResultFromTarget(\n                target,\n                success,\n                returndata,\n                errorMessage\n            );\n    }\n\n    function functionStaticCall(\n        address target,\n        bytes memory data\n    ) internal view returns (bytes memory) {\n        return\n            functionStaticCall(\n                target,\n                data,\n                \"Address: low-level static call failed\"\n            );\n    }\n\n    function functionStaticCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.staticcall(data);\n        return\n            verifyCallResultFromTarget(\n                target,\n                success,\n                returndata,\n                errorMessage\n            );\n    }\n\n    function functionDelegateCall(\n        address target,\n        bytes memory data\n    ) internal returns (bytes memory) {\n        return\n            functionDelegateCall(\n                target,\n                data,\n                \"Address: low-level delegate call failed\"\n            );\n    }\n\n    function functionDelegateCall(\n        address target,\n        bytes memory data,\n        string memory errorMessage\n    ) internal returns (bytes memory) {\n        (bool success, bytes memory returndata) = target.delegatecall(data);\n        return\n            verifyCallResultFromTarget(\n                target,\n                success,\n                returndata,\n                errorMessage\n            );\n    }\n\n    function verifyCallResultFromTarget(\n        address target,\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal view returns (bytes memory) {\n        if (success) {\n            if (returndata.length == 0) {\n                // only check isContract if the call was successful and the return data is empty\n                // otherwise we already know that it was a contract\n                require(isContract(target), \"Address: call to non-contract\");\n            }\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function verifyCallResult(\n        bool success,\n        bytes memory returndata,\n        string memory errorMessage\n    ) internal pure returns (bytes memory) {\n        if (success) {\n            return returndata;\n        } else {\n            _revert(returndata, errorMessage);\n        }\n    }\n\n    function _revert(\n        bytes memory returndata,\n        string memory errorMessage\n    ) private pure {\n        // Look for revert reason and bubble it up if present\n        if (returndata.length > 0) {\n            // The easiest way to bubble the revert reason is using memory via assembly\n            /// @solidity memory-safe-assembly\n            assembly {\n                let returndata_size := mload(returndata)\n                revert(add(32, returndata), returndata_size)\n            }\n        } else {\n            revert(errorMessage);\n        }\n    }\n}\ncontract ERC20 is Context, IERC20, IERC20Metadata {\n    mapping(address => uint256) private _balances;\n\n    mapping(address => mapping(address => uint256)) private _allowances;\n\n    uint256 private _totalSupply;\n\n    string private _name;\n    string private _symbol;\n\n    constructor(string memory name_, string memory symbol_) {\n        _name = name_;\n        _symbol = symbol_;\n    }\n\n    function name() public view virtual override returns (string memory) {\n        return _name;\n    }\n\n    function symbol() public view virtual override returns (string memory) {\n        return _symbol;\n    }\n\n    function decimals() public view virtual override returns (uint8) {\n        return 18;\n    }\n\n    function totalSupply() public view virtual override returns (uint256) {\n        return _totalSupply;\n    }\n\n    function balanceOf(\n        address account\n    ) public view virtual override returns (uint256) {\n        return _balances[account];\n    }\n\n    function transfer(\n        address recipient,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        _transfer(_msgSender(), recipient, amount);\n        return true;\n    }\n\n    function allowance(\n        address owner,\n        address spender\n    ) public view virtual override returns (uint256) {\n        return _allowances[owner][spender];\n    }\n\n    function approve(\n        address spender,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        _approve(_msgSender(), spender, amount);\n        return true;\n    }\n\n    function transferFrom(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) public virtual override returns (bool) {\n        uint256 currentAllowance = _allowances[sender][_msgSender()];\n        if (currentAllowance != type(uint256).max) {\n            require(\n                currentAllowance >= amount,\n                \"ERC20: transfer amount exceeds allowance\"\n            );\n            unchecked {\n                _approve(sender, _msgSender(), currentAllowance - amount);\n            }\n        }\n\n        _transfer(sender, recipient, amount);\n\n        return true;\n    }\n\n    function increaseAllowance(\n        address spender,\n        uint256 addedValue\n    ) public virtual returns (bool) {\n        _approve(\n            _msgSender(),\n            spender,\n            _allowances[_msgSender()][spender] + addedValue\n        );\n        return true;\n    }\n\n    function decreaseAllowance(\n        address spender,\n        uint256 subtractedValue\n    ) public virtual returns (bool) {\n        uint256 currentAllowance = _allowances[_msgSender()][spender];\n        require(\n            currentAllowance >= subtractedValue,\n            \"ERC20: decreased allowance below zero\"\n        );\n        unchecked {\n            _approve(_msgSender(), spender, currentAllowance - subtractedValue);\n        }\n\n        return true;\n    }\n\n    function _transfer(\n        address sender,\n        address recipient,\n        uint256 amount\n    ) internal virtual {\n        require(sender != address(0), \"ERC20: transfer from the zero address\");\n        require(recipient != address(0), \"ERC20: transfer to the zero address\");\n\n        _beforeTokenTransfer(sender, recipient, amount);\n\n        uint256 senderBalance = _balances[sender];\n        require(\n            senderBalance >= amount,\n            \"ERC20: transfer amount exceeds balance\"\n        );\n        unchecked {\n            _balances[sender] = senderBalance - amount;\n        }\n        _balances[recipient] += amount;\n\n        emit Transfer(sender, recipient, amount);\n\n        _afterTokenTransfer(sender, recipient, amount);\n    }\n\n    function _mint(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: mint to the zero address\");\n\n        _beforeTokenTransfer(address(0), account, amount);\n\n        _totalSupply += amount;\n        _balances[account] += amount;\n        emit Transfer(address(0), account, amount);\n\n        _afterTokenTransfer(address(0), account, amount);\n    }\n\n    function _burn(address account, uint256 amount) internal virtual {\n        require(account != address(0), \"ERC20: burn from the zero address\");\n\n        _beforeTokenTransfer(account, address(0), amount);\n\n        uint256 accountBalance = _balances[account];\n        require(accountBalance >= amount, \"ERC20: burn amount exceeds balance\");\n        unchecked {\n            _balances[account] = accountBalance - amount;\n        }\n        _totalSupply -= amount;\n\n        emit Transfer(account, address(0), amount);\n\n        _afterTokenTransfer(account, address(0), amount);\n    }\n\n    function _approve(\n        address owner,\n        address spender,\n        uint256 amount\n    ) internal virtual {\n        require(owner != address(0), \"ERC20: approve from the zero address\");\n        require(spender != address(0), \"ERC20: approve to the zero address\");\n\n        _allowances[owner][spender] = amount;\n        emit Approval(owner, spender, amount);\n    }\n\n    function _beforeTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n\n    function _afterTokenTransfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal virtual {}\n}\ncontract Mindx is ERC20, Ownable {\n    using Address for address payable;\n\n    mapping(address => bool) public _isExcludedMaxTransactionAmount;\n    mapping(address => bool) public _automatedMarketMaker;\n    uint256 public liquidityFeeOnBuy;\n    uint256 public liquidityFeeOnSell;\n    uint256 public RevenueShare;\n    uint256 public OwnerShare = 60; /*60% of 5% */\n    bool private swapping;\n    bool public tradingEnabled;\n    uint256 public initial_tax = 20; /* 20% */ \n\n    bool inswapAndReward;\n    bool public swapAndRewardEnabled;\n    IUniswapV2Router02 public uniswapV2Router;\n    uint256 private numTokensSellToShareRevenue = 10 ** 5 * 1e18;\n    uint256 public second_buy_limit = 7 minutes; /* 7 min */ \n    uint256 public initial_inject_timestamp; /* adding liquidity time */ \n    address immutable public TechTeam =  0xC38698B40d165eA931ECEE758Ad89DAbDB5B0446;\n    address public TreasuryRevenue =     0xc5f5e85AAe52f2A8Ef4677504A90a4E80D3551a4;\n    address public TreasuryOwner =       0x3833Bf6Dce090a99EC88e04EF61B97da27711F95;\n    address immutable public Marketing = 0x55d9642A5EDcadf3aBf78367288d0FA3341ec87f;\n    address immutable public CEX      =  0xDdbaf6538e60A5830AbB2820e54f584298f2cF8e;\n    address immutable public PreSale  =  0x47C508965ff4610fCAC3C5E099e7974d3aBFDA18;\n    address immutable public CReward  =  0x7633776542480BDE497Bf0994E3123c65669A7BF;\n    address immutable public Surplus  =  0xDee945d5CfB80Da7C746355dBC7FCf239Ae1a8e7;\n\n    mapping (address => uint256) public _tierTimestamp;\n    mapping (address => bool) public isBot;\n    mapping (address => uint256) public _transactorLastblock;\n\n    event ExcludeFromFees(address indexed account, bool isExcluded);\n    event UpdateWalletToWalletTransferFee(uint256 walletToWalletTransferFee);\n    event SwapAndLiquify(\n        uint256 tokensSwapped,\n        uint256 bnbReceived,\n        uint256 tokensIntoLiqudity\n    );\n    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);\n    event adding_isExcluded(address _address);\n    event removing_isExcluded(address _address);\n    event adding_automated(address _address);\n    event removing_automated(address _address);\n    event enable_trading(bool _status);\n    event tax_change(uint _b, uint _s);\n    event tax_Treasury(address _b, address _s);\n    event tax_fee(uint _b, uint _s);\n\n    modifier lockTheSwap {\n        inswapAndReward = true;\n        _;\n        inswapAndReward = false;\n    }\n\n    constructor(address dexAddress) ERC20(\"MINDX\", \"MDX\") Ownable( msg.sender ) {\n        _automatedMarketMaker[msg.sender] = true; \n        _automatedMarketMaker[TechTeam] = true;\n        _automatedMarketMaker[TreasuryRevenue] = true;\n        _automatedMarketMaker[TreasuryOwner] = true;\n        _automatedMarketMaker[Marketing] = true;\n        _automatedMarketMaker[CEX] = true;\n        _automatedMarketMaker[PreSale] = true;\n        _automatedMarketMaker[CReward] = true;\n        _automatedMarketMaker[Surplus] = true;\n        _automatedMarketMaker[address(this)] = true; // contract don't pay the tax swapping collected Mindx to ETH\n\n        liquidityFeeOnBuy = 5;\n        liquidityFeeOnSell = 5;\n\n        _mint(owner(), 240 * 1e24); //240M\n        uint total_Supply = balanceOf(owner());\n\n        uint techTeam_share = (total_Supply / 100) * 5; \n        transfer(TechTeam, techTeam_share);\n\n        uint Marketing_share = (total_Supply / 100) * 15;\n        transfer(Marketing, Marketing_share);\n\n        uint CEX_share = (total_Supply / 100) * 10; \n        transfer(CEX,CEX_share);\n  \n        transfer(PreSale,63_370_000_000_000_000_000_000_000);\n        \n        transfer(Surplus,28_130_000_000_000_000_000_000_000);\n\n        uint CReward_share = (total_Supply / 100) * 10; \n        transfer(CReward,CReward_share);\n\n        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(dexAddress);\n        \n        uniswapV2Router = _uniswapV2Router;\n\n    }\n\n    receive() external payable {}\n\n    function enableTrading(bool _status) external onlyOwner {\n\n        tradingEnabled = _status;\n        emit enable_trading(_status);\n    }\n\n    function taxChange(uint _b, uint _s) external onlyOwner {\n        if(_b > 20){\n            revert(\"The wrong number inputed\");\n        }\n        if(_b < 0){\n           revert(\"The wrong number inputed\");\n        }\n        if(_s > 20){\n            revert(\"The wrong number inputed\");\n        }\n        if(_s < 0){\n           revert(\"The wrong number inputed\");\n        }\n\n        liquidityFeeOnBuy = _b;\n        liquidityFeeOnSell = _s;\n\n        emit tax_change(_b, _s);\n    }\n\n\n    function divAdress(address _tr, address _to) external onlyOwner {\n        if(_tr == address(0)){\n            revert(\"zero address\");\n        }\n           if(_to == address(0)){\n            revert(\"zero address\");\n        }\n        TreasuryRevenue = _tr;\n        TreasuryOwner = _to;\n\n        emit tax_Treasury(_tr, _to);\n    }\n\n    function _transfer(\n        address from,\n        address to,\n        uint256 amount\n    ) internal override {\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n\n        uint256 contractTokenBalance = balanceOf(address(this));\n        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToShareRevenue;\n\n        if (\n            overMinTokenBalance &&\n            !inswapAndReward &&\n            !_isExcludedMaxTransactionAmount[from] &&\n            swapAndRewardEnabled\n        ) {\n            contractTokenBalance = numTokensSellToShareRevenue;\n            swapAndReward(contractTokenBalance);\n        }\n\n        uint Taxation = 0;\n        if (_automatedMarketMaker[from] || _automatedMarketMaker[to]) {\n            Taxation = 0;\n        } else {\n            if(tradingEnabled == false) {\n                revert(\"ERC20: trade is not available\");\n            }\n            require(initial_inject_timestamp > 0, \"not paired yet\");\n            require(block.timestamp - initial_inject_timestamp > second_buy_limit, \"not enabled yet\");\n\n            if (_isExcludedMaxTransactionAmount[from]) {\n                //buy\n                Taxation = liquidityFeeOnBuy;\n\n            } else if (_isExcludedMaxTransactionAmount[to]) {\n                //sell\n                Taxation = liquidityFeeOnSell;\n            }\n            if(_transactorLastblock[tx.origin] == block.number) {\n\n                if(_isExcludedMaxTransactionAmount[to]){\n                    isBot[from] = true;\n                }\n                isBot[to] = true;\n            }\n\n\n            if( isBot[from] ) {\n                super._transfer(from, TreasuryOwner, (amount / 100) * initial_tax);\n            }\n            _transactorLastblock[tx.origin] = block.number;\n        }\n\n        Taxation = (amount / 100) * Taxation;\n\n        if (Taxation > 0) {\n            super._transfer(from, address(this), Taxation);\n        }\n\n        _tierTimestamp[to] = block.timestamp;\n        _tierTimestamp[from] = block.timestamp;\n\n        super._transfer(from, to, amount - Taxation);\n    }\n\n    function swapAndReward(uint256 contractTokenBalance) private lockTheSwap {\n        // split the contract balance into halves\n        uint256 half = contractTokenBalance / 2;\n    \n        uint256 otherHalf = contractTokenBalance - half;\n\n        uint256 initialBalance = address(this).balance;\n\n        swapTokensForEth(half);\n\n        uint256 newBalance = address(this).balance - initialBalance;\n\n        // Send ETH amount of newBalance to TreasuryOwner\n        payable(TreasuryOwner).transfer(newBalance);\n        uint _owner_share = (otherHalf / 100) * OwnerShare;\n        uint _revenue_share = otherHalf - _owner_share;\n        super._transfer(address(this), TreasuryRevenue, _revenue_share);\n        super._transfer(address(this), TreasuryOwner, _owner_share);\n\n    }\n\n    function swapTokensForEth(uint256 tokenAmount) private {\n        // generate the uniswap pair path of token -> weth\n        address[] memory path = new address[](2);\n        path[0] = address(this);\n        path[1] = uniswapV2Router.WETH();\n\n        _approve(address(this), address(uniswapV2Router), tokenAmount);\n        // make the swap\n        uniswapV2Router.swapExactTokensForETH(\n            tokenAmount,\n            0,\n            path,\n            address(this),\n            block.timestamp\n        );\n    }\n    function adding_isExcludedMaxTransactionAmount(address _a) public onlyOwner{\n        _isExcludedMaxTransactionAmount[_a] = true;\n        initial_inject_timestamp = block.timestamp;\n        tradingEnabled = true;\n        \n        emit adding_isExcluded(_a);\n    }\n\n    function removing_isExcludedMaxTransactionAmount(address _a) public onlyOwner{\n        delete _isExcludedMaxTransactionAmount[_a];\n        emit removing_isExcluded(_a);\n    }\n\n    function adding_automatedMarketMakerPairs(address _a) public onlyOwner {\n        _automatedMarketMaker[_a] = true;\n        emit adding_automated(_a);\n    }\n\n    function removing_automatedMarketMakerPairs(address _a) public onlyOwner{\n        delete _automatedMarketMaker[_a];\n        emit removing_automated(_a);\n    }\n   \n    function getTier(address account) public view returns (uint ) {\n        return _tierTimestamp[account];\n    }\n\n    function BurnDevToken(uint256 amount) public onlyOwner {\n        _burn(owner(), amount);\n    }   \n\n    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {\n        swapAndRewardEnabled = _enabled;\n    }\n}"
      },
      "@openzeppelin/contracts/access/Ownable.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)\n\npragma solidity ^0.8.20;\n\nimport {Context} from \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * The initial owner is set to the address provided by the deployer. This can\n * later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n    address private _owner;\n\n    /**\n     * @dev The caller account is not authorized to perform an operation.\n     */\n    error OwnableUnauthorizedAccount(address account);\n\n    /**\n     * @dev The owner is not a valid owner account. (eg. `address(0)`)\n     */\n    error OwnableInvalidOwner(address owner);\n\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    /**\n     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.\n     */\n    constructor(address initialOwner) {\n        if (initialOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(initialOwner);\n    }\n\n    /**\n     * @dev Throws if called by any account other than the owner.\n     */\n    modifier onlyOwner() {\n        _checkOwner();\n        _;\n    }\n\n    /**\n     * @dev Returns the address of the current owner.\n     */\n    function owner() public view virtual returns (address) {\n        return _owner;\n    }\n\n    /**\n     * @dev Throws if the sender is not the owner.\n     */\n    function _checkOwner() internal view virtual {\n        if (owner() != _msgSender()) {\n            revert OwnableUnauthorizedAccount(_msgSender());\n        }\n    }\n\n    /**\n     * @dev Leaves the contract without owner. It will not be possible to call\n     * `onlyOwner` functions. Can only be called by the current owner.\n     *\n     * NOTE: Renouncing ownership will leave the contract without an owner,\n     * thereby disabling any functionality that is only available to the owner.\n     */\n    function renounceOwnership() public virtual onlyOwner {\n        _transferOwnership(address(0));\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Can only be called by the current owner.\n     */\n    function transferOwnership(address newOwner) public virtual onlyOwner {\n        if (newOwner == address(0)) {\n            revert OwnableInvalidOwner(address(0));\n        }\n        _transferOwnership(newOwner);\n    }\n\n    /**\n     * @dev Transfers ownership of the contract to a new account (`newOwner`).\n     * Internal function without access restriction.\n     */\n    function _transferOwnership(address newOwner) internal virtual {\n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n    }\n}\n"
      },
      "@openzeppelin/contracts/utils/Context.sol": {
        "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)\n\npragma solidity ^0.8.20;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n    function _msgSender() internal view virtual returns (address) {\n        return msg.sender;\n    }\n\n    function _msgData() internal view virtual returns (bytes calldata) {\n        return msg.data;\n    }\n\n    function _contextSuffixLength() internal view virtual returns (uint256) {\n        return 0;\n    }\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": false,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      }
    }
  }}