ETH Price: $3,404.91 (+2.80%)

Contract

0xf0C7a226D9950780081C56fB31C4f13FC7661643
 

Overview

ETH Balance

1 wei

Eth Value

Less Than $0.01 (@ $3,404.91/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve169976662023-04-07 16:03:11596 days ago1680883391IN
0xf0C7a226...FC7661643
0 ETH0.0016806935.96760182
Approve169756382023-04-04 12:51:11599 days ago1680612671IN
0xf0C7a226...FC7661643
0 ETH0.0012729527.06807513
Approve169719632023-04-04 0:14:23599 days ago1680567263IN
0xf0C7a226...FC7661643
0 ETH0.0005622922.72439247
Approve168652292023-03-20 0:09:47614 days ago1679270987IN
0xf0C7a226...FC7661643
0 ETH0.0010056421.38395409
Approve168224662023-03-13 23:54:47620 days ago1678751687IN
0xf0C7a226...FC7661643
0 ETH0.0009541520.28906967
Approve168223872023-03-13 23:38:59620 days ago1678750739IN
0xf0C7a226...FC7661643
0 ETH0.0008775718.66067423
Approve168062022023-03-11 17:04:23623 days ago1678554263IN
0xf0C7a226...FC7661643
0 ETH0.0019288841.01577316
Approve168011522023-03-11 0:01:47623 days ago1678492907IN
0xf0C7a226...FC7661643
0 ETH0.0019315441.01981389
Approve168003262023-03-10 21:14:23624 days ago1678482863IN
0xf0C7a226...FC7661643
0 ETH0.0015859233.72293693
Approve168002132023-03-10 20:51:47624 days ago1678481507IN
0xf0C7a226...FC7661643
0 ETH0.0019498141.40781397
Approve168002022023-03-10 20:49:23624 days ago1678481363IN
0xf0C7a226...FC7661643
0 ETH0.0016125734.28962158
Set Fees168000982023-03-10 20:28:35624 days ago1678480115IN
0xf0C7a226...FC7661643
0 ETH0.0011013136.9632053
Set Tax Swap168000502023-03-10 20:18:59624 days ago1678479539IN
0xf0C7a226...FC7661643
0 ETH0.0019668853.55724494
Set Fees168000462023-03-10 20:18:11624 days ago1678479491IN
0xf0C7a226...FC7661643
0 ETH0.0015201851.00093538
Approve168000412023-03-10 20:17:11624 days ago1678479431IN
0xf0C7a226...FC7661643
0 ETH0.0022364447.49502097
Set Tax Swap168000302023-03-10 20:14:59624 days ago1678479299IN
0xf0C7a226...FC7661643
0 ETH0.0016925842.81011556
Set Fee Split168000282023-03-10 20:14:35624 days ago1678479275IN
0xf0C7a226...FC7661643
0 ETH0.0011875542.10438347
Set Fees168000282023-03-10 20:14:35624 days ago1678479275IN
0xf0C7a226...FC7661643
0 ETH0.001136642.10438347
Set Fee Split168000262023-03-10 20:13:59624 days ago1678479239IN
0xf0C7a226...FC7661643
0 ETH0.0011923138.45557156
Set Fees168000232023-03-10 20:13:23624 days ago1678479203IN
0xf0C7a226...FC7661643
0 ETH0.0013466645.19779364
Approve168000092023-03-10 20:10:35624 days ago1678479035IN
0xf0C7a226...FC7661643
0 ETH0.0022845148.57766135
Approve167999962023-03-10 20:07:59624 days ago1678478879IN
0xf0C7a226...FC7661643
0 ETH0.0022979248.86282139
Approve167999352023-03-10 19:55:47624 days ago1678478147IN
0xf0C7a226...FC7661643
0 ETH0.0015012131.92173893
Approve167999172023-03-10 19:52:11624 days ago1678477931IN
0xf0C7a226...FC7661643
0 ETH0.0023073149
Approve167999172023-03-10 19:52:11624 days ago1678477931IN
0xf0C7a226...FC7661643
0 ETH0.0023073149
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
169976682023-04-07 16:03:35596 days ago1680883415
0xf0C7a226...FC7661643
0.00045326 ETH
169976682023-04-07 16:03:35596 days ago1680883415
0xf0C7a226...FC7661643
0.00407938 ETH
169976682023-04-07 16:03:35596 days ago1680883415
0xf0C7a226...FC7661643
0.00453264 ETH
168000512023-03-10 20:19:11624 days ago1678479551
0xf0C7a226...FC7661643
0.00054478 ETH
168000512023-03-10 20:19:11624 days ago1678479551
0xf0C7a226...FC7661643
0.00490305 ETH
168000512023-03-10 20:19:11624 days ago1678479551
0xf0C7a226...FC7661643
0.00544783 ETH
168000232023-03-10 20:13:23624 days ago1678479203
0xf0C7a226...FC7661643
0.00021419 ETH
168000232023-03-10 20:13:23624 days ago1678479203
0xf0C7a226...FC7661643
0.00033502 ETH
168000232023-03-10 20:13:23624 days ago1678479203
0xf0C7a226...FC7661643
0.00054922 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00021963 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00034353 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00056317 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00022112 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00034585 ETH
168000172023-03-10 20:12:11624 days ago1678479131
0xf0C7a226...FC7661643
0.00056698 ETH
168000012023-03-10 20:08:59624 days ago1678478939
0xf0C7a226...FC7661643
0.00022264 ETH
168000012023-03-10 20:08:59624 days ago1678478939
0xf0C7a226...FC7661643
0.00034823 ETH
168000012023-03-10 20:08:59624 days ago1678478939
0xf0C7a226...FC7661643
0.00057088 ETH
167999972023-03-10 20:08:11624 days ago1678478891
0xf0C7a226...FC7661643
0.00022844 ETH
167999972023-03-10 20:08:11624 days ago1678478891
0xf0C7a226...FC7661643
0.0003573 ETH
167999972023-03-10 20:08:11624 days ago1678478891
0xf0C7a226...FC7661643
0.00058574 ETH
167999922023-03-10 20:07:11624 days ago1678478831
0xf0C7a226...FC7661643
0.00023467 ETH
167999922023-03-10 20:07:11624 days ago1678478831
0xf0C7a226...FC7661643
0.00036705 ETH
167999922023-03-10 20:07:11624 days ago1678478831
0xf0C7a226...FC7661643
0.00060173 ETH
167999862023-03-10 20:05:59624 days ago1678478759
0xf0C7a226...FC7661643
0.00024122 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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);
}

interface IUniswapV2Factory { 
    function createPair(address tokenA, address tokenB) external returns (address pair); 
}
interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external;
    function WETH() external pure returns (address);
    function factory() external pure returns (address);
    function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

abstract contract Auth {
    address internal _owner;
    constructor(address creatorOwner) { 
        _owner = creatorOwner; 
    }
    modifier onlyOwner() { 
        require(msg.sender == _owner, "Only owner can call this"); 
        _; 
    }
    function owner() public view returns (address) { 
        return _owner; 
    }
    function transferOwnership(address payable newOwner) external onlyOwner { 
        _owner = newOwner; 
        emit OwnershipTransferred(newOwner); 
    }
    function renounceOwnership() external onlyOwner { 
        _owner = address(0); 
        emit OwnershipTransferred(address(0)); 
    }
    event OwnershipTransferred(address _owner);
}
    
contract PAI is IERC20, Auth {
    uint8 private constant _decimals      = 9;
    uint256 private constant _totalSupply = 100_000_000 * (10**_decimals); 
    string private constant _name         = "Primed AI";
    string private constant _symbol       = "PAI";

    uint8 private antiSnipeTax1 = 87;
    uint8 private antiSnipeTax2 = 42;
    uint8 private antiSnipeBlocks1 = 3;
    uint8 private antiSnipeBlocks2 = 5;

    mapping (address => uint256) private _lastBuyBlock;

    uint8 private _buyTaxRate  = 3;
    uint8 private _sellTaxRate = 3;

    uint16 private _taxSharesMarketing   = 61;
    uint16 private _taxSharesDevelopment = 39;
    uint16 private _taxSharesLP          = 0;
    uint16 private _totalTaxShares = _taxSharesMarketing + _taxSharesDevelopment + _taxSharesLP;

    address payable private _walletMarketing = payable(0x159014fe79DB442779b871355D22124eD3c0b474); 
    address payable private _walletDevelopment = payable(0x35b3591DDa228d9E175cC895611cB45E02928AF7); 

    uint256 private _launchBlock;
    uint256 private _maxTxAmount     = _totalSupply; 
    uint256 private _maxWalletAmount = _totalSupply;
    uint256 private _taxSwapMin = _totalSupply * 10 / 100000;
    uint256 private _taxSwapMax = _totalSupply * 100 / 100000;

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _noFees;
    mapping (address => bool) private _noLimits;

    address private _lpOwner;

    address private constant _swapRouterAddress = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    IUniswapV2Router02 private _primarySwapRouter = IUniswapV2Router02(_swapRouterAddress);
    address private _primaryLP;
    mapping (address => bool) private _isLP;

    bool private _tradingOpen;

    bool private _inTaxSwap = false;
    modifier lockTaxSwap { 
        _inTaxSwap = true; 
        _; 
        _inTaxSwap = false; 
    }

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);
    event TokensBurned(address indexed burnedByWallet, uint256 tokenAmount);

    constructor() Auth(msg.sender) {
        _lpOwner = msg.sender;
        
        _balances[msg.sender] =  _totalSupply * 14 / 100;
        emit Transfer(address(0), msg.sender, _balances[msg.sender]);
        
        _balances[address(this)] =  _totalSupply - _balances[msg.sender];
        emit Transfer(address(0), address(this), _balances[address(this)]);

        _noFees[_owner] = true;
        _noFees[address(this)] = true;
        _noFees[_swapRouterAddress] = true;
        _noFees[_walletMarketing] = true;
        _noFees[_walletDevelopment] = true;
        _noLimits[_owner] = true;
        _noLimits[address(this)] = true;
        _noLimits[_swapRouterAddress] = true;
        _noLimits[_walletMarketing] = true;
        _noLimits[_walletDevelopment] = true;
    }

    receive() external payable {}
    
    function totalSupply() external pure 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 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 transfer(address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(msg.sender), "Trading not open");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(_checkTradingOpen(sender), "Trading not open");
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _approveRouter(uint256 _tokenAmount) internal {
        if ( _allowances[address(this)][_swapRouterAddress] < _tokenAmount ) {
            _allowances[address(this)][_swapRouterAddress] = type(uint256).max;
            emit Approval(address(this), _swapRouterAddress, type(uint256).max);
        }
    }

    function addLiquidity() external payable onlyOwner lockTaxSwap {
        require(_primaryLP == address(0), "LP exists");
        require(!_tradingOpen, "trading is open");
        require(msg.value > 0 || address(this).balance>0, "No ETH in contract or message");
        require(_balances[address(this)]>0, "No tokens in contract");
        _primaryLP = IUniswapV2Factory(_primarySwapRouter.factory()).createPair(address(this), _primarySwapRouter.WETH());
        _addLiquidity(_balances[address(this)], address(this).balance, false);
        _isLP[_primaryLP] = true;
        _openTrading();
    }

    function _addLiquidity(uint256 _tokenAmount, uint256 _ethAmountWei, bool autoburn) internal {
        address lpTokenRecipient = _lpOwner;
        if ( autoburn ) { lpTokenRecipient = address(0); }
        _approveRouter(_tokenAmount);
        _primarySwapRouter.addLiquidityETH{value: _ethAmountWei} ( address(this), _tokenAmount, 0, 0, lpTokenRecipient, block.timestamp );
    }

    function _openTrading() internal {
        _maxTxAmount     = _totalSupply * 1 / 100; 
        _maxWalletAmount = _totalSupply * 1 / 100;
        _tradingOpen = true;
        _launchBlock = block.number;
    }

    function antiMevCheck(address sender, address recipient) private returns (bool) {
        uint8 errorCount;

        if ( block.number < (_launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 + 10) && block.number >= (_launchBlock + antiSnipeBlocks1) ) {
            if (_isLP[sender]) {
                if ( !_noFees[recipient] && !_noLimits[recipient]) { 
                    _lastBuyBlock[recipient] = block.number; 
                }
                if ( recipient != tx.origin ) { 
                    errorCount++; 
                }
            } else if ( _lastBuyBlock[sender] == block.number) { 
                errorCount++;
            }

            if ( tx.gasprice > 0) {
                if ( tx.gasprice == block.basefee || tx.gasprice > block.basefee + (20*(10**9)) ) {
                    errorCount++;
                }
            } 
        }
        return (errorCount == 0);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(sender != address(0), "No transfers from Zero wallet");
        if (!_tradingOpen) { 
            require(_noFees[sender] && _noLimits[sender], "Trading not open"); 
        }
        if ( !_inTaxSwap && _isLP[recipient] ) { 
            _swapTaxAndLiquify(); 
        }

        require(antiMevCheck(sender, recipient), "MEV bots not allowed" );
        
        if ( sender != address(this) && recipient != address(this) && sender != _owner ) { 
            require(_checkLimits(sender, recipient, amount), "TX exceeds limits"); 
        }
        uint256 _taxAmount = _calculateTax(sender, recipient, amount);
        uint256 _transferAmount = amount - _taxAmount;
        _balances[sender] = _balances[sender] - amount;
        if ( _taxAmount > 0 ) { 
            _balances[address(this)] = _balances[address(this)] + _taxAmount; 
        }
        _balances[recipient] = _balances[recipient] + _transferAmount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function _checkLimits(address sender, address recipient, uint256 transferAmount) internal view returns (bool) {
        bool limitCheckPassed = true;
        if ( _tradingOpen && !_noLimits[sender] && !_noLimits[recipient] ) {
            if ( transferAmount > _maxTxAmount ) { limitCheckPassed = false; }
            else if ( !_isLP[recipient] && (_balances[recipient] + transferAmount > _maxWalletAmount) ) { limitCheckPassed = false; }
        }
        return limitCheckPassed;
    }

    function _checkTradingOpen(address sender) private view returns (bool){
        bool checkResult = false;
        if ( _tradingOpen ) { checkResult = true; } 
        else if (_noFees[sender] && _noLimits[sender]) { checkResult = true; } 

        return checkResult;
    }

    function _calculateTax(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        uint256 taxAmount;
        
        if ( !_tradingOpen || _noFees[sender] || _noFees[recipient] ) { 
            taxAmount = 0; 
        } else if ( block.number >= _launchBlock + antiSnipeBlocks1 + antiSnipeBlocks2 ) {
            if ( _isLP[sender] ) { 
                taxAmount = amount * _buyTaxRate / 100;
            } else if ( _isLP[recipient] ) { 
                taxAmount = amount * _sellTaxRate / 100; 
            } else { 
                taxAmount = 0; 
            }
        } else if ( block.number >= _launchBlock + antiSnipeBlocks1 ) {
            taxAmount = amount * antiSnipeTax2 / 100;
        } else if ( block.number >= _launchBlock) {
            taxAmount = amount * antiSnipeTax1 / 100;
        }
        
        return taxAmount;
    }


    function exemptFromFees(address wallet) external view returns (bool) {
        return _noFees[wallet];
    } 
    function exemptFromLimits(address wallet) external view returns (bool) {
        return _noLimits[wallet];
    } 
    function setExempt(address wallet, bool noFees, bool noLimits) external onlyOwner {
        if (noLimits || noFees) { require(!_isLP[wallet], "Cannot exempt LP"); }
        _noFees[ wallet ] = noFees;
        _noLimits[ wallet ] = noLimits;
    }

    function buyFee() external view returns(uint8) {
        return _buyTaxRate;
    }
    function sellFee() external view returns(uint8) {
        return _sellTaxRate;
    }

    function feeSplit() external view returns (uint16 marketing, uint16 development, uint16 LP ) {
        return ( _taxSharesMarketing, _taxSharesDevelopment, _taxSharesLP);
    }
    function setFees(uint8 buy, uint8 sell) external onlyOwner {
        require(buy + sell <= 66, "Roundtrip too high");
        _buyTaxRate = buy;
        _sellTaxRate = sell;
    }  
    function setFeeSplit(uint16 sharesAutoLP, uint16 sharesMarketing, uint16 sharesDevelopment) external onlyOwner {
        uint16 totalShares = sharesAutoLP + sharesMarketing + sharesDevelopment;
        require( totalShares > 0, "All cannot be 0");
        _taxSharesLP = sharesAutoLP;
        _taxSharesMarketing = sharesMarketing;
        _taxSharesDevelopment = sharesDevelopment;
        _totalTaxShares = totalShares;
    }

    function walletMarketing() external view returns (address) {
        return _walletMarketing;
    }
    function walletDevelopment() external view returns (address) {
        return _walletDevelopment;
    }

    function updateWallets(address marketing, address development, address LPtokens) external onlyOwner {
        require(!_isLP[marketing] && !_isLP[development] && !_isLP[LPtokens], "LP cannot be tax wallet");
        
        _walletMarketing = payable(marketing);
        _walletDevelopment = payable(development);
        _lpOwner = LPtokens;
        
        _noFees[marketing] = true;
        _noLimits[marketing] = true;
        
        _noFees[development] = true;        
        _noLimits[development] = true;
    }

    function maxWallet() external view returns (uint256) {
        return _maxWalletAmount;
    }
    function maxTransaction() external view returns (uint256) {
        return _maxTxAmount;
    }

    function swapAtMin() external view returns (uint256) {
        return _taxSwapMin;
    }
    function swapAtMax() external view returns (uint256) {
        return _taxSwapMax;
    }

    function setLimits(uint16 maxTransactionPermille, uint16 maxWalletPermille) external onlyOwner {
        uint256 newTxAmt = _totalSupply * maxTransactionPermille / 1000 + 1;
        require(newTxAmt >= _maxTxAmount, "tx too low");
        _maxTxAmount = newTxAmt;
        uint256 newWalletAmt = _totalSupply * maxWalletPermille / 1000 + 1;
        require(newWalletAmt >= _maxWalletAmount, "wallet too low");
        _maxWalletAmount = newWalletAmt;
    }

    function setTaxSwap(uint32 minValue, uint32 minDivider, uint32 maxValue, uint32 maxDivider) external onlyOwner {
        _taxSwapMin = _totalSupply * minValue / minDivider;
        _taxSwapMax = _totalSupply * maxValue / maxDivider;
        require(_taxSwapMax>=_taxSwapMin, "Min/Max error");
        require(_taxSwapMax>_totalSupply / 100000, "Max too low");
        require(_taxSwapMax<_totalSupply / 100, "Max too high");
    }

    function _burnTokens(address fromWallet, uint256 amount) private {
        if ( amount > 0 ) {
            _balances[fromWallet] -= amount;
            _balances[address(0)] += amount;
            emit Transfer(fromWallet, address(0), amount);
        }
    }

    function _swapTaxAndLiquify() private lockTaxSwap {
        uint256 _taxTokensAvailable = balanceOf(address(this));

        if ( _taxTokensAvailable >= _taxSwapMin && _tradingOpen ) {
            if ( _taxTokensAvailable >= _taxSwapMax ) { _taxTokensAvailable = _taxSwapMax; }

            uint256 _tokensForLP = _taxTokensAvailable * _taxSharesLP / _totalTaxShares / 2;
            
            uint256 _tokensToSwap = _taxTokensAvailable - _tokensForLP;
            if( _tokensToSwap > 10**_decimals ) {
                uint256 _ethPreSwap = address(this).balance;
                _swapTaxTokensForEth(_tokensToSwap);
                uint256 _ethSwapped = address(this).balance - _ethPreSwap;
                if ( _taxSharesLP > 0 ) {
                    uint256 _ethWeiAmount = _ethSwapped * _taxSharesLP / _totalTaxShares ;
                    _approveRouter(_tokensForLP);
                    _addLiquidity(_tokensForLP, _ethWeiAmount, false);
                }
            }
            uint256 _contractETHBalance = address(this).balance;
            if(_contractETHBalance > 0) { _distributeTaxEth(_contractETHBalance); }
        }
    }

    function _swapTaxTokensForEth(uint256 tokenAmount) private {
        _approveRouter(tokenAmount);
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _primarySwapRouter.WETH();
        _primarySwapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0,path,address(this),block.timestamp);
    }

    function _distributeTaxEth(uint256 amount) private {
        uint16 _taxShareTotal = _taxSharesMarketing + _taxSharesDevelopment;
        if (_taxShareTotal > 0) {
            uint256 marketingAmount = amount * _taxSharesMarketing / _taxShareTotal;
            uint256 developmentAmount = amount * _taxSharesDevelopment / _taxShareTotal;
            if ( marketingAmount > 0 ) { _walletMarketing.transfer(marketingAmount); }
            if ( developmentAmount > 0 ) { _walletDevelopment.transfer(developmentAmount); }
        }
    }

    function manualTaxSwapAndSend(uint8 swapTokenPercent, bool sendEth) external onlyOwner lockTaxSwap {
        require(swapTokenPercent <= 100, "Cannot swap more than 100%");
        uint256 tokensToSwap = balanceOf(address(this)) * swapTokenPercent / 100;
        if (tokensToSwap > 10 ** _decimals) {
            _swapTaxTokensForEth(tokensToSwap);
        }
        if (sendEth) { 
            uint256 ethBalance = address(this).balance;
            require(ethBalance > 0, "No ETH");
            _distributeTaxEth(address(this).balance); 
        }
    }

    function burn(uint256 amount) external {
        uint256 _tokensAvailable = balanceOf(msg.sender);
        require(amount <= _tokensAvailable, "balance too low");
        _burnTokens(msg.sender, amount);
        emit TokensBurned(msg.sender, amount);
    }

    function airdrop(address[] calldata addresses, uint256[] calldata tokenAmounts) external onlyOwner {
        require(addresses.length <= 250,"Wallet count over 250 (gas risk)");
        require(addresses.length == tokenAmounts.length,"Address and token amount list mismach");

        uint256 airdropTotal = 0;
        for(uint i=0; i < addresses.length; i++){
            airdropTotal += (tokenAmounts[i] * 10**_decimals);
        }
        require(_balances[msg.sender] >= airdropTotal, "Token balance lower than airdrop total");

        for(uint i=0; i < addresses.length; i++) {
            _balances[msg.sender] -= (tokenAmounts[i] * 10**_decimals);
            _balances[addresses[i]] += (tokenAmounts[i] * 10**_decimals);
            emit Transfer(msg.sender, addresses[i], (tokenAmounts[i] * 10**_decimals) );       
        }

        emit TokensAirdropped(addresses.length, airdropTotal);
    }
}

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":"_owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"burnedByWallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"TokensBurned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokenAmounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"exemptFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeSplit","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"LP","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"swapTokenPercent","type":"uint8"},{"internalType":"bool","name":"sendEth","type":"bool"}],"name":"manualTaxSwapAndSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"noFees","type":"bool"},{"internalType":"bool","name":"noLimits","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"sharesAutoLP","type":"uint16"},{"internalType":"uint16","name":"sharesMarketing","type":"uint16"},{"internalType":"uint16","name":"sharesDevelopment","type":"uint16"}],"name":"setFeeSplit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buy","type":"uint8"},{"internalType":"uint8","name":"sell","type":"uint8"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"maxTransactionPermille","type":"uint16"},{"internalType":"uint16","name":"maxWalletPermille","type":"uint16"}],"name":"setLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"minValue","type":"uint32"},{"internalType":"uint32","name":"minDivider","type":"uint32"},{"internalType":"uint32","name":"maxValue","type":"uint32"},{"internalType":"uint32","name":"maxDivider","type":"uint32"}],"name":"setTaxSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAtMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtMin","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":"pure","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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketing","type":"address"},{"internalType":"address","name":"development","type":"address"},{"internalType":"address","name":"LPtokens","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletDevelopment","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletMarketing","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526057600060146101000a81548160ff021916908360ff160217905550602a600060156101000a81548160ff021916908360ff1602179055506003600060166101000a81548160ff021916908360ff1602179055506005600060176101000a81548160ff021916908360ff1602179055506003600260006101000a81548160ff021916908360ff1602179055506003600260016101000a81548160ff021916908360ff160217905550603d6002806101000a81548161ffff021916908361ffff1602179055506027600260046101000a81548161ffff021916908361ffff1602179055506000600260066101000a81548161ffff021916908361ffff160217905550600260069054906101000a900461ffff16600260049054906101000a900461ffff1660028054906101000a900461ffff1662000142919062000b04565b6200014e919062000b04565b600260086101000a81548161ffff021916908361ffff16021790555073159014fe79db442779b871355d22124ed3c0b4746002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507335b3591dda228d9e175cc895611cb45e02928af7600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000224919062000cac565b6305f5e10062000235919062000cfd565b6005556009600a62000248919062000cac565b6305f5e10062000259919062000cfd565b600655620186a0600a6009600a62000272919062000cac565b6305f5e10062000283919062000cfd565b6200028f919062000cfd565b6200029b919062000d77565b600755620186a060646009600a620002b4919062000cac565b6305f5e100620002c5919062000cfd565b620002d1919062000cfd565b620002dd919062000d77565b600855737a250d5630b4cf539739df2c5dacb4c659f2488d600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601160016101000a81548160ff0219169083151502179055503480156200035d57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505033600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506064600e6009600a620003f5919062000cac565b6305f5e10062000406919062000cfd565b62000412919062000cfd565b6200041e919062000d77565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000500919062000dc0565b60405180910390a3600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546009600a62000558919062000cac565b6305f5e10062000569919062000cfd565b62000575919062000ddd565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460405162000657919062000dc0565b60405180910390a36001600b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000e18565b600061ffff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b118262000ac7565b915062000b1e8362000ac7565b9250828201905061ffff81111562000b3b5762000b3a62000ad5565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111562000ba05780860481111562000b785762000b7762000ad5565b5b600185161562000b885780820291505b808102905062000b988562000b41565b945062000b58565b94509492505050565b60008262000bbb576001905062000c8e565b8162000bcb576000905062000c8e565b816001811462000be4576002811462000bef5762000c25565b600191505062000c8e565b60ff84111562000c045762000c0362000ad5565b5b8360020a91508482111562000c1e5762000c1d62000ad5565b5b5062000c8e565b5060208310610133831016604e8410600b841016171562000c5f5782820a90508381111562000c595762000c5862000ad5565b5b62000c8e565b62000c6e848484600162000b4e565b9250905081840481111562000c885762000c8762000ad5565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000cb98262000c95565b915062000cc68362000c9f565b925062000cf57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000ba9565b905092915050565b600062000d0a8262000c95565b915062000d178362000c95565b925082820262000d278162000c95565b9150828204841483151762000d415762000d4062000ad5565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d848262000c95565b915062000d918362000c95565b92508262000da45762000da362000d48565b5b828204905092915050565b62000dba8162000c95565b82525050565b600060208201905062000dd7600083018462000daf565b92915050565b600062000dea8262000c95565b915062000df78362000c95565b925082820390508181111562000e125762000e1162000ad5565b5b92915050565b61597e8062000e286000396000f3fe6080604052600436106101f25760003560e01c80635a90a49e1161010d5780638da5cb5b116100a0578063c3f70b521161006f578063c3f70b52146106fa578063dd62ed3e14610725578063e8078d9414610762578063f2fde38b1461076c578063f8b45b0514610795576101f9565b80638da5cb5b1461063e57806395d89b4114610669578063a6097b0a14610694578063a9059cbb146106bd576101f9565b806370a08231116100dc57806370a0823114610584578063715018a6146105c157806376a39c28146105d85780638d3e6e4014610601576101f9565b80635a90a49e146104c657806362b9bbb6146105035780636373ea691461052e578063672434821461055b576101f9565b8063313ce567116101855780634706240211610154578063470624021461041e5780634d4ce935146104495780634fcd24461461047457806357ff135a1461049d576101f9565b8063313ce56714610376578063368f4800146103a157806342966c68146103ca57806346b89834146103f3576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e55780632b14ca56146103225780632fb528ba1461034d576101f9565b806306fdde03146101fe578063095ea7b3146102295780630aae341214610266578063147c9f6d14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107c0565b6040516102209190614038565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906140f8565b6107fd565b60405161025d9190614153565b60405180910390f35b34801561027257600080fd5b5061027b6108ef565b604051610288919061417d565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190614198565b610919565b005b3480156102c657600080fd5b506102cf610d08565b6040516102dc91906141fa565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190614215565b610d2c565b6040516103199190614153565b60405180910390f35b34801561032e57600080fd5b50610337610f36565b6040516103449190614284565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f91906142f7565b610f4d565b005b34801561038257600080fd5b5061038b6110fc565b6040516103989190614284565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190614371565b611105565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906143b1565b6112c3565b005b3480156103ff57600080fd5b5061040861136f565b60405161041591906141fa565b60405180910390f35b34801561042a57600080fd5b50610433611379565b6040516104409190614284565b60405180910390f35b34801561045557600080fd5b5061045e611390565b60405161046b91906141fa565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906143de565b61139a565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061441e565b6114b4565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614471565b611691565b6040516104fa9190614153565b60405180910390f35b34801561050f57600080fd5b506105186116e7565b604051610525919061417d565b60405180910390f35b34801561053a57600080fd5b50610543611711565b604051610552939291906144ad565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061459f565b611752565b005b34801561059057600080fd5b506105ab60048036038101906105a69190614471565b611baa565b6040516105b891906141fa565b60405180910390f35b3480156105cd57600080fd5b506105d6611bf3565b005b3480156105e457600080fd5b506105ff60048036038101906105fa9190614620565b611cfc565b005b34801561060d57600080fd5b5061062860048036038101906106239190614471565b611e65565b6040516106359190614153565b60405180910390f35b34801561064a57600080fd5b50610653611ebb565b604051610660919061417d565b60405180910390f35b34801561067557600080fd5b5061067e611ee4565b60405161068b9190614038565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b691906146af565b611f21565b005b3480156106c957600080fd5b506106e460048036038101906106df91906140f8565b612160565b6040516106f19190614153565b60405180910390f35b34801561070657600080fd5b5061070f6121bd565b60405161071c91906141fa565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614716565b6121c7565b60405161075991906141fa565b60405180910390f35b61076a61224e565b005b34801561077857600080fd5b50610793600480360381019061078e9190614794565b612770565b005b3480156107a157600080fd5b506107aa612878565b6040516107b791906141fa565b60405180910390f35b60606040518060400160405280600981526020017f5072696d65642041490000000000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108dd91906141fa565b60405180910390a36001905092915050565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e9061480d565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a4b5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610aa15750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790614879565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610d1891906149fb565b6305f5e100610d279190614a46565b905090565b6000610d3784612882565b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614ad4565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f225781600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ea19190614af4565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f2d84848461295d565b90509392505050565b6000600260019054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd29061480d565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555060648260ff16111561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614b74565b60405180910390fd5b600060648360ff1661104e30611baa565b6110589190614a46565b6110629190614bc3565b90506009600a61107291906149fb565b8111156110835761108281612ed5565b5b81156110dc576000479050600081116110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614c40565b60405180910390fd5b6110da476130f4565b505b506000601160016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a9061480d565b60405180910390fd5b600060016103e88461ffff166009600a6111ad91906149fb565b6305f5e1006111bc9190614a46565b6111c69190614a46565b6111d09190614bc3565b6111da9190614c60565b9050600554811015611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614ce0565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a61124291906149fb565b6305f5e1006112519190614a46565b61125b9190614a46565b6112659190614bc3565b61126f9190614c60565b90506006548110156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90614d4c565b60405180910390fd5b8060068190555050505050565b60006112ce33611baa565b905080821115611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614db8565b60405180910390fd5b61131d3383613280565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68360405161136391906141fa565b60405180910390a25050565b6000600754905090565b6000600260009054906101000a900460ff16905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f9061480d565b60405180910390fd5b604281836114369190614dd8565b60ff16111561147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190614e59565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115399061480d565b60405180910390fd5b808061154b5750815b156115de57601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614ec5565b60405180910390fd5b5b81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061480d565b60405180910390fd5b60fa848490501115611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614f31565b60405180910390fd5b81819050848490501461186f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186690614fc3565b60405180910390fd5b6000805b858590508110156118d0576009600a61188c91906149fb565b84848381811061189f5761189e614fe3565b5b905060200201356118b09190614a46565b826118bb9190614c60565b915080806118c890615012565b915050611873565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906150cc565b60405180910390fd5b60005b85859050811015611b66576009600a61196f91906149fb565b84848381811061198257611981614fe3565b5b905060200201356119939190614a46565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e19190614af4565b925050819055506009600a6119f691906149fb565b848483818110611a0957611a08614fe3565b5b90506020020135611a1a9190614a46565b60096000888885818110611a3157611a30614fe3565b5b9050602002016020810190611a469190614471565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8f9190614c60565b92505081905550858582818110611aa957611aa8614fe3565b5b9050602002016020810190611abe9190614471565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a611b1a91906149fb565b878786818110611b2d57611b2c614fe3565b5b90506020020135611b3e9190614a46565b604051611b4b91906141fa565b60405180910390a38080611b5e90615012565b915050611956565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611b9b9291906150ec565b60405180910390a15050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c789061480d565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051611cf2919061417d565b60405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d819061480d565b60405180910390fd5b6000818385611d999190615115565b611da39190615115565b905060008161ffff1611611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390615197565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5041490000000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061480d565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611fcb91906149fb565b6305f5e100611fda9190614a46565b611fe49190614a46565b611fee9190614bc3565b6007819055508063ffffffff168263ffffffff166009600a61201091906149fb565b6305f5e10061201f9190614a46565b6120299190614a46565b6120339190614bc3565b6008819055506007546008541015612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207790615203565b60405180910390fd5b620186a06009600a61209291906149fb565b6305f5e1006120a19190614a46565b6120ab9190614bc3565b600854116120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e59061526f565b60405180910390fd5b60646009600a6120fe91906149fb565b6305f5e10061210d9190614a46565b6121179190614bc3565b6008541061215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906152db565b60405180910390fd5b50505050565b600061216b33612882565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190614ad4565b60405180910390fd5b6121b533848461295d565b905092915050565b6000600554905090565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061480d565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615347565b60405180910390fd5b601160009054906101000a900460ff16156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906153b3565b60405180910390fd5b60003411806123e75750600047115b612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d9061541f565b60405180910390fd5b6000600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061548b565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253991906154c0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e691906154c0565b6040518363ffffffff1660e01b81526004016126039291906154ed565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264691906154c0565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126d1600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544760006133a0565b600160106000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061275361348e565b6000601160016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f59061480d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161286d9190615575565b60405180910390a150565b6000600654905090565b60008060009050601160009054906101000a900460ff16156128a75760019050612954565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129495750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561295357600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c4906155dc565b60405180910390fd5b601160009054906101000a900460ff16612ac357600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a835750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990614ad4565b60405180910390fd5b5b601160019054906101000a900460ff16158015612b295750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3757612b36613528565b5b612b4184846136c7565b612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615648565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612be857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c40575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c9057612c5084848461396e565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906156b4565b60405180910390fd5b5b6000612c9d858585613b05565b905060008184612cad9190614af4565b905083600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cfa9190614af4565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612dd55781600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d919190614c60565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e209190614c60565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612ec091906141fa565b60405180910390a36001925050509392505050565b612ede81613dbe565b6000600267ffffffffffffffff811115612efb57612efa6156d4565b5b604051908082528060200260200182016040528015612f295781602001602082028036833780820191505090505b5090503081600081518110612f4157612f40614fe3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300c91906154c0565b816001815181106130205761301f614fe3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130be9594939291906157fc565b600060405180830381600087803b1580156130d857600080fd5b505af11580156130ec573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff166131209190615115565b905060008161ffff16111561327c5760008161ffff1660028054906101000a900461ffff1661ffff16846131549190614a46565b61315e9190614bc3565b905060008261ffff16600260049054906101000a900461ffff1661ffff16856131879190614a46565b6131919190614bc3565b90506000821115613206576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613204573d6000803e3d6000fd5b505b600081111561327957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613277573d6000803e3d6000fd5b505b50505b5050565b600081111561339c5780600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d89190614af4565b9250508190555080600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461332e9190614c60565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161339391906141fa565b60405180910390a35b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081156133d257600090505b6133db84613dbe565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b815260040161344296959493929190615856565b60606040518083038185885af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348591906158cc565b50505050505050565b606460016009600a6134a091906149fb565b6305f5e1006134af9190614a46565b6134b99190614a46565b6134c39190614bc3565b600581905550606460016009600a6134db91906149fb565b6305f5e1006134ea9190614a46565b6134f49190614a46565b6134fe9190614bc3565b6006819055506001601160006101000a81548160ff02191690831515021790555043600481905550565b6001601160016101000a81548160ff021916908315150217905550600061354e30611baa565b9050600754811015801561356e5750601160009054906101000a900460ff165b156136a95760085481106135825760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff16846135ba9190614a46565b6135c49190614bc3565b6135ce9190614bc3565b9050600081836135de9190614af4565b90506009600a6135ee91906149fb565b81111561368d57600047905061360382612ed5565b600081476136119190614af4565b90506000600260069054906101000a900461ffff1661ffff16111561368a576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff16836136679190614a46565b6136719190614bc3565b905061367c85613dbe565b613688858260006133a0565b505b50505b600047905060008111156136a5576136a4816130f4565b5b5050505b506000601160016101000a81548160ff021916908315150217905550565b600080600a600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff166004546136ff9190614c60565b6137099190614c60565b6137139190614c60565b431080156137405750600060169054906101000a900460ff1660ff1660045461373c9190614c60565b4310155b1561395e57601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138cc57600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561383b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138855743600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146138c75780806138c39061591f565b9150505b613922565b43600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361392157808061391d9061591f565b9150505b5b60003a111561395d57483a148061394857506404a817c800486139459190614c60565b3a115b1561395c5780806139589061591f565b9150505b5b5b60008160ff161491505092915050565b60008060019050601160009054906101000a900460ff1680156139db5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a315750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613afa57600554831115613a495760009050613af9565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613aee575060065483600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aec9190614c60565b115b15613af857600090505b5b5b809150509392505050565b600080601160009054906101000a900460ff161580613b6d5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80613bc15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bcf5760009050613db3565b600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454613c029190614c60565b613c0c9190614c60565b4310613d2357601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c95576064600260009054906101000a900460ff1660ff1684613c849190614a46565b613c8e9190614bc3565b9050613d1e565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d18576064600260019054906101000a900460ff1660ff1684613d079190614a46565b613d119190614bc3565b9050613d1d565b600090505b5b613db2565b600060169054906101000a900460ff1660ff16600454613d439190614c60565b4310613d7a576064600060159054906101000a900460ff1660ff1684613d699190614a46565b613d739190614bc3565b9050613db1565b6004544310613db0576064600060149054906101000a900460ff1660ff1684613da39190614a46565b613dad9190614bc3565b90505b5b5b5b809150509392505050565b80600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613fa5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613f9c91906141fa565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fe2578082015181840152602081019050613fc7565b60008484015250505050565b6000601f19601f8301169050919050565b600061400a82613fa8565b6140148185613fb3565b9350614024818560208601613fc4565b61402d81613fee565b840191505092915050565b600060208201905081810360008301526140528184613fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408f82614064565b9050919050565b61409f81614084565b81146140aa57600080fd5b50565b6000813590506140bc81614096565b92915050565b6000819050919050565b6140d5816140c2565b81146140e057600080fd5b50565b6000813590506140f2816140cc565b92915050565b6000806040838503121561410f5761410e61405a565b5b600061411d858286016140ad565b925050602061412e858286016140e3565b9150509250929050565b60008115159050919050565b61414d81614138565b82525050565b60006020820190506141686000830184614144565b92915050565b61417781614084565b82525050565b6000602082019050614192600083018461416e565b92915050565b6000806000606084860312156141b1576141b061405a565b5b60006141bf868287016140ad565b93505060206141d0868287016140ad565b92505060406141e1868287016140ad565b9150509250925092565b6141f4816140c2565b82525050565b600060208201905061420f60008301846141eb565b92915050565b60008060006060848603121561422e5761422d61405a565b5b600061423c868287016140ad565b935050602061424d868287016140ad565b925050604061425e868287016140e3565b9150509250925092565b600060ff82169050919050565b61427e81614268565b82525050565b60006020820190506142996000830184614275565b92915050565b6142a881614268565b81146142b357600080fd5b50565b6000813590506142c58161429f565b92915050565b6142d481614138565b81146142df57600080fd5b50565b6000813590506142f1816142cb565b92915050565b6000806040838503121561430e5761430d61405a565b5b600061431c858286016142b6565b925050602061432d858286016142e2565b9150509250929050565b600061ffff82169050919050565b61434e81614337565b811461435957600080fd5b50565b60008135905061436b81614345565b92915050565b600080604083850312156143885761438761405a565b5b60006143968582860161435c565b92505060206143a78582860161435c565b9150509250929050565b6000602082840312156143c7576143c661405a565b5b60006143d5848285016140e3565b91505092915050565b600080604083850312156143f5576143f461405a565b5b6000614403858286016142b6565b9250506020614414858286016142b6565b9150509250929050565b6000806000606084860312156144375761443661405a565b5b6000614445868287016140ad565b9350506020614456868287016142e2565b9250506040614467868287016142e2565b9150509250925092565b6000602082840312156144875761448661405a565b5b6000614495848285016140ad565b91505092915050565b6144a781614337565b82525050565b60006060820190506144c2600083018661449e565b6144cf602083018561449e565b6144dc604083018461449e565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f840112614509576145086144e4565b5b8235905067ffffffffffffffff811115614526576145256144e9565b5b602083019150836020820283011115614542576145416144ee565b5b9250929050565b60008083601f84011261455f5761455e6144e4565b5b8235905067ffffffffffffffff81111561457c5761457b6144e9565b5b602083019150836020820283011115614598576145976144ee565b5b9250929050565b600080600080604085870312156145b9576145b861405a565b5b600085013567ffffffffffffffff8111156145d7576145d661405f565b5b6145e3878288016144f3565b9450945050602085013567ffffffffffffffff8111156146065761460561405f565b5b61461287828801614549565b925092505092959194509250565b6000806000606084860312156146395761463861405a565b5b60006146478682870161435c565b93505060206146588682870161435c565b92505060406146698682870161435c565b9150509250925092565b600063ffffffff82169050919050565b61468c81614673565b811461469757600080fd5b50565b6000813590506146a981614683565b92915050565b600080600080608085870312156146c9576146c861405a565b5b60006146d78782880161469a565b94505060206146e88782880161469a565b93505060406146f98782880161469a565b925050606061470a8782880161469a565b91505092959194509250565b6000806040838503121561472d5761472c61405a565b5b600061473b858286016140ad565b925050602061474c858286016140ad565b9150509250929050565b600061476182614064565b9050919050565b61477181614756565b811461477c57600080fd5b50565b60008135905061478e81614768565b92915050565b6000602082840312156147aa576147a961405a565b5b60006147b88482850161477f565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b60006147f7601883613fb3565b9150614802826147c1565b602082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000614863601783613fb3565b915061486e8261482d565b602082019050919050565b6000602082019050818103600083015261489281614856565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561491f578086048111156148fb576148fa614899565b5b600185161561490a5780820291505b8081029050614918856148c8565b94506148df565b94509492505050565b60008261493857600190506149f4565b8161494657600090506149f4565b816001811461495c576002811461496657614995565b60019150506149f4565b60ff84111561497857614977614899565b5b8360020a91508482111561498f5761498e614899565b5b506149f4565b5060208310610133831016604e8410600b84101617156149ca5782820a9050838111156149c5576149c4614899565b5b6149f4565b6149d784848460016148d5565b925090508184048111156149ee576149ed614899565b5b81810290505b9392505050565b6000614a06826140c2565b9150614a1183614268565b9250614a3e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614928565b905092915050565b6000614a51826140c2565b9150614a5c836140c2565b9250828202614a6a816140c2565b91508282048414831517614a8157614a80614899565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614abe601083613fb3565b9150614ac982614a88565b602082019050919050565b60006020820190508181036000830152614aed81614ab1565b9050919050565b6000614aff826140c2565b9150614b0a836140c2565b9250828203905081811115614b2257614b21614899565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b6000614b5e601a83613fb3565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bce826140c2565b9150614bd9836140c2565b925082614be957614be8614b94565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614c2a600683613fb3565b9150614c3582614bf4565b602082019050919050565b60006020820190508181036000830152614c5981614c1d565b9050919050565b6000614c6b826140c2565b9150614c76836140c2565b9250828201905080821115614c8e57614c8d614899565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614cca600a83613fb3565b9150614cd582614c94565b602082019050919050565b60006020820190508181036000830152614cf981614cbd565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b6000614d36600e83613fb3565b9150614d4182614d00565b602082019050919050565b60006020820190508181036000830152614d6581614d29565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000614da2600f83613fb3565b9150614dad82614d6c565b602082019050919050565b60006020820190508181036000830152614dd181614d95565b9050919050565b6000614de382614268565b9150614dee83614268565b9250828201905060ff811115614e0757614e06614899565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614e43601283613fb3565b9150614e4e82614e0d565b602082019050919050565b60006020820190508181036000830152614e7281614e36565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614eaf601083613fb3565b9150614eba82614e79565b602082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f57616c6c657420636f756e74206f766572203235302028676173207269736b29600082015250565b6000614f1b602083613fb3565b9150614f2682614ee5565b602082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f4164647265737320616e6420746f6b656e20616d6f756e74206c697374206d6960008201527f736d616368000000000000000000000000000000000000000000000000000000602082015250565b6000614fad602583613fb3565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501d826140c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504f5761504e614899565b5b600182019050919050565b7f546f6b656e2062616c616e6365206c6f776572207468616e2061697264726f7060008201527f20746f74616c0000000000000000000000000000000000000000000000000000602082015250565b60006150b6602683613fb3565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b600060408201905061510160008301856141eb565b61510e60208301846141eb565b9392505050565b600061512082614337565b915061512b83614337565b9250828201905061ffff81111561514557615144614899565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000615181600f83613fb3565b915061518c8261514b565b602082019050919050565b600060208201905081810360008301526151b081615174565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b60006151ed600d83613fb3565b91506151f8826151b7565b602082019050919050565b6000602082019050818103600083015261521c816151e0565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000615259600b83613fb3565b915061526482615223565b602082019050919050565b600060208201905081810360008301526152888161524c565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006152c5600c83613fb3565b91506152d08261528f565b602082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000615331600983613fb3565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b600061539d600f83613fb3565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000615409601d83613fb3565b9150615414826153d3565b602082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000615475601583613fb3565b91506154808261543f565b602082019050919050565b600060208201905081810360008301526154a481615468565b9050919050565b6000815190506154ba81614096565b92915050565b6000602082840312156154d6576154d561405a565b5b60006154e4848285016154ab565b91505092915050565b6000604082019050615502600083018561416e565b61550f602083018461416e565b9392505050565b6000819050919050565b600061553b61553661553184614064565b615516565b614064565b9050919050565b600061554d82615520565b9050919050565b600061555f82615542565b9050919050565b61556f81615554565b82525050565b600060208201905061558a6000830184615566565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b60006155c6601d83613fb3565b91506155d182615590565b602082019050919050565b600060208201905081810360008301526155f5816155b9565b9050919050565b7f4d455620626f7473206e6f7420616c6c6f776564000000000000000000000000600082015250565b6000615632601483613fb3565b915061563d826155fc565b602082019050919050565b6000602082019050818103600083015261566181615625565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b600061569e601183613fb3565b91506156a982615668565b602082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061572861572361571e84615703565b615516565b6140c2565b9050919050565b6157388161570d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61577381614084565b82525050565b6000615785838361576a565b60208301905092915050565b6000602082019050919050565b60006157a98261573e565b6157b38185615749565b93506157be8361575a565b8060005b838110156157ef5781516157d68882615779565b97506157e183615791565b9250506001810190506157c2565b5085935050505092915050565b600060a08201905061581160008301886141eb565b61581e602083018761572f565b8181036040830152615830818661579e565b905061583f606083018561416e565b61584c60808301846141eb565b9695505050505050565b600060c08201905061586b600083018961416e565b61587860208301886141eb565b615885604083018761572f565b615892606083018661572f565b61589f608083018561416e565b6158ac60a08301846141eb565b979650505050505050565b6000815190506158c6816140cc565b92915050565b6000806000606084860312156158e5576158e461405a565b5b60006158f3868287016158b7565b9350506020615904868287016158b7565b9250506040615915868287016158b7565b9150509250925092565b600061592a82614268565b915060ff820361593d5761593c614899565b5b60018201905091905056fea264697066735822122088757376c47e2038de2f8d92a474372e999e4f7a9be661149e8db43479528f3f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80635a90a49e1161010d5780638da5cb5b116100a0578063c3f70b521161006f578063c3f70b52146106fa578063dd62ed3e14610725578063e8078d9414610762578063f2fde38b1461076c578063f8b45b0514610795576101f9565b80638da5cb5b1461063e57806395d89b4114610669578063a6097b0a14610694578063a9059cbb146106bd576101f9565b806370a08231116100dc57806370a0823114610584578063715018a6146105c157806376a39c28146105d85780638d3e6e4014610601576101f9565b80635a90a49e146104c657806362b9bbb6146105035780636373ea691461052e578063672434821461055b576101f9565b8063313ce567116101855780634706240211610154578063470624021461041e5780634d4ce935146104495780634fcd24461461047457806357ff135a1461049d576101f9565b8063313ce56714610376578063368f4800146103a157806342966c68146103ca57806346b89834146103f3576101f9565b806318160ddd116101c157806318160ddd146102ba57806323b872dd146102e55780632b14ca56146103225780632fb528ba1461034d576101f9565b806306fdde03146101fe578063095ea7b3146102295780630aae341214610266578063147c9f6d14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107c0565b6040516102209190614038565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b91906140f8565b6107fd565b60405161025d9190614153565b60405180910390f35b34801561027257600080fd5b5061027b6108ef565b604051610288919061417d565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190614198565b610919565b005b3480156102c657600080fd5b506102cf610d08565b6040516102dc91906141fa565b60405180910390f35b3480156102f157600080fd5b5061030c60048036038101906103079190614215565b610d2c565b6040516103199190614153565b60405180910390f35b34801561032e57600080fd5b50610337610f36565b6040516103449190614284565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f91906142f7565b610f4d565b005b34801561038257600080fd5b5061038b6110fc565b6040516103989190614284565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190614371565b611105565b005b3480156103d657600080fd5b506103f160048036038101906103ec91906143b1565b6112c3565b005b3480156103ff57600080fd5b5061040861136f565b60405161041591906141fa565b60405180910390f35b34801561042a57600080fd5b50610433611379565b6040516104409190614284565b60405180910390f35b34801561045557600080fd5b5061045e611390565b60405161046b91906141fa565b60405180910390f35b34801561048057600080fd5b5061049b600480360381019061049691906143de565b61139a565b005b3480156104a957600080fd5b506104c460048036038101906104bf919061441e565b6114b4565b005b3480156104d257600080fd5b506104ed60048036038101906104e89190614471565b611691565b6040516104fa9190614153565b60405180910390f35b34801561050f57600080fd5b506105186116e7565b604051610525919061417d565b60405180910390f35b34801561053a57600080fd5b50610543611711565b604051610552939291906144ad565b60405180910390f35b34801561056757600080fd5b50610582600480360381019061057d919061459f565b611752565b005b34801561059057600080fd5b506105ab60048036038101906105a69190614471565b611baa565b6040516105b891906141fa565b60405180910390f35b3480156105cd57600080fd5b506105d6611bf3565b005b3480156105e457600080fd5b506105ff60048036038101906105fa9190614620565b611cfc565b005b34801561060d57600080fd5b5061062860048036038101906106239190614471565b611e65565b6040516106359190614153565b60405180910390f35b34801561064a57600080fd5b50610653611ebb565b604051610660919061417d565b60405180910390f35b34801561067557600080fd5b5061067e611ee4565b60405161068b9190614038565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b691906146af565b611f21565b005b3480156106c957600080fd5b506106e460048036038101906106df91906140f8565b612160565b6040516106f19190614153565b60405180910390f35b34801561070657600080fd5b5061070f6121bd565b60405161071c91906141fa565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190614716565b6121c7565b60405161075991906141fa565b60405180910390f35b61076a61224e565b005b34801561077857600080fd5b50610793600480360381019061078e9190614794565b612770565b005b3480156107a157600080fd5b506107aa612878565b6040516107b791906141fa565b60405180910390f35b60606040518060400160405280600981526020017f5072696d65642041490000000000000000000000000000000000000000000000815250905090565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516108dd91906141fa565b60405180910390a36001905092915050565b60006002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099e9061480d565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610a4b5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015610aa15750601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b610ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad790614879565b60405180910390fd5b826002600a6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b60006009600a610d1891906149fb565b6305f5e100610d279190614a46565b905090565b6000610d3784612882565b610d76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6d90614ad4565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610f225781600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ea19190614af4565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610f2d84848461295d565b90509392505050565b6000600260019054906101000a900460ff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd29061480d565b60405180910390fd5b6001601160016101000a81548160ff02191690831515021790555060648260ff16111561103d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103490614b74565b60405180910390fd5b600060648360ff1661104e30611baa565b6110589190614a46565b6110629190614bc3565b90506009600a61107291906149fb565b8111156110835761108281612ed5565b5b81156110dc576000479050600081116110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614c40565b60405180910390fd5b6110da476130f4565b505b506000601160016101000a81548160ff0219169083151502179055505050565b60006009905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118a9061480d565b60405180910390fd5b600060016103e88461ffff166009600a6111ad91906149fb565b6305f5e1006111bc9190614a46565b6111c69190614a46565b6111d09190614bc3565b6111da9190614c60565b9050600554811015611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614ce0565b60405180910390fd5b80600581905550600060016103e88461ffff166009600a61124291906149fb565b6305f5e1006112519190614a46565b61125b9190614a46565b6112659190614bc3565b61126f9190614c60565b90506006548110156112b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ad90614d4c565b60405180910390fd5b8060068190555050505050565b60006112ce33611baa565b905080821115611313576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130a90614db8565b60405180910390fd5b61131d3383613280565b3373ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68360405161136391906141fa565b60405180910390a25050565b6000600754905090565b6000600260009054906101000a900460ff16905090565b6000600854905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141f9061480d565b60405180910390fd5b604281836114369190614dd8565b60ff16111561147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190614e59565b60405180910390fd5b81600260006101000a81548160ff021916908360ff16021790555080600260016101000a81548160ff021916908360ff1602179055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115399061480d565b60405180910390fd5b808061154b5750815b156115de57601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156115dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d490614ec5565b60405180910390fd5b5b81600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600060028054906101000a900461ffff16600260049054906101000a900461ffff16600260069054906101000a900461ffff16925092509250909192565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061480d565b60405180910390fd5b60fa848490501115611827576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181e90614f31565b60405180910390fd5b81819050848490501461186f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186690614fc3565b60405180910390fd5b6000805b858590508110156118d0576009600a61188c91906149fb565b84848381811061189f5761189e614fe3565b5b905060200201356118b09190614a46565b826118bb9190614c60565b915080806118c890615012565b915050611873565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194a906150cc565b60405180910390fd5b60005b85859050811015611b66576009600a61196f91906149fb565b84848381811061198257611981614fe3565b5b905060200201356119939190614a46565b600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e19190614af4565b925050819055506009600a6119f691906149fb565b848483818110611a0957611a08614fe3565b5b90506020020135611a1a9190614a46565b60096000888885818110611a3157611a30614fe3565b5b9050602002016020810190611a469190614471565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a8f9190614c60565b92505081905550858582818110611aa957611aa8614fe3565b5b9050602002016020810190611abe9190614471565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a611b1a91906149fb565b878786818110611b2d57611b2c614fe3565b5b90506020020135611b3e9190614a46565b604051611b4b91906141fa565b60405180910390a38080611b5e90615012565b915050611956565b507f71cc7095cc35ed4701c217a8efb440732eb0737da67f6548c008ac26fba954648585905082604051611b9b9291906150ec565b60405180910390a15050505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c789061480d565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051611cf2919061417d565b60405180910390a1565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d819061480d565b60405180910390fd5b6000818385611d999190615115565b611da39190615115565b905060008161ffff1611611dec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de390615197565b60405180910390fd5b83600260066101000a81548161ffff021916908361ffff160217905550826002806101000a81548161ffff021916908361ffff16021790555081600260046101000a81548161ffff021916908361ffff16021790555080600260086101000a81548161ffff021916908361ffff16021790555050505050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600381526020017f5041490000000000000000000000000000000000000000000000000000000000815250905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611faf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa69061480d565b60405180910390fd5b8263ffffffff168463ffffffff166009600a611fcb91906149fb565b6305f5e100611fda9190614a46565b611fe49190614a46565b611fee9190614bc3565b6007819055508063ffffffff168263ffffffff166009600a61201091906149fb565b6305f5e10061201f9190614a46565b6120299190614a46565b6120339190614bc3565b6008819055506007546008541015612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207790615203565b60405180910390fd5b620186a06009600a61209291906149fb565b6305f5e1006120a19190614a46565b6120ab9190614bc3565b600854116120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e59061526f565b60405180910390fd5b60646009600a6120fe91906149fb565b6305f5e10061210d9190614a46565b6121179190614bc3565b6008541061215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906152db565b60405180910390fd5b50505050565b600061216b33612882565b6121aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a190614ad4565b60405180910390fd5b6121b533848461295d565b905092915050565b6000600554905090565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d39061480d565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550600073ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f90615347565b60405180910390fd5b601160009054906101000a900460ff16156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906153b3565b60405180910390fd5b60003411806123e75750600047115b612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d9061541f565b60405180910390fd5b6000600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054116124a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249f9061548b565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061253991906154c0565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e691906154c0565b6040518363ffffffff1660e01b81526004016126039291906154ed565b6020604051808303816000875af1158015612622573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061264691906154c0565b600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126d1600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544760006133a0565b600160106000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061275361348e565b6000601160016101000a81548160ff021916908315150217905550565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146127fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f59061480d565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861638160405161286d9190615575565b60405180910390a150565b6000600654905090565b60008060009050601160009054906101000a900460ff16156128a75760019050612954565b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129495750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561295357600190505b5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c4906155dc565b60405180910390fd5b601160009054906101000a900460ff16612ac357600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a835750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab990614ad4565b60405180910390fd5b5b601160019054906101000a900460ff16158015612b295750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b3757612b36613528565b5b612b4184846136c7565b612b80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7790615648565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015612be857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c40575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612c9057612c5084848461396e565b612c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c86906156b4565b60405180910390fd5b5b6000612c9d858585613b05565b905060008184612cad9190614af4565b905083600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cfa9190614af4565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115612dd55781600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d919190614c60565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b80600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612e209190614c60565b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612ec091906141fa565b60405180910390a36001925050509392505050565b612ede81613dbe565b6000600267ffffffffffffffff811115612efb57612efa6156d4565b5b604051908082528060200260200182016040528015612f295781602001602082028036833780820191505090505b5090503081600081518110612f4157612f40614fe3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300c91906154c0565b816001815181106130205761301f614fe3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130be9594939291906157fc565b600060405180830381600087803b1580156130d857600080fd5b505af11580156130ec573d6000803e3d6000fd5b505050505050565b6000600260049054906101000a900461ffff1660028054906101000a900461ffff166131209190615115565b905060008161ffff16111561327c5760008161ffff1660028054906101000a900461ffff1661ffff16846131549190614a46565b61315e9190614bc3565b905060008261ffff16600260049054906101000a900461ffff1661ffff16856131879190614a46565b6131919190614bc3565b90506000821115613206576002600a9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613204573d6000803e3d6000fd5b505b600081111561327957600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613277573d6000803e3d6000fd5b505b50505b5050565b600081111561339c5780600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546132d89190614af4565b9250508190555080600960008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461332e9190614c60565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161339391906141fa565b60405180910390a35b5050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081156133d257600090505b6133db84613dbe565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308760008087426040518863ffffffff1660e01b815260040161344296959493929190615856565b60606040518083038185885af1158015613460573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061348591906158cc565b50505050505050565b606460016009600a6134a091906149fb565b6305f5e1006134af9190614a46565b6134b99190614a46565b6134c39190614bc3565b600581905550606460016009600a6134db91906149fb565b6305f5e1006134ea9190614a46565b6134f49190614a46565b6134fe9190614bc3565b6006819055506001601160006101000a81548160ff02191690831515021790555043600481905550565b6001601160016101000a81548160ff021916908315150217905550600061354e30611baa565b9050600754811015801561356e5750601160009054906101000a900460ff165b156136a95760085481106135825760085490505b600060028060089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff16846135ba9190614a46565b6135c49190614bc3565b6135ce9190614bc3565b9050600081836135de9190614af4565b90506009600a6135ee91906149fb565b81111561368d57600047905061360382612ed5565b600081476136119190614af4565b90506000600260069054906101000a900461ffff1661ffff16111561368a576000600260089054906101000a900461ffff1661ffff16600260069054906101000a900461ffff1661ffff16836136679190614a46565b6136719190614bc3565b905061367c85613dbe565b613688858260006133a0565b505b50505b600047905060008111156136a5576136a4816130f4565b5b5050505b506000601160016101000a81548160ff021916908315150217905550565b600080600a600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff166004546136ff9190614c60565b6137099190614c60565b6137139190614c60565b431080156137405750600060169054906101000a900460ff1660ff1660045461373c9190614c60565b4310155b1561395e57601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156138cc57600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561383b5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138855743600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3273ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146138c75780806138c39061591f565b9150505b613922565b43600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020540361392157808061391d9061591f565b9150505b5b60003a111561395d57483a148061394857506404a817c800486139459190614c60565b3a115b1561395c5780806139589061591f565b9150505b5b5b60008160ff161491505092915050565b60008060019050601160009054906101000a900460ff1680156139db5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015613a315750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613afa57600554831115613a495760009050613af9565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613aee575060065483600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613aec9190614c60565b115b15613af857600090505b5b5b809150509392505050565b600080601160009054906101000a900460ff161580613b6d5750600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80613bc15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613bcf5760009050613db3565b600060179054906101000a900460ff1660ff16600060169054906101000a900460ff1660ff16600454613c029190614c60565b613c0c9190614c60565b4310613d2357601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613c95576064600260009054906101000a900460ff1660ff1684613c849190614a46565b613c8e9190614bc3565b9050613d1e565b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613d18576064600260019054906101000a900460ff1660ff1684613d079190614a46565b613d119190614bc3565b9050613d1d565b600090505b5b613db2565b600060169054906101000a900460ff1660ff16600454613d439190614c60565b4310613d7a576064600060159054906101000a900460ff1660ff1684613d699190614a46565b613d739190614bc3565b9050613db1565b6004544310613db0576064600060149054906101000a900460ff1660ff1684613da39190614a46565b613dad9190614bc3565b90505b5b5b5b809150509392505050565b80600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015613fa5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff604051613f9c91906141fa565b60405180910390a35b50565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fe2578082015181840152602081019050613fc7565b60008484015250505050565b6000601f19601f8301169050919050565b600061400a82613fa8565b6140148185613fb3565b9350614024818560208601613fc4565b61402d81613fee565b840191505092915050565b600060208201905081810360008301526140528184613fff565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408f82614064565b9050919050565b61409f81614084565b81146140aa57600080fd5b50565b6000813590506140bc81614096565b92915050565b6000819050919050565b6140d5816140c2565b81146140e057600080fd5b50565b6000813590506140f2816140cc565b92915050565b6000806040838503121561410f5761410e61405a565b5b600061411d858286016140ad565b925050602061412e858286016140e3565b9150509250929050565b60008115159050919050565b61414d81614138565b82525050565b60006020820190506141686000830184614144565b92915050565b61417781614084565b82525050565b6000602082019050614192600083018461416e565b92915050565b6000806000606084860312156141b1576141b061405a565b5b60006141bf868287016140ad565b93505060206141d0868287016140ad565b92505060406141e1868287016140ad565b9150509250925092565b6141f4816140c2565b82525050565b600060208201905061420f60008301846141eb565b92915050565b60008060006060848603121561422e5761422d61405a565b5b600061423c868287016140ad565b935050602061424d868287016140ad565b925050604061425e868287016140e3565b9150509250925092565b600060ff82169050919050565b61427e81614268565b82525050565b60006020820190506142996000830184614275565b92915050565b6142a881614268565b81146142b357600080fd5b50565b6000813590506142c58161429f565b92915050565b6142d481614138565b81146142df57600080fd5b50565b6000813590506142f1816142cb565b92915050565b6000806040838503121561430e5761430d61405a565b5b600061431c858286016142b6565b925050602061432d858286016142e2565b9150509250929050565b600061ffff82169050919050565b61434e81614337565b811461435957600080fd5b50565b60008135905061436b81614345565b92915050565b600080604083850312156143885761438761405a565b5b60006143968582860161435c565b92505060206143a78582860161435c565b9150509250929050565b6000602082840312156143c7576143c661405a565b5b60006143d5848285016140e3565b91505092915050565b600080604083850312156143f5576143f461405a565b5b6000614403858286016142b6565b9250506020614414858286016142b6565b9150509250929050565b6000806000606084860312156144375761443661405a565b5b6000614445868287016140ad565b9350506020614456868287016142e2565b9250506040614467868287016142e2565b9150509250925092565b6000602082840312156144875761448661405a565b5b6000614495848285016140ad565b91505092915050565b6144a781614337565b82525050565b60006060820190506144c2600083018661449e565b6144cf602083018561449e565b6144dc604083018461449e565b949350505050565b600080fd5b600080fd5b600080fd5b60008083601f840112614509576145086144e4565b5b8235905067ffffffffffffffff811115614526576145256144e9565b5b602083019150836020820283011115614542576145416144ee565b5b9250929050565b60008083601f84011261455f5761455e6144e4565b5b8235905067ffffffffffffffff81111561457c5761457b6144e9565b5b602083019150836020820283011115614598576145976144ee565b5b9250929050565b600080600080604085870312156145b9576145b861405a565b5b600085013567ffffffffffffffff8111156145d7576145d661405f565b5b6145e3878288016144f3565b9450945050602085013567ffffffffffffffff8111156146065761460561405f565b5b61461287828801614549565b925092505092959194509250565b6000806000606084860312156146395761463861405a565b5b60006146478682870161435c565b93505060206146588682870161435c565b92505060406146698682870161435c565b9150509250925092565b600063ffffffff82169050919050565b61468c81614673565b811461469757600080fd5b50565b6000813590506146a981614683565b92915050565b600080600080608085870312156146c9576146c861405a565b5b60006146d78782880161469a565b94505060206146e88782880161469a565b93505060406146f98782880161469a565b925050606061470a8782880161469a565b91505092959194509250565b6000806040838503121561472d5761472c61405a565b5b600061473b858286016140ad565b925050602061474c858286016140ad565b9150509250929050565b600061476182614064565b9050919050565b61477181614756565b811461477c57600080fd5b50565b60008135905061478e81614768565b92915050565b6000602082840312156147aa576147a961405a565b5b60006147b88482850161477f565b91505092915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b60006147f7601883613fb3565b9150614802826147c1565b602082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b7f4c502063616e6e6f74206265207461782077616c6c6574000000000000000000600082015250565b6000614863601783613fb3565b915061486e8261482d565b602082019050919050565b6000602082019050818103600083015261489281614856565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561491f578086048111156148fb576148fa614899565b5b600185161561490a5780820291505b8081029050614918856148c8565b94506148df565b94509492505050565b60008261493857600190506149f4565b8161494657600090506149f4565b816001811461495c576002811461496657614995565b60019150506149f4565b60ff84111561497857614977614899565b5b8360020a91508482111561498f5761498e614899565b5b506149f4565b5060208310610133831016604e8410600b84101617156149ca5782820a9050838111156149c5576149c4614899565b5b6149f4565b6149d784848460016148d5565b925090508184048111156149ee576149ed614899565b5b81810290505b9392505050565b6000614a06826140c2565b9150614a1183614268565b9250614a3e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614928565b905092915050565b6000614a51826140c2565b9150614a5c836140c2565b9250828202614a6a816140c2565b91508282048414831517614a8157614a80614899565b5b5092915050565b7f54726164696e67206e6f74206f70656e00000000000000000000000000000000600082015250565b6000614abe601083613fb3565b9150614ac982614a88565b602082019050919050565b60006020820190508181036000830152614aed81614ab1565b9050919050565b6000614aff826140c2565b9150614b0a836140c2565b9250828203905081811115614b2257614b21614899565b5b92915050565b7f43616e6e6f742073776170206d6f7265207468616e2031303025000000000000600082015250565b6000614b5e601a83613fb3565b9150614b6982614b28565b602082019050919050565b60006020820190508181036000830152614b8d81614b51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bce826140c2565b9150614bd9836140c2565b925082614be957614be8614b94565b5b828204905092915050565b7f4e6f204554480000000000000000000000000000000000000000000000000000600082015250565b6000614c2a600683613fb3565b9150614c3582614bf4565b602082019050919050565b60006020820190508181036000830152614c5981614c1d565b9050919050565b6000614c6b826140c2565b9150614c76836140c2565b9250828201905080821115614c8e57614c8d614899565b5b92915050565b7f747820746f6f206c6f7700000000000000000000000000000000000000000000600082015250565b6000614cca600a83613fb3565b9150614cd582614c94565b602082019050919050565b60006020820190508181036000830152614cf981614cbd565b9050919050565b7f77616c6c657420746f6f206c6f77000000000000000000000000000000000000600082015250565b6000614d36600e83613fb3565b9150614d4182614d00565b602082019050919050565b60006020820190508181036000830152614d6581614d29565b9050919050565b7f62616c616e636520746f6f206c6f770000000000000000000000000000000000600082015250565b6000614da2600f83613fb3565b9150614dad82614d6c565b602082019050919050565b60006020820190508181036000830152614dd181614d95565b9050919050565b6000614de382614268565b9150614dee83614268565b9250828201905060ff811115614e0757614e06614899565b5b92915050565b7f526f756e647472697020746f6f20686967680000000000000000000000000000600082015250565b6000614e43601283613fb3565b9150614e4e82614e0d565b602082019050919050565b60006020820190508181036000830152614e7281614e36565b9050919050565b7f43616e6e6f74206578656d7074204c5000000000000000000000000000000000600082015250565b6000614eaf601083613fb3565b9150614eba82614e79565b602082019050919050565b60006020820190508181036000830152614ede81614ea2565b9050919050565b7f57616c6c657420636f756e74206f766572203235302028676173207269736b29600082015250565b6000614f1b602083613fb3565b9150614f2682614ee5565b602082019050919050565b60006020820190508181036000830152614f4a81614f0e565b9050919050565b7f4164647265737320616e6420746f6b656e20616d6f756e74206c697374206d6960008201527f736d616368000000000000000000000000000000000000000000000000000000602082015250565b6000614fad602583613fb3565b9150614fb882614f51565b604082019050919050565b60006020820190508181036000830152614fdc81614fa0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061501d826140c2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361504f5761504e614899565b5b600182019050919050565b7f546f6b656e2062616c616e6365206c6f776572207468616e2061697264726f7060008201527f20746f74616c0000000000000000000000000000000000000000000000000000602082015250565b60006150b6602683613fb3565b91506150c18261505a565b604082019050919050565b600060208201905081810360008301526150e5816150a9565b9050919050565b600060408201905061510160008301856141eb565b61510e60208301846141eb565b9392505050565b600061512082614337565b915061512b83614337565b9250828201905061ffff81111561514557615144614899565b5b92915050565b7f416c6c2063616e6e6f7420626520300000000000000000000000000000000000600082015250565b6000615181600f83613fb3565b915061518c8261514b565b602082019050919050565b600060208201905081810360008301526151b081615174565b9050919050565b7f4d696e2f4d6178206572726f7200000000000000000000000000000000000000600082015250565b60006151ed600d83613fb3565b91506151f8826151b7565b602082019050919050565b6000602082019050818103600083015261521c816151e0565b9050919050565b7f4d617820746f6f206c6f77000000000000000000000000000000000000000000600082015250565b6000615259600b83613fb3565b915061526482615223565b602082019050919050565b600060208201905081810360008301526152888161524c565b9050919050565b7f4d617820746f6f20686967680000000000000000000000000000000000000000600082015250565b60006152c5600c83613fb3565b91506152d08261528f565b602082019050919050565b600060208201905081810360008301526152f4816152b8565b9050919050565b7f4c50206578697374730000000000000000000000000000000000000000000000600082015250565b6000615331600983613fb3565b915061533c826152fb565b602082019050919050565b6000602082019050818103600083015261536081615324565b9050919050565b7f74726164696e67206973206f70656e0000000000000000000000000000000000600082015250565b600061539d600f83613fb3565b91506153a882615367565b602082019050919050565b600060208201905081810360008301526153cc81615390565b9050919050565b7f4e6f2045544820696e20636f6e7472616374206f72206d657373616765000000600082015250565b6000615409601d83613fb3565b9150615414826153d3565b602082019050919050565b60006020820190508181036000830152615438816153fc565b9050919050565b7f4e6f20746f6b656e7320696e20636f6e74726163740000000000000000000000600082015250565b6000615475601583613fb3565b91506154808261543f565b602082019050919050565b600060208201905081810360008301526154a481615468565b9050919050565b6000815190506154ba81614096565b92915050565b6000602082840312156154d6576154d561405a565b5b60006154e4848285016154ab565b91505092915050565b6000604082019050615502600083018561416e565b61550f602083018461416e565b9392505050565b6000819050919050565b600061553b61553661553184614064565b615516565b614064565b9050919050565b600061554d82615520565b9050919050565b600061555f82615542565b9050919050565b61556f81615554565b82525050565b600060208201905061558a6000830184615566565b92915050565b7f4e6f207472616e73666572732066726f6d205a65726f2077616c6c6574000000600082015250565b60006155c6601d83613fb3565b91506155d182615590565b602082019050919050565b600060208201905081810360008301526155f5816155b9565b9050919050565b7f4d455620626f7473206e6f7420616c6c6f776564000000000000000000000000600082015250565b6000615632601483613fb3565b915061563d826155fc565b602082019050919050565b6000602082019050818103600083015261566181615625565b9050919050565b7f54582065786365656473206c696d697473000000000000000000000000000000600082015250565b600061569e601183613fb3565b91506156a982615668565b602082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000819050919050565b600061572861572361571e84615703565b615516565b6140c2565b9050919050565b6157388161570d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61577381614084565b82525050565b6000615785838361576a565b60208301905092915050565b6000602082019050919050565b60006157a98261573e565b6157b38185615749565b93506157be8361575a565b8060005b838110156157ef5781516157d68882615779565b97506157e183615791565b9250506001810190506157c2565b5085935050505092915050565b600060a08201905061581160008301886141eb565b61581e602083018761572f565b8181036040830152615830818661579e565b905061583f606083018561416e565b61584c60808301846141eb565b9695505050505050565b600060c08201905061586b600083018961416e565b61587860208301886141eb565b615885604083018761572f565b615892606083018661572f565b61589f608083018561416e565b6158ac60a08301846141eb565b979650505050505050565b6000815190506158c6816140cc565b92915050565b6000806000606084860312156158e5576158e461405a565b5b60006158f3868287016158b7565b9350506020615904868287016158b7565b9250506040615915868287016158b7565b9150509250925092565b600061592a82614268565b915060ff820361593d5761593c614899565b5b60018201905091905056fea264697066735822122088757376c47e2038de2f8d92a474372e999e4f7a9be661149e8db43479528f3f64736f6c63430008130033

Deployed Bytecode Sourcemap

2273:17533:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5557:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5895:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13589:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13809:535;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5287:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6352:404;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12678:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18037:567;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5381:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14751:462;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18612:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14557:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12588:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14653:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12956:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12330:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12092:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13696:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12772:178;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18881:922;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5643:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2076:137;;;;;;;;;;;;;:::i;:::-;;13147:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12209:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1826:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5467:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15221:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6119:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14453:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5754:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7089:608;;;:::i;:::-;;1913:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14352:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5557:80;5605:13;5629:5;;;;;;;;;;;;;;;;;5622:12;;5557:80;:::o;5895:216::-;5970:4;6022:6;5987:11;:23;5999:10;5987:23;;;;;;;;;;;;;;;:32;6011:7;5987:32;;;;;;;;;;;;;;;:41;;;;6065:7;6044:37;;6053:10;6044:37;;;6074:6;6044:37;;;;;;:::i;:::-;;;;;;;;6099:4;6092:11;;5895:216;;;;:::o;13589:101::-;13639:7;13666:16;;;;;;;;;;;13659:23;;13589:101;:::o;13809:535::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13929:5:::1;:16;13935:9;13929:16;;;;;;;;;;;;;;;;;;;;;;;;;13928:17;:40;;;;;13950:5;:18;13956:11;13950:18;;;;;;;;;;;;;;;;;;;;;;;;;13949:19;13928:40;:60;;;;;13973:5;:15;13979:8;13973:15;;;;;;;;;;;;;;;;;;;;;;;;;13972:16;13928:60;13920:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;14064:9;14037:16;;:37;;;;;;;;;;;;;;;;;;14114:11;14085:18;;:41;;;;;;;;;;;;;;;;;;14148:8;14137;;:19;;;;;;;;;;;;;;;;;;14198:4;14177:7;:18;14185:9;14177:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;14236:4;14213:9;:20;14223:9;14213:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14284:4;14261:7;:20;14269:11;14261:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;14332:4;14307:9;:22;14317:11;14307:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;13809:535:::0;;;:::o;5287:88::-;5342:7;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;5353:19;;5287:88;:::o;6352:404::-;6452:4;6477:25;6495:6;6477:17;:25::i;:::-;6469:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;6572:17;6537:11;:19;6549:6;6537:19;;;;;;;;;;;;;;;:31;6557:10;6537:31;;;;;;;;;;;;;;;;:52;6534:157;;6673:6;6639:11;:19;6651:6;6639:19;;;;;;;;;;;;;;;:31;6659:10;6639:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;6605:11;:19;6617:6;6605:19;;;;;;;;;;;;;;;:31;6625:10;6605:31;;;;;;;;;;;;;;;:74;;;;6534:157;6708:40;6722:6;6730:9;6741:6;6708:13;:40::i;:::-;6701:47;;6352:404;;;;;:::o;12678:86::-;12719:5;12744:12;;;;;;;;;;;12737:19;;12678:86;:::o;18037:567::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4225:4:::1;4212:10;;:17;;;;;;;;;;;;;;;;;;18175:3:::2;18155:16;:23;;;;18147:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18220:20;18289:3;18270:16;18243:43;;:24;18261:4;18243:9;:24::i;:::-;:43;;;;:::i;:::-;:49;;;;:::i;:::-;18220:72;;2349:1;18322:2;:15;;;;:::i;:::-;18307:12;:30;18303:97;;;18354:34;18375:12;18354:20;:34::i;:::-;18303:97;18414:7;18410:187;;;18439:18;18460:21;18439:42;;18517:1;18504:10;:14;18496:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;18544:40;18562:21;18544:17;:40::i;:::-;18423:174;18410:187;18136:468;4267:5:::1;4254:10;;:18;;;;;;;;;;;;;;;;;;18037:567:::0;;:::o;5381:80::-;5433:5;2349:1;5442:16;;5381:80;:::o;14751:462::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;14857:16:::1;14923:1;14916:4;14891:22;14876:37;;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;14876:37;;;;:::i;:::-;:44;;;;:::i;:::-;:48;;;;:::i;:::-;14857:67;;14955:12;;14943:8;:24;;14935:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;15008:8;14993:12;:23;;;;15027:20;15092:1;15085:4;15065:17;15050:32;;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;15050:32;;;;:::i;:::-;:39;;;;:::i;:::-;:43;;;;:::i;:::-;15027:66;;15128:16;;15112:12;:32;;15104:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;15193:12;15174:16;:31;;;;14846:367;;14751:462:::0;;:::o;18612:261::-;18662:24;18689:21;18699:10;18689:9;:21::i;:::-;18662:48;;18739:16;18729:6;:26;;18721:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:31;18798:10;18810:6;18786:11;:31::i;:::-;18846:10;18833:32;;;18858:6;18833:32;;;;;;:::i;:::-;;;;;;;;18651:222;18612:261;:::o;14557:90::-;14601:7;14628:11;;14621:18;;14557:90;:::o;12588:84::-;12628:5;12653:11;;;;;;;;;;;12646:18;;12588:84;:::o;14653:90::-;14697:7;14724:11;;14717:18;;14653:90;:::o;12956:183::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13048:2:::1;13040:4;13034:3;:10;;;;:::i;:::-;:16;;;;13026:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;13098:3;13084:11;;:17;;;;;;;;;;;;;;;;;;13127:4;13112:12;;:19;;;;;;;;;;;;;;;;;;12956:183:::0;;:::o;12330:250::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;12427:8:::1;:18;;;;12439:6;12427:18;12423:72;;;12458:5;:13;12464:6;12458:13;;;;;;;;;;;;;;;;;;;;;;;;;12457:14;12449:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;12423:72;12525:6;12505:7;:17;12514:6;12505:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;12564:8;12542:9;:19;12553:6;12542:19;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;12330:250:::0;;;:::o;12092:110::-;12155:4;12179:7;:15;12187:6;12179:15;;;;;;;;;;;;;;;;;;;;;;;;;12172:22;;12092:110;;;:::o;13696:105::-;13748:7;13775:18;;;;;;;;;;;13768:25;;13696:105;:::o;12772:178::-;12815:16;12833:18;12853:9;12885:19;;;;;;;;;;12906:21;;;;;;;;;;;12929:12;;;;;;;;;;;12876:66;;;;;;12772:178;;;:::o;18881:922::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19019:3:::1;18999:9;;:16;;:23;;18991:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19097:12;;:19;;19077:9;;:16;;:39;19069:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;19170:20;19209:6:::0;19205:116:::1;19223:9;;:16;;19219:1;:20;19205:116;;;2349:1;19295:2;:13;;;;:::i;:::-;19277:12;;19290:1;19277:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;19260:49;;;;;:::i;:::-;;;19241:3;;;;;:::i;:::-;;;;19205:116;;;;19364:12;19339:9;:21;19349:10;19339:21;;;;;;;;;;;;;;;;:37;;19331:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;19436:6;19432:298;19450:9;;:16;;19446:1;:20;19432:298;;;2349:1;19532:2;:13;;;;:::i;:::-;19514:12;;19527:1;19514:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;19488:9;:21;19498:10;19488:21;;;;;;;;;;;;;;;;:58;;;;;;;:::i;:::-;;;;;;;;2349:1;19607:2;:13;;;;:::i;:::-;19589:12;;19602:1;19589:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;19561:9;:23;19571:9;;19581:1;19571:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19561:23;;;;;;;;;;;;;;;;:60;;;;;;;:::i;:::-;;;;;;;;19662:9;;19672:1;19662:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19641:70;;19650:10;19641:70;;;2349:1;19695:2;:13;;;;:::i;:::-;19677:12;;19690:1;19677:15;;;;;;;:::i;:::-;;;;;;;;:31;;;;:::i;:::-;19641:70;;;;;;:::i;:::-;;;;;;;;19468:3;;;;;:::i;:::-;;;;19432:298;;;;19747:48;19764:9;;:16;;19782:12;19747:48;;;;;;;:::i;:::-;;;;;;;;18980:823;18881:922:::0;;;;:::o;5643:105::-;5709:7;5727:9;:18;5737:7;5727:18;;;;;;;;;;;;;;;;5720:25;;5643:105;;;:::o;2076:137::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2153:1:::1;2136:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2172:32;2201:1;2172:32;;;;;;:::i;:::-;;;;;;;;2076:137::o:0;13147:434::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;13269:18:::1;13323:17;13305:15;13290:12;:30;;;;:::i;:::-;:50;;;;:::i;:::-;13269:71;;13374:1;13360:11;:15;;;13351:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;13421:12;13406;;:27;;;;;;;;;;;;;;;;;;13466:15;13444:19;::::0;:37:::1;;;;;;;;;;;;;;;;;;13516:17;13492:21;;:41;;;;;;;;;;;;;;;;;;13562:11;13544:15;;:29;;;;;;;;;;;;;;;;;;13258:323;13147:434:::0;;;:::o;12209:114::-;12274:4;12298:9;:17;12308:6;12298:17;;;;;;;;;;;;;;;;;;;;;;;;;12291:24;;12209:114;;;:::o;1826:81::-;1864:7;1892:6;;;;;;;;;;;1885:13;;1826:81;:::o;5467:84::-;5517:13;5541:7;;;;;;;;;;;;;;;;;5534:14;;5467:84;:::o;15221:436::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15383:10:::1;15357:36;;15372:8;15357:23;;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;15357:23;;;;:::i;:::-;:36;;;;:::i;:::-;15343:11;:50;;;;15444:10;15418:36;;15433:8;15418:23;;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;15418:23;;;;:::i;:::-;:36;;;;:::i;:::-;15404:11;:50;;;;15486:11;;15473;;:24;;15465:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;15561:6;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;15546:21;;;;:::i;:::-;15534:11;;:33;15526:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;15629:3;2349:1;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;15614:18;;;;:::i;:::-;15602:11;;:30;15594:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;15221:436:::0;;;;:::o;6119:225::-;6199:4;6224:29;6242:10;6224:17;:29::i;:::-;6216:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6292:44;6306:10;6318:9;6329:6;6292:13;:44::i;:::-;6285:51;;6119:225;;;;:::o;14453:96::-;14502:7;14529:12;;14522:19;;14453:96;:::o;5754:133::-;5838:7;5856:11;:19;5868:6;5856:19;;;;;;;;;;;;;;;:28;5876:7;5856:28;;;;;;;;;;;;;;;;5849:35;;5754:133;;;;:::o;7089:608::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4225:4:::1;4212:10;;:17;;;;;;;;;;;;;;;;;;7193:1:::2;7171:24;;:10;;;;;;;;;;;:24;;;7163:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7229:12;;;;;;;;;;;7228:13;7220:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;7292:1;7280:9;:13;:40;;;;7319:1;7297:21;:23;7280:40;7272:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;7398:1;7373:9;:24;7391:4;7373:24;;;;;;;;;;;;;;;;:26;7365:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7467:18;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7449:58;;;7516:4;7523:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7449:100;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7436:10;;:113;;;;;;;;;;;;;;;;;;7560:69;7574:9;:24;7592:4;7574:24;;;;;;;;;;;;;;;;7600:21;7623:5;7560:13;:69::i;:::-;7660:4;7640:5;:17;7646:10;;;;;;;;;;;7640:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;7675:14;:12;:14::i;:::-;4267:5:::1;4254:10;;:18;;;;;;;;;;;;;;;;;;7089:608::o:0;1913:157::-;1763:6;;;;;;;;;;1749:20;;:10;:20;;;1741:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;2006:8:::1;1997:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2031:30;2052:8;2031:30;;;;;;:::i;:::-;;;;;;;;1913:157:::0;:::o;14352:95::-;14396:7;14423:16;;14416:23;;14352:95;:::o;10893:279::-;10958:4;10974:16;10993:5;10974:24;;11014:12;;;;;;;;;;;11009:124;;;11045:4;11031:18;;11009:124;;;11072:7;:15;11080:6;11072:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;11091:9;:17;11101:6;11091:17;;;;;;;;;;;;;;;;;;;;;;;;;11072:36;11068:65;;;11126:4;11112:18;;11068:65;11009:124;11153:11;11146:18;;;10893:279;;;:::o;9250:1132::-;9342:4;9385:1;9367:20;;:6;:20;;;9359:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9437:12;;;;;;;;;;;9432:113;;9475:7;:15;9483:6;9475:15;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;;9494:9;:17;9504:6;9494:17;;;;;;;;;;;;;;;;;;;;;;;;;9475:36;9467:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9432:113;9561:10;;;;;;;;;;;9560:11;:31;;;;;9575:5;:16;9581:9;9575:16;;;;;;;;;;;;;;;;;;;;;;;;;9560:31;9555:88;;;9610:20;:18;:20::i;:::-;9555:88;9663:31;9676:6;9684:9;9663:12;:31::i;:::-;9655:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;9764:4;9746:23;;:6;:23;;;;:53;;;;;9794:4;9773:26;;:9;:26;;;;9746:53;:73;;;;;9813:6;;;;;;;;;;9803:16;;:6;:16;;;;9746:73;9741:179;;;9846:39;9859:6;9867:9;9878:6;9846:12;:39::i;:::-;9838:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;9741:179;9930:18;9951:40;9965:6;9973:9;9984:6;9951:13;:40::i;:::-;9930:61;;10002:23;10037:10;10028:6;:19;;;;:::i;:::-;10002:45;;10098:6;10078:9;:17;10088:6;10078:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;10058:9;:17;10068:6;10058:17;;;;;;;;;;;;;;;:46;;;;10133:1;10120:10;:14;10115:115;;;10207:10;10180:9;:24;10198:4;10180:24;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;10153:9;:24;10171:4;10153:24;;;;;;;;;;;;;;;:64;;;;10115:115;10286:15;10263:9;:20;10273:9;10263:20;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;10240:9;:20;10250:9;10240:20;;;;;;;;;;;;;;;:61;;;;10334:9;10317:35;;10326:6;10317:35;;;10345:6;10317:35;;;;;;:::i;:::-;;;;;;;;10370:4;10363:11;;;;9250:1132;;;;;:::o;17114:366::-;17184:27;17199:11;17184:14;:27::i;:::-;17222:21;17260:1;17246:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17222:40;;17291:4;17273;17278:1;17273:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17317:18;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17307:4;17312:1;17307:7;;;;;;;;:::i;:::-;;;;;;;:35;;;;;;;;;;;17353:18;;;;;;;;;;;:69;;;17423:11;17435:1;17437:4;17450;17456:15;17353:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17173:307;17114:366;:::o;17488:541::-;17550:21;17596;;;;;;;;;;;17574:19;;;;;;;;;;:43;;;;:::i;:::-;17550:67;;17649:1;17632:14;:18;;;17628:394;;;17667:23;17724:14;17693:45;;17702:19;;;;;;;;;;17693:28;;:6;:28;;;;:::i;:::-;:45;;;;:::i;:::-;17667:71;;17753:25;17814:14;17781:47;;17790:21;;;;;;;;;;;17781:30;;:6;:30;;;;:::i;:::-;:47;;;;:::i;:::-;17753:75;;17866:1;17848:15;:19;17843:74;;;17872:16;;;;;;;;;;;:25;;:42;17898:15;17872:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17843:74;17956:1;17936:17;:21;17931:80;;;17962:18;;;;;;;;;;;:27;;:46;17990:17;17962:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17931:80;17652:370;;17628:394;17539:490;17488:541;:::o;15665:265::-;15755:1;15746:6;:10;15741:182;;;15799:6;15774:9;:21;15784:10;15774:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;15845:6;15820:9;:21;15838:1;15820:21;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;15900:1;15871:40;;15880:10;15871:40;;;15904:6;15871:40;;;;;;:::i;:::-;;;;;;;;15741:182;15665:265;;:::o;7705:385::-;7808:24;7835:8;;;;;;;;;;;7808:35;;7859:8;7854:50;;;7899:1;7872:29;;7854:50;7914:28;7929:12;7914:14;:28::i;:::-;7953:18;;;;;;;;;;;:34;;;7995:13;8020:4;8027:12;8041:1;8044;8047:16;8065:15;7953:129;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;7797:293;7705:385;;;:::o;8098:214::-;8180:3;8176:1;2349;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;8161:16;;;;:::i;:::-;:22;;;;:::i;:::-;8142:12;:41;;;;8233:3;8229:1;2349;2412:2;:13;;;;:::i;:::-;2397:11;:29;;;;:::i;:::-;8214:16;;;;:::i;:::-;:22;;;;:::i;:::-;8195:16;:41;;;;8262:4;8247:12;;:19;;;;;;;;;;;;;;;;;;8292:12;8277;:27;;;;8098:214::o;15938:1168::-;4225:4;4212:10;;:17;;;;;;;;;;;;;;;;;;15999:27:::1;16029:24;16047:4;16029:9;:24::i;:::-;15999:54;;16094:11;;16071:19;:34;;:50;;;;;16109:12;;;;;;;;;;;16071:50;16066:1033;;;16167:11;;16144:19;:34;16139:80;;16205:11;;16183:33;;16139:80;16235:20;16313:1;16295:15:::0;::::1;;;;;;;;;;16258:52;;16280:12;;;;;;;;;;;16258:34;;:19;:34;;;;:::i;:::-;:52;;;;:::i;:::-;:56;;;;:::i;:::-;16235:79;;16343:21;16389:12;16367:19;:34;;;;:::i;:::-;16343:58;;2349:1;16436:2;:13;;;;:::i;:::-;16420;:29;16416:521;;;16471:19;16493:21;16471:43;;16533:35;16554:13;16533:20;:35::i;:::-;16587:19;16633:11;16609:21;:35;;;;:::i;:::-;16587:57;;16683:1;16668:12;;;;;;;;;;;:16;;;16663:259;;;16710:21;16763:15;;;;;;;;;;;16734:44;;16748:12;;;;;;;;;;;16734:26;;:11;:26;;;;:::i;:::-;:44;;;;:::i;:::-;16710:68;;16802:28;16817:12;16802:14;:28::i;:::-;16853:49;16867:12;16881:13;16896:5;16853:13;:49::i;:::-;16687:235;16663:259;16452:485;;16416:521;16951:27;16981:21;16951:51;;17042:1;17020:19;:23;17017:71;;;17047:38;17065:19;17047:17;:38::i;:::-;17017:71;16124:975;;;16066:1033;15988:1118;4267:5:::0;4254:10;;:18;;;;;;;;;;;;;;;;;;15938:1168::o;8320:922::-;8394:4;8411:16;8514:2;8495:16;;;;;;;;;;;8461:50;;8476:16;;;;;;;;;;;8461:31;;:12;;:31;;;;:::i;:::-;:50;;;;:::i;:::-;:55;;;;:::i;:::-;8445:12;:72;:125;;;;;8553:16;;;;;;;;;;;8538:31;;:12;;:31;;;;:::i;:::-;8521:12;:49;;8445:125;8440:760;;;8592:5;:13;8598:6;8592:13;;;;;;;;;;;;;;;;;;;;;;;;;8588:391;;;8632:7;:18;8640:9;8632:18;;;;;;;;;;;;;;;;;;;;;;;;;8631:19;:44;;;;;8655:9;:20;8665:9;8655:20;;;;;;;;;;;;;;;;;;;;;;;;;8654:21;8631:44;8626:135;;;8728:12;8701:13;:24;8715:9;8701:24;;;;;;;;;;;;;;;:39;;;;8626:135;8797:9;8784:22;;:9;:22;;;8779:87;;8833:12;;;;;:::i;:::-;;;;8779:87;8588:391;;;8917:12;8892:13;:21;8906:6;8892:21;;;;;;;;;;;;;;;;:37;8887:92;;8951:12;;;;;:::i;:::-;;;;8887:92;8588:391;9014:1;9000:11;:15;8995:193;;;9056:13;9041:11;:28;:74;;;;9104:10;9087:13;:28;;;;:::i;:::-;9073:11;:42;9041:74;9036:137;;;9141:12;;;;;:::i;:::-;;;;9036:137;8995:193;8440:760;9232:1;9218:10;:15;;;9210:24;;;8320:922;;;;:::o;10390:495::-;10494:4;10511:21;10535:4;10511:28;;10555:12;;;;;;;;;;;:34;;;;;10572:9;:17;10582:6;10572:17;;;;;;;;;;;;;;;;;;;;;;;;;10571:18;10555:34;:59;;;;;10594:9;:20;10604:9;10594:20;;;;;;;;;;;;;;;;;;;;;;;;;10593:21;10555:59;10550:294;;;10654:12;;10637:14;:29;10632:201;;;10690:5;10671:24;;10632:201;;;10723:5;:16;10729:9;10723:16;;;;;;;;;;;;;;;;;;;;;;;;;10722:17;:79;;;;;10784:16;;10767:14;10744:9;:20;10754:9;10744:20;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:56;10722:79;10717:116;;;10825:5;10806:24;;10717:116;10632:201;10550:294;10861:16;10854:23;;;10390:495;;;;;:::o;11180:902::-;11277:7;11297:17;11341:12;;;;;;;;;;;11340:13;:32;;;;11357:7;:15;11365:6;11357:15;;;;;;;;;;;;;;;;;;;;;;;;;11340:32;:54;;;;11376:7;:18;11384:9;11376:18;;;;;;;;;;;;;;;;;;;;;;;;;11340:54;11335:703;;;11425:1;11413:13;;11335:703;;;11500:16;;;;;;;;;;;11466:50;;11481:16;;;;;;;;;;;11466:31;;:12;;:31;;;;:::i;:::-;:50;;;;:::i;:::-;11450:12;:66;11445:593;;11539:5;:13;11545:6;11539:13;;;;;;;;;;;;;;;;;;;;;;;;;11534:257;;;11610:3;11596:11;;;;;;;;;;;11587:20;;:6;:20;;;;:::i;:::-;:26;;;;:::i;:::-;11575:38;;11534:257;;;11640:5;:16;11646:9;11640:16;;;;;;;;;;;;;;;;;;;;;;;;;11635:156;;;11715:3;11700:12;;;;;;;;;;;11691:21;;:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;11679:39;;11635:156;;;11773:1;11761:13;;11635:156;11534:257;11445:593;;;11844:16;;;;;;;;;;;11829:31;;:12;;:31;;;;:::i;:::-;11813:12;:47;11808:230;;11915:3;11899:13;;;;;;;;;;;11890:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;11878:40;;11808:230;;;11957:12;;11941;:28;11936:102;;12023:3;12007:13;;;;;;;;;;;11998:22;;:6;:22;;;;:::i;:::-;:28;;;;:::i;:::-;11986:40;;11936:102;11808:230;11445:593;11335:703;12065:9;12058:16;;;11180:902;;;;;:::o;6764:317::-;6884:12;6835:11;:26;6855:4;6835:26;;;;;;;;;;;;;;;:46;3883:42;6835:46;;;;;;;;;;;;;;;;:61;6830:244;;;6963:17;6914:11;:26;6934:4;6914:26;;;;;;;;;;;;;;;:46;3883:42;6914:46;;;;;;;;;;;;;;;:66;;;;3883:42;7000:62;;7017:4;7000:62;;;7044:17;7000:62;;;;;;:::i;:::-;;;;;;;;6830:244;6764:317;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:619::-;4852:6;4860;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:119;;;4923:79;;:::i;:::-;4885:119;5043:1;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5014:117;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4775:619;;;;;:::o;5400:86::-;5435:7;5475:4;5468:5;5464:16;5453:27;;5400:86;;;:::o;5492:112::-;5575:22;5591:5;5575:22;:::i;:::-;5570:3;5563:35;5492:112;;:::o;5610:214::-;5699:4;5737:2;5726:9;5722:18;5714:26;;5750:67;5814:1;5803:9;5799:17;5790:6;5750:67;:::i;:::-;5610:214;;;;:::o;5830:118::-;5901:22;5917:5;5901:22;:::i;:::-;5894:5;5891:33;5881:61;;5938:1;5935;5928:12;5881:61;5830:118;:::o;5954:135::-;5998:5;6036:6;6023:20;6014:29;;6052:31;6077:5;6052:31;:::i;:::-;5954:135;;;;:::o;6095:116::-;6165:21;6180:5;6165:21;:::i;:::-;6158:5;6155:32;6145:60;;6201:1;6198;6191:12;6145:60;6095:116;:::o;6217:133::-;6260:5;6298:6;6285:20;6276:29;;6314:30;6338:5;6314:30;:::i;:::-;6217:133;;;;:::o;6356:464::-;6419:6;6427;6476:2;6464:9;6455:7;6451:23;6447:32;6444:119;;;6482:79;;:::i;:::-;6444:119;6602:1;6627:51;6670:7;6661:6;6650:9;6646:22;6627:51;:::i;:::-;6617:61;;6573:115;6727:2;6753:50;6795:7;6786:6;6775:9;6771:22;6753:50;:::i;:::-;6743:60;;6698:115;6356:464;;;;;:::o;6826:89::-;6862:7;6902:6;6895:5;6891:18;6880:29;;6826:89;;;:::o;6921:120::-;6993:23;7010:5;6993:23;:::i;:::-;6986:5;6983:34;6973:62;;7031:1;7028;7021:12;6973:62;6921:120;:::o;7047:137::-;7092:5;7130:6;7117:20;7108:29;;7146:32;7172:5;7146:32;:::i;:::-;7047:137;;;;:::o;7190:470::-;7256:6;7264;7313:2;7301:9;7292:7;7288:23;7284:32;7281:119;;;7319:79;;:::i;:::-;7281:119;7439:1;7464:52;7508:7;7499:6;7488:9;7484:22;7464:52;:::i;:::-;7454:62;;7410:116;7565:2;7591:52;7635:7;7626:6;7615:9;7611:22;7591:52;:::i;:::-;7581:62;;7536:117;7190:470;;;;;:::o;7666:329::-;7725:6;7774:2;7762:9;7753:7;7749:23;7745:32;7742:119;;;7780:79;;:::i;:::-;7742:119;7900:1;7925:53;7970:7;7961:6;7950:9;7946:22;7925:53;:::i;:::-;7915:63;;7871:117;7666:329;;;;:::o;8001:466::-;8065:6;8073;8122:2;8110:9;8101:7;8097:23;8093:32;8090:119;;;8128:79;;:::i;:::-;8090:119;8248:1;8273:51;8316:7;8307:6;8296:9;8292:22;8273:51;:::i;:::-;8263:61;;8219:115;8373:2;8399:51;8442:7;8433:6;8422:9;8418:22;8399:51;:::i;:::-;8389:61;;8344:116;8001:466;;;;;:::o;8473:607::-;8544:6;8552;8560;8609:2;8597:9;8588:7;8584:23;8580:32;8577:119;;;8615:79;;:::i;:::-;8577:119;8735:1;8760:53;8805:7;8796:6;8785:9;8781:22;8760:53;:::i;:::-;8750:63;;8706:117;8862:2;8888:50;8930:7;8921:6;8910:9;8906:22;8888:50;:::i;:::-;8878:60;;8833:115;8987:2;9013:50;9055:7;9046:6;9035:9;9031:22;9013:50;:::i;:::-;9003:60;;8958:115;8473:607;;;;;:::o;9086:329::-;9145:6;9194:2;9182:9;9173:7;9169:23;9165:32;9162:119;;;9200:79;;:::i;:::-;9162:119;9320:1;9345:53;9390:7;9381:6;9370:9;9366:22;9345:53;:::i;:::-;9335:63;;9291:117;9086:329;;;;:::o;9421:115::-;9506:23;9523:5;9506:23;:::i;:::-;9501:3;9494:36;9421:115;;:::o;9542:430::-;9685:4;9723:2;9712:9;9708:18;9700:26;;9736:69;9802:1;9791:9;9787:17;9778:6;9736:69;:::i;:::-;9815:70;9881:2;9870:9;9866:18;9857:6;9815:70;:::i;:::-;9895;9961:2;9950:9;9946:18;9937:6;9895:70;:::i;:::-;9542:430;;;;;;:::o;9978:117::-;10087:1;10084;10077:12;10101:117;10210:1;10207;10200:12;10224:117;10333:1;10330;10323:12;10364:568;10437:8;10447:6;10497:3;10490:4;10482:6;10478:17;10474:27;10464:122;;10505:79;;:::i;:::-;10464:122;10618:6;10605:20;10595:30;;10648:18;10640:6;10637:30;10634:117;;;10670:79;;:::i;:::-;10634:117;10784:4;10776:6;10772:17;10760:29;;10838:3;10830:4;10822:6;10818:17;10808:8;10804:32;10801:41;10798:128;;;10845:79;;:::i;:::-;10798:128;10364:568;;;;;:::o;10955:::-;11028:8;11038:6;11088:3;11081:4;11073:6;11069:17;11065:27;11055:122;;11096:79;;:::i;:::-;11055:122;11209:6;11196:20;11186:30;;11239:18;11231:6;11228:30;11225:117;;;11261:79;;:::i;:::-;11225:117;11375:4;11367:6;11363:17;11351:29;;11429:3;11421:4;11413:6;11409:17;11399:8;11395:32;11392:41;11389:128;;;11436:79;;:::i;:::-;11389:128;10955:568;;;;;:::o;11529:934::-;11651:6;11659;11667;11675;11724:2;11712:9;11703:7;11699:23;11695:32;11692:119;;;11730:79;;:::i;:::-;11692:119;11878:1;11867:9;11863:17;11850:31;11908:18;11900:6;11897:30;11894:117;;;11930:79;;:::i;:::-;11894:117;12043:80;12115:7;12106:6;12095:9;12091:22;12043:80;:::i;:::-;12025:98;;;;11821:312;12200:2;12189:9;12185:18;12172:32;12231:18;12223:6;12220:30;12217:117;;;12253:79;;:::i;:::-;12217:117;12366:80;12438:7;12429:6;12418:9;12414:22;12366:80;:::i;:::-;12348:98;;;;12143:313;11529:934;;;;;;;:::o;12469:613::-;12543:6;12551;12559;12608:2;12596:9;12587:7;12583:23;12579:32;12576:119;;;12614:79;;:::i;:::-;12576:119;12734:1;12759:52;12803:7;12794:6;12783:9;12779:22;12759:52;:::i;:::-;12749:62;;12705:116;12860:2;12886:52;12930:7;12921:6;12910:9;12906:22;12886:52;:::i;:::-;12876:62;;12831:117;12987:2;13013:52;13057:7;13048:6;13037:9;13033:22;13013:52;:::i;:::-;13003:62;;12958:117;12469:613;;;;;:::o;13088:93::-;13124:7;13164:10;13157:5;13153:22;13142:33;;13088:93;;;:::o;13187:120::-;13259:23;13276:5;13259:23;:::i;:::-;13252:5;13249:34;13239:62;;13297:1;13294;13287:12;13239:62;13187:120;:::o;13313:137::-;13358:5;13396:6;13383:20;13374:29;;13412:32;13438:5;13412:32;:::i;:::-;13313:137;;;;:::o;13456:757::-;13538:6;13546;13554;13562;13611:3;13599:9;13590:7;13586:23;13582:33;13579:120;;;13618:79;;:::i;:::-;13579:120;13738:1;13763:52;13807:7;13798:6;13787:9;13783:22;13763:52;:::i;:::-;13753:62;;13709:116;13864:2;13890:52;13934:7;13925:6;13914:9;13910:22;13890:52;:::i;:::-;13880:62;;13835:117;13991:2;14017:52;14061:7;14052:6;14041:9;14037:22;14017:52;:::i;:::-;14007:62;;13962:117;14118:2;14144:52;14188:7;14179:6;14168:9;14164:22;14144:52;:::i;:::-;14134:62;;14089:117;13456:757;;;;;;;:::o;14219:474::-;14287:6;14295;14344:2;14332:9;14323:7;14319:23;14315:32;14312:119;;;14350:79;;:::i;:::-;14312:119;14470:1;14495:53;14540:7;14531:6;14520:9;14516:22;14495:53;:::i;:::-;14485:63;;14441:117;14597:2;14623:53;14668:7;14659:6;14648:9;14644:22;14623:53;:::i;:::-;14613:63;;14568:118;14219:474;;;;;:::o;14699:104::-;14744:7;14773:24;14791:5;14773:24;:::i;:::-;14762:35;;14699:104;;;:::o;14809:138::-;14890:32;14916:5;14890:32;:::i;:::-;14883:5;14880:43;14870:71;;14937:1;14934;14927:12;14870:71;14809:138;:::o;14953:155::-;15007:5;15045:6;15032:20;15023:29;;15061:41;15096:5;15061:41;:::i;:::-;14953:155;;;;:::o;15114:345::-;15181:6;15230:2;15218:9;15209:7;15205:23;15201:32;15198:119;;;15236:79;;:::i;:::-;15198:119;15356:1;15381:61;15434:7;15425:6;15414:9;15410:22;15381:61;:::i;:::-;15371:71;;15327:125;15114:345;;;;:::o;15465:174::-;15605:26;15601:1;15593:6;15589:14;15582:50;15465:174;:::o;15645:366::-;15787:3;15808:67;15872:2;15867:3;15808:67;:::i;:::-;15801:74;;15884:93;15973:3;15884:93;:::i;:::-;16002:2;15997:3;15993:12;15986:19;;15645:366;;;:::o;16017:419::-;16183:4;16221:2;16210:9;16206:18;16198:26;;16270:9;16264:4;16260:20;16256:1;16245:9;16241:17;16234:47;16298:131;16424:4;16298:131;:::i;:::-;16290:139;;16017:419;;;:::o;16442:173::-;16582:25;16578:1;16570:6;16566:14;16559:49;16442:173;:::o;16621:366::-;16763:3;16784:67;16848:2;16843:3;16784:67;:::i;:::-;16777:74;;16860:93;16949:3;16860:93;:::i;:::-;16978:2;16973:3;16969:12;16962:19;;16621:366;;;:::o;16993:419::-;17159:4;17197:2;17186:9;17182:18;17174:26;;17246:9;17240:4;17236:20;17232:1;17221:9;17217:17;17210:47;17274:131;17400:4;17274:131;:::i;:::-;17266:139;;16993:419;;;:::o;17418:180::-;17466:77;17463:1;17456:88;17563:4;17560:1;17553:15;17587:4;17584:1;17577:15;17604:102;17646:8;17693:5;17690:1;17686:13;17665:34;;17604:102;;;:::o;17712:848::-;17773:5;17780:4;17804:6;17795:15;;17828:5;17819:14;;17842:712;17863:1;17853:8;17850:15;17842:712;;;17958:4;17953:3;17949:14;17943:4;17940:24;17937:50;;;17967:18;;:::i;:::-;17937:50;18017:1;18007:8;18003:16;18000:451;;;18432:4;18425:5;18421:16;18412:25;;18000:451;18482:4;18476;18472:15;18464:23;;18512:32;18535:8;18512:32;:::i;:::-;18500:44;;17842:712;;;17712:848;;;;;;;:::o;18566:1073::-;18620:5;18811:8;18801:40;;18832:1;18823:10;;18834:5;;18801:40;18860:4;18850:36;;18877:1;18868:10;;18879:5;;18850:36;18946:4;18994:1;18989:27;;;;19030:1;19025:191;;;;18939:277;;18989:27;19007:1;18998:10;;19009:5;;;19025:191;19070:3;19060:8;19057:17;19054:43;;;19077:18;;:::i;:::-;19054:43;19126:8;19123:1;19119:16;19110:25;;19161:3;19154:5;19151:14;19148:40;;;19168:18;;:::i;:::-;19148:40;19201:5;;;18939:277;;19325:2;19315:8;19312:16;19306:3;19300:4;19297:13;19293:36;19275:2;19265:8;19262:16;19257:2;19251:4;19248:12;19244:35;19228:111;19225:246;;;19381:8;19375:4;19371:19;19362:28;;19416:3;19409:5;19406:14;19403:40;;;19423:18;;:::i;:::-;19403:40;19456:5;;19225:246;19496:42;19534:3;19524:8;19518:4;19515:1;19496:42;:::i;:::-;19481:57;;;;19570:4;19565:3;19561:14;19554:5;19551:25;19548:51;;;19579:18;;:::i;:::-;19548:51;19628:4;19621:5;19617:16;19608:25;;18566:1073;;;;;;:::o;19645:281::-;19703:5;19727:23;19745:4;19727:23;:::i;:::-;19719:31;;19771:25;19787:8;19771:25;:::i;:::-;19759:37;;19815:104;19852:66;19842:8;19836:4;19815:104;:::i;:::-;19806:113;;19645:281;;;;:::o;19932:410::-;19972:7;19995:20;20013:1;19995:20;:::i;:::-;19990:25;;20029:20;20047:1;20029:20;:::i;:::-;20024:25;;20084:1;20081;20077:9;20106:30;20124:11;20106:30;:::i;:::-;20095:41;;20285:1;20276:7;20272:15;20269:1;20266:22;20246:1;20239:9;20219:83;20196:139;;20315:18;;:::i;:::-;20196:139;19980:362;19932:410;;;;:::o;20348:166::-;20488:18;20484:1;20476:6;20472:14;20465:42;20348:166;:::o;20520:366::-;20662:3;20683:67;20747:2;20742:3;20683:67;:::i;:::-;20676:74;;20759:93;20848:3;20759:93;:::i;:::-;20877:2;20872:3;20868:12;20861:19;;20520:366;;;:::o;20892:419::-;21058:4;21096:2;21085:9;21081:18;21073:26;;21145:9;21139:4;21135:20;21131:1;21120:9;21116:17;21109:47;21173:131;21299:4;21173:131;:::i;:::-;21165:139;;20892:419;;;:::o;21317:194::-;21357:4;21377:20;21395:1;21377:20;:::i;:::-;21372:25;;21411:20;21429:1;21411:20;:::i;:::-;21406:25;;21455:1;21452;21448:9;21440:17;;21479:1;21473:4;21470:11;21467:37;;;21484:18;;:::i;:::-;21467:37;21317:194;;;;:::o;21517:176::-;21657:28;21653:1;21645:6;21641:14;21634:52;21517:176;:::o;21699:366::-;21841:3;21862:67;21926:2;21921:3;21862:67;:::i;:::-;21855:74;;21938:93;22027:3;21938:93;:::i;:::-;22056:2;22051:3;22047:12;22040:19;;21699:366;;;:::o;22071:419::-;22237:4;22275:2;22264:9;22260:18;22252:26;;22324:9;22318:4;22314:20;22310:1;22299:9;22295:17;22288:47;22352:131;22478:4;22352:131;:::i;:::-;22344:139;;22071:419;;;:::o;22496:180::-;22544:77;22541:1;22534:88;22641:4;22638:1;22631:15;22665:4;22662:1;22655:15;22682:185;22722:1;22739:20;22757:1;22739:20;:::i;:::-;22734:25;;22773:20;22791:1;22773:20;:::i;:::-;22768:25;;22812:1;22802:35;;22817:18;;:::i;:::-;22802:35;22859:1;22856;22852:9;22847:14;;22682:185;;;;:::o;22873:156::-;23013:8;23009:1;23001:6;22997:14;22990:32;22873:156;:::o;23035:365::-;23177:3;23198:66;23262:1;23257:3;23198:66;:::i;:::-;23191:73;;23273:93;23362:3;23273:93;:::i;:::-;23391:2;23386:3;23382:12;23375:19;;23035:365;;;:::o;23406:419::-;23572:4;23610:2;23599:9;23595:18;23587:26;;23659:9;23653:4;23649:20;23645:1;23634:9;23630:17;23623:47;23687:131;23813:4;23687:131;:::i;:::-;23679:139;;23406:419;;;:::o;23831:191::-;23871:3;23890:20;23908:1;23890:20;:::i;:::-;23885:25;;23924:20;23942:1;23924:20;:::i;:::-;23919:25;;23967:1;23964;23960:9;23953:16;;23988:3;23985:1;23982:10;23979:36;;;23995:18;;:::i;:::-;23979:36;23831:191;;;;:::o;24028:160::-;24168:12;24164:1;24156:6;24152:14;24145:36;24028:160;:::o;24194:366::-;24336:3;24357:67;24421:2;24416:3;24357:67;:::i;:::-;24350:74;;24433:93;24522:3;24433:93;:::i;:::-;24551:2;24546:3;24542:12;24535:19;;24194:366;;;:::o;24566:419::-;24732:4;24770:2;24759:9;24755:18;24747:26;;24819:9;24813:4;24809:20;24805:1;24794:9;24790:17;24783:47;24847:131;24973:4;24847:131;:::i;:::-;24839:139;;24566:419;;;:::o;24991:164::-;25131:16;25127:1;25119:6;25115:14;25108:40;24991:164;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:165::-;26098:17;26094:1;26086:6;26082:14;26075:41;25958:165;:::o;26129:366::-;26271:3;26292:67;26356:2;26351:3;26292:67;:::i;:::-;26285:74;;26368:93;26457:3;26368:93;:::i;:::-;26486:2;26481:3;26477:12;26470:19;;26129:366;;;:::o;26501:419::-;26667:4;26705:2;26694:9;26690:18;26682:26;;26754:9;26748:4;26744:20;26740:1;26729:9;26725:17;26718:47;26782:131;26908:4;26782:131;:::i;:::-;26774:139;;26501:419;;;:::o;26926:188::-;26964:3;26983:18;26999:1;26983:18;:::i;:::-;26978:23;;27015:18;27031:1;27015:18;:::i;:::-;27010:23;;27056:1;27053;27049:9;27042:16;;27079:4;27074:3;27071:13;27068:39;;;27087:18;;:::i;:::-;27068:39;26926:188;;;;:::o;27120:168::-;27260:20;27256:1;27248:6;27244:14;27237:44;27120:168;:::o;27294:366::-;27436:3;27457:67;27521:2;27516:3;27457:67;:::i;:::-;27450:74;;27533:93;27622:3;27533:93;:::i;:::-;27651:2;27646:3;27642:12;27635:19;;27294:366;;;:::o;27666:419::-;27832:4;27870:2;27859:9;27855:18;27847:26;;27919:9;27913:4;27909:20;27905:1;27894:9;27890:17;27883:47;27947:131;28073:4;27947:131;:::i;:::-;27939:139;;27666:419;;;:::o;28091:166::-;28231:18;28227:1;28219:6;28215:14;28208:42;28091:166;:::o;28263:366::-;28405:3;28426:67;28490:2;28485:3;28426:67;:::i;:::-;28419:74;;28502:93;28591:3;28502:93;:::i;:::-;28620:2;28615:3;28611:12;28604:19;;28263:366;;;:::o;28635:419::-;28801:4;28839:2;28828:9;28824:18;28816:26;;28888:9;28882:4;28878:20;28874:1;28863:9;28859:17;28852:47;28916:131;29042:4;28916:131;:::i;:::-;28908:139;;28635:419;;;:::o;29060:182::-;29200:34;29196:1;29188:6;29184:14;29177:58;29060:182;:::o;29248:366::-;29390:3;29411:67;29475:2;29470:3;29411:67;:::i;:::-;29404:74;;29487:93;29576:3;29487:93;:::i;:::-;29605:2;29600:3;29596:12;29589:19;;29248:366;;;:::o;29620:419::-;29786:4;29824:2;29813:9;29809:18;29801:26;;29873:9;29867:4;29863:20;29859:1;29848:9;29844:17;29837:47;29901:131;30027:4;29901:131;:::i;:::-;29893:139;;29620:419;;;:::o;30045:224::-;30185:34;30181:1;30173:6;30169:14;30162:58;30254:7;30249:2;30241:6;30237:15;30230:32;30045:224;:::o;30275:366::-;30417:3;30438:67;30502:2;30497:3;30438:67;:::i;:::-;30431:74;;30514:93;30603:3;30514:93;:::i;:::-;30632:2;30627:3;30623:12;30616:19;;30275:366;;;:::o;30647:419::-;30813:4;30851:2;30840:9;30836:18;30828:26;;30900:9;30894:4;30890:20;30886:1;30875:9;30871:17;30864:47;30928:131;31054:4;30928:131;:::i;:::-;30920:139;;30647:419;;;:::o;31072:180::-;31120:77;31117:1;31110:88;31217:4;31214:1;31207:15;31241:4;31238:1;31231:15;31258:233;31297:3;31320:24;31338:5;31320:24;:::i;:::-;31311:33;;31366:66;31359:5;31356:77;31353:103;;31436:18;;:::i;:::-;31353:103;31483:1;31476:5;31472:13;31465:20;;31258:233;;;:::o;31497:225::-;31637:34;31633:1;31625:6;31621:14;31614:58;31706:8;31701:2;31693:6;31689:15;31682:33;31497:225;:::o;31728:366::-;31870:3;31891:67;31955:2;31950:3;31891:67;:::i;:::-;31884:74;;31967:93;32056:3;31967:93;:::i;:::-;32085:2;32080:3;32076:12;32069:19;;31728:366;;;:::o;32100:419::-;32266:4;32304:2;32293:9;32289:18;32281:26;;32353:9;32347:4;32343:20;32339:1;32328:9;32324:17;32317:47;32381:131;32507:4;32381:131;:::i;:::-;32373:139;;32100:419;;;:::o;32525:332::-;32646:4;32684:2;32673:9;32669:18;32661:26;;32697:71;32765:1;32754:9;32750:17;32741:6;32697:71;:::i;:::-;32778:72;32846:2;32835:9;32831:18;32822:6;32778:72;:::i;:::-;32525:332;;;;;:::o;32863:193::-;32902:3;32921:19;32938:1;32921:19;:::i;:::-;32916:24;;32954:19;32971:1;32954:19;:::i;:::-;32949:24;;32996:1;32993;32989:9;32982:16;;33019:6;33014:3;33011:15;33008:41;;;33029:18;;:::i;:::-;33008:41;32863:193;;;;:::o;33062:165::-;33202:17;33198:1;33190:6;33186:14;33179:41;33062:165;:::o;33233:366::-;33375:3;33396:67;33460:2;33455:3;33396:67;:::i;:::-;33389:74;;33472:93;33561:3;33472:93;:::i;:::-;33590:2;33585:3;33581:12;33574:19;;33233:366;;;:::o;33605:419::-;33771:4;33809:2;33798:9;33794:18;33786:26;;33858:9;33852:4;33848:20;33844:1;33833:9;33829:17;33822:47;33886:131;34012:4;33886:131;:::i;:::-;33878:139;;33605:419;;;:::o;34030:163::-;34170:15;34166:1;34158:6;34154:14;34147:39;34030:163;:::o;34199:366::-;34341:3;34362:67;34426:2;34421:3;34362:67;:::i;:::-;34355:74;;34438:93;34527:3;34438:93;:::i;:::-;34556:2;34551:3;34547:12;34540:19;;34199:366;;;:::o;34571:419::-;34737:4;34775:2;34764:9;34760:18;34752:26;;34824:9;34818:4;34814:20;34810:1;34799:9;34795:17;34788:47;34852:131;34978:4;34852:131;:::i;:::-;34844:139;;34571:419;;;:::o;34996:161::-;35136:13;35132:1;35124:6;35120:14;35113:37;34996:161;:::o;35163:366::-;35305:3;35326:67;35390:2;35385:3;35326:67;:::i;:::-;35319:74;;35402:93;35491:3;35402:93;:::i;:::-;35520:2;35515:3;35511:12;35504:19;;35163:366;;;:::o;35535:419::-;35701:4;35739:2;35728:9;35724:18;35716:26;;35788:9;35782:4;35778:20;35774:1;35763:9;35759:17;35752:47;35816:131;35942:4;35816:131;:::i;:::-;35808:139;;35535:419;;;:::o;35960:162::-;36100:14;36096:1;36088:6;36084:14;36077:38;35960:162;:::o;36128:366::-;36270:3;36291:67;36355:2;36350:3;36291:67;:::i;:::-;36284:74;;36367:93;36456:3;36367:93;:::i;:::-;36485:2;36480:3;36476:12;36469:19;;36128:366;;;:::o;36500:419::-;36666:4;36704:2;36693:9;36689:18;36681:26;;36753:9;36747:4;36743:20;36739:1;36728:9;36724:17;36717:47;36781:131;36907:4;36781:131;:::i;:::-;36773:139;;36500:419;;;:::o;36925:159::-;37065:11;37061:1;37053:6;37049:14;37042:35;36925:159;:::o;37090:365::-;37232:3;37253:66;37317:1;37312:3;37253:66;:::i;:::-;37246:73;;37328:93;37417:3;37328:93;:::i;:::-;37446:2;37441:3;37437:12;37430:19;;37090:365;;;:::o;37461:419::-;37627:4;37665:2;37654:9;37650:18;37642:26;;37714:9;37708:4;37704:20;37700:1;37689:9;37685:17;37678:47;37742:131;37868:4;37742:131;:::i;:::-;37734:139;;37461:419;;;:::o;37886:165::-;38026:17;38022:1;38014:6;38010:14;38003:41;37886:165;:::o;38057:366::-;38199:3;38220:67;38284:2;38279:3;38220:67;:::i;:::-;38213:74;;38296:93;38385:3;38296:93;:::i;:::-;38414:2;38409:3;38405:12;38398:19;;38057:366;;;:::o;38429:419::-;38595:4;38633:2;38622:9;38618:18;38610:26;;38682:9;38676:4;38672:20;38668:1;38657:9;38653:17;38646:47;38710:131;38836:4;38710:131;:::i;:::-;38702:139;;38429:419;;;:::o;38854:179::-;38994:31;38990:1;38982:6;38978:14;38971:55;38854:179;:::o;39039:366::-;39181:3;39202:67;39266:2;39261:3;39202:67;:::i;:::-;39195:74;;39278:93;39367:3;39278:93;:::i;:::-;39396:2;39391:3;39387:12;39380:19;;39039:366;;;:::o;39411:419::-;39577:4;39615:2;39604:9;39600:18;39592:26;;39664:9;39658:4;39654:20;39650:1;39639:9;39635:17;39628:47;39692:131;39818:4;39692:131;:::i;:::-;39684:139;;39411:419;;;:::o;39836:171::-;39976:23;39972:1;39964:6;39960:14;39953:47;39836:171;:::o;40013:366::-;40155:3;40176:67;40240:2;40235:3;40176:67;:::i;:::-;40169:74;;40252:93;40341:3;40252:93;:::i;:::-;40370:2;40365:3;40361:12;40354:19;;40013:366;;;:::o;40385:419::-;40551:4;40589:2;40578:9;40574:18;40566:26;;40638:9;40632:4;40628:20;40624:1;40613:9;40609:17;40602:47;40666:131;40792:4;40666:131;:::i;:::-;40658:139;;40385:419;;;:::o;40810:143::-;40867:5;40898:6;40892:13;40883:22;;40914:33;40941:5;40914:33;:::i;:::-;40810:143;;;;:::o;40959:351::-;41029:6;41078:2;41066:9;41057:7;41053:23;41049:32;41046:119;;;41084:79;;:::i;:::-;41046:119;41204:1;41229:64;41285:7;41276:6;41265:9;41261:22;41229:64;:::i;:::-;41219:74;;41175:128;40959:351;;;;:::o;41316:332::-;41437:4;41475:2;41464:9;41460:18;41452:26;;41488:71;41556:1;41545:9;41541:17;41532:6;41488:71;:::i;:::-;41569:72;41637:2;41626:9;41622:18;41613:6;41569:72;:::i;:::-;41316:332;;;;;:::o;41654:60::-;41682:3;41703:5;41696:12;;41654:60;;;:::o;41720:142::-;41770:9;41803:53;41821:34;41830:24;41848:5;41830:24;:::i;:::-;41821:34;:::i;:::-;41803:53;:::i;:::-;41790:66;;41720:142;;;:::o;41868:126::-;41918:9;41951:37;41982:5;41951:37;:::i;:::-;41938:50;;41868:126;;;:::o;42000:134::-;42058:9;42091:37;42122:5;42091:37;:::i;:::-;42078:50;;42000:134;;;:::o;42140:147::-;42235:45;42274:5;42235:45;:::i;:::-;42230:3;42223:58;42140:147;;:::o;42293:238::-;42394:4;42432:2;42421:9;42417:18;42409:26;;42445:79;42521:1;42510:9;42506:17;42497:6;42445:79;:::i;:::-;42293:238;;;;:::o;42537:179::-;42677:31;42673:1;42665:6;42661:14;42654:55;42537:179;:::o;42722:366::-;42864:3;42885:67;42949:2;42944:3;42885:67;:::i;:::-;42878:74;;42961:93;43050:3;42961:93;:::i;:::-;43079:2;43074:3;43070:12;43063:19;;42722:366;;;:::o;43094:419::-;43260:4;43298:2;43287:9;43283:18;43275:26;;43347:9;43341:4;43337:20;43333:1;43322:9;43318:17;43311:47;43375:131;43501:4;43375:131;:::i;:::-;43367:139;;43094:419;;;:::o;43519:170::-;43659:22;43655:1;43647:6;43643:14;43636:46;43519:170;:::o;43695:366::-;43837:3;43858:67;43922:2;43917:3;43858:67;:::i;:::-;43851:74;;43934:93;44023:3;43934:93;:::i;:::-;44052:2;44047:3;44043:12;44036:19;;43695:366;;;:::o;44067:419::-;44233:4;44271:2;44260:9;44256:18;44248:26;;44320:9;44314:4;44310:20;44306:1;44295:9;44291:17;44284:47;44348:131;44474:4;44348:131;:::i;:::-;44340:139;;44067:419;;;:::o;44492:167::-;44632:19;44628:1;44620:6;44616:14;44609:43;44492:167;:::o;44665:366::-;44807:3;44828:67;44892:2;44887:3;44828:67;:::i;:::-;44821:74;;44904:93;44993:3;44904:93;:::i;:::-;45022:2;45017:3;45013:12;45006:19;;44665:366;;;:::o;45037:419::-;45203:4;45241:2;45230:9;45226:18;45218:26;;45290:9;45284:4;45280:20;45276:1;45265:9;45261:17;45254:47;45318:131;45444:4;45318:131;:::i;:::-;45310:139;;45037:419;;;:::o;45462:180::-;45510:77;45507:1;45500:88;45607:4;45604:1;45597:15;45631:4;45628:1;45621:15;45648:85;45693:7;45722:5;45711:16;;45648:85;;;:::o;45739:158::-;45797:9;45830:61;45848:42;45857:32;45883:5;45857:32;:::i;:::-;45848:42;:::i;:::-;45830:61;:::i;:::-;45817:74;;45739:158;;;:::o;45903:147::-;45998:45;46037:5;45998:45;:::i;:::-;45993:3;45986:58;45903:147;;:::o;46056:114::-;46123:6;46157:5;46151:12;46141:22;;46056:114;;;:::o;46176:184::-;46275:11;46309:6;46304:3;46297:19;46349:4;46344:3;46340:14;46325:29;;46176:184;;;;:::o;46366:132::-;46433:4;46456:3;46448:11;;46486:4;46481:3;46477:14;46469:22;;46366:132;;;:::o;46504:108::-;46581:24;46599:5;46581:24;:::i;:::-;46576:3;46569:37;46504:108;;:::o;46618:179::-;46687:10;46708:46;46750:3;46742:6;46708:46;:::i;:::-;46786:4;46781:3;46777:14;46763:28;;46618:179;;;;:::o;46803:113::-;46873:4;46905;46900:3;46896:14;46888:22;;46803:113;;;:::o;46952:732::-;47071:3;47100:54;47148:5;47100:54;:::i;:::-;47170:86;47249:6;47244:3;47170:86;:::i;:::-;47163:93;;47280:56;47330:5;47280:56;:::i;:::-;47359:7;47390:1;47375:284;47400:6;47397:1;47394:13;47375:284;;;47476:6;47470:13;47503:63;47562:3;47547:13;47503:63;:::i;:::-;47496:70;;47589:60;47642:6;47589:60;:::i;:::-;47579:70;;47435:224;47422:1;47419;47415:9;47410:14;;47375:284;;;47379:14;47675:3;47668:10;;47076:608;;;46952:732;;;;:::o;47690:831::-;47953:4;47991:3;47980:9;47976:19;47968:27;;48005:71;48073:1;48062:9;48058:17;48049:6;48005:71;:::i;:::-;48086:80;48162:2;48151:9;48147:18;48138:6;48086:80;:::i;:::-;48213:9;48207:4;48203:20;48198:2;48187:9;48183:18;48176:48;48241:108;48344:4;48335:6;48241:108;:::i;:::-;48233:116;;48359:72;48427:2;48416:9;48412:18;48403:6;48359:72;:::i;:::-;48441:73;48509:3;48498:9;48494:19;48485:6;48441:73;:::i;:::-;47690:831;;;;;;;;:::o;48527:807::-;48776:4;48814:3;48803:9;48799:19;48791:27;;48828:71;48896:1;48885:9;48881:17;48872:6;48828:71;:::i;:::-;48909:72;48977:2;48966:9;48962:18;48953:6;48909:72;:::i;:::-;48991:80;49067:2;49056:9;49052:18;49043:6;48991:80;:::i;:::-;49081;49157:2;49146:9;49142:18;49133:6;49081:80;:::i;:::-;49171:73;49239:3;49228:9;49224:19;49215:6;49171:73;:::i;:::-;49254;49322:3;49311:9;49307:19;49298:6;49254:73;:::i;:::-;48527:807;;;;;;;;;:::o;49340:143::-;49397:5;49428:6;49422:13;49413:22;;49444:33;49471:5;49444:33;:::i;:::-;49340:143;;;;:::o;49489:663::-;49577:6;49585;49593;49642:2;49630:9;49621:7;49617:23;49613:32;49610:119;;;49648:79;;:::i;:::-;49610:119;49768:1;49793:64;49849:7;49840:6;49829:9;49825:22;49793:64;:::i;:::-;49783:74;;49739:128;49906:2;49932:64;49988:7;49979:6;49968:9;49964:22;49932:64;:::i;:::-;49922:74;;49877:129;50045:2;50071:64;50127:7;50118:6;50107:9;50103:22;50071:64;:::i;:::-;50061:74;;50016:129;49489:663;;;;;:::o;50158:167::-;50195:3;50218:22;50234:5;50218:22;:::i;:::-;50209:31;;50262:4;50255:5;50252:15;50249:41;;50270:18;;:::i;:::-;50249:41;50317:1;50310:5;50306:13;50299:20;;50158:167;;;:::o

Swarm Source

ipfs://88757376c47e2038de2f8d92a474372e999e4f7a9be661149e8db43479528f3f

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.