Token AstroGrow

 

Overview [ERC-20]

Max Total Supply:
10,000,000 ATG

Holders:
41

Transfers:
-

 
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AstroGrow

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-17
*/

//SPDX-License-Identifier: MIT

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 IBEP20 {
    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;
        uint256 totalRealised;
    }

    IBEP20 USDC = IBEP20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
    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;
    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(0xE592427A0AEce92De3Edee1F18E0157C05861564);
        _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 = USDC.balanceOf(address(this));

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

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

        uint256 amount = USDC.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);
            USDC.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);
    }

    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 AstroGrow is IBEP20, Auth {
    using SafeMath for uint256;

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

    string constant _name   = "AstroGrow";
    string constant _symbol = "ATG";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 10_000_000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply.div(400); // 0.25%

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

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

    uint256 liquidityFee = 200;
    uint256 buybackFee = 300;
    uint256 reflectionFee = 800;
    uint256 marketingFee = 100;
    uint256 totalFee = 1400;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    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
    ) Auth(msg.sender) {
        router = IDEXRouter(_dexRouter);
        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 = msg.sender;

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

        checkTxLimit(sender, amount);
        //
        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 feeDenominator.sub(1); }
        if(selling){ return getMultipliedFee(); }
        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 amountBNB = address(this).balance.sub(balanceBefore);

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

        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        payable(marketingFeeReceiver).transfer(amountBNBMarketing);
            
        

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountBNBLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountBNBLiquidity, 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 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 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 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/4);
    }

    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 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dexRouter","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":"amountBNB","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":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":[],"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"},{"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":"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":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000186919062000daa565b6298968062000196919062000ee7565b600755620001b761019060075462000b2b60201b620021741790919060201c565b60085560c8600e5561012c600f5561032060105560646011556105786012556127106013556019601655606460175560c8601c556064601d55610708601f556000602060006101000a81548160ff0219169083151502179055506207a1206029556001602a60006101000a81548160ff0219169083151502179055506107d060075462000245919062000d17565b602b553480156200025557600080fd5b5060405162006ea238038062006ea283398181016040528101906200027b919062000c5c565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003be57600080fd5b505afa158015620003d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f9919062000c5c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200045792919062000ccd565b602060405180830381600087803b1580156200047257600080fd5b505af115801562000487573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ad919062000c5c565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620005fb57600080fd5b505afa15801562000610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000636919062000c5c565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620006859062000c37565b62000691919062000cb0565b604051809103906000f080158015620006ae573d6000803e3d6000fd5b50602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a3c8160075462000b4360201b60201c565b5062000a73601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075462000b4360201b60201c565b50600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000b1c919062000cfa565b60405180910390a3506200101d565b6000818362000b3b919062000d17565b905092915050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000c25919062000cfa565b60405180910390a36001905092915050565b611ca580620051fd83390190565b60008151905062000c568162001003565b92915050565b60006020828403121562000c755762000c7462000ff1565b5b600062000c858482850162000c45565b91505092915050565b62000c998162000f48565b82525050565b62000caa8162000f7c565b82525050565b600060208201905062000cc7600083018462000c8e565b92915050565b600060408201905062000ce4600083018562000c8e565b62000cf3602083018462000c8e565b9392505050565b600060208201905062000d11600083018462000c9f565b92915050565b600062000d248262000f7c565b915062000d318362000f7c565b92508262000d445762000d4362000fc2565b5b828204905092915050565b6000808291508390505b600185111562000da15780860481111562000d795762000d7862000f93565b5b600185161562000d895780820291505b808102905062000d998562000ff6565b945062000d59565b94509492505050565b600062000db78262000f7c565b915062000dc48362000f86565b925062000df37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dfb565b905092915050565b60008262000e0d576001905062000ee0565b8162000e1d576000905062000ee0565b816001811462000e36576002811462000e415762000e77565b600191505062000ee0565b60ff84111562000e565762000e5562000f93565b5b8360020a91508482111562000e705762000e6f62000f93565b5b5062000ee0565b5060208310610133831016604e8410600b841016171562000eb15782820a90508381111562000eab5762000eaa62000f93565b5b62000ee0565b62000ec0848484600162000d4f565b9250905081840481111562000eda5762000ed962000f93565b5b81810290505b9392505050565b600062000ef48262000f7c565b915062000f018362000f7c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f3d5762000f3c62000f93565b5b828202905092915050565b600062000f558262000f5c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b6200100e8162000f48565b81146200101a57600080fd5b50565b6141d0806200102d6000396000f3fe6080604052600436106102b25760003560e01c80639d1944f511610175578063d806d12f116100dc578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610abd578063f84ba65d14610ae6578063f887ea4014610b0f578063fe9fbb8014610b3a576102b9565b8063f1f3bca314610a2e578063f2fde38b14610a6b578063f5cfec0a14610a94576102b9565b8063d806d12f1461091e578063dd62ed3e14610949578063df20fd4914610986578063e91f214e146109af578063e96fada2146109da578063f0b37c0414610a05576102b9565b8063b210b06d1161012e578063b210b06d14610820578063b6a5d7de14610837578063bf56b37114610860578063c6d2577d1461088b578063ca33e64c146108b6578063d51ed1c8146108e1576102b9565b80639d1944f514610710578063a4b45c0014610739578063a51af4c514610762578063a8aa1b311461078d578063a9059cbb146107b8578063ad5c4648146107f5576102b9565b80632d48e89611610219578063658d4b7f116101d2578063658d4b7f146105fe5780636ddd17131461062757806370a08231146106525780637d1db4a51461068f578063893d20e8146106ba57806395d89b41146106e5576102b9565b80632d48e896146104dc5780632f54bf6e14610505578063313ce567146105425780633bb8a8d41461056d578063571ac8b0146105985780635c85974f146105d5576102b9565b80631161ae391161026b5780631161ae39146103ba57806318160ddd146103f7578063201e7991146104225780632375ce401461044b57806323b872dd146104745780632b112e49146104b1576102b9565b806301339c21146102be5780630445b667146102d5578063048c7baf1461030057806304a66b481461032957806306fdde0314610352578063095ea7b31461037d576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b77565b005b3480156102e157600080fd5b506102ea610c14565b6040516102f79190613cb1565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906136bc565b610c1a565b005b34801561033557600080fd5b50610350600480360381019061034b9190613876565b610ca6565b005b34801561035e57600080fd5b50610367610d71565b6040516103749190613c0f565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f919061360f565b610dae565b6040516103b19190613b8d565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190613790565b610ea0565b6040516103ee9190613b8d565b60405180910390f35b34801561040357600080fd5b5061040c610eb5565b6040516104199190613cb1565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613790565b610ebf565b005b34801561045757600080fd5b50610472600480360381019061046d91906137d0565b610f19565b005b34801561048057600080fd5b5061049b6004803603810190610496919061357c565b610f9f565b6040516104a89190613b8d565b60405180910390f35b3480156104bd57600080fd5b506104c6611181565b6040516104d39190613cb1565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190613790565b611203565b005b34801561051157600080fd5b5061052c600480360381019061052791906134e2565b6112de565b6040516105399190613b8d565b60405180910390f35b34801561054e57600080fd5b50610557611337565b6040516105649190613d4f565b60405180910390f35b34801561057957600080fd5b50610582611340565b60405161058f9190613b8d565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba91906134e2565b611353565b6040516105cc9190613b8d565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613723565b611368565b005b34801561060a57600080fd5b50610625600480360381019061062091906135cf565b6113d6565b005b34801561063357600080fd5b5061063c611479565b6040516106499190613b8d565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906134e2565b61148c565b6040516106869190613cb1565b60405180910390f35b34801561069b57600080fd5b506106a46114d5565b6040516106b19190613cb1565b60405180910390f35b3480156106c657600080fd5b506106cf6114db565b6040516106dc9190613aa4565b60405180910390f35b3480156106f157600080fd5b506106fa611504565b6040516107079190613c0f565b60405180910390f35b34801561071c57600080fd5b5061073760048036038101906107329190613723565b611541565b005b34801561074557600080fd5b50610760600480360381019061075b919061353c565b6115a2565b005b34801561076e57600080fd5b50610777611670565b6040516107849190613aa4565b60405180910390f35b34801561079957600080fd5b506107a2611696565b6040516107af9190613aa4565b60405180910390f35b3480156107c457600080fd5b506107df60048036038101906107da919061360f565b6116bc565b6040516107ec9190613b8d565b60405180910390f35b34801561080157600080fd5b5061080a6116d1565b6040516108179190613aa4565b60405180910390f35b34801561082c57600080fd5b506108356116f7565b005b34801561084357600080fd5b5061085e600480360381019061085991906134e2565b611749565b005b34801561086c57600080fd5b506108756117eb565b6040516108829190613cb1565b60405180910390f35b34801561089757600080fd5b506108a06117f1565b6040516108ad9190613cb1565b60405180910390f35b3480156108c257600080fd5b506108cb6117f7565b6040516108d89190613aa4565b60405180910390f35b3480156108ed57600080fd5b5061090860048036038101906109039190613723565b61181d565b6040516109159190613cb1565b60405180910390f35b34801561092a57600080fd5b5061093361188f565b6040516109409190613cb1565b60405180910390f35b34801561095557600080fd5b50610970600480360381019061096b919061353c565b6119b6565b60405161097d9190613cb1565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a8919061367c565b611a3d565b005b3480156109bb57600080fd5b506109c4611aaa565b6040516109d19190613cb1565b60405180910390f35b3480156109e657600080fd5b506109ef611ac0565b6040516109fc9190613aa4565b60405180910390f35b348015610a1157600080fd5b50610a2c6004803603810190610a2791906134e2565b611ae6565b005b348015610a3a57600080fd5b50610a556004803603810190610a50919061364f565b611b89565b604051610a629190613cb1565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d919061350f565b611bdd565b005b348015610aa057600080fd5b50610abb6004803603810190610ab69190613750565b611cf6565b005b348015610ac957600080fd5b50610ae46004803603810190610adf91906135cf565b611db5565b005b348015610af257600080fd5b50610b0d6004803603810190610b0891906135cf565b612055565b005b348015610b1b57600080fd5b50610b246120f8565b604051610b319190613ba8565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c91906134e2565b61211e565b604051610b6e9190613b8d565b60405180910390f35b610b803361211e565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690613c91565b60405180910390fd5b6000601a5414610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613c51565b60405180910390fd5b43601a8190555042601b81905550565b602b5481565b610c233361211e565b610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613c91565b60405180910390fd5b83602060006101000a81548160ff02191690831515021790555082602281905550600060238190555081602481905550806025819055504360268190555050505050565b610caf3361211e565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613c91565b60405180910390fd5b84600e8190555083600f819055508260108190555081601181905550610d4182610d3385610d25888a61218a90919063ffffffff16565b61218a90919063ffffffff16565b61218a90919063ffffffff16565b601281905550806013819055506004601354610d5d9190613e15565b60125410610d6a57600080fd5b5050505050565b60606040518060400160405280600981526020017f417374726f47726f770000000000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e8e9190613cb1565b60405180910390a36001905092915050565b600082610eac8361181d565b11905092915050565b6000600754905090565b610ec83361211e565b610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613c91565b60405180910390fd5b81601681905550806017819055505050565b610f223361211e565b610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613c91565b60405180910390fd5b60028284610f6f9190613e15565b11158015610f7c57508183115b610f8557600080fd5b82601c8190555081601d8190555080601f81905550505050565b6000600754600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461116d576110ec826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a09092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6111788484846121f5565b90509392505050565b60006111fe6111b1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b6111f06111df600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b60075461272290919063ffffffff16565b61272290919063ffffffff16565b905090565b61120c3361211e565b61124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613c91565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112a8929190613d26565b600060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b602060009054906101000a900460ff1681565b600061136182600754610dae565b9050919050565b6113713361211e565b6113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a790613c91565b60405180910390fd5b6103e86007546113c09190613e15565b8110156113cc57600080fd5b8060088190555050565b6113df3361211e565b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613c91565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602a60009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f4154470000000000000000000000000000000000000000000000000000000000815250905090565b61154a3361211e565b611589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158090613c91565b60405180910390fd5b620b71b0811061159857600080fd5b8060298190555050565b6115ab3361211e565b6115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e190613c91565b60405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006116c93384846121f5565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117003361211e565b61173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613c91565b60405180910390fd5b6000601e81905550565b611752336112de565b611791576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178890613c71565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a5481565b601b5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061188861182a611181565b61187a61186b600261185d601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b61273890919063ffffffff16565b8561273890919063ffffffff16565b61217490919063ffffffff16565b9050919050565b60004262015180601b546118a39190613dbf565b11156118db576118d46013546118c661465060125461273890919063ffffffff16565b61217490919063ffffffff16565b90506119b3565b426118f3601f54601e5461218a90919063ffffffff16565b11156119ad57600061192442611916601f54601e5461218a90919063ffffffff16565b61272290919063ffffffff16565b90506000611967601254611959601d5461194b601c5460125461273890919063ffffffff16565b61217490919063ffffffff16565b61272290919063ffffffff16565b90506119a4611993601f54611985858561273890919063ffffffff16565b61217490919063ffffffff16565b60125461218a90919063ffffffff16565b925050506119b3565b60125490505b90565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a463361211e565b611a85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7c90613c91565b60405180910390fd5b81602a60006101000a81548160ff02191690831515021790555080602b819055505050565b6fffffffffffffffffffffffffffffffff801681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611aef336112de565b611b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2590613c71565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000436001601a54611b9b9190613dbf565b10611bbd57611bb6600160135461272290919063ffffffff16565b9050611bd8565b8115611bd257611bcb61188f565b9050611bd8565b60125490505b919050565b611be6336112de565b611c25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1c90613c71565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611ceb9190613abf565b60405180910390a150565b611cff3361211e565b611d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3590613c91565b60405180910390fd5b611d6a82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661274e565b8015611db15742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f54604051611da89190613cb1565b60405180910390a15b5050565b611dbe3361211e565b611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490613c91565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e875750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611e9057600080fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611f8257602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611f4b929190613ada565b600060405180830381600087803b158015611f6557600080fd5b505af1158015611f79573d6000803e3d6000fd5b50505050612051565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161201e929190613b03565b600060405180830381600087803b15801561203857600080fd5b505af115801561204c573d6000803e3d6000fd5b505050505b5050565b61205e3361211e565b61209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490613c91565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836121829190613e15565b905092915050565b600081836121989190613dbf565b905092915050565b60008383111582906121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df9190613c0f565b60405180910390fd5b5082840390509392505050565b6000602c60009054906101000a900460ff161561221e5761221784848461292c565b905061271b565b6122288483612a9a565b612230612b37565b1561223e5761223d612c0e565b5b612246613158565b156122545761225361320b565b5b6122dd826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a09092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061232b85613287565b6123355782612341565b6123408585856132de565b5b905061239581600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218a90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124fb57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016124c5929190613b03565b600060405180830381600087803b1580156124df57600080fd5b505af19250505080156124f0575060015b6124f9576124fa565b5b5b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661261e57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016125e8929190613b03565b600060405180830381600087803b15801561260257600080fd5b505af1925050508015612613575060015b61261c5761261d565b5b5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796029546040518263ffffffff1660e01b815260040161267b9190613cb1565b600060405180830381600087803b15801561269557600080fd5b505af19250505080156126a6575060015b6126af576126b0565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161270d9190613cb1565b60405180910390a360019150505b9392505050565b600081836127309190613ea0565b905092915050565b600081836127469190613e46565b905092915050565b6001602c60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561278657612785614055565b5b6040519080825280602002602001820160405280156127b45781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106127ee576127ed614026565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061283d5761283c614026565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b81526004016128da9493929190613bc3565b6000604051808303818588803b1580156128f357600080fd5b505af1158015612907573d6000803e3d6000fd5b5050505050506000602c60006101000a81548160ff0219169083151502179055505050565b60006129b7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a09092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a4c82600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218a90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612af45750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2a90613c31565b60405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612ba45750602c60009054906101000a900460ff16155b8015612bbc5750602a60009054906101000a900460ff165b8015612c095750602b54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602c60006101000a81548160ff0219169083151502179055506000612c39601654601754610ea0565b612c4557600e54612c48565b60005b90506000612c886002612c7a601254612c6c86602b5461273890919063ffffffff16565b61217490919063ffffffff16565b61217490919063ffffffff16565b90506000612ca182602b5461272290919063ffffffff16565b90506000600267ffffffffffffffff811115612cc057612cbf614055565b5b604051908082528060200260200182016040528015612cee5781602001602082028036833780820191505090505b5090503081600081518110612d0657612d05614026565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d7757612d76614026565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612e1a959493929190613ccc565b600060405180830381600087803b158015612e3457600080fd5b505af1158015612e48573d6000803e3d6000fd5b505050506000612e61824761272290919063ffffffff16565b90506000612e8d612e7c60028961217490919063ffffffff16565b60125461272290919063ffffffff16565b90506000612ec96002612ebb84612ead8c8861273890919063ffffffff16565b61217490919063ffffffff16565b61217490919063ffffffff16565b90506000612ef483612ee66010548761273890919063ffffffff16565b61217490919063ffffffff16565b90506000612f1f84612f116011548861273890919063ffffffff16565b61217490919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f8b57600080fd5b505af193505050508015612f9d575060015b612fa657612fa7565b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561300f573d6000803e3d6000fd5b50600089111561313157601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016130a296959493929190613b2c565b6060604051808303818588803b1580156130bb57600080fd5b505af11580156130cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130f49190613823565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a604051613128929190613d26565b60405180910390a15b505050505050505050506000602c60006101000a81548160ff021916908315150217905550565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131c55750602c60009054906101000a900460ff16155b80156131dd5750602060009054906101000a900460ff165b80156131f85750436025546026546131f59190613dbf565b11155b801561320657506024544710155b905090565b613239602454600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661274e565b4360268190555061325760245460235461218a90919063ffffffff16565b6023819055506022546023541115613285576000602060006101000a81548160ff0219169083151502179055505b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613360601354613352613343601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611b89565b8661273890919063ffffffff16565b61217490919063ffffffff16565b90506133b481600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218a90919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134549190613cb1565b60405180910390a361346f818461272290919063ffffffff16565b9150509392505050565b6000813590506134888161413e565b92915050565b60008135905061349d81614155565b92915050565b6000813590506134b28161416c565b92915050565b6000813590506134c781614183565b92915050565b6000815190506134dc81614183565b92915050565b6000602082840312156134f8576134f7614084565b5b600061350684828501613479565b91505092915050565b60006020828403121561352557613524614084565b5b60006135338482850161348e565b91505092915050565b6000806040838503121561355357613552614084565b5b600061356185828601613479565b925050602061357285828601613479565b9150509250929050565b60008060006060848603121561359557613594614084565b5b60006135a386828701613479565b93505060206135b486828701613479565b92505060406135c5868287016134b8565b9150509250925092565b600080604083850312156135e6576135e5614084565b5b60006135f485828601613479565b9250506020613605858286016134a3565b9150509250929050565b6000806040838503121561362657613625614084565b5b600061363485828601613479565b9250506020613645858286016134b8565b9150509250929050565b60006020828403121561366557613664614084565b5b6000613673848285016134a3565b91505092915050565b6000806040838503121561369357613692614084565b5b60006136a1858286016134a3565b92505060206136b2858286016134b8565b9150509250929050565b600080600080608085870312156136d6576136d5614084565b5b60006136e4878288016134a3565b94505060206136f5878288016134b8565b9350506040613706878288016134b8565b9250506060613717878288016134b8565b91505092959194509250565b60006020828403121561373957613738614084565b5b6000613747848285016134b8565b91505092915050565b6000806040838503121561376757613766614084565b5b6000613775858286016134b8565b9250506020613786858286016134a3565b9150509250929050565b600080604083850312156137a7576137a6614084565b5b60006137b5858286016134b8565b92505060206137c6858286016134b8565b9150509250929050565b6000806000606084860312156137e9576137e8614084565b5b60006137f7868287016134b8565b9350506020613808868287016134b8565b9250506040613819868287016134b8565b9150509250925092565b60008060006060848603121561383c5761383b614084565b5b600061384a868287016134cd565b935050602061385b868287016134cd565b925050604061386c868287016134cd565b9150509250925092565b600080600080600060a0868803121561389257613891614084565b5b60006138a0888289016134b8565b95505060206138b1888289016134b8565b94505060406138c2888289016134b8565b93505060606138d3888289016134b8565b92505060806138e4888289016134b8565b9150509295509295909350565b60006138fd8383613918565b60208301905092915050565b61391281613f3b565b82525050565b61392181613ed4565b82525050565b61393081613ed4565b82525050565b600061394182613d7a565b61394b8185613d9d565b935061395683613d6a565b8060005b8381101561398757815161396e88826138f1565b975061397983613d90565b92505060018101905061395a565b5085935050505092915050565b61399d81613ef8565b82525050565b6139ac81613f4d565b82525050565b6139bb81613f5f565b82525050565b60006139cc82613d85565b6139d68185613dae565b93506139e6818560208601613f95565b6139ef81614089565b840191505092915050565b6000613a07601183613dae565b9150613a128261409a565b602082019050919050565b6000613a2a601483613dae565b9150613a35826140c3565b602082019050919050565b6000613a4d600683613dae565b9150613a58826140ec565b602082019050919050565b6000613a70600b83613dae565b9150613a7b82614115565b602082019050919050565b613a8f81613f24565b82525050565b613a9e81613f2e565b82525050565b6000602082019050613ab96000830184613927565b92915050565b6000602082019050613ad46000830184613909565b92915050565b6000604082019050613aef6000830185613927565b613afc60208301846139b2565b9392505050565b6000604082019050613b186000830185613927565b613b256020830184613a86565b9392505050565b600060c082019050613b416000830189613927565b613b4e6020830188613a86565b613b5b60408301876139b2565b613b6860608301866139b2565b613b756080830185613927565b613b8260a0830184613a86565b979650505050505050565b6000602082019050613ba26000830184613994565b92915050565b6000602082019050613bbd60008301846139a3565b92915050565b6000608082019050613bd860008301876139b2565b8181036020830152613bea8186613936565b9050613bf96040830185613927565b613c066060830184613a86565b95945050505050565b60006020820190508181036000830152613c2981846139c1565b905092915050565b60006020820190508181036000830152613c4a816139fa565b9050919050565b60006020820190508181036000830152613c6a81613a1d565b9050919050565b60006020820190508181036000830152613c8a81613a40565b9050919050565b60006020820190508181036000830152613caa81613a63565b9050919050565b6000602082019050613cc66000830184613a86565b92915050565b600060a082019050613ce16000830188613a86565b613cee60208301876139b2565b8181036040830152613d008186613936565b9050613d0f6060830185613927565b613d1c6080830184613a86565b9695505050505050565b6000604082019050613d3b6000830185613a86565b613d486020830184613a86565b9392505050565b6000602082019050613d646000830184613a95565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000613dca82613f24565b9150613dd583613f24565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e0a57613e09613fc8565b5b828201905092915050565b6000613e2082613f24565b9150613e2b83613f24565b925082613e3b57613e3a613ff7565b5b828204905092915050565b6000613e5182613f24565b9150613e5c83613f24565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613e9557613e94613fc8565b5b828202905092915050565b6000613eab82613f24565b9150613eb683613f24565b925082821015613ec957613ec8613fc8565b5b828203905092915050565b6000613edf82613f04565b9050919050565b6000613ef182613f04565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613f4682613f71565b9050919050565b6000613f5882613f71565b9050919050565b6000613f6a82613f24565b9050919050565b6000613f7c82613f83565b9050919050565b6000613f8e82613f04565b9050919050565b60005b83811015613fb3578082015181840152602081019050613f98565b83811115613fc2576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b61414781613ed4565b811461415257600080fd5b50565b61415e81613ee6565b811461416957600080fd5b50565b61417581613ef8565b811461418057600080fd5b50565b61418c81613f24565b811461419757600080fd5b5056fea264697066735822122082973e0896579e4acce7784f358dc8f12dc61bd7a9f75499c94308298445c72a64736f6c63430008070033608060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e55348015620000e057600080fd5b5060405162001ca538038062001ca58339818101604052810190620001069190620001f7565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001575773e592427a0aece92de3edee1f18e0157c0586156462000159565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200027c565b600081519050620001f18162000262565b92915050565b60006020828403121562000210576200020f6200025d565b5b60006200022084828501620001e0565b91505092915050565b600062000236826200023d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200026d8162000229565b81146200027957600080fd5b50565b611a19806200028c6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b604051610104919061166b565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611422565b61032d565b005b34801561014257600080fd5b5061015d600480360381019061015891906113f5565b6105ec565b60405161016a919061166b565b60405180910390f35b34801561017f57600080fd5b5061019a600480360381019061019591906114e9565b610706565b005b3480156101a857600080fd5b506101b1610770565b6040516101be919061166b565b60405180910390f35b3480156101d357600080fd5b506101dc610776565b6040516101e9919061166b565b60405180910390f35b3480156101fe57600080fd5b5061020761077c565b604051610214919061166b565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f91906113f5565b610782565b60405161025393929190611686565b60405180910390f35b6102646107ac565b005b34801561027257600080fd5b5061027b610b9c565b604051610288919061166b565b60405180910390f35b34801561029d57600080fd5b506102a6610ba2565b6040516102b3919061166b565b60405180910390f35b3480156102c857600080fd5b506102d1610ba8565b005b3480156102df57600080fd5b506102fa60048036038101906102f5919061148f565b610bb3565b005b34801561030857600080fd5b50610311610d47565b60405161031e919061166b565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d4d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610ff4565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f826110a3565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546008546112aa90919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106415760009050610701565b600061068e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e957600092505050610701565b6106fc81836112aa90919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075e57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080457600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086191906115db565b60206040518083038186803b15801561087957600080fd5b505afa15801561088d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b191906114bc565b90506000600267ffffffffffffffff8111156108d0576108cf61196a565b5b6040519080825280602002602001820160405280156108fe5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106109385761093761193b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106109a9576109a861193b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a46949392919061161f565b6000604051808303818588803b158015610a5f57600080fd5b505af1158015610a73573d6000803e3d6000fd5b50505050506000610b3783600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ad991906115db565b60206040518083038186803b158015610af157600080fd5b505afa158015610b05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2991906114bc565b6112aa90919063ffffffff16565b9050610b4e816009546112c090919063ffffffff16565b600981905550610b91610b80600854610b7284600c5461130890919063ffffffff16565b61131e90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610bb133610d4d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c0b57600080fd5b600060048054905090506000811415610c245750610d44565b6000805a905060005b8483108015610c3b57508381105b15610d3f5783600f5410610c52576000600f819055505b610c9b6004600f5481548110610c6b57610c6a61193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611334565b15610cea57610ce96004600f5481548110610cb957610cb861193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d4d565b5b610d0f610d005a846112aa90919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d2790611865565b91905055508080610d3790611865565b915050610c2d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610d9d57610ff1565b6000610da8826105ec565b90506000811115610fef57610dc881600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e2b9291906115f6565b602060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190611462565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f1781600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610fa8600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112d6565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110b791906117d7565b815481106110c8576110c761193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111465761114561193b565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111e691906117d7565b815481106111f7576111f661193b565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112725761127161190c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600081836112b891906117d7565b905092915050565b600081836112ce91906116f6565b905092915050565b6000611301600c546112f3600b548561130890919063ffffffff16565b61131e90919063ffffffff16565b9050919050565b60008183611316919061177d565b905092915050565b6000818361132c919061174c565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461138491906116f6565b10801561139a5750600e54611398836105ec565b115b9050919050565b6000813590506113b08161199e565b92915050565b6000815190506113c5816119b5565b92915050565b6000813590506113da816119cc565b92915050565b6000815190506113ef816119cc565b92915050565b60006020828403121561140b5761140a611999565b5b6000611419848285016113a1565b91505092915050565b6000806040838503121561143957611438611999565b5b6000611447858286016113a1565b9250506020611458858286016113cb565b9150509250929050565b60006020828403121561147857611477611999565b5b6000611486848285016113b6565b91505092915050565b6000602082840312156114a5576114a4611999565b5b60006114b3848285016113cb565b91505092915050565b6000602082840312156114d2576114d1611999565b5b60006114e0848285016113e0565b91505092915050565b60008060408385031215611500576114ff611999565b5b600061150e858286016113cb565b925050602061151f858286016113cb565b9150509250929050565b60006115358383611541565b60208301905092915050565b61154a8161180b565b82525050565b6115598161180b565b82525050565b600061156a826116cd565b61157481856116e5565b935061157f836116bd565b8060005b838110156115b05781516115978882611529565b97506115a2836116d8565b925050600181019050611583565b5085935050505092915050565b6115c681611853565b82525050565b6115d581611849565b82525050565b60006020820190506115f06000830184611550565b92915050565b600060408201905061160b6000830185611550565b61161860208301846115cc565b9392505050565b600060808201905061163460008301876115bd565b8181036020830152611646818661155f565b90506116556040830185611550565b61166260608301846115cc565b95945050505050565b600060208201905061168060008301846115cc565b92915050565b600060608201905061169b60008301866115cc565b6116a860208301856115cc565b6116b560408301846115cc565b949350505050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600061170182611849565b915061170c83611849565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611741576117406118ae565b5b828201905092915050565b600061175782611849565b915061176283611849565b925082611772576117716118dd565b5b828204905092915050565b600061178882611849565b915061179383611849565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156117cc576117cb6118ae565b5b828202905092915050565b60006117e282611849565b91506117ed83611849565b925082821015611800576117ff6118ae565b5b828203905092915050565b600061181682611829565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061185e82611849565b9050919050565b600061187082611849565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156118a3576118a26118ae565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6119a78161180b565b81146119b257600080fd5b50565b6119be8161181d565b81146119c957600080fd5b50565b6119d581611849565b81146119e057600080fd5b5056fea2646970667358221220e1c87c7d167502f0a3e8568bbc1f4844ea7361c935089e71058cd5ccc092c5f964736f6c634300080700330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

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

0000000000000000000000007a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Decoded View---------------
Arg [0] : _dexRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630B4cF539739dF2C5dAcb4c659F2488D


Deployed ByteCode Sourcemap

12618:15037:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24662:187;;;;;;;;;;;;;:::i;:::-;;14711:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23847:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25629:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16133:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16636:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27384:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15863:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26533:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24214:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17149:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27059:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26724:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4514:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15957:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14295:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16860:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24857:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25365:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14674:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16384:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13271:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16219:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16043:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26915:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26133:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14592:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14000:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16985:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12814:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23054:105;;;;;;;;;;;;;:::i;:::-;;4187:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14028:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14060:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13798:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27209:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19479:663;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16495:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26369:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12695:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13841:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4357:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19244:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4914:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22730:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25010:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25493:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13969:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4688:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24662:187;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24731:1:::1;24717:10;;:15;24709:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24781:12;24768:10;:25;;;;24826:15;24804:19;:37;;;;24662:187::o:0;14711:50::-;;;;:::o;23847:359::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23994:8:::1;23973:18;;:29;;;;;;;;;;;;;;;;;;24030:4;24013:14;:21;;;;24070:1;24045:22;:26;;;;24102:7;24082:17;:27;;;;24145:7;24120:22;:32;;;;24186:12;24163:20;:35;;;;23847:359:::0;;;;:::o;25629:496::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25808:13:::1;25793:12;:28;;;;25845:11;25832:10;:24;;;;25883:14;25867:13;:30;;;;25923:13;25908:12;:28;;;;25958:69;26013:13;25958:50;25993:14;25958:30;25976:11;25958:13;:17;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;25947:8;:80;;;;26055:15;26038:14;:32;;;;26115:1;26100:14;;:16;;;;:::i;:::-;26089:8;;:27;26081:36;;;::::0;::::1;;25629:496:::0;;;;;:::o;16133:80::-;16181:13;16205:5;;;;;;;;;;;;;;;;;16198:12;;16133:80;:::o;16636:216::-;16711:4;16763:6;16728:11;:23;16740:10;16728:23;;;;;;;;;;;;;;;:32;16752:7;16728:32;;;;;;;;;;;;;;;:41;;;;16806:7;16785:37;;16794:10;16785:37;;;16815:6;16785:37;;;;;;:::i;:::-;;;;;;;;16840:4;16833:11;;16636:216;;;;:::o;27384:150::-;27464:4;27520:6;27488:29;27508:8;27488:19;:29::i;:::-;:38;27481:45;;27384:150;;;;:::o;15863:88::-;15918:7;15936:12;;15929:19;;15863:88;:::o;26533:183::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26649:7:::1;26631:15;:25;;;;26696:12;26667:26;:41;;;;26533:183:::0;;:::o;24214:342::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24374:1:::1;24359:11;24347:9;:23;;;;:::i;:::-;:28;;:55;;;;;24391:11;24379:9;:23;24347:55;24339:64;;;::::0;::::1;;24443:9;24414:26;:38;;;;24494:11;24463:28;:42;;;;24542:6;24516:23;:32;;;;24214:342:::0;;;:::o;17149:365::-;17249:4;17304:12;;17269:11;:19;17281:6;17269:19;;;;;;;;;;;;;;;:31;17289:10;17269:31;;;;;;;;;;;;;;;;:47;17266:181;;17366:69;17402:6;17366:69;;;;;;;;;;;;;;;;;:11;:19;17378:6;17366:19;;;;;;;;;;;;;;;:31;17386:10;17366:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17332:11;:19;17344:6;17332:19;;;;;;;;;;;;;;;:31;17352:10;17332:31;;;;;;;;;;;;;;;:103;;;;17266:181;17466:40;17480:6;17488:9;17499:6;17466:13;:40::i;:::-;17459:47;;17149:365;;;;;:::o;27059:142::-;27112:7;27139:54;27177:15;27187:4;;;;;;;;;;;27177:9;:15::i;:::-;27139:33;27156:15;27166:4;;;;;;;;;;;27156:9;:15::i;:::-;27139:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;27132:61;;27059:142;:::o;26724:183::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26834:11:::1;;;;;;;;;;;:35;;;26870:10;26882:16;26834:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26724:183:::0;;:::o;4514:103::-;4569:4;4604:5;;;;;;;;;;;4593:16;;:7;:16;;;4586:23;;4514:103;;;:::o;15957:80::-;16009:5;13201:1;16018:16;;15957:80;:::o;14295:38::-;;;;;;;;;;;;;:::o;16860:117::-;16915:4;16939:30;16947:7;16956:12;;16939:7;:30::i;:::-;16932:37;;16860:117;;;:::o;24857:145::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24957:4:::1;24942:12;;:19;;;;:::i;:::-;24932:6;:29;;24924:38;;;::::0;::::1;;24988:6;24973:12;:21;;;;24857:145:::0;:::o;25365:120::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25471:6:::1;25449:11;:19;25461:6;25449:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25365:120:::0;;:::o;14674:30::-;;;;;;;;;;;;;:::o;16384:105::-;16450:7;16468:9;:18;16478:7;16468:18;;;;;;;;;;;;;;;;16461:25;;16384:105;;;:::o;13271:51::-;;;;:::o;16219:78::-;16271:7;16289:5;;;;;;;;;;;16282:12;;16219:78;:::o;16043:84::-;16093:13;16117:7;;;;;;;;;;;;;;;;;16110:14;;16043:84;:::o;26915:136::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27005:6:::1;26999:3;:12;26991:21;;;::::0;::::1;;27040:3;27023:14;:20;;;;26915:136:::0;:::o;26133:228::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26276:22:::1;26252:21;;:46;;;;;;;;;;;;;;;;;;26332:21;26309:20;;:44;;;;;;;;;;;;;;;;;;26133:228:::0;;:::o;14592:33::-;;;;;;;;;;;;;:::o;14000:19::-;;;;;;;;;;;;;:::o;16985:156::-;17065:4;17089:44;17103:10;17115:9;17126:6;17089:13;:44::i;:::-;17082:51;;16985:156;;;;:::o;12814:64::-;;;;;;;;;;;;;:::o;23054:105::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23150:1:::1;23119:28;:32;;;;23054:105::o:0;4187:94::-;3903:19;3911:10;3903:7;:19::i;:::-;3895:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4269:4:::1;4247:14:::0;:19:::1;4262:3;4247:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4187:94:::0;:::o;14028:25::-;;;;:::o;14060:34::-;;;;:::o;13798:36::-;;;;;;;;;;;;;:::o;27209:167::-;27277:7;27304:64;27345:22;:20;:22::i;:::-;27304:36;27317:22;27337:1;27317:15;27327:4;;;;;;;;;;;27317:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;27304:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;27297:71;;27209:167;;;:::o;19479:663::-;19528:7;19583:15;19574:6;19552:19;;:28;;;;:::i;:::-;:46;19548:561;;;19622:39;19646:14;;19622:19;19635:5;19622:8;;:12;;:19;;;;:::i;:::-;:23;;:39;;;;:::i;:::-;19615:46;;;;19548:561;19743:15;19683:57;19716:23;;19683:28;;:32;;:57;;;;:::i;:::-;:75;19679:430;;;19775:21;19799:78;19861:15;19799:57;19832:23;;19799:28;;:32;;:57;;;;:::i;:::-;:61;;:78;;;;:::i;:::-;19775:102;;19892:19;19914:88;19993:8;;19914:74;19959:28;;19914:40;19927:26;;19914:8;;:12;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;:78;;:88;;;;:::i;:::-;19892:110;;20024:73;20037:59;20072:23;;20037:30;20053:13;20037:11;:15;;:30;;;;:::i;:::-;:34;;:59;;;;:::i;:::-;20024:8;;:12;;:73;;;;:::i;:::-;20017:80;;;;;;19679:430;20126:8;;20119:15;;19479:663;;:::o;16495:133::-;16579:7;16597:11;:19;16609:6;16597:19;;;;;;;;;;;;;;;:28;16617:7;16597:28;;;;;;;;;;;;;;;;16590:35;;16495:133;;;;:::o;26369:156::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26475:8:::1;26461:11;;:22;;;;;;;;;;;;;;;;;;26510:7;26494:13;:23;;;;26369:156:::0;;:::o;12695:48::-;12726:17;12695:48;;;:::o;13841:35::-;;;;;;;;;;;;;:::o;4357:97::-;3903:19;3911:10;3903:7;:19::i;:::-;3895:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4441:5:::1;4419:14;:19;4434:3;4419:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4357:97:::0;:::o;19244:227::-;19300:7;19341:12;19336:1;19323:10;;:14;;;;:::i;:::-;:30;19320:67;;19363:21;19382:1;19363:14;;:18;;:21;;;;:::i;:::-;19356:28;;;;19320:67;19400:7;19397:41;;;19417:18;:16;:18::i;:::-;19410:25;;;;19397:41;19455:8;;19448:15;;19244:227;;;;:::o;4914:173::-;3903:19;3911:10;3903:7;:19::i;:::-;3895:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4998:3:::1;4990:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;5034:4;5012:14:::0;:19:::1;5027:3;5012:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5054:25;5075:3;5054:25;;;;;;:::i;:::-;;;;;;;;4914:173:::0;:::o;22730:316::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22836:23:::1;22846:6;22854:4;;;;;;;;;;;22836:9;:23::i;:::-;22873:24;22870:169;;;22944:15;22913:28;:46;;;;22979:48;23003:23;;22979:48;;;;;;:::i;:::-;;;;;;;;22870:169;22730:316:::0;;:::o;25010:347::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25125:4:::1;25107:23;;:6;:23;;;;:41;;;;;25144:4;;;;;;;;;;;25134:14;;:6;:14;;;;25107:41;25099:50;;;::::0;::::1;;25187:6;25160:16;:24;25177:6;25160:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25207:6;25204:146;;;25229:11;;;;;;;;;;;:20;;;25250:6;25258:1;25229:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25204:146;;;25291:11;;;;;;;;;;;:20;;;25312:6;25320:9;:17;25330:6;25320:17;;;;;;;;;;;;;;;;25291:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25204:146;25010:347:::0;;:::o;25493:128::-;4072:24;4085:10;4072:12;:24::i;:::-;4064:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25607:6:::1;25581:15;:23;25597:6;25581:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25493:128:::0;;:::o;13969:24::-;;;;;;;;;;;;;:::o;4688:107::-;4744:4;4768:14;:19;4783:3;4768:19;;;;;;;;;;;;;;;;;;;;;;;;;4761:26;;4688:107;;;:::o;1789:98::-;1847:7;1878:1;1874;:5;;;;:::i;:::-;1867:12;;1789:98;;;;:::o;1471:::-;1529:7;1560:1;1556;:5;;;;:::i;:::-;1549:12;;1471:98;;;;:::o;2001:206::-;2087:7;2145:1;2140;:6;;2148:12;2132:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2187:1;2183;:5;2176:12;;2001:206;;;;;:::o;17522:1074::-;17614:4;17634:6;;;;;;;;;;;17631:63;;;17650:41;17665:6;17673:9;17684:6;17650:14;:41::i;:::-;17643:48;;;;17631:63;17706:28;17719:6;17727;17706:12;:28::i;:::-;17760:16;:14;:16::i;:::-;17757:35;;;17779:10;:8;:10::i;:::-;17757:35;17805:19;:17;:19::i;:::-;17802:48;;;17827:20;:18;:20::i;:::-;17802:48;17985:53;18007:6;17985:53;;;;;;;;;;;;;;;;;:9;:17;17995:6;17985:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;17965:9;:17;17975:6;17965:17;;;;;;;;;;;;;;;:73;;;;18051:22;18076:21;18090:6;18076:13;:21::i;:::-;:67;;18137:6;18076:67;;;18100:34;18108:6;18116:9;18127:6;18100:7;:34::i;:::-;18076:67;18051:92;;18179:40;18204:14;18179:9;:20;18189:9;18179:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;18156:9;:20;18166:9;18156:20;;;;;;;;;;;;;;;:63;;;;18236:16;:24;18253:6;18236:24;;;;;;;;;;;;;;;;;;;;;;;;;18232:96;;18267:11;;;;;;;;;;;:20;;;18288:6;18296:9;:17;18306:6;18296:17;;;;;;;;;;;;;;;;18267:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18263:63;;;;;;18232:96;18342:16;:27;18359:9;18342:27;;;;;;;;;;;;;;;;;;;;;;;;;18338:105;;18376:11;;;;;;;;;;;:20;;;18397:9;18408;:20;18418:9;18408:20;;;;;;;;;;;;;;;;18376:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18372:69;;;;;;18338:105;18459:11;;;;;;;;;;;:19;;;18479:14;;18459:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18455:51;;;;;;18540:9;18523:43;;18532:6;18523:43;;;18551:14;18523:43;;;;;;:::i;:::-;;;;;;;;18584:4;18577:11;;;17522:1074;;;;;;:::o;1577:98::-;1635:7;1666:1;1662;:5;;;;:::i;:::-;1655:12;;1577:98;;;;:::o;1683:::-;1741:7;1772:1;1768;:5;;;;:::i;:::-;1761:12;;1683:98;;;;:::o;23478:361::-;14827:4;14818:6;;:13;;;;;;;;;;;;;;;;;;23554:21:::1;23592:1;23578:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23554:40;;23615:4;;;;;;;;;;;23605;23610:1;23605:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;23648:4;23630;23635:1;23630:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23666:6;;;;;;;;;;;:57;;;23731:6;23753:1;23769:4;23788:2;23805:15;23666:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23543:296;14845:5:::0;14836:6;;:14;;;;;;;;;;;;;;;;;;23478:361;;:::o;18604:332::-;18697:4;18734:53;18756:6;18734:53;;;;;;;;;;;;;;;;;:9;:17;18744:6;18734:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18714:9;:17;18724:6;18714:17;;;;;;;;;;;;;;;:73;;;;18821:32;18846:6;18821:9;:20;18831:9;18821:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18798:9;:20;18808:9;18798:20;;;;;;;;;;;;;;;:55;;;;18924:4;18917:11;;18604:332;;;;;:::o;18948:166::-;19045:12;;19035:6;:22;;:49;;;;19061:15;:23;19077:6;19061:23;;;;;;;;;;;;;;;;;;;;;;;;;19035:49;19027:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18948:166;;:::o;20530:197::-;20579:4;20617;;;;;;;;;;;20603:18;;:10;:18;;;;:38;;;;;20635:6;;;;;;;;;;;20634:7;20603:38;:62;;;;;20654:11;;;;;;;;;;;20603:62;:116;;;;;20706:13;;20678:9;:24;20696:4;20678:24;;;;;;;;;;;;;;;;:41;;20603:116;20596:123;;20530:197;:::o;20735:1661::-;14827:4;14818:6;;:13;;;;;;;;;;;;;;;;;;20784:27:::1;20814:60;20830:15;;20847:26;;20814:15;:60::i;:::-;:79;;20881:12;;20814:79;;;20877:1;20814:79;20784:109;;20904:23;20930:59;20987:1;20930:52;20973:8;;20930:38;20948:19;20930:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;20904:85;;21000:20;21023:34;21041:15;21023:13;;:17;;:34;;;;:::i;:::-;21000:57;;21070:21;21108:1;21094:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21070:40;;21139:4;21121;21126:1;21121:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21165:4;;;;;;;;;;;21155;21160:1;21155:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;21180:21;21204;21180:45;;21238:6;;;;;;;;;;;:57;;;21310:12;21337:1;21353:4;21380;21400:15;21238:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21439:17;21459:40;21485:13;21459:21;:25;;:40;;;;:::i;:::-;21439:60;;21512:19;21534:40;21547:26;21571:1;21547:19;:23;;:26;;;;:::i;:::-;21534:8;;:12;;:40;;;;:::i;:::-;21512:62;;21587:26;21616:58;21672:1;21616:51;21655:11;21616:34;21630:19;21616:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;21587:87;;21685:27;21715:45;21748:11;21715:28;21729:13;;21715:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;21685:75;;21771:26;21800:44;21832:11;21800:27;21814:12;;21800:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;21771:73;;21861:11;;;;;;;;;;;:19;;;21888;21861:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;21857:65;;;;;;21940:20;;;;;;;;;;;21932:38;;:58;21971:18;21932:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22048:1;22030:15;:19;22027:362;;;22065:6;;;;;;;;;;;:22;;;22095:18;22141:4;22165:15;22199:1;22219::::0;22239:21:::1;;;;;;;;;;;22279:15;22065:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22329:48;22341:18;22361:15;22329:48;;;;;;;:::i;:::-;;;;;;;;22027:362;20773:1623;;;;;;;;;;14845:5:::0;14836:6;;:14;;;;;;;;;;;;;;;;;;20735:1661::o;22404:318::-;22456:4;22494;;;;;;;;;;;22480:18;;:10;:18;;;;:38;;;;;22512:6;;;;;;;;;;;22511:7;22480:38;:69;;;;;22531:18;;;;;;;;;;;22480:69;:143;;;;;22611:12;22585:22;;22562:20;;:45;;;;:::i;:::-;:61;;22480:143;:234;;;;;22697:17;;22672:21;:42;;22480:234;22473:241;;22404:318;:::o;23167:303::-;23217:34;23227:17;;23246:4;;;;;;;;;;;23217:9;:34::i;:::-;23285:12;23262:20;:35;;;;23333:45;23360:17;;23333:22;;:26;;:45;;;;:::i;:::-;23308:22;:70;;;;23417:14;;23392:22;;:39;23389:74;;;23455:5;23434:18;;:26;;;;;;;;;;;;;;;;;;23389:74;23167:303::o;19122:114::-;19184:4;19209:11;:19;19221:6;19209:19;;;;;;;;;;;;;;;;;;;;;;;;;19208:20;19201:27;;19122:114;;;:::o;20150:372::-;20235:7;20255:17;20275:61;20321:14;;20275:41;20286:29;20310:4;;;;;;;;;;;20298:16;;:8;:16;;;20286:11;:29::i;:::-;20275:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;20255:81;;20376:39;20405:9;20376;:24;20394:4;20376:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;20349:9;:24;20367:4;20349:24;;;;;;;;;;;;;;;:66;;;;20456:4;20431:42;;20440:6;20431:42;;;20463:9;20431:42;;;;;;:::i;:::-;;;;;;;;20493:21;20504:9;20493:6;:10;;:21;;;;:::i;:::-;20486:28;;;20150:372;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;313:133::-;356:5;394:6;381:20;372:29;;410:30;434:5;410:30;:::i;:::-;313:133;;;;:::o;452:139::-;498:5;536:6;523:20;514:29;;552:33;579:5;552:33;:::i;:::-;452:139;;;;:::o;597:143::-;654:5;685:6;679:13;670:22;;701:33;728:5;701:33;:::i;:::-;597:143;;;;:::o;746:329::-;805:6;854:2;842:9;833:7;829:23;825:32;822:119;;;860:79;;:::i;:::-;822:119;980:1;1005:53;1050:7;1041:6;1030:9;1026:22;1005:53;:::i;:::-;995:63;;951:117;746:329;;;;:::o;1081:345::-;1148:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:119;;;1203:79;;:::i;:::-;1165:119;1323:1;1348:61;1401:7;1392:6;1381:9;1377:22;1348:61;:::i;:::-;1338:71;;1294:125;1081:345;;;;:::o;1432:474::-;1500:6;1508;1557:2;1545:9;1536:7;1532:23;1528:32;1525:119;;;1563:79;;:::i;:::-;1525:119;1683:1;1708:53;1753:7;1744:6;1733:9;1729:22;1708:53;:::i;:::-;1698:63;;1654:117;1810:2;1836:53;1881:7;1872:6;1861:9;1857:22;1836:53;:::i;:::-;1826:63;;1781:118;1432:474;;;;;:::o;1912:619::-;1989:6;1997;2005;2054:2;2042:9;2033:7;2029:23;2025:32;2022:119;;;2060:79;;:::i;:::-;2022:119;2180:1;2205:53;2250:7;2241:6;2230:9;2226:22;2205:53;:::i;:::-;2195:63;;2151:117;2307:2;2333:53;2378:7;2369:6;2358:9;2354:22;2333:53;:::i;:::-;2323:63;;2278:118;2435:2;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2406:118;1912:619;;;;;:::o;2537:468::-;2602:6;2610;2659:2;2647:9;2638:7;2634:23;2630:32;2627:119;;;2665:79;;:::i;:::-;2627:119;2785:1;2810:53;2855:7;2846:6;2835:9;2831:22;2810:53;:::i;:::-;2800:63;;2756:117;2912:2;2938:50;2980:7;2971:6;2960:9;2956:22;2938:50;:::i;:::-;2928:60;;2883:115;2537:468;;;;;:::o;3011:474::-;3079:6;3087;3136:2;3124:9;3115:7;3111:23;3107:32;3104:119;;;3142:79;;:::i;:::-;3104:119;3262:1;3287:53;3332:7;3323:6;3312:9;3308:22;3287:53;:::i;:::-;3277:63;;3233:117;3389:2;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;:::i;:::-;3405:63;;3360:118;3011:474;;;;;:::o;3491:323::-;3547:6;3596:2;3584:9;3575:7;3571:23;3567:32;3564:119;;;3602:79;;:::i;:::-;3564:119;3722:1;3747:50;3789:7;3780:6;3769:9;3765:22;3747:50;:::i;:::-;3737:60;;3693:114;3491:323;;;;:::o;3820:468::-;3885:6;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:50;4135:7;4126:6;4115:9;4111:22;4093:50;:::i;:::-;4083:60;;4039:114;4192:2;4218:53;4263:7;4254:6;4243:9;4239:22;4218:53;:::i;:::-;4208:63;;4163:118;3820:468;;;;;:::o;4294:759::-;4377:6;4385;4393;4401;4450:3;4438:9;4429:7;4425:23;4421:33;4418:120;;;4457:79;;:::i;:::-;4418:120;4577:1;4602:50;4644:7;4635:6;4624:9;4620:22;4602:50;:::i;:::-;4592:60;;4548:114;4701:2;4727:53;4772:7;4763:6;4752:9;4748:22;4727:53;:::i;:::-;4717:63;;4672:118;4829:2;4855:53;4900:7;4891:6;4880:9;4876:22;4855:53;:::i;:::-;4845:63;;4800:118;4957:2;4983:53;5028:7;5019:6;5008:9;5004:22;4983:53;:::i;:::-;4973:63;;4928:118;4294:759;;;;;;;:::o;5059:329::-;5118:6;5167:2;5155:9;5146:7;5142:23;5138:32;5135:119;;;5173:79;;:::i;:::-;5135:119;5293:1;5318:53;5363:7;5354:6;5343:9;5339:22;5318:53;:::i;:::-;5308:63;;5264:117;5059:329;;;;:::o;5394:468::-;5459:6;5467;5516:2;5504:9;5495:7;5491:23;5487:32;5484:119;;;5522:79;;:::i;:::-;5484:119;5642:1;5667:53;5712:7;5703:6;5692:9;5688:22;5667:53;:::i;:::-;5657:63;;5613:117;5769:2;5795:50;5837:7;5828:6;5817:9;5813:22;5795:50;:::i;:::-;5785:60;;5740:115;5394:468;;;;;:::o;5868:474::-;5936:6;5944;5993:2;5981:9;5972:7;5968:23;5964:32;5961:119;;;5999:79;;:::i;:::-;5961:119;6119:1;6144:53;6189:7;6180:6;6169:9;6165:22;6144:53;:::i;:::-;6134:63;;6090:117;6246:2;6272:53;6317:7;6308:6;6297:9;6293:22;6272:53;:::i;:::-;6262:63;;6217:118;5868:474;;;;;:::o;6348:619::-;6425:6;6433;6441;6490:2;6478:9;6469:7;6465:23;6461:32;6458:119;;;6496:79;;:::i;:::-;6458:119;6616:1;6641:53;6686:7;6677:6;6666:9;6662:22;6641:53;:::i;:::-;6631:63;;6587:117;6743:2;6769:53;6814:7;6805:6;6794:9;6790:22;6769:53;:::i;:::-;6759:63;;6714:118;6871:2;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6842:118;6348:619;;;;;:::o;6973:663::-;7061:6;7069;7077;7126:2;7114:9;7105:7;7101:23;7097:32;7094:119;;;7132:79;;:::i;:::-;7094:119;7252:1;7277:64;7333:7;7324:6;7313:9;7309:22;7277:64;:::i;:::-;7267:74;;7223:128;7390:2;7416:64;7472:7;7463:6;7452:9;7448:22;7416:64;:::i;:::-;7406:74;;7361:129;7529:2;7555:64;7611:7;7602:6;7591:9;7587:22;7555:64;:::i;:::-;7545:74;;7500:129;6973:663;;;;;:::o;7642:911::-;7737:6;7745;7753;7761;7769;7818:3;7806:9;7797:7;7793:23;7789:33;7786:120;;;7825:79;;:::i;:::-;7786:120;7945:1;7970:53;8015:7;8006:6;7995:9;7991:22;7970:53;:::i;:::-;7960:63;;7916:117;8072:2;8098:53;8143:7;8134:6;8123:9;8119:22;8098:53;:::i;:::-;8088:63;;8043:118;8200:2;8226:53;8271:7;8262:6;8251:9;8247:22;8226:53;:::i;:::-;8216:63;;8171:118;8328:2;8354:53;8399:7;8390:6;8379:9;8375:22;8354:53;:::i;:::-;8344:63;;8299:118;8456:3;8483:53;8528:7;8519:6;8508:9;8504:22;8483:53;:::i;:::-;8473:63;;8427:119;7642:911;;;;;;;;:::o;8559:179::-;8628:10;8649:46;8691:3;8683:6;8649:46;:::i;:::-;8727:4;8722:3;8718:14;8704:28;;8559:179;;;;:::o;8744:147::-;8839:45;8878:5;8839:45;:::i;:::-;8834:3;8827:58;8744:147;;:::o;8897:108::-;8974:24;8992:5;8974:24;:::i;:::-;8969:3;8962:37;8897:108;;:::o;9011:118::-;9098:24;9116:5;9098:24;:::i;:::-;9093:3;9086:37;9011:118;;:::o;9165:732::-;9284:3;9313:54;9361:5;9313:54;:::i;:::-;9383:86;9462:6;9457:3;9383:86;:::i;:::-;9376:93;;9493:56;9543:5;9493:56;:::i;:::-;9572:7;9603:1;9588:284;9613:6;9610:1;9607:13;9588:284;;;9689:6;9683:13;9716:63;9775:3;9760:13;9716:63;:::i;:::-;9709:70;;9802:60;9855:6;9802:60;:::i;:::-;9792:70;;9648:224;9635:1;9632;9628:9;9623:14;;9588:284;;;9592:14;9888:3;9881:10;;9289:608;;;9165:732;;;;:::o;9903:109::-;9984:21;9999:5;9984:21;:::i;:::-;9979:3;9972:34;9903:109;;:::o;10018:167::-;10123:55;10172:5;10123:55;:::i;:::-;10118:3;10111:68;10018:167;;:::o;10191:147::-;10286:45;10325:5;10286:45;:::i;:::-;10281:3;10274:58;10191:147;;:::o;10344:364::-;10432:3;10460:39;10493:5;10460:39;:::i;:::-;10515:71;10579:6;10574:3;10515:71;:::i;:::-;10508:78;;10595:52;10640:6;10635:3;10628:4;10621:5;10617:16;10595:52;:::i;:::-;10672:29;10694:6;10672:29;:::i;:::-;10667:3;10663:39;10656:46;;10436:272;10344:364;;;;:::o;10714:366::-;10856:3;10877:67;10941:2;10936:3;10877:67;:::i;:::-;10870:74;;10953:93;11042:3;10953:93;:::i;:::-;11071:2;11066:3;11062:12;11055:19;;10714:366;;;:::o;11086:::-;11228:3;11249:67;11313:2;11308:3;11249:67;:::i;:::-;11242:74;;11325:93;11414:3;11325:93;:::i;:::-;11443:2;11438:3;11434:12;11427:19;;11086:366;;;:::o;11458:365::-;11600:3;11621:66;11685:1;11680:3;11621:66;:::i;:::-;11614:73;;11696:93;11785:3;11696:93;:::i;:::-;11814:2;11809:3;11805:12;11798:19;;11458:365;;;:::o;11829:366::-;11971:3;11992:67;12056:2;12051:3;11992:67;:::i;:::-;11985:74;;12068:93;12157:3;12068:93;:::i;:::-;12186:2;12181:3;12177:12;12170:19;;11829:366;;;:::o;12201:118::-;12288:24;12306:5;12288:24;:::i;:::-;12283:3;12276:37;12201:118;;:::o;12325:112::-;12408:22;12424:5;12408:22;:::i;:::-;12403:3;12396:35;12325:112;;:::o;12443:222::-;12536:4;12574:2;12563:9;12559:18;12551:26;;12587:71;12655:1;12644:9;12640:17;12631:6;12587:71;:::i;:::-;12443:222;;;;:::o;12671:238::-;12772:4;12810:2;12799:9;12795:18;12787:26;;12823:79;12899:1;12888:9;12884:17;12875:6;12823:79;:::i;:::-;12671:238;;;;:::o;12915:348::-;13044:4;13082:2;13071:9;13067:18;13059:26;;13095:71;13163:1;13152:9;13148:17;13139:6;13095:71;:::i;:::-;13176:80;13252:2;13241:9;13237:18;13228:6;13176:80;:::i;:::-;12915:348;;;;;:::o;13269:332::-;13390:4;13428:2;13417:9;13413:18;13405:26;;13441:71;13509:1;13498:9;13494:17;13485:6;13441:71;:::i;:::-;13522:72;13590:2;13579:9;13575:18;13566:6;13522:72;:::i;:::-;13269:332;;;;;:::o;13607:807::-;13856:4;13894:3;13883:9;13879:19;13871:27;;13908:71;13976:1;13965:9;13961:17;13952:6;13908:71;:::i;:::-;13989:72;14057:2;14046:9;14042:18;14033:6;13989:72;:::i;:::-;14071:80;14147:2;14136:9;14132:18;14123:6;14071:80;:::i;:::-;14161;14237:2;14226:9;14222:18;14213:6;14161:80;:::i;:::-;14251:73;14319:3;14308:9;14304:19;14295:6;14251:73;:::i;:::-;14334;14402:3;14391:9;14387:19;14378:6;14334:73;:::i;:::-;13607:807;;;;;;;;;:::o;14420:210::-;14507:4;14545:2;14534:9;14530:18;14522:26;;14558:65;14620:1;14609:9;14605:17;14596:6;14558:65;:::i;:::-;14420:210;;;;:::o;14636:258::-;14747:4;14785:2;14774:9;14770:18;14762:26;;14798:89;14884:1;14873:9;14869:17;14860:6;14798:89;:::i;:::-;14636:258;;;;:::o;14900:720::-;15135:4;15173:3;15162:9;15158:19;15150:27;;15187:79;15263:1;15252:9;15248:17;15239:6;15187:79;:::i;:::-;15313:9;15307:4;15303:20;15298:2;15287:9;15283:18;15276:48;15341:108;15444:4;15435:6;15341:108;:::i;:::-;15333:116;;15459:72;15527:2;15516:9;15512:18;15503:6;15459:72;:::i;:::-;15541;15609:2;15598:9;15594:18;15585:6;15541:72;:::i;:::-;14900:720;;;;;;;:::o;15626:313::-;15739:4;15777:2;15766:9;15762:18;15754:26;;15826:9;15820:4;15816:20;15812:1;15801:9;15797:17;15790:47;15854:78;15927:4;15918:6;15854:78;:::i;:::-;15846:86;;15626:313;;;;:::o;15945:419::-;16111:4;16149:2;16138:9;16134:18;16126:26;;16198:9;16192:4;16188:20;16184:1;16173:9;16169:17;16162:47;16226:131;16352:4;16226:131;:::i;:::-;16218:139;;15945:419;;;:::o;16370:::-;16536:4;16574:2;16563:9;16559:18;16551:26;;16623:9;16617:4;16613:20;16609:1;16598:9;16594:17;16587:47;16651:131;16777:4;16651:131;:::i;:::-;16643:139;;16370:419;;;:::o;16795:::-;16961:4;16999:2;16988:9;16984:18;16976:26;;17048:9;17042:4;17038:20;17034:1;17023:9;17019:17;17012:47;17076:131;17202:4;17076:131;:::i;:::-;17068:139;;16795:419;;;:::o;17220:::-;17386:4;17424:2;17413:9;17409:18;17401:26;;17473:9;17467:4;17463:20;17459:1;17448:9;17444:17;17437:47;17501:131;17627:4;17501:131;:::i;:::-;17493:139;;17220:419;;;:::o;17645:222::-;17738:4;17776:2;17765:9;17761:18;17753:26;;17789:71;17857:1;17846:9;17842:17;17833:6;17789:71;:::i;:::-;17645:222;;;;:::o;17873:831::-;18136:4;18174:3;18163:9;18159:19;18151:27;;18188:71;18256:1;18245:9;18241:17;18232:6;18188:71;:::i;:::-;18269:80;18345:2;18334:9;18330:18;18321:6;18269:80;:::i;:::-;18396:9;18390:4;18386:20;18381:2;18370:9;18366:18;18359:48;18424:108;18527:4;18518:6;18424:108;:::i;:::-;18416:116;;18542:72;18610:2;18599:9;18595:18;18586:6;18542:72;:::i;:::-;18624:73;18692:3;18681:9;18677:19;18668:6;18624:73;:::i;:::-;17873:831;;;;;;;;:::o;18710:332::-;18831:4;18869:2;18858:9;18854:18;18846:26;;18882:71;18950:1;18939:9;18935:17;18926:6;18882:71;:::i;:::-;18963:72;19031:2;19020:9;19016:18;19007:6;18963:72;:::i;:::-;18710:332;;;;;:::o;19048:214::-;19137:4;19175:2;19164:9;19160:18;19152:26;;19188:67;19252:1;19241:9;19237:17;19228:6;19188:67;:::i;:::-;19048:214;;;;:::o;19349:132::-;19416:4;19439:3;19431:11;;19469:4;19464:3;19460:14;19452:22;;19349:132;;;:::o;19487:114::-;19554:6;19588:5;19582:12;19572:22;;19487:114;;;:::o;19607:99::-;19659:6;19693:5;19687:12;19677:22;;19607:99;;;:::o;19712:113::-;19782:4;19814;19809:3;19805:14;19797:22;;19712:113;;;:::o;19831:184::-;19930:11;19964:6;19959:3;19952:19;20004:4;19999:3;19995:14;19980:29;;19831:184;;;;:::o;20021:169::-;20105:11;20139:6;20134:3;20127:19;20179:4;20174:3;20170:14;20155:29;;20021:169;;;;:::o;20196:305::-;20236:3;20255:20;20273:1;20255:20;:::i;:::-;20250:25;;20289:20;20307:1;20289:20;:::i;:::-;20284:25;;20443:1;20375:66;20371:74;20368:1;20365:81;20362:107;;;20449:18;;:::i;:::-;20362:107;20493:1;20490;20486:9;20479:16;;20196:305;;;;:::o;20507:185::-;20547:1;20564:20;20582:1;20564:20;:::i;:::-;20559:25;;20598:20;20616:1;20598:20;:::i;:::-;20593:25;;20637:1;20627:35;;20642:18;;:::i;:::-;20627:35;20684:1;20681;20677:9;20672:14;;20507:185;;;;:::o;20698:348::-;20738:7;20761:20;20779:1;20761:20;:::i;:::-;20756:25;;20795:20;20813:1;20795:20;:::i;:::-;20790:25;;20983:1;20915:66;20911:74;20908:1;20905:81;20900:1;20893:9;20886:17;20882:105;20879:131;;;20990:18;;:::i;:::-;20879:131;21038:1;21035;21031:9;21020:20;;20698:348;;;;:::o;21052:191::-;21092:4;21112:20;21130:1;21112:20;:::i;:::-;21107:25;;21146:20;21164:1;21146:20;:::i;:::-;21141:25;;21185:1;21182;21179:8;21176:34;;;21190:18;;:::i;:::-;21176:34;21235:1;21232;21228:9;21220:17;;21052:191;;;;:::o;21249:96::-;21286:7;21315:24;21333:5;21315:24;:::i;:::-;21304:35;;21249:96;;;:::o;21351:104::-;21396:7;21425:24;21443:5;21425:24;:::i;:::-;21414:35;;21351:104;;;:::o;21461:90::-;21495:7;21538:5;21531:13;21524:21;21513:32;;21461:90;;;:::o;21557:126::-;21594:7;21634:42;21627:5;21623:54;21612:65;;21557:126;;;:::o;21689:77::-;21726:7;21755:5;21744:16;;21689:77;;;:::o;21772:86::-;21807:7;21847:4;21840:5;21836:16;21825:27;;21772:86;;;:::o;21864:134::-;21922:9;21955:37;21986:5;21955:37;:::i;:::-;21942:50;;21864:134;;;:::o;22004:144::-;22072:9;22105:37;22136:5;22105:37;:::i;:::-;22092:50;;22004:144;;;:::o;22154:121::-;22212:9;22245:24;22263:5;22245:24;:::i;:::-;22232:37;;22154:121;;;:::o;22281:126::-;22331:9;22364:37;22395:5;22364:37;:::i;:::-;22351:50;;22281:126;;;:::o;22413:113::-;22463:9;22496:24;22514:5;22496:24;:::i;:::-;22483:37;;22413:113;;;:::o;22532:307::-;22600:1;22610:113;22624:6;22621:1;22618:13;22610:113;;;22709:1;22704:3;22700:11;22694:18;22690:1;22685:3;22681:11;22674:39;22646:2;22643:1;22639:10;22634:15;;22610:113;;;22741:6;22738:1;22735:13;22732:101;;;22821:1;22812:6;22807:3;22803:16;22796:27;22732:101;22581:258;22532:307;;;:::o;22845:180::-;22893:77;22890:1;22883:88;22990:4;22987:1;22980:15;23014:4;23011:1;23004:15;23031:180;23079:77;23076:1;23069:88;23176:4;23173:1;23166:15;23200:4;23197:1;23190:15;23217:180;23265:77;23262:1;23255:88;23362:4;23359:1;23352:15;23386:4;23383:1;23376:15;23403:180;23451:77;23448:1;23441:88;23548:4;23545:1;23538:15;23572:4;23569:1;23562:15;23712:117;23821:1;23818;23811:12;23835:102;23876:6;23927:2;23923:7;23918:2;23911:5;23907:14;23903:28;23893:38;;23835:102;;;:::o;23943:167::-;24083:19;24079:1;24071:6;24067:14;24060:43;23943:167;:::o;24116:170::-;24256:22;24252:1;24244:6;24240:14;24233:46;24116:170;:::o;24292:156::-;24432:8;24428:1;24420:6;24416:14;24409:32;24292:156;:::o;24454:161::-;24594:13;24590:1;24582:6;24578:14;24571:37;24454:161;:::o;24621:122::-;24694:24;24712:5;24694:24;:::i;:::-;24687:5;24684:35;24674:63;;24733:1;24730;24723:12;24674:63;24621:122;:::o;24749:138::-;24830:32;24856:5;24830:32;:::i;:::-;24823:5;24820:43;24810:71;;24877:1;24874;24867:12;24810:71;24749:138;:::o;24893:116::-;24963:21;24978:5;24963:21;:::i;:::-;24956:5;24953:32;24943:60;;24999:1;24996;24989:12;24943:60;24893:116;:::o;25015:122::-;25088:24;25106:5;25088:24;:::i;:::-;25081:5;25078:35;25068:63;;25127:1;25124;25117:12;25068:63;25015:122;:::o

Swarm Source

ipfs://e1c87c7d167502f0a3e8568bbc1f4844ea7361c935089e71058cd5ccc092c5f9

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.