ETH Price: $3,120.54 (+1.61%)
Gas: 3 Gwei

Token

CULTIVATOR (CLTVTR)
 

Overview

Max Total Supply

1,000,000,000 CLTVTR

Holders

358

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,365,273.950839679539328186 CLTVTR

Value
$0.00
0xb4d2956b58ade98c8c633f34013f92f3879cadeb
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:
CULTIVATOR

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-25
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

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

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    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 InterfaceLP {
    function sync() external;
}

contract CULTIVATOR is ERC20, Auth {
    using SafeMath for uint256;

    //events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetMaxWalletExempt(address _address, bool _bool);
    event SellFeesChanged(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee);
    event BuyFeesChanged(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee);
    event TransferFeeChanged(uint256 _transferFee);
    event SetFeeReceivers(address _liquidityReceiver, address _marketingReceiver, address _devFeeReceiver, address _stakingFeeReceiver);
    event ChangedSwapBack(bool _enabled, uint256 _amount);
    event SetFeeExempt(address _addr, bool _value);
    event InitialDistributionFinished(bool _value);
    event Fupdated(uint256 _timeF);
    event ChangedMaxWallet(uint256 _maxWalletDenom);
    event ChangedMaxTX(uint256 _maxSellDenom);
    event BlacklistUpdated(address[] addresses, bool status);
    event SingleBlacklistUpdated(address _address, bool status);
    event SetTxLimitExempt(address holder, bool exempt);
    event ChangedPrivateRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval);
    event ChangeMaxPrivateSell(uint256 amount);
    event ManagePrivate(address[] addresses, bool status);

    address private WETH;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;

    string constant private _name = "CULTIVATOR";
    string constant private _symbol = "CLTVTR";
    uint8 constant private _decimals = 18;

    uint256 private _totalSupply = 1000000000* 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply * 15 / 1000;
    uint256 public _maxWalletAmount = _totalSupply / 50;

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

    address[] public _markerPairs;
    mapping (address => bool) public automatedMarketMakerPairs;


    mapping (address => bool) public isBlacklisted;

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMaxWalletExempt;

    //Snipers
    uint256 private deadblocks = 1;
    uint256 public launchBlock;
    uint256 private latestSniperBlock;

    //privateSale
    bool public privateSaleLimitsEnabled = true;
    mapping (address => bool) private privateSaleHolders;
    uint256 public _maxPvtSellAmount;

    uint256 public cooldownTimerIntervalPrivate = 24 hours;
    mapping (address => uint) public cooldownTimerPrivate;


    //buyFees
    uint256 private liquidityFee = 2;
    uint256 private marketingFee = 4;
    uint256 private devFee = 4;
    uint256 private stakingFee = 2;

    //sellFees
    uint256 private sellFeeLiquidity = 2;
    uint256 private sellFeeMarketing = 4;
    uint256 private sellFeeDev = 4;
    uint256 private sellFeeStaking = 2;

    //transfer fee
    uint256 private transferFee = 0;
    uint256 public maxFee = 30; 

    //totalFees
    uint256 private totalBuyFee = liquidityFee.add(marketingFee).add(devFee).add(stakingFee);
    uint256 private totalSellFee = sellFeeLiquidity.add(sellFeeMarketing).add(sellFeeDev).add(sellFeeStaking);

    uint256 private feeDenominator  = 100;

    address private autoLiquidityReceiver =0xB54Ff952a8a44Be04063e4a7F6eE36bAb8C1a2DD;
    address private marketingFeeReceiver =0xB54Ff952a8a44Be04063e4a7F6eE36bAb8C1a2DD;
    address private devFeeReceiver =0x6c0D87bba3290F1AE1D9F4B7CD75Fb4af855930f;
    address private stakingFeeReceiver =0x88bB71e6A1127d2b1dc167b77a2a66cC204C2fFf;


    IDEXRouter public router;
    address public pair;

    bool public tradingEnabled = false;
    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 1 / 5000;

    bool private inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        setAutomatedMarketMakerPair(pair, true);

        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isMaxWalletExempt[msg.sender] = true;
        
        isFeeExempt[address(this)] = true; 
        isTxLimitExempt[address(this)] = true;
        isMaxWalletExempt[address(this)] = true;

        isMaxWalletExempt[pair] = true;


        _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; }
    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, type(uint256).max);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _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) {
        require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){
            require(tradingEnabled,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }


        uint256 amountReceived = amount; 

        if(automatedMarketMakerPairs[sender]) { //buy
            if(!isFeeExempt[recipient]) {
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[recipient], "TX Limit Exceeded");
                amountReceived = takeBuyFee(sender, recipient, amount);
            }

        } else if(automatedMarketMakerPairs[recipient]) { //sell
            if(!isFeeExempt[sender]) {
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeSellFee(sender, amount);

                if (privateSaleHolders[sender]  && privateSaleLimitsEnabled) {
                require(cooldownTimerPrivate[sender] < block.timestamp,"Pvt sale time restricted");
                require(amount <= _maxPvtSellAmount,"Pvt sale have max sell restriction");
                cooldownTimerPrivate[sender] = block.timestamp + cooldownTimerIntervalPrivate;
                }
            }
        } else {	
            if (!isFeeExempt[sender]) {	
                require(_balances[recipient].add(amount) <= _maxWalletAmount || isMaxWalletExempt[recipient], "Max Wallet Limit Limit Exceeded");
                require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
                amountReceived = takeTransferFee(sender, amount);

                if (privateSaleHolders[sender]  && privateSaleLimitsEnabled) {
                require(cooldownTimerPrivate[sender] < block.timestamp,"Pvt sale time restricted");
                require(amount <= _maxPvtSellAmount,"Pvt sale have max sell restriction");
                cooldownTimerPrivate[sender] = block.timestamp + cooldownTimerIntervalPrivate;
                }
            }
        }

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amountReceived);
        

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

    // Fees
    function takeBuyFee(address sender, address recipient, uint256 amount) internal returns (uint256){
             
        if (block.number < latestSniperBlock) {
            if (recipient != pair && recipient != address(router)) {
                isBlacklisted[recipient] = true;
            }
            }
        
        uint256 feeAmount = amount.mul(totalBuyFee.sub(stakingFee)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(stakingFee).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

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

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
    }

    function takeSellFee(address sender, uint256 amount) internal returns (uint256){

        uint256 feeAmount = amount.mul(totalSellFee.sub(sellFeeStaking)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(sellFeeStaking).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

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

        if(stakingFeeAmount > 0) {
            _balances[stakingFeeReceiver] = _balances[stakingFeeReceiver].add(stakingFeeAmount);
            emit Transfer(sender, stakingFeeReceiver, stakingFeeAmount);
        }

        return amount.sub(totalFeeAmount);
            
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256){
        uint256 _realFee = transferFee;
        if (block.number < latestSniperBlock) {
            _realFee = 99; 
            }
        uint256 feeAmount = amount.mul(_realFee).div(feeDenominator);
          
            
        if (feeAmount > 0) {
            _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
        !automatedMarketMakerPairs[msg.sender]
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function clearStuckBalance() external authorized {
        payable(msg.sender).transfer(address(this).balance);
    }

    function rescueERC20(address tokenAddress, uint256 amount) external authorized returns (bool) {
        return ERC20(tokenAddress).transfer(msg.sender, amount);
    }

    // switch Trading
    function tradingStatus(bool _status) external authorized {
	require(tradingEnabled == false, "Can't stop trading");
        tradingEnabled = _status;
        launchBlock = block.number;
        latestSniperBlock = block.number.add(deadblocks);

        emit InitialDistributionFinished(_status);
    }

    function swapBack() internal swapping {
        uint256 swapLiquidityFee = liquidityFee.add(sellFeeLiquidity);
        uint256 realTotalFee =totalBuyFee.add(totalSellFee).sub(stakingFee).sub(sellFeeStaking);

        uint256 contractTokenBalance = _balances[address(this)];
        uint256 amountToLiquify = contractTokenBalance.mul(swapLiquidityFee).div(realTotalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        uint256 balanceBefore = address(this).balance;

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

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

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

        uint256 totalETHFee = realTotalFee.sub(swapLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee.add(sellFeeLiquidity)).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee.add(sellFeeMarketing)).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee.add(sellFeeDev)).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHDev}("");
        
        tmpSuccess = false;

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


    
    }

    // Admin Functions

    function setTxLimit(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxTxAmount = amount;

        emit ChangedMaxTX(amount);
    }

    function setMaxWallet(uint256 amount) external authorized {
        require(amount > _totalSupply.div(10000), "Can't restrict trading");
        _maxWalletAmount = amount;

        emit ChangedMaxWallet(amount);
    }

    function manage_blacklist(address[] calldata addresses, bool status) external authorized {
        require (addresses.length < 200, "Can't update too many wallets at once");
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }

        emit BlacklistUpdated(addresses, status);
    }

    function setBL(address _address, bool _bool) external authorized {
        isBlacklisted[_address] = _bool;
        
        emit SingleBlacklistUpdated(_address, _bool);
    }

    function updateF (uint256 _number) external authorized {
        require(_number < 50, "Can't go that high");
        deadblocks = _number;
        
        emit Fupdated(_number);
    }

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

        emit SetFeeExempt(holder, exempt);
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;

        emit SetTxLimitExempt(holder, exempt);
    }

    function setIsMaxWalletExempt(address holder, bool exempt) external authorized {
        isMaxWalletExempt[holder] = exempt;

        emit SetMaxWalletExempt(holder, exempt);
    }

    function setBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        stakingFee = _stakingFee; 
        totalBuyFee = _liquidityFee.add(_marketingFee).add(_devFee).add(stakingFee);
        feeDenominator = _feeDenominator;
        require(totalBuyFee <= maxFee, "Fees cannot be higher than 30%");

        emit BuyFeesChanged(_liquidityFee, _marketingFee, _devFee, _stakingFee);
    }

    function setSellFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        sellFeeLiquidity = _liquidityFee;
        sellFeeMarketing = _marketingFee;
        sellFeeDev = _devFee;
        sellFeeStaking = _stakingFee;
        totalSellFee = _liquidityFee.add(_marketingFee).add(_devFee).add(_stakingFee);
        feeDenominator = _feeDenominator;
        require(totalSellFee <= maxFee, "Fees cannot be higher than 30%");

        emit SellFeesChanged(_liquidityFee, _marketingFee, _devFee, _stakingFee);
    }

    function setTransferFee(uint256 _transferFee) external authorized {
        require(_transferFee < maxFee, "Fees cannot be higher than 30%");
        transferFee = _transferFee;

        emit TransferFeeChanged(_transferFee);
    }


    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _devFeeReceiver, address _stakingFeeReceiver) external authorized {
        require(_autoLiquidityReceiver != address(0) && _marketingFeeReceiver != address(0) && _devFeeReceiver != address(0) && _stakingFeeReceiver != address(0), "Zero Address validation" );
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
        stakingFeeReceiver = _stakingFeeReceiver; 

        emit SetFeeReceivers(_autoLiquidityReceiver, _marketingFeeReceiver, _devFeeReceiver, _stakingFeeReceiver);
    }

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

        emit ChangedSwapBack(_enabled, _amount);
    }

    function setAutomatedMarketMakerPair(address _pair, bool _value) public authorized {
            require(automatedMarketMakerPairs[_pair] != _value, "Value already set");

            automatedMarketMakerPairs[_pair] = _value;

            if(_value){
                _markerPairs.push(_pair);
            }else{
                require(_markerPairs.length > 1, "Required 1 pair");
                for (uint256 i = 0; i < _markerPairs.length; i++) {
                    if (_markerPairs[i] == _pair) {
                        _markerPairs[i] = _markerPairs[_markerPairs.length - 1];
                        _markerPairs.pop();
                        break;
                    }
                }
            }

            emit SetAutomatedMarketMakerPair(_pair, _value);
        }

    function setPvtSaleRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval) external authorized {
        require(_maxSellAmount > 0, "Can't restrict trading");
        _maxPvtSellAmount = _maxSellAmount;
        privateSaleLimitsEnabled = _restricted;
        cooldownTimerIntervalPrivate = _interval;

        emit ChangedPrivateRestrictions(_maxSellAmount, _restricted, _interval);
    }

    function manage_pvtseller(address[] calldata addresses, bool status) external authorized {
        require (addresses.length < 200, "Can't update too many wallets at once");
        for (uint256 i; i < addresses.length; ++i) {
            privateSaleHolders[addresses[i]] = status;
        }

        emit ManagePrivate(addresses, status);
        
    }

    function setPvtSaleRestrictions_maxsell(uint256 amount) external authorized {
        require(amount > 0, "Can't restrict trading");
        _maxPvtSellAmount = amount;

        emit ChangeMaxPrivateSell(amount);
    }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ChangeMaxPrivateSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellDenom","type":"uint256"}],"name":"ChangedMaxTX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletDenom","type":"uint256"}],"name":"ChangedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_restricted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"ChangedPrivateRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timeF","type":"uint256"}],"name":"Fupdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"InitialDistributionFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ManagePrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_devFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetMaxWalletExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetTxLimitExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SingleBlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxPvtSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","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":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerIntervalPrivate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"cooldownTimerPrivate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","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":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExempt","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":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_pvtseller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"setFeeReceivers","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":"setIsMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"internalType":"bool","name":"_restricted","type":"bool"},{"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"setPvtSaleRestrictions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setPvtSaleRestrictions_maxsell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","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":"_transferFee","type":"uint256"}],"name":"setTransferFee","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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"updateF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326012600a620008f0565b6200004290633b9aca00620009bc565b6005556103e8600554600f620000599190620009bc565b62000065919062000884565b600655603260055462000079919062000884565b60075560016010556001601360006101000a81548160ff02191690831515021790555062015180601655600260185560046019556004601a556002601b556002601c556004601d556004601e556002601f556000602055601e60215562000115601b5462000101601a5462000101601954601854620004fa60201b620023961790919060201c565b620004fa60201b620023961790919060201c565b60225562000144601f5462000101601e5462000101601d54601c54620004fa60201b620023961790919060201c565b6023556064602455602580546001600160a01b031990811673b54ff952a8a44be04063e4a7f6ee36bab8c1a2dd908117909255602680548216909217909155602780548216736c0d87bba3290f1ae1d9f4b7cd75fb4af855930f179055602880549091167388bb71e6a1127d2b1dc167b77a2a66cc204c2fff179055602a805461ffff60a01b1916600160a81b17905560055461138890620001e8906001620009bc565b620001f4919062000884565b602b553480156200020457600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560298054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c46489260048083019392829003018186803b1580156200028657600080fd5b505afa1580156200029b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c191906200083e565b600280546001600160a01b0319166001600160a01b039283161790556029546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200031b57600080fd5b505afa15801562000330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035691906200083e565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620003a357600080fd5b505af1158015620003b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003de91906200083e565b602a80546001600160a01b0319166001600160a01b039290921691821790556200040a9060016200056a565b3060008181526009602090815260408083206029546001600160a01b039081168552908352818420600019905533808552600d8085528386208054600160ff199182168117909255600e8088528689208054831684179055600f808952878a208054841685179055998952928752858820805482168317905591865284872080548316821790559685528386208054821688179055602a549092168552828520805490921690951790556005548484526008835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000a58565b60008062000509838562000869565b905083811015620005615760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b3360009081526001602052604090205460ff16620005b95760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b604482015260640162000558565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156200061e5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b604482015260640162000558565b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556200069d57600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03841617905562000802565b600a54600110620006e35760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b604482015260640162000558565b60005b600a548110156200080057826001600160a01b0316600a828154811062000711576200071162000a42565b6000918252602090912001546001600160a01b03161415620007eb57600a80546200073f90600190620009de565b8154811062000752576200075262000a42565b600091825260209091200154600a80546001600160a01b03909216918390811062000781576200078162000a42565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480620007c357620007c362000a2c565b600082815260209020810160001990810180546001600160a01b031916905501905562000800565b80620007f781620009f8565b915050620006e6565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000602082840312156200085157600080fd5b81516001600160a01b03811681146200056157600080fd5b600082198211156200087f576200087f62000a16565b500190565b600082620008a257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620008e8578160001904821115620008cc57620008cc62000a16565b80851615620008da57918102915b93841c9390800290620008ac565b509250929050565b60006200090160ff84168362000908565b9392505050565b600082620009195750600162000564565b81620009285750600062000564565b81600181146200094157600281146200094c576200096c565b600191505062000564565b60ff84111562000960576200096062000a16565b50506001821b62000564565b5060208310610133831016604e8410600b841016171562000991575081810a62000564565b6200099d8383620008a7565b8060001904821115620009b457620009b462000a16565b029392505050565b6000816000190483118215151615620009d957620009d962000a16565b500290565b600082821015620009f357620009f362000a16565b500390565b600060001982141562000a0f5762000a0f62000a16565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b613afe8062000a686000396000f3fe60806040526004361061037a5760003560e01c8063893d20e8116101d1578063c04a78ad11610102578063ecabcf61116100a0578063f84ba65d1161006f578063f84ba65d14610ad0578063f887ea4014610af0578063fe575a8714610b10578063fe9fbb8014610b4057600080fd5b8063ecabcf6114610a5a578063f0b37c0414610a7a578063f2fde38b14610a9a578063f821f17f14610aba57600080fd5b8063d32fd252116100dc578063d32fd252146109b4578063dd62ed3e146109d4578063df20fd4914610a1a578063e1d5584c14610a3a57600080fd5b8063c04a78ad1461095e578063c1cf53c41461097e578063d00efb2f1461099e57600080fd5b80639a7a23d61161016f578063a8df7fb011610149578063a8df7fb0146108ce578063a9059cbb146108ee578063b62496f51461090e578063b6a5d7de1461093e57600080fd5b80639a7a23d614610878578063a5e8b6eb14610898578063a8aa1b31146108ae57600080fd5b80638e2eee84116101ab5780638e2eee84146107d85780638f02bb5b146107f85780639242b7591461081857806395d89b411461083257600080fd5b8063893d20e8146107565780638b42507f146107885780638cd4426d146107b857600080fd5b80633f4218e0116102ab5780635d0044ca116102495780636ddd1713116102235780636ddd1713146106c95780637090ceaa146106ea57806370a082311461070a5780637d1db4a51461074057600080fd5b80635d0044ca14610673578063658d4b7f146106935780636c0a24eb146106b357600080fd5b80634ada218b116102855780634ada218b146105fd578063571ac8b01461061e5780635b895c291461063e5780635c85974f1461065357600080fd5b80633f4218e01461058d57806345434032146105bd57806347a28b79146105dd57600080fd5b806318160ddd116103185780632f54bf6e116102f25780632f54bf6e1461050d578063313ce5671461053c578063364333f4146105585780633c8e556d1461056d57600080fd5b806318160ddd146104c357806323b872dd146104d85780632b112e49146104f857600080fd5b806308d0fbcc1161035457806308d0fbcc14610414578063095ea7b3146104415780630bd11f8a146104715780630d295980146104a157600080fd5b806301f59d16146103865780630445b667146103af57806306fdde03146103c557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b5061039c602b5481565b3480156103d157600080fd5b5060408051808201909152600a81527f43554c54495641544f520000000000000000000000000000000000000000000060208201525b6040516103a69190613912565b34801561042057600080fd5b5061039c61042f3660046135e5565b60176020526000908152604090205481565b34801561044d57600080fd5b5061046161045c366004613706565b610b79565b60405190151581526020016103a6565b34801561047d57600080fd5b5061046161048c3660046135e5565b600f6020526000908152604090205460ff1681565b3480156104ad57600080fd5b506104c16104bc3660046137b8565b610be6565b005b3480156104cf57600080fd5b5060055461039c565b3480156104e457600080fd5b506104616104f3366004613697565b610d13565b34801561050457600080fd5b5061039c610ddc565b34801561051957600080fd5b506104616105283660046135e5565b6000546001600160a01b0391821691161490565b34801561054857600080fd5b50604051601281526020016103a6565b34801561056457600080fd5b506104c1610e2e565b34801561057957600080fd5b506104c161058836600461363b565b610eaa565b34801561059957600080fd5b506104616105a83660046135e5565b600d6020526000908152604090205460ff1681565b3480156105c957600080fd5b506104c16105d83660046136d8565b611033565b3480156105e957600080fd5b506104c16105f836600461387e565b6110e4565b34801561060957600080fd5b50602a5461046190600160a01b900460ff1681565b34801561062a57600080fd5b506104616106393660046135e5565b611206565b34801561064a57600080fd5b506104c1611214565b34801561065f57600080fd5b506104c161066e366004613810565b61126b565b34801561067f57600080fd5b506104c161068e366004613810565b61134a565b34801561069f57600080fd5b506104c16106ae3660046136d8565b611429565b3480156106bf57600080fd5b5061039c60075481565b3480156106d557600080fd5b50602a5461046190600160a81b900460ff1681565b3480156106f657600080fd5b506104c1610705366004613732565b6114d2565b34801561071657600080fd5b5061039c6107253660046135e5565b6001600160a01b031660009081526008602052604090205490565b34801561074c57600080fd5b5061039c60065481565b34801561076257600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b34801561079457600080fd5b506104616107a33660046135e5565b600e6020526000908152604090205460ff1681565b3480156107c457600080fd5b506104616107d3366004613706565b61162d565b3480156107e457600080fd5b506104c16107f3366004613732565b611713565b34801561080457600080fd5b506104c1610813366004613810565b611861565b34801561082457600080fd5b506013546104619060ff1681565b34801561083e57600080fd5b5060408051808201909152600681527f434c5456545200000000000000000000000000000000000000000000000000006020820152610407565b34801561088457600080fd5b506104c16108933660046136d8565b611932565b3480156108a457600080fd5b5061039c60165481565b3480156108ba57600080fd5b50602a54610770906001600160a01b031681565b3480156108da57600080fd5b506104c16108e9366004613810565b611c1e565b3480156108fa57600080fd5b50610461610909366004613706565b611cf0565b34801561091a57600080fd5b506104616109293660046135e5565b600b6020526000908152604090205460ff1681565b34801561094a57600080fd5b506104c16109593660046135e5565b611cfd565b34801561096a57600080fd5b506104c16109793660046136d8565b611d67565b34801561098a57600080fd5b506104c161099936600461387e565b611e10565b3480156109aa57600080fd5b5061039c60115481565b3480156109c057600080fd5b506104c16109cf366004613810565b611f21565b3480156109e057600080fd5b5061039c6109ef366004613602565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a2657600080fd5b506104c1610a353660046137f2565b611ff3565b348015610a4657600080fd5b50610770610a55366004613810565b6120b3565b348015610a6657600080fd5b506104c1610a75366004613829565b6120dd565b348015610a8657600080fd5b506104c1610a953660046135e5565b6121d3565b348015610aa657600080fd5b506104c1610ab53660046135e5565b612237565b348015610ac657600080fd5b5061039c60155481565b348015610adc57600080fd5b506104c1610aeb3660046136d8565b6122ed565b348015610afc57600080fd5b50602954610770906001600160a01b031681565b348015610b1c57600080fd5b50610461610b2b3660046135e5565b600c6020526000908152604090205460ff1681565b348015610b4c57600080fd5b50610461610b5b3660046135e5565b6001600160a01b031660009081526001602052604090205460ff1690565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd49086815260200190565b60405180910390a35060015b92915050565b3360009081526001602052604090205460ff16610c385760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b602a54600160a01b900460ff1615610c925760405162461bcd60e51b815260206004820152601260248201527f43616e27742073746f702074726164696e6700000000000000000000000000006044820152606401610c2f565b602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b83151502179055436011819055601054610cd79190612396565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610dc757604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610da29184906123f5565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610dd284848461242f565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610e29906003546001600160a01b0316600090815260086020526040902054610e239060055490612bba565b90612bba565b905090565b3360009081526001602052604090205460ff16610e7b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60405133904780156108fc02916000818181858888f19350505050158015610ea7573d6000803e3d6000fd5b50565b3360009081526001602052604090205460ff16610ef75760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b03841615801590610f1757506001600160a01b03831615155b8015610f2b57506001600160a01b03821615155b8015610f3f57506001600160a01b03811615155b610f8b5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610c2f565b602580546001600160a01b0386811673ffffffffffffffffffffffffffffffffffffffff1992831681179093556026805487831690841681179091556027805487841690851681179091556028805493871693909416831790935560408051948552602085019190915283019190915260608201527f0824f26a5a1c7f10b10915a7b3391149cf6bd9af4fc0c2da7e492fdaadc2e0609060800160405180910390a150505050565b3360009081526001602052604090205460ff166110805760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b3360009081526001602052604090205460ff166111315760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60188590556019849055601a839055601b82905561115b8261115585818989612396565b90612396565b6022819055602482905560215410156111b65760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b6040805186815260208101869052908101849052606081018390527f18a7569ae8751867d460ded393ecea8c481a51e30a7344a83772d20db9eaaac0906080015b60405180910390a15050505050565b6000610be082600019610b79565b3360009081526001602052604090205460ff166112615760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b611269612bfc565b565b3360009081526001602052604090205460ff166112b85760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6005546112c790612710612fb2565b81116113155760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610d08565b3360009081526001602052604090205460ff166113975760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6005546113a690612710612fb2565b81116113f45760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610d08565b3360009081526001602052604090205460ff166114765760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91016110d8565b3360009081526001602052604090205460ff1661151f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60c8821061157d5760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c2f565b60005b828110156115ec57816014600086868581811061159f5761159f613a8f565b90506020020160208101906115b491906135e5565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115e581613a48565b9050611580565b507f537d10355deda83680f45de2f55cf1c317d5c25de158f4905dcd60a139bc9d09838383604051611620939291906138b9565b60405180910390a1505050565b3360009081526001602052604081205460ff1661167a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd591906137d5565b3360009081526001602052604090205460ff166117605760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60c882106117be5760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c2f565b60005b8281101561182d5781600c60008686858181106117e0576117e0613a8f565b90506020020160208101906117f591906135e5565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561182681613a48565b90506117c1565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611620939291906138b9565b3360009081526001602052604090205460ff166118ae5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60215481106118ff5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b60208181556040518281527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49101610d08565b3360009081526001602052604090205460ff1661197f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156119ee5760405162461bcd60e51b815260206004820152601160248201527f56616c756520616c7265616479207365740000000000000000000000000000006044820152606401610c2f565b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155611a7857600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055611be2565b600a54600110611aca5760405162461bcd60e51b815260206004820152600f60248201527f52657175697265642031207061697200000000000000000000000000000000006044820152606401610c2f565b60005b600a54811015611be057826001600160a01b0316600a8281548110611af457611af4613a8f565b6000918252602090912001546001600160a01b03161415611bce57600a8054611b1f90600190613a31565b81548110611b2f57611b2f613a8f565b600091825260209091200154600a80546001600160a01b039092169183908110611b5b57611b5b613a8f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611b9a57611b9a613a79565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611be0565b80611bd881613a48565b915050611acd565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602052604090205460ff16611c6b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60328110611cbb5760405162461bcd60e51b815260206004820152601260248201527f43616e277420676f2074686174206869676800000000000000000000000000006044820152606401610c2f565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610d08565b6000610dd533848461242f565b6000546001600160a01b03163314611d405760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16611db45760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b91016110d8565b3360009081526001602052604090205460ff16611e5d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b601c859055601d849055601e839055601f829055611e818261115585818989612396565b602381905560248290556021541015611edc5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b6040805186815260208101869052908101849052606081018390527f5323944abff53387ebe7bd518eb0a3b0b79d3534d234a96e9877a33b6442eb1c906080016111f7565b3360009081526001602052604090205460ff16611f6e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60008111611fbe5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60158190556040518181527f3bd061048c7adcd32f9eaa42fd6e917858bf4673fdd08e82416ae7c6e61fddf890602001610d08565b3360009081526001602052604090205460ff166120405760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b84151590810291909117909155602b82905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd91016110d8565b600a81815481106120c357600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526001602052604090205460ff1661212a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6000831161217a5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60158390556013805460ff1916831515908117909155601682905560408051858152602081019290925281018290527ff734636f05606211c6745f8053fb4d6ca3bff737c2911ff764ad381bb33d01ad90606001611620565b6000546001600160a01b031633146122165760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461227a5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610d08565b3360009081526001602052604090205460ff1661233a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f6691016110d8565b6000806123a383856139d8565b905083811015610dd55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2f565b600081848411156124195760405162461bcd60e51b8152600401610c2f9190613912565b5060006124268486613a31565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561247157506001600160a01b0383166000908152600c602052604090205460ff16155b6124bd5760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610c2f565b602c5460ff16156124da576124d3848484612ff4565b9050610dd5565b6001600160a01b0384166000908152600d602052604090205460ff1615801561251c57506001600160a01b0383166000908152600d602052604090205460ff16155b1561257a57602a54600160a01b900460ff1661257a5760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610c2f565b6125826130e3565b1561258f5761258f612bfc565b6001600160a01b0384166000908152600b6020526040902054829060ff16156126e5576001600160a01b0384166000908152600d602052604090205460ff166126e0576007546001600160a01b0385166000908152600860205260409020546125f89085612396565b11158061261d57506001600160a01b0384166000908152600f602052604090205460ff165b6126695760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c2f565b6006548311158061269257506001600160a01b0384166000908152600e602052604090205460ff165b6126d25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6126dd85858561313b565b90505b612b01565b6001600160a01b0384166000908152600b602052604090205460ff16156128ba576001600160a01b0385166000908152600d602052604090205460ff166126e0576006548311158061274f57506001600160a01b0385166000908152600e602052604090205460ff165b61278f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6127998584613308565b6001600160a01b03861660009081526014602052604090205490915060ff1680156127c6575060135460ff165b156126e0576001600160a01b03851660009081526017602052604090205442116128325760405162461bcd60e51b815260206004820152601860248201527f5076742073616c652074696d65207265737472696374656400000000000000006044820152606401610c2f565b60155483111561288f5760405162461bcd60e51b815260206004820152602260248201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960448201526137b760f11b6064820152608401610c2f565b60165461289c90426139d8565b6001600160a01b038616600090815260176020526040902055612b01565b6001600160a01b0385166000908152600d602052604090205460ff16612b01576007546001600160a01b0385166000908152600860205260409020546129009085612396565b11158061292557506001600160a01b0384166000908152600f602052604090205460ff165b6129715760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c2f565b6006548311158061299a57506001600160a01b0385166000908152600e602052604090205460ff165b6129da5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6129e4858461346d565b6001600160a01b03861660009081526014602052604090205490915060ff168015612a11575060135460ff165b15612b01576001600160a01b0385166000908152601760205260409020544211612a7d5760405162461bcd60e51b815260206004820152601860248201527f5076742073616c652074696d65207265737472696374656400000000000000006044820152606401610c2f565b601554831115612ada5760405162461bcd60e51b815260206004820152602260248201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960448201526137b760f11b6064820152608401610c2f565b601654612ae790426139d8565b6001600160a01b0386166000908152601760205260409020555b6001600160a01b038516600090815260086020526040902054612b249084612bba565b6001600160a01b038087166000908152600860205260408082209390935590861681522054612b539082612396565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ba79085815260200190565b60405180910390a3506001949350505050565b6000610dd583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123f5565b602c805460ff19166001179055601c54601854600091612c1c9190612396565b90506000612c43601f54610e23601b54610e2360235460225461239690919063ffffffff16565b30600090815260086020526040812054919250612c6d6002612c678581868961351c565b90612fb2565b90506000612c7b8383612bba565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612cb557612cb5613a8f565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612ce657612ce6613a8f565b6001600160a01b0392831660209182029290920101526029546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d45908690600090869030904290600401613967565b600060405180830381600087803b158015612d5f57600080fd5b505af1158015612d73573d6000803e3d6000fd5b505050506000612d8c8347612bba90919063ffffffff16565b90506000612da5612d9e8a6002612fb2565b8990612bba565b90506000612dd36002612c6784612c67612dcc601c5460185461239690919063ffffffff16565b889061351c565b90506000612dfc83612c67612df5601d5460195461239690919063ffffffff16565b879061351c565b90506000612e1e84612c67612dcc601e54601a5461239690919063ffffffff16565b6026546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114612e70576040519150601f19603f3d011682016040523d82523d6000602084013e612e75565b606091505b50506027546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612ec5576040519150601f19603f3d011682016040523d82523d6000602084013e612eca565b606091505b5060009250508a159050612f99576029546025546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b158015612f5c57600080fd5b505af1158015612f70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f959190613850565b5050505b5050602c805460ff191690555050505050505050505050565b6000610dd583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135b7565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038616600090815260089091529182205461304e9184906123f5565b6001600160a01b03808616600090815260086020526040808220939093559085168152205461307d9083612396565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130d19086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156131065750602c5460ff16155b801561311b5750602a54600160a81b900460ff165b8015610e29575050602b5430600090815260086020526040902054101590565b600060125443101561319c57602a546001600160a01b0384811691161480159061317357506029546001600160a01b03848116911614155b1561319c576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b60006131c5602454612c676131be601b54602254612bba90919063ffffffff16565b869061351c565b905060006131e4602454612c67601b548761351c90919063ffffffff16565b905060006131f28383612396565b3060009081526008602052604090205490915061320f9084612396565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906132609087815260200190565b60405180910390a381156132f3576028546001600160a01b03166000908152600860205260409020546132939083612396565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6132fd8582612bba565b979650505050505050565b60008061332b602454612c676131be601f54602354612bba90919063ffffffff16565b9050600061334a602454612c67601f548761351c90919063ffffffff16565b905060006133588383612396565b306000908152600860205260409020549091506133759084612396565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c69087815260200190565b60405180910390a38115613459576028546001600160a01b03166000908152600860205260409020546133f99083612396565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6134638582612bba565b9695505050505050565b60205460125460009190431015613482575060635b60245460009061349690612c67868561351c565b9050801561351257306000908152600860205260409020546134b89082612396565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906135099085815260200190565b60405180910390a35b6124268482612bba565b60008261352b57506000610be0565b60006135378385613a12565b90508261354485836139f0565b14610dd55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b600081836135d85760405162461bcd60e51b8152600401610c2f9190613912565b50600061242684866139f0565b6000602082840312156135f757600080fd5b8135610dd581613aa5565b6000806040838503121561361557600080fd5b823561362081613aa5565b9150602083013561363081613aa5565b809150509250929050565b6000806000806080858703121561365157600080fd5b843561365c81613aa5565b9350602085013561366c81613aa5565b9250604085013561367c81613aa5565b9150606085013561368c81613aa5565b939692955090935050565b6000806000606084860312156136ac57600080fd5b83356136b781613aa5565b925060208401356136c781613aa5565b929592945050506040919091013590565b600080604083850312156136eb57600080fd5b82356136f681613aa5565b9150602083013561363081613aba565b6000806040838503121561371957600080fd5b823561372481613aa5565b946020939093013593505050565b60008060006040848603121561374757600080fd5b833567ffffffffffffffff8082111561375f57600080fd5b818601915086601f83011261377357600080fd5b81358181111561378257600080fd5b8760208260051b850101111561379757600080fd5b602092830195509350508401356137ad81613aba565b809150509250925092565b6000602082840312156137ca57600080fd5b8135610dd581613aba565b6000602082840312156137e757600080fd5b8151610dd581613aba565b6000806040838503121561380557600080fd5b823561372481613aba565b60006020828403121561382257600080fd5b5035919050565b60008060006060848603121561383e57600080fd5b8335925060208401356136c781613aba565b60008060006060848603121561386557600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561389657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b868110156138fc5782356138df81613aa5565b6001600160a01b03168252602092830192909101906001016138cc565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b8181101561393f57858101830151858201604001528201613923565b81811115613951576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139b75784516001600160a01b031683529383019391830191600101613992565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139eb576139eb613a63565b500190565b600082613a0d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613a2c57613a2c613a63565b500290565b600082821015613a4357613a43613a63565b500390565b6000600019821415613a5c57613a5c613a63565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610ea757600080fd5b8015158114610ea757600080fdfea264697066735822122013b41fe00af615c104ddf77e75bad98646b4771cb7982658a384d662bbe1061964736f6c63430008070033

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063893d20e8116101d1578063c04a78ad11610102578063ecabcf61116100a0578063f84ba65d1161006f578063f84ba65d14610ad0578063f887ea4014610af0578063fe575a8714610b10578063fe9fbb8014610b4057600080fd5b8063ecabcf6114610a5a578063f0b37c0414610a7a578063f2fde38b14610a9a578063f821f17f14610aba57600080fd5b8063d32fd252116100dc578063d32fd252146109b4578063dd62ed3e146109d4578063df20fd4914610a1a578063e1d5584c14610a3a57600080fd5b8063c04a78ad1461095e578063c1cf53c41461097e578063d00efb2f1461099e57600080fd5b80639a7a23d61161016f578063a8df7fb011610149578063a8df7fb0146108ce578063a9059cbb146108ee578063b62496f51461090e578063b6a5d7de1461093e57600080fd5b80639a7a23d614610878578063a5e8b6eb14610898578063a8aa1b31146108ae57600080fd5b80638e2eee84116101ab5780638e2eee84146107d85780638f02bb5b146107f85780639242b7591461081857806395d89b411461083257600080fd5b8063893d20e8146107565780638b42507f146107885780638cd4426d146107b857600080fd5b80633f4218e0116102ab5780635d0044ca116102495780636ddd1713116102235780636ddd1713146106c95780637090ceaa146106ea57806370a082311461070a5780637d1db4a51461074057600080fd5b80635d0044ca14610673578063658d4b7f146106935780636c0a24eb146106b357600080fd5b80634ada218b116102855780634ada218b146105fd578063571ac8b01461061e5780635b895c291461063e5780635c85974f1461065357600080fd5b80633f4218e01461058d57806345434032146105bd57806347a28b79146105dd57600080fd5b806318160ddd116103185780632f54bf6e116102f25780632f54bf6e1461050d578063313ce5671461053c578063364333f4146105585780633c8e556d1461056d57600080fd5b806318160ddd146104c357806323b872dd146104d85780632b112e49146104f857600080fd5b806308d0fbcc1161035457806308d0fbcc14610414578063095ea7b3146104415780630bd11f8a146104715780630d295980146104a157600080fd5b806301f59d16146103865780630445b667146103af57806306fdde03146103c557600080fd5b3661038157005b600080fd5b34801561039257600080fd5b5061039c60215481565b6040519081526020015b60405180910390f35b3480156103bb57600080fd5b5061039c602b5481565b3480156103d157600080fd5b5060408051808201909152600a81527f43554c54495641544f520000000000000000000000000000000000000000000060208201525b6040516103a69190613912565b34801561042057600080fd5b5061039c61042f3660046135e5565b60176020526000908152604090205481565b34801561044d57600080fd5b5061046161045c366004613706565b610b79565b60405190151581526020016103a6565b34801561047d57600080fd5b5061046161048c3660046135e5565b600f6020526000908152604090205460ff1681565b3480156104ad57600080fd5b506104c16104bc3660046137b8565b610be6565b005b3480156104cf57600080fd5b5060055461039c565b3480156104e457600080fd5b506104616104f3366004613697565b610d13565b34801561050457600080fd5b5061039c610ddc565b34801561051957600080fd5b506104616105283660046135e5565b6000546001600160a01b0391821691161490565b34801561054857600080fd5b50604051601281526020016103a6565b34801561056457600080fd5b506104c1610e2e565b34801561057957600080fd5b506104c161058836600461363b565b610eaa565b34801561059957600080fd5b506104616105a83660046135e5565b600d6020526000908152604090205460ff1681565b3480156105c957600080fd5b506104c16105d83660046136d8565b611033565b3480156105e957600080fd5b506104c16105f836600461387e565b6110e4565b34801561060957600080fd5b50602a5461046190600160a01b900460ff1681565b34801561062a57600080fd5b506104616106393660046135e5565b611206565b34801561064a57600080fd5b506104c1611214565b34801561065f57600080fd5b506104c161066e366004613810565b61126b565b34801561067f57600080fd5b506104c161068e366004613810565b61134a565b34801561069f57600080fd5b506104c16106ae3660046136d8565b611429565b3480156106bf57600080fd5b5061039c60075481565b3480156106d557600080fd5b50602a5461046190600160a81b900460ff1681565b3480156106f657600080fd5b506104c1610705366004613732565b6114d2565b34801561071657600080fd5b5061039c6107253660046135e5565b6001600160a01b031660009081526008602052604090205490565b34801561074c57600080fd5b5061039c60065481565b34801561076257600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103a6565b34801561079457600080fd5b506104616107a33660046135e5565b600e6020526000908152604090205460ff1681565b3480156107c457600080fd5b506104616107d3366004613706565b61162d565b3480156107e457600080fd5b506104c16107f3366004613732565b611713565b34801561080457600080fd5b506104c1610813366004613810565b611861565b34801561082457600080fd5b506013546104619060ff1681565b34801561083e57600080fd5b5060408051808201909152600681527f434c5456545200000000000000000000000000000000000000000000000000006020820152610407565b34801561088457600080fd5b506104c16108933660046136d8565b611932565b3480156108a457600080fd5b5061039c60165481565b3480156108ba57600080fd5b50602a54610770906001600160a01b031681565b3480156108da57600080fd5b506104c16108e9366004613810565b611c1e565b3480156108fa57600080fd5b50610461610909366004613706565b611cf0565b34801561091a57600080fd5b506104616109293660046135e5565b600b6020526000908152604090205460ff1681565b34801561094a57600080fd5b506104c16109593660046135e5565b611cfd565b34801561096a57600080fd5b506104c16109793660046136d8565b611d67565b34801561098a57600080fd5b506104c161099936600461387e565b611e10565b3480156109aa57600080fd5b5061039c60115481565b3480156109c057600080fd5b506104c16109cf366004613810565b611f21565b3480156109e057600080fd5b5061039c6109ef366004613602565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a2657600080fd5b506104c1610a353660046137f2565b611ff3565b348015610a4657600080fd5b50610770610a55366004613810565b6120b3565b348015610a6657600080fd5b506104c1610a75366004613829565b6120dd565b348015610a8657600080fd5b506104c1610a953660046135e5565b6121d3565b348015610aa657600080fd5b506104c1610ab53660046135e5565b612237565b348015610ac657600080fd5b5061039c60155481565b348015610adc57600080fd5b506104c1610aeb3660046136d8565b6122ed565b348015610afc57600080fd5b50602954610770906001600160a01b031681565b348015610b1c57600080fd5b50610461610b2b3660046135e5565b600c6020526000908152604090205460ff1681565b348015610b4c57600080fd5b50610461610b5b3660046135e5565b6001600160a01b031660009081526001602052604090205460ff1690565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd49086815260200190565b60405180910390a35060015b92915050565b3360009081526001602052604090205460ff16610c385760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b602a54600160a01b900460ff1615610c925760405162461bcd60e51b815260206004820152601260248201527f43616e27742073746f702074726164696e6700000000000000000000000000006044820152606401610c2f565b602a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b83151502179055436011819055601054610cd79190612396565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914610dc757604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054610da29184906123f5565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b610dd284848461242f565b90505b9392505050565b6004546001600160a01b0316600090815260086020526040812054610e29906003546001600160a01b0316600090815260086020526040902054610e239060055490612bba565b90612bba565b905090565b3360009081526001602052604090205460ff16610e7b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60405133904780156108fc02916000818181858888f19350505050158015610ea7573d6000803e3d6000fd5b50565b3360009081526001602052604090205460ff16610ef75760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b03841615801590610f1757506001600160a01b03831615155b8015610f2b57506001600160a01b03821615155b8015610f3f57506001600160a01b03811615155b610f8b5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610c2f565b602580546001600160a01b0386811673ffffffffffffffffffffffffffffffffffffffff1992831681179093556026805487831690841681179091556027805487841690851681179091556028805493871693909416831790935560408051948552602085019190915283019190915260608201527f0824f26a5a1c7f10b10915a7b3391149cf6bd9af4fc0c2da7e492fdaadc2e0609060800160405180910390a150505050565b3360009081526001602052604090205460ff166110805760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b3360009081526001602052604090205460ff166111315760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60188590556019849055601a839055601b82905561115b8261115585818989612396565b90612396565b6022819055602482905560215410156111b65760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b6040805186815260208101869052908101849052606081018390527f18a7569ae8751867d460ded393ecea8c481a51e30a7344a83772d20db9eaaac0906080015b60405180910390a15050505050565b6000610be082600019610b79565b3360009081526001602052604090205460ff166112615760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b611269612bfc565b565b3360009081526001602052604090205460ff166112b85760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6005546112c790612710612fb2565b81116113155760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610d08565b3360009081526001602052604090205460ff166113975760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6005546113a690612710612fb2565b81116113f45760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610d08565b3360009081526001602052604090205460ff166114765760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91016110d8565b3360009081526001602052604090205460ff1661151f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60c8821061157d5760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c2f565b60005b828110156115ec57816014600086868581811061159f5761159f613a8f565b90506020020160208101906115b491906135e5565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556115e581613a48565b9050611580565b507f537d10355deda83680f45de2f55cf1c317d5c25de158f4905dcd60a139bc9d09838383604051611620939291906138b9565b60405180910390a1505050565b3360009081526001602052604081205460ff1661167a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156116db57600080fd5b505af11580156116ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd591906137d5565b3360009081526001602052604090205460ff166117605760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60c882106117be5760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c2f565b60005b8281101561182d5781600c60008686858181106117e0576117e0613a8f565b90506020020160208101906117f591906135e5565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561182681613a48565b90506117c1565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611620939291906138b9565b3360009081526001602052604090205460ff166118ae5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60215481106118ff5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b60208181556040518281527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f49101610d08565b3360009081526001602052604090205460ff1661197f5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000908152600b602052604090205460ff16151581151514156119ee5760405162461bcd60e51b815260206004820152601160248201527f56616c756520616c7265616479207365740000000000000000000000000000006044820152606401610c2f565b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155611a7857600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a801805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416179055611be2565b600a54600110611aca5760405162461bcd60e51b815260206004820152600f60248201527f52657175697265642031207061697200000000000000000000000000000000006044820152606401610c2f565b60005b600a54811015611be057826001600160a01b0316600a8281548110611af457611af4613a8f565b6000918252602090912001546001600160a01b03161415611bce57600a8054611b1f90600190613a31565b81548110611b2f57611b2f613a8f565b600091825260209091200154600a80546001600160a01b039092169183908110611b5b57611b5b613a8f565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480611b9a57611b9a613a79565b6000828152602090208101600019908101805473ffffffffffffffffffffffffffffffffffffffff19169055019055611be0565b80611bd881613a48565b915050611acd565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b3360009081526001602052604090205460ff16611c6b5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60328110611cbb5760405162461bcd60e51b815260206004820152601260248201527f43616e277420676f2074686174206869676800000000000000000000000000006044820152606401610c2f565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610d08565b6000610dd533848461242f565b6000546001600160a01b03163314611d405760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b3360009081526001602052604090205460ff16611db45760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b91016110d8565b3360009081526001602052604090205460ff16611e5d5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b601c859055601d849055601e839055601f829055611e818261115585818989612396565b602381905560248290556021541015611edc5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2033302500006044820152606401610c2f565b6040805186815260208101869052908101849052606081018390527f5323944abff53387ebe7bd518eb0a3b0b79d3534d234a96e9877a33b6442eb1c906080016111f7565b3360009081526001602052604090205460ff16611f6e5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b60008111611fbe5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60158190556040518181527f3bd061048c7adcd32f9eaa42fd6e917858bf4673fdd08e82416ae7c6e61fddf890602001610d08565b3360009081526001602052604090205460ff166120405760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b602a80547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff16600160a81b84151590810291909117909155602b82905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd91016110d8565b600a81815481106120c357600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526001602052604090205460ff1661212a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6000831161217a5760405162461bcd60e51b815260206004820152601660248201527f43616e27742072657374726963742074726164696e67000000000000000000006044820152606401610c2f565b60158390556013805460ff1916831515908117909155601682905560408051858152602081019290925281018290527ff734636f05606211c6745f8053fb4d6ca3bff737c2911ff764ad381bb33d01ad90606001611620565b6000546001600160a01b031633146122165760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b0316331461227a5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610c2f565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610d08565b3360009081526001602052604090205460ff1661233a5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610c2f565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f6691016110d8565b6000806123a383856139d8565b905083811015610dd55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c2f565b600081848411156124195760405162461bcd60e51b8152600401610c2f9190613912565b5060006124268486613a31565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff1615801561247157506001600160a01b0383166000908152600c602052604090205460ff16155b6124bd5760405162461bcd60e51b815260206004820152600b60248201527f426c61636b6c69737465640000000000000000000000000000000000000000006044820152606401610c2f565b602c5460ff16156124da576124d3848484612ff4565b9050610dd5565b6001600160a01b0384166000908152600d602052604090205460ff1615801561251c57506001600160a01b0383166000908152600d602052604090205460ff16155b1561257a57602a54600160a01b900460ff1661257a5760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610c2f565b6125826130e3565b1561258f5761258f612bfc565b6001600160a01b0384166000908152600b6020526040902054829060ff16156126e5576001600160a01b0384166000908152600d602052604090205460ff166126e0576007546001600160a01b0385166000908152600860205260409020546125f89085612396565b11158061261d57506001600160a01b0384166000908152600f602052604090205460ff165b6126695760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c2f565b6006548311158061269257506001600160a01b0384166000908152600e602052604090205460ff165b6126d25760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6126dd85858561313b565b90505b612b01565b6001600160a01b0384166000908152600b602052604090205460ff16156128ba576001600160a01b0385166000908152600d602052604090205460ff166126e0576006548311158061274f57506001600160a01b0385166000908152600e602052604090205460ff165b61278f5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6127998584613308565b6001600160a01b03861660009081526014602052604090205490915060ff1680156127c6575060135460ff165b156126e0576001600160a01b03851660009081526017602052604090205442116128325760405162461bcd60e51b815260206004820152601860248201527f5076742073616c652074696d65207265737472696374656400000000000000006044820152606401610c2f565b60155483111561288f5760405162461bcd60e51b815260206004820152602260248201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960448201526137b760f11b6064820152608401610c2f565b60165461289c90426139d8565b6001600160a01b038616600090815260176020526040902055612b01565b6001600160a01b0385166000908152600d602052604090205460ff16612b01576007546001600160a01b0385166000908152600860205260409020546129009085612396565b11158061292557506001600160a01b0384166000908152600f602052604090205460ff165b6129715760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c2f565b6006548311158061299a57506001600160a01b0385166000908152600e602052604090205460ff165b6129da5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610c2f565b6129e4858461346d565b6001600160a01b03861660009081526014602052604090205490915060ff168015612a11575060135460ff165b15612b01576001600160a01b0385166000908152601760205260409020544211612a7d5760405162461bcd60e51b815260206004820152601860248201527f5076742073616c652074696d65207265737472696374656400000000000000006044820152606401610c2f565b601554831115612ada5760405162461bcd60e51b815260206004820152602260248201527f5076742073616c652068617665206d61782073656c6c2072657374726963746960448201526137b760f11b6064820152608401610c2f565b601654612ae790426139d8565b6001600160a01b0386166000908152601760205260409020555b6001600160a01b038516600090815260086020526040902054612b249084612bba565b6001600160a01b038087166000908152600860205260408082209390935590861681522054612b539082612396565b6001600160a01b0380861660008181526008602052604090819020939093559151908716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612ba79085815260200190565b60405180910390a3506001949350505050565b6000610dd583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123f5565b602c805460ff19166001179055601c54601854600091612c1c9190612396565b90506000612c43601f54610e23601b54610e2360235460225461239690919063ffffffff16565b30600090815260086020526040812054919250612c6d6002612c678581868961351c565b90612fb2565b90506000612c7b8383612bba565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612cb557612cb5613a8f565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612ce657612ce6613a8f565b6001600160a01b0392831660209182029290920101526029546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac94790612d45908690600090869030904290600401613967565b600060405180830381600087803b158015612d5f57600080fd5b505af1158015612d73573d6000803e3d6000fd5b505050506000612d8c8347612bba90919063ffffffff16565b90506000612da5612d9e8a6002612fb2565b8990612bba565b90506000612dd36002612c6784612c67612dcc601c5460185461239690919063ffffffff16565b889061351c565b90506000612dfc83612c67612df5601d5460195461239690919063ffffffff16565b879061351c565b90506000612e1e84612c67612dcc601e54601a5461239690919063ffffffff16565b6026546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114612e70576040519150601f19603f3d011682016040523d82523d6000602084013e612e75565b606091505b50506027546040519192506001600160a01b0316908390600081818185875af1925050503d8060008114612ec5576040519150601f19603f3d011682016040523d82523d6000602084013e612eca565b606091505b5060009250508a159050612f99576029546025546040517ff305d719000000000000000000000000000000000000000000000000000000008152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b158015612f5c57600080fd5b505af1158015612f70573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612f959190613850565b5050505b5050602c805460ff191690555050505050505050505050565b6000610dd583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506135b7565b604080518082018252601481527f496e73756666696369656e742042616c616e63650000000000000000000000006020808301919091526001600160a01b038616600090815260089091529182205461304e9184906123f5565b6001600160a01b03808616600090815260086020526040808220939093559085168152205461307d9083612396565b6001600160a01b0380851660008181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906130d19086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156131065750602c5460ff16155b801561311b5750602a54600160a81b900460ff165b8015610e29575050602b5430600090815260086020526040902054101590565b600060125443101561319c57602a546001600160a01b0384811691161480159061317357506029546001600160a01b03848116911614155b1561319c576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b60006131c5602454612c676131be601b54602254612bba90919063ffffffff16565b869061351c565b905060006131e4602454612c67601b548761351c90919063ffffffff16565b905060006131f28383612396565b3060009081526008602052604090205490915061320f9084612396565b30600081815260086020526040908190209290925590516001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906132609087815260200190565b60405180910390a381156132f3576028546001600160a01b03166000908152600860205260409020546132939083612396565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908a16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6132fd8582612bba565b979650505050505050565b60008061332b602454612c676131be601f54602354612bba90919063ffffffff16565b9050600061334a602454612c67601f548761351c90919063ffffffff16565b905060006133588383612396565b306000908152600860205260409020549091506133759084612396565b30600081815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906133c69087815260200190565b60405180910390a38115613459576028546001600160a01b03166000908152600860205260409020546133f99083612396565b602880546001600160a01b03908116600090815260086020908152604091829020949094559154915185815291811692908916917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35b6134638582612bba565b9695505050505050565b60205460125460009190431015613482575060635b60245460009061349690612c67868561351c565b9050801561351257306000908152600860205260409020546134b89082612396565b30600081815260086020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906135099085815260200190565b60405180910390a35b6124268482612bba565b60008261352b57506000610be0565b60006135378385613a12565b90508261354485836139f0565b14610dd55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f77000000000000000000000000000000000000000000000000000000000000006064820152608401610c2f565b600081836135d85760405162461bcd60e51b8152600401610c2f9190613912565b50600061242684866139f0565b6000602082840312156135f757600080fd5b8135610dd581613aa5565b6000806040838503121561361557600080fd5b823561362081613aa5565b9150602083013561363081613aa5565b809150509250929050565b6000806000806080858703121561365157600080fd5b843561365c81613aa5565b9350602085013561366c81613aa5565b9250604085013561367c81613aa5565b9150606085013561368c81613aa5565b939692955090935050565b6000806000606084860312156136ac57600080fd5b83356136b781613aa5565b925060208401356136c781613aa5565b929592945050506040919091013590565b600080604083850312156136eb57600080fd5b82356136f681613aa5565b9150602083013561363081613aba565b6000806040838503121561371957600080fd5b823561372481613aa5565b946020939093013593505050565b60008060006040848603121561374757600080fd5b833567ffffffffffffffff8082111561375f57600080fd5b818601915086601f83011261377357600080fd5b81358181111561378257600080fd5b8760208260051b850101111561379757600080fd5b602092830195509350508401356137ad81613aba565b809150509250925092565b6000602082840312156137ca57600080fd5b8135610dd581613aba565b6000602082840312156137e757600080fd5b8151610dd581613aba565b6000806040838503121561380557600080fd5b823561372481613aba565b60006020828403121561382257600080fd5b5035919050565b60008060006060848603121561383e57600080fd5b8335925060208401356136c781613aba565b60008060006060848603121561386557600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561389657600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b868110156138fc5782356138df81613aa5565b6001600160a01b03168252602092830192909101906001016138cc565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b8181101561393f57858101830151858201604001528201613923565b81811115613951576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156139b75784516001600160a01b031683529383019391830191600101613992565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156139eb576139eb613a63565b500190565b600082613a0d57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615613a2c57613a2c613a63565b500290565b600082821015613a4357613a43613a63565b500390565b6000600019821415613a5c57613a5c613a63565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114610ea757600080fd5b8015158114610ea757600080fdfea264697066735822122013b41fe00af615c104ddf77e75bad98646b4771cb7982658a384d662bbe1061964736f6c63430008070033

Deployed Bytecode Sourcemap

4736:20737:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7876:26;;;;;;;;;;;;;;;;;;;16796:25:1;;;16784:2;16769:18;7876:26:0;;;;;;;;8666:54;;;;;;;;;;;;;;;;9932:80;;;;;;;;;;-1:-1:-1;10004:5:0;;;;;;;;;;;;;;;;;9932:80;;;;;;;:::i;7407:53::-;;;;;;;;;;-1:-1:-1;7407:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;10354:216;;;;;;;;;;-1:-1:-1;10354:216:0;;;;;:::i;:::-;;:::i;:::-;;;9074:14:1;;9067:22;9049:41;;9037:2;9022:18;10354:216:0;8909:187:1;6991:50:0;;;;;;;;;;-1:-1:-1;6991:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17109:308;;;;;;;;;;-1:-1:-1;17109:308:0;;;;;:::i;:::-;;:::i;:::-;;9662:88;;;;;;;;;;-1:-1:-1;9735:12:0;;9662:88;;10872:370;;;;;;;;;;-1:-1:-1;10872:370:0;;;;;:::i;:::-;;:::i;25326:142::-;;;;;;;;;;;;;:::i;2744:103::-;;;;;;;;;;-1:-1:-1;2744:103:0;;;;;:::i;:::-;2799:4;2834:5;-1:-1:-1;;;;;2823:16:0;;;2834:5;;2823:16;;2744:103;9756:80;;;;;;;;;;-1:-1:-1;9756:80:0;;6397:2;18735:36:1;;18723:2;18708:18;9756:80:0;18593:184:1;16783:119:0;;;;;;;;;;;;;:::i;22494:688::-;;;;;;;;;;-1:-1:-1;22494:688:0;;;;;:::i;:::-;;:::i;6885:44::-;;;;;;;;;;-1:-1:-1;6885:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;20101:180;;;;;;;;;;-1:-1:-1;20101:180:0;;;;;:::i;:::-;;:::i;21040:586::-;;;;;;;;;;-1:-1:-1;21040:586:0;;;;;:::i;:::-;;:::i;8588:34::-;;;;;;;;;;-1:-1:-1;8588:34:0;;;;-1:-1:-1;;;8588:34:0;;;;;;10578:122;;;;;;;;;;-1:-1:-1;10578:122:0;;;;;:::i;:::-;;:::i;25239:75::-;;;;;;;;;;;;;:::i;19293:212::-;;;;;;;;;;-1:-1:-1;19293:212:0;;;;;:::i;:::-;;:::i;19513:222::-;;;;;;;;;;-1:-1:-1;19513:222:0;;;;;:::i;:::-;;:::i;20488:166::-;;;;;;;;;;-1:-1:-1;20488:166:0;;;;;:::i;:::-;;:::i;6534:51::-;;;;;;;;;;;;;;;;8629:30;;;;;;;;;;-1:-1:-1;8629:30:0;;;;-1:-1:-1;;;8629:30:0;;;;;;24638:362;;;;;;;;;;-1:-1:-1;24638:362:0;;;;;:::i;:::-;;:::i;10102:105::-;;;;;;;;;;-1:-1:-1;10102:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;10186:18:0;10168:7;10186:18;;;:9;:18;;;;;;;10102:105;6473:54;;;;;;;;;;;;;;;;10018:78;;;;;;;;;;-1:-1:-1;10070:7:0;10088:5;-1:-1:-1;;;;;10088:5:0;10018:78;;;-1:-1:-1;;;;;6039:55:1;;;6021:74;;6009:2;5994:18;10018:78:0;5875:226:1;6936:48:0;;;;;;;;;;-1:-1:-1;6936:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16910:168;;;;;;;;;;-1:-1:-1;16910:168:0;;;;;:::i;:::-;;:::i;19743:350::-;;;;;;;;;;-1:-1:-1;19743:350:0;;;;;:::i;:::-;;:::i;22248:236::-;;;;;;;;;;-1:-1:-1;22248:236:0;;;;;:::i;:::-;;:::i;7196:43::-;;;;;;;;;;-1:-1:-1;7196:43:0;;;;;;;;9842:84;;;;;;;;;;-1:-1:-1;9916:7:0;;;;;;;;;;;;;;;;;9842:84;;23406:802;;;;;;;;;;-1:-1:-1;23406:802:0;;;;;:::i;:::-;;:::i;7346:54::-;;;;;;;;;;;;;;;;8560:19;;;;;;;;;;-1:-1:-1;8560:19:0;;;;-1:-1:-1;;;;;8560:19:0;;;20289:191;;;;;;;;;;-1:-1:-1;20289:191:0;;;;;:::i;:::-;;:::i;10708:156::-;;;;;;;;;;-1:-1:-1;10708:156:0;;;;;:::i;:::-;;:::i;6761:58::-;;;;;;;;;;-1:-1:-1;6761:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2537:94;;;;;;;;;;-1:-1:-1;2537:94:0;;;;;:::i;:::-;;:::i;20848:184::-;;;;;;;;;;-1:-1:-1;20848:184:0;;;;;:::i;:::-;;:::i;21634:606::-;;;;;;;;;;-1:-1:-1;21634:606:0;;;;;:::i;:::-;;:::i;7102:26::-;;;;;;;;;;;;;;;;25008:223;;;;;;;;;;-1:-1:-1;25008:223:0;;;;;:::i;:::-;;:::i;10213:133::-;;;;;;;;;;-1:-1:-1;10213:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10315:19:0;;;10297:7;10315:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;10213:133;23190:208;;;;;;;;;;-1:-1:-1;23190:208:0;;;;;:::i;:::-;;:::i;6725:29::-;;;;;;;;;;-1:-1:-1;6725:29:0;;;;;:::i;:::-;;:::i;24216:414::-;;;;;;;;;;-1:-1:-1;24216:414:0;;;;;:::i;:::-;;:::i;2639:97::-;;;;;;;;;;-1:-1:-1;2639:97:0;;;;;:::i;:::-;;:::i;2970:173::-;;;;;;;;;;-1:-1:-1;2970:173:0;;;;;:::i;:::-;;:::i;7305:32::-;;;;;;;;;;;;;;;;20662:178;;;;;;;;;;-1:-1:-1;20662:178:0;;;;;:::i;:::-;;:::i;8529:24::-;;;;;;;;;;-1:-1:-1;8529:24:0;;;;-1:-1:-1;;;;;8529:24:0;;;6830:46;;;;;;;;;;-1:-1:-1;6830:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2855:107;;;;;;;;;;-1:-1:-1;2855:107:0;;;;;:::i;:::-;-1:-1:-1;;;;;2935:19:0;2911:4;2935:19;;;:14;:19;;;;;;;;;2855:107;10354:216;10458:10;10429:4;10446:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10446:32:0;;;;;;;;;;:41;;;10503:37;10429:4;;10446:32;;10503:37;;;;10481:6;16796:25:1;;16784:2;16769:18;;16650:177;10503:37:0;;;;;;;;-1:-1:-1;10558:4:0;10354:216;;;;;:::o;17109:308::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;;;;;;;;;17178:14:::1;::::0;-1:-1:-1;;;17178:14:0;::::1;;;:23;17170:54;;;::::0;-1:-1:-1;;;17170:54:0;;13270:2:1;17170:54:0::1;::::0;::::1;13252:21:1::0;13309:2;13289:18;;;13282:30;13348:20;13328:18;;;13321:48;13386:18;;17170:54:0::1;13068:342:1::0;17170:54:0::1;17235:14;:24:::0;;;::::1;-1:-1:-1::0;;;17235:24:0;::::1;;;;::::0;;17284:12:::1;17270:11;:26:::0;;;17344:10:::1;::::0;17327:28:::1;::::0;17284:12;17327:16:::1;:28::i;:::-;17307:17;:48:::0;17373:36:::1;::::0;9074:14:1;;9067:22;9049:41;;17373:36:0::1;::::0;9037:2:1;9022:18;17373:36:0::1;;;;;;;;17109:308:::0;:::o;10872:370::-;-1:-1:-1;;;;;10992:19:0;;10972:4;10992:19;;;:11;:19;;;;;;;;11012:10;10992:31;;;;;;;;-1:-1:-1;;10992:52:0;10989:186;;11094:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11094:19:0;;-1:-1:-1;11094:19:0;;;:11;:19;;;;;11114:10;11094:31;;;;;;;;;;:69;;11130:6;;11094:35;:69::i;:::-;-1:-1:-1;;;;;11060:19:0;;;;;;:11;:19;;;;;;;;11080:10;11060:31;;;;;;;:103;10989:186;11194:40;11208:6;11216:9;11227:6;11194:13;:40::i;:::-;11187:47;;10872:370;;;;;;:::o;25326:142::-;25454:4;;-1:-1:-1;;;;;25454:4:0;25379:7;10186:18;;;:9;:18;;;;;;25406:54;;25433:4;;-1:-1:-1;;;;;25433:4:0;10168:7;10186:18;;;:9;:18;;;;;;25406:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;25399:61;;25326:142;:::o;16783:119::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;16843:51:::1;::::0;16851:10:::1;::::0;16872:21:::1;16843:51:::0;::::1;;;::::0;::::1;::::0;;;16872:21;16851:10;16843:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16783:119::o:0;22494:688::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;22675:36:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;;;;;;22715:35:0;::::1;::::0;::::1;22675:75;:108;;;;-1:-1:-1::0;;;;;;22754:29:0;::::1;::::0;::::1;22675:108;:145;;;;-1:-1:-1::0;;;;;;22787:33:0;::::1;::::0;::::1;22675:145;22667:182;;;::::0;-1:-1:-1;;;22667:182:0;;13617:2:1;22667:182:0::1;::::0;::::1;13599:21:1::0;13656:2;13636:18;;;13629:30;13695:25;13675:18;;;13668:53;13738:18;;22667:182:0::1;13415:347:1::0;22667:182:0::1;22860:21;:46:::0;;-1:-1:-1;;;;;22860:46:0;;::::1;-1:-1:-1::0;;22860:46:0;;::::1;::::0;::::1;::::0;;;22917:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;22972:14:::1;:32:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;23015:18:::1;:40:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;23074:100:::1;::::0;;6637:34:1;;;6702:2;6687:18;;6680:43;;;;6739:18;;6732:43;;;;6806:2;6791:18;;6784:43;23074:100:0::1;::::0;6563:3:1;6548:19;23074:100:0::1;;;;;;;22494:688:::0;;;;:::o;20101:180::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;20177:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;20177:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20234:39;;7006:74:1;;;7096:18;;;7089:50;20234:39:0::1;::::0;6979:18:1;20234:39:0::1;;;;;;;;20101:180:::0;;:::o;21040:586::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;21200:12:::1;:28:::0;;;21239:12:::1;:28:::0;;;21278:6:::1;:16:::0;;;21305:10:::1;:24:::0;;;21355:61:::1;21318:11:::0;21355:45:::1;21287:7:::0;21355:45;21215:13;21254;21355:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:61::-;21341:11;:75:::0;;;21427:14:::1;:32:::0;;;21493:6:::1;::::0;-1:-1:-1;21478:21:0::1;21470:64;;;::::0;-1:-1:-1;;;21470:64:0;;13969:2:1;21470:64:0::1;::::0;::::1;13951:21:1::0;14008:2;13988:18;;;13981:30;14047:32;14027:18;;;14020:60;14097:18;;21470:64:0::1;13767:354:1::0;21470:64:0::1;21552:66;::::0;;18428:25:1;;;18484:2;18469:18;;18462:34;;;18512:18;;;18505:34;;;18570:2;18555:18;;18548:34;;;21552:66:0::1;::::0;18415:3:1;18400:19;21552:66:0::1;;;;;;;;21040:586:::0;;;;;:::o;10578:122::-;10633:4;10657:35;10665:7;-1:-1:-1;;10657:7:0;:35::i;25239:75::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;25296:10:::1;:8;:10::i;:::-;25239:75::o:0;19293:212::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;19377:12:::1;::::0;:23:::1;::::0;19394:5:::1;19377:16;:23::i;:::-;19368:6;:32;19360:67;;;::::0;-1:-1:-1;;;19360:67:0;;10417:2:1;19360:67:0::1;::::0;::::1;10399:21:1::0;10456:2;10436:18;;;10429:30;10495:24;10475:18;;;10468:52;10537:18;;19360:67:0::1;10215:346:1::0;19360:67:0::1;19438:12;:21:::0;;;19477:20:::1;::::0;16796:25:1;;;19477:20:0::1;::::0;16784:2:1;16769:18;19477:20:0::1;16650:177:1::0;19513:222:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;19599:12:::1;::::0;:23:::1;::::0;19616:5:::1;19599:16;:23::i;:::-;19590:6;:32;19582:67;;;::::0;-1:-1:-1;;;19582:67:0;;10417:2:1;19582:67:0::1;::::0;::::1;10399:21:1::0;10456:2;10436:18;;;10429:30;10495:24;10475:18;;;10468:52;10537:18;;19582:67:0::1;10215:346:1::0;19582:67:0::1;19660:16;:25:::0;;;19703:24:::1;::::0;16796:25:1;;;19703:24:0::1;::::0;16784:2:1;16769:18;19703:24:0::1;16650:177:1::0;20488:166:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;20572:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;20572:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20618;;7006:74:1;;;7096:18;;;7089:50;20618:28:0::1;::::0;6979:18:1;20618:28:0::1;6838:307:1::0;24638:362:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;24766:3:::1;24747:22:::0;::::1;24738:73;;;::::0;-1:-1:-1;;;24738:73:0;;15766:2:1;24738:73:0::1;::::0;::::1;15748:21:1::0;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:35;15940:19;;24738:73:0::1;15564:401:1::0;24738:73:0::1;24827:9;24822:111;24838:20:::0;;::::1;24822:111;;;24915:6;24880:18;:32;24899:9;;24909:1;24899:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24880:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;24880:32:0;:41;;-1:-1:-1;;24880:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24860:3:::1;::::0;::::1;:::i;:::-;;;24822:111;;;;24950:32;24964:9;;24975:6;24950:32;;;;;;;;:::i;:::-;;;;;;;;24638:362:::0;;;:::o;16910:168::-;2491:10;16998:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;17022::::1;::::0;;;;17051:10:::1;17022:48;::::0;::::1;7324:74:1::0;7414:18;;;7407:34;;;-1:-1:-1;;;;;17022:28:0;::::1;::::0;::::1;::::0;7297:18:1;;17022:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19743:350::-:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;19871:3:::1;19852:22:::0;::::1;19843:73;;;::::0;-1:-1:-1;;;19843:73:0;;15766:2:1;19843:73:0::1;::::0;::::1;15748:21:1::0;15805:2;15785:18;;;15778:30;15844:34;15824:18;;;15817:62;-1:-1:-1;;;15895:18:1;;;15888:35;15940:19;;19843:73:0::1;15564:401:1::0;19843:73:0::1;19932:9;19927:106;19943:20:::0;;::::1;19927:106;;;20015:6;19985:13;:27;19999:9;;20009:1;19999:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19985:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19985:27:0;:36;;-1:-1:-1;;19985:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19965:3:::1;::::0;::::1;:::i;:::-;;;19927:106;;;;20050:35;20067:9;;20078:6;20050:35;;;;;;;;:::i;22248:236::-:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;22348:6:::1;;22333:12;:21;22325:64;;;::::0;-1:-1:-1;;;22325:64:0;;13969:2:1;22325:64:0::1;::::0;::::1;13951:21:1::0;14008:2;13988:18;;;13981:30;14047:32;14027:18;;;14020:60;14097:18;;22325:64:0::1;13767:354:1::0;22325:64:0::1;22400:11;:26:::0;;;22444:32:::1;::::0;16796:25:1;;;22444:32:0::1;::::0;16769:18:1;22444:32:0::1;16650:177:1::0;23406:802:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;23512:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;23504:72;;;::::0;-1:-1:-1;;;23504:72:0;;11821:2:1;23504:72:0::1;::::0;::::1;11803:21:1::0;11860:2;11840:18;;;11833:30;11899:19;11879:18;;;11872:47;11936:18;;23504:72:0::1;11619:341:1::0;23504:72:0::1;-1:-1:-1::0;;;;;23593:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;23593:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23651:482:::1;;23680:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23680:24:0;;;;;::::1;::::0;;-1:-1:-1;;23680:24:0::1;-1:-1:-1::0;;;;;23680:24:0;::::1;;::::0;;23651:482:::1;;;23751:12;:19:::0;23773:1:::1;-1:-1:-1::0;23743:51:0::1;;;::::0;-1:-1:-1;;;23743:51:0;;12926:2:1;23743:51:0::1;::::0;::::1;12908:21:1::0;12965:2;12945:18;;;12938:30;13004:17;12984:18;;;12977:45;13039:18;;23743:51:0::1;12724:339:1::0;23743:51:0::1;23818:9;23813:305;23837:12;:19:::0;23833:23;::::1;23813:305;;;23909:5;-1:-1:-1::0;;;;;23890:24:0::1;:12;23903:1;23890:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;23890:15:0::1;:24;23886:213;;;23961:12;23974:19:::0;;:23:::1;::::0;23996:1:::1;::::0;23974:23:::1;:::i;:::-;23961:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;23943:12:::1;:15:::0;;-1:-1:-1;;;;;23961:37:0;;::::1;::::0;23956:1;;23943:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;23943:55:0::1;;;;;-1:-1:-1::0;;;;;23943:55:0::1;;;;;;24025:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24025:18:0;;;;;-1:-1:-1;;24025:18:0::1;::::0;;;;;24070:5:::1;;23886:213;23858:3:::0;::::1;::::0;::::1;:::i;:::-;;;;23813:305;;;;23651:482;24154:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;24154:42:0;::::1;::::0;::::1;::::0;;;::::1;23406:802:::0;;:::o;20289:191::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;20373:2:::1;20363:7;:12;20355:43;;;::::0;-1:-1:-1;;;20355:43:0;;10768:2:1;20355:43:0::1;::::0;::::1;10750:21:1::0;10807:2;10787:18;;;10780:30;10846:20;10826:18;;;10819:48;10884:18;;20355:43:0::1;10566:342:1::0;20355:43:0::1;20409:10;:20:::0;;;20455:17:::1;::::0;16796:25:1;;;20455:17:0::1;::::0;16784:2:1;16769:18;20455:17:0::1;16650:177:1::0;10708:156:0;10788:4;10812:44;10826:10;10838:9;10849:6;10812:13;:44::i;2537:94::-;2799:4;2834:5;-1:-1:-1;;;;;2834:5:0;2396:10;2823:16;2380:38;;;;-1:-1:-1;;;2380:38:0;;15432:2:1;2380:38:0;;;15414:21:1;15471:1;15451:18;;;15444:29;-1:-1:-1;;;15489:18:1;;;15482:36;15535:18;;2380:38:0;15230:329:1;2380:38:0;-1:-1:-1;;;;;2597:19:0::1;;::::0;;;2619:4:::1;2597:19;::::0;;;;;;;:26;;-1:-1:-1;;2597:26:0::1;::::0;;::::1;::::0;;2537:94::o;20848:184::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;20938:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;20938:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20990;;7006:74:1;;;7096:18;;;7089:50;20990:34:0::1;::::0;6979:18:1;20990:34:0::1;6838:307:1::0;21634:606:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;21795:16:::1;:32:::0;;;21838:16:::1;:32:::0;;;21881:10:::1;:20:::0;;;21912:14:::1;:28:::0;;;21966:62:::1;21929:11:::0;21966:45:::1;21894:7:::0;21966:45;21814:13;21857;21966:17:::1;:32::i;:62::-;21951:12;:77:::0;;;22039:14:::1;:32:::0;;;22106:6:::1;::::0;-1:-1:-1;22090:22:0::1;22082:65;;;::::0;-1:-1:-1;;;22082:65:0;;13969:2:1;22082:65:0::1;::::0;::::1;13951:21:1::0;14008:2;13988:18;;;13981:30;14047:32;14027:18;;;14020:60;14097:18;;22082:65:0::1;13767:354:1::0;22082:65:0::1;22165:67;::::0;;18428:25:1;;;18484:2;18469:18;;18462:34;;;18512:18;;;18505:34;;;18570:2;18555:18;;18548:34;;;22165:67:0::1;::::0;18415:3:1;18400:19;22165:67:0::1;18197:391:1::0;25008:223:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;25112:1:::1;25103:6;:10;25095:45;;;::::0;-1:-1:-1;;;25095:45:0;;10417:2:1;25095:45:0::1;::::0;::::1;10399:21:1::0;10456:2;10436:18;;;10429:30;10495:24;10475:18;;;10468:52;10537:18;;25095:45:0::1;10215:346:1::0;25095:45:0::1;25151:17;:26:::0;;;25195:28:::1;::::0;16796:25:1;;;25195:28:0::1;::::0;16784:2:1;16769:18;25195:28:0::1;16650:177:1::0;23190:208:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;23282:11:::1;:22:::0;;;::::1;-1:-1:-1::0;;;23282:22:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;23315:13:::1;:23:::0;;;23356:34:::1;::::0;;9269:41:1;;;9341:2;9326:18;;9319:34;;;23356::0::1;::::0;9242:18:1;23356:34:0::1;9101:258:1::0;6725:29:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6725:29:0;;-1:-1:-1;6725:29:0;:::o;24216:414::-;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;24365:1:::1;24348:14;:18;24340:53;;;::::0;-1:-1:-1;;;24340:53:0;;10417:2:1;24340:53:0::1;::::0;::::1;10399:21:1::0;10456:2;10436:18;;;10429:30;10495:24;10475:18;;;10468:52;10537:18;;24340:53:0::1;10215:346:1::0;24340:53:0::1;24404:17;:34:::0;;;24449:24:::1;:38:::0;;-1:-1:-1;;24449:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;24498:28:::1;:40:::0;;;24556:66:::1;::::0;;17028:25:1;;;17084:2;17069:18;;17062:50;;;;17128:18;;17121:34;;;24556:66:0::1;::::0;17016:2:1;17001:18;24556:66:0::1;16832:329:1::0;2639:97:0;2799:4;2834:5;-1:-1:-1;;;;;2834:5:0;2396:10;2823:16;2380:38;;;;-1:-1:-1;;;2380:38:0;;15432:2:1;2380:38:0;;;15414:21:1;15471:1;15451:18;;;15444:29;-1:-1:-1;;;15489:18:1;;;15482:36;15535:18;;2380:38:0;15230:329:1;2380:38:0;-1:-1:-1;;;;;2701:19:0::1;2723:5;2701:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;2701:27:0::1;::::0;;2639:97::o;2970:173::-;2799:4;2834:5;-1:-1:-1;;;;;2834:5:0;2396:10;2823:16;2380:38;;;;-1:-1:-1;;;2380:38:0;;15432:2:1;2380:38:0;;;15414:21:1;15471:1;15451:18;;;15444:29;-1:-1:-1;;;15489:18:1;;;15482:36;15535:18;;2380:38:0;15230:329:1;2380:38:0;3046:5:::1;:11:::0;;-1:-1:-1;;3046:11:0::1;-1:-1:-1::0;;;;;3046:11:0;::::1;::::0;;::::1;::::0;;3068:19;;;-1:-1:-1;3068:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;3068:26:0::1;::::0;;::::1;::::0;;;3110:25;;6021:74:1;;;3110:25:0::1;::::0;5994:18:1;3110:25:0::1;5875:226:1::0;20662:178:0;2491:10;2911:4;2935:19;;;:14;:19;;;;;;;;2470:48;;;;-1:-1:-1;;;2470:48:0;;16172:2:1;2470:48:0;;;16154:21:1;16211:2;16191:18;;;16184:30;-1:-1:-1;;;16230:18:1;;;16223:41;16281:18;;2470:48:0;15970:335:1;2470:48:0;-1:-1:-1;;;;;20750:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;20750:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20800;;7006:74:1;;;7096:18;;;7089:50;20800:32:0::1;::::0;6979:18:1;20800:32:0::1;6838:307:1::0;92:181:0;150:7;;182:5;186:1;182;:5;:::i;:::-;170:17;;211:1;206;:6;;198:46;;;;-1:-1:-1;;;198:46:0;;12570:2:1;198:46:0;;;12552:21:1;12609:2;12589:18;;;12582:30;12648:29;12628:18;;;12621:57;12695:18;;198:46:0;12368:351:1;421:192:0;507:7;543:12;535:6;;;;527:29;;;;-1:-1:-1;;;527:29:0;;;;;;;;:::i;:::-;-1:-1:-1;567:9:0;579:5;583:1;579;:5;:::i;:::-;567:17;421:192;-1:-1:-1;;;;;421:192:0:o;11250:2622::-;-1:-1:-1;;;;;11368:21:0;;11342:4;11368:21;;;:13;:21;;;;;;;;11367:22;:51;;;;-1:-1:-1;;;;;;11394:24:0;;;;;;:13;:24;;;;;;;;11393:25;11367:51;11359:74;;;;-1:-1:-1;;;11359:74:0;;16512:2:1;11359:74:0;;;16494:21:1;16551:2;16531:18;;;16524:30;16590:13;16570:18;;;16563:41;16621:18;;11359:74:0;16310:335:1;11359:74:0;11447:6;;;;11444:63;;;11463:41;11478:6;11486:9;11497:6;11463:14;:41::i;:::-;11456:48;;;;11444:63;-1:-1:-1;;;;;11523:19:0;;;;;;:11;:19;;;;;;;;11522:20;:47;;;;-1:-1:-1;;;;;;11547:22:0;;;;;;:11;:22;;;;;;;;11546:23;11522:47;11519:124;;;11593:14;;-1:-1:-1;;;11593:14:0;;;;11585:46;;;;-1:-1:-1;;;11585:46:0;;14328:2:1;11585:46:0;;;14310:21:1;14367:2;14347:18;;;14340:30;14406:22;14386:18;;;14379:50;14446:18;;11585:46:0;14126:344:1;11585:46:0;11658:16;:14;:16::i;:::-;11655:35;;;11677:10;:8;:10::i;:::-;-1:-1:-1;;;;;11752:33:0;;11704:22;11752:33;;;:25;:33;;;;;;11729:6;;11752:33;;11749:1887;;;-1:-1:-1;;;;;11812:22:0;;;;;;:11;:22;;;;;;;;11808:365;;11899:16;;-1:-1:-1;;;;;11863:20:0;;;;;;:9;:20;;;;;;:32;;11888:6;11863:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;11919:28:0;;;;;;:17;:28;;;;;;;;11863:84;11855:128;;;;-1:-1:-1;;;11855:128:0;;11461:2:1;11855:128:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;11855:128:0;11259:355:1;11855:128:0;12020:12;;12010:6;:22;;:52;;;-1:-1:-1;;;;;;12036:26:0;;;;;;:15;:26;;;;;;;;12010:52;12002:82;;;;-1:-1:-1;;;12002:82:0;;11115:2:1;12002:82:0;;;11097:21:1;11154:2;11134:18;;;11127:30;-1:-1:-1;;;11173:18:1;;;11166:47;11230:18;;12002:82:0;10913:341:1;12002:82:0;12120:37;12131:6;12139:9;12150:6;12120:10;:37::i;:::-;12103:54;;11808:365;11749:1887;;;-1:-1:-1;;;;;12195:36:0;;;;;;:25;:36;;;;;;;;12192:1444;;;-1:-1:-1;;;;;12259:19:0;;;;;;:11;:19;;;;;;;;12255:592;;12317:12;;12307:6;:22;;:49;;;-1:-1:-1;;;;;;12333:23:0;;;;;;:15;:23;;;;;;;;12307:49;12299:79;;;;-1:-1:-1;;;12299:79:0;;11115:2:1;12299:79:0;;;11097:21:1;11154:2;11134:18;;;11127:30;-1:-1:-1;;;11173:18:1;;;11166:47;11230:18;;12299:79:0;10913:341:1;12299:79:0;12414:27;12426:6;12434;12414:11;:27::i;:::-;-1:-1:-1;;;;;12466:26:0;;;;;;:18;:26;;;;;;12397:44;;-1:-1:-1;12466:26:0;;:55;;;;-1:-1:-1;12497:24:0;;;;12466:55;12462:370;;;-1:-1:-1;;;;;12550:28:0;;;;;;:20;:28;;;;;;12581:15;-1:-1:-1;12542:82:0;;;;-1:-1:-1;;;12542:82:0;;15079:2:1;12542:82:0;;;15061:21:1;15118:2;15098:18;;;15091:30;15157:26;15137:18;;;15130:54;15201:18;;12542:82:0;14877:348:1;12542:82:0;12661:17;;12651:6;:27;;12643:73;;;;-1:-1:-1;;;12643:73:0;;12167:2:1;12643:73:0;;;12149:21:1;12206:2;12186:18;;;12179:30;12245:34;12225:18;;;12218:62;-1:-1:-1;;;12296:18:1;;;12289:32;12338:19;;12643:73:0;11965:398:1;12643:73:0;12784:28;;12766:46;;:15;:46;:::i;:::-;-1:-1:-1;;;;;12735:28:0;;;;;;:20;:28;;;;;:77;12192:1444;;;-1:-1:-1;;;;;12885:19:0;;;;;;:11;:19;;;;;;;;12880:745;;12970:16;;-1:-1:-1;;;;;12934:20:0;;;;;;:9;:20;;;;;;:32;;12959:6;12934:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;12990:28:0;;;;;;:17;:28;;;;;;;;12934:84;12926:128;;;;-1:-1:-1;;;12926:128:0;;11461:2:1;12926:128:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;12926:128:0;11259:355:1;12926:128:0;13091:12;;13081:6;:22;;:49;;;-1:-1:-1;;;;;;13107:23:0;;;;;;:15;:23;;;;;;;;13081:49;13073:79;;;;-1:-1:-1;;;13073:79:0;;11115:2:1;13073:79:0;;;11097:21:1;11154:2;11134:18;;;11127:30;-1:-1:-1;;;11173:18:1;;;11166:47;11230:18;;13073:79:0;10913:341:1;13073:79:0;13188:31;13204:6;13212;13188:15;:31::i;:::-;-1:-1:-1;;;;;13244:26:0;;;;;;:18;:26;;;;;;13171:48;;-1:-1:-1;13244:26:0;;:55;;;;-1:-1:-1;13275:24:0;;;;13244:55;13240:370;;;-1:-1:-1;;;;;13328:28:0;;;;;;:20;:28;;;;;;13359:15;-1:-1:-1;13320:82:0;;;;-1:-1:-1;;;13320:82:0;;15079:2:1;13320:82:0;;;15061:21:1;15118:2;15098:18;;;15091:30;15157:26;15137:18;;;15130:54;15201:18;;13320:82:0;14877:348:1;13320:82:0;13439:17;;13429:6;:27;;13421:73;;;;-1:-1:-1;;;13421:73:0;;12167:2:1;13421:73:0;;;12149:21:1;12206:2;12186:18;;;12179:30;12245:34;12225:18;;;12218:62;-1:-1:-1;;;12296:18:1;;;12289:32;12338:19;;13421:73:0;11965:398:1;13421:73:0;13562:28;;13544:46;;:15;:46;:::i;:::-;-1:-1:-1;;;;;13513:28:0;;;;;;:20;:28;;;;;:77;13240:370;-1:-1:-1;;;;;13668:17:0;;;;;;:9;:17;;;;;;:29;;13690:6;13668:21;:29::i;:::-;-1:-1:-1;;;;;13648:17:0;;;;;;;:9;:17;;;;;;:49;;;;13731:20;;;;;;;:40;;13756:14;13731:24;:40::i;:::-;-1:-1:-1;;;;;13708:20:0;;;;;;;:9;:20;;;;;;;:63;;;;13799:43;;;;;;;;;;13827:14;16796:25:1;;16784:2;16769:18;;16650:177;13799:43:0;;;;;;;;-1:-1:-1;13860:4:0;;11250:2622;-1:-1:-1;;;;11250:2622:0:o;279:136::-;337:7;364:43;368:1;371;364:43;;;;;;;;;;;;;;;;;:3;:43::i;17425:1834::-;8777:6;:13;;-1:-1:-1;;8777:13:0;8786:4;8777:13;;;17518:16:::1;::::0;17501:12:::1;::::0;8777:6;;17501:34:::1;::::0;:12;:16:::1;:34::i;:::-;17474:61;;17546:20;17568:65;17618:14;;17568:45;17602:10;;17568:29;17584:12;;17568:11;;:15;;:29;;;;:::i;:65::-;17695:4;17646:28;17677:24:::0;;;:9:::1;:24;::::0;;;;;17546:87;;-1:-1:-1;17738:67:0::1;17803:1;17738:60;17546:87:::0;17738:60;17677:24;17763:16;17738:24:::1;:42::i;:::-;:46:::0;::::1;:60::i;:67::-;17712:93:::0;-1:-1:-1;17816:20:0::1;17839:41;:20:::0;17712:93;17839:24:::1;:41::i;:::-;17975:16;::::0;;17989:1:::1;17975:16:::0;;;;;::::1;::::0;;17816:64;;-1:-1:-1;17917:21:0::1;::::0;17893::::1;::::0;17975:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;17975:16:0::1;17951:40;;18020:4;18002;18007:1;18002:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18002:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;18046:4:::1;::::0;18036:7;;18046:4;::::1;::::0;18036;;18046;;18036:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;18036:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;18063:6:::1;::::0;:188:::1;::::0;;;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;18135:12;;18063:6:::1;::::0;18178:4;;18205::::1;::::0;18225:15:::1;::::0;18063:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18264:17;18284:40;18310:13;18284:21;:25;;:40;;;;:::i;:::-;18264:60:::0;-1:-1:-1;18337:19:0::1;18359:41;18376:23;:16:::0;18397:1:::1;18376:20;:23::i;:::-;18359:12:::0;;:16:::1;:41::i;:::-;18337:63;;18421:26;18450:73;18521:1;18450:66;18504:11;18450:49;18464:34;18481:16;;18464:12;;:16;;:34;;;;:::i;:::-;18450:9:::0;;:13:::1;:49::i;:73::-;18421:102;;18534:26;18563:66;18617:11;18563:49;18577:34;18594:16;;18577:12;;:16;;:34;;;;:::i;:::-;18563:9:::0;;:13:::1;:49::i;:66::-;18534:95;;18640:20;18663:54;18705:11;18663:37;18677:22;18688:10;;18677:6;;:10;;:22;;;;:::i;18663:54::-;18759:20;::::0;18751:65:::1;::::0;18640:77;;-1:-1:-1;18731:15:0::1;::::0;-1:-1:-1;;;;;18759:20:0;;::::1;::::0;18793:18;;18731:15;18751:65;18731:15;18751:65;18793:18;18759:20;18751:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;18851:14:0::1;::::0;18843:53:::1;::::0;18730:86;;-1:-1:-1;;;;;;18851:14:0::1;::::0;18879:12;;18843:53:::1;::::0;;;18879:12;18851:14;18843:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;18930:5:0::1;::::0;-1:-1:-1;;18951:19:0;;;-1:-1:-1;18948:294:0::1;;18986:6;::::0;19160:21:::1;::::0;18986:244:::1;::::0;;;;19062:4:::1;18986:244;::::0;::::1;7816:34:1::0;7866:18;;;7859:34;;;18986:6:0::1;7909:18:1::0;;;7902:34;;;7952:18;;;7945:34;-1:-1:-1;;;;;19160:21:0;;::::1;7995:19:1::0;;;7988:44;19200:15:0::1;8048:19:1::0;;;8041:35;18986:6:0;::::1;::::0;:22:::1;::::0;19016:18;;7727:19:1;;18986:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18948:294;-1:-1:-1::0;;8795:6:0;:14;;-1:-1:-1;;8795:14:0;;;-1:-1:-1;;;;;;;;;;;17425:1834:0:o;875:132::-;933:7;960:39;964:1;967;960:39;;;;;;;;;;;;;;;;;:3;:39::i;13884:330::-;14014:53;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14014:17:0;;13977:4;14014:17;;;:9;:17;;;;;;;:53;;14036:6;;14014:21;:53::i;:::-;-1:-1:-1;;;;;13994:17:0;;;;;;;:9;:17;;;;;;:73;;;;14101:20;;;;;;;:32;;14126:6;14101:24;:32::i;:::-;-1:-1:-1;;;;;14078:20:0;;;;;;;:9;:20;;;;;;;:55;;;;14149:35;;;;;;;;;;14177:6;16796:25:1;;16784:2;16769:18;;16650:177;14149:35:0;;;;;;;;-1:-1:-1;14202:4:0;13884:330;;;;;:::o;16549:226::-;16658:10;16598:4;16632:37;;;:25;:37;;;;;;;;16631:38;:58;;;;-1:-1:-1;16683:6:0;;;;16682:7;16631:58;:82;;;;-1:-1:-1;16702:11:0;;-1:-1:-1;;;16702:11:0;;;;16631:82;:136;;;;-1:-1:-1;;16754:13:0;;16744:4;16726:24;;;;:9;:24;;;;;;:41;;;16549:226::o;14235:970::-;14324:7;14377:17;;14362:12;:32;14358:189;;;14428:4;;-1:-1:-1;;;;;14415:17:0;;;14428:4;;14415:17;;;;:49;;-1:-1:-1;14457:6:0;;-1:-1:-1;;;;;14436:28:0;;;14457:6;;14436:28;;14415:49;14411:121;;;-1:-1:-1;;;;;14485:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;14485:31:0;14512:4;14485:31;;;14411:121;14567:17;14587:59;14631:14;;14587:39;14598:27;14614:10;;14598:11;;:15;;:27;;;;:::i;:::-;14587:6;;:10;:39::i;:59::-;14567:79;;14657:24;14684:42;14711:14;;14684:22;14695:10;;14684:6;:10;;:22;;;;:::i;:42::-;14657:69;-1:-1:-1;14737:22:0;14762:31;:9;14657:69;14762:13;:31::i;:::-;14851:4;14833:24;;;;:9;:24;;;;;;14737:56;;-1:-1:-1;14833:39:0;;14862:9;14833:28;:39::i;:::-;14824:4;14806:24;;;;:9;:24;;;;;;;:66;;;;14888:42;;-1:-1:-1;;;;;14888:42:0;;;;;;;14920:9;16796:25:1;;16784:2;16769:18;;16650:177;14888:42:0;;;;;;;;14946:20;;14943:209;;15025:18;;-1:-1:-1;;;;;15025:18:0;15015:29;;;;:9;:29;;;;;;:51;;15049:16;15015:33;:51::i;:::-;14993:18;;;-1:-1:-1;;;;;14993:18:0;;;14983:29;;;;:9;:29;;;;;;;;;:83;;;;15103:18;;15086:54;;16796:25:1;;;15103:18:0;;;;15086:54;;;;;;16769:18:1;15086:54:0;;;;;;;14943:209;15171:26;:6;15182:14;15171:10;:26::i;:::-;15164:33;14235:970;-1:-1:-1;;;;;;;14235:970:0:o;15213:753::-;15284:7;15305:17;15325:64;15374:14;;15325:44;15336:32;15353:14;;15336:12;;:16;;:32;;;;:::i;15325:64::-;15305:84;;15400:24;15427:46;15458:14;;15427:26;15438:14;;15427:6;:10;;:26;;;;:::i;:46::-;15400:73;-1:-1:-1;15484:22:0;15509:31;:9;15400:73;15509:13;:31::i;:::-;15598:4;15580:24;;;;:9;:24;;;;;;15484:56;;-1:-1:-1;15580:39:0;;15609:9;15580:28;:39::i;:::-;15571:4;15553:24;;;;:9;:24;;;;;;;:66;;;;15635:42;;-1:-1:-1;;;;;15635:42:0;;;;;;;15667:9;16796:25:1;;16784:2;16769:18;;16650:177;15635:42:0;;;;;;;;15693:20;;15690:209;;15772:18;;-1:-1:-1;;;;;15772:18:0;15762:29;;;;:9;:29;;;;;;:51;;15796:16;15762:33;:51::i;:::-;15740:18;;;-1:-1:-1;;;;;15740:18:0;;;15730:29;;;;:9;:29;;;;;;;;;:83;;;;15850:18;;15833:54;;16796:25:1;;;15850:18:0;;;;15833:54;;;;;;16769:18:1;15833:54:0;;;;;;;15690:209;15918:26;:6;15929:14;15918:10;:26::i;:::-;15911:33;15213:753;-1:-1:-1;;;;;;15213:753:0:o;15974:563::-;16087:11;;16128:17;;16049:7;;16087:11;16113:12;:32;16109:83;;;-1:-1:-1;16173:2:0;16109:83;16247:14;;16202:17;;16222:40;;:20;:6;16233:8;16222:10;:20::i;:40::-;16202:60;-1:-1:-1;16303:13:0;;16299:176;;16378:4;16360:24;;;;:9;:24;;;;;;:39;;16389:9;16360:28;:39::i;:::-;16351:4;16333:24;;;;:9;:24;;;;;;;:66;;;;16420:42;;-1:-1:-1;;;;;16420:42:0;;;;;;;16452:9;16796:25:1;;16784:2;16769:18;;16650:177;16420:42:0;;;;;;;;16299:176;16507:21;:6;16518:9;16507:10;:21::i;619:250::-;677:7;701:6;697:47;;-1:-1:-1;731:1:0;724:8;;697:47;756:9;768:5;772:1;768;:5;:::i;:::-;756:17;-1:-1:-1;801:1:0;792:5;796:1;756:17;792:5;:::i;:::-;:10;784:56;;;;-1:-1:-1;;;784:56:0;;14677:2:1;784:56:0;;;14659:21:1;14716:2;14696:18;;;14689:30;14755:34;14735:18;;;14728:62;14826:3;14806:18;;;14799:31;14847:19;;784:56:0;14475:397:1;1013:189:0;1099:7;1134:12;1127:5;1119:28;;;;-1:-1:-1;;;1119:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1158:9:0;1170:5;1174:1;1170;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;526:388::-;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;-1:-1:-1;836:2:1;821:18;;808:32;849:33;808:32;849:33;:::i;:::-;901:7;891:17;;;526:388;;;;;:::o;919:671::-;1005:6;1013;1021;1029;1082:3;1070:9;1061:7;1057:23;1053:33;1050:53;;;1099:1;1096;1089:12;1050:53;1138:9;1125:23;1157:31;1182:5;1157:31;:::i;:::-;1207:5;-1:-1:-1;1264:2:1;1249:18;;1236:32;1277:33;1236:32;1277:33;:::i;:::-;1329:7;-1:-1:-1;1388:2:1;1373:18;;1360:32;1401:33;1360:32;1401:33;:::i;:::-;1453:7;-1:-1:-1;1512:2:1;1497:18;;1484:32;1525:33;1484:32;1525:33;:::i;:::-;919:671;;;;-1:-1:-1;919:671:1;;-1:-1:-1;;919:671:1:o;1595:456::-;1672:6;1680;1688;1741:2;1729:9;1720:7;1716:23;1712:32;1709:52;;;1757:1;1754;1747:12;1709:52;1796:9;1783:23;1815:31;1840:5;1815:31;:::i;:::-;1865:5;-1:-1:-1;1922:2:1;1907:18;;1894:32;1935:33;1894:32;1935:33;:::i;:::-;1595:456;;1987:7;;-1:-1:-1;;;2041:2:1;2026:18;;;;2013:32;;1595:456::o;2056:382::-;2121:6;2129;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2237:9;2224:23;2256:31;2281:5;2256:31;:::i;:::-;2306:5;-1:-1:-1;2363:2:1;2348:18;;2335:32;2376:30;2335:32;2376:30;:::i;2443:315::-;2511:6;2519;2572:2;2560:9;2551:7;2547:23;2543:32;2540:52;;;2588:1;2585;2578:12;2540:52;2627:9;2614:23;2646:31;2671:5;2646:31;:::i;:::-;2696:5;2748:2;2733:18;;;;2720:32;;-1:-1:-1;;;2443:315:1:o;2763:750::-;2855:6;2863;2871;2924:2;2912:9;2903:7;2899:23;2895:32;2892:52;;;2940:1;2937;2930:12;2892:52;2980:9;2967:23;3009:18;3050:2;3042:6;3039:14;3036:34;;;3066:1;3063;3056:12;3036:34;3104:6;3093:9;3089:22;3079:32;;3149:7;3142:4;3138:2;3134:13;3130:27;3120:55;;3171:1;3168;3161:12;3120:55;3211:2;3198:16;3237:2;3229:6;3226:14;3223:34;;;3253:1;3250;3243:12;3223:34;3308:7;3301:4;3291:6;3288:1;3284:14;3280:2;3276:23;3272:34;3269:47;3266:67;;;3329:1;3326;3319:12;3266:67;3360:4;3352:13;;;;-1:-1:-1;3384:6:1;-1:-1:-1;;3425:20:1;;3412:34;3455:28;3412:34;3455:28;:::i;:::-;3502:5;3492:15;;;2763:750;;;;;:::o;3518:241::-;3574:6;3627:2;3615:9;3606:7;3602:23;3598:32;3595:52;;;3643:1;3640;3633:12;3595:52;3682:9;3669:23;3701:28;3723:5;3701:28;:::i;3764:245::-;3831:6;3884:2;3872:9;3863:7;3859:23;3855:32;3852:52;;;3900:1;3897;3890:12;3852:52;3932:9;3926:16;3951:28;3973:5;3951:28;:::i;4014:309::-;4079:6;4087;4140:2;4128:9;4119:7;4115:23;4111:32;4108:52;;;4156:1;4153;4146:12;4108:52;4195:9;4182:23;4214:28;4236:5;4214:28;:::i;4328:180::-;4387:6;4440:2;4428:9;4419:7;4415:23;4411:32;4408:52;;;4456:1;4453;4446:12;4408:52;-1:-1:-1;4479:23:1;;4328:180;-1:-1:-1;4328:180:1:o;4513:377::-;4587:6;4595;4603;4656:2;4644:9;4635:7;4631:23;4627:32;4624:52;;;4672:1;4669;4662:12;4624:52;4708:9;4695:23;4685:33;;4768:2;4757:9;4753:18;4740:32;4781:28;4803:5;4781:28;:::i;4895:306::-;4983:6;4991;4999;5052:2;5040:9;5031:7;5027:23;5023:32;5020:52;;;5068:1;5065;5058:12;5020:52;5097:9;5091:16;5081:26;;5147:2;5136:9;5132:18;5126:25;5116:35;;5191:2;5180:9;5176:18;5170:25;5160:35;;4895:306;;;;;:::o;5206:454::-;5301:6;5309;5317;5325;5333;5386:3;5374:9;5365:7;5361:23;5357:33;5354:53;;;5403:1;5400;5393:12;5354:53;-1:-1:-1;;5426:23:1;;;5496:2;5481:18;;5468:32;;-1:-1:-1;5547:2:1;5532:18;;5519:32;;5598:2;5583:18;;5570:32;;-1:-1:-1;5649:3:1;5634:19;5621:33;;-1:-1:-1;5206:454:1;-1:-1:-1;5206:454:1:o;8087:817::-;8309:2;8321:21;;;8294:18;;8377:22;;;8261:4;8456:6;8430:2;8415:18;;8261:4;8490:327;8504:6;8501:1;8498:13;8490:327;;;8579:6;8566:20;8599:31;8624:5;8599:31;:::i;:::-;-1:-1:-1;;;;;8655:54:1;8643:67;;8733:4;8792:15;;;;8757:12;;;;8526:1;8519:9;8490:327;;;8494:3;8834;8826:11;;;;8889:6;8882:14;8875:22;8868:4;8857:9;8853:20;8846:52;8087:817;;;;;;:::o;9613:597::-;9725:4;9754:2;9783;9772:9;9765:21;9815:6;9809:13;9858:6;9853:2;9842:9;9838:18;9831:34;9883:1;9893:140;9907:6;9904:1;9901:13;9893:140;;;10002:14;;;9998:23;;9992:30;9968:17;;;9987:2;9964:26;9957:66;9922:10;;9893:140;;;10051:6;10048:1;10045:13;10042:91;;;10121:1;10116:2;10107:6;10096:9;10092:22;10088:31;10081:42;10042:91;-1:-1:-1;10194:2:1;10173:15;-1:-1:-1;;10169:29:1;10154:45;;;;10201:2;10150:54;;9613:597;-1:-1:-1;;;9613:597:1:o;17166:1026::-;17428:4;17476:3;17465:9;17461:19;17507:6;17496:9;17489:25;17533:2;17571:6;17566:2;17555:9;17551:18;17544:34;17614:3;17609:2;17598:9;17594:18;17587:31;17638:6;17673;17667:13;17704:6;17696;17689:22;17742:3;17731:9;17727:19;17720:26;;17781:2;17773:6;17769:15;17755:29;;17802:1;17812:218;17826:6;17823:1;17820:13;17812:218;;;17891:13;;-1:-1:-1;;;;;17887:62:1;17875:75;;18005:15;;;;17970:12;;;;17848:1;17841:9;17812:218;;;-1:-1:-1;;;;;;;18086:55:1;;;;18081:2;18066:18;;18059:83;-1:-1:-1;;;18173:3:1;18158:19;18151:35;18047:3;17166:1026;-1:-1:-1;;;17166:1026:1:o;18782:128::-;18822:3;18853:1;18849:6;18846:1;18843:13;18840:39;;;18859:18;;:::i;:::-;-1:-1:-1;18895:9:1;;18782:128::o;18915:274::-;18955:1;18981;18971:189;;-1:-1:-1;;;19013:1:1;19006:88;19117:4;19114:1;19107:15;19145:4;19142:1;19135:15;18971:189;-1:-1:-1;19174:9:1;;18915:274::o;19194:168::-;19234:7;19300:1;19296;19292:6;19288:14;19285:1;19282:21;19277:1;19270:9;19263:17;19259:45;19256:71;;;19307:18;;:::i;:::-;-1:-1:-1;19347:9:1;;19194:168::o;19367:125::-;19407:4;19435:1;19432;19429:8;19426:34;;;19440:18;;:::i;:::-;-1:-1:-1;19477:9:1;;19367:125::o;19497:135::-;19536:3;-1:-1:-1;;19557:17:1;;19554:43;;;19577:18;;:::i;:::-;-1:-1:-1;19624:1:1;19613:13;;19497:135::o;19637:184::-;-1:-1:-1;;;19686:1:1;19679:88;19786:4;19783:1;19776:15;19810:4;19807:1;19800:15;19826:184;-1:-1:-1;;;19875:1:1;19868:88;19975:4;19972:1;19965:15;19999:4;19996:1;19989:15;20015:184;-1:-1:-1;;;20064:1:1;20057:88;20164:4;20161:1;20154:15;20188:4;20185:1;20178:15;20393:154;-1:-1:-1;;;;;20472:5:1;20468:54;20461:5;20458:65;20448:93;;20537:1;20534;20527:12;20552:118;20638:5;20631:13;20624:21;20617:5;20614:32;20604:60;;20660:1;20657;20650:12

Swarm Source

ipfs://13b41fe00af615c104ddf77e75bad98646b4771cb7982658a384d662bbe10619
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.