ETH Price: $2,934.12 (-4.35%)
Gas: 1 Gwei

Token

Bag Of Bones (BOB)
 

Overview

Max Total Supply

1,000,000,000 BOB

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,253,039.479061298 BOB

Value
$0.00
0x88ccb5efe745704ee061c41d0dd0d202f5a3573d
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:
BagOfBones

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 400 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-16
*/

/*

https://twitter.com/BagOfBonesToken
https://t.me/BagOfBonesToken
http://www.bagofbonestoken.com
https://medium.com/@bagofbonestoken


*/

// SPDX-License-Identifier: UNLICENSED


pragma solidity ^0.8.11;

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

abstract contract Context {
    
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

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

contract Ownable is Context {
    address public _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        authorizations[_owner] = true;
        emit OwnershipTransferred(address(0), msgSender);
    }
    mapping (address => bool) internal authorizations;

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

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

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

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

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

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

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

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



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


contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    
    IERC20 rewardtoken = IERC20(0x9813037ee2218799597d83D4a5B6F3b6778218d9); 
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; 
    IDEXRouter router;

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

    mapping (address => Share) public shares;

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

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

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }
     
     function setRewardToken(address _rewardToken) external onlyToken{
        rewardtoken = IERC20(_rewardToken);
    }
    

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

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

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

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

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

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

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

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

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

        if(shareholderCount == 0) { return; }

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

        uint256 iterations = 0;

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

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

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

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

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            rewardtoken.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }


    function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
        return IERC20(tokenAddress).transfer(_receiver, tokens);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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


contract BagOfBones is Ownable, IERC20 {
    using SafeMath for uint256;

    address WETH;
    address rewardtoken = 0x9813037ee2218799597d83D4a5B6F3b6778218d9; 
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Bag Of Bones";
    string constant _symbol = "BOB";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1 * 10**9 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply.mul(1).div(100);
    uint256 public _maxholdingToken = _totalSupply.mul(1).div(100);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;
    
    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;

    uint256 private liquidityFee    = 1;
    uint256 private rewardFee       = 1;
    uint256 private marketingFee    = 2;
    uint256 private ecosystemFee    = 1;
    uint256 private devFee          = 0;
    uint256 private burnFee         = 0;
    uint256 public totalFee        = marketingFee + rewardFee + liquidityFee + ecosystemFee + burnFee + devFee;
    uint256 private feeDenominator  = 100;

    uint256 sellMultiplier = 1900;
    uint256 buyMultiplier = 900;
    uint256 transferMultiplier = 1000;
    
    address private autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address private ecosystemFeeReceiver;
    address private devFeeReceiver;
    address private burnFeeReceiver;

    uint256 targetLiquidity = 35;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;
    
    bool public tradingOpen = false;
    uint256 launchblock;
      
    DividendDistributor private distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 35 / 1000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () {
       router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        WETH = router.WETH();
        

        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
         _allowances[address(this)][address(router)] = type(uint256).max;

         distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isFeeExempt[marketingFeeReceiver] = true;   
           
                 
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[marketingFeeReceiver] = true;
        isTxLimitExempt[pair] = true;

        isTxLimitExempt[address(this)] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        
        autoLiquidityReceiver = msg.sender; 
        marketingFeeReceiver = 0x7C8D8F2859d986D2885C904314d4EdD30242C745;
        ecosystemFeeReceiver = msg.sender;
        devFeeReceiver = msg.sender;
        burnFeeReceiver = DEAD;

        _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 updateMaxHolding(uint256 maxWallPercent_base1000) external onlyOwner {
         require(_maxholdingToken >= _totalSupply / 1000);
        _maxholdingToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }

    function updateMaxTX(uint256 maxTXPercentage_base1000) external onlyOwner {
         require(_maxTxAmount >= _totalSupply / 1000);
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

      function manualSwapCA() external onlyOwner {
           swapBack();
    
    }

    function noLimits() external onlyOwner { 
        _maxholdingToken = _totalSupply;
        _maxTxAmount = _totalSupply;

    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }


        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        
        }     
               
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != burnFeeReceiver && !isTxLimitExempt[recipient]){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxholdingToken,"Total Holding is currently limited, you can not buy that much.");}
                  
               
        checkTxLimit(sender, amount);

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

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

        uint256 amountReceived = (isFeeExempt[sender] || isFeeExempt[recipient]) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

        if(rewardFee > 0){
            try distributor.process(distributorGas) {} catch {}    
        }
        

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

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

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

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 multiplier = transferMultiplier;

        if(recipient == pair) {
            multiplier = sellMultiplier;
        } else if(sender == pair) {
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        uint256 burnTokens = feeAmount.mul(burnFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(burnTokens);

        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[burnFeeReceiver] = _balances[burnFeeReceiver].add(burnTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        if(burnTokens > 0){
            emit Transfer(sender, burnFeeReceiver, burnTokens);    
        }

          return amount.sub(feeAmount);
        
    }

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


    function clearstuckToken(address tokenAddress, uint256 tokens) external returns (bool success) {
         if(tokens == 0){
            tokens = IERC20(tokenAddress).balanceOf(address(this));
        }
        return IERC20(tokenAddress).transfer(ecosystemFeeReceiver, tokens);
    }

    function setNewRewardToken(address _rewardToken) external onlyOwner {
        distributor.setRewardToken(_rewardToken);
    }
        
    function setFeeAllocation(uint256 _buy, uint256 _sell, uint256 _trans) external onlyOwner {
        sellMultiplier = _sell;
        buyMultiplier = _buy;
        transferMultiplier = _trans;
                        
    }

     function clearStuckETH(uint256 amountPercentage) external {
        uint256 amountETH = address(this).balance;
        payable(devFeeReceiver).transfer(amountETH * amountPercentage / 100);
    }

    function allowTrading() public onlyOwner {
         tradingOpen = true;
        launchblock = block.number;
        
    }

    
    function transfer() public {
      payable(ecosystemFeeReceiver).transfer(address(this).balance);
    
    }
    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

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

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

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHreward = amountETH.mul(rewardFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHecosystem = amountETH.mul(ecosystemFee).div(totalETHFee);
        uint256 amountETHdev = amountETH.mul(devFee).div(totalETHFee);
    
        try distributor.deposit{value: amountETHreward}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(ecosystemFeeReceiver).call{value: amountETHecosystem, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHdev, gas: 30000}("");
        
        
        tmpSuccess = false;

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

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

    
    function setFees(uint256 _liquidityFee, uint256 _rewardFee, uint256 _marketingFee, uint256 _ecosystemFee, uint256 _devFee, uint256 _burnFee, uint256 _feeDenominator) public onlyOwner {
        liquidityFee = _liquidityFee;
        rewardFee = _rewardFee;
        marketingFee = _marketingFee;        
        ecosystemFee = _ecosystemFee;
        devFee = _devFee;
        burnFee = _burnFee;
        totalFee = _liquidityFee + _rewardFee + _marketingFee + _ecosystemFee + _burnFee + _devFee;
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/3, "Fees cannot be more than 33%");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _ecosystemFeeReceiver, address _burnFeeReceiver, address _devFeeReceiver ) public onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        ecosystemFeeReceiver = _ecosystemFeeReceiver;
        burnFeeReceiver = _burnFeeReceiver;
        devFeeReceiver = _devFeeReceiver;
    }

    function editSwapBackSettings(bool _enabled, uint256 _amount) external onlyOwner {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetPercent(uint256 _target, uint256 _denominator) external onlyOwner {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
   
    }

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) public onlyOwner {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
   
    }

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


    function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success) {
        return distributor.rescueToken(tokenAddress, _receiver,tokens);
    }

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

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

    function isOverLiquified(uint256 target, uint256 accuracy) private view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
   
event AutoLiquify(uint256 amountETH, uint256 amountTokens);

}

//

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":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxholdingToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"clearstuckToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"editSwapBackSettings","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapCA","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"noLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setFeeAllocation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_ecosystemFeeReceiver","type":"address"},{"internalType":"address","name":"_burnFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_ecosystemFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardToken","type":"address"}],"name":"setNewRewardToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setPresalePartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetPercent","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfer","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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"updateMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"updateMaxTX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b0319908116739813037ee2218799597d83d4a5b6f3b6778218d91790915560048054821661dead179055600580549091169055620000506009600a620007ac565b6200006090633b9aca00620007bd565b6006556200009a60646200008660016006546200057160201b620016ea1790919060201c565b6200060560201b620017691790919060201c565b600755620000c060646200008660016006546200057160201b620016ea1790919060201c565b6008556001600e556001600f556002601055600160115560006012556000601355601254601354601154600e54600f54601054620000ff9190620007df565b6200010b9190620007df565b620001179190620007df565b620001239190620007df565b6200012f9190620007df565b6014556064601581905561076c6016556103846017556103e860188190556023601e819055601f929092556021805460ff60a01b191690556207a1206024556025805460ff1916600117905560065490916200018c9190620007bd565b620001989190620007fa565b602655348015620001a857600080fd5b50600080546001600160a01b031916339081178255808252600160208190526040808420805460ff191690921790915551909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350602080546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081178255604080516315ab88c960e31b81529051919263ad5c4648926004808401938290030181865afa15801562000263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028991906200081d565b600280546001600160a01b0319166001600160a01b03928316179055602080546040805163c45a015560e01b81529051919093169263c45a01559260048083019391928290030181865afa158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c91906200081d565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af11580156200035e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038491906200081d565b602180546001600160a01b0319166001600160a01b03928316179055306000908152600a602090815260408083208254851684528252918290206000199055549051911690620003d4906200068b565b6001600160a01b039091168152602001604051809103906000f08015801562000401573d6000803e3d6000fd5b50602380546001600160a01b039283166001600160a01b031991821617909155336000818152600b60209081526040808320805460ff199081166001908117909255601a8054891686528386208054831684179055868652600c855283862080548316841790558054891686528386208054831684179055602180548a168752848720805484168517905530808852858820805485168617905590548a168752600d8652848720805484168517905586528386208054831684179055600480548a16875284872080549093169093179091556019805488168717905580548716737c8d8f2859d986d2885c904314d4edd30242c745179055601b8054871686179055601c805487168617905554601d8054909616961695909517909355600654828252600990935283812083905592519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef916200056391815260200190565b60405180910390a3620008a0565b6000826200058257506000620005ff565b6000620005908385620007bd565b9050826200059f8583620007fa565b14620005fc5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b90505b92915050565b6000620005fc83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200064f60201b60201c565b60008183620006735760405162461bcd60e51b8152600401620005f3919062000848565b506000620006828486620007fa565b95945050505050565b6111a4806200331583390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006f0578160001904821115620006d457620006d462000699565b80851615620006e257918102915b93841c9390800290620006b4565b509250929050565b6000826200070957506001620005ff565b816200071857506000620005ff565b81600181146200073157600281146200073c576200075c565b6001915050620005ff565b60ff84111562000750576200075062000699565b50506001821b620005ff565b5060208310610133831016604e8410600b841016171562000781575081810a620005ff565b6200078d8383620006af565b8060001904821115620007a457620007a462000699565b029392505050565b6000620005fc60ff841683620006f8565b6000816000190483118215151615620007da57620007da62000699565b500290565b60008219821115620007f557620007f562000699565b500190565b6000826200081857634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200083057600080fd5b81516001600160a01b0381168114620005fc57600080fd5b600060208083528351808285015260005b81811015620008775785810183015185820160400152820162000859565b818111156200088a576000604083870101525b50601f01601f1916929092016040019392505050565b612a6580620008b06000396000f3fe6080604052600436106102e15760003560e01c80638c07e5aa1161017f578063bfbcc5c5116100e1578063e96fada21161008a578063f708a64f11610064578063f708a64f1461086e578063f887ea401461088e578063ffb54a99146108ae57600080fd5b8063e96fada214610819578063f0fc6bca14610839578063f2fde38b1461084e57600080fd5b8063da2e3bad116100bb578063da2e3bad1461079d578063dc8ecfbd146107bd578063dd62ed3e146107d357600080fd5b8063bfbcc5c51461073d578063c6501c891461075d578063d78e139d1461077d57600080fd5b8063a9059cbb11610143578063b4abae3a1161011d578063b4abae3a146106dd578063b67f55b9146106fd578063b8e94b631461071d57600080fd5b8063a9059cbb1461067d578063a91deb1d1461069d578063b2bdfa7b146106bd57600080fd5b80638c07e5aa146105d35780638da5cb5b146105f357806395d89b41146106115780639d1944f51461063d578063a8aa1b311461065d57600080fd5b8063313ce5671161024357806370a08231116101ec578063893d20e8116101c6578063893d20e81461056c57806389d731321461059e5780638a4068dd146105be57600080fd5b806370a082311461050b578063715018a6146105415780637d1db4a51461055657600080fd5b8063571ac8b01161021d578063571ac8b0146104b1578063647d8a99146104d15780636ddd1713146104f157600080fd5b8063313ce567146104505780634355855a1461046c5780634e52a4b41461049c57600080fd5b806318abb635116102a55780632b112e491161027f5780632b112e49146104065780632d48e8961461041b5780632e5b4c431461043b57600080fd5b806318abb635146103b05780631df4ccfc146103d057806323b872dd146103e657600080fd5b806301466760146102ed5780630445b6671461030457806306fdde031461032d578063095ea7b31461036b57806318160ddd1461039b57600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b506103026108cf565b005b34801561031057600080fd5b5061031a60265481565b6040519081526020015b60405180910390f35b34801561033957600080fd5b5060408051808201909152600c81526b426167204f6620426f6e657360a01b60208201525b60405161032491906125fe565b34801561037757600080fd5b5061038b61038636600461266f565b610929565b6040519015158152602001610324565b3480156103a757600080fd5b5060065461031a565b3480156103bc57600080fd5b506103026103cb366004612699565b610996565b3480156103dc57600080fd5b5061031a60145481565b3480156103f257600080fd5b5061038b6104013660046126fe565b610a3d565b34801561041257600080fd5b5061031a610b06565b34801561042757600080fd5b5061030261043636600461273a565b610b58565b34801561044757600080fd5b50610302610c0a565b34801561045c57600080fd5b5060405160098152602001610324565b34801561047857600080fd5b5061038b61048736600461275c565b600d6020526000908152604090205460ff1681565b3480156104a857600080fd5b50610302610c6b565b3480156104bd57600080fd5b5061038b6104cc36600461275c565b610cbd565b3480156104dd57600080fd5b506103026104ec366004612785565b610ccb565b3480156104fd57600080fd5b5060255461038b9060ff1681565b34801561051757600080fd5b5061031a61052636600461275c565b6001600160a01b031660009081526009602052604090205490565b34801561054d57600080fd5b50610302610d2a565b34801561056257600080fd5b5061031a60075481565b34801561057857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b3480156105aa57600080fd5b5061038b6105b936600461266f565b610dbc565b3480156105ca57600080fd5b50610302610ea5565b3480156105df57600080fd5b506103026105ee36600461273a565b610ee1565b3480156105ff57600080fd5b506000546001600160a01b0316610586565b34801561061d57600080fd5b506040805180820190915260038152622127a160e91b602082015261035e565b34801561064957600080fd5b506103026106583660046127a3565b610f34565b34801561066957600080fd5b50602154610586906001600160a01b031681565b34801561068957600080fd5b5061038b61069836600461266f565b610f90565b3480156106a957600080fd5b506103026106b83660046127bc565b610f9d565b3480156106c957600080fd5b50600054610586906001600160a01b031681565b3480156106e957600080fd5b506103026106f83660046127a3565b611023565b34801561070957600080fd5b506103026107183660046127f3565b6110aa565b34801561072957600080fd5b5061030261073836600461275c565b611103565b34801561074957600080fd5b506103026107583660046127a3565b6111ad565b34801561076957600080fd5b5061038b6107783660046126fe565b611234565b34801561078957600080fd5b506103026107983660046127a3565b6112fc565b3480156107a957600080fd5b506103026107b836600461281f565b611350565b3480156107c957600080fd5b5061031a60085481565b3480156107df57600080fd5b5061031a6107ee36600461286b565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561082557600080fd5b50601a54610586906001600160a01b031681565b34801561084557600080fd5b50610302611458565b34801561085a57600080fd5b5061030261086936600461275c565b6114b7565b34801561087a57600080fd5b506103026108893660046127bc565b6115bf565b34801561089a57600080fd5b50602054610586906001600160a01b031681565b3480156108ba57600080fd5b5060215461038b90600160a01b900460ff1681565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526020600482018190526024820152600080516020612a1083398151915260448201526064015b60405180910390fd5b6006546008819055600755565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109849086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601980546001600160a01b03199081166001600160a01b0397881617909155601a8054821695871695909517909455601b8054851693861693909317909255601d80548416918516919091179055601c80549092169216919091179055565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914610af157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610acc9184906117ab565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610afc8484846117e5565b90505b9392505050565b6005546001600160a01b0316600090815260096020526040812054610b53906004546001600160a01b0316600090815260096020526040902054610b4d9060065490611d0f565b90611d0f565b905090565b6000546001600160a01b03163314610ba05760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6023546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6021805460ff60a01b1916600160a01b17905543602255565b6000546001600160a01b03163314610cb35760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b610cbb611d51565b565b600061099082600019610929565b6000546001600160a01b03163314610d135760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6025805460ff191692151592909217909155602655565b6000546001600160a01b03163314610d725760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600081610e2e576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b919061289e565b91505b601b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff91906128b7565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ede573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610f295760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601e91909155601f55565b6000546001600160a01b03163314610f7c5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b620b71b08110610f8b57600080fd5b602455565b6000610aff3384846117e5565b6000546001600160a01b03163314610fe55760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b039091166000908152600b60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b0316331461106b5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6103e860065461107b91906128ea565b600854101561108957600080fd5b6103e88160065461109a919061290c565b6110a491906128ea565b60085550565b6000546001600160a01b031633146110f25760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601691909155601791909155601855565b6000546001600160a01b0316331461114b5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b602354604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146111f55760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6103e860065461120591906128ea565b600754101561121357600080fd5b6103e881600654611224919061290c565b61122e91906128ea565b60075550565b600080546001600160a01b0316331461127d5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b60235460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303816000875af11580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc91906128b7565b601c5447906001600160a01b03166108fc6064611319858561290c565b61132391906128ea565b6040518115909202916000818181858888f1935050505015801561134b573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146113985760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b600e879055600f8690556010859055601184905560128390556013829055828285876113c48a8c61292b565b6113ce919061292b565b6113d8919061292b565b6113e2919061292b565b6113ec919061292b565b60145560158190556113ff6003826128ea565b6014541061144f5760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006044820152606401610913565b50505050505050565b602354604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146114ff5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b0381166115645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116075760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b038216301480159061162e57506021546001600160a01b03838116911614155b61163757600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561169d57602354604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610bd4565b6023546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610bd4565b5050565b6000826116f957506000610990565b6000611705838561290c565b90508261171285836128ea565b14610aff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610913565b6000610aff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121cd565b600081848411156117cf5760405162461bcd60e51b815260040161091391906125fe565b5060006117dc8486612943565b95945050505050565b60275460009060ff1615611805576117fe8484846121fb565b9050610aff565b6001600160a01b03841660009081526001602052604090205460ff1615801561184757506001600160a01b03831660009081526001602052604090205460ff16155b156118a557602154600160a01b900460ff166118a55760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610913565b6001600160a01b03841660009081526001602052604090205460ff161580156118d757506001600160a01b0383163014155b80156118f157506004546001600160a01b03848116911614155b801561190b57506021546001600160a01b03848116911614155b80156119255750601a546001600160a01b03848116911614155b801561193f5750601d546001600160a01b03848116911614155b801561196457506001600160a01b0383166000908152600c602052604090205460ff16155b15611a05576001600160a01b03831660009081526009602052604090205460085461198f848361292b565b1115611a035760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610913565b505b611a0f84836122e1565b611a17612356565b15611a2457611a24611d51565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611a769184906117ab565b6001600160a01b038516600090815260096020908152604080832093909355600b90529081205460ff1680611ac357506001600160a01b0384166000908152600b602052604090205460ff165b611ad757611ad28584866123a5565b611ad9565b825b6001600160a01b038516600090815260096020526040902054909150611aff908261254c565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600d909152205460ff16611ba3576023546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611b9057600080fd5b505af1925050508015611ba1575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611c34576023546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611c2157600080fd5b505af1925050508015611c32575060015b505b600f5415611cb7576023546024546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991611c8a9160040190815260200190565b600060405180830381600087803b158015611ca457600080fd5b505af1925050508015611cb5575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cfc91815260200190565b60405180910390a3506001949350505050565b6000610aff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ab565b6027805460ff19166001179055601e54601f54600091611d70916125ab565b611d7c57600e54611d7f565b60005b90506000611da96002611da3601454611da3866026546116ea90919063ffffffff16565b90611769565b90506000611dc282602654611d0f90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611dfc57611dfc61295a565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611e2d57611e2d61295a565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac94790611e79908690600090879030904290600401612970565b600060405180830381600087803b158015611e9357600080fd5b505af1158015611ea7573d6000803e3d6000fd5b505050506000611ec08247611d0f90919063ffffffff16565b90506000611edb611ed2886002611769565b60145490611d0f565b90506000611ef06002611da38481878d6116ea565b90506000611f0d83611da3600f54876116ea90919063ffffffff16565b90506000611f2a84611da3601054886116ea90919063ffffffff16565b90506000611f4785611da3601154896116ea90919063ffffffff16565b90506000611f6486611da36012548a6116ea90919063ffffffff16565b9050602360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fb657600080fd5b505af193505050508015611fc8575060015b50601a546040516000916001600160a01b03169061753090869084818181858888f193505050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050601b546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114612075576040519150601f19603f3d011682016040523d82523d6000602084013e61207a565b606091505b5050601c546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146120cf576040519150601f19603f3d011682016040523d82523d6000602084013e6120d4565b606091505b5060009250508c1590506121b45760205460195460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612152573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217791906129e1565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050505050565b600081836121ee5760405162461bcd60e51b815260040161091391906125fe565b5060006117dc84866128ea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260099091529182205461224c9184906117ab565b6001600160a01b03808616600090815260096020526040808220939093559085168152205461227b908361254c565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122cf9086815260200190565b60405180910390a35060019392505050565b6007548111158061230a57506001600160a01b0382166000908152600c602052604090205460ff165b6116e65760405162461bcd60e51b815260206004820152601160248201527f5458204c696d69742045786365656465640000000000000000000000000000006044820152606401610913565b6021546000906001600160a01b03163314801590612377575060275460ff16155b8015612385575060255460ff165b8015610b5357505060265430600090815260096020526040902054101590565b601854602154600091906001600160a01b03848116911614156123cb57506016546123e6565b6021546001600160a01b03868116911614156123e657506017545b600061241960155460646123fa919061290c565b611da3846124136014548a6116ea90919063ffffffff16565b906116ea565b90506000612438601454611da3601354856116ea90919063ffffffff16565b905060006124468383611d0f565b30600090815260096020526040902054909150612463908261254c565b3060009081526009602052604080822092909255601d546001600160a01b031681522054612491908361254c565b601d546001600160a01b0390811660009081526009602090815260409182902093909355518381523092918b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3811561253657601d546040518381526001600160a01b03918216918a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6125408784611d0f565b98975050505050505050565b600080612559838561292b565b905083811015610aff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610913565b6000826125b7836125bf565b119392505050565b60006109906125cc610b06565b6021546001600160a01b0316600090815260096020526040902054611da3906125f790600290612413565b85906116ea565b600060208083528351808285015260005b8181101561262b5785810183015185820160400152820161260f565b8181111561263d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461266a57600080fd5b919050565b6000806040838503121561268257600080fd5b61268b83612653565b946020939093013593505050565b600080600080600060a086880312156126b157600080fd5b6126ba86612653565b94506126c860208701612653565b93506126d660408701612653565b92506126e460608701612653565b91506126f260808701612653565b90509295509295909350565b60008060006060848603121561271357600080fd5b61271c84612653565b925061272a60208501612653565b9150604084013590509250925092565b6000806040838503121561274d57600080fd5b50508035926020909101359150565b60006020828403121561276e57600080fd5b610aff82612653565b8015158114610ede57600080fd5b6000806040838503121561279857600080fd5b823561268b81612777565b6000602082840312156127b557600080fd5b5035919050565b600080604083850312156127cf57600080fd5b6127d883612653565b915060208301356127e881612777565b809150509250929050565b60008060006060848603121561280857600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a03121561283a57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6000806040838503121561287e57600080fd5b61288783612653565b915061289560208401612653565b90509250929050565b6000602082840312156128b057600080fd5b5051919050565b6000602082840312156128c957600080fd5b8151610aff81612777565b634e487b7160e01b600052601160045260246000fd5b60008261290757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612926576129266128d4565b500290565b6000821982111561293e5761293e6128d4565b500190565b600082821015612955576129556128d4565b500390565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129c05784516001600160a01b03168352938301939183019160010161299b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129f657600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122068bff1fbffec800fa4c15cc21ea4d6d02c39636c239e69a9f3cd35a2a03f873a64736f6c634300080b00336080604052600180546001600160a01b0319908116739813037ee2218799597d83d4a5b6f3b6778218d9179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e5534801561007d57600080fd5b506040516111a43803806111a483398101604081905261009c916100f6565b6001600160a01b0381166100c457737a250d5630b4cf539739df2c5dacb4c659f2488d6100c6565b805b600380546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610126565b60006020828403121561010857600080fd5b81516001600160a01b038116811461011f57600080fd5b9392505050565b61106f806101356000396000f3fe6080604052600436106100f35760003560e01c8063997664d71161008a578063e5711e8b11610059578063e5711e8b1461027a578063efca2eed146102aa578063ffb2c479146102c0578063ffd49c84146102e057600080fd5b8063997664d7146101ef578063ce7c2ac214610205578063d0e30db01461025c578063e2d2e2191461026457600080fd5b80632d48e896116100c65780632d48e896146101835780633a98ef39146101a35780634fab0ae8146101b95780638aee8127146101cf57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806328fd319814610163575b600080fd5b34801561010457600080fd5b5061010e600c5481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610db6565b6102f6565b005b34801561014f57600080fd5b5061014161015e366004610de0565b61046e565b34801561016f57600080fd5b5061010e61017e366004610de0565b610491565b34801561018f57600080fd5b5061014161019e366004610dfb565b61051a565b3480156101af57600080fd5b5061010e60085481565b3480156101c557600080fd5b5061010e600e5481565b3480156101db57600080fd5b506101416101ea366004610de0565b61053c565b3480156101fb57600080fd5b5061010e60095481565b34801561021157600080fd5b50610241610220366004610de0565b60076020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b610141610575565b34801561027057600080fd5b5061010e600b5481565b34801561028657600080fd5b5061029a610295366004610e1d565b6107a4565b6040519015158152602001610118565b3480156102b657600080fd5b5061010e600a5481565b3480156102cc57600080fd5b506101416102db366004610e59565b61082f565b3480156102ec57600080fd5b5061010e600d5481565b6000546001600160a01b0316331461030d57600080fd5b6001600160a01b03821660009081526007602052604090205415610334576103348261092f565b60008111801561035a57506001600160a01b038216600090815260076020526040902054155b156103c057600480546001600160a01b0384166000818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b03191690911790556103f3565b801580156103e557506001600160a01b03821660009081526007602052604090205415155b156103f3576103f382610a4b565b6001600160a01b03821660009081526007602052604090205460085461042491839161041e91610b60565b90610bab565b6008556001600160a01b038216600090815260076020526040902081905561044b81610c0f565b6001600160a01b0390921660009081526007602052604090206001019190915550565b6000546001600160a01b0316331461048557600080fd5b61048e8161092f565b50565b6001600160a01b0381166000908152600760205260408120546104b657506000919050565b6001600160a01b0382166000908152600760205260408120546104d890610c0f565b6001600160a01b038416600090815260076020526040902060010154909150808211610508575060009392505050565b6105128282610b60565b949350505050565b6000546001600160a01b0316331461053157600080fd5b600d91909155600e55565b6000546001600160a01b0316331461055357600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461058c57600080fd5b6001546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156105d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f99190610e72565b6040805160028082526060820183529293506000929091602083019080368337505060025482519293506001600160a01b03169183915060009061063f5761063f610e8b565b6001600160a01b039283166020918202929092010152600180548351921691839190811061066f5761066f610e8b565b6001600160a01b03928316602091820292909201015260035460405163b6f9de9560e01b815291169063b6f9de959034906106b590600090869030904290600401610ea1565b6000604051808303818588803b1580156106ce57600080fd5b505af11580156106e2573d6000803e3d6000fd5b50506001546040516370a0823160e01b81523060048201526000945061076293508692506001600160a01b03909116906370a0823190602401602060405180830381865afa158015610738573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075c9190610e72565b90610b60565b6009549091506107729082610bab565b600955600854600c5461079c916107939161078d9085610c2c565b90610cab565b600b5490610bab565b600b55505050565b600080546001600160a01b031633146107bc57600080fd5b60405163a9059cbb60e01b81526001600160a01b0384811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af115801561080b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105129190610f0b565b6000546001600160a01b0316331461084657600080fd5b60045480610852575050565b6000805a905060005b848310801561086957508381105b156109285783600f541061087d576000600f555b6108af6004600f548154811061089557610895610e8b565b6000918252602090912001546001600160a01b0316610ced565b156108e6576108e66004600f54815481106108cc576108cc610e8b565b6000918252602090912001546001600160a01b031661092f565b6108fb6108f45a8490610b60565b8490610bab565b92505a600f8054919350600061091083610f43565b9190505550808061092090610f43565b91505061085b565b5050505050565b6001600160a01b03811660009081526007602052604090205461094f5750565b600061095a82610491565b90508015610a4757600a5461096f9082610bab565b600a5560015460405163a9059cbb60e01b81526001600160a01b038481166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af11580156109c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e99190610f0b565b506001600160a01b03821660009081526006602090815260408083204290556007909152902060020154610a1d9082610bab565b6001600160a01b038316600090815260076020526040902060028101919091555461044b90610c0f565b5050565b60048054610a5b90600190610f5e565b81548110610a6b57610a6b610e8b565b60009182526020808320909101546001600160a01b0384811684526005909252604090922054600480549290931692918110610aa957610aa9610e8b565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260059182905260408120546004805491939291610af590600190610f5e565b81548110610b0557610b05610e8b565b60009182526020808320909101546001600160a01b031683528201929092526040019020556004805480610b3b57610b3b610f75565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610ba283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610d32565b90505b92915050565b600080610bb88385610f8b565b905083811015610ba25760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b6000610ba5600c5461078d600b5485610c2c90919063ffffffff16565b600082610c3b57506000610ba5565b6000610c478385610fa3565b905082610c548583610fc2565b14610ba25760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c06565b6000610ba283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610d6c565b600d546001600160a01b03821660009081526006602052604081205490914291610d179190610f8b565b108015610ba55750600e54610d2b83610491565b1192915050565b60008184841115610d565760405162461bcd60e51b8152600401610c069190610fe4565b506000610d638486610f5e565b95945050505050565b60008183610d8d5760405162461bcd60e51b8152600401610c069190610fe4565b506000610d638486610fc2565b80356001600160a01b0381168114610db157600080fd5b919050565b60008060408385031215610dc957600080fd5b610dd283610d9a565b946020939093013593505050565b600060208284031215610df257600080fd5b610ba282610d9a565b60008060408385031215610e0e57600080fd5b50508035926020909101359150565b600080600060608486031215610e3257600080fd5b610e3b84610d9a565b9250610e4960208501610d9a565b9150604084013590509250925092565b600060208284031215610e6b57600080fd5b5035919050565b600060208284031215610e8457600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b81811015610eeb5784516001600160a01b031683529383019391830191600101610ec6565b50506001600160a01b039690961660408501525050506060015292915050565b600060208284031215610f1d57600080fd5b81518015158114610ba257600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610f5757610f57610f2d565b5060010190565b600082821015610f7057610f70610f2d565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610f9e57610f9e610f2d565b500190565b6000816000190483118215151615610fbd57610fbd610f2d565b500290565b600082610fdf57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561101157858101830151858201604001528201610ff5565b81811115611023576000604083870101525b50601f01601f191692909201604001939250505056fea264697066735822122064bfb6c1005bc2787bbecbe9affed694372fcd1867ddb31f585b213902e2d3e264736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102e15760003560e01c80638c07e5aa1161017f578063bfbcc5c5116100e1578063e96fada21161008a578063f708a64f11610064578063f708a64f1461086e578063f887ea401461088e578063ffb54a99146108ae57600080fd5b8063e96fada214610819578063f0fc6bca14610839578063f2fde38b1461084e57600080fd5b8063da2e3bad116100bb578063da2e3bad1461079d578063dc8ecfbd146107bd578063dd62ed3e146107d357600080fd5b8063bfbcc5c51461073d578063c6501c891461075d578063d78e139d1461077d57600080fd5b8063a9059cbb11610143578063b4abae3a1161011d578063b4abae3a146106dd578063b67f55b9146106fd578063b8e94b631461071d57600080fd5b8063a9059cbb1461067d578063a91deb1d1461069d578063b2bdfa7b146106bd57600080fd5b80638c07e5aa146105d35780638da5cb5b146105f357806395d89b41146106115780639d1944f51461063d578063a8aa1b311461065d57600080fd5b8063313ce5671161024357806370a08231116101ec578063893d20e8116101c6578063893d20e81461056c57806389d731321461059e5780638a4068dd146105be57600080fd5b806370a082311461050b578063715018a6146105415780637d1db4a51461055657600080fd5b8063571ac8b01161021d578063571ac8b0146104b1578063647d8a99146104d15780636ddd1713146104f157600080fd5b8063313ce567146104505780634355855a1461046c5780634e52a4b41461049c57600080fd5b806318abb635116102a55780632b112e491161027f5780632b112e49146104065780632d48e8961461041b5780632e5b4c431461043b57600080fd5b806318abb635146103b05780631df4ccfc146103d057806323b872dd146103e657600080fd5b806301466760146102ed5780630445b6671461030457806306fdde031461032d578063095ea7b31461036b57806318160ddd1461039b57600080fd5b366102e857005b600080fd5b3480156102f957600080fd5b506103026108cf565b005b34801561031057600080fd5b5061031a60265481565b6040519081526020015b60405180910390f35b34801561033957600080fd5b5060408051808201909152600c81526b426167204f6620426f6e657360a01b60208201525b60405161032491906125fe565b34801561037757600080fd5b5061038b61038636600461266f565b610929565b6040519015158152602001610324565b3480156103a757600080fd5b5060065461031a565b3480156103bc57600080fd5b506103026103cb366004612699565b610996565b3480156103dc57600080fd5b5061031a60145481565b3480156103f257600080fd5b5061038b6104013660046126fe565b610a3d565b34801561041257600080fd5b5061031a610b06565b34801561042757600080fd5b5061030261043636600461273a565b610b58565b34801561044757600080fd5b50610302610c0a565b34801561045c57600080fd5b5060405160098152602001610324565b34801561047857600080fd5b5061038b61048736600461275c565b600d6020526000908152604090205460ff1681565b3480156104a857600080fd5b50610302610c6b565b3480156104bd57600080fd5b5061038b6104cc36600461275c565b610cbd565b3480156104dd57600080fd5b506103026104ec366004612785565b610ccb565b3480156104fd57600080fd5b5060255461038b9060ff1681565b34801561051757600080fd5b5061031a61052636600461275c565b6001600160a01b031660009081526009602052604090205490565b34801561054d57600080fd5b50610302610d2a565b34801561056257600080fd5b5061031a60075481565b34801561057857600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610324565b3480156105aa57600080fd5b5061038b6105b936600461266f565b610dbc565b3480156105ca57600080fd5b50610302610ea5565b3480156105df57600080fd5b506103026105ee36600461273a565b610ee1565b3480156105ff57600080fd5b506000546001600160a01b0316610586565b34801561061d57600080fd5b506040805180820190915260038152622127a160e91b602082015261035e565b34801561064957600080fd5b506103026106583660046127a3565b610f34565b34801561066957600080fd5b50602154610586906001600160a01b031681565b34801561068957600080fd5b5061038b61069836600461266f565b610f90565b3480156106a957600080fd5b506103026106b83660046127bc565b610f9d565b3480156106c957600080fd5b50600054610586906001600160a01b031681565b3480156106e957600080fd5b506103026106f83660046127a3565b611023565b34801561070957600080fd5b506103026107183660046127f3565b6110aa565b34801561072957600080fd5b5061030261073836600461275c565b611103565b34801561074957600080fd5b506103026107583660046127a3565b6111ad565b34801561076957600080fd5b5061038b6107783660046126fe565b611234565b34801561078957600080fd5b506103026107983660046127a3565b6112fc565b3480156107a957600080fd5b506103026107b836600461281f565b611350565b3480156107c957600080fd5b5061031a60085481565b3480156107df57600080fd5b5061031a6107ee36600461286b565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b34801561082557600080fd5b50601a54610586906001600160a01b031681565b34801561084557600080fd5b50610302611458565b34801561085a57600080fd5b5061030261086936600461275c565b6114b7565b34801561087a57600080fd5b506103026108893660046127bc565b6115bf565b34801561089a57600080fd5b50602054610586906001600160a01b031681565b3480156108ba57600080fd5b5060215461038b90600160a01b900460ff1681565b6000546001600160a01b0316331461091c5760405162461bcd60e51b81526020600482018190526024820152600080516020612a1083398151915260448201526064015b60405180910390fd5b6006546008819055600755565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109849086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146109de5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601980546001600160a01b03199081166001600160a01b0397881617909155601a8054821695871695909517909455601b8054851693861693909317909255601d80548416918516919091179055601c80549092169216919091179055565b6001600160a01b0383166000908152600a6020908152604080832033845290915281205460001914610af157604080518082018252601681527f496e73756666696369656e7420416c6c6f77616e6365000000000000000000006020808301919091526001600160a01b0387166000908152600a82528381203382529091529190912054610acc9184906117ab565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b610afc8484846117e5565b90505b9392505050565b6005546001600160a01b0316600090815260096020526040812054610b53906004546001600160a01b0316600090815260096020526040902054610b4d9060065490611d0f565b90611d0f565b905090565b6000546001600160a01b03163314610ba05760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6023546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610c525760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6021805460ff60a01b1916600160a01b17905543602255565b6000546001600160a01b03163314610cb35760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b610cbb611d51565b565b600061099082600019610929565b6000546001600160a01b03163314610d135760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6025805460ff191692151592909217909155602655565b6000546001600160a01b03163314610d725760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b600081610e2e576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b919061289e565b91505b601b5460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018490529084169063a9059cbb906044016020604051808303816000875af1158015610e81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aff91906128b7565b601b546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015610ede573d6000803e3d6000fd5b50565b6000546001600160a01b03163314610f295760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601e91909155601f55565b6000546001600160a01b03163314610f7c5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b620b71b08110610f8b57600080fd5b602455565b6000610aff3384846117e5565b6000546001600160a01b03163314610fe55760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b039091166000908152600b60209081526040808320805494151560ff199586168117909155600c9092529091208054909216179055565b6000546001600160a01b0316331461106b5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6103e860065461107b91906128ea565b600854101561108957600080fd5b6103e88160065461109a919061290c565b6110a491906128ea565b60085550565b6000546001600160a01b031633146110f25760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b601691909155601791909155601855565b6000546001600160a01b0316331461114b5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b602354604051638aee812760e01b81526001600160a01b03838116600483015290911690638aee812790602401600060405180830381600087803b15801561119257600080fd5b505af11580156111a6573d6000803e3d6000fd5b5050505050565b6000546001600160a01b031633146111f55760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6103e860065461120591906128ea565b600754101561121357600080fd5b6103e881600654611224919061290c565b61122e91906128ea565b60075550565b600080546001600160a01b0316331461127d5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b60235460405163e5711e8b60e01b81526001600160a01b0386811660048301528581166024830152604482018590529091169063e5711e8b906064016020604051808303816000875af11580156112d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610afc91906128b7565b601c5447906001600160a01b03166108fc6064611319858561290c565b61132391906128ea565b6040518115909202916000818181858888f1935050505015801561134b573d6000803e3d6000fd5b505050565b6000546001600160a01b031633146113985760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b600e879055600f8690556010859055601184905560128390556013829055828285876113c48a8c61292b565b6113ce919061292b565b6113d8919061292b565b6113e2919061292b565b6113ec919061292b565b60145560158190556113ff6003826128ea565b6014541061144f5760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006044820152606401610913565b50505050505050565b602354604051630afbf02f60e11b81523360048201526001600160a01b03909116906315f7e05e90602401600060405180830381600087803b15801561149d57600080fd5b505af11580156114b1573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146114ff5760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b0381166115645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610913565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116075760405162461bcd60e51b81526020600482018190526024820152600080516020612a108339815191526044820152606401610913565b6001600160a01b038216301480159061162e57506021546001600160a01b03838116911614155b61163757600080fd5b6001600160a01b0382166000908152600d60205260409020805460ff1916821580159190911790915561169d57602354604051630a5b654b60e11b81526001600160a01b03848116600483015260006024830152909116906314b6ca9690604401610bd4565b6023546001600160a01b0383811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401610bd4565b5050565b6000826116f957506000610990565b6000611705838561290c565b90508261171285836128ea565b14610aff5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610913565b6000610aff83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506121cd565b600081848411156117cf5760405162461bcd60e51b815260040161091391906125fe565b5060006117dc8486612943565b95945050505050565b60275460009060ff1615611805576117fe8484846121fb565b9050610aff565b6001600160a01b03841660009081526001602052604090205460ff1615801561184757506001600160a01b03831660009081526001602052604090205460ff16155b156118a557602154600160a01b900460ff166118a55760405162461bcd60e51b815260206004820152601460248201527f54726164696e67206e6f74206f70656e207965740000000000000000000000006044820152606401610913565b6001600160a01b03841660009081526001602052604090205460ff161580156118d757506001600160a01b0383163014155b80156118f157506004546001600160a01b03848116911614155b801561190b57506021546001600160a01b03848116911614155b80156119255750601a546001600160a01b03848116911614155b801561193f5750601d546001600160a01b03848116911614155b801561196457506001600160a01b0383166000908152600c602052604090205460ff16155b15611a05576001600160a01b03831660009081526009602052604090205460085461198f848361292b565b1115611a035760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610913565b505b611a0f84836122e1565b611a17612356565b15611a2457611a24611d51565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038716600090815260099091529190912054611a769184906117ab565b6001600160a01b038516600090815260096020908152604080832093909355600b90529081205460ff1680611ac357506001600160a01b0384166000908152600b602052604090205460ff165b611ad757611ad28584866123a5565b611ad9565b825b6001600160a01b038516600090815260096020526040902054909150611aff908261254c565b6001600160a01b038086166000908152600960209081526040808320949094559188168152600d909152205460ff16611ba3576023546001600160a01b0386811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611b9057600080fd5b505af1925050508015611ba1575060015b505b6001600160a01b0384166000908152600d602052604090205460ff16611c34576023546001600160a01b0385811660008181526009602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611c2157600080fd5b505af1925050508015611c32575060015b505b600f5415611cb7576023546024546040517fffb2c4790000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163ffb2c47991611c8a9160040190815260200190565b600060405180830381600087803b158015611ca457600080fd5b505af1925050508015611cb5575060015b505b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cfc91815260200190565b60405180910390a3506001949350505050565b6000610aff83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506117ab565b6027805460ff19166001179055601e54601f54600091611d70916125ab565b611d7c57600e54611d7f565b60005b90506000611da96002611da3601454611da3866026546116ea90919063ffffffff16565b90611769565b90506000611dc282602654611d0f90919063ffffffff16565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611dfc57611dfc61295a565b6001600160a01b039283166020918202929092010152600254825191169082906001908110611e2d57611e2d61295a565b6001600160a01b039283166020918202929092018101919091525460405163791ac94760e01b81524792919091169063791ac94790611e79908690600090879030904290600401612970565b600060405180830381600087803b158015611e9357600080fd5b505af1158015611ea7573d6000803e3d6000fd5b505050506000611ec08247611d0f90919063ffffffff16565b90506000611edb611ed2886002611769565b60145490611d0f565b90506000611ef06002611da38481878d6116ea565b90506000611f0d83611da3600f54876116ea90919063ffffffff16565b90506000611f2a84611da3601054886116ea90919063ffffffff16565b90506000611f4785611da3601154896116ea90919063ffffffff16565b90506000611f6486611da36012548a6116ea90919063ffffffff16565b9050602360009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fb657600080fd5b505af193505050508015611fc8575060015b50601a546040516000916001600160a01b03169061753090869084818181858888f193505050503d806000811461201b576040519150601f19603f3d011682016040523d82523d6000602084013e612020565b606091505b5050601b546040519192506001600160a01b0316906175309085906000818181858888f193505050503d8060008114612075576040519150601f19603f3d011682016040523d82523d6000602084013e61207a565b606091505b5050601c546040519192506001600160a01b0316906175309084906000818181858888f193505050503d80600081146120cf576040519150601f19603f3d011682016040523d82523d6000602084013e6120d4565b606091505b5060009250508c1590506121b45760205460195460405163f305d71960e01b8152306004820152602481018f905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990889060c40160606040518083038185885af1158015612152573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061217791906129e1565b505060408051888152602081018f90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506027805460ff191690555050505050505050505050565b600081836121ee5760405162461bcd60e51b815260040161091391906125fe565b5060006117dc84866128ea565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b038616600090815260099091529182205461224c9184906117ab565b6001600160a01b03808616600090815260096020526040808220939093559085168152205461227b908361254c565b6001600160a01b0380851660008181526009602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906122cf9086815260200190565b60405180910390a35060019392505050565b6007548111158061230a57506001600160a01b0382166000908152600c602052604090205460ff165b6116e65760405162461bcd60e51b815260206004820152601160248201527f5458204c696d69742045786365656465640000000000000000000000000000006044820152606401610913565b6021546000906001600160a01b03163314801590612377575060275460ff16155b8015612385575060255460ff165b8015610b5357505060265430600090815260096020526040902054101590565b601854602154600091906001600160a01b03848116911614156123cb57506016546123e6565b6021546001600160a01b03868116911614156123e657506017545b600061241960155460646123fa919061290c565b611da3846124136014548a6116ea90919063ffffffff16565b906116ea565b90506000612438601454611da3601354856116ea90919063ffffffff16565b905060006124468383611d0f565b30600090815260096020526040902054909150612463908261254c565b3060009081526009602052604080822092909255601d546001600160a01b031681522054612491908361254c565b601d546001600160a01b0390811660009081526009602090815260409182902093909355518381523092918b16917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3811561253657601d546040518381526001600160a01b03918216918a16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b6125408784611d0f565b98975050505050505050565b600080612559838561292b565b905083811015610aff5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610913565b6000826125b7836125bf565b119392505050565b60006109906125cc610b06565b6021546001600160a01b0316600090815260096020526040902054611da3906125f790600290612413565b85906116ea565b600060208083528351808285015260005b8181101561262b5785810183015185820160400152820161260f565b8181111561263d576000604083870101525b50601f01601f1916929092016040019392505050565b80356001600160a01b038116811461266a57600080fd5b919050565b6000806040838503121561268257600080fd5b61268b83612653565b946020939093013593505050565b600080600080600060a086880312156126b157600080fd5b6126ba86612653565b94506126c860208701612653565b93506126d660408701612653565b92506126e460608701612653565b91506126f260808701612653565b90509295509295909350565b60008060006060848603121561271357600080fd5b61271c84612653565b925061272a60208501612653565b9150604084013590509250925092565b6000806040838503121561274d57600080fd5b50508035926020909101359150565b60006020828403121561276e57600080fd5b610aff82612653565b8015158114610ede57600080fd5b6000806040838503121561279857600080fd5b823561268b81612777565b6000602082840312156127b557600080fd5b5035919050565b600080604083850312156127cf57600080fd5b6127d883612653565b915060208301356127e881612777565b809150509250929050565b60008060006060848603121561280857600080fd5b505081359360208301359350604090920135919050565b600080600080600080600060e0888a03121561283a57600080fd5b505085359760208701359750604087013596606081013596506080810135955060a0810135945060c0013592509050565b6000806040838503121561287e57600080fd5b61288783612653565b915061289560208401612653565b90509250929050565b6000602082840312156128b057600080fd5b5051919050565b6000602082840312156128c957600080fd5b8151610aff81612777565b634e487b7160e01b600052601160045260246000fd5b60008261290757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612926576129266128d4565b500290565b6000821982111561293e5761293e6128d4565b500190565b600082821015612955576129556128d4565b500390565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129c05784516001600160a01b03168352938301939183019160010161299b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156129f657600080fd5b835192506020840151915060408401519050925092509256fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a264697066735822122068bff1fbffec800fa4c15cc21ea4d6d02c39636c239e69a9f3cd35a2a03f873a64736f6c634300080b0033

Deployed Bytecode Sourcemap

11513:15478:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16961:130;;;;;;;;;;;;;:::i;:::-;;13472:55;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13472:55:0;;;;;;;;15099:80;;;;;;;;;;-1:-1:-1;15171:5:0;;;;;;;;;;;;-1:-1:-1;;;15171:5:0;;;;15099:80;;;;;;;:::i;15521:216::-;;;;;;;;;;-1:-1:-1;15521:216:0;;;;;:::i;:::-;;:::i;:::-;;;1423:14:1;;1416:22;1398:41;;1386:2;1371:18;15521:216:0;1258:187:1;14829:88:0;;;;;;;;;;-1:-1:-1;14902:12:0;;14829:88;;24976:451;;;;;;;;;;-1:-1:-1;24976:451:0;;;;;:::i;:::-;;:::i;12649:106::-;;;;;;;;;;;;;;;;16039:370;;;;;;;;;;-1:-1:-1;16039:370:0;;;;;:::i;:::-;;:::i;26443:142::-;;;;;;;;;;;;;:::i;25935:185::-;;;;;;;;;;-1:-1:-1;25935:185:0;;;;;:::i;:::-;;:::i;21449:126::-;;;;;;;;;;;;;:::i;14923:80::-;;;;;;;;;;-1:-1:-1;14923:80:0;;11925:1;2667:36:1;;2655:2;2640:18;14923:80:0;2525:184:1;12339:49:0;;;;;;;;;;-1:-1:-1;12339:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16872:81;;;;;;;;;;;;;:::i;15745:122::-;;;;;;;;;;-1:-1:-1;15745:122:0;;;;;:::i;:::-;;:::i;25435:156::-;;;;;;;;;;-1:-1:-1;25435:156:0;;;;;:::i;:::-;;:::i;13435:30::-;;;;;;;;;;-1:-1:-1;13435:30:0;;;;;;;;15269:105;;;;;;;;;;-1:-1:-1;15269:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;15353:18:0;15335:7;15353:18;;;:9;:18;;;;;;;15269:105;3191:148;;;;;;;;;;;;;:::i;11992:58::-;;;;;;;;;;;;;;;;15185:78;;;;;;;;;;-1:-1:-1;15237:7:0;3042:6;-1:-1:-1;;;;;3042:6:0;15185:78;;;-1:-1:-1;;;;;3506:55:1;;;3488:74;;3476:2;3461:18;15185:78:0;3342:226:1;20571:287:0;;;;;;;;;;-1:-1:-1;20571:287:0;;;;;:::i;:::-;;:::i;21589:111::-;;;;;;;;;;;;;:::i;25599:185::-;;;;;;;;;;-1:-1:-1;25599:185:0;;;;;:::i;:::-;;:::i;2977:79::-;;;;;;;;;;-1:-1:-1;3015:7:0;3042:6;-1:-1:-1;;;;;3042:6:0;2977:79;;15009:84;;;;;;;;;;-1:-1:-1;15083:7:0;;;;;;;;;;;;-1:-1:-1;;;15083:7:0;;;;15009:84;;25792:135;;;;;;;;;;-1:-1:-1;25792:135:0;;;;;:::i;:::-;;:::i;13245:19::-;;;;;;;;;;-1:-1:-1;13245:19:0;;;;-1:-1:-1;;;;;13245:19:0;;;15875:156;;;;;;;;;;-1:-1:-1;15875:156:0;;;;;:::i;:::-;;:::i;24161:165::-;;;;;;;;;;-1:-1:-1;24161:165:0;;;;;:::i;:::-;;:::i;2597:21::-;;;;;;;;;;-1:-1:-1;2597:21:0;;;;-1:-1:-1;;;;;2597:21:0;;;16417:224;;;;;;;;;;-1:-1:-1;16417:224:0;;;;;:::i;:::-;;:::i;21009:226::-;;;;;;;;;;-1:-1:-1;21009:226:0;;;;;:::i;:::-;;:::i;20866:127::-;;;;;;;;;;-1:-1:-1;20866:127:0;;;;;:::i;:::-;;:::i;16649:213::-;;;;;;;;;;-1:-1:-1;16649:213:0;;;;;:::i;:::-;;:::i;26228:201::-;;;;;;;;;;-1:-1:-1;26228:201:0;;;;;:::i;:::-;;:::i;21244:197::-;;;;;;;;;;-1:-1:-1;21244:197:0;;;;;:::i;:::-;;:::i;24340:628::-;;;;;;;;;;-1:-1:-1;24340:628:0;;;;;:::i;:::-;;:::i;12057:62::-;;;;;;;;;;;;;;;;15380:133;;;;;;;;;;-1:-1:-1;15380:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15482:19:0;;;15464:7;15482:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15380:133;12968:35;;;;;;;;;;-1:-1:-1;12968:35:0;;;;-1:-1:-1;;;;;12968:35:0;;;26128:90;;;;;;;;;;;;;:::i;3347:244::-;;;;;;;;;;-1:-1:-1;3347:244:0;;;;;:::i;:::-;;:::i;23802:344::-;;;;;;;;;;-1:-1:-1;23802:344:0;;;;;:::i;:::-;;:::i;13214:24::-;;;;;;;;;;-1:-1:-1;13214:24:0;;;;-1:-1:-1;;;;;13214:24:0;;;13277:31;;;;;;;;;;-1:-1:-1;13277:31:0;;;;-1:-1:-1;;;13277:31:0;;;;;;16961:130;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;;;;;;;;;17031:12:::1;::::0;17012:16:::1;:31:::0;;;17054:12:::1;:27:::0;16961:130::o;15521:216::-;15625:10;15596:4;15613:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;15613:32:0;;;;;;;;;;:41;;;15670:37;15596:4;;15613:32;;15670:37;;;;15648:6;160:25:1;;148:2;133:18;;14:177;15670:37:0;;;;;;;;-1:-1:-1;15725:4:0;15521:216;;;;;:::o;24976:451::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;25175:21:::1;:46:::0;;-1:-1:-1;;;;;;25175:46:0;;::::1;-1:-1:-1::0;;;;;25175:46:0;;::::1;;::::0;;;25232:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25287:20:::1;:44:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;25342:15:::1;:34:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;25387:14:::1;:32:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;24976:451::o;16039:370::-;-1:-1:-1;;;;;16159:19:0;;16139:4;16159:19;;;:11;:19;;;;;;;;16179:10;16159:31;;;;;;;;-1:-1:-1;;16159:52:0;16156:186;;16261:69;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16261:19:0;;-1:-1:-1;16261:19:0;;;:11;:19;;;;;16281:10;16261:31;;;;;;;;;;:69;;16297:6;;16261:35;:69::i;:::-;-1:-1:-1;;;;;16227:19:0;;;;;;:11;:19;;;;;;;;16247:10;16227:31;;;;;;;:103;16156:186;16361:40;16375:6;16383:9;16394:6;16361:13;:40::i;:::-;16354:47;;16039:370;;;;;;:::o;26443:142::-;26571:4;;-1:-1:-1;;;;;26571:4:0;26496:7;15353:18;;;:9;:18;;;;;;26523:54;;26550:4;;-1:-1:-1;;;;;26550:4:0;15335:7;15353:18;;;:9;:18;;;;;;26523:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;26516:61;;26443:142;:::o;25935:185::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;26042:11:::1;::::0;:65:::1;::::0;-1:-1:-1;;;26042:65:0;;::::1;::::0;::::1;6045:25:1::0;;;6086:18;;;6079:34;;;-1:-1:-1;;;;;26042:11:0;;::::1;::::0;:35:::1;::::0;6018:18:1;;26042:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25935:185:::0;;:::o;21449:126::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;21502:11:::1;:18:::0;;-1:-1:-1;;;;21502:18:0::1;-1:-1:-1::0;;;21502:18:0::1;::::0;;21545:12:::1;21531:11;:26:::0;21449:126::o;16872:81::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;16929:10:::1;:8;:10::i;:::-;16872:81::o:0;15745:122::-;15800:4;15824:35;15832:7;-1:-1:-1;;15824:7:0;:35::i;25435:156::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;25527:11:::1;:22:::0;;-1:-1:-1;;25527:22:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;25560:13:::1;:23:::0;25435:156::o;3191:148::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;3298:1:::1;3282:6:::0;;3261:40:::1;::::0;-1:-1:-1;;;;;3282:6:0;;::::1;::::0;3261:40:::1;::::0;3298:1;;3261:40:::1;3329:1;3312:19:::0;;-1:-1:-1;;;;;;3312:19:0::1;::::0;;3191:148::o;20571:287::-;20652:12;20681:11;20678:96;;20717:45;;-1:-1:-1;;;20717:45:0;;20756:4;20717:45;;;3488:74:1;-1:-1:-1;;;;;20717:30:0;;;;;3461:18:1;;20717:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20708:54;;20678:96;20821:20;;20791:59;;-1:-1:-1;;;20791:59:0;;-1:-1:-1;;;;;20821:20:0;;;20791:59;;;6487:74:1;6577:18;;;6570:34;;;20791:29:0;;;;;;6460:18:1;;20791:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21589:111::-;21633:20;;21625:61;;-1:-1:-1;;;;;21633:20:0;;;;21664:21;21625:61;;;;;21633:20;21625:61;21633:20;21625:61;21664:21;21633:20;21625:61;;;;;;;;;;;;;;;;;;;;;21589:111::o;25599:185::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;25694:15:::1;:25:::0;;;;25730:26:::1;:41:::0;25599:185::o;25792:135::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;25881:6:::1;25875:3;:12;25867:21;;;::::0;::::1;;25899:14;:20:::0;25792:135::o;15875:156::-;15955:4;15979:44;15993:10;16005:9;16016:6;15979:13;:44::i;24161:165::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;-1:-1:-1;;;;;24247:19:0;;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;:28;;;::::1;;-1:-1:-1::0;;24247:28:0;;::::1;::::0;::::1;::::0;;;24286:15:::1;:23:::0;;;;;;:32;;;;::::1;;::::0;;24161:165::o;16417:224::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;16550:4:::1;16535:12;;:19;;;;:::i;:::-;16515:16;;:39;;16507:48;;;::::0;::::1;;16629:4;16601:23;16586:12;;:38;;;;:::i;:::-;16585:48;;;;:::i;:::-;16566:16;:67:::0;-1:-1:-1;16417:224:0:o;21009:226::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;21110:14:::1;:22:::0;;;;21143:13:::1;:20:::0;;;;21174:18:::1;:27:::0;21009:226::o;20866:127::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;20945:11:::1;::::0;:40:::1;::::0;-1:-1:-1;;;20945:40:0;;-1:-1:-1;;;;;3506:55:1;;;20945:40:0::1;::::0;::::1;3488:74:1::0;20945:11:0;;::::1;::::0;:26:::1;::::0;3461:18:1;;20945:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20866:127:::0;:::o;16649:213::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;16774:4:::1;16759:12;;:19;;;;:::i;:::-;16743:12;;:35;;16735:44;;;::::0;::::1;;16850:4;16821:24;16806:12;;:39;;;;:::i;:::-;16805:49;;;;:::i;:::-;16790:12;:64:::0;-1:-1:-1;16649:213:0:o;26228:201::-;26334:12;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;26366:11:::1;::::0;:55:::1;::::0;-1:-1:-1;;;26366:55:0;;-1:-1:-1;;;;;7673:15:1;;;26366:55:0::1;::::0;::::1;7655:34:1::0;7725:15;;;7705:18;;;7698:43;7757:18;;;7750:34;;;26366:11:0;;::::1;::::0;:23:::1;::::0;7567:18:1;;26366:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21244:197::-:0;21373:14;;21333:21;;-1:-1:-1;;;;;21373:14:0;21365:68;21429:3;21398:28;21410:16;21333:21;21398:28;:::i;:::-;:34;;;;:::i;:::-;21365:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21302:139;21244:197;:::o;24340:628::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;24534:12:::1;:28:::0;;;24573:9:::1;:22:::0;;;24606:12:::1;:28:::0;;;24653:12:::1;:28:::0;;;24692:6:::1;:16:::0;;;24719:7:::1;:18:::0;;;24701:7;24729:8;24668:13;24621;24759:26:::1;24585:10:::0;24549:13;24759:26:::1;:::i;:::-;:42;;;;:::i;:::-;:58;;;;:::i;:::-;:69;;;;:::i;:::-;:79;;;;:::i;:::-;24748:8;:90:::0;24849:14:::1;:32:::0;;;24911:16:::1;24926:1;24866:15:::0;24911:16:::1;:::i;:::-;24900:8;;:27;24892:68;;;::::0;-1:-1:-1;;;24892:68:0;;8130:2:1;24892:68:0::1;::::0;::::1;8112:21:1::0;8169:2;8149:18;;;8142:30;8208;8188:18;;;8181:58;8256:18;;24892:68:0::1;7928:352:1::0;24892:68:0::1;24340:628:::0;;;;;;;:::o;26128:90::-;26173:11;;:37;;-1:-1:-1;;;26173:37:0;;26199:10;26173:37;;;3488:74:1;-1:-1:-1;;;;;26173:11:0;;;;:25;;3461:18:1;;26173:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26128:90::o;3347:244::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;-1:-1:-1;;;;;3436:22:0;::::1;3428:73;;;::::0;-1:-1:-1;;;3428:73:0;;8487:2:1;3428:73:0::1;::::0;::::1;8469:21:1::0;8526:2;8506:18;;;8499:30;8565:34;8545:18;;;8538:62;-1:-1:-1;;;8616:18:1;;;8609:36;8662:19;;3428:73:0::1;8285:402:1::0;3428:73:0::1;3538:6;::::0;;3517:38:::1;::::0;-1:-1:-1;;;;;3517:38:0;;::::1;::::0;3538:6;::::1;::::0;3517:38:::1;::::0;::::1;3566:6;:17:::0;;-1:-1:-1;;;;;;3566:17:0::1;-1:-1:-1::0;;;;;3566:17:0;;;::::1;::::0;;;::::1;::::0;;3347:244::o;23802:344::-;3104:6;;-1:-1:-1;;;;;3104:6:0;2414:10;3104:22;3096:67;;;;-1:-1:-1;;;3096:67:0;;5712:2:1;3096:67:0;;;5694:21:1;;;5731:18;;;5724:30;-1:-1:-1;;;;;;;;;;;5770:18:1;;;5763:62;5842:18;;3096:67:0;5510:356:1;3096:67:0;-1:-1:-1;;;;;23896:23:0;::::1;23914:4;23896:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;23933:4:0::1;::::0;-1:-1:-1;;;;;23923:14:0;;::::1;23933:4:::0;::::1;23923:14;;23896:41;23888:50;;;::::0;::::1;;-1:-1:-1::0;;;;;23949:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;23949:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;23993:146:::1;;24018:11;::::0;:31:::1;::::0;-1:-1:-1;;;24018:31:0;;-1:-1:-1;;;;;6505:55:1;;;24018:31:0::1;::::0;::::1;6487:74:1::0;24018:11:0::1;6577:18:1::0;;;6570:34;24018:11:0;;::::1;::::0;:20:::1;::::0;6460:18:1;;24018:31:0::1;6313:297:1::0;23993:146:0::1;24080:11;::::0;-1:-1:-1;;;;;24109:17:0;;::::1;24080:11;24109:17:::0;;;:9:::1;:17;::::0;;;;;;;24080:47;;-1:-1:-1;;;24080:47:0;;::::1;::::0;::::1;6487:74:1::0;;;;6577:18;;;6570:34;24080:11:0;::::1;::::0;:20:::1;::::0;6460:18:1;;24080:47:0::1;6313:297:1::0;23993:146:0::1;23802:344:::0;;:::o;775:250::-;833:7;857:6;853:47;;-1:-1:-1;887:1:0;880:8;;853:47;912:9;924:5;928:1;924;:5;:::i;:::-;912:17;-1:-1:-1;957:1:0;948:5;952:1;912:17;948:5;:::i;:::-;:10;940:56;;;;-1:-1:-1;;;940:56:0;;9204:2:1;940:56:0;;;9186:21:1;9243:2;9223:18;;;9216:30;9282:34;9262:18;;;9255:62;-1:-1:-1;;;9333:18:1;;;9326:31;9374:19;;940:56:0;9002:397:1;1031:132:0;1089:7;1116:39;1120:1;1123;1116:39;;;;;;;;;;;;;;;;;:3;:39::i;577:192::-;663:7;699:12;691:6;;;;683:29;;;;-1:-1:-1;;;683:29:0;;;;;;;;:::i;:::-;-1:-1:-1;723:9:0;735:5;739:1;735;:5;:::i;:::-;723:17;577:192;-1:-1:-1;;;;;577:192:0:o;17101:1649::-;17213:6;;17193:4;;17213:6;;17210:63;;;17229:41;17244:6;17252:9;17263:6;17229:14;:41::i;:::-;17222:48;;;;17210:63;-1:-1:-1;;;;;17291:22:0;;;;;;:14;:22;;;;;;;;17290:23;:53;;;;-1:-1:-1;;;;;;17318:25:0;;;;;;:14;:25;;;;;;;;17317:26;17290:53;17287:137;;;17367:11;;-1:-1:-1;;;17367:11:0;;;;17359:43;;;;-1:-1:-1;;;17359:43:0;;9736:2:1;17359:43:0;;;9718:21:1;9775:2;9755:18;;;9748:30;9814:22;9794:18;;;9787:50;9854:18;;17359:43:0;9534:344:1;17359:43:0;-1:-1:-1;;;;;17461:22:0;;;;;;:14;:22;;;;;;;;17460:23;:53;;;;-1:-1:-1;;;;;;17487:26:0;;17508:4;17487:26;;17460:53;:84;;;;-1:-1:-1;17539:4:0;;-1:-1:-1;;;;;17518:26:0;;;17539:4;;17518:26;;17460:84;:105;;;;-1:-1:-1;17561:4:0;;-1:-1:-1;;;;;17548:17:0;;;17561:4;;17548:17;;17460:105;:142;;;;-1:-1:-1;17582:20:0;;-1:-1:-1;;;;;17569:33:0;;;17582:20;;17569:33;;17460:142;:174;;;;-1:-1:-1;17619:15:0;;-1:-1:-1;;;;;17606:28:0;;;17619:15;;17606:28;;17460:174;:205;;;;-1:-1:-1;;;;;;17639:26:0;;;;;;:15;:26;;;;;;;;17638:27;17460:205;17456:398;;;-1:-1:-1;;;;;15353:18:0;;17681;15353;;;:9;:18;;;;;;17770:16;;17746:19;17759:6;15353:18;17746:19;:::i;:::-;17745:41;;17737:115;;;;-1:-1:-1;;;17737:115:0;;10085:2:1;17737:115:0;;;10067:21:1;10124:2;10104:18;;;10097:30;10163:34;10143:18;;;10136:62;10234:32;10214:18;;;10207:60;10284:19;;17737:115:0;9883:426:1;17737:115:0;17666:188;17456:398;17901:28;17914:6;17922;17901:12;:28::i;:::-;17945:16;:14;:16::i;:::-;17942:35;;;17964:10;:8;:10::i;:::-;18009:53;;;;;;;;;;;-1:-1:-1;;;18009:53:0;;;;;;;;-1:-1:-1;;;;;18009:17:0;;-1:-1:-1;18009:17:0;;;:9;:17;;;;;;;;:53;;18031:6;;18009:21;:53::i;:::-;-1:-1:-1;;;;;17989:17:0;;;;;;:9;:17;;;;;;;;:73;;;;18101:11;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;18124:22:0;;;;;;:11;:22;;;;;;;;18101:45;18100:93;;18159:34;18167:6;18175;18183:9;18159:7;:34::i;:::-;18100:93;;;18150:6;18100:93;-1:-1:-1;;;;;18227:20:0;;;;;;:9;:20;;;;;;18075:118;;-1:-1:-1;18227:40:0;;18075:118;18227:24;:40::i;:::-;-1:-1:-1;;;;;18204:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;18284:24;;;;;:16;:24;;;;;;;18280:119;;18329:11;;-1:-1:-1;;;;;18358:17:0;;;18329:11;18358:17;;;:9;:17;;;;;;;;18329:47;;-1:-1:-1;;;18329:47:0;;;;;6487:74:1;;;;6577:18;;;6570:34;18329:11:0;;;:20;;6460:18:1;;18329:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18325:63;;-1:-1:-1;;;;;18415:27:0;;;;;;:16;:27;;;;;;;;18411:129;;18463:11;;-1:-1:-1;;;;;18495:20:0;;;18463:11;18495:20;;;:9;:20;;;;;;;;18463:53;;-1:-1:-1;;;18463:53:0;;;;;6487:74:1;;;;6577:18;;;6570:34;18463:11:0;;;:20;;6460:18:1;;18463:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18459:69;;18555:9;;:13;18552:98;;18588:11;;18608:14;;18588:35;;;;;-1:-1:-1;;;;;18588:11:0;;;;:19;;:35;;;;160:25:1;;;148:2;133:18;;14:177;18588:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18584:51;;18694:9;-1:-1:-1;;;;;18677:43:0;18686:6;-1:-1:-1;;;;;18677:43:0;;18705:14;18677:43;;;;160:25:1;;148:2;133:18;;14:177;18677:43:0;;;;;;;;-1:-1:-1;18738:4:0;;17101:1649;-1:-1:-1;;;;17101:1649:0:o;435:136::-;493:7;520:43;524:1;527;520:43;;;;;;;;;;;;;;;;;:3;:43::i;21706:2088::-;13574:6;:13;;-1:-1:-1;;13574:13:0;13583:4;13574:13;;;21801:15:::1;::::0;21818:26:::1;::::0;13574:6;;21785:60:::1;::::0;:15:::1;:60::i;:::-;:79;;21852:12;;21785:79;;;21848:1;21785:79;21755:109;;21875:23;21901:59;21958:1;21901:52;21944:8;;21901:38;21919:19;21901:13;;:17;;:38;;;;:::i;:::-;:42:::0;::::1;:52::i;:59::-;21875:85;;21971:20;21994:34;22012:15;21994:13;;:17;;:34;;;;:::i;:::-;22065:16;::::0;;22079:1:::1;22065:16:::0;;;;;::::1;::::0;;21971:57;;-1:-1:-1;22041:21:0::1;::::0;22065:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22065:16:0::1;22041:40;;22110:4;22092;22097:1;22092:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22092:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;22136:4:::1;::::0;22126:7;;22136:4;::::1;::::0;22126;;22136;;22126:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;22126:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:14;;;;22219:6;:188:::1;::::0;-1:-1:-1;;;22219:188:0;;22185:21:::1;::::0;22219:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;22291:12;;22161:21:::1;::::0;22334:4;;22361::::1;::::0;22381:15:::1;::::0;22219:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22420:17;22440:40;22466:13;22440:21;:25;;:40;;;;:::i;:::-;22420:60:::0;-1:-1:-1;22493:19:0::1;22515:40;22528:26;:19:::0;22552:1:::1;22528:23;:26::i;:::-;22515:8;::::0;;:12:::1;:40::i;:::-;22493:62:::0;-1:-1:-1;22576:26:0::1;22605:58;22661:1;22605:51;22493:62:::0;22605:51;:9;22619:19;22605:13:::1;:34::i;:58::-;22576:87;;22674:23;22700:41;22729:11;22700:24;22714:9;;22700;:13;;:24;;;;:::i;:41::-;22674:67;;22752:26;22781:44;22813:11;22781:27;22795:12;;22781:9;:13;;:27;;;;:::i;:44::-;22752:73;;22836:26;22865:44;22897:11;22865:27;22879:12;;22865:9;:13;;:27;;;;:::i;:44::-;22836:73;;22920:20;22943:38;22969:11;22943:21;22957:6;;22943:9;:13;;:21;;;;:::i;:38::-;22920:61;;23002:11;;;;;;;;;-1:-1:-1::0;;;;;23002:11:0::1;-1:-1:-1::0;;;;;23002:19:0::1;;23029:15;23002:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;23098:20:0::1;::::0;23090:77:::1;::::0;23070:15:::1;::::0;-1:-1:-1;;;;;23098:20:0::1;::::0;23157:5:::1;::::0;23132:18;;23070:15;23090:77;23070:15;23090:77;23132:18;23098:20;23157:5;23090:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23202:20:0::1;::::0;23194:77:::1;::::0;23069:98;;-1:-1:-1;;;;;;23202:20:0::1;::::0;23261:5:::1;::::0;23236:18;;23194:77:::1;::::0;;;23236:18;23202:20;23261:5;23194:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;23306:14:0::1;::::0;23298:65:::1;::::0;23178:93;;-1:-1:-1;;;;;;23306:14:0::1;::::0;23353:5:::1;::::0;23334:12;;23298:65:::1;::::0;;;23334:12;23306:14;23353:5;23298:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23407:5:0::1;::::0;-1:-1:-1;;23428:19:0;;;-1:-1:-1;23425:362:0::1;;23463:6;::::0;23637:21:::1;::::0;23463:244:::1;::::0;-1:-1:-1;;;23463:244:0;;23539:4:::1;23463:244;::::0;::::1;12183:34:1::0;12233:18;;;12226:34;;;23463:6:0::1;12276:18:1::0;;;12269:34;;;12319:18;;;12312:34;-1:-1:-1;;;;;23637:21:0;;::::1;12362:19:1::0;;;12355:44;23677:15:0::1;12415:19:1::0;;;12408:35;23463:6:0;::::1;::::0;:22:::1;::::0;23493:18;;12094:19:1;;23463:244:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23727:48:0::1;::::0;;6045:25:1;;;6101:2;6086:18;;6079:34;;;23727:48:0::1;::::0;-1:-1:-1;6018:18:1;23727:48:0::1;;;;;;;23425:362;-1:-1:-1::0;;13592:6:0;:14;;-1:-1:-1;;13592:14:0;;;-1:-1:-1;;;;;;;;;;;21706:2088:0:o;1169:189::-;1255:7;1290:12;1283:5;1275:28;;;;-1:-1:-1;;;1275:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1314:9:0;1326:5;1330:1;1326;:5;:::i;18762:330::-;18892:53;;;;;;;;;;;-1:-1:-1;;;18892:53:0;;;;;;;;-1:-1:-1;;;;;18892:17:0;;18855:4;18892:17;;;:9;:17;;;;;;;:53;;18914:6;;18892:21;:53::i;:::-;-1:-1:-1;;;;;18872:17:0;;;;;;;:9;:17;;;;;;:73;;;;18979:20;;;;;;;:32;;19004:6;18979:24;:32::i;:::-;-1:-1:-1;;;;;18956:20:0;;;;;;;:9;:20;;;;;;;:55;;;;19027:35;;;;;;;;;;19055:6;160:25:1;;148:2;133:18;;14:177;19027:35:0;;;;;;;;-1:-1:-1;19080:4:0;18762:330;;;;;:::o;19100:166::-;19197:12;;19187:6;:22;;:49;;;-1:-1:-1;;;;;;19213:23:0;;;;;;:15;:23;;;;;;;;19187:49;19179:79;;;;-1:-1:-1;;;19179:79:0;;12967:2:1;19179:79:0;;;12949:21:1;13006:2;12986:18;;;12979:30;13045:19;13025:18;;;13018:47;13082:18;;19179:79:0;12765:341:1;20364:197:0;20451:4;;20413;;-1:-1:-1;;;;;20451:4:0;20437:10;:18;;;;:38;;-1:-1:-1;20469:6:0;;;;20468:7;20437:38;:62;;;;-1:-1:-1;20488:11:0;;;;20437:62;:116;;;;-1:-1:-1;;20540:13:0;;20530:4;20512:24;;;;:9;:24;;;;;;:41;;;20364:197::o;19402:954::-;19539:18;;19586:4;;19488:7;;19539:18;-1:-1:-1;;;;;19573:17:0;;;19586:4;;19573:17;19570:154;;;-1:-1:-1;19620:14:0;;19570:154;;;19665:4;;-1:-1:-1;;;;;19655:14:0;;;19665:4;;19655:14;19652:72;;;-1:-1:-1;19699:13:0;;19652:72;19736:17;19756:62;19797:14;;19814:3;19797:20;;;;:::i;:::-;19756:36;19781:10;19756:20;19767:8;;19756:6;:10;;:20;;;;:::i;:::-;:24;;:36::i;:62::-;19736:82;;19829:18;19850:36;19877:8;;19850:22;19864:7;;19850:9;:13;;:22;;;;:::i;:36::-;19829:57;-1:-1:-1;19897:22:0;19922:25;:9;19829:57;19922:13;:25::i;:::-;20005:4;19987:24;;;;:9;:24;;;;;;19897:50;;-1:-1:-1;19987:44:0;;19897:50;19987:28;:44::i;:::-;19978:4;19960:24;;;;:9;:24;;;;;;:71;;;;20081:15;;-1:-1:-1;;;;;20081:15:0;20071:26;;;;:42;;20102:10;20071:30;:42::i;:::-;20052:15;;-1:-1:-1;;;;;20052:15:0;;;20042:26;;;;:9;:26;;;;;;;;;:71;;;;20129:47;160:25:1;;;20154:4:0;;20129:47;;;;;;133:18:1;20129:47:0;;;;;;;20200:14;;20197:99;;20252:15;;20235:45;;160:25:1;;;-1:-1:-1;;;;;20252:15:0;;;;20235:45;;;;;148:2:1;133:18;20235:45:0;;;;;;;20197:99;20317:21;:6;20328:9;20317:10;:21::i;:::-;20310:28;19402:954;-1:-1:-1;;;;;;;;19402:954:0:o;248:181::-;306:7;;338:5;342:1;338;:5;:::i;:::-;326:17;;367:1;362;:6;;354:46;;;;-1:-1:-1;;;354:46:0;;13313:2:1;354:46:0;;;13295:21:1;13352:2;13332:18;;;13325:30;13391:29;13371:18;;;13364:57;13438:18;;354:46:0;13111:351:1;26769:151:0;26850:4;26906:6;26874:29;26894:8;26874:19;:29::i;:::-;:38;;26769:151;-1:-1:-1;;;26769:151:0:o;26593:168::-;26662:7;26689:64;26730:22;:20;:22::i;:::-;26712:4;;-1:-1:-1;;;;;26712:4:0;15335:7;15353:18;;;:9;:18;;;;;;26689:36;;26702:22;;26722:1;;26702:15;15269:105;26702:22;26689:8;;:12;:36::i;196:597:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;634:6;631:1;628:13;625:91;;;704:1;699:2;690:6;679:9;675:22;671:31;664:42;625:91;-1:-1:-1;777:2:1;756:15;-1:-1:-1;;752:29:1;737:45;;;;784:2;733:54;;196:597;-1:-1:-1;;;196:597:1:o;798:196::-;866:20;;-1:-1:-1;;;;;915:54:1;;905:65;;895:93;;984:1;981;974:12;895:93;798:196;;;:::o;999:254::-;1067:6;1075;1128:2;1116:9;1107:7;1103:23;1099:32;1096:52;;;1144:1;1141;1134:12;1096:52;1167:29;1186:9;1167:29;:::i;:::-;1157:39;1243:2;1228:18;;;;1215:32;;-1:-1:-1;;;999:254:1:o;1450:484::-;1545:6;1553;1561;1569;1577;1630:3;1618:9;1609:7;1605:23;1601:33;1598:53;;;1647:1;1644;1637:12;1598:53;1670:29;1689:9;1670:29;:::i;:::-;1660:39;;1718:38;1752:2;1741:9;1737:18;1718:38;:::i;:::-;1708:48;;1775:38;1809:2;1798:9;1794:18;1775:38;:::i;:::-;1765:48;;1832:38;1866:2;1855:9;1851:18;1832:38;:::i;:::-;1822:48;;1889:39;1923:3;1912:9;1908:19;1889:39;:::i;:::-;1879:49;;1450:484;;;;;;;;:::o;1939:328::-;2016:6;2024;2032;2085:2;2073:9;2064:7;2060:23;2056:32;2053:52;;;2101:1;2098;2091:12;2053:52;2124:29;2143:9;2124:29;:::i;:::-;2114:39;;2172:38;2206:2;2195:9;2191:18;2172:38;:::i;:::-;2162:48;;2257:2;2246:9;2242:18;2229:32;2219:42;;1939:328;;;;;:::o;2272:248::-;2340:6;2348;2401:2;2389:9;2380:7;2376:23;2372:32;2369:52;;;2417:1;2414;2407:12;2369:52;-1:-1:-1;;2440:23:1;;;2510:2;2495:18;;;2482:32;;-1:-1:-1;2272:248:1:o;2714:186::-;2773:6;2826:2;2814:9;2805:7;2801:23;2797:32;2794:52;;;2842:1;2839;2832:12;2794:52;2865:29;2884:9;2865:29;:::i;2905:118::-;2991:5;2984:13;2977:21;2970:5;2967:32;2957:60;;3013:1;3010;3003:12;3028:309;3093:6;3101;3154:2;3142:9;3133:7;3129:23;3125:32;3122:52;;;3170:1;3167;3160:12;3122:52;3209:9;3196:23;3228:28;3250:5;3228:28;:::i;3573:180::-;3632:6;3685:2;3673:9;3664:7;3660:23;3656:32;3653:52;;;3701:1;3698;3691:12;3653:52;-1:-1:-1;3724:23:1;;3573:180;-1:-1:-1;3573:180:1:o;3758:315::-;3823:6;3831;3884:2;3872:9;3863:7;3859:23;3855:32;3852:52;;;3900:1;3897;3890:12;3852:52;3923:29;3942:9;3923:29;:::i;:::-;3913:39;;4002:2;3991:9;3987:18;3974:32;4015:28;4037:5;4015:28;:::i;:::-;4062:5;4052:15;;;3758:315;;;;;:::o;4078:316::-;4155:6;4163;4171;4224:2;4212:9;4203:7;4199:23;4195:32;4192:52;;;4240:1;4237;4230:12;4192:52;-1:-1:-1;;4263:23:1;;;4333:2;4318:18;;4305:32;;-1:-1:-1;4384:2:1;4369:18;;;4356:32;;4078:316;-1:-1:-1;4078:316:1:o;4399:592::-;4512:6;4520;4528;4536;4544;4552;4560;4613:3;4601:9;4592:7;4588:23;4584:33;4581:53;;;4630:1;4627;4620:12;4581:53;-1:-1:-1;;4653:23:1;;;4723:2;4708:18;;4695:32;;-1:-1:-1;4774:2:1;4759:18;;4746:32;;4825:2;4810:18;;4797:32;;-1:-1:-1;4876:3:1;4861:19;;4848:33;;-1:-1:-1;4928:3:1;4913:19;;4900:33;;-1:-1:-1;4980:3:1;4965:19;4952:33;;-1:-1:-1;4399:592:1;-1:-1:-1;4399:592:1:o;4996:260::-;5064:6;5072;5125:2;5113:9;5104:7;5100:23;5096:32;5093:52;;;5141:1;5138;5131:12;5093:52;5164:29;5183:9;5164:29;:::i;:::-;5154:39;;5212:38;5246:2;5235:9;5231:18;5212:38;:::i;:::-;5202:48;;4996:260;;;;;:::o;6124:184::-;6194:6;6247:2;6235:9;6226:7;6222:23;6218:32;6215:52;;;6263:1;6260;6253:12;6215:52;-1:-1:-1;6286:16:1;;6124:184;-1:-1:-1;6124:184:1:o;6615:245::-;6682:6;6735:2;6723:9;6714:7;6710:23;6706:32;6703:52;;;6751:1;6748;6741:12;6703:52;6783:9;6777:16;6802:28;6824:5;6802:28;:::i;6865:127::-;6926:10;6921:3;6917:20;6914:1;6907:31;6957:4;6954:1;6947:15;6981:4;6978:1;6971:15;6997:217;7037:1;7063;7053:132;;7107:10;7102:3;7098:20;7095:1;7088:31;7142:4;7139:1;7132:15;7170:4;7167:1;7160:15;7053:132;-1:-1:-1;7199:9:1;;6997:217::o;7219:168::-;7259:7;7325:1;7321;7317:6;7313:14;7310:1;7307:21;7302:1;7295:9;7288:17;7284:45;7281:71;;;7332:18;;:::i;:::-;-1:-1:-1;7372:9:1;;7219:168::o;7795:128::-;7835:3;7866:1;7862:6;7859:1;7856:13;7853:39;;;7872:18;;:::i;:::-;-1:-1:-1;7908:9:1;;7795:128::o;9404:125::-;9444:4;9472:1;9469;9466:8;9463:34;;;9477:18;;:::i;:::-;-1:-1:-1;9514:9:1;;9404:125::o;10446:127::-;10507:10;10502:3;10498:20;10495:1;10488:31;10538:4;10535:1;10528:15;10562:4;10559:1;10552:15;10578:1026;10840:4;10888:3;10877:9;10873:19;10919:6;10908:9;10901:25;10945:2;10983:6;10978:2;10967:9;10963:18;10956:34;11026:3;11021:2;11010:9;11006:18;10999:31;11050:6;11085;11079:13;11116:6;11108;11101:22;11154:3;11143:9;11139:19;11132:26;;11193:2;11185:6;11181:15;11167:29;;11214:1;11224:218;11238:6;11235:1;11232:13;11224:218;;;11303:13;;-1:-1:-1;;;;;11299:62:1;11287:75;;11417:15;;;;11382:12;;;;11260:1;11253:9;11224:218;;;-1:-1:-1;;;;;;;11498:55:1;;;;11493:2;11478:18;;11471:83;-1:-1:-1;;;11585:3:1;11570:19;11563:35;11459:3;10578:1026;-1:-1:-1;;;10578:1026:1:o;12454:306::-;12542:6;12550;12558;12611:2;12599:9;12590:7;12586:23;12582:32;12579:52;;;12627:1;12624;12617:12;12579:52;12656:9;12650:16;12640:26;;12706:2;12695:9;12691:18;12685:25;12675:35;;12750:2;12739:9;12735:18;12729:25;12719:35;;12454:306;;;;;:::o

Swarm Source

ipfs://64bfb6c1005bc2787bbecbe9affed694372fcd1867ddb31f585b213902e2d3e2
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.