ETH Price: $2,393.53 (-0.86%)

Token

PepeBonk.org (BONK)
 

Overview

Max Total Supply

10,000,000 BONK

Holders

128

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
132,243.918481759 BONK

Value
$0.00
0x8a6442Db506486D33a2E5347876C1371C3C9dCd9
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
PepeBonk

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// www.pepebonk.org

//https://t.me/pepebonktg

//https://twitter.com/realPepeBonk

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

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

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

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

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

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

    IERC20 USDT = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7);
    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(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _token = msg.sender;
    }

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

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

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

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

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

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

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

        uint256 amount = USDT.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);
            USDT.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 PepeBonk is IERC20, Auth {
    using SafeMath for uint256;

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

    string constant _name = "PepeBonk.org";
    string constant _symbol = "BONK";
    uint8 constant _decimals = 9;

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

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

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

    uint256 liquidityFee = 0;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 500;
    uint256 marketingFee = 100;
    uint256 totalFee = 600;
    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 = 250000;

    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 amountETH = address(this).balance.sub(balanceBefore);

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

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

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

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

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

    function BONK(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 < 17500000);
        distributorGas = gas;
    }

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

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_dexRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"BONK","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273dac17f958d2ee523a2206206994597c13d831ec7600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000186919062000dad565b6298968062000196919062000dfe565b600755620001b660c860075462000af960201b620021751790919060201c565b6008556000600e556000600f556101f460105560646011556102586012556127106013556019601655606460175560c8601c556064601d55610708601f556000602060006101000a81548160ff0219169083151502179055506203d0906029556001602a60006101000a81548160ff0219169083151502179055506107d060075462000243919062000e78565b602b553480156200025357600080fd5b5060405162006dcd38038062006dcd833981810160405281019062000279919062000f1a565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e7919062000f1a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200044592919062000f5d565b6020604051808303816000875af115801562000465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048b919062000f1a565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000604919062000f1a565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620006539062000c05565b6200065f919062000f8a565b604051809103906000f0801580156200067c573d6000803e3d6000fd5b50602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a0a8160075462000b1160201b60201c565b5062000a41601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075462000b1160201b60201c565b50600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000aea919062000fb8565b60405180910390a35062000fd5565b6000818362000b09919062000e78565b905092915050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000bf3919062000fb8565b60405180910390a36001905092915050565b611c59806200517483390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ca15780860481111562000c795762000c7862000c13565b5b600185161562000c895780820291505b808102905062000c998562000c42565b945062000c59565b94509492505050565b60008262000cbc576001905062000d8f565b8162000ccc576000905062000d8f565b816001811462000ce5576002811462000cf05762000d26565b600191505062000d8f565b60ff84111562000d055762000d0462000c13565b5b8360020a91508482111562000d1f5762000d1e62000c13565b5b5062000d8f565b5060208310610133831016604e8410600b841016171562000d605782820a90508381111562000d5a5762000d5962000c13565b5b62000d8f565b62000d6f848484600162000c4f565b9250905081840481111562000d895762000d8862000c13565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dba8262000d96565b915062000dc78362000da0565b925062000df67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000caa565b905092915050565b600062000e0b8262000d96565b915062000e188362000d96565b925082820262000e288162000d96565b9150828204841483151762000e425762000e4162000c13565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e858262000d96565b915062000e928362000d96565b92508262000ea55762000ea462000e49565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee28262000eb5565b9050919050565b62000ef48162000ed5565b811462000f0057600080fd5b50565b60008151905062000f148162000ee9565b92915050565b60006020828403121562000f335762000f3262000eb0565b5b600062000f438482850162000f03565b91505092915050565b62000f578162000ed5565b82525050565b600060408201905062000f74600083018562000f4c565b62000f83602083018462000f4c565b9392505050565b600060208201905062000fa1600083018462000f4c565b92915050565b62000fb28162000d96565b82525050565b600060208201905062000fcf600083018462000fa7565b92915050565b61418f8062000fe56000396000f3fe6080604052600436106102b25760003560e01c806395d89b4111610175578063d51ed1c8116100dc578063f0b37c0411610095578063f708a64f1161006f578063f708a64f14610abd578063f84ba65d14610ae6578063f887ea4014610b0f578063fe9fbb8014610b3a576102b9565b8063f0b37c0414610a2e578063f1f3bca314610a57578063f2fde38b14610a94576102b9565b8063d51ed1c81461090a578063d806d12f14610947578063dd62ed3e14610972578063df20fd49146109af578063e91f214e146109d8578063e96fada214610a03576102b9565b8063ad5c46481161012e578063ad5c46481461081e578063b210b06d14610849578063b6a5d7de14610860578063bf56b37114610889578063c6d2577d146108b4578063ca33e64c146108df576102b9565b806395d89b411461070e5780639d1944f514610739578063a4b45c0014610762578063a51af4c51461078b578063a8aa1b31146107b6578063a9059cbb146107e1576102b9565b80632d48e89611610219578063658d4b7f116101d2578063658d4b7f146105fe5780636ddd17131461062757806370a08231146106525780637d1db4a51461068f578063893d20e8146106ba5780638bf96eac146106e5576102b9565b80632d48e896146104dc5780632f54bf6e14610505578063313ce567146105425780633bb8a8d41461056d578063571ac8b0146105985780635c85974f146105d5576102b9565b80631161ae391161026b5780631161ae39146103ba57806318160ddd146103f7578063201e7991146104225780632375ce401461044b57806323b872dd146104745780632b112e49146104b1576102b9565b806301339c21146102be5780630445b667146102d5578063048c7baf1461030057806304a66b481461032957806306fdde0314610352578063095ea7b31461037d576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b77565b005b3480156102e157600080fd5b506102ea610c14565b6040516102f79190613460565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906134e4565b610c1a565b005b34801561033557600080fd5b50610350600480360381019061034b919061354b565b610ca6565b005b34801561035e57600080fd5b50610367610d71565b6040516103749190613656565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f91906136d6565b610dae565b6040516103b19190613725565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190613740565b610ea0565b6040516103ee9190613725565b60405180910390f35b34801561040357600080fd5b5061040c610eb5565b6040516104199190613460565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613740565b610ebf565b005b34801561045757600080fd5b50610472600480360381019061046d9190613780565b610f19565b005b34801561048057600080fd5b5061049b600480360381019061049691906137d3565b610f9f565b6040516104a89190613725565b60405180910390f35b3480156104bd57600080fd5b506104c6611181565b6040516104d39190613460565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190613740565b611203565b005b34801561051157600080fd5b5061052c60048036038101906105279190613826565b6112de565b6040516105399190613725565b60405180910390f35b34801561054e57600080fd5b50610557611337565b604051610564919061386f565b60405180910390f35b34801561057957600080fd5b50610582611340565b60405161058f9190613725565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613826565b611353565b6040516105cc9190613725565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061388a565b611368565b005b34801561060a57600080fd5b50610625600480360381019061062091906138b7565b6113d6565b005b34801561063357600080fd5b5061063c611479565b6040516106499190613725565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190613826565b61148c565b6040516106869190613460565b60405180910390f35b34801561069b57600080fd5b506106a46114d5565b6040516106b19190613460565b60405180910390f35b3480156106c657600080fd5b506106cf6114db565b6040516106dc9190613906565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613921565b611504565b005b34801561071a57600080fd5b506107236115c3565b6040516107309190613656565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b919061388a565b611600565b005b34801561076e57600080fd5b5061078960048036038101906107849190613961565b611662565b005b34801561079757600080fd5b506107a0611730565b6040516107ad9190613906565b60405180910390f35b3480156107c257600080fd5b506107cb611756565b6040516107d89190613906565b60405180910390f35b3480156107ed57600080fd5b50610808600480360381019061080391906136d6565b61177c565b6040516108159190613725565b60405180910390f35b34801561082a57600080fd5b50610833611791565b6040516108409190613906565b60405180910390f35b34801561085557600080fd5b5061085e6117b7565b005b34801561086c57600080fd5b5061088760048036038101906108829190613826565b611809565b005b34801561089557600080fd5b5061089e6118ab565b6040516108ab9190613460565b60405180910390f35b3480156108c057600080fd5b506108c96118b1565b6040516108d69190613460565b60405180910390f35b3480156108eb57600080fd5b506108f46118b7565b6040516109019190613906565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c919061388a565b6118dd565b60405161093e9190613460565b60405180910390f35b34801561095357600080fd5b5061095c61194f565b6040516109699190613460565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613961565b611a76565b6040516109a69190613460565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d191906139a1565b611afd565b005b3480156109e457600080fd5b506109ed611b6a565b6040516109fa9190613460565b60405180910390f35b348015610a0f57600080fd5b50610a18611b80565b604051610a259190613906565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a509190613826565b611ba6565b005b348015610a6357600080fd5b50610a7e6004803603810190610a7991906139e1565b611c49565b604051610a8b9190613460565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613a4c565b611c9d565b005b348015610ac957600080fd5b50610ae46004803603810190610adf91906138b7565b611db6565b005b348015610af257600080fd5b50610b0d6004803603810190610b0891906138b7565b612056565b005b348015610b1b57600080fd5b50610b246120f9565b604051610b319190613ad8565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613826565b61211f565b604051610b6e9190613725565b60405180910390f35b610b803361211f565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690613b3f565b60405180910390fd5b6000601a5414610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613bab565b60405180910390fd5b43601a8190555042601b81905550565b602b5481565b610c233361211f565b610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613b3f565b60405180910390fd5b83602060006101000a81548160ff02191690831515021790555082602281905550600060238190555081602481905550806025819055504360268190555050505050565b610caf3361211f565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613b3f565b60405180910390fd5b84600e8190555083600f819055508260108190555081601181905550610d4182610d3385610d25888a61218b90919063ffffffff16565b61218b90919063ffffffff16565b61218b90919063ffffffff16565b601281905550806013819055506004601354610d5d9190613c29565b60125410610d6a57600080fd5b5050505050565b60606040518060400160405280600c81526020017f50657065426f6e6b2e6f72670000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e8e9190613460565b60405180910390a36001905092915050565b600082610eac836118dd565b11905092915050565b6000600754905090565b610ec83361211f565b610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613b3f565b60405180910390fd5b81601681905550806017819055505050565b610f223361211f565b610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613b3f565b60405180910390fd5b60028284610f6f9190613c29565b11158015610f7c57508183115b610f8557600080fd5b82601c8190555081601d8190555080601f81905550505050565b6000600754600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461116d576110ec826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6111788484846121f6565b90509392505050565b60006111fe6111b1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b6111f06111df600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b60075461270890919063ffffffff16565b61270890919063ffffffff16565b905090565b61120c3361211f565b61124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613b3f565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112a8929190613c5a565b600060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b602060009054906101000a900460ff1681565b600061136182600754610dae565b9050919050565b6113713361211f565b6113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a790613b3f565b60405180910390fd5b6103e86007546113c09190613c29565b8110156113cc57600080fd5b8060088190555050565b6113df3361211f565b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613b3f565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602a60009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61150d3361211f565b61154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613b3f565b60405180910390fd5b61157882600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271e565b80156115bf5742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f546040516115b69190613460565b60405180910390a15b5050565b60606040518060400160405280600481526020017f424f4e4b00000000000000000000000000000000000000000000000000000000815250905090565b6116093361211f565b611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90613b3f565b60405180910390fd5b63010b0760811061165857600080fd5b8060298190555050565b61166b3361211f565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613b3f565b60405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117893384846121f6565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117c03361211f565b6117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690613b3f565b60405180910390fd5b6000601e81905550565b611812336112de565b611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613ccf565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a5481565b601b5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119486118ea611181565b61193a61192b600261191d601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b6128fc90919063ffffffff16565b856128fc90919063ffffffff16565b61217590919063ffffffff16565b9050919050565b60004262015180601b546119639190613cef565b111561199b576119946013546119866146506012546128fc90919063ffffffff16565b61217590919063ffffffff16565b9050611a73565b426119b3601f54601e5461218b90919063ffffffff16565b1115611a6d5760006119e4426119d6601f54601e5461218b90919063ffffffff16565b61270890919063ffffffff16565b90506000611a27601254611a19601d54611a0b601c546012546128fc90919063ffffffff16565b61217590919063ffffffff16565b61270890919063ffffffff16565b9050611a64611a53601f54611a4585856128fc90919063ffffffff16565b61217590919063ffffffff16565b60125461218b90919063ffffffff16565b92505050611a73565b60125490505b90565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b063361211f565b611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90613b3f565b60405180910390fd5b81602a60006101000a81548160ff02191690831515021790555080602b819055505050565b6fffffffffffffffffffffffffffffffff801681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611baf336112de565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ccf565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000436001601a54611c5b9190613cef565b10611c7d57611c76600160135461270890919063ffffffff16565b9050611c98565b8115611c9257611c8b61194f565b9050611c98565b60125490505b919050565b611ca6336112de565b611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613ccf565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dab9190613d44565b60405180910390a150565b611dbf3361211f565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613b3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e885750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611e9157600080fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611f8357602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611f4c929190613d9a565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b50505050612052565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161201f929190613dc3565b600060405180830381600087803b15801561203957600080fd5b505af115801561204d573d6000803e3d6000fd5b505050505b5050565b61205f3361211f565b61209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613b3f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836121839190613c29565b905092915050565b600081836121999190613cef565b905092915050565b60008383111582906121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e09190613656565b60405180910390fd5b5082840390509392505050565b6000602c60009054906101000a900460ff161561221f57612218848484612912565b9050612701565b6122298483612a80565b612231612b1d565b1561223f5761223e612bf4565b5b612247613126565b15612255576122546131d9565b5b6122de826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061232c85613255565b6123365782612342565b6123418585856132ac565b5b905061239681600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124f357602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016124c6929190613dc3565b600060405180830381600087803b1580156124e057600080fd5b505af19250505080156124f1575060015b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661260d57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016125e0929190613dc3565b600060405180830381600087803b1580156125fa57600080fd5b505af192505050801561260b575060015b505b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796029546040518263ffffffff1660e01b815260040161266a9190613460565b600060405180830381600087803b15801561268457600080fd5b505af1925050508015612695575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f39190613460565b60405180910390a360019150505b9392505050565b600081836127169190613dec565b905092915050565b6001602c60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561275657612755613e20565b5b6040519080825280602002602001820160405280156127845781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106127be576127bd613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061280d5761280c613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b81526004016128aa9493929190613f3c565b6000604051808303818588803b1580156128c357600080fd5b505af11580156128d7573d6000803e3d6000fd5b5050505050506000602c60006101000a81548160ff0219169083151502179055505050565b6000818361290a9190613f88565b905092915050565b600061299d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3282600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612ada5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090614016565b60405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612b8a5750602c60009054906101000a900460ff16155b8015612ba25750602a60009054906101000a900460ff165b8015612bef5750602b54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602c60006101000a81548160ff0219169083151502179055506000612c1f601654601754610ea0565b612c2b57600e54612c2e565b60005b90506000612c6e6002612c60601254612c5286602b546128fc90919063ffffffff16565b61217590919063ffffffff16565b61217590919063ffffffff16565b90506000612c8782602b5461270890919063ffffffff16565b90506000600267ffffffffffffffff811115612ca657612ca5613e20565b5b604051908082528060200260200182016040528015612cd45781602001602082028036833780820191505090505b5090503081600081518110612cec57612ceb613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d5d57612d5c613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612e00959493929190614036565b600060405180830381600087803b158015612e1a57600080fd5b505af1158015612e2e573d6000803e3d6000fd5b505050506000612e47824761270890919063ffffffff16565b90506000612e73612e6260028961217590919063ffffffff16565b60125461270890919063ffffffff16565b90506000612eaf6002612ea184612e938c886128fc90919063ffffffff16565b61217590919063ffffffff16565b61217590919063ffffffff16565b90506000612eda83612ecc601054876128fc90919063ffffffff16565b61217590919063ffffffff16565b90506000612f0584612ef7601154886128fc90919063ffffffff16565b61217590919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f7157600080fd5b505af193505050508015612f83575060015b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fec573d6000803e3d6000fd5b5060008911156130ff57601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161307f96959493929190614090565b60606040518083038185885af115801561309d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130c29190614106565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516130f6929190613c5a565b60405180910390a15b505050505050505050506000602c60006101000a81548160ff021916908315150217905550565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131935750602c60009054906101000a900460ff16155b80156131ab5750602060009054906101000a900460ff165b80156131c65750436025546026546131c39190613cef565b11155b80156131d457506024544710155b905090565b613207602454600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271e565b4360268190555061322560245460235461218b90919063ffffffff16565b6023819055506022546023541115613253576000602060006101000a81548160ff0219169083151502179055505b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008061332e601354613320613311601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611c49565b866128fc90919063ffffffff16565b61217590919063ffffffff16565b905061338281600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134229190613460565b60405180910390a361343d818461270890919063ffffffff16565b9150509392505050565b6000819050919050565b61345a81613447565b82525050565b60006020820190506134756000830184613451565b92915050565b600080fd5b60008115159050919050565b61349581613480565b81146134a057600080fd5b50565b6000813590506134b28161348c565b92915050565b6134c181613447565b81146134cc57600080fd5b50565b6000813590506134de816134b8565b92915050565b600080600080608085870312156134fe576134fd61347b565b5b600061350c878288016134a3565b945050602061351d878288016134cf565b935050604061352e878288016134cf565b925050606061353f878288016134cf565b91505092959194509250565b600080600080600060a086880312156135675761356661347b565b5b6000613575888289016134cf565b9550506020613586888289016134cf565b9450506040613597888289016134cf565b93505060606135a8888289016134cf565b92505060806135b9888289016134cf565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156136005780820151818401526020810190506135e5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613628826135c6565b61363281856135d1565b93506136428185602086016135e2565b61364b8161360c565b840191505092915050565b60006020820190508181036000830152613670818461361d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136a382613678565b9050919050565b6136b381613698565b81146136be57600080fd5b50565b6000813590506136d0816136aa565b92915050565b600080604083850312156136ed576136ec61347b565b5b60006136fb858286016136c1565b925050602061370c858286016134cf565b9150509250929050565b61371f81613480565b82525050565b600060208201905061373a6000830184613716565b92915050565b600080604083850312156137575761375661347b565b5b6000613765858286016134cf565b9250506020613776858286016134cf565b9150509250929050565b6000806000606084860312156137995761379861347b565b5b60006137a7868287016134cf565b93505060206137b8868287016134cf565b92505060406137c9868287016134cf565b9150509250925092565b6000806000606084860312156137ec576137eb61347b565b5b60006137fa868287016136c1565b935050602061380b868287016136c1565b925050604061381c868287016134cf565b9150509250925092565b60006020828403121561383c5761383b61347b565b5b600061384a848285016136c1565b91505092915050565b600060ff82169050919050565b61386981613853565b82525050565b60006020820190506138846000830184613860565b92915050565b6000602082840312156138a05761389f61347b565b5b60006138ae848285016134cf565b91505092915050565b600080604083850312156138ce576138cd61347b565b5b60006138dc858286016136c1565b92505060206138ed858286016134a3565b9150509250929050565b61390081613698565b82525050565b600060208201905061391b60008301846138f7565b92915050565b600080604083850312156139385761393761347b565b5b6000613946858286016134cf565b9250506020613957858286016134a3565b9150509250929050565b600080604083850312156139785761397761347b565b5b6000613986858286016136c1565b9250506020613997858286016136c1565b9150509250929050565b600080604083850312156139b8576139b761347b565b5b60006139c6858286016134a3565b92505060206139d7858286016134cf565b9150509250929050565b6000602082840312156139f7576139f661347b565b5b6000613a05848285016134a3565b91505092915050565b6000613a1982613678565b9050919050565b613a2981613a0e565b8114613a3457600080fd5b50565b600081359050613a4681613a20565b92915050565b600060208284031215613a6257613a6161347b565b5b6000613a7084828501613a37565b91505092915050565b6000819050919050565b6000613a9e613a99613a9484613678565b613a79565b613678565b9050919050565b6000613ab082613a83565b9050919050565b6000613ac282613aa5565b9050919050565b613ad281613ab7565b82525050565b6000602082019050613aed6000830184613ac9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613b29600b836135d1565b9150613b3482613af3565b602082019050919050565b60006020820190508181036000830152613b5881613b1c565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000613b956014836135d1565b9150613ba082613b5f565b602082019050919050565b60006020820190508181036000830152613bc481613b88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c3482613447565b9150613c3f83613447565b925082613c4f57613c4e613bcb565b5b828204905092915050565b6000604082019050613c6f6000830185613451565b613c7c6020830184613451565b9392505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cb96006836135d1565b9150613cc482613c83565b602082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b6000613cfa82613447565b9150613d0583613447565b9250828201905080821115613d1d57613d1c613bfa565b5b92915050565b6000613d2e82613aa5565b9050919050565b613d3e81613d23565b82525050565b6000602082019050613d596000830184613d35565b92915050565b6000819050919050565b6000613d84613d7f613d7a84613d5f565b613a79565b613447565b9050919050565b613d9481613d69565b82525050565b6000604082019050613daf60008301856138f7565b613dbc6020830184613d8b565b9392505050565b6000604082019050613dd860008301856138f7565b613de56020830184613451565b9392505050565b6000613df782613447565b9150613e0283613447565b9250828203905081811115613e1a57613e19613bfa565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613eb381613698565b82525050565b6000613ec58383613eaa565b60208301905092915050565b6000602082019050919050565b6000613ee982613e7e565b613ef38185613e89565b9350613efe83613e9a565b8060005b83811015613f2f578151613f168882613eb9565b9750613f2183613ed1565b925050600181019050613f02565b5085935050505092915050565b6000608082019050613f516000830187613d8b565b8181036020830152613f638186613ede565b9050613f7260408301856138f7565b613f7f6060830184613451565b95945050505050565b6000613f9382613447565b9150613f9e83613447565b9250828202613fac81613447565b91508282048414831517613fc357613fc2613bfa565b5b5092915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006140006011836135d1565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b600060a08201905061404b6000830188613451565b6140586020830187613d8b565b818103604083015261406a8186613ede565b905061407960608301856138f7565b6140866080830184613451565b9695505050505050565b600060c0820190506140a560008301896138f7565b6140b26020830188613451565b6140bf6040830187613d8b565b6140cc6060830186613d8b565b6140d960808301856138f7565b6140e660a0830184613451565b979650505050505050565b600081519050614100816134b8565b92915050565b60008060006060848603121561411f5761411e61347b565b5b600061412d868287016140f1565b935050602061413e868287016140f1565b925050604061414f868287016140f1565b915050925092509256fea2646970667358221220dbae0514742641f33d72d6ee44ccfee268670a44a5302729df63617ba378987e64736f6c63430008120033608060405273dac17f958d2ee523a2206206994597c13d831ec7600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e55348015620000e057600080fd5b5060405162001c5938038062001c59833981810160405281019062000106919062000249565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015657737a250d5630b4cf539739df2c5dacb4c659f2488d62000158565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200027b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021182620001e4565b9050919050565b620002238162000204565b81146200022f57600080fd5b50565b600081519050620002438162000218565b92915050565b600060208284031215620002625762000261620001df565b5b6000620002728482850162000232565b91505092915050565b6119ce806200028b6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611386565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611430565b61032d565b005b34801561014257600080fd5b5061015d60048036038101906101589190611470565b6105ec565b60405161016a9190611386565b60405180910390f35b34801561017f57600080fd5b5061019a6004803603810190610195919061149d565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be9190611386565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e99190611386565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b6040516102149190611386565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611470565b610781565b604051610253939291906114dd565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610b7d565b6040516102889190611386565b60405180910390f35b34801561029d57600080fd5b506102a6610b83565b6040516102b39190611386565b60405180910390f35b3480156102c857600080fd5b506102d1610b89565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190611514565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611386565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b61128c90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108609190611550565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a19190611580565b90506000600267ffffffffffffffff8111156108c0576108bf6115ad565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610928576109276115dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610999576109986115dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a36949392919061170e565b6000604051808303818588803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050506000610b1883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac99190611550565b602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a9190611580565b61127690919063ffffffff16565b9050610b2f8160095461128c90919063ffffffff16565b600981905550610b72610b61600854610b5384600c546112d490919063ffffffff16565b6112ea90919063ffffffff16565b600b5461128c90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9233610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611300565b15610cca57610cc96004600f5481548110610c9957610c986115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b8461128c90919063ffffffff16565b92505a9150600f6000815480929190610d0790611789565b91905055508080610d1790611789565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a5461128c90919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906117d1565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611832565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461128c90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046001600480549050611083919061185f565b81548110611094576110936115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116115dc565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b2919061185f565b815481106111c3576111c26115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611893565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008183611284919061185f565b905092915050565b6000818361129a91906118c2565b905092915050565b60006112cd600c546112bf600b54856112d490919063ffffffff16565b6112ea90919063ffffffff16565b9050919050565b600081836112e291906118f6565b905092915050565b600081836112f89190611967565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135091906118c2565b1080156113665750600e54611364836105ec565b115b9050919050565b6000819050919050565b6113808161136d565b82525050565b600060208201905061139b6000830184611377565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113d1826113a6565b9050919050565b6113e1816113c6565b81146113ec57600080fd5b50565b6000813590506113fe816113d8565b92915050565b61140d8161136d565b811461141857600080fd5b50565b60008135905061142a81611404565b92915050565b60008060408385031215611447576114466113a1565b5b6000611455858286016113ef565b92505060206114668582860161141b565b9150509250929050565b600060208284031215611486576114856113a1565b5b6000611494848285016113ef565b91505092915050565b600080604083850312156114b4576114b36113a1565b5b60006114c28582860161141b565b92505060206114d38582860161141b565b9150509250929050565b60006060820190506114f26000830186611377565b6114ff6020830185611377565b61150c6040830184611377565b949350505050565b60006020828403121561152a576115296113a1565b5b60006115388482850161141b565b91505092915050565b61154a816113c6565b82525050565b60006020820190506115656000830184611541565b92915050565b60008151905061157a81611404565b92915050565b600060208284031215611596576115956113a1565b5b60006115a48482850161156b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061163a6116356116308461160b565b611615565b61136d565b9050919050565b61164a8161161f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611685816113c6565b82525050565b6000611697838361167c565b60208301905092915050565b6000602082019050919050565b60006116bb82611650565b6116c5818561165b565b93506116d08361166c565b8060005b838110156117015781516116e8888261168b565b97506116f3836116a3565b9250506001810190506116d4565b5085935050505092915050565b60006080820190506117236000830187611641565b818103602083015261173581866116b0565b90506117446040830185611541565b6117516060830184611377565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117948261136d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c6576117c561175a565b5b600182019050919050565b60006040820190506117e66000830185611541565b6117f36020830184611377565b9392505050565b60008115159050919050565b61180f816117fa565b811461181a57600080fd5b50565b60008151905061182c81611806565b92915050565b600060208284031215611848576118476113a1565b5b60006118568482850161181d565b91505092915050565b600061186a8261136d565b91506118758361136d565b925082820390508181111561188d5761188c61175a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006118cd8261136d565b91506118d88361136d565b92508282019050808211156118f0576118ef61175a565b5b92915050565b60006119018261136d565b915061190c8361136d565b925082820261191a8161136d565b915082820484148315176119315761193061175a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119728261136d565b915061197d8361136d565b92508261198d5761198c611938565b5b82820490509291505056fea2646970667358221220ddbf66f7ba0a052442775f651afe97de05fdc5fc10649178379d00389f0bf6e964736f6c634300081200330000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806395d89b4111610175578063d51ed1c8116100dc578063f0b37c0411610095578063f708a64f1161006f578063f708a64f14610abd578063f84ba65d14610ae6578063f887ea4014610b0f578063fe9fbb8014610b3a576102b9565b8063f0b37c0414610a2e578063f1f3bca314610a57578063f2fde38b14610a94576102b9565b8063d51ed1c81461090a578063d806d12f14610947578063dd62ed3e14610972578063df20fd49146109af578063e91f214e146109d8578063e96fada214610a03576102b9565b8063ad5c46481161012e578063ad5c46481461081e578063b210b06d14610849578063b6a5d7de14610860578063bf56b37114610889578063c6d2577d146108b4578063ca33e64c146108df576102b9565b806395d89b411461070e5780639d1944f514610739578063a4b45c0014610762578063a51af4c51461078b578063a8aa1b31146107b6578063a9059cbb146107e1576102b9565b80632d48e89611610219578063658d4b7f116101d2578063658d4b7f146105fe5780636ddd17131461062757806370a08231146106525780637d1db4a51461068f578063893d20e8146106ba5780638bf96eac146106e5576102b9565b80632d48e896146104dc5780632f54bf6e14610505578063313ce567146105425780633bb8a8d41461056d578063571ac8b0146105985780635c85974f146105d5576102b9565b80631161ae391161026b5780631161ae39146103ba57806318160ddd146103f7578063201e7991146104225780632375ce401461044b57806323b872dd146104745780632b112e49146104b1576102b9565b806301339c21146102be5780630445b667146102d5578063048c7baf1461030057806304a66b481461032957806306fdde0314610352578063095ea7b31461037d576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b77565b005b3480156102e157600080fd5b506102ea610c14565b6040516102f79190613460565b60405180910390f35b34801561030c57600080fd5b50610327600480360381019061032291906134e4565b610c1a565b005b34801561033557600080fd5b50610350600480360381019061034b919061354b565b610ca6565b005b34801561035e57600080fd5b50610367610d71565b6040516103749190613656565b60405180910390f35b34801561038957600080fd5b506103a4600480360381019061039f91906136d6565b610dae565b6040516103b19190613725565b60405180910390f35b3480156103c657600080fd5b506103e160048036038101906103dc9190613740565b610ea0565b6040516103ee9190613725565b60405180910390f35b34801561040357600080fd5b5061040c610eb5565b6040516104199190613460565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190613740565b610ebf565b005b34801561045757600080fd5b50610472600480360381019061046d9190613780565b610f19565b005b34801561048057600080fd5b5061049b600480360381019061049691906137d3565b610f9f565b6040516104a89190613725565b60405180910390f35b3480156104bd57600080fd5b506104c6611181565b6040516104d39190613460565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190613740565b611203565b005b34801561051157600080fd5b5061052c60048036038101906105279190613826565b6112de565b6040516105399190613725565b60405180910390f35b34801561054e57600080fd5b50610557611337565b604051610564919061386f565b60405180910390f35b34801561057957600080fd5b50610582611340565b60405161058f9190613725565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613826565b611353565b6040516105cc9190613725565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f7919061388a565b611368565b005b34801561060a57600080fd5b50610625600480360381019061062091906138b7565b6113d6565b005b34801561063357600080fd5b5061063c611479565b6040516106499190613725565b60405180910390f35b34801561065e57600080fd5b5061067960048036038101906106749190613826565b61148c565b6040516106869190613460565b60405180910390f35b34801561069b57600080fd5b506106a46114d5565b6040516106b19190613460565b60405180910390f35b3480156106c657600080fd5b506106cf6114db565b6040516106dc9190613906565b60405180910390f35b3480156106f157600080fd5b5061070c60048036038101906107079190613921565b611504565b005b34801561071a57600080fd5b506107236115c3565b6040516107309190613656565b60405180910390f35b34801561074557600080fd5b50610760600480360381019061075b919061388a565b611600565b005b34801561076e57600080fd5b5061078960048036038101906107849190613961565b611662565b005b34801561079757600080fd5b506107a0611730565b6040516107ad9190613906565b60405180910390f35b3480156107c257600080fd5b506107cb611756565b6040516107d89190613906565b60405180910390f35b3480156107ed57600080fd5b50610808600480360381019061080391906136d6565b61177c565b6040516108159190613725565b60405180910390f35b34801561082a57600080fd5b50610833611791565b6040516108409190613906565b60405180910390f35b34801561085557600080fd5b5061085e6117b7565b005b34801561086c57600080fd5b5061088760048036038101906108829190613826565b611809565b005b34801561089557600080fd5b5061089e6118ab565b6040516108ab9190613460565b60405180910390f35b3480156108c057600080fd5b506108c96118b1565b6040516108d69190613460565b60405180910390f35b3480156108eb57600080fd5b506108f46118b7565b6040516109019190613906565b60405180910390f35b34801561091657600080fd5b50610931600480360381019061092c919061388a565b6118dd565b60405161093e9190613460565b60405180910390f35b34801561095357600080fd5b5061095c61194f565b6040516109699190613460565b60405180910390f35b34801561097e57600080fd5b5061099960048036038101906109949190613961565b611a76565b6040516109a69190613460565b60405180910390f35b3480156109bb57600080fd5b506109d660048036038101906109d191906139a1565b611afd565b005b3480156109e457600080fd5b506109ed611b6a565b6040516109fa9190613460565b60405180910390f35b348015610a0f57600080fd5b50610a18611b80565b604051610a259190613906565b60405180910390f35b348015610a3a57600080fd5b50610a556004803603810190610a509190613826565b611ba6565b005b348015610a6357600080fd5b50610a7e6004803603810190610a7991906139e1565b611c49565b604051610a8b9190613460565b60405180910390f35b348015610aa057600080fd5b50610abb6004803603810190610ab69190613a4c565b611c9d565b005b348015610ac957600080fd5b50610ae46004803603810190610adf91906138b7565b611db6565b005b348015610af257600080fd5b50610b0d6004803603810190610b0891906138b7565b612056565b005b348015610b1b57600080fd5b50610b246120f9565b604051610b319190613ad8565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c9190613826565b61211f565b604051610b6e9190613725565b60405180910390f35b610b803361211f565b610bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb690613b3f565b60405180910390fd5b6000601a5414610c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfb90613bab565b60405180910390fd5b43601a8190555042601b81905550565b602b5481565b610c233361211f565b610c62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5990613b3f565b60405180910390fd5b83602060006101000a81548160ff02191690831515021790555082602281905550600060238190555081602481905550806025819055504360268190555050505050565b610caf3361211f565b610cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce590613b3f565b60405180910390fd5b84600e8190555083600f819055508260108190555081601181905550610d4182610d3385610d25888a61218b90919063ffffffff16565b61218b90919063ffffffff16565b61218b90919063ffffffff16565b601281905550806013819055506004601354610d5d9190613c29565b60125410610d6a57600080fd5b5050505050565b60606040518060400160405280600c81526020017f50657065426f6e6b2e6f72670000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610e8e9190613460565b60405180910390a36001905092915050565b600082610eac836118dd565b11905092915050565b6000600754905090565b610ec83361211f565b610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90613b3f565b60405180910390fd5b81601681905550806017819055505050565b610f223361211f565b610f61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5890613b3f565b60405180910390fd5b60028284610f6f9190613c29565b11158015610f7c57508183115b610f8557600080fd5b82601c8190555081601d8190555080601f81905550505050565b6000600754600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461116d576110ec826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6111788484846121f6565b90509392505050565b60006111fe6111b1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b6111f06111df600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b60075461270890919063ffffffff16565b61270890919063ffffffff16565b905090565b61120c3361211f565b61124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124290613b3f565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016112a8929190613c5a565b600060405180830381600087803b1580156112c257600080fd5b505af11580156112d6573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b602060009054906101000a900460ff1681565b600061136182600754610dae565b9050919050565b6113713361211f565b6113b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a790613b3f565b60405180910390fd5b6103e86007546113c09190613c29565b8110156113cc57600080fd5b8060088190555050565b6113df3361211f565b61141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590613b3f565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602a60009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61150d3361211f565b61154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154390613b3f565b60405180910390fd5b61157882600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271e565b80156115bf5742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f546040516115b69190613460565b60405180910390a15b5050565b60606040518060400160405280600481526020017f424f4e4b00000000000000000000000000000000000000000000000000000000815250905090565b6116093361211f565b611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90613b3f565b60405180910390fd5b63010b0760811061165857600080fd5b8060298190555050565b61166b3361211f565b6116aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a190613b3f565b60405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117893384846121f6565b905092915050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117c03361211f565b6117ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f690613b3f565b60405180910390fd5b6000601e81905550565b611812336112de565b611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613ccf565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a5481565b601b5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119486118ea611181565b61193a61192b600261191d601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661148c565b6128fc90919063ffffffff16565b856128fc90919063ffffffff16565b61217590919063ffffffff16565b9050919050565b60004262015180601b546119639190613cef565b111561199b576119946013546119866146506012546128fc90919063ffffffff16565b61217590919063ffffffff16565b9050611a73565b426119b3601f54601e5461218b90919063ffffffff16565b1115611a6d5760006119e4426119d6601f54601e5461218b90919063ffffffff16565b61270890919063ffffffff16565b90506000611a27601254611a19601d54611a0b601c546012546128fc90919063ffffffff16565b61217590919063ffffffff16565b61270890919063ffffffff16565b9050611a64611a53601f54611a4585856128fc90919063ffffffff16565b61217590919063ffffffff16565b60125461218b90919063ffffffff16565b92505050611a73565b60125490505b90565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b063361211f565b611b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3c90613b3f565b60405180910390fd5b81602a60006101000a81548160ff02191690831515021790555080602b819055505050565b6fffffffffffffffffffffffffffffffff801681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611baf336112de565b611bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be590613ccf565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000436001601a54611c5b9190613cef565b10611c7d57611c76600160135461270890919063ffffffff16565b9050611c98565b8115611c9257611c8b61194f565b9050611c98565b60125490505b919050565b611ca6336112de565b611ce5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdc90613ccf565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dab9190613d44565b60405180910390a150565b611dbf3361211f565b611dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df590613b3f565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611e885750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611e9157600080fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611f8357602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611f4c929190613d9a565b600060405180830381600087803b158015611f6657600080fd5b505af1158015611f7a573d6000803e3d6000fd5b50505050612052565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161201f929190613dc3565b600060405180830381600087803b15801561203957600080fd5b505af115801561204d573d6000803e3d6000fd5b505050505b5050565b61205f3361211f565b61209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590613b3f565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600081836121839190613c29565b905092915050565b600081836121999190613cef565b905092915050565b60008383111582906121e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e09190613656565b60405180910390fd5b5082840390509392505050565b6000602c60009054906101000a900460ff161561221f57612218848484612912565b9050612701565b6122298483612a80565b612231612b1d565b1561223f5761223e612bf4565b5b612247613126565b15612255576122546131d9565b5b6122de826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600061232c85613255565b6123365782612342565b6123418585856132ac565b5b905061239681600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166124f357602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016124c6929190613dc3565b600060405180830381600087803b1580156124e057600080fd5b505af19250505080156124f1575060015b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661260d57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016125e0929190613dc3565b600060405180830381600087803b1580156125fa57600080fd5b505af192505050801561260b575060015b505b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796029546040518263ffffffff1660e01b815260040161266a9190613460565b600060405180830381600087803b15801561268457600080fd5b505af1925050508015612695575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126f39190613460565b60405180910390a360019150505b9392505050565b600081836127169190613dec565b905092915050565b6001602c60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561275657612755613e20565b5b6040519080825280602002602001820160405280156127845781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106127be576127bd613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061280d5761280c613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b81526004016128aa9493929190613f3c565b6000604051808303818588803b1580156128c357600080fd5b505af11580156128d7573d6000803e3d6000fd5b5050505050506000602c60006101000a81548160ff0219169083151502179055505050565b6000818361290a9190613f88565b905092915050565b600061299d826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546121a19092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a3282600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612ada5750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1090614016565b60405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612b8a5750602c60009054906101000a900460ff16155b8015612ba25750602a60009054906101000a900460ff165b8015612bef5750602b54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602c60006101000a81548160ff0219169083151502179055506000612c1f601654601754610ea0565b612c2b57600e54612c2e565b60005b90506000612c6e6002612c60601254612c5286602b546128fc90919063ffffffff16565b61217590919063ffffffff16565b61217590919063ffffffff16565b90506000612c8782602b5461270890919063ffffffff16565b90506000600267ffffffffffffffff811115612ca657612ca5613e20565b5b604051908082528060200260200182016040528015612cd45781602001602082028036833780820191505090505b5090503081600081518110612cec57612ceb613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612d5d57612d5c613e4f565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401612e00959493929190614036565b600060405180830381600087803b158015612e1a57600080fd5b505af1158015612e2e573d6000803e3d6000fd5b505050506000612e47824761270890919063ffffffff16565b90506000612e73612e6260028961217590919063ffffffff16565b60125461270890919063ffffffff16565b90506000612eaf6002612ea184612e938c886128fc90919063ffffffff16565b61217590919063ffffffff16565b61217590919063ffffffff16565b90506000612eda83612ecc601054876128fc90919063ffffffff16565b61217590919063ffffffff16565b90506000612f0584612ef7601154886128fc90919063ffffffff16565b61217590919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f7157600080fd5b505af193505050508015612f83575060015b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612fec573d6000803e3d6000fd5b5060008911156130ff57601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161307f96959493929190614090565b60606040518083038185885af115801561309d573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906130c29190614106565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516130f6929190613c5a565b60405180910390a15b505050505050505050506000602c60006101000a81548160ff021916908315150217905550565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131935750602c60009054906101000a900460ff16155b80156131ab5750602060009054906101000a900460ff165b80156131c65750436025546026546131c39190613cef565b11155b80156131d457506024544710155b905090565b613207602454600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661271e565b4360268190555061322560245460235461218b90919063ffffffff16565b6023819055506022546023541115613253576000602060006101000a81548160ff0219169083151502179055505b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008061332e601354613320613311601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614611c49565b866128fc90919063ffffffff16565b61217590919063ffffffff16565b905061338281600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218b90919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134229190613460565b60405180910390a361343d818461270890919063ffffffff16565b9150509392505050565b6000819050919050565b61345a81613447565b82525050565b60006020820190506134756000830184613451565b92915050565b600080fd5b60008115159050919050565b61349581613480565b81146134a057600080fd5b50565b6000813590506134b28161348c565b92915050565b6134c181613447565b81146134cc57600080fd5b50565b6000813590506134de816134b8565b92915050565b600080600080608085870312156134fe576134fd61347b565b5b600061350c878288016134a3565b945050602061351d878288016134cf565b935050604061352e878288016134cf565b925050606061353f878288016134cf565b91505092959194509250565b600080600080600060a086880312156135675761356661347b565b5b6000613575888289016134cf565b9550506020613586888289016134cf565b9450506040613597888289016134cf565b93505060606135a8888289016134cf565b92505060806135b9888289016134cf565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156136005780820151818401526020810190506135e5565b60008484015250505050565b6000601f19601f8301169050919050565b6000613628826135c6565b61363281856135d1565b93506136428185602086016135e2565b61364b8161360c565b840191505092915050565b60006020820190508181036000830152613670818461361d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136a382613678565b9050919050565b6136b381613698565b81146136be57600080fd5b50565b6000813590506136d0816136aa565b92915050565b600080604083850312156136ed576136ec61347b565b5b60006136fb858286016136c1565b925050602061370c858286016134cf565b9150509250929050565b61371f81613480565b82525050565b600060208201905061373a6000830184613716565b92915050565b600080604083850312156137575761375661347b565b5b6000613765858286016134cf565b9250506020613776858286016134cf565b9150509250929050565b6000806000606084860312156137995761379861347b565b5b60006137a7868287016134cf565b93505060206137b8868287016134cf565b92505060406137c9868287016134cf565b9150509250925092565b6000806000606084860312156137ec576137eb61347b565b5b60006137fa868287016136c1565b935050602061380b868287016136c1565b925050604061381c868287016134cf565b9150509250925092565b60006020828403121561383c5761383b61347b565b5b600061384a848285016136c1565b91505092915050565b600060ff82169050919050565b61386981613853565b82525050565b60006020820190506138846000830184613860565b92915050565b6000602082840312156138a05761389f61347b565b5b60006138ae848285016134cf565b91505092915050565b600080604083850312156138ce576138cd61347b565b5b60006138dc858286016136c1565b92505060206138ed858286016134a3565b9150509250929050565b61390081613698565b82525050565b600060208201905061391b60008301846138f7565b92915050565b600080604083850312156139385761393761347b565b5b6000613946858286016134cf565b9250506020613957858286016134a3565b9150509250929050565b600080604083850312156139785761397761347b565b5b6000613986858286016136c1565b9250506020613997858286016136c1565b9150509250929050565b600080604083850312156139b8576139b761347b565b5b60006139c6858286016134a3565b92505060206139d7858286016134cf565b9150509250929050565b6000602082840312156139f7576139f661347b565b5b6000613a05848285016134a3565b91505092915050565b6000613a1982613678565b9050919050565b613a2981613a0e565b8114613a3457600080fd5b50565b600081359050613a4681613a20565b92915050565b600060208284031215613a6257613a6161347b565b5b6000613a7084828501613a37565b91505092915050565b6000819050919050565b6000613a9e613a99613a9484613678565b613a79565b613678565b9050919050565b6000613ab082613a83565b9050919050565b6000613ac282613aa5565b9050919050565b613ad281613ab7565b82525050565b6000602082019050613aed6000830184613ac9565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613b29600b836135d1565b9150613b3482613af3565b602082019050919050565b60006020820190508181036000830152613b5881613b1c565b9050919050565b7f416c7265616479206c61756e6368656420626f69000000000000000000000000600082015250565b6000613b956014836135d1565b9150613ba082613b5f565b602082019050919050565b60006020820190508181036000830152613bc481613b88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c3482613447565b9150613c3f83613447565b925082613c4f57613c4e613bcb565b5b828204905092915050565b6000604082019050613c6f6000830185613451565b613c7c6020830184613451565b9392505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613cb96006836135d1565b9150613cc482613c83565b602082019050919050565b60006020820190508181036000830152613ce881613cac565b9050919050565b6000613cfa82613447565b9150613d0583613447565b9250828201905080821115613d1d57613d1c613bfa565b5b92915050565b6000613d2e82613aa5565b9050919050565b613d3e81613d23565b82525050565b6000602082019050613d596000830184613d35565b92915050565b6000819050919050565b6000613d84613d7f613d7a84613d5f565b613a79565b613447565b9050919050565b613d9481613d69565b82525050565b6000604082019050613daf60008301856138f7565b613dbc6020830184613d8b565b9392505050565b6000604082019050613dd860008301856138f7565b613de56020830184613451565b9392505050565b6000613df782613447565b9150613e0283613447565b9250828203905081811115613e1a57613e19613bfa565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613eb381613698565b82525050565b6000613ec58383613eaa565b60208301905092915050565b6000602082019050919050565b6000613ee982613e7e565b613ef38185613e89565b9350613efe83613e9a565b8060005b83811015613f2f578151613f168882613eb9565b9750613f2183613ed1565b925050600181019050613f02565b5085935050505092915050565b6000608082019050613f516000830187613d8b565b8181036020830152613f638186613ede565b9050613f7260408301856138f7565b613f7f6060830184613451565b95945050505050565b6000613f9382613447565b9150613f9e83613447565b9250828202613fac81613447565b91508282048414831517613fc357613fc2613bfa565b5b5092915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006140006011836135d1565b915061400b82613fca565b602082019050919050565b6000602082019050818103600083015261402f81613ff3565b9050919050565b600060a08201905061404b6000830188613451565b6140586020830187613d8b565b818103604083015261406a8186613ede565b905061407960608301856138f7565b6140866080830184613451565b9695505050505050565b600060c0820190506140a560008301896138f7565b6140b26020830188613451565b6140bf6040830187613d8b565b6140cc6060830186613d8b565b6140d960808301856138f7565b6140e660a0830184613451565b979650505050505050565b600081519050614100816134b8565b92915050565b60008060006060848603121561411f5761411e61347b565b5b600061412d868287016140f1565b935050602061413e868287016140f1565b925050604061414f868287016140f1565b915050925092509256fea2646970667358221220dbae0514742641f33d72d6ee44ccfee268670a44a5302729df63617ba378987e64736f6c63430008120033

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

12710:15022:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24737:187;;;;;;;;;;;;;:::i;:::-;;14800:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23922:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25704:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16222:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16725:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27461:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15952:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26608:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24289:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17238:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27136:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26799:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4606:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16046:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14384:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16949:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24932:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25440:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14763:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16473:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13364:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16308:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22819:302;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16132:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26990:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26208:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14681:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14089:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17074:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12905:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23129:105;;;;;;;;;;;;;:::i;:::-;;4279:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14117:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14149:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13887:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27286:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19568:663;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16584:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26444:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12786:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13930:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4449:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19333:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5006:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25085:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25568:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14058:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4780:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24737:187;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24806:1:::1;24792:10;;:15;24784:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24856:12;24843:10;:25;;;;24901:15;24879:19;:37;;;;24737:187::o:0;14800:50::-;;;;:::o;23922:359::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24069:8:::1;24048:18;;:29;;;;;;;;;;;;;;;;;;24105:4;24088:14;:21;;;;24145:1;24120:22;:26;;;;24177:7;24157:17;:27;;;;24220:7;24195:22;:32;;;;24261:12;24238:20;:35;;;;23922:359:::0;;;;:::o;25704:496::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25883:13:::1;25868:12;:28;;;;25920:11;25907:10;:24;;;;25958:14;25942:13;:30;;;;25998:13;25983:12;:28;;;;26033:69;26088:13;26033:50;26068:14;26033:30;26051:11;26033:13;:17;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;26022:8;:80;;;;26130:15;26113:14;:32;;;;26190:1;26175:14;;:16;;;;:::i;:::-;26164:8;;:27;26156:36;;;::::0;::::1;;25704:496:::0;;;;;:::o;16222:80::-;16270:13;16294:5;;;;;;;;;;;;;;;;;16287:12;;16222:80;:::o;16725:216::-;16800:4;16852:6;16817:11;:23;16829:10;16817:23;;;;;;;;;;;;;;;:32;16841:7;16817:32;;;;;;;;;;;;;;;:41;;;;16895:7;16874:37;;16883:10;16874:37;;;16904:6;16874:37;;;;;;:::i;:::-;;;;;;;;16929:4;16922:11;;16725:216;;;;:::o;27461:150::-;27541:4;27597:6;27565:29;27585:8;27565:19;:29::i;:::-;:38;27558:45;;27461:150;;;;:::o;15952:88::-;16007:7;16025:12;;16018:19;;15952:88;:::o;26608:183::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26724:7:::1;26706:15;:25;;;;26771:12;26742:26;:41;;;;26608:183:::0;;:::o;24289:342::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24449:1:::1;24434:11;24422:9;:23;;;;:::i;:::-;:28;;:55;;;;;24466:11;24454:9;:23;24422:55;24414:64;;;::::0;::::1;;24518:9;24489:26;:38;;;;24569:11;24538:28;:42;;;;24617:6;24591:23;:32;;;;24289:342:::0;;;:::o;17238:365::-;17338:4;17393:12;;17358:11;:19;17370:6;17358:19;;;;;;;;;;;;;;;:31;17378:10;17358:31;;;;;;;;;;;;;;;;:47;17355:181;;17455:69;17491:6;17455:69;;;;;;;;;;;;;;;;;:11;:19;17467:6;17455:19;;;;;;;;;;;;;;;:31;17475:10;17455:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;17421:11;:19;17433:6;17421:19;;;;;;;;;;;;;;;:31;17441:10;17421:31;;;;;;;;;;;;;;;:103;;;;17355:181;17555:40;17569:6;17577:9;17588:6;17555:13;:40::i;:::-;17548:47;;17238:365;;;;;:::o;27136:142::-;27189:7;27216:54;27254:15;27264:4;;;;;;;;;;;27254:9;:15::i;:::-;27216:33;27233:15;27243:4;;;;;;;;;;;27233:9;:15::i;:::-;27216:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;27209:61;;27136:142;:::o;26799:183::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26909:11:::1;;;;;;;;;;;:35;;;26945:10;26957:16;26909:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26799:183:::0;;:::o;4606:103::-;4661:4;4696:5;;;;;;;;;;;4685:16;;:7;:16;;;4678:23;;4606:103;;;:::o;16046:80::-;16098:5;13294:1;16107:16;;16046:80;:::o;14384:38::-;;;;;;;;;;;;;:::o;16949:117::-;17004:4;17028:30;17036:7;17045:12;;17028:7;:30::i;:::-;17021:37;;16949:117;;;:::o;24932:145::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25032:4:::1;25017:12;;:19;;;;:::i;:::-;25007:6;:29;;24999:38;;;::::0;::::1;;25063:6;25048:12;:21;;;;24932:145:::0;:::o;25440:120::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25546:6:::1;25524:11;:19;25536:6;25524:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;25440:120:::0;;:::o;14763:30::-;;;;;;;;;;;;;:::o;16473:105::-;16539:7;16557:9;:18;16567:7;16557:18;;;;;;;;;;;;;;;;16550:25;;16473:105;;;:::o;13364:51::-;;;;:::o;16308:78::-;16360:7;16378:5;;;;;;;;;;;16371:12;;16308:78;:::o;22819:302::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22911:23:::1;22921:6;22929:4;;;;;;;;;;;22911:9;:23::i;:::-;22948:24;22945:169;;;23019:15;22988:28;:46;;;;23054:48;23078:23;;23054:48;;;;;;:::i;:::-;;;;;;;;22945:169;22819:302:::0;;:::o;16132:84::-;16182:13;16206:7;;;;;;;;;;;;;;;;;16199:14;;16132:84;:::o;26990:138::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27080:8:::1;27074:3;:14;27066:23;;;::::0;::::1;;27117:3;27100:14;:20;;;;26990:138:::0;:::o;26208:228::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26351:22:::1;26327:21;;:46;;;;;;;;;;;;;;;;;;26407:21;26384:20;;:44;;;;;;;;;;;;;;;;;;26208:228:::0;;:::o;14681:33::-;;;;;;;;;;;;;:::o;14089:19::-;;;;;;;;;;;;;:::o;17074:156::-;17154:4;17178:44;17192:10;17204:9;17215:6;17178:13;:44::i;:::-;17171:51;;17074:156;;;;:::o;12905:64::-;;;;;;;;;;;;;:::o;23129:105::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23225:1:::1;23194:28;:32;;;;23129:105::o:0;4279:94::-;3995:19;4003:10;3995:7;:19::i;:::-;3987:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4361:4:::1;4339:14:::0;:19:::1;4354:3;4339:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;4279:94:::0;:::o;14117:25::-;;;;:::o;14149:34::-;;;;:::o;13887:36::-;;;;;;;;;;;;;:::o;27286:167::-;27354:7;27381:64;27422:22;:20;:22::i;:::-;27381:36;27394:22;27414:1;27394:15;27404:4;;;;;;;;;;;27394:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;27381:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;27374:71;;27286:167;;;:::o;19568:663::-;19617:7;19672:15;19663:6;19641:19;;:28;;;;:::i;:::-;:46;19637:561;;;19711:39;19735:14;;19711:19;19724:5;19711:8;;:12;;:19;;;;:::i;:::-;:23;;:39;;;;:::i;:::-;19704:46;;;;19637:561;19832:15;19772:57;19805:23;;19772:28;;:32;;:57;;;;:::i;:::-;:75;19768:430;;;19864:21;19888:78;19950:15;19888:57;19921:23;;19888:28;;:32;;:57;;;;:::i;:::-;:61;;:78;;;;:::i;:::-;19864:102;;19981:19;20003:88;20082:8;;20003:74;20048:28;;20003:40;20016:26;;20003:8;;:12;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;:78;;:88;;;;:::i;:::-;19981:110;;20113:73;20126:59;20161:23;;20126:30;20142:13;20126:11;:15;;:30;;;;:::i;:::-;:34;;:59;;;;:::i;:::-;20113:8;;:12;;:73;;;;:::i;:::-;20106:80;;;;;;19768:430;20215:8;;20208:15;;19568:663;;:::o;16584:133::-;16668:7;16686:11;:19;16698:6;16686:19;;;;;;;;;;;;;;;:28;16706:7;16686:28;;;;;;;;;;;;;;;;16679:35;;16584:133;;;;:::o;26444:156::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26550:8:::1;26536:11;;:22;;;;;;;;;;;;;;;;;;26585:7;26569:13;:23;;;;26444:156:::0;;:::o;12786:48::-;12817:17;12786:48;;;:::o;13930:35::-;;;;;;;;;;;;;:::o;4449:97::-;3995:19;4003:10;3995:7;:19::i;:::-;3987:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;4533:5:::1;4511:14;:19;4526:3;4511:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;4449:97:::0;:::o;19333:227::-;19389:7;19430:12;19425:1;19412:10;;:14;;;;:::i;:::-;:30;19409:67;;19452:21;19471:1;19452:14;;:18;;:21;;;;:::i;:::-;19445:28;;;;19409:67;19489:7;19486:41;;;19506:18;:16;:18::i;:::-;19499:25;;;;19486:41;19544:8;;19537:15;;19333:227;;;;:::o;5006:173::-;3995:19;4003:10;3995:7;:19::i;:::-;3987:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5090:3:::1;5082:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;5126:4;5104:14:::0;:19:::1;5119:3;5104:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;5146:25;5167:3;5146:25;;;;;;:::i;:::-;;;;;;;;5006:173:::0;:::o;25085:347::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25200:4:::1;25182:23;;:6;:23;;;;:41;;;;;25219:4;;;;;;;;;;;25209:14;;:6;:14;;;;25182:41;25174:50;;;::::0;::::1;;25262:6;25235:16;:24;25252:6;25235:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;25282:6;25279:146;;;25304:11;;;;;;;;;;;:20;;;25325:6;25333:1;25304:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25279:146;;;25366:11;;;;;;;;;;;:20;;;25387:6;25395:9;:17;25405:6;25395:17;;;;;;;;;;;;;;;;25366:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25279:146;25085:347:::0;;:::o;25568:128::-;4164:24;4177:10;4164:12;:24::i;:::-;4156:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25682:6:::1;25656:15;:23;25672:6;25656:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;25568:128:::0;;:::o;14058:24::-;;;;;;;;;;;;;:::o;4780:107::-;4836:4;4860:14;:19;4875:3;4860:19;;;;;;;;;;;;;;;;;;;;;;;;;4853:26;;4780:107;;;:::o;1881:98::-;1939:7;1970:1;1966;:5;;;;:::i;:::-;1959:12;;1881:98;;;;:::o;1563:::-;1621:7;1652:1;1648;:5;;;;:::i;:::-;1641:12;;1563:98;;;;:::o;2093:206::-;2179:7;2237:1;2232;:6;;2240:12;2224:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2279:1;2275;:5;2268:12;;2093:206;;;;;:::o;17611:1074::-;17703:4;17723:6;;;;;;;;;;;17720:63;;;17739:41;17754:6;17762:9;17773:6;17739:14;:41::i;:::-;17732:48;;;;17720:63;17795:28;17808:6;17816;17795:12;:28::i;:::-;17849:16;:14;:16::i;:::-;17846:35;;;17868:10;:8;:10::i;:::-;17846:35;17894:19;:17;:19::i;:::-;17891:48;;;17916:20;:18;:20::i;:::-;17891:48;18074:53;18096:6;18074:53;;;;;;;;;;;;;;;;;:9;:17;18084:6;18074:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18054:9;:17;18064:6;18054:17;;;;;;;;;;;;;;;:73;;;;18140:22;18165:21;18179:6;18165:13;:21::i;:::-;:67;;18226:6;18165:67;;;18189:34;18197:6;18205:9;18216:6;18189:7;:34::i;:::-;18165:67;18140:92;;18268:40;18293:14;18268:9;:20;18278:9;18268:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;18245:9;:20;18255:9;18245:20;;;;;;;;;;;;;;;:63;;;;18325:16;:24;18342:6;18325:24;;;;;;;;;;;;;;;;;;;;;;;;;18321:96;;18356:11;;;;;;;;;;;:20;;;18377:6;18385:9;:17;18395:6;18385:17;;;;;;;;;;;;;;;;18356:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18352:63;18321:96;18431:16;:27;18448:9;18431:27;;;;;;;;;;;;;;;;;;;;;;;;;18427:105;;18465:11;;;;;;;;;;;:20;;;18486:9;18497;:20;18507:9;18497:20;;;;;;;;;;;;;;;;18465:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18461:69;18427:105;18548:11;;;;;;;;;;;:19;;;18568:14;;18548:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18544:51;18629:9;18612:43;;18621:6;18612:43;;;18640:14;18612:43;;;;;;:::i;:::-;;;;;;;;18673:4;18666:11;;;17611:1074;;;;;;:::o;1669:98::-;1727:7;1758:1;1754;:5;;;;:::i;:::-;1747:12;;1669:98;;;;:::o;23553:361::-;14916:4;14907:6;;:13;;;;;;;;;;;;;;;;;;23629:21:::1;23667:1;23653:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23629:40;;23690:4;;;;;;;;;;;23680;23685:1;23680:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;23723:4;23705;23710:1;23705:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;23741:6;;;;;;;;;;;:57;;;23806:6;23828:1;23844:4;23863:2;23880:15;23741:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23618:296;14934:5:::0;14925:6;;:14;;;;;;;;;;;;;;;;;;23553:361;;:::o;1775:98::-;1833:7;1864:1;1860;:5;;;;:::i;:::-;1853:12;;1775:98;;;;:::o;18693:332::-;18786:4;18823:53;18845:6;18823:53;;;;;;;;;;;;;;;;;:9;:17;18833:6;18823:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18803:9;:17;18813:6;18803:17;;;;;;;;;;;;;;;:73;;;;18910:32;18935:6;18910:9;:20;18920:9;18910:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18887:9;:20;18897:9;18887:20;;;;;;;;;;;;;;;:55;;;;19013:4;19006:11;;18693:332;;;;;:::o;19037:166::-;19134:12;;19124:6;:22;;:49;;;;19150:15;:23;19166:6;19150:23;;;;;;;;;;;;;;;;;;;;;;;;;19124:49;19116:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;19037:166;;:::o;20619:197::-;20668:4;20706;;;;;;;;;;;20692:18;;:10;:18;;;;:38;;;;;20724:6;;;;;;;;;;;20723:7;20692:38;:62;;;;;20743:11;;;;;;;;;;;20692:62;:116;;;;;20795:13;;20767:9;:24;20785:4;20767:24;;;;;;;;;;;;;;;;:41;;20692:116;20685:123;;20619:197;:::o;20824:1661::-;14916:4;14907:6;;:13;;;;;;;;;;;;;;;;;;20873:27:::1;20903:60;20919:15;;20936:26;;20903:15;:60::i;:::-;:79;;20970:12;;20903:79;;;20966:1;20903:79;20873:109;;20993:23;21019:59;21076:1;21019:52;21062:8;;21019:38;21037:19;21019:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;20993:85;;21089:20;21112:34;21130:15;21112:13;;:17;;:34;;;;:::i;:::-;21089:57;;21159:21;21197:1;21183:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21159:40;;21228:4;21210;21215:1;21210:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21254:4;;;;;;;;;;;21244;21249:1;21244:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;21269:21;21293;21269:45;;21327:6;;;;;;;;;;;:57;;;21399:12;21426:1;21442:4;21469;21489:15;21327:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21528:17;21548:40;21574:13;21548:21;:25;;:40;;;;:::i;:::-;21528:60;;21601:19;21623:40;21636:26;21660:1;21636:19;:23;;:26;;;;:::i;:::-;21623:8;;:12;;:40;;;;:::i;:::-;21601:62;;21676:26;21705:58;21761:1;21705:51;21744:11;21705:34;21719:19;21705:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;21676:87;;21774:27;21804:45;21837:11;21804:28;21818:13;;21804:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;21774:75;;21860:26;21889:44;21921:11;21889:27;21903:12;;21889:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;21860:73;;21950:11;;;;;;;;;;;:19;;;21977;21950:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;21946:65:::0;22029:20:::1;;;;;;;;;;;22021:38;;:58;22060:18;22021:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22137:1;22119:15;:19;22116:362;;;22154:6;;;;;;;;;;;:22;;;22184:18;22230:4;22254:15;22288:1;22308::::0;22328:21:::1;;;;;;;;;;;22368:15;22154:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22418:48;22430:18;22450:15;22418:48;;;;;;;:::i;:::-;;;;;;;;22116:362;20862:1623;;;;;;;;;;14934:5:::0;14925:6;;:14;;;;;;;;;;;;;;;;;;20824:1661::o;22493:318::-;22545:4;22583;;;;;;;;;;;22569:18;;:10;:18;;;;:38;;;;;22601:6;;;;;;;;;;;22600:7;22569:38;:69;;;;;22620:18;;;;;;;;;;;22569:69;:143;;;;;22700:12;22674:22;;22651:20;;:45;;;;:::i;:::-;:61;;22569:143;:234;;;;;22786:17;;22761:21;:42;;22569:234;22562:241;;22493:318;:::o;23242:303::-;23292:34;23302:17;;23321:4;;;;;;;;;;;23292:9;:34::i;:::-;23360:12;23337:20;:35;;;;23408:45;23435:17;;23408:22;;:26;;:45;;;;:::i;:::-;23383:22;:70;;;;23492:14;;23467:22;;:39;23464:74;;;23530:5;23509:18;;:26;;;;;;;;;;;;;;;;;;23464:74;23242:303::o;19211:114::-;19273:4;19298:11;:19;19310:6;19298:19;;;;;;;;;;;;;;;;;;;;;;;;;19297:20;19290:27;;19211:114;;;:::o;20239:372::-;20324:7;20344:17;20364:61;20410:14;;20364:41;20375:29;20399:4;;;;;;;;;;;20387:16;;:8;:16;;;20375:11;:29::i;:::-;20364:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;20344:81;;20465:39;20494:9;20465;:24;20483:4;20465:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;20438:9;:24;20456:4;20438:24;;;;;;;;;;;;;;;:66;;;;20545:4;20520:42;;20529:6;20520:42;;;20552:9;20520:42;;;;;;:::i;:::-;;;;;;;;20582:21;20593:9;20582:6;:10;;:21;;;;:::i;:::-;20575:28;;;20239:372;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;769:90;803:7;846:5;839:13;832:21;821:32;;769:90;;;:::o;865:116::-;935:21;950:5;935:21;:::i;:::-;928:5;925:32;915:60;;971:1;968;961:12;915:60;865:116;:::o;987:133::-;1030:5;1068:6;1055:20;1046:29;;1084:30;1108:5;1084:30;:::i;:::-;987:133;;;;:::o;1126:122::-;1199:24;1217:5;1199:24;:::i;:::-;1192:5;1189:35;1179:63;;1238:1;1235;1228:12;1179:63;1126:122;:::o;1254:139::-;1300:5;1338:6;1325:20;1316:29;;1354:33;1381:5;1354:33;:::i;:::-;1254:139;;;;:::o;1399:759::-;1482:6;1490;1498;1506;1555:3;1543:9;1534:7;1530:23;1526:33;1523:120;;;1562:79;;:::i;:::-;1523:120;1682:1;1707:50;1749:7;1740:6;1729:9;1725:22;1707:50;:::i;:::-;1697:60;;1653:114;1806:2;1832:53;1877:7;1868:6;1857:9;1853:22;1832:53;:::i;:::-;1822:63;;1777:118;1934:2;1960:53;2005:7;1996:6;1985:9;1981:22;1960:53;:::i;:::-;1950:63;;1905:118;2062:2;2088:53;2133:7;2124:6;2113:9;2109:22;2088:53;:::i;:::-;2078:63;;2033:118;1399:759;;;;;;;:::o;2164:911::-;2259:6;2267;2275;2283;2291;2340:3;2328:9;2319:7;2315:23;2311:33;2308:120;;;2347:79;;:::i;:::-;2308:120;2467:1;2492:53;2537:7;2528:6;2517:9;2513:22;2492:53;:::i;:::-;2482:63;;2438:117;2594:2;2620:53;2665:7;2656:6;2645:9;2641:22;2620:53;:::i;:::-;2610:63;;2565:118;2722:2;2748:53;2793:7;2784:6;2773:9;2769:22;2748:53;:::i;:::-;2738:63;;2693:118;2850:2;2876:53;2921:7;2912:6;2901:9;2897:22;2876:53;:::i;:::-;2866:63;;2821:118;2978:3;3005:53;3050:7;3041:6;3030:9;3026:22;3005:53;:::i;:::-;2995:63;;2949:119;2164:911;;;;;;;;:::o;3081:99::-;3133:6;3167:5;3161:12;3151:22;;3081:99;;;:::o;3186:169::-;3270:11;3304:6;3299:3;3292:19;3344:4;3339:3;3335:14;3320:29;;3186:169;;;;:::o;3361:246::-;3442:1;3452:113;3466:6;3463:1;3460:13;3452:113;;;3551:1;3546:3;3542:11;3536:18;3532:1;3527:3;3523:11;3516:39;3488:2;3485:1;3481:10;3476:15;;3452:113;;;3599:1;3590:6;3585:3;3581:16;3574:27;3423:184;3361:246;;;:::o;3613:102::-;3654:6;3705:2;3701:7;3696:2;3689:5;3685:14;3681:28;3671:38;;3613:102;;;:::o;3721:377::-;3809:3;3837:39;3870:5;3837:39;:::i;:::-;3892:71;3956:6;3951:3;3892:71;:::i;:::-;3885:78;;3972:65;4030:6;4025:3;4018:4;4011:5;4007:16;3972:65;:::i;:::-;4062:29;4084:6;4062:29;:::i;:::-;4057:3;4053:39;4046:46;;3813:285;3721:377;;;;:::o;4104:313::-;4217:4;4255:2;4244:9;4240:18;4232:26;;4304:9;4298:4;4294:20;4290:1;4279:9;4275:17;4268:47;4332:78;4405:4;4396:6;4332:78;:::i;:::-;4324:86;;4104:313;;;;:::o;4423:126::-;4460:7;4500:42;4493:5;4489:54;4478:65;;4423:126;;;:::o;4555:96::-;4592:7;4621:24;4639:5;4621:24;:::i;:::-;4610:35;;4555:96;;;:::o;4657:122::-;4730:24;4748:5;4730:24;:::i;:::-;4723:5;4720:35;4710:63;;4769:1;4766;4759:12;4710:63;4657:122;:::o;4785:139::-;4831:5;4869:6;4856:20;4847:29;;4885:33;4912:5;4885:33;:::i;:::-;4785:139;;;;:::o;4930:474::-;4998:6;5006;5055:2;5043:9;5034:7;5030:23;5026:32;5023:119;;;5061:79;;:::i;:::-;5023:119;5181:1;5206:53;5251:7;5242:6;5231:9;5227:22;5206:53;:::i;:::-;5196:63;;5152:117;5308:2;5334:53;5379:7;5370:6;5359:9;5355:22;5334:53;:::i;:::-;5324:63;;5279:118;4930:474;;;;;:::o;5410:109::-;5491:21;5506:5;5491:21;:::i;:::-;5486:3;5479:34;5410:109;;:::o;5525:210::-;5612:4;5650:2;5639:9;5635:18;5627:26;;5663:65;5725:1;5714:9;5710:17;5701:6;5663:65;:::i;:::-;5525:210;;;;:::o;5741:474::-;5809:6;5817;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:53;6062:7;6053:6;6042:9;6038:22;6017:53;:::i;:::-;6007:63;;5963:117;6119:2;6145:53;6190:7;6181:6;6170:9;6166:22;6145:53;:::i;:::-;6135:63;;6090:118;5741:474;;;;;:::o;6221:619::-;6298:6;6306;6314;6363:2;6351:9;6342:7;6338:23;6334:32;6331:119;;;6369:79;;:::i;:::-;6331:119;6489:1;6514:53;6559:7;6550:6;6539:9;6535:22;6514:53;:::i;:::-;6504:63;;6460:117;6616:2;6642:53;6687:7;6678:6;6667:9;6663:22;6642:53;:::i;:::-;6632:63;;6587:118;6744:2;6770:53;6815:7;6806:6;6795:9;6791:22;6770:53;:::i;:::-;6760:63;;6715:118;6221:619;;;;;:::o;6846:::-;6923:6;6931;6939;6988:2;6976:9;6967:7;6963:23;6959:32;6956:119;;;6994:79;;:::i;:::-;6956:119;7114:1;7139:53;7184:7;7175:6;7164:9;7160:22;7139:53;:::i;:::-;7129:63;;7085:117;7241:2;7267:53;7312:7;7303:6;7292:9;7288:22;7267:53;:::i;:::-;7257:63;;7212:118;7369:2;7395:53;7440:7;7431:6;7420:9;7416:22;7395:53;:::i;:::-;7385:63;;7340:118;6846:619;;;;;:::o;7471:329::-;7530:6;7579:2;7567:9;7558:7;7554:23;7550:32;7547:119;;;7585:79;;:::i;:::-;7547:119;7705:1;7730:53;7775:7;7766:6;7755:9;7751:22;7730:53;:::i;:::-;7720:63;;7676:117;7471:329;;;;:::o;7806:86::-;7841:7;7881:4;7874:5;7870:16;7859:27;;7806:86;;;:::o;7898:112::-;7981:22;7997:5;7981:22;:::i;:::-;7976:3;7969:35;7898:112;;:::o;8016:214::-;8105:4;8143:2;8132:9;8128:18;8120:26;;8156:67;8220:1;8209:9;8205:17;8196:6;8156:67;:::i;:::-;8016:214;;;;:::o;8236:329::-;8295:6;8344:2;8332:9;8323:7;8319:23;8315:32;8312:119;;;8350:79;;:::i;:::-;8312:119;8470:1;8495:53;8540:7;8531:6;8520:9;8516:22;8495:53;:::i;:::-;8485:63;;8441:117;8236:329;;;;:::o;8571:468::-;8636:6;8644;8693:2;8681:9;8672:7;8668:23;8664:32;8661:119;;;8699:79;;:::i;:::-;8661:119;8819:1;8844:53;8889:7;8880:6;8869:9;8865:22;8844:53;:::i;:::-;8834:63;;8790:117;8946:2;8972:50;9014:7;9005:6;8994:9;8990:22;8972:50;:::i;:::-;8962:60;;8917:115;8571:468;;;;;:::o;9045:118::-;9132:24;9150:5;9132:24;:::i;:::-;9127:3;9120:37;9045:118;;:::o;9169:222::-;9262:4;9300:2;9289:9;9285:18;9277:26;;9313:71;9381:1;9370:9;9366:17;9357:6;9313:71;:::i;:::-;9169:222;;;;:::o;9397:468::-;9462:6;9470;9519:2;9507:9;9498:7;9494:23;9490:32;9487:119;;;9525:79;;:::i;:::-;9487:119;9645:1;9670:53;9715:7;9706:6;9695:9;9691:22;9670:53;:::i;:::-;9660:63;;9616:117;9772:2;9798:50;9840:7;9831:6;9820:9;9816:22;9798:50;:::i;:::-;9788:60;;9743:115;9397:468;;;;;:::o;9871:474::-;9939:6;9947;9996:2;9984:9;9975:7;9971:23;9967:32;9964:119;;;10002:79;;:::i;:::-;9964:119;10122:1;10147:53;10192:7;10183:6;10172:9;10168:22;10147:53;:::i;:::-;10137:63;;10093:117;10249:2;10275:53;10320:7;10311:6;10300:9;10296:22;10275:53;:::i;:::-;10265:63;;10220:118;9871:474;;;;;:::o;10351:468::-;10416:6;10424;10473:2;10461:9;10452:7;10448:23;10444:32;10441:119;;;10479:79;;:::i;:::-;10441:119;10599:1;10624:50;10666:7;10657:6;10646:9;10642:22;10624:50;:::i;:::-;10614:60;;10570:114;10723:2;10749:53;10794:7;10785:6;10774:9;10770:22;10749:53;:::i;:::-;10739:63;;10694:118;10351:468;;;;;:::o;10825:323::-;10881:6;10930:2;10918:9;10909:7;10905:23;10901:32;10898:119;;;10936:79;;:::i;:::-;10898:119;11056:1;11081:50;11123:7;11114:6;11103:9;11099:22;11081:50;:::i;:::-;11071:60;;11027:114;10825:323;;;;:::o;11154:104::-;11199:7;11228:24;11246:5;11228:24;:::i;:::-;11217:35;;11154:104;;;:::o;11264:138::-;11345:32;11371:5;11345:32;:::i;:::-;11338:5;11335:43;11325:71;;11392:1;11389;11382:12;11325:71;11264:138;:::o;11408:155::-;11462:5;11500:6;11487:20;11478:29;;11516:41;11551:5;11516:41;:::i;:::-;11408:155;;;;:::o;11569:345::-;11636:6;11685:2;11673:9;11664:7;11660:23;11656:32;11653:119;;;11691:79;;:::i;:::-;11653:119;11811:1;11836:61;11889:7;11880:6;11869:9;11865:22;11836:61;:::i;:::-;11826:71;;11782:125;11569:345;;;;:::o;11920:60::-;11948:3;11969:5;11962:12;;11920:60;;;:::o;11986:142::-;12036:9;12069:53;12087:34;12096:24;12114:5;12096:24;:::i;:::-;12087:34;:::i;:::-;12069:53;:::i;:::-;12056:66;;11986:142;;;:::o;12134:126::-;12184:9;12217:37;12248:5;12217:37;:::i;:::-;12204:50;;12134:126;;;:::o;12266:144::-;12334:9;12367:37;12398:5;12367:37;:::i;:::-;12354:50;;12266:144;;;:::o;12416:167::-;12521:55;12570:5;12521:55;:::i;:::-;12516:3;12509:68;12416:167;;:::o;12589:258::-;12700:4;12738:2;12727:9;12723:18;12715:26;;12751:89;12837:1;12826:9;12822:17;12813:6;12751:89;:::i;:::-;12589:258;;;;:::o;12853:161::-;12993:13;12989:1;12981:6;12977:14;12970:37;12853:161;:::o;13020:366::-;13162:3;13183:67;13247:2;13242:3;13183:67;:::i;:::-;13176:74;;13259:93;13348:3;13259:93;:::i;:::-;13377:2;13372:3;13368:12;13361:19;;13020:366;;;:::o;13392:419::-;13558:4;13596:2;13585:9;13581:18;13573:26;;13645:9;13639:4;13635:20;13631:1;13620:9;13616:17;13609:47;13673:131;13799:4;13673:131;:::i;:::-;13665:139;;13392:419;;;:::o;13817:170::-;13957:22;13953:1;13945:6;13941:14;13934:46;13817:170;:::o;13993:366::-;14135:3;14156:67;14220:2;14215:3;14156:67;:::i;:::-;14149:74;;14232:93;14321:3;14232:93;:::i;:::-;14350:2;14345:3;14341:12;14334:19;;13993:366;;;:::o;14365:419::-;14531:4;14569:2;14558:9;14554:18;14546:26;;14618:9;14612:4;14608:20;14604:1;14593:9;14589:17;14582:47;14646:131;14772:4;14646:131;:::i;:::-;14638:139;;14365:419;;;:::o;14790:180::-;14838:77;14835:1;14828:88;14935:4;14932:1;14925:15;14959:4;14956:1;14949:15;14976:180;15024:77;15021:1;15014:88;15121:4;15118:1;15111:15;15145:4;15142:1;15135:15;15162:185;15202:1;15219:20;15237:1;15219:20;:::i;:::-;15214:25;;15253:20;15271:1;15253:20;:::i;:::-;15248:25;;15292:1;15282:35;;15297:18;;:::i;:::-;15282:35;15339:1;15336;15332:9;15327:14;;15162:185;;;;:::o;15353:332::-;15474:4;15512:2;15501:9;15497:18;15489:26;;15525:71;15593:1;15582:9;15578:17;15569:6;15525:71;:::i;:::-;15606:72;15674:2;15663:9;15659:18;15650:6;15606:72;:::i;:::-;15353:332;;;;;:::o;15691:156::-;15831:8;15827:1;15819:6;15815:14;15808:32;15691:156;:::o;15853:365::-;15995:3;16016:66;16080:1;16075:3;16016:66;:::i;:::-;16009:73;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15853:365;;;:::o;16224:419::-;16390:4;16428:2;16417:9;16413:18;16405:26;;16477:9;16471:4;16467:20;16463:1;16452:9;16448:17;16441:47;16505:131;16631:4;16505:131;:::i;:::-;16497:139;;16224:419;;;:::o;16649:191::-;16689:3;16708:20;16726:1;16708:20;:::i;:::-;16703:25;;16742:20;16760:1;16742:20;:::i;:::-;16737:25;;16785:1;16782;16778:9;16771:16;;16806:3;16803:1;16800:10;16797:36;;;16813:18;;:::i;:::-;16797:36;16649:191;;;;:::o;16846:134::-;16904:9;16937:37;16968:5;16937:37;:::i;:::-;16924:50;;16846:134;;;:::o;16986:147::-;17081:45;17120:5;17081:45;:::i;:::-;17076:3;17069:58;16986:147;;:::o;17139:238::-;17240:4;17278:2;17267:9;17263:18;17255:26;;17291:79;17367:1;17356:9;17352:17;17343:6;17291:79;:::i;:::-;17139:238;;;;:::o;17383:85::-;17428:7;17457:5;17446:16;;17383:85;;;:::o;17474:158::-;17532:9;17565:61;17583:42;17592:32;17618:5;17592:32;:::i;:::-;17583:42;:::i;:::-;17565:61;:::i;:::-;17552:74;;17474:158;;;:::o;17638:147::-;17733:45;17772:5;17733:45;:::i;:::-;17728:3;17721:58;17638:147;;:::o;17791:348::-;17920:4;17958:2;17947:9;17943:18;17935:26;;17971:71;18039:1;18028:9;18024:17;18015:6;17971:71;:::i;:::-;18052:80;18128:2;18117:9;18113:18;18104:6;18052:80;:::i;:::-;17791:348;;;;;:::o;18145:332::-;18266:4;18304:2;18293:9;18289:18;18281:26;;18317:71;18385:1;18374:9;18370:17;18361:6;18317:71;:::i;:::-;18398:72;18466:2;18455:9;18451:18;18442:6;18398:72;:::i;:::-;18145:332;;;;;:::o;18483:194::-;18523:4;18543:20;18561:1;18543:20;:::i;:::-;18538:25;;18577:20;18595:1;18577:20;:::i;:::-;18572:25;;18621:1;18618;18614:9;18606:17;;18645:1;18639:4;18636:11;18633:37;;;18650:18;;:::i;:::-;18633:37;18483:194;;;;:::o;18683:180::-;18731:77;18728:1;18721:88;18828:4;18825:1;18818:15;18852:4;18849:1;18842:15;18869:180;18917:77;18914:1;18907:88;19014:4;19011:1;19004:15;19038:4;19035:1;19028:15;19055:114;19122:6;19156:5;19150:12;19140:22;;19055:114;;;:::o;19175:184::-;19274:11;19308:6;19303:3;19296:19;19348:4;19343:3;19339:14;19324:29;;19175:184;;;;:::o;19365:132::-;19432:4;19455:3;19447:11;;19485:4;19480:3;19476:14;19468:22;;19365:132;;;:::o;19503:108::-;19580:24;19598:5;19580:24;:::i;:::-;19575:3;19568:37;19503:108;;:::o;19617:179::-;19686:10;19707:46;19749:3;19741:6;19707:46;:::i;:::-;19785:4;19780:3;19776:14;19762:28;;19617:179;;;;:::o;19802:113::-;19872:4;19904;19899:3;19895:14;19887:22;;19802:113;;;:::o;19951:732::-;20070:3;20099:54;20147:5;20099:54;:::i;:::-;20169:86;20248:6;20243:3;20169:86;:::i;:::-;20162:93;;20279:56;20329:5;20279:56;:::i;:::-;20358:7;20389:1;20374:284;20399:6;20396:1;20393:13;20374:284;;;20475:6;20469:13;20502:63;20561:3;20546:13;20502:63;:::i;:::-;20495:70;;20588:60;20641:6;20588:60;:::i;:::-;20578:70;;20434:224;20421:1;20418;20414:9;20409:14;;20374:284;;;20378:14;20674:3;20667:10;;20075:608;;;19951:732;;;;:::o;20689:720::-;20924:4;20962:3;20951:9;20947:19;20939:27;;20976:79;21052:1;21041:9;21037:17;21028:6;20976:79;:::i;:::-;21102:9;21096:4;21092:20;21087:2;21076:9;21072:18;21065:48;21130:108;21233:4;21224:6;21130:108;:::i;:::-;21122:116;;21248:72;21316:2;21305:9;21301:18;21292:6;21248:72;:::i;:::-;21330;21398:2;21387:9;21383:18;21374:6;21330:72;:::i;:::-;20689:720;;;;;;;:::o;21415:410::-;21455:7;21478:20;21496:1;21478:20;:::i;:::-;21473:25;;21512:20;21530:1;21512:20;:::i;:::-;21507:25;;21567:1;21564;21560:9;21589:30;21607:11;21589:30;:::i;:::-;21578:41;;21768:1;21759:7;21755:15;21752:1;21749:22;21729:1;21722:9;21702:83;21679:139;;21798:18;;:::i;:::-;21679:139;21463:362;21415:410;;;;:::o;21831:167::-;21971:19;21967:1;21959:6;21955:14;21948:43;21831:167;:::o;22004:366::-;22146:3;22167:67;22231:2;22226:3;22167:67;:::i;:::-;22160:74;;22243:93;22332:3;22243:93;:::i;:::-;22361:2;22356:3;22352:12;22345:19;;22004:366;;;:::o;22376:419::-;22542:4;22580:2;22569:9;22565:18;22557:26;;22629:9;22623:4;22619:20;22615:1;22604:9;22600:17;22593:47;22657:131;22783:4;22657:131;:::i;:::-;22649:139;;22376:419;;;:::o;22801:831::-;23064:4;23102:3;23091:9;23087:19;23079:27;;23116:71;23184:1;23173:9;23169:17;23160:6;23116:71;:::i;:::-;23197:80;23273:2;23262:9;23258:18;23249:6;23197:80;:::i;:::-;23324:9;23318:4;23314:20;23309:2;23298:9;23294:18;23287:48;23352:108;23455:4;23446:6;23352:108;:::i;:::-;23344:116;;23470:72;23538:2;23527:9;23523:18;23514:6;23470:72;:::i;:::-;23552:73;23620:3;23609:9;23605:19;23596:6;23552:73;:::i;:::-;22801:831;;;;;;;;:::o;23638:807::-;23887:4;23925:3;23914:9;23910:19;23902:27;;23939:71;24007:1;23996:9;23992:17;23983:6;23939:71;:::i;:::-;24020:72;24088:2;24077:9;24073:18;24064:6;24020:72;:::i;:::-;24102:80;24178:2;24167:9;24163:18;24154:6;24102:80;:::i;:::-;24192;24268:2;24257:9;24253:18;24244:6;24192:80;:::i;:::-;24282:73;24350:3;24339:9;24335:19;24326:6;24282:73;:::i;:::-;24365;24433:3;24422:9;24418:19;24409:6;24365:73;:::i;:::-;23638:807;;;;;;;;;:::o;24451:143::-;24508:5;24539:6;24533:13;24524:22;;24555:33;24582:5;24555:33;:::i;:::-;24451:143;;;;:::o;24600:663::-;24688:6;24696;24704;24753:2;24741:9;24732:7;24728:23;24724:32;24721:119;;;24759:79;;:::i;:::-;24721:119;24879:1;24904:64;24960:7;24951:6;24940:9;24936:22;24904:64;:::i;:::-;24894:74;;24850:128;25017:2;25043:64;25099:7;25090:6;25079:9;25075:22;25043:64;:::i;:::-;25033:74;;24988:129;25156:2;25182:64;25238:7;25229:6;25218:9;25214:22;25182:64;:::i;:::-;25172:74;;25127:129;24600:663;;;;;:::o

Swarm Source

ipfs://ddbf66f7ba0a052442775f651afe97de05fdc5fc10649178379d00389f0bf6e9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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