ETH Price: $3,683.54 (+1.42%)
Gas: 7.51 Gwei
 

Overview

Max Total Supply

1,000,000,000,000,000 $BLAIKA

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,174,051,412,892.258654066753256172 $BLAIKA

Value
$0.00
0x1b5379aa858417d7982e17c2992c2188fbf9243b
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:
BabyLaika

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-07-31
*/

//SPDX-License-Identifier: MIT

/*
Baby Laika ($BLAIKA)

Hold $BLAIKA to earn $LAIKA

Tax 4/4
Max Transaction 2%
Max Wallet 4%

Twitter: https://twitter.com/babylaika_eth
Telegram: https://t.me/babylaikapreverify

Woof!
*/

pragma solidity 0.8.10;

library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 value
    ) internal {
        (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 {
        (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 {
        (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 IBEP20 {
    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;
    //------Main Net router address------//
    // address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    //------Test Net router address------//
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    IBEP20 RewardToken = IBEP20(0x77f9CF0bd8C500CfFdF420e72343893aeCC2EC0b); //Laika


    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 soon. Need to wait!");
        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 transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract BabyLaika is IBEP20, Auth {
    
    using SafeMath for uint256;

    string constant _name = "Baby Laika";
    string constant _symbol = "$BLAIKA";
    uint8 constant _decimals = 18;

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
	address marketingAddress = 0x51ea913c50d20149CC8928DfF9Ab4857676509e1; //dev wallet

    uint256 _totalSupply = 1 * 1000000000000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply ;
    uint256 public _walletMax = _totalSupply ;
    
    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 = 1;
	
	//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 = 1;
    bool public tradingOpen = false;
    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":[],"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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507351ea913c50d20149cc8928dff9ab4857676509e1600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000e31565b66038d7ea4c6800062000157919062000e82565b6006556006546007556006546008556001600960006101000a81548160ff0219169083151502179055506001601155600260125560016013556000601455600060155560006016556000601755600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601c556000601d60006101000a81548160ff0219169083151502179055506001601d60016101000a81548160ff02191690831515021790555062030d40601e556001601f60016101000a81548160ff0219169083151502179055506000601f60026101000a81548160ff021916908315150217905550610fa0600560065462000293919062000e82565b6200029f919062000f12565b602155348015620002af57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200041a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000440919062000fb4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ef919062000fb4565b306040518363ffffffff1660e01b81526004016200050f92919062000ff7565b6020604051808303816000875af11580156200052f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000555919062000fb4565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160106000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620007039062000c89565b6200070f919062001024565b604051809103906000f0801580156200072c573d6000803e3d6000fd5b50601d60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b4660135462000b3260125460115462000c2660201b62002bdf1790919060201c565b62000c2660201b62002bdf1790919060201c565b60168190555062000b6a60145460165462000c2660201b62002bdf1790919060201c565b601781905550600654600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000c18919062001052565b60405180910390a36200114f565b600080828462000c3791906200106f565b90508381101562000c7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c76906200112d565b60405180910390fd5b8091505092915050565b6121a3806200661783390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d255780860481111562000cfd5762000cfc62000c97565b5b600185161562000d0d5780820291505b808102905062000d1d8562000cc6565b945062000cdd565b94509492505050565b60008262000d40576001905062000e13565b8162000d50576000905062000e13565b816001811462000d69576002811462000d745762000daa565b600191505062000e13565b60ff84111562000d895762000d8862000c97565b5b8360020a91508482111562000da35762000da262000c97565b5b5062000e13565b5060208310610133831016604e8410600b841016171562000de45782820a90508381111562000dde5762000ddd62000c97565b5b62000e13565b62000df3848484600162000cd3565b9250905081840481111562000e0d5762000e0c62000c97565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e3e8262000e1a565b915062000e4b8362000e24565b925062000e7a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d2e565b905092915050565b600062000e8f8262000e1a565b915062000e9c8362000e1a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ed85762000ed762000c97565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f1f8262000e1a565b915062000f2c8362000e1a565b92508262000f3f5762000f3e62000ee3565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f7c8262000f4f565b9050919050565b62000f8e8162000f6f565b811462000f9a57600080fd5b50565b60008151905062000fae8162000f83565b92915050565b60006020828403121562000fcd5762000fcc62000f4a565b5b600062000fdd8482850162000f9d565b91505092915050565b62000ff18162000f6f565b82525050565b60006040820190506200100e600083018562000fe6565b6200101d602083018462000fe6565b9392505050565b60006020820190506200103b600083018462000fe6565b92915050565b6200104c8162000e1a565b82525050565b600060208201905062001069600083018462001041565b92915050565b60006200107c8262000e1a565b9150620010898362000e1a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620010c157620010c062000c97565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001115601b83620010cc565b91506200112282620010dd565b602082019050919050565b60006020820190508181036000830152620011488162001106565b9050919050565b6154b8806200115f6000396000f3fe6080604052600436106103d25760003560e01c8063893d20e8116101fd578063ca33e64c11610118578063eac0fc5c116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063eac0fc5c14610de2578063f01f20df14610e0d578063f0b37c0414610e38578063f2fde38b14610e61576103d9565b8063da00097d116100e7578063da00097d14610d14578063dd62ed3e14610d3f578063e5c85a6a14610d7c578063e66b1d1e14610db9576103d9565b8063ca33e64c14610c6c578063ca987b0e14610c97578063d6f5e63914610cc2578063d920334e14610ceb576103d9565b8063ad9ee39111610190578063bad3ea6a1161015f578063bad3ea6a14610bc4578063be816ffc14610bef578063bf56b37114610c18578063c2c7c03a14610c43576103d9565b8063ad9ee39114610b20578063b408d48914610b49578063b513682314610b72578063b6a5d7de14610b9b576103d9565b8063a3a2e89e116101cc578063a3a2e89e14610a66578063a8aa1b3114610a8f578063a9059cbb14610aba578063a9f7864b14610af7576103d9565b8063893d20e8146109a85780638b42507f146109d357806395d89b4114610a1057806398118cb414610a3b576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c146109005780637d1db4a5146109295780637db1342c14610954578063807c2d9c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b5061093e611cc6565b60405161094b91906143b1565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906146ef565b611ccc565b005b34801561098957600080fd5b50610992611d1e565b60405161099f91906143b1565b60405180910390f35b3480156109b457600080fd5b506109bd611d24565b6040516109ca91906147d2565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e5565b611d4d565b604051610a079190614571565b60405180910390f35b348015610a1c57600080fd5b50610a25611d6d565b604051610a329190614465565b60405180910390f35b348015610a4757600080fd5b50610a50611daa565b604051610a5d91906143b1565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614783565b611db0565b005b348015610a9b57600080fd5b50610aa4611e53565b604051610ab191906147d2565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190614516565b611e79565b604051610aee9190614571565b60405180910390f35b348015610b0357600080fd5b50610b1e6004803603810190610b1991906147ed565b611e8e565b005b348015610b2c57600080fd5b50610b476004803603810190610b4291906145e5565b611f69565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906146ef565b612003565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906145e5565b612055565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b6120ef565b005b348015610bd057600080fd5b50610bd9612191565b604051610be6919061488c565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c1191906148a7565b6121b7565b005b348015610c2457600080fd5b50610c2d61246b565b604051610c3a91906143b1565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906145b8565b612471565b005b348015610c7857600080fd5b50610c816124d6565b604051610c8e91906147d2565b60405180910390f35b348015610ca357600080fd5b50610cac6124fc565b604051610cb991906143b1565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906145e5565b612502565b005b348015610cf757600080fd5b50610d126004803603810190610d0d91906146ef565b6126e8565b005b348015610d2057600080fd5b50610d2961273a565b604051610d369190614571565b60405180910390f35b348015610d4b57600080fd5b50610d666004803603810190610d6191906148a7565b61274d565b604051610d7391906143b1565b60405180910390f35b348015610d8857600080fd5b50610da36004803603810190610d9e91906145e5565b6127d4565b604051610db09190614571565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb91906145b8565b6127f4565b005b348015610dee57600080fd5b50610df7612859565b604051610e0491906143b1565b60405180910390f35b348015610e1957600080fd5b50610e2261285f565b604051610e2f91906143b1565b60405180910390f35b348015610e4457600080fd5b50610e5f6004803603810190610e5a91906145e5565b612865565b005b348015610e6d57600080fd5b50610e886004803603810190610e839190614925565b612908565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600a81526020017f42616279204c61696b6100000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b60075481565b611cd533612b76565b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600781526020017f24424c41494b4100000000000000000000000000000000000000000000000000815250905090565b60115481565b611db933612b76565b611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e86338484612d50565b905092915050565b611e9733612b76565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611f33929190614cc0565b600060405180830381600087803b158015611f4d57600080fd5b505af1158015611f61573d6000803e3d6000fd5b505050505050565b611f7233612b76565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61200c33612b76565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614a46565b60405180910390fd5b80601c8190555050565b61205e33612b76565b61209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6120f83361156b565b612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166121d057612467565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561226d575061226c83613861565b5b80156122c25750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123675750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905060001515821515148015612381575060001515811515145b6123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614d35565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561246457601c54601b546124229190614d55565b4311612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a90614df7565b60405180910390fd5b5b50505b5050565b601b5481565b61247a33612b76565b6124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b61250b3361156b565b61254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906149da565b60405180910390fd5b60005b602080549050811015612690578173ffffffffffffffffffffffffffffffffffffffff166020828154811061258557612584614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561267d57602060016020805490506125e09190614e17565b815481106125f1576125f0614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602082815481106126305761262f614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612690565b808061268890614bea565b91505061254d565b60208054905081146126e45760208054806126ae576126ad614e4b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b6126f133612b76565b612730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272790614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b6127fd33612b76565b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b61286e3361156b565b6128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a4906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6129113361156b565b612950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612947906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612a169190614e9b565b60405180910390a150565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d55565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e17565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846121b7565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cc0565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b6147cc816144ac565b82525050565b60006020820190506147e760008301846147c3565b92915050565b6000806040838503121561480457614803614487565b5b600061481285828601614501565b925050602061482385828601614501565b9150509250929050565b6000819050919050565b600061485261484d6148488461448c565b61482d565b61448c565b9050919050565b600061486482614837565b9050919050565b600061487682614859565b9050919050565b6148868161486b565b82525050565b60006020820190506148a1600083018461487d565b92915050565b600080604083850312156148be576148bd614487565b5b60006148cc858286016144d5565b92505060206148dd858286016144d5565b9150509250929050565b60006148f28261448c565b9050919050565b614902816148e7565b811461490d57600080fd5b50565b60008135905061491f816148f9565b92915050565b60006020828403121561493b5761493a614487565b5b600061494984828501614910565b91505092915050565b600061495d82614859565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b61482d565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c8360008301856147c3565b614c906020830184614c5f565b9392505050565b6000604082019050614cac60008301856147c3565b614cb960208301846143a2565b9392505050565b6000604082019050614cd560008301856143a2565b614ce260208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d1f6008836143d7565b9150614d2a82614ce9565b602082019050919050565b60006020820190508181036000830152614d4e81614d12565b9050919050565b6000614d6082614398565b9150614d6b83614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614da057614d9f614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614de1600c836143d7565b9150614dec82614dab565b602082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b6000614e2282614398565b9150614e2d83614398565b925082821015614e4057614e3f614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614e8582614859565b9050919050565b614e9581614e7a565b82525050565b6000602082019050614eb06000830184614e8c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe60608301856147c3565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a60008301896147c3565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e60808301856147c3565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212207a0bdf5358de87170ae57ed0101ce1f7f1e51292573393b4b8ee55d8c5c1fb2f64736f6c634300080a00336080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507377f9cf0bd8c500cffdf420e72343893aecc2ec0b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610708600d55670de0b6b3a7640000600e55348015620000e057600080fd5b50604051620021a3380380620021a3833981810160405281019062000106919062000258565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200016557600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000167565b805b600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200028a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200022082620001f3565b9050919050565b620002328162000213565b81146200023e57600080fd5b50565b600081519050620002528162000227565b92915050565b600060208284031215620002715762000270620001ee565b5b6000620002818482850162000241565b91505092915050565b611f09806200029a6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b604051610104919061161f565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f91906116c9565b61032d565b005b34801561014257600080fd5b5061015d60048036038101906101589190611709565b6105ec565b60405161016a919061161f565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611736565b610706565b005b3480156101a857600080fd5b506101b1610770565b6040516101be919061161f565b60405180910390f35b3480156101d357600080fd5b506101dc610776565b6040516101e9919061161f565b60405180910390f35b3480156101fe57600080fd5b5061020761077c565b604051610214919061161f565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f9190611709565b610782565b60405161025393929190611776565b60405180910390f35b6102646107ac565b005b34801561027257600080fd5b5061027b610bec565b604051610288919061161f565b60405180910390f35b34801561029d57600080fd5b506102a6610bf2565b6040516102b3919061161f565b60405180910390f35b3480156102c857600080fd5b506102d1610bf8565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906117ad565b610c4b565b005b34801561030857600080fd5b50610311610ddf565b60405161031e919061161f565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610de5565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a8261107d565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261112c565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461133390919063ffffffff16565b61137d90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106415760009050610701565b600061068e600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e957600092505050610701565b6106fc818361133390919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075e57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080457600080fd5b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161086191906117e9565b602060405180830381865afa15801561087e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a29190611819565b90506000600267ffffffffffffffff8111156108c1576108c0611846565b5b6040519080825280602002602001820160405280156108ef5781602001602082028036833780820191505090505b509050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610983919061188a565b81600081518110610997576109966118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a0857610a076118b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610aa594939291906119e9565b6000604051808303818588803b158015610abe57600080fd5b505af1158015610ad2573d6000803e3d6000fd5b50505050506000610b8783600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b3891906117e9565b602060405180830381865afa158015610b55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b799190611819565b61133390919063ffffffff16565b9050610b9e8160095461137d90919063ffffffff16565b600981905550610be1610bd0600854610bc284600c5461140d90919063ffffffff16565b61148890919063ffffffff16565b600b5461137d90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610c01336114d2565b610c40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3790611a92565b60405180910390fd5b610c4933610de5565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ca357600080fd5b600060048054905090506000811415610cbc5750610ddc565b60008060005a90505b8482108015610cd357508383105b15610dd75783600f5410610cea576000600f819055505b610d336004600f5481548110610d0357610d026118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114d2565b15610d8257610d816004600f5481548110610d5157610d506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610de5565b5b610da7610d985a8361133390919063ffffffff16565b8361137d90919063ffffffff16565b91505a9050600f6000815480929190610dbf90611ae1565b91905055508280610dcf90611ae1565b935050610cc5565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610e355761107a565b6000610e40826105ec565b9050600081111561107857610e6081600a5461137d90919063ffffffff16565b600a81905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610ec3929190611b2a565b6020604051808303816000875af1158015610ee2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f069190611b8b565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fa081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461137d90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611031600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113db565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111409190611bb8565b81548110611151576111506118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111cf576111ce6118b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600560006004600160048054905061126f9190611bb8565b815481106112805761127f6118b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112fb576112fa611bec565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061137583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061153f565b905092915050565b600080828461138c9190611c1b565b9050838110156113d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c890611cbd565b60405180910390fd5b8091505092915050565b6000611406600c546113f8600b548561140d90919063ffffffff16565b61148890919063ffffffff16565b9050919050565b6000808314156114205760009050611482565b6000828461142e9190611cdd565b905082848261143d9190611d66565b1461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490611e09565b60405180910390fd5b809150505b92915050565b60006114ca83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506115a3565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115229190611c1b565b1080156115385750600e54611536836105ec565b115b9050919050565b6000838311158290611587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157e9190611eb1565b60405180910390fd5b50600083856115969190611bb8565b9050809150509392505050565b600080831182906115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19190611eb1565b60405180910390fd5b50600083856115f99190611d66565b9050809150509392505050565b6000819050919050565b61161981611606565b82525050565b60006020820190506116346000830184611610565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061166a8261163f565b9050919050565b61167a8161165f565b811461168557600080fd5b50565b60008135905061169781611671565b92915050565b6116a681611606565b81146116b157600080fd5b50565b6000813590506116c38161169d565b92915050565b600080604083850312156116e0576116df61163a565b5b60006116ee85828601611688565b92505060206116ff858286016116b4565b9150509250929050565b60006020828403121561171f5761171e61163a565b5b600061172d84828501611688565b91505092915050565b6000806040838503121561174d5761174c61163a565b5b600061175b858286016116b4565b925050602061176c858286016116b4565b9150509250929050565b600060608201905061178b6000830186611610565b6117986020830185611610565b6117a56040830184611610565b949350505050565b6000602082840312156117c3576117c261163a565b5b60006117d1848285016116b4565b91505092915050565b6117e38161165f565b82525050565b60006020820190506117fe60008301846117da565b92915050565b6000815190506118138161169d565b92915050565b60006020828403121561182f5761182e61163a565b5b600061183d84828501611804565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061188481611671565b92915050565b6000602082840312156118a05761189f61163a565b5b60006118ae84828501611875565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061191561191061190b846118e6565b6118f0565b611606565b9050919050565b611925816118fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6119608161165f565b82525050565b60006119728383611957565b60208301905092915050565b6000602082019050919050565b60006119968261192b565b6119a08185611936565b93506119ab83611947565b8060005b838110156119dc5781516119c38882611966565b97506119ce8361197e565b9250506001810190506119af565b5085935050505092915050565b60006080820190506119fe600083018761191c565b8181036020830152611a10818661198b565b9050611a1f60408301856117da565b611a2c6060830184611610565b95945050505050565b600082825260208201905092915050565b7f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000600082015250565b6000611a7c601783611a35565b9150611a8782611a46565b602082019050919050565b60006020820190508181036000830152611aab81611a6f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611aec82611606565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611b1f57611b1e611ab2565b5b600182019050919050565b6000604082019050611b3f60008301856117da565b611b4c6020830184611610565b9392505050565b60008115159050919050565b611b6881611b53565b8114611b7357600080fd5b50565b600081519050611b8581611b5f565b92915050565b600060208284031215611ba157611ba061163a565b5b6000611baf84828501611b76565b91505092915050565b6000611bc382611606565b9150611bce83611606565b925082821015611be157611be0611ab2565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611c2682611606565b9150611c3183611606565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c6657611c65611ab2565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611ca7601b83611a35565b9150611cb282611c71565b602082019050919050565b60006020820190508181036000830152611cd681611c9a565b9050919050565b6000611ce882611606565b9150611cf383611606565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611d2c57611d2b611ab2565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611d7182611606565b9150611d7c83611606565b925082611d8c57611d8b611d37565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611df3602183611a35565b9150611dfe82611d97565b604082019050919050565b60006020820190508181036000830152611e2281611de6565b9050919050565b600081519050919050565b60005b83811015611e52578082015181840152602081019050611e37565b83811115611e61576000848401525b50505050565b6000601f19601f8301169050919050565b6000611e8382611e29565b611e8d8185611a35565b9350611e9d818560208601611e34565b611ea681611e67565b840191505092915050565b60006020820190508181036000830152611ecb8184611e78565b90509291505056fea2646970667358221220fcd1ae5207f809fe07ea886ab3124b4c7783dd1efa11dd76e1dc0e1c83af3bbe64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063893d20e8116101fd578063ca33e64c11610118578063eac0fc5c116100ab578063f79641351161007a578063f796413514610e8a578063f887ea4014610eb3578063fabe628314610ede578063fe9fbb8014610f07578063ffb54a9914610f44576103d9565b8063eac0fc5c14610de2578063f01f20df14610e0d578063f0b37c0414610e38578063f2fde38b14610e61576103d9565b8063da00097d116100e7578063da00097d14610d14578063dd62ed3e14610d3f578063e5c85a6a14610d7c578063e66b1d1e14610db9576103d9565b8063ca33e64c14610c6c578063ca987b0e14610c97578063d6f5e63914610cc2578063d920334e14610ceb576103d9565b8063ad9ee39111610190578063bad3ea6a1161015f578063bad3ea6a14610bc4578063be816ffc14610bef578063bf56b37114610c18578063c2c7c03a14610c43576103d9565b8063ad9ee39114610b20578063b408d48914610b49578063b513682314610b72578063b6a5d7de14610b9b576103d9565b8063a3a2e89e116101cc578063a3a2e89e14610a66578063a8aa1b3114610a8f578063a9059cbb14610aba578063a9f7864b14610af7576103d9565b8063893d20e8146109a85780638b42507f146109d357806395d89b4114610a1057806398118cb414610a3b576103d9565b80634355855a116102ed578063650c422611610280578063773fcb5c1161024f578063773fcb5c146109005780637d1db4a5146109295780637db1342c14610954578063807c2d9c1461097d576103d9565b8063650c42261461084457806369cf17d41461086d5780636b67c4df1461089857806370a08231146108c3576103d9565b8063479f66d8116102bc578063479f66d8146107765780634838d1651461079f5780634a74bb02146107dc578063571ac8b014610807576103d9565b80634355855a146106ce578063436b1e641461070b57806344de2e4c1461073457806344df8e701461075f576103d9565b80631e7b6f47116103655780632f54bf6e116103345780632f54bf6e14610600578063313ce5671461063d57806334c70889146106685780633f4218e014610691576103d9565b80631e7b6f471461054457806323b872dd1461056d5780632b112e49146105aa5780632bb14e1d146105d5576103d9565b80630ecb93c0116103a15780630ecb93c01461049a57806318160ddd146104c35780631c56ca7a146104ee5780631df4ccfc14610519576103d9565b80630445b667146103de57806306fdde0314610409578063095ea7b3146104345780630d29598014610471576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f6f565b60405161040091906143b1565b60405180910390f35b34801561041557600080fd5b5061041e610f75565b60405161042b9190614465565b60405180910390f35b34801561044057600080fd5b5061045b60048036038101906104569190614516565b610fb2565b6040516104689190614571565b60405180910390f35b34801561047d57600080fd5b50610498600480360381019061049391906145b8565b6110a4565b005b3480156104a657600080fd5b506104c160048036038101906104bc91906145e5565b611126565b005b3480156104cf57600080fd5b506104d86111c9565b6040516104e591906143b1565b60405180910390f35b3480156104fa57600080fd5b506105036111d3565b6040516105109190614571565b60405180910390f35b34801561052557600080fd5b5061052e6111e6565b60405161053b91906143b1565b60405180910390f35b34801561055057600080fd5b5061056b600480360381019061056691906145e5565b6111ec565b005b34801561057957600080fd5b50610594600480360381019061058f9190614612565b6112e3565b6040516105a19190614571565b60405180910390f35b3480156105b657600080fd5b506105bf6114e3565b6040516105cc91906143b1565b60405180910390f35b3480156105e157600080fd5b506105ea611565565b6040516105f791906143b1565b60405180910390f35b34801561060c57600080fd5b50610627600480360381019061062291906145e5565b61156b565b6040516106349190614571565b60405180910390f35b34801561064957600080fd5b506106526115c4565b60405161065f9190614681565b60405180910390f35b34801561067457600080fd5b5061068f600480360381019061068a919061469c565b6115cd565b005b34801561069d57600080fd5b506106b860048036038101906106b391906145e5565b611655565b6040516106c59190614571565b60405180910390f35b3480156106da57600080fd5b506106f560048036038101906106f091906145e5565b611675565b6040516107029190614571565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d91906145e5565b611695565b005b34801561074057600080fd5b50610749611738565b6040516107569190614571565b60405180910390f35b34801561076b57600080fd5b5061077461174b565b005b34801561078257600080fd5b5061079d600480360381019061079891906146ef565b611866565b005b3480156107ab57600080fd5b506107c660048036038101906107c191906145e5565b6118c7565b6040516107d39190614571565b60405180910390f35b3480156107e857600080fd5b506107f16118e7565b6040516107fe9190614571565b60405180910390f35b34801561081357600080fd5b5061082e600480360381019061082991906145e5565b6118fa565b60405161083b9190614571565b60405180910390f35b34801561085057600080fd5b5061086b6004803603810190610866919061471c565b61192d565b005b34801561087957600080fd5b506108826119d1565b60405161088f91906143b1565b60405180910390f35b3480156108a457600080fd5b506108ad6119d7565b6040516108ba91906143b1565b60405180910390f35b3480156108cf57600080fd5b506108ea60048036038101906108e591906145e5565b6119dd565b6040516108f791906143b1565b60405180910390f35b34801561090c57600080fd5b5061092760048036038101906109229190614783565b611a26565b005b34801561093557600080fd5b5061093e611cc6565b60405161094b91906143b1565b60405180910390f35b34801561096057600080fd5b5061097b600480360381019061097691906146ef565b611ccc565b005b34801561098957600080fd5b50610992611d1e565b60405161099f91906143b1565b60405180910390f35b3480156109b457600080fd5b506109bd611d24565b6040516109ca91906147d2565b60405180910390f35b3480156109df57600080fd5b506109fa60048036038101906109f591906145e5565b611d4d565b604051610a079190614571565b60405180910390f35b348015610a1c57600080fd5b50610a25611d6d565b604051610a329190614465565b60405180910390f35b348015610a4757600080fd5b50610a50611daa565b604051610a5d91906143b1565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614783565b611db0565b005b348015610a9b57600080fd5b50610aa4611e53565b604051610ab191906147d2565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc9190614516565b611e79565b604051610aee9190614571565b60405180910390f35b348015610b0357600080fd5b50610b1e6004803603810190610b1991906147ed565b611e8e565b005b348015610b2c57600080fd5b50610b476004803603810190610b4291906145e5565b611f69565b005b348015610b5557600080fd5b50610b706004803603810190610b6b91906146ef565b612003565b005b348015610b7e57600080fd5b50610b996004803603810190610b9491906145e5565b612055565b005b348015610ba757600080fd5b50610bc26004803603810190610bbd91906145e5565b6120ef565b005b348015610bd057600080fd5b50610bd9612191565b604051610be6919061488c565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c1191906148a7565b6121b7565b005b348015610c2457600080fd5b50610c2d61246b565b604051610c3a91906143b1565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c6591906145b8565b612471565b005b348015610c7857600080fd5b50610c816124d6565b604051610c8e91906147d2565b60405180910390f35b348015610ca357600080fd5b50610cac6124fc565b604051610cb991906143b1565b60405180910390f35b348015610cce57600080fd5b50610ce96004803603810190610ce491906145e5565b612502565b005b348015610cf757600080fd5b50610d126004803603810190610d0d91906146ef565b6126e8565b005b348015610d2057600080fd5b50610d2961273a565b604051610d369190614571565b60405180910390f35b348015610d4b57600080fd5b50610d666004803603810190610d6191906148a7565b61274d565b604051610d7391906143b1565b60405180910390f35b348015610d8857600080fd5b50610da36004803603810190610d9e91906145e5565b6127d4565b604051610db09190614571565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb91906145b8565b6127f4565b005b348015610dee57600080fd5b50610df7612859565b604051610e0491906143b1565b60405180910390f35b348015610e1957600080fd5b50610e2261285f565b604051610e2f91906143b1565b60405180910390f35b348015610e4457600080fd5b50610e5f6004803603810190610e5a91906145e5565b612865565b005b348015610e6d57600080fd5b50610e886004803603810190610e839190614925565b612908565b005b348015610e9657600080fd5b50610eb16004803603810190610eac91906145e5565b612a21565b005b348015610ebf57600080fd5b50610ec8612aad565b604051610ed59190614973565b60405180910390f35b348015610eea57600080fd5b50610f056004803603810190610f009190614783565b612ad3565b005b348015610f1357600080fd5b50610f2e6004803603810190610f2991906145e5565b612b76565b604051610f3b9190614571565b60405180910390f35b348015610f5057600080fd5b50610f59612bcc565b604051610f669190614571565b60405180910390f35b60215481565b60606040518060400160405280600a81526020017f42616279204c61696b6100000000000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161109291906143b1565b60405180910390a36001905092915050565b6110ad3361156b565b6110ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e3906149da565b60405180910390fd5b80601d60006101000a81548160ff021916908315150217905550601d60009054906101000a900460ff16156111235743601b819055505b50565b61112f33612b76565b61116e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116590614a46565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600654905090565b601d60019054906101000a900460ff1681565b60165481565b6111f53361156b565b611234576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122b906149da565b60405180910390fd5b61123d81612c3d565b1561127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490614ab2565b60405180910390fd5b6020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114cf5761144e826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114da848484612d50565b90509392505050565b6000611560611513600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b611552611541600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b60065461367390919063ffffffff16565b61367390919063ffffffff16565b905090565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b6115d633612b76565b611615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160c90614a46565b60405180910390fd5b82601f60016101000a81548160ff0219169083151502179055508160218190555080601f60026101000a81548160ff021916908315150217905550505050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600e6020528060005260406000206000915054906101000a900460ff1681565b61169e33612b76565b6116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614a46565b60405180910390fd5b6001601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1681565b6117543361156b565b611793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178a906149da565b60405180910390fd5b60005b6020805490508110156118635760006117ec602083815481106117bc576117bb614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119dd565b905061184f6020838154811061180557611804614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064601554846118409190614b30565b61184a9190614bb9565b6136bd565b50808061185b90614bea565b915050611796565b50565b61186f33612b76565b6118ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a590614a46565b60405180910390fd5b620b71b081106118bd57600080fd5b80601e8190555050565b600f6020528060005260406000206000915054906101000a900460ff1681565b601f60019054906101000a900460ff1681565b6000611926827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610fb2565b9050919050565b61193633612b76565b611975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196c90614a46565b60405180910390fd5b836011819055508260128190555081601381905550806014819055506119a8601254601154612bdf90919063ffffffff16565b6016819055506119c5601454601654612bdf90919063ffffffff16565b60178190555050505050565b60145481565b60135481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611a2f33612b76565b611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590614a46565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611af85750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611b0157600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611bf357601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611bbc929190614c6e565b600060405180830381600087803b158015611bd657600080fd5b505af1158015611bea573d6000803e3d6000fd5b50505050611cc2565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611c8f929190614c97565b600060405180830381600087803b158015611ca957600080fd5b505af1158015611cbd573d6000803e3d6000fd5b505050505b5050565b60075481565b611cd533612b76565b611d14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0b90614a46565b60405180910390fd5b8060088190555050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60606040518060400160405280600781526020017f24424c41494b4100000000000000000000000000000000000000000000000000815250905090565b60115481565b611db933612b76565b611df8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611def90614a46565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611e86338484612d50565b905092915050565b611e9733612b76565b611ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecd90614a46565b60405180910390fd5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611f33929190614cc0565b600060405180830381600087803b158015611f4d57600080fd5b505af1158015611f61573d6000803e3d6000fd5b505050505050565b611f7233612b76565b611fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa890614a46565b60405180910390fd5b601060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b61200c33612b76565b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614a46565b60405180910390fd5b80601c8190555050565b61205e33612b76565b61209d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209490614a46565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6120f83361156b565b612137576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212e906149da565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60019054906101000a900460ff166121d057612467565b60003073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561225c5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561226d575061226c83613861565b5b80156122c25750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b90506000600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123675750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b905060001515821515148015612381575060001515811515145b6123c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b790614d35565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561246457601c54601b546124229190614d55565b4311612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a90614df7565b60405180910390fd5b5b50505b5050565b601b5481565b61247a33612b76565b6124b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b090614a46565b60405180910390fd5b80601d60016101000a81548160ff02191690831515021790555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b61250b3361156b565b61254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906149da565b60405180910390fd5b60005b602080549050811015612690578173ffffffffffffffffffffffffffffffffffffffff166020828154811061258557612584614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561267d57602060016020805490506125e09190614e17565b815481106125f1576125f0614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602082815481106126305761262f614ad2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612690565b808061268890614bea565b91505061254d565b60208054905081146126e45760208054806126ae576126ad614e4b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590555b5050565b6126f133612b76565b612730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272790614a46565b60405180910390fd5b8060078190555050565b601f60029054906101000a900460ff1681565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60106020528060005260406000206000915054906101000a900460ff1681565b6127fd33612b76565b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283390614a46565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601c5481565b60155481565b61286e3361156b565b6128ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a4906149da565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6129113361156b565b612950576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612947906149da565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051612a169190614e9b565b60405180910390a150565b612a2a33612b76565b612a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6090614a46565b60405180910390fd5b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612adc33612b76565b612b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1290614a46565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601d60009054906101000a900460ff1681565b6000808284612bee9190614d55565b905083811015612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a90614f02565b60405180910390fd5b8091505092915050565b6000806000905060005b602080549050811015612ce2578373ffffffffffffffffffffffffffffffffffffffff1660208281548110612c7f57612c7e614ad2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612ccf5760019150612ce2565b8080612cda90614bea565b915050612c47565b8192505050919050565b6000838311158290612d34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2b9190614465565b60405180910390fd5b5060008385612d439190614e17565b9050809150509392505050565b600080600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612d9d57600080fd5b612da784846121b7565b601f60009054906101000a900460ff1615612dce57612dc7848484613874565b905061366c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e725750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ec757601d60009054906101000a900460ff16612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614f6e565b60405180910390fd5b5b60075482111580612f215750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5790614fda565b60405180910390fd5b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612fcb5750601f60009054906101000a900460ff16155b8015612fe35750601f60019054906101000a900460ff165b80156130305750602154600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b1561303e5761303d613a47565b5b6130c7826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131705750600960009054906101000a900460ff165b156131d6576008546131ca83600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b11156131d557600080fd5b5b6000600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561327c5750600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6132865782613292565b613291858585613fc8565b5b90506132e681600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661344c57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613416929190614c97565b600060405180830381600087803b15801561343057600080fd5b505af1925050508015613441575060015b61344a5761344b565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661356f57601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613539929190614c97565b600060405180830381600087803b15801561355357600080fd5b505af1925050508015613564575060015b61356d5761356e565b5b5b601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601e546040518263ffffffff1660e01b81526004016135cc91906143b1565b600060405180830381600087803b1580156135e657600080fd5b505af19250505080156135f7575060015b61360057613601565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161365e91906143b1565b60405180910390a360019150505b9392505050565b60006136b583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612cec565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561372d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137249061506c565b60405180910390fd5b6137998160405180606001604052806022815260200161546160229139600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137f18160065461367390919063ffffffff16565b600681905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161385591906143b1565b60405180910390a35050565b600080823b905060008111915050919050565b60006138ff826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cec9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061399482600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a3491906143b1565b60405180910390a3600190509392505050565b6001601f60006101000a81548160ff0219169083151502179055506000600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000613ae46002613ad6601654613ac86011548761417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613afb828461367390919063ffffffff16565b90506000600267ffffffffffffffff811115613b1a57613b1961508c565b5b604051908082528060200260200182016040528015613b485781602001602082028036833780820191505090505b5090503081600081518110613b6057613b5f614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c2b91906150d0565b81600181518110613c3f57613c3e614ad2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613cdd9594939291906151bb565b600060405180830381600087803b158015613cf757600080fd5b505af1158015613d0b573d6000803e3d6000fd5b5050505060004790506000613d40613d2f60026011546141eb90919063ffffffff16565b60165461367390919063ffffffff16565b90506000613d7e6002613d7084613d626011548861417090919063ffffffff16565b6141eb90919063ffffffff16565b6141eb90919063ffffffff16565b90506000613da983613d9b6012548761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506000613dd283613dc4848861367390919063ffffffff16565b61367390919063ffffffff16565b9050601d60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b158015613e3e57600080fd5b505af193505050508015613e50575060015b613e5957613e5a565b5b6000881115613f6c57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308b600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613eec96959493929190615215565b60606040518083038185885af1158015613f0a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f2f919061528b565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068389604051613f63929190614cc0565b60405180910390a15b6000811115613fa257613fa1600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682614235565b5b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000808373ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146140285760165461402c565b6017545b905060006140566064614048848761417090919063ffffffff16565b6141eb90919063ffffffff16565b90506140aa81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bdf90919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161414a91906143b1565b60405180910390a3614165818561367390919063ffffffff16565b925050509392505050565b60008083141561418357600090506141e5565b600082846141919190614b30565b90508284826141a09190614bb9565b146141e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016141d790615350565b60405180910390fd5b809150505b92915050565b600061422d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614335565b905092915050565b60008273ffffffffffffffffffffffffffffffffffffffff1682600067ffffffffffffffff81111561426a5761426961508c565b5b6040519080825280601f01601f19166020018201604052801561429c5781602001600182028036833780820191505090505b506040516142aa91906153b7565b60006040518083038185875af1925050503d80600081146142e7576040519150601f19603f3d011682016040523d82523d6000602084013e6142ec565b606091505b5050905080614330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161432790615440565b60405180910390fd5b505050565b6000808311829061437c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016143739190614465565b60405180910390fd5b506000838561438b9190614bb9565b9050809150509392505050565b6000819050919050565b6143ab81614398565b82525050565b60006020820190506143c660008301846143a2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144065780820151818401526020810190506143eb565b83811115614415576000848401525b50505050565b6000601f19601f8301169050919050565b6000614437826143cc565b61444181856143d7565b93506144518185602086016143e8565b61445a8161441b565b840191505092915050565b6000602082019050818103600083015261447f818461442c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006144b78261448c565b9050919050565b6144c7816144ac565b81146144d257600080fd5b50565b6000813590506144e4816144be565b92915050565b6144f381614398565b81146144fe57600080fd5b50565b600081359050614510816144ea565b92915050565b6000806040838503121561452d5761452c614487565b5b600061453b858286016144d5565b925050602061454c85828601614501565b9150509250929050565b60008115159050919050565b61456b81614556565b82525050565b60006020820190506145866000830184614562565b92915050565b61459581614556565b81146145a057600080fd5b50565b6000813590506145b28161458c565b92915050565b6000602082840312156145ce576145cd614487565b5b60006145dc848285016145a3565b91505092915050565b6000602082840312156145fb576145fa614487565b5b6000614609848285016144d5565b91505092915050565b60008060006060848603121561462b5761462a614487565b5b6000614639868287016144d5565b935050602061464a868287016144d5565b925050604061465b86828701614501565b9150509250925092565b600060ff82169050919050565b61467b81614665565b82525050565b60006020820190506146966000830184614672565b92915050565b6000806000606084860312156146b5576146b4614487565b5b60006146c3868287016145a3565b93505060206146d486828701614501565b92505060406146e5868287016145a3565b9150509250925092565b60006020828403121561470557614704614487565b5b600061471384828501614501565b91505092915050565b6000806000806080858703121561473657614735614487565b5b600061474487828801614501565b945050602061475587828801614501565b935050604061476687828801614501565b925050606061477787828801614501565b91505092959194509250565b6000806040838503121561479a57614799614487565b5b60006147a8858286016144d5565b92505060206147b9858286016145a3565b9150509250929050565b6147cc816144ac565b82525050565b60006020820190506147e760008301846147c3565b92915050565b6000806040838503121561480457614803614487565b5b600061481285828601614501565b925050602061482385828601614501565b9150509250929050565b6000819050919050565b600061485261484d6148488461448c565b61482d565b61448c565b9050919050565b600061486482614837565b9050919050565b600061487682614859565b9050919050565b6148868161486b565b82525050565b60006020820190506148a1600083018461487d565b92915050565b600080604083850312156148be576148bd614487565b5b60006148cc858286016144d5565b92505060206148dd858286016144d5565b9150509250929050565b60006148f28261448c565b9050919050565b614902816148e7565b811461490d57600080fd5b50565b60008135905061491f816148f9565b92915050565b60006020828403121561493b5761493a614487565b5b600061494984828501614910565b91505092915050565b600061495d82614859565b9050919050565b61496d81614952565b82525050565b60006020820190506149886000830184614964565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006149c46006836143d7565b91506149cf8261498e565b602082019050919050565b600060208201905081810360008301526149f3816149b7565b9050919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614a30600b836143d7565b9150614a3b826149fa565b602082019050919050565b60006020820190508181036000830152614a5f81614a23565b9050919050565b7f596f7520616c7265616479206164646564207468697320616464726573730000600082015250565b6000614a9c601e836143d7565b9150614aa782614a66565b602082019050919050565b60006020820190508181036000830152614acb81614a8f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b3b82614398565b9150614b4683614398565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7f57614b7e614b01565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614bc482614398565b9150614bcf83614398565b925082614bdf57614bde614b8a565b5b828204905092915050565b6000614bf582614398565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c2857614c27614b01565b5b600182019050919050565b6000819050919050565b6000614c58614c53614c4e84614c33565b61482d565b614398565b9050919050565b614c6881614c3d565b82525050565b6000604082019050614c8360008301856147c3565b614c906020830184614c5f565b9392505050565b6000604082019050614cac60008301856147c3565b614cb960208301846143a2565b9392505050565b6000604082019050614cd560008301856143a2565b614ce260208301846143a2565b9392505050565b7f616e746920626f74000000000000000000000000000000000000000000000000600082015250565b6000614d1f6008836143d7565b9150614d2a82614ce9565b602082019050919050565b60006020820190508181036000830152614d4e81614d12565b9050919050565b6000614d6082614398565b9150614d6b83614398565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614da057614d9f614b01565b5b828201905092915050565b7f73696c656e7420626c6f636b0000000000000000000000000000000000000000600082015250565b6000614de1600c836143d7565b9150614dec82614dab565b602082019050919050565b60006020820190508181036000830152614e1081614dd4565b9050919050565b6000614e2282614398565b9150614e2d83614398565b925082821015614e4057614e3f614b01565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000614e8582614859565b9050919050565b614e9581614e7a565b82525050565b6000602082019050614eb06000830184614e8c565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614eec601b836143d7565b9150614ef782614eb6565b602082019050919050565b60006020820190508181036000830152614f1b81614edf565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614f586014836143d7565b9150614f6382614f22565b602082019050919050565b60006020820190508181036000830152614f8781614f4b565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614fc46011836143d7565b9150614fcf82614f8e565b602082019050919050565b60006020820190508181036000830152614ff381614fb7565b9050919050565b7f42455032303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006150566021836143d7565b915061506182614ffa565b604082019050919050565b6000602082019050818103600083015261508581615049565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506150ca816144be565b92915050565b6000602082840312156150e6576150e5614487565b5b60006150f4848285016150bb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615132816144ac565b82525050565b60006151448383615129565b60208301905092915050565b6000602082019050919050565b6000615168826150fd565b6151728185615108565b935061517d83615119565b8060005b838110156151ae5781516151958882615138565b97506151a083615150565b925050600181019050615181565b5085935050505092915050565b600060a0820190506151d060008301886143a2565b6151dd6020830187614c5f565b81810360408301526151ef818661515d565b90506151fe60608301856147c3565b61520b60808301846143a2565b9695505050505050565b600060c08201905061522a60008301896147c3565b61523760208301886143a2565b6152446040830187614c5f565b6152516060830186614c5f565b61525e60808301856147c3565b61526b60a08301846143a2565b979650505050505050565b600081519050615285816144ea565b92915050565b6000806000606084860312156152a4576152a3614487565b5b60006152b286828701615276565b93505060206152c386828701615276565b92505060406152d486828701615276565b9150509250925092565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061533a6021836143d7565b9150615345826152de565b604082019050919050565b600060208201905081810360008301526153698161532d565b9050919050565b600081519050919050565b600081905092915050565b600061539182615370565b61539b818561537b565b93506153ab8185602086016143e8565b80840191505092915050565b60006153c38284615386565b915081905092915050565b7f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960008201527f4c45440000000000000000000000000000000000000000000000000000000000602082015250565b600061542a6023836143d7565b9150615435826153ce565b604082019050919050565b600060208201905081810360008301526154598161541d565b905091905056fe42455032303a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212207a0bdf5358de87170ae57ed0101ce1f7f1e51292573393b4b8ee55d8c5c1fb2f64736f6c634300080a0033

Deployed Bytecode Sourcemap

13098:14353:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15029:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17252:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18760:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25654:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21509:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17514:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14726:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14411:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16640:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22862:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18358:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14228:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12468:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17428:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20664:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13924:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14030:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21301:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13767:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18050:300;;;;;;;;;;;;;:::i;:::-;;21156:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14089:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14886:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18984:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20106:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14329:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14261:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18508:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19722:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13663:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19218:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13713:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17608:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13975:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17338:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14190:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19452:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14585:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22698:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20948:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21404:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21706:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21610:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12141:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14765:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22098:588;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14613:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21996:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14490:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14445:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16831:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19107:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14933:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18619:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14135:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19332:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14645:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14369:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12311:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12868:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20515:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14554:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19583:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12642:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14688:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15029:54;;;;:::o;17252:80::-;17300:13;17324:5;;;;;;;;;;;;;;;;;17317:12;;17252:80;:::o;18760:216::-;18835:4;18887:6;18852:11;:23;18864:10;18852:23;;;;;;;;;;;;;;;:32;18876:7;18852:32;;;;;;;;;;;;;;;:41;;;;18930:7;18909:37;;18918:10;18909:37;;;18939:6;18909:37;;;;;;:::i;:::-;;;;;;;;18964:4;18957:11;;18760:216;;;;:::o;25654:154::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;25735:9:::1;25721:11;;:23;;;;;;;;;;;;;;;;;;25752:11;;;;;;;;;;;25749:52;;;25783:12;25770:10;:25;;;;25749:52;25654:154:::0;:::o;21509:93::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21590:4:::1;21575:9;:14;21585:3;21575:14;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;21509:93:::0;:::o;17514:88::-;17569:7;17587:12;;17580:19;;17514:88;:::o;14726:30::-;;;;;;;;;;;;;:::o;14411:27::-;;;;:::o;16640:185::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16719:23:::1;16734:7;16719:14;:23::i;:::-;16718:24;16710:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16788:15;16809:7;16788:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16640:185:::0;:::o;22862:371::-;22962:4;23027:10;22992:11;:19;23004:6;22992:19;;;;;;;;;;;;;;;:31;23012:10;22992:31;;;;;;;;;;;;;;;;:45;22989:179;;23087:69;23123:6;23087:69;;;;;;;;;;;;;;;;;:11;:19;23099:6;23087:19;;;;;;;;;;;;;;;:31;23107:10;23087:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;23053:11;:19;23065:6;23053:19;;;;;;;;;;;;;;;:31;23073:10;23053:31;;;;;;;;;;;;;;;:103;;;;22989:179;23185:40;23199:6;23207:9;23218:6;23185:13;:40::i;:::-;23178:47;;22862:371;;;;;:::o;18358:142::-;18411:7;18438:54;18476:15;18486:4;;;;;;;;;;;18476:9;:15::i;:::-;18438:33;18455:15;18465:4;;;;;;;;;;;18455:9;:15::i;:::-;18438:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;18431:61;;18358:142;:::o;14228:29::-;;;;:::o;12468:103::-;12523:4;12558:5;;;;;;;;;;;12547:16;;:7;:16;;;12540:23;;12468:103;;;:::o;17428:80::-;17480:5;13293:2;17489:16;;17428:80;:::o;20664:276::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20821:14:::1;20796:21;;:39;;;;;;;;;;;;;;;;;;20862:16;20846:13;:32;;;;20917:15;20889:25;;:43;;;;;;;;;;;;;;;;;;20664:276:::0;;;:::o;13924:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;14030:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;21301:97::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21389:4:::1;21368:13;:18;21382:3;21368:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;21301:97:::0;:::o;13767:33::-;;;;;;;;;;;;;:::o;18050:300::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18094:13:::1;18122:221;18142:15;:22;;;;18134:5;:30;18122:221;;;18190:22;18215:33;18225:15;18241:5;18225:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18215:9;:33::i;:::-;18190:58;;18263:68;18269:15;18285:5;18269:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18327:3;18310:14;;18293;:31;;;;:::i;:::-;:37;;;;:::i;:::-;18263:5;:68::i;:::-;18175:168;18166:7;;;;;:::i;:::-;;;;18122:221;;;18083:267;18050:300::o:0;21156:139::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21249:6:::1;21243:3;:12;21235:21;;;::::0;::::1;;21284:3;21267:14;:20;;;;21156:139:::0;:::o;14089:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;14886:40::-;;;;;;;;;;;;;:::o;18984:115::-;19039:4;19063:28;19071:7;19080:10;19063:7;:28::i;:::-;19056:35;;18984:115;;;:::o;20106:401::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20259:9:::1;20244:12;:24;;;;20292:12;20279:10;:25;;;;20324:13;20309:12;:28;;;;20365:15;20348:14;:32;;;;20412:28;20429:10;;20412:12;;:16;;:28;;;;:::i;:::-;20401:8;:39;;;;20471:28;20484:14;;20471:8;;:12;;:28;;;;:::i;:::-;20451:17;:48;;;;20106:401:::0;;;;:::o;14329:33::-;;;;:::o;14261:31::-;;;;:::o;18508:105::-;18574:7;18592:9;:18;18602:7;18592:18;;;;;;;;;;;;;;;;18585:25;;18508:105;;;:::o;19722:376::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19840:4:::1;19822:23;;:6;:23;;;;:41;;;;;19859:4;;;;;;;;;;;19849:14;;:6;:14;;;;19822:41;19814:50;;;::::0;::::1;;19902:6;19875:16;:24;19892:6;19875:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;19932:6;19929:162;;;19954:19;;;;;;;;;;;:28;;;19983:6;19991:1;19954:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19929:162;;;20024:19;;;;;;;;;;;:28;;;20053:6;20061:9;:17;20071:6;20061:17;;;;;;;;;;;;;;;;20024:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19929:162;19722:376:::0;;:::o;13663:42::-;;;;:::o;19218:106::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19308:8:::1;19294:10;:22;;;;19218:106:::0;:::o;13713:40::-;;;;:::o;17608:78::-;17660:7;17678:5;;;;;;;;;;;17671:12;;17608:78;:::o;13975:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;17338:84::-;17388:13;17412:7;;;;;;;;;;;;;;;;;17405:14;;17338:84;:::o;14190:31::-;;;;:::o;19452:123::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19561:6:::1;19539:11;:19;19551:6;19539:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19452:123:::0;;:::o;14585:19::-;;;;;;;;;;;;;:::o;22698:156::-;22778:4;22802:44;22816:10;22828:9;22839:6;22802:13;:44::i;:::-;22795:51;;22698:156;;;;:::o;20948:200::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21064:19:::1;;;;;;;;;;;:43;;;21108:11;21121:18;21064:76;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20948:200:::0;;:::o;21404:97::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21478:13:::1;:18;21492:3;21478:18;;;;;;;;;;;;;;;;21471:25;;;;;;;;;;;21404:97:::0;:::o;21706:106::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21799:8:::1;21779:17;:28;;;;21706:106:::0;:::o;21610:88::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21679:9:::1;:14;21689:3;21679:14;;;;;;;;;;;;;;;;21672:21;;;;;;;;;;;21610:88:::0;:::o;12141:94::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12223:4:::1;12201:14:::0;:19:::1;12216:3;12201:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;12141:94:::0;:::o;14765:46::-;;;;;;;;;;;;;:::o;22098:588::-;22175:11;;;;;;;;;;;22171:49;;22202:7;;22171:49;22232:14;22267:4;22251:21;;:6;:21;;;;:47;;;;;22285:13;;;;;;;;;;;22276:22;;:6;:22;;;;22251:47;:69;;;;;22302:18;22313:6;22302:10;:18::i;:::-;22251:69;22249:101;;;;;22326:13;:24;22340:9;22326:24;;;;;;;;;;;;;;;;;;;;;;;;;22249:101;22232:118;;22361:17;22381:9;:17;22391:6;22381:17;;;;;;;;;;;;;;;;;;;;;;;;;:41;;;;22402:9;:20;22412:9;22402:20;;;;;;;;;;;;;;;;;;;;;;;;;22381:41;22361:61;;22455:5;22442:18;;:9;:18;;;:43;;;;;22480:5;22464:21;;:12;:21;;;22442:43;22433:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;22557:13;:24;22571:9;22557:24;;;;;;;;;;;;;;;;;;;;;;;;;22554:125;;;22634:17;;22621:10;;:30;;;;:::i;:::-;22606:12;:45;22597:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22554:125;22160:526;;22098:588;;;:::o;14613:25::-;;;;:::o;21996:94::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22074:8:::1;22062:11;;:20;;;;;;;;;;;;;;;;;;21996:94:::0;:::o;14490:55::-;;;;;;;;;;;;;:::o;14445:36::-;;;;:::o;16831:413::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16904:13:::1;16932:229;16952:15;:22;;;;16944:5;:30;16932:229;;;17030:7;17004:33;;:15;17020:5;17004:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;17000:150;;;17069:15;17108:1;17085:15;:22;;;;:24;;;;:::i;:::-;17069:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17046:15;17062:5;17046:22;;;;;;;;:::i;:::-;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;17129:5;;17000:150;16976:7;;;;;:::i;:::-;;;;16932:229;;;17181:15;:22;;;;17172:5;:31;17169:71;;17210:15;:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;17169:71;16893:351;16831:413:::0;:::o;19107:103::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19194:8:::1;19179:12;:23;;;;19107:103:::0;:::o;14933:45::-;;;;;;;;;;;;;:::o;18619:133::-;18703:7;18721:11;:19;18733:6;18721:19;;;;;;;;;;;;;;;:28;18741:7;18721:28;;;;;;;;;;;;;;;;18714:35;;18619:133;;;;:::o;14135:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;19332:108::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19424:8:::1;19407:14;;:25;;;;;;;;;;;;;;;;;;19332:108:::0;:::o;14645:36::-;;;;:::o;14369:33::-;;;;:::o;12311:97::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12395:5:::1;12373:14;:19;12388:3;12373:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;12311:97:::0;:::o;12868:173::-;11857:19;11865:10;11857:7;:19::i;:::-;11849:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12952:3:::1;12944:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;12988:4;12966:14:::0;:19:::1;12981:3;12966:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;13008:25;13029:3;13008:25;;;;;;:::i;:::-;;;;;;;;12868:173:::0;:::o;20515:141::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20628:20:::1;20604:21;;:44;;;;;;;;;;;;;;;;;;20515:141:::0;:::o;14554:24::-;;;;;;;;;;;;;:::o;19583:131::-;12026:24;12039:10;12026:12;:24::i;:::-;12018:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19700:6:::1;19674:15;:23;19690:6;19674:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19583:131:::0;;:::o;12642:107::-;12698:4;12722:14;:19;12737:3;12722:19;;;;;;;;;;;;;;;;;;;;;;;;;12715:26;;12642:107;;;:::o;14688:31::-;;;;;;;;;;;;;:::o;1767:179::-;1825:7;1845:9;1861:1;1857;:5;;;;:::i;:::-;1845:17;;1886:1;1881;:6;;1873:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1937:1;1930:8;;;1767:179;;;;:::o;16262:370::-;16324:4;16341:15;16359:5;16341:23;;16375:13;16403:194;16423:15;:22;;;;16415:5;:30;16403:194;;;16501:7;16475:33;;:15;16491:5;16475:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:33;;;16471:115;;;16542:4;16529:17;;16565:5;;16471:115;16447:7;;;;;:::i;:::-;;;;16403:194;;;16614:10;16607:17;;;;16262:370;;;:::o;2098:190::-;2184:7;2217:1;2212;:6;;2220:12;2204:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2244:9;2260:1;2256;:5;;;;:::i;:::-;2244:17;;2279:1;2272:8;;;2098:190;;;;;:::o;23241:1616::-;23333:4;23372:1;23352:9;:17;23362:6;23352:17;;;;;;;;;;;;;;;;:21;23344:30;;;;;;23408:25;23416:6;23423:9;23408:7;:25::i;:::-;23457:16;;;;;;;;;;;23454:73;;;23483:41;23498:6;23506:9;23517:6;23483:14;:41::i;:::-;23476:48;;;;23454:73;23543:14;:22;23558:6;23543:22;;;;;;;;;;;;;;;;;;;;;;;;;23542:23;:53;;;;;23570:14;:25;23585:9;23570:25;;;;;;;;;;;;;;;;;;;;;;;;;23569:26;23542:53;23539:128;;;23619:11;;;;;;;;;;;23611:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;23539:128;23697:12;;23687:6;:22;;:49;;;;23713:15;:23;23729:6;23713:23;;;;;;;;;;;;;;;;;;;;;;;;;23687:49;23679:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;23788:4;;;;;;;;;;;23774:18;;:10;:18;;;;:39;;;;;23797:16;;;;;;;;;;;23796:17;23774:39;:64;;;;;23817:21;;;;;;;;;;;23774:64;:109;;;;;23870:13;;23842:9;:24;23860:4;23842:24;;;;;;;;;;;;;;;;:41;;23774:109;23771:128;;;23886:10;:8;:10::i;:::-;23771:128;23958:53;23980:6;23958:53;;;;;;;;;;;;;;;;;:9;:17;23968:6;23958:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23938:9;:17;23948:6;23938:17;;;;;;;;;;;;;;;:73;;;;24036:15;:26;24052:9;24036:26;;;;;;;;;;;;;;;;;;;;;;;;;24035:27;:45;;;;;24066:14;;;;;;;;;;;24035:45;24032:141;;;24150:10;;24114:32;24139:6;24114:9;:20;24124:9;24114:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;:46;;24106:55;;;;;;24032:141;24195:19;24218:11;:19;24230:6;24218:19;;;;;;;;;;;;;;;;;;;;;;;;;24217:20;:47;;;;;24242:11;:22;24254:9;24242:22;;;;;;;;;;;;;;;;;;;;;;;;;24241:23;24217:47;:93;;24304:6;24217:93;;;24267:34;24275:6;24283:9;24294:6;24267:7;:34::i;:::-;24217:93;24195:115;;24344:37;24369:11;24344:9;:20;24354:9;24344:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24321:9;:20;24331:9;24321:20;;;;;;;;;;;;;;;:60;;;;24427:16;:24;24444:6;24427:24;;;;;;;;;;;;;;;;;;;;;;;;;24423:127;;24472:19;;;;;;;;;;;:28;;;24501:6;24509:9;:17;24519:6;24509:17;;;;;;;;;;;;;;;;24472:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24468:71;;;;;;24423:127;24566:16;:27;24583:9;24566:27;;;;;;;;;;;;;;;;;;;;;;;;;24562:137;;24614:19;;;;;;;;;;;:28;;;24643:9;24654;:20;24664:9;24654:20;;;;;;;;;;;;;;;;24614:61;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24610:77;;;;;;24562:137;24715:19;;;;;;;;;;;:27;;;24743:14;;24715:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24711:59;;;;;;24804:9;24787:40;;24796:6;24787:40;;;24815:11;24787:40;;;;;;:::i;:::-;;;;;;;;24845:4;24838:11;;;23241:1616;;;;;;:::o;1954:136::-;2012:7;2039:43;2043:1;2046;2039:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;2032:50;;1954:136;;;;:::o;17694:348::-;17789:1;17770:21;;:7;:21;;;;17762:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17863:68;17886:6;17863:68;;;;;;;;;;;;;;;;;:9;:18;17873:7;17863:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;17842:9;:18;17852:7;17842:18;;;;;;;;;;;;;;;:89;;;;17957:24;17974:6;17957:12;;:16;;:24;;;;:::i;:::-;17942:12;:39;;;;18023:1;17997:37;;18006:7;17997:37;;;18027:6;17997:37;;;;;;:::i;:::-;;;;;;;;17694:348;;:::o;21820:168::-;21877:4;21894:12;21948:4;21936:17;21928:25;;21979:1;21972:4;:8;21965:15;;;21820:168;;;:::o;24869:330::-;24962:4;24999:53;25021:6;24999:53;;;;;;;;;;;;;;;;;:9;:17;25009:6;24999:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24979:9;:17;24989:6;24979:17;;;;;;;;;;;;;;;:73;;;;25086:32;25111:6;25086:9;:20;25096:9;25086:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25063:9;:20;25073:9;25063:20;;;;;;;;;;;;;;;:55;;;;25151:9;25134:35;;25143:6;25134:35;;;25162:6;25134:35;;;;;;:::i;:::-;;;;;;;;25187:4;25180:11;;24869:330;;;;;:::o;25816:1565::-;15147:4;15128:16;;:23;;;;;;;;;;;;;;;;;;25878:19:::1;25900:9;:24;25918:4;25900:24;;;;;;;;;;;;;;;;25878:46;;25935:23;25961:50;26009:1;25961:43;25995:8;;25961:29;25977:12;;25961:11;:15;;:29;;;;:::i;:::-;:33;;:43;;;;:::i;:::-;:47;;:50;;;;:::i;:::-;25935:76;;26022:20;26045:32;26061:15;26045:11;:15;;:32;;;;:::i;:::-;26022:55;;26090:21;26128:1;26114:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26090:40;;26159:4;26141;26146:1;26141:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26185:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26175:4;26180:1;26175:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;26211:6;;;;;;;;;;;:57;;;26283:12;26310:1;26326:4;26353;26373:15;26211:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26412:17;26432:21;26412:41;;26466:19;26488:33;26501:19;26518:1;26501:12;;:16;;:19;;;;:::i;:::-;26488:8;;:12;;:33;;;;:::i;:::-;26466:55;;26542:26;26571:51;26620:1;26571:44;26603:11;26571:27;26585:12;;26571:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;26542:80;;26633:27;26663:42;26693:11;26663:25;26677:10;;26663:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;26633:72;;26710:24;26737:58;26776:18;26737:34;26751:19;26737:9;:13;;:34;;;;:::i;:::-;:38;;:58;;;;:::i;:::-;26710:85;;26812:19;;;;;;;;;;;:27;;;26847:19;26812:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;26808:73;;;;;;26922:1;26904:15;:19;26901:362;;;26939:6;;;;;;;;;;;:22;;;26969:18;27015:4;27039:15;27073:1;27093::::0;27113:21:::1;;;;;;;;;;;27153:15;26939:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27203:48;27215:18;27235:15;27203:48;;;;;;;:::i;:::-;;;;;;;;26901:362;27294:1;27275:16;:20;27271:103;;;27302:66;27333:16;;;;;;;;;;;27351;27302:30;:66::i;:::-;27271:103;25857:1524;;;;;;;;;15193:5:::0;15174:16;;:24;;;;;;;;;;;;;;;;;;25816:1565::o;25207:439::-;25293:7;25323:21;25355:9;25347:17;;:4;;;;;;;;;;;:17;;;:48;;25387:8;;25347:48;;;25367:17;;25347:48;25323:72;;25406:17;25426:34;25456:3;25426:25;25437:13;25426:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;25406:54;;25500:39;25529:9;25500;:24;25518:4;25500:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;25473:9;:24;25491:4;25473:24;;;;;;;;;;;;;;;:66;;;;25580:4;25555:42;;25564:6;25555:42;;;25587:9;25555:42;;;;;;:::i;:::-;;;;;;;;25617:21;25628:9;25617:6;:10;;:21;;;;:::i;:::-;25610:28;;;;25207:439;;;;;:::o;2296:224::-;2354:7;2383:1;2378;:6;2374:25;;;2395:1;2388:8;;;;2374:25;2409:9;2425:1;2421;:5;;;;:::i;:::-;2409:17;;2454:1;2449;2445;:5;;;;:::i;:::-;:10;2437:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2511:1;2504:8;;;2296:224;;;;;:::o;2528:132::-;2586:7;2613:39;2617:1;2620;2613:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2606:46;;2528:132;;;;:::o;1534:200::-;1607:12;1625:2;:7;;1640:5;1657:1;1647:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1625:35;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1606:54;;;1679:7;1671:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1595:139;1534:200;;:::o;2668:189::-;2754:7;2786:1;2782;:5;2789:12;2774:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2813:9;2829:1;2825;:5;;;;:::i;:::-;2813:17;;2848:1;2841:8;;;2668: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:118::-;8106:24;8124:5;8106:24;:::i;:::-;8101:3;8094:37;8019:118;;:::o;8143:222::-;8236:4;8274:2;8263:9;8259:18;8251:26;;8287:71;8355:1;8344:9;8340:17;8331:6;8287:71;:::i;:::-;8143:222;;;;:::o;8371:474::-;8439:6;8447;8496:2;8484:9;8475:7;8471:23;8467:32;8464:119;;;8502:79;;:::i;:::-;8464:119;8622:1;8647:53;8692:7;8683:6;8672:9;8668:22;8647:53;:::i;:::-;8637:63;;8593:117;8749:2;8775:53;8820:7;8811:6;8800:9;8796:22;8775:53;:::i;:::-;8765:63;;8720:118;8371:474;;;;;:::o;8851:60::-;8879:3;8900:5;8893:12;;8851:60;;;:::o;8917:142::-;8967:9;9000:53;9018:34;9027:24;9045:5;9027:24;:::i;:::-;9018:34;:::i;:::-;9000:53;:::i;:::-;8987:66;;8917:142;;;:::o;9065:126::-;9115:9;9148:37;9179:5;9148:37;:::i;:::-;9135:50;;9065:126;;;:::o;9197:154::-;9275:9;9308:37;9339:5;9308:37;:::i;:::-;9295:50;;9197:154;;;:::o;9357:187::-;9472:65;9531:5;9472:65;:::i;:::-;9467:3;9460:78;9357:187;;:::o;9550:278::-;9671:4;9709:2;9698:9;9694:18;9686:26;;9722:99;9818:1;9807:9;9803:17;9794:6;9722:99;:::i;:::-;9550:278;;;;:::o;9834:474::-;9902:6;9910;9959:2;9947:9;9938:7;9934:23;9930:32;9927:119;;;9965:79;;:::i;:::-;9927:119;10085:1;10110:53;10155:7;10146:6;10135:9;10131:22;10110:53;:::i;:::-;10100:63;;10056:117;10212:2;10238:53;10283:7;10274:6;10263:9;10259:22;10238:53;:::i;:::-;10228:63;;10183:118;9834:474;;;;;:::o;10314:104::-;10359:7;10388:24;10406:5;10388:24;:::i;:::-;10377:35;;10314:104;;;:::o;10424:138::-;10505:32;10531:5;10505:32;:::i;:::-;10498:5;10495:43;10485:71;;10552:1;10549;10542:12;10485:71;10424:138;:::o;10568:155::-;10622:5;10660:6;10647:20;10638:29;;10676:41;10711:5;10676:41;:::i;:::-;10568:155;;;;:::o;10729:345::-;10796:6;10845:2;10833:9;10824:7;10820:23;10816:32;10813:119;;;10851:79;;:::i;:::-;10813:119;10971:1;10996:61;11049:7;11040:6;11029:9;11025:22;10996:61;:::i;:::-;10986:71;;10942:125;10729:345;;;;:::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:::-;17135:4;17173:2;17162:9;17158:18;17150:26;;17186:71;17254:1;17243:9;17239:17;17230:6;17186:71;:::i;:::-;17267:72;17335:2;17324:9;17320:18;17311:6;17267:72;:::i;:::-;17014:332;;;;;:::o;17352:158::-;17492:10;17488:1;17480:6;17476:14;17469:34;17352:158;:::o;17516:365::-;17658:3;17679:66;17743:1;17738:3;17679:66;:::i;:::-;17672:73;;17754:93;17843:3;17754:93;:::i;:::-;17872:2;17867:3;17863:12;17856:19;;17516:365;;;:::o;17887:419::-;18053:4;18091:2;18080:9;18076:18;18068:26;;18140:9;18134:4;18130:20;18126:1;18115:9;18111:17;18104:47;18168:131;18294:4;18168:131;:::i;:::-;18160:139;;17887:419;;;:::o;18312:305::-;18352:3;18371:20;18389:1;18371:20;:::i;:::-;18366:25;;18405:20;18423:1;18405:20;:::i;:::-;18400:25;;18559:1;18491:66;18487:74;18484:1;18481:81;18478:107;;;18565:18;;:::i;:::-;18478:107;18609:1;18606;18602:9;18595:16;;18312:305;;;;:::o;18623:162::-;18763:14;18759:1;18751:6;18747:14;18740:38;18623:162;:::o;18791:366::-;18933:3;18954:67;19018:2;19013:3;18954:67;:::i;:::-;18947:74;;19030:93;19119:3;19030:93;:::i;:::-;19148:2;19143:3;19139:12;19132:19;;18791:366;;;:::o;19163:419::-;19329:4;19367:2;19356:9;19352:18;19344:26;;19416:9;19410:4;19406:20;19402:1;19391:9;19387:17;19380:47;19444:131;19570:4;19444:131;:::i;:::-;19436:139;;19163:419;;;:::o;19588:191::-;19628:4;19648:20;19666:1;19648:20;:::i;:::-;19643:25;;19682:20;19700:1;19682:20;:::i;:::-;19677:25;;19721:1;19718;19715:8;19712:34;;;19726:18;;:::i;:::-;19712:34;19771:1;19768;19764:9;19756:17;;19588:191;;;;:::o;19785:180::-;19833:77;19830:1;19823:88;19930:4;19927:1;19920:15;19954:4;19951:1;19944:15;19971:134;20029:9;20062:37;20093:5;20062:37;:::i;:::-;20049:50;;19971:134;;;:::o;20111:147::-;20206:45;20245:5;20206:45;:::i;:::-;20201:3;20194:58;20111:147;;:::o;20264:238::-;20365:4;20403:2;20392:9;20388:18;20380:26;;20416:79;20492:1;20481:9;20477:17;20468:6;20416:79;:::i;:::-;20264:238;;;;:::o;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://fcd1ae5207f809fe07ea886ab3124b4c7783dd1efa11dd76e1dc0e1c83af3bbe
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.