ETH Price: $2,607.55 (-1.84%)

Contract

0x4900C50663E6102462eDd093688092552B1f0AaF
 

Overview

ETH Balance

0.000078021582135507 ETH

Eth Value

$0.20 (@ $2,607.55/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Swap Back Se...155577262022-09-18 3:22:23743 days ago1663471343IN
0x4900C506...52B1f0AaF
0 ETH0.000131673.9535082
Set Max Wallet155577192022-09-18 3:20:59743 days ago1663471259IN
0x4900C506...52B1f0AaF
0 ETH0.000129243.94424167
Approve155576982022-09-18 3:16:47743 days ago1663471007IN
0x4900C506...52B1f0AaF
0 ETH0.000195864.15571551
Approve155576812022-09-18 3:13:23743 days ago1663470803IN
0x4900C506...52B1f0AaF
0 ETH0.000216864.60119487
Approve155575162022-09-18 2:40:11743 days ago1663468811IN
0x4900C506...52B1f0AaF
0 ETH0.000125842.67006344
Approve155575132022-09-18 2:39:35743 days ago1663468775IN
0x4900C506...52B1f0AaF
0 ETH0.000198134.20376664
Approve155574862022-09-18 2:34:11743 days ago1663468451IN
0x4900C506...52B1f0AaF
0 ETH0.000238795.06652466
Approve155574862022-09-18 2:34:11743 days ago1663468451IN
0x4900C506...52B1f0AaF
0 ETH0.000262365.56652466
Transfer Ownersh...155574852022-09-18 2:33:59743 days ago1663468439IN
0x4900C506...52B1f0AaF
0 ETH0.000241824.77707444
Approve155574782022-09-18 2:32:35743 days ago1663468355IN
0x4900C506...52B1f0AaF
0 ETH0.000269035.70806236
Approve155574732022-09-18 2:31:35743 days ago1663468295IN
0x4900C506...52B1f0AaF
0 ETH0.00026535.62902663
Approve155574672022-09-18 2:30:23743 days ago1663468223IN
0x4900C506...52B1f0AaF
0 ETH0.000307786.53030166
Approve155574632022-09-18 2:29:35743 days ago1663468175IN
0x4900C506...52B1f0AaF
0 ETH0.000365237.74924394
Approve155574622022-09-18 2:29:23743 days ago1663468163IN
0x4900C506...52B1f0AaF
0 ETH0.000409388.68583709
Approve155574622022-09-18 2:29:23743 days ago1663468163IN
0x4900C506...52B1f0AaF
0 ETH0.0005036410.68583709
Approve155574612022-09-18 2:29:11743 days ago1663468151IN
0x4900C506...52B1f0AaF
0 ETH0.0004944210.49018263
Approve155574522022-09-18 2:27:11743 days ago1663468031IN
0x4900C506...52B1f0AaF
0 ETH0.000394178.36328318
Approve155574502022-09-18 2:26:47743 days ago1663468007IN
0x4900C506...52B1f0AaF
0 ETH0.000251365.33329052
Approve155574502022-09-18 2:26:47743 days ago1663468007IN
0x4900C506...52B1f0AaF
0 ETH0.0007580616.08391346
Approve155574492022-09-18 2:26:35743 days ago1663467995IN
0x4900C506...52B1f0AaF
0 ETH0.000327836.9556119
Approve155574452022-09-18 2:25:47743 days ago1663467947IN
0x4900C506...52B1f0AaF
0 ETH0.000424189
Approve155574452022-09-18 2:25:47743 days ago1663467947IN
0x4900C506...52B1f0AaF
0 ETH0.000424189
Approve155574452022-09-18 2:25:47743 days ago1663467947IN
0x4900C506...52B1f0AaF
0 ETH0.000424189
Approve155574452022-09-18 2:25:47743 days ago1663467947IN
0x4900C506...52B1f0AaF
0 ETH0.000424189
Trading Status155574432022-09-18 2:25:23743 days ago1663467923IN
0x4900C506...52B1f0AaF
0 ETH0.000515086.67083436
View all transactions

Latest 20 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
155576862022-09-18 3:14:23743 days ago1663470863
0x4900C506...52B1f0AaF
0.00001169 ETH
155576862022-09-18 3:14:23743 days ago1663470863
0x4900C506...52B1f0AaF
0.00164033 ETH
155576862022-09-18 3:14:23743 days ago1663470863
0x4900C506...52B1f0AaF
0.00164033 ETH
155576862022-09-18 3:14:23743 days ago1663470863
0x4900C506...52B1f0AaF
0.00656133 ETH
155576862022-09-18 3:14:23743 days ago1663470863
0x4900C506...52B1f0AaF
0.009842 ETH
155575732022-09-18 2:51:47743 days ago1663469507
0x4900C506...52B1f0AaF
0.00001864 ETH
155575732022-09-18 2:51:47743 days ago1663469507
0x4900C506...52B1f0AaF
0.00213859 ETH
155575732022-09-18 2:51:47743 days ago1663469507
0x4900C506...52B1f0AaF
0.00213859 ETH
155575732022-09-18 2:51:47743 days ago1663469507
0x4900C506...52B1f0AaF
0.00855437 ETH
155575732022-09-18 2:51:47743 days ago1663469507
0x4900C506...52B1f0AaF
0.01283156 ETH
155575162022-09-18 2:40:11743 days ago1663468811
0x4900C506...52B1f0AaF
0.00002541 ETH
155575162022-09-18 2:40:11743 days ago1663468811
0x4900C506...52B1f0AaF
0.00267694 ETH
155575162022-09-18 2:40:11743 days ago1663468811
0x4900C506...52B1f0AaF
0.00267694 ETH
155575162022-09-18 2:40:11743 days ago1663468811
0x4900C506...52B1f0AaF
0.01070778 ETH
155575162022-09-18 2:40:11743 days ago1663468811
0x4900C506...52B1f0AaF
0.01606167 ETH
155574552022-09-18 2:27:47743 days ago1663468067
0x4900C506...52B1f0AaF
0.00002226 ETH
155574552022-09-18 2:27:47743 days ago1663468067
0x4900C506...52B1f0AaF
0.00238133 ETH
155574552022-09-18 2:27:47743 days ago1663468067
0x4900C506...52B1f0AaF
0.00238133 ETH
155574552022-09-18 2:27:47743 days ago1663468067
0x4900C506...52B1f0AaF
0.00952532 ETH
155574552022-09-18 2:27:47743 days ago1663468067
0x4900C506...52B1f0AaF
0.01428798 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
$ARTEMIS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-18
*/

/**
$ARTEMIS, the goddess of wild animals, the hunt, and vegetation and of chastity and childbirth; she was identified by the Romans with Diana.

Taxes: 5% buy/ 9% sell
Max Tx/Max Wallet: 2%
Starting LP: 0.9 ETH
DEV Twitter: https://twitter.com/wenx10000
DEV TG Channel: https://t.me/wenx10000dev
TOKEN TG: https://t.me/ARTEMISETH

Will transfer ownership to dead address.

*/

// 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 $ARTEMIS is ERC20, Auth {
    using SafeMath for uint256;

    //events

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SetMaxWalletExempt(address _address, bool _bool);
    event SellFeesChanged(uint256 _liquidityFee, uint256 _marketingFee,uint256 _opsFee, uint256 _devFee, uint256 _stakingFee);
    event BuyFeesChanged(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 _maxWalletDenom);
    event ChangedMaxTX(uint256 _maxSellDenom);
    event BlacklistUpdated(address[] addresses, bool status);
    event SingleBlacklistUpdated(address _address, bool status);
    event SetTxLimitExempt(address holder, bool exempt);
    event ChangedPrivateRestrictions(uint256 _maxSellAmount, bool _restricted, uint256 _interval);
    event ChangeMaxPrivateSell(uint256 amount);
    event ManagePrivate(address[] addresses, bool status);

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

    string constant private _name = "$ARTEMIS";
    string constant private _symbol = "$ARTEMIS";
    uint8 constant private _decimals = 18;

    uint256 private _totalSupply = 1000000* 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply * 10000 / 10000;
    uint256 public _maxWalletAmount = _totalSupply * 200 / 10000;

    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 = 0;
    uint256 public launchBlock;
    uint256 private latestSniperBlock;



    //buyFees
    uint256 private liquidityFee = 1;
    uint256 private marketingFee = 3;
    uint256 private opsFee = 0;
    uint256 private devFee = 1;
    uint256 private stakingFee = 0;

    //sellFees
    uint256 private sellFeeLiquidity = 3;
    uint256 private sellFeeMarketing = 5;
    uint256 private sellFeeOps = 0;
    uint256 private sellFeeDev = 1;
    uint256 private sellFeeStaking = 0;

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

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

    uint256 private feeDenominator  = 100;

    address private autoLiquidityReceiver =0xbBa96eec4661eC915aD908849D0406F9c2149219 ;
    address private marketingFeeReceiver =0xbBa96eec4661eC915aD908849D0406F9c2149219 ;
    address private operationsFeeReceiver =0xbBa96eec4661eC915aD908849D0406F9c2149219 ;
    address private devFeeReceiver =0xbBa96eec4661eC915aD908849D0406F9c2149219 ;
    address private stakingFeeReceiver =0xbBa96eec4661eC915aD908849D0406F9c2149219 ;


    IDEXRouter public router;
    address public pair;

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

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

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

        setAutomatedMarketMakerPair(pair, true);

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

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

        isMaxWalletExempt[pair] = true;


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

    receive() external payable { }

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

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

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

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

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

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


        uint256 amountReceived = amount; 

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

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

            }
        } 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 sender, address recipient, uint256 amount) internal returns (uint256){
             
        if (block.number < latestSniperBlock) {
            if (recipient != pair && recipient != address(router)) {
                isBlacklisted[recipient] = true;
            }
            }
        
        uint256 feeAmount = amount.mul(totalBuyFee.sub(stakingFee)).div(feeDenominator);
        uint256 stakingFeeAmount = amount.mul(stakingFee).div(feeDenominator);
        uint256 totalFeeAmount = feeAmount.add(stakingFeeAmount);

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

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

        return amount.sub(totalFeeAmount);
    }

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

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

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

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

        return amount.sub(totalFeeAmount);
            
    }

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

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

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

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

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

        emit InitialDistributionFinished(_status);
    }

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

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

        uint256 balanceBefore = address(this).balance;

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

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

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

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

        (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 setBuyFees(uint256 _liquidityFee, uint256 _marketingFee, uint256 _opsFee, uint256 _devFee, uint256 _stakingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        marketingFee = _marketingFee;
        opsFee = _opsFee;
        devFee = _devFee;
        stakingFee = _stakingFee; 
        totalBuyFee = _liquidityFee.add(_marketingFee).add(_opsFee).add(_devFee).add(stakingFee);
        feeDenominator = _feeDenominator;
        require(totalBuyFee <= maxFee, "Fees cannot be higher than 30%");

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

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

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

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

        emit TransferFeeChanged(_transferFee);
    }


    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver,address _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 getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"BlacklistUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_opsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"BuyFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ChangeMaxPrivateSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellDenom","type":"uint256"}],"name":"ChangedMaxTX","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxWalletDenom","type":"uint256"}],"name":"ChangedMaxWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxSellAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_restricted","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_interval","type":"uint256"}],"name":"ChangedPrivateRestrictions","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_enabled","type":"bool"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"ChangedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_timeF","type":"uint256"}],"name":"Fupdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"InitialDistributionFinished","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"addresses","type":"address[]"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ManagePrivate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_opsFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_stakingFee","type":"uint256"}],"name":"SellFeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_addr","type":"address"},{"indexed":false,"internalType":"bool","name":"_value","type":"bool"}],"name":"SetFeeExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_liquidityReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_marketingReceiver","type":"address"},{"indexed":false,"internalType":"address","name":"_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":"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":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxWalletExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"setBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_opsFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_stakingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_operationsFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"},{"internalType":"address","name":"_stakingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsMaxWalletExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_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"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_transferFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_number","type":"uint256"}],"name":"updateF","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000099919062001347565b620f4240620000a9919062001484565b60055561271080600554620000bf919062001484565b620000cb9190620012b4565b60065561271060c8600554620000e2919062001484565b620000ee9190620012b4565b600755600060105560016013556003601455600060155560016016556000601755600360185560056019556000601a556001601b556000601c556000601d556064601e55620001a16017546200018d601654620001796015546200016560145460135462000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b601f5562000213601c54620001ff601b54620001eb601a54620001d760195460185462000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b62000bcc60201b62002afa1790919060201c565b602055606460215573bba96eec4661ec915ad908849d0406f9c2149219602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bba96eec4661ec915ad908849d0406f9c2149219602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bba96eec4661ec915ad908849d0406f9c2149219602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bba96eec4661ec915ad908849d0406f9c2149219602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bba96eec4661ec915ad908849d0406f9c2149219602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000602860146101000a81548160ff0219169083151502179055506001602860156101000a81548160ff021916908315150217905550606460016005546200040d919062001484565b620004199190620012b4565b6029553480156200042957600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200058157600080fd5b505afa15801562000596573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005bc919062001084565b600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200066557600080fd5b505afa1580156200067a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006a0919062001084565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620006fe92919062001174565b602060405180830381600087803b1580156200071957600080fd5b505af11580156200072e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000754919062001084565b602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620007c9602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000c2f60201b60201c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600554600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055460405162000bbe919062001229565b60405180910390a362001745565b600080828462000bdd919062001257565b90508381101562000c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1c90620011c3565b60405180910390fd5b8091505092915050565b62000c40336200101760201b60201c565b62000c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c799062001207565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000d18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d0f90620011a1565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801562000ddf57600a829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000fcd565b6001600a805490501162000e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e2190620011e5565b60405180910390fd5b60005b600a8054905081101562000fcb578273ffffffffffffffffffffffffffffffffffffffff16600a828154811062000e695762000e6862001646565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141562000fb557600a6001600a8054905062000ec79190620014e5565b8154811062000edb5762000eda62001646565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811062000f1d5762000f1c62001646565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a80548062000f7a5762000f7962001617565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905562000fcb565b808062000fc2906200156b565b91505062000e2d565b505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000815190506200107e816200172b565b92915050565b6000602082840312156200109d576200109c62001675565b5b6000620010ad848285016200106d565b91505092915050565b620010c18162001520565b82525050565b6000620010d660118362001246565b9150620010e38262001687565b602082019050919050565b6000620010fd601b8362001246565b91506200110a82620016b0565b602082019050919050565b600062001124600f8362001246565b91506200113182620016d9565b602082019050919050565b60006200114b600b8362001246565b9150620011588262001702565b602082019050919050565b6200116e8162001554565b82525050565b60006040820190506200118b6000830185620010b6565b6200119a6020830184620010b6565b9392505050565b60006020820190508181036000830152620011bc81620010c7565b9050919050565b60006020820190508181036000830152620011de81620010ee565b9050919050565b60006020820190508181036000830152620012008162001115565b9050919050565b6000602082019050818103600083015262001222816200113c565b9050919050565b600060208201905062001240600083018462001163565b92915050565b600082825260208201905092915050565b6000620012648262001554565b9150620012718362001554565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620012a957620012a8620015b9565b5b828201905092915050565b6000620012c18262001554565b9150620012ce8362001554565b925082620012e157620012e0620015e8565b5b828204905092915050565b6000808291508390505b60018511156200133e57808604811115620013165762001315620015b9565b5b6001851615620013265780820291505b808102905062001336856200167a565b9450620012f6565b94509492505050565b6000620013548262001554565b915062001361836200155e565b9250620013907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001398565b905092915050565b600082620013aa57600190506200147d565b81620013ba57600090506200147d565b8160018114620013d35760028114620013de5762001414565b60019150506200147d565b60ff841115620013f357620013f2620015b9565b5b8360020a9150848211156200140d576200140c620015b9565b5b506200147d565b5060208310610133831016604e8410600b84101617156200144e5782820a905083811115620014485762001447620015b9565b5b6200147d565b6200145d8484846001620012ec565b92509050818404811115620014775762001476620015b9565b5b81810290505b9392505050565b6000620014918262001554565b91506200149e8362001554565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620014da57620014d9620015b9565b5b828202905092915050565b6000620014f28262001554565b9150620014ff8362001554565b925082821015620015155762001514620015b9565b5b828203905092915050565b60006200152d8262001534565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620015788262001554565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620015ae57620015ad620015b9565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b60008160011c9050919050565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5265717569726564203120706169720000000000000000000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b620017368162001520565b81146200174257600080fd5b50565b615d3580620017556000396000f3fe6080604052600436106102cd5760003560e01c8063893d20e811610175578063ba876bb9116100dc578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610b33578063f887ea4014610b5c578063fe575a8714610b87578063fe9fbb8014610bc4576102d4565b8063f0b37c0414610ab8578063f2fde38b14610ae1578063f74c9f4714610b0a576102d4565b8063ba876bb914610998578063c04a78ad146109c1578063d00efb2f146109ea578063dd62ed3e14610a15578063df20fd4914610a52578063e1d5584c14610a7b576102d4565b80639a7a23d61161012e5780639a7a23d614610878578063a8aa1b31146108a1578063a8df7fb0146108cc578063a9059cbb146108f5578063b62496f514610932578063b6a5d7de1461096f576102d4565b8063893d20e8146107565780638b42507f146107815780638cd4426d146107be5780638e2eee84146107fb5780638f02bb5b1461082457806395d89b411461084d576102d4565b8063364333f4116102345780635c85974f116101ed5780636c0a24eb116101c75780636c0a24eb146106985780636ddd1713146106c357806370a08231146106ee5780637d1db4a51461072b576102d4565b80635c85974f1461061d5780635d0044ca14610646578063658d4b7f1461066f576102d4565b8063364333f4146105215780633f4218e01461053857806345434032146105755780634ada218b1461059e578063571ac8b0146105c95780635b895c2914610606576102d4565b806318160ddd1161028657806318160ddd146103fd57806318abb6351461042857806323b872dd146104515780632b112e491461048e5780632f54bf6e146104b9578063313ce567146104f6576102d4565b806301f59d16146102d95780630445b6671461030457806306fdde031461032f578063095ea7b31461035a5780630bd11f8a146103975780630d295980146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610c01565b6040516102fb91906154ec565b60405180910390f35b34801561031057600080fd5b50610319610c07565b60405161032691906154ec565b60405180910390f35b34801561033b57600080fd5b50610344610c0d565b60405161035191906152ca565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190614aca565b610c4a565b60405161038e919061526b565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190614922565b610d3c565b6040516103cb919061526b565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614b6a565b610d5c565b005b34801561040957600080fd5b50610412610e70565b60405161041f91906154ec565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906149bc565b610e7a565b005b34801561045d57600080fd5b5061047860048036038101906104739190614a37565b6111a1565b604051610485919061526b565b60405180910390f35b34801561049a57600080fd5b506104a36113a1565b6040516104b091906154ec565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190614922565b611423565b6040516104ed919061526b565b60405180910390f35b34801561050257600080fd5b5061050b61147c565b60405161051891906155b4565b60405180910390f35b34801561052d57600080fd5b50610536611485565b005b34801561054457600080fd5b5061055f600480360381019061055a9190614922565b611516565b60405161056c919061526b565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614a8a565b611536565b005b3480156105aa57600080fd5b506105b3611612565b6040516105c0919061526b565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614922565b611625565b6040516105fd919061526b565b60405180910390f35b34801561061257600080fd5b5061061b611658565b005b34801561062957600080fd5b50610644600480360381019061063f9190614c04565b6116aa565b005b34801561065257600080fd5b5061066d60048036038101906106689190614c04565b61178b565b005b34801561067b57600080fd5b5061069660048036038101906106919190614a8a565b61186c565b005b3480156106a457600080fd5b506106ad611948565b6040516106ba91906154ec565b60405180910390f35b3480156106cf57600080fd5b506106d861194e565b6040516106e5919061526b565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190614922565b611961565b60405161072291906154ec565b60405180910390f35b34801561073757600080fd5b506107406119aa565b60405161074d91906154ec565b60405180910390f35b34801561076257600080fd5b5061076b6119b0565b60405161077891906150fd565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614922565b6119d9565b6040516107b5919061526b565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614aca565b6119f9565b6040516107f2919061526b565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190614b0a565b611ad8565b005b34801561083057600080fd5b5061084b60048036038101906108469190614c04565b611c44565b005b34801561085957600080fd5b50610862611d11565b60405161086f91906152ca565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190614a8a565b611d4e565b005b3480156108ad57600080fd5b506108b661210f565b6040516108c391906150fd565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190614c04565b612135565b005b34801561090157600080fd5b5061091c60048036038101906109179190614aca565b612201565b604051610929919061526b565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614922565b612216565b604051610966919061526b565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190614922565b612236565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190614c84565b6122d8565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190614a8a565b612427565b005b3480156109f657600080fd5b506109ff612503565b604051610a0c91906154ec565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a37919061497c565b612509565b604051610a4991906154ec565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190614bc4565b612590565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614c04565b612636565b604051610aaf91906150fd565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614922565b612675565b005b348015610aed57600080fd5b50610b086004803603810190610b03919061494f565b612718565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190614c84565b612831565b005b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614a8a565b612982565b005b348015610b6857600080fd5b50610b71612a5e565b604051610b7e91906152af565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba99190614922565b612a84565b604051610bbb919061526b565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614922565b612aa4565b604051610bf8919061526b565b60405180910390f35b601e5481565b60295481565b60606040518060400160405280600881526020017f24415254454d4953000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d2a91906154ec565b60405180910390a36001905092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610d6533612aa4565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906154ac565b60405180910390fd5b60001515602860149054906101000a900460ff16151514610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906153cc565b60405180910390fd5b80602860146101000a81548160ff02191690831515021790555043601181905550610e3060105443612afa90919063ffffffff16565b6012819055507f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df81604051610e65919061526b565b60405180910390a150565b6000600554905090565b610e8333612aa4565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906154ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610f2c5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015610f655750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610f9e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610fd75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906153ec565b60405180910390fd5b84602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e8585858585604051611192959493929190615133565b60405180910390a15050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461138d5761130c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b589092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611398848484612bbc565b90509392505050565b600061141e6113d1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611961565b6114106113ff600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611961565b6005546134e290919063ffffffff16565b6134e290919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61148e33612aa4565b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c4906154ac565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611513573d6000803e3d6000fd5b50565b600d6020528060005260406000206000915054906101000a900460ff1681565b61153f33612aa4565b61157e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611575906154ac565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda8282604051611606929190615186565b60405180910390a15050565b602860149054906101000a900460ff1681565b6000611651827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c4a565b9050919050565b61166133612aa4565b6116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906154ac565b60405180910390fd5b6116a861352c565b565b6116b333612aa4565b6116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906154ac565b60405180910390fd5b611709612710600554613bf690919063ffffffff16565b811161174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906152ec565b60405180910390fd5b806006819055507f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e8160405161178091906154ec565b60405180910390a150565b61179433612aa4565b6117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906154ac565b60405180910390fd5b6117ea612710600554613bf690919063ffffffff16565b811161182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906152ec565b60405180910390fd5b806007819055507fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b8160405161186191906154ec565b60405180910390a150565b61187533612aa4565b6118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab906154ac565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d828260405161193c929190615186565b60405180910390a15050565b60075481565b602860159054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000611a0433612aa4565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906154ac565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611a7e9291906151af565b602060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad09190614b97565b905092915050565b611ae133612aa4565b611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b17906154ac565b60405180910390fd5b60c88383905010611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d9061548c565b60405180910390fd5b60005b83839050811015611c035781600c6000868685818110611b8c57611b8b61593c565b5b9050602002016020810190611ba19190614922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611bfc90615866565b9050611b69565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611c3793929190615239565b60405180910390a1505050565b611c4d33612aa4565b611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906154ac565b60405180910390fd5b601e548110611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc79061540c565b60405180910390fd5b80601d819055507f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f481604051611d0691906154ec565b60405180910390a150565b60606040518060400160405280600881526020017f24415254454d4953000000000000000000000000000000000000000000000000815250905090565b611d5733612aa4565b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906154ac565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e209061536c565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611eee57600a829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120c5565b6001600a8054905011611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d906153ac565b60405180910390fd5b60005b600a805490508110156120c3578273ffffffffffffffffffffffffffffffffffffffff16600a8281548110611f7157611f7061593c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120b057600a6001600a80549050611fcc919061573e565b81548110611fdd57611fdc61593c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061201c5761201b61593c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a8054806120765761207561590d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556120c3565b80806120bb90615866565b915050611f39565b505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61213e33612aa4565b61217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906154ac565b60405180910390fd5b603281106121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b79061530c565b60405180910390fd5b806010819055507f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb816040516121f691906154ec565b60405180910390a150565b600061220e338484612bbc565b905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b61223f33611423565b61227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122759061546c565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122e133612aa4565b612320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612317906154ac565b60405180910390fd5b856018819055508460198190555083601a8190555082601b8190555081601c8190555061238c8261237e85612370886123628b8d612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b60208190555080602181905550601e5460205411156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061540c565b60405180910390fd5b7ffdd7c66a68b70fa92b44bc177e5154fe4ae8a19e8fc2920396a5ea2db9a783328686868686604051612417959493929190615561565b60405180910390a1505050505050565b61243033612aa4565b61246f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612466906154ac565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b82826040516124f7929190615186565b60405180910390a15050565b60115481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61259933612aa4565b6125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf906154ac565b60405180910390fd5b81602860156101000a81548160ff021916908315150217905550806029819055507fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd828260405161262a929190615286565b60405180910390a15050565b600a818154811061264657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61267e33611423565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b49061546c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61272133611423565b612760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127579061546c565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516128269190615118565b60405180910390a150565b61283a33612aa4565b612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906154ac565b60405180910390fd5b85601381905550846014819055508360158190555082601681905550816017819055506128e76017546128d9856128cb886128bd8b8d612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b601f8190555080602181905550601e54601f54111561293b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129329061540c565b60405180910390fd5b7f0ebc4c8adc990f93864d49e46d4543ac8e892fd73ba3ebe0b1794d0f6929f8168686868686604051612972959493929190615561565b60405180910390a1505050505050565b61298b33612aa4565b6129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906154ac565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f668282604051612a52929190615186565b60405180910390a15050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284612b09919061565d565b905083811015612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061538c565b60405180910390fd5b8091505092915050565b6000838311158290612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9791906152ca565b60405180910390fd5b5060008385612baf919061573e565b9050809150509392505050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906154cc565b60405180910390fd5b602a60009054906101000a900460ff1615612cc857612cc1848484613c40565b90506134db565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d6c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc157602860149054906101000a900460ff16612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db79061542c565b60405180910390fd5b5b612dc9613e13565b15612dd757612dd661352c565b5b6000829050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561301557600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301057600754612ed484600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b111580612f2a5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f609061534c565b60405180910390fd5b60065483111580612fc35750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff99061532c565b60405180910390fd5b61300d858585613ee6565b90505b613346565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561316357600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661315e57600654831115806131125750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061532c565b60405180910390fd5b61315b8584614305565b90505b613345565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133445760075461320984600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b11158061325f5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61329e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132959061534c565b60405180910390fd5b600654831115806132f85750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e9061532c565b60405180910390fd5b613341858461460d565b90505b5b5b61339883600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e290919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061342d81600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134cd91906154ec565b60405180910390a360019150505b9392505050565b600061352483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b58565b905092915050565b6001602a60006101000a81548160ff0219169083151502179055506000613560601854601354612afa90919063ffffffff16565b905060006135a3601c54613595601754613587602054601f54612afa90919063ffffffff16565b6134e290919063ffffffff16565b6134e290919063ffffffff16565b90506000600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613623600261361585613607888761477090919063ffffffff16565b613bf690919063ffffffff16565b613bf690919063ffffffff16565b9050600061363a82846134e290919063ffffffff16565b905060004790506000600267ffffffffffffffff81111561365e5761365d61596b565b5b60405190808252806020026020018201604052801561368c5781602001602082028036833780820191505090505b50905030816000815181106136a4576136a361593c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106137155761371461593c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b81526004016137b3959493929190615507565b600060405180830381600087803b1580156137cd57600080fd5b505af11580156137e1573d6000803e3d6000fd5b5050505060006137fa83476134e290919063ffffffff16565b9050600061382461381560028b613bf690919063ffffffff16565b896134e290919063ffffffff16565b9050600061387660026138688461385a61384b601854601354612afa90919063ffffffff16565b8861477090919063ffffffff16565b613bf690919063ffffffff16565b613bf690919063ffffffff16565b905060006138b5836138a7613898601954601454612afa90919063ffffffff16565b8761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006138f4846138e66138d7601a54601554612afa90919063ffffffff16565b8861477090919063ffffffff16565b613bf690919063ffffffff16565b9050600061393385613925613916601b54601654612afa90919063ffffffff16565b8961477090919063ffffffff16565b613bf690919063ffffffff16565b90506000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161397d906150e8565b60006040518083038185875af1925050503d80600081146139ba576040519150601f19603f3d011682016040523d82523d6000602084013e6139bf565b606091505b50509050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613a09906150e8565b60006040518083038185875af1925050503d8060008114613a46576040519150601f19603f3d011682016040523d82523d6000602084013e613a4b565b606091505b505080915050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a97906150e8565b60006040518083038185875af1925050503d8060008114613ad4576040519150601f19603f3d011682016040523d82523d6000602084013e613ad9565b606091505b5050809150506000905060008b1115613bcb57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b75969594939291906151d8565b6060604051808303818588803b158015613b8e57600080fd5b505af1158015613ba2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bc79190614c31565b5050505b50505050505050505050505050506000602a60006101000a81548160ff021916908315150217905550565b6000613c3883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147eb565b905092915050565b6000613ccb826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b589092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e0091906154ec565b60405180910390a3600190509392505050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e7c5750602a60009054906101000a900460ff16155b8015613e945750602860159054906101000a900460ff165b8015613ee15750602954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6000601254431015613ffd57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613f9e5750602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613ffc576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b600061403c60215461402e61401f601754601f546134e290919063ffffffff16565b8661477090919063ffffffff16565b613bf690919063ffffffff16565b9050600061406960215461405b6017548761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006140808284612afa90919063ffffffff16565b90506140d483600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161417491906154ec565b60405180910390a360008211156142e6576141f98260086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b60086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516142dd91906154ec565b60405180910390a35b6142f981866134e290919063ffffffff16565b93505050509392505050565b600080614345602154614337614328601c546020546134e290919063ffffffff16565b8661477090919063ffffffff16565b613bf690919063ffffffff16565b90506000614372602154614364601c548761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006143898284612afa90919063ffffffff16565b90506143dd83600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161447d91906154ec565b60405180910390a360008211156145ef576145028260086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b60086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516145e691906154ec565b60405180910390a35b61460281866134e290919063ffffffff16565b935050505092915050565b600080601d54905060125443101561462457606390505b600061464d60215461463f848761477090919063ffffffff16565b613bf690919063ffffffff16565b90506000811115614753576146aa81600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161474a91906154ec565b60405180910390a35b61476681856134e290919063ffffffff16565b9250505092915050565b60008083141561478357600090506147e5565b6000828461479191906156e4565b90508284826147a091906156b3565b146147e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147d79061544c565b60405180910390fd5b809150505b92915050565b60008083118290614832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161482991906152ca565b60405180910390fd5b506000838561484191906156b3565b9050809150509392505050565b60008135905061485d81615ca3565b92915050565b60008135905061487281615cba565b92915050565b60008083601f84011261488e5761488d61599f565b5b8235905067ffffffffffffffff8111156148ab576148aa61599a565b5b6020830191508360208202830111156148c7576148c66159a4565b5b9250929050565b6000813590506148dd81615cd1565b92915050565b6000815190506148f281615cd1565b92915050565b60008135905061490781615ce8565b92915050565b60008151905061491c81615ce8565b92915050565b600060208284031215614938576149376159ae565b5b60006149468482850161484e565b91505092915050565b600060208284031215614965576149646159ae565b5b600061497384828501614863565b91505092915050565b60008060408385031215614993576149926159ae565b5b60006149a18582860161484e565b92505060206149b28582860161484e565b9150509250929050565b600080600080600060a086880312156149d8576149d76159ae565b5b60006149e68882890161484e565b95505060206149f78882890161484e565b9450506040614a088882890161484e565b9350506060614a198882890161484e565b9250506080614a2a8882890161484e565b9150509295509295909350565b600080600060608486031215614a5057614a4f6159ae565b5b6000614a5e8682870161484e565b9350506020614a6f8682870161484e565b9250506040614a80868287016148f8565b9150509250925092565b60008060408385031215614aa157614aa06159ae565b5b6000614aaf8582860161484e565b9250506020614ac0858286016148ce565b9150509250929050565b60008060408385031215614ae157614ae06159ae565b5b6000614aef8582860161484e565b9250506020614b00858286016148f8565b9150509250929050565b600080600060408486031215614b2357614b226159ae565b5b600084013567ffffffffffffffff811115614b4157614b406159a9565b5b614b4d86828701614878565b93509350506020614b60868287016148ce565b9150509250925092565b600060208284031215614b8057614b7f6159ae565b5b6000614b8e848285016148ce565b91505092915050565b600060208284031215614bad57614bac6159ae565b5b6000614bbb848285016148e3565b91505092915050565b60008060408385031215614bdb57614bda6159ae565b5b6000614be9858286016148ce565b9250506020614bfa858286016148f8565b9150509250929050565b600060208284031215614c1a57614c196159ae565b5b6000614c28848285016148f8565b91505092915050565b600080600060608486031215614c4a57614c496159ae565b5b6000614c588682870161490d565b9350506020614c698682870161490d565b9250506040614c7a8682870161490d565b9150509250925092565b60008060008060008060c08789031215614ca157614ca06159ae565b5b6000614caf89828a016148f8565b9650506020614cc089828a016148f8565b9550506040614cd189828a016148f8565b9450506060614ce289828a016148f8565b9350506080614cf389828a016148f8565b92505060a0614d0489828a016148f8565b9150509295509295509295565b6000614d1d8383614d38565b60208301905092915050565b614d32816157d9565b82525050565b614d4181615772565b82525050565b614d5081615772565b82525050565b6000614d628385615619565b9350614d6d826155cf565b8060005b85811015614da657614d838284615646565b614d8d8882614d11565b9750614d98836155ff565b925050600181019050614d71565b5085925050509392505050565b6000614dbe826155e9565b614dc88185615619565b9350614dd3836155d9565b8060005b83811015614e04578151614deb8882614d11565b9750614df68361560c565b925050600181019050614dd7565b5085935050505092915050565b614e1a81615796565b82525050565b614e29816157eb565b82525050565b614e38816157fd565b82525050565b6000614e49826155f4565b614e538185615635565b9350614e63818560208601615833565b614e6c816159b3565b840191505092915050565b6000614e84601683615635565b9150614e8f826159c4565b602082019050919050565b6000614ea7601283615635565b9150614eb2826159ed565b602082019050919050565b6000614eca601183615635565b9150614ed582615a16565b602082019050919050565b6000614eed601f83615635565b9150614ef882615a3f565b602082019050919050565b6000614f10601183615635565b9150614f1b82615a68565b602082019050919050565b6000614f33601b83615635565b9150614f3e82615a91565b602082019050919050565b6000614f56600f83615635565b9150614f6182615aba565b602082019050919050565b6000614f79601283615635565b9150614f8482615ae3565b602082019050919050565b6000614f9c601783615635565b9150614fa782615b0c565b602082019050919050565b6000614fbf601e83615635565b9150614fca82615b35565b602082019050919050565b6000614fe2601483615635565b9150614fed82615b5e565b602082019050919050565b6000615005602183615635565b915061501082615b87565b604082019050919050565b6000615028600683615635565b915061503382615bd6565b602082019050919050565b600061504b60008361562a565b915061505682615bff565b600082019050919050565b600061506e602583615635565b915061507982615c02565b604082019050919050565b6000615091600b83615635565b915061509c82615c51565b602082019050919050565b60006150b4600b83615635565b91506150bf82615c7a565b602082019050919050565b6150d3816157c2565b82525050565b6150e2816157cc565b82525050565b60006150f38261503e565b9150819050919050565b60006020820190506151126000830184614d47565b92915050565b600060208201905061512d6000830184614d29565b92915050565b600060a0820190506151486000830188614d47565b6151556020830187614d47565b6151626040830186614d47565b61516f6060830185614d47565b61517c6080830184614d47565b9695505050505050565b600060408201905061519b6000830185614d47565b6151a86020830184614e11565b9392505050565b60006040820190506151c46000830185614d47565b6151d160208301846150ca565b9392505050565b600060c0820190506151ed6000830189614d47565b6151fa60208301886150ca565b6152076040830187614e2f565b6152146060830186614e2f565b6152216080830185614d47565b61522e60a08301846150ca565b979650505050505050565b60006040820190508181036000830152615254818587614d56565b90506152636020830184614e11565b949350505050565b60006020820190506152806000830184614e11565b92915050565b600060408201905061529b6000830185614e11565b6152a860208301846150ca565b9392505050565b60006020820190506152c46000830184614e20565b92915050565b600060208201905081810360008301526152e48184614e3e565b905092915050565b6000602082019050818103600083015261530581614e77565b9050919050565b6000602082019050818103600083015261532581614e9a565b9050919050565b6000602082019050818103600083015261534581614ebd565b9050919050565b6000602082019050818103600083015261536581614ee0565b9050919050565b6000602082019050818103600083015261538581614f03565b9050919050565b600060208201905081810360008301526153a581614f26565b9050919050565b600060208201905081810360008301526153c581614f49565b9050919050565b600060208201905081810360008301526153e581614f6c565b9050919050565b6000602082019050818103600083015261540581614f8f565b9050919050565b6000602082019050818103600083015261542581614fb2565b9050919050565b6000602082019050818103600083015261544581614fd5565b9050919050565b6000602082019050818103600083015261546581614ff8565b9050919050565b600060208201905081810360008301526154858161501b565b9050919050565b600060208201905081810360008301526154a581615061565b9050919050565b600060208201905081810360008301526154c581615084565b9050919050565b600060208201905081810360008301526154e5816150a7565b9050919050565b600060208201905061550160008301846150ca565b92915050565b600060a08201905061551c60008301886150ca565b6155296020830187614e2f565b818103604083015261553b8186614db3565b905061554a6060830185614d47565b61555760808301846150ca565b9695505050505050565b600060a08201905061557660008301886150ca565b61558360208301876150ca565b61559060408301866150ca565b61559d60608301856150ca565b6155aa60808301846150ca565b9695505050505050565b60006020820190506155c960008301846150d9565b92915050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615655602084018461484e565b905092915050565b6000615668826157c2565b9150615673836157c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156a8576156a76158af565b5b828201905092915050565b60006156be826157c2565b91506156c9836157c2565b9250826156d9576156d86158de565b5b828204905092915050565b60006156ef826157c2565b91506156fa836157c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615733576157326158af565b5b828202905092915050565b6000615749826157c2565b9150615754836157c2565b925082821015615767576157666158af565b5b828203905092915050565b600061577d826157a2565b9050919050565b600061578f826157a2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006157e48261580f565b9050919050565b60006157f68261580f565b9050919050565b6000615808826157c2565b9050919050565b600061581a82615821565b9050919050565b600061582c826157a2565b9050919050565b60005b83811015615851578082015181840152602081019050615836565b83811115615860576000848401525b50505050565b6000615871826157c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158a4576158a36158af565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e27742072657374726963742074726164696e6700000000000000000000600082015250565b7f43616e277420676f207468617420686967680000000000000000000000000000600082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4d61782057616c6c6574204c696d6974204c696d697420457863656564656400600082015250565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5265717569726564203120706169720000000000000000000000000000000000600082015250565b7f43616e27742073746f702074726164696e670000000000000000000000000000600082015250565b7f5a65726f20416464726573732076616c69646174696f6e000000000000000000600082015250565b7f466565732063616e6e6f7420626520686967686572207468616e203330250000600082015250565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f43616e27742075706461746520746f6f206d616e792077616c6c65747320617460008201527f206f6e6365000000000000000000000000000000000000000000000000000000602082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b615cac81615772565b8114615cb757600080fd5b50565b615cc381615784565b8114615cce57600080fd5b50565b615cda81615796565b8114615ce557600080fd5b50565b615cf1816157c2565b8114615cfc57600080fd5b5056fea26469706673582212202dca80865ccb5914cf811ee02dda6a1c99381a7004d8493c570fe5dd1617b72c64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063893d20e811610175578063ba876bb9116100dc578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610b33578063f887ea4014610b5c578063fe575a8714610b87578063fe9fbb8014610bc4576102d4565b8063f0b37c0414610ab8578063f2fde38b14610ae1578063f74c9f4714610b0a576102d4565b8063ba876bb914610998578063c04a78ad146109c1578063d00efb2f146109ea578063dd62ed3e14610a15578063df20fd4914610a52578063e1d5584c14610a7b576102d4565b80639a7a23d61161012e5780639a7a23d614610878578063a8aa1b31146108a1578063a8df7fb0146108cc578063a9059cbb146108f5578063b62496f514610932578063b6a5d7de1461096f576102d4565b8063893d20e8146107565780638b42507f146107815780638cd4426d146107be5780638e2eee84146107fb5780638f02bb5b1461082457806395d89b411461084d576102d4565b8063364333f4116102345780635c85974f116101ed5780636c0a24eb116101c75780636c0a24eb146106985780636ddd1713146106c357806370a08231146106ee5780637d1db4a51461072b576102d4565b80635c85974f1461061d5780635d0044ca14610646578063658d4b7f1461066f576102d4565b8063364333f4146105215780633f4218e01461053857806345434032146105755780634ada218b1461059e578063571ac8b0146105c95780635b895c2914610606576102d4565b806318160ddd1161028657806318160ddd146103fd57806318abb6351461042857806323b872dd146104515780632b112e491461048e5780632f54bf6e146104b9578063313ce567146104f6576102d4565b806301f59d16146102d95780630445b6671461030457806306fdde031461032f578063095ea7b31461035a5780630bd11f8a146103975780630d295980146103d4576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610c01565b6040516102fb91906154ec565b60405180910390f35b34801561031057600080fd5b50610319610c07565b60405161032691906154ec565b60405180910390f35b34801561033b57600080fd5b50610344610c0d565b60405161035191906152ca565b60405180910390f35b34801561036657600080fd5b50610381600480360381019061037c9190614aca565b610c4a565b60405161038e919061526b565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190614922565b610d3c565b6040516103cb919061526b565b60405180910390f35b3480156103e057600080fd5b506103fb60048036038101906103f69190614b6a565b610d5c565b005b34801561040957600080fd5b50610412610e70565b60405161041f91906154ec565b60405180910390f35b34801561043457600080fd5b5061044f600480360381019061044a91906149bc565b610e7a565b005b34801561045d57600080fd5b5061047860048036038101906104739190614a37565b6111a1565b604051610485919061526b565b60405180910390f35b34801561049a57600080fd5b506104a36113a1565b6040516104b091906154ec565b60405180910390f35b3480156104c557600080fd5b506104e060048036038101906104db9190614922565b611423565b6040516104ed919061526b565b60405180910390f35b34801561050257600080fd5b5061050b61147c565b60405161051891906155b4565b60405180910390f35b34801561052d57600080fd5b50610536611485565b005b34801561054457600080fd5b5061055f600480360381019061055a9190614922565b611516565b60405161056c919061526b565b60405180910390f35b34801561058157600080fd5b5061059c60048036038101906105979190614a8a565b611536565b005b3480156105aa57600080fd5b506105b3611612565b6040516105c0919061526b565b60405180910390f35b3480156105d557600080fd5b506105f060048036038101906105eb9190614922565b611625565b6040516105fd919061526b565b60405180910390f35b34801561061257600080fd5b5061061b611658565b005b34801561062957600080fd5b50610644600480360381019061063f9190614c04565b6116aa565b005b34801561065257600080fd5b5061066d60048036038101906106689190614c04565b61178b565b005b34801561067b57600080fd5b5061069660048036038101906106919190614a8a565b61186c565b005b3480156106a457600080fd5b506106ad611948565b6040516106ba91906154ec565b60405180910390f35b3480156106cf57600080fd5b506106d861194e565b6040516106e5919061526b565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190614922565b611961565b60405161072291906154ec565b60405180910390f35b34801561073757600080fd5b506107406119aa565b60405161074d91906154ec565b60405180910390f35b34801561076257600080fd5b5061076b6119b0565b60405161077891906150fd565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614922565b6119d9565b6040516107b5919061526b565b60405180910390f35b3480156107ca57600080fd5b506107e560048036038101906107e09190614aca565b6119f9565b6040516107f2919061526b565b60405180910390f35b34801561080757600080fd5b50610822600480360381019061081d9190614b0a565b611ad8565b005b34801561083057600080fd5b5061084b60048036038101906108469190614c04565b611c44565b005b34801561085957600080fd5b50610862611d11565b60405161086f91906152ca565b60405180910390f35b34801561088457600080fd5b5061089f600480360381019061089a9190614a8a565b611d4e565b005b3480156108ad57600080fd5b506108b661210f565b6040516108c391906150fd565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee9190614c04565b612135565b005b34801561090157600080fd5b5061091c60048036038101906109179190614aca565b612201565b604051610929919061526b565b60405180910390f35b34801561093e57600080fd5b5061095960048036038101906109549190614922565b612216565b604051610966919061526b565b60405180910390f35b34801561097b57600080fd5b5061099660048036038101906109919190614922565b612236565b005b3480156109a457600080fd5b506109bf60048036038101906109ba9190614c84565b6122d8565b005b3480156109cd57600080fd5b506109e860048036038101906109e39190614a8a565b612427565b005b3480156109f657600080fd5b506109ff612503565b604051610a0c91906154ec565b60405180910390f35b348015610a2157600080fd5b50610a3c6004803603810190610a37919061497c565b612509565b604051610a4991906154ec565b60405180910390f35b348015610a5e57600080fd5b50610a796004803603810190610a749190614bc4565b612590565b005b348015610a8757600080fd5b50610aa26004803603810190610a9d9190614c04565b612636565b604051610aaf91906150fd565b60405180910390f35b348015610ac457600080fd5b50610adf6004803603810190610ada9190614922565b612675565b005b348015610aed57600080fd5b50610b086004803603810190610b03919061494f565b612718565b005b348015610b1657600080fd5b50610b316004803603810190610b2c9190614c84565b612831565b005b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614a8a565b612982565b005b348015610b6857600080fd5b50610b71612a5e565b604051610b7e91906152af565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba99190614922565b612a84565b604051610bbb919061526b565b60405180910390f35b348015610bd057600080fd5b50610beb6004803603810190610be69190614922565b612aa4565b604051610bf8919061526b565b60405180910390f35b601e5481565b60295481565b60606040518060400160405280600881526020017f24415254454d4953000000000000000000000000000000000000000000000000815250905090565b600081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610d2a91906154ec565b60405180910390a36001905092915050565b600f6020528060005260406000206000915054906101000a900460ff1681565b610d6533612aa4565b610da4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9b906154ac565b60405180910390fd5b60001515602860149054906101000a900460ff16151514610dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df1906153cc565b60405180910390fd5b80602860146101000a81548160ff02191690831515021790555043601181905550610e3060105443612afa90919063ffffffff16565b6012819055507f316709d79ee7f0c74ca101f383d03c0651393c02be15433064ce7707ee82c9df81604051610e65919061526b565b60405180910390a150565b6000600554905090565b610e8333612aa4565b610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906154ac565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610f2c5750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015610f655750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015610f9e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015610fd75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b611016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100d906153ec565b60405180910390fd5b84602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcbc6e694f9cedabb09aeff1b1031513e7c8738cedf6395c1cd6d08760e28bc6e8585858585604051611192959493929190615133565b60405180910390a15050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541461138d5761130c826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b589092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b611398848484612bbc565b90509392505050565b600061141e6113d1600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611961565b6114106113ff600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611961565b6005546134e290919063ffffffff16565b6134e290919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61148e33612aa4565b6114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c4906154ac565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611513573d6000803e3d6000fd5b50565b600d6020528060005260406000206000915054906101000a900460ff1681565b61153f33612aa4565b61157e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611575906154ac565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ffa491a64c37cae03f614a1a2cac67ee30dd227958ca171908cf843cf9692fdda8282604051611606929190615186565b60405180910390a15050565b602860149054906101000a900460ff1681565b6000611651827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610c4a565b9050919050565b61166133612aa4565b6116a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611697906154ac565b60405180910390fd5b6116a861352c565b565b6116b333612aa4565b6116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e9906154ac565b60405180910390fd5b611709612710600554613bf690919063ffffffff16565b811161174a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611741906152ec565b60405180910390fd5b806006819055507f510e4637d257d903a794aca1c3cac80d12bf71d2409f8f975ff245c61845732e8160405161178091906154ec565b60405180910390a150565b61179433612aa4565b6117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906154ac565b60405180910390fd5b6117ea612710600554613bf690919063ffffffff16565b811161182b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611822906152ec565b60405180910390fd5b806007819055507fd3028a4dc8f3e7c2bbc9b4259751380fe21f44274195bcf63ebaaac4c17cbc8b8160405161186191906154ec565b60405180910390a150565b61187533612aa4565b6118b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ab906154ac565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2f640a0ab7e2a6d9ec57f3932923908568f2984073dcebac1b9a3db32debe91d828260405161193c929190615186565b60405180910390a15050565b60075481565b602860159054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000611a0433612aa4565b611a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3a906154ac565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611a7e9291906151af565b602060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad09190614b97565b905092915050565b611ae133612aa4565b611b20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b17906154ac565b60405180910390fd5b60c88383905010611b66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5d9061548c565b60405180910390fd5b60005b83839050811015611c035781600c6000868685818110611b8c57611b8b61593c565b5b9050602002016020810190611ba19190614922565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611bfc90615866565b9050611b69565b507f11d4d128e8f89ae2e8815168b9eba079dd6668b75f1e3a9dd96ac6192a7c4dcb838383604051611c3793929190615239565b60405180910390a1505050565b611c4d33612aa4565b611c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c83906154ac565b60405180910390fd5b601e548110611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc79061540c565b60405180910390fd5b80601d819055507f0496ed1e61eb69727f9659a8e859288db4758ffb1f744d1c1424634f90a257f481604051611d0691906154ec565b60405180910390a150565b60606040518060400160405280600881526020017f24415254454d4953000000000000000000000000000000000000000000000000815250905090565b611d5733612aa4565b611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906154ac565b60405180910390fd5b801515600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e209061536c565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611eee57600a829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506120c5565b6001600a8054905011611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d906153ac565b60405180910390fd5b60005b600a805490508110156120c3578273ffffffffffffffffffffffffffffffffffffffff16600a8281548110611f7157611f7061593c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120b057600a6001600a80549050611fcc919061573e565b81548110611fdd57611fdc61593c565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a828154811061201c5761201b61593c565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a8054806120765761207561590d565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556120c3565b80806120bb90615866565b915050611f39565b505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61213e33612aa4565b61217d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612174906154ac565b60405180910390fd5b603281106121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b79061530c565b60405180910390fd5b806010819055507f80838eb3341767dec8bc142ca41047631270a18952c3b835d5ca0d1c3608a2cb816040516121f691906154ec565b60405180910390a150565b600061220e338484612bbc565b905092915050565b600b6020528060005260406000206000915054906101000a900460ff1681565b61223f33611423565b61227e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122759061546c565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6122e133612aa4565b612320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612317906154ac565b60405180910390fd5b856018819055508460198190555083601a8190555082601b8190555081601c8190555061238c8261237e85612370886123628b8d612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b60208190555080602181905550601e5460205411156123e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d79061540c565b60405180910390fd5b7ffdd7c66a68b70fa92b44bc177e5154fe4ae8a19e8fc2920396a5ea2db9a783328686868686604051612417959493929190615561565b60405180910390a1505050505050565b61243033612aa4565b61246f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612466906154ac565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f6ed6ea20fcc829cc51f14b3190919b5563b8ffaec1eb69b4070c7a539f42f35b82826040516124f7929190615186565b60405180910390a15050565b60115481565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61259933612aa4565b6125d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cf906154ac565b60405180910390fd5b81602860156101000a81548160ff021916908315150217905550806029819055507fbb6a036f87bc4903f9d59c9f83a8733a8e8004a0a17b29bf1a817b4fe6bcf6bd828260405161262a929190615286565b60405180910390a15050565b600a818154811061264657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61267e33611423565b6126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b49061546c565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61272133611423565b612760576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127579061546c565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516128269190615118565b60405180910390a150565b61283a33612aa4565b612879576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612870906154ac565b60405180910390fd5b85601381905550846014819055508360158190555082601681905550816017819055506128e76017546128d9856128cb886128bd8b8d612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b612afa90919063ffffffff16565b601f8190555080602181905550601e54601f54111561293b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129329061540c565b60405180910390fd5b7f0ebc4c8adc990f93864d49e46d4543ac8e892fd73ba3ebe0b1794d0f6929f8168686868686604051612972959493929190615561565b60405180910390a1505050505050565b61298b33612aa4565b6129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c1906154ac565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f62ff8320fc089e815ec009a710ef61f8c650c1666630c8fc091aee0f66474f668282604051612a52929190615186565b60405180910390a15050565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000808284612b09919061565d565b905083811015612b4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b459061538c565b60405180910390fd5b8091505092915050565b6000838311158290612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b9791906152ca565b60405180910390fd5b5060008385612baf919061573e565b9050809150509392505050565b6000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612ca1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c98906154cc565b60405180910390fd5b602a60009054906101000a900460ff1615612cc857612cc1848484613c40565b90506134db565b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612d6c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc157602860149054906101000a900460ff16612dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db79061542c565b60405180910390fd5b5b612dc9613e13565b15612dd757612dd661352c565b5b6000829050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561301557600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301057600754612ed484600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b111580612f2a5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f609061534c565b60405180910390fd5b60065483111580612fc35750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613002576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff99061532c565b60405180910390fd5b61300d858585613ee6565b90505b613346565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561316357600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661315e57600654831115806131125750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613151576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131489061532c565b60405180910390fd5b61315b8584614305565b90505b613345565b600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166133445760075461320984600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b11158061325f5750600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61329e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132959061534c565b60405180910390fd5b600654831115806132f85750600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332e9061532c565b60405180910390fd5b613341858461460d565b90505b5b5b61339883600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134e290919063ffffffff16565b600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061342d81600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516134cd91906154ec565b60405180910390a360019150505b9392505050565b600061352483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612b58565b905092915050565b6001602a60006101000a81548160ff0219169083151502179055506000613560601854601354612afa90919063ffffffff16565b905060006135a3601c54613595601754613587602054601f54612afa90919063ffffffff16565b6134e290919063ffffffff16565b6134e290919063ffffffff16565b90506000600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613623600261361585613607888761477090919063ffffffff16565b613bf690919063ffffffff16565b613bf690919063ffffffff16565b9050600061363a82846134e290919063ffffffff16565b905060004790506000600267ffffffffffffffff81111561365e5761365d61596b565b5b60405190808252806020026020018201604052801561368c5781602001602082028036833780820191505090505b50905030816000815181106136a4576136a361593c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106137155761371461593c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008430426040518663ffffffff1660e01b81526004016137b3959493929190615507565b600060405180830381600087803b1580156137cd57600080fd5b505af11580156137e1573d6000803e3d6000fd5b5050505060006137fa83476134e290919063ffffffff16565b9050600061382461381560028b613bf690919063ffffffff16565b896134e290919063ffffffff16565b9050600061387660026138688461385a61384b601854601354612afa90919063ffffffff16565b8861477090919063ffffffff16565b613bf690919063ffffffff16565b613bf690919063ffffffff16565b905060006138b5836138a7613898601954601454612afa90919063ffffffff16565b8761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006138f4846138e66138d7601a54601554612afa90919063ffffffff16565b8861477090919063ffffffff16565b613bf690919063ffffffff16565b9050600061393385613925613916601b54601654612afa90919063ffffffff16565b8961477090919063ffffffff16565b613bf690919063ffffffff16565b90506000602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161397d906150e8565b60006040518083038185875af1925050503d80600081146139ba576040519150601f19603f3d011682016040523d82523d6000602084013e6139bf565b606091505b50509050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613a09906150e8565b60006040518083038185875af1925050503d8060008114613a46576040519150601f19603f3d011682016040523d82523d6000602084013e613a4b565b606091505b505080915050602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a97906150e8565b60006040518083038185875af1925050503d8060008114613ad4576040519150601f19603f3d011682016040523d82523d6000602084013e613ad9565b606091505b5050809150506000905060008b1115613bcb57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b75969594939291906151d8565b6060604051808303818588803b158015613b8e57600080fd5b505af1158015613ba2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bc79190614c31565b5050505b50505050505050505050505050506000602a60006101000a81548160ff021916908315150217905550565b6000613c3883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506147eb565b905092915050565b6000613ccb826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b589092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d6082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e0091906154ec565b60405180910390a3600190509392505050565b6000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e7c5750602a60009054906101000a900460ff16155b8015613e945750602860159054906101000a900460ff165b8015613ee15750602954600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6000601254431015613ffd57602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613f9e5750602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15613ffc576001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b600061403c60215461402e61401f601754601f546134e290919063ffffffff16565b8661477090919063ffffffff16565b613bf690919063ffffffff16565b9050600061406960215461405b6017548761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006140808284612afa90919063ffffffff16565b90506140d483600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161417491906154ec565b60405180910390a360008211156142e6576141f98260086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b60086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516142dd91906154ec565b60405180910390a35b6142f981866134e290919063ffffffff16565b93505050509392505050565b600080614345602154614337614328601c546020546134e290919063ffffffff16565b8661477090919063ffffffff16565b613bf690919063ffffffff16565b90506000614372602154614364601c548761477090919063ffffffff16565b613bf690919063ffffffff16565b905060006143898284612afa90919063ffffffff16565b90506143dd83600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161447d91906154ec565b60405180910390a360008211156145ef576145028260086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b60086000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516145e691906154ec565b60405180910390a35b61460281866134e290919063ffffffff16565b935050505092915050565b600080601d54905060125443101561462457606390505b600061464d60215461463f848761477090919063ffffffff16565b613bf690919063ffffffff16565b90506000811115614753576146aa81600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612afa90919063ffffffff16565b600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161474a91906154ec565b60405180910390a35b61476681856134e290919063ffffffff16565b9250505092915050565b60008083141561478357600090506147e5565b6000828461479191906156e4565b90508284826147a091906156b3565b146147e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016147d79061544c565b60405180910390fd5b809150505b92915050565b60008083118290614832576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161482991906152ca565b60405180910390fd5b506000838561484191906156b3565b9050809150509392505050565b60008135905061485d81615ca3565b92915050565b60008135905061487281615cba565b92915050565b60008083601f84011261488e5761488d61599f565b5b8235905067ffffffffffffffff8111156148ab576148aa61599a565b5b6020830191508360208202830111156148c7576148c66159a4565b5b9250929050565b6000813590506148dd81615cd1565b92915050565b6000815190506148f281615cd1565b92915050565b60008135905061490781615ce8565b92915050565b60008151905061491c81615ce8565b92915050565b600060208284031215614938576149376159ae565b5b60006149468482850161484e565b91505092915050565b600060208284031215614965576149646159ae565b5b600061497384828501614863565b91505092915050565b60008060408385031215614993576149926159ae565b5b60006149a18582860161484e565b92505060206149b28582860161484e565b9150509250929050565b600080600080600060a086880312156149d8576149d76159ae565b5b60006149e68882890161484e565b95505060206149f78882890161484e565b9450506040614a088882890161484e565b9350506060614a198882890161484e565b9250506080614a2a8882890161484e565b9150509295509295909350565b600080600060608486031215614a5057614a4f6159ae565b5b6000614a5e8682870161484e565b9350506020614a6f8682870161484e565b9250506040614a80868287016148f8565b9150509250925092565b60008060408385031215614aa157614aa06159ae565b5b6000614aaf8582860161484e565b9250506020614ac0858286016148ce565b9150509250929050565b60008060408385031215614ae157614ae06159ae565b5b6000614aef8582860161484e565b9250506020614b00858286016148f8565b9150509250929050565b600080600060408486031215614b2357614b226159ae565b5b600084013567ffffffffffffffff811115614b4157614b406159a9565b5b614b4d86828701614878565b93509350506020614b60868287016148ce565b9150509250925092565b600060208284031215614b8057614b7f6159ae565b5b6000614b8e848285016148ce565b91505092915050565b600060208284031215614bad57614bac6159ae565b5b6000614bbb848285016148e3565b91505092915050565b60008060408385031215614bdb57614bda6159ae565b5b6000614be9858286016148ce565b9250506020614bfa858286016148f8565b9150509250929050565b600060208284031215614c1a57614c196159ae565b5b6000614c28848285016148f8565b91505092915050565b600080600060608486031215614c4a57614c496159ae565b5b6000614c588682870161490d565b9350506020614c698682870161490d565b9250506040614c7a8682870161490d565b9150509250925092565b60008060008060008060c08789031215614ca157614ca06159ae565b5b6000614caf89828a016148f8565b9650506020614cc089828a016148f8565b9550506040614cd189828a016148f8565b9450506060614ce289828a016148f8565b9350506080614cf389828a016148f8565b92505060a0614d0489828a016148f8565b9150509295509295509295565b6000614d1d8383614d38565b60208301905092915050565b614d32816157d9565b82525050565b614d4181615772565b82525050565b614d5081615772565b82525050565b6000614d628385615619565b9350614d6d826155cf565b8060005b85811015614da657614d838284615646565b614d8d8882614d11565b9750614d98836155ff565b925050600181019050614d71565b5085925050509392505050565b6000614dbe826155e9565b614dc88185615619565b9350614dd3836155d9565b8060005b83811015614e04578151614deb8882614d11565b9750614df68361560c565b925050600181019050614dd7565b5085935050505092915050565b614e1a81615796565b82525050565b614e29816157eb565b82525050565b614e38816157fd565b82525050565b6000614e49826155f4565b614e538185615635565b9350614e63818560208601615833565b614e6c816159b3565b840191505092915050565b6000614e84601683615635565b9150614e8f826159c4565b602082019050919050565b6000614ea7601283615635565b9150614eb2826159ed565b602082019050919050565b6000614eca601183615635565b9150614ed582615a16565b602082019050919050565b6000614eed601f83615635565b9150614ef882615a3f565b602082019050919050565b6000614f10601183615635565b9150614f1b82615a68565b602082019050919050565b6000614f33601b83615635565b9150614f3e82615a91565b602082019050919050565b6000614f56600f83615635565b9150614f6182615aba565b602082019050919050565b6000614f79601283615635565b9150614f8482615ae3565b602082019050919050565b6000614f9c601783615635565b9150614fa782615b0c565b602082019050919050565b6000614fbf601e83615635565b9150614fca82615b35565b602082019050919050565b6000614fe2601483615635565b9150614fed82615b5e565b602082019050919050565b6000615005602183615635565b915061501082615b87565b604082019050919050565b6000615028600683615635565b915061503382615bd6565b602082019050919050565b600061504b60008361562a565b915061505682615bff565b600082019050919050565b600061506e602583615635565b915061507982615c02565b604082019050919050565b6000615091600b83615635565b915061509c82615c51565b602082019050919050565b60006150b4600b83615635565b91506150bf82615c7a565b602082019050919050565b6150d3816157c2565b82525050565b6150e2816157cc565b82525050565b60006150f38261503e565b9150819050919050565b60006020820190506151126000830184614d47565b92915050565b600060208201905061512d6000830184614d29565b92915050565b600060a0820190506151486000830188614d47565b6151556020830187614d47565b6151626040830186614d47565b61516f6060830185614d47565b61517c6080830184614d47565b9695505050505050565b600060408201905061519b6000830185614d47565b6151a86020830184614e11565b9392505050565b60006040820190506151c46000830185614d47565b6151d160208301846150ca565b9392505050565b600060c0820190506151ed6000830189614d47565b6151fa60208301886150ca565b6152076040830187614e2f565b6152146060830186614e2f565b6152216080830185614d47565b61522e60a08301846150ca565b979650505050505050565b60006040820190508181036000830152615254818587614d56565b90506152636020830184614e11565b949350505050565b60006020820190506152806000830184614e11565b92915050565b600060408201905061529b6000830185614e11565b6152a860208301846150ca565b9392505050565b60006020820190506152c46000830184614e20565b92915050565b600060208201905081810360008301526152e48184614e3e565b905092915050565b6000602082019050818103600083015261530581614e77565b9050919050565b6000602082019050818103600083015261532581614e9a565b9050919050565b6000602082019050818103600083015261534581614ebd565b9050919050565b6000602082019050818103600083015261536581614ee0565b9050919050565b6000602082019050818103600083015261538581614f03565b9050919050565b600060208201905081810360008301526153a581614f26565b9050919050565b600060208201905081810360008301526153c581614f49565b9050919050565b600060208201905081810360008301526153e581614f6c565b9050919050565b6000602082019050818103600083015261540581614f8f565b9050919050565b6000602082019050818103600083015261542581614fb2565b9050919050565b6000602082019050818103600083015261544581614fd5565b9050919050565b6000602082019050818103600083015261546581614ff8565b9050919050565b600060208201905081810360008301526154858161501b565b9050919050565b600060208201905081810360008301526154a581615061565b9050919050565b600060208201905081810360008301526154c581615084565b9050919050565b600060208201905081810360008301526154e5816150a7565b9050919050565b600060208201905061550160008301846150ca565b92915050565b600060a08201905061551c60008301886150ca565b6155296020830187614e2f565b818103604083015261553b8186614db3565b905061554a6060830185614d47565b61555760808301846150ca565b9695505050505050565b600060a08201905061557660008301886150ca565b61558360208301876150ca565b61559060408301866150ca565b61559d60608301856150ca565b6155aa60808301846150ca565b9695505050505050565b60006020820190506155c960008301846150d9565b92915050565b6000819050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000615655602084018461484e565b905092915050565b6000615668826157c2565b9150615673836157c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156156a8576156a76158af565b5b828201905092915050565b60006156be826157c2565b91506156c9836157c2565b9250826156d9576156d86158de565b5b828204905092915050565b60006156ef826157c2565b91506156fa836157c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615733576157326158af565b5b828202905092915050565b6000615749826157c2565b9150615754836157c2565b925082821015615767576157666158af565b5b828203905092915050565b600061577d826157a2565b9050919050565b600061578f826157a2565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006157e48261580f565b9050919050565b60006157f68261580f565b9050919050565b6000615808826157c2565b9050919050565b600061581a82615821565b9050919050565b600061582c826157a2565b9050919050565b60005b83811015615851578082015181840152602081019050615836565b83811115615860576000848401525b50505050565b6000615871826157c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156158a4576158a36158af565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f43616e27742072657374726963742074726164696e6700000000000000000000600082015250565b7f43616e277420676f207468617420686967680000000000000000000000000000600082015250565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f4d61782057616c6c6574204c696d6974204c696d697420457863656564656400600082015250565b7f56616c756520616c726561647920736574000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f5265717569726564203120706169720000000000000000000000000000000000600082015250565b7f43616e27742073746f702074726164696e670000000000000000000000000000600082015250565b7f5a65726f20416464726573732076616c69646174696f6e000000000000000000600082015250565b7f466565732063616e6e6f7420626520686967686572207468616e203330250000600082015250565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f43616e27742075706461746520746f6f206d616e792077616c6c65747320617460008201527f206f6e6365000000000000000000000000000000000000000000000000000000602082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b615cac81615772565b8114615cb757600080fd5b50565b615cc381615784565b8114615cce57600080fd5b50565b615cda81615796565b8114615ce557600080fd5b50565b615cf1816157c2565b8114615cfc57600080fd5b5056fea26469706673582212202dca80865ccb5914cf811ee02dda6a1c99381a7004d8493c570fe5dd1617b72c64736f6c63430008070033

Deployed Bytecode Sourcemap

5132:19383:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8123:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9035:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10300:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10722:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7458:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16709:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10030:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22405:840;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11240:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24368:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3140:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10124:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16383:119;;;;;;;;;;;;;:::i;:::-;;7352:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19879:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8957:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10946:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24281:75;;;;;;;;;;;;;:::i;:::-;;19071:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19291:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20266:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6992:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8998:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10470:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6927:58;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10386:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7403:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16510:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19521:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22159:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10210:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23469:802;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8929:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20067:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11076:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7228:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2933:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21477:674;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20626:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7569:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10581:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23253:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7192:29;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3035:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3366:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20818:651;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20440:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8898:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7297:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8123:27;;;;:::o;9035:53::-;;;;:::o;10300:80::-;10348:13;10372:5;;;;;;;;;;;;;;;;;10365:12;;10300:80;:::o;10722:216::-;10797:4;10849:6;10814:11;:23;10826:10;10814:23;;;;;;;;;;;;;;;:32;10838:7;10814:32;;;;;;;;;;;;;;;:41;;;;10892:7;10871:37;;10880:10;10871:37;;;10901:6;10871:37;;;;;;:::i;:::-;;;;;;;;10926:4;10919:11;;10722:216;;;;:::o;7458:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;16709:311::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16799:5:::1;16781:23;;:14;;;;;;;;;;;:23;;;16773:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;16855:7;16838:14;;:24;;;;;;;;;;;;;;;;;;16887:12;16873:11;:26;;;;16930:28;16947:10;;16930:12;:16;;:28;;;;:::i;:::-;16910:17;:48;;;;16976:36;17004:7;16976:36;;;;;;:::i;:::-;;;;;;;;16709:311:::0;:::o;10030:88::-;10085:7;10103:12;;10096:19;;10030:88;:::o;22405:840::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22651:1:::1;22617:36;;:22;:36;;;;:75;;;;;22690:1;22657:35;;:21;:35;;;;22617:75;:115;;;;;22730:1;22696:36;;:22;:36;;;;22617:115;:148;;;;;22763:1;22736:29;;:15;:29;;;;22617:148;:185;;;;;22800:1;22769:33;;:19;:33;;;;22617:185;22609:222;;;;;;;;;;;;:::i;:::-;;;;;;;;;22866:22;22842:21;;:46;;;;;;;;;;;;;;;;;;22922:21;22899:20;;:44;;;;;;;;;;;;;;;;;;22978:22;22954:21;;:46;;;;;;;;;;;;;;;;;;23028:15;23011:14;;:32;;;;;;;;;;;;;;;;;;23075:19;23054:18;;:40;;;;;;;;;;;;;;;;;;23113:124;23129:22;23153:21;23176:22;23200:15;23217:19;23113:124;;;;;;;;;;:::i;:::-;;;;;;;;22405:840:::0;;;;;:::o;11240:370::-;11340:4;11395:17;11360:11;:19;11372:6;11360:19;;;;;;;;;;;;;;;:31;11380:10;11360:31;;;;;;;;;;;;;;;;:52;11357:186;;11462:69;11498:6;11462:69;;;;;;;;;;;;;;;;;:11;:19;11474:6;11462:19;;;;;;;;;;;;;;;:31;11482:10;11462:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;11428:11;:19;11440:6;11428:19;;;;;;;;;;;;;;;:31;11448:10;11428:31;;;;;;;;;;;;;;;:103;;;;11357:186;11562:40;11576:6;11584:9;11595:6;11562:13;:40::i;:::-;11555:47;;11240:370;;;;;:::o;24368:142::-;24421:7;24448:54;24486:15;24496:4;;;;;;;;;;;24486:9;:15::i;:::-;24448:33;24465:15;24475:4;;;;;;;;;;;24465:9;:15::i;:::-;24448:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;24441:61;;24368:142;:::o;3140:103::-;3195:4;3230:5;;;;;;;;;;;3219:16;;:7;:16;;;3212:23;;3140:103;;;:::o;10124:80::-;10176:5;6854:2;10185:16;;10124:80;:::o;16383:119::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16451:10:::1;16443:28;;:51;16472:21;16443:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;16383:119::o:0;7352:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;19879:180::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19981:5:::1;19955:13;:23;19969:8;19955:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20012:39;20035:8;20045:5;20012:39;;;;;;;:::i;:::-;;;;;;;;19879:180:::0;;:::o;8957:34::-;;;;;;;;;;;;;:::o;10946:122::-;11001:4;11025:35;11033:7;11042:17;11025:7;:35::i;:::-;11018:42;;10946:122;;;:::o;24281:75::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24338:10:::1;:8;:10::i;:::-;24281:75::o:0;19071:212::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19155:23:::1;19172:5;19155:12;;:16;;:23;;;;:::i;:::-;19146:6;:32;19138:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19231:6;19216:12;:21;;;;19255:20;19268:6;19255:20;;;;;;:::i;:::-;;;;;;;;19071:212:::0;:::o;19291:222::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19377:23:::1;19394:5;19377:12;;:16;;:23;;;;:::i;:::-;19368:6;:32;19360:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19457:6;19438:16;:25;;;;19481:24;19498:6;19481:24;;;;;;:::i;:::-;;;;;;;;19291:222:::0;:::o;20266:166::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20372:6:::1;20350:11;:19;20362:6;20350:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;20396;20409:6;20417;20396:28;;;;;;;:::i;:::-;;;;;;;;20266:166:::0;;:::o;6992:60::-;;;;:::o;8998:30::-;;;;;;;;;;;;;:::o;10470:105::-;10536:7;10554:9;:18;10564:7;10554:18;;;;;;;;;;;;;;;;10547:25;;10470:105;;;:::o;6927:58::-;;;;:::o;10386:78::-;10438:7;10456:5;;;;;;;;;;;10449:12;;10386:78;:::o;7403:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;16510:168::-;16598:4;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16628:12:::1;16622:28;;;16651:10;16663:6;16622:48;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16615:55;;16510:168:::0;;;;:::o;19521:350::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19649:3:::1;19630:9;;:16;;:22;19621:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;19710:9;19705:106;19725:9;;:16;;19721:1;:20;19705:106;;;19793:6;19763:13;:27;19777:9;;19787:1;19777:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19763:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;19743:3;;;;:::i;:::-;;;19705:106;;;;19828:35;19845:9;;19856:6;19828:35;;;;;;;;:::i;:::-;;;;;;;;19521:350:::0;;;:::o;22159:236::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22259:6:::1;;22244:12;:21;22236:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22325:12;22311:11;:26;;;;22355:32;22374:12;22355:32;;;;;;:::i;:::-;;;;;;;;22159:236:::0;:::o;10210:84::-;10260:13;10284:7;;;;;;;;;;;;;;;;;10277:14;;10210:84;:::o;23469:802::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23611:6:::1;23575:42;;:25;:32;23601:5;23575:32;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;23567:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;23691:6;23656:25;:32;23682:5;23656:32;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;23717:6;23714:482;;;23743:12;23761:5;23743:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23714:482;;;23836:1;23814:12;:19;;;;:23;23806:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;23881:9;23876:305;23900:12;:19;;;;23896:1;:23;23876:305;;;23972:5;23953:24;;:12;23966:1;23953:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;23949:213;;;24024:12;24059:1;24037:12;:19;;;;:23;;;;:::i;:::-;24024:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24006:12;24019:1;24006:15;;;;;;;;:::i;:::-;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;24088:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24133:5;;23949:213;23921:3;;;;;:::i;:::-;;;;23876:305;;;;23714:482;24252:6;24217:42;;24245:5;24217:42;;;;;;;;;;;;23469:802:::0;;:::o;8929:19::-;;;;;;;;;;;;;:::o;20067:191::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20151:2:::1;20141:7;:12;20133:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;20200:7;20187:10;:20;;;;20233:17;20242:7;20233:17;;;;;;:::i;:::-;;;;;;;;20067:191:::0;:::o;11076:156::-;11156:4;11180:44;11194:10;11206:9;11217:6;11180:13;:44::i;:::-;11173:51;;11076:156;;;;:::o;7228:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;2933:94::-;2784:19;2792:10;2784:7;:19::i;:::-;2776:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3015:4:::1;2993:14:::0;:19:::1;3008:3;2993:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;2933:94:::0;:::o;21477:674::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21673:13:::1;21654:16;:32;;;;21716:13;21697:16;:32;;;;21753:7;21740:10;:20;;;;21784:7;21771:10;:20;;;;21819:11;21802:14;:28;;;;21856:75;21919:11;21856:58;21906:7;21856:45;21893:7;21856:32;21874:13;21856;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:49;;:58;;;;:::i;:::-;:62;;:75;;;;:::i;:::-;21841:12;:90;;;;21959:15;21942:14;:32;;;;22009:6;;21993:12;;:22;;21985:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22068:75;22084:13;22099;22113:7;22122;22131:11;22068:75;;;;;;;;;;:::i;:::-;;;;;;;;21477:674:::0;;;;;;:::o;20626:184::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20744:6:::1;20716:17;:25;20734:6;20716:25;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20768;20787:6;20795;20768:34;;;;;;;:::i;:::-;;;;;;;;20626:184:::0;;:::o;7569:26::-;;;;:::o;10581:133::-;10665:7;10683:11;:19;10695:6;10683:19;;;;;;;;;;;;;;;:28;10703:7;10683:28;;;;;;;;;;;;;;;;10676:35;;10581:133;;;;:::o;23253:208::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23359:8:::1;23345:11;;:22;;;;;;;;;;;;;;;;;;23394:7;23378:13;:23;;;;23419:34;23435:8;23445:7;23419:34;;;;;;;:::i;:::-;;;;;;;;23253:208:::0;;:::o;7192:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3035:97::-;2784:19;2792:10;2784:7;:19::i;:::-;2776:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3119:5:::1;3097:14;:19;3112:3;3097:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3035:97:::0;:::o;3366:173::-;2784:19;2792:10;2784:7;:19::i;:::-;2776:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3450:3:::1;3442:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3486:4;3464:14:::0;:19:::1;3479:3;3464:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3506:25;3527:3;3506:25;;;;;;:::i;:::-;;;;;;;;3366:173:::0;:::o;20818:651::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21010:13:::1;20995:12;:28;;;;21049:13;21034:12;:28;;;;21082:7;21073:6;:16;;;;21109:7;21100:6;:16;;;;21140:11;21127:10;:24;;;;21177:74;21240:10;;21177:58;21227:7;21177:45;21214:7;21177:32;21195:13;21177;:17;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;:49;;:58;;;;:::i;:::-;:62;;:74;;;;:::i;:::-;21163:11;:88;;;;21279:15;21262:14;:32;;;;21328:6;;21313:11;;:21;;21305:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21387:74;21402:13;21417;21431:7;21440;21449:11;21387:74;;;;;;;;;;:::i;:::-;;;;;;;;20818:651:::0;;;;;;:::o;20440:178::-;2874:24;2887:10;2874:12;:24::i;:::-;2866:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20554:6:::1;20528:15;:23;20544:6;20528:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20578;20595:6;20603;20578:32;;;;;;;:::i;:::-;;;;;;;;20440:178:::0;;:::o;8898:24::-;;;;;;;;;;;;;:::o;7297:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;3251:107::-;3307:4;3331:14;:19;3346:3;3331:19;;;;;;;;;;;;;;;;;;;;;;;;;3324:26;;3251:107;;;:::o;488:181::-;546:7;566:9;582:1;578;:5;;;;:::i;:::-;566:17;;607:1;602;:6;;594:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;660:1;653:8;;;488:181;;;;:::o;817:192::-;903:7;936:1;931;:6;;939:12;923:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;963:9;979:1;975;:5;;;;:::i;:::-;963:17;;1000:1;993:8;;;817:192;;;;;:::o;11618:1849::-;11710:4;11736:13;:21;11750:6;11736:21;;;;;;;;;;;;;;;;;;;;;;;;;11735:22;:51;;;;;11762:13;:24;11776:9;11762:24;;;;;;;;;;;;;;;;;;;;;;;;;11761:25;11735:51;11727:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11815:6;;;;;;;;;;;11812:63;;;11831:41;11846:6;11854:9;11865:6;11831:14;:41::i;:::-;11824:48;;;;11812:63;11891:11;:19;11903:6;11891:19;;;;;;;;;;;;;;;;;;;;;;;;;11890:20;:47;;;;;11915:11;:22;11927:9;11915:22;;;;;;;;;;;;;;;;;;;;;;;;;11914:23;11890:47;11887:124;;;11961:14;;;;;;;;;;;11953:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11887:124;12026:16;:14;:16::i;:::-;12023:35;;;12045:10;:8;:10::i;:::-;12023:35;12072:22;12097:6;12072:31;;12120:25;:33;12146:6;12120:33;;;;;;;;;;;;;;;;;;;;;;;;;12117:1114;;;12180:11;:22;12192:9;12180:22;;;;;;;;;;;;;;;;;;;;;;;;;12176:365;;12267:16;;12231:32;12256:6;12231:9;:20;12241:9;12231:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:52;;:84;;;;12287:17;:28;12305:9;12287:28;;;;;;;;;;;;;;;;;;;;;;;;;12231:84;12223:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;12388:12;;12378:6;:22;;:52;;;;12404:15;:26;12420:9;12404:26;;;;;;;;;;;;;;;;;;;;;;;;;12378:52;12370:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;12488:37;12499:6;12507:9;12518:6;12488:10;:37::i;:::-;12471:54;;12176:365;12117:1114;;;12563:25;:36;12589:9;12563:36;;;;;;;;;;;;;;;;;;;;;;;;;12560:671;;;12627:11;:19;12639:6;12627:19;;;;;;;;;;;;;;;;;;;;;;;;;12623:204;;12685:12;;12675:6;:22;;:49;;;;12701:15;:23;12717:6;12701:23;;;;;;;;;;;;;;;;;;;;;;;;;12675:49;12667:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12782:27;12794:6;12802;12782:11;:27::i;:::-;12765:44;;12623:204;12560:671;;;12868:11;:19;12880:6;12868:19;;;;;;;;;;;;;;;;;;;;;;;;;12863:357;;12953:16;;12917:32;12942:6;12917:9;:20;12927:9;12917:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:52;;:84;;;;12973:17;:28;12991:9;12973:28;;;;;;;;;;;;;;;;;;;;;;;;;12917:84;12909:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;13074:12;;13064:6;:22;;:49;;;;13090:15;:23;13106:6;13090:23;;;;;;;;;;;;;;;;;;;;;;;;;13064:49;13056:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;13171:31;13187:6;13195;13171:15;:31::i;:::-;13154:48;;12863:357;12560:671;12117:1114;13263:29;13285:6;13263:9;:17;13273:6;13263:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;13243:9;:17;13253:6;13243:17;;;;;;;;;;;;;;;:49;;;;13326:40;13351:14;13326:9;:20;13336:9;13326:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;13303:9;:20;13313:9;13303:20;;;;;;;;;;;;;;;:63;;;;13411:9;13394:43;;13403:6;13394:43;;;13422:14;13394:43;;;;;;:::i;:::-;;;;;;;;13455:4;13448:11;;;11618:1849;;;;;;:::o;675:136::-;733:7;760:43;764:1;767;760:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;753:50;;675:136;;;;:::o;17028:2009::-;9154:4;9145:6;;:13;;;;;;;;;;;;;;;;;;17077:24:::1;17104:34;17121:16;;17104:12;;:16;;:34;;;;:::i;:::-;17077:61;;17149:20;17171:65;17221:14;;17171:45;17205:10;;17171:29;17187:12;;17171:11;;:15;;:29;;;;:::i;:::-;:33;;:45;;;;:::i;:::-;:49;;:65;;;;:::i;:::-;17149:87;;17249:28;17280:9;:24;17298:4;17280:24;;;;;;;;;;;;;;;;17249:55;;17315:23;17341:67;17406:1;17341:60;17388:12;17341:42;17366:16;17341:20;:24;;:42;;;;:::i;:::-;:46;;:60;;;;:::i;:::-;:64;;:67;;;;:::i;:::-;17315:93;;17419:20;17442:41;17467:15;17442:20;:24;;:41;;;;:::i;:::-;17419:64;;17496:21;17520;17496:45;;17554:21;17592:1;17578:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17554:40;;17623:4;17605;17610:1;17605:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;17649:4;;;;;;;;;;;17639;17644:1;17639:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;17666:6;;;;;;;;;;;:57;;;17738:12;17765:1;17781:4;17808;17828:15;17666:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17867:17;17887:40;17913:13;17887:21;:25;;:40;;;;:::i;:::-;17867:60;;17940:19;17962:41;17979:23;18000:1;17979:16;:20;;:23;;;;:::i;:::-;17962:12;:16;;:41;;;;:::i;:::-;17940:63;;18024:26;18053:73;18124:1;18053:66;18107:11;18053:49;18067:34;18084:16;;18067:12;;:16;;:34;;;;:::i;:::-;18053:9;:13;;:49;;;;:::i;:::-;:53;;:66;;;;:::i;:::-;:70;;:73;;;;:::i;:::-;18024:102;;18137:26;18166:66;18220:11;18166:49;18180:34;18197:16;;18180:12;;:16;;:34;;;;:::i;:::-;18166:9;:13;;:49;;;;:::i;:::-;:53;;:66;;;;:::i;:::-;18137:95;;18243:20;18266:54;18308:11;18266:37;18280:22;18291:10;;18280:6;;:10;;:22;;;;:::i;:::-;18266:9;:13;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;18243:77;;18331:20;18354:54;18396:11;18354:37;18368:22;18379:10;;18368:6;;:10;;:22;;;;:::i;:::-;18354:9;:13;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;18331:77;;18422:15;18450:20;;;;;;;;;;;18442:34;;18484:18;18442:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18421:86;;;18542:21;;;;;;;;;;;18534:35;;18577:12;18534:60;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18518:76;;;;;18629:14;;;;;;;;;;;18621:28;;18657:12;18621:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18605:69;;;;;18708:5;18695:18;;18747:1;18729:15;:19;18726:294;;;18764:6;;;;;;;;;;;:22;;;18794:18;18840:4;18864:15;18898:1;18918::::0;18938:21:::1;;;;;;;;;;;18978:15;18764:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18726:294;17066:1971;;;;;;;;;;;;;;9172:5:::0;9163:6;;:14;;;;;;;;;;;;;;;;;;17028:2009::o;1271:132::-;1329:7;1356:39;1360:1;1363;1356:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1349:46;;1271:132;;;;:::o;13479:330::-;13572:4;13609:53;13631:6;13609:53;;;;;;;;;;;;;;;;;:9;:17;13619:6;13609:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;13589:9;:17;13599:6;13589:17;;;;;;;;;;;;;;;:73;;;;13696:32;13721:6;13696:9;:20;13706:9;13696:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13673:9;:20;13683:9;13673:20;;;;;;;;;;;;;;;:55;;;;13761:9;13744:35;;13753:6;13744:35;;;13772:6;13744:35;;;;;;:::i;:::-;;;;;;;;13797:4;13790:11;;13479:330;;;;;:::o;16149:226::-;16198:4;16232:25;:37;16258:10;16232:37;;;;;;;;;;;;;;;;;;;;;;;;;16231:38;:58;;;;;16283:6;;;;;;;;;;;16282:7;16231:58;:82;;;;;16302:11;;;;;;;;;;;16231:82;:136;;;;;16354:13;;16326:9;:24;16344:4;16326:24;;;;;;;;;;;;;;;;:41;;16231:136;16215:152;;16149:226;:::o;13830:970::-;13919:7;13972:17;;13957:12;:32;13953:189;;;14023:4;;;;;;;;;;;14010:17;;:9;:17;;;;:49;;;;;14052:6;;;;;;;;;;;14031:28;;:9;:28;;;;14010:49;14006:121;;;14107:4;14080:13;:24;14094:9;14080:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;14006:121;13953:189;14162:17;14182:59;14226:14;;14182:39;14193:27;14209:10;;14193:11;;:15;;:27;;;;:::i;:::-;14182:6;:10;;:39;;;;:::i;:::-;:43;;:59;;;;:::i;:::-;14162:79;;14252:24;14279:42;14306:14;;14279:22;14290:10;;14279:6;:10;;:22;;;;:::i;:::-;:26;;:42;;;;:::i;:::-;14252:69;;14332:22;14357:31;14371:16;14357:9;:13;;:31;;;;:::i;:::-;14332:56;;14428:39;14457:9;14428;:24;14446:4;14428:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;14401:9;:24;14419:4;14401:24;;;;;;;;;;;;;;;:66;;;;14508:4;14483:42;;14492:6;14483:42;;;14515:9;14483:42;;;;;;:::i;:::-;;;;;;;;14560:1;14541:16;:20;14538:209;;;14610:51;14644:16;14610:9;:29;14620:18;;;;;;;;;;;14610:29;;;;;;;;;;;;;;;;:33;;:51;;;;:::i;:::-;14578:9;:29;14588:18;;;;;;;;;;;14578:29;;;;;;;;;;;;;;;:83;;;;14698:18;;;;;;;;;;;14681:54;;14690:6;14681:54;;;14718:16;14681:54;;;;;;:::i;:::-;;;;;;;;14538:209;14766:26;14777:14;14766:6;:10;;:26;;;;:::i;:::-;14759:33;;;;;13830:970;;;;;:::o;14808:753::-;14879:7;14900:17;14920:64;14969:14;;14920:44;14931:32;14948:14;;14931:12;;:16;;:32;;;;:::i;:::-;14920:6;:10;;:44;;;;:::i;:::-;:48;;:64;;;;:::i;:::-;14900:84;;14995:24;15022:46;15053:14;;15022:26;15033:14;;15022:6;:10;;:26;;;;:::i;:::-;:30;;:46;;;;:::i;:::-;14995:73;;15079:22;15104:31;15118:16;15104:9;:13;;:31;;;;:::i;:::-;15079:56;;15175:39;15204:9;15175;:24;15193:4;15175:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;15148:9;:24;15166:4;15148:24;;;;;;;;;;;;;;;:66;;;;15255:4;15230:42;;15239:6;15230:42;;;15262:9;15230:42;;;;;;:::i;:::-;;;;;;;;15307:1;15288:16;:20;15285:209;;;15357:51;15391:16;15357:9;:29;15367:18;;;;;;;;;;;15357:29;;;;;;;;;;;;;;;;:33;;:51;;;;:::i;:::-;15325:9;:29;15335:18;;;;;;;;;;;15325:29;;;;;;;;;;;;;;;:83;;;;15445:18;;;;;;;;;;;15428:54;;15437:6;15428:54;;;15465:16;15428:54;;;;;;:::i;:::-;;;;;;;;15285:209;15513:26;15524:14;15513:6;:10;;:26;;;;:::i;:::-;15506:33;;;;;14808:753;;;;:::o;15569:568::-;15644:7;15663:16;15682:11;;15663:30;;15723:17;;15708:12;:32;15704:83;;;15768:2;15757:13;;15704:83;15797:17;15817:40;15842:14;;15817:20;15828:8;15817:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;15797:60;;15910:1;15898:9;:13;15894:176;;;15955:39;15984:9;15955;:24;15973:4;15955:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;15928:9;:24;15946:4;15928:24;;;;;;;;;;;;;;;:66;;;;16040:4;16015:42;;16024:6;16015:42;;;16047:9;16015:42;;;;;;:::i;:::-;;;;;;;;15894:176;16105:21;16116:9;16105:6;:10;;:21;;;;:::i;:::-;16098:28;;;;15569:568;;;;:::o;1015:250::-;1073:7;1102:1;1097;:6;1093:47;;;1127:1;1120:8;;;;1093:47;1152:9;1168:1;1164;:5;;;;:::i;:::-;1152:17;;1197:1;1192;1188;:5;;;;:::i;:::-;:10;1180:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1256:1;1249:8;;;1015:250;;;;;:::o;1409:189::-;1495:7;1527:1;1523;:5;1530:12;1515:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1554:9;1570:1;1566;:5;;;;:::i;:::-;1554:17;;1589:1;1582:8;;;1409:189;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;330:568::-;403:8;413:6;463:3;456:4;448:6;444:17;440:27;430:122;;471:79;;:::i;:::-;430:122;584:6;571:20;561:30;;614:18;606:6;603:30;600:117;;;636:79;;:::i;:::-;600:117;750:4;742:6;738:17;726:29;;804:3;796:4;788:6;784:17;774:8;770:32;767:41;764:128;;;811:79;;:::i;:::-;764:128;330:568;;;;;:::o;904:133::-;947:5;985:6;972:20;963:29;;1001:30;1025:5;1001:30;:::i;:::-;904:133;;;;:::o;1043:137::-;1097:5;1128:6;1122:13;1113:22;;1144:30;1168:5;1144:30;:::i;:::-;1043:137;;;;:::o;1186:139::-;1232:5;1270:6;1257:20;1248:29;;1286:33;1313:5;1286:33;:::i;:::-;1186:139;;;;:::o;1331:143::-;1388:5;1419:6;1413:13;1404:22;;1435:33;1462:5;1435:33;:::i;:::-;1331:143;;;;:::o;1480:329::-;1539:6;1588:2;1576:9;1567:7;1563:23;1559:32;1556:119;;;1594:79;;:::i;:::-;1556:119;1714:1;1739:53;1784:7;1775:6;1764:9;1760:22;1739:53;:::i;:::-;1729:63;;1685:117;1480:329;;;;:::o;1815:345::-;1882:6;1931:2;1919:9;1910:7;1906:23;1902:32;1899:119;;;1937:79;;:::i;:::-;1899:119;2057:1;2082:61;2135:7;2126:6;2115:9;2111:22;2082:61;:::i;:::-;2072:71;;2028:125;1815:345;;;;:::o;2166:474::-;2234:6;2242;2291:2;2279:9;2270:7;2266:23;2262:32;2259:119;;;2297:79;;:::i;:::-;2259:119;2417:1;2442:53;2487:7;2478:6;2467:9;2463:22;2442:53;:::i;:::-;2432:63;;2388:117;2544:2;2570:53;2615:7;2606:6;2595:9;2591:22;2570:53;:::i;:::-;2560:63;;2515:118;2166:474;;;;;:::o;2646:911::-;2741:6;2749;2757;2765;2773;2822:3;2810:9;2801:7;2797:23;2793:33;2790:120;;;2829:79;;:::i;:::-;2790:120;2949:1;2974:53;3019:7;3010:6;2999:9;2995:22;2974:53;:::i;:::-;2964:63;;2920:117;3076:2;3102:53;3147:7;3138:6;3127:9;3123:22;3102:53;:::i;:::-;3092:63;;3047:118;3204:2;3230:53;3275:7;3266:6;3255:9;3251:22;3230:53;:::i;:::-;3220:63;;3175:118;3332:2;3358:53;3403:7;3394:6;3383:9;3379:22;3358:53;:::i;:::-;3348:63;;3303:118;3460:3;3487:53;3532:7;3523:6;3512:9;3508:22;3487:53;:::i;:::-;3477:63;;3431:119;2646:911;;;;;;;;:::o;3563:619::-;3640:6;3648;3656;3705:2;3693:9;3684:7;3680:23;3676:32;3673:119;;;3711:79;;:::i;:::-;3673:119;3831:1;3856:53;3901:7;3892:6;3881:9;3877:22;3856:53;:::i;:::-;3846:63;;3802:117;3958:2;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3929:118;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;3563:619;;;;;:::o;4188:468::-;4253:6;4261;4310:2;4298:9;4289:7;4285:23;4281:32;4278:119;;;4316:79;;:::i;:::-;4278:119;4436:1;4461:53;4506:7;4497:6;4486:9;4482:22;4461:53;:::i;:::-;4451:63;;4407:117;4563:2;4589:50;4631:7;4622:6;4611:9;4607:22;4589:50;:::i;:::-;4579:60;;4534:115;4188:468;;;;;:::o;4662:474::-;4730:6;4738;4787:2;4775:9;4766:7;4762:23;4758:32;4755:119;;;4793:79;;:::i;:::-;4755:119;4913:1;4938:53;4983:7;4974:6;4963:9;4959:22;4938:53;:::i;:::-;4928:63;;4884:117;5040:2;5066:53;5111:7;5102:6;5091:9;5087:22;5066:53;:::i;:::-;5056:63;;5011:118;4662:474;;;;;:::o;5142:698::-;5234:6;5242;5250;5299:2;5287:9;5278:7;5274:23;5270:32;5267:119;;;5305:79;;:::i;:::-;5267:119;5453:1;5442:9;5438:17;5425:31;5483:18;5475:6;5472:30;5469:117;;;5505:79;;:::i;:::-;5469:117;5618:80;5690:7;5681:6;5670:9;5666:22;5618:80;:::i;:::-;5600:98;;;;5396:312;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5142:698;;;;;:::o;5846:323::-;5902:6;5951:2;5939:9;5930:7;5926:23;5922:32;5919:119;;;5957:79;;:::i;:::-;5919:119;6077:1;6102:50;6144:7;6135:6;6124:9;6120:22;6102:50;:::i;:::-;6092:60;;6048:114;5846:323;;;;:::o;6175:345::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:61;6495:7;6486:6;6475:9;6471:22;6442:61;:::i;:::-;6432:71;;6388:125;6175:345;;;;:::o;6526:468::-;6591:6;6599;6648:2;6636:9;6627:7;6623:23;6619:32;6616:119;;;6654:79;;:::i;:::-;6616:119;6774:1;6799:50;6841:7;6832:6;6821:9;6817:22;6799:50;:::i;:::-;6789:60;;6745:114;6898:2;6924:53;6969:7;6960:6;6949:9;6945:22;6924:53;:::i;:::-;6914:63;;6869:118;6526:468;;;;;:::o;7000:329::-;7059:6;7108:2;7096:9;7087:7;7083:23;7079:32;7076:119;;;7114:79;;:::i;:::-;7076:119;7234:1;7259:53;7304:7;7295:6;7284:9;7280:22;7259:53;:::i;:::-;7249:63;;7205:117;7000:329;;;;:::o;7335:663::-;7423:6;7431;7439;7488:2;7476:9;7467:7;7463:23;7459:32;7456:119;;;7494:79;;:::i;:::-;7456:119;7614:1;7639:64;7695:7;7686:6;7675:9;7671:22;7639:64;:::i;:::-;7629:74;;7585:128;7752:2;7778:64;7834:7;7825:6;7814:9;7810:22;7778:64;:::i;:::-;7768:74;;7723:129;7891:2;7917:64;7973:7;7964:6;7953:9;7949:22;7917:64;:::i;:::-;7907:74;;7862:129;7335:663;;;;;:::o;8004:1057::-;8108:6;8116;8124;8132;8140;8148;8197:3;8185:9;8176:7;8172:23;8168:33;8165:120;;;8204:79;;:::i;:::-;8165:120;8324:1;8349:53;8394:7;8385:6;8374:9;8370:22;8349:53;:::i;:::-;8339:63;;8295:117;8451:2;8477:53;8522:7;8513:6;8502:9;8498:22;8477:53;:::i;:::-;8467:63;;8422:118;8579:2;8605:53;8650:7;8641:6;8630:9;8626:22;8605:53;:::i;:::-;8595:63;;8550:118;8707:2;8733:53;8778:7;8769:6;8758:9;8754:22;8733:53;:::i;:::-;8723:63;;8678:118;8835:3;8862:53;8907:7;8898:6;8887:9;8883:22;8862:53;:::i;:::-;8852:63;;8806:119;8964:3;8991:53;9036:7;9027:6;9016:9;9012:22;8991:53;:::i;:::-;8981:63;;8935:119;8004:1057;;;;;;;;:::o;9067:179::-;9136:10;9157:46;9199:3;9191:6;9157:46;:::i;:::-;9235:4;9230:3;9226:14;9212:28;;9067:179;;;;:::o;9252:147::-;9347:45;9386:5;9347:45;:::i;:::-;9342:3;9335:58;9252:147;;:::o;9405:108::-;9482:24;9500:5;9482:24;:::i;:::-;9477:3;9470:37;9405:108;;:::o;9519:118::-;9606:24;9624:5;9606:24;:::i;:::-;9601:3;9594:37;9519:118;;:::o;9673:699::-;9802:3;9825:86;9904:6;9899:3;9825:86;:::i;:::-;9818:93;;9935:58;9987:5;9935:58;:::i;:::-;10016:7;10047:1;10032:315;10057:6;10054:1;10051:13;10032:315;;;10127:42;10162:6;10153:7;10127:42;:::i;:::-;10189:63;10248:3;10233:13;10189:63;:::i;:::-;10182:70;;10275:62;10330:6;10275:62;:::i;:::-;10265:72;;10092:255;10079:1;10076;10072:9;10067:14;;10032:315;;;10036:14;10363:3;10356:10;;9807:565;;9673:699;;;;;:::o;10408:732::-;10527:3;10556:54;10604:5;10556:54;:::i;:::-;10626:86;10705:6;10700:3;10626:86;:::i;:::-;10619:93;;10736:56;10786:5;10736:56;:::i;:::-;10815:7;10846:1;10831:284;10856:6;10853:1;10850:13;10831:284;;;10932:6;10926:13;10959:63;11018:3;11003:13;10959:63;:::i;:::-;10952:70;;11045:60;11098:6;11045:60;:::i;:::-;11035:70;;10891:224;10878:1;10875;10871:9;10866:14;;10831:284;;;10835:14;11131:3;11124:10;;10532:608;;;10408:732;;;;:::o;11146:109::-;11227:21;11242:5;11227:21;:::i;:::-;11222:3;11215:34;11146:109;;:::o;11261:167::-;11366:55;11415:5;11366:55;:::i;:::-;11361:3;11354:68;11261:167;;:::o;11434:147::-;11529:45;11568:5;11529:45;:::i;:::-;11524:3;11517:58;11434:147;;:::o;11587:364::-;11675:3;11703:39;11736:5;11703:39;:::i;:::-;11758:71;11822:6;11817:3;11758:71;:::i;:::-;11751:78;;11838:52;11883:6;11878:3;11871:4;11864:5;11860:16;11838:52;:::i;:::-;11915:29;11937:6;11915:29;:::i;:::-;11910:3;11906:39;11899:46;;11679:272;11587:364;;;;:::o;11957:366::-;12099:3;12120:67;12184:2;12179:3;12120:67;:::i;:::-;12113:74;;12196:93;12285:3;12196:93;:::i;:::-;12314:2;12309:3;12305:12;12298:19;;11957:366;;;:::o;12329:::-;12471:3;12492:67;12556:2;12551:3;12492:67;:::i;:::-;12485:74;;12568:93;12657:3;12568:93;:::i;:::-;12686:2;12681:3;12677:12;12670:19;;12329:366;;;:::o;12701:::-;12843:3;12864:67;12928:2;12923:3;12864:67;:::i;:::-;12857:74;;12940:93;13029:3;12940:93;:::i;:::-;13058:2;13053:3;13049:12;13042:19;;12701:366;;;:::o;13073:::-;13215:3;13236:67;13300:2;13295:3;13236:67;:::i;:::-;13229:74;;13312:93;13401:3;13312:93;:::i;:::-;13430:2;13425:3;13421:12;13414:19;;13073:366;;;:::o;13445:::-;13587:3;13608:67;13672:2;13667:3;13608:67;:::i;:::-;13601:74;;13684:93;13773:3;13684:93;:::i;:::-;13802:2;13797:3;13793:12;13786:19;;13445:366;;;:::o;13817:::-;13959:3;13980:67;14044:2;14039:3;13980:67;:::i;:::-;13973:74;;14056:93;14145:3;14056:93;:::i;:::-;14174:2;14169:3;14165:12;14158:19;;13817:366;;;:::o;14189:::-;14331:3;14352:67;14416:2;14411:3;14352:67;:::i;:::-;14345:74;;14428:93;14517:3;14428:93;:::i;:::-;14546:2;14541:3;14537:12;14530:19;;14189:366;;;:::o;14561:::-;14703:3;14724:67;14788:2;14783:3;14724:67;:::i;:::-;14717:74;;14800:93;14889:3;14800:93;:::i;:::-;14918:2;14913:3;14909:12;14902:19;;14561:366;;;:::o;14933:::-;15075:3;15096:67;15160:2;15155:3;15096:67;:::i;:::-;15089:74;;15172:93;15261:3;15172:93;:::i;:::-;15290:2;15285:3;15281:12;15274:19;;14933:366;;;:::o;15305:::-;15447:3;15468:67;15532:2;15527:3;15468:67;:::i;:::-;15461:74;;15544:93;15633:3;15544:93;:::i;:::-;15662:2;15657:3;15653:12;15646:19;;15305:366;;;:::o;15677:::-;15819:3;15840:67;15904:2;15899:3;15840:67;:::i;:::-;15833:74;;15916:93;16005:3;15916:93;:::i;:::-;16034:2;16029:3;16025:12;16018:19;;15677:366;;;:::o;16049:::-;16191:3;16212:67;16276:2;16271:3;16212:67;:::i;:::-;16205:74;;16288:93;16377:3;16288:93;:::i;:::-;16406:2;16401:3;16397:12;16390:19;;16049:366;;;:::o;16421:365::-;16563:3;16584:66;16648:1;16643:3;16584:66;:::i;:::-;16577:73;;16659:93;16748:3;16659:93;:::i;:::-;16777:2;16772:3;16768:12;16761:19;;16421:365;;;:::o;16792:398::-;16951:3;16972:83;17053:1;17048:3;16972:83;:::i;:::-;16965:90;;17064:93;17153:3;17064:93;:::i;:::-;17182:1;17177:3;17173:11;17166:18;;16792:398;;;:::o;17196:366::-;17338:3;17359:67;17423:2;17418:3;17359:67;:::i;:::-;17352:74;;17435:93;17524:3;17435:93;:::i;:::-;17553:2;17548:3;17544:12;17537:19;;17196:366;;;:::o;17568:::-;17710:3;17731:67;17795:2;17790:3;17731:67;:::i;:::-;17724:74;;17807:93;17896:3;17807:93;:::i;:::-;17925:2;17920:3;17916:12;17909:19;;17568:366;;;:::o;17940:::-;18082:3;18103:67;18167:2;18162:3;18103:67;:::i;:::-;18096:74;;18179:93;18268:3;18179:93;:::i;:::-;18297:2;18292:3;18288:12;18281:19;;17940:366;;;:::o;18312:118::-;18399:24;18417:5;18399:24;:::i;:::-;18394:3;18387:37;18312:118;;:::o;18436:112::-;18519:22;18535:5;18519:22;:::i;:::-;18514:3;18507:35;18436:112;;:::o;18554:379::-;18738:3;18760:147;18903:3;18760:147;:::i;:::-;18753:154;;18924:3;18917:10;;18554:379;;;:::o;18939:222::-;19032:4;19070:2;19059:9;19055:18;19047:26;;19083:71;19151:1;19140:9;19136:17;19127:6;19083:71;:::i;:::-;18939:222;;;;:::o;19167:238::-;19268:4;19306:2;19295:9;19291:18;19283:26;;19319:79;19395:1;19384:9;19380:17;19371:6;19319:79;:::i;:::-;19167:238;;;;:::o;19411:664::-;19616:4;19654:3;19643:9;19639:19;19631:27;;19668:71;19736:1;19725:9;19721:17;19712:6;19668:71;:::i;:::-;19749:72;19817:2;19806:9;19802:18;19793:6;19749:72;:::i;:::-;19831;19899:2;19888:9;19884:18;19875:6;19831:72;:::i;:::-;19913;19981:2;19970:9;19966:18;19957:6;19913:72;:::i;:::-;19995:73;20063:3;20052:9;20048:19;20039:6;19995:73;:::i;:::-;19411:664;;;;;;;;:::o;20081:320::-;20196:4;20234:2;20223:9;20219:18;20211:26;;20247:71;20315:1;20304:9;20300:17;20291:6;20247:71;:::i;:::-;20328:66;20390:2;20379:9;20375:18;20366:6;20328:66;:::i;:::-;20081:320;;;;;:::o;20407:332::-;20528:4;20566:2;20555:9;20551:18;20543:26;;20579:71;20647:1;20636:9;20632:17;20623:6;20579:71;:::i;:::-;20660:72;20728:2;20717:9;20713:18;20704:6;20660:72;:::i;:::-;20407:332;;;;;:::o;20745:807::-;20994:4;21032:3;21021:9;21017:19;21009:27;;21046:71;21114:1;21103:9;21099:17;21090:6;21046:71;:::i;:::-;21127:72;21195:2;21184:9;21180:18;21171:6;21127:72;:::i;:::-;21209:80;21285:2;21274:9;21270:18;21261:6;21209:80;:::i;:::-;21299;21375:2;21364:9;21360:18;21351:6;21299:80;:::i;:::-;21389:73;21457:3;21446:9;21442:19;21433:6;21389:73;:::i;:::-;21472;21540:3;21529:9;21525:19;21516:6;21472:73;:::i;:::-;20745:807;;;;;;;;;:::o;21558:491::-;21733:4;21771:2;21760:9;21756:18;21748:26;;21820:9;21814:4;21810:20;21806:1;21795:9;21791:17;21784:47;21848:118;21961:4;21952:6;21944;21848:118;:::i;:::-;21840:126;;21976:66;22038:2;22027:9;22023:18;22014:6;21976:66;:::i;:::-;21558:491;;;;;;:::o;22055:210::-;22142:4;22180:2;22169:9;22165:18;22157:26;;22193:65;22255:1;22244:9;22240:17;22231:6;22193:65;:::i;:::-;22055:210;;;;:::o;22271:320::-;22386:4;22424:2;22413:9;22409:18;22401:26;;22437:65;22499:1;22488:9;22484:17;22475:6;22437:65;:::i;:::-;22512:72;22580:2;22569:9;22565:18;22556:6;22512:72;:::i;:::-;22271:320;;;;;:::o;22597:258::-;22708:4;22746:2;22735:9;22731:18;22723:26;;22759:89;22845:1;22834:9;22830:17;22821:6;22759:89;:::i;:::-;22597:258;;;;:::o;22861:313::-;22974:4;23012:2;23001:9;22997:18;22989:26;;23061:9;23055:4;23051:20;23047:1;23036:9;23032:17;23025:47;23089:78;23162:4;23153:6;23089:78;:::i;:::-;23081:86;;22861:313;;;;:::o;23180:419::-;23346:4;23384:2;23373:9;23369:18;23361:26;;23433:9;23427:4;23423:20;23419:1;23408:9;23404:17;23397:47;23461:131;23587:4;23461:131;:::i;:::-;23453:139;;23180:419;;;:::o;23605:::-;23771:4;23809:2;23798:9;23794:18;23786:26;;23858:9;23852:4;23848:20;23844:1;23833:9;23829:17;23822:47;23886:131;24012:4;23886:131;:::i;:::-;23878:139;;23605:419;;;:::o;24030:::-;24196:4;24234:2;24223:9;24219:18;24211:26;;24283:9;24277:4;24273:20;24269:1;24258:9;24254:17;24247:47;24311:131;24437:4;24311:131;:::i;:::-;24303:139;;24030:419;;;:::o;24455:::-;24621:4;24659:2;24648:9;24644:18;24636:26;;24708:9;24702:4;24698:20;24694:1;24683:9;24679:17;24672:47;24736:131;24862:4;24736:131;:::i;:::-;24728:139;;24455:419;;;:::o;24880:::-;25046:4;25084:2;25073:9;25069:18;25061:26;;25133:9;25127:4;25123:20;25119:1;25108:9;25104:17;25097:47;25161:131;25287:4;25161:131;:::i;:::-;25153:139;;24880:419;;;:::o;25305:::-;25471:4;25509:2;25498:9;25494:18;25486:26;;25558:9;25552:4;25548:20;25544:1;25533:9;25529:17;25522:47;25586:131;25712:4;25586:131;:::i;:::-;25578:139;;25305:419;;;:::o;25730:::-;25896:4;25934:2;25923:9;25919:18;25911:26;;25983:9;25977:4;25973:20;25969:1;25958:9;25954:17;25947:47;26011:131;26137:4;26011:131;:::i;:::-;26003:139;;25730:419;;;:::o;26155:::-;26321:4;26359:2;26348:9;26344:18;26336:26;;26408:9;26402:4;26398:20;26394:1;26383:9;26379:17;26372:47;26436:131;26562:4;26436:131;:::i;:::-;26428:139;;26155:419;;;:::o;26580:::-;26746:4;26784:2;26773:9;26769:18;26761:26;;26833:9;26827:4;26823:20;26819:1;26808:9;26804:17;26797:47;26861:131;26987:4;26861:131;:::i;:::-;26853:139;;26580:419;;;:::o;27005:::-;27171:4;27209:2;27198:9;27194:18;27186:26;;27258:9;27252:4;27248:20;27244:1;27233:9;27229:17;27222:47;27286:131;27412:4;27286:131;:::i;:::-;27278:139;;27005:419;;;:::o;27430:::-;27596:4;27634:2;27623:9;27619:18;27611:26;;27683:9;27677:4;27673:20;27669:1;27658:9;27654:17;27647:47;27711:131;27837:4;27711:131;:::i;:::-;27703:139;;27430:419;;;:::o;27855:::-;28021:4;28059:2;28048:9;28044:18;28036:26;;28108:9;28102:4;28098:20;28094:1;28083:9;28079:17;28072:47;28136:131;28262:4;28136:131;:::i;:::-;28128:139;;27855:419;;;:::o;28280:::-;28446:4;28484:2;28473:9;28469:18;28461:26;;28533:9;28527:4;28523:20;28519:1;28508:9;28504:17;28497:47;28561:131;28687:4;28561:131;:::i;:::-;28553:139;;28280:419;;;:::o;28705:::-;28871:4;28909:2;28898:9;28894:18;28886:26;;28958:9;28952:4;28948:20;28944:1;28933:9;28929:17;28922:47;28986:131;29112:4;28986:131;:::i;:::-;28978:139;;28705:419;;;:::o;29130:::-;29296:4;29334:2;29323:9;29319:18;29311:26;;29383:9;29377:4;29373:20;29369:1;29358:9;29354:17;29347:47;29411:131;29537:4;29411:131;:::i;:::-;29403:139;;29130:419;;;:::o;29555:::-;29721:4;29759:2;29748:9;29744:18;29736:26;;29808:9;29802:4;29798:20;29794:1;29783:9;29779:17;29772:47;29836:131;29962:4;29836:131;:::i;:::-;29828:139;;29555:419;;;:::o;29980:222::-;30073:4;30111:2;30100:9;30096:18;30088:26;;30124:71;30192:1;30181:9;30177:17;30168:6;30124:71;:::i;:::-;29980:222;;;;:::o;30208:831::-;30471:4;30509:3;30498:9;30494:19;30486:27;;30523:71;30591:1;30580:9;30576:17;30567:6;30523:71;:::i;:::-;30604:80;30680:2;30669:9;30665:18;30656:6;30604:80;:::i;:::-;30731:9;30725:4;30721:20;30716:2;30705:9;30701:18;30694:48;30759:108;30862:4;30853:6;30759:108;:::i;:::-;30751:116;;30877:72;30945:2;30934:9;30930:18;30921:6;30877:72;:::i;:::-;30959:73;31027:3;31016:9;31012:19;31003:6;30959:73;:::i;:::-;30208:831;;;;;;;;:::o;31045:664::-;31250:4;31288:3;31277:9;31273:19;31265:27;;31302:71;31370:1;31359:9;31355:17;31346:6;31302:71;:::i;:::-;31383:72;31451:2;31440:9;31436:18;31427:6;31383:72;:::i;:::-;31465;31533:2;31522:9;31518:18;31509:6;31465:72;:::i;:::-;31547;31615:2;31604:9;31600:18;31591:6;31547:72;:::i;:::-;31629:73;31697:3;31686:9;31682:19;31673:6;31629:73;:::i;:::-;31045:664;;;;;;;;:::o;31715:214::-;31804:4;31842:2;31831:9;31827:18;31819:26;;31855:67;31919:1;31908:9;31904:17;31895:6;31855:67;:::i;:::-;31715:214;;;;:::o;32016:102::-;32085:4;32108:3;32100:11;;32016:102;;;:::o;32124:132::-;32191:4;32214:3;32206:11;;32244:4;32239:3;32235:14;32227:22;;32124:132;;;:::o;32262:114::-;32329:6;32363:5;32357:12;32347:22;;32262:114;;;:::o;32382:99::-;32434:6;32468:5;32462:12;32452:22;;32382:99;;;:::o;32487:115::-;32559:4;32591;32586:3;32582:14;32574:22;;32487:115;;;:::o;32608:113::-;32678:4;32710;32705:3;32701:14;32693:22;;32608:113;;;:::o;32727:184::-;32826:11;32860:6;32855:3;32848:19;32900:4;32895:3;32891:14;32876:29;;32727:184;;;;:::o;32917:147::-;33018:11;33055:3;33040:18;;32917:147;;;;:::o;33070:169::-;33154:11;33188:6;33183:3;33176:19;33228:4;33223:3;33219:14;33204:29;;33070:169;;;;:::o;33245:122::-;33297:5;33322:39;33357:2;33352:3;33348:12;33343:3;33322:39;:::i;:::-;33313:48;;33245:122;;;;:::o;33373:305::-;33413:3;33432:20;33450:1;33432:20;:::i;:::-;33427:25;;33466:20;33484:1;33466:20;:::i;:::-;33461:25;;33620:1;33552:66;33548:74;33545:1;33542:81;33539:107;;;33626:18;;:::i;:::-;33539:107;33670:1;33667;33663:9;33656:16;;33373:305;;;;:::o;33684:185::-;33724:1;33741:20;33759:1;33741:20;:::i;:::-;33736:25;;33775:20;33793:1;33775:20;:::i;:::-;33770:25;;33814:1;33804:35;;33819:18;;:::i;:::-;33804:35;33861:1;33858;33854:9;33849:14;;33684:185;;;;:::o;33875:348::-;33915:7;33938:20;33956:1;33938:20;:::i;:::-;33933:25;;33972:20;33990:1;33972:20;:::i;:::-;33967:25;;34160:1;34092:66;34088:74;34085:1;34082:81;34077:1;34070:9;34063:17;34059:105;34056:131;;;34167:18;;:::i;:::-;34056:131;34215:1;34212;34208:9;34197:20;;33875:348;;;;:::o;34229:191::-;34269:4;34289:20;34307:1;34289:20;:::i;:::-;34284:25;;34323:20;34341:1;34323:20;:::i;:::-;34318:25;;34362:1;34359;34356:8;34353:34;;;34367:18;;:::i;:::-;34353:34;34412:1;34409;34405:9;34397:17;;34229:191;;;;:::o;34426:96::-;34463:7;34492:24;34510:5;34492:24;:::i;:::-;34481:35;;34426:96;;;:::o;34528:104::-;34573:7;34602:24;34620:5;34602:24;:::i;:::-;34591:35;;34528:104;;;:::o;34638:90::-;34672:7;34715:5;34708:13;34701:21;34690:32;;34638:90;;;:::o;34734:126::-;34771:7;34811:42;34804:5;34800:54;34789:65;;34734:126;;;:::o;34866:77::-;34903:7;34932:5;34921:16;;34866:77;;;:::o;34949:86::-;34984:7;35024:4;35017:5;35013:16;35002:27;;34949:86;;;:::o;35041:134::-;35099:9;35132:37;35163:5;35132:37;:::i;:::-;35119:50;;35041:134;;;:::o;35181:144::-;35249:9;35282:37;35313:5;35282:37;:::i;:::-;35269:50;;35181:144;;;:::o;35331:121::-;35389:9;35422:24;35440:5;35422:24;:::i;:::-;35409:37;;35331:121;;;:::o;35458:126::-;35508:9;35541:37;35572:5;35541:37;:::i;:::-;35528:50;;35458:126;;;:::o;35590:113::-;35640:9;35673:24;35691:5;35673:24;:::i;:::-;35660:37;;35590:113;;;:::o;35709:307::-;35777:1;35787:113;35801:6;35798:1;35795:13;35787:113;;;35886:1;35881:3;35877:11;35871:18;35867:1;35862:3;35858:11;35851:39;35823:2;35820:1;35816:10;35811:15;;35787:113;;;35918:6;35915:1;35912:13;35909:101;;;35998:1;35989:6;35984:3;35980:16;35973:27;35909:101;35758:258;35709:307;;;:::o;36022:233::-;36061:3;36084:24;36102:5;36084:24;:::i;:::-;36075:33;;36130:66;36123:5;36120:77;36117:103;;;36200:18;;:::i;:::-;36117:103;36247:1;36240:5;36236:13;36229:20;;36022:233;;;:::o;36261:180::-;36309:77;36306:1;36299:88;36406:4;36403:1;36396:15;36430:4;36427:1;36420:15;36447:180;36495:77;36492:1;36485:88;36592:4;36589:1;36582:15;36616:4;36613:1;36606:15;36633:180;36681:77;36678:1;36671:88;36778:4;36775:1;36768:15;36802:4;36799:1;36792:15;36819:180;36867:77;36864:1;36857:88;36964:4;36961:1;36954:15;36988:4;36985:1;36978:15;37005:180;37053:77;37050:1;37043:88;37150:4;37147:1;37140:15;37174:4;37171:1;37164:15;37191:117;37300:1;37297;37290:12;37314:117;37423:1;37420;37413:12;37437:117;37546:1;37543;37536:12;37560:117;37669:1;37666;37659:12;37683:117;37792:1;37789;37782:12;37806:102;37847:6;37898:2;37894:7;37889:2;37882:5;37878:14;37874:28;37864:38;;37806:102;;;:::o;37914:172::-;38054:24;38050:1;38042:6;38038:14;38031:48;37914:172;:::o;38092:168::-;38232:20;38228:1;38220:6;38216:14;38209:44;38092:168;:::o;38266:167::-;38406:19;38402:1;38394:6;38390:14;38383:43;38266:167;:::o;38439:181::-;38579:33;38575:1;38567:6;38563:14;38556:57;38439:181;:::o;38626:167::-;38766:19;38762:1;38754:6;38750:14;38743:43;38626:167;:::o;38799:177::-;38939:29;38935:1;38927:6;38923:14;38916:53;38799:177;:::o;38982:165::-;39122:17;39118:1;39110:6;39106:14;39099:41;38982:165;:::o;39153:168::-;39293:20;39289:1;39281:6;39277:14;39270:44;39153:168;:::o;39327:173::-;39467:25;39463:1;39455:6;39451:14;39444:49;39327:173;:::o;39506:180::-;39646:32;39642:1;39634:6;39630:14;39623:56;39506:180;:::o;39692:170::-;39832:22;39828:1;39820:6;39816:14;39809:46;39692:170;:::o;39868:220::-;40008:34;40004:1;39996:6;39992:14;39985:58;40077:3;40072:2;40064:6;40060:15;40053:28;39868:220;:::o;40094:156::-;40234:8;40230:1;40222:6;40218:14;40211:32;40094:156;:::o;40256:114::-;;:::o;40376:224::-;40516:34;40512:1;40504:6;40500:14;40493:58;40585:7;40580:2;40572:6;40568:15;40561:32;40376:224;:::o;40606:161::-;40746:13;40742:1;40734:6;40730:14;40723:37;40606:161;:::o;40773:::-;40913:13;40909:1;40901:6;40897:14;40890:37;40773:161;:::o;40940:122::-;41013:24;41031:5;41013:24;:::i;:::-;41006:5;41003:35;40993:63;;41052:1;41049;41042:12;40993:63;40940:122;:::o;41068:138::-;41149:32;41175:5;41149:32;:::i;:::-;41142:5;41139:43;41129:71;;41196:1;41193;41186:12;41129:71;41068:138;:::o;41212:116::-;41282:21;41297:5;41282:21;:::i;:::-;41275:5;41272:32;41262:60;;41318:1;41315;41308:12;41262:60;41212:116;:::o;41334:122::-;41407:24;41425:5;41407:24;:::i;:::-;41400:5;41397:35;41387:63;;41446:1;41443;41436:12;41387:63;41334:122;:::o

Swarm Source

ipfs://2dca80865ccb5914cf811ee02dda6a1c99381a7004d8493c570fe5dd1617b72c

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.