ETH Price: $3,390.21 (-2.00%)
Gas: 6 Gwei

Contract

0x260D5F9688353af138d35ece6F0Cd9C80Ef982dd
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve188789572023-12-27 19:05:23204 days ago1703703923IN
Shinuri: Shinuri Token
0 ETH0.0008136233.36444007
Approve184616052023-10-30 7:52:35263 days ago1698652355IN
Shinuri: Shinuri Token
0 ETH0.0002998412.2957324
Approve178076722023-07-30 18:36:47354 days ago1690742207IN
Shinuri: Shinuri Token
0 ETH0.0004444815.06224142
Approve178076642023-07-30 18:35:11354 days ago1690742111IN
Shinuri: Shinuri Token
0 ETH0.0004149314.19359215
Approve178076502023-07-30 18:32:11354 days ago1690741931IN
Shinuri: Shinuri Token
0 ETH0.0004635815.85782067
Approve178076432023-07-30 18:30:47354 days ago1690741847IN
Shinuri: Shinuri Token
0 ETH0.0007337315.83577849
Transfer178076342023-07-30 18:28:59354 days ago1690741739IN
Shinuri: Shinuri Token
0 ETH0.0042268115.20984875
Transfer178076232023-07-30 18:26:47354 days ago1690741607IN
Shinuri: Shinuri Token
0 ETH0.0045931116.52794649
Transfer178076042023-07-30 18:22:47354 days ago1690741367IN
Shinuri: Shinuri Token
0 ETH0.004723516.99714308
Transfer178075992023-07-30 18:21:47354 days ago1690741307IN
Shinuri: Shinuri Token
0 ETH0.0004102818.64950691
Transfer178075862023-07-30 18:19:11354 days ago1690741151IN
Shinuri: Shinuri Token
0 ETH0.0003950917.95864707
Transfer178075272023-07-30 18:07:23354 days ago1690740443IN
Shinuri: Shinuri Token
0 ETH0.0049727115.10543889
Transfer178075052023-07-30 18:02:59354 days ago1690740179IN
Shinuri: Shinuri Token
0 ETH0.0003783915.76665706
Approve178074992023-07-30 18:01:47354 days ago1690740107IN
Shinuri: Shinuri Token
0 ETH0.0008049217.26943841
Transfer178074862023-07-30 17:59:11354 days ago1690739951IN
Shinuri: Shinuri Token
0 ETH0.0039259915.72902348
Transfer177927792023-07-28 16:35:47356 days ago1690562147IN
Shinuri: Shinuri Token
0 ETH0.05682226173.28457027
Approve175448562023-06-23 21:10:23391 days ago1687554623IN
Shinuri: Shinuri Token
0 ETH0.0005277419.7584616
Approve175448542023-06-23 21:09:59391 days ago1687554599IN
Shinuri: Shinuri Token
0 ETH0.0008204317.60211798
Approve175448312023-06-23 21:05:23391 days ago1687554323IN
Shinuri: Shinuri Token
0 ETH0.0007037915.09972103
Transfer171623602023-05-01 0:15:11445 days ago1682900111IN
Shinuri: Shinuri Token
0 ETH0.0118749542.45377439
Transfer170397272023-04-13 16:48:59462 days ago1681404539IN
Shinuri: Shinuri Token
0 ETH0.0111309533.94485487
Approve168792602023-03-21 23:26:11485 days ago1679441171IN
Shinuri: Shinuri Token
0 ETH0.0004072816.70146669
Approve168070842023-03-11 20:02:47495 days ago1678564967IN
Shinuri: Shinuri Token
0 ETH0.0014037630.1172492
Approve165522842023-02-04 1:56:59531 days ago1675475819IN
Shinuri: Shinuri Token
0 ETH0.0007981930.25072381
Approve165522832023-02-04 1:56:47531 days ago1675475807IN
Shinuri: Shinuri Token
0 ETH0.0007116829.184035
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
185065072023-11-05 14:50:23256 days ago1699195823
Shinuri: Shinuri Token
0.0001529 ETH
185065072023-11-05 14:50:23256 days ago1699195823
Shinuri: Shinuri Token
0.00007645 ETH
185065072023-11-05 14:50:23256 days ago1699195823
Shinuri: Shinuri Token
0.00053515 ETH
178097452023-07-31 1:34:59354 days ago1690767299
Shinuri: Shinuri Token
0.00008739 ETH
178097452023-07-31 1:34:59354 days ago1690767299
Shinuri: Shinuri Token
0.00008739 ETH
178097452023-07-31 1:34:59354 days ago1690767299
Shinuri: Shinuri Token
0.00008739 ETH
178097452023-07-31 1:34:59354 days ago1690767299
Shinuri: Shinuri Token
0.00004369 ETH
178097452023-07-31 1:34:59354 days ago1690767299
Shinuri: Shinuri Token
0.00030588 ETH
178097392023-07-31 1:33:47354 days ago1690767227
Shinuri: Shinuri Token
0.0000924 ETH
178097392023-07-31 1:33:47354 days ago1690767227
Shinuri: Shinuri Token
0.0000924 ETH
178097392023-07-31 1:33:47354 days ago1690767227
Shinuri: Shinuri Token
0.0000924 ETH
178097392023-07-31 1:33:47354 days ago1690767227
Shinuri: Shinuri Token
0.0000462 ETH
178097392023-07-31 1:33:47354 days ago1690767227
Shinuri: Shinuri Token
0.00032343 ETH
178097222023-07-31 1:30:23354 days ago1690767023
Shinuri: Shinuri Token
0.00009768 ETH
178097222023-07-31 1:30:23354 days ago1690767023
Shinuri: Shinuri Token
0.00009768 ETH
178097222023-07-31 1:30:23354 days ago1690767023
Shinuri: Shinuri Token
0.00009768 ETH
178097222023-07-31 1:30:23354 days ago1690767023
Shinuri: Shinuri Token
0.00004884 ETH
178097222023-07-31 1:30:23354 days ago1690767023
Shinuri: Shinuri Token
0.00034188 ETH
178097072023-07-31 1:27:23354 days ago1690766843
Shinuri: Shinuri Token
0.00010322 ETH
178097072023-07-31 1:27:23354 days ago1690766843
Shinuri: Shinuri Token
0.00010322 ETH
178097072023-07-31 1:27:23354 days ago1690766843
Shinuri: Shinuri Token
0.00010322 ETH
178097072023-07-31 1:27:23354 days ago1690766843
Shinuri: Shinuri Token
0.00005161 ETH
178097072023-07-31 1:27:23354 days ago1690766843
Shinuri: Shinuri Token
0.00036129 ETH
178097022023-07-31 1:26:23354 days ago1690766783
Shinuri: Shinuri Token
0.00010905 ETH
178097022023-07-31 1:26:23354 days ago1690766783
Shinuri: Shinuri Token
0.00010905 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Shinuri

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-30
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;

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

interface IFactoryV2 {
    event PairCreated(address indexed token0, address indexed token1, address lpPair, uint);
    function getPair(address tokenA, address tokenB) external view returns (address lpPair);
    function createPair(address tokenA, address tokenB) external returns (address lpPair);
}

interface IV2Pair {
    function factory() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function sync() external;
}

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    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 swapExactETHForTokens(
        uint amountOutMin, 
        address[] calldata path, 
        address to, uint deadline
    ) external payable returns (uint[] memory amounts);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

interface AntiSnipe {
    function checkUser(address from, address to, uint256 amt) external returns (bool);
    function setLaunch(address _initialLpPair, uint32 _liqAddBlock, uint64 _liqAddStamp, uint8 dec) external;
    function setLpPair(address pair, bool enabled) external;
    function setProtections(bool _as, bool _ab) external;
    function removeSniper(address account) external;
    function removeBlacklisted(address account) external;
    function isBlacklisted(address account) external view returns (bool);
    function transfer(address sender) external;
    function setBlacklistEnabled(address account, bool enabled) external;
    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external;
    function getInitializers() external returns (string memory, string memory, uint256, uint8);
}

interface Cashier {
    function setRewardsProperties(uint256 _minPeriod, uint256 _minReflection) external;
    function tally(address user, uint256 amount) external;
    function load() external payable;
    function cashout(uint256 gas) external;
    function giveMeWelfarePlease(address hobo) external;
    function getTotalDistributed() external view returns(uint256);
    function getUserInfo(address user) external view returns(string memory, string memory, string memory, string memory);
    function getUserRealizedRewards(address user) external view returns (uint256);
    function getPendingRewards(address user) external view returns (uint256);
    function initialize() external;
}

contract Shinuri is IERC20 {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) _allowances;
    mapping (address => bool) private _isExcludedFromProtection;
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _isExcludedFromDividends;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
    uint256 private _tTotal;

    struct Fees {
        uint16 buyFee;
        uint16 sellFee;
        uint16 transferFee;
    }

    struct Ratios {
        uint16 rewards;
        uint16 liquidity;
        uint16 marketing;
        uint16 development;
        uint16 staking;
        uint16 total;
    }

    Fees public _taxRates = Fees({
        buyFee: 800,
        sellFee: 800,
        transferFee: 800
    });

    Ratios public _ratios = Ratios({
        rewards: 200,
        liquidity: 200,
        marketing: 200,
        development: 200,
        staking: 0,
        total: 800
    });

    uint256 constant public maxBuyTaxes = 2000;
    uint256 constant public maxSellTaxes = 2000;
    uint256 constant public maxTransferTaxes = 2000;
    uint256 constant public maxRoundtripTax = 3000;
    uint256 constant masterTaxDivisor = 10000;

    IRouter02 public dexRouter;
    address public lpPair;

    // USDC MAINNET TOKEN CONTRACT ADDRESS
    address public USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant private ZERO = 0x0000000000000000000000000000000000000000;

    struct TaxWallets {
        address payable marketing;
        address payable development;
        address staking;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x28142A4dE954DfA8993DCB48a7d920433FC6fB95),
        development: payable(0x9AF2aBFcd2c07603ceD9590Ad79f3Af392e005CD),
        staking: 0x46BD9c37259C3087401f756Db70Bf59E0807D18B
    });

    uint256 private _maxTxBuyAmount;
    uint256 private _maxTxSellAmount;
    uint256 private _maxWalletSize;

    Cashier reflector;
    uint256 reflectorGas = 300000;

    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    bool public piContractSwapsEnabled;
    uint256 public piSwapPercent = 10;

    bool public processReflect = false;

    bool public tradingEnabled = false;
    bool public _hasLiqBeenAdded = false;
    AntiSnipe antiSnipe;

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountBNB, uint256 amount);

    constructor () payable {
        // Set the owner.
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);

        if (block.chainid == 56) {
            dexRouter = IRouter02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        } else if (block.chainid == 97) {
            dexRouter = IRouter02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1);
        } else if (block.chainid == 1 || block.chainid == 4) {
            dexRouter = IRouter02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
            //Ropstein DAI 0xaD6D458402F60fD3Bd25163575031ACDce07538D
        } else if (block.chainid == 43114) {
            dexRouter = IRouter02(0x60aE616a2155Ee3d9A68541Ba4544862310933d4);
        } else if (block.chainid == 250) {
            dexRouter = IRouter02(0xF491e7B69E4244ad4002BC14e878a34207E38c29);
        } else {
            revert();
        }
        _isExcludedFromFees[_owner] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromDividends[_owner] = true;
        _isExcludedFromDividends[address(this)] = true;
        _isExcludedFromDividends[DEAD] = true;
        _isExcludedFromDividends[ZERO] = true;
    }

    bool contractInitialized;

    function intializeContract(address[] calldata accounts, uint256[] calldata amounts, address _antiSnipe, address _cashier) external onlyOwner {
        require(!contractInitialized, "1");
        require(accounts.length == amounts.length, "2");
        antiSnipe = AntiSnipe(_antiSnipe);
        reflector = Cashier(_cashier);
        reflector.initialize();
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * 10**_decimals;
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _isExcludedFromDividends[lpPair] = true;
        _maxTxBuyAmount = (_tTotal * 2) / 100;
        _maxTxSellAmount = (_tTotal * 2) / 100;
        _maxWalletSize = (_tTotal * 2) / 100;
        contractInitialized = true;     
        _tOwned[_owner] = _tTotal;
        emit Transfer(address(0), _owner, _tTotal);
        _approve(address(this), address(dexRouter), type(uint256).max);
        _approve(_owner, address(dexRouter), type(uint256).max);
        for(uint256 i = 0; i < accounts.length; i++){
            uint256 amount = amounts[i] * 10**_decimals;
            finalizeTransfer(_owner, accounts[i], amount, false, false, true);
        }
        finalizeTransfer(_owner, address(this), balanceOf(_owner), false, false, true);

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            _owner,
            block.timestamp
        );
        enableTrading();
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function transferOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        _isExcludedFromFees[newOwner] = true;
        _isExcludedFromDividends[newOwner] = true;
        
        if (balanceOf(_owner) > 0) {
            finalizeTransfer(_owner, newOwner, balanceOf(_owner), false, false, true);
        }
        
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
        
    }

    function renounceOwnership() external onlyOwner {
        _isExcludedFromFees[_owner] = false;
        _isExcludedFromDividends[_owner] = false;
        address oldOwner = _owner;
        _owner = address(0);
        emit OwnershipTransferred(oldOwner, address(0));
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

    receive() external payable {}

    function totalSupply() external view override returns (uint256) { if (_tTotal == 0) { revert(); } return _tTotal; }
    function decimals() external view override returns (uint8) { if (_tTotal == 0) { revert(); } return _decimals; }
    function symbol() external view override returns (string memory) { return _symbol; }
    function name() external view 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 _tOwned[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[sender][spender] = amount;
        emit Approval(sender, spender, amount);
    }

    function approveContractContingency() public onlyOwner returns (bool) {
        _approve(address(this), address(dexRouter), type(uint256).max);
        return true;
    }

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

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

        return _transfer(sender, recipient, amount);
    }

    function setNewRouter(address newRouter) public onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot change after liquidity.");
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

    function setLpPair(address pair, bool enabled) external onlyOwner {
        if (!enabled) {
            lpPairs[pair] = false;
            antiSnipe.setLpPair(pair, false);
        } else {
            if (timeSinceLastPair != 0) {
                require(block.timestamp - timeSinceLastPair > 3 days, "Cannot set a new pair this week!");
            }
            lpPairs[pair] = true;
            timeSinceLastPair = block.timestamp;
            antiSnipe.setLpPair(pair, true);
        }
    }

    function setInitializers(address aInitializer, address cInitializer) external onlyOwner {
        require(!tradingEnabled);
        require(cInitializer != address(this) && aInitializer != address(this) && cInitializer != aInitializer);
        reflector = Cashier(cInitializer);
        antiSnipe = AntiSnipe(aInitializer);
    }

    function isExcludedFromFees(address account) external view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function isExcludedFromDividends(address account) external view returns(bool) {
        return _isExcludedFromDividends[account];
    }

    function isExcludedFromLimits(address account) external view returns (bool) {
        return _isExcludedFromLimits[account];
    }

    function isExcludedFromProtection(address account) external view returns (bool) {
        return _isExcludedFromProtection[account];
    }

    function setExcludedFromLimits(address account, bool enabled) external onlyOwner {
        _isExcludedFromLimits[account] = enabled;
    }

    function setDividendExcluded(address holder, bool enabled) public onlyOwner {
        require(holder != address(this) && holder != lpPair);
        _isExcludedFromDividends[holder] = enabled;
        if (enabled) {
            reflector.tally(holder, 0);
        } else {
            reflector.tally(holder, _tOwned[holder]);
        }
    }

    function setExcludedFromFees(address account, bool enabled) public onlyOwner {
        _isExcludedFromFees[account] = enabled;
    }

    function setExcludedFromProtection(address account, bool enabled) external onlyOwner {
        _isExcludedFromProtection[account] = enabled;
    }

//================================================ BLACKLIST

    function setBlacklistEnabled(address account, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabled(account, enabled);
        setDividendExcluded(account, enabled);
    }

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
        for(uint256 i = 0; i < accounts.length; i++){
            setDividendExcluded(accounts[i], enabled);
        }
    }

//================================================ BLACKLIST

    function isBlacklisted(address account) public view returns (bool) {
        return antiSnipe.isBlacklisted(account);
    }

    function removeSniper(address account) external onlyOwner {
        antiSnipe.removeSniper(account);
    }

    function setProtectionSettings(bool _antiSnipe, bool _antiBlock) external onlyOwner {
        antiSnipe.setProtections(_antiSnipe, _antiBlock);
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        require(_hasLiqBeenAdded, "Liquidity must be added.");
        if (address(antiSnipe) == address(0)){
            antiSnipe = AntiSnipe(address(this));
        }
        try antiSnipe.setLaunch(lpPair, uint32(block.number), uint64(block.timestamp), _decimals) {} catch {}
        try reflector.initialize() {} catch {}
        tradingEnabled = true;
        swapThreshold = (balanceOf(lpPair) * 10) / 10000;
        swapAmount = (balanceOf(lpPair) * 30) / 10000;
    }

    function setWallets(address payable marketing, address payable development, address staking) external onlyOwner {
        _taxWallets.marketing = payable(marketing);
        _taxWallets.development = payable(development);
        _taxWallets.staking = payable(staking);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        require(buyFee + sellFee <= maxRoundtripTax, "Cannot exceed roundtrip maximum.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }

    function setRatios(uint16 rewards, uint16 liquidity, uint16 marketing, uint16 development, uint16 staking) external onlyOwner {
        _ratios.rewards = rewards;
        _ratios.liquidity = liquidity;
        _ratios.marketing = marketing;
        _ratios.development = development;
        _ratios.staking = staking;
        _ratios.total = rewards + liquidity + marketing + development;
        uint256 total = _taxRates.buyFee + _taxRates.sellFee;
        require(_ratios.total + _ratios.staking <= total, "Cannot exceed sum of buy and sell fees.");
    }

    function setMaxTxPercents(uint256 percentBuy, uint256 divisorBuy, uint256 percentSell, uint256 divisorSell) external onlyOwner {
        require((_tTotal * percentBuy) / divisorBuy >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        require((_tTotal * percentSell) / divisorSell >= (_tTotal * 5 / 1000), "Max Transaction amt must be above 0.5% of total supply.");
        _maxTxBuyAmount = (_tTotal * percentBuy) / divisorBuy;
        _maxTxSellAmount = (_tTotal * percentSell) / divisorSell;
    }

    function setMaxWalletSize(uint256 percent, uint256 divisor) external onlyOwner {
        require((_tTotal * percent) / divisor >= (_tTotal / 100), "Max Wallet amt must be above 1% of total supply.");
        _maxWalletSize = (_tTotal * percent) / divisor;
    }

    function getMaxTX() public view returns (uint256 maxBuyAmount, uint256 maxSellAmount) {
        maxBuyAmount = _maxTxBuyAmount / (10**_decimals);
        maxSellAmount = _maxTxSellAmount / (10**_decimals);
    }

    function getMaxWallet() public view returns (uint256) {
        return _maxWalletSize / (10**_decimals);
    }

    function getTokenAmountAtPriceImpact(uint256 priceImpactInHundreds) external view returns (uint256) {
        return((balanceOf(lpPair) * priceImpactInHundreds) / masterTaxDivisor);
    }

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
        require(swapThreshold <= swapAmount, "Threshold cannot be above amount.");
        require(swapAmount <= (balanceOf(lpPair) * 150) / masterTaxDivisor, "Cannot be above 1.5% of current PI.");
    }

    function setPriceImpactSwapAmount(uint256 priceImpactSwapPercent) external onlyOwner {
        require(priceImpactSwapPercent <= 150, "Cannot set above 1.5%.");
        piSwapPercent = priceImpactSwapPercent;
    }

    function setContractSwapEnabled(bool swapEnabled, bool processReflectEnabled, bool priceImpactSwapEnabled) external onlyOwner {
        contractSwapEnabled = swapEnabled;
        processReflect = processReflectEnabled;
        piContractSwapsEnabled = priceImpactSwapEnabled;
        emit ContractSwapEnabledUpdated(swapEnabled);
    }

    function setRewardsProperties(uint256 _minPeriod, uint256 _minReflection, uint256 minReflectionMultiplier) external onlyOwner {
        _minReflection = _minReflection * 10**minReflectionMultiplier;
        reflector.setRewardsProperties(_minPeriod, _minReflection);
    }

    function setReflectorSettings(uint256 gas) external onlyOwner {
        require(gas < 750000);
        reflectorGas = gas;
    }

    function _hasLimits(address from, address to) internal view returns (bool) {
        return from != _owner
            && to != _owner
            && tx.origin != _owner
            && !_liquidityHolders[to]
            && !_liquidityHolders[from]
            && to != DEAD
            && to != address(0)
            && from != address(this)
            && from != address(antiSnipe)
            && to != address(antiSnipe);
    }

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool buy = false;
        bool sell = false;
        bool other = false;
        if (lpPairs[from]) {
            buy = true;
        } else if (lpPairs[to]) {
            sell = true;
        } else {
            other = true;
        }
        if (_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (buy){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxBuyAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (sell){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxSellAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if (to != address(dexRouter) && !sell) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

        if (sell) {
            if (!inSwap) {
                if (contractSwapEnabled)   {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        uint256 swapAmt = swapAmount;
                        if (piContractSwapsEnabled) { swapAmt = (balanceOf(lpPair) * piSwapPercent) / masterTaxDivisor; }
                        if (contractTokenBalance >= swapAmt) { contractTokenBalance = swapAmt; }
                        contractSwap(contractTokenBalance);
                    }
                }
            }
        } 
        return finalizeTransfer(from, to, amount, buy, sell, other);
    }

    function finalizeTransfer(address from, address to, uint256 amount, bool buy, bool sell, bool other) internal returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to) && !_isExcludedFromProtection[from] && !_isExcludedFromProtection[to] && !other) {
                revert("Pre-liquidity transfer protection.");
            }
        }

        if (_hasLimits(from, to)) { bool checked;
            try antiSnipe.checkUser(from, to, amount) returns (bool check) {
                checked = check; } catch { revert(); }
            if(!checked) { revert(); }
        }

        bool takeFee = true;
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]){
            takeFee = false;
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = amount;
        if (takeFee) {
            amountReceived = takeTaxes(from, amount, buy, sell, other);
        }
        _tOwned[to] += amountReceived;

        processRewards(from, to);

        emit Transfer(from, to, amountReceived);
        return true;
    }

    function processRewards(address from, address to) internal {
        if (!_isExcludedFromDividends[from]) {
            try reflector.tally(from, _tOwned[from]) {} catch {}
        }
        if (!_isExcludedFromDividends[to]) {
            try reflector.tally(to, _tOwned[to]) {} catch {}
        }
        if (processReflect) {
            try reflector.cashout(reflectorGas) {} catch {}
        }
    }

    function takeTaxes(address from, uint256 amount, bool buy, bool sell, bool other) internal returns (uint256) {
        Ratios memory ratios = _ratios;
        uint256 currentFee;
        if (buy) {
            currentFee = _taxRates.buyFee;
        } else if (sell) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        if (currentFee == 0) {
            return amount;
        }

        if (address(antiSnipe) == address(this)
            && (block.chainid == 1
            || block.chainid == 56)) { currentFee = 4500; }
        uint256 feeAmount = amount * currentFee / masterTaxDivisor;
        uint256 stakingAmount = (feeAmount * ratios.staking) / (ratios.staking + ratios.total);
        uint256 swapAmt = feeAmount - stakingAmount;
        if (ratios.staking > 0) {
            address destination = _taxWallets.staking;
            _tOwned[destination] += stakingAmount;
            emit Transfer(from, destination, stakingAmount);
        }
        _tOwned[address(this)] += swapAmt;
        emit Transfer(from, address(this), swapAmt);

        return amount - feeAmount;
    }

    function contractSwap(uint256 contractTokenBalance) internal swapping {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0 || contractTokenBalance == 0) {
            return;
        }
        
        if (_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

        uint256 toLiquify = ((contractTokenBalance * ratios.liquidity) / (ratios.total)) / 2;
        uint256 swapAmt = contractTokenBalance - toLiquify;

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

        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            swapAmt,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amtBalance = address(this).balance;
        uint256 liquidityBalance = (amtBalance * toLiquify) / swapAmt;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0,
                0,
                DEAD,
                block.timestamp
            );
            emit AutoLiquify(liquidityBalance, toLiquify);
        }

        amtBalance -= liquidityBalance;
        ratios.total -= ratios.liquidity;
        bool success;
        uint256 rewardsBalance = (amtBalance * ratios.rewards) / ratios.total;
        uint256 developmentBalance = (amtBalance * ratios.development) / ratios.total;
        uint256 marketingBalance = amtBalance - (rewardsBalance + developmentBalance);

        if (ratios.rewards > 0) {
            try reflector.load{value: rewardsBalance}() {} catch {}
        }

        if (ratios.marketing > 0){
            (success,) = _taxWallets.marketing.call{value: marketingBalance, gas: 35000}("");
        }
        if (ratios.development > 0){
            (success,) = _taxWallets.development.call{value: developmentBalance, gas: 35000}("");
        }
    }

    function _checkLiquidityAdd(address from, address to) private {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            if (address(antiSnipe) == address(0)) {
                antiSnipe = AntiSnipe(address(this));
            }
            if (address(reflector) ==  address(0)) {
                reflector = Cashier(address(this));
            }
            contractSwapEnabled = true;
            emit ContractSwapEnabledUpdated(true);
        }
    }

    function multiSendTokens(address[] memory accounts, uint256[] memory amounts) external onlyOwner {
        require(accounts.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= amounts[i]);
            finalizeTransfer(msg.sender, accounts[i], amounts[i]*10**_decimals, false, false, true);
        }
    }

    function manualDeposit() external onlyOwner {
        try reflector.load{value: address(this).balance}() {} catch {}
    }

    function sweepContingency() external onlyOwner {
        require(!_hasLiqBeenAdded, "Cannot call after liquidity.");
        payable(_owner).transfer(address(this).balance);
    }

//=====================================================================================
//            Reflector

    function claimPendingRewards() external {
        reflector.giveMeWelfarePlease(msg.sender);
    }

    function getTotalReflected() external view returns (uint256) {
        return reflector.getTotalDistributed();
    }

    function getUserInfo(address user) external view returns (string memory, string memory, string memory, string memory) {
        return reflector.getUserInfo(user);
    }

    function getUserRealizedGains(address user) external view returns (uint256) {
        return reflector.getUserRealizedRewards(user);
    }

    function getUserUnpaidEarnings(address user) external view returns (uint256) {
        return reflector.getPendingRewards(user);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"amount","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address","name":"staking","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimPendingRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"maxSellAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","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":"uint256","name":"priceImpactInHundreds","type":"uint256"}],"name":"getTokenAmountAtPriceImpact","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserInfo","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"},{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserRealizedGains","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"getUserUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address","name":"_antiSnipe","type":"address"},{"internalType":"address","name":"_cashier","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxRoundtripTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piContractSwapsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piSwapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processReflect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"},{"internalType":"bool","name":"processReflectEnabled","type":"bool"},{"internalType":"bool","name":"priceImpactSwapEnabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setDividendExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"aInitializer","type":"address"},{"internalType":"address","name":"cInitializer","type":"address"}],"name":"setInitializers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentBuy","type":"uint256"},{"internalType":"uint256","name":"divisorBuy","type":"uint256"},{"internalType":"uint256","name":"percentSell","type":"uint256"},{"internalType":"uint256","name":"divisorSell","type":"uint256"}],"name":"setMaxTxPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"priceImpactSwapPercent","type":"uint256"}],"name":"setPriceImpactSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_antiSnipe","type":"bool"},{"internalType":"bool","name":"_antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"rewards","type":"uint16"},{"internalType":"uint16","name":"liquidity","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"development","type":"uint16"},{"internalType":"uint16","name":"staking","type":"uint16"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setReflectorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minReflection","type":"uint256"},{"internalType":"uint256","name":"minReflectionMultiplier","type":"uint256"}],"name":"setRewardsProperties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"development","type":"address"},{"internalType":"address","name":"staking","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","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","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60006003819055610320608081905260a081905260c0819052600f805465ffffffffffff19166503200320032017905560c860e08190526101008190526101208190526101405261016082905261018052601080546001600160601b0319166b0320000000c800c800c800c81790556013805473a0b86991c6218b36c1d19d4a2e9eb0ce3606eb486001600160a01b03199182161790915561020060408190527328142a4de954dfa8993dcb48a7d920433fc6fb956101a0819052739af2abfcd2c07603ced9590ad79f3af392e005cd6101c08190527346bd9c37259c3087401f756db70bf59e0807d18b6101e081905260148054861690931790925560158054851690911790556016805484169091179055620493e0601b55601c805461ff0019169055600a6020556021805462ffffff191690558254339216821783559091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3466038036200019b57601180546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000282565b46606103620001d057601180546001600160a01b03191673d99d1c33f9fc3444f8101754abc46c52416550d117905562000282565b4660011480620001e05750466004145b156200021257601180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000282565b4661a86a036200024857601180546001600160a01b0319167360ae616a2155ee3d9a68541ba4544862310933d417905562000282565b4660fa036200027d57601180546001600160a01b03191673f491e7b69e4244ad4002bc14e878a34207e38c2917905562000282565b600080fd5b600080546001600160a01b039081168252600660209081526040808420805460ff1990811660019081179092553080875283872080548316841790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280548316841790558654909516865260089093528185208054841682179055928452832080548216831790557f046fee3d77c34a6c5e10c3be6dc4b132c30449dbf4f0bc07684896dd0933429980548216831790559180527f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054909216179055615d9280620003706000396000f3fe6080604052600436106104845760003560e01c80636ab86dc11161025e578063b7df8b3611610143578063eec2744e116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610df7578063fe575a8714610e16578063feadde9c14610e3657600080fd5b8063f94aa1b414610d80578063fb78680d14610dd757600080fd5b8063eec2744e14610d11578063efe7dc9014610d31578063f08f43a214610d4b578063f7c245ea14610d6b57600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c96578063eafb5a3c14610cdc578063ee5d9c2d14610cfc57600080fd5b8063cf84770614610be3578063d0b1449d14610c7657600080fd5b8063b7df8b3614610b50578063b81dc53914610b6a578063c0488b5614610b8a578063c705c56914610baa57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063b1b08f711161018a578063b1b08f71146106ea578063b3d514fb146106ea578063b421626c14610b3057600080fd5b8063a9059cbb14610af0578063ab5cb5a614610b1057600080fd5b80638a63bd9b14610a9c5780638a8c523c14610ab157806392bd7b2c14610ac657806395d89b4114610adb57600080fd5b8063715018a61161022d57806380c581d11161021257806380c581d114610a3e578063893d20e814610a5e57806389a3027114610a7c57600080fd5b8063715018a614610a0957806375cb1bd114610a1e57600080fd5b80636ab86dc1146109745780636b639a25146109895780636ebd0078146109a957806370a08231146109d357600080fd5b80632e8fa821116103845780634e718e48116102fc578063590ffdce116102cb5780636372c68f116102b05780636372c68f146109045780636386c1c7146109245780636505079a1461095457600080fd5b8063590ffdce146108ab5780635cce86cd146108cb57600080fd5b80634e718e48146108125780634fb2e45d146108325780634fbee1931461085257806350a8e0161461088b57600080fd5b806336fddb041161035357806346ea7ac81161033857806346ea7ac8146107bd5780634ada218b146107d35780634bbb93eb146107f257600080fd5b806336fddb041461077d578063452ed4f11461079d57600080fd5b80632e8fa82114610700578063313ce5671461071657806332cde6641461073d57806333251a0b1461075d57600080fd5b80630dcbcf1c1161041757806323b872dd116103e65780632610eaca116103cb5780632610eaca146106b457806328577751146106d45780632b28fc7a146106ea57600080fd5b806323b872dd14610674578063260039571461069457600080fd5b80630dcbcf1c146105f15780630fa604e41461062a57806318160ddd1461063f578063218950bc1461065457600080fd5b8063069d955f11610453578063069d955f1461052957806306fdde031461057f5780630758d924146105a1578063095ea7b3146105c157600080fd5b806303fd2a45146104905780630445b667146104c3578063044df726146104e757806305bbedb61461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d9601d5481565b6040519081526020016104ba565b3480156104f357600080fd5b506105076105023660046150a3565b610e56565b005b34801561051557600080fd5b506105076105243660046151d0565b610f2e565b34801561053557600080fd5b50600f5461055a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016104ba565b34801561058b57600080fd5b5061059461103f565b6040516104ba919061526f565b3480156105ad57600080fd5b506011546104a6906001600160a01b031681565b3480156105cd57600080fd5b506105e16105dc366004615282565b6110d1565b60405190151581526020016104ba565b3480156105fd57600080fd5b506105e161060c3660046152ae565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063657600080fd5b506104d96110e8565b34801561064b57600080fd5b506104d961110e565b34801561066057600080fd5b5061050761066f3660046152cb565b611126565b34801561068057600080fd5b506105e161068f3660046152f9565b611218565b3480156106a057600080fd5b506105076106af36600461533a565b611290565b3480156106c057600080fd5b506105076106cf36600461535c565b611394565b3480156106e057600080fd5b506104d960205481565b3480156106f657600080fd5b506104d96107d081565b34801561070c57600080fd5b506104d9601e5481565b34801561072257600080fd5b5061072b6114fc565b60405160ff90911681526020016104ba565b34801561074957600080fd5b5061050761075836600461542e565b611517565b34801561076957600080fd5b506105076107783660046152ae565b611677565b34801561078957600080fd5b50610507610798366004615471565b611742565b3480156107a957600080fd5b506012546104a6906001600160a01b031681565b3480156107c957600080fd5b506104d9610bb881565b3480156107df57600080fd5b506021546105e190610100900460ff1681565b3480156107fe57600080fd5b506104d961080d36600461548f565b6117b5565b34801561081e57600080fd5b5061050761082d36600461548f565b6117e9565b34801561083e57600080fd5b5061050761084d3660046152ae565b611887565b34801561085e57600080fd5b506105e161086d3660046152ae565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561089757600080fd5b506021546105e19062010000900460ff1681565b3480156108b757600080fd5b506105076108c6366004615471565b611ab7565b3480156108d757600080fd5b506105e16108e63660046152ae565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091057600080fd5b506104d961091f3660046152ae565b611b2a565b34801561093057600080fd5b5061094461093f3660046152ae565b611bb3565b6040516104ba94939291906154a8565b34801561096057600080fd5b5061050761096f3660046154f5565b611c54565b34801561098057600080fd5b50610507611d0b565b34801561099557600080fd5b506105076109a4366004615471565b611db8565b3480156109b557600080fd5b506109be611ee3565b604080519283526020830191909152016104ba565b3480156109df57600080fd5b506104d96109ee3660046152ae565b6001600160a01b031660009081526001602052604090205490565b348015610a1557600080fd5b50610507611f2d565b348015610a2a57600080fd5b50610507610a39366004615540565b611ff2565b348015610a4a57600080fd5b50610507610a59366004615471565b612079565b348015610a6a57600080fd5b506000546001600160a01b03166104a6565b348015610a8857600080fd5b506013546104a6906001600160a01b031681565b348015610aa857600080fd5b506105e16121e9565b348015610abd57600080fd5b50610507612252565b348015610ad257600080fd5b5061050761250f565b348015610ae757600080fd5b50610594612587565b348015610afc57600080fd5b506105e1610b0b366004615282565b612596565b348015610b1c57600080fd5b506104d9610b2b3660046152ae565b6125aa565b348015610b3c57600080fd5b50610507610b4b366004615580565b6125f6565b348015610b5c57600080fd5b50601f546105e19060ff1681565b348015610b7657600080fd5b50610507610b853660046155f8565b6126d7565b348015610b9657600080fd5b50610507610ba536600461568d565b612e7d565b348015610bb657600080fd5b506105e1610bc53660046152ae565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bef57600080fd5b50601054610c399061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016104ba565b348015610c8257600080fd5b50610507610c9136600461548f565b613056565b348015610ca257600080fd5b506104d9610cb13660046152cb565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ce857600080fd5b50610507610cf73660046152ae565b6130b2565b348015610d0857600080fd5b5061050761345d565b348015610d1d57600080fd5b50610507610d2c366004615471565b613538565b348015610d3d57600080fd5b506021546105e19060ff1681565b348015610d5757600080fd5b50610507610d663660046156bf565b613612565b348015610d7757600080fd5b506104d96137ca565b348015610d8c57600080fd5b50601454601554601654610dad926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016104ba565b348015610de357600080fd5b50610507610df236600461568d565b613851565b348015610e0357600080fd5b50601c546105e190610100900460ff1681565b348015610e2257600080fd5b506105e1610e313660046152ae565b6139f6565b348015610e4257600080fd5b50610507610e51366004615471565b613a85565b6000546001600160a01b03163314610ea35760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d83398151915260448201526064015b60405180910390fd5b6021546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610f1257600080fd5b505af1158015610f26573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f765760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610fc79085908590600401615768565b600060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b5050505060005b825181101561103a5761102883828151811061101a5761101a61578c565b602002602001015183611db8565b80611032816157b8565b915050610ffc565b505050565b6060600b805461104e906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461107a906157d1565b80156110c75780601f1061109c576101008083540402835291602001916110c7565b820191906000526020600020905b8154815290600101906020018083116110aa57829003601f168201915b5050505050905090565b60006110de338484613af8565b5060015b92915050565b600d546000906110fc9060ff16600a6158ef565b60195461110991906158fe565b905090565b6000600e5460000361111f57600080fd5b50600e5490565b6000546001600160a01b0316331461116e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154610100900460ff161561118357600080fd5b6001600160a01b03811630148015906111a557506001600160a01b0382163014155b80156111c35750816001600160a01b0316816001600160a01b031614155b6111cc57600080fd5b601a80546001600160a01b0319166001600160a01b039283161790556021805476ffffffffffffffffffffffffffffffffffffffff000000191663010000009390921692909202179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461127d576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611277908490615920565b90915550505b611288848484613c50565b949350505050565b6000546001600160a01b031633146112d85760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6064600e546112e791906158fe565b8183600e546112f69190615937565b61130091906158fe565b10156113745760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610e9a565b8082600e546113839190615937565b61138d91906158fe565b6019555050565b6000546001600160a01b031633146113dc5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b805182511461142d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e9a565b60005b82518160ff16101561103a57818160ff16815181106114515761145161578c565b6020026020010151611478336001600160a01b031660009081526001602052604090205490565b101561148357600080fd5b6114e933848360ff168151811061149c5761149c61578c565b6020908102919091010151600d546114b89060ff16600a6158ef565b858560ff16815181106114cd576114cd61578c565b60200260200101516114df9190615937565b6000806001614176565b50806114f481615956565b915050611430565b6000600e5460000361150d57600080fd5b50600d5460ff1690565b6000546001600160a01b0316331461155f5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6107d08361ffff161115801561157b57506107d08261ffff1611155b801561158d57506107d08161ffff1611155b6115d95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e9a565b610bb86115e68385615975565b61ffff1611156116385760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e9a565b600f805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146116bf5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461178a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6012546001600160a01b0316600090815260016020526040812054612710906117df908490615937565b6110e291906158fe565b6000546001600160a01b031633146118315760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60968111156118825760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610e9a565b602055565b6000546001600160a01b031633146118cf5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03811661194b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e9a565b61deac196001600160a01b038216016119cc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e9a565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611a6757600080546001600160a01b03168082526001602052604090912054611a65919083906114df565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611aff5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601a546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e2919061599b565b601a546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c459190810190615a18565b93509350935093509193509193565b6000546001600160a01b03163314611c9c5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601c805461ff001916610100851515908102919091179091556021805460ff1990811685151517909155601f80549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611d535760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601a60009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da357600080fd5b505af193505050508015611db5575060015b50565b6000546001600160a01b03163314611e005760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b0382163014801590611e2757506012546001600160a01b03838116911614155b611e3057600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611e9657601a54604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610ef8565b601a546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401610ef8565b5050565b600d546000908190611ef99060ff16600a6158ef565b601754611f0691906158fe565b600d54909250611f1a9060ff16600a6158ef565b601854611f2791906158fe565b90509091565b6000546001600160a01b03163314611f755760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b600080546001600160a01b039081168252600660209081526040808420805460ff199081169091558454841685526008909252808420805490921690915582546001600160a01b03198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b0316331461203a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601480546001600160a01b039485166001600160a01b031991821617909155601580549385169382169390931790925560168054919093169116179055565b6000546001600160a01b031633146120c15760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b80612120576001600160a01b03828116600081815260026020526040808220805460ff1916905560215490516380c581d160e01b81526004810193909352602483019190915263010000009004909116906380c581d190604401610ef8565b60035415612187576203f4806003544261213a9190615920565b116121875760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e9a565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560215491516380c581d160e01b81526004810193909352602483015263010000009004909116906380c581d190604401610ef8565b600080546001600160a01b031633146122325760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60115461224c9030906001600160a01b0316600019613af8565b50600190565b6000546001600160a01b0316331461229a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154610100900460ff16156122f25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e9a565b60215462010000900460ff1661234a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e9a565b602154630100000090046001600160a01b031661238a576021805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b602154601254600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561241c57600080fd5b505af192505050801561242d575060015b50601a60009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561247e57600080fd5b505af192505050801561248f575060015b506021805461ff0019166101001790556012546001600160a01b0316600090815260016020526040902054612710906124c990600a615937565b6124d391906158fe565b601d556012546001600160a01b03166000908152600160205260409020546127109061250090601e615937565b61250a91906158fe565b601e55565b601a546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561256d57600080fd5b505af1158015612581573d6000803e3d6000fd5b50505050565b6060600c805461104e906157d1565b60006125a3338484613c50565b9392505050565b601a546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611b72565b6000546001600160a01b0316331461263e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b61264981600a615ac5565b6126539083615937565b601a546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461271f5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154600160b81b900460ff16156127795760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b8483146127c85760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b602180546001600160a01b0380851663010000000276ffffffffffffffffffffffffffffffffffffffff0000001990921691909117909155601a80549183166001600160a01b031990921682179055604080517f8129fc1c0000000000000000000000000000000000000000000000000000000081529051638129fc1c9160048082019260009290919082900301818387803b15801561286757600080fd5b505af115801561287b573d6000803e3d6000fd5b50506021546040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015263010000009091046001600160a01b03169250631a6952309150602401600060405180830381600087803b1580156128e357600080fd5b505af19250505080156128f4575060015b50602160039054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af192505050801561296b57506040513d6000823e601f3d908101601f191682016040526129689190810190615ad1565b60015b6129b75760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b600b6129c38582615b9d565b50600c6129d08482615b9d565b50600a828155600d805460ff191660ff84169081179091556129f1916158ef565b600a546129fe9190615937565b600e5550505050601160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7c9190615c5d565b6001600160a01b031663c9c65396601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190615c5d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b719190615c5d565b601280546001600160a01b0319166001600160a01b0392831690811782556000908152600260208181526040808420805460ff19908116600190811790925595549096168452600890915290912080549092169092179055600e54606491612bd99190615937565b612be391906158fe565b601755600e54606490612bf7906002615937565b612c0191906158fe565b601855600e54606490612c15906002615937565b612c1f91906158fe565b601955602180547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b179055600e54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612ca691815260200190565b60405180910390a3601154612cc89030906001600160a01b0316600019613af8565b600054601154612ce7916001600160a01b039081169116600019613af8565b60005b85811015612d8357600d54600090612d069060ff16600a6158ef565b868684818110612d1857612d1861578c565b90506020020135612d299190615937565b600054909150612d6e906001600160a01b0316898985818110612d4e57612d4e61578c565b9050602002016020810190612d6391906152ae565b836000806001614176565b50508080612d7b906157b8565b915050612cea565b50600080546001600160a01b03168082526001602052604090912054612dab919030906114df565b506011546001600160a01b031663f305d7194730612dde816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b6001600160e01b03191681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612e4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e729190615c7a565b505050610f26612252565b6000546001600160a01b03163314612ec55760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6103e8600e546005612ed79190615937565b612ee191906158fe565b8385600e54612ef09190615937565b612efa91906158fe565b1015612f6e5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e9a565b6103e8600e546005612f809190615937565b612f8a91906158fe565b8183600e54612f999190615937565b612fa391906158fe565b10156130175760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e9a565b8284600e546130269190615937565b61303091906158fe565b601755600e548190613043908490615937565b61304d91906158fe565b60185550505050565b6000546001600160a01b0316331461309e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b620b71b081106130ad57600080fd5b601b55565b6000546001600160a01b031633146130fa5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60215462010000900460ff16156131535760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610e9a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190615c5d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322d9190615c5d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190615c5d565b90506001600160a01b03811661341557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e9190615c5d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f9190615c5d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190615c5d565b601280546001600160a01b0319166001600160a01b0392909216919091179055613431565b601280546001600160a01b0319166001600160a01b0383161790555b601180546001600160a01b0319166001600160a01b03841690811790915561103a903090600019613af8565b6000546001600160a01b031633146134a55760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60215462010000900460ff16156134fe5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e9a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611db5573d6000803e3d6000fd5b6000546001600160a01b031633146135805760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b1580156135f057600080fd5b505af1158015613604573d6000803e3d6000fd5b50505050611edf8282611db8565b6000546001600160a01b0316331461365a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6010805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff0000000019166401000000008683160267ffff0000000000001916176601000000000000858316021769ffff00000000000000001916680100000000000000009184169190910217905581836136d58688615975565b6136df9190615975565b6136e99190615975565b601080546bffff000000000000000000001916600160501b61ffff93841602179055600f546000916137249162010000810482169116615975565b60105461ffff9182169250829161375291680100000000000000008104821691600160501b90910416615975565b61ffff161115610f265760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e9a565b601a54604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561382d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611109919061599b565b6000546001600160a01b031633146138995760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b8284600e546138a89190615937565b6138b291906158fe565b601d55600e5481906138c5908490615937565b6138cf91906158fe565b601e819055601d54111561394b5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6012546001600160a01b031660009081526001602052604090205461271090613975906096615937565b61397f91906158fe565b601e5411156125815760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa158015613a61573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190615ca8565b6000546001600160a01b03163314613acd5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316613b735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b038216613bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416613cce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b038316613d4a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b60008211613dc05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613dee5760019250613e1c565b6001600160a01b03861660009081526002602052604090205460ff1615613e185760019150613e1c565b5060015b613e26878761445a565b156140c457602154610100900460ff16613e825760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e9a565b8215613f32576001600160a01b03871660009081526007602052604090205460ff16158015613eca57506001600160a01b03861660009081526007602052604090205460ff16155b15613f3257601754851115613f325760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e9a565b8115613fe2576001600160a01b03871660009081526007602052604090205460ff16158015613f7a57506001600160a01b03861660009081526007602052604090205460ff16155b15613fe257601854851115613fe25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e9a565b6011546001600160a01b03878116911614801590613ffe575081155b156140c4576001600160a01b03861660009081526007602052604090205460ff166140c45760195485614046886001600160a01b031660009081526001602052604090205490565b6140509190615cc5565b11156140c45760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e9a565b811561415d57601c5460ff1661415d57601c54610100900460ff161561415d5730600090815260016020526040902054601d54811061415b57601e54601f5460ff161561414557602080546012546001600160a01b0316600090815260019092526040909120546127109161413891615937565b61414291906158fe565b90505b808210614150578091505b6141598261456f565b505b505b61416b878787868686614176565b979650505050505050565b60215460009062010000900460ff16614278576141938787614b09565b60215462010000900460ff161580156141b157506141b1878761445a565b80156141d657506001600160a01b03871660009081526005602052604090205460ff16155b80156141fb57506001600160a01b03861660009081526005602052604090205460ff16155b8015614205575081155b156142785760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b614282878761445a565b15614336576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af192505050801561431f575060408051601f3d908101601f1916820190925261431c91810190615ca8565b60015b61432857600080fd5b90508061433457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061437857506001600160a01b03871660009081526006602052604090205460ff165b15614381575060005b6001600160a01b038816600090815260016020526040812080548892906143a9908490615920565b9091555086905081156143c6576143c38988888888614c87565b90505b6001600160a01b038816600090815260016020526040812080548392906143ee908490615cc5565b909155506143fe90508989614ee6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161444391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061448757506000546001600160a01b03838116911614155b801561449e57506000546001600160a01b03163214155b80156144c357506001600160a01b03821660009081526009602052604090205460ff16155b80156144e857506001600160a01b03831660009081526009602052604090205460ff16155b80156144ff57506001600160a01b03821661dead14155b801561451357506001600160a01b03821615155b801561452857506001600160a01b0383163014155b801561454957506021546001600160a01b0384811663010000009092041614155b80156125a3575050602154630100000090046001600160a01b0390811691161415919050565b601c805460ff191660011790556040805160c08101825260105461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820181905215806145ee575081155b156145f95750614afc565b3060009081526004602090815260408083206011546001600160a01b0316845290915290205460001914614652573060009081526004602090815260408083206011546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff16856146739190615937565b61467d91906158fe565b61468791906158fe565b905060006146958285615920565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106146cf576146cf61578c565b6001600160a01b03928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147659190615c5d565b816001815181106147785761477861578c565b6001600160a01b0392831660209182029290920101526011546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906147d7908590600090869030904290600401615cdd565b600060405180830381600087803b1580156147f157600080fd5b505af1158015614805573d6000803e3d6000fd5b504792506000915084905061481a8684615937565b61482491906158fe565b90508415614915576011546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156148b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148d89190615c7a565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61491f8183615920565b915085602001518660a0018181516149379190615d19565b61ffff90811690915260a088015188516000935083929182169161495c911686615937565b61496691906158fe565b905060008860a0015161ffff16896060015161ffff16866149879190615937565b61499191906158fe565b9050600061499f8284615cc5565b6149a99087615920565b8a5190915061ffff1615614a1b57601a60009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614a0757600080fd5b505af193505050508015614a19575060015b505b60408a015161ffff1615614a86576014546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114614a7b576040519150601f19603f3d011682016040523d82523d6000602084013e614a80565b606091505b50909450505b60608a015161ffff1615614af1576015546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114614ae6576040519150601f19603f3d011682016040523d82523d6000602084013e614aeb565b606091505b50909450505b505050505050505050505b50601c805460ff19169055565b60215462010000900460ff1615614b885760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b614b92828261445a565b158015614bac57506012546001600160a01b038281169116145b15611edf576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805462ff000019166201000017908190556301000000900416614c1d576021805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b601a546001600160a01b0316614c4057601a80546001600160a01b031916301790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6040805160c08101825260105461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820152600090818515614d045750600f5461ffff16614d2e565b8415614d1d5750600f5462010000900461ffff16614d2e565b50600f54640100000000900461ffff165b80600003614d40578692505050614edd565b602154630100000090046001600160a01b031630148015614d6b57504660011480614d6b5750466038145b15614d7557506111945b6000612710614d84838a615937565b614d8e91906158fe565b905060008360a001518460800151614da69190615975565b61ffff16846080015161ffff1683614dbe9190615937565b614dc891906158fe565b90506000614dd68284615920565b608086015190915061ffff1615614e67576016546001600160a01b031660008181526001602052604081208054859290614e11908490615cc5565b92505081905550806001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614e5d91815260200190565b60405180910390a3505b3060009081526001602052604081208054839290614e86908490615cc5565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614ed5838b615920565b955050505050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff16614f7757601a546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614f6457600080fd5b505af1925050508015614f75575060015b505b6001600160a01b03811660009081526008602052604090205460ff1661500857601a546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614ff557600080fd5b505af1925050508015615006575060015b505b60215460ff1615611edf57601a54601b546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916150619160040190815260200190565b600060405180830381600087803b15801561507b57600080fd5b505af192505050801561508c575060015b15611edf575050565b8015158114611db557600080fd5b600080604083850312156150b657600080fd5b82356150c181615095565b915060208301356150d181615095565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561511b5761511b6150dc565b604052919050565b600067ffffffffffffffff82111561513d5761513d6150dc565b5060051b60200190565b6001600160a01b0381168114611db557600080fd5b600082601f83011261516d57600080fd5b8135602061518261517d83615123565b6150f2565b82815260059290921b840181019181810190868411156151a157600080fd5b8286015b848110156151c55780356151b881615147565b83529183019183016151a5565b509695505050505050565b600080604083850312156151e357600080fd5b823567ffffffffffffffff8111156151fa57600080fd5b6152068582860161515c565b92505060208301356150d181615095565b60005b8381101561523257818101518382015260200161521a565b838111156125815750506000910152565b6000815180845261525b816020860160208601615217565b601f01601f19169290920160200192915050565b6020815260006125a36020830184615243565b6000806040838503121561529557600080fd5b82356152a081615147565b946020939093013593505050565b6000602082840312156152c057600080fd5b81356125a381615147565b600080604083850312156152de57600080fd5b82356152e981615147565b915060208301356150d181615147565b60008060006060848603121561530e57600080fd5b833561531981615147565b9250602084013561532981615147565b929592945050506040919091013590565b6000806040838503121561534d57600080fd5b50508035926020909101359150565b6000806040838503121561536f57600080fd5b823567ffffffffffffffff8082111561538757600080fd5b6153938683870161515c565b93506020915081850135818111156153aa57600080fd5b85019050601f810186136153bd57600080fd5b80356153cb61517d82615123565b81815260059190911b820183019083810190888311156153ea57600080fd5b928401925b82841015615408578335825292840192908401906153ef565b80955050505050509250929050565b803561ffff8116811461542957600080fd5b919050565b60008060006060848603121561544357600080fd5b61544c84615417565b925061545a60208501615417565b915061546860408501615417565b90509250925092565b6000806040838503121561548457600080fd5b82356150c181615147565b6000602082840312156154a157600080fd5b5035919050565b6080815260006154bb6080830187615243565b82810360208401526154cd8187615243565b905082810360408401526154e18186615243565b9050828103606084015261416b8185615243565b60008060006060848603121561550a57600080fd5b833561551581615095565b9250602084013561552581615095565b9150604084013561553581615095565b809150509250925092565b60008060006060848603121561555557600080fd5b833561556081615147565b9250602084013561557081615147565b9150604084013561553581615147565b60008060006060848603121561559557600080fd5b505081359360208301359350604090920135919050565b60008083601f8401126155be57600080fd5b50813567ffffffffffffffff8111156155d657600080fd5b6020830191508360208260051b85010111156155f157600080fd5b9250929050565b6000806000806000806080878903121561561157600080fd5b863567ffffffffffffffff8082111561562957600080fd5b6156358a838b016155ac565b9098509650602089013591508082111561564e57600080fd5b5061565b89828a016155ac565b909550935050604087013561566f81615147565b9150606087013561567f81615147565b809150509295509295509295565b600080600080608085870312156156a357600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156156d757600080fd5b6156e086615417565b94506156ee60208701615417565b93506156fc60408701615417565b925061570a60608701615417565b915061571860808701615417565b90509295509295909350565b600081518084526020808501945080840160005b8381101561575d5781516001600160a01b031687529582019590820190600101615738565b509495945050505050565b60408152600061577b6040830185615724565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016157ca576157ca6157a2565b5060010190565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b8085111561584657816000190482111561582c5761582c6157a2565b8085161561583957918102915b93841c9390800290615810565b509250929050565b60008261585d575060016110e2565b8161586a575060006110e2565b8160018114615880576002811461588a576158a6565b60019150506110e2565b60ff84111561589b5761589b6157a2565b50506001821b6110e2565b5060208310610133831016604e8410600b84101617156158c9575081810a6110e2565b6158d3838361580b565b80600019048211156158e7576158e76157a2565b029392505050565b60006125a360ff84168361584e565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015615932576159326157a2565b500390565b6000816000190483118215151615615951576159516157a2565b500290565b600060ff821660ff810361596c5761596c6157a2565b60010192915050565b600061ffff808316818516808303821115615992576159926157a2565b01949350505050565b6000602082840312156159ad57600080fd5b5051919050565b600082601f8301126159c557600080fd5b815167ffffffffffffffff8111156159df576159df6150dc565b6159f2601f8201601f19166020016150f2565b818152846020838601011115615a0757600080fd5b611288826020830160208701615217565b60008060008060808587031215615a2e57600080fd5b845167ffffffffffffffff80821115615a4657600080fd5b615a52888389016159b4565b95506020870151915080821115615a6857600080fd5b615a74888389016159b4565b94506040870151915080821115615a8a57600080fd5b615a96888389016159b4565b93506060870151915080821115615aac57600080fd5b50615ab9878288016159b4565b91505092959194509250565b60006125a3838361584e565b60008060008060808587031215615ae757600080fd5b845167ffffffffffffffff80821115615aff57600080fd5b615b0b888389016159b4565b95506020870151915080821115615b2157600080fd5b50615b2e878288016159b4565b93505060408501519150606085015160ff81168114615b4c57600080fd5b939692955090935050565b601f82111561103a57600081815260208120601f850160051c81016020861015615b7e5750805b601f850160051c820191505b81811015610f2657828155600101615b8a565b815167ffffffffffffffff811115615bb757615bb76150dc565b615bcb81615bc584546157d1565b84615b57565b602080601f831160018114615c005760008415615be85750858301515b600019600386901b1c1916600185901b178555610f26565b600085815260208120601f198616915b82811015615c2f57888601518255948401946001909101908401615c10565b5085821015615c4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215615c6f57600080fd5b81516125a381615147565b600080600060608486031215615c8f57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615cba57600080fd5b81516125a381615095565b60008219821115615cd857615cd86157a2565b500190565b85815284602082015260a060408201526000615cfc60a0830186615724565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015615d3457615d346157a2565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220d14609cfa4f75d4dcb6846a2ea0c6e07ef6e83e3245e8a6b417c1b303c26cb5564736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106104845760003560e01c80636ab86dc11161025e578063b7df8b3611610143578063eec2744e116100bb578063f94aa1b41161008a578063fdb78c0e1161006f578063fdb78c0e14610df7578063fe575a8714610e16578063feadde9c14610e3657600080fd5b8063f94aa1b414610d80578063fb78680d14610dd757600080fd5b8063eec2744e14610d11578063efe7dc9014610d31578063f08f43a214610d4b578063f7c245ea14610d6b57600080fd5b8063cf84770611610112578063dd62ed3e116100f7578063dd62ed3e14610c96578063eafb5a3c14610cdc578063ee5d9c2d14610cfc57600080fd5b8063cf84770614610be3578063d0b1449d14610c7657600080fd5b8063b7df8b3614610b50578063b81dc53914610b6a578063c0488b5614610b8a578063c705c56914610baa57600080fd5b80638a63bd9b116101d6578063a9059cbb116101a5578063b1b08f711161018a578063b1b08f71146106ea578063b3d514fb146106ea578063b421626c14610b3057600080fd5b8063a9059cbb14610af0578063ab5cb5a614610b1057600080fd5b80638a63bd9b14610a9c5780638a8c523c14610ab157806392bd7b2c14610ac657806395d89b4114610adb57600080fd5b8063715018a61161022d57806380c581d11161021257806380c581d114610a3e578063893d20e814610a5e57806389a3027114610a7c57600080fd5b8063715018a614610a0957806375cb1bd114610a1e57600080fd5b80636ab86dc1146109745780636b639a25146109895780636ebd0078146109a957806370a08231146109d357600080fd5b80632e8fa821116103845780634e718e48116102fc578063590ffdce116102cb5780636372c68f116102b05780636372c68f146109045780636386c1c7146109245780636505079a1461095457600080fd5b8063590ffdce146108ab5780635cce86cd146108cb57600080fd5b80634e718e48146108125780634fb2e45d146108325780634fbee1931461085257806350a8e0161461088b57600080fd5b806336fddb041161035357806346ea7ac81161033857806346ea7ac8146107bd5780634ada218b146107d35780634bbb93eb146107f257600080fd5b806336fddb041461077d578063452ed4f11461079d57600080fd5b80632e8fa82114610700578063313ce5671461071657806332cde6641461073d57806333251a0b1461075d57600080fd5b80630dcbcf1c1161041757806323b872dd116103e65780632610eaca116103cb5780632610eaca146106b457806328577751146106d45780632b28fc7a146106ea57600080fd5b806323b872dd14610674578063260039571461069457600080fd5b80630dcbcf1c146105f15780630fa604e41461062a57806318160ddd1461063f578063218950bc1461065457600080fd5b8063069d955f11610453578063069d955f1461052957806306fdde031461057f5780630758d924146105a1578063095ea7b3146105c157600080fd5b806303fd2a45146104905780630445b667146104c3578063044df726146104e757806305bbedb61461050957600080fd5b3661048b57005b600080fd5b34801561049c57600080fd5b506104a661dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156104cf57600080fd5b506104d9601d5481565b6040519081526020016104ba565b3480156104f357600080fd5b506105076105023660046150a3565b610e56565b005b34801561051557600080fd5b506105076105243660046151d0565b610f2e565b34801561053557600080fd5b50600f5461055a9061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016104ba565b34801561058b57600080fd5b5061059461103f565b6040516104ba919061526f565b3480156105ad57600080fd5b506011546104a6906001600160a01b031681565b3480156105cd57600080fd5b506105e16105dc366004615282565b6110d1565b60405190151581526020016104ba565b3480156105fd57600080fd5b506105e161060c3660046152ae565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561063657600080fd5b506104d96110e8565b34801561064b57600080fd5b506104d961110e565b34801561066057600080fd5b5061050761066f3660046152cb565b611126565b34801561068057600080fd5b506105e161068f3660046152f9565b611218565b3480156106a057600080fd5b506105076106af36600461533a565b611290565b3480156106c057600080fd5b506105076106cf36600461535c565b611394565b3480156106e057600080fd5b506104d960205481565b3480156106f657600080fd5b506104d96107d081565b34801561070c57600080fd5b506104d9601e5481565b34801561072257600080fd5b5061072b6114fc565b60405160ff90911681526020016104ba565b34801561074957600080fd5b5061050761075836600461542e565b611517565b34801561076957600080fd5b506105076107783660046152ae565b611677565b34801561078957600080fd5b50610507610798366004615471565b611742565b3480156107a957600080fd5b506012546104a6906001600160a01b031681565b3480156107c957600080fd5b506104d9610bb881565b3480156107df57600080fd5b506021546105e190610100900460ff1681565b3480156107fe57600080fd5b506104d961080d36600461548f565b6117b5565b34801561081e57600080fd5b5061050761082d36600461548f565b6117e9565b34801561083e57600080fd5b5061050761084d3660046152ae565b611887565b34801561085e57600080fd5b506105e161086d3660046152ae565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561089757600080fd5b506021546105e19062010000900460ff1681565b3480156108b757600080fd5b506105076108c6366004615471565b611ab7565b3480156108d757600080fd5b506105e16108e63660046152ae565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561091057600080fd5b506104d961091f3660046152ae565b611b2a565b34801561093057600080fd5b5061094461093f3660046152ae565b611bb3565b6040516104ba94939291906154a8565b34801561096057600080fd5b5061050761096f3660046154f5565b611c54565b34801561098057600080fd5b50610507611d0b565b34801561099557600080fd5b506105076109a4366004615471565b611db8565b3480156109b557600080fd5b506109be611ee3565b604080519283526020830191909152016104ba565b3480156109df57600080fd5b506104d96109ee3660046152ae565b6001600160a01b031660009081526001602052604090205490565b348015610a1557600080fd5b50610507611f2d565b348015610a2a57600080fd5b50610507610a39366004615540565b611ff2565b348015610a4a57600080fd5b50610507610a59366004615471565b612079565b348015610a6a57600080fd5b506000546001600160a01b03166104a6565b348015610a8857600080fd5b506013546104a6906001600160a01b031681565b348015610aa857600080fd5b506105e16121e9565b348015610abd57600080fd5b50610507612252565b348015610ad257600080fd5b5061050761250f565b348015610ae757600080fd5b50610594612587565b348015610afc57600080fd5b506105e1610b0b366004615282565b612596565b348015610b1c57600080fd5b506104d9610b2b3660046152ae565b6125aa565b348015610b3c57600080fd5b50610507610b4b366004615580565b6125f6565b348015610b5c57600080fd5b50601f546105e19060ff1681565b348015610b7657600080fd5b50610507610b853660046155f8565b6126d7565b348015610b9657600080fd5b50610507610ba536600461568d565b612e7d565b348015610bb657600080fd5b506105e1610bc53660046152ae565b6001600160a01b031660009081526008602052604090205460ff1690565b348015610bef57600080fd5b50601054610c399061ffff80821691620100008104821691640100000000820481169166010000000000008104821691680100000000000000008204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016104ba565b348015610c8257600080fd5b50610507610c9136600461548f565b613056565b348015610ca257600080fd5b506104d9610cb13660046152cb565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610ce857600080fd5b50610507610cf73660046152ae565b6130b2565b348015610d0857600080fd5b5061050761345d565b348015610d1d57600080fd5b50610507610d2c366004615471565b613538565b348015610d3d57600080fd5b506021546105e19060ff1681565b348015610d5757600080fd5b50610507610d663660046156bf565b613612565b348015610d7757600080fd5b506104d96137ca565b348015610d8c57600080fd5b50601454601554601654610dad926001600160a01b03908116928116911683565b604080516001600160a01b03948516815292841660208401529216918101919091526060016104ba565b348015610de357600080fd5b50610507610df236600461568d565b613851565b348015610e0357600080fd5b50601c546105e190610100900460ff1681565b348015610e2257600080fd5b506105e1610e313660046152ae565b6139f6565b348015610e4257600080fd5b50610507610e51366004615471565b613a85565b6000546001600160a01b03163314610ea35760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d83398151915260448201526064015b60405180910390fd5b6021546040517fefbdbabd0000000000000000000000000000000000000000000000000000000081528315156004820152821515602482015263010000009091046001600160a01b03169063efbdbabd906044015b600060405180830381600087803b158015610f1257600080fd5b505af1158015610f26573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610f765760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517f05bbedb600000000000000000000000000000000000000000000000000000000815263010000009091046001600160a01b0316906305bbedb690610fc79085908590600401615768565b600060405180830381600087803b158015610fe157600080fd5b505af1158015610ff5573d6000803e3d6000fd5b5050505060005b825181101561103a5761102883828151811061101a5761101a61578c565b602002602001015183611db8565b80611032816157b8565b915050610ffc565b505050565b6060600b805461104e906157d1565b80601f016020809104026020016040519081016040528092919081815260200182805461107a906157d1565b80156110c75780601f1061109c576101008083540402835291602001916110c7565b820191906000526020600020905b8154815290600101906020018083116110aa57829003601f168201915b5050505050905090565b60006110de338484613af8565b5060015b92915050565b600d546000906110fc9060ff16600a6158ef565b60195461110991906158fe565b905090565b6000600e5460000361111f57600080fd5b50600e5490565b6000546001600160a01b0316331461116e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154610100900460ff161561118357600080fd5b6001600160a01b03811630148015906111a557506001600160a01b0382163014155b80156111c35750816001600160a01b0316816001600160a01b031614155b6111cc57600080fd5b601a80546001600160a01b0319166001600160a01b039283161790556021805476ffffffffffffffffffffffffffffffffffffffff000000191663010000009390921692909202179055565b6001600160a01b03831660009081526004602090815260408083203384529091528120546000191461127d576001600160a01b038416600090815260046020908152604080832033845290915281208054849290611277908490615920565b90915550505b611288848484613c50565b949350505050565b6000546001600160a01b031633146112d85760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6064600e546112e791906158fe565b8183600e546112f69190615937565b61130091906158fe565b10156113745760405162461bcd60e51b815260206004820152603060248201527f4d61782057616c6c657420616d74206d7573742062652061626f76652031252060448201527f6f6620746f74616c20737570706c792e000000000000000000000000000000006064820152608401610e9a565b8082600e546113839190615937565b61138d91906158fe565b6019555050565b6000546001600160a01b031633146113dc5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b805182511461142d5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610e9a565b60005b82518160ff16101561103a57818160ff16815181106114515761145161578c565b6020026020010151611478336001600160a01b031660009081526001602052604090205490565b101561148357600080fd5b6114e933848360ff168151811061149c5761149c61578c565b6020908102919091010151600d546114b89060ff16600a6158ef565b858560ff16815181106114cd576114cd61578c565b60200260200101516114df9190615937565b6000806001614176565b50806114f481615956565b915050611430565b6000600e5460000361150d57600080fd5b50600d5460ff1690565b6000546001600160a01b0316331461155f5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6107d08361ffff161115801561157b57506107d08261ffff1611155b801561158d57506107d08161ffff1611155b6115d95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610e9a565b610bb86115e68385615975565b61ffff1611156116385760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f742065786365656420726f756e6474726970206d6178696d756d2e6044820152606401610e9a565b600f805461ffff94851663ffffffff199091161762010000938516939093029290921765ffff0000000019166401000000009190931602919091179055565b6000546001600160a01b031633146116bf5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526301000000909204909116906333251a0b90602401600060405180830381600087803b15801561172757600080fd5b505af115801561173b573d6000803e3d6000fd5b5050505050565b6000546001600160a01b0316331461178a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6012546001600160a01b0316600090815260016020526040812054612710906117df908490615937565b6110e291906158fe565b6000546001600160a01b031633146118315760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60968111156118825760405162461bcd60e51b815260206004820152601660248201527f43616e6e6f74207365742061626f766520312e35252e000000000000000000006044820152606401610e9a565b602055565b6000546001600160a01b031633146118cf5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03811661194b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e9a565b61deac196001600160a01b038216016119cc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610e9a565b600080546001600160a01b039081168252600660208181526040808520805460ff1990811690915585548516865260088084528287208054831690558786168752938352818620805482166001908117909155938352818620805490911684179055845490931684525290205415611a6757600080546001600160a01b03168082526001602052604090912054611a65919083906114df565b505b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03163314611aff5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b601a546040517ff5df70180000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f5df7018906024015b602060405180830381865afa158015611b8f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e2919061599b565b601a546040517f6386c1c70000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301526060928392839283921690636386c1c790602401600060405180830381865afa158015611c1d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c459190810190615a18565b93509350935093509193509193565b6000546001600160a01b03163314611c9c5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601c805461ff001916610100851515908102919091179091556021805460ff1990811685151517909155601f80549091168315151790556040519081527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a1505050565b6000546001600160a01b03163314611d535760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601a60009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be476040518263ffffffff1660e01b81526004016000604051808303818588803b158015611da357600080fd5b505af193505050508015611db5575060015b50565b6000546001600160a01b03163314611e005760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b0382163014801590611e2757506012546001600160a01b03838116911614155b611e3057600080fd5b6001600160a01b0382166000908152600860205260409020805460ff19168215801591909117909155611e9657601a54604051636f823f4f60e11b81526001600160a01b038481166004830152600060248301529091169063df047e9e90604401610ef8565b601a546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401610ef8565b5050565b600d546000908190611ef99060ff16600a6158ef565b601754611f0691906158fe565b600d54909250611f1a9060ff16600a6158ef565b601854611f2791906158fe565b90509091565b6000546001600160a01b03163314611f755760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b600080546001600160a01b039081168252600660209081526040808420805460ff199081169091558454841685526008909252808420805490921690915582546001600160a01b03198116845590519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350565b6000546001600160a01b0316331461203a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b601480546001600160a01b039485166001600160a01b031991821617909155601580549385169382169390931790925560168054919093169116179055565b6000546001600160a01b031633146120c15760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b80612120576001600160a01b03828116600081815260026020526040808220805460ff1916905560215490516380c581d160e01b81526004810193909352602483019190915263010000009004909116906380c581d190604401610ef8565b60035415612187576203f4806003544261213a9190615920565b116121875760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610e9a565b6001600160a01b0382811660008181526002602052604090819020805460ff191660019081179091554260035560215491516380c581d160e01b81526004810193909352602483015263010000009004909116906380c581d190604401610ef8565b600080546001600160a01b031633146122325760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60115461224c9030906001600160a01b0316600019613af8565b50600190565b6000546001600160a01b0316331461229a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154610100900460ff16156122f25760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610e9a565b60215462010000900460ff1661234a5760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610e9a565b602154630100000090046001600160a01b031661238a576021805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b602154601254600d546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff909116606482015263010000009092041690636c115c3490608401600060405180830381600087803b15801561241c57600080fd5b505af192505050801561242d575060015b50601a60009054906101000a90046001600160a01b03166001600160a01b0316638129fc1c6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561247e57600080fd5b505af192505050801561248f575060015b506021805461ff0019166101001790556012546001600160a01b0316600090815260016020526040902054612710906124c990600a615937565b6124d391906158fe565b601d556012546001600160a01b03166000908152600160205260409020546127109061250090601e615937565b61250a91906158fe565b601e55565b601a546040517f2e6f0efd0000000000000000000000000000000000000000000000000000000081523360048201526001600160a01b0390911690632e6f0efd90602401600060405180830381600087803b15801561256d57600080fd5b505af1158015612581573d6000803e3d6000fd5b50505050565b6060600c805461104e906157d1565b60006125a3338484613c50565b9392505050565b601a546040517ff6ed20170000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092169063f6ed201790602401611b72565b6000546001600160a01b0316331461263e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b61264981600a615ac5565b6126539083615937565b601a546040517f155ad51800000000000000000000000000000000000000000000000000000000815260048101869052602481018390529193506001600160a01b03169063155ad51890604401600060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b50505050505050565b6000546001600160a01b0316331461271f5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b602154600160b81b900460ff16156127795760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b8483146127c85760405162461bcd60e51b815260206004820152600160248201527f32000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b602180546001600160a01b0380851663010000000276ffffffffffffffffffffffffffffffffffffffff0000001990921691909117909155601a80549183166001600160a01b031990921682179055604080517f8129fc1c0000000000000000000000000000000000000000000000000000000081529051638129fc1c9160048082019260009290919082900301818387803b15801561286757600080fd5b505af115801561287b573d6000803e3d6000fd5b50506021546040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015263010000009091046001600160a01b03169250631a6952309150602401600060405180830381600087803b1580156128e357600080fd5b505af19250505080156128f4575060015b50602160039054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b81526004016000604051808303816000875af192505050801561296b57506040513d6000823e601f3d908101601f191682016040526129689190810190615ad1565b60015b6129b75760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610e9a565b600b6129c38582615b9d565b50600c6129d08482615b9d565b50600a828155600d805460ff191660ff84169081179091556129f1916158ef565b600a546129fe9190615937565b600e5550505050601160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7c9190615c5d565b6001600160a01b031663c9c65396601160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b019190615c5d565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015612b4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b719190615c5d565b601280546001600160a01b0319166001600160a01b0392831690811782556000908152600260208181526040808420805460ff19908116600190811790925595549096168452600890915290912080549092169092179055600e54606491612bd99190615937565b612be391906158fe565b601755600e54606490612bf7906002615937565b612c0191906158fe565b601855600e54606490612c15906002615937565b612c1f91906158fe565b601955602180547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16600160b81b179055600e54600080546001600160a01b03908116825260016020526040808320849055825490519116927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91612ca691815260200190565b60405180910390a3601154612cc89030906001600160a01b0316600019613af8565b600054601154612ce7916001600160a01b039081169116600019613af8565b60005b85811015612d8357600d54600090612d069060ff16600a6158ef565b868684818110612d1857612d1861578c565b90506020020135612d299190615937565b600054909150612d6e906001600160a01b0316898985818110612d4e57612d4e61578c565b9050602002016020810190612d6391906152ae565b836000806001614176565b50508080612d7b906157b8565b915050612cea565b50600080546001600160a01b03168082526001602052604090912054612dab919030906114df565b506011546001600160a01b031663f305d7194730612dde816001600160a01b031660009081526001602052604090205490565b6000805460405160e087901b6001600160e01b03191681526001600160a01b03948516600482015260248101939093526044830182905260648301919091529190911660848201524260a482015260c40160606040518083038185885af1158015612e4d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e729190615c7a565b505050610f26612252565b6000546001600160a01b03163314612ec55760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6103e8600e546005612ed79190615937565b612ee191906158fe565b8385600e54612ef09190615937565b612efa91906158fe565b1015612f6e5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e9a565b6103e8600e546005612f809190615937565b612f8a91906158fe565b8183600e54612f999190615937565b612fa391906158fe565b10156130175760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3525206f6620746f74616c20737570706c792e0000000000000000006064820152608401610e9a565b8284600e546130269190615937565b61303091906158fe565b601755600e548190613043908490615937565b61304d91906158fe565b60185550505050565b6000546001600160a01b0316331461309e5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b620b71b081106130ad57600080fd5b601b55565b6000546001600160a01b031633146130fa5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60215462010000900460ff16156131535760405162461bcd60e51b815260206004820152601e60248201527f43616e6e6f74206368616e6765206166746572206c69717569646974792e00006044820152606401610e9a565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015613198573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131bc9190615c5d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061322d9190615c5d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015613278573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061329c9190615c5d565b90506001600160a01b03811661341557816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061330e9190615c5d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561335b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061337f9190615c5d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156133cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133f09190615c5d565b601280546001600160a01b0319166001600160a01b0392909216919091179055613431565b601280546001600160a01b0319166001600160a01b0383161790555b601180546001600160a01b0319166001600160a01b03841690811790915561103a903090600019613af8565b6000546001600160a01b031633146134a55760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b60215462010000900460ff16156134fe5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610e9a565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611db5573d6000803e3d6000fd5b6000546001600160a01b031633146135805760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6021546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b038481166004830152831515602483015263010000009092049091169063eec2744e90604401600060405180830381600087803b1580156135f057600080fd5b505af1158015613604573d6000803e3d6000fd5b50505050611edf8282611db8565b6000546001600160a01b0316331461365a5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6010805461ffff87811663ffffffff199092169190911762010000878316021767ffffffff0000000019166401000000008683160267ffff0000000000001916176601000000000000858316021769ffff00000000000000001916680100000000000000009184169190910217905581836136d58688615975565b6136df9190615975565b6136e99190615975565b601080546bffff000000000000000000001916600160501b61ffff93841602179055600f546000916137249162010000810482169116615975565b60105461ffff9182169250829161375291680100000000000000008104821691600160501b90910416615975565b61ffff161115610f265760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74206578636565642073756d206f662062757920616e642073656c60448201527f6c20666565732e000000000000000000000000000000000000000000000000006064820152608401610e9a565b601a54604080517f5695fa5800000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691635695fa589160048083019260209291908290030181865afa15801561382d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611109919061599b565b6000546001600160a01b031633146138995760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b8284600e546138a89190615937565b6138b291906158fe565b601d55600e5481906138c5908490615937565b6138cf91906158fe565b601e819055601d54111561394b5760405162461bcd60e51b815260206004820152602160248201527f5468726573686f6c642063616e6e6f742062652061626f766520616d6f756e7460448201527f2e000000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6012546001600160a01b031660009081526001602052604090205461271090613975906096615937565b61397f91906158fe565b601e5411156125815760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742062652061626f766520312e3525206f662063757272656e742060448201527f50492e00000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6021546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015260009263010000009004169063fe575a8790602401602060405180830381865afa158015613a61573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190615ca8565b6000546001600160a01b03163314613acd5760405162461bcd60e51b81526020600482018190526024820152600080516020615d3d8339815191526044820152606401610e9a565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b6001600160a01b038316613b735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b038216613bef5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b038416613cce5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b038316613d4a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b60008211613dc05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610e9a565b6001600160a01b0384166000908152600260205260408120548190819060ff1615613dee5760019250613e1c565b6001600160a01b03861660009081526002602052604090205460ff1615613e185760019150613e1c565b5060015b613e26878761445a565b156140c457602154610100900460ff16613e825760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610e9a565b8215613f32576001600160a01b03871660009081526007602052604090205460ff16158015613eca57506001600160a01b03861660009081526007602052604090205460ff16155b15613f3257601754851115613f325760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e9a565b8115613fe2576001600160a01b03871660009081526007602052604090205460ff16158015613f7a57506001600160a01b03861660009081526007602052604090205460ff16155b15613fe257601854851115613fe25760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610e9a565b6011546001600160a01b03878116911614801590613ffe575081155b156140c4576001600160a01b03861660009081526007602052604090205460ff166140c45760195485614046886001600160a01b031660009081526001602052604090205490565b6140509190615cc5565b11156140c45760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610e9a565b811561415d57601c5460ff1661415d57601c54610100900460ff161561415d5730600090815260016020526040902054601d54811061415b57601e54601f5460ff161561414557602080546012546001600160a01b0316600090815260019092526040909120546127109161413891615937565b61414291906158fe565b90505b808210614150578091505b6141598261456f565b505b505b61416b878787868686614176565b979650505050505050565b60215460009062010000900460ff16614278576141938787614b09565b60215462010000900460ff161580156141b157506141b1878761445a565b80156141d657506001600160a01b03871660009081526005602052604090205460ff16155b80156141fb57506001600160a01b03861660009081526005602052604090205460ff16155b8015614205575081155b156142785760405162461bcd60e51b815260206004820152602260248201527f5072652d6c6971756964697479207472616e736665722070726f74656374696f60448201527f6e2e0000000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b614282878761445a565b15614336576021546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b03898116600483015288811660248301526044820188905260009263010000009004169063ecd07a53906064016020604051808303816000875af192505050801561431f575060408051601f3d908101601f1916820190925261431c91810190615ca8565b60015b61432857600080fd5b90508061433457600080fd5b505b6001600160a01b03871660009081526006602052604090205460019060ff168061437857506001600160a01b03871660009081526006602052604090205460ff165b15614381575060005b6001600160a01b038816600090815260016020526040812080548892906143a9908490615920565b9091555086905081156143c6576143c38988888888614c87565b90505b6001600160a01b038816600090815260016020526040812080548392906143ee908490615cc5565b909155506143fe90508989614ee6565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161444391815260200190565b60405180910390a350600198975050505050505050565b600080546001600160a01b0384811691161480159061448757506000546001600160a01b03838116911614155b801561449e57506000546001600160a01b03163214155b80156144c357506001600160a01b03821660009081526009602052604090205460ff16155b80156144e857506001600160a01b03831660009081526009602052604090205460ff16155b80156144ff57506001600160a01b03821661dead14155b801561451357506001600160a01b03821615155b801561452857506001600160a01b0383163014155b801561454957506021546001600160a01b0384811663010000009092041614155b80156125a3575050602154630100000090046001600160a01b0390811691161415919050565b601c805460ff191660011790556040805160c08101825260105461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820181905215806145ee575081155b156145f95750614afc565b3060009081526004602090815260408083206011546001600160a01b0316845290915290205460001914614652573060009081526004602090815260408083206011546001600160a01b03168452909152902060001990555b600060028260a0015161ffff16836020015161ffff16856146739190615937565b61467d91906158fe565b61468791906158fe565b905060006146958285615920565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106146cf576146cf61578c565b6001600160a01b03928316602091820292909201810191909152601154604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015614741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147659190615c5d565b816001815181106147785761477861578c565b6001600160a01b0392831660209182029290920101526011546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac947906147d7908590600090869030904290600401615cdd565b600060405180830381600087803b1580156147f157600080fd5b505af1158015614805573d6000803e3d6000fd5b504792506000915084905061481a8684615937565b61482491906158fe565b90508415614915576011546040517ff305d71900000000000000000000000000000000000000000000000000000000815230600482015260248101879052600060448201819052606482015261dead60848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af11580156148b3573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906148d89190615c7a565b505060408051838152602081018890527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b61491f8183615920565b915085602001518660a0018181516149379190615d19565b61ffff90811690915260a088015188516000935083929182169161495c911686615937565b61496691906158fe565b905060008860a0015161ffff16896060015161ffff16866149879190615937565b61499191906158fe565b9050600061499f8284615cc5565b6149a99087615920565b8a5190915061ffff1615614a1b57601a60009054906101000a90046001600160a01b03166001600160a01b03166386d5c4be846040518263ffffffff1660e01b81526004016000604051808303818588803b158015614a0757600080fd5b505af193505050508015614a19575060015b505b60408a015161ffff1615614a86576014546040516001600160a01b03909116906188b89083906000818181858888f193505050503d8060008114614a7b576040519150601f19603f3d011682016040523d82523d6000602084013e614a80565b606091505b50909450505b60608a015161ffff1615614af1576015546040516001600160a01b03909116906188b89084906000818181858888f193505050503d8060008114614ae6576040519150601f19603f3d011682016040523d82523d6000602084013e614aeb565b606091505b50909450505b505050505050505050505b50601c805460ff19169055565b60215462010000900460ff1615614b885760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610e9a565b614b92828261445a565b158015614bac57506012546001600160a01b038281169116145b15611edf576001600160a01b038083166000908152600960205260409020805460ff191660011790556021805462ff000019166201000017908190556301000000900416614c1d576021805476ffffffffffffffffffffffffffffffffffffffff0000001916306301000000021790555b601a546001600160a01b0316614c4057601a80546001600160a01b031916301790555b601c805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6040805160c08101825260105461ffff8082168352620100008204811660208401526401000000008204811693830193909352660100000000000081048316606083015268010000000000000000810483166080830152600160501b900490911660a0820152600090818515614d045750600f5461ffff16614d2e565b8415614d1d5750600f5462010000900461ffff16614d2e565b50600f54640100000000900461ffff165b80600003614d40578692505050614edd565b602154630100000090046001600160a01b031630148015614d6b57504660011480614d6b5750466038145b15614d7557506111945b6000612710614d84838a615937565b614d8e91906158fe565b905060008360a001518460800151614da69190615975565b61ffff16846080015161ffff1683614dbe9190615937565b614dc891906158fe565b90506000614dd68284615920565b608086015190915061ffff1615614e67576016546001600160a01b031660008181526001602052604081208054859290614e11908490615cc5565b92505081905550806001600160a01b03168c6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614e5d91815260200190565b60405180910390a3505b3060009081526001602052604081208054839290614e86908490615cc5565b909155505060405181815230906001600160a01b038d16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3614ed5838b615920565b955050505050505b95945050505050565b6001600160a01b03821660009081526008602052604090205460ff16614f7757601a546001600160a01b0383811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614f6457600080fd5b505af1925050508015614f75575060015b505b6001600160a01b03811660009081526008602052604090205460ff1661500857601a546001600160a01b0382811660008181526001602052604090819020549051636f823f4f60e11b81526004810192909252602482015291169063df047e9e90604401600060405180830381600087803b158015614ff557600080fd5b505af1925050508015615006575060015b505b60215460ff1615611edf57601a54601b546040517fa9e732bb0000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163a9e732bb916150619160040190815260200190565b600060405180830381600087803b15801561507b57600080fd5b505af192505050801561508c575060015b15611edf575050565b8015158114611db557600080fd5b600080604083850312156150b657600080fd5b82356150c181615095565b915060208301356150d181615095565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561511b5761511b6150dc565b604052919050565b600067ffffffffffffffff82111561513d5761513d6150dc565b5060051b60200190565b6001600160a01b0381168114611db557600080fd5b600082601f83011261516d57600080fd5b8135602061518261517d83615123565b6150f2565b82815260059290921b840181019181810190868411156151a157600080fd5b8286015b848110156151c55780356151b881615147565b83529183019183016151a5565b509695505050505050565b600080604083850312156151e357600080fd5b823567ffffffffffffffff8111156151fa57600080fd5b6152068582860161515c565b92505060208301356150d181615095565b60005b8381101561523257818101518382015260200161521a565b838111156125815750506000910152565b6000815180845261525b816020860160208601615217565b601f01601f19169290920160200192915050565b6020815260006125a36020830184615243565b6000806040838503121561529557600080fd5b82356152a081615147565b946020939093013593505050565b6000602082840312156152c057600080fd5b81356125a381615147565b600080604083850312156152de57600080fd5b82356152e981615147565b915060208301356150d181615147565b60008060006060848603121561530e57600080fd5b833561531981615147565b9250602084013561532981615147565b929592945050506040919091013590565b6000806040838503121561534d57600080fd5b50508035926020909101359150565b6000806040838503121561536f57600080fd5b823567ffffffffffffffff8082111561538757600080fd5b6153938683870161515c565b93506020915081850135818111156153aa57600080fd5b85019050601f810186136153bd57600080fd5b80356153cb61517d82615123565b81815260059190911b820183019083810190888311156153ea57600080fd5b928401925b82841015615408578335825292840192908401906153ef565b80955050505050509250929050565b803561ffff8116811461542957600080fd5b919050565b60008060006060848603121561544357600080fd5b61544c84615417565b925061545a60208501615417565b915061546860408501615417565b90509250925092565b6000806040838503121561548457600080fd5b82356150c181615147565b6000602082840312156154a157600080fd5b5035919050565b6080815260006154bb6080830187615243565b82810360208401526154cd8187615243565b905082810360408401526154e18186615243565b9050828103606084015261416b8185615243565b60008060006060848603121561550a57600080fd5b833561551581615095565b9250602084013561552581615095565b9150604084013561553581615095565b809150509250925092565b60008060006060848603121561555557600080fd5b833561556081615147565b9250602084013561557081615147565b9150604084013561553581615147565b60008060006060848603121561559557600080fd5b505081359360208301359350604090920135919050565b60008083601f8401126155be57600080fd5b50813567ffffffffffffffff8111156155d657600080fd5b6020830191508360208260051b85010111156155f157600080fd5b9250929050565b6000806000806000806080878903121561561157600080fd5b863567ffffffffffffffff8082111561562957600080fd5b6156358a838b016155ac565b9098509650602089013591508082111561564e57600080fd5b5061565b89828a016155ac565b909550935050604087013561566f81615147565b9150606087013561567f81615147565b809150509295509295509295565b600080600080608085870312156156a357600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a086880312156156d757600080fd5b6156e086615417565b94506156ee60208701615417565b93506156fc60408701615417565b925061570a60608701615417565b915061571860808701615417565b90509295509295909350565b600081518084526020808501945080840160005b8381101561575d5781516001600160a01b031687529582019590820190600101615738565b509495945050505050565b60408152600061577b6040830185615724565b905082151560208301529392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016157ca576157ca6157a2565b5060010190565b600181811c908216806157e557607f821691505b60208210810361580557634e487b7160e01b600052602260045260246000fd5b50919050565b600181815b8085111561584657816000190482111561582c5761582c6157a2565b8085161561583957918102915b93841c9390800290615810565b509250929050565b60008261585d575060016110e2565b8161586a575060006110e2565b8160018114615880576002811461588a576158a6565b60019150506110e2565b60ff84111561589b5761589b6157a2565b50506001821b6110e2565b5060208310610133831016604e8410600b84101617156158c9575081810a6110e2565b6158d3838361580b565b80600019048211156158e7576158e76157a2565b029392505050565b60006125a360ff84168361584e565b60008261591b57634e487b7160e01b600052601260045260246000fd5b500490565b600082821015615932576159326157a2565b500390565b6000816000190483118215151615615951576159516157a2565b500290565b600060ff821660ff810361596c5761596c6157a2565b60010192915050565b600061ffff808316818516808303821115615992576159926157a2565b01949350505050565b6000602082840312156159ad57600080fd5b5051919050565b600082601f8301126159c557600080fd5b815167ffffffffffffffff8111156159df576159df6150dc565b6159f2601f8201601f19166020016150f2565b818152846020838601011115615a0757600080fd5b611288826020830160208701615217565b60008060008060808587031215615a2e57600080fd5b845167ffffffffffffffff80821115615a4657600080fd5b615a52888389016159b4565b95506020870151915080821115615a6857600080fd5b615a74888389016159b4565b94506040870151915080821115615a8a57600080fd5b615a96888389016159b4565b93506060870151915080821115615aac57600080fd5b50615ab9878288016159b4565b91505092959194509250565b60006125a3838361584e565b60008060008060808587031215615ae757600080fd5b845167ffffffffffffffff80821115615aff57600080fd5b615b0b888389016159b4565b95506020870151915080821115615b2157600080fd5b50615b2e878288016159b4565b93505060408501519150606085015160ff81168114615b4c57600080fd5b939692955090935050565b601f82111561103a57600081815260208120601f850160051c81016020861015615b7e5750805b601f850160051c820191505b81811015610f2657828155600101615b8a565b815167ffffffffffffffff811115615bb757615bb76150dc565b615bcb81615bc584546157d1565b84615b57565b602080601f831160018114615c005760008415615be85750858301515b600019600386901b1c1916600185901b178555610f26565b600085815260208120601f198616915b82811015615c2f57888601518255948401946001909101908401615c10565b5085821015615c4d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215615c6f57600080fd5b81516125a381615147565b600080600060608486031215615c8f57600080fd5b8351925060208401519150604084015190509250925092565b600060208284031215615cba57600080fd5b81516125a381615095565b60008219821115615cd857615cd86157a2565b500190565b85815284602082015260a060408201526000615cfc60a0830186615724565b6001600160a01b0394909416606083015250608001529392505050565b600061ffff83811690831681811015615d3457615d346157a2565b03939250505056fe4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572a2646970667358221220d14609cfa4f75d4dcb6846a2ea0c6e07ef6e83e3245e8a6b417c1b303c26cb5564736f6c634300080f0033

Deployed Bytecode Sourcemap

5105:29065:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6929:73;;;;;;;;;;;;6960:42;6929:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;6929:73:0;;;;;;;;7738:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;7738:28:0;245:177:1;19434:151:0;;;;;;;;;;-1:-1:-1;19434:151:0;;;;;:::i;:::-;;:::i;:::-;;18819:294;;;;;;;;;;-1:-1:-1;18819:294:0;;;;;:::i;:::-;;:::i;6185:109::-;;;;;;;;;;-1:-1:-1;6185:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;3177:6:1;3210:15;;;3192:34;;3262:15;;;3257:2;3242:18;;3235:43;3314:15;;3294:18;;;3287:43;;;;3155:2;3140:18;6185:109:0;2971:365:1;14110:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;6749:26::-;;;;;;;;;;-1:-1:-1;6749:26:0;;;;-1:-1:-1;;;;;6749:26:0;;;14531:161;;;;;;;;;;-1:-1:-1;14531:161:0;;;;;:::i;:::-;;:::i;:::-;;;4825:14:1;;4818:22;4800:41;;4788:2;4773:18;14531:161:0;4660:187:1;17603:140:0;;;;;;;;;;-1:-1:-1;17603:140:0;;;;;:::i;:::-;-1:-1:-1;;;;;17701:34:0;17677:4;17701:34;;;:25;:34;;;;;;;;;17603:140;22599:112;;;;;;;;;;;;;:::i;13781:115::-;;;;;;;;;;;;;:::i;16840:335::-;;;;;;;;;;-1:-1:-1;16840:335:0;;;;;:::i;:::-;;:::i;15391:306::-;;;;;;;;;;-1:-1:-1;15391:306:0;;;;;:::i;:::-;;:::i;22105:264::-;;;;;;;;;;-1:-1:-1;22105:264:0;;;;;:::i;:::-;;:::i;32614:410::-;;;;;;;;;;-1:-1:-1;32614:410:0;;;;;:::i;:::-;;:::i;7846:33::-;;;;;;;;;;;;;;;;6493:42;;;;;;;;;;;;6531:4;6493:42;;7773:25;;;;;;;;;;;;;;;;13902:112;;;;;;;;;;;;;:::i;:::-;;;7526:4:1;7514:17;;;7496:36;;7484:2;7469:18;13902:112:0;7354:184:1;20481:488:0;;;;;;;;;;-1:-1:-1;20481:488:0;;;;;:::i;:::-;;:::i;19318:108::-;;;;;;;;;;-1:-1:-1;19318:108:0;;;;;:::i;:::-;;:::i;17751:140::-;;;;;;;;;;-1:-1:-1;17751:140:0;;;;;:::i;:::-;;:::i;6782:21::-;;;;;;;;;;-1:-1:-1;6782:21:0;;;;-1:-1:-1;;;;;6782:21:0;;;6646:46;;;;;;;;;;;;6688:4;6646:46;;7931:34;;;;;;;;;;-1:-1:-1;7931:34:0;;;;;;;;;;;22719:189;;;;;;;;;;-1:-1:-1;22719:189:0;;;;;:::i;:::-;;:::i;23414:217::-;;;;;;;;;;-1:-1:-1;23414:217:0;;;;;:::i;:::-;;:::i;12345:759::-;;;;;;;;;;-1:-1:-1;12345:759:0;;;;;:::i;:::-;;:::i;17183:127::-;;;;;;;;;;-1:-1:-1;17183:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;17274:28:0;17250:4;17274:28;;;:19;:28;;;;;;;;;17183:127;7972:36;;;;;;;;;;-1:-1:-1;7972:36:0;;;;;;;;;;;18256:134;;;;;;;;;;-1:-1:-1;18256:134:0;;;;;:::i;:::-;;:::i;17463:132::-;;;;;;;;;;-1:-1:-1;17463:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;17557:30:0;17533:4;17557:30;;;:21;:30;;;;;;;;;17463:132;33883:140;;;;;;;;;;-1:-1:-1;33883:140:0;;;;;:::i;:::-;;:::i;33704:171::-;;;;;;;;;;-1:-1:-1;33704:171:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;23639:340::-;;;;;;;;;;-1:-1:-1;23639:340:0;;;;;:::i;:::-;;:::i;33032:124::-;;;;;;;;;;;;;:::i;17899:349::-;;;;;;;;;;-1:-1:-1;17899:349:0;;;;;:::i;:::-;;:::i;22377:214::-;;;;;;;;;;;;;:::i;:::-;;;;10018:25:1;;;10074:2;10059:18;;10052:34;;;;9991:18;22377:214:0;9844:248:1;14281:103:0;;;;;;;;;;-1:-1:-1;14281:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;14365:16:0;14347:7;14365:16;;;:7;:16;;;;;;;14281:103;13112:277;;;;;;;;;;;;;:::i;20194:279::-;;;;;;;;;;-1:-1:-1;20194:279:0;;;;;:::i;:::-;;:::i;16324:508::-;;;;;;;;;;-1:-1:-1;16324:508:0;;;;;:::i;:::-;;:::i;14196:79::-;;;;;;;;;;-1:-1:-1;14248:7:0;14266:6;-1:-1:-1;;;;;14266:6:0;14196:79;;6856:64;;;;;;;;;;-1:-1:-1;6856:64:0;;;;-1:-1:-1;;;;;6856:64:0;;;15050:173;;;;;;;;;;;;;:::i;19593:593::-;;;;;;;;;;;;;:::i;33470:100::-;;;;;;;;;;;;;:::i;14020:84::-;;;;;;;;;;;;;:::i;15231:152::-;;;;;;;;;;-1:-1:-1;15231:152:0;;;;;:::i;:::-;;:::i;34031:136::-;;;;;;;;;;-1:-1:-1;34031:136:0;;;;;:::i;:::-;;:::i;23987:275::-;;;;;;;;;;-1:-1:-1;23987:275:0;;;;;:::i;:::-;;:::i;7805:34::-;;;;;;;;;;-1:-1:-1;7805:34:0;;;;;;;;9755:2038;;;;;;;;;;-1:-1:-1;9755:2038:0;;;;;:::i;:::-;;:::i;21553:544::-;;;;;;;;;;-1:-1:-1;21553:544:0;;;;;:::i;:::-;;:::i;17318:137::-;;;;;;;;;;-1:-1:-1;17318:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;17414:33:0;17390:4;17414:33;;;:24;:33;;;;;;;;;17318:137;6303:181;;;;;;;;;;-1:-1:-1;6303:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;6303:181:0;;;;;;;;;13070:6:1;13103:15;;;13085:34;;13155:15;;;13150:2;13135:18;;13128:43;13207:15;;;13187:18;;;13180:43;;;;13259:15;;;13254:2;13239:18;;13232:43;13312:15;;13306:3;13291:19;;13284:44;13365:15;;;13359:3;13344:19;;13337:44;13047:3;13032:19;6303:181:0;12785:602:1;24270:131:0;;;;;;;;;;-1:-1:-1;24270:131:0;;;;;:::i;:::-;;:::i;14390:133::-;;;;;;;;;;-1:-1:-1;14390:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14492:19:0;;;14474:7;14492:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;14390:133;15705:611;;;;;;;;;;-1:-1:-1;15705:611:0;;;;;:::i;:::-;;:::i;33164:182::-;;;;;;;;;;;;;:::i;18618:193::-;;;;;;;;;;-1:-1:-1;18618:193:0;;;;;:::i;:::-;;:::i;7888:34::-;;;;;;;;;;-1:-1:-1;7888:34:0;;;;;;;;20977:568;;;;;;;;;;-1:-1:-1;20977:568:0;;;;;:::i;:::-;;:::i;33578:118::-;;;;;;;;;;;;;:::i;7226:261::-;;;;;;;;;;-1:-1:-1;7226:261:0;;;;;;;;-1:-1:-1;;;;;7226:261:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14184:15:1;;;14166:34;;14236:15;;;14231:2;14216:18;;14209:43;14288:15;;14268:18;;;14261:43;;;;14093:2;14078:18;7226:261:0;13871:439:1;22916:490:0;;;;;;;;;;-1:-1:-1;22916:490:0;;;;;:::i;:::-;;:::i;7692:39::-;;;;;;;;;;-1:-1:-1;7692:39:0;;;;;;;;;;;19185:125;;;;;;;;;;-1:-1:-1;19185:125:0;;;;;:::i;:::-;;:::i;18398:148::-;;;;;;;;;;-1:-1:-1;18398:148:0;;;;;:::i;:::-;;:::i;19434:151::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;;;;;;;;;19529:9:::1;::::0;:48:::1;::::0;;;;14863:14:1;;14856:22;19529:48:0::1;::::0;::::1;14838:41:1::0;14922:14;;14915:22;14895:18;;;14888:50;19529:9:0;;;::::1;-1:-1:-1::0;;;;;19529:9:0::1;::::0;:24:::1;::::0;14811:18:1;;19529:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19434:151:::0;;:::o;18819:294::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;18927:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;18927:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;18965:8;;18975:7;;18927:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18998:9;18994:112;19017:8;:15;19013:1;:19;18994:112;;;19053:41;19073:8;19082:1;19073:11;;;;;;;;:::i;:::-;;;;;;;19086:7;19053:19;:41::i;:::-;19034:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18994:112;;;;18819:294:::0;;:::o;14110:80::-;14158:13;14182:5;14175:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14110:80;:::o;14531:161::-;14608:4;14625:37;14634:10;14646:7;14655:6;14625:8;:37::i;:::-;-1:-1:-1;14680:4:0;14531:161;;;;;:::o;22599:112::-;22693:9;;22644:7;;22689:13;;22693:9;;22689:2;:13;:::i;:::-;22671:14;;:32;;;;:::i;:::-;22664:39;;22599:112;:::o;13781:115::-;13836:7;13851;;13862:1;13851:12;13847:31;;13867:8;;;13847:31;-1:-1:-1;13886:7:0;;;13781:115::o;16840:335::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;16948:14:::1;::::0;::::1;::::0;::::1;;;16947:15;16939:24;;;::::0;::::1;;-1:-1:-1::0;;;;;16982:29:0;::::1;17006:4;16982:29;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;17015:29:0;::::1;17039:4;17015:29;;16982:62;:94;;;;;17064:12;-1:-1:-1::0;;;;;17048:28:0::1;:12;-1:-1:-1::0;;;;;17048:28:0::1;;;16982:94;16974:103;;;::::0;::::1;;17088:9;:33:::0;;-1:-1:-1;;;;;;17088:33:0::1;-1:-1:-1::0;;;;;17088:33:0;;::::1;;::::0;;17132:9:::1;:35:::0;;-1:-1:-1;;17132:35:0::1;::::0;;;;::::1;::::0;;;::::1;;::::0;;16840:335::o;15391:306::-;-1:-1:-1;;;;;15512:19:0;;15491:4;15512:19;;;:11;:19;;;;;;;;15532:10;15512:31;;;;;;;;-1:-1:-1;;15512:52:0;15508:126;;-1:-1:-1;;;;;15581:19:0;;;;;;:11;:19;;;;;;;;15601:10;15581:31;;;;;;;:41;;15616:6;;15581:19;:41;;15616:6;;15581:41;:::i;:::-;;;;-1:-1:-1;;15508:126:0;15653:36;15663:6;15671:9;15682:6;15653:9;:36::i;:::-;15646:43;15391:306;-1:-1:-1;;;;15391:306:0:o;22105:264::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;22247:3:::1;22237:7;;:13;;;;:::i;:::-;22225:7;22214;22204;;:17;;;;:::i;:::-;22203:29;;;;:::i;:::-;:48;;22195:109;;;::::0;-1:-1:-1;;;22195:109:0;;18912:2:1;22195:109:0::1;::::0;::::1;18894:21:1::0;18951:2;18931:18;;;18924:30;18990:34;18970:18;;;18963:62;19061:18;19041;;;19034:46;19097:19;;22195:109:0::1;18710:412:1::0;22195:109:0::1;22354:7;22343;22333;;:17;;;;:::i;:::-;22332:29;;;;:::i;:::-;22315:14;:46:::0;-1:-1:-1;;22105:264:0:o;32614:410::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;32749:7:::1;:14;32730:8;:15;:33;32722:67;;;::::0;-1:-1:-1;;;32722:67:0;;19329:2:1;32722:67:0::1;::::0;::::1;19311:21:1::0;19368:2;19348:18;;;19341:30;19407:23;19387:18;;;19380:51;19448:18;;32722:67:0::1;19127:345:1::0;32722:67:0::1;32805:7;32800:217;32822:8;:15;32818:1;:19;;;32800:217;;;32892:7;32900:1;32892:10;;;;;;;;;;:::i;:::-;;;;;;;32867:21;32877:10;-1:-1:-1::0;;;;;14365:16:0;14347:7;14365:16;;;:7;:16;;;;;;;14281:103;32867:21:::1;:35;;32859:44;;;::::0;::::1;;32918:87;32935:10;32947:8;32956:1;32947:11;;;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;32975:9:::1;::::0;32971:13:::1;::::0;32975:9:::1;;32971:2;:13;:::i;:::-;32960:7;32968:1;32960:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;32986:5;32993::::0;33000:4:::1;32918:16;:87::i;:::-;-1:-1:-1::0;32839:3:0;::::1;::::0;::::1;:::i;:::-;;;;32800:217;;13902:112:::0;13954:5;13967:7;;13978:1;13967:12;13963:31;;13983:8;;;13963:31;-1:-1:-1;14002:9:0;;;;;13902:112::o;20481:488::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;6531:4:::1;20588:6;:21;;;;:65;;;;;6581:4;20630:7;:23;;;;20588:65;:117;;;;;6635:4;20674:11;:31;;;;20588:117;20580:170;;;::::0;-1:-1:-1;;;20580:170:0;;19859:2:1;20580:170:0::1;::::0;::::1;19841:21:1::0;19898:2;19878:18;;;19871:30;19937:25;19917:18;;;19910:53;19980:18;;20580:170:0::1;19657:347:1::0;20580:170:0::1;6688:4;20769:16;20778:7:::0;20769:6;:16:::1;:::i;:::-;:35;;;;20761:80;;;::::0;-1:-1:-1;;;20761:80:0;;20440:2:1;20761:80:0::1;::::0;::::1;20422:21:1::0;;;20459:18;;;20452:30;20518:34;20498:18;;;20491:62;20570:18;;20761:80:0::1;20238:356:1::0;20761:80:0::1;20852:9;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;20888:27:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;20926:35:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;20481:488::o;19318:108::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;19387:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;19387:31:0::1;::::0;::::1;160:74:1::0;19387:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;19387:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;19318:108:::0;:::o;17751:140::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;-1:-1:-1;;;;;17843:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;17843:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17751:140::o;22719:189::-;22848:6;;-1:-1:-1;;;;;22848:6:0;22810:7;14365:16;;;:7;:16;;;;;;6735:5;;22838:41;;22858:21;;22838:41;:::i;:::-;22837:62;;;;:::i;23414:217::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;23544:3:::1;23518:22;:29;;23510:64;;;::::0;-1:-1:-1;;;23510:64:0;;20801:2:1;23510:64:0::1;::::0;::::1;20783:21:1::0;20840:2;20820:18;;;20813:30;20879:24;20859:18;;;20852:52;20921:18;;23510:64:0::1;20599:346:1::0;23510:64:0::1;23585:13;:38:::0;23414:217::o;12345:759::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;-1:-1:-1;;;;;12424:22:0;::::1;12416:96;;;::::0;-1:-1:-1;;;12416:96:0;;21152:2:1;12416:96:0::1;::::0;::::1;21134:21:1::0;21191:2;21171:18;;;21164:30;21230:34;21210:18;;;21203:62;21301:31;21281:18;;;21274:59;21350:19;;12416:96:0::1;20950:425:1::0;12416:96:0::1;-1:-1:-1::0;;;;;;;12531:16:0;::::1;::::0;12523:90:::1;;;::::0;-1:-1:-1;;;12523:90:0;;21152:2:1;12523:90:0::1;::::0;::::1;21134:21:1::0;21191:2;21171:18;;;21164:30;21230:34;21210:18;;;21203:62;21301:31;21281:18;;;21274:59;21350:19;;12523:90:0::1;20950:425:1::0;12523:90:0::1;12654:5;12644:6:::0;;-1:-1:-1;;;;;12644:6:0;;::::1;12624:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;12624:35:0;;::::1;::::0;;;12695:6;;;::::1;12670:32:::0;;:24:::1;:32:::0;;;;;;:40;;;::::1;::::0;;12721:29;;::::1;::::0;;;;;;;;:36;;;::::1;-1:-1:-1::0;12721:36:0;;::::1;::::0;;;12768:34;;;;;;:41;;;;::::1;::::0;::::1;::::0;;12844:6;;;;::::1;14365:16:::0;;;;;;12834:21;12830:127:::1;;12889:6;::::0;;-1:-1:-1;;;;;12889:6:0::1;14365:16:::0;;;:7;:16;;;;;;;12872:73:::1;::::0;12889:6;12897:8;;12907:17:::1;14281:103:::0;12872:73:::1;;12830:127;12977:16;12996:6:::0;;-1:-1:-1;;;;;13013:17:0;;::::1;-1:-1:-1::0;;;;;;13013:17:0;::::1;::::0;::::1;::::0;;13046:40:::1;::::0;12996:6;;;::::1;::::0;;;13046:40:::1;::::0;12977:16;13046:40:::1;12405:699;12345:759:::0;:::o;18256:134::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;-1:-1:-1;;;;;18344:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;18344:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18256:134::o;33883:140::-;33977:9;;:38;;;;;-1:-1:-1;;;;;178:55:1;;;33977:38:0;;;160:74:1;33950:7:0;;33977:9;;:32;;133:18:1;;33977:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33704:171::-;33840:9;;:27;;;;;-1:-1:-1;;;;;178:55:1;;;33840:27:0;;;160:74:1;33762:13:0;;;;;;;;33840:9;;:21;;133:18:1;;33840:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33840:27:0;;;;;;;;;;;;:::i;:::-;33833:34;;;;;;;;33704:171;;;;;:::o;23639:340::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;23776:19:::1;:33:::0;;-1:-1:-1;;23776:33:0::1;;::::0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;23820:14:::1;:38:::0;;-1:-1:-1;;23820:38:0;;::::1;::::0;::::1;;;::::0;;;23869:22:::1;:47:::0;;;;::::1;::::0;::::1;;;::::0;;23932:39:::1;::::0;4800:41:1;;;23932:39:0::1;::::0;4788:2:1;4773:18;23932:39:0::1;;;;;;;23639:340:::0;;;:::o;33032:124::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;33091:9:::1;;;;;;;;;-1:-1:-1::0;;;;;33091:9:0::1;-1:-1:-1::0;;;;;33091:14:0::1;;33113:21;33091:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;33087:62:::0;33032:124::o;17899:349::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;-1:-1:-1;;;;;17994:23:0;::::1;18012:4;17994:23;::::0;::::1;::::0;:43:::1;;-1:-1:-1::0;18031:6:0::1;::::0;-1:-1:-1;;;;;18021:16:0;;::::1;18031:6:::0;::::1;18021:16;;17994:43;17986:52;;;::::0;::::1;;-1:-1:-1::0;;;;;18049:32:0;::::1;;::::0;;;:24:::1;:32;::::0;;;;:42;;-1:-1:-1;;18049:42:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;18102:139:::1;;18130:9;::::0;:26:::1;::::0;-1:-1:-1;;;18130:26:0;;-1:-1:-1;;;;;23247:55:1;;;18130:26:0::1;::::0;::::1;23229:74:1::0;18130:9:0::1;23319:18:1::0;;;23312:34;18130:9:0;;::::1;::::0;:15:::1;::::0;23202:18:1;;18130:26:0::1;23047:305:1::0;18102:139:0::1;18189:9;::::0;-1:-1:-1;;;;;18213:15:0;;::::1;18189:9;18213:15:::0;;;18189:9;18213:15:::1;::::0;;;;;;;18189:40;;-1:-1:-1;;;18189:40:0;;::::1;::::0;::::1;23229:74:1::0;;;;23319:18;;;23312:34;18189:9:0;::::1;::::0;:15:::1;::::0;23202:18:1;;18189:40:0::1;23047:305:1::0;18102:139:0::1;17899:349:::0;;:::o;22377:214::-;22512:9;;22418:20;;;;22508:13;;22512:9;;22508:2;:13;:::i;:::-;22489:15;;:33;;;;:::i;:::-;22573:9;;22474:48;;-1:-1:-1;22569:13:0;;22573:9;;22569:2;:13;:::i;:::-;22549:16;;:34;;;;:::i;:::-;22533:50;;22377:214;;:::o;13112:277::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;13201:5:::1;13191:6:::0;;-1:-1:-1;;;;;13191:6:0;;::::1;13171:27:::0;;:19:::1;:27;::::0;;;;;;;:35;;-1:-1:-1;;13171:35:0;;::::1;::::0;;;13242:6;;;::::1;13217:32:::0;;:24:::1;:32:::0;;;;;;:40;;;;::::1;::::0;;;13287:6;;-1:-1:-1;;;;;;13304:19:0;::::1;::::0;;13339:42;;13287:6;::::1;::::0;13201:5;13287:6;;13339:42:::1;::::0;13201:5;;13339:42:::1;13160:229;13112:277::o:0;20194:279::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;20317:11:::1;:42:::0;;-1:-1:-1;;;;;20317:42:0;;::::1;-1:-1:-1::0;;;;;;20317:42:0;;::::1;;::::0;;;20370:23;:46;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;20427:19;:38;;;;;::::1;::::0;::::1;;::::0;;20194:279::o;16324:508::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;16406:7:::1;16401:424;;-1:-1:-1::0;;;;;16430:13:0;;::::1;16446:5;16430:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16430:21:0::1;::::0;;16466:9:::1;::::0;:32;;-1:-1:-1;;;16466:32:0;;::::1;::::0;::::1;23827:74:1::0;;;;23917:18;;;23910:50;;;;16466:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23800:18:1;;16466:32:0::1;23659:307:1::0;16401:424:0::1;16535:17;::::0;:22;16531:152:::1;;16624:6;16604:17;;16586:15;:35;;;;:::i;:::-;:44;16578:89;;;::::0;-1:-1:-1;;;16578:89:0;;24173:2:1;16578:89:0::1;::::0;::::1;24155:21:1::0;;;24192:18;;;24185:30;24251:34;24231:18;;;24224:62;24303:18;;16578:89:0::1;23971:356:1::0;16578:89:0::1;-1:-1:-1::0;;;;;16697:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16697:20:0::1;16713:4;16697:20:::0;;::::1;::::0;;;16752:15:::1;16732:17;:35:::0;16782:9:::1;::::0;:31;;-1:-1:-1;;;16782:31:0;;::::1;::::0;::::1;23827:74:1::0;;;;23917:18;;;23910:50;16782:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;23800:18:1;;16782:31:0::1;23659:307:1::0;15050:173:0;15114:4;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;15163:9:::1;::::0;15131:62:::1;::::0;15148:4:::1;::::0;-1:-1:-1;;;;;15163:9:0::1;-1:-1:-1::0;;15131:8:0::1;:62::i;:::-;-1:-1:-1::0;15211:4:0::1;15050:173:::0;:::o;19593:593::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;19655:14:::1;::::0;::::1;::::0;::::1;;;19654:15;19646:52;;;::::0;-1:-1:-1;;;19646:52:0;;24534:2:1;19646:52:0::1;::::0;::::1;24516:21:1::0;24573:2;24553:18;;;24546:30;24612:26;24592:18;;;24585:54;24656:18;;19646:52:0::1;24332:348:1::0;19646:52:0::1;19717:16;::::0;;;::::1;;;19709:53;;;::::0;-1:-1:-1;;;19709:53:0;;24887:2:1;19709:53:0::1;::::0;::::1;24869:21:1::0;24926:2;24906:18;;;24899:30;24965:26;24945:18;;;24938:54;25009:18;;19709:53:0::1;24685:348:1::0;19709:53:0::1;19785:9;::::0;;;::::1;-1:-1:-1::0;;;;;19785:9:0::1;19773:100;;19825:9;:36:::0;;-1:-1:-1;;19825:36:0::1;19855:4;19825:36:::0;::::1;;::::0;;19773:100:::1;19887:9;::::0;19907:6:::1;::::0;19962:9:::1;::::0;19887:85:::1;::::0;;;;-1:-1:-1;;;;;19907:6:0;;::::1;19887:85;::::0;::::1;25261:74:1::0;25383:10;19922:12:0::1;25371:23:1::0;25351:18;;;25344:51;25443:18;19944:15:0::1;25431:31:1::0;25411:18;;;25404:59;19962:9:0::1;::::0;;::::1;25479:18:1::0;;;25472:45;19887:9:0;;;::::1;;::::0;:19:::1;::::0;25233::1;;19887:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;19883:101:::0;19998:9:::1;;;;;;;;;-1:-1:-1::0;;;;;19998:9:0::1;-1:-1:-1::0;;;;;19998:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;-1:-1:-1::0;20042:14:0::1;:21:::0;;-1:-1:-1;;20042:21:0::1;;;::::0;;20101:6:::1;::::0;-1:-1:-1;;;;;20101:6:0::1;-1:-1:-1::0;14365:16:0;;;-1:-1:-1;14365:16:0;;;;;;20117:5:::1;::::0;20091:22:::1;::::0;20111:2:::1;20091:22;:::i;:::-;20090:32;;;;:::i;:::-;20074:13;:48:::0;20157:6:::1;::::0;-1:-1:-1;;;;;20157:6:0::1;14347:7:::0;14365:16;;;:7;:16;;;;;;20173:5:::1;::::0;20147:22:::1;::::0;20167:2:::1;20147:22;:::i;:::-;20146:32;;;;:::i;:::-;20133:10;:45:::0;19593:593::o;33470:100::-;33521:9;;:41;;;;;33551:10;33521:41;;;160:74:1;-1:-1:-1;;;;;33521:9:0;;;;:29;;133:18:1;;33521:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33470:100::o;14020:84::-;14070:13;14094:7;14087:14;;;;;:::i;15231:152::-;15311:4;15335:40;15345:10;15357:9;15368:6;15335:9;:40::i;:::-;15328:47;15231:152;-1:-1:-1;;;15231:152:0:o;34031:136::-;34126:9;;:33;;;;;-1:-1:-1;;;;;178:55:1;;;34126:33:0;;;160:74:1;34099:7:0;;34126:9;;:27;;133:18:1;;34126:33:0;14:226:1;23987:275:0;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;24158:27:::1;24162:23:::0;24158:2:::1;:27;:::i;:::-;24141:44;::::0;:14;:44:::1;:::i;:::-;24196:9;::::0;:58:::1;::::0;;;;::::1;::::0;::::1;10018:25:1::0;;;10059:18;;;10052:34;;;24124:61:0;;-1:-1:-1;;;;;;24196:9:0::1;::::0;:30:::1;::::0;9991:18:1;;24196:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23987:275:::0;;;:::o;9755:2038::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;9916:19:::1;::::0;-1:-1:-1;;;9916:19:0;::::1;;;9915:20;9907:34;;;::::0;-1:-1:-1;;;9907:34:0;;25866:2:1;9907:34:0::1;::::0;::::1;25848:21:1::0;25905:1;25885:18;;;25878:29;25943:3;25923:18;;;25916:31;25964:18;;9907:34:0::1;25664:324:1::0;9907:34:0::1;9960:33:::0;;::::1;9952:47;;;::::0;-1:-1:-1;;;9952:47:0;;26195:2:1;9952:47:0::1;::::0;::::1;26177:21:1::0;26234:1;26214:18;;;26207:29;26272:3;26252:18;;;26245:31;26293:18;;9952:47:0::1;25993:324:1::0;9952:47:0::1;10010:9;:33:::0;;-1:-1:-1;;;;;10010:33:0;;::::1;::::0;::::1;-1:-1:-1::0;;10010:33:0;;::::1;::::0;;;::::1;::::0;;;10054:9:::1;:29:::0;;;;::::1;-1:-1:-1::0;;;;;;10054:29:0;;::::1;::::0;::::1;::::0;;10094:22:::1;::::0;;;;;;;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;-1:-1:-1;;10094:22:0;;;;;;;;-1:-1:-1;10054:29:0;10094:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;10131:9:0::1;::::0;:33:::1;::::0;;;;10158:4:::1;10131:33;::::0;::::1;160:74:1::0;10131:9:0;;;::::1;-1:-1:-1::0;;;;;10131:9:0::1;::::0;-1:-1:-1;10131:18:0::1;::::0;-1:-1:-1;133:18:1;;10131:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10127:49:::0;10190:9:::1;;;;;;;;;-1:-1:-1::0;;;;;10190:9:0::1;-1:-1:-1::0;;;;;10190:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;10190:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;10186:406;;10569:11;::::0;-1:-1:-1;;;10569:11:0;;27303:2:1;10569:11:0::1;::::0;::::1;27285:21:1::0;27342:1;27322:18;;;27315:29;27380:3;27360:18;;;27353:31;27401:18;;10569:11:0::1;27101:324:1::0;10186:406:0::1;10340:5;:16;10348:8:::0;10340:5;:16:::1;:::i;:::-;-1:-1:-1::0;10371:7:0::1;:20;10381:10:::0;10371:7;:20:::1;:::i;:::-;-1:-1:-1::0;10406:14:0::1;:35:::0;;;10456:9:::1;:24:::0;;-1:-1:-1;;10456:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;10522:13:::1;::::0;::::1;:::i;:::-;10505:14;;:30;;;;:::i;:::-;10495:7;:40:::0;-1:-1:-1;;;;10622:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;10622:9:0::1;-1:-1:-1::0;;;;;10622:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10611:42:0::1;;10654:9;;;;;;;;;-1:-1:-1::0;;;;;10654:9:0::1;-1:-1:-1::0;;;;;10654:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10611:75;::::0;-1:-1:-1;;;;;;10611:75:0::1;::::0;;;;;;-1:-1:-1;;;;;30143:15:1;;;10611:75:0::1;::::0;::::1;30125:34:1::0;10680:4:0::1;30175:18:1::0;;;30168:43;30037:18;;10611:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10602:6;:84:::0;;-1:-1:-1;;;;;;10602:84:0::1;-1:-1:-1::0;;;;;10602:84:0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10697:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;10697:22:0;;::::1;-1:-1:-1::0;10697:22:0;;::::1;::::0;;;10755:6;;;;::::1;10730:32:::0;;:24:::1;:32:::0;;;;;;:39;;;;::::1;::::0;;::::1;::::0;;10799:7:::1;::::0;10814:3:::1;::::0;10799:11:::1;::::0;:7;:11:::1;:::i;:::-;10798:19;;;;:::i;:::-;10780:15;:37:::0;10848:7:::1;::::0;10863:3:::1;::::0;10848:11:::1;::::0;10858:1:::1;10848:11;:::i;:::-;10847:19;;;;:::i;:::-;10828:16;:38:::0;10895:7:::1;::::0;10910:3:::1;::::0;10895:11:::1;::::0;10905:1:::1;10895:11;:::i;:::-;10894:19;;;;:::i;:::-;10877:14;:36:::0;10924:19:::1;:26:::0;;;::::1;-1:-1:-1::0;;;10924:26:0::1;::::0;;10984:7:::1;::::0;10924:26;10974:6;;-1:-1:-1;;;;;10974:6:0;;::::1;10966:15:::0;;10946:4:::1;10966:15;::::0;;;;;:25;;;11028:6;;11007:37;;11028:6;::::1;::::0;11007:37:::1;::::0;::::1;::::0;391:25:1;;379:2;364:18;;245:177;11007:37:0::1;;;;;;;;11087:9;::::0;11055:62:::1;::::0;11072:4:::1;::::0;-1:-1:-1;;;;;11087:9:0::1;-1:-1:-1::0;;11055:8:0::1;:62::i;:::-;11137:6;::::0;11153:9:::1;::::0;11128:55:::1;::::0;-1:-1:-1;;;;;11137:6:0;;::::1;::::0;11153:9:::1;-1:-1:-1::0;;11128:8:0::1;:55::i;:::-;11198:9;11194:194;11213:19:::0;;::::1;11194:194;;;11287:9;::::0;11253:14:::1;::::0;11283:13:::1;::::0;11287:9:::1;;11283:2;:13;:::i;:::-;11270:7;;11278:1;11270:10;;;;;;;:::i;:::-;;;;;;;:26;;;;:::i;:::-;11328:6;::::0;11253:43;;-1:-1:-1;11311:65:0::1;::::0;-1:-1:-1;;;;;11328:6:0::1;11336:8:::0;;11345:1;11336:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;11349:6;11357:5;11364::::0;11371:4:::1;11311:16;:65::i;:::-;;11238:150;11234:3;;;;;:::i;:::-;;;;11194:194;;;-1:-1:-1::0;11415:6:0::1;::::0;;-1:-1:-1;;;;;11415:6:0::1;14365:16:::0;;;:7;:16;;;;;;;11398:78:::1;::::0;11415:6;11431:4:::1;::::0;11438:17:::1;14281:103:::0;11398:78:::1;-1:-1:-1::0;11489:9:0::1;::::0;-1:-1:-1;;;;;11489:9:0::1;:25;11522:21;11567:4;11587:24;11567:4:::0;-1:-1:-1;;;;;14365:16:0;14347:7;14365:16;;;:7;:16;;;;;;;14281:103;11587:24:::1;11626:1;11712:6:::0;;11489:270:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;11489:270:0;;;-1:-1:-1;;;;;30604:15:1;;;11489:270:0::1;::::0;::::1;30586:34:1::0;30636:18;;;30629:34;;;;30679:18;;;30672:34;;;30722:18;;;30715:34;;;;11712:6:0;;;::::1;30765:19:1::0;;;30758:44;11733:15:0::1;30818:19:1::0;;;30811:35;30497:19;;11489:270:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11770:15;:13;:15::i;21553:544::-:0;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;21753:4:::1;21739:7;;21749:1;21739:11;;;;:::i;:::-;:18;;;;:::i;:::-;21724:10;21710;21700:7;;:20;;;;:::i;:::-;21699:35;;;;:::i;:::-;:59;;21691:127;;;::::0;-1:-1:-1;;;21691:127:0;;31370:2:1;21691:127:0::1;::::0;::::1;31352:21:1::0;31409:2;31389:18;;;31382:30;31448:34;31428:18;;;31421:62;31519:25;31499:18;;;31492:53;31562:19;;21691:127:0::1;31168:419:1::0;21691:127:0::1;21893:4;21879:7;;21889:1;21879:11;;;;:::i;:::-;:18;;;;:::i;:::-;21863:11;21848;21838:7;;:21;;;;:::i;:::-;21837:37;;;;:::i;:::-;:61;;21829:129;;;::::0;-1:-1:-1;;;21829:129:0;;31370:2:1;21829:129:0::1;::::0;::::1;31352:21:1::0;31409:2;31389:18;;;31382:30;31448:34;31428:18;;;31421:62;31519:25;31499:18;;;31492:53;31562:19;;21829:129:0::1;31168:419:1::0;21829:129:0::1;22012:10;21998;21988:7;;:20;;;;:::i;:::-;21987:35;;;;:::i;:::-;21969:15;:53:::0;22053:7:::1;::::0;22078:11;;22053:21:::1;::::0;22063:11;;22053:21:::1;:::i;:::-;22052:37;;;;:::i;:::-;22033:16;:56:::0;-1:-1:-1;;;;21553:544:0:o;24270:131::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;24357:6:::1;24351:3;:12;24343:21;;;::::0;::::1;;24375:12;:18:::0;24270:131::o;15705:611::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;15783:16:::1;::::0;;;::::1;;;15782:17;15774:60;;;::::0;-1:-1:-1;;;15774:60:0;;31794:2:1;15774:60:0::1;::::0;::::1;31776:21:1::0;31833:2;31813:18;;;31806:30;31872:32;31852:18;;;31845:60;31922:18;;15774:60:0::1;31592:354:1::0;15774:60:0::1;15845:20;15878:9;15845:43;;15899:16;15929:10;-1:-1:-1::0;;;;;15929:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15918:40:0::1;;15967:4;15974:10;-1:-1:-1::0;;;;;15974:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15918:74;::::0;-1:-1:-1;;;;;;15918:74:0::1;::::0;;;;;;-1:-1:-1;;;;;30143:15:1;;;15918:74:0::1;::::0;::::1;30125:34:1::0;30195:15;;30175:18;;;30168:43;30037:18;;15918:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15899:93:::0;-1:-1:-1;;;;;;16007:22:0;::::1;16003:200;;16066:10;-1:-1:-1::0;;;;;16066:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16055:43:0::1;;16107:4;16114:10;-1:-1:-1::0;;;;;16114:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16055:77;::::0;-1:-1:-1;;;;;;16055:77:0::1;::::0;;;;;;-1:-1:-1;;;;;30143:15:1;;;16055:77:0::1;::::0;::::1;30125:34:1::0;30195:15;;30175:18;;;30168:43;30037:18;;16055:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16046:6;:86:::0;;-1:-1:-1;;;;;;16046:86:0::1;-1:-1:-1::0;;;;;16046:86:0;;;::::1;::::0;;;::::1;::::0;;16003:200:::1;;;16174:6;:17:::0;;-1:-1:-1;;;;;;16174:17:0::1;-1:-1:-1::0;;;;;16174:17:0;::::1;;::::0;;16003:200:::1;16213:9;:22:::0;;-1:-1:-1;;;;;;16213:22:0::1;-1:-1:-1::0;;;;;16213:22:0;::::1;::::0;;::::1;::::0;;;16246:62:::1;::::0;16263:4:::1;::::0;-1:-1:-1;;16246:8:0::1;:62::i;33164:182::-:0;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;33231:16:::1;::::0;;;::::1;;;33230:17;33222:58;;;::::0;-1:-1:-1;;;33222:58:0;;32153:2:1;33222:58:0::1;::::0;::::1;32135:21:1::0;32192:2;32172:18;;;32165:30;32231;32211:18;;;32204:58;32279:18;;33222:58:0::1;31951:352:1::0;33222:58:0::1;33299:6;::::0;;33291:47:::1;::::0;-1:-1:-1;;;;;33299:6:0;;::::1;::::0;33316:21:::1;33291:47:::0;::::1;;;::::0;33316:21;;33291:47;33299:6;33291:47;33316:21;33299:6;33291:47;::::1;;;;;;;;;;;;;::::0;::::1;;;;18618:193:::0;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;18708:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;23845:55:1;;;18708:47:0::1;::::0;::::1;23827:74:1::0;23944:14;;23937:22;23917:18;;;23910:50;18708:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;23800:18:1;;18708:47:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18766:37;18786:7;18795;18766:19;:37::i;20977:568::-:0;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;21114:7:::1;:25:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;21150:29:0;;;;;;;;;;::::1;;;-1:-1:-1::0;;21230:33:0;21190:29;;;::::1;;-1:-1:-1::0;;21230:33:0;;;;;::::1;;;-1:-1:-1::0;;21274:25:0::1;::::0;;;::::1;::::0;;;::::1;;::::0;;21230:33;21190:29;21326:19:::1;21150:29:::0;21114:25;21326:19:::1;:::i;:::-;:31;;;;:::i;:::-;:45;;;;:::i;:::-;21310:7;:61:::0;;-1:-1:-1;;21310:61:0::1;-1:-1:-1::0;;;21310:61:0::1;::::0;;::::1;;;::::0;;21417:9:::1;:17:::0;-1:-1:-1;;21398:36:0::1;::::0;21417:17;;::::1;::::0;::::1;::::0;21398:16:::1;:36;:::i;:::-;21469:7;:15:::0;21382:52:::1;::::0;;::::1;::::0;-1:-1:-1;21382:52:0;;21453:31:::1;::::0;21469:15;;::::1;::::0;::::1;::::0;-1:-1:-1;;;21453:13:0;;::::1;;:31;:::i;:::-;:40;;;;21445:92;;;::::0;-1:-1:-1;;;21445:92:0;;32510:2:1;21445:92:0::1;::::0;::::1;32492:21:1::0;32549:2;32529:18;;;32522:30;32588:34;32568:18;;;32561:62;32659:9;32639:18;;;32632:37;32686:19;;21445:92:0::1;32308:403:1::0;33578:118:0;33657:9;;:31;;;;;;;;33630:7;;-1:-1:-1;;;;;33657:9:0;;:29;;:31;;;;;;;;;;;;;;:9;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22916:490::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;23116:16:::1;23096;23086:7;;:26;;;;:::i;:::-;23085:47;;;;:::i;:::-;23069:13;:63:::0;23157:7:::1;::::0;23184:13;;23157:23:::1;::::0;23167:13;;23157:23:::1;:::i;:::-;23156:41;;;;:::i;:::-;23143:10;:54:::0;;;23216:13:::1;::::0;:27:::1;;23208:73;;;::::0;-1:-1:-1;;;23208:73:0;;32918:2:1;23208:73:0::1;::::0;::::1;32900:21:1::0;32957:2;32937:18;;;32930:30;32996:34;32976:18;;;32969:62;33067:3;33047:18;;;33040:31;33088:19;;23208:73:0::1;32716:397:1::0;23208:73:0::1;23325:6;::::0;-1:-1:-1;;;;;23325:6:0::1;14347:7:::0;14365:16;;;:7;:16;;;;;;6735:5:::1;::::0;23315:23:::1;::::0;23335:3:::1;23315:23;:::i;:::-;23314:44;;;;:::i;:::-;23300:10;;:58;;23292:106;;;::::0;-1:-1:-1;;;23292:106:0;;33320:2:1;23292:106:0::1;::::0;::::1;33302:21:1::0;33359:2;33339:18;;;33332:30;33398:34;33378:18;;;33371:62;33469:5;33449:18;;;33442:33;33492:19;;23292:106:0::1;33118:399:1::0;19185:125:0;19270:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;19270:32:0;;;160:74:1;19246:4:0;;19270:9;;;;;:23;;133:18:1;;19270:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18398:148::-;8180:6;;-1:-1:-1;;;;;8180:6:0;8190:10;8180:20;8172:65;;;;-1:-1:-1;;;8172:65:0;;14517:2:1;8172:65:0;;;14499:21:1;;;14536:18;;;14529:30;-1:-1:-1;;;;;;;;;;;14575:18:1;;;14568:62;14647:18;;8172:65:0;14315:356:1;8172:65:0;-1:-1:-1;;;;;18494:34:0;;;::::1;;::::0;;;:25:::1;:34;::::0;;;;:44;;-1:-1:-1;;18494:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18398:148::o;14700:342::-;-1:-1:-1;;;;;14795:20:0;;14787:69;;;;-1:-1:-1;;;14787:69:0;;33974:2:1;14787:69:0;;;33956:21:1;34013:2;33993:18;;;33986:30;34052:34;34032:18;;;34025:62;34123:6;34103:18;;;34096:34;34147:19;;14787:69:0;33772:400:1;14787:69:0;-1:-1:-1;;;;;14875:21:0;;14867:68;;;;-1:-1:-1;;;14867:68:0;;34379:2:1;14867:68:0;;;34361:21:1;34418:2;34398:18;;;34391:30;34457:34;34437:18;;;34430:62;34528:4;34508:18;;;34501:32;34550:19;;14867:68:0;34177:398:1;14867:68:0;-1:-1:-1;;;;;14948:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;15001:33;;391:25:1;;;15001:33:0;;364:18:1;15001:33:0;;;;;;;14700:342;;;:::o;24859:2187::-;24938:4;-1:-1:-1;;;;;24963:18:0;;24955:68;;;;-1:-1:-1;;;24955:68:0;;34782:2:1;24955:68:0;;;34764:21:1;34821:2;34801:18;;;34794:30;34860:34;34840:18;;;34833:62;34931:7;34911:18;;;34904:35;34956:19;;24955:68:0;34580:401:1;24955:68:0;-1:-1:-1;;;;;25042:16:0;;25034:64;;;;-1:-1:-1;;;25034:64:0;;35188:2:1;25034:64:0;;;35170:21:1;35227:2;35207:18;;;35200:30;35266:34;35246:18;;;35239:62;35337:5;35317:18;;;35310:33;35360:19;;25034:64:0;34986:399:1;25034:64:0;25126:1;25117:6;:10;25109:64;;;;-1:-1:-1;;;25109:64:0;;35592:2:1;25109:64:0;;;35574:21:1;35631:2;35611:18;;;35604:30;35670:34;35650:18;;;35643:62;35741:11;35721:18;;;35714:39;35770:19;;25109:64:0;35390:405:1;25109:64:0;-1:-1:-1;;;;;25272:13:0;;25184:8;25272:13;;;:7;:13;;;;;;25184:8;;;;25272:13;;25268:162;;;25308:4;25302:10;;25268:162;;;-1:-1:-1;;;;;25334:11:0;;;;;;:7;:11;;;;;;;;25330:100;;;25369:4;25362:11;;25330:100;;;-1:-1:-1;25414:4:0;25330:100;25444:20;25455:4;25461:2;25444:10;:20::i;:::-;25440:882;;;25485:14;;;;;;;25481:89;;25520:34;;-1:-1:-1;;;25520:34:0;;36002:2:1;25520:34:0;;;35984:21:1;36041:2;36021:18;;;36014:30;36080:26;36060:18;;;36053:54;36124:18;;25520:34:0;35800:348:1;25481:89:0;25588:3;25584:227;;;-1:-1:-1;;;;;25616:27:0;;;;;;:21;:27;;;;;;;;25615:28;:58;;;;-1:-1:-1;;;;;;25648:25:0;;;;;;:21;:25;;;;;;;;25647:26;25615:58;25611:185;;;25716:15;;25706:6;:25;;25698:78;;;;-1:-1:-1;;;25698:78:0;;36355:2:1;25698:78:0;;;36337:21:1;36394:2;36374:18;;;36367:30;36433:34;36413:18;;;36406:62;-1:-1:-1;;;36484:18:1;;;36477:38;36532:19;;25698:78:0;36153:404:1;25698:78:0;25829:4;25825:229;;;-1:-1:-1;;;;;25858:27:0;;;;;;:21;:27;;;;;;;;25857:28;:58;;;;-1:-1:-1;;;;;;25890:25:0;;;;;;:21;:25;;;;;;;;25889:26;25857:58;25853:186;;;25958:16;;25948:6;:26;;25940:79;;;;-1:-1:-1;;;25940:79:0;;36355:2:1;25940:79:0;;;36337:21:1;36394:2;36374:18;;;36367:30;36433:34;36413:18;;;36406:62;-1:-1:-1;;;36484:18:1;;;36477:38;36532:19;;25940:79:0;36153:404:1;25940:79:0;26086:9;;-1:-1:-1;;;;;26072:24:0;;;26086:9;;26072:24;;;;:33;;;26101:4;26100:5;26072:33;26068:243;;;-1:-1:-1;;;;;26131:25:0;;;;;;:21;:25;;;;;;;;26126:170;;26215:14;;26205:6;26189:13;26199:2;-1:-1:-1;;;;;14365:16:0;14347:7;14365:16;;;:7;:16;;;;;;;14281:103;26189:13;:22;;;;:::i;:::-;:40;;26181:95;;;;-1:-1:-1;;;26181:95:0;;36897:2:1;26181:95:0;;;36879:21:1;36936:2;36916:18;;;36909:30;36975:34;36955:18;;;36948:62;37046:12;37026:18;;;37019:40;37076:19;;26181:95:0;36695:406:1;26181:95:0;26338:4;26334:634;;;26364:6;;;;26359:598;;26395:19;;;;;;;26391:551;;;26490:4;26441:28;14365:16;;;:7;:16;;;;;;26547:13;;26523:37;;26519:404;;26607:10;;26648:22;;;;26644:97;;;26705:13;;;26695:6;;-1:-1:-1;;;;;26695:6:0;14347:7;14365:16;;;:7;:16;;;;;;;;6735:5;;26685:33;;;:::i;:::-;26684:54;;;;:::i;:::-;26674:64;;26644:97;26795:7;26771:20;:31;26767:72;;26829:7;26806:30;;26767:72;26865:34;26878:20;26865:12;:34::i;:::-;26562:361;26519:404;26418:524;26391:551;26986:52;27003:4;27009:2;27013:6;27021:3;27026:4;27032:5;26986:16;:52::i;:::-;26979:59;24859:2187;-1:-1:-1;;;;;;;24859:2187:0:o;27054:1157::-;27195:16;;27173:4;;27195:16;;;;;27190:298;;27228:28;27247:4;27253:2;27228:18;:28::i;:::-;27276:16;;;;;;;27275:17;:41;;;;;27296:20;27307:4;27313:2;27296:10;:20::i;:::-;27275:77;;;;-1:-1:-1;;;;;;27321:31:0;;;;;;:25;:31;;;;;;;;27320:32;27275:77;:111;;;;-1:-1:-1;;;;;;27357:29:0;;;;;;:25;:29;;;;;;;;27356:30;27275:111;:121;;;;;27391:5;27390:6;27275:121;27271:206;;;27417:44;;-1:-1:-1;;;27417:44:0;;37308:2:1;27417:44:0;;;37290:21:1;37347:2;37327:18;;;37320:30;37386:34;37366:18;;;37359:62;37457:4;37437:18;;;37430:32;37479:19;;27417:44:0;37106:398:1;27271:206:0;27504:20;27515:4;27521:2;27504:10;:20::i;:::-;27500:226;;;27559:9;;:37;;;;;-1:-1:-1;;;;;37790:15:1;;;27559:37:0;;;37772:34:1;37842:15;;;37822:18;;;37815:43;37874:18;;;37867:34;;;27528:12:0;;27559:9;;;;;:19;;37684:18:1;;27559:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;27559:37:0;;;;;;;;-1:-1:-1;;27559:37:0;;;;;;;;;;;;:::i;:::-;;;27555:120;;27664:8;;;27555:120;27647:5;-1:-1:-1;27693:7:0;27689:26;;27704:8;;;27689:26;27526:200;27500:226;-1:-1:-1;;;;;27772:25:0;;27738:12;27772:25;;;:19;:25;;;;;;27753:4;;27772:25;;;:52;;-1:-1:-1;;;;;;27801:23:0;;;;;;:19;:23;;;;;;;;27772:52;27768:99;;;-1:-1:-1;27850:5:0;27768:99;-1:-1:-1;;;;;27879:13:0;;;;;;:7;:13;;;;;:23;;27896:6;;27879:13;:23;;27896:6;;27879:23;:::i;:::-;;;;-1:-1:-1;27938:6:0;;-1:-1:-1;27955:98:0;;;;28000:41;28010:4;28016:6;28024:3;28029:4;28035:5;28000:9;:41::i;:::-;27983:58;;27955:98;-1:-1:-1;;;;;28063:11:0;;;;;;:7;:11;;;;;:29;;28078:14;;28063:11;:29;;28078:14;;28063:29;:::i;:::-;;;;-1:-1:-1;28105:24:0;;-1:-1:-1;28120:4:0;28126:2;28105:14;:24::i;:::-;28162:2;-1:-1:-1;;;;;28147:34:0;28156:4;-1:-1:-1;;;;;28147:34:0;;28166:14;28147:34;;;;391:25:1;;379:2;364:18;;245:177;28147:34:0;;;;;;;;-1:-1:-1;28199:4:0;;27054:1157;-1:-1:-1;;;;;;;;27054:1157:0:o;24409:442::-;24478:4;24510:6;;-1:-1:-1;;;;;24502:14:0;;;24510:6;;24502:14;;;;:43;;-1:-1:-1;24539:6:0;;-1:-1:-1;;;;;24533:12:0;;;24539:6;;24533:12;;24502:43;:79;;;;-1:-1:-1;24575:6:0;;-1:-1:-1;;;;;24575:6:0;24562:9;:19;;24502:79;:118;;;;-1:-1:-1;;;;;;24599:21:0;;;;;;:17;:21;;;;;;;;24598:22;24502:118;:159;;;;-1:-1:-1;;;;;;24638:23:0;;;;;;:17;:23;;;;;;;;24637:24;24502:159;:186;;;;-1:-1:-1;;;;;;24678:10:0;;6960:42;24678:10;;24502:186;:219;;;;-1:-1:-1;;;;;;24705:16:0;;;;24502:219;:257;;;;-1:-1:-1;;;;;;24738:21:0;;24754:4;24738:21;;24502:257;:300;;;;-1:-1:-1;24792:9:0;;-1:-1:-1;;;;;24776:26:0;;;24792:9;;;;;24776:26;;24502:300;:341;;;;-1:-1:-1;;24833:9:0;;;;;-1:-1:-1;;;;;24833:9:0;;;24819:24;;;;;24409:442;-1:-1:-1;24409:442:0:o;29844:2122::-;8074:6;:13;;-1:-1:-1;;8074:13:0;8083:4;8074:13;;;29925:30:::1;::::0;;::::1;::::0;::::1;::::0;;29948:7:::1;29925:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;29925:30:0;::::1;::::0;;::::1;::::0;;;;;;29970:17;;:46:::1;;-1:-1:-1::0;29991:25:0;;29970:46:::1;29966:85;;;30033:7;;;29966:85;30095:4;30075:26;::::0;;;:11:::1;:26;::::0;;;;;;;30110:9:::1;::::0;-1:-1:-1;;;;;30110:9:0::1;30075:46:::0;;;;;;;;-1:-1:-1;;30075:67:0::1;30071:166;;30179:4;30159:26;::::0;;;:11:::1;:26;::::0;;;;;;;30194:9:::1;::::0;-1:-1:-1;;;;;30194:9:0::1;30159:46:::0;;;;;;;-1:-1:-1;;30159:66:0;;30071:166:::1;30249:17;30332:1;30315:6;:12;;;30270:58;;30294:6;:16;;;30271:39;;:20;:39;;;;:::i;:::-;30270:58;;;;:::i;:::-;30269:64;;;;:::i;:::-;30249:84:::0;-1:-1:-1;30344:15:0::1;30362:32;30249:84:::0;30362:20;:32:::1;:::i;:::-;30431:16;::::0;;30445:1:::1;30431:16:::0;;;;;::::1;::::0;;30344:50;;-1:-1:-1;30407:21:0::1;::::0;30431:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;30431:16:0::1;30407:40;;30476:4;30458;30463:1;30458:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30458:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;30502:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;30458:7;;30502:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30492:4;30497:1;30492:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30492:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;30531:9:::1;::::0;:186:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:186:::1;::::0;30606:7;;30531:9:::1;::::0;30644:4;;30671::::1;::::0;30691:15:::1;::::0;30531:186:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;30751:21:0::1;::::0;-1:-1:-1;30730:18:0::1;::::0;-1:-1:-1;30837:7:0;;-1:-1:-1;30811:22:0::1;30824:9:::0;30751:21;30811:22:::1;:::i;:::-;30810:34;;;;:::i;:::-;30783:61:::0;-1:-1:-1;30861:13:0;;30857:328:::1;;30891:9;::::0;:222:::1;::::0;;;;30968:4:::1;30891:222;::::0;::::1;30586:34:1::0;30636:18;;;30629:34;;;30891:9:0::1;30679:18:1::0;;;30672:34;;;30722:18;;;30715:34;6960:42:0::1;30765:19:1::0;;;30758:44;31083:15:0::1;30818:19:1::0;;;30811:35;-1:-1:-1;;;;;30891:9:0;;::::1;::::0;:25:::1;::::0;30924:16;;30497:19:1;;30891:222:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;31133:40:0::1;::::0;;10018:25:1;;;10074:2;10059:18;;10052:34;;;31133:40:0::1;::::0;-1:-1:-1;9991:18:1;31133:40:0::1;;;;;;;30857:328;31197:30;31211:16:::0;31197:30;::::1;:::i;:::-;;;31254:6;:16;;;31238:6;:12;;:32;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;31361:12:::1;::::0;::::1;::::0;31343:14;;31281:12:::1;::::0;-1:-1:-1;31281:12:0;;31329:44;;::::1;::::0;31330:27:::1;::::0;::::1;:10:::0;:27:::1;:::i;:::-;31329:44;;;;:::i;:::-;31304:69;;31384:26;31449:6;:12;;;31413:48;;31427:6;:18;;;31414:31;;:10;:31;;;;:::i;:::-;31413:48;;;;:::i;:::-;31384:77:::0;-1:-1:-1;31472:24:0::1;31513:35;31384:77:::0;31513:14;:35:::1;:::i;:::-;31499:50;::::0;:10;:50:::1;:::i;:::-;31566:14:::0;;31472:77;;-1:-1:-1;31566:18:0::1;;::::0;31562:105:::1;;31605:9;;;;;;;;;-1:-1:-1::0;;;;;31605:9:0::1;-1:-1:-1::0;;;;;31605:14:0::1;;31627;31605:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;31601:55:::0;::::1;31683:16;::::0;::::1;::::0;:20:::1;;::::0;31679:132:::1;;31732:11;:21:::0;:67:::1;::::0;-1:-1:-1;;;;;31732:21:0;;::::1;::::0;31789:5:::1;::::0;31766:16;;31732:67:::1;::::0;;;31766:16;31732:21;31789:5;31732:67:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31719:80:0;;-1:-1:-1;;31679:132:0::1;31825:18;::::0;::::1;::::0;:22:::1;;::::0;31821:138:::1;;31876:23:::0;;:71:::1;::::0;-1:-1:-1;;;;;31876:23:0;;::::1;::::0;31937:5:::1;::::0;31912:18;;31876:71:::1;::::0;;;31912:18;31876:23;31937:5;31876:71:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31863:84:0;;-1:-1:-1;;31821:138:0::1;29914:2052;;;;;;;;;;8098:1;-1:-1:-1::0;8110:6:0;:14;;-1:-1:-1;;8110:14:0;;;29844:2122::o;31974:632::-;32056:16;;;;;;;32055:17;32047:65;;;;-1:-1:-1;;;32047:65:0;;39156:2:1;32047:65:0;;;39138:21:1;39195:2;39175:18;;;39168:30;39234:34;39214:18;;;39207:62;39305:5;39285:18;;;39278:33;39328:19;;32047:65:0;38954:399:1;32047:65:0;32128:20;32139:4;32145:2;32128:10;:20::i;:::-;32127:21;:37;;;;-1:-1:-1;32158:6:0;;-1:-1:-1;;;;;32152:12:0;;;32158:6;;32152:12;32127:37;32123:476;;;-1:-1:-1;;;;;32181:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;32181:30:0;32207:4;32181:30;;;32226:16;:23;;-1:-1:-1;;32226:23:0;;;;;;;32276:9;;;;32264:109;;32321:9;:36;;-1:-1:-1;;32321:36:0;32351:4;32321:36;;;;;32264:109;32399:9;;-1:-1:-1;;;;;32399:9:0;32387:108;;32445:9;:34;;-1:-1:-1;;;;;;32445:34:0;32473:4;32445:34;;;32387:108;32509:19;:26;;-1:-1:-1;;32509:26:0;;;;;32555:32;;-1:-1:-1;4800:41:1;;32555:32:0;;4788:2:1;4773:18;32555:32:0;;;;;;;31974:632;;:::o;28641:1195::-;28761:30;;;;;;;;28784:7;28761:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28761:30:0;;;;;;;;;28741:7;;;28831:205;;;;-1:-1:-1;28868:9:0;:16;;;28831:205;;;28906:4;28902:134;;;-1:-1:-1;28940:9:0;:17;;;;;;28902:134;;;-1:-1:-1;29003:9:0;:21;;;;;;28902:134;29052:10;29066:1;29052:15;29048:61;;29091:6;29084:13;;;;;;29048:61;29133:9;;;;;-1:-1:-1;;;;;29133:9:0;29155:4;29125:35;:108;;;;;29178:13;29195:1;29178:18;:54;;;;29213:13;29230:2;29213:19;29178:54;29121:136;;;-1:-1:-1;29250:4:0;29121:136;29267:17;6735:5;29287:19;29296:10;29287:6;:19;:::i;:::-;:38;;;;:::i;:::-;29267:58;;29336:21;29409:6;:12;;;29392:6;:14;;;:29;;;;:::i;:::-;29360:62;;29373:6;:14;;;29361:26;;:9;:26;;;;:::i;:::-;29360:62;;;;:::i;:::-;29336:86;-1:-1:-1;29433:15:0;29451:25;29336:86;29451:9;:25;:::i;:::-;29491:14;;;;29433:43;;-1:-1:-1;29491:18:0;;;29487:206;;29548:19;;-1:-1:-1;;;;;29548:19:0;29526;29582:20;;;29548:19;29582:20;;;;;:37;;29606:13;;29526:19;29582:37;;29606:13;;29582:37;:::i;:::-;;;;;;;;29654:11;-1:-1:-1;;;;;29639:42:0;29648:4;-1:-1:-1;;;;;29639:42:0;;29667:13;29639:42;;;;391:25:1;;379:2;364:18;;245:177;29639:42:0;;;;;;;;29511:182;29487:206;29719:4;29703:22;;;;:7;:22;;;;;:33;;29729:7;;29703:22;:33;;29729:7;;29703:33;:::i;:::-;;;;-1:-1:-1;;29752:38:0;;391:25:1;;;29775:4:0;;-1:-1:-1;;;;;29752:38:0;;;;;379:2:1;364:18;29752:38:0;;;;;;;29810:18;29819:9;29810:6;:18;:::i;:::-;29803:25;;;;;;;28641:1195;;;;;;;;:::o;28219:414::-;-1:-1:-1;;;;;28294:30:0;;;;;;:24;:30;;;;;;;;28289:115;;28345:9;;-1:-1:-1;;;;;28367:13:0;;;28345:9;28367:13;;;28345:9;28367:13;;;;;;;;28345:36;;-1:-1:-1;;;28345:36:0;;;;;23229:74:1;;;;23319:18;;;23312:34;28345:9:0;;;:15;;23202:18:1;;28345:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28341:52;;-1:-1:-1;;;;;28419:28:0;;;;;;:24;:28;;;;;;;;28414:109;;28468:9;;-1:-1:-1;;;;;28488:11:0;;;28468:9;28488:11;;;28468:9;28488:11;;;;;;;;28468:32;;-1:-1:-1;;;28468:32:0;;;;;23229:74:1;;;;23319:18;;;23312:34;28468:9:0;;;:15;;23202:18:1;;28468:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28464:48;;28537:14;;;;28533:93;;;28572:9;;28590:12;;28572:31;;;;;-1:-1:-1;;;;;28572:9:0;;;;:17;;:31;;;;391:25:1;;;379:2;364:18;;245:177;28572:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28568:47;;;28219:414;;:::o;427:118:1:-;513:5;506:13;499:21;492:5;489:32;479:60;;535:1;532;525:12;550:376;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:28;769:5;747:28;:::i;:::-;794:5;-1:-1:-1;851:2:1;836:18;;823:32;864:30;823:32;864:30;:::i;:::-;913:7;903:17;;;550:376;;;;;:::o;931:184::-;-1:-1:-1;;;980:1:1;973:88;1080:4;1077:1;1070:15;1104:4;1101:1;1094:15;1120:275;1191:2;1185:9;1256:2;1237:13;;-1:-1:-1;;1233:27:1;1221:40;;1291:18;1276:34;;1312:22;;;1273:62;1270:88;;;1338:18;;:::i;:::-;1374:2;1367:22;1120:275;;-1:-1:-1;1120:275:1:o;1400:183::-;1460:4;1493:18;1485:6;1482:30;1479:56;;;1515:18;;:::i;:::-;-1:-1:-1;1560:1:1;1556:14;1572:4;1552:25;;1400:183::o;1588:154::-;-1:-1:-1;;;;;1667:5:1;1663:54;1656:5;1653:65;1643:93;;1732:1;1729;1722:12;1747:737;1801:5;1854:3;1847:4;1839:6;1835:17;1831:27;1821:55;;1872:1;1869;1862:12;1821:55;1908:6;1895:20;1934:4;1958:60;1974:43;2014:2;1974:43;:::i;:::-;1958:60;:::i;:::-;2052:15;;;2138:1;2134:10;;;;2122:23;;2118:32;;;2083:12;;;;2162:15;;;2159:35;;;2190:1;2187;2180:12;2159:35;2226:2;2218:6;2214:15;2238:217;2254:6;2249:3;2246:15;2238:217;;;2334:3;2321:17;2351:31;2376:5;2351:31;:::i;:::-;2395:18;;2433:12;;;;2271;;2238:217;;;-1:-1:-1;2473:5:1;1747:737;-1:-1:-1;;;;;;1747:737:1:o;2489:477::-;2579:6;2587;2640:2;2628:9;2619:7;2615:23;2611:32;2608:52;;;2656:1;2653;2646:12;2608:52;2696:9;2683:23;2729:18;2721:6;2718:30;2715:50;;;2761:1;2758;2751:12;2715:50;2784:61;2837:7;2828:6;2817:9;2813:22;2784:61;:::i;:::-;2774:71;;;2895:2;2884:9;2880:18;2867:32;2908:28;2930:5;2908:28;:::i;3341:258::-;3413:1;3423:113;3437:6;3434:1;3431:13;3423:113;;;3513:11;;;3507:18;3494:11;;;3487:39;3459:2;3452:10;3423:113;;;3554:6;3551:1;3548:13;3545:48;;;-1:-1:-1;;3589:1:1;3571:16;;3564:27;3341:258::o;3604:::-;3646:3;3684:5;3678:12;3711:6;3706:3;3699:19;3727:63;3783:6;3776:4;3771:3;3767:14;3760:4;3753:5;3749:16;3727:63;:::i;:::-;3844:2;3823:15;-1:-1:-1;;3819:29:1;3810:39;;;;3851:4;3806:50;;3604:258;-1:-1:-1;;3604:258:1:o;3867:220::-;4016:2;4005:9;3998:21;3979:4;4036:45;4077:2;4066:9;4062:18;4054:6;4036:45;:::i;4340:315::-;4408:6;4416;4469:2;4457:9;4448:7;4444:23;4440:32;4437:52;;;4485:1;4482;4475:12;4437:52;4524:9;4511:23;4543:31;4568:5;4543:31;:::i;:::-;4593:5;4645:2;4630:18;;;;4617:32;;-1:-1:-1;;;4340:315:1:o;4852:247::-;4911:6;4964:2;4952:9;4943:7;4939:23;4935:32;4932:52;;;4980:1;4977;4970:12;4932:52;5019:9;5006:23;5038:31;5063:5;5038:31;:::i;5104:388::-;5172:6;5180;5233:2;5221:9;5212:7;5208:23;5204:32;5201:52;;;5249:1;5246;5239:12;5201:52;5288:9;5275:23;5307:31;5332:5;5307:31;:::i;:::-;5357:5;-1:-1:-1;5414:2:1;5399:18;;5386:32;5427:33;5386:32;5427:33;:::i;5497:456::-;5574:6;5582;5590;5643:2;5631:9;5622:7;5618:23;5614:32;5611:52;;;5659:1;5656;5649:12;5611:52;5698:9;5685:23;5717:31;5742:5;5717:31;:::i;:::-;5767:5;-1:-1:-1;5824:2:1;5809:18;;5796:32;5837:33;5796:32;5837:33;:::i;:::-;5497:456;;5889:7;;-1:-1:-1;;;5943:2:1;5928:18;;;;5915:32;;5497:456::o;5958:248::-;6026:6;6034;6087:2;6075:9;6066:7;6062:23;6058:32;6055:52;;;6103:1;6100;6093:12;6055:52;-1:-1:-1;;6126:23:1;;;6196:2;6181:18;;;6168:32;;-1:-1:-1;5958:248:1:o;6211:1138::-;6329:6;6337;6390:2;6378:9;6369:7;6365:23;6361:32;6358:52;;;6406:1;6403;6396:12;6358:52;6446:9;6433:23;6475:18;6516:2;6508:6;6505:14;6502:34;;;6532:1;6529;6522:12;6502:34;6555:61;6608:7;6599:6;6588:9;6584:22;6555:61;:::i;:::-;6545:71;;6635:2;6625:12;;6690:2;6679:9;6675:18;6662:32;6719:2;6709:8;6706:16;6703:36;;;6735:1;6732;6725:12;6703:36;6758:24;;;-1:-1:-1;6813:4:1;6805:13;;6801:27;-1:-1:-1;6791:55:1;;6842:1;6839;6832:12;6791:55;6878:2;6865:16;6901:60;6917:43;6957:2;6917:43;:::i;6901:60::-;6995:15;;;7077:1;7073:10;;;;7065:19;;7061:28;;;7026:12;;;;7101:19;;;7098:39;;;7133:1;7130;7123:12;7098:39;7157:11;;;;7177:142;7193:6;7188:3;7185:15;7177:142;;;7259:17;;7247:30;;7210:12;;;;7297;;;;7177:142;;;7338:5;7328:15;;;;;;;6211:1138;;;;;:::o;7543:159::-;7610:20;;7670:6;7659:18;;7649:29;;7639:57;;7692:1;7689;7682:12;7639:57;7543:159;;;:::o;7707:328::-;7781:6;7789;7797;7850:2;7838:9;7829:7;7825:23;7821:32;7818:52;;;7866:1;7863;7856:12;7818:52;7889:28;7907:9;7889:28;:::i;:::-;7879:38;;7936:37;7969:2;7958:9;7954:18;7936:37;:::i;:::-;7926:47;;7992:37;8025:2;8014:9;8010:18;7992:37;:::i;:::-;7982:47;;7707:328;;;;;:::o;8040:382::-;8105:6;8113;8166:2;8154:9;8145:7;8141:23;8137:32;8134:52;;;8182:1;8179;8172:12;8134:52;8221:9;8208:23;8240:31;8265:5;8240:31;:::i;8427:180::-;8486:6;8539:2;8527:9;8518:7;8514:23;8510:32;8507:52;;;8555:1;8552;8545:12;8507:52;-1:-1:-1;8578:23:1;;8427:180;-1:-1:-1;8427:180:1:o;8612:711::-;8905:3;8894:9;8887:22;8868:4;8932:46;8973:3;8962:9;8958:19;8950:6;8932:46;:::i;:::-;9026:9;9018:6;9014:22;9009:2;8998:9;8994:18;8987:50;9060:33;9086:6;9078;9060:33;:::i;:::-;9046:47;;9141:9;9133:6;9129:22;9124:2;9113:9;9109:18;9102:50;9175:33;9201:6;9193;9175:33;:::i;:::-;9161:47;;9256:9;9248:6;9244:22;9239:2;9228:9;9224:18;9217:50;9284:33;9310:6;9302;9284:33;:::i;9328:511::-;9396:6;9404;9412;9465:2;9453:9;9444:7;9440:23;9436:32;9433:52;;;9481:1;9478;9471:12;9433:52;9520:9;9507:23;9539:28;9561:5;9539:28;:::i;:::-;9586:5;-1:-1:-1;9643:2:1;9628:18;;9615:32;9656:30;9615:32;9656:30;:::i;:::-;9705:7;-1:-1:-1;9764:2:1;9749:18;;9736:32;9777:30;9736:32;9777:30;:::i;:::-;9826:7;9816:17;;;9328:511;;;;;:::o;10097:545::-;10190:6;10198;10206;10259:2;10247:9;10238:7;10234:23;10230:32;10227:52;;;10275:1;10272;10265:12;10227:52;10314:9;10301:23;10333:31;10358:5;10333:31;:::i;:::-;10383:5;-1:-1:-1;10440:2:1;10425:18;;10412:32;10453:33;10412:32;10453:33;:::i;:::-;10505:7;-1:-1:-1;10564:2:1;10549:18;;10536:32;10577:33;10536:32;10577:33;:::i;10647:316::-;10724:6;10732;10740;10793:2;10781:9;10772:7;10768:23;10764:32;10761:52;;;10809:1;10806;10799:12;10761:52;-1:-1:-1;;10832:23:1;;;10902:2;10887:18;;10874:32;;-1:-1:-1;10953:2:1;10938:18;;;10925:32;;10647:316;-1:-1:-1;10647:316:1:o;10968:367::-;11031:8;11041:6;11095:3;11088:4;11080:6;11076:17;11072:27;11062:55;;11113:1;11110;11103:12;11062:55;-1:-1:-1;11136:20:1;;11179:18;11168:30;;11165:50;;;11211:1;11208;11201:12;11165:50;11248:4;11240:6;11236:17;11224:29;;11308:3;11301:4;11291:6;11288:1;11284:14;11276:6;11272:27;11268:38;11265:47;11262:67;;;11325:1;11322;11315:12;11262:67;10968:367;;;;;:::o;11340:1050::-;11480:6;11488;11496;11504;11512;11520;11573:3;11561:9;11552:7;11548:23;11544:33;11541:53;;;11590:1;11587;11580:12;11541:53;11630:9;11617:23;11659:18;11700:2;11692:6;11689:14;11686:34;;;11716:1;11713;11706:12;11686:34;11755:70;11817:7;11808:6;11797:9;11793:22;11755:70;:::i;:::-;11844:8;;-1:-1:-1;11729:96:1;-1:-1:-1;11932:2:1;11917:18;;11904:32;;-1:-1:-1;11948:16:1;;;11945:36;;;11977:1;11974;11967:12;11945:36;;12016:72;12080:7;12069:8;12058:9;12054:24;12016:72;:::i;:::-;12107:8;;-1:-1:-1;11990:98:1;-1:-1:-1;;12192:2:1;12177:18;;12164:32;12205:31;12164:32;12205:31;:::i;:::-;12255:5;-1:-1:-1;12312:2:1;12297:18;;12284:32;12325:33;12284:32;12325:33;:::i;:::-;12377:7;12367:17;;;11340:1050;;;;;;;;:::o;12395:385::-;12481:6;12489;12497;12505;12558:3;12546:9;12537:7;12533:23;12529:33;12526:53;;;12575:1;12572;12565:12;12526:53;-1:-1:-1;;12598:23:1;;;12668:2;12653:18;;12640:32;;-1:-1:-1;12719:2:1;12704:18;;12691:32;;12770:2;12755:18;12742:32;;-1:-1:-1;12395:385:1;-1:-1:-1;12395:385:1:o;13392:474::-;13482:6;13490;13498;13506;13514;13567:3;13555:9;13546:7;13542:23;13538:33;13535:53;;;13584:1;13581;13574:12;13535:53;13607:28;13625:9;13607:28;:::i;:::-;13597:38;;13654:37;13687:2;13676:9;13672:18;13654:37;:::i;:::-;13644:47;;13710:37;13743:2;13732:9;13728:18;13710:37;:::i;:::-;13700:47;;13766:37;13799:2;13788:9;13784:18;13766:37;:::i;:::-;13756:47;;13822:38;13855:3;13844:9;13840:19;13822:38;:::i;:::-;13812:48;;13392:474;;;;;;;;:::o;14949:484::-;15002:3;15040:5;15034:12;15067:6;15062:3;15055:19;15093:4;15122:2;15117:3;15113:12;15106:19;;15159:2;15152:5;15148:14;15180:1;15190:218;15204:6;15201:1;15198:13;15190:218;;;15269:13;;-1:-1:-1;;;;;15265:62:1;15253:75;;15348:12;;;;15383:15;;;;15226:1;15219:9;15190:218;;;-1:-1:-1;15424:3:1;;14949:484;-1:-1:-1;;;;;14949:484:1:o;15438:342::-;15639:2;15628:9;15621:21;15602:4;15659:56;15711:2;15700:9;15696:18;15688:6;15659:56;:::i;:::-;15651:64;;15765:6;15758:14;15751:22;15746:2;15735:9;15731:18;15724:50;15438:342;;;;;:::o;15785:184::-;-1:-1:-1;;;15834:1:1;15827:88;15934:4;15931:1;15924:15;15958:4;15955:1;15948:15;15974:184;-1:-1:-1;;;16023:1:1;16016:88;16123:4;16120:1;16113:15;16147:4;16144:1;16137:15;16163:135;16202:3;16223:17;;;16220:43;;16243:18;;:::i;:::-;-1:-1:-1;16290:1:1;16279:13;;16163:135::o;16303:437::-;16382:1;16378:12;;;;16425;;;16446:61;;16500:4;16492:6;16488:17;16478:27;;16446:61;16553:2;16545:6;16542:14;16522:18;16519:38;16516:218;;-1:-1:-1;;;16587:1:1;16580:88;16691:4;16688:1;16681:15;16719:4;16716:1;16709:15;16516:218;;16303:437;;;:::o;16745:422::-;16834:1;16877:5;16834:1;16891:270;16912:7;16902:8;16899:21;16891:270;;;16971:4;16967:1;16963:6;16959:17;16953:4;16950:27;16947:53;;;16980:18;;:::i;:::-;17030:7;17020:8;17016:22;17013:55;;;17050:16;;;;17013:55;17129:22;;;;17089:15;;;;16891:270;;;16895:3;16745:422;;;;;:::o;17172:806::-;17221:5;17251:8;17241:80;;-1:-1:-1;17292:1:1;17306:5;;17241:80;17340:4;17330:76;;-1:-1:-1;17377:1:1;17391:5;;17330:76;17422:4;17440:1;17435:59;;;;17508:1;17503:130;;;;17415:218;;17435:59;17465:1;17456:10;;17479:5;;;17503:130;17540:3;17530:8;17527:17;17524:43;;;17547:18;;:::i;:::-;-1:-1:-1;;17603:1:1;17589:16;;17618:5;;17415:218;;17717:2;17707:8;17704:16;17698:3;17692:4;17689:13;17685:36;17679:2;17669:8;17666:16;17661:2;17655:4;17652:12;17648:35;17645:77;17642:159;;;-1:-1:-1;17754:19:1;;;17786:5;;17642:159;17833:34;17858:8;17852:4;17833:34;:::i;:::-;17903:6;17899:1;17895:6;17891:19;17882:7;17879:32;17876:58;;;17914:18;;:::i;:::-;17952:20;;17172:806;-1:-1:-1;;;17172:806:1:o;17983:140::-;18041:5;18070:47;18111:4;18101:8;18097:19;18091:4;18070:47;:::i;18128:274::-;18168:1;18194;18184:189;;-1:-1:-1;;;18226:1:1;18219:88;18330:4;18327:1;18320:15;18358:4;18355:1;18348:15;18184:189;-1:-1:-1;18387:9:1;;18128:274::o;18407:125::-;18447:4;18475:1;18472;18469:8;18466:34;;;18480:18;;:::i;:::-;-1:-1:-1;18517:9:1;;18407:125::o;18537:168::-;18577:7;18643:1;18639;18635:6;18631:14;18628:1;18625:21;18620:1;18613:9;18606:17;18602:45;18599:71;;;18650:18;;:::i;:::-;-1:-1:-1;18690:9:1;;18537:168::o;19477:175::-;19514:3;19558:4;19551:5;19547:16;19587:4;19578:7;19575:17;19572:43;;19595:18;;:::i;:::-;19644:1;19631:15;;19477:175;-1:-1:-1;;19477:175:1:o;20009:224::-;20048:3;20076:6;20109:2;20106:1;20102:10;20139:2;20136:1;20132:10;20170:3;20166:2;20162:12;20157:3;20154:21;20151:47;;;20178:18;;:::i;:::-;20214:13;;20009:224;-1:-1:-1;;;;20009:224:1:o;21380:184::-;21450:6;21503:2;21491:9;21482:7;21478:23;21474:32;21471:52;;;21519:1;21516;21509:12;21471:52;-1:-1:-1;21542:16:1;;21380:184;-1:-1:-1;21380:184:1:o;21569:497::-;21623:5;21676:3;21669:4;21661:6;21657:17;21653:27;21643:55;;21694:1;21691;21684:12;21643:55;21723:6;21717:13;21749:18;21745:2;21742:26;21739:52;;;21771:18;;:::i;:::-;21815:55;21858:2;21839:13;;-1:-1:-1;;21835:27:1;21864:4;21831:38;21815:55;:::i;:::-;21895:2;21886:7;21879:19;21941:3;21934:4;21929:2;21921:6;21917:15;21913:26;21910:35;21907:55;;;21958:1;21955;21948:12;21907:55;21971:64;22032:2;22025:4;22016:7;22012:18;22005:4;21997:6;21993:17;21971:64;:::i;22071:971::-;22208:6;22216;22224;22232;22285:3;22273:9;22264:7;22260:23;22256:33;22253:53;;;22302:1;22299;22292:12;22253:53;22335:9;22329:16;22364:18;22405:2;22397:6;22394:14;22391:34;;;22421:1;22418;22411:12;22391:34;22444:61;22497:7;22488:6;22477:9;22473:22;22444:61;:::i;:::-;22434:71;;22551:2;22540:9;22536:18;22530:25;22514:41;;22580:2;22570:8;22567:16;22564:36;;;22596:1;22593;22586:12;22564:36;22619:63;22674:7;22663:8;22652:9;22648:24;22619:63;:::i;:::-;22609:73;;22728:2;22717:9;22713:18;22707:25;22691:41;;22757:2;22747:8;22744:16;22741:36;;;22773:1;22770;22763:12;22741:36;22796:63;22851:7;22840:8;22829:9;22825:24;22796:63;:::i;:::-;22786:73;;22905:2;22894:9;22890:18;22884:25;22868:41;;22934:2;22924:8;22921:16;22918:36;;;22950:1;22947;22940:12;22918:36;;22973:63;23028:7;23017:8;23006:9;23002:24;22973:63;:::i;:::-;22963:73;;;22071:971;;;;;;;:::o;25528:131::-;25588:5;25617:36;25644:8;25638:4;25617:36;:::i;26322:774::-;26437:6;26445;26453;26461;26514:3;26502:9;26493:7;26489:23;26485:33;26482:53;;;26531:1;26528;26521:12;26482:53;26564:9;26558:16;26593:18;26634:2;26626:6;26623:14;26620:34;;;26650:1;26647;26640:12;26620:34;26673:61;26726:7;26717:6;26706:9;26702:22;26673:61;:::i;:::-;26663:71;;26780:2;26769:9;26765:18;26759:25;26743:41;;26809:2;26799:8;26796:16;26793:36;;;26825:1;26822;26815:12;26793:36;;26848:63;26903:7;26892:8;26881:9;26877:24;26848:63;:::i;:::-;26838:73;;;26951:2;26940:9;26936:18;26930:25;26920:35;;26998:2;26987:9;26983:18;26977:25;27042:4;27035:5;27031:16;27024:5;27021:27;27011:55;;27062:1;27059;27052:12;27011:55;26322:774;;;;-1:-1:-1;26322:774:1;;-1:-1:-1;;26322:774:1:o;27556:545::-;27658:2;27653:3;27650:11;27647:448;;;27694:1;27719:5;27715:2;27708:17;27764:4;27760:2;27750:19;27834:2;27822:10;27818:19;27815:1;27811:27;27805:4;27801:38;27870:4;27858:10;27855:20;27852:47;;;-1:-1:-1;27893:4:1;27852:47;27948:2;27943:3;27939:12;27936:1;27932:20;27926:4;27922:31;27912:41;;28003:82;28021:2;28014:5;28011:13;28003:82;;;28066:17;;;28047:1;28036:13;28003:82;;28277:1352;28403:3;28397:10;28430:18;28422:6;28419:30;28416:56;;;28452:18;;:::i;:::-;28481:97;28571:6;28531:38;28563:4;28557:11;28531:38;:::i;:::-;28525:4;28481:97;:::i;:::-;28633:4;;28697:2;28686:14;;28714:1;28709:663;;;;29416:1;29433:6;29430:89;;;-1:-1:-1;29485:19:1;;;29479:26;29430:89;-1:-1:-1;;28234:1:1;28230:11;;;28226:24;28222:29;28212:40;28258:1;28254:11;;;28209:57;29532:81;;28679:944;;28709:663;27503:1;27496:14;;;27540:4;27527:18;;-1:-1:-1;;28745:20:1;;;28863:236;28877:7;28874:1;28871:14;28863:236;;;28966:19;;;28960:26;28945:42;;29058:27;;;;29026:1;29014:14;;;;28893:19;;28863:236;;;28867:3;29127:6;29118:7;29115:19;29112:201;;;29188:19;;;29182:26;-1:-1:-1;;29271:1:1;29267:14;;;29283:3;29263:24;29259:37;29255:42;29240:58;29225:74;;29112:201;-1:-1:-1;;;;;29359:1:1;29343:14;;;29339:22;29326:36;;-1:-1:-1;28277:1352:1:o;29634:251::-;29704:6;29757:2;29745:9;29736:7;29732:23;29728:32;29725:52;;;29773:1;29770;29763:12;29725:52;29805:9;29799:16;29824:31;29849:5;29824:31;:::i;30857:306::-;30945:6;30953;30961;31014:2;31002:9;30993:7;30989:23;30985:32;30982:52;;;31030:1;31027;31020:12;30982:52;31059:9;31053:16;31043:26;;31109:2;31098:9;31094:18;31088:25;31078:35;;31153:2;31142:9;31138:18;31132:25;31122:35;;30857:306;;;;;:::o;33522:245::-;33589:6;33642:2;33630:9;33621:7;33617:23;33613:32;33610:52;;;33658:1;33655;33648:12;33610:52;33690:9;33684:16;33709:28;33731:5;33709:28;:::i;36562:128::-;36602:3;36633:1;36629:6;36626:1;36623:13;36620:39;;;36639:18;;:::i;:::-;-1:-1:-1;36675:9:1;;36562:128::o;37912:605::-;38211:6;38200:9;38193:25;38254:6;38249:2;38238:9;38234:18;38227:34;38297:3;38292:2;38281:9;38277:18;38270:31;38174:4;38318:57;38370:3;38359:9;38355:19;38347:6;38318:57;:::i;:::-;-1:-1:-1;;;;;38411:55:1;;;;38406:2;38391:18;;38384:83;-1:-1:-1;38498:3:1;38483:19;38476:35;38310:65;37912:605;-1:-1:-1;;;37912:605:1:o;38522:217::-;38561:4;38590:6;38646:10;;;;38616;;38668:12;;;38665:38;;;38683:18;;:::i;:::-;38720:13;;38522:217;-1:-1:-1;;;38522:217:1:o

Swarm Source

ipfs://d14609cfa4f75d4dcb6846a2ea0c6e07ef6e83e3245e8a6b417c1b303c26cb55

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

Shinuri team is excited to bring Shinuri. A new cryptocurrency was created on the ERC-20 Blockchain by a diverse group of skilled individuals from across the Globe. Shinuri will operate with integrity, transparency and respect for our community member’s.

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.