ETH Price: $3,395.34 (+4.52%)
Gas: 2 Gwei

Token

Bank of Tsuka (BANKTSUKA)
 

Overview

Max Total Supply

1,000,000 BANKTSUKA

Holders

94

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
777.543576621526641605 BANKTSUKA

Value
$0.00
0x737642d3bdbe7179306a6cc2af5987ff9a97fbfd
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TSUKABANK

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: MIT
/**


Total supply - 1,000,000

Tax Distribution - 6%
Rewards - 2% 
Marketing - 3%
liquidity - 1%

Telegram - https://t.me/BankofTsuka

 */
pragma solidity 0.8.10;

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x095ea7b3, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: APPROVE_FAILED"
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0xa9059cbb, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FAILED"
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 value
    ) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(0x23b872dd, from, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "TransferHelper: TRANSFER_FROM_FAILED"
        );
    }

    function safeTransferETH(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper: ETH_TRANSFER_FAILED");
    }
}

library SafeMath {

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) { return 0; }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

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

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

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

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

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

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

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

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

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

contract DividendDistributor is IDividendDistributor {

    using SafeMath for uint256;
    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IDEXRouter router;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    ERC20 RewardToken = ERC20(0xc5fB36dd2fb59d3B98dEfF88425a3F425Ee469eD); //TSUKA REWARDS


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

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

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

    uint256 currentIndex;

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

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

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

    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {

        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

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

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

    function deposit() external payable override onlyToken {

        uint256 balanceBefore = RewardToken.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(RewardToken);

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

        uint256 amount = RewardToken.balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

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

        if(shareholderCount == 0) { return; }

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

        while(gasUsed < gas && iterations < shareholderCount) {

            if(currentIndex >= shareholderCount){ currentIndex = 0; }

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

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

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

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

        require(shouldDistribute(msg.sender), "Too quick. Please wait for a bit!");
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

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

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

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

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

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

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function RenounceOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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

    string constant _name = "Bank of Tsuka";
    string constant _symbol = "BANKTSUKA";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
	address marketingAddress = 0x3Dc71A0f8995E8b0E20BdAE27948d7e546CA2890; //Marketing Funds

    uint256 _totalSupply = 1 * 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = 2000 * 10**18 ;
    uint256 public _walletMax = 2000 * 10**18 ;
    
    bool public restrictWhales = true;

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

    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isDividendExempt;
	
    mapping (address => bool) public blackList;
	mapping (address => bool) public exchangePairs;

    uint256 public liquidityFee = 1;
    uint256 public rewardsFee = 2;
	uint256 public marketingFee = 3;
	
	//sell extra add 0% fee.
    uint256 public extraFeeOnSell = 0;
    uint256 public burnPercentage = 0;

    uint256 public totalFee = 0;
    uint256 public totalFeeIfSelling = 0;

    address public autoLiquidityReceiver = marketingAddress;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    uint256 public silentBlockNumber = 0;
    bool public tradingOpen = true;
    bool public antiBotOpen = true;

    DividendDistributor public dividendDistributor;
    uint256 distributorGas = 200000;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;

    address[] private burnAddressList;

    uint256 public swapThreshold = _totalSupply * 5 / 4000;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor () Auth(msg.sender) {
        
        router = IDEXRouter(routerAddress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = 2**256 - 1;
		
		exchangePairs[pair] = true;

        dividendDistributor = new DividendDistributor(address(router));

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

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

        isDividendExempt[pair] = true;
        isDividendExempt[msg.sender] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;
        isDividendExempt[ZERO] = true;
        
        totalFee = liquidityFee.add(rewardsFee).add(marketingFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);

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

    receive() external payable { }
    
    function isExistAccount(address account) private view returns(bool) {
        bool isExistAcc = false;
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            if (burnAddressList[index] == account) {
                isExistAcc = true;
                break;
            }
        }
        return isExistAcc;
    }

    function addToBurnList(address account) external onlyOwner {
        require(!isExistAccount(account), "You already added this address");
        burnAddressList.push(account);
    }
	
	function removeToBurnList(address account) external onlyOwner {
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            if (burnAddressList[index] == account) {
				burnAddressList[index]=burnAddressList[burnAddressList.length-1];
                break;
            }
        }
		
		if(index != burnAddressList.length){
			burnAddressList.pop();			
		}
	}

    function name() external pure override returns (string memory) { return _name; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function getOwner() external view override returns (address) { return owner; }

    function _burn(address account, uint256 amount) internal {
        require(account != address(0), 'BEP20: burn from the zero address');

        _balances[account] = _balances[account].sub(amount, 'BEP20: burn amount exceeds balance');
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function burn() public onlyOwner {
        uint256 index = 0;
        for (index; index < burnAddressList.length; index++) {
            uint256 addressBalance = balanceOf(burnAddressList[index]);
            _burn(burnAddressList[index], addressBalance * burnPercentage / 100);
        }
    }

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

    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, 2**256 - 1);
    }

    function changeTxLimit(uint256 newLimit) external authorized {
        _maxTxAmount = newLimit;
    }

    function changeWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function changeRestrictWhales(bool newValue) external authorized {
       restrictWhales = newValue;
    }
    
    function changeIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

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

    function changeIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        
        if(exempt){
            dividendDistributor.setShare(holder, 0);
        }else{
            dividendDistributor.setShare(holder, _balances[holder]);
        }
    }

    function changeFees(uint256 newLiqFee, uint256 newRewardFee,uint256 newMarkingFee,uint256 newExtraSellFee) external authorized {
        liquidityFee = newLiqFee;
        rewardsFee = newRewardFee;
		marketingFee = newMarkingFee;
        extraFeeOnSell = newExtraSellFee;
        
        totalFee = liquidityFee.add(rewardsFee);
        totalFeeIfSelling = totalFee.add(extraFeeOnSell);
    }

    function changeFeeReceivers(address newLiquidityReceiver) external authorized {
        autoLiquidityReceiver = newLiquidityReceiver;
    }

    function changeSwapBackSettings(bool enableSwapBack, uint256 newSwapBackLimit, bool swapByLimitOnly) external authorized {
        swapAndLiquifyEnabled  = enableSwapBack;
        swapThreshold = newSwapBackLimit;
        swapAndLiquifyByLimitOnly = swapByLimitOnly;
    }

    function changeDistributionCriteria(uint256 newinPeriod, uint256 newMinDistribution) external authorized {
        dividendDistributor.setDistributionCriteria(newinPeriod, newMinDistribution);
    }

    function changeDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
	
	function addExchangePairs(address acc) external authorized {
	    exchangePairs[acc] = true;
	}
	
	function removExchangePairs(address acc) external authorized {
			delete exchangePairs[acc];
	}

    function addBlackList(address acc) external authorized {
        blackList[acc]=true;
    }

    function removBlackList(address acc) external authorized {
		delete blackList[acc];
	}

    function setSilentBlockNumber(uint256 newValue) external authorized {
		silentBlockNumber = newValue;
	}

    function isContract(address addr) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    function setAntiBot(bool newValue) external authorized {
        antiBotOpen=newValue;
    }

    function antiBot(address sender,address recipient) view public{
        if(!antiBotOpen){
            return;
        }

        bool isBotSell = ( sender!=address(this) && sender!= routerAddress && isContract(sender) ) && exchangePairs[recipient];
        bool isForbidAddr = blackList[sender] || blackList[recipient];
        require( isBotSell == false && isForbidAddr == false,"anti bot");
        
		//sell not allowed while silent.
        if(exchangePairs[recipient]){
            require( block.number > launchedAt + silentBlockNumber,"silent block");
        }
    }
    
    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        
        if(_allowances[sender][msg.sender] != 2**256 - 1){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }
        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
		require(_balances[sender] > 0);
		
		//anti the bot.
        antiBot(sender,recipient);
        
        if(inSwapAndLiquify){ return _basicTransfer(sender, recipient, amount); }

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

        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");

        if(msg.sender != pair && !inSwapAndLiquify && swapAndLiquifyEnabled && _balances[address(this)] >= swapThreshold){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        
        if(!isTxLimitExempt[recipient] && restrictWhales)
        {
            require(_balances[recipient].add(amount) <= _walletMax);
        }		        

        uint256 finalAmount = !isFeeExempt[sender] && !isFeeExempt[recipient] ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(finalAmount);

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try dividendDistributor.setShare(sender, _balances[sender]) {} catch {}
        }

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

        try dividendDistributor.process(distributorGas) {} catch {}

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

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeApplicable = pair == recipient ? totalFeeIfSelling : totalFee;
        uint256 feeAmount = amount.mul(feeApplicable).div(100);

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

        return amount.sub(feeAmount);
    }

    function tradingStatus(bool newStatus) public onlyOwner {
        tradingOpen = newStatus;
		if(tradingOpen){
			launchedAt = block.number;
		}
    }

    function swapBack() internal lockTheSwap {
        
        uint256 tokenToSwap = _balances[address(this)];
        uint256 amountToLiquify = tokenToSwap.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = tokenToSwap.sub(amountToLiquify);

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

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

        uint256 amountETH = address(this).balance;

        uint256 totalETHFee = totalFee.sub(liquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(rewardsFee).div(totalETHFee);
		uint256 amountETHMarking = amountETH.sub(amountETHReflection).sub(amountETHLiquidity);

        try dividendDistributor.deposit{value: amountETHReflection}() {} catch {}
        
        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
		
		if( amountETHMarking > 0){
			TransferHelper.safeTransferETH(marketingAddress, amountETHMarking);
		}
    }

    event AutoLiquify(uint256 amountETH, uint256 amountMETA);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountMETA","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"RenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"addExchangePairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBurnList","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":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"}],"name":"antiBot","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiBotOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newinPeriod","type":"uint256"},{"internalType":"uint256","name":"newMinDistribution","type":"uint256"}],"name":"changeDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"changeDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityReceiver","type":"address"}],"name":"changeFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiqFee","type":"uint256"},{"internalType":"uint256","name":"newRewardFee","type":"uint256"},{"internalType":"uint256","name":"newMarkingFee","type":"uint256"},{"internalType":"uint256","name":"newExtraSellFee","type":"uint256"}],"name":"changeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"changeIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"changeRestrictWhales","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enableSwapBack","type":"bool"},{"internalType":"uint256","name":"newSwapBackLimit","type":"uint256"},{"internalType":"bool","name":"swapByLimitOnly","type":"bool"}],"name":"changeSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exchangePairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"extraFeeOnSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"removBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"}],"name":"removExchangePairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeToBurnList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restrictWhales","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSilentBlockNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silentBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newStatus","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733dc71a0f8995e8b0e20bdae27948d7e546ca2890600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000e3b565b620f424062000153919062000e8c565b600655686c6b935b8bbd400000600755686c6b935b8bbd4000006008556001600960006101000a81548160ff0219169083151502179055506001601155600260125560036013556000601455600060155560006016556000601755600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601c556001601d60006101000a81548160ff0219169083151502179055506001601d60016101000a81548160ff02191690831515021790555062030d40601e556001601f60016101000a81548160ff0219169083151502179055506000601f60026101000a81548160ff021916908315150217905550610fa060056006546200029d919062000e8c565b620002a9919062000f1c565b602155348015620002b957600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000424573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044a919062000fbe565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f9919062000fbe565b306040518363ffffffff1660e01b81526004016200051992919062001001565b6020604051808303816000875af115801562000539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055f919062000fbe565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200070d9062000c93565b6200071991906200102e565b604051809103906000f08015801562000736573d6000803e3d6000fd5b50601d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b5060135462000b3c60125460115462000c3060201b62002bdf1790919060201c565b62000c3060201b62002bdf1790919060201c565b60168190555062000b7460145460165462000c3060201b62002bdf1790919060201c565b601781905550600654600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000c2291906200105c565b60405180910390a362001159565b600080828462000c41919062001079565b90508381101562000c89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c809062001137565b60405180910390fd5b8091505092915050565b6121c9806200662183390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d2f5780860481111562000d075762000d0662000ca1565b5b600185161562000d175780820291505b808102905062000d278562000cd0565b945062000ce7565b94509492505050565b60008262000d4a576001905062000e1d565b8162000d5a576000905062000e1d565b816001811462000d73576002811462000d7e5762000db4565b600191505062000e1d565b60ff84111562000d935762000d9262000ca1565b5b8360020a91508482111562000dad5762000dac62000ca1565b5b5062000e1d565b5060208310610133831016604e8410600b841016171562000dee5782820a90508381111562000de85762000de762000ca1565b5b62000e1d565b62000dfd848484600162000cdd565b9250905081840481111562000e175762000e1662000ca1565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e488262000e24565b915062000e558362000e2e565b925062000e847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d38565b905092915050565b600062000e998262000e24565b915062000ea68362000e24565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ee25762000ee162000ca1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f298262000e24565b915062000f368362000e24565b92508262000f495762000f4862000eed565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f868262000f59565b9050919050565b62000f988162000f79565b811462000fa457600080fd5b50565b60008151905062000fb88162000f8d565b92915050565b60006020828403121562000fd75762000fd662000f54565b5b600062000fe78482850162000fa7565b91505092915050565b62000ffb8162000f79565b82525050565b600060408201905062001018600083018562000ff0565b62001027602083018462000ff0565b9392505050565b600060208201905062001045600083018462000ff0565b92915050565b620010568162000e24565b82525050565b60006020820190506200107360008301846200104b565b92915050565b6000620010868262000e24565b9150620010938362000e24565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010cb57620010ca62000ca1565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200111f601b83620010d6565b91506200112c82620010e7565b602082019050919050565b60006020820190508181036000830152620011528162001110565b9050919050565b6154b880620011696000396000f3fe6080604052600436106103d25760003560e01c8063807c2d9c116101fd578063c2c7c03a11610118578063e66b1d1e116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063e66b1d1e14610de2578063eac0fc5c14610e0b578063f01f20df14610e36578063f0b37c0414610e61576103d9565b8063d920334e116100e7578063d920334e14610d14578063da00097d14610d3d578063dd62ed3e14610d68578063e5c85a6a14610da5576103d9565b8063c2c7c03a14610c6c578063ca33e64c14610c95578063ca987b0e14610cc0578063d6f5e63914610ceb576103d9565b8063a9f7864b11610190578063b6a5d7de1161015f578063b6a5d7de14610bc4578063bad3ea6a14610bed578063be816ffc14610c18578063bf56b37114610c41576103d9565b8063a9f7864b14610b20578063ad9ee39114610b49578063b408d48914610b72578063b513682314610b9b576103d9565b806398118cb4116101cc57806398118cb414610a64578063a3a2e89e14610a8f578063a8aa1b3114610ab8578063a9059cbb14610ae3576103d9565b8063807c2d9c146109a6578063893d20e8146109d15780638b42507f146109fc57806395d89b4114610a39576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c1461090057806378051f4d146109295780637d1db4a5146109525780637db1342c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b50610950600480360381019061094b9190614801565b611cc6565b005b34801561095e57600080fd5b50610967611ddf565b60405161097491906143b1565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f91906146ef565b611de5565b005b3480156109b257600080fd5b506109bb611e37565b6040516109c891906143b1565b60405180910390f35b3480156109dd57600080fd5b506109e6611e3d565b6040516109f3919061483d565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611e66565b604051610a309190614571565b60405180910390f35b348015610a4557600080fd5b50610a4e611e86565b604051610a5b9190614465565b60405180910390f35b348015610a7057600080fd5b50610a79611ec3565b604051610a8691906143b1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190614783565b611ec9565b005b348015610ac457600080fd5b50610acd611f6c565b604051610ada919061483d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614516565b611f92565b604051610b179190614571565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614858565b611fa7565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906145e5565b612082565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906146ef565b61211c565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b61216e565b005b348015610bd057600080fd5b50610beb6004803603810190610be691906145e5565b612208565b005b348015610bf957600080fd5b50610c026122aa565b604051610c0f91906148f7565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614912565b6122d0565b005b348015610c4d57600080fd5b50610c56612584565b604051610c6391906143b1565b60405180910390f35b348015610c7857600080fd5b50610c936004803603810190610c8e91906145b8565b61258a565b005b348015610ca157600080fd5b50610caa6125ef565b604051610cb7919061483d565b60405180910390f35b348015610ccc57600080fd5b50610cd5612615565b604051610ce291906143b1565b60405180910390f35b348015610cf757600080fd5b50610d126004803603810190610d0d91906145e5565b61261b565b005b348015610d2057600080fd5b50610d3b6004803603810190610d3691906146ef565b612801565b005b348015610d4957600080fd5b50610d52612853565b604051610d5f9190614571565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614912565b612866565b604051610d9c91906143b1565b60405180910390f35b348015610db157600080fd5b50610dcc6004803603810190610dc791906145e5565b6128ed565b604051610dd99190614571565b60405180910390f35b348015610dee57600080fd5b50610e096004803603810190610e0491906145b8565b61290d565b005b348015610e1757600080fd5b50610e20612972565b604051610e2d91906143b1565b60405180910390f35b348015610e4257600080fd5b50610e4b612978565b604051610e5891906143b1565b60405180910390f35b348015610e6d57600080fd5b50610e886004803603810190610e8391906145e5565b61297e565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600d81526020017f42616e6b206f66205473756b6100000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b611ccf3361156b565b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dd49190614ce1565b60405180910390a150565b60075481565b611dee33612b76565b611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600981526020017f42414e4b5453554b410000000000000000000000000000000000000000000000815250905090565b60115481565b611ed233612b76565b611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f9f338484612d50565b905092915050565b611fb033612b76565b611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161204c929190614cfc565b600060405180830381600087803b15801561206657600080fd5b505af115801561207a573d6000803e3d6000fd5b505050505050565b61208b33612b76565b6120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61212533612b76565b612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614a46565b60405180910390fd5b80601c8190555050565b61217733612b76565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6122113361156b565b612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166122e957612580565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123755750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612386575061238583613861565b5b80156123db5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124805750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000151582151514801561249a575060001515811515145b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614d71565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561257d57601c54601b5461253b9190614d91565b431161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614e33565b60405180910390fd5b5b50505b5050565b601b5481565b61259333612b76565b6125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6126243361156b565b612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a906149da565b60405180910390fd5b60005b6020805490508110156127a9578173ffffffffffffffffffffffffffffffffffffffff166020828154811061269e5761269d614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561279657602060016020805490506126f99190614e53565b8154811061270a57612709614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020828154811061274957612748614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127a9565b80806127a190614bea565b915050612666565b60208054905081146127fd5760208054806127c7576127c6614e87565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b61280a33612b76565b612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b61291633612b76565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b6129873361156b565b6129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d91565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e53565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846122d0565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cfc565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b60006147ce8261448c565b9050919050565b6147de816147c3565b81146147e957600080fd5b50565b6000813590506147fb816147d5565b92915050565b60006020828403121561481757614816614487565b5b6000614825848285016147ec565b91505092915050565b614837816144ac565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614487565b5b600061487d85828601614501565b925050602061488e85828601614501565b9150509250929050565b6000819050919050565b60006148bd6148b86148b38461448c565b614898565b61448c565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614487565b5b6000614937858286016144d5565b9250506020614948858286016144d5565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b614898565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c83600083018561482e565b614c906020830184614c5f565b9392505050565b6000604082019050614cac600083018561482e565b614cb960208301846143a2565b9392505050565b6000614ccb826148c4565b9050919050565b614cdb81614cc0565b82525050565b6000602082019050614cf66000830184614cd2565b92915050565b6000604082019050614d1160008301856143a2565b614d1e60208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d5b6008836143d7565b9150614d6682614d25565b602082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b6000614d9c82614398565b9150614da783614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ddc57614ddb614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614e1d600c836143d7565b9150614e2882614de7565b602082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b6000614e5e82614398565b9150614e6983614398565b925082821015614e7c57614e7b614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe606083018561482e565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a600083018961482e565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e608083018561482e565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220efecb70c3bb1bee4cc3634ffdc726873e8aa0c1f2dd67b5cad75e798d4e8b87c64736f6c634300080a00336080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c5fb36dd2fb59d3b98deff88425a3f425ee469ed600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610708600d55670de0b6b3a7640000600e55348015620000e057600080fd5b50604051620021c9380380620021c9833981810160405281019062000106919062000258565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200016557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000167565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200028a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022082620001f3565b9050919050565b620002328162000213565b81146200023e57600080fd5b50565b600081519050620002528162000227565b92915050565b600060208284031215620002715762000270620001ee565b5b6000620002818482850162000241565b91505092915050565b611f2f806200029a6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b604051610104919061161f565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f91906116c9565b61032d565b005b34801561014257600080fd5b5061015d60048036038101906101589190611709565b6105ec565b60405161016a919061161f565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611736565b610706565b005b3480156101a857600080fd5b506101b1610770565b6040516101be919061161f565b60405180910390f35b3480156101d357600080fd5b506101dc610776565b6040516101e9919061161f565b60405180910390f35b3480156101fe57600080fd5b5061020761077c565b604051610214919061161f565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611709565b610782565b60405161025393929190611776565b60405180910390f35b6102646107ac565b005b34801561027257600080fd5b5061027b610bec565b604051610288919061161f565b60405180910390f35b34801561029d57600080fd5b506102a6610bf2565b6040516102b3919061161f565b60405180910390f35b3480156102c857600080fd5b506102d1610bf8565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906117ad565b610c4b565b005b34801561030857600080fd5b50610311610ddf565b60405161031e919061161f565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610de5565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a8261107d565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261112c565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461133390919063ffffffff16565b61137d90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106415760009050610701565b600061068e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e957600092505050610701565b6106fc818361133390919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075e57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080457600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086191906117e9565b602060405180830381865afa15801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190611819565b90506000600267ffffffffffffffff8111156108c1576108c0611846565b5b6040519080825280602002602001820160405280156108ef5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610983919061188a565b81600081518110610997576109966118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a0857610a076118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610aa594939291906119e9565b6000604051808303818588803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050506000610b8783600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3891906117e9565b602060405180830381865afa158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b799190611819565b61133390919063ffffffff16565b9050610b9e8160095461137d90919063ffffffff16565b600981905550610be1610bd0600854610bc284600c5461140d90919063ffffffff16565b61148890919063ffffffff16565b600b5461137d90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610c01336114d2565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790611ab8565b60405180910390fd5b610c4933610de5565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca357600080fd5b600060048054905090506000811415610cbc5750610ddc565b60008060005a90505b8482108015610cd357508383105b15610dd75783600f5410610cea576000600f819055505b610d336004600f5481548110610d0357610d026118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d2565b15610d8257610d816004600f5481548110610d5157610d506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610de5565b5b610da7610d985a8361133390919063ffffffff16565b8361137d90919063ffffffff16565b91505a9050600f6000815480929190610dbf90611b07565b91905055508280610dcf90611b07565b935050610cc5565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610e355761107a565b6000610e40826105ec565b9050600081111561107857610e6081600a5461137d90919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ec3929190611b50565b6020604051808303816000875af1158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190611bb1565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fa081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461137d90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611031600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111409190611bde565b81548110611151576111506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111cf576111ce6118b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560006004600160048054905061126f9190611bde565b815481106112805761127f6118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112fb576112fa611c12565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061137583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061153f565b905092915050565b600080828461138c9190611c41565b9050838110156113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890611ce3565b60405180910390fd5b8091505092915050565b6000611406600c546113f8600b548561140d90919063ffffffff16565b61148890919063ffffffff16565b9050919050565b6000808314156114205760009050611482565b6000828461142e9190611d03565b905082848261143d9190611d8c565b1461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490611e2f565b60405180910390fd5b809150505b92915050565b60006114ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115a3565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115229190611c41565b1080156115385750600e54611536836105ec565b115b9050919050565b6000838311158290611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9190611ed7565b60405180910390fd5b50600083856115969190611bde565b9050809150509392505050565b600080831182906115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19190611ed7565b60405180910390fd5b50600083856115f99190611d8c565b9050809150509392505050565b6000819050919050565b61161981611606565b82525050565b60006020820190506116346000830184611610565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061166a8261163f565b9050919050565b61167a8161165f565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b6116a681611606565b81146116b157600080fd5b50565b6000813590506116c38161169d565b92915050565b600080604083850312156116e0576116df61163a565b5b60006116ee85828601611688565b92505060206116ff858286016116b4565b9150509250929050565b60006020828403121561171f5761171e61163a565b5b600061172d84828501611688565b91505092915050565b6000806040838503121561174d5761174c61163a565b5b600061175b858286016116b4565b925050602061176c858286016116b4565b9150509250929050565b600060608201905061178b6000830186611610565b6117986020830185611610565b6117a56040830184611610565b949350505050565b6000602082840312156117c3576117c261163a565b5b60006117d1848285016116b4565b91505092915050565b6117e38161165f565b82525050565b60006020820190506117fe60008301846117da565b92915050565b6000815190506118138161169d565b92915050565b60006020828403121561182f5761182e61163a565b5b600061183d84828501611804565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061188481611671565b92915050565b6000602082840312156118a05761189f61163a565b5b60006118ae84828501611875565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061191561191061190b846118e6565b6118f0565b611606565b9050919050565b611925816118fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6119608161165f565b82525050565b60006119728383611957565b60208301905092915050565b6000602082019050919050565b60006119968261192b565b6119a08185611936565b93506119ab83611947565b8060005b838110156119dc5781516119c38882611966565b97506119ce8361197e565b9250506001810190506119af565b5085935050505092915050565b60006080820190506119fe600083018761191c565b8181036020830152611a10818661198b565b9050611a1f60408301856117da565b611a2c6060830184611610565b95945050505050565b600082825260208201905092915050565b7f546f6f20717569636b2e20506c65617365207761697420666f7220612062697460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000611aa2602183611a35565b9150611aad82611a46565b604082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611606565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b4557611b44611ad8565b5b600182019050919050565b6000604082019050611b6560008301856117da565b611b726020830184611610565b9392505050565b60008115159050919050565b611b8e81611b79565b8114611b9957600080fd5b50565b600081519050611bab81611b85565b92915050565b600060208284031215611bc757611bc661163a565b5b6000611bd584828501611b9c565b91505092915050565b6000611be982611606565b9150611bf483611606565b925082821015611c0757611c06611ad8565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611c4c82611606565b9150611c5783611606565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c8c57611c8b611ad8565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611ccd601b83611a35565b9150611cd882611c97565b602082019050919050565b60006020820190508181036000830152611cfc81611cc0565b9050919050565b6000611d0e82611606565b9150611d1983611606565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d5257611d51611ad8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611d9782611606565b9150611da283611606565b925082611db257611db1611d5d565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611e19602183611a35565b9150611e2482611dbd565b604082019050919050565b60006020820190508181036000830152611e4881611e0c565b9050919050565b600081519050919050565b60005b83811015611e78578082015181840152602081019050611e5d565b83811115611e87576000848401525b50505050565b6000601f19601f8301169050919050565b6000611ea982611e4f565b611eb38185611a35565b9350611ec3818560208601611e5a565b611ecc81611e8d565b840191505092915050565b60006020820190508181036000830152611ef18184611e9e565b90509291505056fea2646970667358221220b3a3c4457dea1161296c504fa0900544eabaeacc64953594d2213c2eee77320264736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063807c2d9c116101fd578063c2c7c03a11610118578063e66b1d1e116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063e66b1d1e14610de2578063eac0fc5c14610e0b578063f01f20df14610e36578063f0b37c0414610e61576103d9565b8063d920334e116100e7578063d920334e14610d14578063da00097d14610d3d578063dd62ed3e14610d68578063e5c85a6a14610da5576103d9565b8063c2c7c03a14610c6c578063ca33e64c14610c95578063ca987b0e14610cc0578063d6f5e63914610ceb576103d9565b8063a9f7864b11610190578063b6a5d7de1161015f578063b6a5d7de14610bc4578063bad3ea6a14610bed578063be816ffc14610c18578063bf56b37114610c41576103d9565b8063a9f7864b14610b20578063ad9ee39114610b49578063b408d48914610b72578063b513682314610b9b576103d9565b806398118cb4116101cc57806398118cb414610a64578063a3a2e89e14610a8f578063a8aa1b3114610ab8578063a9059cbb14610ae3576103d9565b8063807c2d9c146109a6578063893d20e8146109d15780638b42507f146109fc57806395d89b4114610a39576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c1461090057806378051f4d146109295780637d1db4a5146109525780637db1342c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b50610950600480360381019061094b9190614801565b611cc6565b005b34801561095e57600080fd5b50610967611ddf565b60405161097491906143b1565b60405180910390f35b34801561098957600080fd5b506109a4600480360381019061099f91906146ef565b611de5565b005b3480156109b257600080fd5b506109bb611e37565b6040516109c891906143b1565b60405180910390f35b3480156109dd57600080fd5b506109e6611e3d565b6040516109f3919061483d565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906145e5565b611e66565b604051610a309190614571565b60405180910390f35b348015610a4557600080fd5b50610a4e611e86565b604051610a5b9190614465565b60405180910390f35b348015610a7057600080fd5b50610a79611ec3565b604051610a8691906143b1565b60405180910390f35b348015610a9b57600080fd5b50610ab66004803603810190610ab19190614783565b611ec9565b005b348015610ac457600080fd5b50610acd611f6c565b604051610ada919061483d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b059190614516565b611f92565b604051610b179190614571565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b429190614858565b611fa7565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906145e5565b612082565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906146ef565b61211c565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b61216e565b005b348015610bd057600080fd5b50610beb6004803603810190610be691906145e5565b612208565b005b348015610bf957600080fd5b50610c026122aa565b604051610c0f91906148f7565b60405180910390f35b348015610c2457600080fd5b50610c3f6004803603810190610c3a9190614912565b6122d0565b005b348015610c4d57600080fd5b50610c56612584565b604051610c6391906143b1565b60405180910390f35b348015610c7857600080fd5b50610c936004803603810190610c8e91906145b8565b61258a565b005b348015610ca157600080fd5b50610caa6125ef565b604051610cb7919061483d565b60405180910390f35b348015610ccc57600080fd5b50610cd5612615565b604051610ce291906143b1565b60405180910390f35b348015610cf757600080fd5b50610d126004803603810190610d0d91906145e5565b61261b565b005b348015610d2057600080fd5b50610d3b6004803603810190610d3691906146ef565b612801565b005b348015610d4957600080fd5b50610d52612853565b604051610d5f9190614571565b60405180910390f35b348015610d7457600080fd5b50610d8f6004803603810190610d8a9190614912565b612866565b604051610d9c91906143b1565b60405180910390f35b348015610db157600080fd5b50610dcc6004803603810190610dc791906145e5565b6128ed565b604051610dd99190614571565b60405180910390f35b348015610dee57600080fd5b50610e096004803603810190610e0491906145b8565b61290d565b005b348015610e1757600080fd5b50610e20612972565b604051610e2d91906143b1565b60405180910390f35b348015610e4257600080fd5b50610e4b612978565b604051610e5891906143b1565b60405180910390f35b348015610e6d57600080fd5b50610e886004803603810190610e8391906145e5565b61297e565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600d81526020017f42616e6b206f66205473756b6100000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b611ccf3361156b565b611d0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d05906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611dd49190614ce1565b60405180910390a150565b60075481565b611dee33612b76565b611e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2490614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600981526020017f42414e4b5453554b410000000000000000000000000000000000000000000000815250905090565b60115481565b611ed233612b76565b611f11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0890614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611f9f338484612d50565b905092915050565b611fb033612b76565b611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161204c929190614cfc565b600060405180830381600087803b15801561206657600080fd5b505af115801561207a573d6000803e3d6000fd5b505050505050565b61208b33612b76565b6120ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c190614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61212533612b76565b612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90614a46565b60405180910390fd5b80601c8190555050565b61217733612b76565b6121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6122113361156b565b612250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612247906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166122e957612580565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123755750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612386575061238583613861565b5b80156123db5750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124805750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000151582151514801561249a575060001515811515145b6124d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d090614d71565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561257d57601c54601b5461253b9190614d91565b431161257c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257390614e33565b60405180910390fd5b5b50505b5050565b601b5481565b61259333612b76565b6125d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c990614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b6126243361156b565b612663576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265a906149da565b60405180910390fd5b60005b6020805490508110156127a9578173ffffffffffffffffffffffffffffffffffffffff166020828154811061269e5761269d614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561279657602060016020805490506126f99190614e53565b8154811061270a57612709614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020828154811061274957612748614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506127a9565b80806127a190614bea565b915050612666565b60208054905081146127fd5760208054806127c7576127c6614e87565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b61280a33612b76565b612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b61291633612b76565b612955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294c90614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b6129873361156b565b6129c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bd906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d91565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e53565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846122d0565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cfc565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b60006147ce8261448c565b9050919050565b6147de816147c3565b81146147e957600080fd5b50565b6000813590506147fb816147d5565b92915050565b60006020828403121561481757614816614487565b5b6000614825848285016147ec565b91505092915050565b614837816144ac565b82525050565b6000602082019050614852600083018461482e565b92915050565b6000806040838503121561486f5761486e614487565b5b600061487d85828601614501565b925050602061488e85828601614501565b9150509250929050565b6000819050919050565b60006148bd6148b86148b38461448c565b614898565b61448c565b9050919050565b60006148cf826148a2565b9050919050565b60006148e1826148c4565b9050919050565b6148f1816148d6565b82525050565b600060208201905061490c60008301846148e8565b92915050565b6000806040838503121561492957614928614487565b5b6000614937858286016144d5565b9250506020614948858286016144d5565b9150509250929050565b600061495d826148c4565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b614898565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c83600083018561482e565b614c906020830184614c5f565b9392505050565b6000604082019050614cac600083018561482e565b614cb960208301846143a2565b9392505050565b6000614ccb826148c4565b9050919050565b614cdb81614cc0565b82525050565b6000602082019050614cf66000830184614cd2565b92915050565b6000604082019050614d1160008301856143a2565b614d1e60208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d5b6008836143d7565b9150614d6682614d25565b602082019050919050565b60006020820190508181036000830152614d8a81614d4e565b9050919050565b6000614d9c82614398565b9150614da783614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ddc57614ddb614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614e1d600c836143d7565b9150614e2882614de7565b602082019050919050565b60006020820190508181036000830152614e4c81614e10565b9050919050565b6000614e5e82614398565b9150614e6983614398565b925082821015614e7c57614e7b614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe606083018561482e565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a600083018961482e565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e608083018561482e565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a2646970667358221220efecb70c3bb1bee4cc3634ffdc726873e8aa0c1f2dd67b5cad75e798d4e8b87c64736f6c634300080a0033

Deployed Bytecode Sourcemap

13103:14354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15035:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17258:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18766:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25660:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21515:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17520:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14732:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14418:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16646:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22868:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18364:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14235:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12473:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17434:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20670:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13931:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14037:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21307:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13774:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18056:300;;;;;;;;;;;;;:::i;:::-;;21162:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14096:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14892:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18990:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20112:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14336:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14268:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18514:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19728:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12873:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13668:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19224:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13719:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17614:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13982:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17344:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14197:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19458:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14592:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22704:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20954:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21410:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21712:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21616:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12146:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14771:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22104:588;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14620:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22002:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14497:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14452:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16837:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19113:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14939:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18625:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14142:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19338:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14652:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14376:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12316:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20521:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14561:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19589:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12647:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14695:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15035:54;;;;:::o;17258:80::-;17306:13;17330:5;;;;;;;;;;;;;;;;;17323:12;;17258:80;:::o;18766:216::-;18841:4;18893:6;18858:11;:23;18870:10;18858:23;;;;;;;;;;;;;;;:32;18882:7;18858:32;;;;;;;;;;;;;;;:41;;;;18936:7;18915:37;;18924:10;18915:37;;;18945:6;18915:37;;;;;;:::i;:::-;;;;;;;;18970:4;18963:11;;18766:216;;;;:::o;25660:154::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25741:9:::1;25727:11;;:23;;;;;;;;;;;;;;;;;;25758:11;;;;;;;;;;;25755:52;;;25789:12;25776:10;:25;;;;25755:52;25660:154:::0;:::o;21515:93::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21596:4:::1;21581:9;:14;21591:3;21581:14;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;21515:93:::0;:::o;17520:88::-;17575:7;17593:12;;17586:19;;17520:88;:::o;14732:30::-;;;;;;;;;;;;;:::o;14418:27::-;;;;:::o;16646:185::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16725:23:::1;16740:7;16725:14;:23::i;:::-;16724:24;16716:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16794:15;16815:7;16794:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16646:185:::0;:::o;22868:371::-;22968:4;23033:10;22998:11;:19;23010:6;22998:19;;;;;;;;;;;;;;;:31;23018:10;22998:31;;;;;;;;;;;;;;;;:45;22995:179;;23093:69;23129:6;23093:69;;;;;;;;;;;;;;;;;:11;:19;23105:6;23093:19;;;;;;;;;;;;;;;:31;23113:10;23093:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;23059:11;:19;23071:6;23059:19;;;;;;;;;;;;;;;:31;23079:10;23059:31;;;;;;;;;;;;;;;:103;;;;22995:179;23191:40;23205:6;23213:9;23224:6;23191:13;:40::i;:::-;23184:47;;22868:371;;;;;:::o;18364:142::-;18417:7;18444:54;18482:15;18492:4;;;;;;;;;;;18482:9;:15::i;:::-;18444:33;18461:15;18471:4;;;;;;;;;;;18461:9;:15::i;:::-;18444:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;18437:61;;18364:142;:::o;14235:29::-;;;;:::o;12473:103::-;12528:4;12563:5;;;;;;;;;;;12552:16;;:7;:16;;;12545:23;;12473:103;;;:::o;17434:80::-;17486:5;13302:2;17495:16;;17434:80;:::o;20670:276::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20827:14:::1;20802:21;;:39;;;;;;;;;;;;;;;;;;20868:16;20852:13;:32;;;;20923:15;20895:25;;:43;;;;;;;;;;;;;;;;;;20670:276:::0;;;:::o;13931:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;14037:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;21307:97::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21395:4:::1;21374:13;:18;21388:3;21374:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21307:97:::0;:::o;13774:33::-;;;;;;;;;;;;;:::o;18056:300::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18100:13:::1;18128:221;18148:15;:22;;;;18140:5;:30;18128:221;;;18196:22;18221:33;18231:15;18247:5;18231:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18221:9;:33::i;:::-;18196:58;;18269:68;18275:15;18291:5;18275:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18333:3;18316:14;;18299;:31;;;;:::i;:::-;:37;;;;:::i;:::-;18269:5;:68::i;:::-;18181:168;18172:7;;;;;:::i;:::-;;;;18128:221;;;18089:267;18056:300::o:0;21162:139::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21255:6:::1;21249:3;:12;21241:21;;;::::0;::::1;;21290:3;21273:14;:20;;;;21162:139:::0;:::o;14096:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14892:40::-;;;;;;;;;;;;;:::o;18990:115::-;19045:4;19069:28;19077:7;19086:10;19069:7;:28::i;:::-;19062:35;;18990:115;;;:::o;20112:401::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20265:9:::1;20250:12;:24;;;;20298:12;20285:10;:25;;;;20330:13;20315:12;:28;;;;20371:15;20354:14;:32;;;;20418:28;20435:10;;20418:12;;:16;;:28;;;;:::i;:::-;20407:8;:39;;;;20477:28;20490:14;;20477:8;;:12;;:28;;;;:::i;:::-;20457:17;:48;;;;20112:401:::0;;;;:::o;14336:33::-;;;;:::o;14268:31::-;;;;:::o;18514:105::-;18580:7;18598:9;:18;18608:7;18598:18;;;;;;;;;;;;;;;;18591:25;;18514:105;;;:::o;19728:376::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19846:4:::1;19828:23;;:6;:23;;;;:41;;;;;19865:4;;;;;;;;;;;19855:14;;:6;:14;;;;19828:41;19820:50;;;::::0;::::1;;19908:6;19881:16;:24;19898:6;19881:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19938:6;19935:162;;;19960:19;;;;;;;;;;;:28;;;19989:6;19997:1;19960:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19935:162;;;20030:19;;;;;;;;;;;:28;;;20059:6;20067:9;:17;20077:6;20067:17;;;;;;;;;;;;;;;;20030:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19935:162;19728:376:::0;;:::o;12873:173::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12957:3:::1;12949:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;12993:4;12971:14:::0;:19:::1;12986:3;12971:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;13013:25;13034:3;13013:25;;;;;;:::i;:::-;;;;;;;;12873:173:::0;:::o;13668:43::-;;;;:::o;19224:106::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19314:8:::1;19300:10;:22;;;;19224:106:::0;:::o;13719:41::-;;;;:::o;17614:78::-;17666:7;17684:5;;;;;;;;;;;17677:12;;17614:78;:::o;13982:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;17344:84::-;17394:13;17418:7;;;;;;;;;;;;;;;;;17411:14;;17344:84;:::o;14197:31::-;;;;:::o;19458:123::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19567:6:::1;19545:11;:19;19557:6;19545:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19458:123:::0;;:::o;14592:19::-;;;;;;;;;;;;;:::o;22704:156::-;22784:4;22808:44;22822:10;22834:9;22845:6;22808:13;:44::i;:::-;22801:51;;22704:156;;;;:::o;20954:200::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21070:19:::1;;;;;;;;;;;:43;;;21114:11;21127:18;21070:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20954:200:::0;;:::o;21410:97::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21484:13:::1;:18;21498:3;21484:18;;;;;;;;;;;;;;;;21477:25;;;;;;;;;;;21410:97:::0;:::o;21712:106::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21805:8:::1;21785:17;:28;;;;21712:106:::0;:::o;21616:88::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21685:9:::1;:14;21695:3;21685:14;;;;;;;;;;;;;;;;21678:21;;;;;;;;;;;21616:88:::0;:::o;12146:94::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12228:4:::1;12206:14:::0;:19:::1;12221:3;12206:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;12146:94:::0;:::o;14771:46::-;;;;;;;;;;;;;:::o;22104:588::-;22181:11;;;;;;;;;;;22177:49;;22208:7;;22177:49;22238:14;22273:4;22257:21;;:6;:21;;;;:47;;;;;22291:13;;;;;;;;;;;22282:22;;:6;:22;;;;22257:47;:69;;;;;22308:18;22319:6;22308:10;:18::i;:::-;22257:69;22255:101;;;;;22332:13;:24;22346:9;22332:24;;;;;;;;;;;;;;;;;;;;;;;;;22255:101;22238:118;;22367:17;22387:9;:17;22397:6;22387:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;22408:9;:20;22418:9;22408:20;;;;;;;;;;;;;;;;;;;;;;;;;22387:41;22367:61;;22461:5;22448:18;;:9;:18;;;:43;;;;;22486:5;22470:21;;:12;:21;;;22448:43;22439:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22563:13;:24;22577:9;22563:24;;;;;;;;;;;;;;;;;;;;;;;;;22560:125;;;22640:17;;22627:10;;:30;;;;:::i;:::-;22612:12;:45;22603:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22560:125;22166:526;;22104:588;;;:::o;14620:25::-;;;;:::o;22002:94::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22080:8:::1;22068:11;;:20;;;;;;;;;;;;;;;;;;22002:94:::0;:::o;14497:55::-;;;;;;;;;;;;;:::o;14452:36::-;;;;:::o;16837:413::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16910:13:::1;16938:229;16958:15;:22;;;;16950:5;:30;16938:229;;;17036:7;17010:33;;:15;17026:5;17010:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;17006:150;;;17075:15;17114:1;17091:15;:22;;;;:24;;;;:::i;:::-;17075:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17052:15;17068:5;17052:22;;;;;;;;:::i;:::-;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;17135:5;;17006:150;16982:7;;;;;:::i;:::-;;;;16938:229;;;17187:15;:22;;;;17178:5;:31;17175:71;;17216:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17175:71;16899:351;16837:413:::0;:::o;19113:103::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19200:8:::1;19185:12;:23;;;;19113:103:::0;:::o;14939:45::-;;;;;;;;;;;;;:::o;18625:133::-;18709:7;18727:11;:19;18739:6;18727:19;;;;;;;;;;;;;;;:28;18747:7;18727:28;;;;;;;;;;;;;;;;18720:35;;18625:133;;;;:::o;14142:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;19338:108::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19430:8:::1;19413:14;;:25;;;;;;;;;;;;;;;;;;19338:108:::0;:::o;14652:36::-;;;;:::o;14376:33::-;;;;:::o;12316:97::-;11862:19;11870:10;11862:7;:19::i;:::-;11854:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12400:5:::1;12378:14;:19;12393:3;12378:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;12316:97:::0;:::o;20521:141::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20634:20:::1;20610:21;;:44;;;;;;;;;;;;;;;;;;20521:141:::0;:::o;14561:24::-;;;;;;;;;;;;;:::o;19589:131::-;12031:24;12044:10;12031:12;:24::i;:::-;12023:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19706:6:::1;19680:15;:23;19696:6;19680:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19589:131:::0;;:::o;12647:107::-;12703:4;12727:14;:19;12742:3;12727:19;;;;;;;;;;;;;;;;;;;;;;;;;12720:26;;12647:107;;;:::o;14695:30::-;;;;;;;;;;;;;:::o;1923:179::-;1981:7;2001:9;2017:1;2013;:5;;;;:::i;:::-;2001:17;;2042:1;2037;:6;;2029:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;2093:1;2086:8;;;1923:179;;;;:::o;16268:370::-;16330:4;16347:15;16365:5;16347:23;;16381:13;16409:194;16429:15;:22;;;;16421:5;:30;16409:194;;;16507:7;16481:33;;:15;16497:5;16481:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;16477:115;;;16548:4;16535:17;;16571:5;;16477:115;16453:7;;;;;:::i;:::-;;;;16409:194;;;16620:10;16613:17;;;;16268:370;;;:::o;2254:190::-;2340:7;2373:1;2368;:6;;2376:12;2360:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2400:9;2416:1;2412;:5;;;;:::i;:::-;2400:17;;2435:1;2428:8;;;2254:190;;;;;:::o;23247:1616::-;23339:4;23378:1;23358:9;:17;23368:6;23358:17;;;;;;;;;;;;;;;;:21;23350:30;;;;;;23414:25;23422:6;23429:9;23414:7;:25::i;:::-;23463:16;;;;;;;;;;;23460:73;;;23489:41;23504:6;23512:9;23523:6;23489:14;:41::i;:::-;23482:48;;;;23460:73;23549:14;:22;23564:6;23549:22;;;;;;;;;;;;;;;;;;;;;;;;;23548:23;:53;;;;;23576:14;:25;23591:9;23576:25;;;;;;;;;;;;;;;;;;;;;;;;;23575:26;23548:53;23545:128;;;23625:11;;;;;;;;;;;23617:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23545:128;23703:12;;23693:6;:22;;:49;;;;23719:15;:23;23735:6;23719:23;;;;;;;;;;;;;;;;;;;;;;;;;23693:49;23685:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23794:4;;;;;;;;;;;23780:18;;:10;:18;;;;:39;;;;;23803:16;;;;;;;;;;;23802:17;23780:39;:64;;;;;23823:21;;;;;;;;;;;23780:64;:109;;;;;23876:13;;23848:9;:24;23866:4;23848:24;;;;;;;;;;;;;;;;:41;;23780:109;23777:128;;;23892:10;:8;:10::i;:::-;23777:128;23964:53;23986:6;23964:53;;;;;;;;;;;;;;;;;:9;:17;23974:6;23964:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23944:9;:17;23954:6;23944:17;;;;;;;;;;;;;;;:73;;;;24042:15;:26;24058:9;24042:26;;;;;;;;;;;;;;;;;;;;;;;;;24041:27;:45;;;;;24072:14;;;;;;;;;;;24041:45;24038:141;;;24156:10;;24120:32;24145:6;24120:9;:20;24130:9;24120:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;24112:55;;;;;;24038:141;24201:19;24224:11;:19;24236:6;24224:19;;;;;;;;;;;;;;;;;;;;;;;;;24223:20;:47;;;;;24248:11;:22;24260:9;24248:22;;;;;;;;;;;;;;;;;;;;;;;;;24247:23;24223:47;:93;;24310:6;24223:93;;;24273:34;24281:6;24289:9;24300:6;24273:7;:34::i;:::-;24223:93;24201:115;;24350:37;24375:11;24350:9;:20;24360:9;24350:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24327:9;:20;24337:9;24327:20;;;;;;;;;;;;;;;:60;;;;24433:16;:24;24450:6;24433:24;;;;;;;;;;;;;;;;;;;;;;;;;24429:127;;24478:19;;;;;;;;;;;:28;;;24507:6;24515:9;:17;24525:6;24515:17;;;;;;;;;;;;;;;;24478:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24474:71;;;;;;24429:127;24572:16;:27;24589:9;24572:27;;;;;;;;;;;;;;;;;;;;;;;;;24568:137;;24620:19;;;;;;;;;;;:28;;;24649:9;24660;:20;24670:9;24660:20;;;;;;;;;;;;;;;;24620:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24616:77;;;;;;24568:137;24721:19;;;;;;;;;;;:27;;;24749:14;;24721:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24717:59;;;;;;24810:9;24793:40;;24802:6;24793:40;;;24821:11;24793:40;;;;;;:::i;:::-;;;;;;;;24851:4;24844:11;;;23247:1616;;;;;;:::o;2110:136::-;2168:7;2195:43;2199:1;2202;2195:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2188:50;;2110:136;;;;:::o;17700:348::-;17795:1;17776:21;;:7;:21;;;;17768:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17869:68;17892:6;17869:68;;;;;;;;;;;;;;;;;:9;:18;17879:7;17869:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;17848:9;:18;17858:7;17848:18;;;;;;;;;;;;;;;:89;;;;17963:24;17980:6;17963:12;;:16;;:24;;;;:::i;:::-;17948:12;:39;;;;18029:1;18003:37;;18012:7;18003:37;;;18033:6;18003:37;;;;;;:::i;:::-;;;;;;;;17700:348;;:::o;21826:168::-;21883:4;21900:12;21954:4;21942:17;21934:25;;21985:1;21978:4;:8;21971:15;;;21826:168;;;:::o;24875:330::-;24968:4;25005:53;25027:6;25005:53;;;;;;;;;;;;;;;;;:9;:17;25015:6;25005:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24985:9;:17;24995:6;24985:17;;;;;;;;;;;;;;;:73;;;;25092:32;25117:6;25092:9;:20;25102:9;25092:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25069:9;:20;25079:9;25069:20;;;;;;;;;;;;;;;:55;;;;25157:9;25140:35;;25149:6;25140:35;;;25168:6;25140:35;;;;;;:::i;:::-;;;;;;;;25193:4;25186:11;;24875:330;;;;;:::o;25822:1565::-;15153:4;15134:16;;:23;;;;;;;;;;;;;;;;;;25884:19:::1;25906:9;:24;25924:4;25906:24;;;;;;;;;;;;;;;;25884:46;;25941:23;25967:50;26015:1;25967:43;26001:8;;25967:29;25983:12;;25967:11;:15;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;:47;;:50;;;;:::i;:::-;25941:76;;26028:20;26051:32;26067:15;26051:11;:15;;:32;;;;:::i;:::-;26028:55;;26096:21;26134:1;26120:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26096:40;;26165:4;26147;26152:1;26147:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26191:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26181:4;26186:1;26181:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26217:6;;;;;;;;;;;:57;;;26289:12;26316:1;26332:4;26359;26379:15;26217:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26418:17;26438:21;26418:41;;26472:19;26494:33;26507:19;26524:1;26507:12;;:16;;:19;;;;:::i;:::-;26494:8;;:12;;:33;;;;:::i;:::-;26472:55;;26548:26;26577:51;26626:1;26577:44;26609:11;26577:27;26591:12;;26577:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;26548:80;;26639:27;26669:42;26699:11;26669:25;26683:10;;26669:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;26639:72;;26716:24;26743:58;26782:18;26743:34;26757:19;26743:9;:13;;:34;;;;:::i;:::-;:38;;:58;;;;:::i;:::-;26716:85;;26818:19;;;;;;;;;;;:27;;;26853:19;26818:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;26814:73;;;;;;26928:1;26910:15;:19;26907:362;;;26945:6;;;;;;;;;;;:22;;;26975:18;27021:4;27045:15;27079:1;27099::::0;27119:21:::1;;;;;;;;;;;27159:15;26945:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27209:48;27221:18;27241:15;27209:48;;;;;;;:::i;:::-;;;;;;;;26907:362;27300:1;27281:16;:20;27277:103;;;27308:66;27339:16;;;;;;;;;;;27357;27308:30;:66::i;:::-;27277:103;25863:1524;;;;;;;;;15199:5:::0;15180:16;;:24;;;;;;;;;;;;;;;;;;25822:1565::o;25213:439::-;25299:7;25329:21;25361:9;25353:17;;:4;;;;;;;;;;;:17;;;:48;;25393:8;;25353:48;;;25373:17;;25353:48;25329:72;;25412:17;25432:34;25462:3;25432:25;25443:13;25432:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25412:54;;25506:39;25535:9;25506;:24;25524:4;25506:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;25479:9;:24;25497:4;25479:24;;;;;;;;;;;;;;;:66;;;;25586:4;25561:42;;25570:6;25561:42;;;25593:9;25561:42;;;;;;:::i;:::-;;;;;;;;25623:21;25634:9;25623:6;:10;;:21;;;;:::i;:::-;25616:28;;;;25213:439;;;;;:::o;2452:224::-;2510:7;2539:1;2534;:6;2530:25;;;2551:1;2544:8;;;;2530:25;2565:9;2581:1;2577;:5;;;;:::i;:::-;2565:17;;2610:1;2605;2601;:5;;;;:::i;:::-;:10;2593:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2667:1;2660:8;;;2452:224;;;;;:::o;2684:132::-;2742:7;2769:39;2773:1;2776;2769:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2762:46;;2684:132;;;;:::o;1690:200::-;1763:12;1781:2;:7;;1796:5;1813:1;1803:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1781:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1762:54;;;1835:7;1827:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1751:139;1690:200;;:::o;2824:189::-;2910:7;2942:1;2938;:5;2945:12;2930:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2969:9;2985:1;2981;:5;;;;:::i;:::-;2969:17;;3004:1;2997:8;;;2824:189;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:116::-;3916:21;3931:5;3916:21;:::i;:::-;3909:5;3906:32;3896:60;;3952:1;3949;3942:12;3896:60;3846:116;:::o;3968:133::-;4011:5;4049:6;4036:20;4027:29;;4065:30;4089:5;4065:30;:::i;:::-;3968:133;;;;:::o;4107:323::-;4163:6;4212:2;4200:9;4191:7;4187:23;4183:32;4180:119;;;4218:79;;:::i;:::-;4180:119;4338:1;4363:50;4405:7;4396:6;4385:9;4381:22;4363:50;:::i;:::-;4353:60;;4309:114;4107:323;;;;:::o;4436:329::-;4495:6;4544:2;4532:9;4523:7;4519:23;4515:32;4512:119;;;4550:79;;:::i;:::-;4512:119;4670:1;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4641:117;4436:329;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:607::-;5897:6;5905;5913;5962:2;5950:9;5941:7;5937:23;5933:32;5930:119;;;5968:79;;:::i;:::-;5930:119;6088:1;6113:50;6155:7;6146:6;6135:9;6131:22;6113:50;:::i;:::-;6103:60;;6059:114;6212:2;6238:53;6283:7;6274:6;6263:9;6259:22;6238:53;:::i;:::-;6228:63;;6183:118;6340:2;6366:50;6408:7;6399:6;6388:9;6384:22;6366:50;:::i;:::-;6356:60;;6311:115;5826:607;;;;;:::o;6439:329::-;6498:6;6547:2;6535:9;6526:7;6522:23;6518:32;6515:119;;;6553:79;;:::i;:::-;6515:119;6673:1;6698:53;6743:7;6734:6;6723:9;6719:22;6698:53;:::i;:::-;6688:63;;6644:117;6439:329;;;;:::o;6774:765::-;6860:6;6868;6876;6884;6933:3;6921:9;6912:7;6908:23;6904:33;6901:120;;;6940:79;;:::i;:::-;6901:120;7060:1;7085:53;7130:7;7121:6;7110:9;7106:22;7085:53;:::i;:::-;7075:63;;7031:117;7187:2;7213:53;7258:7;7249:6;7238:9;7234:22;7213:53;:::i;:::-;7203:63;;7158:118;7315:2;7341:53;7386:7;7377:6;7366:9;7362:22;7341:53;:::i;:::-;7331:63;;7286:118;7443:2;7469:53;7514:7;7505:6;7494:9;7490:22;7469:53;:::i;:::-;7459:63;;7414:118;6774:765;;;;;;;:::o;7545:468::-;7610:6;7618;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7920:2;7946:50;7988:7;7979:6;7968:9;7964:22;7946:50;:::i;:::-;7936:60;;7891:115;7545:468;;;;;:::o;8019:104::-;8064:7;8093:24;8111:5;8093:24;:::i;:::-;8082:35;;8019:104;;;:::o;8129:138::-;8210:32;8236:5;8210:32;:::i;:::-;8203:5;8200:43;8190:71;;8257:1;8254;8247:12;8190:71;8129:138;:::o;8273:155::-;8327:5;8365:6;8352:20;8343:29;;8381:41;8416:5;8381:41;:::i;:::-;8273:155;;;;:::o;8434:345::-;8501:6;8550:2;8538:9;8529:7;8525:23;8521:32;8518:119;;;8556:79;;:::i;:::-;8518:119;8676:1;8701:61;8754:7;8745:6;8734:9;8730:22;8701:61;:::i;:::-;8691:71;;8647:125;8434:345;;;;:::o;8785:118::-;8872:24;8890:5;8872:24;:::i;:::-;8867:3;8860:37;8785:118;;:::o;8909:222::-;9002:4;9040:2;9029:9;9025:18;9017:26;;9053:71;9121:1;9110:9;9106:17;9097:6;9053:71;:::i;:::-;8909:222;;;;:::o;9137:474::-;9205:6;9213;9262:2;9250:9;9241:7;9237:23;9233:32;9230:119;;;9268:79;;:::i;:::-;9230:119;9388:1;9413:53;9458:7;9449:6;9438:9;9434:22;9413:53;:::i;:::-;9403:63;;9359:117;9515:2;9541:53;9586:7;9577:6;9566:9;9562:22;9541:53;:::i;:::-;9531:63;;9486:118;9137:474;;;;;:::o;9617:60::-;9645:3;9666:5;9659:12;;9617:60;;;:::o;9683:142::-;9733:9;9766:53;9784:34;9793:24;9811:5;9793:24;:::i;:::-;9784:34;:::i;:::-;9766:53;:::i;:::-;9753:66;;9683:142;;;:::o;9831:126::-;9881:9;9914:37;9945:5;9914:37;:::i;:::-;9901:50;;9831:126;;;:::o;9963:154::-;10041:9;10074:37;10105:5;10074:37;:::i;:::-;10061:50;;9963:154;;;:::o;10123:187::-;10238:65;10297:5;10238:65;:::i;:::-;10233:3;10226:78;10123:187;;:::o;10316:278::-;10437:4;10475:2;10464:9;10460:18;10452:26;;10488:99;10584:1;10573:9;10569:17;10560:6;10488:99;:::i;:::-;10316:278;;;;:::o;10600:474::-;10668:6;10676;10725:2;10713:9;10704:7;10700:23;10696:32;10693:119;;;10731:79;;:::i;:::-;10693:119;10851:1;10876:53;10921:7;10912:6;10901:9;10897:22;10876:53;:::i;:::-;10866:63;;10822:117;10978:2;11004:53;11049:7;11040:6;11029:9;11025:22;11004:53;:::i;:::-;10994:63;;10949:118;10600:474;;;;;:::o;11080:144::-;11148:9;11181:37;11212:5;11181:37;:::i;:::-;11168:50;;11080:144;;;:::o;11230:167::-;11335:55;11384:5;11335:55;:::i;:::-;11330:3;11323:68;11230:167;;:::o;11403:258::-;11514:4;11552:2;11541:9;11537:18;11529:26;;11565:89;11651:1;11640:9;11636:17;11627:6;11565:89;:::i;:::-;11403:258;;;;:::o;11667:156::-;11807:8;11803:1;11795:6;11791:14;11784:32;11667:156;:::o;11829:365::-;11971:3;11992:66;12056:1;12051:3;11992:66;:::i;:::-;11985:73;;12067:93;12156:3;12067:93;:::i;:::-;12185:2;12180:3;12176:12;12169:19;;11829:365;;;:::o;12200:419::-;12366:4;12404:2;12393:9;12389:18;12381:26;;12453:9;12447:4;12443:20;12439:1;12428:9;12424:17;12417:47;12481:131;12607:4;12481:131;:::i;:::-;12473:139;;12200:419;;;:::o;12625:161::-;12765:13;12761:1;12753:6;12749:14;12742:37;12625:161;:::o;12792:366::-;12934:3;12955:67;13019:2;13014:3;12955:67;:::i;:::-;12948:74;;13031:93;13120:3;13031:93;:::i;:::-;13149:2;13144:3;13140:12;13133:19;;12792:366;;;:::o;13164:419::-;13330:4;13368:2;13357:9;13353:18;13345:26;;13417:9;13411:4;13407:20;13403:1;13392:9;13388:17;13381:47;13445:131;13571:4;13445:131;:::i;:::-;13437:139;;13164:419;;;:::o;13589:180::-;13729:32;13725:1;13717:6;13713:14;13706:56;13589:180;:::o;13775:366::-;13917:3;13938:67;14002:2;13997:3;13938:67;:::i;:::-;13931:74;;14014:93;14103:3;14014:93;:::i;:::-;14132:2;14127:3;14123:12;14116:19;;13775:366;;;:::o;14147:419::-;14313:4;14351:2;14340:9;14336:18;14328:26;;14400:9;14394:4;14390:20;14386:1;14375:9;14371:17;14364:47;14428:131;14554:4;14428:131;:::i;:::-;14420:139;;14147:419;;;:::o;14572:180::-;14620:77;14617:1;14610:88;14717:4;14714:1;14707:15;14741:4;14738:1;14731:15;14758:180;14806:77;14803:1;14796:88;14903:4;14900:1;14893:15;14927:4;14924:1;14917:15;14944:348;14984:7;15007:20;15025:1;15007:20;:::i;:::-;15002:25;;15041:20;15059:1;15041:20;:::i;:::-;15036:25;;15229:1;15161:66;15157:74;15154:1;15151:81;15146:1;15139:9;15132:17;15128:105;15125:131;;;15236:18;;:::i;:::-;15125:131;15284:1;15281;15277:9;15266:20;;14944:348;;;;:::o;15298:180::-;15346:77;15343:1;15336:88;15443:4;15440:1;15433:15;15467:4;15464:1;15457:15;15484:185;15524:1;15541:20;15559:1;15541:20;:::i;:::-;15536:25;;15575:20;15593:1;15575:20;:::i;:::-;15570:25;;15614:1;15604:35;;15619:18;;:::i;:::-;15604:35;15661:1;15658;15654:9;15649:14;;15484:185;;;;:::o;15675:233::-;15714:3;15737:24;15755:5;15737:24;:::i;:::-;15728:33;;15783:66;15776:5;15773:77;15770:103;;;15853:18;;:::i;:::-;15770:103;15900:1;15893:5;15889:13;15882:20;;15675:233;;;:::o;15914:85::-;15959:7;15988:5;15977:16;;15914:85;;;:::o;16005:158::-;16063:9;16096:61;16114:42;16123:32;16149:5;16123:32;:::i;:::-;16114:42;:::i;:::-;16096:61;:::i;:::-;16083:74;;16005:158;;;:::o;16169:147::-;16264:45;16303:5;16264:45;:::i;:::-;16259:3;16252:58;16169:147;;:::o;16322:348::-;16451:4;16489:2;16478:9;16474:18;16466:26;;16502:71;16570:1;16559:9;16555:17;16546:6;16502:71;:::i;:::-;16583:80;16659:2;16648:9;16644:18;16635:6;16583:80;:::i;:::-;16322:348;;;;;:::o;16676:332::-;16797:4;16835:2;16824:9;16820:18;16812:26;;16848:71;16916:1;16905:9;16901:17;16892:6;16848:71;:::i;:::-;16929:72;16997:2;16986:9;16982:18;16973:6;16929:72;:::i;:::-;16676:332;;;;;:::o;17014:134::-;17072:9;17105:37;17136:5;17105:37;:::i;:::-;17092:50;;17014:134;;;:::o;17154:147::-;17249:45;17288:5;17249:45;:::i;:::-;17244:3;17237:58;17154:147;;:::o;17307:238::-;17408:4;17446:2;17435:9;17431:18;17423:26;;17459:79;17535:1;17524:9;17520:17;17511:6;17459:79;:::i;:::-;17307:238;;;;:::o;17551:332::-;17672:4;17710:2;17699:9;17695:18;17687:26;;17723:71;17791:1;17780:9;17776:17;17767:6;17723:71;:::i;:::-;17804:72;17872:2;17861:9;17857:18;17848:6;17804:72;:::i;:::-;17551:332;;;;;:::o;17889:158::-;18029:10;18025:1;18017:6;18013:14;18006:34;17889:158;:::o;18053:365::-;18195:3;18216:66;18280:1;18275:3;18216:66;:::i;:::-;18209:73;;18291:93;18380:3;18291:93;:::i;:::-;18409:2;18404:3;18400:12;18393:19;;18053:365;;;:::o;18424:419::-;18590:4;18628:2;18617:9;18613:18;18605:26;;18677:9;18671:4;18667:20;18663:1;18652:9;18648:17;18641:47;18705:131;18831:4;18705:131;:::i;:::-;18697:139;;18424:419;;;:::o;18849:305::-;18889:3;18908:20;18926:1;18908:20;:::i;:::-;18903:25;;18942:20;18960:1;18942:20;:::i;:::-;18937:25;;19096:1;19028:66;19024:74;19021:1;19018:81;19015:107;;;19102:18;;:::i;:::-;19015:107;19146:1;19143;19139:9;19132:16;;18849:305;;;;:::o;19160:162::-;19300:14;19296:1;19288:6;19284:14;19277:38;19160:162;:::o;19328:366::-;19470:3;19491:67;19555:2;19550:3;19491:67;:::i;:::-;19484:74;;19567:93;19656:3;19567:93;:::i;:::-;19685:2;19680:3;19676:12;19669:19;;19328:366;;;:::o;19700:419::-;19866:4;19904:2;19893:9;19889:18;19881:26;;19953:9;19947:4;19943:20;19939:1;19928:9;19924:17;19917:47;19981:131;20107:4;19981:131;:::i;:::-;19973:139;;19700:419;;;:::o;20125:191::-;20165:4;20185:20;20203:1;20185:20;:::i;:::-;20180:25;;20219:20;20237:1;20219:20;:::i;:::-;20214:25;;20258:1;20255;20252:8;20249:34;;;20263:18;;:::i;:::-;20249:34;20308:1;20305;20301:9;20293:17;;20125:191;;;;:::o;20322:180::-;20370:77;20367:1;20360:88;20467:4;20464:1;20457:15;20491:4;20488:1;20481:15;20508:177;20648:29;20644:1;20636:6;20632:14;20625:53;20508:177;:::o;20691:366::-;20833:3;20854:67;20918:2;20913:3;20854:67;:::i;:::-;20847:74;;20930:93;21019:3;20930:93;:::i;:::-;21048:2;21043:3;21039:12;21032:19;;20691:366;;;:::o;21063:419::-;21229:4;21267:2;21256:9;21252:18;21244:26;;21316:9;21310:4;21306:20;21302:1;21291:9;21287:17;21280:47;21344:131;21470:4;21344:131;:::i;:::-;21336:139;;21063:419;;;:::o;21488:170::-;21628:22;21624:1;21616:6;21612:14;21605:46;21488:170;:::o;21664:366::-;21806:3;21827:67;21891:2;21886:3;21827:67;:::i;:::-;21820:74;;21903:93;21992:3;21903:93;:::i;:::-;22021:2;22016:3;22012:12;22005:19;;21664:366;;;:::o;22036:419::-;22202:4;22240:2;22229:9;22225:18;22217:26;;22289:9;22283:4;22279:20;22275:1;22264:9;22260:17;22253:47;22317:131;22443:4;22317:131;:::i;:::-;22309:139;;22036:419;;;:::o;22461:167::-;22601:19;22597:1;22589:6;22585:14;22578:43;22461:167;:::o;22634:366::-;22776:3;22797:67;22861:2;22856:3;22797:67;:::i;:::-;22790:74;;22873:93;22962:3;22873:93;:::i;:::-;22991:2;22986:3;22982:12;22975:19;;22634:366;;;:::o;23006:419::-;23172:4;23210:2;23199:9;23195:18;23187:26;;23259:9;23253:4;23249:20;23245:1;23234:9;23230:17;23223:47;23287:131;23413:4;23287:131;:::i;:::-;23279:139;;23006:419;;;:::o;23431:220::-;23571:34;23567:1;23559:6;23555:14;23548:58;23640:3;23635:2;23627:6;23623:15;23616:28;23431:220;:::o;23657:366::-;23799:3;23820:67;23884:2;23879:3;23820:67;:::i;:::-;23813:74;;23896:93;23985:3;23896:93;:::i;:::-;24014:2;24009:3;24005:12;23998:19;;23657:366;;;:::o;24029:419::-;24195:4;24233:2;24222:9;24218:18;24210:26;;24282:9;24276:4;24272:20;24268:1;24257:9;24253:17;24246:47;24310:131;24436:4;24310:131;:::i;:::-;24302:139;;24029:419;;;:::o;24454:180::-;24502:77;24499:1;24492:88;24599:4;24596:1;24589:15;24623:4;24620:1;24613:15;24640:143;24697:5;24728:6;24722:13;24713:22;;24744:33;24771:5;24744:33;:::i;:::-;24640:143;;;;:::o;24789:351::-;24859:6;24908:2;24896:9;24887:7;24883:23;24879:32;24876:119;;;24914:79;;:::i;:::-;24876:119;25034:1;25059:64;25115:7;25106:6;25095:9;25091:22;25059:64;:::i;:::-;25049:74;;25005:128;24789:351;;;;:::o;25146:114::-;25213:6;25247:5;25241:12;25231:22;;25146:114;;;:::o;25266:184::-;25365:11;25399:6;25394:3;25387:19;25439:4;25434:3;25430:14;25415:29;;25266:184;;;;:::o;25456:132::-;25523:4;25546:3;25538:11;;25576:4;25571:3;25567:14;25559:22;;25456:132;;;:::o;25594:108::-;25671:24;25689:5;25671:24;:::i;:::-;25666:3;25659:37;25594:108;;:::o;25708:179::-;25777:10;25798:46;25840:3;25832:6;25798:46;:::i;:::-;25876:4;25871:3;25867:14;25853:28;;25708:179;;;;:::o;25893:113::-;25963:4;25995;25990:3;25986:14;25978:22;;25893:113;;;:::o;26042:732::-;26161:3;26190:54;26238:5;26190:54;:::i;:::-;26260:86;26339:6;26334:3;26260:86;:::i;:::-;26253:93;;26370:56;26420:5;26370:56;:::i;:::-;26449:7;26480:1;26465:284;26490:6;26487:1;26484:13;26465:284;;;26566:6;26560:13;26593:63;26652:3;26637:13;26593:63;:::i;:::-;26586:70;;26679:60;26732:6;26679:60;:::i;:::-;26669:70;;26525:224;26512:1;26509;26505:9;26500:14;;26465:284;;;26469:14;26765:3;26758:10;;26166:608;;;26042:732;;;;:::o;26780:831::-;27043:4;27081:3;27070:9;27066:19;27058:27;;27095:71;27163:1;27152:9;27148:17;27139:6;27095:71;:::i;:::-;27176:80;27252:2;27241:9;27237:18;27228:6;27176:80;:::i;:::-;27303:9;27297:4;27293:20;27288:2;27277:9;27273:18;27266:48;27331:108;27434:4;27425:6;27331:108;:::i;:::-;27323:116;;27449:72;27517:2;27506:9;27502:18;27493:6;27449:72;:::i;:::-;27531:73;27599:3;27588:9;27584:19;27575:6;27531:73;:::i;:::-;26780:831;;;;;;;;:::o;27617:807::-;27866:4;27904:3;27893:9;27889:19;27881:27;;27918:71;27986:1;27975:9;27971:17;27962:6;27918:71;:::i;:::-;27999:72;28067:2;28056:9;28052:18;28043:6;27999:72;:::i;:::-;28081:80;28157:2;28146:9;28142:18;28133:6;28081:80;:::i;:::-;28171;28247:2;28236:9;28232:18;28223:6;28171:80;:::i;:::-;28261:73;28329:3;28318:9;28314:19;28305:6;28261:73;:::i;:::-;28344;28412:3;28401:9;28397:19;28388:6;28344:73;:::i;:::-;27617:807;;;;;;;;;:::o;28430:143::-;28487:5;28518:6;28512:13;28503:22;;28534:33;28561:5;28534:33;:::i;:::-;28430:143;;;;:::o;28579:663::-;28667:6;28675;28683;28732:2;28720:9;28711:7;28707:23;28703:32;28700:119;;;28738:79;;:::i;:::-;28700:119;28858:1;28883:64;28939:7;28930:6;28919:9;28915:22;28883:64;:::i;:::-;28873:74;;28829:128;28996:2;29022:64;29078:7;29069:6;29058:9;29054:22;29022:64;:::i;:::-;29012:74;;28967:129;29135:2;29161:64;29217:7;29208:6;29197:9;29193:22;29161:64;:::i;:::-;29151:74;;29106:129;28579:663;;;;;:::o;29248:220::-;29388:34;29384:1;29376:6;29372:14;29365:58;29457:3;29452:2;29444:6;29440:15;29433:28;29248:220;:::o;29474:366::-;29616:3;29637:67;29701:2;29696:3;29637:67;:::i;:::-;29630:74;;29713:93;29802:3;29713:93;:::i;:::-;29831:2;29826:3;29822:12;29815:19;;29474:366;;;:::o;29846:419::-;30012:4;30050:2;30039:9;30035:18;30027:26;;30099:9;30093:4;30089:20;30085:1;30074:9;30070:17;30063:47;30127:131;30253:4;30127:131;:::i;:::-;30119:139;;29846:419;;;:::o;30271:98::-;30322:6;30356:5;30350:12;30340:22;;30271:98;;;:::o;30375:147::-;30476:11;30513:3;30498:18;;30375:147;;;;:::o;30528:373::-;30632:3;30660:38;30692:5;30660:38;:::i;:::-;30714:88;30795:6;30790:3;30714:88;:::i;:::-;30707:95;;30811:52;30856:6;30851:3;30844:4;30837:5;30833:16;30811:52;:::i;:::-;30888:6;30883:3;30879:16;30872:23;;30636:265;30528:373;;;;:::o;30907:271::-;31037:3;31059:93;31148:3;31139:6;31059:93;:::i;:::-;31052:100;;31169:3;31162:10;;30907:271;;;;:::o;31184:222::-;31324:34;31320:1;31312:6;31308:14;31301:58;31393:5;31388:2;31380:6;31376:15;31369:30;31184:222;:::o;31412:366::-;31554:3;31575:67;31639:2;31634:3;31575:67;:::i;:::-;31568:74;;31651:93;31740:3;31651:93;:::i;:::-;31769:2;31764:3;31760:12;31753:19;;31412:366;;;:::o;31784:419::-;31950:4;31988:2;31977:9;31973:18;31965:26;;32037:9;32031:4;32027:20;32023:1;32012:9;32008:17;32001:47;32065:131;32191:4;32065:131;:::i;:::-;32057:139;;31784:419;;;:::o

Swarm Source

ipfs://b3a3c4457dea1161296c504fa0900544eabaeacc64953594d2213c2eee773202
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.