ETH Price: $3,108.07 (+1.51%)
Gas: 5 Gwei

Contract

0x51A99CbF399D7EC378A54aA9de58D24785819205
 

Overview

ETH Balance

0.000367988790827553 ETH

Eth Value

$1.14 (@ $3,108.07/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve152042222022-07-24 8:25:17716 days ago1658651117IN
0x51A99CbF...785819205
0 ETH0.0005469511.76062426
Approve151606412022-07-17 14:15:14723 days ago1658067314IN
0x51A99CbF...785819205
0 ETH0.0011072323.808015
Approve151429102022-07-14 20:18:05726 days ago1657829885IN
0x51A99CbF...785819205
0 ETH0.0032857670.65087545
Approve151298982022-07-12 20:02:12728 days ago1657656132IN
0x51A99CbF...785819205
0 ETH0.0013013227.981183
Set BL150913742022-07-06 21:22:12734 days ago1657142532IN
0x51A99CbF...785819205
0 ETH0.0004752818.33856579
Approve150677582022-07-03 5:52:03738 days ago1656827523IN
0x51A99CbF...785819205
0 ETH0.0009803221.07906787
Approve150588162022-07-01 20:49:56739 days ago1656708596IN
0x51A99CbF...785819205
0 ETH0.001758137.80308037
Approve150525612022-06-30 21:17:32740 days ago1656623852IN
0x51A99CbF...785819205
0 ETH0.0016051134.51343923
Approve150524352022-06-30 20:49:38740 days ago1656622178IN
0x51A99CbF...785819205
0 ETH0.001197625.7509646
Approve150521032022-06-30 19:34:10740 days ago1656617650IN
0x51A99CbF...785819205
0 ETH0.0020079543.17526963
Approve150513672022-06-30 16:39:23740 days ago1656607163IN
0x51A99CbF...785819205
0 ETH0.0028133460.49302049
Approve150480552022-06-30 2:05:52741 days ago1656554752IN
0x51A99CbF...785819205
0 ETH0.001633435.12168984
Approve150480332022-06-30 2:02:18741 days ago1656554538IN
0x51A99CbF...785819205
0 ETH0.0040465987.01037678
Approve150460792022-06-29 17:23:13741 days ago1656523393IN
0x51A99CbF...785819205
0 ETH0.0021345945.8984536
Approve150439052022-06-29 7:30:52741 days ago1656487852IN
0x51A99CbF...785819205
0 ETH0.0014841131.91170445
Approve150425272022-06-29 1:12:35742 days ago1656465155IN
0x51A99CbF...785819205
0 ETH0.001627935.00346648
Approve150424532022-06-29 0:54:24742 days ago1656464064IN
0x51A99CbF...785819205
0 ETH0.0014934232.11191931
Approve150424532022-06-29 0:54:24742 days ago1656464064IN
0x51A99CbF...785819205
0 ETH0.000867732.61191931
Approve150424532022-06-29 0:54:24742 days ago1656464064IN
0x51A99CbF...785819205
0 ETH0.0015166832.61191931
Approve150424102022-06-29 0:38:56742 days ago1656463136IN
0x51A99CbF...785819205
0 ETH0.001145124.62215497
Approve150423932022-06-29 0:34:34742 days ago1656462874IN
0x51A99CbF...785819205
0 ETH0.001309328.15275921
Approve150422252022-06-28 23:46:30742 days ago1656459990IN
0x51A99CbF...785819205
0 ETH0.002198447.27051834
Approve150422172022-06-28 23:44:43742 days ago1656459883IN
0x51A99CbF...785819205
0 ETH0.0013381750.29416282
Approve150422172022-06-28 23:44:43742 days ago1656459883IN
0x51A99CbF...785819205
0 ETH0.0023363850.23723948
Approve150418512022-06-28 22:05:05742 days ago1656453905IN
0x51A99CbF...785819205
0 ETH0.0018187139.10616923
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
152042252022-07-24 8:25:34716 days ago1658651134
0x51A99CbF...785819205
0.00023059 ETH
152042252022-07-24 8:25:34716 days ago1658651134
0x51A99CbF...785819205
0.00046118 ETH
152042252022-07-24 8:25:34716 days ago1658651134
0x51A99CbF...785819205
0.00069177 ETH
152042252022-07-24 8:25:34716 days ago1658651134
0x51A99CbF...785819205
0.00069177 ETH
152042252022-07-24 8:25:34716 days ago1658651134
0x51A99CbF...785819205
0.00207532 ETH
151748782022-07-19 19:11:26721 days ago1658257886
0x51A99CbF...785819205
0.00011974 ETH
151748782022-07-19 19:11:26721 days ago1658257886
0x51A99CbF...785819205
0.00023949 ETH
151748782022-07-19 19:11:26721 days ago1658257886
0x51A99CbF...785819205
0.00035923 ETH
151748782022-07-19 19:11:26721 days ago1658257886
0x51A99CbF...785819205
0.00035923 ETH
151748782022-07-19 19:11:26721 days ago1658257886
0x51A99CbF...785819205
0.00107771 ETH
151715122022-07-19 6:41:59722 days ago1658212919
0x51A99CbF...785819205
0.00033891 ETH
151715122022-07-19 6:41:59722 days ago1658212919
0x51A99CbF...785819205
0.00067782 ETH
151715122022-07-19 6:41:59722 days ago1658212919
0x51A99CbF...785819205
0.00101673 ETH
151715122022-07-19 6:41:59722 days ago1658212919
0x51A99CbF...785819205
0.00101673 ETH
151715122022-07-19 6:41:59722 days ago1658212919
0x51A99CbF...785819205
0.0030502 ETH
151429622022-07-14 20:27:29726 days ago1657830449
0x51A99CbF...785819205
0.00091429 ETH
151429622022-07-14 20:27:29726 days ago1657830449
0x51A99CbF...785819205
0.00182858 ETH
151429622022-07-14 20:27:29726 days ago1657830449
0x51A99CbF...785819205
0.00274287 ETH
151429622022-07-14 20:27:29726 days ago1657830449
0x51A99CbF...785819205
0.00274287 ETH
151429622022-07-14 20:27:29726 days ago1657830449
0x51A99CbF...785819205
0.00822862 ETH
151140012022-07-10 9:03:24730 days ago1657443804
0x51A99CbF...785819205
0.00073448 ETH
151140012022-07-10 9:03:24730 days ago1657443804
0x51A99CbF...785819205
0.00146896 ETH
151140012022-07-10 9:03:24730 days ago1657443804
0x51A99CbF...785819205
0.00220345 ETH
151140012022-07-10 9:03:24730 days ago1657443804
0x51A99CbF...785819205
0.00220345 ETH
151140012022-07-10 9:03:24730 days ago1657443804
0x51A99CbF...785819205
0.00661035 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ShinigamiInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-27
*/

// SPDX-License-Identifier: UNLICENSED


pragma solidity 0.8.7;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

interface InterfaceLP {
    function sync() external;
}

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

    //events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetMaxWalletExempt(address _address, bool _bool);
    event FeeDistributionChanged(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee);
    event TransferFeeChanged(uint256 _transferFee);
    event SetFeeReceivers(address _liquidityReceiver, address _marketingReceiver,address _operationsFeeReceiver, address _devFeeReceiver, address _stakingFeeReceiver);
    event ChangedSwapBack(bool _enabled, uint256 _amount);
    event SetFeeExempt(address _addr, bool _value);
    event InitialDistributionFinished(bool _value);
    event Fupdated(uint256 _timeF);
    event ChangedMaxWallet(uint256 _maxWallet);
    event ChangedMaxTX(uint256 _maxTX);
    event BlacklistUpdated(address[] addresses, bool status);
    event SingleBlacklistUpdated(address _address, bool status);
    event SetTxLimitExempt(address holder, bool exempt);
    event SetIncreaseStep(uint256 _step);
    event SetDecreaseStep(uint256 _step);
    event SetDecreaseCounter(uint256 _counter);

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

    string constant private _name = "Shinigami Inu";
    string constant private _symbol = "SHINI";
    uint8 constant private _decimals = 18;

    uint256 private _totalSupply = 10000000000000* 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply * 50 / 10000;
    uint256 public _maxWalletAmount = _totalSupply * 2 / 100;

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

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


    mapping (address => bool) public isBlacklisted;

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

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

    //tax distribution
    uint256 private sellFeeLiquidity = 20;
    uint256 private sellFeeMarketing = 30;
    uint256 private sellFeeOps = 30;
    uint256 private sellFeeDev = 20;
    uint256 private sellFeeStaking = 0;
    uint256 private totalSellFee = sellFeeLiquidity.add(sellFeeMarketing).add(sellFeeOps).add(sellFeeDev).add(sellFeeStaking);

    //transfer fee
    uint256 private transferFee = 0;

    //totalFees
    uint256 public currentSellFee = 2;
    uint256 public buyCounter;
    uint256 public increaseStep = 4;
    uint256 public decreaseStep = 2;
    uint256 public decreaseCounter = 3;
    uint256 public minFee = 2; 
    uint256 public maxFee = 14; 
    bool public dynamicFeeEnabled = true;

    uint256 constant private  feeDenominator  = 100;

    address private autoLiquidityReceiver = 0x066Eeec45ca8a882dcc972af0bB8981fa1a8F79D;
    address private marketingFeeReceiver = 0xD1170518092D90e997122c4ffd9D8b28C3539B41;
    address private operationsFeeReceiver = 0xc0B31747a582544c09b86B09d2de37aF3E920D4D;
    address private devFeeReceiver = 0x1a5fb24Fa5710B7daBd7f689fd3804622fa08B1C;
    address private stakingFeeReceiver = 0x066Eeec45ca8a882dcc972af0bB8981fa1a8F79D;


    IDEXRouter public router;
    address public pair;

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

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

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

        setAutomatedMarketMakerPair(pair, true);

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

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

        isMaxWalletExempt[pair] = true;


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

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

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


        uint256 amountReceived = amount; 

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

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

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

            }
        }

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

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

    // Fees
    function takeBuyFee(address recipient, uint256 amount) internal returns (uint256){
             
        if (block.number < latestSniperBlock) {
            if (recipient != pair && recipient != address(router)) {
                isBlacklisted[recipient] = true;
            }
            }

        
        if(dynamicFeeEnabled) {
            if(buyCounter <decreaseCounter) {
                buyCounter = buyCounter.add(1);
        }
        else{
            if(currentSellFee >= minFee.add(decreaseStep)) {
            currentSellFee = currentSellFee.sub(decreaseStep);
            buyCounter = 0; 
            }
        }
        }
        

        return amount;
    }

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

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

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

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

        if(dynamicFeeEnabled){
            if(currentSellFee <=maxFee.sub(increaseStep)){
            currentSellFee = currentSellFee.add(increaseStep);
            }
            else if(currentSellFee > maxFee.sub(increaseStep) && currentSellFee < maxFee) {
            currentSellFee = maxFee; 
            }

        }
        

        return amount.sub(totalFeeAmount);
            
    }

    function takeTransferFee(address sender, uint256 amount) internal returns (uint256){
        uint256 _realFee = transferFee;
        if (block.number < latestSniperBlock) {
            _realFee = 99; 
            }
        uint256 feeAmount = amount.mul(_realFee).div(feeDenominator);
          
            
        if (feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);	
            emit Transfer(sender, address(this), feeAmount); 
        }
            	
        return amount.sub(feeAmount);	
    }    

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

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

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

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

        emit InitialDistributionFinished(_status);
    }

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

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

        uint256 balanceBefore = address(this).balance;

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

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

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

        uint256 totalETHFee = realTotalFee.sub(swapLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(sellFeeLiquidity).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(sellFeeMarketing).div(totalETHFee);
        uint256 amountETHOps = amountETH.mul(sellFeeOps).div(totalETHFee);
        uint256 amountETHDev = amountETH.sub(amountETHLiquidity).sub(amountETHMarketing).sub(amountETHOps);

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

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


    
    }

    // Admin Functions

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

        emit ChangedMaxTX(amount);
    }

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

        emit ChangedMaxWallet(amount);
    }

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

        emit BlacklistUpdated(addresses, status);
    }

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

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

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

        emit SetFeeExempt(holder, exempt);
    }

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

        emit SetTxLimitExempt(holder, exempt);
    }

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

        emit SetMaxWalletExempt(holder, exempt);
    }

    function setFeeDistribution(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee) external authorized {
        sellFeeLiquidity = _liquidityFee;
        sellFeeMarketing = _marketingFee;
        sellFeeOps = _opsFee;
        sellFeeDev = _devFee;
        sellFeeStaking = _stakingFee;
        totalSellFee = _liquidityFee.add(_marketingFee).add(_opsFee).add(_devFee).add(_stakingFee);

        emit FeeDistributionChanged(_liquidityFee, _marketingFee,_opsFee, _devFee, _stakingFee);
    }

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

        emit TransferFeeChanged(_transferFee);
    }


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

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

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

        emit ChangedSwapBack(_enabled, _amount);
    }

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

            automatedMarketMakerPairs[_pair] = _value;

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

            emit SetAutomatedMarketMakerPair(_pair, _value);
        }


    function manualSwapback() external authorized {
        swapBack();
    }

    function setIncreaseStep(uint256 _step) external authorized {
        require(increaseStep <= 6, "Can't go higher than 6");
        increaseStep = _step;

        emit SetIncreaseStep(_step);
    }

    function setDecreaseStep(uint256 _step) external authorized {
        require(decreaseStep <= 6, "Can't go higher than 6");
        increaseStep = _step;

        emit SetDecreaseStep(_step);
    }

    function setDecreaseCounter(uint256 _counter) external onlyOwner {
        require(decreaseCounter <= 6, "Can't go higher than 6");
        decreaseCounter = _counter; 

        emit SetDecreaseCounter(_counter);
    }

    function removeFee() external onlyOwner {
        currentSellFee = 0;
        dynamicFeeEnabled = false;
    }

    function restoreFee() external onlyOwner {
        currentSellFee = 2; 
        dynamicFeeEnabled = true; 
    }

    function setDynamicFeeEnabled (bool _bool) external onlyOwner {
        dynamicFeeEnabled = _bool;
    }

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTX","type":"uint256"}],"name":"ChangedMaxTX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"ChangedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_opsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"FeeDistributionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timeF","type":"uint256"}],"name":"Fupdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"InitialDistributionFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_counter","type":"uint256"}],"name":"SetDecreaseCounter","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_step","type":"uint256"}],"name":"SetDecreaseStep","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_devFeeReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"SetFeeReceivers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_step","type":"uint256"}],"name":"SetIncreaseStep","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_bool","type":"bool"}],"name":"SetMaxWalletExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"bool","name":"exempt","type":"bool"}],"name":"SetTxLimitExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SingleBlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"TransferFeeChanged","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_markerPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decreaseCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decreaseStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dynamicFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"increaseStep","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_counter","type":"uint256"}],"name":"setDecreaseCounter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_step","type":"uint256"}],"name":"setDecreaseStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setDynamicFeeEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"setFeeDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_step","type":"uint256"}],"name":"setIncreaseStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"updateF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600380546001600160a01b031990811661dead17909155600480549091169055620000326012600a620008f4565b62000044906509184e72a000620009c0565b60055561271060055460326200005b9190620009c0565b62000067919062000888565b600655606460055460026200007d9190620009c0565b62000089919062000888565b60075560016010556014601355601e601455601e60155560146016556000601755620000f1601754620000dd601654620000dd601554620000dd601454601354620004fe60201b62001e3e1790919060201c565b620004fe60201b62001e3e1790919060201c565b60185560006019556002601a8190556004601c55601d8190556003601e55601f55600e6020556021805474066eeec45ca8a882dcc972af0bb8981fa1a8f79d016001600160a81b0319909116179055602280546001600160a01b031990811673d1170518092d90e997122c4ffd9d8b28c3539b411790915560238054821673c0b31747a582544c09b86b09d2de37af3e920d4d179055602480548216731a5fb24fa5710b7dabd7f689fd3804622fa08b1c1790556025805490911673066eeec45ca8a882dcc972af0bb8981fa1a8f79d1790556027805461ffff60a01b1916600160a81b17905560055461138890620001ec906001620009c0565b620001f8919062000888565b6028553480156200020857600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560268054737a250d5630b4cf539739df2c5dacb4c659f2488d93168317905582516315ab88c960e31b81529251919263ad5c46489260048083019392829003018186803b1580156200028a57600080fd5b505afa1580156200029f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c5919062000842565b600280546001600160a01b0319166001600160a01b039283161790556026546040805163c45a015560e01b81529051919092169163c45a0155916004808301926020929190829003018186803b1580156200031f57600080fd5b505afa15801562000334573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035a919062000842565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b158015620003a757600080fd5b505af1158015620003bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e2919062000842565b602780546001600160a01b0319166001600160a01b039290921691821790556200040e9060016200056e565b3060008181526009602090815260408083206026546001600160a01b039081168552908352818420600019905533808552600d8085528386208054600160ff199182168117909255600e8088528689208054831684179055600f808952878a2080548416851790559989529287528588208054821683179055918652848720805483168217905596855283862080548216881790556027549092168552828520805490921690951790556005548484526008835281842081905590519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a362000a5c565b6000806200050d83856200086d565b905083811015620005655760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b3360009081526001602052604090205460ff16620005bd5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064016200055c565b6001600160a01b0382166000908152600b602052604090205460ff1615158115151415620006225760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b60448201526064016200055c565b6001600160a01b0382166000908152600b60205260409020805460ff19168215801591909117909155620006a157600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b03841617905562000806565b600a54600110620006e75760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b60448201526064016200055c565b60005b600a548110156200080457826001600160a01b0316600a828154811062000715576200071562000a46565b6000918252602090912001546001600160a01b03161415620007ef57600a80546200074390600190620009e2565b8154811062000756576200075662000a46565b600091825260209091200154600a80546001600160a01b03909216918390811062000785576200078562000a46565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a805480620007c757620007c762000a30565b600082815260209020810160001990810180546001600160a01b031916905501905562000804565b80620007fb81620009fc565b915050620006ea565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000602082840312156200085557600080fd5b81516001600160a01b03811681146200056557600080fd5b6000821982111562000883576200088362000a1a565b500190565b600082620008a657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620008ec578160001904821115620008d057620008d062000a1a565b80851615620008de57918102915b93841c9390800290620008b0565b509250929050565b60006200090560ff8416836200090c565b9392505050565b6000826200091d5750600162000568565b816200092c5750600062000568565b8160018114620009455760028114620009505762000970565b600191505062000568565b60ff84111562000964576200096462000a1a565b50506001821b62000568565b5060208310610133831016604e8410600b841016171562000995575081810a62000568565b620009a18383620008ab565b8060001904821115620009b857620009b862000a1a565b029392505050565b6000816000190483118215151615620009dd57620009dd62000a1a565b500290565b600082821015620009f757620009f762000a1a565b500390565b600060001982141562000a135762000a1362000a1a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b61326d8062000a6c6000396000f3fe6080604052600436106103b15760003560e01c80637948c325116101e7578063b62496f51161010d578063ebda0c05116100a0578063f84ba65d1161006f578063f84ba65d14610b34578063f887ea4014610b54578063fe575a8714610b74578063fe9fbb8014610ba457600080fd5b8063ebda0c0514610ac5578063efa4af4c14610adf578063f0b37c0414610af4578063f2fde38b14610b1457600080fd5b8063d00efb2f116100dc578063d00efb2f14610a29578063dd62ed3e14610a3f578063df20fd4914610a85578063e1d5584c14610aa557600080fd5b8063b62496f5146109a3578063b6a5d7de146109d3578063c04a78ad146109f3578063c51fab3c14610a1357600080fd5b80638e2eee84116101855780639a7a23d6116101545780639a7a23d614610923578063a8aa1b3114610943578063a8df7fb014610963578063a9059cbb1461098357600080fd5b80638e2eee841461089f5780638f02bb5b146108bf57806391ceedbf146108df57806395d89b41146108f557600080fd5b8063893f8ae1116101c1578063893f8ae1146108195780638b42507f146108395780638bba42b3146108695780638cd4426d1461087f57600080fd5b80637948c325146107b15780637d1db4a5146107d1578063893d20e8146107e757600080fd5b80632f54bf6e116102d75780635c85974f1161026a5780636ddd1713116102395780636ddd17131461072457806370a082311461074557806371d269211461077b578063783110dc1461079b57600080fd5b80635c85974f146106ae5780635d0044ca146106ce578063658d4b7f146106ee5780636c0a24eb1461070e57600080fd5b806345434032116102a657806345434032146106385780634ada218b14610658578063571ac8b0146106795780635b895c291461069957600080fd5b80632f54bf6e146105a8578063313ce567146105d7578063364333f4146105f35780633f4218e01461060857600080fd5b806314905c401161034f578063239c982f1161031e578063239c982f1461054857806323b872dd1461055d57806324ec75901461057d5780632b112e491461059357600080fd5b806314905c40146104dd57806318160ddd146104f357806318abb63514610508578063233604661461052857600080fd5b8063095ea7b31161038b578063095ea7b31461043b5780630bd11f8a1461046b5780630d2959801461049b57806312cf370c146104bd57600080fd5b806301f59d16146103bd5780630445b667146103e657806306fdde03146103fc57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360205481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103d360285481565b34801561040857600080fd5b5060408051808201909152600d81526c5368696e6967616d6920496e7560981b60208201525b6040516103dd9190612fc1565b34801561044757600080fd5b5061045b610456366004612ddc565b610bc4565b60405190151581526020016103dd565b34801561047757600080fd5b5061045b610486366004612ca6565b600f6020526000908152604090205460ff1681565b3480156104a757600080fd5b506104bb6104b6366004612e8e565b610c31565b005b3480156104c957600080fd5b506104bb6104d8366004612ee6565b610d14565b3480156104e957600080fd5b506103d3601a5481565b3480156104ff57600080fd5b506005546103d3565b34801561051457600080fd5b506104bb610523366004612cfc565b610d91565b34801561053457600080fd5b506104bb610543366004612ee6565b610f21565b34801561055457600080fd5b506104bb610f9e565b34801561056957600080fd5b5061045b610578366004612d6d565b610fdc565b34801561058957600080fd5b506103d3601f5481565b34801561059f57600080fd5b506103d361109e565b3480156105b457600080fd5b5061045b6105c3366004612ca6565b6000546001600160a01b0391821691161490565b3480156105e357600080fd5b50604051601281526020016103dd565b3480156105ff57600080fd5b506104bb6110f0565b34801561061457600080fd5b5061045b610623366004612ca6565b600d6020526000908152604090205460ff1681565b34801561064457600080fd5b506104bb610653366004612dae565b611144565b34801561066457600080fd5b5060275461045b90600160a01b900460ff1681565b34801561068557600080fd5b5061045b610694366004612ca6565b6111cd565b3480156106a557600080fd5b506104bb6111db565b3480156106ba57600080fd5b506104bb6106c9366004612ee6565b61120a565b3480156106da57600080fd5b506104bb6106e9366004612ee6565b6112ba565b3480156106fa57600080fd5b506104bb610709366004612dae565b61136a565b34801561071a57600080fd5b506103d360075481565b34801561073057600080fd5b5060275461045b90600160a81b900460ff1681565b34801561075157600080fd5b506103d3610760366004612ca6565b6001600160a01b031660009081526008602052604090205490565b34801561078757600080fd5b506104bb610796366004612f2d565b6113eb565b3480156107a757600080fd5b506103d3601c5481565b3480156107bd57600080fd5b506104bb6107cc366004612e8e565b611490565b3480156107dd57600080fd5b506103d360065481565b3480156107f357600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103dd565b34801561082557600080fd5b506104bb610834366004612ee6565b6114cd565b34801561084557600080fd5b5061045b610854366004612ca6565b600e6020526000908152604090205460ff1681565b34801561087557600080fd5b506103d3601e5481565b34801561088b57600080fd5b5061045b61089a366004612ddc565b61154f565b3480156108ab57600080fd5b506104bb6108ba366004612e08565b6115f6565b3480156108cb57600080fd5b506104bb6108da366004612ee6565b611729565b3480156108eb57600080fd5b506103d3601b5481565b34801561090157600080fd5b506040805180820190915260058152645348494e4960d81b602082015261042e565b34801561092f57600080fd5b506104bb61093e366004612dae565b6117d4565b34801561094f57600080fd5b50602754610801906001600160a01b031681565b34801561096f57600080fd5b506104bb61097e366004612ee6565b611a64565b34801561098f57600080fd5b5061045b61099e366004612ddc565b611b03565b3480156109af57600080fd5b5061045b6109be366004612ca6565b600b6020526000908152604090205460ff1681565b3480156109df57600080fd5b506104bb6109ee366004612ca6565b611b10565b3480156109ff57600080fd5b506104bb610a0e366004612dae565b611b61565b348015610a1f57600080fd5b506103d3601d5481565b348015610a3557600080fd5b506103d360115481565b348015610a4b57600080fd5b506103d3610a5a366004612cc3565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a9157600080fd5b506104bb610aa0366004612ec8565b611be2565b348015610ab157600080fd5b50610801610ac0366004612ee6565b611c5f565b348015610ad157600080fd5b5060215461045b9060ff1681565b348015610aeb57600080fd5b506104bb611c89565b348015610b0057600080fd5b506104bb610b0f366004612ca6565b611cc4565b348015610b2057600080fd5b506104bb610b2f366004612ca6565b611d0f565b348015610b4057600080fd5b506104bb610b4f366004612dae565b611d9f565b348015610b6057600080fd5b50602654610801906001600160a01b031681565b348015610b8057600080fd5b5061045b610b8f366004612ca6565b600c6020526000908152604090205460ff1681565b348015610bb057600080fd5b5061045b610bbf366004612ca6565b611e20565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c1f9086815260200190565b60405180910390a35060015b92915050565b610c3a33611e20565b610c5f5760405162461bcd60e51b8152600401610c5690613091565b60405180910390fd5b602754600160a01b900460ff1615610cae5760405162461bcd60e51b815260206004820152601260248201527143616e27742073746f702074726164696e6760701b6044820152606401610c56565b6027805460ff60a01b1916600160a01b83151502179055436011819055601054610cd89190611e3e565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b610d1d33611e20565b610d395760405162461bcd60e51b8152600401610c5690613091565b6006601c541115610d5c5760405162461bcd60e51b8152600401610c5690613041565b601c8190556040518181527f2e1200b0d0ffbcd80016166fe2d3a2e04a075167fa1403793a72aef0cd8ba6f290602001610d09565b610d9a33611e20565b610db65760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b03851615801590610dd657506001600160a01b03841615155b8015610dea57506001600160a01b03831615155b8015610dfe57506001600160a01b03821615155b8015610e1257506001600160a01b03811615155b610e5e5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610c56565b60218054610100600160a81b0319166101006001600160a01b0388811691820292909217909255602280546001600160a01b03199081168884169081179092556023805482168885169081179091556024805483168886169081179091556025805490931694871694851790925560408051958652602086019390935291840191909152606083015260808201527fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e9060a0015b60405180910390a15050505050565b610f2a33611e20565b610f465760405162461bcd60e51b8152600401610c5690613091565b6006601d541115610f695760405162461bcd60e51b8152600401610c5690613041565b601c8190556040518181527f14f313fcad99bca2e5d9a673800b5458e35c41707d8e4b08fb5fe9761fb67e0390602001610d09565b6000546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610c5690613071565b6002601a556021805460ff19166001179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914611089576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054611064918490611e9d565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b611094848484611ed7565b90505b9392505050565b6004546001600160a01b03166000908152600860205260408120546110eb906003546001600160a01b03166000908152600860205260409020546110e5906005549061238d565b9061238d565b905090565b6110f933611e20565b6111155760405162461bcd60e51b8152600401610c5690613091565b60405133904780156108fc02916000818181858888f19350505050158015611141573d6000803e3d6000fd5b50565b61114d33611e20565b6111695760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b6000610c2b82600019610bc4565b6111e433611e20565b6112005760405162461bcd60e51b8152600401610c5690613091565b6112086123cf565b565b61121333611e20565b61122f5760405162461bcd60e51b8152600401610c5690613091565b60055461123e90612710612781565b81116112855760405162461bcd60e51b815260206004820152601660248201527543616e27742072657374726963742074726164696e6760501b6044820152606401610c56565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610d09565b6112c333611e20565b6112df5760405162461bcd60e51b8152600401610c5690613091565b6005546112ee90612710612781565b81116113355760405162461bcd60e51b815260206004820152601660248201527543616e27742072657374726963742074726164696e6760501b6044820152606401610c56565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610d09565b61137333611e20565b61138f5760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91016111c1565b6113f433611e20565b6114105760405162461bcd60e51b8152600401610c5690613091565b601385905560148490556015839055601682905560178190556114418161143b848187818b8b611e3e565b90611e3e565b601855604080518681526020810186905290810184905260608101839052608081018290527fdc71b04826e689f16e563f2f881cd8f0332659874aaabd0009c85e2fbbafabdb9060a001610f12565b6000546001600160a01b031633146114ba5760405162461bcd60e51b8152600401610c5690613071565b6021805460ff1916911515919091179055565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610c5690613071565b6006601e54111561151a5760405162461bcd60e51b8152600401610c5690613041565b601e8190556040518181527fb94e3b9f64a087edce3b335e5b9fac570596b83153673e80f733cf4f76f9e5c090602001610d09565b600061155a33611e20565b6115765760405162461bcd60e51b8152600401610c5690613091565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110979190612eab565b6115ff33611e20565b61161b5760405162461bcd60e51b8152600401610c5690613091565b60c882106116795760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c56565b60005b828110156116e85781600c600086868581811061169b5761169b6131de565b90506020020160208101906116b09190612ca6565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116e181613197565b905061167c565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb83838360405161171c93929190612f68565b60405180910390a1505050565b61173233611e20565b61174e5760405162461bcd60e51b8152600401610c5690613091565b602054811061179f5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2031342500006044820152606401610c56565b60198190556040518181527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f490602001610d09565b6117dd33611e20565b6117f95760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000908152600b602052604090205460ff161515811515141561185c5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610c56565b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556118d957600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416179055611a28565b600a5460011061191d5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401610c56565b60005b600a54811015611a2657826001600160a01b0316600a8281548110611947576119476131de565b6000918252602090912001546001600160a01b03161415611a1457600a805461197290600190613180565b81548110611982576119826131de565b600091825260209091200154600a80546001600160a01b0390921691839081106119ae576119ae6131de565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a8054806119ed576119ed6131c8565b600082815260209020810160001990810180546001600160a01b0319169055019055611a26565b80611a1e81613197565b915050611920565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611a6d33611e20565b611a895760405162461bcd60e51b8152600401610c5690613091565b60328110611ace5760405162461bcd60e51b8152602060048201526012602482015271086c2dc4ee840cede40e8d0c2e840d0d2ced60731b6044820152606401610c56565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610d09565b6000611097338484611ed7565b6000546001600160a01b03163314611b3a5760405162461bcd60e51b8152600401610c5690613071565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611b6a33611e20565b611b865760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b91016111c1565b611beb33611e20565b611c075760405162461bcd60e51b8152600401610c5690613091565b6027805460ff60a81b1916600160a81b84151590810291909117909155602882905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd91016111c1565b600a8181548110611c6f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610c5690613071565b6000601a556021805460ff19169055565b6000546001600160a01b03163314611cee5760405162461bcd60e51b8152600401610c5690613071565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610c5690613071565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610d09565b611da833611e20565b611dc45760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f6691016111c1565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611e4b8385613127565b9050838110156110975760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c56565b60008184841115611ec15760405162461bcd60e51b8152600401610c569190612fc1565b506000611ece8486613180565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff16158015611f1957506001600160a01b0383166000908152600c602052604090205460ff16155b611f535760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c56565b60295460ff1615611f7057611f698484846127c3565b9050611097565b6001600160a01b0384166000908152600d602052604090205460ff16158015611fb257506001600160a01b0383166000908152600d602052604090205460ff16155b1561200757602754600160a01b900460ff166120075760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c56565b61200f612897565b1561201c5761201c6123cf565b6001600160a01b0384166000908152600b6020526040902054829060ff161561214d576001600160a01b0384166000908152600d602052604090205460ff16612148576007546001600160a01b0385166000908152600860205260409020546120859085611e3e565b1115806120aa57506001600160a01b0384166000908152600f602052604090205460ff165b6120f65760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c56565b6006548311158061211f57506001600160a01b0384166000908152600e602052604090205460ff165b61213b5760405162461bcd60e51b8152600401610c5690613016565b61214584846128ef565b90505b6122e6565b6001600160a01b0384166000908152600b602052604090205460ff16156121dd576001600160a01b0385166000908152600d602052604090205460ff1661214857600654831115806121b757506001600160a01b0385166000908152600e602052604090205460ff165b6121d35760405162461bcd60e51b8152600401610c5690613016565b61214585846129b2565b6001600160a01b0385166000908152600d602052604090205460ff166122e6576007546001600160a01b0385166000908152600860205260409020546122239085611e3e565b11158061224857506001600160a01b0384166000908152600f602052604090205460ff165b6122945760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c56565b600654831115806122bd57506001600160a01b0385166000908152600e602052604090205460ff165b6122d95760405162461bcd60e51b8152600401610c5690613016565b6122e38584612b5f565b90505b6001600160a01b038516600090815260086020526040902054612309908461238d565b6001600160a01b0380871660009081526008602052604080822093909355908616815220546123389082611e3e565b6001600160a01b0380861660008181526008602052604090819020939093559151908716906000805160206132188339815191529061237a9085815260200190565b60405180910390a3506001949350505050565b600061109783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9d565b6029805460ff191660011790556013546017546018546000916123f2919061238d565b3060009081526008602052604081205491925061241c600261241685818689612bf9565b90612781565b9050600061242a838361238d565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612464576124646131de565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612495576124956131de565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906124db9086906000908690309042906004016130b6565b600060405180830381600087803b1580156124f557600080fd5b505af1158015612509573d6000803e3d6000fd5b505050506000612522834761238d90919063ffffffff16565b9050600061253b6125348a6002612781565b899061238d565b9050600061255d60026124168461241660135488612bf990919063ffffffff16565b9050600061257a8361241660145487612bf990919063ffffffff16565b905060006125978461241660155488612bf990919063ffffffff16565b905060006125ab826110e585818a8961238d565b6022546040519192506000916001600160a01b039091169085908381818185875af1925050503d80600081146125fd576040519150601f19603f3d011682016040523d82523d6000602084013e612602565b606091505b50506023546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612652576040519150601f19603f3d011682016040523d82523d6000602084013e612657565b606091505b50506024546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146126a7576040519150601f19603f3d011682016040523d82523d6000602084013e6126ac565b606091505b5060009250508b1590506127675760265460215460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b15801561272a57600080fd5b505af115801561273e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127639190612eff565b5050505b50506029805460ff19169055505050505050505050505050565b600061109783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c78565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612814918490611e9d565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546128439083611e3e565b6001600160a01b038085166000818152600860205260409081902093909355915190861690600080516020613218833981519152906128859086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156128ba575060295460ff16155b80156128cf5750602754600160a81b900460ff165b80156110eb57505060285430600090815260086020526040902054101590565b6000601254431015612950576027546001600160a01b0384811691161480159061292757506026546001600160a01b03848116911614155b15612950576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b60215460ff16156129ac57601e54601b54101561297d57601b54612975906001611e3e565b601b556129ac565b601d54601f5461298c91611e3e565b601a54106129ac57601d54601a546129a39161238d565b601a556000601b555b50919050565b6000806129db60646124166129d4601754601a5461238d90919063ffffffff16565b8690612bf9565b905060006129f9606461241660175487612bf990919063ffffffff16565b90506000612a078383611e3e565b30600090815260086020526040902054909150612a249084611e3e565b30600081815260086020526040908190209290925590516001600160a01b0388169060008051602061321883398151915290612a639087815260200190565b60405180910390a38115612ae4576025546001600160a01b0316600090815260086020526040902054612a969083611e3e565b602580546001600160a01b0390811660009081526008602090815260409182902094909455915491518581529181169290891691600080516020613218833981519152910160405180910390a35b60215460ff1615612b4b57601c54602054612afe9161238d565b601a5411612b1d57601c54601a54612b1591611e3e565b601a55612b4b565b601c54602054612b2c9161238d565b601a54118015612b3f5750602054601a54105b15612b4b57602054601a555b612b55858261238d565b9695505050505050565b60195460125460009190431015612b74575060635b6000612b8560646124168685612bf9565b90508015612bef5730600090815260086020526040902054612ba79082611e3e565b30600081815260086020526040908190209290925590516001600160a01b0387169060008051602061321883398151915290612be69085815260200190565b60405180910390a35b611ece848261238d565b600082612c0857506000610c2b565b6000612c148385613161565b905082612c21858361313f565b146110975760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c56565b60008183612c995760405162461bcd60e51b8152600401610c569190612fc1565b506000611ece848661313f565b600060208284031215612cb857600080fd5b8135611097816131f4565b60008060408385031215612cd657600080fd5b8235612ce1816131f4565b91506020830135612cf1816131f4565b809150509250929050565b600080600080600060a08688031215612d1457600080fd5b8535612d1f816131f4565b94506020860135612d2f816131f4565b93506040860135612d3f816131f4565b92506060860135612d4f816131f4565b91506080860135612d5f816131f4565b809150509295509295909350565b600080600060608486031215612d8257600080fd5b8335612d8d816131f4565b92506020840135612d9d816131f4565b929592945050506040919091013590565b60008060408385031215612dc157600080fd5b8235612dcc816131f4565b91506020830135612cf181613209565b60008060408385031215612def57600080fd5b8235612dfa816131f4565b946020939093013593505050565b600080600060408486031215612e1d57600080fd5b833567ffffffffffffffff80821115612e3557600080fd5b818601915086601f830112612e4957600080fd5b813581811115612e5857600080fd5b8760208260051b8501011115612e6d57600080fd5b60209283019550935050840135612e8381613209565b809150509250925092565b600060208284031215612ea057600080fd5b813561109781613209565b600060208284031215612ebd57600080fd5b815161109781613209565b60008060408385031215612edb57600080fd5b8235612dfa81613209565b600060208284031215612ef857600080fd5b5035919050565b600080600060608486031215612f1457600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612f4557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b86811015612fab578235612f8e816131f4565b6001600160a01b0316825260209283019290910190600101612f7b565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015612fee57858101830151858201604001528201612fd2565b81811115613000576000604083870101525b50601f01601f1916929092016040019392505050565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526016908201527521b0b713ba1033b7903434b3b432b9103a3430b7101b60511b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131065784516001600160a01b0316835293830193918301916001016130e1565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561313a5761313a6131b2565b500190565b60008261315c57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561317b5761317b6131b2565b500290565b600082821015613192576131926131b2565b500390565b60006000198214156131ab576131ab6131b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461114157600080fd5b801515811461114157600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d7bf05281af153f12ed7b5d52d698ebed7f508f9031bd6a23c197f2a3a13bbf464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80637948c325116101e7578063b62496f51161010d578063ebda0c05116100a0578063f84ba65d1161006f578063f84ba65d14610b34578063f887ea4014610b54578063fe575a8714610b74578063fe9fbb8014610ba457600080fd5b8063ebda0c0514610ac5578063efa4af4c14610adf578063f0b37c0414610af4578063f2fde38b14610b1457600080fd5b8063d00efb2f116100dc578063d00efb2f14610a29578063dd62ed3e14610a3f578063df20fd4914610a85578063e1d5584c14610aa557600080fd5b8063b62496f5146109a3578063b6a5d7de146109d3578063c04a78ad146109f3578063c51fab3c14610a1357600080fd5b80638e2eee84116101855780639a7a23d6116101545780639a7a23d614610923578063a8aa1b3114610943578063a8df7fb014610963578063a9059cbb1461098357600080fd5b80638e2eee841461089f5780638f02bb5b146108bf57806391ceedbf146108df57806395d89b41146108f557600080fd5b8063893f8ae1116101c1578063893f8ae1146108195780638b42507f146108395780638bba42b3146108695780638cd4426d1461087f57600080fd5b80637948c325146107b15780637d1db4a5146107d1578063893d20e8146107e757600080fd5b80632f54bf6e116102d75780635c85974f1161026a5780636ddd1713116102395780636ddd17131461072457806370a082311461074557806371d269211461077b578063783110dc1461079b57600080fd5b80635c85974f146106ae5780635d0044ca146106ce578063658d4b7f146106ee5780636c0a24eb1461070e57600080fd5b806345434032116102a657806345434032146106385780634ada218b14610658578063571ac8b0146106795780635b895c291461069957600080fd5b80632f54bf6e146105a8578063313ce567146105d7578063364333f4146105f35780633f4218e01461060857600080fd5b806314905c401161034f578063239c982f1161031e578063239c982f1461054857806323b872dd1461055d57806324ec75901461057d5780632b112e491461059357600080fd5b806314905c40146104dd57806318160ddd146104f357806318abb63514610508578063233604661461052857600080fd5b8063095ea7b31161038b578063095ea7b31461043b5780630bd11f8a1461046b5780630d2959801461049b57806312cf370c146104bd57600080fd5b806301f59d16146103bd5780630445b667146103e657806306fdde03146103fc57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103d360205481565b6040519081526020015b60405180910390f35b3480156103f257600080fd5b506103d360285481565b34801561040857600080fd5b5060408051808201909152600d81526c5368696e6967616d6920496e7560981b60208201525b6040516103dd9190612fc1565b34801561044757600080fd5b5061045b610456366004612ddc565b610bc4565b60405190151581526020016103dd565b34801561047757600080fd5b5061045b610486366004612ca6565b600f6020526000908152604090205460ff1681565b3480156104a757600080fd5b506104bb6104b6366004612e8e565b610c31565b005b3480156104c957600080fd5b506104bb6104d8366004612ee6565b610d14565b3480156104e957600080fd5b506103d3601a5481565b3480156104ff57600080fd5b506005546103d3565b34801561051457600080fd5b506104bb610523366004612cfc565b610d91565b34801561053457600080fd5b506104bb610543366004612ee6565b610f21565b34801561055457600080fd5b506104bb610f9e565b34801561056957600080fd5b5061045b610578366004612d6d565b610fdc565b34801561058957600080fd5b506103d3601f5481565b34801561059f57600080fd5b506103d361109e565b3480156105b457600080fd5b5061045b6105c3366004612ca6565b6000546001600160a01b0391821691161490565b3480156105e357600080fd5b50604051601281526020016103dd565b3480156105ff57600080fd5b506104bb6110f0565b34801561061457600080fd5b5061045b610623366004612ca6565b600d6020526000908152604090205460ff1681565b34801561064457600080fd5b506104bb610653366004612dae565b611144565b34801561066457600080fd5b5060275461045b90600160a01b900460ff1681565b34801561068557600080fd5b5061045b610694366004612ca6565b6111cd565b3480156106a557600080fd5b506104bb6111db565b3480156106ba57600080fd5b506104bb6106c9366004612ee6565b61120a565b3480156106da57600080fd5b506104bb6106e9366004612ee6565b6112ba565b3480156106fa57600080fd5b506104bb610709366004612dae565b61136a565b34801561071a57600080fd5b506103d360075481565b34801561073057600080fd5b5060275461045b90600160a81b900460ff1681565b34801561075157600080fd5b506103d3610760366004612ca6565b6001600160a01b031660009081526008602052604090205490565b34801561078757600080fd5b506104bb610796366004612f2d565b6113eb565b3480156107a757600080fd5b506103d3601c5481565b3480156107bd57600080fd5b506104bb6107cc366004612e8e565b611490565b3480156107dd57600080fd5b506103d360065481565b3480156107f357600080fd5b506000546001600160a01b03165b6040516001600160a01b0390911681526020016103dd565b34801561082557600080fd5b506104bb610834366004612ee6565b6114cd565b34801561084557600080fd5b5061045b610854366004612ca6565b600e6020526000908152604090205460ff1681565b34801561087557600080fd5b506103d3601e5481565b34801561088b57600080fd5b5061045b61089a366004612ddc565b61154f565b3480156108ab57600080fd5b506104bb6108ba366004612e08565b6115f6565b3480156108cb57600080fd5b506104bb6108da366004612ee6565b611729565b3480156108eb57600080fd5b506103d3601b5481565b34801561090157600080fd5b506040805180820190915260058152645348494e4960d81b602082015261042e565b34801561092f57600080fd5b506104bb61093e366004612dae565b6117d4565b34801561094f57600080fd5b50602754610801906001600160a01b031681565b34801561096f57600080fd5b506104bb61097e366004612ee6565b611a64565b34801561098f57600080fd5b5061045b61099e366004612ddc565b611b03565b3480156109af57600080fd5b5061045b6109be366004612ca6565b600b6020526000908152604090205460ff1681565b3480156109df57600080fd5b506104bb6109ee366004612ca6565b611b10565b3480156109ff57600080fd5b506104bb610a0e366004612dae565b611b61565b348015610a1f57600080fd5b506103d3601d5481565b348015610a3557600080fd5b506103d360115481565b348015610a4b57600080fd5b506103d3610a5a366004612cc3565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b348015610a9157600080fd5b506104bb610aa0366004612ec8565b611be2565b348015610ab157600080fd5b50610801610ac0366004612ee6565b611c5f565b348015610ad157600080fd5b5060215461045b9060ff1681565b348015610aeb57600080fd5b506104bb611c89565b348015610b0057600080fd5b506104bb610b0f366004612ca6565b611cc4565b348015610b2057600080fd5b506104bb610b2f366004612ca6565b611d0f565b348015610b4057600080fd5b506104bb610b4f366004612dae565b611d9f565b348015610b6057600080fd5b50602654610801906001600160a01b031681565b348015610b8057600080fd5b5061045b610b8f366004612ca6565b600c6020526000908152604090205460ff1681565b348015610bb057600080fd5b5061045b610bbf366004612ca6565b611e20565b3360008181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c1f9086815260200190565b60405180910390a35060015b92915050565b610c3a33611e20565b610c5f5760405162461bcd60e51b8152600401610c5690613091565b60405180910390fd5b602754600160a01b900460ff1615610cae5760405162461bcd60e51b815260206004820152601260248201527143616e27742073746f702074726164696e6760701b6044820152606401610c56565b6027805460ff60a01b1916600160a01b83151502179055436011819055601054610cd89190611e3e565b60125560405181151581527f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df906020015b60405180910390a150565b610d1d33611e20565b610d395760405162461bcd60e51b8152600401610c5690613091565b6006601c541115610d5c5760405162461bcd60e51b8152600401610c5690613041565b601c8190556040518181527f2e1200b0d0ffbcd80016166fe2d3a2e04a075167fa1403793a72aef0cd8ba6f290602001610d09565b610d9a33611e20565b610db65760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b03851615801590610dd657506001600160a01b03841615155b8015610dea57506001600160a01b03831615155b8015610dfe57506001600160a01b03821615155b8015610e1257506001600160a01b03811615155b610e5e5760405162461bcd60e51b815260206004820152601760248201527f5a65726f20416464726573732076616c69646174696f6e0000000000000000006044820152606401610c56565b60218054610100600160a81b0319166101006001600160a01b0388811691820292909217909255602280546001600160a01b03199081168884169081179092556023805482168885169081179091556024805483168886169081179091556025805490931694871694851790925560408051958652602086019390935291840191909152606083015260808201527fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e9060a0015b60405180910390a15050505050565b610f2a33611e20565b610f465760405162461bcd60e51b8152600401610c5690613091565b6006601d541115610f695760405162461bcd60e51b8152600401610c5690613041565b601c8190556040518181527f14f313fcad99bca2e5d9a673800b5458e35c41707d8e4b08fb5fe9761fb67e0390602001610d09565b6000546001600160a01b03163314610fc85760405162461bcd60e51b8152600401610c5690613071565b6002601a556021805460ff19166001179055565b6001600160a01b038316600090815260096020908152604080832033845290915281205460001914611089576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600982528381203382529091529190912054611064918490611e9d565b6001600160a01b03851660009081526009602090815260408083203384529091529020555b611094848484611ed7565b90505b9392505050565b6004546001600160a01b03166000908152600860205260408120546110eb906003546001600160a01b03166000908152600860205260409020546110e5906005549061238d565b9061238d565b905090565b6110f933611e20565b6111155760405162461bcd60e51b8152600401610c5690613091565b60405133904780156108fc02916000818181858888f19350505050158015611141573d6000803e3d6000fd5b50565b61114d33611e20565b6111695760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600c6020908152604091829020805460ff19168515159081179091558251938452908301527ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda91015b60405180910390a15050565b6000610c2b82600019610bc4565b6111e433611e20565b6112005760405162461bcd60e51b8152600401610c5690613091565b6112086123cf565b565b61121333611e20565b61122f5760405162461bcd60e51b8152600401610c5690613091565b60055461123e90612710612781565b81116112855760405162461bcd60e51b815260206004820152601660248201527543616e27742072657374726963742074726164696e6760501b6044820152606401610c56565b60068190556040518181527f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e90602001610d09565b6112c333611e20565b6112df5760405162461bcd60e51b8152600401610c5690613091565b6005546112ee90612710612781565b81116113355760405162461bcd60e51b815260206004820152601660248201527543616e27742072657374726963742074726164696e6760501b6044820152606401610c56565b60078190556040518181527fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b90602001610d09565b61137333611e20565b61138f5760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600d6020908152604091829020805460ff19168515159081179091558251938452908301527f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d91016111c1565b6113f433611e20565b6114105760405162461bcd60e51b8152600401610c5690613091565b601385905560148490556015839055601682905560178190556114418161143b848187818b8b611e3e565b90611e3e565b601855604080518681526020810186905290810184905260608101839052608081018290527fdc71b04826e689f16e563f2f881cd8f0332659874aaabd0009c85e2fbbafabdb9060a001610f12565b6000546001600160a01b031633146114ba5760405162461bcd60e51b8152600401610c5690613071565b6021805460ff1916911515919091179055565b6000546001600160a01b031633146114f75760405162461bcd60e51b8152600401610c5690613071565b6006601e54111561151a5760405162461bcd60e51b8152600401610c5690613041565b601e8190556040518181527fb94e3b9f64a087edce3b335e5b9fac570596b83153673e80f733cf4f76f9e5c090602001610d09565b600061155a33611e20565b6115765760405162461bcd60e51b8152600401610c5690613091565b60405163a9059cbb60e01b8152336004820152602481018390526001600160a01b0384169063a9059cbb90604401602060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110979190612eab565b6115ff33611e20565b61161b5760405162461bcd60e51b8152600401610c5690613091565b60c882106116795760405162461bcd60e51b815260206004820152602560248201527f43616e27742075706461746520746f6f206d616e792077616c6c657473206174604482015264206f6e636560d81b6064820152608401610c56565b60005b828110156116e85781600c600086868581811061169b5761169b6131de565b90506020020160208101906116b09190612ca6565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556116e181613197565b905061167c565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb83838360405161171c93929190612f68565b60405180910390a1505050565b61173233611e20565b61174e5760405162461bcd60e51b8152600401610c5690613091565b602054811061179f5760405162461bcd60e51b815260206004820152601e60248201527f466565732063616e6e6f7420626520686967686572207468616e2031342500006044820152606401610c56565b60198190556040518181527f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f490602001610d09565b6117dd33611e20565b6117f95760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000908152600b602052604090205460ff161515811515141561185c5760405162461bcd60e51b815260206004820152601160248201527015985b1d5948185b1c9958591e481cd95d607a1b6044820152606401610c56565b6001600160a01b0382166000908152600b60205260409020805460ff191682158015919091179091556118d957600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b038416179055611a28565b600a5460011061191d5760405162461bcd60e51b815260206004820152600f60248201526e2932b8bab4b932b21018903830b4b960891b6044820152606401610c56565b60005b600a54811015611a2657826001600160a01b0316600a8281548110611947576119476131de565b6000918252602090912001546001600160a01b03161415611a1457600a805461197290600190613180565b81548110611982576119826131de565b600091825260209091200154600a80546001600160a01b0390921691839081106119ae576119ae6131de565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600a8054806119ed576119ed6131c8565b600082815260209020810160001990810180546001600160a01b0319169055019055611a26565b80611a1e81613197565b915050611920565b505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611a6d33611e20565b611a895760405162461bcd60e51b8152600401610c5690613091565b60328110611ace5760405162461bcd60e51b8152602060048201526012602482015271086c2dc4ee840cede40e8d0c2e840d0d2ced60731b6044820152606401610c56565b60108190556040518181527f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb90602001610d09565b6000611097338484611ed7565b6000546001600160a01b03163314611b3a5760405162461bcd60e51b8152600401610c5690613071565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b611b6a33611e20565b611b865760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600f6020908152604091829020805460ff19168515159081179091558251938452908301527f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b91016111c1565b611beb33611e20565b611c075760405162461bcd60e51b8152600401610c5690613091565b6027805460ff60a81b1916600160a81b84151590810291909117909155602882905560408051918252602082018390527fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd91016111c1565b600a8181548110611c6f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314611cb35760405162461bcd60e51b8152600401610c5690613071565b6000601a556021805460ff19169055565b6000546001600160a01b03163314611cee5760405162461bcd60e51b8152600401610c5690613071565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610c5690613071565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639101610d09565b611da833611e20565b611dc45760405162461bcd60e51b8152600401610c5690613091565b6001600160a01b0382166000818152600e6020908152604091829020805460ff19168515159081179091558251938452908301527f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f6691016111c1565b6001600160a01b031660009081526001602052604090205460ff1690565b600080611e4b8385613127565b9050838110156110975760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610c56565b60008184841115611ec15760405162461bcd60e51b8152600401610c569190612fc1565b506000611ece8486613180565b95945050505050565b6001600160a01b0383166000908152600c602052604081205460ff16158015611f1957506001600160a01b0383166000908152600c602052604090205460ff16155b611f535760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610c56565b60295460ff1615611f7057611f698484846127c3565b9050611097565b6001600160a01b0384166000908152600d602052604090205460ff16158015611fb257506001600160a01b0383166000908152600d602052604090205460ff16155b1561200757602754600160a01b900460ff166120075760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610c56565b61200f612897565b1561201c5761201c6123cf565b6001600160a01b0384166000908152600b6020526040902054829060ff161561214d576001600160a01b0384166000908152600d602052604090205460ff16612148576007546001600160a01b0385166000908152600860205260409020546120859085611e3e565b1115806120aa57506001600160a01b0384166000908152600f602052604090205460ff165b6120f65760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c56565b6006548311158061211f57506001600160a01b0384166000908152600e602052604090205460ff165b61213b5760405162461bcd60e51b8152600401610c5690613016565b61214584846128ef565b90505b6122e6565b6001600160a01b0384166000908152600b602052604090205460ff16156121dd576001600160a01b0385166000908152600d602052604090205460ff1661214857600654831115806121b757506001600160a01b0385166000908152600e602052604090205460ff165b6121d35760405162461bcd60e51b8152600401610c5690613016565b61214585846129b2565b6001600160a01b0385166000908152600d602052604090205460ff166122e6576007546001600160a01b0385166000908152600860205260409020546122239085611e3e565b11158061224857506001600160a01b0384166000908152600f602052604090205460ff165b6122945760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574204c696d6974204c696d6974204578636565646564006044820152606401610c56565b600654831115806122bd57506001600160a01b0385166000908152600e602052604090205460ff165b6122d95760405162461bcd60e51b8152600401610c5690613016565b6122e38584612b5f565b90505b6001600160a01b038516600090815260086020526040902054612309908461238d565b6001600160a01b0380871660009081526008602052604080822093909355908616815220546123389082611e3e565b6001600160a01b0380861660008181526008602052604090819020939093559151908716906000805160206132188339815191529061237a9085815260200190565b60405180910390a3506001949350505050565b600061109783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e9d565b6029805460ff191660011790556013546017546018546000916123f2919061238d565b3060009081526008602052604081205491925061241c600261241685818689612bf9565b90612781565b9050600061242a838361238d565b60408051600280825260608201835292935047926000926020830190803683370190505090503081600081518110612464576124646131de565b6001600160a01b039283166020918202929092010152600254825191169082906001908110612495576124956131de565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906124db9086906000908690309042906004016130b6565b600060405180830381600087803b1580156124f557600080fd5b505af1158015612509573d6000803e3d6000fd5b505050506000612522834761238d90919063ffffffff16565b9050600061253b6125348a6002612781565b899061238d565b9050600061255d60026124168461241660135488612bf990919063ffffffff16565b9050600061257a8361241660145487612bf990919063ffffffff16565b905060006125978461241660155488612bf990919063ffffffff16565b905060006125ab826110e585818a8961238d565b6022546040519192506000916001600160a01b039091169085908381818185875af1925050503d80600081146125fd576040519150601f19603f3d011682016040523d82523d6000602084013e612602565b606091505b50506023546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114612652576040519150601f19603f3d011682016040523d82523d6000602084013e612657565b606091505b50506024546040519192506001600160a01b0316908390600081818185875af1925050503d80600081146126a7576040519150601f19603f3d011682016040523d82523d6000602084013e6126ac565b606091505b5060009250508b1590506127675760265460215460405163f305d71960e01b8152306004820152602481018e905260006044820181905260648201526001600160a01b03610100909204821660848201524260a482015291169063f305d71990879060c4016060604051808303818588803b15801561272a57600080fd5b505af115801561273e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906127639190612eff565b5050505b50506029805460ff19169055505050505050505050505050565b600061109783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612c78565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600890915291822054612814918490611e9d565b6001600160a01b0380861660009081526008602052604080822093909355908516815220546128439083611e3e565b6001600160a01b038085166000818152600860205260409081902093909355915190861690600080516020613218833981519152906128859086815260200190565b60405180910390a35060019392505050565b336000908152600b602052604081205460ff161580156128ba575060295460ff16155b80156128cf5750602754600160a81b900460ff165b80156110eb57505060285430600090815260086020526040902054101590565b6000601254431015612950576027546001600160a01b0384811691161480159061292757506026546001600160a01b03848116911614155b15612950576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b60215460ff16156129ac57601e54601b54101561297d57601b54612975906001611e3e565b601b556129ac565b601d54601f5461298c91611e3e565b601a54106129ac57601d54601a546129a39161238d565b601a556000601b555b50919050565b6000806129db60646124166129d4601754601a5461238d90919063ffffffff16565b8690612bf9565b905060006129f9606461241660175487612bf990919063ffffffff16565b90506000612a078383611e3e565b30600090815260086020526040902054909150612a249084611e3e565b30600081815260086020526040908190209290925590516001600160a01b0388169060008051602061321883398151915290612a639087815260200190565b60405180910390a38115612ae4576025546001600160a01b0316600090815260086020526040902054612a969083611e3e565b602580546001600160a01b0390811660009081526008602090815260409182902094909455915491518581529181169290891691600080516020613218833981519152910160405180910390a35b60215460ff1615612b4b57601c54602054612afe9161238d565b601a5411612b1d57601c54601a54612b1591611e3e565b601a55612b4b565b601c54602054612b2c9161238d565b601a54118015612b3f5750602054601a54105b15612b4b57602054601a555b612b55858261238d565b9695505050505050565b60195460125460009190431015612b74575060635b6000612b8560646124168685612bf9565b90508015612bef5730600090815260086020526040902054612ba79082611e3e565b30600081815260086020526040908190209290925590516001600160a01b0387169060008051602061321883398151915290612be69085815260200190565b60405180910390a35b611ece848261238d565b600082612c0857506000610c2b565b6000612c148385613161565b905082612c21858361313f565b146110975760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610c56565b60008183612c995760405162461bcd60e51b8152600401610c569190612fc1565b506000611ece848661313f565b600060208284031215612cb857600080fd5b8135611097816131f4565b60008060408385031215612cd657600080fd5b8235612ce1816131f4565b91506020830135612cf1816131f4565b809150509250929050565b600080600080600060a08688031215612d1457600080fd5b8535612d1f816131f4565b94506020860135612d2f816131f4565b93506040860135612d3f816131f4565b92506060860135612d4f816131f4565b91506080860135612d5f816131f4565b809150509295509295909350565b600080600060608486031215612d8257600080fd5b8335612d8d816131f4565b92506020840135612d9d816131f4565b929592945050506040919091013590565b60008060408385031215612dc157600080fd5b8235612dcc816131f4565b91506020830135612cf181613209565b60008060408385031215612def57600080fd5b8235612dfa816131f4565b946020939093013593505050565b600080600060408486031215612e1d57600080fd5b833567ffffffffffffffff80821115612e3557600080fd5b818601915086601f830112612e4957600080fd5b813581811115612e5857600080fd5b8760208260051b8501011115612e6d57600080fd5b60209283019550935050840135612e8381613209565b809150509250925092565b600060208284031215612ea057600080fd5b813561109781613209565b600060208284031215612ebd57600080fd5b815161109781613209565b60008060408385031215612edb57600080fd5b8235612dfa81613209565b600060208284031215612ef857600080fd5b5035919050565b600080600060608486031215612f1457600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a08688031215612f4557600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b6040808252810183905260008460608301825b86811015612fab578235612f8e816131f4565b6001600160a01b0316825260209283019290910190600101612f7b565b5080925050508215156020830152949350505050565b600060208083528351808285015260005b81811015612fee57858101830151858201604001528201612fd2565b81811115613000576000604083870101525b50601f01601f1916929092016040019392505050565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526016908201527521b0b713ba1033b7903434b3b432b9103a3430b7101b60511b604082015260600190565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131065784516001600160a01b0316835293830193918301916001016130e1565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561313a5761313a6131b2565b500190565b60008261315c57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561317b5761317b6131b2565b500290565b600082821015613192576131926131b2565b500390565b60006000198214156131ab576131ab6131b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461114157600080fd5b801515811461114157600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220d7bf05281af153f12ed7b5d52d698ebed7f508f9031bd6a23c197f2a3a13bbf464736f6c63430008070033

Deployed Bytecode Sourcemap

4738:19366:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7708:26;;;;;;;;;;;;;;;;;;;16048:25:1;;;16036:2;16021:18;7708:26:0;;;;;;;;8418:54;;;;;;;;;;;;;;;;9684:80;;;;;;;;;;-1:-1:-1;9756:5:0;;;;;;;;;;;;-1:-1:-1;;;9756:5:0;;;;9684:80;;;;;;;:::i;10106:216::-;;;;;;;;;;-1:-1:-1;10106:216:0;;;;;:::i;:::-;;:::i;:::-;;;8754:14:1;;8747:22;8729:41;;8717:2;8702:18;10106:216:0;8589:187:1;6864:50:0;;;;;;;;;;-1:-1:-1;6864:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16151:308;;;;;;;;;;-1:-1:-1;16151:308:0;;;;;:::i;:::-;;:::i;:::-;;22936:202;;;;;;;;;;-1:-1:-1;22936:202:0;;;;;:::i;:::-;;:::i;7486:33::-;;;;;;;;;;;;;;;;9414:88;;;;;;;;;;-1:-1:-1;9487:12:0;;9414:88;;20977:840;;;;;;;;;;-1:-1:-1;20977:840:0;;;;;:::i;:::-;;:::i;23146:202::-;;;;;;;;;;-1:-1:-1;23146:202:0;;;;;:::i;:::-;;:::i;23708:115::-;;;;;;;;;;;;;:::i;10624:370::-;;;;;;;;;;-1:-1:-1;10624:370:0;;;;;:::i;:::-;;:::i;7675:25::-;;;;;;;;;;;;;;;;23957:142;;;;;;;;;;;;;:::i;2746:103::-;;;;;;;;;;-1:-1:-1;2746:103:0;;;;;:::i;:::-;2801:4;2836:5;-1:-1:-1;;;;;2825:16:0;;;2836:5;;2825:16;;2746:103;9508:80;;;;;;;;;;-1:-1:-1;9508:80:0;;6260:2;17679:36:1;;17667:2;17652:18;9508:80:0;17537:184:1;15825:119:0;;;;;;;;;;;;;:::i;6758:44::-;;;;;;;;;;-1:-1:-1;6758:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;19240:180;;;;;;;;;;-1:-1:-1;19240:180:0;;;;;:::i;:::-;;:::i;8340:34::-;;;;;;;;;;-1:-1:-1;8340:34:0;;;;-1:-1:-1;;;8340:34:0;;;;;;10330:122;;;;;;;;;;-1:-1:-1;10330:122:0;;;;;:::i;:::-;;:::i;22853:75::-;;;;;;;;;;;;;:::i;18432:212::-;;;;;;;;;;-1:-1:-1;18432:212:0;;;;;:::i;:::-;;:::i;18652:222::-;;;;;;;;;;-1:-1:-1;18652:222:0;;;;;:::i;:::-;;:::i;19627:166::-;;;;;;;;;;-1:-1:-1;19627:166:0;;;;;:::i;:::-;;:::i;6402:56::-;;;;;;;;;;;;;;;;8381:30;;;;;;;;;;-1:-1:-1;8381:30:0;;;;-1:-1:-1;;;8381:30:0;;;;;;9854:105;;;;;;;;;;-1:-1:-1;9854:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;9938:18:0;9920:7;9938:18;;;:9;:18;;;;;;;9854:105;20179:544;;;;;;;;;;-1:-1:-1;20179:544:0;;;;;:::i;:::-;;:::i;7558:31::-;;;;;;;;;;;;;;;;23831:106;;;;;;;;;;-1:-1:-1;23831:106:0;;;;;:::i;:::-;;:::i;6340:55::-;;;;;;;;;;;;;;;;9770:78;;;;;;;;;;-1:-1:-1;9822:7:0;9840:5;-1:-1:-1;;;;;9840:5:0;9770:78;;;-1:-1:-1;;;;;5799:32:1;;;5781:51;;5769:2;5754:18;9770:78:0;5635:203:1;23356:223:0;;;;;;;;;;-1:-1:-1;23356:223:0;;;;;:::i;:::-;;:::i;6809:48::-;;;;;;;;;;-1:-1:-1;6809:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7634:34;;;;;;;;;;;;;;;;15952:168;;;;;;;;;;-1:-1:-1;15952:168:0;;;;;:::i;:::-;;:::i;18882:350::-;;;;;;;;;;-1:-1:-1;18882:350:0;;;;;:::i;:::-;;:::i;20731:236::-;;;;;;;;;;-1:-1:-1;20731:236:0;;;;;:::i;:::-;;:::i;7526:25::-;;;;;;;;;;;;;;;;9594:84;;;;;;;;;;-1:-1:-1;9668:7:0;;;;;;;;;;;;-1:-1:-1;;;9668:7:0;;;;9594:84;;22041:802;;;;;;;;;;-1:-1:-1;22041:802:0;;;;;:::i;:::-;;:::i;8312:19::-;;;;;;;;;;-1:-1:-1;8312:19:0;;;;-1:-1:-1;;;;;8312:19:0;;;19428:191;;;;;;;;;;-1:-1:-1;19428:191:0;;;;;:::i;:::-;;:::i;10460:156::-;;;;;;;;;;-1:-1:-1;10460:156:0;;;;;:::i;:::-;;:::i;6634:58::-;;;;;;;;;;-1:-1:-1;6634:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2539:94;;;;;;;;;;-1:-1:-1;2539:94:0;;;;;:::i;:::-;;:::i;19987:184::-;;;;;;;;;;-1:-1:-1;19987:184:0;;;;;:::i;:::-;;:::i;7596:31::-;;;;;;;;;;;;;;;;6975:26;;;;;;;;;;;;;;;;9965:133;;;;;;;;;;-1:-1:-1;9965:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;10067:19:0;;;10049:7;10067:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;9965:133;21825:208;;;;;;;;;;-1:-1:-1;21825:208:0;;;;;:::i;:::-;;:::i;6598:29::-;;;;;;;;;;-1:-1:-1;6598:29:0;;;;;:::i;:::-;;:::i;7742:36::-;;;;;;;;;;-1:-1:-1;7742:36:0;;;;;;;;23587:113;;;;;;;;;;;;;:::i;2641:97::-;;;;;;;;;;-1:-1:-1;2641:97:0;;;;;:::i;:::-;;:::i;2972:173::-;;;;;;;;;;-1:-1:-1;2972:173:0;;;;;:::i;:::-;;:::i;19801:178::-;;;;;;;;;;-1:-1:-1;19801:178:0;;;;;:::i;:::-;;:::i;8281:24::-;;;;;;;;;;-1:-1:-1;8281:24:0;;;;-1:-1:-1;;;;;8281:24:0;;;6703:46;;;;;;;;;;-1:-1:-1;6703:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;2857:107;;;;;;;;;;-1:-1:-1;2857:107:0;;;;;:::i;:::-;;:::i;10106:216::-;10210:10;10181:4;10198:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;10198:32:0;;;;;;;;;;:41;;;10255:37;10181:4;;10198:32;;10255:37;;;;10233:6;16048:25:1;;16036:2;16021:18;;15902:177;10255:37:0;;;;;;;;-1:-1:-1;10310:4:0;10106:216;;;;;:::o;16151:308::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;;;;;;;;;16220:14:::1;::::0;-1:-1:-1;;;16220:14:0;::::1;;;:23;16212:54;;;::::0;-1:-1:-1;;;16212:54:0;;12875:2:1;16212:54:0::1;::::0;::::1;12857:21:1::0;12914:2;12894:18;;;12887:30;-1:-1:-1;;;12933:18:1;;;12926:48;12991:18;;16212:54:0::1;12673:342:1::0;16212:54:0::1;16277:14;:24:::0;;-1:-1:-1;;;;16277:24:0::1;-1:-1:-1::0;;;16277:24:0;::::1;;;;::::0;;16326:12:::1;16312:11;:26:::0;;;16386:10:::1;::::0;16369:28:::1;::::0;16326:12;16369:16:::1;:28::i;:::-;16349:17;:48:::0;16415:36:::1;::::0;8754:14:1;;8747:22;8729:41;;16415:36:0::1;::::0;8717:2:1;8702:18;16415:36:0::1;;;;;;;;16151:308:::0;:::o;22936:202::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;23031:1:::1;23015:12;;:17;;23007:52;;;;-1:-1:-1::0;;;23007:52:0::1;;;;;;;:::i;:::-;23070:12;:20:::0;;;23108:22:::1;::::0;16048:25:1;;;23108:22:0::1;::::0;16036:2:1;16021:18;23108:22:0::1;15902:177:1::0;20977:840:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21189:36:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;;;;;;21229:35:0;::::1;::::0;::::1;21189:75;:115;;;;-1:-1:-1::0;;;;;;21268:36:0;::::1;::::0;::::1;21189:115;:148;;;;-1:-1:-1::0;;;;;;21308:29:0;::::1;::::0;::::1;21189:148;:185;;;;-1:-1:-1::0;;;;;;21341:33:0;::::1;::::0;::::1;21189:185;21181:222;;;::::0;-1:-1:-1;;;21181:222:0;;13222:2:1;21181:222:0::1;::::0;::::1;13204:21:1::0;13261:2;13241:18;;;13234:30;13300:25;13280:18;;;13273:53;13343:18;;21181:222:0::1;13020:347:1::0;21181:222:0::1;21414:21;:46:::0;;-1:-1:-1;;;;;;21414:46:0::1;;-1:-1:-1::0;;;;;21414:46:0;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;21471:20:::1;:44:::0;;-1:-1:-1;;;;;;21471:44:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;21526:21:::1;:46:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;21583:14:::1;:32:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;21626:18:::1;:40:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;21685:124:::1;::::0;;6356:34:1;;;6421:2;6406:18;;6399:43;;;;6458:18;;;6451:43;;;;6525:2;6510:18;;6503:43;6577:3;6562:19;;6555:44;21685:124:0::1;::::0;6305:3:1;6290:19;21685:124:0::1;;;;;;;;20977:840:::0;;;;;:::o;23146:202::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;23241:1:::1;23225:12;;:17;;23217:52;;;;-1:-1:-1::0;;;23217:52:0::1;;;;;;;:::i;:::-;23280:12;:20:::0;;;23318:22:::1;::::0;16048:25:1;;;23318:22:0::1;::::0;16036:2:1;16021:18;23318:22:0::1;15902:177:1::0;23708:115:0;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;23777:1:::1;23760:14;:18:::0;23790:17:::1;:24:::0;;-1:-1:-1;;23790:24:0::1;23810:4;23790:24;::::0;;23708:115::o;10624:370::-;-1:-1:-1;;;;;10744:19:0;;10724:4;10744:19;;;:11;:19;;;;;;;;10764:10;10744:31;;;;;;;;-1:-1:-1;;10744:52:0;10741:186;;10846:69;;;;;;;;;;;-1:-1:-1;;;10846:69:0;;;;;;;;-1:-1:-1;;;;;10846:19:0;;-1:-1:-1;10846:19:0;;;:11;:19;;;;;10866:10;10846:31;;;;;;;;;;:69;;10882:6;;10846:35;:69::i;:::-;-1:-1:-1;;;;;10812:19:0;;;;;;:11;:19;;;;;;;;10832:10;10812:31;;;;;;;:103;10741:186;10946:40;10960:6;10968:9;10979:6;10946:13;:40::i;:::-;10939:47;;10624:370;;;;;;:::o;23957:142::-;24085:4;;-1:-1:-1;;;;;24085:4:0;24010:7;9938:18;;;:9;:18;;;;;;24037:54;;24064:4;;-1:-1:-1;;;;;24064:4:0;9920:7;9938:18;;;:9;:18;;;;;;24037:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;24030:61;;23957:142;:::o;15825:119::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;15885:51:::1;::::0;15893:10:::1;::::0;15914:21:::1;15885:51:::0;::::1;;;::::0;::::1;::::0;;;15914:21;15893:10;15885:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15825:119::o:0;19240:180::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19316:23:0;::::1;;::::0;;;:13:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;19316:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19373:39;;6778:51:1;;;6845:18;;;6838:50;19373:39:0::1;::::0;6751:18:1;19373:39:0::1;;;;;;;;19240:180:::0;;:::o;10330:122::-;10385:4;10409:35;10417:7;-1:-1:-1;;10409:7:0;:35::i;22853:75::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;22910:10:::1;:8;:10::i;:::-;22853:75::o:0;18432:212::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;18516:12:::1;::::0;:23:::1;::::0;18533:5:::1;18516:16;:23::i;:::-;18507:6;:32;18499:67;;;::::0;-1:-1:-1;;;18499:67:0;;10074:2:1;18499:67:0::1;::::0;::::1;10056:21:1::0;10113:2;10093:18;;;10086:30;-1:-1:-1;;;10132:18:1;;;10125:52;10194:18;;18499:67:0::1;9872:346:1::0;18499:67:0::1;18577:12;:21:::0;;;18616:20:::1;::::0;16048:25:1;;;18616:20:0::1;::::0;16036:2:1;16021:18;18616:20:0::1;15902:177:1::0;18652:222:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;18738:12:::1;::::0;:23:::1;::::0;18755:5:::1;18738:16;:23::i;:::-;18729:6;:32;18721:67;;;::::0;-1:-1:-1;;;18721:67:0;;10074:2:1;18721:67:0::1;::::0;::::1;10056:21:1::0;10113:2;10093:18;;;10086:30;-1:-1:-1;;;10132:18:1;;;10125:52;10194:18;;18721:67:0::1;9872:346:1::0;18721:67:0::1;18799:16;:25:::0;;;18842:24:::1;::::0;16048:25:1;;;18842:24:0::1;::::0;16036:2:1;16021:18;18842:24:0::1;15902:177:1::0;19627:166:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19711:19:0;::::1;;::::0;;;:11:::1;:19;::::0;;;;;;;;:28;;-1:-1:-1;;19711:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19757;;6778:51:1;;;6845:18;;;6838:50;19757:28:0::1;::::0;6751:18:1;19757:28:0::1;6610:284:1::0;20179:544:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;20338:16:::1;:32:::0;;;20381:16:::1;:32:::0;;;20424:10:::1;:20:::0;;;20455:10:::1;:20:::0;;;20486:14:::1;:28:::0;;;20540:75:::1;20503:11:::0;20540:58:::1;20468:7:::0;20540:58;20437:7;20540:58;20357:13;20400;20540:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:75::-;20525:12;:90:::0;20633:82:::1;::::0;;17328:25:1;;;17384:2;17369:18;;17362:34;;;17412:18;;;17405:34;;;17470:2;17455:18;;17448:34;;;17513:3;17498:19;;17491:35;;;20633:82:0::1;::::0;17315:3:1;17300:19;20633:82:0::1;17069:463:1::0;23831:106:0;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;23904:17:::1;:25:::0;;-1:-1:-1;;23904:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23831:106::o;23356:223::-;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;23459:1:::1;23440:15;;:20;;23432:55;;;;-1:-1:-1::0;;;23432:55:0::1;;;;;;;:::i;:::-;23498:15;:26:::0;;;23543:28:::1;::::0;16048:25:1;;;23543:28:0::1;::::0;16036:2:1;16021:18;23543:28:0::1;15902:177:1::0;15952:168:0;16040:4;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;16064::::1;::::0;-1:-1:-1;;;16064:48:0;;16093:10:::1;16064:48;::::0;::::1;7073:51:1::0;7140:18;;;7133:34;;;-1:-1:-1;;;;;16064:28:0;::::1;::::0;::::1;::::0;7046:18:1;;16064:48:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18882:350::-:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;19010:3:::1;18991:22:::0;::::1;18982:73;;;::::0;-1:-1:-1;;;18982:73:0;;15018:2:1;18982:73:0::1;::::0;::::1;15000:21:1::0;15057:2;15037:18;;;15030:30;15096:34;15076:18;;;15069:62;-1:-1:-1;;;15147:18:1;;;15140:35;15192:19;;18982:73:0::1;14816:401:1::0;18982:73:0::1;19071:9;19066:106;19082:20:::0;;::::1;19066:106;;;19154:6;19124:13;:27;19138:9;;19148:1;19138:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19124:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19124:27:0;:36;;-1:-1:-1;;19124:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19104:3:::1;::::0;::::1;:::i;:::-;;;19066:106;;;;19189:35;19206:9;;19217:6;19189:35;;;;;;;;:::i;:::-;;;;;;;;18882:350:::0;;;:::o;20731:236::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;20831:6:::1;;20816:12;:21;20808:64;;;::::0;-1:-1:-1;;;20808:64:0;;14659:2:1;20808:64:0::1;::::0;::::1;14641:21:1::0;14698:2;14678:18;;;14671:30;14737:32;14717:18;;;14710:60;14787:18;;20808:64:0::1;14457:354:1::0;20808:64:0::1;20883:11;:26:::0;;;20927:32:::1;::::0;16048:25:1;;;20927:32:0::1;::::0;16036:2:1;16021:18;20927:32:0::1;15902:177:1::0;22041:802:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22147:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;:42;;::::0;::::1;;;;22139:72;;;::::0;-1:-1:-1;;;22139:72:0;;11478:2:1;22139:72:0::1;::::0;::::1;11460:21:1::0;11517:2;11497:18;;;11490:30;-1:-1:-1;;;11536:18:1;;;11529:47;11593:18;;22139:72:0::1;11276:341:1::0;22139:72:0::1;-1:-1:-1::0;;;;;22228:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;:41;;-1:-1:-1;;22228:41:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;22286:482:::1;;22315:12;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22315:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22315:24:0::1;-1:-1:-1::0;;;;;22315:24:0;::::1;;::::0;;22286:482:::1;;;22386:12;:19:::0;22408:1:::1;-1:-1:-1::0;22378:51:0::1;;;::::0;-1:-1:-1;;;22378:51:0;;12531:2:1;22378:51:0::1;::::0;::::1;12513:21:1::0;12570:2;12550:18;;;12543:30;-1:-1:-1;;;12589:18:1;;;12582:45;12644:18;;22378:51:0::1;12329:339:1::0;22378:51:0::1;22453:9;22448:305;22472:12;:19:::0;22468:23;::::1;22448:305;;;22544:5;-1:-1:-1::0;;;;;22525:24:0::1;:12;22538:1;22525:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22525:15:0::1;:24;22521:213;;;22596:12;22609:19:::0;;:23:::1;::::0;22631:1:::1;::::0;22609:23:::1;:::i;:::-;22596:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;22578:12:::1;:15:::0;;-1:-1:-1;;;;;22596:37:0;;::::1;::::0;22591:1;;22578:15;::::1;;;;;:::i;:::-;;;;;;;;;:55;;;;;-1:-1:-1::0;;;;;22578:55:0::1;;;;;-1:-1:-1::0;;;;;22578:55:0::1;;;;;;22660:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22660:18:0;;;;;-1:-1:-1;;;;;;22660:18:0::1;::::0;;;;;22705:5:::1;;22521:213;22493:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22448:305;;;;22286:482;22789:42;::::0;;::::1;;::::0;-1:-1:-1;;;;;22789:42:0;::::1;::::0;::::1;::::0;;;::::1;22041:802:::0;;:::o;19428:191::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;19512:2:::1;19502:7;:12;19494:43;;;::::0;-1:-1:-1;;;19494:43:0;;10425:2:1;19494:43:0::1;::::0;::::1;10407:21:1::0;10464:2;10444:18;;;10437:30;-1:-1:-1;;;10483:18:1;;;10476:48;10541:18;;19494:43:0::1;10223:342:1::0;19494:43:0::1;19548:10;:20:::0;;;19594:17:::1;::::0;16048:25:1;;;19594:17:0::1;::::0;16036:2:1;16021:18;19594:17:0::1;15902:177:1::0;10460:156:0;10540:4;10564:44;10578:10;10590:9;10601:6;10564:13;:44::i;2539:94::-;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2599:19:0::1;;::::0;;;2621:4:::1;2599:19;::::0;;;;;;;:26;;-1:-1:-1;;2599:26:0::1;::::0;;::::1;::::0;;2539:94::o;19987:184::-;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20077:25:0;::::1;;::::0;;;:17:::1;:25;::::0;;;;;;;;:34;;-1:-1:-1;;20077:34:0::1;::::0;::::1;;::::0;;::::1;::::0;;;20129;;6778:51:1;;;6845:18;;;6838:50;20129:34:0::1;::::0;6751:18:1;20129:34:0::1;6610:284:1::0;21825:208:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;21917:11:::1;:22:::0;;-1:-1:-1;;;;21917:22:0::1;-1:-1:-1::0;;;21917:22:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;21950:13:::1;:23:::0;;;21991:34:::1;::::0;;8949:41:1;;;9021:2;9006:18;;8999:34;;;21991::0::1;::::0;8922:18:1;21991:34:0::1;8781:258:1::0;6598:29:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6598:29:0;;-1:-1:-1;6598:29:0;:::o;23587:113::-;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;23655:1:::1;23638:14;:18:::0;23667:17:::1;:25:::0;;-1:-1:-1;;23667:25:0::1;::::0;;23587:113::o;2641:97::-;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2703:19:0::1;2725:5;2703:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;2703:27:0::1;::::0;;2641:97::o;2972:173::-;2801:4;2836:5;-1:-1:-1;;;;;2836:5:0;2398:10;2825:16;2382:38;;;;-1:-1:-1;;;2382:38:0;;;;;;;:::i;:::-;3048:5:::1;:11:::0;;-1:-1:-1;;;;;;3048:11:0::1;-1:-1:-1::0;;;;;3048:11:0;::::1;::::0;;::::1;::::0;;3070:19;;;-1:-1:-1;3070:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;3070:26:0::1;::::0;;::::1;::::0;;;3112:25;;5781:51:1;;;3112:25:0::1;::::0;5754:18:1;3112:25:0::1;5635:203:1::0;19801:178:0;2480:24;2493:10;2480:12;:24::i;:::-;2472:48;;;;-1:-1:-1;;;2472:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19889:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;;:32;;-1:-1:-1;;19889:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19939;;6778:51:1;;;6845:18;;;6838:50;19939:32:0::1;::::0;6751:18:1;19939:32:0::1;6610:284:1::0;2857:107:0;-1:-1:-1;;;;;2937:19:0;2913:4;2937:19;;;:14;:19;;;;;;;;;2857:107::o;94:181::-;152:7;;184:5;188:1;184;:5;:::i;:::-;172:17;;213:1;208;:6;;200:46;;;;-1:-1:-1;;;200:46:0;;12175:2:1;200:46:0;;;12157:21:1;12214:2;12194:18;;;12187:30;12253:29;12233:18;;;12226:57;12300:18;;200:46:0;11973:351:1;423:192:0;509:7;545:12;537:6;;;;529:29;;;;-1:-1:-1;;;529:29:0;;;;;;;;:::i;:::-;-1:-1:-1;569:9:0;581:5;585:1;581;:5;:::i;:::-;569:17;423:192;-1:-1:-1;;;;;423:192:0:o;11002:1838::-;-1:-1:-1;;;;;11120:21:0;;11094:4;11120:21;;;:13;:21;;;;;;;;11119:22;:51;;;;-1:-1:-1;;;;;;11146:24:0;;;;;;:13;:24;;;;;;;;11145:25;11119:51;11111:74;;;;-1:-1:-1;;;11111:74:0;;15764:2:1;11111:74:0;;;15746:21:1;15803:2;15783:18;;;15776:30;-1:-1:-1;;;15822:18:1;;;15815:41;15873:18;;11111:74:0;15562:335:1;11111:74:0;11199:6;;;;11196:63;;;11215:41;11230:6;11238:9;11249:6;11215:14;:41::i;:::-;11208:48;;;;11196:63;-1:-1:-1;;;;;11275:19:0;;;;;;:11;:19;;;;;;;;11274:20;:47;;;;-1:-1:-1;;;;;;11299:22:0;;;;;;:11;:22;;;;;;;;11298:23;11274:47;11271:124;;;11345:14;;-1:-1:-1;;;11345:14:0;;;;11337:46;;;;-1:-1:-1;;;11337:46:0;;13574:2:1;11337:46:0;;;13556:21:1;13613:2;13593:18;;;13586:30;-1:-1:-1;;;13632:18:1;;;13625:50;13692:18;;11337:46:0;13372:344:1;11337:46:0;11410:16;:14;:16::i;:::-;11407:35;;;11429:10;:8;:10::i;:::-;-1:-1:-1;;;;;11504:33:0;;11456:22;11504:33;;;:25;:33;;;;;;11481:6;;11504:33;;11501:1103;;;-1:-1:-1;;;;;11564:22:0;;;;;;:11;:22;;;;;;;;11560:357;;11651:16;;-1:-1:-1;;;;;11615:20:0;;;;;;:9;:20;;;;;;:32;;11640:6;11615:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;11671:28:0;;;;;;:17;:28;;;;;;;;11615:84;11607:128;;;;-1:-1:-1;;;11607:128:0;;11118:2:1;11607:128:0;;;11100:21:1;11157:2;11137:18;;;11130:30;11196:33;11176:18;;;11169:61;11247:18;;11607:128:0;10916:355:1;11607:128:0;11772:12;;11762:6;:22;;:52;;;-1:-1:-1;;;;;;11788:26:0;;;;;;:15;:26;;;;;;;;11762:52;11754:82;;;;-1:-1:-1;;;11754:82:0;;;;;;;:::i;:::-;11872:29;11883:9;11894:6;11872:10;:29::i;:::-;11855:46;;11560:357;11501:1103;;;-1:-1:-1;;;;;11939:36:0;;;;;;:25;:36;;;;;;;;11936:668;;;-1:-1:-1;;;;;12003:19:0;;;;;;:11;:19;;;;;;;;11999:204;;12061:12;;12051:6;:22;;:49;;;-1:-1:-1;;;;;;12077:23:0;;;;;;:15;:23;;;;;;;;12051:49;12043:79;;;;-1:-1:-1;;;12043:79:0;;;;;;;:::i;:::-;12158:27;12170:6;12178;12158:11;:27::i;11936:668::-;-1:-1:-1;;;;;12241:19:0;;;;;;:11;:19;;;;;;;;12236:357;;12326:16;;-1:-1:-1;;;;;12290:20:0;;;;;;:9;:20;;;;;;:32;;12315:6;12290:24;:32::i;:::-;:52;;:84;;;-1:-1:-1;;;;;;12346:28:0;;;;;;:17;:28;;;;;;;;12290:84;12282:128;;;;-1:-1:-1;;;12282:128:0;;11118:2:1;12282:128:0;;;11100:21:1;11157:2;11137:18;;;11130:30;11196:33;11176:18;;;11169:61;11247:18;;12282:128:0;10916:355:1;12282:128:0;12447:12;;12437:6;:22;;:49;;;-1:-1:-1;;;;;;12463:23:0;;;;;;:15;:23;;;;;;;;12437:49;12429:79;;;;-1:-1:-1;;;12429:79:0;;;;;;;:::i;:::-;12544:31;12560:6;12568;12544:15;:31::i;:::-;12527:48;;12236:357;-1:-1:-1;;;;;12636:17:0;;;;;;:9;:17;;;;;;:29;;12658:6;12636:21;:29::i;:::-;-1:-1:-1;;;;;12616:17:0;;;;;;;:9;:17;;;;;;:49;;;;12699:20;;;;;;;:40;;12724:14;12699:24;:40::i;:::-;-1:-1:-1;;;;;12676:20:0;;;;;;;:9;:20;;;;;;;:63;;;;12767:43;;;;;;-1:-1:-1;;;;;;;;;;;12767:43:0;;;12795:14;16048:25:1;;16036:2;16021:18;;15902:177;12767:43:0;;;;;;;;-1:-1:-1;12828:4:0;;11002:1838;-1:-1:-1;;;;11002:1838:0:o;281:136::-;339:7;366:43;370:1;373;366:43;;;;;;;;;;;;;;;;;:3;:43::i;16467:1931::-;8529:6;:13;;-1:-1:-1;;8529:13:0;8538:4;8529:13;;;16543:16:::1;::::0;16609:14:::1;::::0;16592:12:::1;::::0;8529:6;;16592:32:::1;::::0;:12;:16:::1;:32::i;:::-;16686:4;16637:28;16668:24:::0;;;:9:::1;:24;::::0;;;;;16570:54;;-1:-1:-1;16729:67:0::1;16794:1;16729:60;16570:54:::0;16729:60;16668:24;16754:16;16729:24:::1;:42::i;:::-;:46:::0;::::1;:60::i;:67::-;16703:93:::0;-1:-1:-1;16807:20:0::1;16830:41;:20:::0;16703:93;16830:24:::1;:41::i;:::-;16966:16;::::0;;16980:1:::1;16966:16:::0;;;;;::::1;::::0;;16807:64;;-1:-1:-1;16908:21:0::1;::::0;16884::::1;::::0;16966:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;16966:16:0::1;16942:40;;17011:4;16993;16998:1;16993:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16993:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;17037:4:::1;::::0;17027:7;;17037:4;::::1;::::0;17027;;17037;;17027:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;17027:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;17054:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;17054:188:0;;:6;::::1;::::0;:57:::1;::::0;:188:::1;::::0;17126:12;;17054:6:::1;::::0;17169:4;;17196::::1;::::0;17216:15:::1;::::0;17054:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17255:17;17275:40;17301:13;17275:21;:25;;:40;;;;:::i;:::-;17255:60:::0;-1:-1:-1;17328:19:0::1;17350:41;17367:23;:16:::0;17388:1:::1;17367:20;:23::i;:::-;17350:12:::0;;:16:::1;:41::i;:::-;17328:63;;17412:26;17441:55;17494:1;17441:48;17477:11;17441:31;17455:16;;17441:9;:13;;:31;;;;:::i;:55::-;17412:84;;17507:26;17536:48;17572:11;17536:31;17550:16;;17536:9;:13;;:31;;;;:::i;:48::-;17507:77;;17595:20;17618:42;17648:11;17618:25;17632:10;;17618:9;:13;;:25;;;;:::i;:42::-;17595:65:::0;-1:-1:-1;17671:20:0::1;17694:75;17595:65:::0;17694:57:::1;17732:18:::0;17694:57;:9;17708:18;17694:13:::1;:33::i;:75::-;17811:20;::::0;17803:65:::1;::::0;17671:98;;-1:-1:-1;17783:15:0::1;::::0;-1:-1:-1;;;;;17811:20:0;;::::1;::::0;17845:18;;17783:15;17803:65;17783:15;17803:65;17845:18;17811:20;17803:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;17903:21:0::1;::::0;17895:60:::1;::::0;17782:86;;-1:-1:-1;;;;;;17903:21:0::1;::::0;17938:12;;17895:60:::1;::::0;;;17938:12;17903:21;17895:60:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;17990:14:0::1;::::0;17982:53:::1;::::0;17879:76;;-1:-1:-1;;;;;;17990:14:0::1;::::0;18018:12;;17982:53:::1;::::0;;;18018:12;17990:14;17982:53:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;18069:5:0::1;::::0;-1:-1:-1;;18090:19:0;;;-1:-1:-1;18087:294:0::1;;18125:6;::::0;18299:21:::1;::::0;18125:244:::1;::::0;-1:-1:-1;;;18125:244:0;;18201:4:::1;18125:244;::::0;::::1;7519:34:1::0;7569:18;;;7562:34;;;-1:-1:-1;7612:18:1;;;7605:34;;;7655:18;;;7648:34;-1:-1:-1;;;;;18125:6:0::1;18299:21:::0;;::::1;::::0;::::1;7698:19:1::0;;;7691:44;18339:15:0::1;7751:19:1::0;;;7744:35;18125:6:0;::::1;::::0;:22:::1;::::0;18155:18;;7453:19:1;;18125:244:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18087:294;-1:-1:-1::0;;8547:6:0;:14;;-1:-1:-1;;8547:14:0;;;-1:-1:-1;;;;;;;;;;;;16467:1931:0:o;877:132::-;935:7;962:39;966:1;969;962:39;;;;;;;;;;;;;;;;;:3;:39::i;12852:330::-;12982:53;;;;;;;;;;;-1:-1:-1;;;12982:53:0;;;;;;;;-1:-1:-1;;;;;12982:17:0;;12945:4;12982:17;;;:9;:17;;;;;;;:53;;13004:6;;12982:21;:53::i;:::-;-1:-1:-1;;;;;12962:17:0;;;;;;;:9;:17;;;;;;:73;;;;13069:20;;;;;;;:32;;13094:6;13069:24;:32::i;:::-;-1:-1:-1;;;;;13046:20:0;;;;;;;:9;:20;;;;;;;:55;;;;13117:35;;;;;;-1:-1:-1;;;;;;;;;;;13117:35:0;;;13145:6;16048:25:1;;16036:2;16021:18;;15902:177;13117:35:0;;;;;;;;-1:-1:-1;13170:4:0;12852:330;;;;;:::o;15591:226::-;15700:10;15640:4;15674:37;;;:25;:37;;;;;;;;15673:38;:58;;;;-1:-1:-1;15725:6:0;;;;15724:7;15673:58;:82;;;;-1:-1:-1;15744:11:0;;-1:-1:-1;;;15744:11:0;;;;15673:82;:136;;;;-1:-1:-1;;15796:13:0;;15786:4;15768:24;;;;:9;:24;;;;;;:41;;;15591:226::o;13203:699::-;13276:7;13329:17;;13314:12;:32;13310:189;;;13380:4;;-1:-1:-1;;;;;13367:17:0;;;13380:4;;13367:17;;;;:49;;-1:-1:-1;13409:6:0;;-1:-1:-1;;;;;13388:28:0;;;13409:6;;13388:28;;13367:49;13363:121;;;-1:-1:-1;;;;;13437:24:0;;;;;;:13;:24;;;;;:31;;-1:-1:-1;;13437:31:0;13464:4;13437:31;;;13363:121;13524:17;;;;13521:338;;;13573:15;;13561:10;;:27;13558:290;;;13622:10;;:17;;13637:1;13622:14;:17::i;:::-;13609:10;:30;13558:290;;;13712:12;;13701:6;;:24;;:10;:24::i;:::-;13683:14;;:42;13680:157;;13778:12;;13759:14;;:32;;:18;:32::i;:::-;13742:14;:49;13819:1;13806:10;:14;13680:157;-1:-1:-1;13888:6:0;13203:699;-1:-1:-1;13203:699:0:o;13910:1098::-;13981:7;14002:17;14022:66;7831:3;14022:46;14033:34;14052:14;;14033;;:18;;:34;;;;:::i;:::-;14022:6;;:10;:46::i;:66::-;14002:86;;14099:24;14126:46;7831:3;14126:26;14137:14;;14126:6;:10;;:26;;;;:::i;:46::-;14099:73;-1:-1:-1;14183:22:0;14208:31;:9;14099:73;14208:13;:31::i;:::-;14297:4;14279:24;;;;:9;:24;;;;;;14183:56;;-1:-1:-1;14279:39:0;;14308:9;14279:28;:39::i;:::-;14270:4;14252:24;;;;:9;:24;;;;;;;:66;;;;14334:42;;-1:-1:-1;;;;;14334:42:0;;;-1:-1:-1;;;;;;;;;;;14334:42:0;;;14366:9;16048:25:1;;16036:2;16021:18;;15902:177;14334:42:0;;;;;;;;14392:20;;14389:209;;14471:18;;-1:-1:-1;;;;;14471:18:0;14461:29;;;;:9;:29;;;;;;:51;;14495:16;14461:33;:51::i;:::-;14439:18;;;-1:-1:-1;;;;;14439:18:0;;;14429:29;;;;:9;:29;;;;;;;;;:83;;;;14549:18;;14532:54;;16048:25:1;;;14549:18:0;;;;14532:54;;;;-1:-1:-1;;;;;;;;;;;14532:54:0;16021:18:1;14532:54:0;;;;;;;14389:209;14613:17;;;;14610:321;;;14677:12;;14666:6;;:24;;:10;:24::i;:::-;14649:14;;:41;14646:272;;14742:12;;14723:14;;:32;;:18;:32::i;:::-;14706:14;:49;14646:272;;;14821:12;;14810:6;;:24;;:10;:24::i;:::-;14793:14;;:41;:68;;;;;14855:6;;14838:14;;:23;14793:68;14790:128;;;14895:6;;14878:14;:23;14790:128;14960:26;:6;14971:14;14960:10;:26::i;:::-;14953:33;13910:1098;-1:-1:-1;;;;;;13910:1098:0:o;15016:563::-;15129:11;;15170:17;;15091:7;;15129:11;15155:12;:32;15151:83;;;-1:-1:-1;15215:2:0;15151:83;15244:17;15264:40;7831:3;15264:20;:6;15275:8;15264:10;:20::i;:40::-;15244:60;-1:-1:-1;15345:13:0;;15341:176;;15420:4;15402:24;;;;:9;:24;;;;;;:39;;15431:9;15402:28;:39::i;:::-;15393:4;15375:24;;;;:9;:24;;;;;;;:66;;;;15462:42;;-1:-1:-1;;;;;15462:42:0;;;-1:-1:-1;;;;;;;;;;;15462:42:0;;;15494:9;16048:25:1;;16036:2;16021:18;;15902:177;15462:42:0;;;;;;;;15341:176;15549:21;:6;15560:9;15549:10;:21::i;621:250::-;679:7;703:6;699:47;;-1:-1:-1;733:1:0;726:8;;699:47;758:9;770:5;774:1;770;:5;:::i;:::-;758:17;-1:-1:-1;803:1:0;794:5;798:1;758:17;794:5;:::i;:::-;:10;786:56;;;;-1:-1:-1;;;786:56:0;;13923:2:1;786:56:0;;;13905:21:1;13962:2;13942:18;;;13935:30;14001:34;13981:18;;;13974:62;-1:-1:-1;;;14052:18:1;;;14045:31;14093:19;;786:56:0;13721:397:1;1015:189:0;1101:7;1136:12;1129:5;1121:28;;;;-1:-1:-1;;;1121:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1160:9:0;1172:5;1176:1;1172;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;526:388::-;594:6;602;655:2;643:9;634:7;630:23;626:32;623:52;;;671:1;668;661:12;623:52;710:9;697:23;729:31;754:5;729:31;:::i;:::-;779:5;-1:-1:-1;836:2:1;821:18;;808:32;849:33;808:32;849:33;:::i;:::-;901:7;891:17;;;526:388;;;;;:::o;919:813::-;1014:6;1022;1030;1038;1046;1099:3;1087:9;1078:7;1074:23;1070:33;1067:53;;;1116:1;1113;1106:12;1067:53;1155:9;1142:23;1174:31;1199:5;1174:31;:::i;:::-;1224:5;-1:-1:-1;1281:2:1;1266:18;;1253:32;1294:33;1253:32;1294:33;:::i;:::-;1346:7;-1:-1:-1;1405:2:1;1390:18;;1377:32;1418:33;1377:32;1418:33;:::i;:::-;1470:7;-1:-1:-1;1529:2:1;1514:18;;1501:32;1542:33;1501:32;1542:33;:::i;:::-;1594:7;-1:-1:-1;1653:3:1;1638:19;;1625:33;1667;1625;1667;:::i;:::-;1719:7;1709:17;;;919:813;;;;;;;;:::o;1737:456::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1938:9;1925:23;1957:31;1982:5;1957:31;:::i;:::-;2007:5;-1:-1:-1;2064:2:1;2049:18;;2036:32;2077:33;2036:32;2077:33;:::i;:::-;1737:456;;2129:7;;-1:-1:-1;;;2183:2:1;2168:18;;;;2155:32;;1737:456::o;2198:382::-;2263:6;2271;2324:2;2312:9;2303:7;2299:23;2295:32;2292:52;;;2340:1;2337;2330:12;2292:52;2379:9;2366:23;2398:31;2423:5;2398:31;:::i;:::-;2448:5;-1:-1:-1;2505:2:1;2490:18;;2477:32;2518:30;2477:32;2518:30;:::i;2585:315::-;2653:6;2661;2714:2;2702:9;2693:7;2689:23;2685:32;2682:52;;;2730:1;2727;2720:12;2682:52;2769:9;2756:23;2788:31;2813:5;2788:31;:::i;:::-;2838:5;2890:2;2875:18;;;;2862:32;;-1:-1:-1;;;2585:315:1:o;2905:750::-;2997:6;3005;3013;3066:2;3054:9;3045:7;3041:23;3037:32;3034:52;;;3082:1;3079;3072:12;3034:52;3122:9;3109:23;3151:18;3192:2;3184:6;3181:14;3178:34;;;3208:1;3205;3198:12;3178:34;3246:6;3235:9;3231:22;3221:32;;3291:7;3284:4;3280:2;3276:13;3272:27;3262:55;;3313:1;3310;3303:12;3262:55;3353:2;3340:16;3379:2;3371:6;3368:14;3365:34;;;3395:1;3392;3385:12;3365:34;3450:7;3443:4;3433:6;3430:1;3426:14;3422:2;3418:23;3414:34;3411:47;3408:67;;;3471:1;3468;3461:12;3408:67;3502:4;3494:13;;;;-1:-1:-1;3526:6:1;-1:-1:-1;;3567:20:1;;3554:34;3597:28;3554:34;3597:28;:::i;:::-;3644:5;3634:15;;;2905:750;;;;;:::o;3660:241::-;3716:6;3769:2;3757:9;3748:7;3744:23;3740:32;3737:52;;;3785:1;3782;3775:12;3737:52;3824:9;3811:23;3843:28;3865:5;3843:28;:::i;3906:245::-;3973:6;4026:2;4014:9;4005:7;4001:23;3997:32;3994:52;;;4042:1;4039;4032:12;3994:52;4074:9;4068:16;4093:28;4115:5;4093:28;:::i;4156:309::-;4221:6;4229;4282:2;4270:9;4261:7;4257:23;4253:32;4250:52;;;4298:1;4295;4288:12;4250:52;4337:9;4324:23;4356:28;4378:5;4356:28;:::i;4470:180::-;4529:6;4582:2;4570:9;4561:7;4557:23;4553:32;4550:52;;;4598:1;4595;4588:12;4550:52;-1:-1:-1;4621:23:1;;4470:180;-1:-1:-1;4470:180:1:o;4655:306::-;4743:6;4751;4759;4812:2;4800:9;4791:7;4787:23;4783:32;4780:52;;;4828:1;4825;4818:12;4780:52;4857:9;4851:16;4841:26;;4907:2;4896:9;4892:18;4886:25;4876:35;;4951:2;4940:9;4936:18;4930:25;4920:35;;4655:306;;;;;:::o;4966:454::-;5061:6;5069;5077;5085;5093;5146:3;5134:9;5125:7;5121:23;5117:33;5114:53;;;5163:1;5160;5153:12;5114:53;-1:-1:-1;;5186:23:1;;;5256:2;5241:18;;5228:32;;-1:-1:-1;5307:2:1;5292:18;;5279:32;;5358:2;5343:18;;5330:32;;-1:-1:-1;5409:3:1;5394:19;5381:33;;-1:-1:-1;4966:454:1;-1:-1:-1;4966:454:1:o;7790:794::-;8012:2;8024:21;;;7997:18;;8080:22;;;7964:4;8159:6;8133:2;8118:18;;7964:4;8193:304;8207:6;8204:1;8201:13;8193:304;;;8282:6;8269:20;8302:31;8327:5;8302:31;:::i;:::-;-1:-1:-1;;;;;8358:31:1;8346:44;;8413:4;8472:15;;;;8437:12;;;;8386:1;8222:9;8193:304;;;8197:3;8514;8506:11;;;;8569:6;8562:14;8555:22;8548:4;8537:9;8533:20;8526:52;7790:794;;;;;;:::o;9270:597::-;9382:4;9411:2;9440;9429:9;9422:21;9472:6;9466:13;9515:6;9510:2;9499:9;9495:18;9488:34;9540:1;9550:140;9564:6;9561:1;9558:13;9550:140;;;9659:14;;;9655:23;;9649:30;9625:17;;;9644:2;9621:26;9614:66;9579:10;;9550:140;;;9708:6;9705:1;9702:13;9699:91;;;9778:1;9773:2;9764:6;9753:9;9749:22;9745:31;9738:42;9699:91;-1:-1:-1;9851:2:1;9830:15;-1:-1:-1;;9826:29:1;9811:45;;;;9858:2;9807:54;;9270:597;-1:-1:-1;;;9270:597:1:o;10570:341::-;10772:2;10754:21;;;10811:2;10791:18;;;10784:30;-1:-1:-1;;;10845:2:1;10830:18;;10823:47;10902:2;10887:18;;10570:341::o;11622:346::-;11824:2;11806:21;;;11863:2;11843:18;;;11836:30;-1:-1:-1;;;11897:2:1;11882:18;;11875:52;11959:2;11944:18;;11622:346::o;14123:329::-;14325:2;14307:21;;;14364:1;14344:18;;;14337:29;-1:-1:-1;;;14397:2:1;14382:18;;14375:36;14443:2;14428:18;;14123:329::o;15222:335::-;15424:2;15406:21;;;15463:2;15443:18;;;15436:30;-1:-1:-1;;;15497:2:1;15482:18;;15475:41;15548:2;15533:18;;15222:335::o;16084:980::-;16346:4;16394:3;16383:9;16379:19;16425:6;16414:9;16407:25;16451:2;16489:6;16484:2;16473:9;16469:18;16462:34;16532:3;16527:2;16516:9;16512:18;16505:31;16556:6;16591;16585:13;16622:6;16614;16607:22;16660:3;16649:9;16645:19;16638:26;;16699:2;16691:6;16687:15;16673:29;;16720:1;16730:195;16744:6;16741:1;16738:13;16730:195;;;16809:13;;-1:-1:-1;;;;;16805:39:1;16793:52;;16900:15;;;;16865:12;;;;16841:1;16759:9;16730:195;;;-1:-1:-1;;;;;;;16981:32:1;;;;16976:2;16961:18;;16954:60;-1:-1:-1;;;17045:3:1;17030:19;17023:35;16942:3;16084:980;-1:-1:-1;;;16084:980:1:o;17726:128::-;17766:3;17797:1;17793:6;17790:1;17787:13;17784:39;;;17803:18;;:::i;:::-;-1:-1:-1;17839:9:1;;17726:128::o;17859:217::-;17899:1;17925;17915:132;;17969:10;17964:3;17960:20;17957:1;17950:31;18004:4;18001:1;17994:15;18032:4;18029:1;18022:15;17915:132;-1:-1:-1;18061:9:1;;17859:217::o;18081:168::-;18121:7;18187:1;18183;18179:6;18175:14;18172:1;18169:21;18164:1;18157:9;18150:17;18146:45;18143:71;;;18194:18;;:::i;:::-;-1:-1:-1;18234:9:1;;18081:168::o;18254:125::-;18294:4;18322:1;18319;18316:8;18313:34;;;18327:18;;:::i;:::-;-1:-1:-1;18364:9:1;;18254:125::o;18384:135::-;18423:3;-1:-1:-1;;18444:17:1;;18441:43;;;18464:18;;:::i;:::-;-1:-1:-1;18511:1:1;18500:13;;18384:135::o;18524:127::-;18585:10;18580:3;18576:20;18573:1;18566:31;18616:4;18613:1;18606:15;18640:4;18637:1;18630:15;18656:127;18717:10;18712:3;18708:20;18705:1;18698:31;18748:4;18745:1;18738:15;18772:4;18769:1;18762:15;18788:127;18849:10;18844:3;18840:20;18837:1;18830:31;18880:4;18877:1;18870:15;18904:4;18901:1;18894:15;19052:131;-1:-1:-1;;;;;19127:31:1;;19117:42;;19107:70;;19173:1;19170;19163:12;19188:118;19274:5;19267:13;19260:21;19253:5;19250:32;19240:60;;19296:1;19293;19286:12

Swarm Source

ipfs://d7bf05281af153f12ed7b5d52d698ebed7f508f9031bd6a23c197f2a3a13bbf4

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.