ETH Price: $3,240.13 (-0.57%)
Gas: 1 Gwei

Token

Baby Kabosu Inu (Baby Kabosu Inu)
 

Overview

Max Total Supply

1,000,000 Baby Kabosu Inu

Holders

91

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,897.23211999700607765 Baby Kabosu Inu

Value
$0.00
0x6a8cc59ef199459cf91b3195d657ef93d06ea33f
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:
bkabosu

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-05
*/

// SPDX-License-Identifier: MIT
//https://t.me/BabyKabosuInuERC
//https://twitter.com/BabyKabosuERC

pragma solidity ^0.8.17;


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 IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

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

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

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

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

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

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

interface 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;
    }

    IERC20 RWRD = IERC20(0xD34A2051aC17BDD44D76AA84EA7Fcf8419130E55); // Kabosu
    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    IDEXRouter router;

    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 = 45 * 60;
    uint256 public minDistribution = 1 * (10 ** 13);

    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(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D Uniswap
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    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 = RWRD.balanceOf(address(this));

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

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

        uint256 amount = RWRD.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 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        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);
            RWRD.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 {
        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();
    }
}

contract bkabosu is IERC20, Auth {
    using SafeMath for uint256;

    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;
    address DEV = 0x3B8f8573852Acb049E9F0475F3cEd443fB9082f6; // DEPLOYER

    string constant _name = "Baby Kabosu Inu";
    string constant _symbol = "Baby Kabosu Inu";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 1_000_000 * 1e18;

    uint256 public _maxTxAmount = 30_000 * 1e18; // 3% max txn
    uint256 public _maxWalletToken = 30_000 * 1e18; // 3% max wallet

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

    bool public blacklistMode = true;
    mapping (address => bool) public isBlacklisted;


    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;

    uint256 public liquidityFee    = 10;
    uint256 public reflectionFee   = 5;
    uint256 public marketingFee    = 5;
    uint256 public devFee          = 5;
    uint256 public totalFee        = marketingFee + reflectionFee + liquidityFee + devFee;
    uint256 public feeDenominator  = 100;

    uint256 public sellMultiplier  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;
    address public devFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = false;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 10;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 30 / 10000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //uniswap 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
        _allowances[address(this)][address(router)] = type(uint).max;

        distributor = new DividendDistributor(address(router));

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

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[address(DEV)] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;
        isTimelockExempt[address(DEV)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEV)] = false;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = address(0x69289917dCFeBEe462aB65A491976131E4db180E);
        devFeeReceiver = address(DEV);

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

    receive() external payable { }

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

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

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

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

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

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner() {
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }
    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

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

        // Blacklist
        if(blacklistMode){
            require(!isBlacklisted[sender] && !isBlacklisted[recipient],"Blacklisted");    
        }


        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != devFeeReceiver  && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}
        
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for 1min between two buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

        // Checks max transaction limit
        checkTxLimit(sender, amount);

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

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount,(recipient == pair)) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);

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

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

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

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

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount, bool isSell) internal returns (uint256) {
        
        uint256 multiplier = isSell ? sellMultiplier : 100;
        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);
        

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

        return amount.sub(feeAmount);
    }

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

    function clearStuckBalance(uint256 amountPercentage) external authorized {
        uint256 amountETH = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountETH * amountPercentage / 100);
    }

    function clearStuckBalance_sender(uint256 amountPercentage) external authorized {
        uint256 amountETH = address(this).balance;
        payable(msg.sender).transfer(amountETH * amountPercentage / 100);
    }

    function set_sell_multiplier(uint256 Multiplier) external onlyOwner{
        sellMultiplier = Multiplier;        
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
    }

    // enable cooldown between trades
    function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
        buyCooldownEnabled = _status;
        cooldownTimerInterval = _interval;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

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

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

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHReflection = amountETH.mul(reflectionFee).div(totalETHFee);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHDev = amountETH.mul(devFee).div(totalETHFee);

        try distributor.deposit{value: amountETHReflection}() {} catch {}
        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(devFeeReceiver).call{value: amountETHDev, gas: 30000}("");
        
        // Supress warning msg
        tmpSuccess = false;

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


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

    function enable_blacklist(bool _status) public onlyOwner {
        blacklistMode = _status;
    }

    function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
        for (uint256 i; i < addresses.length; ++i) {
            isBlacklisted[addresses[i]] = status;
        }
    }


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

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

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

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _devFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        devFee = _devFee;
        totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(devFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/2, "Fees cannot be more than 50%");
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver ) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        devFeeReceiver = address(DEV);
    }

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

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }



/* Airdrop */
/* function multiTransfer(address from, address[] calldata addresses, uint256[] calldata tokens) external onlyOwner {

    require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
    require(addresses.length == tokens.length,"Mismatch between Address and token count");

    uint256 SCCC = 0;

    for(uint i=0; i < addresses.length; i++){
        SCCC = SCCC + tokens[i];
    }

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
        if(!isDividendExempt[addresses[i]]) {
            try distributor.setShare(addresses[i], _balances[addresses[i]]) {} catch {} 
        }
    }

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

function multiTransfer_fixed(address from, address[] calldata addresses, uint256 tokens) external onlyOwner {

    require(addresses.length < 801,"GAS Error: max airdrop limit is 800 addresses");

    uint256 SCCC = tokens * addresses.length;

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens);
        if(!isDividendExempt[addresses[i]]) {
            try distributor.setShare(addresses[i], _balances[addresses[i]]) {} catch {} 
        }
    }

    // Dividend tracker
    if(!isDividendExempt[from]) {
        try distributor.setShare(from, _balances[from]) {} catch {}
    }
}*/

event AutoLiquify(uint256 amountETH, uint256 amountBOG);

}

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":"amountBOG","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":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"enable_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","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":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","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":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Multiplier","type":"uint256"}],"name":"set_sell_multiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","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":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733b8f8573852acb049e9f0475f3ced443fb9082f6600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069d3c21bcecceda100000060065569065a4da25d3016c0000060075569065a4da25d3016c000006008556001600b60006101000a81548160ff021916908315150217905550600a601155600560125560056013556005601455601454601154601254601354620001a4919062000dba565b620001b0919062000dba565b620001bc919062000dba565b601555606460165560646017556014601b556064601c556000601e60146101000a81548160ff0219169083151502179055506207a1206020556001602160006101000a81548160ff021916908315150217905550600a602160016101000a81548160ff021916908360ff1602179055506001602360006101000a81548160ff021916908315150217905550612710601e6006546200025b919062000df5565b62000267919062000e6f565b6024553480156200027757600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fa919062000f11565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200045892919062000f54565b6020604051808303816000875af115801562000478573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200049e919062000f11565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005d29062000d73565b620005de919062000f81565b604051809103906000f080158015620005fb573d6000803e3d6000fd5b50601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060106000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160106000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507369289917dcfebee462ab65a491976131e4db180e601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000d65919062000faf565b60405180910390a362000fcc565b611fe280620060c283390190565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dc78262000d81565b915062000dd48362000d81565b925082820190508082111562000def5762000dee62000d8b565b5b92915050565b600062000e028262000d81565b915062000e0f8362000d81565b925082820262000e1f8162000d81565b9150828204841483151762000e395762000e3862000d8b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e7c8262000d81565b915062000e898362000d81565b92508262000e9c5762000e9b62000e40565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed98262000eac565b9050919050565b62000eeb8162000ecc565b811462000ef757600080fd5b50565b60008151905062000f0b8162000ee0565b92915050565b60006020828403121562000f2a5762000f2962000ea7565b5b600062000f3a8482850162000efa565b91505092915050565b62000f4e8162000ecc565b82525050565b600060408201905062000f6b600083018562000f43565b62000f7a602083018462000f43565b9392505050565b600060208201905062000f98600083018462000f43565b92915050565b62000fa98162000d81565b82525050565b600060208201905062000fc6600083018462000f9e565b92915050565b6150e68062000fdc6000396000f3fe6080604052600436106103a65760003560e01c806378109e54116101e7578063ca33e64c1161010d578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610db9578063fe9fbb8014610df6578063fed0d2a114610e33578063ffb54a9914610e5e576103ad565b8063f2fde38b14610d13578063f708a64f14610d3c578063f84ba65d14610d65578063f887ea4014610d8e576103ad565b8063df20fd49116100dc578063df20fd4914610c6d578063e96fada214610c96578063ec72d65f14610cc1578063f0b37c0414610cea576103ad565b8063ca33e64c14610b9d578063d51ed1c814610bc8578063dab84ee714610c05578063dd62ed3e14610c30576103ad565b806398118cb411610185578063a9059cbb11610154578063a9059cbb14610ae3578063b6a5d7de14610b20578063bd9ab53714610b49578063bfe1092814610b72576103ad565b806398118cb414610a3b5780639d1944f514610a66578063a4b45c0014610a8f578063a8aa1b3114610ab8576103ad565b8063893d20e8116101c1578063893d20e814610991578063896648c1146109bc5780638e2eee84146109e757806395d89b4114610a10576103ad565b806378109e54146109105780637d1db4a51461093b57806383ad799414610966576103ad565b80632d594567116102cc5780635e562f3b1161026a5780636b67c4df116102395780636b67c4df146108525780636ddd17131461087d57806370a08231146108a8578063722b62ad146108e5576103ad565b80635e562f3b146107aa578063617fe0ed146107d3578063658d4b7f146107fe5780636827e76414610827576103ad565b806344a33fd2116102a657806344a33fd2146106f257806350db71fb1461071b578063571ac8b0146107445780635c85974f14610781576103ad565b80632d594567146106615780632f54bf6e1461068a578063313ce567146106c7576103ad565b8063180b0d7e11610344578063201e799111610313578063201e7991146105a757806323b872dd146105d05780632b112e491461060d5780632d48e89614610638576103ad565b8063180b0d7e146104fd57806318160ddd146105285780631da1db5e146105535780631df4ccfc1461057c576103ad565b806309302dc61161038057806309302dc614610431578063095ea7b31461045a5780630d295980146104975780631161ae39146104c0576103ad565b80630445b667146103b257806304a66b48146103dd57806306fdde0314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e89565b6040516103d49190614003565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614054565b610e8f565b005b34801561041257600080fd5b5061041b610f92565b604051610428919061415f565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190614181565b610fcf565b005b34801561046657600080fd5b50610481600480360381019061047c919061420c565b61103b565b60405161048e9190614267565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906142ae565b61112d565b005b3480156104cc57600080fd5b506104e760048036038101906104e291906142db565b611192565b6040516104f49190614267565b60405180910390f35b34801561050957600080fd5b506105126111a7565b60405161051f9190614003565b60405180910390f35b34801561053457600080fd5b5061053d6111ad565b60405161054a9190614003565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614181565b6111b7565b005b34801561058857600080fd5b50610591611288565b60405161059e9190614003565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c991906142db565b61128e565b005b3480156105dc57600080fd5b506105f760048036038101906105f2919061431b565b6112e8565b6040516106049190614267565b60405180910390f35b34801561061957600080fd5b506106226114e8565b60405161062f9190614003565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906142db565b61156a565b005b34801561066d57600080fd5b50610688600480360381019061068391906143a7565b611645565b005b34801561069657600080fd5b506106b160048036038101906106ac91906143e7565b6116c6565b6040516106be9190614267565b60405180910390f35b3480156106d357600080fd5b506106dc61171f565b6040516106e99190614423565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614181565b611728565b005b34801561072757600080fd5b50610742600480360381019061073d919061443e565b6117d7565b005b34801561075057600080fd5b5061076b600480360381019061076691906143e7565b61187a565b6040516107789190614267565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614181565b6118ad565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906142ae565b6118ff565b005b3480156107df57600080fd5b506107e8611964565b6040516107f59190614267565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061443e565b611977565b005b34801561083357600080fd5b5061083c611a1a565b6040516108499190614003565b60405180910390f35b34801561085e57600080fd5b50610867611a20565b6040516108749190614003565b60405180910390f35b34801561088957600080fd5b50610892611a26565b60405161089f9190614267565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906143e7565b611a39565b6040516108dc9190614003565b60405180910390f35b3480156108f157600080fd5b506108fa611a82565b6040516109079190614423565b60405180910390f35b34801561091c57600080fd5b50610925611a95565b6040516109329190614003565b60405180910390f35b34801561094757600080fd5b50610950611a9b565b60405161095d9190614003565b60405180910390f35b34801561097257600080fd5b5061097b611aa1565b6040516109889190614003565b60405180910390f35b34801561099d57600080fd5b506109a6611aa7565b6040516109b3919061448d565b60405180910390f35b3480156109c857600080fd5b506109d1611ad0565b6040516109de9190614267565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a09919061450d565b611ae3565b005b348015610a1c57600080fd5b50610a25611bce565b604051610a32919061415f565b60405180910390f35b348015610a4757600080fd5b50610a50611c0b565b604051610a5d9190614003565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614181565b611c11565b005b348015610a9b57600080fd5b50610ab66004803603810190610ab1919061456d565b611c72565b005b348015610ac457600080fd5b50610acd611da3565b604051610ada919061448d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b05919061420c565b611dc9565b604051610b179190614267565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b4291906143e7565b611dde565b005b348015610b5557600080fd5b50610b706004803603810190610b6b9190614181565b611e80565b005b348015610b7e57600080fd5b50610b87611eec565b604051610b94919061460c565b60405180910390f35b348015610ba957600080fd5b50610bb2611f12565b604051610bbf919061448d565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea9190614181565b611f38565b604051610bfc9190614003565b60405180910390f35b348015610c1157600080fd5b50610c1a611faa565b604051610c27919061448d565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c52919061456d565b611fd0565b604051610c649190614003565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190614627565b612057565b005b348015610ca257600080fd5b50610cab6120c4565b604051610cb8919061448d565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce39190614181565b6120ea565b005b348015610cf657600080fd5b50610d116004803603810190610d0c91906143e7565b61213c565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d3591906146a5565b6121df565b005b348015610d4857600080fd5b50610d636004803603810190610d5e919061443e565b6122f8565b005b348015610d7157600080fd5b50610d8c6004803603810190610d87919061443e565b612598565b005b348015610d9a57600080fd5b50610da361263b565b604051610db091906146f3565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb91906143e7565b612661565b604051610ded9190614267565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e1891906143e7565b612681565b604051610e2a9190614267565b60405180910390f35b348015610e3f57600080fd5b50610e486126d7565b604051610e559190614003565b60405180910390f35b348015610e6a57600080fd5b50610e736126dd565b604051610e809190614267565b60405180910390f35b60245481565b610e9833612681565b610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece9061475a565b60405180910390fd5b84601181905550836012819055508260138190555081601481905550610f2c601454610f1e85610f10888a6126f090919063ffffffff16565b6126f090919063ffffffff16565b6126f090919063ffffffff16565b601581905550806016819055506002601654610f4891906147d8565b60155410610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290614855565b60405180910390fd5b5050505050565b60606040518060400160405280600f81526020017f42616279204b61626f737520496e750000000000000000000000000000000000815250905090565b610fd8336116c6565b611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906148c1565b60405180910390fd5b6103e88160065461102891906148e1565b61103291906147d8565b60088190555050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161111b9190614003565b60405180910390a36001905092915050565b611136336116c6565b611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906148c1565b60405180910390fd5b80601e60146101000a81548160ff02191690831515021790555050565b60008261119e83611f38565b11905092915050565b60165481565b6000600654905090565b6111c033612681565b6111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f69061475a565b60405180910390fd5b6000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461124e91906148e1565b61125891906147d8565b9081150290604051600060405180830381858888f19350505050158015611283573d6000803e3d6000fd5b505050565b60155481565b61129733612681565b6112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061475a565b60405180910390fd5b81601b8190555080601c819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114d457611453826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114df8484846127b2565b90509392505050565b6000611565611518600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b611557611546600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b60065461334390919063ffffffff16565b61334390919063ffffffff16565b905090565b61157333612681565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061475a565b60405180910390fd5b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161160f929190614923565b600060405180830381600087803b15801561162957600080fd5b505af115801561163d573d6000803e3d6000fd5b505050505050565b61164e336116c6565b61168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906148c1565b60405180910390fd5b81602160006101000a81548160ff02191690831515021790555080602160016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61173133612681565b611770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117679061475a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848461179d91906148e1565b6117a791906147d8565b9081150290604051600060405180830381858888f193505050501580156117d2573d6000803e3d6000fd5b505050565b6117e033612681565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061475a565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006118a6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61103b565b9050919050565b6118b633612681565b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061475a565b60405180910390fd5b8060078190555050565b611908336116c6565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e906148c1565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b602160009054906101000a900460ff1681565b61198033612681565b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061475a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b60135481565b602360009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602160019054906101000a900460ff1681565b60085481565b60075481565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900460ff1681565b611aec336116c6565b611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b22906148c1565b60405180910390fd5b60005b83839050811015611bc85781600c6000868685818110611b5157611b5061494c565b5b9050602002016020810190611b6691906143e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611bc19061497b565b9050611b2e565b50505050565b60606040518060400160405280600f81526020017f42616279204b61626f737520496e750000000000000000000000000000000000815250905090565b60115481565b611c1a33612681565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061475a565b60405180910390fd5b620b71b08110611c6857600080fd5b8060208190555050565b611c7b33612681565b611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb19061475a565b60405180910390fd5b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd63384846127b2565b905092915050565b611de7336116c6565b611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906148c1565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e89336116c6565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf906148c1565b60405180910390fd5b6103e881600654611ed991906148e1565b611ee391906147d8565b60078190555050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611fa3611f456114e8565b611f95611f866002611f78601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b61338d90919063ffffffff16565b8561338d90919063ffffffff16565b61340790919063ffffffff16565b9050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61206033612681565b61209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120969061475a565b60405180910390fd5b81602360006101000a81548160ff021916908315150217905550806024819055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120f3336116c6565b612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906148c1565b60405180910390fd5b8060178190555050565b612145336116c6565b612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906148c1565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121e8336116c6565b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906148c1565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516122ed91906149e4565b60405180910390a150565b61230133612681565b612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061475a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123ca5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6123d357600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156124c557601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161248e929190614a3a565b600060405180830381600087803b1580156124a857600080fd5b505af11580156124bc573d6000803e3d6000fd5b50505050612594565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612561929190614a63565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b505050505b5050565b6125a133612681565b6125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061475a565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b601e60149054906101000a900460ff1681565b60008082846126ff9190614a8c565b905083811015612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90614b0c565b60405180910390fd5b8091505092915050565b6000838311158290612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d919061415f565b60405180910390fd5b50600083856127a59190614b2c565b9050809150509392505050565b6000602560009054906101000a900460ff16156127db576127d4848484613451565b905061333c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561287f5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d457601e60149054906101000a900460ff166128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614bac565b60405180910390fd5b5b600b60009054906101000a900460ff16156129cd57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298d5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c390614c18565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a5357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612aad5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b075750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b615750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bbb5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c79576000612c2584611a39565b90506008548382612c369190614a8c565b1115612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90614caa565b60405180910390fd5b505b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612ce25750602160009054906101000a900460ff165b8015612d385750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e205742602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db590614d3c565b60405180910390fd5b602160019054906101000a900460ff1660ff1642612ddc9190614a8c565b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612e2a8483613624565b612e326136c1565b15612e4057612e3f613798565b5b612ec9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612f1785613db8565b612f215782612f7d565b612f7c8584601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614613e0f565b5b9050612fd181600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312e57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613101929190614a63565b600060405180830381600087803b15801561311b57600080fd5b505af192505050801561312c575060015b505b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661324857601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161321b929190614a63565b600060405180830381600087803b15801561323557600080fd5b505af1925050508015613246575060015b505b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b81526004016132a59190614003565b600060405180830381600087803b1580156132bf57600080fd5b505af19250505080156132d0575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161332e9190614003565b60405180910390a360019150505b9392505050565b600061338583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061274e565b905092915050565b600080830361339f5760009050613401565b600082846133ad91906148e1565b90508284826133bc91906147d8565b146133fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f390614dce565b60405180910390fd5b809150505b92915050565b600061344983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f87565b905092915050565b60006134dc826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357182600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136119190614003565b60405180910390a3600190509392505050565b6007548111158061367e5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b490614e3a565b60405180910390fd5b5050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561372e5750602560009054906101000a900460ff16155b80156137465750602360009054906101000a900460ff165b80156137935750602454600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602560006101000a81548160ff02191690831515021790555060006137c3601b54601c54611192565b6137cf576011546137d2565b60005b9050600061381260026138046015546137f68660245461338d90919063ffffffff16565b61340790919063ffffffff16565b61340790919063ffffffff16565b9050600061382b8260245461334390919063ffffffff16565b90506000600267ffffffffffffffff81111561384a57613849614e5a565b5b6040519080825280602002602001820160405280156138785781602001602082028036833780820191505090505b50905030816000815181106138905761388f61494c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106139015761390061494c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016139a4959493929190614f47565b600060405180830381600087803b1580156139be57600080fd5b505af11580156139d2573d6000803e3d6000fd5b5050505060006139eb824761334390919063ffffffff16565b90506000613a17613a0660028961340790919063ffffffff16565b60155461334390919063ffffffff16565b90506000613a536002613a4584613a378c8861338d90919063ffffffff16565b61340790919063ffffffff16565b61340790919063ffffffff16565b90506000613a7e83613a706012548761338d90919063ffffffff16565b61340790919063ffffffff16565b90506000613aa984613a9b6013548861338d90919063ffffffff16565b61340790919063ffffffff16565b90506000613ad485613ac66014548961338d90919063ffffffff16565b61340790919063ffffffff16565b9050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b4057600080fd5b505af193505050508015613b52575060015b506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051613b9f90614fd2565b600060405180830381858888f193505050503d8060008114613bdd576040519150601f19603f3d011682016040523d82523d6000602084013e613be2565b606091505b50509050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613c3090614fd2565b600060405180830381858888f193505050503d8060008114613c6e576040519150601f19603f3d011682016040523d82523d6000602084013e613c73565b606091505b5050809150506000905060008b1115613d8f57601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d0f96959493929190614fe7565b60606040518083038185885af1158015613d2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d52919061505d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051613d86929190614923565b60405180910390a15b5050505050505050505050506000602560006101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613e1e576064613e22565b6017545b90506000613e6d6064601654613e3891906148e1565b613e5f84613e516015548a61338d90919063ffffffff16565b61338d90919063ffffffff16565b61340790919063ffffffff16565b9050613ec181600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f619190614003565b60405180910390a3613f7c818661334390919063ffffffff16565b925050509392505050565b60008083118290613fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc5919061415f565b60405180910390fd5b5060008385613fdd91906147d8565b9050809150509392505050565b6000819050919050565b613ffd81613fea565b82525050565b60006020820190506140186000830184613ff4565b92915050565b600080fd5b600080fd5b61403181613fea565b811461403c57600080fd5b50565b60008135905061404e81614028565b92915050565b600080600080600060a086880312156140705761406f61401e565b5b600061407e8882890161403f565b955050602061408f8882890161403f565b94505060406140a08882890161403f565b93505060606140b18882890161403f565b92505060806140c28882890161403f565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156141095780820151818401526020810190506140ee565b60008484015250505050565b6000601f19601f8301169050919050565b6000614131826140cf565b61413b81856140da565b935061414b8185602086016140eb565b61415481614115565b840191505092915050565b600060208201905081810360008301526141798184614126565b905092915050565b6000602082840312156141975761419661401e565b5b60006141a58482850161403f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141d9826141ae565b9050919050565b6141e9816141ce565b81146141f457600080fd5b50565b600081359050614206816141e0565b92915050565b600080604083850312156142235761422261401e565b5b6000614231858286016141f7565b92505060206142428582860161403f565b9150509250929050565b60008115159050919050565b6142618161424c565b82525050565b600060208201905061427c6000830184614258565b92915050565b61428b8161424c565b811461429657600080fd5b50565b6000813590506142a881614282565b92915050565b6000602082840312156142c4576142c361401e565b5b60006142d284828501614299565b91505092915050565b600080604083850312156142f2576142f161401e565b5b60006143008582860161403f565b92505060206143118582860161403f565b9150509250929050565b6000806000606084860312156143345761433361401e565b5b6000614342868287016141f7565b9350506020614353868287016141f7565b92505060406143648682870161403f565b9150509250925092565b600060ff82169050919050565b6143848161436e565b811461438f57600080fd5b50565b6000813590506143a18161437b565b92915050565b600080604083850312156143be576143bd61401e565b5b60006143cc85828601614299565b92505060206143dd85828601614392565b9150509250929050565b6000602082840312156143fd576143fc61401e565b5b600061440b848285016141f7565b91505092915050565b61441d8161436e565b82525050565b60006020820190506144386000830184614414565b92915050565b600080604083850312156144555761445461401e565b5b6000614463858286016141f7565b925050602061447485828601614299565b9150509250929050565b614487816141ce565b82525050565b60006020820190506144a2600083018461447e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126144cd576144cc6144a8565b5b8235905067ffffffffffffffff8111156144ea576144e96144ad565b5b602083019150836020820283011115614506576145056144b2565b5b9250929050565b6000806000604084860312156145265761452561401e565b5b600084013567ffffffffffffffff81111561454457614543614023565b5b614550868287016144b7565b9350935050602061456386828701614299565b9150509250925092565b600080604083850312156145845761458361401e565b5b6000614592858286016141f7565b92505060206145a3858286016141f7565b9150509250929050565b6000819050919050565b60006145d26145cd6145c8846141ae565b6145ad565b6141ae565b9050919050565b60006145e4826145b7565b9050919050565b60006145f6826145d9565b9050919050565b614606816145eb565b82525050565b600060208201905061462160008301846145fd565b92915050565b6000806040838503121561463e5761463d61401e565b5b600061464c85828601614299565b925050602061465d8582860161403f565b9150509250929050565b6000614672826141ae565b9050919050565b61468281614667565b811461468d57600080fd5b50565b60008135905061469f81614679565b92915050565b6000602082840312156146bb576146ba61401e565b5b60006146c984828501614690565b91505092915050565b60006146dd826145d9565b9050919050565b6146ed816146d2565b82525050565b600060208201905061470860008301846146e4565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614744600b836140da565b915061474f8261470e565b602082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147e382613fea565b91506147ee83613fea565b9250826147fe576147fd61477a565b5b828204905092915050565b7f466565732063616e6e6f74206265206d6f7265207468616e2035302500000000600082015250565b600061483f601c836140da565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006148ab6006836140da565b91506148b682614875565b602082019050919050565b600060208201905081810360008301526148da8161489e565b9050919050565b60006148ec82613fea565b91506148f783613fea565b925082820261490581613fea565b9150828204841483151761491c5761491b6147a9565b5b5092915050565b60006040820190506149386000830185613ff4565b6149456020830184613ff4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061498682613fea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149b8576149b76147a9565b5b600182019050919050565b60006149ce826145d9565b9050919050565b6149de816149c3565b82525050565b60006020820190506149f960008301846149d5565b92915050565b6000819050919050565b6000614a24614a1f614a1a846149ff565b6145ad565b613fea565b9050919050565b614a3481614a09565b82525050565b6000604082019050614a4f600083018561447e565b614a5c6020830184614a2b565b9392505050565b6000604082019050614a78600083018561447e565b614a856020830184613ff4565b9392505050565b6000614a9782613fea565b9150614aa283613fea565b9250828201905080821115614aba57614ab96147a9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614af6601b836140da565b9150614b0182614ac0565b602082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b6000614b3782613fea565b9150614b4283613fea565b9250828203905081811115614b5a57614b596147a9565b5b92915050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614b966014836140da565b9150614ba182614b60565b602082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614c02600b836140da565b9150614c0d82614bcc565b602082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000614c94603e836140da565b9150614c9f82614c38565b604082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000614d266025836140da565b9150614d3182614cca565b604082019050919050565b60006020820190508181036000830152614d5581614d19565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614db86021836140da565b9150614dc382614d5c565b604082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614e246011836140da565b9150614e2f82614dee565b602082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ebe816141ce565b82525050565b6000614ed08383614eb5565b60208301905092915050565b6000602082019050919050565b6000614ef482614e89565b614efe8185614e94565b9350614f0983614ea5565b8060005b83811015614f3a578151614f218882614ec4565b9750614f2c83614edc565b925050600181019050614f0d565b5085935050505092915050565b600060a082019050614f5c6000830188613ff4565b614f696020830187614a2b565b8181036040830152614f7b8186614ee9565b9050614f8a606083018561447e565b614f976080830184613ff4565b9695505050505050565b600081905092915050565b50565b6000614fbc600083614fa1565b9150614fc782614fac565b600082019050919050565b6000614fdd82614faf565b9150819050919050565b600060c082019050614ffc600083018961447e565b6150096020830188613ff4565b6150166040830187614a2b565b6150236060830186614a2b565b615030608083018561447e565b61503d60a0830184613ff4565b979650505050505050565b60008151905061505781614028565b92915050565b6000806000606084860312156150765761507561401e565b5b600061508486828701615048565b935050602061509586828701615048565b92505060406150a686828701615048565b915050925092509256fea2646970667358221220d8ec899d3c61194be2bb0f7fe78f9d0c6c8f4bb2f7806fe738ce7b0328bea70764736f6c63430008110033608060405273d34a2051ac17bdd44d76aa84ea7fcf8419130e55600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610a8c600d556509184e72a000600e55348015620000de57600080fd5b5060405162001fe238038062001fe2833981810160405281019062000104919062000247565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015457737a250d5630b4cf539739df2c5dacb4c659f2488d62000156565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000279565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200020f82620001e2565b9050919050565b620002218162000202565b81146200022d57600080fd5b50565b600081519050620002418162000216565b92915050565b60006020828403121562000260576200025f620001dd565b5b6000620002708482850162000230565b91505092915050565b611d5980620002896000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611561565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f919061160b565b61032d565b005b34801561014257600080fd5b5061015d6004803603810190610158919061164b565b6105ec565b60405161016a9190611561565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611678565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be9190611561565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e99190611561565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b6040516102149190611561565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f919061164b565b610781565b604051610253939291906116b8565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610b7d565b6040516102889190611561565b60405180910390f35b34801561029d57600080fd5b506102a6610b83565b6040516102b39190611561565b60405180910390f35b3480156102c857600080fd5b506102d1610b89565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906116ef565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611561565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610860919061172b565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a1919061175b565b90506000600267ffffffffffffffff8111156108c0576108bf611788565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610928576109276117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610999576109986117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a3694939291906118e9565b6000604051808303818588803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050506000610b1883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac9919061172b565b602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061175b565b61127690919063ffffffff16565b9050610b2f816009546112c090919063ffffffff16565b600981905550610b72610b61600854610b5384600c5461135090919063ffffffff16565b6113ca90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9233610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611414565b15610cca57610cc96004600f5481548110610c9957610c986117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d0790611964565b91905055508080610d1790611964565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906119ac565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611a0d565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110839190611a3a565b81548110611094576110936117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116117b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b29190611a3a565b815481106111c3576111c26117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611a6e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60006112b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611481565b905092915050565b60008082846112cf9190611a9d565b905083811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611b2e565b60405180910390fd5b8091505092915050565b6000611349600c5461133b600b548561135090919063ffffffff16565b6113ca90919063ffffffff16565b9050919050565b600080830361136257600090506113c4565b600082846113709190611b4e565b905082848261137f9190611bbf565b146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690611c62565b60405180910390fd5b809150505b92915050565b600061140c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114e5565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190611a9d565b10801561147a5750600e54611478836105ec565b115b9050919050565b60008383111582906114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c09190611d01565b60405180910390fd5b50600083856114d89190611a3a565b9050809150509392505050565b6000808311829061152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239190611d01565b60405180910390fd5b506000838561153b9190611bbf565b9050809150509392505050565b6000819050919050565b61155b81611548565b82525050565b60006020820190506115766000830184611552565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6115e881611548565b81146115f357600080fd5b50565b600081359050611605816115df565b92915050565b600080604083850312156116225761162161157c565b5b6000611630858286016115ca565b9250506020611641858286016115f6565b9150509250929050565b6000602082840312156116615761166061157c565b5b600061166f848285016115ca565b91505092915050565b6000806040838503121561168f5761168e61157c565b5b600061169d858286016115f6565b92505060206116ae858286016115f6565b9150509250929050565b60006060820190506116cd6000830186611552565b6116da6020830185611552565b6116e76040830184611552565b949350505050565b6000602082840312156117055761170461157c565b5b6000611713848285016115f6565b91505092915050565b611725816115a1565b82525050565b6000602082019050611740600083018461171c565b92915050565b600081519050611755816115df565b92915050565b6000602082840312156117715761177061157c565b5b600061177f84828501611746565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061181561181061180b846117e6565b6117f0565b611548565b9050919050565b611825816117fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611860816115a1565b82525050565b60006118728383611857565b60208301905092915050565b6000602082019050919050565b60006118968261182b565b6118a08185611836565b93506118ab83611847565b8060005b838110156118dc5781516118c38882611866565b97506118ce8361187e565b9250506001810190506118af565b5085935050505092915050565b60006080820190506118fe600083018761181c565b8181036020830152611910818661188b565b905061191f604083018561171c565b61192c6060830184611552565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061196f82611548565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119a1576119a0611935565b5b600182019050919050565b60006040820190506119c1600083018561171c565b6119ce6020830184611552565b9392505050565b60008115159050919050565b6119ea816119d5565b81146119f557600080fd5b50565b600081519050611a07816119e1565b92915050565b600060208284031215611a2357611a2261157c565b5b6000611a31848285016119f8565b91505092915050565b6000611a4582611548565b9150611a5083611548565b9250828203905081811115611a6857611a67611935565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611aa882611548565b9150611ab383611548565b9250828201905080821115611acb57611aca611935565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611b18601b83611ad1565b9150611b2382611ae2565b602082019050919050565b60006020820190508181036000830152611b4781611b0b565b9050919050565b6000611b5982611548565b9150611b6483611548565b9250828202611b7281611548565b91508282048414831517611b8957611b88611935565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bca82611548565b9150611bd583611548565b925082611be557611be4611b90565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4c602183611ad1565b9150611c5782611bf0565b604082019050919050565b60006020820190508181036000830152611c7b81611c3f565b9050919050565b600081519050919050565b60005b83811015611cab578082015181840152602081019050611c90565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd382611c82565b611cdd8185611ad1565b9350611ced818560208601611c8d565b611cf681611cb7565b840191505092915050565b60006020820190508181036000830152611d1b8184611cc8565b90509291505056fea2646970667358221220a9fa393b2d1e38cf53b4ed1f96131eff8b9e062c21bd2b6ec939a80b6b55b8bc64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806378109e54116101e7578063ca33e64c1161010d578063f2fde38b116100a0578063fe575a871161006f578063fe575a8714610db9578063fe9fbb8014610df6578063fed0d2a114610e33578063ffb54a9914610e5e576103ad565b8063f2fde38b14610d13578063f708a64f14610d3c578063f84ba65d14610d65578063f887ea4014610d8e576103ad565b8063df20fd49116100dc578063df20fd4914610c6d578063e96fada214610c96578063ec72d65f14610cc1578063f0b37c0414610cea576103ad565b8063ca33e64c14610b9d578063d51ed1c814610bc8578063dab84ee714610c05578063dd62ed3e14610c30576103ad565b806398118cb411610185578063a9059cbb11610154578063a9059cbb14610ae3578063b6a5d7de14610b20578063bd9ab53714610b49578063bfe1092814610b72576103ad565b806398118cb414610a3b5780639d1944f514610a66578063a4b45c0014610a8f578063a8aa1b3114610ab8576103ad565b8063893d20e8116101c1578063893d20e814610991578063896648c1146109bc5780638e2eee84146109e757806395d89b4114610a10576103ad565b806378109e54146109105780637d1db4a51461093b57806383ad799414610966576103ad565b80632d594567116102cc5780635e562f3b1161026a5780636b67c4df116102395780636b67c4df146108525780636ddd17131461087d57806370a08231146108a8578063722b62ad146108e5576103ad565b80635e562f3b146107aa578063617fe0ed146107d3578063658d4b7f146107fe5780636827e76414610827576103ad565b806344a33fd2116102a657806344a33fd2146106f257806350db71fb1461071b578063571ac8b0146107445780635c85974f14610781576103ad565b80632d594567146106615780632f54bf6e1461068a578063313ce567146106c7576103ad565b8063180b0d7e11610344578063201e799111610313578063201e7991146105a757806323b872dd146105d05780632b112e491461060d5780632d48e89614610638576103ad565b8063180b0d7e146104fd57806318160ddd146105285780631da1db5e146105535780631df4ccfc1461057c576103ad565b806309302dc61161038057806309302dc614610431578063095ea7b31461045a5780630d295980146104975780631161ae39146104c0576103ad565b80630445b667146103b257806304a66b48146103dd57806306fdde0314610406576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e89565b6040516103d49190614003565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614054565b610e8f565b005b34801561041257600080fd5b5061041b610f92565b604051610428919061415f565b60405180910390f35b34801561043d57600080fd5b5061045860048036038101906104539190614181565b610fcf565b005b34801561046657600080fd5b50610481600480360381019061047c919061420c565b61103b565b60405161048e9190614267565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906142ae565b61112d565b005b3480156104cc57600080fd5b506104e760048036038101906104e291906142db565b611192565b6040516104f49190614267565b60405180910390f35b34801561050957600080fd5b506105126111a7565b60405161051f9190614003565b60405180910390f35b34801561053457600080fd5b5061053d6111ad565b60405161054a9190614003565b60405180910390f35b34801561055f57600080fd5b5061057a60048036038101906105759190614181565b6111b7565b005b34801561058857600080fd5b50610591611288565b60405161059e9190614003565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c991906142db565b61128e565b005b3480156105dc57600080fd5b506105f760048036038101906105f2919061431b565b6112e8565b6040516106049190614267565b60405180910390f35b34801561061957600080fd5b506106226114e8565b60405161062f9190614003565b60405180910390f35b34801561064457600080fd5b5061065f600480360381019061065a91906142db565b61156a565b005b34801561066d57600080fd5b50610688600480360381019061068391906143a7565b611645565b005b34801561069657600080fd5b506106b160048036038101906106ac91906143e7565b6116c6565b6040516106be9190614267565b60405180910390f35b3480156106d357600080fd5b506106dc61171f565b6040516106e99190614423565b60405180910390f35b3480156106fe57600080fd5b5061071960048036038101906107149190614181565b611728565b005b34801561072757600080fd5b50610742600480360381019061073d919061443e565b6117d7565b005b34801561075057600080fd5b5061076b600480360381019061076691906143e7565b61187a565b6040516107789190614267565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190614181565b6118ad565b005b3480156107b657600080fd5b506107d160048036038101906107cc91906142ae565b6118ff565b005b3480156107df57600080fd5b506107e8611964565b6040516107f59190614267565b60405180910390f35b34801561080a57600080fd5b506108256004803603810190610820919061443e565b611977565b005b34801561083357600080fd5b5061083c611a1a565b6040516108499190614003565b60405180910390f35b34801561085e57600080fd5b50610867611a20565b6040516108749190614003565b60405180910390f35b34801561088957600080fd5b50610892611a26565b60405161089f9190614267565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906143e7565b611a39565b6040516108dc9190614003565b60405180910390f35b3480156108f157600080fd5b506108fa611a82565b6040516109079190614423565b60405180910390f35b34801561091c57600080fd5b50610925611a95565b6040516109329190614003565b60405180910390f35b34801561094757600080fd5b50610950611a9b565b60405161095d9190614003565b60405180910390f35b34801561097257600080fd5b5061097b611aa1565b6040516109889190614003565b60405180910390f35b34801561099d57600080fd5b506109a6611aa7565b6040516109b3919061448d565b60405180910390f35b3480156109c857600080fd5b506109d1611ad0565b6040516109de9190614267565b60405180910390f35b3480156109f357600080fd5b50610a0e6004803603810190610a09919061450d565b611ae3565b005b348015610a1c57600080fd5b50610a25611bce565b604051610a32919061415f565b60405180910390f35b348015610a4757600080fd5b50610a50611c0b565b604051610a5d9190614003565b60405180910390f35b348015610a7257600080fd5b50610a8d6004803603810190610a889190614181565b611c11565b005b348015610a9b57600080fd5b50610ab66004803603810190610ab1919061456d565b611c72565b005b348015610ac457600080fd5b50610acd611da3565b604051610ada919061448d565b60405180910390f35b348015610aef57600080fd5b50610b0a6004803603810190610b05919061420c565b611dc9565b604051610b179190614267565b60405180910390f35b348015610b2c57600080fd5b50610b476004803603810190610b4291906143e7565b611dde565b005b348015610b5557600080fd5b50610b706004803603810190610b6b9190614181565b611e80565b005b348015610b7e57600080fd5b50610b87611eec565b604051610b94919061460c565b60405180910390f35b348015610ba957600080fd5b50610bb2611f12565b604051610bbf919061448d565b60405180910390f35b348015610bd457600080fd5b50610bef6004803603810190610bea9190614181565b611f38565b604051610bfc9190614003565b60405180910390f35b348015610c1157600080fd5b50610c1a611faa565b604051610c27919061448d565b60405180910390f35b348015610c3c57600080fd5b50610c576004803603810190610c52919061456d565b611fd0565b604051610c649190614003565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f9190614627565b612057565b005b348015610ca257600080fd5b50610cab6120c4565b604051610cb8919061448d565b60405180910390f35b348015610ccd57600080fd5b50610ce86004803603810190610ce39190614181565b6120ea565b005b348015610cf657600080fd5b50610d116004803603810190610d0c91906143e7565b61213c565b005b348015610d1f57600080fd5b50610d3a6004803603810190610d3591906146a5565b6121df565b005b348015610d4857600080fd5b50610d636004803603810190610d5e919061443e565b6122f8565b005b348015610d7157600080fd5b50610d8c6004803603810190610d87919061443e565b612598565b005b348015610d9a57600080fd5b50610da361263b565b604051610db091906146f3565b60405180910390f35b348015610dc557600080fd5b50610de06004803603810190610ddb91906143e7565b612661565b604051610ded9190614267565b60405180910390f35b348015610e0257600080fd5b50610e1d6004803603810190610e1891906143e7565b612681565b604051610e2a9190614267565b60405180910390f35b348015610e3f57600080fd5b50610e486126d7565b604051610e559190614003565b60405180910390f35b348015610e6a57600080fd5b50610e736126dd565b604051610e809190614267565b60405180910390f35b60245481565b610e9833612681565b610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece9061475a565b60405180910390fd5b84601181905550836012819055508260138190555081601481905550610f2c601454610f1e85610f10888a6126f090919063ffffffff16565b6126f090919063ffffffff16565b6126f090919063ffffffff16565b601581905550806016819055506002601654610f4891906147d8565b60155410610f8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8290614855565b60405180910390fd5b5050505050565b60606040518060400160405280600f81526020017f42616279204b61626f737520496e750000000000000000000000000000000000815250905090565b610fd8336116c6565b611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906148c1565b60405180910390fd5b6103e88160065461102891906148e1565b61103291906147d8565b60088190555050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161111b9190614003565b60405180910390a36001905092915050565b611136336116c6565b611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c906148c1565b60405180910390fd5b80601e60146101000a81548160ff02191690831515021790555050565b60008261119e83611f38565b11905092915050565b60165481565b6000600654905090565b6111c033612681565b6111ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f69061475a565b60405180910390fd5b6000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6064848461124e91906148e1565b61125891906147d8565b9081150290604051600060405180830381858888f19350505050158015611283573d6000803e3d6000fd5b505050565b60155481565b61129733612681565b6112d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cd9061475a565b60405180910390fd5b81601b8190555080601c819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114d457611453826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114df8484846127b2565b90509392505050565b6000611565611518600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b611557611546600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b60065461334390919063ffffffff16565b61334390919063ffffffff16565b905090565b61157333612681565b6115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a99061475a565b60405180910390fd5b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b815260040161160f929190614923565b600060405180830381600087803b15801561162957600080fd5b505af115801561163d573d6000803e3d6000fd5b505050505050565b61164e336116c6565b61168d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611684906148c1565b60405180910390fd5b81602160006101000a81548160ff02191690831515021790555080602160016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006012905090565b61173133612681565b611770576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117679061475a565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc6064848461179d91906148e1565b6117a791906147d8565b9081150290604051600060405180830381858888f193505050501580156117d2573d6000803e3d6000fd5b505050565b6117e033612681565b61181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061475a565b60405180910390fd5b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006118a6827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61103b565b9050919050565b6118b633612681565b6118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec9061475a565b60405180910390fd5b8060078190555050565b611908336116c6565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e906148c1565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b602160009054906101000a900460ff1681565b61198033612681565b6119bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b69061475a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b60135481565b602360009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b602160019054906101000a900460ff1681565b60085481565b60075481565b60125481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900460ff1681565b611aec336116c6565b611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b22906148c1565b60405180910390fd5b60005b83839050811015611bc85781600c6000868685818110611b5157611b5061494c565b5b9050602002016020810190611b6691906143e7565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611bc19061497b565b9050611b2e565b50505050565b60606040518060400160405280600f81526020017f42616279204b61626f737520496e750000000000000000000000000000000000815250905090565b60115481565b611c1a33612681565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061475a565b60405180910390fd5b620b71b08110611c6857600080fd5b8060208190555050565b611c7b33612681565b611cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb19061475a565b60405180910390fd5b81601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd63384846127b2565b905092915050565b611de7336116c6565b611e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1d906148c1565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e89336116c6565b611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf906148c1565b60405180910390fd5b6103e881600654611ed991906148e1565b611ee391906147d8565b60078190555050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611fa3611f456114e8565b611f95611f866002611f78601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611a39565b61338d90919063ffffffff16565b8561338d90919063ffffffff16565b61340790919063ffffffff16565b9050919050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61206033612681565b61209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120969061475a565b60405180910390fd5b81602360006101000a81548160ff021916908315150217905550806024819055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6120f3336116c6565b612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906148c1565b60405180910390fd5b8060178190555050565b612145336116c6565b612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906148c1565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6121e8336116c6565b612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e906148c1565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516122ed91906149e4565b60405180910390a150565b61230133612681565b612340576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123379061475a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123ca5750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6123d357600080fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156124c557601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161248e929190614a3a565b600060405180830381600087803b1580156124a857600080fd5b505af11580156124bc573d6000803e3d6000fd5b50505050612594565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612561929190614a63565b600060405180830381600087803b15801561257b57600080fd5b505af115801561258f573d6000803e3d6000fd5b505050505b5050565b6125a133612681565b6125e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d79061475a565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60175481565b601e60149054906101000a900460ff1681565b60008082846126ff9190614a8c565b905083811015612744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273b90614b0c565b60405180910390fd5b8091505092915050565b6000838311158290612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d919061415f565b60405180910390fd5b50600083856127a59190614b2c565b9050809150509392505050565b6000602560009054906101000a900460ff16156127db576127d4848484613451565b905061333c565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561287f5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128d457601e60149054906101000a900460ff166128d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ca90614bac565b60405180910390fd5b5b600b60009054906101000a900460ff16156129cd57600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561298d5750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6129cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c390614c18565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612a5357503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612aad5750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b075750601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b615750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612bbb5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c155750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15612c79576000612c2584611a39565b90506008548382612c369190614a8c565b1115612c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6e90614caa565b60405180910390fd5b505b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612ce25750602160009054906101000a900460ff165b8015612d385750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e205742602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612dbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db590614d3c565b60405180910390fd5b602160019054906101000a900460ff1660ff1642612ddc9190614a8c565b602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612e2a8483613624565b612e326136c1565b15612e4057612e3f613798565b5b612ec9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612f1785613db8565b612f215782612f7d565b612f7c8584601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614613e0f565b5b9050612fd181600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661312e57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401613101929190614a63565b600060405180830381600087803b15801561311b57600080fd5b505af192505050801561312c575060015b505b601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661324857601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161321b929190614a63565b600060405180830381600087803b15801561323557600080fd5b505af1925050508015613246575060015b505b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b81526004016132a59190614003565b600060405180830381600087803b1580156132bf57600080fd5b505af19250505080156132d0575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161332e9190614003565b60405180910390a360019150505b9392505050565b600061338583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061274e565b905092915050565b600080830361339f5760009050613401565b600082846133ad91906148e1565b90508284826133bc91906147d8565b146133fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133f390614dce565b60405180910390fd5b809150505b92915050565b600061344983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613f87565b905092915050565b60006134dc826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461274e9092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357182600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136119190614003565b60405180910390a3600190509392505050565b6007548111158061367e5750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6136bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136b490614e3a565b60405180910390fd5b5050565b6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561372e5750602560009054906101000a900460ff16155b80156137465750602360009054906101000a900460ff165b80156137935750602454600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602560006101000a81548160ff02191690831515021790555060006137c3601b54601c54611192565b6137cf576011546137d2565b60005b9050600061381260026138046015546137f68660245461338d90919063ffffffff16565b61340790919063ffffffff16565b61340790919063ffffffff16565b9050600061382b8260245461334390919063ffffffff16565b90506000600267ffffffffffffffff81111561384a57613849614e5a565b5b6040519080825280602002602001820160405280156138785781602001602082028036833780820191505090505b50905030816000815181106138905761388f61494c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106139015761390061494c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016139a4959493929190614f47565b600060405180830381600087803b1580156139be57600080fd5b505af11580156139d2573d6000803e3d6000fd5b5050505060006139eb824761334390919063ffffffff16565b90506000613a17613a0660028961340790919063ffffffff16565b60155461334390919063ffffffff16565b90506000613a536002613a4584613a378c8861338d90919063ffffffff16565b61340790919063ffffffff16565b61340790919063ffffffff16565b90506000613a7e83613a706012548761338d90919063ffffffff16565b61340790919063ffffffff16565b90506000613aa984613a9b6013548861338d90919063ffffffff16565b61340790919063ffffffff16565b90506000613ad485613ac66014548961338d90919063ffffffff16565b61340790919063ffffffff16565b9050601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b4057600080fd5b505af193505050508015613b52575060015b506000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168361753090604051613b9f90614fd2565b600060405180830381858888f193505050503d8060008114613bdd576040519150601f19603f3d011682016040523d82523d6000602084013e613be2565b606091505b50509050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613c3090614fd2565b600060405180830381858888f193505050503d8060008114613c6e576040519150601f19603f3d011682016040523d82523d6000602084013e613c73565b606091505b5050809150506000905060008b1115613d8f57601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71986308e600080601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613d0f96959493929190614fe7565b60606040518083038185885af1158015613d2d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d52919061505d565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506858c604051613d86929190614923565b60405180910390a15b5050505050505050505050506000602560006101000a81548160ff021916908315150217905550565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b60008082613e1e576064613e22565b6017545b90506000613e6d6064601654613e3891906148e1565b613e5f84613e516015548a61338d90919063ffffffff16565b61338d90919063ffffffff16565b61340790919063ffffffff16565b9050613ec181600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126f090919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f619190614003565b60405180910390a3613f7c818661334390919063ffffffff16565b925050509392505050565b60008083118290613fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fc5919061415f565b60405180910390fd5b5060008385613fdd91906147d8565b9050809150509392505050565b6000819050919050565b613ffd81613fea565b82525050565b60006020820190506140186000830184613ff4565b92915050565b600080fd5b600080fd5b61403181613fea565b811461403c57600080fd5b50565b60008135905061404e81614028565b92915050565b600080600080600060a086880312156140705761406f61401e565b5b600061407e8882890161403f565b955050602061408f8882890161403f565b94505060406140a08882890161403f565b93505060606140b18882890161403f565b92505060806140c28882890161403f565b9150509295509295909350565b600081519050919050565b600082825260208201905092915050565b60005b838110156141095780820151818401526020810190506140ee565b60008484015250505050565b6000601f19601f8301169050919050565b6000614131826140cf565b61413b81856140da565b935061414b8185602086016140eb565b61415481614115565b840191505092915050565b600060208201905081810360008301526141798184614126565b905092915050565b6000602082840312156141975761419661401e565b5b60006141a58482850161403f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141d9826141ae565b9050919050565b6141e9816141ce565b81146141f457600080fd5b50565b600081359050614206816141e0565b92915050565b600080604083850312156142235761422261401e565b5b6000614231858286016141f7565b92505060206142428582860161403f565b9150509250929050565b60008115159050919050565b6142618161424c565b82525050565b600060208201905061427c6000830184614258565b92915050565b61428b8161424c565b811461429657600080fd5b50565b6000813590506142a881614282565b92915050565b6000602082840312156142c4576142c361401e565b5b60006142d284828501614299565b91505092915050565b600080604083850312156142f2576142f161401e565b5b60006143008582860161403f565b92505060206143118582860161403f565b9150509250929050565b6000806000606084860312156143345761433361401e565b5b6000614342868287016141f7565b9350506020614353868287016141f7565b92505060406143648682870161403f565b9150509250925092565b600060ff82169050919050565b6143848161436e565b811461438f57600080fd5b50565b6000813590506143a18161437b565b92915050565b600080604083850312156143be576143bd61401e565b5b60006143cc85828601614299565b92505060206143dd85828601614392565b9150509250929050565b6000602082840312156143fd576143fc61401e565b5b600061440b848285016141f7565b91505092915050565b61441d8161436e565b82525050565b60006020820190506144386000830184614414565b92915050565b600080604083850312156144555761445461401e565b5b6000614463858286016141f7565b925050602061447485828601614299565b9150509250929050565b614487816141ce565b82525050565b60006020820190506144a2600083018461447e565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126144cd576144cc6144a8565b5b8235905067ffffffffffffffff8111156144ea576144e96144ad565b5b602083019150836020820283011115614506576145056144b2565b5b9250929050565b6000806000604084860312156145265761452561401e565b5b600084013567ffffffffffffffff81111561454457614543614023565b5b614550868287016144b7565b9350935050602061456386828701614299565b9150509250925092565b600080604083850312156145845761458361401e565b5b6000614592858286016141f7565b92505060206145a3858286016141f7565b9150509250929050565b6000819050919050565b60006145d26145cd6145c8846141ae565b6145ad565b6141ae565b9050919050565b60006145e4826145b7565b9050919050565b60006145f6826145d9565b9050919050565b614606816145eb565b82525050565b600060208201905061462160008301846145fd565b92915050565b6000806040838503121561463e5761463d61401e565b5b600061464c85828601614299565b925050602061465d8582860161403f565b9150509250929050565b6000614672826141ae565b9050919050565b61468281614667565b811461468d57600080fd5b50565b60008135905061469f81614679565b92915050565b6000602082840312156146bb576146ba61401e565b5b60006146c984828501614690565b91505092915050565b60006146dd826145d9565b9050919050565b6146ed816146d2565b82525050565b600060208201905061470860008301846146e4565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614744600b836140da565b915061474f8261470e565b602082019050919050565b6000602082019050818103600083015261477381614737565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147e382613fea565b91506147ee83613fea565b9250826147fe576147fd61477a565b5b828204905092915050565b7f466565732063616e6e6f74206265206d6f7265207468616e2035302500000000600082015250565b600061483f601c836140da565b915061484a82614809565b602082019050919050565b6000602082019050818103600083015261486e81614832565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b60006148ab6006836140da565b91506148b682614875565b602082019050919050565b600060208201905081810360008301526148da8161489e565b9050919050565b60006148ec82613fea565b91506148f783613fea565b925082820261490581613fea565b9150828204841483151761491c5761491b6147a9565b5b5092915050565b60006040820190506149386000830185613ff4565b6149456020830184613ff4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061498682613fea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149b8576149b76147a9565b5b600182019050919050565b60006149ce826145d9565b9050919050565b6149de816149c3565b82525050565b60006020820190506149f960008301846149d5565b92915050565b6000819050919050565b6000614a24614a1f614a1a846149ff565b6145ad565b613fea565b9050919050565b614a3481614a09565b82525050565b6000604082019050614a4f600083018561447e565b614a5c6020830184614a2b565b9392505050565b6000604082019050614a78600083018561447e565b614a856020830184613ff4565b9392505050565b6000614a9782613fea565b9150614aa283613fea565b9250828201905080821115614aba57614ab96147a9565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614af6601b836140da565b9150614b0182614ac0565b602082019050919050565b60006020820190508181036000830152614b2581614ae9565b9050919050565b6000614b3782613fea565b9150614b4283613fea565b9250828203905081811115614b5a57614b596147a9565b5b92915050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614b966014836140da565b9150614ba182614b60565b602082019050919050565b60006020820190508181036000830152614bc581614b89565b9050919050565b7f426c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614c02600b836140da565b9150614c0d82614bcc565b602082019050919050565b60006020820190508181036000830152614c3181614bf5565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b6000614c94603e836140da565b9150614c9f82614c38565b604082019050919050565b60006020820190508181036000830152614cc381614c87565b9050919050565b7f506c65617365207761697420666f7220316d696e206265747765656e2074776f60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000614d266025836140da565b9150614d3182614cca565b604082019050919050565b60006020820190508181036000830152614d5581614d19565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614db86021836140da565b9150614dc382614d5c565b604082019050919050565b60006020820190508181036000830152614de781614dab565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614e246011836140da565b9150614e2f82614dee565b602082019050919050565b60006020820190508181036000830152614e5381614e17565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ebe816141ce565b82525050565b6000614ed08383614eb5565b60208301905092915050565b6000602082019050919050565b6000614ef482614e89565b614efe8185614e94565b9350614f0983614ea5565b8060005b83811015614f3a578151614f218882614ec4565b9750614f2c83614edc565b925050600181019050614f0d565b5085935050505092915050565b600060a082019050614f5c6000830188613ff4565b614f696020830187614a2b565b8181036040830152614f7b8186614ee9565b9050614f8a606083018561447e565b614f976080830184613ff4565b9695505050505050565b600081905092915050565b50565b6000614fbc600083614fa1565b9150614fc782614fac565b600082019050919050565b6000614fdd82614faf565b9150819050919050565b600060c082019050614ffc600083018961447e565b6150096020830188613ff4565b6150166040830187614a2b565b6150236060830186614a2b565b615030608083018561447e565b61503d60a0830184613ff4565b979650505050505050565b60008151905061505781614028565b92915050565b6000806000606084860312156150765761507561401e565b5b600061508486828701615048565b935050602061509586828701615048565b92505060406150a686828701615048565b915050925092509256fea2646970667358221220d8ec899d3c61194be2bb0f7fe78f9d0c6c8f4bb2f7806fe738ce7b0328bea70764736f6c63430008110033

Deployed Bytecode Sourcemap

10880:16522:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12919:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23746:511;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14639:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15951:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15061:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20417:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25561:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12255:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14369:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19816:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12163:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24706:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15576:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25236:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24897:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20558:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2812:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14463:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20042:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23608:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15285:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16314:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23017:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12736:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23344:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12122:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12081;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12882:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14809:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12780:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11523:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11459:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12040:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14725:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11710:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23124:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14549:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11998:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25088:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24265:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12583:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15412:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2605:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16134:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12651:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12345:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25386:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12430:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14920:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24542:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12388:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20265:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2707:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3038:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22662:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23472:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12552:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11749:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2923:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12300:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12611:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12919:56;;;;:::o;23746:511::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23921:13:::1;23906:12;:28;;;;23961:14;23945:13;:30;;;;24001:13;23986:12;:28;;;;24034:7;24025:6;:16;;;;24063:64;24120:6;;24063:52;24101:13;24063:33;24081:14;24063:13;:17;;:33;;;;:::i;:::-;:37;;:52;;;;:::i;:::-;:56;;:64;;;;:::i;:::-;24052:8;:75;;;;24155:15;24138:14;:32;;;;24215:1;24200:14;;:16;;;;:::i;:::-;24189:8;;:27;24181:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23746:511:::0;;;;;:::o;14639:80::-;14687:13;14711:5;;;;;;;;;;;;;;;;;14704:12;;14639:80;:::o;15951:177::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16116:4:::1;16088:23;16073:12;;:38;;;;:::i;:::-;16072:48;;;;:::i;:::-;16054:15;:66;;;;15951:177:::0;:::o;15061:216::-;15136:4;15188:6;15153:11;:23;15165:10;15153:23;;;;;;;;;;;;;;;:32;15177:7;15153:32;;;;;;;;;;;;;;;:41;;;;15231:7;15210:37;;15219:10;15210:37;;;15240:6;15210:37;;;;;;:::i;:::-;;;;;;;;15265:4;15258:11;;15061:216;;;;:::o;20417:94::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20496:7:::1;20482:11;;:21;;;;;;;;;;;;;;;;;;20417:94:::0;:::o;25561:150::-;25641:4;25697:6;25665:29;25685:8;25665:19;:29::i;:::-;:38;25658:45;;25561:150;;;;:::o;12255:36::-;;;;:::o;14369:88::-;14424:7;14442:12;;14435:19;;14369:88;:::o;19816:218::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;19900:17:::1;19920:21;19900:41;;19960:20;;;;;;;;;;;19952:38;;:74;20022:3;20003:16;19991:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;19952:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;19889:145;19816:218:::0;:::o;12163:85::-;;;;:::o;24706:183::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24822:7:::1;24804:15;:25;;;;24869:12;24840:26;:41;;;;24706:183:::0;;:::o;15576:367::-;15676:4;15731:14;15696:11;:19;15708:6;15696:19;;;;;;;;;;;;;;;:31;15716:10;15696:31;;;;;;;;;;;;;;;;:49;15693:183;;15795:69;15831:6;15795:69;;;;;;;;;;;;;;;;;:11;:19;15807:6;15795:19;;;;;;;;;;;;;;;:31;15815:10;15795:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;15761:11;:19;15773:6;15761:19;;;;;;;;;;;;;;;:31;15781:10;15761:31;;;;;;;;;;;;;;;:103;;;;15693:183;15895:40;15909:6;15917:9;15928:6;15895:13;:40::i;:::-;15888:47;;15576:367;;;;;:::o;25236:142::-;25289:7;25316:54;25354:15;25364:4;;;;;;;;;;;25354:9;:15::i;:::-;25316:33;25333:15;25343:4;;;;;;;;;;;25333:9;:15::i;:::-;25316:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;25309:61;;25236:142;:::o;24897:183::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25007:11:::1;;;;;;;;;;;:35;;;25043:10;25055:16;25007:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24897:183:::0;;:::o;20558:164::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20663:7:::1;20642:18;;:28;;;;;;;;;;;;;;;;;;20705:9;20681:21;;:33;;;;;;;;;;;;;;;;;;20558:164:::0;;:::o;2812:103::-;2867:4;2902:5;;;;;;;;;;;2891:16;;:7;:16;;;2884:23;;2812:103;;;:::o;14463:80::-;14515:5;11400:2;14524:16;;14463:80;:::o;20042:215::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20133:17:::1;20153:21;20133:41;;20193:10;20185:28;;:64;20245:3;20226:16;20214:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;20185:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;20122:135;20042:215:::0;:::o;23608:130::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23724:6:::1;23697:16;:24;23714:6;23697:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;23608:130:::0;;:::o;15285:119::-;15340:4;15364:32;15372:7;15381:14;15364:7;:32::i;:::-;15357:39;;15285:119;;;:::o;16314:96::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;16396:6:::1;16381:12;:21;;;;16314:96:::0;:::o;23017:99::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23101:7:::1;23085:13;;:23;;;;;;;;;;;;;;;;;;23017:99:::0;:::o;12736:37::-;;;;;;;;;;;;;:::o;23344:120::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23450:6:::1;23428:11;:19;23440:6;23428:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23344:120:::0;;:::o;12122:34::-;;;;:::o;12081:::-;;;;:::o;12882:30::-;;;;;;;;;;;;;:::o;14809:105::-;14875:7;14893:9;:18;14903:7;14893:18;;;;;;;;;;;;;;;;14886:25;;14809:105;;;:::o;12780:39::-;;;;;;;;;;;;;:::o;11523:46::-;;;;:::o;11459:43::-;;;;:::o;12040:34::-;;;;:::o;14725:78::-;14777:7;14795:5;;;;;;;;;;;14788:12;;14725:78;:::o;11710:32::-;;;;;;;;;;;;;:::o;23124:210::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23226:9:::1;23221:106;23241:9;;:16;;23237:1;:20;23221:106;;;23309:6;23279:13;:27;23293:9;;23303:1;23293:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23279:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;23259:3;;;;:::i;:::-;;;23221:106;;;;23124:210:::0;;;:::o;14549:84::-;14599:13;14623:7;;;;;;;;;;;;;;;;;14616:14;;14549:84;:::o;11998:35::-;;;;:::o;25088:136::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25178:6:::1;25172:3;:12;25164:21;;;::::0;::::1;;25213:3;25196:14;:20;;;;25088:136:::0;:::o;24265:269::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24409:22:::1;24385:21;;:46;;;;;;;;;;;;;;;;;;24465:21;24442:20;;:44;;;;;;;;;;;;;;;;;;24522:3;;;;;;;;;;;24497:14;;:29;;;;;;;;;;;;;;;;;;24265:269:::0;;:::o;12583:19::-;;;;;;;;;;;;;:::o;15412:156::-;15492:4;15516:44;15530:10;15542:9;15553:6;15516:13;:44::i;:::-;15509:51;;15412:156;;;;:::o;2605:94::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2687:4:::1;2665:14:::0;:19:::1;2680:3;2665:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;2605:94:::0;:::o;16134:172::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;16294:4:::1;16265:24;16250:12;;:39;;;;:::i;:::-;16249:49;;;;:::i;:::-;16234:12;:64;;;;16134:172:::0;:::o;12651:38::-;;;;;;;;;;;;;:::o;12345:36::-;;;;;;;;;;;;;:::o;25386:167::-;25454:7;25481:64;25522:22;:20;:22::i;:::-;25481:36;25494:22;25514:1;25494:15;25504:4;;;;;;;;;;;25494:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;25481:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;25474:71;;25386:167;;;:::o;12430:29::-;;;;;;;;;;;;;:::o;14920:133::-;15004:7;15022:11;:19;15034:6;15022:19;;;;;;;;;;;;;;;:28;15042:7;15022:28;;;;;;;;;;;;;;;;15015:35;;14920:133;;;;:::o;24542:156::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24648:8:::1;24634:11;;:22;;;;;;;;;;;;;;;;;;24683:7;24667:13;:23;;;;24542:156:::0;;:::o;12388:35::-;;;;;;;;;;;;;:::o;20265:121::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20360:10:::1;20343:14;:27;;;;20265:121:::0;:::o;2707:97::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2791:5:::1;2769:14;:19;2784:3;2769:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;2707:97:::0;:::o;3038:173::-;2456:19;2464:10;2456:7;:19::i;:::-;2448:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3122:3:::1;3114:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3158:4;3136:14:::0;:19:::1;3151:3;3136:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3178:25;3199:3;3178:25;;;;;;:::i;:::-;;;;;;;;3038:173:::0;:::o;22662:347::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22777:4:::1;22759:23;;:6;:23;;;;:41;;;;;22796:4;;;;;;;;;;;22786:14;;:6;:14;;;;22759:41;22751:50;;;::::0;::::1;;22839:6;22812:16;:24;22829:6;22812:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;22859:6;22856:146;;;22881:11;;;;;;;;;;;:20;;;22902:6;22910:1;22881:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22856:146;;;22943:11;;;;;;;;;;;:20;;;22964:6;22972:9;:17;22982:6;22972:17;;;;;;;;;;;;;;;;22943:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22856:146;22662:347:::0;;:::o;23472:128::-;2546:24;2559:10;2546:12;:24::i;:::-;2538:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23586:6:::1;23560:15;:23;23576:6;23560:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;23472:128:::0;;:::o;12552:24::-;;;;;;;;;;;;;:::o;11749:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;2923:107::-;2979:4;3003:14;:19;3018:3;3003:19;;;;;;;;;;;;;;;;;;;;;;;;;2996:26;;2923:107;;;:::o;12300:36::-;;;;:::o;12611:31::-;;;;;;;;;;;;;:::o;159:181::-;217:7;237:9;253:1;249;:5;;;;:::i;:::-;237:17;;278:1;273;:6;;265:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;331:1;324:8;;;159:181;;;;:::o;488:192::-;574:7;607:1;602;:6;;610:12;594:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;634:9;650:1;646;:5;;;;:::i;:::-;634:17;;671:1;664:8;;;488:192;;;;;:::o;16420:2088::-;16512:4;16532:6;;;;;;;;;;;16529:63;;;16548:41;16563:6;16571:9;16582:6;16548:14;:41::i;:::-;16541:48;;;;16529:63;16608:14;:22;16623:6;16608:22;;;;;;;;;;;;;;;;;;;;;;;;;16607:23;:53;;;;;16635:14;:25;16650:9;16635:25;;;;;;;;;;;;;;;;;;;;;;;;;16634:26;16607:53;16604:127;;;16684:11;;;;;;;;;;;16676:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;16604:127;16768:13;;;;;;;;;;;16765:122;;;16806:13;:21;16820:6;16806:21;;;;;;;;;;;;;;;;;;;;;;;;;16805:22;:51;;;;;16832:13;:24;16846:9;16832:24;;;;;;;;;;;;;;;;;;;;;;;;;16831:25;16805:51;16797:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;16765:122;16906:14;:22;16921:6;16906:22;;;;;;;;;;;;;;;;;;;;;;;;;16905:23;:53;;;;;16953:4;16932:26;;:9;:26;;;;16905:53;:84;;;;;16984:4;;;;;;;;;;;16963:26;;:9;:26;;;;16905:84;:105;;;;;17006:4;;;;;;;;;;;16993:17;;:9;:17;;;;16905:105;:142;;;;;17027:20;;;;;;;;;;;17014:33;;:9;:33;;;;16905:142;:173;;;;;17064:14;;;;;;;;;;;17051:27;;:9;:27;;;;16905:173;:212;;;;;17096:21;;;;;;;;;;;17083:34;;:9;:34;;;;16905:212;16901:404;;;17133:18;17154:20;17164:9;17154;:20::i;:::-;17133:41;;17222:15;;17211:6;17198:10;:19;;;;:::i;:::-;17197:40;;17189:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;17118:187;16901:404;17339:4;;;;;;;;;;;17329:14;;:6;:14;;;:49;;;;;17360:18;;;;;;;;;;;17329:49;:94;;;;;17396:16;:27;17413:9;17396:27;;;;;;;;;;;;;;;;;;;;;;;;;17395:28;17329:94;17325:299;;;17475:15;17448:13;:24;17462:9;17448:24;;;;;;;;;;;;;;;;:42;17440:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;17591:21;;;;;;;;;;;17573:39;;:15;:39;;;;:::i;:::-;17546:13;:24;17560:9;17546:24;;;;;;;;;;;;;;;:66;;;;17325:299;17677:28;17690:6;17698;17677:12;:28::i;:::-;17721:16;:14;:16::i;:::-;17718:35;;;17740:10;:8;:10::i;:::-;17718:35;17812:53;17834:6;17812:53;;;;;;;;;;;;;;;;;:9;:17;17822:6;17812:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;17792:9;:17;17802:6;17792:17;;;;;;;;;;;;;;;:73;;;;17878:22;17903:21;17917:6;17903:13;:21::i;:::-;:76;;17973:6;17903:76;;;17927:43;17935:6;17943;17964:4;;;;;;;;;;;17951:17;;:9;:17;;;17927:7;:43::i;:::-;17903:76;17878:101;;18013:40;18038:14;18013:9;:20;18023:9;18013:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;17990:9;:20;18000:9;17990:20;;;;;;;;;;;;;;;:63;;;;18099:16;:24;18116:6;18099:24;;;;;;;;;;;;;;;;;;;;;;;;;18095:119;;18144:11;;;;;;;;;;;:20;;;18165:6;18173:9;:17;18183:6;18173:17;;;;;;;;;;;;;;;;18144:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18140:63;18095:119;18230:16;:27;18247:9;18230:27;;;;;;;;;;;;;;;;;;;;;;;;;18226:129;;18278:11;;;;;;;;;;;:20;;;18299:9;18310;:20;18320:9;18310:20;;;;;;;;;;;;;;;;18278:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18274:69;18226:129;18371:11;;;;;;;;;;;:19;;;18391:14;;18371:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18367:51;18452:9;18435:43;;18444:6;18435:43;;;18463:14;18435:43;;;;;;:::i;:::-;;;;;;;;18496:4;18489:11;;;16420:2088;;;;;;:::o;346:136::-;404:7;431:43;435:1;438;431:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;424:50;;346:136;;;;:::o;686:250::-;744:7;773:1;768;:6;764:47;;798:1;791:8;;;;764:47;823:9;839:1;835;:5;;;;:::i;:::-;823:17;;868:1;863;859;:5;;;;:::i;:::-;:10;851:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;927:1;920:8;;;686:250;;;;;:::o;942:132::-;1000:7;1027:39;1031:1;1034;1027:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1020:46;;942:132;;;;:::o;18520:330::-;18613:4;18650:53;18672:6;18650:53;;;;;;;;;;;;;;;;;:9;:17;18660:6;18650:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;18630:9;:17;18640:6;18630:17;;;;;;;;;;;;;;;:73;;;;18737:32;18762:6;18737:9;:20;18747:9;18737:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;18714:9;:20;18724:9;18714:20;;;;;;;;;;;;;;;:55;;;;18802:9;18785:35;;18794:6;18785:35;;;18813:6;18785:35;;;;;;:::i;:::-;;;;;;;;18838:4;18831:11;;18520:330;;;;;:::o;18858:166::-;18955:12;;18945:6;:22;;:49;;;;18971:15;:23;18987:6;18971:23;;;;;;;;;;;;;;;;;;;;;;;;;18945:49;18937:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18858:166;;:::o;19611:197::-;19660:4;19698;;;;;;;;;;;19684:18;;:10;:18;;;;:38;;;;;19716:6;;;;;;;;;;;19715:7;19684:38;:62;;;;;19735:11;;;;;;;;;;;19684:62;:116;;;;;19787:13;;19759:9;:24;19777:4;19759:24;;;;;;;;;;;;;;;;:41;;19684:116;19677:123;;19611:197;:::o;20730:1922::-;13031:4;13022:6;;:13;;;;;;;;;;;;;;;;;;20779:27:::1;20809:60;20825:15;;20842:26;;20809:15;:60::i;:::-;:79;;20876:12;;20809:79;;;20872:1;20809:79;20779:109;;20899:23;20925:59;20982:1;20925:52;20968:8;;20925:38;20943:19;20925:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;20899:85;;20995:20;21018:34;21036:15;21018:13;;:17;;:34;;;;:::i;:::-;20995:57;;21065:21;21103:1;21089:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21065:40;;21134:4;21116;21121:1;21116:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;21160:4;;;;;;;;;;;21150;21155:1;21150:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;21177:21;21201;21177:45;;21235:6;;;;;;;;;;;:57;;;21307:12;21334:1;21350:4;21377;21397:15;21235:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21436:17;21456:40;21482:13;21456:21;:25;;:40;;;;:::i;:::-;21436:60;;21509:19;21531:40;21544:26;21568:1;21544:19;:23;;:26;;;;:::i;:::-;21531:8;;:12;;:40;;;;:::i;:::-;21509:62;;21592:26;21621:58;21677:1;21621:51;21660:11;21621:34;21635:19;21621:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;21592:87;;21690:27;21720:45;21753:11;21720:28;21734:13;;21720:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;21690:75;;21776:26;21805:44;21837:11;21805:27;21819:12;;21805:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;21776:73;;21860:20;21883:38;21909:11;21883:21;21897:6;;21883:9;:13;;:21;;;;:::i;:::-;:25;;:38;;;;:::i;:::-;21860:61;;21938:11;;;;;;;;;;;:19;;;21965;21938:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;21934:65:::0;22010:15:::1;22038:20;;;;;;;;;;;22030:34;;22072:18;22097:5;22030:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22009:98;;;22142:14;;;;;;;;;;;22134:28;;22170:12;22189:5;22134:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22118:81;;;;;22265:5;22252:18;;22304:1;22286:15;:19;22283:362;;;22321:6;;;;;;;;;;;:22;;;22351:18;22397:4;22421:15;22455:1;22475::::0;22495:21:::1;;;;;;;;;;;22535:15;22321:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22585:48;22597:18;22617:15;22585:48;;;;;;;:::i;:::-;;;;;;;;22283:362;20768:1884;;;;;;;;;;;;13049:5:::0;13040:6;;:14;;;;;;;;;;;;;;;;;;20730:1922::o;19032:114::-;19094:4;19119:11;:19;19131:6;19119:19;;;;;;;;;;;;;;;;;;;;;;;;;19118:20;19111:27;;19032:114;;;:::o;19154:449::-;19234:7;19264:18;19285:6;:29;;19311:3;19285:29;;;19294:14;;19285:29;19264:50;;19325:17;19345:62;19403:3;19386:14;;:20;;;;:::i;:::-;19345:36;19370:10;19345:20;19356:8;;19345:6;:10;;:20;;;;:::i;:::-;:24;;:36;;;;:::i;:::-;:40;;:62;;;;:::i;:::-;19325:82;;19457:39;19486:9;19457;:24;19475:4;19457:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;19430:9;:24;19448:4;19430:24;;;;;;;;;;;;;;;:66;;;;19537:4;19512:42;;19521:6;19512:42;;;19544:9;19512:42;;;;;;:::i;:::-;;;;;;;;19574:21;19585:9;19574:6;:10;;:21;;;;:::i;:::-;19567:28;;;;19154:449;;;;;:::o;1080:189::-;1166:7;1198:1;1194;:5;1201:12;1186:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1225:9;1241:1;1237;:5;;;;:::i;:::-;1225:17;;1260:1;1253:8;;;1080: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;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:122;842:24;860:5;842:24;:::i;:::-;835:5;832:35;822:63;;881:1;878;871:12;822:63;769:122;:::o;897:139::-;943:5;981:6;968:20;959:29;;997:33;1024:5;997:33;:::i;:::-;897:139;;;;:::o;1042:911::-;1137:6;1145;1153;1161;1169;1218:3;1206:9;1197:7;1193:23;1189:33;1186:120;;;1225:79;;:::i;:::-;1186:120;1345:1;1370:53;1415:7;1406:6;1395:9;1391:22;1370:53;:::i;:::-;1360:63;;1316:117;1472:2;1498:53;1543:7;1534:6;1523:9;1519:22;1498:53;:::i;:::-;1488:63;;1443:118;1600:2;1626:53;1671:7;1662:6;1651:9;1647:22;1626:53;:::i;:::-;1616:63;;1571:118;1728:2;1754:53;1799:7;1790:6;1779:9;1775:22;1754:53;:::i;:::-;1744:63;;1699:118;1856:3;1883:53;1928:7;1919:6;1908:9;1904:22;1883:53;:::i;:::-;1873:63;;1827:119;1042:911;;;;;;;;:::o;1959:99::-;2011:6;2045:5;2039:12;2029:22;;1959:99;;;:::o;2064:169::-;2148:11;2182:6;2177:3;2170:19;2222:4;2217:3;2213:14;2198:29;;2064:169;;;;:::o;2239:246::-;2320:1;2330:113;2344:6;2341:1;2338:13;2330:113;;;2429:1;2424:3;2420:11;2414:18;2410:1;2405:3;2401:11;2394:39;2366:2;2363:1;2359:10;2354:15;;2330:113;;;2477:1;2468:6;2463:3;2459:16;2452:27;2301:184;2239:246;;;:::o;2491:102::-;2532:6;2583:2;2579:7;2574:2;2567:5;2563:14;2559:28;2549:38;;2491:102;;;:::o;2599:377::-;2687:3;2715:39;2748:5;2715:39;:::i;:::-;2770:71;2834:6;2829:3;2770:71;:::i;:::-;2763:78;;2850:65;2908:6;2903:3;2896:4;2889:5;2885:16;2850:65;:::i;:::-;2940:29;2962:6;2940:29;:::i;:::-;2935:3;2931:39;2924:46;;2691:285;2599:377;;;;:::o;2982:313::-;3095:4;3133:2;3122:9;3118:18;3110:26;;3182:9;3176:4;3172:20;3168:1;3157:9;3153:17;3146:47;3210:78;3283:4;3274:6;3210:78;:::i;:::-;3202:86;;2982:313;;;;:::o;3301:329::-;3360:6;3409:2;3397:9;3388:7;3384:23;3380:32;3377:119;;;3415:79;;:::i;:::-;3377:119;3535:1;3560:53;3605:7;3596:6;3585:9;3581:22;3560:53;:::i;:::-;3550:63;;3506:117;3301:329;;;;:::o;3636:126::-;3673:7;3713:42;3706:5;3702:54;3691:65;;3636:126;;;:::o;3768:96::-;3805:7;3834:24;3852:5;3834:24;:::i;:::-;3823:35;;3768:96;;;:::o;3870:122::-;3943:24;3961:5;3943:24;:::i;:::-;3936:5;3933:35;3923:63;;3982:1;3979;3972:12;3923:63;3870:122;:::o;3998:139::-;4044:5;4082:6;4069:20;4060:29;;4098:33;4125:5;4098:33;:::i;:::-;3998:139;;;;:::o;4143:474::-;4211:6;4219;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:53;4464:7;4455:6;4444:9;4440:22;4419:53;:::i;:::-;4409:63;;4365:117;4521:2;4547:53;4592:7;4583:6;4572:9;4568:22;4547:53;:::i;:::-;4537:63;;4492:118;4143:474;;;;;:::o;4623:90::-;4657:7;4700:5;4693:13;4686:21;4675:32;;4623:90;;;:::o;4719:109::-;4800:21;4815:5;4800:21;:::i;:::-;4795:3;4788:34;4719:109;;:::o;4834:210::-;4921:4;4959:2;4948:9;4944:18;4936:26;;4972:65;5034:1;5023:9;5019:17;5010:6;4972:65;:::i;:::-;4834:210;;;;:::o;5050:116::-;5120:21;5135:5;5120:21;:::i;:::-;5113:5;5110:32;5100:60;;5156:1;5153;5146:12;5100:60;5050:116;:::o;5172:133::-;5215:5;5253:6;5240:20;5231:29;;5269:30;5293:5;5269:30;:::i;:::-;5172:133;;;;:::o;5311:323::-;5367:6;5416:2;5404:9;5395:7;5391:23;5387:32;5384:119;;;5422:79;;:::i;:::-;5384:119;5542:1;5567:50;5609:7;5600:6;5589:9;5585:22;5567:50;:::i;:::-;5557:60;;5513:114;5311:323;;;;:::o;5640:474::-;5708:6;5716;5765:2;5753:9;5744:7;5740:23;5736:32;5733:119;;;5771:79;;:::i;:::-;5733:119;5891:1;5916:53;5961:7;5952:6;5941:9;5937:22;5916:53;:::i;:::-;5906:63;;5862:117;6018:2;6044:53;6089:7;6080:6;6069:9;6065:22;6044:53;:::i;:::-;6034:63;;5989:118;5640:474;;;;;:::o;6120:619::-;6197:6;6205;6213;6262:2;6250:9;6241:7;6237:23;6233:32;6230:119;;;6268:79;;:::i;:::-;6230:119;6388:1;6413:53;6458:7;6449:6;6438:9;6434:22;6413:53;:::i;:::-;6403:63;;6359:117;6515:2;6541:53;6586:7;6577:6;6566:9;6562:22;6541:53;:::i;:::-;6531:63;;6486:118;6643:2;6669:53;6714:7;6705:6;6694:9;6690:22;6669:53;:::i;:::-;6659:63;;6614:118;6120:619;;;;;:::o;6745:86::-;6780:7;6820:4;6813:5;6809:16;6798:27;;6745:86;;;:::o;6837:118::-;6908:22;6924:5;6908:22;:::i;:::-;6901:5;6898:33;6888:61;;6945:1;6942;6935:12;6888:61;6837:118;:::o;6961:135::-;7005:5;7043:6;7030:20;7021:29;;7059:31;7084:5;7059:31;:::i;:::-;6961:135;;;;:::o;7102:464::-;7165:6;7173;7222:2;7210:9;7201:7;7197:23;7193:32;7190:119;;;7228:79;;:::i;:::-;7190:119;7348:1;7373:50;7415:7;7406:6;7395:9;7391:22;7373:50;:::i;:::-;7363:60;;7319:114;7472:2;7498:51;7541:7;7532:6;7521:9;7517:22;7498:51;:::i;:::-;7488:61;;7443:116;7102:464;;;;;:::o;7572:329::-;7631:6;7680:2;7668:9;7659:7;7655:23;7651:32;7648:119;;;7686:79;;:::i;:::-;7648:119;7806:1;7831:53;7876:7;7867:6;7856:9;7852:22;7831:53;:::i;:::-;7821:63;;7777:117;7572:329;;;;:::o;7907:112::-;7990:22;8006:5;7990:22;:::i;:::-;7985:3;7978:35;7907:112;;:::o;8025:214::-;8114:4;8152:2;8141:9;8137:18;8129:26;;8165:67;8229:1;8218:9;8214:17;8205:6;8165:67;:::i;:::-;8025:214;;;;:::o;8245:468::-;8310:6;8318;8367:2;8355:9;8346:7;8342:23;8338:32;8335:119;;;8373:79;;:::i;:::-;8335:119;8493:1;8518:53;8563:7;8554:6;8543:9;8539:22;8518:53;:::i;:::-;8508:63;;8464:117;8620:2;8646:50;8688:7;8679:6;8668:9;8664:22;8646:50;:::i;:::-;8636:60;;8591:115;8245:468;;;;;:::o;8719:118::-;8806:24;8824:5;8806:24;:::i;:::-;8801:3;8794:37;8719:118;;:::o;8843:222::-;8936:4;8974:2;8963:9;8959:18;8951:26;;8987:71;9055:1;9044:9;9040:17;9031:6;8987:71;:::i;:::-;8843:222;;;;:::o;9071:117::-;9180:1;9177;9170:12;9194:117;9303:1;9300;9293:12;9317:117;9426:1;9423;9416:12;9457:568;9530:8;9540:6;9590:3;9583:4;9575:6;9571:17;9567:27;9557:122;;9598:79;;:::i;:::-;9557:122;9711:6;9698:20;9688:30;;9741:18;9733:6;9730:30;9727:117;;;9763:79;;:::i;:::-;9727:117;9877:4;9869:6;9865:17;9853:29;;9931:3;9923:4;9915:6;9911:17;9901:8;9897:32;9894:41;9891:128;;;9938:79;;:::i;:::-;9891:128;9457:568;;;;;:::o;10031:698::-;10123:6;10131;10139;10188:2;10176:9;10167:7;10163:23;10159:32;10156:119;;;10194:79;;:::i;:::-;10156:119;10342:1;10331:9;10327:17;10314:31;10372:18;10364:6;10361:30;10358:117;;;10394:79;;:::i;:::-;10358:117;10507:80;10579:7;10570:6;10559:9;10555:22;10507:80;:::i;:::-;10489:98;;;;10285:312;10636:2;10662:50;10704:7;10695:6;10684:9;10680:22;10662:50;:::i;:::-;10652:60;;10607:115;10031:698;;;;;:::o;10735:474::-;10803:6;10811;10860:2;10848:9;10839:7;10835:23;10831:32;10828:119;;;10866:79;;:::i;:::-;10828:119;10986:1;11011:53;11056:7;11047:6;11036:9;11032:22;11011:53;:::i;:::-;11001:63;;10957:117;11113:2;11139:53;11184:7;11175:6;11164:9;11160:22;11139:53;:::i;:::-;11129:63;;11084:118;10735:474;;;;;:::o;11215:60::-;11243:3;11264:5;11257:12;;11215:60;;;:::o;11281:142::-;11331:9;11364:53;11382:34;11391:24;11409:5;11391:24;:::i;:::-;11382:34;:::i;:::-;11364:53;:::i;:::-;11351:66;;11281:142;;;:::o;11429:126::-;11479:9;11512:37;11543:5;11512:37;:::i;:::-;11499:50;;11429:126;;;:::o;11561:154::-;11639:9;11672:37;11703:5;11672:37;:::i;:::-;11659:50;;11561:154;;;:::o;11721:187::-;11836:65;11895:5;11836:65;:::i;:::-;11831:3;11824:78;11721:187;;:::o;11914:278::-;12035:4;12073:2;12062:9;12058:18;12050:26;;12086:99;12182:1;12171:9;12167:17;12158:6;12086:99;:::i;:::-;11914:278;;;;:::o;12198:468::-;12263:6;12271;12320:2;12308:9;12299:7;12295:23;12291:32;12288:119;;;12326:79;;:::i;:::-;12288:119;12446:1;12471:50;12513:7;12504:6;12493:9;12489:22;12471:50;:::i;:::-;12461:60;;12417:114;12570:2;12596:53;12641:7;12632:6;12621:9;12617:22;12596:53;:::i;:::-;12586:63;;12541:118;12198:468;;;;;:::o;12672:104::-;12717:7;12746:24;12764:5;12746:24;:::i;:::-;12735:35;;12672:104;;;:::o;12782:138::-;12863:32;12889:5;12863:32;:::i;:::-;12856:5;12853:43;12843:71;;12910:1;12907;12900:12;12843:71;12782:138;:::o;12926:155::-;12980:5;13018:6;13005:20;12996:29;;13034:41;13069:5;13034:41;:::i;:::-;12926:155;;;;:::o;13087:345::-;13154:6;13203:2;13191:9;13182:7;13178:23;13174:32;13171:119;;;13209:79;;:::i;:::-;13171:119;13329:1;13354:61;13407:7;13398:6;13387:9;13383:22;13354:61;:::i;:::-;13344:71;;13300:125;13087:345;;;;:::o;13438:144::-;13506:9;13539:37;13570:5;13539:37;:::i;:::-;13526:50;;13438:144;;;:::o;13588:167::-;13693:55;13742:5;13693:55;:::i;:::-;13688:3;13681:68;13588:167;;:::o;13761:258::-;13872:4;13910:2;13899:9;13895:18;13887:26;;13923:89;14009:1;13998:9;13994:17;13985:6;13923:89;:::i;:::-;13761:258;;;;:::o;14025:161::-;14165:13;14161:1;14153:6;14149:14;14142:37;14025:161;:::o;14192:366::-;14334:3;14355:67;14419:2;14414:3;14355:67;:::i;:::-;14348:74;;14431:93;14520:3;14431:93;:::i;:::-;14549:2;14544:3;14540:12;14533:19;;14192:366;;;:::o;14564:419::-;14730:4;14768:2;14757:9;14753:18;14745:26;;14817:9;14811:4;14807:20;14803:1;14792:9;14788:17;14781:47;14845:131;14971:4;14845:131;:::i;:::-;14837:139;;14564:419;;;:::o;14989:180::-;15037:77;15034:1;15027:88;15134:4;15131:1;15124:15;15158:4;15155:1;15148:15;15175:180;15223:77;15220:1;15213:88;15320:4;15317:1;15310:15;15344:4;15341:1;15334:15;15361:185;15401:1;15418:20;15436:1;15418:20;:::i;:::-;15413:25;;15452:20;15470:1;15452:20;:::i;:::-;15447:25;;15491:1;15481:35;;15496:18;;:::i;:::-;15481:35;15538:1;15535;15531:9;15526:14;;15361:185;;;;:::o;15552:178::-;15692:30;15688:1;15680:6;15676:14;15669:54;15552:178;:::o;15736:366::-;15878:3;15899:67;15963:2;15958:3;15899:67;:::i;:::-;15892:74;;15975:93;16064:3;15975:93;:::i;:::-;16093:2;16088:3;16084:12;16077:19;;15736:366;;;:::o;16108:419::-;16274:4;16312:2;16301:9;16297:18;16289:26;;16361:9;16355:4;16351:20;16347:1;16336:9;16332:17;16325:47;16389:131;16515:4;16389:131;:::i;:::-;16381:139;;16108:419;;;:::o;16533:156::-;16673:8;16669:1;16661:6;16657:14;16650:32;16533:156;:::o;16695:365::-;16837:3;16858:66;16922:1;16917:3;16858:66;:::i;:::-;16851:73;;16933:93;17022:3;16933:93;:::i;:::-;17051:2;17046:3;17042:12;17035:19;;16695:365;;;:::o;17066:419::-;17232:4;17270:2;17259:9;17255:18;17247:26;;17319:9;17313:4;17309:20;17305:1;17294:9;17290:17;17283:47;17347:131;17473:4;17347:131;:::i;:::-;17339:139;;17066:419;;;:::o;17491:410::-;17531:7;17554:20;17572:1;17554:20;:::i;:::-;17549:25;;17588:20;17606:1;17588:20;:::i;:::-;17583:25;;17643:1;17640;17636:9;17665:30;17683:11;17665:30;:::i;:::-;17654:41;;17844:1;17835:7;17831:15;17828:1;17825:22;17805:1;17798:9;17778:83;17755:139;;17874:18;;:::i;:::-;17755:139;17539:362;17491:410;;;;:::o;17907:332::-;18028:4;18066:2;18055:9;18051:18;18043:26;;18079:71;18147:1;18136:9;18132:17;18123:6;18079:71;:::i;:::-;18160:72;18228:2;18217:9;18213:18;18204:6;18160:72;:::i;:::-;17907:332;;;;;:::o;18245:180::-;18293:77;18290:1;18283:88;18390:4;18387:1;18380:15;18414:4;18411:1;18404:15;18431:233;18470:3;18493:24;18511:5;18493:24;:::i;:::-;18484:33;;18539:66;18532:5;18529:77;18526:103;;18609:18;;:::i;:::-;18526:103;18656:1;18649:5;18645:13;18638:20;;18431:233;;;:::o;18670:134::-;18728:9;18761:37;18792:5;18761:37;:::i;:::-;18748:50;;18670:134;;;:::o;18810:147::-;18905:45;18944:5;18905:45;:::i;:::-;18900:3;18893:58;18810:147;;:::o;18963:238::-;19064:4;19102:2;19091:9;19087:18;19079:26;;19115:79;19191:1;19180:9;19176:17;19167:6;19115:79;:::i;:::-;18963:238;;;;:::o;19207:85::-;19252:7;19281:5;19270:16;;19207:85;;;:::o;19298:158::-;19356:9;19389:61;19407:42;19416:32;19442:5;19416:32;:::i;:::-;19407:42;:::i;:::-;19389:61;:::i;:::-;19376:74;;19298:158;;;:::o;19462:147::-;19557:45;19596:5;19557:45;:::i;:::-;19552:3;19545:58;19462:147;;:::o;19615:348::-;19744:4;19782:2;19771:9;19767:18;19759:26;;19795:71;19863:1;19852:9;19848:17;19839:6;19795:71;:::i;:::-;19876:80;19952:2;19941:9;19937:18;19928:6;19876:80;:::i;:::-;19615:348;;;;;:::o;19969:332::-;20090:4;20128:2;20117:9;20113:18;20105:26;;20141:71;20209:1;20198:9;20194:17;20185:6;20141:71;:::i;:::-;20222:72;20290:2;20279:9;20275:18;20266:6;20222:72;:::i;:::-;19969:332;;;;;:::o;20307:191::-;20347:3;20366:20;20384:1;20366:20;:::i;:::-;20361:25;;20400:20;20418:1;20400:20;:::i;:::-;20395:25;;20443:1;20440;20436:9;20429:16;;20464:3;20461:1;20458:10;20455:36;;;20471:18;;:::i;:::-;20455:36;20307:191;;;;:::o;20504:177::-;20644:29;20640:1;20632:6;20628:14;20621:53;20504:177;:::o;20687:366::-;20829:3;20850:67;20914:2;20909:3;20850:67;:::i;:::-;20843:74;;20926:93;21015:3;20926:93;:::i;:::-;21044:2;21039:3;21035:12;21028:19;;20687:366;;;:::o;21059:419::-;21225:4;21263:2;21252:9;21248:18;21240:26;;21312:9;21306:4;21302:20;21298:1;21287:9;21283:17;21276:47;21340:131;21466:4;21340:131;:::i;:::-;21332:139;;21059:419;;;:::o;21484:194::-;21524:4;21544:20;21562:1;21544:20;:::i;:::-;21539:25;;21578:20;21596:1;21578:20;:::i;:::-;21573:25;;21622:1;21619;21615:9;21607:17;;21646:1;21640:4;21637:11;21634:37;;;21651:18;;:::i;:::-;21634:37;21484:194;;;;:::o;21684:170::-;21824:22;21820:1;21812:6;21808:14;21801:46;21684:170;:::o;21860:366::-;22002:3;22023:67;22087:2;22082:3;22023:67;:::i;:::-;22016:74;;22099:93;22188:3;22099:93;:::i;:::-;22217:2;22212:3;22208:12;22201:19;;21860:366;;;:::o;22232:419::-;22398:4;22436:2;22425:9;22421:18;22413:26;;22485:9;22479:4;22475:20;22471:1;22460:9;22456:17;22449:47;22513:131;22639:4;22513:131;:::i;:::-;22505:139;;22232:419;;;:::o;22657:161::-;22797:13;22793:1;22785:6;22781:14;22774:37;22657:161;:::o;22824:366::-;22966:3;22987:67;23051:2;23046:3;22987:67;:::i;:::-;22980:74;;23063:93;23152:3;23063:93;:::i;:::-;23181:2;23176:3;23172:12;23165:19;;22824:366;;;:::o;23196:419::-;23362:4;23400:2;23389:9;23385:18;23377:26;;23449:9;23443:4;23439:20;23435:1;23424:9;23420:17;23413:47;23477:131;23603:4;23477:131;:::i;:::-;23469:139;;23196:419;;;:::o;23621:249::-;23761:34;23757:1;23749:6;23745:14;23738:58;23830:32;23825:2;23817:6;23813:15;23806:57;23621:249;:::o;23876:366::-;24018:3;24039:67;24103:2;24098:3;24039:67;:::i;:::-;24032:74;;24115:93;24204:3;24115:93;:::i;:::-;24233:2;24228:3;24224:12;24217:19;;23876:366;;;:::o;24248:419::-;24414:4;24452:2;24441:9;24437:18;24429:26;;24501:9;24495:4;24491:20;24487:1;24476:9;24472:17;24465:47;24529:131;24655:4;24529:131;:::i;:::-;24521:139;;24248:419;;;:::o;24673:224::-;24813:34;24809:1;24801:6;24797:14;24790:58;24882:7;24877:2;24869:6;24865:15;24858:32;24673:224;:::o;24903:366::-;25045:3;25066:67;25130:2;25125:3;25066:67;:::i;:::-;25059:74;;25142:93;25231:3;25142:93;:::i;:::-;25260:2;25255:3;25251:12;25244:19;;24903:366;;;:::o;25275:419::-;25441:4;25479:2;25468:9;25464:18;25456:26;;25528:9;25522:4;25518:20;25514:1;25503:9;25499:17;25492:47;25556:131;25682:4;25556:131;:::i;:::-;25548:139;;25275:419;;;:::o;25700:220::-;25840:34;25836:1;25828:6;25824:14;25817:58;25909:3;25904:2;25896:6;25892:15;25885:28;25700:220;:::o;25926:366::-;26068:3;26089:67;26153:2;26148:3;26089:67;:::i;:::-;26082:74;;26165:93;26254:3;26165:93;:::i;:::-;26283:2;26278:3;26274:12;26267:19;;25926:366;;;:::o;26298:419::-;26464:4;26502:2;26491:9;26487:18;26479:26;;26551:9;26545:4;26541:20;26537:1;26526:9;26522:17;26515:47;26579:131;26705:4;26579:131;:::i;:::-;26571:139;;26298:419;;;:::o;26723:167::-;26863:19;26859:1;26851:6;26847:14;26840:43;26723:167;:::o;26896:366::-;27038:3;27059:67;27123:2;27118:3;27059:67;:::i;:::-;27052:74;;27135:93;27224:3;27135:93;:::i;:::-;27253:2;27248:3;27244:12;27237:19;;26896:366;;;:::o;27268:419::-;27434:4;27472:2;27461:9;27457:18;27449:26;;27521:9;27515:4;27511:20;27507:1;27496:9;27492:17;27485:47;27549:131;27675:4;27549:131;:::i;:::-;27541:139;;27268:419;;;:::o;27693:180::-;27741:77;27738:1;27731:88;27838:4;27835:1;27828:15;27862:4;27859:1;27852:15;27879:114;27946:6;27980:5;27974:12;27964:22;;27879:114;;;:::o;27999:184::-;28098:11;28132:6;28127:3;28120:19;28172:4;28167:3;28163:14;28148:29;;27999:184;;;;:::o;28189:132::-;28256:4;28279:3;28271:11;;28309:4;28304:3;28300:14;28292:22;;28189:132;;;:::o;28327:108::-;28404:24;28422:5;28404:24;:::i;:::-;28399:3;28392:37;28327:108;;:::o;28441:179::-;28510:10;28531:46;28573:3;28565:6;28531:46;:::i;:::-;28609:4;28604:3;28600:14;28586:28;;28441:179;;;;:::o;28626:113::-;28696:4;28728;28723:3;28719:14;28711:22;;28626:113;;;:::o;28775:732::-;28894:3;28923:54;28971:5;28923:54;:::i;:::-;28993:86;29072:6;29067:3;28993:86;:::i;:::-;28986:93;;29103:56;29153:5;29103:56;:::i;:::-;29182:7;29213:1;29198:284;29223:6;29220:1;29217:13;29198:284;;;29299:6;29293:13;29326:63;29385:3;29370:13;29326:63;:::i;:::-;29319:70;;29412:60;29465:6;29412:60;:::i;:::-;29402:70;;29258:224;29245:1;29242;29238:9;29233:14;;29198:284;;;29202:14;29498:3;29491:10;;28899:608;;;28775:732;;;;:::o;29513:831::-;29776:4;29814:3;29803:9;29799:19;29791:27;;29828:71;29896:1;29885:9;29881:17;29872:6;29828:71;:::i;:::-;29909:80;29985:2;29974:9;29970:18;29961:6;29909:80;:::i;:::-;30036:9;30030:4;30026:20;30021:2;30010:9;30006:18;29999:48;30064:108;30167:4;30158:6;30064:108;:::i;:::-;30056:116;;30182:72;30250:2;30239:9;30235:18;30226:6;30182:72;:::i;:::-;30264:73;30332:3;30321:9;30317:19;30308:6;30264:73;:::i;:::-;29513:831;;;;;;;;:::o;30350:147::-;30451:11;30488:3;30473:18;;30350:147;;;;:::o;30503:114::-;;:::o;30623:398::-;30782:3;30803:83;30884:1;30879:3;30803:83;:::i;:::-;30796:90;;30895:93;30984:3;30895:93;:::i;:::-;31013:1;31008:3;31004:11;30997:18;;30623:398;;;:::o;31027:379::-;31211:3;31233:147;31376:3;31233:147;:::i;:::-;31226:154;;31397:3;31390:10;;31027:379;;;:::o;31412:807::-;31661:4;31699:3;31688:9;31684:19;31676:27;;31713:71;31781:1;31770:9;31766:17;31757:6;31713:71;:::i;:::-;31794:72;31862:2;31851:9;31847:18;31838:6;31794:72;:::i;:::-;31876:80;31952:2;31941:9;31937:18;31928:6;31876:80;:::i;:::-;31966;32042:2;32031:9;32027:18;32018:6;31966:80;:::i;:::-;32056:73;32124:3;32113:9;32109:19;32100:6;32056:73;:::i;:::-;32139;32207:3;32196:9;32192:19;32183:6;32139:73;:::i;:::-;31412:807;;;;;;;;;:::o;32225:143::-;32282:5;32313:6;32307:13;32298:22;;32329:33;32356:5;32329:33;:::i;:::-;32225:143;;;;:::o;32374:663::-;32462:6;32470;32478;32527:2;32515:9;32506:7;32502:23;32498:32;32495:119;;;32533:79;;:::i;:::-;32495:119;32653:1;32678:64;32734:7;32725:6;32714:9;32710:22;32678:64;:::i;:::-;32668:74;;32624:128;32791:2;32817:64;32873:7;32864:6;32853:9;32849:22;32817:64;:::i;:::-;32807:74;;32762:129;32930:2;32956:64;33012:7;33003:6;32992:9;32988:22;32956:64;:::i;:::-;32946:74;;32901:129;32374:663;;;;;:::o

Swarm Source

ipfs://a9fa393b2d1e38cf53b4ed1f96131eff8b9e062c21bd2b6ec939a80b6b55b8bc
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.