ETH Price: $2,325.54 (-5.97%)

Token

SAFEITCOIN (SAFEITCOIN)
 

Overview

Max Total Supply

1,000,000,000,000 SAFEITCOIN

Holders

65

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
3,000,000,000 SAFEITCOIN

Value
$0.00
0xBb4DFbCAcFc9Bc17A079442a8dBc6a4f907449B7
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:
SafeitCoin

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-25
*/

/**
X - https://x.com/Safeitcoin
Website - https://safeitcoin.com
*/

/**
SPDX-License-Identifier: Unlicensed
*/

pragma solidity ^0.8.0;

/**
 * SAFEMATH LIBRARY
 */
library SafeMath {
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;// excluded dividend
        uint256 totalRealised;
    }

    IERC20 WBTC = IERC20(0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599);
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    IDEXRouter router;

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

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;// to be shown in UI
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;

    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1 * (10 ** 18);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

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

    constructor (address _router) {
        router = _router != address(0)
        ? IDEXRouter(_router)
        : IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

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

    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.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = WBTC.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(WBTC);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = WBTC.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(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.add(gasLeft.sub(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.add(amount);
            WBTC.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }
/*
returns the  unpaid earnings
*/
    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.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    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();
    }
}

contract SafeitCoin is IERC20, Auth {
    using SafeMath for uint256;

    uint256 public constant MASK = type(uint128).max;
    address WBTC = 0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599;
    address public WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "SAFEITCOIN";
    string constant _symbol = "SAFEITCOIN";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply.div(200); // 0.5%
	uint256 public _maxWallet = _totalSupply.div(100); // 1%

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public _isFree;

    uint256 liquidityFee = 200;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 200;
    uint256 marketingFee = 3600;
    uint256 totalFee = 2400;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver=0x5505F73e6C780E0d0be44FEd8CD92adE786A8E56;

    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;

    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    mapping (address => bool) buyBacker;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    address public distributorAddress;

    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 2000; // 0.005%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor (
        address _dexRouter, address _marketingAddress, address _wETH
    ) Auth(msg.sender) {
        router = IDEXRouter(_dexRouter);
        WETH=_wETH;
        pair = IDEXFactory(router.factory()).createPair(_wETH, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        WETH = router.WETH();
        distributor = new DividendDistributor(_dexRouter);
        distributorAddress = address(distributor);

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        buyBacker[msg.sender] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = _marketingAddress;

        approve(_dexRouter, _totalSupply);
        approve(address(pair), _totalSupply);
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
    

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    modifier onlyBuybacker() { require(buyBacker[msg.sender] == true, ""); _; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    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 approveMax(address spender) external returns (bool) {
        return approve(spender, _totalSupply);
    }

    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] != _totalSupply){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
		 
		// Max  tx check
		address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
		bool isBuy=sender== pair|| sender == routerAddress;
        bool isSell=recipient== pair|| recipient == routerAddress;
		
		checkTxLimit(sender, amount);
		
		// Max wallet check excluding pair and router
		if (!isSell && !_isFree[recipient]){
			require((_balances[recipient] + amount) < _maxWallet, "Max wallet has been triggered");
		}
		
		// No swapping on buy and tx
		if (isSell) {
			if(shouldSwapBack()){ swapBack(); }
			if(shouldAutoBuyback()){ triggerAutoBuyback(); }
		}
        //        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }

        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount;

        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

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

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
//        emit Transfer(sender, recipient, amount);
        return true;
    }



    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return totalFee; }
        if(selling){ return totalFee; }
        return totalFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        /**
         * if (launchedAtTimestamp + 1 days > block.timestamp) {
            return totalFee.mul(18000).div(feeDenominator);
        } else if (buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp) {
            uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
            uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
            return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
        }
        */
        return totalFee;
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));

        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);

        try distributor.deposit{value: amountETHReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountETHMarketing);
            
        

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && autoBuybackEnabled
        && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number // After N blocks from last buyback
        && address(this).balance >= autoBuybackAmount;
    }

    function triggerZeusBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }

    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WETH;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }
    
    function Sweep() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }


    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() public authorized {
        require(launchedAt == 0, "Already launched boi");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
    }
	
	function setMaxWallet(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxWallet = amount;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxTxAmount = amount;
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

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

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setFree(address holder) public onlyOwner {
        _isFree[holder] = true;
    }
    
    function unSetFree(address holder) public onlyOwner {
        _isFree[holder] = false;
    }
    
    function checkFree(address holder) public view onlyOwner returns(bool){
        return _isFree[holder];
    }

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator);
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dexRouter","type":"address"},{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_wETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","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":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"holder","type":"address"}],"name":"checkFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","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":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"setFree","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":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","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":"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerZeusBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"unSetFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600280546001600160a01b0319908116732260fac5e5542a773aa44fbcfedf7c193bc2c5991790915560038054821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc217905560048054821661dead9081179091556005805483169055600680549092161790556200007a6009600a6200067d565b6200008b9064e8d4a510006200068d565b60078190556200009d9060c8620004e0565b600855600754620000b0906064620004e0565b60095560c860108190555f6011556012819055610e10601355610960601455612710601555601780546001600160a01b031916735505f73e6c780e0d0be44fed8cd92ade786a8e5617905560196018819055606490819055601e91909155601f556107086021556022805460ff199081169091556207a120602b55602c8054909116600117905560075462000149906107d090620006a7565b602d5534801562000158575f80fd5b5060405162003d7138038062003d718339810160408190526200017b91620006e3565b5f8054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155601a805483166001600160a01b038881169182179092556003805490941691861691909117909255825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa15801562000207573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200022d91906200072a565b6040516364e329cb60e11b81526001600160a01b038381166004830152306024830152919091169063c9c65396906044016020604051808303815f875af11580156200027b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a191906200072a565b601b80546001600160a01b0319166001600160a01b03928316179055600754305f908152600b60209081526040808320601a8054871685529083529281902093909355905482516315ab88c960e31b8152925193169263ad5c46489260048082019392918290030181865afa1580156200031d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200034391906200072a565b600380546001600160a01b0319166001600160a01b03929092169190911790556040518390620003739062000562565b6001600160a01b039091168152602001604051809103905ff0801580156200039d573d5f803e3d5ffd5b50602980546001600160a01b039283166001600160a01b03199182168117909255602a80548216909217909155335f818152600c60209081526040808320805460ff199081166001908117909255600d84528285208054821683179055601b5488168552600e84528285208054821683179055308552828520805482168317905560045488168552828520805482168317905585855260239093529220805490911690911790556016805483169091179055601780549285169290911691909117905560075462000470908490620004f6565b50601b546007546200048c916001600160a01b031690620004f6565b50600754335f818152600a6020908152604080832085905551938452919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a350505062000746565b5f620004ed8284620006a7565b90505b92915050565b335f818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620005519086815260200190565b60405180910390a350600192915050565b610e0d8062002f6483390190565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115620005c457815f1904821115620005a857620005a862000570565b80851615620005b657918102915b93841c939080029062000589565b509250929050565b5f82620005dc57506001620004f0565b81620005ea57505f620004f0565b81600181146200060357600281146200060e576200062e565b6001915050620004f0565b60ff84111562000622576200062262000570565b50506001821b620004f0565b5060208310610133831016604e8410600b841016171562000653575081810a620004f0565b6200065f838362000584565b805f190482111562000675576200067562000570565b029392505050565b5f620004ed60ff841683620005cc565b8082028115828204841417620004f057620004f062000570565b5f82620006c257634e487b7160e01b5f52601260045260245ffd5b500490565b80516001600160a01b0381168114620006de575f80fd5b919050565b5f805f60608486031215620006f6575f80fd5b6200070184620006c7565b92506200071160208501620006c7565b91506200072160408501620006c7565b90509250925092565b5f602082840312156200073b575f80fd5b620004ed82620006c7565b61281080620007545f395ff3fe60806040526004361061035e575f3560e01c8063893d20e8116101bd578063d51ed1c8116100f2578063f1f3bca311610092578063f708a64f1161006d578063f708a64f146109cf578063f84ba65d146109ee578063f887ea4014610a0d578063fe9fbb8014610a2c575f80fd5b8063f1f3bca314610972578063f2fde38b14610991578063f5cfec0a146109b0575f80fd5b8063df20fd49116100cd578063df20fd49146108f2578063e91f214e14610911578063e96fada214610934578063f0b37c0414610953575f80fd5b8063d51ed1c81461087b578063d806d12f1461089a578063dd62ed3e146108ae575f80fd5b8063a9059cbb1161015d578063b6a5d7de11610138578063b6a5d7de14610813578063bf56b37114610832578063c6d2577d14610847578063ca33e64c1461085c575f80fd5b8063a9059cbb146107c1578063ad5c4648146107e0578063b210b06d146107ff575f80fd5b80639d1944f5116101985780639d1944f514610745578063a4b45c0014610764578063a51af4c514610783578063a8aa1b31146107a2575f80fd5b8063893d20e8146106f657806389ef69f61461072657806395d89b41146103e5575f80fd5b80632d48e896116102935780635d0044ca116102335780637088fb7f1161020e5780637088fb7f1461068457806370a08231146106985780637d1db4a5146106cc57806382247ec0146106e1575f80fd5b80635d0044ca1461062d578063658d4b7f1461064c5780636ddd17131461066b575f80fd5b80633425c0011161026e5780633425c001146105b75780633bb8a8d4146105d6578063571ac8b0146105ef5780635c85974f1461060e575f80fd5b80632d48e896146105505780632f54bf6e1461056f578063313ce5671461059c575f80fd5b80631161ae39116102fe5780632375ce40116102d95780632375ce40146104d057806323b872dd146104ef578063296020e71461050e5780632b112e491461053c575f80fd5b80631161ae391461047e57806318160ddd1461049d578063201e7991146104b1575f80fd5b806304a66b481161033957806304a66b48146103c657806306fdde03146103e557806307c89fe814610430578063095ea7b31461045f575f80fd5b806301339c21146103695780630445b6671461037f578063048c7baf146103a7575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d610a63565b005b34801561038a575f80fd5b50610394602d5481565b6040519081526020015b60405180910390f35b3480156103b2575f80fd5b5061037d6103c136600461240a565b610b0e565b3480156103d1575f80fd5b5061037d6103e0366004612440565b610b82565b3480156103f0575f80fd5b50604080518082018252600a81527f534146454954434f494e000000000000000000000000000000000000000000006020820152905161039e9190612477565b34801561043b575f80fd5b5061044f61044a3660046124d9565b610c13565b604051901515815260200161039e565b34801561046a575f80fd5b5061044f6104793660046124f4565b610c78565b348015610489575f80fd5b5061044f61049836600461251e565b610ce4565b3480156104a8575f80fd5b50600754610394565b3480156104bc575f80fd5b5061037d6104cb36600461251e565b610cf7565b3480156104db575f80fd5b5061037d6104ea36600461253e565b610d4e565b3480156104fa575f80fd5b5061044f610509366004612567565b610dc9565b348015610519575f80fd5b5061044f6105283660046124d9565b600f6020525f908152604090205460ff1681565b348015610547575f80fd5b50610394610e91565b34801561055b575f80fd5b5061037d61056a36600461251e565b610ee1565b34801561057a575f80fd5b5061044f6105893660046124d9565b5f546001600160a01b0391821691161490565b3480156105a7575f80fd5b506040516009815260200161039e565b3480156105c2575f80fd5b5061037d6105d13660046124d9565b610fab565b3480156105e1575f80fd5b5060225461044f9060ff1681565b3480156105fa575f80fd5b5061044f6106093660046124d9565b61100d565b348015610619575f80fd5b5061037d6106283660046125a5565b61101a565b348015610638575f80fd5b5061037d6106473660046125a5565b611086565b348015610657575f80fd5b5061037d6106663660046125bc565b6110f2565b348015610676575f80fd5b50602c5461044f9060ff1681565b34801561068f575f80fd5b5061037d611168565b3480156106a3575f80fd5b506103946106b23660046124d9565b6001600160a01b03165f908152600a602052604090205490565b3480156106d7575f80fd5b5061039460085481565b3480156106ec575f80fd5b5061039460095481565b348015610701575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161039e565b348015610731575f80fd5b5061037d6107403660046124d9565b6111da565b348015610750575f80fd5b5061037d61075f3660046125a5565b61123f565b34801561076f575f80fd5b5061037d61077e3660046125ef565b61129e565b34801561078e575f80fd5b50602a5461070e906001600160a01b031681565b3480156107ad575f80fd5b50601b5461070e906001600160a01b031681565b3480156107cc575f80fd5b5061044f6107db3660046124f4565b611325565b3480156107eb575f80fd5b5060035461070e906001600160a01b031681565b34801561080a575f80fd5b5061037d611331565b34801561081e575f80fd5b5061037d61082d3660046124d9565b611383565b34801561083d575f80fd5b50610394601c5481565b348015610852575f80fd5b50610394601d5481565b348015610867575f80fd5b5060165461070e906001600160a01b031681565b348015610886575f80fd5b506103946108953660046125a5565b6113eb565b3480156108a5575f80fd5b50601454610394565b3480156108b9575f80fd5b506103946108c83660046125ef565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b3480156108fd575f80fd5b5061037d61090c366004612626565b61142d565b34801561091c575f80fd5b506103946fffffffffffffffffffffffffffffffff81565b34801561093f575f80fd5b5060175461070e906001600160a01b031681565b34801561095e575f80fd5b5061037d61096d3660046124d9565b611490565b34801561097d575f80fd5b5061039461098c366004612640565b6114f2565b34801561099c575f80fd5b5061037d6109ab3660046124d9565b611526565b3480156109bb575f80fd5b5061037d6109ca366004612659565b6115e0565b3480156109da575f80fd5b5061037d6109e93660046125bc565b611687565b3480156109f9575f80fd5b5061037d610a083660046125bc565b6117ae565b348015610a18575f80fd5b50601a5461070e906001600160a01b031681565b348015610a37575f80fd5b5061044f610a463660046124d9565b6001600160a01b03165f9081526001602052604090205460ff1690565b335f9081526001602052604090205460ff16610ab45760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b601c5415610b045760405162461bcd60e51b815260206004820152601460248201527f416c7265616479206c61756e6368656420626f690000000000000000000000006044820152606401610aab565b43601c5542601d55565b335f9081526001602052604090205460ff16610b5a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6022805460ff1916941515949094179093556024919091555f60255560265560275543602855565b335f9081526001602052604090205460ff16610bce5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6010859055601184905560128390556013829055610bf882610bf285818989611824565b90611824565b601481905560158290558111610c0c575f80fd5b5050505050565b5f80546001600160a01b03163314610c565760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b506001600160a01b0381165f908152600f602052604090205460ff165b919050565b335f818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cd29086815260200190565b60405180910390a35060015b92915050565b5f82610cef836113eb565b119392505050565b335f9081526001602052604090205460ff16610d435760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b601891909155601955565b335f9081526001602052604090205460ff16610d9a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6002610da6838561268e565b11158015610db357508183115b610dbb575f80fd5b601e92909255601f55602155565b6007546001600160a01b0384165f908152600b60209081526040808320338452909152812054909114610e7c57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387165f908152600b82528381203382529091529190912054610e5891849061182f565b6001600160a01b0385165f908152600b602090815260408083203384529091529020555b610e8784848461185a565b90505b9392505050565b6005546001600160a01b03165f908152600a6020526040812054610edc906004546001600160a01b03165f908152600a6020526040902054610ed69060075490611c85565b90611c85565b905090565b335f9081526001602052604090205460ff16610f2d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6029546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610f91575f80fd5b505af1158015610fa3573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610fed5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600f60205260409020805460ff19169055565b5f610cde82600754610c78565b335f9081526001602052604090205460ff166110665760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6103e8600754611076919061268e565b811015611081575f80fd5b600855565b335f9081526001602052604090205460ff166110d25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6103e86007546110e2919061268e565b8110156110ed575f80fd5b600955565b335f9081526001602052604090205460ff1661113e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6040514790339082156108fc029083905f818181858888f193505050501580156111d6573d5f803e3d5ffd5b5050565b5f546001600160a01b0316331461121c5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600f60205260409020805460ff19166001179055565b335f9081526001602052604090205460ff1661128b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b620b71b08110611299575f80fd5b602b55565b335f9081526001602052604090205460ff166112ea5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b601680546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560178054929093169116179055565b5f610e8a33848461185a565b335f9081526001602052604090205460ff1661137d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b5f602055565b5f546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600160208190526040909120805460ff19169091179055565b5f610cde6113f7610e91565b601b546001600160a01b03165f908152600a602052604090205461142790611420906002611c90565b8590611c90565b90611c9b565b335f9081526001602052604090205460ff166114795760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b602c805460ff191692151592909217909155602d55565b5f546001600160a01b031633146114d25760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600160205260409020805460ff19169055565b5f43601c54600161150391906126ad565b1061151057505060145490565b811561151e57505060145490565b505060145490565b5f546001600160a01b031633146115685760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b5f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b335f9081526001602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6004546116439083906001600160a01b0316611ca6565b80156111d6574260209081556021546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a910160405180910390a15050565b335f9081526001602052604090205460ff166116d35760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03821630148015906116fa5750601b546001600160a01b03838116911614155b611702575f80fd5b6001600160a01b0382165f908152600e60205260409020805460ff1916821580159190911790915561176657602954604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610f7a565b6029546001600160a01b038381165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610f7a565b335f9081526001602052604090205460ff166117fa5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b5f610e8a82846126ad565b5f81848411156118525760405162461bcd60e51b8152600401610aab9190612477565b505050900390565b602e545f9060ff161561187957611872848484611dc1565b9050610e8a565b601b54737a250d5630b4cf539739df2c5dacb4c659f2488d905f906001600160a01b03878116911614806118be5750816001600160a01b0316866001600160a01b0316145b601b549091505f906001600160a01b03878116911614806118f05750826001600160a01b0316866001600160a01b0316145b90506118fc8786611e6a565b8015801561192257506001600160a01b0386165f908152600f602052604090205460ff16155b1561199a576009546001600160a01b0387165f908152600a602052604090205461194d9087906126ad565b1061199a5760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610aab565b80156119ca576119a8611ede565b156119b5576119b5611f2b565b6119bd6122a2565b156119ca576119ca6122fc565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038a165f908152600a9091529190912054611a2491879061182f565b6001600160a01b0388165f908152600a6020908152604080832093909355600c90529081205460ff1615611a585785611a63565b611a63888888612343565b6001600160a01b0388165f908152600a6020526040902054909150611a889082611824565b6001600160a01b038089165f908152600a6020908152604080832094909455918b168152600e909152205460ff16611b27576029546001600160a01b038981165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611b14575f80fd5b505af1925050508015611b25575060015b505b6001600160a01b0387165f908152600e602052604090205460ff16611bb3576029546001600160a01b038881165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611ba0575f80fd5b505af1925050508015611bb1575060015b505b602954602b546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991611c019160040190815260200190565b5f604051808303815f87803b158015611c18575f80fd5b505af1925050508015611c29575060015b50866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c6f91815260200190565b60405180910390a3506001979650505050505050565b5f610e8a82846126c0565b5f610e8a82846126d3565b5f610e8a828461268e565b602e805460ff191660011790556040805160028082526060820183525f92602083019080368337505060035482519293506001600160a01b0316918391505f90611cf257611cf26126ea565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d2657611d266126ea565b6001600160a01b039283166020918202929092010152601a546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908590611d84905f90869088904290600401612740565b5f604051808303818588803b158015611d9b575f80fd5b505af1158015611dad573d5f803e3d5ffd5b5050602e805460ff19169055505050505050565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0386165f908152600a90915291822054611e1a91849061182f565b6001600160a01b038086165f908152600a60205260408082209390935590851681522054611e489083611824565b6001600160a01b0384165f908152600a60205260409020555060019392505050565b60085481111580611e9257506001600160a01b0382165f908152600d602052604090205460ff165b6111d65760405162461bcd60e51b815260206004820152601160248201527f5458204c696d69742045786365656465640000000000000000000000000000006044820152606401610aab565b601b545f906001600160a01b03163314801590611efe5750602e5460ff16155b8015611f0c5750602c5460ff165b8015610edc575050602d54305f908152600a6020526040902054101590565b602e805460ff191660011790556018546019545f91611f4991610ce4565b611f5557601054611f57565b5f5b90505f611f7a600261142760145461142786602d54611c9090919063ffffffff16565b90505f611f9282602d54611c8590919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611fca57611fca6126ea565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611ffb57611ffb6126ea565b6001600160a01b039283166020918202929092010152601a546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac9479061205d9086905f90879030904290600401612774565b5f604051808303815f87803b158015612074575f80fd5b505af1158015612086573d5f803e3d5ffd5b505050505f61209e8247611c8590919063ffffffff16565b90505f6120b86120af886002611c9b565b60145490611c85565b90505f6120cc60026114278481878d611c90565b90505f6120e88361142760125487611c9090919063ffffffff16565b90505f6121048461142760135488611c9090919063ffffffff16565b905060295f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015612153575f80fd5b505af193505050508015612165575060015b506017546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561219d573d5f803e3d5ffd5b50881561228c57601a546016546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af115801561222a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061224f91906127af565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805460ff191690555050505050505050565b601b545f906001600160a01b031633148015906122c25750602e5460ff16155b80156122d0575060225460ff165b80156122eb5750436027546028546122e891906126ad565b11155b8015610edc57505060265447101590565b60265460045461231591906001600160a01b0316611ca6565b4360285560265460255461232891611824565b60258190556024541015612341576022805460ff191690555b565b601554601b545f91829161237491906114279061236d906001600160a01b038981169116146114f2565b8690611c90565b305f908152600a60205260409020549091506123909082611824565b305f818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123e09085815260200190565b60405180910390a36123f28382611c85565b95945050505050565b80358015158114610c73575f80fd5b5f805f806080858703121561241d575f80fd5b612426856123fb565b966020860135965060408601359560600135945092505050565b5f805f805f60a08688031215612454575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f6020808352835180828501525f5b818110156124a257858101830151858201604001528201612486565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146124d6575f80fd5b50565b5f602082840312156124e9575f80fd5b8135610e8a816124c2565b5f8060408385031215612505575f80fd5b8235612510816124c2565b946020939093013593505050565b5f806040838503121561252f575f80fd5b50508035926020909101359150565b5f805f60608486031215612550575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612579575f80fd5b8335612584816124c2565b92506020840135612594816124c2565b929592945050506040919091013590565b5f602082840312156125b5575f80fd5b5035919050565b5f80604083850312156125cd575f80fd5b82356125d8816124c2565b91506125e6602084016123fb565b90509250929050565b5f8060408385031215612600575f80fd5b823561260b816124c2565b9150602083013561261b816124c2565b809150509250929050565b5f8060408385031215612637575f80fd5b612510836123fb565b5f60208284031215612650575f80fd5b610e8a826123fb565b5f806040838503121561266a575f80fd5b823591506125e6602084016123fb565b634e487b7160e01b5f52601160045260245ffd5b5f826126a857634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610cde57610cde61267a565b81810381811115610cde57610cde61267a565b8082028115828204841417610cde57610cde61267a565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156127355781516001600160a01b031687529582019590820190600101612710565b509495945050505050565b848152608060208201525f61275860808301866126fe565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61279260a08301866126fe565b6001600160a01b0394909416606083015250608001529392505050565b5f805f606084860312156127c1575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ff77104cad1d1a98874ba04cd2ae0b67bf0ccd43305b984fabb73ad0c7a4cbc364736f6c634300081500336080604052600180546001600160a01b0319908116732260fac5e5542a773aa44fbcfedf7c193bc2c599179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561007c575f80fd5b50604051610e0d380380610e0d83398101604081905261009b916100f4565b6001600160a01b0381166100c357737a250d5630b4cf539739df2c5dacb4c659f2488d6100c5565b805b600380546001600160a01b03929092166001600160a01b03199283161790555f80549091163317905550610121565b5f60208284031215610104575f80fd5b81516001600160a01b038116811461011a575f80fd5b9392505050565b610cdf8061012e5f395ff3fe6080604052600436106100d9575f3560e01c8063ce7c2ac21161007c578063efca2eed11610057578063efca2eed14610215578063f0fc6bca1461022a578063ffb2c4791461023e578063ffd49c841461025d575f80fd5b8063ce7c2ac2146101a3578063d0e30db0146101f8578063e2d2e21914610200575f80fd5b80632d48e896116100b75780632d48e896146101455780633a98ef39146101645780634fab0ae814610179578063997664d71461018e575f80fd5b806311ce023d146100dd57806314b6ca961461010557806328fd319814610126575b5f80fd5b3480156100e8575f80fd5b506100f2600c5481565b6040519081526020015b60405180910390f35b348015610110575f80fd5b5061012461011f366004610adc565b610272565b005b348015610131575f80fd5b506100f2610140366004610b04565b6103ed565b348015610150575f80fd5b5061012461015f366004610b1d565b610473565b34801561016f575f80fd5b506100f260085481565b348015610184575f80fd5b506100f2600e5481565b348015610199575f80fd5b506100f260095481565b3480156101ae575f80fd5b506101dd6101bd366004610b04565b60076020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016100fc565b610124610493565b34801561020b575f80fd5b506100f2600b5481565b348015610220575f80fd5b506100f2600a5481565b348015610235575f80fd5b506101246106cc565b348015610249575f80fd5b50610124610258366004610b3d565b6106d7565b348015610268575f80fd5b506100f2600d5481565b5f546001600160a01b03163314610287575f80fd5b6001600160a01b0382165f90815260076020526040902054156102ad576102ad826107d2565b5f811180156102d157506001600160a01b0382165f90815260076020526040902054155b1561034357600480546001600160a01b0384165f818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b01805473ffffffffffffffffffffffffffffffffffffffff19169091179055610375565b8015801561036757506001600160a01b0382165f9081526007602052604090205415155b156103755761037582610902565b6001600160a01b0382165f908152600760205260409020546008546103a591839161039f91610a2c565b90610a40565b6008556001600160a01b0382165f9081526007602052604090208190556103cb81610a4b565b6001600160a01b039092165f9081526007602052604090206001019190915550565b6001600160a01b0381165f90815260076020526040812054810361041257505f919050565b6001600160a01b0382165f9081526007602052604081205461043390610a4b565b6001600160a01b0384165f9081526007602052604090206001015490915080821161046157505f9392505050565b61046b8282610a2c565b949350505050565b5f546001600160a01b03163314610488575f80fd5b600d91909155600e55565b5f546001600160a01b031633146104a8575f80fd5b6001546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156104ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105129190610b54565b6040805160028082526060820183529293505f929091602083019080368337505060025482519293506001600160a01b0316918391505f9061055657610556610b6b565b6001600160a01b039283166020918202929092010152600180548351921691839190811061058657610586610b6b565b6001600160a01b0392831660209182029290920101526003546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de959034906105e4905f90869030904290600401610b7f565b5f604051808303818588803b1580156105fb575f80fd5b505af115801561060d573d5f803e3d5ffd5b50506001546040516370a0823160e01b81523060048201525f945061068a93508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610660573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106849190610b54565b90610a2c565b60095490915061069a9082610a40565b600955600854600c546106c4916106bb916106b59085610a67565b90610a72565b600b5490610a40565b600b55505050565b6106d5336107d2565b565b5f546001600160a01b031633146106ec575f80fd5b6004545f8190036106fb575050565b5f805a90505f5b848310801561071057508381105b156107cb5783600f5410610723575f600f555b6107546004600f548154811061073b5761073b610b6b565b5f918252602090912001546001600160a01b0316610a7d565b1561078a5761078a6004600f548154811061077157610771610b6b565b5f918252602090912001546001600160a01b03166107d2565b61079f6107985a8490610a2c565b8490610a40565b92505a600f80549193505f6107b383610bfb565b919050555080806107c390610bfb565b915050610702565b5050505050565b6001600160a01b0381165f9081526007602052604081205490036107f35750565b5f6107fd826103ed565b905080156108fe57600a546108129082610a40565b600a556001546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af115801561087e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a29190610c13565b506001600160a01b0382165f90815260066020908152604080832042905560079091529020600201546108d59082610a40565b6001600160a01b0383165f9081526007602052604090206002810191909155546103cb90610a4b565b5050565b6004805461091290600190610c39565b8154811061092257610922610b6b565b5f9182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061095f5761095f610b6b565b5f918252602080832091909101805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039485161790559183168152600591829052604081205460048054919392916109b790600190610c39565b815481106109c7576109c7610b6b565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205560048054806109fc576109fc610c4c565b5f8281526020902081015f19908101805473ffffffffffffffffffffffffffffffffffffffff1916905501905550565b5f610a378284610c39565b90505b92915050565b5f610a378284610c60565b5f610a3a600c546106b5600b5485610a6790919063ffffffff16565b5f610a378284610c73565b5f610a378284610c8a565b600d546001600160a01b0382165f9081526006602052604081205490914291610aa69190610c60565b108015610a3a5750600e54610aba836103ed565b1192915050565b80356001600160a01b0381168114610ad7575f80fd5b919050565b5f8060408385031215610aed575f80fd5b610af683610ac1565b946020939093013593505050565b5f60208284031215610b14575f80fd5b610a3782610ac1565b5f8060408385031215610b2e575f80fd5b50508035926020909101359150565b5f60208284031215610b4d575f80fd5b5035919050565b5f60208284031215610b64575f80fd5b5051919050565b634e487b7160e01b5f52603260045260245ffd5b5f60808201868352602060808185015281875180845260a08601915082890193505f5b81811015610bc75784516001600160a01b031683529383019391830191600101610ba2565b50506001600160a01b039690961660408501525050506060015292915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610c0c57610c0c610be7565b5060010190565b5f60208284031215610c23575f80fd5b81518015158114610c32575f80fd5b9392505050565b81810381811115610a3a57610a3a610be7565b634e487b7160e01b5f52603160045260245ffd5b80820180821115610a3a57610a3a610be7565b8082028115828204841417610a3a57610a3a610be7565b5f82610ca457634e487b7160e01b5f52601260045260245ffd5b50049056fea264697066735822122027400a6a845ca4bd23749f0df7081453e3b4d90407332ffd95eefdb97329c2c164736f6c634300081500330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005505f73e6c780e0d0be44fed8cd92ade786a8e56000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

Deployed Bytecode

0x60806040526004361061035e575f3560e01c8063893d20e8116101bd578063d51ed1c8116100f2578063f1f3bca311610092578063f708a64f1161006d578063f708a64f146109cf578063f84ba65d146109ee578063f887ea4014610a0d578063fe9fbb8014610a2c575f80fd5b8063f1f3bca314610972578063f2fde38b14610991578063f5cfec0a146109b0575f80fd5b8063df20fd49116100cd578063df20fd49146108f2578063e91f214e14610911578063e96fada214610934578063f0b37c0414610953575f80fd5b8063d51ed1c81461087b578063d806d12f1461089a578063dd62ed3e146108ae575f80fd5b8063a9059cbb1161015d578063b6a5d7de11610138578063b6a5d7de14610813578063bf56b37114610832578063c6d2577d14610847578063ca33e64c1461085c575f80fd5b8063a9059cbb146107c1578063ad5c4648146107e0578063b210b06d146107ff575f80fd5b80639d1944f5116101985780639d1944f514610745578063a4b45c0014610764578063a51af4c514610783578063a8aa1b31146107a2575f80fd5b8063893d20e8146106f657806389ef69f61461072657806395d89b41146103e5575f80fd5b80632d48e896116102935780635d0044ca116102335780637088fb7f1161020e5780637088fb7f1461068457806370a08231146106985780637d1db4a5146106cc57806382247ec0146106e1575f80fd5b80635d0044ca1461062d578063658d4b7f1461064c5780636ddd17131461066b575f80fd5b80633425c0011161026e5780633425c001146105b75780633bb8a8d4146105d6578063571ac8b0146105ef5780635c85974f1461060e575f80fd5b80632d48e896146105505780632f54bf6e1461056f578063313ce5671461059c575f80fd5b80631161ae39116102fe5780632375ce40116102d95780632375ce40146104d057806323b872dd146104ef578063296020e71461050e5780632b112e491461053c575f80fd5b80631161ae391461047e57806318160ddd1461049d578063201e7991146104b1575f80fd5b806304a66b481161033957806304a66b48146103c657806306fdde03146103e557806307c89fe814610430578063095ea7b31461045f575f80fd5b806301339c21146103695780630445b6671461037f578063048c7baf146103a7575f80fd5b3661036557005b5f80fd5b348015610374575f80fd5b5061037d610a63565b005b34801561038a575f80fd5b50610394602d5481565b6040519081526020015b60405180910390f35b3480156103b2575f80fd5b5061037d6103c136600461240a565b610b0e565b3480156103d1575f80fd5b5061037d6103e0366004612440565b610b82565b3480156103f0575f80fd5b50604080518082018252600a81527f534146454954434f494e000000000000000000000000000000000000000000006020820152905161039e9190612477565b34801561043b575f80fd5b5061044f61044a3660046124d9565b610c13565b604051901515815260200161039e565b34801561046a575f80fd5b5061044f6104793660046124f4565b610c78565b348015610489575f80fd5b5061044f61049836600461251e565b610ce4565b3480156104a8575f80fd5b50600754610394565b3480156104bc575f80fd5b5061037d6104cb36600461251e565b610cf7565b3480156104db575f80fd5b5061037d6104ea36600461253e565b610d4e565b3480156104fa575f80fd5b5061044f610509366004612567565b610dc9565b348015610519575f80fd5b5061044f6105283660046124d9565b600f6020525f908152604090205460ff1681565b348015610547575f80fd5b50610394610e91565b34801561055b575f80fd5b5061037d61056a36600461251e565b610ee1565b34801561057a575f80fd5b5061044f6105893660046124d9565b5f546001600160a01b0391821691161490565b3480156105a7575f80fd5b506040516009815260200161039e565b3480156105c2575f80fd5b5061037d6105d13660046124d9565b610fab565b3480156105e1575f80fd5b5060225461044f9060ff1681565b3480156105fa575f80fd5b5061044f6106093660046124d9565b61100d565b348015610619575f80fd5b5061037d6106283660046125a5565b61101a565b348015610638575f80fd5b5061037d6106473660046125a5565b611086565b348015610657575f80fd5b5061037d6106663660046125bc565b6110f2565b348015610676575f80fd5b50602c5461044f9060ff1681565b34801561068f575f80fd5b5061037d611168565b3480156106a3575f80fd5b506103946106b23660046124d9565b6001600160a01b03165f908152600a602052604090205490565b3480156106d7575f80fd5b5061039460085481565b3480156106ec575f80fd5b5061039460095481565b348015610701575f80fd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161039e565b348015610731575f80fd5b5061037d6107403660046124d9565b6111da565b348015610750575f80fd5b5061037d61075f3660046125a5565b61123f565b34801561076f575f80fd5b5061037d61077e3660046125ef565b61129e565b34801561078e575f80fd5b50602a5461070e906001600160a01b031681565b3480156107ad575f80fd5b50601b5461070e906001600160a01b031681565b3480156107cc575f80fd5b5061044f6107db3660046124f4565b611325565b3480156107eb575f80fd5b5060035461070e906001600160a01b031681565b34801561080a575f80fd5b5061037d611331565b34801561081e575f80fd5b5061037d61082d3660046124d9565b611383565b34801561083d575f80fd5b50610394601c5481565b348015610852575f80fd5b50610394601d5481565b348015610867575f80fd5b5060165461070e906001600160a01b031681565b348015610886575f80fd5b506103946108953660046125a5565b6113eb565b3480156108a5575f80fd5b50601454610394565b3480156108b9575f80fd5b506103946108c83660046125ef565b6001600160a01b039182165f908152600b6020908152604080832093909416825291909152205490565b3480156108fd575f80fd5b5061037d61090c366004612626565b61142d565b34801561091c575f80fd5b506103946fffffffffffffffffffffffffffffffff81565b34801561093f575f80fd5b5060175461070e906001600160a01b031681565b34801561095e575f80fd5b5061037d61096d3660046124d9565b611490565b34801561097d575f80fd5b5061039461098c366004612640565b6114f2565b34801561099c575f80fd5b5061037d6109ab3660046124d9565b611526565b3480156109bb575f80fd5b5061037d6109ca366004612659565b6115e0565b3480156109da575f80fd5b5061037d6109e93660046125bc565b611687565b3480156109f9575f80fd5b5061037d610a083660046125bc565b6117ae565b348015610a18575f80fd5b50601a5461070e906001600160a01b031681565b348015610a37575f80fd5b5061044f610a463660046124d9565b6001600160a01b03165f9081526001602052604090205460ff1690565b335f9081526001602052604090205460ff16610ab45760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b601c5415610b045760405162461bcd60e51b815260206004820152601460248201527f416c7265616479206c61756e6368656420626f690000000000000000000000006044820152606401610aab565b43601c5542601d55565b335f9081526001602052604090205460ff16610b5a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6022805460ff1916941515949094179093556024919091555f60255560265560275543602855565b335f9081526001602052604090205460ff16610bce5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6010859055601184905560128390556013829055610bf882610bf285818989611824565b90611824565b601481905560158290558111610c0c575f80fd5b5050505050565b5f80546001600160a01b03163314610c565760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b506001600160a01b0381165f908152600f602052604090205460ff165b919050565b335f818152600b602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610cd29086815260200190565b60405180910390a35060015b92915050565b5f82610cef836113eb565b119392505050565b335f9081526001602052604090205460ff16610d435760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b601891909155601955565b335f9081526001602052604090205460ff16610d9a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6002610da6838561268e565b11158015610db357508183115b610dbb575f80fd5b601e92909255601f55602155565b6007546001600160a01b0384165f908152600b60209081526040808320338452909152812054909114610e7c57604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387165f908152600b82528381203382529091529190912054610e5891849061182f565b6001600160a01b0385165f908152600b602090815260408083203384529091529020555b610e8784848461185a565b90505b9392505050565b6005546001600160a01b03165f908152600a6020526040812054610edc906004546001600160a01b03165f908152600a6020526040902054610ed69060075490611c85565b90611c85565b905090565b335f9081526001602052604090205460ff16610f2d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6029546040517f2d48e89600000000000000000000000000000000000000000000000000000000815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015610f91575f80fd5b505af1158015610fa3573d5f803e3d5ffd5b505050505050565b5f546001600160a01b03163314610fed5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600f60205260409020805460ff19169055565b5f610cde82600754610c78565b335f9081526001602052604090205460ff166110665760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6103e8600754611076919061268e565b811015611081575f80fd5b600855565b335f9081526001602052604090205460ff166110d25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6103e86007546110e2919061268e565b8110156110ed575f80fd5b600955565b335f9081526001602052604090205460ff1661113e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6040514790339082156108fc029083905f818181858888f193505050501580156111d6573d5f803e3d5ffd5b5050565b5f546001600160a01b0316331461121c5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600f60205260409020805460ff19166001179055565b335f9081526001602052604090205460ff1661128b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b620b71b08110611299575f80fd5b602b55565b335f9081526001602052604090205460ff166112ea5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b601680546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560178054929093169116179055565b5f610e8a33848461185a565b335f9081526001602052604090205460ff1661137d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b5f602055565b5f546001600160a01b031633146113c55760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600160208190526040909120805460ff19169091179055565b5f610cde6113f7610e91565b601b546001600160a01b03165f908152600a602052604090205461142790611420906002611c90565b8590611c90565b90611c9b565b335f9081526001602052604090205460ff166114795760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b602c805460ff191692151592909217909155602d55565b5f546001600160a01b031633146114d25760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b6001600160a01b03165f908152600160205260409020805460ff19169055565b5f43601c54600161150391906126ad565b1061151057505060145490565b811561151e57505060145490565b505060145490565b5f546001600160a01b031633146115685760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610aab565b5f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b335f9081526001602052604090205460ff1661162c5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6004546116439083906001600160a01b0316611ca6565b80156111d6574260209081556021546040519081527f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a910160405180910390a15050565b335f9081526001602052604090205460ff166116d35760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03821630148015906116fa5750601b546001600160a01b03838116911614155b611702575f80fd5b6001600160a01b0382165f908152600e60205260409020805460ff1916821580159190911790915561176657602954604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca9690604401610f7a565b6029546001600160a01b038381165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610f7a565b335f9081526001602052604090205460ff166117fa5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610aab565b6001600160a01b03919091165f908152600d60205260409020805460ff1916911515919091179055565b5f610e8a82846126ad565b5f81848411156118525760405162461bcd60e51b8152600401610aab9190612477565b505050900390565b602e545f9060ff161561187957611872848484611dc1565b9050610e8a565b601b54737a250d5630b4cf539739df2c5dacb4c659f2488d905f906001600160a01b03878116911614806118be5750816001600160a01b0316866001600160a01b0316145b601b549091505f906001600160a01b03878116911614806118f05750826001600160a01b0316866001600160a01b0316145b90506118fc8786611e6a565b8015801561192257506001600160a01b0386165f908152600f602052604090205460ff16155b1561199a576009546001600160a01b0387165f908152600a602052604090205461194d9087906126ad565b1061199a5760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e207472696767657265640000006044820152606401610aab565b80156119ca576119a8611ede565b156119b5576119b5611f2b565b6119bd6122a2565b156119ca576119ca6122fc565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038a165f908152600a9091529190912054611a2491879061182f565b6001600160a01b0388165f908152600a6020908152604080832093909355600c90529081205460ff1615611a585785611a63565b611a63888888612343565b6001600160a01b0388165f908152600a6020526040902054909150611a889082611824565b6001600160a01b038089165f908152600a6020908152604080832094909455918b168152600e909152205460ff16611b27576029546001600160a01b038981165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611b14575f80fd5b505af1925050508015611b25575060015b505b6001600160a01b0387165f908152600e602052604090205460ff16611bb3576029546001600160a01b038881165f818152600a602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611ba0575f80fd5b505af1925050508015611bb1575060015b505b602954602b546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991611c019160040190815260200190565b5f604051808303815f87803b158015611c18575f80fd5b505af1925050508015611c29575060015b50866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611c6f91815260200190565b60405180910390a3506001979650505050505050565b5f610e8a82846126c0565b5f610e8a82846126d3565b5f610e8a828461268e565b602e805460ff191660011790556040805160028082526060820183525f92602083019080368337505060035482519293506001600160a01b0316918391505f90611cf257611cf26126ea565b60200260200101906001600160a01b031690816001600160a01b0316815250503081600181518110611d2657611d266126ea565b6001600160a01b039283166020918202929092010152601a546040517fb6f9de9500000000000000000000000000000000000000000000000000000000815291169063b6f9de95908590611d84905f90869088904290600401612740565b5f604051808303818588803b158015611d9b575f80fd5b505af1158015611dad573d5f803e3d5ffd5b5050602e805460ff19169055505050505050565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b0386165f908152600a90915291822054611e1a91849061182f565b6001600160a01b038086165f908152600a60205260408082209390935590851681522054611e489083611824565b6001600160a01b0384165f908152600a60205260409020555060019392505050565b60085481111580611e9257506001600160a01b0382165f908152600d602052604090205460ff165b6111d65760405162461bcd60e51b815260206004820152601160248201527f5458204c696d69742045786365656465640000000000000000000000000000006044820152606401610aab565b601b545f906001600160a01b03163314801590611efe5750602e5460ff16155b8015611f0c5750602c5460ff165b8015610edc575050602d54305f908152600a6020526040902054101590565b602e805460ff191660011790556018546019545f91611f4991610ce4565b611f5557601054611f57565b5f5b90505f611f7a600261142760145461142786602d54611c9090919063ffffffff16565b90505f611f9282602d54611c8590919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f81518110611fca57611fca6126ea565b6001600160a01b039283166020918202929092010152600354825191169082906001908110611ffb57611ffb6126ea565b6001600160a01b039283166020918202929092010152601a546040517f791ac9470000000000000000000000000000000000000000000000000000000081524792919091169063791ac9479061205d9086905f90879030904290600401612774565b5f604051808303815f87803b158015612074575f80fd5b505af1158015612086573d5f803e3d5ffd5b505050505f61209e8247611c8590919063ffffffff16565b90505f6120b86120af886002611c9b565b60145490611c85565b90505f6120cc60026114278481878d611c90565b90505f6120e88361142760125487611c9090919063ffffffff16565b90505f6121048461142760135488611c9090919063ffffffff16565b905060295f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015612153575f80fd5b505af193505050508015612165575060015b506017546040516001600160a01b039091169082156108fc029083905f818181858888f1935050505015801561219d573d5f803e3d5ffd5b50881561228c57601a546016546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018c90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990859060c40160606040518083038185885af115801561222a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061224f91906127af565b505060408051858152602081018c90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602e805460ff191690555050505050505050565b601b545f906001600160a01b031633148015906122c25750602e5460ff16155b80156122d0575060225460ff165b80156122eb5750436027546028546122e891906126ad565b11155b8015610edc57505060265447101590565b60265460045461231591906001600160a01b0316611ca6565b4360285560265460255461232891611824565b60258190556024541015612341576022805460ff191690555b565b601554601b545f91829161237491906114279061236d906001600160a01b038981169116146114f2565b8690611c90565b305f908152600a60205260409020549091506123909082611824565b305f818152600a6020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123e09085815260200190565b60405180910390a36123f28382611c85565b95945050505050565b80358015158114610c73575f80fd5b5f805f806080858703121561241d575f80fd5b612426856123fb565b966020860135965060408601359560600135945092505050565b5f805f805f60a08688031215612454575f80fd5b505083359560208501359550604085013594606081013594506080013592509050565b5f6020808352835180828501525f5b818110156124a257858101830151858201604001528201612486565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146124d6575f80fd5b50565b5f602082840312156124e9575f80fd5b8135610e8a816124c2565b5f8060408385031215612505575f80fd5b8235612510816124c2565b946020939093013593505050565b5f806040838503121561252f575f80fd5b50508035926020909101359150565b5f805f60608486031215612550575f80fd5b505081359360208301359350604090920135919050565b5f805f60608486031215612579575f80fd5b8335612584816124c2565b92506020840135612594816124c2565b929592945050506040919091013590565b5f602082840312156125b5575f80fd5b5035919050565b5f80604083850312156125cd575f80fd5b82356125d8816124c2565b91506125e6602084016123fb565b90509250929050565b5f8060408385031215612600575f80fd5b823561260b816124c2565b9150602083013561261b816124c2565b809150509250929050565b5f8060408385031215612637575f80fd5b612510836123fb565b5f60208284031215612650575f80fd5b610e8a826123fb565b5f806040838503121561266a575f80fd5b823591506125e6602084016123fb565b634e487b7160e01b5f52601160045260245ffd5b5f826126a857634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610cde57610cde61267a565b81810381811115610cde57610cde61267a565b8082028115828204841417610cde57610cde61267a565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602080850194508084015f5b838110156127355781516001600160a01b031687529582019590820190600101612710565b509495945050505050565b848152608060208201525f61275860808301866126fe565b6001600160a01b03949094166040830152506060015292915050565b85815284602082015260a060408201525f61279260a08301866126fe565b6001600160a01b0394909416606083015250608001529392505050565b5f805f606084860312156127c1575f80fd5b835192506020840151915060408401519050925092509256fea2646970667358221220ff77104cad1d1a98874ba04cd2ae0b67bf0ccd43305b984fabb73ad0c7a4cbc364736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d0000000000000000000000005505f73e6c780e0d0be44fed8cd92ade786a8e56000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2

-----Decoded View---------------
Arg [0] : _dexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _marketingAddress (address): 0x5505F73e6C780E0d0be44FEd8CD92adE786A8E56
Arg [2] : _wETH (address): 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 0000000000000000000000005505f73e6c780e0d0be44fed8cd92ade786a8e56
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2


Deployed Bytecode Sourcemap

12783:16356:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25665:187;;;;;;;;;;;;;:::i;:::-;;15037:50;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;15037:50:0;;;;;;;;24850:359;;;;;;;;;;-1:-1:-1;24850:359:0;;;;;:::i;:::-;;:::i;27115:494::-;;;;;;;;;;-1:-1:-1;27115:494:0;;;;;:::i;:::-;;:::i;16536:80::-;;;;;;;;;;-1:-1:-1;16608:5:0;;;;;;;;;;;;;;;;16536:80;;;;16608:5;16536:80;:::i;26996:111::-;;;;;;;;;;-1:-1:-1;26996:111:0;;;;;:::i;:::-;;:::i;:::-;;;2339:14:1;;2332:22;2314:41;;2302:2;2287:18;26996:111:0;2174:187:1;17039:216:0;;;;;;;;;;-1:-1:-1;17039:216:0;;;;;:::i;:::-;;:::i;28868:150::-;;;;;;;;;;-1:-1:-1;28868:150:0;;;;;:::i;:::-;;:::i;16266:88::-;;;;;;;;;;-1:-1:-1;16339:12:0;;16266:88;;28017:183;;;;;;;;;;-1:-1:-1;28017:183:0;;;;;:::i;:::-;;:::i;25217:342::-;;;;;;;;;;-1:-1:-1;25217:342:0;;;;;:::i;:::-;;:::i;17552:365::-;;;;;;;;;;-1:-1:-1;17552:365:0;;;;;:::i;:::-;;:::i;13833:40::-;;;;;;;;;;-1:-1:-1;13833:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;28543:142;;;;;;;;;;;;;:::i;28208:183::-;;;;;;;;;;-1:-1:-1;28208:183:0;;;;;:::i;:::-;;:::i;4603:103::-;;;;;;;;;;-1:-1:-1;4603:103:0;;;;;:::i;:::-;4658:4;4693:5;-1:-1:-1;;;;;4682:16:0;;;4693:5;;4682:16;;4603:103;16360:80;;;;;;;;;;-1:-1:-1;16360:80:0;;13373:1;3863:36:1;;3851:2;3836:18;16360:80:0;3721:184:1;26890:94:0;;;;;;;;;;-1:-1:-1;26890:94:0;;;;;:::i;:::-;;:::i;14621:38::-;;;;;;;;;;-1:-1:-1;14621:38:0;;;;;;;;17263:117;;;;;;;;;;-1:-1:-1;17263:117:0;;;;;:::i;:::-;;:::i;26011:145::-;;;;;;;;;;-1:-1:-1;26011:145:0;;;;;:::i;:::-;;:::i;25858:::-;;;;;;;;;;-1:-1:-1;25858:145:0;;;;;:::i;:::-;;:::i;26519:120::-;;;;;;;;;;-1:-1:-1;26519:120:0;;;;;:::i;:::-;;:::i;15000:30::-;;;;;;;;;;-1:-1:-1;15000:30:0;;;;;;;;24698:142;;;;;;;;;;;;;:::i;16787:105::-;;;;;;;;;;-1:-1:-1;16787:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;16871:18:0;16853:7;16871:18;;;:9;:18;;;;;;;16787:105;13450:51;;;;;;;;;;;;;;;;13513:49;;;;;;;;;;;;;;;;16622:78;;;;;;;;;;-1:-1:-1;16674:7:0;16692:5;-1:-1:-1;;;;;16692:5:0;16622:78;;;-1:-1:-1;;;;;4579:55:1;;;4561:74;;4549:2;4534:18;16622:78:0;4415:226:1;26787:91:0;;;;;;;;;;-1:-1:-1;26787:91:0;;;;;:::i;:::-;;:::i;28399:136::-;;;;;;;;;;-1:-1:-1;28399:136:0;;;;;:::i;:::-;;:::i;27617:228::-;;;;;;;;;;-1:-1:-1;27617:228:0;;;;;:::i;:::-;;:::i;14918:33::-;;;;;;;;;;-1:-1:-1;14918:33:0;;;;-1:-1:-1;;;;;14918:33:0;;;14326:19;;;;;;;;;;-1:-1:-1;14326:19:0;;;;-1:-1:-1;;;;;14326:19:0;;;17388:156;;;;;;;;;;-1:-1:-1;17388:156:0;;;;;:::i;:::-;;:::i;12980:64::-;;;;;;;;;;-1:-1:-1;12980:64:0;;;;-1:-1:-1;;;;;12980:64:0;;;23901:105;;;;;;;;;;;;;:::i;4276:94::-;;;;;;;;;;-1:-1:-1;4276:94:0;;;;;:::i;:::-;;:::i;14354:25::-;;;;;;;;;;;;;;;;14386:34;;;;;;;;;;;;;;;;14081:36;;;;;;;;;;-1:-1:-1;14081:36:0;;;;-1:-1:-1;;;;;14081:36:0;;;28693:167;;;;;;;;;;-1:-1:-1;28693:167:0;;;;;:::i;:::-;;:::i;20298:691::-;;;;;;;;;;-1:-1:-1;20973:8:0;;20298:691;;16898:133;;;;;;;;;;-1:-1:-1;16898:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17000:19:0;;;16982:7;17000:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;16898:133;27853:156;;;;;;;;;;-1:-1:-1;27853:156:0;;;;;:::i;:::-;;:::i;12861:48::-;;;;;;;;;;-1:-1:-1;12861:48:0;12892:17;12861:48;;14124:78;;;;;;;;;;-1:-1:-1;14124:78:0;;;;-1:-1:-1;;;;;14124:78:0;;;4446:97;;;;;;;;;;-1:-1:-1;4446:97:0;;;;;:::i;:::-;;:::i;20086:204::-;;;;;;;;;;-1:-1:-1;20086:204:0;;;;;:::i;:::-;;:::i;5003:173::-;;;;;;;;;;-1:-1:-1;5003:173:0;;;;;:::i;:::-;;:::i;23577:316::-;;;;;;;;;;-1:-1:-1;23577:316:0;;;;;:::i;:::-;;:::i;26164:347::-;;;;;;;;;;-1:-1:-1;26164:347:0;;;;;:::i;:::-;;:::i;26647:128::-;;;;;;;;;;-1:-1:-1;26647:128:0;;;;;:::i;:::-;;:::i;14295:24::-;;;;;;;;;;-1:-1:-1;14295:24:0;;;;-1:-1:-1;;;;;14295:24:0;;;4777:107;;;;;;;;;;-1:-1:-1;4777:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;4857:19:0;4833:4;4857:19;;;:14;:19;;;;;;;;;4777:107;25665:187;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;;;;;;;;;25720:10:::1;::::0;:15;25712:48:::1;;;::::0;-1:-1:-1;;;25712:48:0;;6781:2:1;25712:48:0::1;::::0;::::1;6763:21:1::0;6820:2;6800:18;;;6793:30;6859:22;6839:18;;;6832:50;6899:18;;25712:48:0::1;6579:344:1::0;25712:48:0::1;25784:12;25771:10;:25:::0;25829:15:::1;25807:19;:37:::0;25665:187::o;24850:359::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;24976:18:::1;:29:::0;;-1:-1:-1;;24976:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25016:14:::1;:21:::0;;;;-1:-1:-1;25048:22:0::1;:26:::0;25085:17:::1;:27:::0;25123:22:::1;:32:::0;25189:12:::1;25166:20;:35:::0;24850:359::o;27115:494::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;27279:12:::1;:28:::0;;;27318:10:::1;:24:::0;;;27353:13:::1;:30:::0;;;27394:12:::1;:28:::0;;;27444:69:::1;27409:13:::0;27444:50:::1;27369:14:::0;27444:50;27294:13;27331:11;27444:17:::1;:30::i;:::-;:34:::0;::::1;:50::i;:69::-;27433:8;:80:::0;;;27524:14:::1;:32:::0;;;27575:25;-1:-1:-1;27567:34:0::1;;;::::0;::::1;;27115:494:::0;;;;;:::o;26996:111::-;27061:4;4693:5;;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;-1:-1:-1;;;;;;27084:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;::::1;;4024:1;26996:111:::0;;;:::o;17039:216::-;17143:10;17114:4;17131:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;17131:32:0;;;;;;;;;;:41;;;17188:37;17114:4;;17131:32;;17188:37;;;;17166:6;160:25:1;;148:2;133:18;;14:177;17188:37:0;;;;;;;;-1:-1:-1;17243:4:0;17039:216;;;;;:::o;28868:150::-;28948:4;29004:6;28972:29;28992:8;28972:19;:29::i;:::-;:38;;28868:150;-1:-1:-1;;;28868:150:0:o;28017:183::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;28115:15:::1;:25:::0;;;;28151:26:::1;:41:::0;28017:183::o;25217:342::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;25377:1:::1;25350:23;25362:11:::0;25350:9;:23:::1;:::i;:::-;:28;;:55;;;;;25394:11;25382:9;:23;25350:55;25342:64;;;::::0;::::1;;25417:26;:38:::0;;;;25466:28:::1;:42:::0;25519:23:::1;:32:::0;25217:342::o;17552:365::-;17707:12;;-1:-1:-1;;;;;17672:19:0;;17652:4;17672:19;;;:11;:19;;;;;;;;17692:10;17672:31;;;;;;;;17652:4;;17672:47;17669:181;;17769:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17769:19:0;;-1:-1:-1;17769:19:0;;;:11;:19;;;;;17789:10;17769:31;;;;;;;;;;:69;;17805:6;;17769:35;:69::i;:::-;-1:-1:-1;;;;;17735:19:0;;;;;;:11;:19;;;;;;;;17755:10;17735:31;;;;;;;:103;17669:181;17869:40;17883:6;17891:9;17902:6;17869:13;:40::i;:::-;17862:47;;17552:365;;;;;;:::o;28543:142::-;28671:4;;-1:-1:-1;;;;;28671:4:0;28596:7;16871:18;;;:9;:18;;;;;;28623:54;;28650:4;;-1:-1:-1;;;;;28650:4:0;16853:7;16871:18;;;:9;:18;;;;;;28623:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;28616:61;;28543:142;:::o;28208:183::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;28318:11:::1;::::0;:65:::1;::::0;;;;::::1;::::0;::::1;7904:25:1::0;;;7945:18;;;7938:34;;;-1:-1:-1;;;;;28318:11:0;;::::1;::::0;:35:::1;::::0;7877:18:1;;28318:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28208:183:::0;;:::o;26890:94::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;-1:-1:-1;;;;;26953:15:0::1;26971:5;26953:15:::0;;;:7:::1;:15;::::0;;;;:23;;-1:-1:-1;;26953:23:0::1;::::0;;26890:94::o;17263:117::-;17318:4;17342:30;17350:7;17359:12;;17342:7;:30::i;26011:145::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;26111:4:::1;26096:12;;:19;;;;:::i;:::-;26086:6;:29;;26078:38;;;::::0;::::1;;26127:12;:21:::0;26011:145::o;25858:::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;25960:4:::1;25945:12;;:19;;;;:::i;:::-;25935:6;:29;;25927:38;;;::::0;::::1;;25976:10;:19:::0;25858:145::o;26519:120::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;-1:-1:-1;;;;;26603:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;26603:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26519:120::o;24698:142::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;24795:37:::1;::::0;24763:21:::1;::::0;24803:10:::1;::::0;24795:37;::::1;;;::::0;24763:21;;24745:15:::1;24795:37:::0;24745:15;24795:37;24763:21;24803:10;24795:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24734:106;24698:142::o:0;26787:91::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;-1:-1:-1;;;;;26848:15:0::1;;::::0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;26848:22:0::1;26866:4;26848:22;::::0;;26787:91::o;28399:136::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;28489:6:::1;28483:3;:12;28475:21;;;::::0;::::1;;28507:14;:20:::0;28399:136::o;27617:228::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;27736:21:::1;:46:::0;;-1:-1:-1;;;;;27736:46:0;;::::1;-1:-1:-1::0;;27736:46:0;;::::1;;::::0;;;27793:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;27617:228::o;17388:156::-;17468:4;17492:44;17506:10;17518:9;17529:6;17492:13;:44::i;23901:105::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;23997:1:::1;23966:28;:32:::0;23901:105::o;4276:94::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;-1:-1:-1;;;;;4336:19:0::1;;::::0;;;4358:4:::1;4336:19;::::0;;;;;;;:26;;-1:-1:-1;;4336:26:0::1;::::0;;::::1;::::0;;4276:94::o;28693:167::-;28761:7;28788:64;28829:22;:20;:22::i;:::-;28811:4;;-1:-1:-1;;;;;28811:4:0;16853:7;16871:18;;;:9;:18;;;;;;28788:36;;28801:22;;28821:1;28801:19;:22::i;:::-;28788:8;;:12;:36::i;:::-;:40;;:64::i;27853:156::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;27945:11:::1;:22:::0;;-1:-1:-1;;27945:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;27978:13:::1;:23:::0;27853:156::o;4446:97::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;-1:-1:-1;;;;;4508:19:0::1;4530:5;4508:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;4508:27:0::1;::::0;;4446:97::o;20086:204::-;20142:7;20183:12;20165:10;;20178:1;20165:14;;;;:::i;:::-;:30;20162:54;;-1:-1:-1;;20205:8:0;;;20086:204::o;20162:54::-;20229:7;20226:31;;;-1:-1:-1;;20246:8:0;;;20086:204::o;20226:31::-;-1:-1:-1;;20274:8:0;;;20086:204::o;5003:173::-;4658:4;4693:5;-1:-1:-1;;;;;4693:5:0;4000:10;4682:16;3984:38;;;;-1:-1:-1;;;3984:38:0;;7130:2:1;3984:38:0;;;7112:21:1;7169:1;7149:18;;;7142:29;-1:-1:-1;;;7187:18:1;;;7180:36;7233:18;;3984:38:0;6928:329:1;3984:38:0;5079:5:::1;:11:::0;;-1:-1:-1;;5079:11:0::1;-1:-1:-1::0;;;;;5079:11:0;::::1;::::0;;::::1;::::0;;5101:19;;;-1:-1:-1;5101:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;5101:26:0::1;::::0;;::::1;::::0;;;5143:25;;4561:74:1;;;5143:25:0::1;::::0;4534:18:1;5143:25:0::1;;;;;;;5003:173:::0;:::o;23577:316::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;23701:4:::1;::::0;23683:23:::1;::::0;23693:6;;-1:-1:-1;;;;;23701:4:0::1;23683:9;:23::i;:::-;23720:24;23717:169;;;23791:15;23760:28;:46:::0;;;23850:23:::1;::::0;23826:48:::1;::::0;160:25:1;;;23826:48:0::1;::::0;133:18:1;23826:48:0::1;;;;;;;23577:316:::0;;:::o;26164:347::-;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;-1:-1:-1;;;;;26261:23:0;::::1;26279:4;26261:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;26298:4:0::1;::::0;-1:-1:-1;;;;;26288:14:0;;::::1;26298:4:::0;::::1;26288:14;;26261:41;26253:50;;;::::0;::::1;;-1:-1:-1::0;;;;;26314:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;26314:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;26358:146:::1;;26383:11;::::0;:31:::1;::::0;-1:-1:-1;;;26383:31:0;;-1:-1:-1;;;;;8552:55:1;;;26383:31:0::1;::::0;::::1;8534:74:1::0;26383:11:0::1;8624:18:1::0;;;8617:34;26383:11:0;;::::1;::::0;:20:::1;::::0;8507:18:1;;26383:31:0::1;8352:305:1::0;26358:146:0::1;26445:11;::::0;-1:-1:-1;;;;;26474:17:0;;::::1;26445:11;26474:17:::0;;;:9:::1;:17;::::0;;;;;;;26445:47;;-1:-1:-1;;;26445:47:0;;::::1;::::0;::::1;8534:74:1::0;;;;8624:18;;;8617:34;26445:11:0;::::1;::::0;:20:::1;::::0;8507:18:1;;26445:47:0::1;8352:305:1::0;26647:128:0;4174:10;4833:4;4857:19;;;:14;:19;;;;;;;;4153:48;;;;-1:-1:-1;;;4153:48:0;;6441:2:1;4153:48:0;;;6423:21:1;6480:2;6460:18;;;6453:30;-1:-1:-1;;;6499:18:1;;;6492:41;6550:18;;4153:48:0;6239:335:1;4153:48:0;-1:-1:-1;;;;;26735:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;26735:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26647:128::o;1560:98::-;1618:7;1645:5;1649:1;1645;:5;:::i;2090:206::-;2176:7;2237:12;2229:6;;;;2221:29;;;;-1:-1:-1;;;2221:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;2272:5:0;;;2090:206::o;17925:1513::-;18037:6;;18017:4;;18037:6;;18034:63;;;18053:41;18068:6;18076:9;18087:6;18053:14;:41::i;:::-;18046:48;;;;18034:63;18217:4;;18150:42;;18126:21;;-1:-1:-1;;;;;18208:13:0;;;18217:4;;18208:13;;:39;;;18234:13;-1:-1:-1;;;;;18224:23:0;:6;-1:-1:-1;;;;;18224:23:0;;18208:39;18282:4;;18197:50;;-1:-1:-1;18258:11:0;;-1:-1:-1;;;;;18270:16:0;;;18282:4;;18270:16;;:45;;;18302:13;-1:-1:-1;;;;;18289:26:0;:9;-1:-1:-1;;;;;18289:26:0;;18270:45;18258:57;;18324:28;18337:6;18345;18324:12;:28::i;:::-;18415:6;18414:7;:30;;;;-1:-1:-1;;;;;;18426:18:0;;;;;;:7;:18;;;;;;;;18425:19;18414:30;18410:133;;;18493:10;;-1:-1:-1;;;;;18460:20:0;;;;;;:9;:20;;;;;;:29;;18483:6;;18460:29;:::i;:::-;18459:44;18451:86;;;;-1:-1:-1;;;18451:86:0;;9166:2:1;18451:86:0;;;9148:21:1;9205:2;9185:18;;;9178:30;9244:31;9224:18;;;9217:59;9293:18;;18451:86:0;8964:353:1;18451:86:0;18587:6;18583:111;;;18604:16;:14;:16::i;:::-;18601:35;;;18623:10;:8;:10::i;:::-;18644:19;:17;:19::i;:::-;18641:48;;;18666:20;:18;:20::i;:::-;18827:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18827:17:0;;-1:-1:-1;18827:17:0;;;:9;:17;;;;;;;;:53;;18849:6;;18827:21;:53::i;:::-;-1:-1:-1;;;;;18807:17:0;;;;;;:9;:17;;;;;;;;:73;;;;20051:11;:19;;;;;;;;20050:20;18918:67;;18979:6;18918:67;;;18942:34;18950:6;18958:9;18969:6;18942:7;:34::i;:::-;-1:-1:-1;;;;;19021:20:0;;;;;;:9;:20;;;;;;18893:92;;-1:-1:-1;19021:40:0;;18893:92;19021:24;:40::i;:::-;-1:-1:-1;;;;;18998:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;19078:24;;;;;:16;:24;;;;;;;19074:96;;19109:11;;-1:-1:-1;;;;;19138:17:0;;;19109:11;19138:17;;;:9;:17;;;;;;;;19109:47;;-1:-1:-1;;;19109:47:0;;;;;8534:74:1;;;;8624:18;;;8617:34;19109:11:0;;;:20;;8507:18:1;;19109:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19105:63;;-1:-1:-1;;;;;19184:27:0;;;;;;:16;:27;;;;;;;;19180:105;;19218:11;;-1:-1:-1;;;;;19250:20:0;;;19218:11;19250:20;;;:9;:20;;;;;;;;19218:53;;-1:-1:-1;;;19218:53:0;;;;;8534:74:1;;;;8624:18;;;8617:34;19218:11:0;;;:20;;8507:18:1;;19218:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19214:69;;19301:11;;19321:14;;19301:35;;;;;-1:-1:-1;;;;;19301:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;19301:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19297:51;19382:9;-1:-1:-1;;;;;19365:43:0;19374:6;-1:-1:-1;;;;;19365:43:0;;19393:14;19365:43;;;;160:25:1;;148:2;133:18;;14:177;19365:43:0;;;;;;;;-1:-1:-1;19426:4:0;;17925:1513;-1:-1:-1;;;;;;;17925:1513:0:o;1666:98::-;1724:7;1751:5;1755:1;1751;:5;:::i;1772:98::-;1830:7;1857:5;1861:1;1857;:5;:::i;1878:98::-;1936:7;1963:5;1967:1;1963;:5;:::i;24325:361::-;15144:6;:13;;-1:-1:-1;;15144:13:0;15153:4;15144:13;;;24425:16:::1;::::0;;24439:1:::1;24425:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24425:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;24462:4:0::1;::::0;24452:7;;;;-1:-1:-1;;;;;;24462:4:0::1;::::0;24452:7;;-1:-1:-1;24462:4:0::1;::::0;24452:7:::1;;;;:::i;:::-;;;;;;:14;-1:-1:-1::0;;;;;24452:14:0::1;;;-1:-1:-1::0;;;;;24452:14:0::1;;;::::0;::::1;24495:4;24477;24482:1;24477:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24477:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;24513:6:::1;::::0;:165:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;24578:6;;24513:165:::1;::::0;:6:::1;::::0;24616:4;;24635:2;;24652:15:::1;::::0;24513:165:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;15162:6:0;:14;;-1:-1:-1;;15162:14:0;;;-1:-1:-1;;;;;;24325:361:0:o;19446:332::-;19576:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19576:17:0;;19539:4;19576:17;;;:9;:17;;;;;;;:53;;19598:6;;19576:21;:53::i;:::-;-1:-1:-1;;;;;19556:17:0;;;;;;;:9;:17;;;;;;:73;;;;19663:20;;;;;;;:32;;19688:6;19663:24;:32::i;:::-;-1:-1:-1;;;;;19640:20:0;;;;;;:9;:20;;;;;:55;-1:-1:-1;19766:4:0;19446:332;;;;;:::o;19790:166::-;19887:12;;19877:6;:22;;:49;;;-1:-1:-1;;;;;;19903:23:0;;;;;;:15;:23;;;;;;;;19877:49;19869:79;;;;-1:-1:-1;;;19869:79:0;;11235:2:1;19869:79:0;;;11217:21:1;11274:2;11254:18;;;11247:30;11313:19;11293:18;;;11286:47;11350:18;;19869:79:0;11033:341:1;21377:197:0;21464:4;;21426;;-1:-1:-1;;;;;21464:4:0;21450:10;:18;;;;:38;;-1:-1:-1;21482:6:0;;;;21481:7;21450:38;:62;;;;-1:-1:-1;21501:11:0;;;;21450:62;:116;;;;-1:-1:-1;;21553:13:0;;21543:4;21525:24;;;;:9;:24;;;;;;:41;;;21377:197::o;21582:1661::-;15144:6;:13;;-1:-1:-1;;15144:13:0;15153:4;15144:13;;;21677:15:::1;::::0;21694:26:::1;::::0;15144:6;;21661:60:::1;::::0;:15:::1;:60::i;:::-;:79;;21728:12;;21661:79;;;21724:1;21661:79;21631:109;;21751:23;21777:59;21834:1;21777:52;21820:8;;21777:38;21795:19;21777:13;;:17;;:38;;;;:::i;:59::-;21751:85;;21847:20;21870:34;21888:15;21870:13;;:17;;:34;;;;:::i;:::-;21941:16;::::0;;21955:1:::1;21941:16:::0;;;;;::::1;::::0;;21847:57;;-1:-1:-1;21917:21:0::1;::::0;21941:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21941:16:0::1;21917:40;;21986:4;21968;21973:1;21968:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21968:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22012:4:::1;::::0;22002:7;;22012:4;::::1;::::0;22002;;22012;;22002:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22002:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;22085:6:::1;::::0;:188:::1;::::0;;;;22051:21:::1;::::0;22085:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22157:12;;22027:21:::1;::::0;22200:4;;22227::::1;::::0;22247:15:::1;::::0;22085:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22286:17;22306:40;22332:13;22306:21;:25;;:40;;;;:::i;:::-;22286:60:::0;-1:-1:-1;22359:19:0::1;22381:40;22394:26;:19:::0;22418:1:::1;22394:23;:26::i;:::-;22381:8;::::0;;:12:::1;:40::i;:::-;22359:62:::0;-1:-1:-1;22434:26:0::1;22463:58;22519:1;22463:51;22359:62:::0;22463:51;:9;22477:19;22463:13:::1;:34::i;:58::-;22434:87;;22532:27;22562:45;22595:11;22562:28;22576:13;;22562:9;:13;;:28;;;;:::i;:45::-;22532:75;;22618:26;22647:44;22679:11;22647:27;22661:12;;22647:9;:13;;:27;;;;:::i;:44::-;22618:73;;22708:11;;;;;;;;;-1:-1:-1::0;;;;;22708:11:0::1;-1:-1:-1::0;;;;;22708:19:0::1;;22735;22708:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22704:65:::0;22787:20:::1;::::0;22779:58:::1;::::0;-1:-1:-1;;;;;22787:20:0;;::::1;::::0;22779:58;::::1;;;::::0;22818:18;;22787:20:::1;22779:58:::0;22787:20;22779:58;22818:18;22787:20;22779:58;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;22877:19:0;;22874:362:::1;;22912:6;::::0;23086:21:::1;::::0;22912:244:::1;::::0;;;;22988:4:::1;22912:244;::::0;::::1;12353:34:1::0;12403:18;;;12396:34;;;22912:6:0::1;12446:18:1::0;;;12439:34;;;12489:18;;;12482:34;-1:-1:-1;;;;;23086:21:0;;::::1;12532:19:1::0;;;12525:44;23126:15:0::1;12585:19:1::0;;;12578:35;22912:6:0;::::1;::::0;:22:::1;::::0;22942:18;;12264:19:1;;22912:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23176:48:0::1;::::0;;7904:25:1;;;7960:2;7945:18;;7938:34;;;23176:48:0::1;::::0;-1:-1:-1;7877:18:1;23176:48:0::1;;;;;;;22874:362;-1:-1:-1::0;;15162:6:0;:14;;-1:-1:-1;;15162:14:0;;;-1:-1:-1;;;;;;;;21582:1661:0:o;23251:318::-;23341:4;;23303;;-1:-1:-1;;;;;23341:4:0;23327:10;:18;;;;:38;;-1:-1:-1;23359:6:0;;;;23358:7;23327:38;:69;;;;-1:-1:-1;23378:18:0;;;;23327:69;:143;;;;;23458:12;23432:22;;23409:20;;:45;;;;:::i;:::-;:61;;23327:143;:234;;;;-1:-1:-1;;23544:17:0;;23519:21;:42;;;23251:318::o;24014:303::-;24074:17;;24093:4;;24064:34;;24074:17;-1:-1:-1;;;;;24093:4:0;24064:9;:34::i;:::-;24132:12;24109:20;:35;24207:17;;24180:22;;:45;;:26;:45::i;:::-;24155:22;:70;;;24264:14;;-1:-1:-1;24236:74:0;;;24281:18;:26;;-1:-1:-1;;24281:26:0;;;24236:74;24014:303::o;20997:372::-;21168:14;;21157:4;;21082:7;;;;21122:61;;21168:14;21122:41;;21133:29;;-1:-1:-1;;;;;21145:16:0;;;21157:4;;21145:16;21133:11;:29::i;:::-;21122:6;;:10;:41::i;:61::-;21241:4;21223:24;;;;:9;:24;;;;;;21102:81;;-1:-1:-1;21223:39:0;;21102:81;21223:28;:39::i;:::-;21214:4;21196:24;;;;:9;:24;;;;;;;:66;;;;21278:42;;-1:-1:-1;;;;;21278:42:0;;;;;;;21310:9;160:25:1;;148:2;133:18;;14:177;21278:42:0;;;;;;;;21340:21;:6;21351:9;21340:10;:21::i;:::-;21333:28;20997:372;-1:-1:-1;;;;;20997:372:0:o;196:160:1:-;261:20;;317:13;;310:21;300:32;;290:60;;346:1;343;336:12;361:385;444:6;452;460;468;521:3;509:9;500:7;496:23;492:33;489:53;;;538:1;535;528:12;489:53;561:26;577:9;561:26;:::i;:::-;551:36;634:2;619:18;;606:32;;-1:-1:-1;685:2:1;670:18;;657:32;;736:2;721:18;708:32;;-1:-1:-1;361:385:1;-1:-1:-1;;;361:385:1:o;751:454::-;846:6;854;862;870;878;931:3;919:9;910:7;906:23;902:33;899:53;;;948:1;945;938:12;899:53;-1:-1:-1;;971:23:1;;;1041:2;1026:18;;1013:32;;-1:-1:-1;1092:2:1;1077:18;;1064:32;;1143:2;1128:18;;1115:32;;-1:-1:-1;1194:3:1;1179:19;1166:33;;-1:-1:-1;751:454:1;-1:-1:-1;751:454:1:o;1210:548::-;1322:4;1351:2;1380;1369:9;1362:21;1412:6;1406:13;1455:6;1450:2;1439:9;1435:18;1428:34;1480:1;1490:140;1504:6;1501:1;1498:13;1490:140;;;1599:14;;;1595:23;;1589:30;1565:17;;;1584:2;1561:26;1554:66;1519:10;;1490:140;;;1494:3;1679:1;1674:2;1665:6;1654:9;1650:22;1646:31;1639:42;1749:2;1742;1738:7;1733:2;1725:6;1721:15;1717:29;1706:9;1702:45;1698:54;1690:62;;;;1210:548;;;;:::o;1763:154::-;-1:-1:-1;;;;;1842:5:1;1838:54;1831:5;1828:65;1818:93;;1907:1;1904;1897:12;1818:93;1763:154;:::o;1922:247::-;1981:6;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;2089:9;2076:23;2108:31;2133:5;2108:31;:::i;2366:315::-;2434:6;2442;2495:2;2483:9;2474:7;2470:23;2466:32;2463:52;;;2511:1;2508;2501:12;2463:52;2550:9;2537:23;2569:31;2594:5;2569:31;:::i;:::-;2619:5;2671:2;2656:18;;;;2643:32;;-1:-1:-1;;;2366:315:1:o;2686:248::-;2754:6;2762;2815:2;2803:9;2794:7;2790:23;2786:32;2783:52;;;2831:1;2828;2821:12;2783:52;-1:-1:-1;;2854:23:1;;;2924:2;2909:18;;;2896:32;;-1:-1:-1;2686:248:1:o;2939:316::-;3016:6;3024;3032;3085:2;3073:9;3064:7;3060:23;3056:32;3053:52;;;3101:1;3098;3091:12;3053:52;-1:-1:-1;;3124:23:1;;;3194:2;3179:18;;3166:32;;-1:-1:-1;3245:2:1;3230:18;;;3217:32;;2939:316;-1:-1:-1;2939:316:1:o;3260:456::-;3337:6;3345;3353;3406:2;3394:9;3385:7;3381:23;3377:32;3374:52;;;3422:1;3419;3412:12;3374:52;3461:9;3448:23;3480:31;3505:5;3480:31;:::i;:::-;3530:5;-1:-1:-1;3587:2:1;3572:18;;3559:32;3600:33;3559:32;3600:33;:::i;:::-;3260:456;;3652:7;;-1:-1:-1;;;3706:2:1;3691:18;;;;3678:32;;3260:456::o;3910:180::-;3969:6;4022:2;4010:9;4001:7;3997:23;3993:32;3990:52;;;4038:1;4035;4028:12;3990:52;-1:-1:-1;4061:23:1;;3910:180;-1:-1:-1;3910:180:1:o;4095:315::-;4160:6;4168;4221:2;4209:9;4200:7;4196:23;4192:32;4189:52;;;4237:1;4234;4227:12;4189:52;4276:9;4263:23;4295:31;4320:5;4295:31;:::i;:::-;4345:5;-1:-1:-1;4369:35:1;4400:2;4385:18;;4369:35;:::i;:::-;4359:45;;4095:315;;;;;:::o;4646:388::-;4714:6;4722;4775:2;4763:9;4754:7;4750:23;4746:32;4743:52;;;4791:1;4788;4781:12;4743:52;4830:9;4817:23;4849:31;4874:5;4849:31;:::i;:::-;4899:5;-1:-1:-1;4956:2:1;4941:18;;4928:32;4969:33;4928:32;4969:33;:::i;:::-;5021:7;5011:17;;;4646:388;;;;;:::o;5039:248::-;5104:6;5112;5165:2;5153:9;5144:7;5140:23;5136:32;5133:52;;;5181:1;5178;5171:12;5133:52;5204:26;5220:9;5204:26;:::i;5292:180::-;5348:6;5401:2;5389:9;5380:7;5376:23;5372:32;5369:52;;;5417:1;5414;5407:12;5369:52;5440:26;5456:9;5440:26;:::i;5737:248::-;5802:6;5810;5863:2;5851:9;5842:7;5838:23;5834:32;5831:52;;;5879:1;5876;5869:12;5831:52;5915:9;5902:23;5892:33;;5944:35;5975:2;5964:9;5960:18;5944:35;:::i;7262:184::-;-1:-1:-1;;;7311:1:1;7304:88;7411:4;7408:1;7401:15;7435:4;7432:1;7425:15;7451:274;7491:1;7517;7507:189;;-1:-1:-1;;;7549:1:1;7542:88;7653:4;7650:1;7643:15;7681:4;7678:1;7671:15;7507:189;-1:-1:-1;7710:9:1;;7451:274::o;7983:125::-;8048:9;;;8069:10;;;8066:36;;;8082:18;;:::i;9322:128::-;9389:9;;;9410:11;;;9407:37;;;9424:18;;:::i;9455:168::-;9528:9;;;9559;;9576:15;;;9570:22;;9556:37;9546:71;;9597:18;;:::i;9817:184::-;-1:-1:-1;;;9866:1:1;9859:88;9966:4;9963:1;9956:15;9990:4;9987:1;9980:15;10006:484;10059:3;10097:5;10091:12;10124:6;10119:3;10112:19;10150:4;10179:2;10174:3;10170:12;10163:19;;10216:2;10209:5;10205:14;10237:1;10247:218;10261:6;10258:1;10255:13;10247:218;;;10326:13;;-1:-1:-1;;;;;10322:62:1;10310:75;;10405:12;;;;10440:15;;;;10283:1;10276:9;10247:218;;;-1:-1:-1;10481:3:1;;10006:484;-1:-1:-1;;;;;10006:484:1:o;10495:533::-;10766:6;10755:9;10748:25;10809:3;10804:2;10793:9;10789:18;10782:31;10729:4;10830:57;10882:3;10871:9;10867:19;10859:6;10830:57;:::i;:::-;-1:-1:-1;;;;;10923:55:1;;;;10918:2;10903:18;;10896:83;-1:-1:-1;11010:2:1;10995:18;10988:34;10822:65;10495:533;-1:-1:-1;;10495:533:1:o;11379:605::-;11678:6;11667:9;11660:25;11721:6;11716:2;11705:9;11701:18;11694:34;11764:3;11759:2;11748:9;11744:18;11737:31;11641:4;11785:57;11837:3;11826:9;11822:19;11814:6;11785:57;:::i;:::-;-1:-1:-1;;;;;11878:55:1;;;;11873:2;11858:18;;11851:83;-1:-1:-1;11965:3:1;11950:19;11943:35;11777:65;11379:605;-1:-1:-1;;;11379:605:1:o;12624:306::-;12712:6;12720;12728;12781:2;12769:9;12760:7;12756:23;12752:32;12749:52;;;12797:1;12794;12787:12;12749:52;12826:9;12820:16;12810:26;;12876:2;12865:9;12861:18;12855:25;12845:35;;12920:2;12909:9;12905:18;12899:25;12889:35;;12624:306;;;;;:::o

Swarm Source

ipfs://27400a6a845ca4bd23749f0df7081453e3b4d90407332ffd95eefdb97329c2c1
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.