MATIC Price: $0.611298 (+1.74%)
Gas: 33 GWei
 

Overview

Max Total Supply

1,000,000 CBOMBER

Holders

563 (0.00%)

Total Transfers

-

Market

Price

$0.03 @ 0.046241 MATIC

Onchain Market Cap

$28,266.83

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

CRYPTO BOMBER NFT Earn CBOMBER tokens by defeating enemies, earning, and HODL your gains.

Market

Volume (24H):$1.32
Market Capitalization:$0.00
Circulating Supply:0.00 CBOMBER
Market Data Source: Coinmarketcap

Contract Source Code Verified (Exact Match)

Contract Name:
CBomber

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at polygonscan.com on 2022-02-16
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.5;

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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }
}

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

/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

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

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

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

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

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

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

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

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

    event OwnershipTransferred(address owner);
}

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

    IBEP20 USDT = IBEP20(0xc2132D05D31c914a87C6611C10748AEb04B58e8F);
    address WBNB = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
    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 = 1 hours;
    uint256 public minDistribution = 1 * (10 ** 8);

    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(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
        _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 = USDT.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(USDT);

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

        uint256 amount = USDT.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);
            USDT.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    
    function claimDividend(address shareholder) external onlyToken{
        distributeDividend(shareholder);
    }

    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 CBomber is IBEP20, Auth {
    using SafeMath for uint256;

    address USDT = 0xc2132D05D31c914a87C6611C10748AEb04B58e8F;
    address WBNB = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "CBomber Token";
    string constant _symbol = "CBOMBER";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply / 40; // 2,5%
    uint256 public maxWalletTokens =  1000000 * (10**9); // Anti-Whale
    bool public lockTransfer = false;

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

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

    uint256 liquidityFee = 300;
    uint256 buybackFee = 0;
    uint256 reflectionFee = 300;
    uint256 marketingFee = 0;
    uint256 totalFee = 600;
    uint256 feeDenominator = 10000;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 25;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;

    uint256 buybackMultiplierNumerator = 200;
    uint256 buybackMultiplierDenominator = 100;
    uint256 buybackMultiplierTriggeredAt;
    uint256 buybackMultiplierLength = 30 minutes;

    bool public autoBuybackEnabled = false;
    bool public autoBuybackMultiplier = true;
    uint256 autoBuybackCap;
    uint256 autoBuybackAccumulator;
    uint256 autoBuybackAmount;
    uint256 autoBuybackBlockPeriod;
    uint256 autoBuybackBlockLast;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 200; // 5%
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    mapping(address => bool) isBlacklisted;

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));
        
        address _presaler = 0x89d4c05848811155ce16a447c762421eaC93d927;
        isFeeExempt[_presaler] = true;
        isTxLimitExempt[_presaler] = true;
        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;

        _balances[_presaler] = _totalSupply;
        emit Transfer(address(0), _presaler, _totalSupply);
    }

    receive() external payable { }

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

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

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

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        require(!isBlacklisted[msg.sender], "Recipient is backlisted");

        require(!lockTransfer, "Blocked transfers.");
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        require(!isBlacklisted[msg.sender], "Recipient is backlisted");
        
        require(!lockTransfer, "Blocked transfers.");

        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

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

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

        if(!launched() && recipient == pair){ require(_balances[sender] > 0); launch(); }

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

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

        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 getTotalFee(bool selling) public view returns (uint256) {
        if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); }
        if(selling && buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp){ return getMultipliedFee(); }
        return totalFee;
    }

    function getMultipliedFee() public view returns (uint256) {
        uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp);
        uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee);
        return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength));
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator);

        _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 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] = WBNB;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );
        uint256 amountBNB = address(this).balance.sub(balanceBefore);
        uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
        uint256 amountBNBLiquidity = amountBNB.mul(dynamicLiquidityFee).div(totalBNBFee).div(2);
        uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(totalBNBFee);
        uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}
        (bool success, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountBNBMarketing, gas: 30000}("");
        require(success, "receiver rejected ETH transfer");

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

    function shouldAutoBuyback() internal view returns (bool) {
        return msg.sender != pair
            && !inSwap
            && autoBuybackEnabled
            && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number
            && address(this).balance >= autoBuybackAmount;
    }

    function triggerManualBuyback(uint256 amount, bool triggerBuybackMultiplier) external authorized {
        buyTokens(amount, DEAD);
        if(triggerBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
    }
     
    function removeMaxWallet() public onlyOwner {
         maxWalletTokens = 2000000000 * 10**9;
    }
    
    function clearBuybackMultiplier() external authorized {
        buybackMultiplierTriggeredAt = 0;
    }

    function triggerAutoBuyback() internal {
        buyTokens(autoBuybackAmount, DEAD);
        if(autoBuybackMultiplier){
            buybackMultiplierTriggeredAt = block.timestamp;
            emit BuybackMultiplierActive(buybackMultiplierLength);
        }
        autoBuybackBlockLast = block.number;
        autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount);
        if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; }
    }

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = WBNB;
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function setLockTransfer(bool _value) public onlyOwner {
        lockTransfer = _value;
    }

    function setAutoBuybackSettings(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period, bool _autoBuybackMultiplier) external authorized {
        autoBuybackEnabled = _enabled;
        autoBuybackCap = _cap;
        autoBuybackAccumulator = 0;
        autoBuybackAmount = _amount;
        autoBuybackBlockPeriod = _period;
        autoBuybackBlockLast = block.number;
        autoBuybackMultiplier = _autoBuybackMultiplier;
    }

    function setBuybackMultiplierSettings(uint256 numerator, uint256 denominator, uint256 length) external authorized {
        require(numerator / denominator <= 2 && numerator > denominator);
        buybackMultiplierNumerator = numerator;
        buybackMultiplierDenominator = denominator;
        buybackMultiplierLength = length;
    }

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function launch() internal {
        launchedAt = block.number;
    }

    function setTxLimit(uint256 amount) external authorized {
        require(amount >= _totalSupply / 1000);
        _maxTxAmount = amount;
    }

    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 setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

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

    function setFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        buybackFee = _buybackFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee.add(_buybackFee).add(_reflectionFee).add(_marketingFee);
        feeDenominator = _feeDenominator;
    }

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

    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 manualSend() external authorized {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }

    function updateManualSend() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(marketingFeeReceiver).transfer(contractETHBalance);
    }
    
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }
    
    function claimDividend() external {
        distributor.claimDividend(msg.sender);
    }
    
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        return distributor.getUnpaidEarnings(shareholder);
    } 

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

    function blackList(address _user) public onlyOwner {
        require(!isBlacklisted[_user], "user already blacklisted");
        isBlacklisted[_user] = true;
        // emit events as well
    }
    
    function removeFromBlacklist(address _user) public onlyOwner {
        require(isBlacklisted[_user], "user already whitelisted");
        isBlacklisted[_user] = false;
        // emit events as well
    }
    
    
    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
    event BuybackMultiplierActive(uint256 duration);
}

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":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMultiplierActive","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":[{"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":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoBuybackMultiplier","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"blackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","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":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"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":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"},{"internalType":"bool","name":"_autoBuybackMultiplier","type":"bool"}],"name":"setAutoBuybackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"setBuybackMultiplierSettings","outputs":[],"stateMutability":"nonpayable","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":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_value","type":"bool"}],"name":"setLockTransfer","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":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerManualBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateManualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273c2132d05d31c914a87c6611c10748aeb04b58e8f600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d500b1d8e8ef31e21c99d1db9a6444d3adf1270600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a62000143919062000aeb565b620f424062000153919062000c28565b600655602860065462000167919062000a58565b60075566038d7ea4c680006008556000600960006101000a81548160ff02191690831515021790555061012c600f55600060105561012c60115560006012556102586013556127106014556019601755606460185560c8601c556064601d55610708601f556000602060006101000a81548160ff0219169083151502179055506001602060016101000a81548160ff0219169083151502179055506207a1206027556001602860006101000a81548160ff02191690831515021790555060c860065462000235919062000a58565b6029553480156200024557600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073a5e0829caced8ffdd4de3c43696c57f7d7a678ff601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039d57600080fd5b505afa158015620003b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d891906200099d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200043692919062000a0e565b602060405180830381600087803b1580156200045157600080fd5b505af115801562000466573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048c91906200099d565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620005c09062000978565b620005cc9190620009f1565b604051809103906000f080158015620005e9573d6000803e3d6000fd5b50602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060007389d4c05848811155ce16a447c762421eac93d92790506001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600654600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60065460405162000969919062000a3b565b60405180910390a35062000d5e565b6120a18062005e0183390190565b600081519050620009978162000d44565b92915050565b600060208284031215620009b657620009b562000d32565b5b6000620009c68482850162000986565b91505092915050565b620009da8162000c89565b82525050565b620009eb8162000cbd565b82525050565b600060208201905062000a086000830184620009cf565b92915050565b600060408201905062000a256000830185620009cf565b62000a346020830184620009cf565b9392505050565b600060208201905062000a526000830184620009e0565b92915050565b600062000a658262000cbd565b915062000a728362000cbd565b92508262000a855762000a8462000d03565b5b828204905092915050565b6000808291508390505b600185111562000ae25780860481111562000aba5762000ab962000cd4565b5b600185161562000aca5780820291505b808102905062000ada8562000d37565b945062000a9a565b94509492505050565b600062000af88262000cbd565b915062000b058362000cc7565b925062000b347fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b3c565b905092915050565b60008262000b4e576001905062000c21565b8162000b5e576000905062000c21565b816001811462000b77576002811462000b825762000bb8565b600191505062000c21565b60ff84111562000b975762000b9662000cd4565b5b8360020a91508482111562000bb15762000bb062000cd4565b5b5062000c21565b5060208310610133831016604e8410600b841016171562000bf25782820a90508381111562000bec5762000beb62000cd4565b5b62000c21565b62000c01848484600162000a90565b9250905081840481111562000c1b5762000c1a62000cd4565b5b81810290505b9392505050565b600062000c358262000cbd565b915062000c428362000cbd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c7e5762000c7d62000cd4565b5b828202905092915050565b600062000c968262000c9d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b62000d4f8162000c89565b811462000d5b57600080fd5b50565b6150938062000d6e6000396000f3fe6080604052600436106103545760003560e01c806384134c1f116101c6578063dc07b617116100f7578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610c31578063f84ba65d14610c5a578063f887ea4014610c83578063fe9fbb8014610cae5761035b565b8063f1f3bca314610bb4578063f2fde38b14610bf1578063f429389014610c1a5761035b565b8063e1dcc71f116100d1578063e1dcc71f14610b1e578063e96fada214610b49578063f0b37c0414610b74578063f0fc6bca14610b9d5761035b565b8063dc07b61714610aa1578063dd62ed3e14610ab8578063df20fd4914610af55761035b565b8063b210b06d11610164578063c6729f261161013e578063c6729f26146109e5578063ca33e64c14610a0e578063d51ed1c814610a39578063d806d12f14610a765761035b565b8063b210b06d1461097a578063b6a5d7de14610991578063bf56b371146109ba5761035b565b80639d1944f5116101a05780639d1944f5146108c0578063a4b45c00146108e9578063a8aa1b3114610912578063a9059cbb1461093d5761035b565b806384134c1f14610853578063893d20e81461086a57806395d89b41146108955761035b565b80632f54bf6e116102a05780635c85974f1161023e5780636ddd1713116102185780636ddd17131461079757806370a08231146107c25780637d1db4a5146107ff57806382334b941461082a5761035b565b80635c85974f1461071a57806363a803e114610743578063658d4b7f1461076e5761035b565b80633bb8a8d41161027a5780633bb8a8d4146106605780634838d1651461068b578063537df3b6146106b4578063571ac8b0146106dd5761035b565b80632f54bf6e146105cf5780632f5620d11461060c578063313ce567146106355761035b565b80631a9aea0a1161030d57806323b872dd116102e757806323b872dd1461050157806328fd31981461053e5780632b112e491461057b5780632d48e896146105a65761035b565b80631a9aea0a14610484578063201e7991146104af5780632375ce40146104d85761035b565b80630445b6671461036057806304a66b481461038b57806306fdde03146103b4578063095ea7b3146103df5780631161ae391461041c57806318160ddd146104595761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610ceb565b6040516103829190614a4a565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614445565b610cf1565b005b3480156103c057600080fd5b506103c9610da0565b6040516103d691906148e8565b60405180910390f35b3480156103eb57600080fd5b506104066004803603810190610401919061419d565b610ddd565b6040516104139190614866565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e919061435f565b610ecf565b6040516104509190614866565b60405180910390f35b34801561046557600080fd5b5061046e610ee4565b60405161047b9190614a4a565b60405180910390f35b34801561049057600080fd5b50610499610eee565b6040516104a69190614866565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061435f565b610f01565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061439f565b610f5b565b005b34801561050d57600080fd5b506105286004803603810190610523919061410a565b610fe1565b6040516105359190614866565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190614070565b6112be565b6040516105729190614a4a565b60405180910390f35b34801561058757600080fd5b50610590611372565b60405161059d9190614a4a565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c8919061435f565b6113f4565b005b3480156105db57600080fd5b506105f660048036038101906105f19190614070565b6114cf565b6040516106039190614866565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e919061424a565b611528565b005b34801561064157600080fd5b5061064a6115cf565b6040516106579190614ae8565b60405180910390f35b34801561066c57600080fd5b506106756115d8565b6040516106829190614866565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614070565b6115eb565b005b3480156106c057600080fd5b506106db60048036038101906106d69190614070565b61171b565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190614070565b61184a565b6040516107119190614866565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906142c5565b61187d565b005b34801561074f57600080fd5b506107586118eb565b6040516107659190614a4a565b60405180910390f35b34801561077a57600080fd5b506107956004803603810190610790919061415d565b6118f1565b005b3480156107a357600080fd5b506107ac611994565b6040516107b99190614866565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190614070565b6119a7565b6040516107f69190614a4a565b60405180910390f35b34801561080b57600080fd5b506108146119f0565b6040516108219190614a4a565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c919061431f565b6119f6565b005b34801561085f57600080fd5b50610868611ab5565b005b34801561087657600080fd5b5061087f611b6e565b60405161088c919061477d565b60405180910390f35b3480156108a157600080fd5b506108aa611b97565b6040516108b791906148e8565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e291906142c5565b611bd4565b005b3480156108f557600080fd5b50610910600480360381019061090b91906140ca565b611c35565b005b34801561091e57600080fd5b50610927611d03565b604051610934919061477d565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f919061419d565b611d29565b6040516109719190614866565b60405180910390f35b34801561098657600080fd5b5061098f611e1b565b005b34801561099d57600080fd5b506109b860048036038101906109b39190614070565b611e6d565b005b3480156109c657600080fd5b506109cf611f0f565b6040516109dc9190614a4a565b60405180910390f35b3480156109f157600080fd5b50610a0c6004803603810190610a0791906141dd565b611f15565b005b348015610a1a57600080fd5b50610a23611f7a565b604051610a30919061477d565b60405180910390f35b348015610a4557600080fd5b50610a606004803603810190610a5b91906142c5565b611fa0565b604051610a6d9190614a4a565b60405180910390f35b348015610a8257600080fd5b50610a8b612012565b604051610a989190614a4a565b60405180910390f35b348015610aad57600080fd5b50610ab66120c5565b005b348015610ac457600080fd5b50610adf6004803603810190610ada91906140ca565b61211e565b604051610aec9190614a4a565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b17919061420a565b6121a5565b005b348015610b2a57600080fd5b50610b33612212565b604051610b409190614866565b60405180910390f35b348015610b5557600080fd5b50610b5e612225565b604051610b6b919061477d565b60405180910390f35b348015610b8057600080fd5b50610b9b6004803603810190610b969190614070565b61224b565b005b348015610ba957600080fd5b50610bb26122ee565b005b348015610bc057600080fd5b50610bdb6004803603810190610bd691906141dd565b61237d565b604051610be89190614a4a565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c13919061409d565b6123f2565b005b348015610c2657600080fd5b50610c2f61250b565b005b348015610c3d57600080fd5b50610c586004803603810190610c53919061415d565b6125c4565b005b348015610c6657600080fd5b50610c816004803603810190610c7c919061415d565b612864565b005b348015610c8f57600080fd5b50610c98612907565b604051610ca59190614881565b60405180910390f35b348015610cba57600080fd5b50610cd56004803603810190610cd09190614070565b61292d565b604051610ce29190614866565b60405180910390f35b60295481565b610cfa3361292d565b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090614a2a565b60405180910390fd5b84600f81905550836010819055508260118190555081601281905550610d8c82610d7e85610d70888a61298390919063ffffffff16565b61298390919063ffffffff16565b61298390919063ffffffff16565b601381905550806014819055505050505050565b60606040518060400160405280600d81526020017f43426f6d62657220546f6b656e00000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ebd9190614a4a565b60405180910390a36001905092915050565b600082610edb83611fa0565b11905092915050565b6000600654905090565b600960009054906101000a900460ff1681565b610f0a3361292d565b610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090614a2a565b60405180910390fd5b81601781905550806018819055505050565b610f643361292d565b610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a2a565b60405180910390fd5b60028284610fb19190614bb9565b11158015610fbe57508183115b610fc757600080fd5b82601c8190555081601d8190555080601f81905550505050565b6000602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790614a0a565b60405180910390fd5b600960009054906101000a900460ff16156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906149ca565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112aa57611229826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112b5848484612a45565b90509392505050565b6000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b815260040161131b919061477d565b60206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906142f2565b9050919050565b60006113ef6113a2600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b6113e16113d0600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b60065461302e90919063ffffffff16565b61302e90919063ffffffff16565b905090565b6113fd3361292d565b61143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614a2a565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611499929190614abf565b600060405180830381600087803b1580156114b357600080fd5b505af11580156114c7573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6115313361292d565b611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614a2a565b60405180910390fd5b84602060006101000a81548160ff02191690831515021790555083602181905550600060228190555082602381905550816024819055504360258190555080602060016101000a81548160ff0219169083151502179055505050505050565b60006012905090565b602060009054906101000a900460ff1681565b6115f4336114cf565b611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a906149ea565b60405180910390fd5b602b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b79061496a565b60405180910390fd5b6001602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611724336114cf565b611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906149ea565b60405180910390fd5b602b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e69061498a565b60405180910390fd5b6000602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611876827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ddd565b9050919050565b6118863361292d565b6118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90614a2a565b60405180910390fd5b6103e86006546118d59190614bb9565b8110156118e157600080fd5b8060078190555050565b60085481565b6118fa3361292d565b611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090614a2a565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602860009054906101000a900460ff1681565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b6119ff3361292d565b611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614a2a565b60405180910390fd5b611a6a82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613078565b8015611ab15742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f54604051611aa89190614a4a565b60405180910390a15b5050565b611abe336114cf565b611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af4906149ea565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b6a573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f43424f4d42455200000000000000000000000000000000000000000000000000815250905090565b611bdd3361292d565b611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390614a2a565b60405180910390fd5b620b71b08110611c2b57600080fd5b8060278190555050565b611c3e3361292d565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614a2a565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614a0a565b60405180910390fd5b600960009054906101000a900460ff1615611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff906149ca565b60405180910390fd5b611e13338484612a45565b905092915050565b611e243361292d565b611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90614a2a565b60405180910390fd5b6000601e81905550565b611e76336114cf565b611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac906149ea565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b5481565b611f1e336114cf565b611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906149ea565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061200b611fad611372565b611ffd611fee6002611fe0601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b61325690919063ffffffff16565b8561325690919063ffffffff16565b6132d190919063ffffffff16565b9050919050565b60008061203e42612030601f54601e5461298390919063ffffffff16565b61302e90919063ffffffff16565b90506000612081601354612073601d54612065601c5460135461325690919063ffffffff16565b6132d190919063ffffffff16565b61302e90919063ffffffff16565b90506120be6120ad601f5461209f858561325690919063ffffffff16565b6132d190919063ffffffff16565b60135461298390919063ffffffff16565b9250505090565b6120ce336114cf565b61210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906149ea565b60405180910390fd5b671bc16d674ec80000600881905550565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121ae3361292d565b6121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614a2a565b60405180910390fd5b81602860006101000a81548160ff021916908315150217905550806029819055505050565b602060019054906101000a900460ff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612254336114cf565b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a906149ea565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b8152600401612349919061477d565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50505050565b6000436001601b5461238f9190614b63565b106123b1576123aa600160145461302e90919063ffffffff16565b90506123ed565b8180156123d35750426123d1601f54601e5461298390919063ffffffff16565b115b156123e7576123e0612012565b90506123ed565b60135490505b919050565b6123fb336114cf565b61243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906149ea565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516125009190614798565b60405180910390a150565b6125143361292d565b612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a2a565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156125c0573d6000803e3d6000fd5b5050565b6125cd3361292d565b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614a2a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126965750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61269f57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561279157602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161275a9291906147b3565b600060405180830381600087803b15801561277457600080fd5b505af1158015612788573d6000803e3d6000fd5b50505050612860565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161282d9291906147dc565b600060405180830381600087803b15801561284757600080fd5b505af115801561285b573d6000803e3d6000fd5b505050505b5050565b61286d3361292d565b6128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614a2a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008082846129929190614b63565b9050838110156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061492a565b60405180910390fd5b8091505092915050565b6000838311158290612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2091906148e8565b60405180910390fd5b5060008385612a389190614c44565b9050809150509392505050565b6000602a60009054906101000a900460ff1615612a6e57612a6784848461331b565b9050613027565b612a7884836134ee565b612a8061358b565b15612a8e57612a8d613662565b5b612a96613c17565b15612aa457612aa3613cca565b5b612aac613d9c565b158015612b065750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612b60576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612b5757600080fd5b612b5f613da9565b5b612be9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612c3785613db2565b612c415782612c4d565b612c4c858585613e09565b5b9050612ca181600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0757602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612dd19291906147dc565b600060405180830381600087803b158015612deb57600080fd5b505af1925050508015612dfc575060015b612e0557612e06565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2a57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612ef49291906147dc565b600060405180830381600087803b158015612f0e57600080fd5b505af1925050508015612f1f575060015b612f2857612f29565b5b5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796027546040518263ffffffff1660e01b8152600401612f879190614a4a565b600060405180830381600087803b158015612fa157600080fd5b505af1925050508015612fb2575060015b612fbb57612fbc565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130199190614a4a565b60405180910390a360019150505b9392505050565b600061307083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129e1565b905092915050565b6001602a60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156130b0576130af614df9565b5b6040519080825280602002602001820160405280156130de5781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061311857613117614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061316757613166614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401613204949392919061489c565b6000604051808303818588803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b5050505050506000602a60006101000a81548160ff0219169083151502179055505050565b60008083141561326957600090506132cb565b600082846132779190614bea565b90508284826132869190614bb9565b146132c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bd906149aa565b60405180910390fd5b809150505b92915050565b600061331383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fa4565b905092915050565b60006133a6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134db9190614a4a565b60405180910390a3600190509392505050565b600754811115806135485750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357e9061490a565b60405180910390fd5b5050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156135f85750602a60009054906101000a900460ff16155b80156136105750602860009054906101000a900460ff165b801561365d5750602954600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602a60006101000a81548160ff021916908315150217905550600061368d601754601854610ecf565b61369957600f5461369c565b60005b905060006136dc60026136ce6013546136c08660295461325690919063ffffffff16565b6132d190919063ffffffff16565b6132d190919063ffffffff16565b905060006136f58260295461302e90919063ffffffff16565b90506000600267ffffffffffffffff81111561371457613713614df9565b5b6040519080825280602002602001820160405280156137425781602001602082028036833780820191505090505b509050308160008151811061375a57613759614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106137cb576137ca614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161386e959493929190614a65565b600060405180830381600087803b15801561388857600080fd5b505af115801561389c573d6000803e3d6000fd5b5050505060006138b5824761302e90919063ffffffff16565b905060006138e16138d06002896132d190919063ffffffff16565b60135461302e90919063ffffffff16565b9050600061391d600261390f846139018c8861325690919063ffffffff16565b6132d190919063ffffffff16565b6132d190919063ffffffff16565b905060006139488361393a6011548761325690919063ffffffff16565b6132d190919063ffffffff16565b90506000613973846139656012548861325690919063ffffffff16565b6132d190919063ffffffff16565b9050602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156139df57600080fd5b505af1935050505080156139f1575060015b6139fa576139fb565b5b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613a4790614768565b600060405180830381858888f193505050503d8060008114613a85576040519150601f19603f3d011682016040523d82523d6000602084013e613a8a565b606091505b5050905080613ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac59061494a565b60405180910390fd5b60008a1115613bef57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b6096959493929190614805565b6060604051808303818588803b158015613b7957600080fd5b505af1158015613b8d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb291906143f2565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051613be6929190614abf565b60405180910390a15b50505050505050505050506000602a60006101000a81548160ff021916908315150217905550565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613c845750602a60009054906101000a900460ff16155b8015613c9c5750602060009054906101000a900460ff165b8015613cb7575043602454602554613cb49190614b63565b11155b8015613cc557506023544710155b905090565b613cf8602354600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613078565b602060019054906101000a900460ff1615613d4e5742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f54604051613d459190614a4a565b60405180910390a15b43602581905550613d6c60235460225461298390919063ffffffff16565b6022819055506021546022541115613d9a576000602060006101000a81548160ff0219169083151502179055505b565b600080601b541415905090565b43601b81905550565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613e8b601454613e7d613e6e601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461237d565b8661325690919063ffffffff16565b6132d190919063ffffffff16565b9050613edf81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f7f9190614a4a565b60405180910390a3613f9a818461302e90919063ffffffff16565b9150509392505050565b60008083118290613feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe291906148e8565b60405180910390fd5b5060008385613ffa9190614bb9565b9050809150509392505050565b60008135905061401681615001565b92915050565b60008135905061402b81615018565b92915050565b6000813590506140408161502f565b92915050565b60008135905061405581615046565b92915050565b60008151905061406a81615046565b92915050565b60006020828403121561408657614085614e28565b5b600061409484828501614007565b91505092915050565b6000602082840312156140b3576140b2614e28565b5b60006140c18482850161401c565b91505092915050565b600080604083850312156140e1576140e0614e28565b5b60006140ef85828601614007565b925050602061410085828601614007565b9150509250929050565b60008060006060848603121561412357614122614e28565b5b600061413186828701614007565b935050602061414286828701614007565b925050604061415386828701614046565b9150509250925092565b6000806040838503121561417457614173614e28565b5b600061418285828601614007565b925050602061419385828601614031565b9150509250929050565b600080604083850312156141b4576141b3614e28565b5b60006141c285828601614007565b92505060206141d385828601614046565b9150509250929050565b6000602082840312156141f3576141f2614e28565b5b600061420184828501614031565b91505092915050565b6000806040838503121561422157614220614e28565b5b600061422f85828601614031565b925050602061424085828601614046565b9150509250929050565b600080600080600060a0868803121561426657614265614e28565b5b600061427488828901614031565b955050602061428588828901614046565b945050604061429688828901614046565b93505060606142a788828901614046565b92505060806142b888828901614031565b9150509295509295909350565b6000602082840312156142db576142da614e28565b5b60006142e984828501614046565b91505092915050565b60006020828403121561430857614307614e28565b5b60006143168482850161405b565b91505092915050565b6000806040838503121561433657614335614e28565b5b600061434485828601614046565b925050602061435585828601614031565b9150509250929050565b6000806040838503121561437657614375614e28565b5b600061438485828601614046565b925050602061439585828601614046565b9150509250929050565b6000806000606084860312156143b8576143b7614e28565b5b60006143c686828701614046565b93505060206143d786828701614046565b92505060406143e886828701614046565b9150509250925092565b60008060006060848603121561440b5761440a614e28565b5b60006144198682870161405b565b935050602061442a8682870161405b565b925050604061443b8682870161405b565b9150509250925092565b600080600080600060a0868803121561446157614460614e28565b5b600061446f88828901614046565b955050602061448088828901614046565b945050604061449188828901614046565b93505060606144a288828901614046565b92505060806144b388828901614046565b9150509295509295909350565b60006144cc83836144e7565b60208301905092915050565b6144e181614cdf565b82525050565b6144f081614c78565b82525050565b6144ff81614c78565b82525050565b600061451082614b13565b61451a8185614b36565b935061452583614b03565b8060005b8381101561455657815161453d88826144c0565b975061454883614b29565b925050600181019050614529565b5085935050505092915050565b61456c81614c9c565b82525050565b61457b81614cf1565b82525050565b61458a81614d03565b82525050565b600061459b82614b1e565b6145a58185614b52565b93506145b5818560208601614d39565b6145be81614e2d565b840191505092915050565b60006145d6601183614b52565b91506145e182614e3e565b602082019050919050565b60006145f9601b83614b52565b915061460482614e67565b602082019050919050565b600061461c601e83614b52565b915061462782614e90565b602082019050919050565b600061463f601883614b52565b915061464a82614eb9565b602082019050919050565b6000614662601883614b52565b915061466d82614ee2565b602082019050919050565b6000614685602183614b52565b915061469082614f0b565b604082019050919050565b60006146a8601283614b52565b91506146b382614f5a565b602082019050919050565b60006146cb600683614b52565b91506146d682614f83565b602082019050919050565b60006146ee600083614b47565b91506146f982614fac565b600082019050919050565b6000614711601783614b52565b915061471c82614faf565b602082019050919050565b6000614734600b83614b52565b915061473f82614fd8565b602082019050919050565b61475381614cc8565b82525050565b61476281614cd2565b82525050565b6000614773826146e1565b9150819050919050565b600060208201905061479260008301846144f6565b92915050565b60006020820190506147ad60008301846144d8565b92915050565b60006040820190506147c860008301856144f6565b6147d56020830184614581565b9392505050565b60006040820190506147f160008301856144f6565b6147fe602083018461474a565b9392505050565b600060c08201905061481a60008301896144f6565b614827602083018861474a565b6148346040830187614581565b6148416060830186614581565b61484e60808301856144f6565b61485b60a083018461474a565b979650505050505050565b600060208201905061487b6000830184614563565b92915050565b60006020820190506148966000830184614572565b92915050565b60006080820190506148b16000830187614581565b81810360208301526148c38186614505565b90506148d260408301856144f6565b6148df606083018461474a565b95945050505050565b600060208201905081810360008301526149028184614590565b905092915050565b60006020820190508181036000830152614923816145c9565b9050919050565b60006020820190508181036000830152614943816145ec565b9050919050565b600060208201905081810360008301526149638161460f565b9050919050565b6000602082019050818103600083015261498381614632565b9050919050565b600060208201905081810360008301526149a381614655565b9050919050565b600060208201905081810360008301526149c381614678565b9050919050565b600060208201905081810360008301526149e38161469b565b9050919050565b60006020820190508181036000830152614a03816146be565b9050919050565b60006020820190508181036000830152614a2381614704565b9050919050565b60006020820190508181036000830152614a4381614727565b9050919050565b6000602082019050614a5f600083018461474a565b92915050565b600060a082019050614a7a600083018861474a565b614a876020830187614581565b8181036040830152614a998186614505565b9050614aa860608301856144f6565b614ab5608083018461474a565b9695505050505050565b6000604082019050614ad4600083018561474a565b614ae1602083018461474a565b9392505050565b6000602082019050614afd6000830184614759565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614b6e82614cc8565b9150614b7983614cc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bae57614bad614d6c565b5b828201905092915050565b6000614bc482614cc8565b9150614bcf83614cc8565b925082614bdf57614bde614d9b565b5b828204905092915050565b6000614bf582614cc8565b9150614c0083614cc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c3957614c38614d6c565b5b828202905092915050565b6000614c4f82614cc8565b9150614c5a83614cc8565b925082821015614c6d57614c6c614d6c565b5b828203905092915050565b6000614c8382614ca8565b9050919050565b6000614c9582614ca8565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614cea82614d15565b9050919050565b6000614cfc82614d15565b9050919050565b6000614d0e82614cc8565b9050919050565b6000614d2082614d27565b9050919050565b6000614d3282614ca8565b9050919050565b60005b83811015614d57578082015181840152602081019050614d3c565b83811115614d66576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f72656365697665722072656a656374656420455448207472616e736665720000600082015250565b7f7573657220616c726561647920626c61636b6c69737465640000000000000000600082015250565b7f7573657220616c72656164792077686974656c69737465640000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f426c6f636b6564207472616e73666572732e0000000000000000000000000000600082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f526563697069656e74206973206261636b6c6973746564000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b61500a81614c78565b811461501557600080fd5b50565b61502181614c8a565b811461502c57600080fd5b50565b61503881614c9c565b811461504357600080fd5b50565b61504f81614cc8565b811461505a57600080fd5b5056fea2646970667358221220729a941d27845e4319b81fd8509061ff1775f37f5fc4e1452cc7615c69bbb09564736f6c63430008070033608060405273c2132d05d31c914a87c6611c10748aeb04b58e8f600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d500b1d8e8ef31e21c99d1db9a6444d3adf1270600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d556305f5e100600e55348015620000dc57600080fd5b50604051620020a1380380620020a18339818101604052810190620001029190620001f3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001535773a5e0829caced8ffdd4de3c43696c57f7d7a678ff62000155565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000278565b600081519050620001ed816200025e565b92915050565b6000602082840312156200020c576200020b62000259565b5b60006200021c84828501620001dc565b91505092915050565b6000620002328262000239565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620002698162000225565b81146200027557600080fd5b50565b611e1980620002886000396000f3fe6080604052600436106100dd5760003560e01c8063997664d71161007f578063e2d2e21911610059578063e2d2e2191461028f578063efca2eed146102ba578063ffb2c479146102e5578063ffd49c841461030e576100dd565b8063997664d71461021b578063ce7c2ac214610246578063d0e30db014610285576100dd565b806328fd3198116100bb57806328fd31981461015f5780632d48e8961461019c5780633a98ef39146101c55780634fab0ae8146101f0576100dd565b806311ce023d146100e257806314b6ca961461010d57806315f7e05e14610136575b600080fd5b3480156100ee57600080fd5b506100f7610339565b6040516101049190611993565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611669565b61033f565b005b34801561014257600080fd5b5061015d6004803603810190610158919061163c565b6105fe565b005b34801561016b57600080fd5b506101866004803603810190610181919061163c565b610662565b6040516101939190611993565b60405180910390f35b3480156101a857600080fd5b506101c360048036038101906101be9190611730565b61077c565b005b3480156101d157600080fd5b506101da6107e6565b6040516101e79190611993565b60405180910390f35b3480156101fc57600080fd5b506102056107ec565b6040516102129190611993565b60405180910390f35b34801561022757600080fd5b506102306107f2565b60405161023d9190611993565b60405180910390f35b34801561025257600080fd5b5061026d6004803603810190610268919061163c565b6107f8565b60405161027c939291906119ae565b60405180910390f35b61028d610822565b005b34801561029b57600080fd5b506102a4610c12565b6040516102b19190611993565b60405180910390f35b3480156102c657600080fd5b506102cf610c18565b6040516102dc9190611993565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906116d6565b610c1e565b005b34801561031a57600080fd5b50610323610db2565b6040516103309190611993565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461039757600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103ec576103eb82610db8565b5b60008111801561043e57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b156104515761044c8261105f565b6104b3565b6000811480156104a357506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104b2576104b18261110e565b5b5b61051c8161050e600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461131590919063ffffffff16565b61135f90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105b4600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113bd565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461065657600080fd5b61065f81610db8565b50565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015414156106b75760009050610777565b6000610704600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113bd565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905080821161075f57600092505050610777565b610772818361131590919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107d457600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461087a57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108d791906118a1565b60206040518083038186803b1580156108ef57600080fd5b505afa158015610903573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109279190611703565b90506000600267ffffffffffffffff81111561094657610945611ce1565b5b6040519080825280602002602001820160405280156109745781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106109ae576109ad611cb2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610a1f57610a1e611cb2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610abc94939291906118e5565b6000604051808303818588803b158015610ad557600080fd5b505af1158015610ae9573d6000803e3d6000fd5b50505050506000610bad83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b4f91906118a1565b60206040518083038186803b158015610b6757600080fd5b505afa158015610b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b9f9190611703565b61131590919063ffffffff16565b9050610bc48160095461135f90919063ffffffff16565b600981905550610c07610bf6600854610be884600c546113ef90919063ffffffff16565b61146a90919063ffffffff16565b600b5461135f90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7657600080fd5b600060048054905090506000811415610c8f5750610daf565b6000805a905060005b8483108015610ca657508381105b15610daa5783600f5410610cbd576000600f819055505b610d066004600f5481548110610cd657610cd5611cb2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166114b4565b15610d5557610d546004600f5481548110610d2457610d23611cb2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610db8565b5b610d7a610d6b5a8461131590919063ffffffff16565b8461135f90919063ffffffff16565b92505a9150600f6000815480929190610d9290611bdc565b91905055508080610da290611bdc565b915050610c98565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541415610e085761105c565b6000610e1382610662565b9050600081111561105a57610e3381600a5461135f90919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e969291906118bc565b602060405180830381600087803b158015610eb057600080fd5b505af1158015610ec4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee891906116a9565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f8281600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461135f90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611013600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546113bd565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506111229190611b1b565b8154811061113357611132611cb2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054815481106111b1576111b0611cb2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506112519190611b1b565b8154811061126257611261611cb2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060048054806112dd576112dc611c83565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b600061135783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611521565b905092915050565b600080828461136e9190611a3a565b9050838110156113b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113aa90611953565b60405180910390fd5b8091505092915050565b60006113e8600c546113da600b54856113ef90919063ffffffff16565b61146a90919063ffffffff16565b9050919050565b6000808314156114025760009050611464565b600082846114109190611ac1565b905082848261141f9190611a90565b1461145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690611973565b60405180910390fd5b809150505b92915050565b60006114ac83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611585565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115049190611a3a565b10801561151a5750600e5461151883610662565b115b9050919050565b6000838311158290611569576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115609190611931565b60405180910390fd5b50600083856115789190611b1b565b9050809150509392505050565b600080831182906115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c39190611931565b60405180910390fd5b50600083856115db9190611a90565b9050809150509392505050565b6000813590506115f781611d9e565b92915050565b60008151905061160c81611db5565b92915050565b60008135905061162181611dcc565b92915050565b60008151905061163681611dcc565b92915050565b60006020828403121561165257611651611d10565b5b6000611660848285016115e8565b91505092915050565b600080604083850312156116805761167f611d10565b5b600061168e858286016115e8565b925050602061169f85828601611612565b9150509250929050565b6000602082840312156116bf576116be611d10565b5b60006116cd848285016115fd565b91505092915050565b6000602082840312156116ec576116eb611d10565b5b60006116fa84828501611612565b91505092915050565b60006020828403121561171957611718611d10565b5b600061172784828501611627565b91505092915050565b6000806040838503121561174757611746611d10565b5b600061175585828601611612565b925050602061176685828601611612565b9150509250929050565b600061177c8383611788565b60208301905092915050565b61179181611b4f565b82525050565b6117a081611b4f565b82525050565b60006117b1826119f5565b6117bb8185611a18565b93506117c6836119e5565b8060005b838110156117f75781516117de8882611770565b97506117e983611a0b565b9250506001810190506117ca565b5085935050505092915050565b61180d81611b97565b82525050565b600061181e82611a00565b6118288185611a29565b9350611838818560208601611ba9565b61184181611d15565b840191505092915050565b6000611859601b83611a29565b915061186482611d26565b602082019050919050565b600061187c602183611a29565b915061188782611d4f565b604082019050919050565b61189b81611b8d565b82525050565b60006020820190506118b66000830184611797565b92915050565b60006040820190506118d16000830185611797565b6118de6020830184611892565b9392505050565b60006080820190506118fa6000830187611804565b818103602083015261190c81866117a6565b905061191b6040830185611797565b6119286060830184611892565b95945050505050565b6000602082019050818103600083015261194b8184611813565b905092915050565b6000602082019050818103600083015261196c8161184c565b9050919050565b6000602082019050818103600083015261198c8161186f565b9050919050565b60006020820190506119a86000830184611892565b92915050565b60006060820190506119c36000830186611892565b6119d06020830185611892565b6119dd6040830184611892565b949350505050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611a4582611b8d565b9150611a5083611b8d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611a8557611a84611c25565b5b828201905092915050565b6000611a9b82611b8d565b9150611aa683611b8d565b925082611ab657611ab5611c54565b5b828204905092915050565b6000611acc82611b8d565b9150611ad783611b8d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611b1057611b0f611c25565b5b828202905092915050565b6000611b2682611b8d565b9150611b3183611b8d565b925082821015611b4457611b43611c25565b5b828203905092915050565b6000611b5a82611b6d565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611ba282611b8d565b9050919050565b60005b83811015611bc7578082015181840152602081019050611bac565b83811115611bd6576000848401525b50505050565b6000611be782611b8d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611c1a57611c19611c25565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b611da781611b4f565b8114611db257600080fd5b50565b611dbe81611b61565b8114611dc957600080fd5b50565b611dd581611b8d565b8114611de057600080fd5b5056fea2646970667358221220eae43b9aa4d23a96009e7ab0adf88eb511c4d9b1a7d3e1f83aa6250f56e05d7f64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106103545760003560e01c806384134c1f116101c6578063dc07b617116100f7578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610c31578063f84ba65d14610c5a578063f887ea4014610c83578063fe9fbb8014610cae5761035b565b8063f1f3bca314610bb4578063f2fde38b14610bf1578063f429389014610c1a5761035b565b8063e1dcc71f116100d1578063e1dcc71f14610b1e578063e96fada214610b49578063f0b37c0414610b74578063f0fc6bca14610b9d5761035b565b8063dc07b61714610aa1578063dd62ed3e14610ab8578063df20fd4914610af55761035b565b8063b210b06d11610164578063c6729f261161013e578063c6729f26146109e5578063ca33e64c14610a0e578063d51ed1c814610a39578063d806d12f14610a765761035b565b8063b210b06d1461097a578063b6a5d7de14610991578063bf56b371146109ba5761035b565b80639d1944f5116101a05780639d1944f5146108c0578063a4b45c00146108e9578063a8aa1b3114610912578063a9059cbb1461093d5761035b565b806384134c1f14610853578063893d20e81461086a57806395d89b41146108955761035b565b80632f54bf6e116102a05780635c85974f1161023e5780636ddd1713116102185780636ddd17131461079757806370a08231146107c25780637d1db4a5146107ff57806382334b941461082a5761035b565b80635c85974f1461071a57806363a803e114610743578063658d4b7f1461076e5761035b565b80633bb8a8d41161027a5780633bb8a8d4146106605780634838d1651461068b578063537df3b6146106b4578063571ac8b0146106dd5761035b565b80632f54bf6e146105cf5780632f5620d11461060c578063313ce567146106355761035b565b80631a9aea0a1161030d57806323b872dd116102e757806323b872dd1461050157806328fd31981461053e5780632b112e491461057b5780632d48e896146105a65761035b565b80631a9aea0a14610484578063201e7991146104af5780632375ce40146104d85761035b565b80630445b6671461036057806304a66b481461038b57806306fdde03146103b4578063095ea7b3146103df5780631161ae391461041c57806318160ddd146104595761035b565b3661035b57005b600080fd5b34801561036c57600080fd5b50610375610ceb565b6040516103829190614a4a565b60405180910390f35b34801561039757600080fd5b506103b260048036038101906103ad9190614445565b610cf1565b005b3480156103c057600080fd5b506103c9610da0565b6040516103d691906148e8565b60405180910390f35b3480156103eb57600080fd5b506104066004803603810190610401919061419d565b610ddd565b6040516104139190614866565b60405180910390f35b34801561042857600080fd5b50610443600480360381019061043e919061435f565b610ecf565b6040516104509190614866565b60405180910390f35b34801561046557600080fd5b5061046e610ee4565b60405161047b9190614a4a565b60405180910390f35b34801561049057600080fd5b50610499610eee565b6040516104a69190614866565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061435f565b610f01565b005b3480156104e457600080fd5b506104ff60048036038101906104fa919061439f565b610f5b565b005b34801561050d57600080fd5b506105286004803603810190610523919061410a565b610fe1565b6040516105359190614866565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190614070565b6112be565b6040516105729190614a4a565b60405180910390f35b34801561058757600080fd5b50610590611372565b60405161059d9190614a4a565b60405180910390f35b3480156105b257600080fd5b506105cd60048036038101906105c8919061435f565b6113f4565b005b3480156105db57600080fd5b506105f660048036038101906105f19190614070565b6114cf565b6040516106039190614866565b60405180910390f35b34801561061857600080fd5b50610633600480360381019061062e919061424a565b611528565b005b34801561064157600080fd5b5061064a6115cf565b6040516106579190614ae8565b60405180910390f35b34801561066c57600080fd5b506106756115d8565b6040516106829190614866565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190614070565b6115eb565b005b3480156106c057600080fd5b506106db60048036038101906106d69190614070565b61171b565b005b3480156106e957600080fd5b5061070460048036038101906106ff9190614070565b61184a565b6040516107119190614866565b60405180910390f35b34801561072657600080fd5b50610741600480360381019061073c91906142c5565b61187d565b005b34801561074f57600080fd5b506107586118eb565b6040516107659190614a4a565b60405180910390f35b34801561077a57600080fd5b506107956004803603810190610790919061415d565b6118f1565b005b3480156107a357600080fd5b506107ac611994565b6040516107b99190614866565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190614070565b6119a7565b6040516107f69190614a4a565b60405180910390f35b34801561080b57600080fd5b506108146119f0565b6040516108219190614a4a565b60405180910390f35b34801561083657600080fd5b50610851600480360381019061084c919061431f565b6119f6565b005b34801561085f57600080fd5b50610868611ab5565b005b34801561087657600080fd5b5061087f611b6e565b60405161088c919061477d565b60405180910390f35b3480156108a157600080fd5b506108aa611b97565b6040516108b791906148e8565b60405180910390f35b3480156108cc57600080fd5b506108e760048036038101906108e291906142c5565b611bd4565b005b3480156108f557600080fd5b50610910600480360381019061090b91906140ca565b611c35565b005b34801561091e57600080fd5b50610927611d03565b604051610934919061477d565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f919061419d565b611d29565b6040516109719190614866565b60405180910390f35b34801561098657600080fd5b5061098f611e1b565b005b34801561099d57600080fd5b506109b860048036038101906109b39190614070565b611e6d565b005b3480156109c657600080fd5b506109cf611f0f565b6040516109dc9190614a4a565b60405180910390f35b3480156109f157600080fd5b50610a0c6004803603810190610a0791906141dd565b611f15565b005b348015610a1a57600080fd5b50610a23611f7a565b604051610a30919061477d565b60405180910390f35b348015610a4557600080fd5b50610a606004803603810190610a5b91906142c5565b611fa0565b604051610a6d9190614a4a565b60405180910390f35b348015610a8257600080fd5b50610a8b612012565b604051610a989190614a4a565b60405180910390f35b348015610aad57600080fd5b50610ab66120c5565b005b348015610ac457600080fd5b50610adf6004803603810190610ada91906140ca565b61211e565b604051610aec9190614a4a565b60405180910390f35b348015610b0157600080fd5b50610b1c6004803603810190610b17919061420a565b6121a5565b005b348015610b2a57600080fd5b50610b33612212565b604051610b409190614866565b60405180910390f35b348015610b5557600080fd5b50610b5e612225565b604051610b6b919061477d565b60405180910390f35b348015610b8057600080fd5b50610b9b6004803603810190610b969190614070565b61224b565b005b348015610ba957600080fd5b50610bb26122ee565b005b348015610bc057600080fd5b50610bdb6004803603810190610bd691906141dd565b61237d565b604051610be89190614a4a565b60405180910390f35b348015610bfd57600080fd5b50610c186004803603810190610c13919061409d565b6123f2565b005b348015610c2657600080fd5b50610c2f61250b565b005b348015610c3d57600080fd5b50610c586004803603810190610c53919061415d565b6125c4565b005b348015610c6657600080fd5b50610c816004803603810190610c7c919061415d565b612864565b005b348015610c8f57600080fd5b50610c98612907565b604051610ca59190614881565b60405180910390f35b348015610cba57600080fd5b50610cd56004803603810190610cd09190614070565b61292d565b604051610ce29190614866565b60405180910390f35b60295481565b610cfa3361292d565b610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3090614a2a565b60405180910390fd5b84600f81905550836010819055508260118190555081601281905550610d8c82610d7e85610d70888a61298390919063ffffffff16565b61298390919063ffffffff16565b61298390919063ffffffff16565b601381905550806014819055505050505050565b60606040518060400160405280600d81526020017f43426f6d62657220546f6b656e00000000000000000000000000000000000000815250905090565b600081600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ebd9190614a4a565b60405180910390a36001905092915050565b600082610edb83611fa0565b11905092915050565b6000600654905090565b600960009054906101000a900460ff1681565b610f0a3361292d565b610f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4090614a2a565b60405180910390fd5b81601781905550806018819055505050565b610f643361292d565b610fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9a90614a2a565b60405180910390fd5b60028284610fb19190614bb9565b11158015610fbe57508183115b610fc757600080fd5b82601c8190555081601d8190555080601f81905550505050565b6000602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790614a0a565b60405180910390fd5b600960009054906101000a900460ff16156110c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b7906149ca565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146112aa57611229826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6112b5848484612a45565b90509392505050565b6000602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166328fd3198836040518263ffffffff1660e01b815260040161131b919061477d565b60206040518083038186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136b91906142f2565b9050919050565b60006113ef6113a2600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b6113e16113d0600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b60065461302e90919063ffffffff16565b61302e90919063ffffffff16565b905090565b6113fd3361292d565b61143c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143390614a2a565b60405180910390fd5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401611499929190614abf565b600060405180830381600087803b1580156114b357600080fd5b505af11580156114c7573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6115313361292d565b611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790614a2a565b60405180910390fd5b84602060006101000a81548160ff02191690831515021790555083602181905550600060228190555082602381905550816024819055504360258190555080602060016101000a81548160ff0219169083151502179055505050505050565b60006012905090565b602060009054906101000a900460ff1681565b6115f4336114cf565b611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a906149ea565b60405180910390fd5b602b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b79061496a565b60405180910390fd5b6001602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611724336114cf565b611763576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175a906149ea565b60405180910390fd5b602b60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e69061498a565b60405180910390fd5b6000602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611876827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ddd565b9050919050565b6118863361292d565b6118c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bc90614a2a565b60405180910390fd5b6103e86006546118d59190614bb9565b8110156118e157600080fd5b8060078190555050565b60085481565b6118fa3361292d565b611939576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193090614a2a565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602860009054906101000a900460ff1681565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b6119ff3361292d565b611a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3590614a2a565b60405180910390fd5b611a6a82600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613078565b8015611ab15742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f54604051611aa89190614a4a565b60405180910390a15b5050565b611abe336114cf565b611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af4906149ea565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611b6a573d6000803e3d6000fd5b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f43424f4d42455200000000000000000000000000000000000000000000000000815250905090565b611bdd3361292d565b611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390614a2a565b60405180910390fd5b620b71b08110611c2b57600080fd5b8060278190555050565b611c3e3361292d565b611c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7490614a2a565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000602b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614a0a565b60405180910390fd5b600960009054906101000a900460ff1615611e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dff906149ca565b60405180910390fd5b611e13338484612a45565b905092915050565b611e243361292d565b611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a90614a2a565b60405180910390fd5b6000601e81905550565b611e76336114cf565b611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac906149ea565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601b5481565b611f1e336114cf565b611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906149ea565b60405180910390fd5b80600960006101000a81548160ff02191690831515021790555050565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061200b611fad611372565b611ffd611fee6002611fe0601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119a7565b61325690919063ffffffff16565b8561325690919063ffffffff16565b6132d190919063ffffffff16565b9050919050565b60008061203e42612030601f54601e5461298390919063ffffffff16565b61302e90919063ffffffff16565b90506000612081601354612073601d54612065601c5460135461325690919063ffffffff16565b6132d190919063ffffffff16565b61302e90919063ffffffff16565b90506120be6120ad601f5461209f858561325690919063ffffffff16565b6132d190919063ffffffff16565b60135461298390919063ffffffff16565b9250505090565b6120ce336114cf565b61210d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612104906149ea565b60405180910390fd5b671bc16d674ec80000600881905550565b6000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6121ae3361292d565b6121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614a2a565b60405180910390fd5b81602860006101000a81548160ff021916908315150217905550806029819055505050565b602060019054906101000a900460ff1681565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612254336114cf565b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a906149ea565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166315f7e05e336040518263ffffffff1660e01b8152600401612349919061477d565b600060405180830381600087803b15801561236357600080fd5b505af1158015612377573d6000803e3d6000fd5b50505050565b6000436001601b5461238f9190614b63565b106123b1576123aa600160145461302e90919063ffffffff16565b90506123ed565b8180156123d35750426123d1601f54601e5461298390919063ffffffff16565b115b156123e7576123e0612012565b90506123ed565b60135490505b919050565b6123fb336114cf565b61243a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612431906149ea565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516125009190614798565b60405180910390a150565b6125143361292d565b612553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254a90614a2a565b60405180910390fd5b6000479050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156125c0573d6000803e3d6000fd5b5050565b6125cd3361292d565b61260c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260390614a2a565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156126965750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61269f57600080fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561279157602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b815260040161275a9291906147b3565b600060405180830381600087803b15801561277457600080fd5b505af1158015612788573d6000803e3d6000fd5b50505050612860565b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161282d9291906147dc565b600060405180830381600087803b15801561284757600080fd5b505af115801561285b573d6000803e3d6000fd5b505050505b5050565b61286d3361292d565b6128ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a390614a2a565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008082846129929190614b63565b9050838110156129d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ce9061492a565b60405180910390fd5b8091505092915050565b6000838311158290612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2091906148e8565b60405180910390fd5b5060008385612a389190614c44565b9050809150509392505050565b6000602a60009054906101000a900460ff1615612a6e57612a6784848461331b565b9050613027565b612a7884836134ee565b612a8061358b565b15612a8e57612a8d613662565b5b612a96613c17565b15612aa457612aa3613cca565b5b612aac613d9c565b158015612b065750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15612b60576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411612b5757600080fd5b612b5f613da9565b5b612be9826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612c3785613db2565b612c415782612c4d565b612c4c858585613e09565b5b9050612ca181600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612e0757602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612dd19291906147dc565b600060405180830381600087803b158015612deb57600080fd5b505af1925050508015612dfc575060015b612e0557612e06565b5b5b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2a57602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612ef49291906147dc565b600060405180830381600087803b158015612f0e57600080fd5b505af1925050508015612f1f575060015b612f2857612f29565b5b5b602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796027546040518263ffffffff1660e01b8152600401612f879190614a4a565b600060405180830381600087803b158015612fa157600080fd5b505af1925050508015612fb2575060015b612fbb57612fbc565b5b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130199190614a4a565b60405180910390a360019150505b9392505050565b600061307083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129e1565b905092915050565b6001602a60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156130b0576130af614df9565b5b6040519080825280602002602001820160405280156130de5781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061311857613117614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050308160018151811061316757613166614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401613204949392919061489c565b6000604051808303818588803b15801561321d57600080fd5b505af1158015613231573d6000803e3d6000fd5b5050505050506000602a60006101000a81548160ff0219169083151502179055505050565b60008083141561326957600090506132cb565b600082846132779190614bea565b90508284826132869190614bb9565b146132c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bd906149aa565b60405180910390fd5b809150505b92915050565b600061331383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613fa4565b905092915050565b60006133a6826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129e19092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061343b82600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134db9190614a4a565b60405180910390a3600190509392505050565b600754811115806135485750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613587576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357e9061490a565b60405180910390fd5b5050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156135f85750602a60009054906101000a900460ff16155b80156136105750602860009054906101000a900460ff165b801561365d5750602954600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602a60006101000a81548160ff021916908315150217905550600061368d601754601854610ecf565b61369957600f5461369c565b60005b905060006136dc60026136ce6013546136c08660295461325690919063ffffffff16565b6132d190919063ffffffff16565b6132d190919063ffffffff16565b905060006136f58260295461302e90919063ffffffff16565b90506000600267ffffffffffffffff81111561371457613713614df9565b5b6040519080825280602002602001820160405280156137425781602001602082028036833780820191505090505b509050308160008151811061375a57613759614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106137cb576137ca614dca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161386e959493929190614a65565b600060405180830381600087803b15801561388857600080fd5b505af115801561389c573d6000803e3d6000fd5b5050505060006138b5824761302e90919063ffffffff16565b905060006138e16138d06002896132d190919063ffffffff16565b60135461302e90919063ffffffff16565b9050600061391d600261390f846139018c8861325690919063ffffffff16565b6132d190919063ffffffff16565b6132d190919063ffffffff16565b905060006139488361393a6011548761325690919063ffffffff16565b6132d190919063ffffffff16565b90506000613973846139656012548861325690919063ffffffff16565b6132d190919063ffffffff16565b9050602660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156139df57600080fd5b505af1935050505080156139f1575060015b6139fa576139fb565b5b6000601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051613a4790614768565b600060405180830381858888f193505050503d8060008114613a85576040519150601f19603f3d011682016040523d82523d6000602084013e613a8a565b606091505b5050905080613ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ac59061494a565b60405180910390fd5b60008a1115613bef57601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d600080601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613b6096959493929190614805565b6060604051808303818588803b158015613b7957600080fd5b505af1158015613b8d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613bb291906143f2565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b604051613be6929190614abf565b60405180910390a15b50505050505050505050506000602a60006101000a81548160ff021916908315150217905550565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015613c845750602a60009054906101000a900460ff16155b8015613c9c5750602060009054906101000a900460ff165b8015613cb7575043602454602554613cb49190614b63565b11155b8015613cc557506023544710155b905090565b613cf8602354600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613078565b602060019054906101000a900460ff1615613d4e5742601e819055507f39d2389ec5c1fa77b2c0d374bc61b6d7bd97ccba280fcdeb4e9c7644898d7c3a601f54604051613d459190614a4a565b60405180910390a15b43602581905550613d6c60235460225461298390919063ffffffff16565b6022819055506021546022541115613d9a576000602060006101000a81548160ff0219169083151502179055505b565b600080601b541415905090565b43601b81905550565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613e8b601454613e7d613e6e601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161461237d565b8661325690919063ffffffff16565b6132d190919063ffffffff16565b9050613edf81600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461298390919063ffffffff16565b600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f7f9190614a4a565b60405180910390a3613f9a818461302e90919063ffffffff16565b9150509392505050565b60008083118290613feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613fe291906148e8565b60405180910390fd5b5060008385613ffa9190614bb9565b9050809150509392505050565b60008135905061401681615001565b92915050565b60008135905061402b81615018565b92915050565b6000813590506140408161502f565b92915050565b60008135905061405581615046565b92915050565b60008151905061406a81615046565b92915050565b60006020828403121561408657614085614e28565b5b600061409484828501614007565b91505092915050565b6000602082840312156140b3576140b2614e28565b5b60006140c18482850161401c565b91505092915050565b600080604083850312156140e1576140e0614e28565b5b60006140ef85828601614007565b925050602061410085828601614007565b9150509250929050565b60008060006060848603121561412357614122614e28565b5b600061413186828701614007565b935050602061414286828701614007565b925050604061415386828701614046565b9150509250925092565b6000806040838503121561417457614173614e28565b5b600061418285828601614007565b925050602061419385828601614031565b9150509250929050565b600080604083850312156141b4576141b3614e28565b5b60006141c285828601614007565b92505060206141d385828601614046565b9150509250929050565b6000602082840312156141f3576141f2614e28565b5b600061420184828501614031565b91505092915050565b6000806040838503121561422157614220614e28565b5b600061422f85828601614031565b925050602061424085828601614046565b9150509250929050565b600080600080600060a0868803121561426657614265614e28565b5b600061427488828901614031565b955050602061428588828901614046565b945050604061429688828901614046565b93505060606142a788828901614046565b92505060806142b888828901614031565b9150509295509295909350565b6000602082840312156142db576142da614e28565b5b60006142e984828501614046565b91505092915050565b60006020828403121561430857614307614e28565b5b60006143168482850161405b565b91505092915050565b6000806040838503121561433657614335614e28565b5b600061434485828601614046565b925050602061435585828601614031565b9150509250929050565b6000806040838503121561437657614375614e28565b5b600061438485828601614046565b925050602061439585828601614046565b9150509250929050565b6000806000606084860312156143b8576143b7614e28565b5b60006143c686828701614046565b93505060206143d786828701614046565b92505060406143e886828701614046565b9150509250925092565b60008060006060848603121561440b5761440a614e28565b5b60006144198682870161405b565b935050602061442a8682870161405b565b925050604061443b8682870161405b565b9150509250925092565b600080600080600060a0868803121561446157614460614e28565b5b600061446f88828901614046565b955050602061448088828901614046565b945050604061449188828901614046565b93505060606144a288828901614046565b92505060806144b388828901614046565b9150509295509295909350565b60006144cc83836144e7565b60208301905092915050565b6144e181614cdf565b82525050565b6144f081614c78565b82525050565b6144ff81614c78565b82525050565b600061451082614b13565b61451a8185614b36565b935061452583614b03565b8060005b8381101561455657815161453d88826144c0565b975061454883614b29565b925050600181019050614529565b5085935050505092915050565b61456c81614c9c565b82525050565b61457b81614cf1565b82525050565b61458a81614d03565b82525050565b600061459b82614b1e565b6145a58185614b52565b93506145b5818560208601614d39565b6145be81614e2d565b840191505092915050565b60006145d6601183614b52565b91506145e182614e3e565b602082019050919050565b60006145f9601b83614b52565b915061460482614e67565b602082019050919050565b600061461c601e83614b52565b915061462782614e90565b602082019050919050565b600061463f601883614b52565b915061464a82614eb9565b602082019050919050565b6000614662601883614b52565b915061466d82614ee2565b602082019050919050565b6000614685602183614b52565b915061469082614f0b565b604082019050919050565b60006146a8601283614b52565b91506146b382614f5a565b602082019050919050565b60006146cb600683614b52565b91506146d682614f83565b602082019050919050565b60006146ee600083614b47565b91506146f982614fac565b600082019050919050565b6000614711601783614b52565b915061471c82614faf565b602082019050919050565b6000614734600b83614b52565b915061473f82614fd8565b602082019050919050565b61475381614cc8565b82525050565b61476281614cd2565b82525050565b6000614773826146e1565b9150819050919050565b600060208201905061479260008301846144f6565b92915050565b60006020820190506147ad60008301846144d8565b92915050565b60006040820190506147c860008301856144f6565b6147d56020830184614581565b9392505050565b60006040820190506147f160008301856144f6565b6147fe602083018461474a565b9392505050565b600060c08201905061481a60008301896144f6565b614827602083018861474a565b6148346040830187614581565b6148416060830186614581565b61484e60808301856144f6565b61485b60a083018461474a565b979650505050505050565b600060208201905061487b6000830184614563565b92915050565b60006020820190506148966000830184614572565b92915050565b60006080820190506148b16000830187614581565b81810360208301526148c38186614505565b90506148d260408301856144f6565b6148df606083018461474a565b95945050505050565b600060208201905081810360008301526149028184614590565b905092915050565b60006020820190508181036000830152614923816145c9565b9050919050565b60006020820190508181036000830152614943816145ec565b9050919050565b600060208201905081810360008301526149638161460f565b9050919050565b6000602082019050818103600083015261498381614632565b9050919050565b600060208201905081810360008301526149a381614655565b9050919050565b600060208201905081810360008301526149c381614678565b9050919050565b600060208201905081810360008301526149e38161469b565b9050919050565b60006020820190508181036000830152614a03816146be565b9050919050565b60006020820190508181036000830152614a2381614704565b9050919050565b60006020820190508181036000830152614a4381614727565b9050919050565b6000602082019050614a5f600083018461474a565b92915050565b600060a082019050614a7a600083018861474a565b614a876020830187614581565b8181036040830152614a998186614505565b9050614aa860608301856144f6565b614ab5608083018461474a565b9695505050505050565b6000604082019050614ad4600083018561474a565b614ae1602083018461474a565b9392505050565b6000602082019050614afd6000830184614759565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614b6e82614cc8565b9150614b7983614cc8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614bae57614bad614d6c565b5b828201905092915050565b6000614bc482614cc8565b9150614bcf83614cc8565b925082614bdf57614bde614d9b565b5b828204905092915050565b6000614bf582614cc8565b9150614c0083614cc8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c3957614c38614d6c565b5b828202905092915050565b6000614c4f82614cc8565b9150614c5a83614cc8565b925082821015614c6d57614c6c614d6c565b5b828203905092915050565b6000614c8382614ca8565b9050919050565b6000614c9582614ca8565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614cea82614d15565b9050919050565b6000614cfc82614d15565b9050919050565b6000614d0e82614cc8565b9050919050565b6000614d2082614d27565b9050919050565b6000614d3282614ca8565b9050919050565b60005b83811015614d57578082015181840152602081019050614d3c565b83811115614d66576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f72656365697665722072656a656374656420455448207472616e736665720000600082015250565b7f7573657220616c726561647920626c61636b6c69737465640000000000000000600082015250565b7f7573657220616c72656164792077686974656c69737465640000000000000000600082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f426c6f636b6564207472616e73666572732e0000000000000000000000000000600082015250565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b50565b7f526563697069656e74206973206261636b6c6973746564000000000000000000600082015250565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b61500a81614c78565b811461501557600080fd5b50565b61502181614c8a565b811461502c57600080fd5b50565b61503881614c9c565b811461504357600080fd5b50565b61504f81614cc8565b811461505a57600080fd5b5056fea2646970667358221220729a941d27845e4319b81fd8509061ff1775f37f5fc4e1452cc7615c69bbb09564736f6c63430008070033

Deployed Bytecode Sourcemap

11511:16314:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13490:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24762:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14828:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15250:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27118:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14558:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12161:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25619:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23463:342;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15898:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26490:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26793:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26193:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3355:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23010:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14652:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13111:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27276:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27486:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15474:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23990:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12089:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24498:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13453:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14998:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12027:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21495:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25998:183;;;;;;;;;;;;;:::i;:::-;;14914:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14738:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26645:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25219:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12857:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15604:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21938:105;;;;;;;;;;;;;:::i;:::-;;3028:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12885:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22907:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12655:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26943:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18436:391;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21826:100;;;;;;;;;;;;;:::i;:::-;;15109:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25455:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13156:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12698:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3198:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26388:90;;;;;;;;;;;;;:::i;:::-;;18122:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3755:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25810:180;;;;;;;;;;;;;:::i;:::-;;24143:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24626:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12826:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3529:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13490:49;;;;:::o;24762:449::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24941:13:::1;24926:12;:28;;;;24978:11;24965:10;:24;;;;25016:14;25000:13;:30;;;;25056:13;25041:12;:28;;;;25091:69;25146:13;25091:50;25126:14;25091:30;25109:11;25091:13;:17;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;25080:8;:80;;;;25188:15;25171:14;:32;;;;24762:449:::0;;;;;:::o;14828:80::-;14876:13;14900:5;;;;;;;;;;;;;;;;;14893:12;;14828:80;:::o;15250:216::-;15325:4;15377:6;15342:11;:23;15354:10;15342:23;;;;;;;;;;;;;;;:32;15366:7;15342:32;;;;;;;;;;;;;;;:41;;;;15420:7;15399:37;;15408:10;15399:37;;;15429:6;15399:37;;;;;;:::i;:::-;;;;;;;;15454:4;15447:11;;15250:216;;;;:::o;27118:150::-;27198:4;27254:6;27222:29;27242:8;27222:19;:29::i;:::-;:38;27215:45;;27118:150;;;;:::o;14558:88::-;14613:7;14631:12;;14624:19;;14558:88;:::o;12161:32::-;;;;;;;;;;;;;:::o;25619:183::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25735:7:::1;25717:15;:25;;;;25782:12;25753:26;:41;;;;25619:183:::0;;:::o;23463:342::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23623:1:::1;23608:11;23596:9;:23;;;;:::i;:::-;:28;;:55;;;;;23640:11;23628:9;:23;23596:55;23588:64;;;::::0;::::1;;23692:9;23663:26;:38;;;;23743:11;23712:28;:42;;;;23791:6;23765:23;:32;;;;23463:342:::0;;;:::o;15898:510::-;15998:4;16024:13;:25;16038:10;16024:25;;;;;;;;;;;;;;;;;;;;;;;;;16023:26;16015:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;16107:12;;;;;;;;;;;16106:13;16098:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;16193:17;16158:11;:19;16170:6;16158:19;;;;;;;;;;;;;;;:31;16178:10;16158:31;;;;;;;;;;;;;;;;:52;16155:186;;16260:69;16296:6;16260:69;;;;;;;;;;;;;;;;;:11;:19;16272:6;16260:19;;;;;;;;;;;;;;;:31;16280:10;16260:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;16226:11;:19;16238:6;16226:19;;;;;;;;;;;;;;;:31;16246:10;16226:31;;;;;;;;;;;;;;;:103;;;;16155:186;16360:40;16374:6;16382:9;16393:6;16360:13;:40::i;:::-;16353:47;;15898:510;;;;;:::o;26490:146::-;26559:7;26586:11;;;;;;;;;;;:29;;;26616:11;26586:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26579:49;;26490:146;;;:::o;26793:142::-;26846:7;26873:54;26911:15;26921:4;;;;;;;;;;;26911:9;:15::i;:::-;26873:33;26890:15;26900:4;;;;;;;;;;;26890:9;:15::i;:::-;26873:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;26866:61;;26793:142;:::o;26193:183::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26303:11:::1;;;;;;;;;;;:35;;;26339:10;26351:16;26303:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26193:183:::0;;:::o;3355:103::-;3410:4;3445:5;;;;;;;;;;;3434:16;;:7;:16;;;3427:23;;3355:103;;;:::o;23010:445::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23186:8:::1;23165:18;;:29;;;;;;;;;;;;;;;;;;23222:4;23205:14;:21;;;;23262:1;23237:22;:26;;;;23294:7;23274:17;:27;;;;23337:7;23312:22;:32;;;;23378:12;23355:20;:35;;;;23425:22;23401:21;;:46;;;;;;;;;;;;;;;;;;23010:445:::0;;;;;:::o;14652:80::-;14704:5;11959:2;14713:16;;14652:80;:::o;13111:38::-;;;;;;;;;;;;;:::o;27276:198::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27347:13:::1;:20;27361:5;27347:20;;;;;;;;;;;;;;;;;;;;;;;;;27346:21;27338:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;27430:4;27407:13;:20;27421:5;27407:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;27276:198:::0;:::o;27486:208::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27566:13:::1;:20;27580:5;27566:20;;;;;;;;;;;;;;;;;;;;;;;;;27558:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27649:5;27626:13;:20;27640:5;27626:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27486:208:::0;:::o;15474:122::-;15529:4;15553:35;15561:7;15570:17;15553:7;:35::i;:::-;15546:42;;15474:122;;;:::o;23990:145::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24090:4:::1;24075:12;;:19;;;;:::i;:::-;24065:6;:29;;24057:38;;;::::0;::::1;;24121:6;24106:12;:21;;;;23990:145:::0;:::o;12089:51::-;;;;:::o;24498:120::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24604:6:::1;24582:11;:19;24594:6;24582:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24498:120:::0;;:::o;13453:30::-;;;;;;;;;;;;;:::o;14998:105::-;15064:7;15082:9;:18;15092:7;15082:18;;;;;;;;;;;;;;;;15075:25;;14998:105;;;:::o;12027:47::-;;;;:::o;21495:318::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21603:23:::1;21613:6;21621:4;;;;;;;;;;;21603:9;:23::i;:::-;21640:24;21637:169;;;21711:15;21680:28;:46;;;;21746:48;21770:23;;21746:48;;;;;;:::i;:::-;;;;;;;;21637:169;21495:318:::0;;:::o;25998:183::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;26054:26:::1;26083:21;26054:50;;26123:20;;;;;;;;;;;26115:38;;:58;26154:18;26115:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;26043:138;25998:183::o:0;14914:78::-;14966:7;14984:5;;;;;;;;;;;14977:12;;14914:78;:::o;14738:84::-;14788:13;14812:7;;;;;;;;;;;;;;;;;14805:14;;14738:84;:::o;26645:136::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;26735:6:::1;26729:3;:12;26721:21;;;::::0;::::1;;26770:3;26753:14;:20;;;;26645:136:::0;:::o;25219:228::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25362:22:::1;25338:21;;:46;;;;;;;;;;;;;;;;;;25418:21;25395:20;;:44;;;;;;;;;;;;;;;;;;25219:228:::0;;:::o;12857:19::-;;;;;;;;;;;;;:::o;15604:286::-;15684:4;15710:13;:25;15724:10;15710:25;;;;;;;;;;;;;;;;;;;;;;;;;15709:26;15701:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15785:12;;;;;;;;;;;15784:13;15776:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;15838;15852:10;15864:9;15875:6;15838:13;:44::i;:::-;15831:51;;15604:286;;;;:::o;21938:105::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22034:1:::1;22003:28;:32;;;;21938:105::o:0;3028:94::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3110:4:::1;3088:14:::0;:19:::1;3103:3;3088:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3028:94:::0;:::o;12885:25::-;;;;:::o;22907:95::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22988:6:::1;22973:12;;:21;;;;;;;;;;;;;;;;;;22907:95:::0;:::o;12655:36::-;;;;;;;;;;;;;:::o;26943:167::-;27011:7;27038:64;27079:22;:20;:22::i;:::-;27038:36;27051:22;27071:1;27051:15;27061:4;;;;;;;;;;;27051:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;27038:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;27031:71;;26943:167;;;:::o;18436:391::-;18485:7;18505:21;18529:78;18591:15;18529:57;18562:23;;18529:28;;:32;;:57;;;;:::i;:::-;:61;;:78;;;;:::i;:::-;18505:102;;18618:19;18640:88;18719:8;;18640:74;18685:28;;18640:40;18653:26;;18640:8;;:12;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;:78;;:88;;;;:::i;:::-;18618:110;;18746:73;18759:59;18794:23;;18759:30;18775:13;18759:11;:15;;:30;;;;:::i;:::-;:34;;:59;;;;:::i;:::-;18746:8;;:12;;:73;;;;:::i;:::-;18739:80;;;;18436:391;:::o;21826:100::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;21900:18:::1;21882:15;:36;;;;21826:100::o:0;15109:133::-;15193:7;15211:11;:19;15223:6;15211:19;;;;;;;;;;;;;;;:28;15231:7;15211:28;;;;;;;;;;;;;;;;15204:35;;15109:133;;;;:::o;25455:156::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25561:8:::1;25547:11;;:22;;;;;;;;;;;;;;;;;;25596:7;25580:13;:23;;;;25455:156:::0;;:::o;13156:40::-;;;;;;;;;;;;;:::o;12698:35::-;;;;;;;;;;;;;:::o;3198:97::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3282:5:::1;3260:14;:19;3275:3;3260:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;3198:97:::0;:::o;26388:90::-;26433:11;;;;;;;;;;;:25;;;26459:10;26433:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26388:90::o;18122:306::-;18178:7;18219:12;18214:1;18201:10;;:14;;;;:::i;:::-;:30;18198:67;;18241:21;18260:1;18241:14;;:18;;:21;;;;:::i;:::-;18234:28;;;;18198:67;18278:7;:86;;;;;18349:15;18289:57;18322:23;;18289:28;;:32;;:57;;;;:::i;:::-;:75;18278:86;18275:120;;;18374:18;:16;:18::i;:::-;18367:25;;;;18275:120;18412:8;;18405:15;;18122:306;;;;:::o;3755:173::-;2744:19;2752:10;2744:7;:19::i;:::-;2736:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3839:3:::1;3831:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3875:4;3853:14:::0;:19:::1;3868:3;3853:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;3895:25;3916:3;3895:25;;;;;;:::i;:::-;;;;;;;;3755:173:::0;:::o;25810:180::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;25863:26:::1;25892:21;25863:50;;25932:20;;;;;;;;;;;25924:38;;:58;25963:18;25924:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;25852:138;25810:180::o:0;24143:347::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24258:4:::1;24240:23;;:6;:23;;;;:41;;;;;24277:4;;;;;;;;;;;24267:14;;:6;:14;;;;24240:41;24232:50;;;::::0;::::1;;24320:6;24293:16;:24;24310:6;24293:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;24340:6;24337:146;;;24362:11;;;;;;;;;;;:20;;;24383:6;24391:1;24362:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24337:146;;;24424:11;;;;;;;;;;;:20;;;24445:6;24453:9;:17;24463:6;24453:17;;;;;;;;;;;;;;;;24424:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24337:146;24143:347:::0;;:::o;24626:128::-;2913:24;2926:10;2913:12;:24::i;:::-;2905:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24740:6:::1;24714:15;:23;24730:6;24714:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;24626:128:::0;;:::o;12826:24::-;;;;;;;;;;;;;:::o;3529:107::-;3585:4;3609:14;:19;3624:3;3609:19;;;;;;;;;;;;;;;;;;;;;;;;;3602:26;;3529:107;;;:::o;85:181::-;143:7;163:9;179:1;175;:5;;;;:::i;:::-;163:17;;204:1;199;:6;;191:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;257:1;250:8;;;85:181;;;;:::o;414:192::-;500:7;533:1;528;:6;;536:12;520:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;560:9;576:1;572;:5;;;;:::i;:::-;560:17;;597:1;590:8;;;414:192;;;;;:::o;16416:1060::-;16508:4;16528:6;;;;;;;;;;;16525:63;;;16544:41;16559:6;16567:9;16578:6;16544:14;:41::i;:::-;16537:48;;;;16525:63;16608:28;16621:6;16629;16608:12;:28::i;:::-;16652:16;:14;:16::i;:::-;16649:35;;;16671:10;:8;:10::i;:::-;16649:35;16697:19;:17;:19::i;:::-;16694:48;;;16719:20;:18;:20::i;:::-;16694:48;16758:10;:8;:10::i;:::-;16757:11;:32;;;;;16785:4;;;;;;;;;;;16772:17;;:9;:17;;;16757:32;16754:81;;;16820:1;16800:9;:17;16810:6;16800:17;;;;;;;;;;;;;;;;:21;16792:30;;;;;;16824:8;:6;:8::i;:::-;16754:81;16867:53;16889:6;16867:53;;;;;;;;;;;;;;;;;:9;:17;16877:6;16867:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;16847:9;:17;16857:6;16847:17;;;;;;;;;;;;;;;:73;;;;16933:22;16958:21;16972:6;16958:13;:21::i;:::-;:67;;17019:6;16958:67;;;16982:34;16990:6;16998:9;17009:6;16982:7;:34::i;:::-;16958:67;16933:92;;17059:40;17084:14;17059:9;:20;17069:9;17059:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;17036:9;:20;17046:9;17036:20;;;;;;;;;;;;;;;:63;;;;17116:16;:24;17133:6;17116:24;;;;;;;;;;;;;;;;;;;;;;;;;17112:96;;17147:11;;;;;;;;;;;:20;;;17168:6;17176:9;:17;17186:6;17176:17;;;;;;;;;;;;;;;;17147:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17143:63;;;;;;17112:96;17222:16;:27;17239:9;17222:27;;;;;;;;;;;;;;;;;;;;;;;;;17218:105;;17256:11;;;;;;;;;;;:20;;;17277:9;17288;:20;17298:9;17288:20;;;;;;;;;;;;;;;;17256:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17252:69;;;;;;17218:105;17339:11;;;;;;;;;;;:19;;;17359:14;;17339:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17335:51;;;;;;17420:9;17403:43;;17412:6;17403:43;;;17431:14;17403:43;;;;;;:::i;:::-;;;;;;;;17464:4;17457:11;;;16416:1060;;;;;;:::o;272:136::-;330:7;357:43;361:1;364;357:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;350:50;;272:136;;;;:::o;22538:361::-;13601:4;13592:6;;:13;;;;;;;;;;;;;;;;;;22614:21:::1;22652:1;22638:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22614:40;;22675:4;;;;;;;;;;;22665;22670:1;22665:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;22708:4;22690;22695:1;22690:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;22726:6;;;;;;;;;;;:57;;;22791:6;22813:1;22829:4;22848:2;22865:15;22726:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;22603:296;13619:5:::0;13610:6;;:14;;;;;;;;;;;;;;;;;;22538:361;;:::o;612:250::-;670:7;699:1;694;:6;690:47;;;724:1;717:8;;;;690:47;749:9;765:1;761;:5;;;;:::i;:::-;749:17;;794:1;789;785;:5;;;;:::i;:::-;:10;777:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;853:1;846:8;;;612:250;;;;;:::o;868:132::-;926:7;953:39;957:1;960;953:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;946:46;;868:132;;;;:::o;17488:330::-;17581:4;17618:53;17640:6;17618:53;;;;;;;;;;;;;;;;;:9;:17;17628:6;17618:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;17598:9;:17;17608:6;17598:17;;;;;;;;;;;;;;;:73;;;;17705:32;17730:6;17705:9;:20;17715:9;17705:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;17682:9;:20;17692:9;17682:20;;;;;;;;;;;;;;;:55;;;;17770:9;17753:35;;17762:6;17753:35;;;17781:6;17753:35;;;;;;:::i;:::-;;;;;;;;17806:4;17799:11;;17488:330;;;;;:::o;17826:166::-;17923:12;;17913:6;:22;;:49;;;;17939:15;:23;17955:6;17939:23;;;;;;;;;;;;;;;;;;;;;;;;;17913:49;17905:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;17826:166;;:::o;19215:197::-;19264:4;19302;;;;;;;;;;;19288:18;;:10;:18;;;;:38;;;;;19320:6;;;;;;;;;;;19319:7;19288:38;:62;;;;;19339:11;;;;;;;;;;;19288:62;:116;;;;;19391:13;;19363:9;:24;19381:4;19363:24;;;;;;;;;;;;;;;;:41;;19288:116;19281:123;;19215:197;:::o;19426:1755::-;13601:4;13592:6;;:13;;;;;;;;;;;;;;;;;;19475:27:::1;19505:60;19521:15;;19538:26;;19505:15;:60::i;:::-;:79;;19572:12;;19505:79;;;19568:1;19505:79;19475:109;;19595:23;19621:59;19678:1;19621:52;19664:8;;19621:38;19639:19;19621:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;19595:85;;19691:20;19714:34;19732:15;19714:13;;:17;;:34;;;;:::i;:::-;19691:57;;19761:21;19799:1;19785:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19761:40;;19830:4;19812;19817:1;19812:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;19856:4;;;;;;;;;;;19846;19851:1;19846:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;19873:21;19897;19873:45;;19931:6;;;;;;;;;;;:57;;;20003:12;20030:1;20046:4;20073;20093:15;19931:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20130:17;20150:40;20176:13;20150:21;:25;;:40;;;;:::i;:::-;20130:60;;20201:19;20223:40;20236:26;20260:1;20236:19;:23;;:26;;;;:::i;:::-;20223:8;;:12;;:40;;;;:::i;:::-;20201:62;;20274:26;20303:58;20359:1;20303:51;20342:11;20303:34;20317:19;20303:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;20274:87;;20372:27;20402:45;20435:11;20402:28;20416:13;;20402:9;:13;;:28;;;;:::i;:::-;:32;;:45;;;;:::i;:::-;20372:75;;20458:26;20487:44;20519:11;20487:27;20501:12;;20487:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;20458:73;;20548:11;;;;;;;;;;;:19;;;20575;20548:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;20544:65;;;;;;20620:12;20669:20;;;;;;;;;;;20661:34;;20703:18;20728:5;20661:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20619:119;;;20757:7;20749:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;20833:1;20815:15;:19;20812:362;;;20850:6;;;;;;;;;;;:22;;;20880:18;20926:4;20950:15;20984:1;21004::::0;21024:21:::1;;;;;;;;;;;21064:15;20850:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21114:48;21126:18;21146:15;21114:48;;;;;;;:::i;:::-;;;;;;;;20812:362;19464:1717;;;;;;;;;;;13619:5:::0;13610:6;;:14;;;;;;;;;;;;;;;;;;19426:1755::o;21189:298::-;21241:4;21279;;;;;;;;;;;21265:18;;:10;:18;;;;:42;;;;;21301:6;;;;;;;;;;;21300:7;21265:42;:77;;;;;21324:18;;;;;;;;;;;21265:77;:155;;;;;21408:12;21382:22;;21359:20;;:45;;;;:::i;:::-;:61;;21265:155;:214;;;;;21462:17;;21437:21;:42;;21265:214;21258:221;;21189:298;:::o;22051:479::-;22101:34;22111:17;;22130:4;;;;;;;;;;;22101:9;:34::i;:::-;22149:21;;;;;;;;;;;22146:166;;;22217:15;22186:28;:46;;;;22252:48;22276:23;;22252:48;;;;;;:::i;:::-;;;;;;;;22146:166;22345:12;22322:20;:35;;;;22393:45;22420:17;;22393:22;;:26;;:45;;;;:::i;:::-;22368:22;:70;;;;22477:14;;22452:22;;:39;22449:74;;;22515:5;22494:18;;:26;;;;;;;;;;;;;;;;;;22449:74;22051:479::o;23813:90::-;23856:4;23894:1;23880:10;;:15;;23873:22;;23813:90;:::o;23911:71::-;23962:12;23949:10;:25;;;;23911:71::o;18000:114::-;18062:4;18087:11;:19;18099:6;18087:19;;;;;;;;;;;;;;;;;;;;;;;;;18086:20;18079:27;;18000:114;;;:::o;18835:372::-;18920:7;18940:17;18960:61;19006:14;;18960:41;18971:29;18995:4;;;;;;;;;;;18983:16;;:8;:16;;;18971:11;:29::i;:::-;18960:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;18940:81;;19061:39;19090:9;19061;:24;19079:4;19061:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;19034:9;:24;19052:4;19034:24;;;;;;;;;;;;;;;:66;;;;19141:4;19116:42;;19125:6;19116:42;;;19148:9;19116:42;;;;;;:::i;:::-;;;;;;;;19178:21;19189:9;19178:6;:10;;:21;;;;:::i;:::-;19171:28;;;18835:372;;;;;:::o;1006:345::-;1092:7;1191:1;1187;:5;1194:12;1179:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1218:9;1234:1;1230;:5;;;;:::i;:::-;1218:17;;1342:1;1335:8;;;1006:345;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:155::-;206:5;244:6;231:20;222:29;;260:41;295:5;260:41;:::i;:::-;152:155;;;;:::o;313:133::-;356:5;394:6;381:20;372:29;;410:30;434:5;410:30;:::i;:::-;313:133;;;;:::o;452:139::-;498:5;536:6;523:20;514:29;;552:33;579:5;552:33;:::i;:::-;452:139;;;;:::o;597:143::-;654:5;685:6;679:13;670:22;;701:33;728:5;701:33;:::i;:::-;597:143;;;;:::o;746:329::-;805:6;854:2;842:9;833:7;829:23;825:32;822:119;;;860:79;;:::i;:::-;822:119;980:1;1005:53;1050:7;1041:6;1030:9;1026:22;1005:53;:::i;:::-;995:63;;951:117;746:329;;;;:::o;1081:345::-;1148:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:119;;;1203:79;;:::i;:::-;1165:119;1323:1;1348:61;1401:7;1392:6;1381:9;1377:22;1348:61;:::i;:::-;1338:71;;1294:125;1081:345;;;;:::o;1432:474::-;1500:6;1508;1557:2;1545:9;1536:7;1532:23;1528:32;1525:119;;;1563:79;;:::i;:::-;1525:119;1683:1;1708:53;1753:7;1744:6;1733:9;1729:22;1708:53;:::i;:::-;1698:63;;1654:117;1810:2;1836:53;1881:7;1872:6;1861:9;1857:22;1836:53;:::i;:::-;1826:63;;1781:118;1432:474;;;;;:::o;1912:619::-;1989:6;1997;2005;2054:2;2042:9;2033:7;2029:23;2025:32;2022:119;;;2060:79;;:::i;:::-;2022:119;2180:1;2205:53;2250:7;2241:6;2230:9;2226:22;2205:53;:::i;:::-;2195:63;;2151:117;2307:2;2333:53;2378:7;2369:6;2358:9;2354:22;2333:53;:::i;:::-;2323:63;;2278:118;2435:2;2461:53;2506:7;2497:6;2486:9;2482:22;2461:53;:::i;:::-;2451:63;;2406:118;1912:619;;;;;:::o;2537:468::-;2602:6;2610;2659:2;2647:9;2638:7;2634:23;2630:32;2627:119;;;2665:79;;:::i;:::-;2627:119;2785:1;2810:53;2855:7;2846:6;2835:9;2831:22;2810:53;:::i;:::-;2800:63;;2756:117;2912:2;2938:50;2980:7;2971:6;2960:9;2956:22;2938:50;:::i;:::-;2928:60;;2883:115;2537:468;;;;;:::o;3011:474::-;3079:6;3087;3136:2;3124:9;3115:7;3111:23;3107:32;3104:119;;;3142:79;;:::i;:::-;3104:119;3262:1;3287:53;3332:7;3323:6;3312:9;3308:22;3287:53;:::i;:::-;3277:63;;3233:117;3389:2;3415:53;3460:7;3451:6;3440:9;3436:22;3415:53;:::i;:::-;3405:63;;3360:118;3011:474;;;;;:::o;3491:323::-;3547:6;3596:2;3584:9;3575:7;3571:23;3567:32;3564:119;;;3602:79;;:::i;:::-;3564:119;3722:1;3747:50;3789:7;3780:6;3769:9;3765:22;3747:50;:::i;:::-;3737:60;;3693:114;3491:323;;;;:::o;3820:468::-;3885:6;3893;3942:2;3930:9;3921:7;3917:23;3913:32;3910:119;;;3948:79;;:::i;:::-;3910:119;4068:1;4093:50;4135:7;4126:6;4115:9;4111:22;4093:50;:::i;:::-;4083:60;;4039:114;4192:2;4218:53;4263:7;4254:6;4243:9;4239:22;4218:53;:::i;:::-;4208:63;;4163:118;3820:468;;;;;:::o;4294:899::-;4383:6;4391;4399;4407;4415;4464:3;4452:9;4443:7;4439:23;4435:33;4432:120;;;4471:79;;:::i;:::-;4432:120;4591:1;4616:50;4658:7;4649:6;4638:9;4634:22;4616:50;:::i;:::-;4606:60;;4562:114;4715:2;4741:53;4786:7;4777:6;4766:9;4762:22;4741:53;:::i;:::-;4731:63;;4686:118;4843:2;4869:53;4914:7;4905:6;4894:9;4890:22;4869:53;:::i;:::-;4859:63;;4814:118;4971:2;4997:53;5042:7;5033:6;5022:9;5018:22;4997:53;:::i;:::-;4987:63;;4942:118;5099:3;5126:50;5168:7;5159:6;5148:9;5144:22;5126:50;:::i;:::-;5116:60;;5070:116;4294:899;;;;;;;;:::o;5199:329::-;5258:6;5307:2;5295:9;5286:7;5282:23;5278:32;5275:119;;;5313:79;;:::i;:::-;5275:119;5433:1;5458:53;5503:7;5494:6;5483:9;5479:22;5458:53;:::i;:::-;5448:63;;5404:117;5199:329;;;;:::o;5534:351::-;5604:6;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:64;5860:7;5851:6;5840:9;5836:22;5804:64;:::i;:::-;5794:74;;5750:128;5534:351;;;;:::o;5891:468::-;5956:6;5964;6013:2;6001:9;5992:7;5988:23;5984:32;5981:119;;;6019:79;;:::i;:::-;5981:119;6139:1;6164:53;6209:7;6200:6;6189:9;6185:22;6164:53;:::i;:::-;6154:63;;6110:117;6266:2;6292:50;6334:7;6325:6;6314:9;6310:22;6292:50;:::i;:::-;6282:60;;6237:115;5891:468;;;;;:::o;6365:474::-;6433:6;6441;6490:2;6478:9;6469:7;6465:23;6461:32;6458:119;;;6496:79;;:::i;:::-;6458:119;6616:1;6641:53;6686:7;6677:6;6666:9;6662:22;6641:53;:::i;:::-;6631:63;;6587:117;6743:2;6769:53;6814:7;6805:6;6794:9;6790:22;6769:53;:::i;:::-;6759:63;;6714:118;6365:474;;;;;:::o;6845:619::-;6922:6;6930;6938;6987:2;6975:9;6966:7;6962:23;6958:32;6955:119;;;6993:79;;:::i;:::-;6955:119;7113:1;7138:53;7183:7;7174:6;7163:9;7159:22;7138:53;:::i;:::-;7128:63;;7084:117;7240:2;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7211:118;7368:2;7394:53;7439:7;7430:6;7419:9;7415:22;7394:53;:::i;:::-;7384:63;;7339:118;6845:619;;;;;:::o;7470:663::-;7558:6;7566;7574;7623:2;7611:9;7602:7;7598:23;7594:32;7591:119;;;7629:79;;:::i;:::-;7591:119;7749:1;7774:64;7830:7;7821:6;7810:9;7806:22;7774:64;:::i;:::-;7764:74;;7720:128;7887:2;7913:64;7969:7;7960:6;7949:9;7945:22;7913:64;:::i;:::-;7903:74;;7858:129;8026:2;8052:64;8108:7;8099:6;8088:9;8084:22;8052:64;:::i;:::-;8042:74;;7997:129;7470:663;;;;;:::o;8139:911::-;8234:6;8242;8250;8258;8266;8315:3;8303:9;8294:7;8290:23;8286:33;8283:120;;;8322:79;;:::i;:::-;8283:120;8442:1;8467:53;8512:7;8503:6;8492:9;8488:22;8467:53;:::i;:::-;8457:63;;8413:117;8569:2;8595:53;8640:7;8631:6;8620:9;8616:22;8595:53;:::i;:::-;8585:63;;8540:118;8697:2;8723:53;8768:7;8759:6;8748:9;8744:22;8723:53;:::i;:::-;8713:63;;8668:118;8825:2;8851:53;8896:7;8887:6;8876:9;8872:22;8851:53;:::i;:::-;8841:63;;8796:118;8953:3;8980:53;9025:7;9016:6;9005:9;9001:22;8980:53;:::i;:::-;8970:63;;8924:119;8139:911;;;;;;;;:::o;9056:179::-;9125:10;9146:46;9188:3;9180:6;9146:46;:::i;:::-;9224:4;9219:3;9215:14;9201:28;;9056:179;;;;:::o;9241:147::-;9336:45;9375:5;9336:45;:::i;:::-;9331:3;9324:58;9241:147;;:::o;9394:108::-;9471:24;9489:5;9471:24;:::i;:::-;9466:3;9459:37;9394:108;;:::o;9508:118::-;9595:24;9613:5;9595:24;:::i;:::-;9590:3;9583:37;9508:118;;:::o;9662:732::-;9781:3;9810:54;9858:5;9810:54;:::i;:::-;9880:86;9959:6;9954:3;9880:86;:::i;:::-;9873:93;;9990:56;10040:5;9990:56;:::i;:::-;10069:7;10100:1;10085:284;10110:6;10107:1;10104:13;10085:284;;;10186:6;10180:13;10213:63;10272:3;10257:13;10213:63;:::i;:::-;10206:70;;10299:60;10352:6;10299:60;:::i;:::-;10289:70;;10145:224;10132:1;10129;10125:9;10120:14;;10085:284;;;10089:14;10385:3;10378:10;;9786:608;;;9662:732;;;;:::o;10400:109::-;10481:21;10496:5;10481:21;:::i;:::-;10476:3;10469:34;10400:109;;:::o;10515:167::-;10620:55;10669:5;10620:55;:::i;:::-;10615:3;10608:68;10515:167;;:::o;10688:147::-;10783:45;10822:5;10783:45;:::i;:::-;10778:3;10771:58;10688:147;;:::o;10841:364::-;10929:3;10957:39;10990:5;10957:39;:::i;:::-;11012:71;11076:6;11071:3;11012:71;:::i;:::-;11005:78;;11092:52;11137:6;11132:3;11125:4;11118:5;11114:16;11092:52;:::i;:::-;11169:29;11191:6;11169:29;:::i;:::-;11164:3;11160:39;11153:46;;10933:272;10841:364;;;;:::o;11211:366::-;11353:3;11374:67;11438:2;11433:3;11374:67;:::i;:::-;11367:74;;11450:93;11539:3;11450:93;:::i;:::-;11568:2;11563:3;11559:12;11552:19;;11211:366;;;:::o;11583:::-;11725:3;11746:67;11810:2;11805:3;11746:67;:::i;:::-;11739:74;;11822:93;11911:3;11822:93;:::i;:::-;11940:2;11935:3;11931:12;11924:19;;11583:366;;;:::o;11955:::-;12097:3;12118:67;12182:2;12177:3;12118:67;:::i;:::-;12111:74;;12194:93;12283:3;12194:93;:::i;:::-;12312:2;12307:3;12303:12;12296:19;;11955:366;;;:::o;12327:::-;12469:3;12490:67;12554:2;12549:3;12490:67;:::i;:::-;12483:74;;12566:93;12655:3;12566:93;:::i;:::-;12684:2;12679:3;12675:12;12668:19;;12327:366;;;:::o;12699:::-;12841:3;12862:67;12926:2;12921:3;12862:67;:::i;:::-;12855:74;;12938:93;13027:3;12938:93;:::i;:::-;13056:2;13051:3;13047:12;13040:19;;12699:366;;;:::o;13071:::-;13213:3;13234:67;13298:2;13293:3;13234:67;:::i;:::-;13227:74;;13310:93;13399:3;13310:93;:::i;:::-;13428:2;13423:3;13419:12;13412:19;;13071:366;;;:::o;13443:::-;13585:3;13606:67;13670:2;13665:3;13606:67;:::i;:::-;13599:74;;13682:93;13771:3;13682:93;:::i;:::-;13800:2;13795:3;13791:12;13784:19;;13443:366;;;:::o;13815:365::-;13957:3;13978:66;14042:1;14037:3;13978:66;:::i;:::-;13971:73;;14053:93;14142:3;14053:93;:::i;:::-;14171:2;14166:3;14162:12;14155:19;;13815:365;;;:::o;14186:398::-;14345:3;14366:83;14447:1;14442:3;14366:83;:::i;:::-;14359:90;;14458:93;14547:3;14458:93;:::i;:::-;14576:1;14571:3;14567:11;14560:18;;14186:398;;;:::o;14590:366::-;14732:3;14753:67;14817:2;14812:3;14753:67;:::i;:::-;14746:74;;14829:93;14918:3;14829:93;:::i;:::-;14947:2;14942:3;14938:12;14931:19;;14590:366;;;:::o;14962:::-;15104:3;15125:67;15189:2;15184:3;15125:67;:::i;:::-;15118:74;;15201:93;15290:3;15201:93;:::i;:::-;15319:2;15314:3;15310:12;15303:19;;14962:366;;;:::o;15334:118::-;15421:24;15439:5;15421:24;:::i;:::-;15416:3;15409:37;15334:118;;:::o;15458:112::-;15541:22;15557:5;15541:22;:::i;:::-;15536:3;15529:35;15458:112;;:::o;15576:379::-;15760:3;15782:147;15925:3;15782:147;:::i;:::-;15775:154;;15946:3;15939:10;;15576:379;;;:::o;15961:222::-;16054:4;16092:2;16081:9;16077:18;16069:26;;16105:71;16173:1;16162:9;16158:17;16149:6;16105:71;:::i;:::-;15961:222;;;;:::o;16189:238::-;16290:4;16328:2;16317:9;16313:18;16305:26;;16341:79;16417:1;16406:9;16402:17;16393:6;16341:79;:::i;:::-;16189:238;;;;:::o;16433:348::-;16562:4;16600:2;16589:9;16585:18;16577:26;;16613:71;16681:1;16670:9;16666:17;16657:6;16613:71;:::i;:::-;16694:80;16770:2;16759:9;16755:18;16746:6;16694:80;:::i;:::-;16433:348;;;;;:::o;16787:332::-;16908:4;16946:2;16935:9;16931:18;16923:26;;16959:71;17027:1;17016:9;17012:17;17003:6;16959:71;:::i;:::-;17040:72;17108:2;17097:9;17093:18;17084:6;17040:72;:::i;:::-;16787:332;;;;;:::o;17125:807::-;17374:4;17412:3;17401:9;17397:19;17389:27;;17426:71;17494:1;17483:9;17479:17;17470:6;17426:71;:::i;:::-;17507:72;17575:2;17564:9;17560:18;17551:6;17507:72;:::i;:::-;17589:80;17665:2;17654:9;17650:18;17641:6;17589:80;:::i;:::-;17679;17755:2;17744:9;17740:18;17731:6;17679:80;:::i;:::-;17769:73;17837:3;17826:9;17822:19;17813:6;17769:73;:::i;:::-;17852;17920:3;17909:9;17905:19;17896:6;17852:73;:::i;:::-;17125:807;;;;;;;;;:::o;17938:210::-;18025:4;18063:2;18052:9;18048:18;18040:26;;18076:65;18138:1;18127:9;18123:17;18114:6;18076:65;:::i;:::-;17938:210;;;;:::o;18154:258::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18316:89;18402:1;18391:9;18387:17;18378:6;18316:89;:::i;:::-;18154:258;;;;:::o;18418:720::-;18653:4;18691:3;18680:9;18676:19;18668:27;;18705:79;18781:1;18770:9;18766:17;18757:6;18705:79;:::i;:::-;18831:9;18825:4;18821:20;18816:2;18805:9;18801:18;18794:48;18859:108;18962:4;18953:6;18859:108;:::i;:::-;18851:116;;18977:72;19045:2;19034:9;19030:18;19021:6;18977:72;:::i;:::-;19059;19127:2;19116:9;19112:18;19103:6;19059:72;:::i;:::-;18418:720;;;;;;;:::o;19144:313::-;19257:4;19295:2;19284:9;19280:18;19272:26;;19344:9;19338:4;19334:20;19330:1;19319:9;19315:17;19308:47;19372:78;19445:4;19436:6;19372:78;:::i;:::-;19364:86;;19144:313;;;;:::o;19463:419::-;19629:4;19667:2;19656:9;19652:18;19644:26;;19716:9;19710:4;19706:20;19702:1;19691:9;19687:17;19680:47;19744:131;19870:4;19744:131;:::i;:::-;19736:139;;19463:419;;;:::o;19888:::-;20054:4;20092:2;20081:9;20077:18;20069:26;;20141:9;20135:4;20131:20;20127:1;20116:9;20112:17;20105:47;20169:131;20295:4;20169:131;:::i;:::-;20161:139;;19888:419;;;:::o;20313:::-;20479:4;20517:2;20506:9;20502:18;20494:26;;20566:9;20560:4;20556:20;20552:1;20541:9;20537:17;20530:47;20594:131;20720:4;20594:131;:::i;:::-;20586:139;;20313:419;;;:::o;20738:::-;20904:4;20942:2;20931:9;20927:18;20919:26;;20991:9;20985:4;20981:20;20977:1;20966:9;20962:17;20955:47;21019:131;21145:4;21019:131;:::i;:::-;21011:139;;20738:419;;;:::o;21163:::-;21329:4;21367:2;21356:9;21352:18;21344:26;;21416:9;21410:4;21406:20;21402:1;21391:9;21387:17;21380:47;21444:131;21570:4;21444:131;:::i;:::-;21436:139;;21163:419;;;:::o;21588:::-;21754:4;21792:2;21781:9;21777:18;21769:26;;21841:9;21835:4;21831:20;21827:1;21816:9;21812:17;21805:47;21869:131;21995:4;21869:131;:::i;:::-;21861:139;;21588:419;;;:::o;22013:::-;22179:4;22217:2;22206:9;22202:18;22194:26;;22266:9;22260:4;22256:20;22252:1;22241:9;22237:17;22230:47;22294:131;22420:4;22294:131;:::i;:::-;22286:139;;22013:419;;;:::o;22438:::-;22604:4;22642:2;22631:9;22627:18;22619:26;;22691:9;22685:4;22681:20;22677:1;22666:9;22662:17;22655:47;22719:131;22845:4;22719:131;:::i;:::-;22711:139;;22438:419;;;:::o;22863:::-;23029:4;23067:2;23056:9;23052:18;23044:26;;23116:9;23110:4;23106:20;23102:1;23091:9;23087:17;23080:47;23144:131;23270:4;23144:131;:::i;:::-;23136:139;;22863:419;;;:::o;23288:::-;23454:4;23492:2;23481:9;23477:18;23469:26;;23541:9;23535:4;23531:20;23527:1;23516:9;23512:17;23505:47;23569:131;23695:4;23569:131;:::i;:::-;23561:139;;23288:419;;;:::o;23713:222::-;23806:4;23844:2;23833:9;23829:18;23821:26;;23857:71;23925:1;23914:9;23910:17;23901:6;23857:71;:::i;:::-;23713:222;;;;:::o;23941:831::-;24204:4;24242:3;24231:9;24227:19;24219:27;;24256:71;24324:1;24313:9;24309:17;24300:6;24256:71;:::i;:::-;24337:80;24413:2;24402:9;24398:18;24389:6;24337:80;:::i;:::-;24464:9;24458:4;24454:20;24449:2;24438:9;24434:18;24427:48;24492:108;24595:4;24586:6;24492:108;:::i;:::-;24484:116;;24610:72;24678:2;24667:9;24663:18;24654:6;24610:72;:::i;:::-;24692:73;24760:3;24749:9;24745:19;24736:6;24692:73;:::i;:::-;23941:831;;;;;;;;:::o;24778:332::-;24899:4;24937:2;24926:9;24922:18;24914:26;;24950:71;25018:1;25007:9;25003:17;24994:6;24950:71;:::i;:::-;25031:72;25099:2;25088:9;25084:18;25075:6;25031:72;:::i;:::-;24778:332;;;;;:::o;25116:214::-;25205:4;25243:2;25232:9;25228:18;25220:26;;25256:67;25320:1;25309:9;25305:17;25296:6;25256:67;:::i;:::-;25116:214;;;;:::o;25417:132::-;25484:4;25507:3;25499:11;;25537:4;25532:3;25528:14;25520:22;;25417:132;;;:::o;25555:114::-;25622:6;25656:5;25650:12;25640:22;;25555:114;;;:::o;25675:99::-;25727:6;25761:5;25755:12;25745:22;;25675:99;;;:::o;25780:113::-;25850:4;25882;25877:3;25873:14;25865:22;;25780:113;;;:::o;25899:184::-;25998:11;26032:6;26027:3;26020:19;26072:4;26067:3;26063:14;26048:29;;25899:184;;;;:::o;26089:147::-;26190:11;26227:3;26212:18;;26089:147;;;;:::o;26242:169::-;26326:11;26360:6;26355:3;26348:19;26400:4;26395:3;26391:14;26376:29;;26242:169;;;;:::o;26417:305::-;26457:3;26476:20;26494:1;26476:20;:::i;:::-;26471:25;;26510:20;26528:1;26510:20;:::i;:::-;26505:25;;26664:1;26596:66;26592:74;26589:1;26586:81;26583:107;;;26670:18;;:::i;:::-;26583:107;26714:1;26711;26707:9;26700:16;;26417:305;;;;:::o;26728:185::-;26768:1;26785:20;26803:1;26785:20;:::i;:::-;26780:25;;26819:20;26837:1;26819:20;:::i;:::-;26814:25;;26858:1;26848:35;;26863:18;;:::i;:::-;26848:35;26905:1;26902;26898:9;26893:14;;26728:185;;;;:::o;26919:348::-;26959:7;26982:20;27000:1;26982:20;:::i;:::-;26977:25;;27016:20;27034:1;27016:20;:::i;:::-;27011:25;;27204:1;27136:66;27132:74;27129:1;27126:81;27121:1;27114:9;27107:17;27103:105;27100:131;;;27211:18;;:::i;:::-;27100:131;27259:1;27256;27252:9;27241:20;;26919:348;;;;:::o;27273:191::-;27313:4;27333:20;27351:1;27333:20;:::i;:::-;27328:25;;27367:20;27385:1;27367:20;:::i;:::-;27362:25;;27406:1;27403;27400:8;27397:34;;;27411:18;;:::i;:::-;27397:34;27456:1;27453;27449:9;27441:17;;27273:191;;;;:::o;27470:96::-;27507:7;27536:24;27554:5;27536:24;:::i;:::-;27525:35;;27470:96;;;:::o;27572:104::-;27617:7;27646:24;27664:5;27646:24;:::i;:::-;27635:35;;27572:104;;;:::o;27682:90::-;27716:7;27759:5;27752:13;27745:21;27734:32;;27682:90;;;:::o;27778:126::-;27815:7;27855:42;27848:5;27844:54;27833:65;;27778:126;;;:::o;27910:77::-;27947:7;27976:5;27965:16;;27910:77;;;:::o;27993:86::-;28028:7;28068:4;28061:5;28057:16;28046:27;;27993:86;;;:::o;28085:134::-;28143:9;28176:37;28207:5;28176:37;:::i;:::-;28163:50;;28085:134;;;:::o;28225:144::-;28293:9;28326:37;28357:5;28326:37;:::i;:::-;28313:50;;28225:144;;;:::o;28375:121::-;28433:9;28466:24;28484:5;28466:24;:::i;:::-;28453:37;;28375:121;;;:::o;28502:126::-;28552:9;28585:37;28616:5;28585:37;:::i;:::-;28572:50;;28502:126;;;:::o;28634:113::-;28684:9;28717:24;28735:5;28717:24;:::i;:::-;28704:37;;28634:113;;;:::o;28753:307::-;28821:1;28831:113;28845:6;28842:1;28839:13;28831:113;;;28930:1;28925:3;28921:11;28915:18;28911:1;28906:3;28902:11;28895:39;28867:2;28864:1;28860:10;28855:15;;28831:113;;;28962:6;28959:1;28956:13;28953:101;;;29042:1;29033:6;29028:3;29024:16;29017:27;28953:101;28802:258;28753:307;;;:::o;29066:180::-;29114:77;29111:1;29104:88;29211:4;29208:1;29201:15;29235:4;29232:1;29225:15;29252:180;29300:77;29297:1;29290:88;29397:4;29394:1;29387:15;29421:4;29418:1;29411:15;29438:180;29486:77;29483:1;29476:88;29583:4;29580:1;29573:15;29607:4;29604:1;29597:15;29624:180;29672:77;29669:1;29662:88;29769:4;29766:1;29759:15;29793:4;29790:1;29783:15;29933:117;30042:1;30039;30032:12;30056:102;30097:6;30148:2;30144:7;30139:2;30132:5;30128:14;30124:28;30114:38;;30056:102;;;:::o;30164:167::-;30304:19;30300:1;30292:6;30288:14;30281:43;30164:167;:::o;30337:177::-;30477:29;30473:1;30465:6;30461:14;30454:53;30337:177;:::o;30520:180::-;30660:32;30656:1;30648:6;30644:14;30637:56;30520:180;:::o;30706:174::-;30846:26;30842:1;30834:6;30830:14;30823:50;30706:174;:::o;30886:::-;31026:26;31022:1;31014:6;31010:14;31003:50;30886:174;:::o;31066:220::-;31206:34;31202:1;31194:6;31190:14;31183:58;31275:3;31270:2;31262:6;31258:15;31251:28;31066:220;:::o;31292:168::-;31432:20;31428:1;31420:6;31416:14;31409:44;31292:168;:::o;31466:156::-;31606:8;31602:1;31594:6;31590:14;31583:32;31466:156;:::o;31628:114::-;;:::o;31748:173::-;31888:25;31884:1;31876:6;31872:14;31865:49;31748:173;:::o;31927:161::-;32067:13;32063:1;32055:6;32051:14;32044:37;31927:161;:::o;32094:122::-;32167:24;32185:5;32167:24;:::i;:::-;32160:5;32157:35;32147:63;;32206:1;32203;32196:12;32147:63;32094:122;:::o;32222:138::-;32303:32;32329:5;32303:32;:::i;:::-;32296:5;32293:43;32283:71;;32350:1;32347;32340:12;32283:71;32222:138;:::o;32366:116::-;32436:21;32451:5;32436:21;:::i;:::-;32429:5;32426:32;32416:60;;32472:1;32469;32462:12;32416:60;32366:116;:::o;32488:122::-;32561:24;32579:5;32561:24;:::i;:::-;32554:5;32551:35;32541:63;;32600:1;32597;32590:12;32541:63;32488:122;:::o

Swarm Source

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