pragma solidity ^0.8.9;





contract BullRunFeeHandler is Ownable {

    IUniswapV2Router02 public immutable uniswapV2Router;
    IERC20 public usdc;
    IERC20 public brlToken;

    address public marketingWallet;
    address public opsWallet;

    uint256 residualTokens;

    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiqudity);

    constructor(address _brlToken, address _marketingWallet, address _opsWallet) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        brlToken = IERC20(_brlToken);
        marketingWallet = _marketingWallet;
        opsWallet = _opsWallet;

        usdc = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
        IERC20(usdc).approve(address(_uniswapV2Router), type(uint256).max);

    }

    function processFees(uint256 liquidityTokens, uint256 opsTokens, uint256 marketingTokens) external onlyOwner {

        liquidityTokens += residualTokens;
        uint256 half = liquidityTokens / 2;
        uint256 otherHalf = liquidityTokens - half;

        uint256 total = half + opsTokens + marketingTokens;

        IERC20(brlToken).approve(address(uniswapV2Router), total + otherHalf);

        address[] memory path = new address[](2);
        path[0] = address(brlToken);
        path[1] = address(usdc);

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            total,
            0, // accept any amount of USDC
            path,
            address(this),
            block.timestamp
        );

        uint256 usdcBalance = IERC20(usdc).balanceOf(address(this));
        uint256 liquidity = usdcBalance * half / total;
        uint256 marketing = usdcBalance * marketingTokens / total;
        uint256 ops = usdcBalance - liquidity - marketing;

        (uint256 amountA,,) = uniswapV2Router.addLiquidity(
            address(brlToken),
            address(usdc),
            otherHalf,
            liquidity,
            0,
            0,
            address(0xdead),
            block.timestamp
        );
        residualTokens += (otherHalf - amountA);

        emit SwapAndLiquify(half, liquidity, otherHalf);

        usdc.transfer(marketingWallet, marketing);
        usdc.transfer(opsWallet, ops);

    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        opsWallet = newWallet;
    }

}

error InvalidTransfer(address from, address to);
error TransferDelayEnabled(uint256 currentBlock, uint256 enabledBlock);
error ExceedsMaxTxAmount(uint256 attempt, uint256 max);
error ExceedsMaxWalletAmount(uint256 attempt, uint256 max);
error InvalidConfiguration();
error TradingNotEnabled();

contract BullRunV2 is ERC20, Ownable {

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
    mapping (address => bool) public _isExcludedFromDelay;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => uint256) private _holderLastTxBlock;

    IUniswapV2Router02 public uniswapV2Router;
    address public immutable uniswapV2Pair;

    BullRunFeeHandler public brlFeeHandler;

    bool private swapping;
    bool public swapEnabled = true;
    bool public isTradingEnabled;

    uint256 public burnBuyFee = 100;
    uint256 public liquidityBuyFee = 400;
    uint256 public opsBuyFee = 300;
    uint256 public marketingBuyFee = 200;
    uint256 public totalBuyFees = 1000;

    uint256 public burnSellFee = 100;
    uint256 public liquiditySellFee = 500;
    uint256 public opsSellFee = 300;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 1200;

    uint256 public burnTokens;
    uint256 public liquidityTokens;
    uint256 public opsTokens;
    uint256 public marketingTokens;

    uint256 public maxTransactionAmount = 5000 * 10**18; //0.5% of total supply
    uint256 public swapTokensAtAmount = 500 * 10**18; //0.05% of total supply
    uint256 public maxWallet = 10000 * 10**18; //1% of total supply

    uint256 public buyDelay = 2;
    uint256 public sellDelay = 5;
    uint256 public transferDelay = 1;

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event UpdateFeeHandler(address indexed newAddress, address indexed oldAddress);

    constructor(address _marketingWallet, address _opsWallet) ERC20("BullRunV2", "BRLV2") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        address usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), usdc);

        brlFeeHandler = new BullRunFeeHandler(address(this), _marketingWallet, _opsWallet);

        _isBlacklisted[address(0)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(brlFeeHandler)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(brlFeeHandler)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;

        _isExcludedMaxTransactionAmount[address(_uniswapV2Router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;

        _mint(owner(), 10**6 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isBlacklisted[from] || _isBlacklisted[to]) {
            revert InvalidTransfer(from, to);
        }

        if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping
        ){

            if (!isTradingEnabled) {
               revert TradingNotEnabled();
            }

            uint256 delayedUntil = _holderLastTxBlock[tx.origin];
            if (from == uniswapV2Pair) {
                delayedUntil += buyDelay;
            } else if (to == uniswapV2Pair) {
                delayedUntil += sellDelay;
            } else if (!_isExcludedFromDelay[from] && !_isExcludedFromDelay[to]) {
                delayedUntil += transferDelay;
            }

            if (delayedUntil > block.number) {
                revert TransferDelayEnabled(block.number, delayedUntil);
            }
            _holderLastTxBlock[tx.origin] = block.number;

            if (from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to]) { //buys
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }

            } else if (to == uniswapV2Pair && !_isExcludedMaxTransactionAmount[from]) { //sells
                if (amount > maxTransactionAmount) {
                    revert ExceedsMaxTxAmount(amount, maxTransactionAmount);
                }
            } else if(!_isExcludedMaxTransactionAmount[to]){
                uint256 potentialBalance = amount + balanceOf(to);
                if (potentialBalance > maxWallet) {
                    revert ExceedsMaxWalletAmount(potentialBalance, maxWallet);
                }
            }
        }

		    bool canSwap = balanceOf(address(brlFeeHandler)) >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            from != uniswapV2Pair &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            uint256 total = liquidityTokens + opsTokens + marketingTokens;
            uint256 liqToSwap = swapTokensAtAmount * liquidityTokens / total;
            uint256 opsToSwap = swapTokensAtAmount * opsTokens / total;
            uint256 marToSwap = swapTokensAtAmount * marketingTokens / total;

            brlFeeHandler.processFees(liqToSwap, opsToSwap, marToSwap);

            liquidityTokens -= liqToSwap;
            marketingTokens -= marToSwap;
            opsTokens -= opsToSwap;

            swapping = false;
        }

        if(!swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            uint256 fees;
            if (to == uniswapV2Pair && totalSellFees != 0) { //sell
                fees = amount * totalSellFees / 10000;
                burnTokens += fees * burnSellFee / totalSellFees;
                liquidityTokens += fees * liquiditySellFee / totalSellFees;
                opsTokens += fees * opsSellFee / totalSellFees;
                marketingTokens += fees * marketingSellFee / totalSellFees;
            } else if (from == uniswapV2Pair && totalBuyFees != 0) { //buy
                fees = amount * totalBuyFees / 10000;
                burnTokens += fees * burnBuyFee / totalBuyFees;
                liquidityTokens += fees * liquidityBuyFee / totalBuyFees;
                opsTokens += fees * opsBuyFee / totalBuyFees;
                marketingTokens += fees * marketingBuyFee / totalBuyFees;
            }
            if (fees > 0) {
                amount -= fees;
                super._transfer(from, address(brlFeeHandler), fees);
                super._burn(address(brlFeeHandler), burnTokens);
            }

        }

        super._transfer(from, to, amount);

    }

    function setBlacklist(address account, bool value) external onlyOwner {
        _isBlacklisted[account] = value;
    }

    function blacklistMany(address[] memory accounts) external onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isBlacklisted[accounts[i]] = true;
        }
    }

    function updateDelayBlocks(uint256 _buy, uint256 _sell, uint256 _tx) external onlyOwner {
        buyDelay = _buy;
        sellDelay = _sell;
        transferDelay = _tx;
    }

    function setExcludedFromMaxTransaction(address account, bool value) public onlyOwner {
        _isExcludedMaxTransactionAmount[account] = value;
    }

    function excludeManyFromMaxTransaction(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedMaxTransactionAmount[accounts[i]] = true;
        }
    }

    function setExcludedFromFees(address account, bool value) public onlyOwner {
        _isExcludedFromFees[account] = value;
    }

    function excludeManyFromFees(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setExcludedFromDelay(address account, bool value) public onlyOwner {
        _isExcludedFromDelay[account] = value;
    }

    function setSellFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        liquiditySellFee = liquidity;
        opsSellFee = ops;
        marketingSellFee = marketing;
        totalSellFees = total;
    }

    function setBuyFees(uint256 burn, uint256 liquidity, uint256 ops, uint256 marketing) external onlyOwner {
        uint256 total = burn + liquidity + ops + marketing;
        if (total > 2500) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        liquidityBuyFee = liquidity;
        opsBuyFee = ops;
        marketingBuyFee = marketing;
        totalBuyFees = total;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
    }

    function setMaxTxAmount(uint256 _maxTxAmt) external onlyOwner() {
        maxTransactionAmount = _maxTxAmt;
    }

    function setMaxWalletSize(uint256 _maxWalletSize) external onlyOwner() {
        maxWallet = _maxWalletSize;
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateMarketingWallet(newWallet);
    }

    function updateOpsWallet(address newWallet) external onlyOwner {
        brlFeeHandler.updateOpsWallet(newWallet);
    }

    function enableTrading() external onlyOwner {
        if (isTradingEnabled) {
            revert InvalidConfiguration();
        }
        isTradingEnabled = true;
    }

    function updateFeeHandler(address newAddress) public onlyOwner {
        if (newAddress == address(brlFeeHandler)) {
            revert InvalidConfiguration();
        }

        BullRunFeeHandler newFeeHandler = BullRunFeeHandler(newAddress);

        if (newFeeHandler.owner() != address(this)) {
            revert InvalidConfiguration();
        }

        setExcludedFromMaxTransaction(address(newFeeHandler), true);
        setExcludedFromFees(address(newFeeHandler), true);

        brlFeeHandler = newFeeHandler;

        emit UpdateFeeHandler(newAddress, address(brlFeeHandler));
    }

}
[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_opsWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxTxAmount","type":"error"},{"inputs":[{"internalType":"uint256","name":"attempt","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"ExceedsMaxWalletAmount","type":"error"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"inputs":[],"name":"TradingNotEnabled","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentBlock","type":"uint256"},{"internalType":"uint256","name":"enabledBlock","type":"uint256"}],"name":"TransferDelayEnabled","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateFeeHandler","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"blacklistMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"brlFeeHandler","outputs":[{"internalType":"contract BullRunFeeHandler","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquiditySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opsTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmt","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"ops","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_tx","type":"uint256"}],"name":"updateDelayBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateFeeHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"}]