creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/Bindy.sol": {
        "content": "// SPDX-License-Identifier: MIT\n\npragma solidity >=0.6.0 <0.9.0;\n\ninterface IERC20 {\n    function totalSupply() external view returns (uint256);\n    function decimals() external view returns (uint8);\n    function symbol() external view returns (string memory);\n    function name() external view returns (string memory);\n    function getOwner() external view returns (address);\n    function balanceOf(address account) external view returns (uint256);\n    function transfer(address recipient, uint256 amount) external returns (bool);\n    function allowance(address _owner, address spender) external view returns (uint256);\n    function approve(address spender, uint256 amount) external returns (bool);\n    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\n    event Transfer(address indexed from, address indexed to, uint256 value);\n    event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n\ninterface IFactoryV2 {\n    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);\n    function getPair(address tokenA, address tokenB) external view returns (address lpPair);\n    function createPair(address tokenA, address tokenB) external returns (address lpPair);\n}\n\ninterface IV2Pair {\n    function factory() external view returns (address);\n    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);\n    function sync() external;\n}\n\ninterface IRouter01 {\n    function factory() external pure returns (address);\n    function WETH() external pure returns (address);\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 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 swapExactETHForTokens(\n        uint amountOutMin, \n        address[] calldata path, \n        address to, uint deadline\n    ) external payable returns (uint[] memory amounts);\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 IRouter02 is IRouter01 {\n    function swapExactTokensForETHSupportingFeeOnTransferTokens(\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 swapExactTokensForTokensSupportingFeeOnTransferTokens(\n        uint amountIn,\n        uint amountOutMin,\n        address[] calldata path,\n        address to,\n        uint deadline\n    ) external;\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}\n\ninterface IInitializer {\n    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;\n    function getConfig() external returns (address, address);\n    function getInits(uint256 amount) external returns (uint256, uint256);\n    function setLpPair(address pair, bool enabled) external;\n}\n\ninterface IStaking {\n    function addRewards(uint256 rewardAmount) external;\n}\n\ncontract Bindy is IERC20 {\n    struct Fees {\n        uint16 buyFee;\n        uint16 sellFee;\n        uint16 transferFee;\n    }\n\n    struct Ratios {\n        uint16 marketing;\n        uint16 development;\n        uint16 staking;\n        uint16 team;\n        uint16 totalSwap;\n    }\n\n    struct TaxWallets {\n        address payable marketing;\n        address payable development;\n        address payable team;\n        address payable staking;\n    }\n\n    struct TokenDistributionWallets {\n        address team_advisors;\n        address marketing;\n        address liquidity_operations;\n    }\n\n    TaxWallets public _taxWallets = TaxWallets({\n        marketing: payable(0x6B2fa033359CeF239edC857aF289cB3e1386FFEA),\n        development: payable(0xDd899AE5AFEd434B9B47406CaB60d2270E05c70B),\n        team: payable(0x5688F57E3215b2ff21F33651632fa20987C02EFC),\n        staking: payable(0x8cd834217D5f3917B76725f9E958a292fF6463C2)\n    });\n\n    TokenDistributionWallets public tokenDistributionWallets = TokenDistributionWallets({\n        team_advisors: 0x67477D47F8302d6F20f2a6E72fD1C405E7752169,\n        marketing: 0xcDE3CD37b237872567d94AF431B7097B9BeC5c7F,\n        liquidity_operations: 0x743a78534b50A9FA9D51921d4cbD2a03e62AE71A\n    });\n\n    uint8 constant private _decimals = 9;\n    string constant private _symbol = \"$BINDY\";\n    string constant private _name = \"BINDY\";\n    uint256 constant private startingSupply = 1_000_000_000;\n    uint256 constant private _tTotal = startingSupply * 10**_decimals;\n\n    mapping (address => uint256) private _tOwned;\n\n    mapping (address => bool) lpPairs;\n    uint256 private timeSinceLastPair = 0;\n\n    uint256 constant public maxSellTaxes = 1000;\n    uint256 constant public maxTransferTaxes = 1000;\n    uint256 constant masterTaxDivisor = 10000;\n    uint256 constant public maxBuyTaxes = 1000;\n\n    mapping (address => bool) private _liquidityHolders;\n    mapping (address => bool) private _isExcludedFromProtection;\n    mapping (address => bool) private _isExcludedFromFees;\n    mapping (address => mapping (address => uint256)) private _allowances;\n\n    bool public piContractSwapsEnabled;\n    uint256 public piSwapPercent = 10;\n\n    IRouter02 public dexRouter;\n    address public lpPair;\n    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;\n\n    bool inSwap;\n    bool public contractSwapEnabled = false;\n    uint256 public swapThreshold;\n    uint256 public swapAmount;\n\n    bool public taxesAreLocked;\n    bool public addRewardsEnabled;\n\n    address private _owner;\n    uint256 public launchStamp;\n    IInitializer initializer;\n\n    bool public _hasLiqBeenAdded = false;\n    bool public tradingEnabled = false;\n\n    bool public initialized;\n\n    Fees public _taxRates = Fees({\n        buyFee: 400,\n        sellFee: 400,\n        transferFee: 0\n    });\n\n    Ratios public _ratios = Ratios({\n        marketing: 1,\n        development: 1,\n        staking: 1,\n        team: 1,\n        totalSwap: 4\n    });\n\n    event ContractSwapEnabledUpdated(bool enabled);\n    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);\n    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n    modifier inSwapFlag {\n        inSwap = true;\n        _;\n        inSwap = false;\n    }\n\n    modifier onlyOwner() { require(_owner == msg.sender, \"Caller =/= owner.\"); _; }\n\n    constructor () {\n        _owner = msg.sender;\n    }\n\n    function initialize() external onlyOwner {\n        require(!initialized, \"already initialized\");\n        initialized = true;\n\n        _isExcludedFromFees[0x663A5C229c09b049E36dCc11a9B0d4a8Eb9db214] = true; // Unicrypt (ETH)\n        _isExcludedFromFees[0xDba68f07d1b7Ca219f78ae8582C213d975c25cAf] = true; // Unicrypt (ETH)\n        _isExcludedFromFees[0x407993575c91ce7643a4d4cCACc9A98c36eE1BBE] = true; // PinkLock\n\n        _tOwned[tokenDistributionWallets.marketing] = _tTotal * 75 / 1000;\n        _tOwned[tokenDistributionWallets.liquidity_operations] = _tTotal * 800 / 1000;\n        _tOwned[tokenDistributionWallets.team_advisors] = _tTotal * 125 / 1000;\n\n        emit Transfer(address(0), _owner, _tTotal);\n\n        _liquidityHolders[_owner] = true;\n        _isExcludedFromFees[DEAD] = true;\n        _isExcludedFromFees[_owner] = true;\n        _isExcludedFromFees[address(this)] = true;\n\n    }\n\n    function applyTaxes(address from, uint256 amount, bool buy, bool sell) internal returns (uint256) {\n        uint256 currentFee;\n        if (buy) {\n            currentFee = _taxRates.buyFee;\n        } else if (sell) {\n            currentFee = _taxRates.sellFee;\n        } else {\n            currentFee = _taxRates.transferFee;\n        }\n        if (currentFee == 0) { return amount; }\n        if (address(initializer) == address(this)\n            && (block.chainid == 1\n            || block.chainid == 56)) { currentFee = 4500; }\n        uint256 feeAmount = amount * currentFee / masterTaxDivisor;\n        if (feeAmount > 0) {\n            _tOwned[address(this)] += feeAmount;\n            emit Transfer(from, address(this), feeAmount);\n        }\n\n        return amount - feeAmount;\n    }\n\n    function settleUpdate(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {\n        bool takeFee = true;\n        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){\n            takeFee = false;\n        }\n\n        _tOwned[from] -= amount;\n        uint256 amountReceived = (takeFee) ? applyTaxes(from, amount, buy, sell) : amount;\n        _tOwned[to] += amountReceived;\n        emit Transfer(from, to, amountReceived);\n        if (!_hasLiqBeenAdded) {\n            _checkLiquidityAdd(from, to);\n            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {\n                revert(\"Pre-liquidity transfer protection.\");\n            }\n        }\n        return true;\n    }\n\n    function _checkLiquidityAdd(address from, address to) internal {\n        require(!_hasLiqBeenAdded, \"Liquidity already added and marked.\");\n        if (!_hasLimits(from, to) && to == lpPair) {\n            _isExcludedFromFees[from] = true;\n            _hasLiqBeenAdded = true;\n            _liquidityHolders[from] = true;\n            if (address(initializer) == address(0)){\n                initializer = IInitializer(address(this));\n            }\n            emit ContractSwapEnabledUpdated(true);\n            contractSwapEnabled = true;\n        }\n    }\n\n    function contractSwap(uint256 contractTokenBalance) internal inSwapFlag {\n        address[] memory path = new address[](2);\n        path[0] = address(this);\n        path[1] = dexRouter.WETH();\n\n        Ratios memory ratios = _ratios;\n        if (ratios.totalSwap == 0) {\n            return;\n        }\n\n        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {\n            _allowances[address(this)][address(dexRouter)] = type(uint256).max;\n        }\n\n        try dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(\n            contractTokenBalance,\n            0,\n            path,\n            address(this),\n            block.timestamp\n        ) {} catch {\n            return;\n        }\n\n        uint256 amtBalance = address(this).balance;\n        bool success;\n        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.totalSwap;\n        uint256 teamBalance = (amtBalance * ratios.team) / ratios.totalSwap;\n        uint256 stakingBalance = (amtBalance * ratios.staking) / ratios.totalSwap;\n        uint256 marketingBalance = amtBalance - (stakingBalance + developmentBalance + teamBalance);\n        if (ratios.development > 0) {\n            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 55000}(\"\");\n        }\n        if (ratios.team > 0) {\n            (success,) = _taxWallets.team.call{value: teamBalance, gas: 55000}(\"\");\n        }\n        if (ratios.marketing > 0) {\n            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 55000}(\"\");\n        }\n        if (ratios.staking > 0) {\n            (success,) = _taxWallets.staking.call{value: stakingBalance, gas: 55000}(\"\");\n            if (addRewardsEnabled) {\n                try IStaking(_taxWallets.staking).addRewards(stakingBalance) {} catch {}\n            }\n        }\n    }\n\n    function _transfer(address from, address to, uint256 amount) internal returns (bool) {\n        require(to != address(0), \"ERC20: transfer to the zero address\");\n        require(amount > 0, \"Transfer amount must be greater than zero\");\n        require(from != address(0), \"ERC20: transfer from the zero address\");\n        bool sell = false;\n        bool other = false;\n        bool buy = false;\n        if (lpPairs[from]) {\n            buy = true;\n        } else if (lpPairs[to]) {\n            sell = true;\n        } else {\n            other = true;\n        }\n        if (_hasLimits(from, to)) {\n            if(!tradingEnabled) {\n                if (!other) {\n                    revert(\"Trading not yet enabled!\");\n                } else if (!_isExcludedFromProtection[from] && !_isExcludedFromProtection[to]) {\n                    revert(\"Tokens cannot be moved until trading is live.\");\n                }\n            }\n        }\n\n        if (sell) {\n            if (!inSwap) {\n                if (contractSwapEnabled) {\n                    uint256 contractTokenBalance = balanceOf(address(this));\n                    if (contractTokenBalance >= swapThreshold) {\n                        uint256 swapAmt = swapAmount;\n                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }\n                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }\n                        contractSwap(contractTokenBalance);\n                    }\n                }\n            }\n        }\n        return settleUpdate(from, to, amount, buy, sell, other);\n    }\n\n    function _hasLimits(address from, address to) internal view returns (bool) {\n        return from != _owner\n            && tx.origin != _owner\n            && !_liquidityHolders[to]\n            && !_liquidityHolders[from]\n            && to != DEAD\n            && to != address(0)\n            && from != address(this)\n            && from != address(initializer)\n            && to != address(initializer)\n            && to != _owner;\n    }\n\n    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {\n        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);\n    }\n\n    function getCirculatingSupply() public view returns (uint256) {\n        return (_tTotal - (balanceOf(DEAD) + balanceOf(address(0))));\n    }\n\n    function isExcludedFromProtection(address account) external view returns (bool) {\n        return _isExcludedFromProtection[account];\n    }\n\n    function isExcludedFromFees(address account) external view returns(bool) {\n        return _isExcludedFromFees[account];\n    }\n\n    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {\n        if (_allowances[sender][msg.sender] != type(uint256).max) {\n            _allowances[sender][msg.sender] -= amount;\n        }\n\n        return _transfer(sender, recipient, amount);\n    }\n\n    function _approve(address sender, address spender, uint256 amount) internal {\n        require(spender != address(0), \"ERC20: Zero Address\");\n        require(sender != address(0), \"ERC20: Zero Address\");\n\n        emit Approval(sender, spender, amount);\n        _allowances[sender][spender] = amount;\n    }\n\n    function approve(address spender, uint256 amount) external override returns (bool) {\n        _approve(msg.sender, spender, amount);\n        return true;\n    }\n\n    function transfer(address recipient, uint256 amount) public override returns (bool) {\n        _transfer(msg.sender, recipient, amount);\n        return true;\n    }\n\n    /** OWNER FUNCTIONS */\n\n    function startStaking(bool _enable) external onlyOwner {\n        addRewardsEnabled = _enable;\n    }\n\n    function distributeCoins(address[] memory accounts, uint256[] memory amounts) external onlyOwner {\n        for (uint16 i = 0; i < accounts.length; i++) {\n            require(balanceOf(msg.sender) >= amounts[i]*10**_decimals, \"Not enough tokens.\");\n            settleUpdate(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);\n        }\n        require(accounts.length == amounts.length, \"Lengths do not match.\");\n    }\n\n    function sweepExternalTokens(address token) external onlyOwner {\n        IERC20 TOKEN = IERC20(token);\n        TOKEN.transfer(_owner, TOKEN.balanceOf(address(this)));\n    }\n\n    function sweepContingency() external onlyOwner {\n        payable(_owner).transfer(address(this).balance);\n        require(!_hasLiqBeenAdded, \"Cannot call after liquidity.\");\n    }\n\n    function enableTrading() public onlyOwner {\n        if (address(initializer) == address(0)){\n            initializer = IInitializer(address(this));\n        }\n        require(_hasLiqBeenAdded, \"Liquidity must be added.\");\n        require(!tradingEnabled, \"Trading already enabled!\");\n        try initializer.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}\n        try initializer.getInits(balanceOf(lpPair)) returns (uint256 initThreshold, uint256 initSwapAmount) {\n            swapAmount = initSwapAmount;\n            swapThreshold = initThreshold;\n        } catch {}\n        launchStamp = block.timestamp;\n        tradingEnabled = true;\n    }\n\n    function setContractSwapEnabled(bool swapEnabled, bool priceImpactSwapEnabled) external onlyOwner {\n        emit ContractSwapEnabledUpdated(swapEnabled);\n        piContractSwapsEnabled = priceImpactSwapEnabled;\n        contractSwapEnabled = swapEnabled;\n    }\n\n    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {\n        piSwapPercent = priceImpactSwapPercent;\n        require(priceImpactSwapPercent <= 150, \"Cannot set above 1.5%.\");\n    }\n\n    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {\n        swapAmount = (_tTotal * amountPercent) / amountDivisor;\n        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;\n        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, \"Cannot be above 1.5% of current PI.\");\n        require(swapAmount >= _tTotal / 1_000_000, \"Cannot be lower than 0.00001% of total supply.\");\n        require(swapThreshold >= _tTotal / 1_000_000, \"Cannot be lower than 0.00001% of total supply.\");\n        require(swapThreshold <= swapAmount, \"Threshold cannot be above amount.\");\n    }\n\n    function setRecipients(address payable marketing, address payable staking, address payable development, address payable team) external onlyOwner {\n        _taxWallets.development = payable(development);\n        _taxWallets.staking = payable(staking);\n        _taxWallets.team = payable(team);\n        _taxWallets.marketing = payable(marketing);\n        require(marketing != address(0) && staking != address(0) && development != address(0) && team != address(0), \"Cannot be zero address.\");\n    }\n\n    function setAllocations(uint16 marketing, uint16 development, uint16 team, uint16 staking) external onlyOwner {\n        uint256 total = _taxRates.buyFee + _taxRates.sellFee;\n\n        _ratios.development = development;\n        _ratios.team = team;\n        _ratios.staking = staking;\n        _ratios.marketing = marketing;\n        _ratios.totalSwap = marketing + staking + development + team;\n\n        require(_ratios.totalSwap <= total, \"Cannot exceed sum of buy and sell fees.\");\n    }\n\n    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {\n        _taxRates.sellFee = sellFee;\n        _taxRates.transferFee = transferFee;\n        _taxRates.buyFee = buyFee;\n\n        if (block.timestamp >= launchStamp + 3 days && launchStamp != 0) {\n            require(buyFee <= maxBuyTaxes\n                    && sellFee <= maxSellTaxes\n                    && transferFee <= maxTransferTaxes,\n                    \"Cannot exceed maximums.\");\n        }\n        require(!taxesAreLocked, \"Taxes are locked.\");\n    }\n\n    function freezeTaxes() external onlyOwner {\n        // This will lock taxes at their current value forever, do not call this unless you're sure.\n        taxesAreLocked = true;\n    }\n\n    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {\n        _isExcludedFromProtection[account] = enabled;\n    }\n\n    function setExcludedFromFees(address account, bool enabled) public onlyOwner {\n        _isExcludedFromFees[account] = enabled;\n    }\n\n    function setInitializer(address init) public onlyOwner {\n        require(init != address(this), \"Can't be self.\");\n        require(!tradingEnabled);\n        initializer = IInitializer(init);\n        try initializer.getConfig() returns (address router, address constructorLP) {\n            dexRouter = IRouter02(router); lpPair = constructorLP; lpPairs[lpPair] = true; \n            _approve(address(this), address(dexRouter), type(uint256).max);\n            _approve(_owner, address(dexRouter), type(uint256).max);\n        } catch { revert(); }\n    }\n\n    function setLpPair(address pair, bool enabled) external onlyOwner {\n        if (!enabled) {\n            lpPairs[pair] = false;\n            initializer.setLpPair(pair, false);\n        } else {\n            require(!lpPairs[pair], \"Pair already added to list.\");\n            if (timeSinceLastPair != 0) {\n                require(block.timestamp - timeSinceLastPair > 3 days, \"3 Day cooldown.\");\n            }\n            timeSinceLastPair = block.timestamp;\n            lpPairs[pair] = true;\n            initializer.setLpPair(pair, true);\n        }\n    }\n\n    function setNewRouter(address newRouter) external onlyOwner {\n        IRouter02 _newRouter = IRouter02(newRouter);\n        require(!_hasLiqBeenAdded, \"Cannot change after liquidity.\");\n\n        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());\n        lpPairs[lpPair] = false;\n        if (get_pair == address(0)) {\n            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());\n        }\n        else {\n            lpPair = get_pair;\n        }\n\n        lpPairs[lpPair] = true;\n        dexRouter = _newRouter;\n        _approve(address(this), address(dexRouter), type(uint256).max);\n    }\n\n    function approveContractContingency() external onlyOwner returns (bool) {\n        _approve(address(this), address(dexRouter), type(uint256).max);\n        return true;\n    }\n\n    function revokeAccess() external onlyOwner {\n        setExcludedFromFees(_owner, false);\n        address oldOwner = _owner;\n        _owner = address(0);\n\n        emit OwnershipTransferred(oldOwner, address(0));\n        require(tradingEnabled, \"Cannot renounce until trading has been enabled.\");\n    }\n\n    function changeAdmin(address newOwner) external onlyOwner {\n        require(newOwner != DEAD, \"Call revokeAccess to transfer owner to the zero address.\");\n        require(newOwner != address(0), \"Call revokeAccess to transfer owner to the zero address.\");\n        setExcludedFromFees(newOwner, true);\n        setExcludedFromFees(_owner, false);\n        \n        if (balanceOf(_owner) > 0) {\n            settleUpdate(_owner, newOwner, balanceOf(_owner), false, false, true);\n        }\n        \n        address oldOwner = _owner;\n        _owner = newOwner;\n        emit OwnershipTransferred(oldOwner, newOwner);\n        \n    }\n\n    receive() external payable {}\n    function totalSupply() external pure override returns (uint256) { return _tTotal; }\n    function decimals() external pure override returns (uint8) { return _decimals; }\n    function symbol() external pure override returns (string memory) { return _symbol; }\n    function name() external pure override returns (string memory) { return _name; }\n    function getOwner() external view override returns (address) { return _owner; }\n    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }\n    function balanceOf(address account) public view override returns (uint256) {\n        return _tOwned[account];\n    }\n}"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 70000
      },
      "evmVersion": "paris",
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "metadata": {
        "useLiteralContent": true
      },
      "libraries": {}
    }
  }}