ETH Price: $3,526.97 (+0.58%)
Gas: 2 Gwei

Token

EARN ($EARN)
 

Overview

Max Total Supply

100,000,000,000 $EARN

Holders

194

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0 $EARN

Value
$0.00
0xd12c0db4182b0294d581309201fdce25d0fcb585
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
EARN

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : Lock.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.14;

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol";
import "@uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol";
import "./DividendDistributor.sol";

contract EARN is IERC20, Ownable {
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    address public REWARD = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; // USDC

    string constant _name = "EARN";
    string constant _symbol = "$EARN";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 100000000000 * (10**_decimals); // One hundred billions

    mapping(address => uint256) _balances;
    mapping(address => mapping(address => uint256)) _allowances;

    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isDividendExempt;
    mapping(address => bool) public isBlacklisted;
    mapping(address => bool) public isMaxBuyLimitExcluded;
    mapping(address => bool) public isMaxSellLimitExcluded;
    mapping(address => bool) public isAuthorized;

    address public marketingWallet;
    address public buyBackWallet;
    address public lpReceiver;

    // Fees
    uint256 public rewardFee = 11;

    uint256 public buyLiquidityFee = 1;
    uint256 public buyBuyBackFee = 1;
    uint256 public buyMarketingFee = 2;
    uint256 public buyTotalFee = 15;

    uint256 public sellLiquidityFee = 1;
    uint256 public sellBuyBackFee = 1;
    uint256 public sellMarketingFee = 2;
    uint256 public sellTotalFee = 15;

    uint256 public swapLiquidityFee = 1;
    uint256 public swapBuyBackFee = 1;
    uint256 public swapMarketingFee = 2;
    uint256 public swapTotalFee = 15;

    IUniswapV2Router02 public router;
    address public pair;

    DividendDistributor public dividendTracker;

    uint256 distributorGas = 500000;

    uint256 public maxSellLimit = 0;
    uint256 public maxBuyLimit = 0;

    bool public isSellCoolDownEnabled = true;
    uint256 public sellCoolDownTime = 15 minutes;

    uint256 public lastSwapTime;

    uint256 public swapThreshold = (_totalSupply * 1) / 10000; // 0.001% of supply
    bool public contractSwapEnabled = true;
    bool public isTradeEnabled = false;
    bool inContractSwap;
    modifier swapping() {
        inContractSwap = true;
        _;
        inContractSwap = false;
    }

    event SetIsDividendExempt(address holder, bool status);
    event SetIsFeeExempt(address holder, bool status);
    event AddAuthorizedWallet(address holder, bool status);
    event SetDoContractSwap(bool status);
    event DoContractSwap(uint256 amount, uint256 time);
    event ChangeDistributionCriteria(
        uint256 minPeriod,
        uint256 minDistribution
    );

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

    constructor() {
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IUniswapV2Factory(router.factory()).createPair(
            router.WETH(),
            address(this)
        );
        _allowances[address(this)][address(router)] = type(uint256).max;

        dividendTracker = new DividendDistributor(REWARD);

        marketingWallet = 0xBA3944d8f9057e4fA32c80039385d21b1A689e59;
        buyBackWallet = 0x3193669b46F25a63ed6D32024C1409b12a26563E;
        lpReceiver = 0x91b1DC8443848314FA9B1f3F16497521A16b59ca;

        address deployer = 0x4958122d53756655616262168867B4AaB7496BA8;

        isFeeExempt[deployer] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[marketingWallet] = true;
        isFeeExempt[buyBackWallet] = true;
        isFeeExempt[lpReceiver] = true;

        isDividendExempt[deployer] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[ZERO] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[lpReceiver] = true;
        isDividendExempt[buyBackWallet] = true;
        isDividendExempt[marketingWallet] = true;

        isAuthorized[deployer] = true;
        isAuthorized[pair] = true;
        isAuthorized[address(this)] = true;
        isAuthorized[ZERO] = true;
        isAuthorized[DEAD] = true;
        isAuthorized[lpReceiver] = true;
        isAuthorized[buyBackWallet] = true;
        isAuthorized[marketingWallet] = true;

        isMaxBuyLimitExcluded[deployer] = true;
        isMaxSellLimitExcluded[deployer] = true;

        _balances[deployer] = _totalSupply;
        emit Transfer(address(0), deployer, _totalSupply);
    }

    receive() external payable {}

    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[account];
    }

    function getHolderDetails(address holder)
        public
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return dividendTracker.getHolderDetails(holder);
    }

    function getLastProcessedIndex() public view returns (uint256) {
        return dividendTracker.getLastProcessedIndex();
    }

    function getNumberOfTokenHolders() public view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function totalDistributedRewards() public view returns (uint256) {
        return dividendTracker.totalDistributedRewards();
    }

    function allowance(address holder, address spender)
        external
        view
        override
        returns (uint256)
    {
        return _allowances[holder][spender];
    }

    function approve(address spender, uint256 amount)
        public
        override
        returns (bool)
    {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount)
        external
        override
        returns (bool)
    {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            require(
                _allowances[sender][msg.sender] >= amount,
                "Insufficient Allowance"
            );
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(
            !isBlacklisted[sender] && !isBlacklisted[recipient],
            "Blacklisted users"
        );
        if (!isTradeEnabled) require(isAuthorized[sender], "Trading disabled");
        if (inContractSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (shouldDoContractSwap()) {
            doContractSwap();
        }
        {
            if (
                sender == pair &&
                !isMaxBuyLimitExcluded[recipient] &&
                maxBuyLimit != 0
            ) require(amount <= maxBuyLimit, "Max buy limit exceeded");

            if (
                recipient == pair &&
                !isMaxSellLimitExcluded[sender] &&
                maxSellLimit != 0
            ) require(amount <= maxSellLimit, "Max sell limit exceeded");
        }

        require(_balances[sender] >= amount, "Insufficient Balance");
        _balances[sender] = _balances[sender] - amount;

        uint256 amountReceived = shouldTakeFee(sender, recipient)
            ? takeFee(sender, recipient, amount)
            : amount;
        _balances[recipient] = _balances[recipient] + amountReceived;

        if (!isDividendExempt[sender]) {
            try dividendTracker.setShare(sender, _balances[sender]) {} catch {}
        }

        if (!isDividendExempt[recipient]) {
            try
                dividendTracker.setShare(recipient, _balances[recipient])
            {} catch {}
        }

        try dividendTracker.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function takeFee(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (uint256) {
        uint256 feeToken;

        if (recipient == pair) feeToken = (amount * sellTotalFee) / 100;
        else feeToken = (amount * buyTotalFee) / 100;

        _balances[address(this)] = _balances[address(this)] + feeToken;
        emit Transfer(sender, address(this), feeToken);

        return (amount - feeToken);
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient Balance");
        _balances[sender] = _balances[sender] - amount;

        _balances[recipient] = _balances[recipient] + amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function shouldTakeFee(address sender, address to)
        internal
        view
        returns (bool)
    {
        if (isFeeExempt[sender] || isFeeExempt[to]) {
            return false;
        } else {
            return true;
        }
    }

    function shouldDoContractSwap() internal view returns (bool) {
        return (msg.sender != pair &&
            !inContractSwap &&
            contractSwapEnabled &&
            (lastSwapTime + sellCoolDownTime) <= block.timestamp &&
            _balances[address(this)] >= swapThreshold);
    }

    // Claim manually
    function ___claimRewards(bool tryAll) public {
        dividendTracker.claimDividend();
        if (tryAll) {
            try dividendTracker.process(distributorGas) {} catch {}
        }
    }

    // Clear the queue manually
    function claimProcess() public {
        try dividendTracker.process(distributorGas) {} catch {}
    }

    function isRewardExcluded(address _wallet) public view returns (bool) {
        return isDividendExempt[_wallet];
    }

    function isFeeExcluded(address _wallet) public view returns (bool) {
        return isFeeExempt[_wallet];
    }

    function doContractSwap() internal swapping {
        uint256 contractTokenBalance = _balances[address(this)];

        uint256 tokensToLp = (contractTokenBalance * swapLiquidityFee) /
            swapTotalFee;
        uint256 tokensToReward = (contractTokenBalance * rewardFee) /
            swapTotalFee;

        uint256 buyBackAndMarketingFee = swapBuyBackFee + swapMarketingFee;

        uint256 tokensToSwap = contractTokenBalance -
            tokensToLp -
            tokensToReward;

        if (tokensToReward > 0) {
            swapTokensForTokens(tokensToReward, REWARD);

            uint256 swappedRewardTokens = IERC20(REWARD).balanceOf(
                address(this)
            );
            IERC20(REWARD).transfer(
                address(dividendTracker),
                swappedRewardTokens
            );
            try dividendTracker.deposit(swappedRewardTokens) {} catch {}
        }
        if (tokensToSwap > 0 && buyBackAndMarketingFee > 0) {
            swapTokensForEth(tokensToSwap);

            uint256 swappedTokens = address(this).balance;

            uint256 tokensForMarketing = (swappedTokens * swapMarketingFee) /
                buyBackAndMarketingFee;

            uint256 tokensForBuyBack = swappedTokens - tokensForMarketing;

            if (tokensForMarketing > 0)
                payable(marketingWallet).transfer(tokensForMarketing);

            if (tokensForBuyBack > 0)
                payable(buyBackWallet).transfer(tokensForBuyBack);
        }

        if (tokensToLp > 0) swapAndLiquify(tokensToLp);

        lastSwapTime = block.timestamp;
    }

    // All tax wallets receive BUSD instead of BNB
    function swapTokensForTokens(uint256 tokenAmount, address tokenToSwap)
        private
    {
        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = router.WETH();
        path[2] = tokenToSwap;
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of tokens
            path,
            address(this),
            block.timestamp
        );
    }

    function swapAndLiquify(uint256 tokens) private {
        // split the contract balance into halves
        uint256 half = tokens / 2;
        uint256 otherHalf = tokens - half;

        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance - initialBalance;

        // add liquidity to uniswap
        addLiquidity(otherHalf, newBalance);

        emit AutoLiquify(newBalance, otherHalf);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        _approve(address(this), address(router), tokenAmount);

        // add the liquidity
        router.addLiquidityETH{value: bnbAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpReceiver,
            block.timestamp
        );
    }

    function setIsDividendExempt(address holder, bool exempt)
        external
        onlyOwner
    {
        require(
            holder != address(this) && holder != pair,
            "can not add pair and token address as share holder"
        );
        isDividendExempt[holder] = exempt;
        if (exempt) {
            dividendTracker.setShare(holder, 0);
        } else {
            dividendTracker.setShare(holder, _balances[holder]);
        }

        emit SetIsDividendExempt(holder, exempt);
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;

        emit SetIsFeeExempt(holder, exempt);
    }

    function setDoContractSwap(bool _enabled) external onlyOwner {
        contractSwapEnabled = _enabled;

        emit SetDoContractSwap(_enabled);
    }

    function blackListWallets(address _wallet, bool _status)
        external
        onlyOwner
    {
        isBlacklisted[_wallet] = _status;
    }

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external onlyOwner {
        dividendTracker.setDistributionCriteria(_minPeriod, _minDistribution);

        emit ChangeDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        distributorGas = gas;
    }

    function changeMarketingWallet(address _wallet) external onlyOwner {
        marketingWallet = _wallet;
    }

    function changeBuyBackWallet(address _wallet) external onlyOwner {
        buyBackWallet = _wallet;
    }

    function changeLPWallet(address _wallet) external onlyOwner {
        lpReceiver = _wallet;
    }

    function changeBuyFees(
        uint256 _liquidityFee,
        uint256 _buyBackFee,
        uint256 _marketingFee
    ) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyBuyBackFee = _buyBackFee;
        buyMarketingFee = _marketingFee;

        buyTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee;

        require(buyTotalFee <= 15, "Total fees can not greater than 15%");
    }

    function changeSellFees(
        uint256 _liquidityFee,
        uint256 _buyBackFee,
        uint256 _marketingFee
    ) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellBuyBackFee = _buyBackFee;
        sellMarketingFee = _marketingFee;

        sellTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee;

        require(sellTotalFee <= 15, "Total fees can not greater than 15%");
    }

    function changeSwapFees(
        uint256 _liquidityFee,
        uint256 _buyBackFee,
        uint256 _marketingFee
    ) external onlyOwner {
        swapLiquidityFee = _liquidityFee;
        swapBuyBackFee = _buyBackFee;
        swapMarketingFee = _marketingFee;

        swapTotalFee = rewardFee + _liquidityFee + _buyBackFee + _marketingFee;

        require(swapTotalFee <= 15, "Total fees can not greater than 15%");
    }

    function setSellCollDown(bool _status, uint256 _coolDownTime)
        external
        onlyOwner
    {
        isSellCoolDownEnabled = _status;
        sellCoolDownTime = _coolDownTime;
    }

    function changeSellLimit(uint256 _limit) external onlyOwner {
        if (_limit > 0)
            require(
                _limit >= 100 * 10**6 * 10**_decimals,
                "Limit can not less than 250 million"
            );

        maxSellLimit = _limit;
    }

    function changeBuyLimit(uint256 _limit) external onlyOwner {
        if (_limit > 0)
            require(
                _limit >= 100 * 10**6 * 10**_decimals,
                "Limit can not less than 250 million"
            );
        maxBuyLimit = _limit;
    }

    function excludeFromMaxSell(address _wallet, bool _status)
        external
        onlyOwner
    {
        isMaxSellLimitExcluded[_wallet] = _status;
    }

    function excludeFromMaxBuy(address _wallet, bool _status)
        external
        onlyOwner
    {
        isMaxBuyLimitExcluded[_wallet] = _status;
    }

    function enableTrading() external onlyOwner {
        isTradeEnabled = true;
    }

    function setAuthorizedWallets(address _wallet, bool _status)
        external
        onlyOwner
    {
        isAuthorized[_wallet] = _status;
    }

    function rescueEth() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No enough ETH to transfer");

        payable(msg.sender).transfer(balance);
    }

    function purgeBeforeSwitch() public onlyOwner {
        dividendTracker.purge(msg.sender);
    }

    function depositRewards(uint256 _rewardAmount) external onlyOwner {
        IERC20(REWARD).transferFrom(
            msg.sender,
            address(dividendTracker),
            _rewardAmount
        );

        try dividendTracker.deposit(_rewardAmount) {} catch {}
    }
}

File 2 of 8 : DividendDistributor.sol
//SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface IDividendDistributor {
    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external;

    function setShare(address shareholder, uint256 amount) external;

    function deposit(uint256 amount) external;

    function process(uint256 gas) external;

    function purge(address receiver) external;
}

contract DividendDistributor is IDividendDistributor {
    address public _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 public REWARD;

    address[] shareholders;
    mapping(address => uint256) shareholderIndexes;
    mapping(address => uint256) shareholderClaims;

    mapping(address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10**36;

    uint256 public minPeriod = 1 * 60;
    uint256 public minDistribution = 1 * (10**3);

    uint256 currentIndex;

    bool initialized;

    modifier onlyToken() {
        require(msg.sender == _token);
        _;
    }

    constructor(address rewardToken) {
        _token = msg.sender;
        REWARD = IERC20(rewardToken);
    }

    receive() external payable {}

    function setDistributionCriteria(
        uint256 _minPeriod,
        uint256 _minDistribution
    ) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function purge(address receiver) external override onlyToken {
        uint256 balance = REWARD.balanceOf(address(this));
        REWARD.transfer(receiver, balance);
    }

    function setShare(address shareholder, uint256 amount)
        external
        override
        onlyToken
    {
        if (shares[shareholder].amount > 0) {
            distributeDividend(shareholder);
        }

        if (amount > 0 && shares[shareholder].amount == 0) {
            addShareholder(shareholder);
        } else if (amount == 0 && shares[shareholder].amount > 0) {
            removeShareholder(shareholder);
        }

        totalShares = (totalShares - (shares[shareholder].amount)) + amount;
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(
            shares[shareholder].amount
        );
    }

    function deposit(uint256 amount) external override onlyToken {
        totalDividends = totalDividends + amount;
        dividendsPerShare =
            dividendsPerShare +
            ((dividendsPerShareAccuracyFactor * amount) / totalShares);
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if (shareholderCount == 0) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while (gasUsed < gas && iterations < shareholderCount) {
            if (currentIndex >= shareholderCount) {
                currentIndex = 0;
            }

            if (shouldDistribute(shareholders[currentIndex])) {
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }

    function shouldDistribute(address shareholder)
        internal
        view
        returns (bool)
    {
        return
            shareholderClaims[shareholder] + minPeriod < block.timestamp &&
            getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if (shares[shareholder].amount == 0) {
            return;
        }

        uint256 amount = getUnpaidEarnings(shareholder);
        if (amount > 0) {
            totalDistributed = totalDistributed + amount;
            REWARD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised =
                shares[shareholder].totalRealised +
                amount;
            shares[shareholder].totalExcluded = getCumulativeDividends(
                shares[shareholder].amount
            );
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder)
        public
        view
        returns (uint256)
    {
        if (shares[shareholder].amount == 0) {
            return 0;
        }

        uint256 shareholderTotalDividends = getCumulativeDividends(
            shares[shareholder].amount
        );
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if (shareholderTotalDividends <= shareholderTotalExcluded) {
            return 0;
        }

        return shareholderTotalDividends - shareholderTotalExcluded;
    }

    function getHolderDetails(address holder)
        public
        view
        returns (
            uint256 lastClaim,
            uint256 unpaidEarning,
            uint256 totalReward,
            uint256 holderIndex
        )
    {
        lastClaim = shareholderClaims[holder];
        unpaidEarning = getUnpaidEarnings(holder);
        totalReward = shares[holder].totalRealised;
        holderIndex = shareholderIndexes[holder];
    }

    function getCumulativeDividends(uint256 share)
        internal
        view
        returns (uint256)
    {
        return (share * dividendsPerShare) / (dividendsPerShareAccuracyFactor);
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return currentIndex;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return shareholders.length;
    }

    function getShareHoldersList() external view returns (address[] memory) {
        return shareholders;
    }

    function totalDistributedRewards() external view returns (uint256) {
        return totalDistributed;
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[
            shareholders.length - 1
        ];
        shareholderIndexes[
            shareholders[shareholders.length - 1]
        ] = shareholderIndexes[shareholder];
        shareholders.pop();

        delete shareholderIndexes[shareholder];
    }
}

File 3 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 8 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

File 5 of 8 : IUniswapV2Factory.sol
pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

File 6 of 8 : IUniswapV2Router02.sol
pragma solidity >=0.6.2;

import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

File 7 of 8 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 8 of 8 : IUniswapV2Router01.sol
pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"AddAuthorizedWallet","type":"event"},{"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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"minDistribution","type":"uint256"}],"name":"ChangeDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"DoContractSwap","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":"status","type":"bool"}],"name":"SetDoContractSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetIsDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetIsFeeExempt","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"},{"inputs":[],"name":"REWARD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"tryAll","type":"bool"}],"name":"___claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"blackListWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeBuyBackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"changeBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"changeSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyBackFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"changeSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimProcess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardAmount","type":"uint256"}],"name":"depositRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"getHolderDetails","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastProcessedIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"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":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isFeeExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxBuyLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxSellLimitExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"isRewardExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSellCoolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSwapTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"purgeBeforeSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellCoolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAuthorizedWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setDoContractSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint256","name":"_coolDownTime","type":"uint256"}],"name":"setSellCollDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBuyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributedRewards","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"},{"stateMutability":"payable","type":"receive"}]

6080604052600180546001600160a01b031990811661dead1790915560028054821690556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055620000506009600a620007b6565b620000619064174876e800620007ce565b600455600b601055600160115560016012556002601355600f601455600160155560016016556002601755600f60185560016019556001601a556002601b55600f601c556207a120602055600060215560006022556001602360006101000a81548160ff0219169083151502179055506103846024556127106004546001620000eb9190620007ce565b620000f79190620007f0565b6026556027805461ffff191660011790553480156200011557600080fd5b50620001213362000643565b601d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000186573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ac919062000813565b6001600160a01b031663c9c65396601d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000234919062000813565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af115801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000813565b601e80546001600160a01b0319166001600160a01b03928316179055306000908152600660209081526040808320601d54851684529091529081902060001990556003549051911690620002fb9062000693565b6001600160a01b039091168152602001604051809103906000f08015801562000328573d6000803e3d6000fd5b50601f80546001600160a01b039283166001600160a01b031991821617909155600d8054821673ba3944d8f9057e4fa32c80039385d21b1a689e59178155600e80548316733193669b46f25a63ed6d32024c1409b12a26563e178155600f80549093167391b1dc8443848314fa9b1f3f16497521a16b59ca178355600760209081527ff406092f32bf869a1d66a4c68992dc734d9f8ef4a1a51ad2b331cb281879f96d805460ff1990811660019081179092553060008181526040808220805485168617905587548a168252808220805485168617905586548a168252808220805485168617905588548a1682528082208054851686179055600886527fc159e6bb79f514482ebdb5587f70c94e0ecf953ff6f230fca1b979b7f678d3288054851686179055601e80548b16835281832080548616871790558383528183208054861687179055600280548c168452828420805487168817905586548c16845282842080548716881790558a548c168452828420805487168817905588548c168452828420805487168817905589548c1684528284208054871688179055600c88527fd782961308313fbc8881a3a64bd6972be468edbb0cd29929b8eb2bbe56340352805487168817905590548b168352818320805486168717905592825280822080548516861790559154891681528181208054841685179055835489168152818120805484168517905596548816875280872080548316841790559354871686528386208054821683179055935490951684528184208054841686179055734958122d53756655616262168867b4aab7496ba88085527f48449c58c9d3b09953f275237df8e06c83e680bc469a3eda424c8e95c08f8e6b80548516871790557f5e19a205444aa46ea06831ef8ffed3b0d740a934610d2b945b456983e0441f35805490941690951790925560045460059092527fea25dddb4b131eb3012aac2a7a0b12d0edad43a38c83f7646ed1d3b1acf965ac829055518392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200063491815260200190565b60405180910390a3506200083e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610eff80620039d383390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f8578160001904821115620006dc57620006dc620006a1565b80851615620006ea57918102915b93841c9390800290620006bc565b509250929050565b6000826200071157506001620007b0565b816200072057506000620007b0565b8160018114620007395760028114620007445762000764565b6001915050620007b0565b60ff841115620007585762000758620006a1565b50506001821b620007b0565b5060208310610133831016604e8410600b841016171562000789575081810a620007b0565b620007958383620006b7565b8060001904821115620007ac57620007ac620006a1565b0290505b92915050565b6000620007c760ff84168362000700565b9392505050565b6000816000190483118215151615620007eb57620007eb620006a1565b500290565b6000826200080e57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200082657600080fd5b81516001600160a01b0381168114620007c757600080fd5b613185806200084e6000396000f3fe6080604052600436106104555760003560e01c80638b4242671161023f578063ce31a06b11610139578063eaaa848b116100b6578063f708a64f1161007a578063f708a64f14610d6c578063f887ea4014610d8c578063fdb78c0e14610dac578063fe575a8714610dc6578063fe9fbb8014610df657600080fd5b8063eaaa848b14610cf4578063f0327afc14610d0a578063f11a24d314610d20578063f2fde38b14610d36578063f637434214610d5657600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610c43578063e04192ce14610c89578063e53c30b014610ca9578063e7841ec014610cbf578063e94668dc14610cd457600080fd5b8063ce31a06b14610bb9578063ce54149414610bce578063d47b654d14610bee578063d559230614610c0e578063d695bb2714610c2e57600080fd5b8063a7418106116101c7578063bb85c6d11161018b578063bb85c6d114610b06578063bca238aa14610b26578063c1987bac14610b5f578063cab34c0814610b79578063cd7b33ab14610b9957600080fd5b8063a741810614610a71578063a7cfaa5214610a91578063a87df83214610ab1578063a8aa1b3114610ac6578063a9059cbb14610ae657600080fd5b80638da5cb5b1161020e5780638da5cb5b146109cf57806392136913146109ed57806395d89b4114610a035780639d1944f514610a31578063a3d14e7214610a5157600080fd5b80638b4242671461095a5780638bdf67f2146109705780638c52c6c8146109905780638d38a127146109b057600080fd5b80632d48e896116103505780635fe4bea8116102d8578063715018a61161029c578063715018a6146108e457806375f0a874146108f95780637bce5a04146109195780637c9e770e1461092f5780638a8c523c1461094557600080fd5b80635fe4bea81461084d578063652e2f0414610862578063658d4b7f146108785780636aa5b37f1461089857806370a08231146108ae57600080fd5b8063399bec451161031f578063399bec451461077d5780633f4218e0146107ad5780634355855a146107dd57806351c7d0471461080d578063571ac8b01461082d57600080fd5b80632d48e8961461070b578063313ce5671461072b5780633683685a146107475780633705b3921461076757600080fd5b806318160ddd116103de5780631fe70a98116103a25780631fe70a981461067f57806323b872dd14610695578063276a0630146106b55780632c1f5216146106cb5780632c256f7d146106eb57600080fd5b806318160ddd146105c35780631a221dbb146105d85780631cd348c0146105ee5780631de5a11f146106265780631f0c57fc1461065f57600080fd5b8063095ea7b311610425578063095ea7b31461051657806309bbedde146105365780630a05cd011461054b5780630dd871571461058b5780630eda7275146105a157600080fd5b8062afb325146104615780630445b6671461048a57806306fdde03146104a0578063072bc7db146104d657600080fd5b3661045c57005b600080fd5b34801561046d57600080fd5b5061047760185481565b6040519081526020015b60405180910390f35b34801561049657600080fd5b5061047760265481565b3480156104ac57600080fd5b5060408051808201909152600481526322a0a92760e11b60208201525b6040516104819190612c07565b3480156104e257600080fd5b506105066104f1366004612c71565b600a6020526000908152604090205460ff1681565b6040519015158152602001610481565b34801561052257600080fd5b50610506610531366004612c8e565b610e26565b34801561054257600080fd5b50610477610e93565b34801561055757600080fd5b5061056b610566366004612c71565b610f06565b604080519485526020850193909352918301526060820152608001610481565b34801561059757600080fd5b5061047760255481565b3480156105ad57600080fd5b506105c16105bc366004612cba565b610f8a565b005b3480156105cf57600080fd5b50600454610477565b3480156105e457600080fd5b5061047760165481565b3480156105fa57600080fd5b50600e5461060e906001600160a01b031681565b6040516001600160a01b039091168152602001610481565b34801561063257600080fd5b50610506610641366004612c71565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561066b57600080fd5b50600f5461060e906001600160a01b031681565b34801561068b57600080fd5b5061047760125481565b3480156106a157600080fd5b506105066106b0366004612cd3565b610fdf565b3480156106c157600080fd5b5061047760195481565b3480156106d757600080fd5b50601f5461060e906001600160a01b031681565b3480156106f757600080fd5b506105c1610706366004612d14565b6110e0565b34801561071757600080fd5b506105c1610726366004612d40565b611147565b34801561073757600080fd5b5060405160098152602001610481565b34801561075357600080fd5b506105c1610762366004612d70565b6111f3565b34801561077357600080fd5b5061047760145481565b34801561078957600080fd5b50610506610798366004612c71565b600b6020526000908152604090205460ff1681565b3480156107b957600080fd5b506105066107c8366004612c71565b60076020526000908152604090205460ff1681565b3480156107e957600080fd5b506105066107f8366004612c71565b60086020526000908152604090205460ff1681565b34801561081957600080fd5b506105c1610828366004612da9565b611226565b34801561083957600080fd5b50610506610848366004612c71565b611245565b34801561085957600080fd5b506105c1611253565b34801561086e57600080fd5b5061047760215481565b34801561088457600080fd5b506105c1610893366004612d70565b6112ba565b3480156108a457600080fd5b5061047760225481565b3480156108ba57600080fd5b506104776108c9366004612c71565b6001600160a01b031660009081526005602052604090205490565b3480156108f057600080fd5b506105c161131e565b34801561090557600080fd5b50600d5461060e906001600160a01b031681565b34801561092557600080fd5b5061047760135481565b34801561093b57600080fd5b50610477601b5481565b34801561095157600080fd5b506105c1611332565b34801561096657600080fd5b5061047760105481565b34801561097c57600080fd5b506105c161098b366004612cba565b61134b565b34801561099c57600080fd5b506105c16109ab366004612d70565b611430565b3480156109bc57600080fd5b5060275461050690610100900460ff1681565b3480156109db57600080fd5b506000546001600160a01b031661060e565b3480156109f957600080fd5b5061047760175481565b348015610a0f57600080fd5b506040805180820190915260058152641222a0a92760d91b60208201526104c9565b348015610a3d57600080fd5b506105c1610a4c366004612cba565b611463565b348015610a5d57600080fd5b506105c1610a6c366004612d14565b61147f565b348015610a7d57600080fd5b506105c1610a8c366004612c71565b6114e1565b348015610a9d57600080fd5b506105c1610aac366004612dc7565b61150b565b348015610abd57600080fd5b506104776115b1565b348015610ad257600080fd5b50601e5461060e906001600160a01b031681565b348015610af257600080fd5b50610506610b01366004612c8e565b6115fb565b348015610b1257600080fd5b506105c1610b21366004612c71565b611608565b348015610b3257600080fd5b50610506610b41366004612c71565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b6b57600080fd5b506023546105069060ff1681565b348015610b8557600080fd5b5060035461060e906001600160a01b031681565b348015610ba557600080fd5b506105c1610bb4366004612d14565b611632565b348015610bc557600080fd5b506105c1611694565b348015610bda57600080fd5b506105c1610be9366004612dc7565b611717565b348015610bfa57600080fd5b506105c1610c09366004612d70565b611766565b348015610c1a57600080fd5b506105c1610c29366004612d70565b611799565b348015610c3a57600080fd5b506105c16117cc565b348015610c4f57600080fd5b50610477610c5e366004612de4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c9557600080fd5b506105c1610ca4366004612c71565b611836565b348015610cb557600080fd5b50610477601c5481565b348015610ccb57600080fd5b50610477611860565b348015610ce057600080fd5b506105c1610cef366004612cba565b6118aa565b348015610d0057600080fd5b50610477601a5481565b348015610d1657600080fd5b5061047760245481565b348015610d2c57600080fd5b5061047760115481565b348015610d4257600080fd5b506105c1610d51366004612c71565b6118f6565b348015610d6257600080fd5b5061047760155481565b348015610d7857600080fd5b506105c1610d87366004612d70565b61196c565b348015610d9857600080fd5b50601d5461060e906001600160a01b031681565b348015610db857600080fd5b506027546105069060ff1681565b348015610dd257600080fd5b50610506610de1366004612c71565b60096020526000908152604090205460ff1681565b348015610e0257600080fd5b50610506610e11366004612c71565b600c6020526000908152604090205460ff1681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e819086815260200190565b60405180910390a35060015b92915050565b601f54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612e12565b905090565b601f54604051630a05cd0160e01b81526001600160a01b0383811660048301526000928392839283921690630a05cd0190602401608060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612e2b565b93509350935093509193509193565b610f92611b51565b8015610fda57610fa46009600a612f5b565b610fb2906305f5e100612f6a565b811015610fda5760405162461bcd60e51b8152600401610fd190612f89565b60405180910390fd5b602155565b6001600160a01b0383166000908152600660209081526040808320338452909152812054600019146110cb576001600160a01b03841660009081526006602090815260408083203384529091529020548211156110775760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610fd1565b6001600160a01b03841660009081526006602090815260408083203384529091529020546110a6908390612fcc565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b6110d6848484611bab565b90505b9392505050565b6110e8611b51565b6019839055601a829055601b81905560105481908390611109908690612fe3565b6111139190612fe3565b61111d9190612fe3565b601c819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b505050565b61114f611b51565b601f546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b505060408051858152602081018590527ff422aed0b19de56e7aa427c6fd0d5706c88ab222f9058aaa4ffaa0e279b46fc693500190505b60405180910390a15050565b6111fb611b51565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61122e611b51565b6023805460ff191692151592909217909155602455565b6000610e8d82600019610e26565b61125b611b51565b601f5460405163a6871bc360e01b81523360048201526001600160a01b039091169063a6871bc390602401600060405180830381600087803b1580156112a057600080fd5b505af11580156112b4573d6000803e3d6000fd5b50505050565b6112c2611b51565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991016111e7565b611326611b51565b61133060006120d2565b565b61133a611b51565b6027805461ff001916610100179055565b611353611b51565b600354601f546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303816000875af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d2919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f25906024015b600060405180830381600087803b15801561141a57600080fd5b505af192505050801561142b575060015b505b50565b611438611b51565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61146b611b51565b620b71b0811061147a57600080fd5b602055565b611487611b51565b601583905560168290556017819055601054819083906114a8908690612fe3565b6114b29190612fe3565b6114bc9190612fe3565b6018819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b6114e9611b51565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601f60009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050801561142d57601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916114009160040190815260200190565b601f546040805163543efc1960e11b815290516000926001600160a01b03169163a87df8329160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b60006110d9338484611bab565b611610611b51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61163a611b51565b6011839055601282905560138190556010548190839061165b908690612fe3565b6116659190612fe3565b61166f9190612fe3565b6014819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b61169c611b51565b47806116ea5760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610fd1565b604051339082156108fc029083906000818181858888f1935050505015801561142b573d6000803e3d6000fd5b61171f611b51565b6027805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b61176e611b51565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6117a1611b51565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916118049160040190815260200190565b600060405180830381600087803b15801561181e57600080fd5b505af192505050801561182f575060015b1561133057565b61183e611b51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601f546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b6118b2611b51565b80156118f1576118c46009600a612f5b565b6118d2906305f5e100612f6a565b8110156118f15760405162461bcd60e51b8152600401610fd190612f89565b602255565b6118fe611b51565b6001600160a01b0381166119635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b61142d816120d2565b611974611b51565b6001600160a01b038216301480159061199b5750601e546001600160a01b03838116911614155b611a025760405162461bcd60e51b815260206004820152603260248201527f63616e206e6f7420616464207061697220616e6420746f6b656e20616464726560448201527139b99030b99039b430b932903437b63232b960711b6064820152608401610fd1565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a9a57601f54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050611b11565b601f546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527fad3666dd545175260bd4a82a50e0b189b968d227adfefd0df46a3e2fa2d5eafe91016111e7565b6000546001600160a01b031633146113305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fd1565b6001600160a01b03831660009081526009602052604081205460ff16158015611bed57506001600160a01b03831660009081526009602052604090205460ff16155b611c2d5760405162461bcd60e51b8152602060048201526011602482015270426c61636b6c697374656420757365727360781b6044820152606401610fd1565b602754610100900460ff16611c97576001600160a01b0384166000908152600c602052604090205460ff16611c975760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610fd1565b60275462010000900460ff1615611cba57611cb3848484612122565b90506110d9565b611cc261223b565b15611ccf57611ccf6122ab565b601e546001600160a01b038581169116148015611d0557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611d12575060225415155b15611d6257602254821115611d625760405162461bcd60e51b815260206004820152601660248201527513585e08189d5e481b1a5b5a5d08195e18d95959195960521b6044820152606401610fd1565b601e546001600160a01b038481169116148015611d9857506001600160a01b0384166000908152600b602052604090205460ff16155b8015611da5575060215415155b15611dfc57602154821115611dfc5760405162461bcd60e51b815260206004820152601760248201527f4d61782073656c6c206c696d69742065786365656465640000000000000000006044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054821115611e5b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054611e7f908390612fcc565b6001600160a01b038516600090815260056020526040812091909155611ea58585612591565b611eaf5782611eba565b611eba8585856125e5565b6001600160a01b038516600090815260056020526040902054909150611ee1908290612fe3565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff16611f8557601f546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611f7257600080fd5b505af1925050508015611f83575060015b505b6001600160a01b03841660009081526008602052604090205460ff1661201657601f546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561200357600080fd5b505af1925050508015612014575060015b505b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161204e9160040190815260200190565b600060405180830381600087803b15801561206857600080fd5b505af1925050508015612079575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120bf91815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600560205260408120548211156121815760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b0384166000908152600560205260409020546121a5908390612fcc565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546121d5908390612fe3565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122299086815260200190565b60405180910390a35060019392505050565b601e546000906001600160a01b03163314801590612262575060275462010000900460ff16155b8015612270575060275460ff165b801561228b5750426024546025546122889190612fe3565b11155b8015610f0157505060265430600090815260056020526040902054101590565b6027805462ff000019166201000017905530600090815260056020526040812054601c546019549192916122df9084612f6a565b6122e9919061305b565b90506000601c54601054846122fe9190612f6a565b612308919061305b565b90506000601b54601a5461231c9190612fe3565b905060008261232b8587612fcc565b6123359190612fcc565b90508215612497576003546123549084906001600160a01b03166126c5565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190612e12565b600354601f5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561248357600080fd5b505af1925050508015612494575060015b50505b6000811180156124a75750600082115b1561256b576124b581612856565b601b54479060009084906124c99084612f6a565b6124d3919061305b565b905060006124e18284612fcc565b9050811561252557600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612523573d6000803e3d6000fd5b505b801561256757600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612565573d6000803e3d6000fd5b505b5050505b831561257a5761257a846129b0565b50504260255550506027805462ff00001916905550565b6001600160a01b03821660009081526007602052604081205460ff16806125d057506001600160a01b03821660009081526007602052604090205460ff165b156125dd57506000610e8d565b506001610e8d565b601e5460009081906001600160a01b0390811690851603612621576064601854846126109190612f6a565b61261a919061305b565b905061263e565b6064601454846126319190612f6a565b61263b919061305b565b90505b30600090815260056020526040902054612659908290612fe3565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126aa9085815260200190565b60405180910390a36126bc8184612fcc565b95945050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126fc576126fc61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190613093565b8160018151811061278c5761278c61307d565b60200260200101906001600160a01b031690816001600160a01b03168152505081816002815181106127c0576127c061307d565b6001600160a01b039283166020918202929092010152601d546127e69130911685612a2f565b601d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061281f9086906000908690309042906004016130b0565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061288b5761288b61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129089190613093565b8160018151811061291b5761291b61307d565b6001600160a01b039283166020918202929092010152601d546129419130911684612a2f565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061297a9085906000908690309042906004016130b0565b600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b505050505050565b60006129bd60028361305b565b905060006129cb8284612fcc565b9050476129d783612856565b60006129e38247612fcc565b90506129ef8382612b53565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b038216612af25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601d54612b6b9030906001600160a01b031684612a2f565b601d54600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c009190613121565b5050505050565b600060208083528351808285015260005b81811015612c3457858101830151858201604001528201612c18565b81811115612c46576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461142d57600080fd5b600060208284031215612c8357600080fd5b81356110d981612c5c565b60008060408385031215612ca157600080fd5b8235612cac81612c5c565b946020939093013593505050565b600060208284031215612ccc57600080fd5b5035919050565b600080600060608486031215612ce857600080fd5b8335612cf381612c5c565b92506020840135612d0381612c5c565b929592945050506040919091013590565b600080600060608486031215612d2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d5357600080fd5b50508035926020909101359150565b801515811461142d57600080fd5b60008060408385031215612d8357600080fd5b8235612d8e81612c5c565b91506020830135612d9e81612d62565b809150509250929050565b60008060408385031215612dbc57600080fd5b8235612cac81612d62565b600060208284031215612dd957600080fd5b81356110d981612d62565b60008060408385031215612df757600080fd5b8235612e0281612c5c565b91506020830135612d9e81612c5c565b600060208284031215612e2457600080fd5b5051919050565b60008060008060808587031215612e4157600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612eb2578160001904821115612e9857612e98612e61565b80851615612ea557918102915b93841c9390800290612e7c565b509250929050565b600082612ec957506001610e8d565b81612ed657506000610e8d565b8160018114612eec5760028114612ef657612f12565b6001915050610e8d565b60ff841115612f0757612f07612e61565b50506001821b610e8d565b5060208310610133831016604e8410600b8410161715612f35575081810a610e8d565b612f3f8383612e77565b8060001904821115612f5357612f53612e61565b029392505050565b60006110d960ff841683612eba565b6000816000190483118215151615612f8457612f84612e61565b500290565b60208082526023908201527f4c696d69742063616e206e6f74206c657373207468616e20323530206d696c6c60408201526234b7b760e91b606082015260800190565b600082821015612fde57612fde612e61565b500390565b60008219821115612ff657612ff6612e61565b500190565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231352560e81b606082015260800190565b60006020828403121561305057600080fd5b81516110d981612d62565b60008261307857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130a557600080fd5b81516110d981612c5c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131005784516001600160a01b0316835293830193918301916001016130db565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204866cdb0e99d0605bb6cd17a353331ec683149142a565ee50b51fb3de1b838f664736f6c634300080e003360806040526ec097ce7bc90715b34b9f1000000000600a55603c600b556103e8600c5534801561002e57600080fd5b50604051610eff380380610eff83398101604081905261004d91610080565b60008054336001600160a01b031991821617909155600180549091166001600160a01b03929092169190911790556100b0565b60006020828403121561009257600080fd5b81516001600160a01b03811681146100a957600080fd5b9392505050565b610e40806100bf6000396000f3fe6080604052600436106101395760003560e01c8063a87df832116100ab578063e7841ec01161006f578063e7841ec01461037f578063ecd0c0c314610394578063efca2eed146103b4578063f0fc6bca146103ca578063ffb2c479146103df578063ffd49c84146103ff57600080fd5b8063a87df832146102a5578063b6b55f25146102ba578063cab34c08146102da578063ce7c2ac214610312578063e2d2e2191461036957600080fd5b80632d48e896116100fd5780632d48e896146102015780633a98ef39146102215780634fab0ae81461023757806360379e131461024d578063997664d71461026f578063a6871bc31461028557600080fd5b806309bbedde146101455780630a05cd011461016957806311ce023d146101a957806314b6ca96146101bf57806328fd3198146101e157600080fd5b3661014057005b600080fd5b34801561015157600080fd5b506002545b6040519081526020015b60405180910390f35b34801561017557600080fd5b50610189610184366004610c30565b610415565b604080519485526020850193909352918301526060820152608001610160565b3480156101b557600080fd5b50610156600a5481565b3480156101cb57600080fd5b506101df6101da366004610c52565b61046e565b005b3480156101ed57600080fd5b506101566101fc366004610c30565b6105e6565b34801561020d57600080fd5b506101df61021c366004610c7c565b610671565b34801561022d57600080fd5b5061015660065481565b34801561024357600080fd5b50610156600c5481565b34801561025957600080fd5b50610262610693565b6040516101609190610c9e565b34801561027b57600080fd5b5061015660075481565b34801561029157600080fd5b506101df6102a0366004610c30565b6106f5565b3480156102b157600080fd5b50600854610156565b3480156102c657600080fd5b506101df6102d5366004610ceb565b6107f7565b3480156102e657600080fd5b506001546102fa906001600160a01b031681565b6040516001600160a01b039091168152602001610160565b34801561031e57600080fd5b5061034e61032d366004610c30565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610160565b34801561037557600080fd5b5061015660095481565b34801561038b57600080fd5b50600d54610156565b3480156103a057600080fd5b506000546102fa906001600160a01b031681565b3480156103c057600080fd5b5061015660085481565b3480156103d657600080fd5b506101df61084d565b3480156103eb57600080fd5b506101df6103fa366004610ceb565b610858565b34801561040b57600080fd5b50610156600b5481565b6001600160a01b03811660009081526004602052604081205490808061043a856105e6565b6001600160a01b03909516600090815260056020908152604080832060020154600390925290912054949690949350915050565b6000546001600160a01b0316331461048557600080fd5b6001600160a01b038216600090815260056020526040902054156104ac576104ac8261095c565b6000811180156104d257506001600160a01b038216600090815260056020526040902054155b1561053857600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b031916909117905561056b565b8015801561055d57506001600160a01b03821660009081526005602052604090205415155b1561056b5761056b82610a7c565b6001600160a01b038216600090815260056020526040902054600654829161059291610d1a565b61059c9190610d31565b6006556001600160a01b03821660009081526005602052604090208190556105c381610bac565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b038116600090815260056020526040812054810361060d57506000919050565b6001600160a01b03821660009081526005602052604081205461062f90610bac565b6001600160a01b03841660009081526005602052604090206001015490915080821161065f575060009392505050565b6106698183610d1a565b949350505050565b6000546001600160a01b0316331461068857600080fd5b600b91909155600c55565b606060028054806020026020016040519081016040528092919081815260200182805480156106eb57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116106cd575b5050505050905090565b6000546001600160a01b0316331461070c57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107799190610d49565b60015460405163a9059cbb60e01b81526001600160a01b0385811660048301526024820184905292935091169063a9059cbb906044016020604051808303816000875af11580156107ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f29190610d62565b505050565b6000546001600160a01b0316331461080e57600080fd5b8060075461081c9190610d31565b600755600654600a54610830908390610d84565b61083a9190610da3565b6009546108479190610d31565b60095550565b6108563361095c565b565b6000546001600160a01b0316331461086f57600080fd5b600254600081900361087f575050565b6000805a905060005b848310801561089657508381105b156109555783600d54106108aa576000600d555b6108dc6002600d54815481106108c2576108c2610dc5565b6000918252602090912001546001600160a01b0316610bcf565b15610913576109136002600d54815481106108f9576108f9610dc5565b6000918252602090912001546001600160a01b031661095c565b5a61091e9083610d1a565b6109289084610d31565b92505a600d8054919350600061093d83610ddb565b9190505550808061094d90610ddb565b915050610888565b5050505050565b6001600160a01b038116600090815260056020526040812054900361097e5750565b6000610989826105e6565b90508015610a78578060085461099f9190610d31565b60085560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190610d62565b506001600160a01b03821660009081526004602090815260408083204290556005909152902060020154610a4e908290610d31565b6001600160a01b03831660009081526005602052604090206002810191909155546105c390610bac565b5050565b60028054610a8c90600190610d1a565b81548110610a9c57610a9c610dc5565b60009182526020808320909101546001600160a01b0384811684526003909252604090922054600280549290931692918110610ada57610ada610dc5565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260039182905260408120546002805491939291610b2690600190610d1a565b81548110610b3657610b36610dc5565b60009182526020808320909101546001600160a01b031683528201929092526040019020556002805480610b6c57610b6c610df4565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0392909216815260039091526040812055565b6000600a5460095483610bbf9190610d84565b610bc99190610da3565b92915050565b600b546001600160a01b03821660009081526004602052604081205490914291610bf99190610d31565b108015610bc95750600c54610c0d836105e6565b1192915050565b80356001600160a01b0381168114610c2b57600080fd5b919050565b600060208284031215610c4257600080fd5b610c4b82610c14565b9392505050565b60008060408385031215610c6557600080fd5b610c6e83610c14565b946020939093013593505050565b60008060408385031215610c8f57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b81811015610cdf5783516001600160a01b031683529284019291840191600101610cba565b50909695505050505050565b600060208284031215610cfd57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b600082821015610d2c57610d2c610d04565b500390565b60008219821115610d4457610d44610d04565b500190565b600060208284031215610d5b57600080fd5b5051919050565b600060208284031215610d7457600080fd5b81518015158114610c4b57600080fd5b6000816000190483118215151615610d9e57610d9e610d04565b500290565b600082610dc057634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060018201610ded57610ded610d04565b5060010190565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220b1277c073340b4469d17c445913f407ae9ff28e04aece609c70fb325ca5fb32364736f6c634300080e0033

Deployed Bytecode

0x6080604052600436106104555760003560e01c80638b4242671161023f578063ce31a06b11610139578063eaaa848b116100b6578063f708a64f1161007a578063f708a64f14610d6c578063f887ea4014610d8c578063fdb78c0e14610dac578063fe575a8714610dc6578063fe9fbb8014610df657600080fd5b8063eaaa848b14610cf4578063f0327afc14610d0a578063f11a24d314610d20578063f2fde38b14610d36578063f637434214610d5657600080fd5b8063dd62ed3e116100fd578063dd62ed3e14610c43578063e04192ce14610c89578063e53c30b014610ca9578063e7841ec014610cbf578063e94668dc14610cd457600080fd5b8063ce31a06b14610bb9578063ce54149414610bce578063d47b654d14610bee578063d559230614610c0e578063d695bb2714610c2e57600080fd5b8063a7418106116101c7578063bb85c6d11161018b578063bb85c6d114610b06578063bca238aa14610b26578063c1987bac14610b5f578063cab34c0814610b79578063cd7b33ab14610b9957600080fd5b8063a741810614610a71578063a7cfaa5214610a91578063a87df83214610ab1578063a8aa1b3114610ac6578063a9059cbb14610ae657600080fd5b80638da5cb5b1161020e5780638da5cb5b146109cf57806392136913146109ed57806395d89b4114610a035780639d1944f514610a31578063a3d14e7214610a5157600080fd5b80638b4242671461095a5780638bdf67f2146109705780638c52c6c8146109905780638d38a127146109b057600080fd5b80632d48e896116103505780635fe4bea8116102d8578063715018a61161029c578063715018a6146108e457806375f0a874146108f95780637bce5a04146109195780637c9e770e1461092f5780638a8c523c1461094557600080fd5b80635fe4bea81461084d578063652e2f0414610862578063658d4b7f146108785780636aa5b37f1461089857806370a08231146108ae57600080fd5b8063399bec451161031f578063399bec451461077d5780633f4218e0146107ad5780634355855a146107dd57806351c7d0471461080d578063571ac8b01461082d57600080fd5b80632d48e8961461070b578063313ce5671461072b5780633683685a146107475780633705b3921461076757600080fd5b806318160ddd116103de5780631fe70a98116103a25780631fe70a981461067f57806323b872dd14610695578063276a0630146106b55780632c1f5216146106cb5780632c256f7d146106eb57600080fd5b806318160ddd146105c35780631a221dbb146105d85780631cd348c0146105ee5780631de5a11f146106265780631f0c57fc1461065f57600080fd5b8063095ea7b311610425578063095ea7b31461051657806309bbedde146105365780630a05cd011461054b5780630dd871571461058b5780630eda7275146105a157600080fd5b8062afb325146104615780630445b6671461048a57806306fdde03146104a0578063072bc7db146104d657600080fd5b3661045c57005b600080fd5b34801561046d57600080fd5b5061047760185481565b6040519081526020015b60405180910390f35b34801561049657600080fd5b5061047760265481565b3480156104ac57600080fd5b5060408051808201909152600481526322a0a92760e11b60208201525b6040516104819190612c07565b3480156104e257600080fd5b506105066104f1366004612c71565b600a6020526000908152604090205460ff1681565b6040519015158152602001610481565b34801561052257600080fd5b50610506610531366004612c8e565b610e26565b34801561054257600080fd5b50610477610e93565b34801561055757600080fd5b5061056b610566366004612c71565b610f06565b604080519485526020850193909352918301526060820152608001610481565b34801561059757600080fd5b5061047760255481565b3480156105ad57600080fd5b506105c16105bc366004612cba565b610f8a565b005b3480156105cf57600080fd5b50600454610477565b3480156105e457600080fd5b5061047760165481565b3480156105fa57600080fd5b50600e5461060e906001600160a01b031681565b6040516001600160a01b039091168152602001610481565b34801561063257600080fd5b50610506610641366004612c71565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561066b57600080fd5b50600f5461060e906001600160a01b031681565b34801561068b57600080fd5b5061047760125481565b3480156106a157600080fd5b506105066106b0366004612cd3565b610fdf565b3480156106c157600080fd5b5061047760195481565b3480156106d757600080fd5b50601f5461060e906001600160a01b031681565b3480156106f757600080fd5b506105c1610706366004612d14565b6110e0565b34801561071757600080fd5b506105c1610726366004612d40565b611147565b34801561073757600080fd5b5060405160098152602001610481565b34801561075357600080fd5b506105c1610762366004612d70565b6111f3565b34801561077357600080fd5b5061047760145481565b34801561078957600080fd5b50610506610798366004612c71565b600b6020526000908152604090205460ff1681565b3480156107b957600080fd5b506105066107c8366004612c71565b60076020526000908152604090205460ff1681565b3480156107e957600080fd5b506105066107f8366004612c71565b60086020526000908152604090205460ff1681565b34801561081957600080fd5b506105c1610828366004612da9565b611226565b34801561083957600080fd5b50610506610848366004612c71565b611245565b34801561085957600080fd5b506105c1611253565b34801561086e57600080fd5b5061047760215481565b34801561088457600080fd5b506105c1610893366004612d70565b6112ba565b3480156108a457600080fd5b5061047760225481565b3480156108ba57600080fd5b506104776108c9366004612c71565b6001600160a01b031660009081526005602052604090205490565b3480156108f057600080fd5b506105c161131e565b34801561090557600080fd5b50600d5461060e906001600160a01b031681565b34801561092557600080fd5b5061047760135481565b34801561093b57600080fd5b50610477601b5481565b34801561095157600080fd5b506105c1611332565b34801561096657600080fd5b5061047760105481565b34801561097c57600080fd5b506105c161098b366004612cba565b61134b565b34801561099c57600080fd5b506105c16109ab366004612d70565b611430565b3480156109bc57600080fd5b5060275461050690610100900460ff1681565b3480156109db57600080fd5b506000546001600160a01b031661060e565b3480156109f957600080fd5b5061047760175481565b348015610a0f57600080fd5b506040805180820190915260058152641222a0a92760d91b60208201526104c9565b348015610a3d57600080fd5b506105c1610a4c366004612cba565b611463565b348015610a5d57600080fd5b506105c1610a6c366004612d14565b61147f565b348015610a7d57600080fd5b506105c1610a8c366004612c71565b6114e1565b348015610a9d57600080fd5b506105c1610aac366004612dc7565b61150b565b348015610abd57600080fd5b506104776115b1565b348015610ad257600080fd5b50601e5461060e906001600160a01b031681565b348015610af257600080fd5b50610506610b01366004612c8e565b6115fb565b348015610b1257600080fd5b506105c1610b21366004612c71565b611608565b348015610b3257600080fd5b50610506610b41366004612c71565b6001600160a01b031660009081526007602052604090205460ff1690565b348015610b6b57600080fd5b506023546105069060ff1681565b348015610b8557600080fd5b5060035461060e906001600160a01b031681565b348015610ba557600080fd5b506105c1610bb4366004612d14565b611632565b348015610bc557600080fd5b506105c1611694565b348015610bda57600080fd5b506105c1610be9366004612dc7565b611717565b348015610bfa57600080fd5b506105c1610c09366004612d70565b611766565b348015610c1a57600080fd5b506105c1610c29366004612d70565b611799565b348015610c3a57600080fd5b506105c16117cc565b348015610c4f57600080fd5b50610477610c5e366004612de4565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b348015610c9557600080fd5b506105c1610ca4366004612c71565b611836565b348015610cb557600080fd5b50610477601c5481565b348015610ccb57600080fd5b50610477611860565b348015610ce057600080fd5b506105c1610cef366004612cba565b6118aa565b348015610d0057600080fd5b50610477601a5481565b348015610d1657600080fd5b5061047760245481565b348015610d2c57600080fd5b5061047760115481565b348015610d4257600080fd5b506105c1610d51366004612c71565b6118f6565b348015610d6257600080fd5b5061047760155481565b348015610d7857600080fd5b506105c1610d87366004612d70565b61196c565b348015610d9857600080fd5b50601d5461060e906001600160a01b031681565b348015610db857600080fd5b506027546105069060ff1681565b348015610dd257600080fd5b50610506610de1366004612c71565b60096020526000908152604090205460ff1681565b348015610e0257600080fd5b50610506610e11366004612c71565b600c6020526000908152604090205460ff1681565b3360008181526006602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e819086815260200190565b60405180910390a35060015b92915050565b601f54604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f019190612e12565b905090565b601f54604051630a05cd0160e01b81526001600160a01b0383811660048301526000928392839283921690630a05cd0190602401608060405180830381865afa158015610f57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7b9190612e2b565b93509350935093509193509193565b610f92611b51565b8015610fda57610fa46009600a612f5b565b610fb2906305f5e100612f6a565b811015610fda5760405162461bcd60e51b8152600401610fd190612f89565b60405180910390fd5b602155565b6001600160a01b0383166000908152600660209081526040808320338452909152812054600019146110cb576001600160a01b03841660009081526006602090815260408083203384529091529020548211156110775760405162461bcd60e51b8152602060048201526016602482015275496e73756666696369656e7420416c6c6f77616e636560501b6044820152606401610fd1565b6001600160a01b03841660009081526006602090815260408083203384529091529020546110a6908390612fcc565b6001600160a01b03851660009081526006602090815260408083203384529091529020555b6110d6848484611bab565b90505b9392505050565b6110e8611b51565b6019839055601a829055601b81905560105481908390611109908690612fe3565b6111139190612fe3565b61111d9190612fe3565b601c819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b505050565b61114f611b51565b601f546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e89690604401600060405180830381600087803b15801561119c57600080fd5b505af11580156111b0573d6000803e3d6000fd5b505060408051858152602081018590527ff422aed0b19de56e7aa427c6fd0d5706c88ab222f9058aaa4ffaa0e279b46fc693500190505b60405180910390a15050565b6111fb611b51565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b61122e611b51565b6023805460ff191692151592909217909155602455565b6000610e8d82600019610e26565b61125b611b51565b601f5460405163a6871bc360e01b81523360048201526001600160a01b039091169063a6871bc390602401600060405180830381600087803b1580156112a057600080fd5b505af11580156112b4573d6000803e3d6000fd5b50505050565b6112c2611b51565b6001600160a01b038216600081815260076020908152604091829020805460ff19168515159081179091558251938452908301527f1b92447bfc74f86a82293c184341926a5888220bc498dde33efabf7c3d796d6991016111e7565b611326611b51565b61133060006120d2565b565b61133a611b51565b6027805461ff001916610100179055565b611353611b51565b600354601f546040516323b872dd60e01b81523360048201526001600160a01b039182166024820152604481018490529116906323b872dd906064016020604051808303816000875af11580156113ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d2919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f25906024015b600060405180830381600087803b15801561141a57600080fd5b505af192505050801561142b575060015b505b50565b611438611b51565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61146b611b51565b620b71b0811061147a57600080fd5b602055565b611487611b51565b601583905560168290556017819055601054819083906114a8908690612fe3565b6114b29190612fe3565b6114bc9190612fe3565b6018819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b6114e9611b51565b600f80546001600160a01b0319166001600160a01b0392909216919091179055565b601f60009054906101000a90046001600160a01b03166001600160a01b031663f0fc6bca6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50505050801561142d57601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916114009160040190815260200190565b601f546040805163543efc1960e11b815290516000926001600160a01b03169163a87df8329160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b60006110d9338484611bab565b611610611b51565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b61163a611b51565b6011839055601282905560138190556010548190839061165b908690612fe3565b6116659190612fe3565b61166f9190612fe3565b6014819055600f10156111425760405162461bcd60e51b8152600401610fd190612ffb565b61169c611b51565b47806116ea5760405162461bcd60e51b815260206004820152601960248201527f4e6f20656e6f7567682045544820746f207472616e73666572000000000000006044820152606401610fd1565b604051339082156108fc029083906000818181858888f1935050505015801561142b573d6000803e3d6000fd5b61171f611b51565b6027805460ff19168215159081179091556040519081527f0d537fcb73bb9654441eb9bd03c28d4b833e5a2da1f53bf422424cb01bc80fc79060200160405180910390a150565b61176e611b51565b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6117a1611b51565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916118049160040190815260200190565b600060405180830381600087803b15801561181e57600080fd5b505af192505050801561182f575060015b1561133057565b61183e611b51565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b601f546040805163039e107b60e61b815290516000926001600160a01b03169163e7841ec09160048083019260209291908290030181865afa158015610edd573d6000803e3d6000fd5b6118b2611b51565b80156118f1576118c46009600a612f5b565b6118d2906305f5e100612f6a565b8110156118f15760405162461bcd60e51b8152600401610fd190612f89565b602255565b6118fe611b51565b6001600160a01b0381166119635760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610fd1565b61142d816120d2565b611974611b51565b6001600160a01b038216301480159061199b5750601e546001600160a01b03838116911614155b611a025760405162461bcd60e51b815260206004820152603260248201527f63616e206e6f7420616464207061697220616e6420746f6b656e20616464726560448201527139b99030b99039b430b932903437b63232b960711b6064820152608401610fd1565b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611a9a57601f54604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401600060405180830381600087803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b50505050611b11565b601f546001600160a01b0383811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611af857600080fd5b505af1158015611b0c573d6000803e3d6000fd5b505050505b604080516001600160a01b038416815282151560208201527fad3666dd545175260bd4a82a50e0b189b968d227adfefd0df46a3e2fa2d5eafe91016111e7565b6000546001600160a01b031633146113305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610fd1565b6001600160a01b03831660009081526009602052604081205460ff16158015611bed57506001600160a01b03831660009081526009602052604090205460ff16155b611c2d5760405162461bcd60e51b8152602060048201526011602482015270426c61636b6c697374656420757365727360781b6044820152606401610fd1565b602754610100900460ff16611c97576001600160a01b0384166000908152600c602052604090205460ff16611c975760405162461bcd60e51b815260206004820152601060248201526f151c98591a5b99c8191a5cd8589b195960821b6044820152606401610fd1565b60275462010000900460ff1615611cba57611cb3848484612122565b90506110d9565b611cc261223b565b15611ccf57611ccf6122ab565b601e546001600160a01b038581169116148015611d0557506001600160a01b0383166000908152600a602052604090205460ff16155b8015611d12575060225415155b15611d6257602254821115611d625760405162461bcd60e51b815260206004820152601660248201527513585e08189d5e481b1a5b5a5d08195e18d95959195960521b6044820152606401610fd1565b601e546001600160a01b038481169116148015611d9857506001600160a01b0384166000908152600b602052604090205460ff16155b8015611da5575060215415155b15611dfc57602154821115611dfc5760405162461bcd60e51b815260206004820152601760248201527f4d61782073656c6c206c696d69742065786365656465640000000000000000006044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054821115611e5b5760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b038416600090815260056020526040902054611e7f908390612fcc565b6001600160a01b038516600090815260056020526040812091909155611ea58585612591565b611eaf5782611eba565b611eba8585856125e5565b6001600160a01b038516600090815260056020526040902054909150611ee1908290612fe3565b6001600160a01b0380861660009081526005602090815260408083209490945591881681526008909152205460ff16611f8557601f546001600160a01b0386811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611f7257600080fd5b505af1925050508015611f83575060015b505b6001600160a01b03841660009081526008602052604090205460ff1661201657601f546001600160a01b0385811660008181526005602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b15801561200357600080fd5b505af1925050508015612014575060015b505b601f546020546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c4799161204e9160040190815260200190565b600060405180830381600087803b15801561206857600080fd5b505af1925050508015612079575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516120bf91815260200190565b60405180910390a3506001949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166000908152600560205260408120548211156121815760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610fd1565b6001600160a01b0384166000908152600560205260409020546121a5908390612fcc565b6001600160a01b0380861660009081526005602052604080822093909355908516815220546121d5908390612fe3565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122299086815260200190565b60405180910390a35060019392505050565b601e546000906001600160a01b03163314801590612262575060275462010000900460ff16155b8015612270575060275460ff165b801561228b5750426024546025546122889190612fe3565b11155b8015610f0157505060265430600090815260056020526040902054101590565b6027805462ff000019166201000017905530600090815260056020526040812054601c546019549192916122df9084612f6a565b6122e9919061305b565b90506000601c54601054846122fe9190612f6a565b612308919061305b565b90506000601b54601a5461231c9190612fe3565b905060008261232b8587612fcc565b6123359190612fcc565b90508215612497576003546123549084906001600160a01b03166126c5565b6003546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561239d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c19190612e12565b600354601f5460405163a9059cbb60e01b81526001600160a01b03918216600482015260248101849052929350169063a9059cbb906044016020604051808303816000875af1158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c919061303e565b50601f5460405163b6b55f2560e01b8152600481018390526001600160a01b039091169063b6b55f2590602401600060405180830381600087803b15801561248357600080fd5b505af1925050508015612494575060015b50505b6000811180156124a75750600082115b1561256b576124b581612856565b601b54479060009084906124c99084612f6a565b6124d3919061305b565b905060006124e18284612fcc565b9050811561252557600d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612523573d6000803e3d6000fd5b505b801561256757600e546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612565573d6000803e3d6000fd5b505b5050505b831561257a5761257a846129b0565b50504260255550506027805462ff00001916905550565b6001600160a01b03821660009081526007602052604081205460ff16806125d057506001600160a01b03821660009081526007602052604090205460ff165b156125dd57506000610e8d565b506001610e8d565b601e5460009081906001600160a01b0390811690851603612621576064601854846126109190612f6a565b61261a919061305b565b905061263e565b6064601454846126319190612f6a565b61263b919061305b565b90505b30600090815260056020526040902054612659908290612fe3565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906126aa9085815260200190565b60405180910390a36126bc8184612fcc565b95945050505050565b604080516003808252608082019092526000916020820160608036833701905050905030816000815181106126fc576126fc61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612755573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127799190613093565b8160018151811061278c5761278c61307d565b60200260200101906001600160a01b031690816001600160a01b03168152505081816002815181106127c0576127c061307d565b6001600160a01b039283166020918202929092010152601d546127e69130911685612a2f565b601d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061281f9086906000908690309042906004016130b0565b600060405180830381600087803b15801561283957600080fd5b505af115801561284d573d6000803e3d6000fd5b50505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061288b5761288b61307d565b6001600160a01b03928316602091820292909201810191909152601d54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156128e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129089190613093565b8160018151811061291b5761291b61307d565b6001600160a01b039283166020918202929092010152601d546129419130911684612a2f565b601d5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061297a9085906000908690309042906004016130b0565b600060405180830381600087803b15801561299457600080fd5b505af11580156129a8573d6000803e3d6000fd5b505050505050565b60006129bd60028361305b565b905060006129cb8284612fcc565b9050476129d783612856565b60006129e38247612fcc565b90506129ef8382612b53565b60408051828152602081018590527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506910160405180910390a15050505050565b6001600160a01b038316612a915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610fd1565b6001600160a01b038216612af25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610fd1565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601d54612b6b9030906001600160a01b031684612a2f565b601d54600f5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612bdb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c009190613121565b5050505050565b600060208083528351808285015260005b81811015612c3457858101830151858201604001528201612c18565b81811115612c46576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461142d57600080fd5b600060208284031215612c8357600080fd5b81356110d981612c5c565b60008060408385031215612ca157600080fd5b8235612cac81612c5c565b946020939093013593505050565b600060208284031215612ccc57600080fd5b5035919050565b600080600060608486031215612ce857600080fd5b8335612cf381612c5c565b92506020840135612d0381612c5c565b929592945050506040919091013590565b600080600060608486031215612d2957600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612d5357600080fd5b50508035926020909101359150565b801515811461142d57600080fd5b60008060408385031215612d8357600080fd5b8235612d8e81612c5c565b91506020830135612d9e81612d62565b809150509250929050565b60008060408385031215612dbc57600080fd5b8235612cac81612d62565b600060208284031215612dd957600080fd5b81356110d981612d62565b60008060408385031215612df757600080fd5b8235612e0281612c5c565b91506020830135612d9e81612c5c565b600060208284031215612e2457600080fd5b5051919050565b60008060008060808587031215612e4157600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612eb2578160001904821115612e9857612e98612e61565b80851615612ea557918102915b93841c9390800290612e7c565b509250929050565b600082612ec957506001610e8d565b81612ed657506000610e8d565b8160018114612eec5760028114612ef657612f12565b6001915050610e8d565b60ff841115612f0757612f07612e61565b50506001821b610e8d565b5060208310610133831016604e8410600b8410161715612f35575081810a610e8d565b612f3f8383612e77565b8060001904821115612f5357612f53612e61565b029392505050565b60006110d960ff841683612eba565b6000816000190483118215151615612f8457612f84612e61565b500290565b60208082526023908201527f4c696d69742063616e206e6f74206c657373207468616e20323530206d696c6c60408201526234b7b760e91b606082015260800190565b600082821015612fde57612fde612e61565b500390565b60008219821115612ff657612ff6612e61565b500190565b60208082526023908201527f546f74616c20666565732063616e206e6f742067726561746572207468616e2060408201526231352560e81b606082015260800190565b60006020828403121561305057600080fd5b81516110d981612d62565b60008261307857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156130a557600080fd5b81516110d981612c5c565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131005784516001600160a01b0316835293830193918301916001016130db565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561313657600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204866cdb0e99d0605bb6cd17a353331ec683149142a565ee50b51fb3de1b838f664736f6c634300080e0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.