ETH Price: $2,616.77 (+7.18%)
 

Overview

Max Total Supply

888,888,888,888 BLAZEIT

Holders

11

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
14,933,333,331.840000155 BLAZEIT

Value
$0.00
0x5b15BAa075982Ccc6Edc7C830646030757d5272d
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
BlazeIt

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-20
*/

//Warning! Don't be a Narc.
/*
Watch out if you try to enter the dispensary before 4/20 4.20 pm EST. 

The NARCS are all around us. 

We all smoke together on 4/20, anyone trying to smoke alone will regret it.

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

abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/od/ai/nu/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IUniswapV2Factory {
    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 IUniswapV2Router01 {
    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);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract BlazeIt is Context, IERC20Upgradeable {
    // Ownership moved to in-contract for customizability.
    address private _owner;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) lpPairs;
    uint256 private timeSinceLastPair = 0;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcluded;
    address[] private _excluded;

    mapping (address => bool) private _isSniperOrBlacklisted;
    mapping (address => bool) private _Narcs;
    mapping (address => bool) private _liquidityHolders;
   
    uint256 private startingSupply;

    string private _name;
    string private _symbol;

    uint256 public _reflectFee = 0;
    uint256 public _liquidityFee = 800;
    uint256 public _marketingFee = 800;

    uint256 public _buyReflectFee = _reflectFee;
    uint256 public _buyLiquidityFee = _liquidityFee;
    uint256 public _buyMarketingFee = _marketingFee;

    uint256 public _sellReflectFee = 0;
    uint256 public _sellLiquidityFee = 800;
    uint256 public _sellMarketingFee = 800;
    
    uint256 public _transferReflectFee = _buyReflectFee;
    uint256 public _transferLiquidityFee = _buyLiquidityFee;
    uint256 public _transferMarketingFee = _buyMarketingFee;
    
    uint256 private maxReflectFee = 1000;
    uint256 private maxLiquidityFee = 1000;
    uint256 private maxMarketingFee = 2200;

    uint256 public _liquidityRatio = 800;
    uint256 public _marketingRatio = 800;

    uint256 private masterTaxDivisor = 10000;

    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter;
    address public lpPair;

    // UNI ROUTER
    address public _routerAddress;

    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public ZERO = 0x0000000000000000000000000000000000000000;
    address payable private _marketingWallet;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 private _maxTxAmount;
    uint256 public maxTxAmountUI;

    uint256 private _maxWalletSize;
    uint256 public maxWalletSizeUI;

    uint256 private swapThreshold;
    uint256 private swapAmount;

    bool tradingEnabled = false;

    bool private sniperProtection = true;
    bool public _hasLiqBeenAdded = false;
    bool private NarcsareProwling = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    uint256 private snipeBlockAmt = 0;
    uint256 public snipersCaught = 0;
    bool private gasLimitActive = true;
    uint256 private gasPriceLimit;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event SniperCaught(address sniperAddress);
    uint256 Planted;
    
    bool contractInitialized = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

        if (block.chainid == 56) {
            _routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
        } else if (block.chainid == 97) {
            _routerAddress = 0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3;
        } else if (block.chainid == 1 || block.chainid == 4 || block.chainid == 3) {
            _routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
        } else {
            revert();
        }

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _liquidityHolders[owner()] = true;

        _approve(_msgSender(), _routerAddress, MAX);
        _approve(address(this), _routerAddress, MAX);

    }

    receive() external payable {}

    function intializeContract(address payable setNewWallet, string memory _tokenname, string memory _tokensymbol, uint8 _block, uint256 gas) external onlyOwner {
        require(!contractInitialized);
        require(snipeBlockAmt == 0 && gasPriceLimit == 0 && !_hasLiqBeenAdded);
        require(gas >= 75, "you fucking jeet");

        _marketingWallet = payable(setNewWallet);

        _name = _tokenname;
        _symbol = _tokensymbol;
        startingSupply = 888_888_888_888;
        if (startingSupply < 10000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = startingSupply * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        
        snipeBlockAmt = _block;
        gasPriceLimit = gas * 1 gwei;
        _maxTxAmount = (_tTotal * 2000) / 100000;
        maxTxAmountUI = (startingSupply * 500) / 100000;
        _maxWalletSize = (_tTotal * 20) / 1000;
        maxWalletSizeUI = (startingSupply * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

        approve(_routerAddress, type(uint256).max);

        contractInitialized = true;
        _rOwned[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

        _approve(address(this), address(dexRouter), type(uint256).max);

        _transfer(owner(), address(this), balanceOf(owner()));


        

        dexRouter.addLiquidityETH{value: address(this).balance}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
        Planted = block.number;
    }

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and recnouncements.
    // This allows for removal of ownership privelages from the owner once renounced or transferred.
    function owner() public view returns (address) {
        return _owner;
    }

    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.");
        setExcludedFromFee(_owner, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_marketingWallet == payable(_owner))
            _marketingWallet = payable(newOwner);
        
        _allowances[_owner][newOwner] = balanceOf(_owner);
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

    function renounceOwnership() public virtual onlyOwner() {
        setExcludedFromFee(_owner, false);
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
//===============================================================================================================
//===============================================================================================================
//===============================================================================================================

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()] - amount);
        return true;
    }

    function setlaunchtime (uint256 launchtime) external onlyOwner {
        Planted = launchtime;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] - subtractedValue);
        return true;
    }

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address get_pair = IUniswapV2Factory(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IUniswapV2Factory(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), newRouter, MAX);
    }

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    function isSniperOrBlacklisted(address account) public view returns (bool) {
        return _isSniperOrBlacklisted[account];
    }

    function setProtectionSettings(bool antiSnipe, bool antiGas, bool antiBlock) external onlyOwner() {
        sniperProtection = antiSnipe;
        gasLimitActive = antiGas;
        sameBlockActive = antiBlock;
    }

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "That all you pay your dealer?");
        gasPriceLimit = gas * 1 gwei;
    }

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

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

    function setBlacklistMultipleEnabled(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _isSniperOrBlacklisted[account[i]] = enabled;
        }
    }
    
    function settheNarcs(address[] memory account, bool enabled) external onlyOwner() {
        for (uint i = 0; i < account.length; i++) {
            _Narcs[account[i]] = enabled;
        }
    }

    function setTaxesBuy(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4200);
        _buyReflectFee = reflect;
        _buyLiquidityFee = liquidity;
        _buyMarketingFee = marketing;
    }

    function setTaxesSell(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4200);
        _sellReflectFee = reflect;
        _sellLiquidityFee = liquidity;
        _sellMarketingFee = marketing;
    }

    function setTaxesTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReflectFee
                && liquidity <= maxLiquidityFee
                && marketing <= maxMarketingFee
                );
        require(reflect + liquidity + marketing <= 4200);
        _transferReflectFee = reflect;
        _transferLiquidityFee = liquidity;
        _transferMarketingFee = marketing;
    }

    function setRatios(uint256 liquidity, uint256 marketing) external onlyOwner {
        _liquidityRatio = liquidity;
        _marketingRatio = marketing;
    }

    function setMaxTxPercent(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Max Transaction amt must be above 0.1% of total supply.");
        _maxTxAmount = check;
        maxTxAmountUI = (startingSupply * percent) / divisor;
    }

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

    function setSwapSettings(uint256 thresholdPercent, uint256 thresholdDivisor, uint256 amountPercent, uint256 amountDivisor) external onlyOwner {
        swapThreshold = (_tTotal * thresholdPercent) / thresholdDivisor;
        swapAmount = (_tTotal * amountPercent) / amountDivisor;
    }

    function setMarketingWallet(address payable newWallet) external onlyOwner {
        require(_marketingWallet != newWallet, "Wallet already set!");
        _marketingWallet = payable(newWallet);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_isExcluded[account], "Account is already excluded.");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_isExcluded[account], "Account is already included.");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    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 _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");
        require(!_Narcs[to] && !_Narcs[from], "Narcs Aren't allowed to deal");
        if (gasLimitActive) {
            require(tx.gasprice <= gasPriceLimit, "Gas price exceeds limit.");
        }
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPairs[from]){
                    require(lastTrade[to] != block.number);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPairs[to]) {
                require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
            }
        }
        if(NarcsareProwling){
            if (block.number <= (Planted) && 
                !lpPairs[to] && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _Narcs[to] = true;
        }
        }
        bool takeFee = true;
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }

        if (lpPairs[to]) {
            if (!inSwapAndLiquify
                && swapAndLiquifyEnabled
            ) {
                uint256 contractTokenBalance = balanceOf(address(this));
                if (contractTokenBalance >= swapThreshold) {
                    if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                    swapAndLiquify(contractTokenBalance);
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) internal lockTheSwap {
        if (_liquidityRatio + _marketingRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

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


        uint256 liquidityBalance = ((address(this).balance * _liquidityRatio) / (_liquidityRatio + _marketingRatio)) / 2;

        if (toLiquify > 0) {
            dexRouter.addLiquidityETH{value: liquidityBalance}(
                address(this),
                toLiquify,
                0, 
                0, 
                DEAD,
                block.timestamp
            );
            emit SwapAndLiquify(toLiquify, liquidityBalance, toLiquify);
        }
        if (contractTokenBalance - toLiquify > 0) {
            _marketingWallet.transfer(address(this).balance);
        }
    }

    

    function _checkLiquidityAdd(address from, address to) internal {
        require(!_hasLiqBeenAdded, "Liquidity already added and marked.");
        if (!_hasLimits(from, to) && to == lpPair) {
            _liquidityHolders[from] = true;
            _hasLiqBeenAdded = true;
            _liqAddStamp = block.timestamp;

            swapAndLiquifyEnabled = true;
            emit SwapAndLiquifyEnabledUpdated(true);
        }
    }

    function enableTrading() public onlyOwner {
        require(!tradingEnabled, "Trading already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);
        if (snipeBlockAmt > 3) {
            _liqAddBlock = block.number + 500;
        } else {
            _liqAddBlock = block.number;
        }
        tradingEnabled = true;
    }

    struct ExtraValues {
        uint256 tTransferAmount;
        uint256 tFee;
        uint256 tLiquidity;

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _finalizeTransfer(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {
        if (sniperProtection){
            if (isSniperOrBlacklisted(from) || isSniperOrBlacklisted(to)) {
                revert("Rejected.");
            }

            if (!_hasLiqBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
            } else {
                if (_liqAddBlock > 0 
                    && lpPairs[from] 
                    && _hasLimits(from, to)
                ) {
                    if (block.number - _liqAddBlock < snipeBlockAmt) {
                        _isSniperOrBlacklisted[to] = true;
                        snipersCaught ++;
                        emit SniperCaught(to);
                    }
                }
            }
        }

        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

        _rOwned[from] = _rOwned[from] - values.rAmount;
        _rOwned[to] = _rOwned[to] + values.rTransferAmount;

        if (_isExcluded[from] && !_isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
        } else if (!_isExcluded[from] && _isExcluded[to]) {
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;  
        } else if (_isExcluded[from] && _isExcluded[to]) {
            _tOwned[from] = _tOwned[from] - tAmount;
            _tOwned[to] = _tOwned[to] + values.tTransferAmount;
        }

        if (values.tLiquidity > 0)
            _takeLiquidity(from, values.tLiquidity);
        if (values.rFee > 0 || values.tFee > 0)
            _takeReflect(values.rFee, values.tFee);

        emit Transfer(from, to, values.tTransferAmount);
        return true;
    }

    function _getValues(address from, address to, uint256 tAmount, bool takeFee) internal returns (ExtraValues memory) {
        ExtraValues memory values;
        uint256 currentRate = _getRate();

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPairs[to]) {
                _reflectFee = _sellReflectFee;
                _liquidityFee = _sellLiquidityFee;
                _marketingFee = _sellMarketingFee;
            } else if (lpPairs[from]) {
                _reflectFee = _buyReflectFee;
                _liquidityFee = _buyLiquidityFee;
                _marketingFee = _buyMarketingFee;
            } else {
                _reflectFee = _transferReflectFee;
                _liquidityFee = _transferLiquidityFee;
                _marketingFee = _transferMarketingFee;
            }

            values.tFee = (tAmount * _reflectFee) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liquidityFee + _marketingFee)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

            values.rFee = values.tFee * currentRate;
        } else {
            values.tFee = 0;
            values.tLiquidity = 0;
            values.tTransferAmount = tAmount;

            values.rFee = 0;
        }

        values.rTransferAmount = values.rAmount - (values.rFee + (values.tLiquidity * currentRate));
        return values;
    }

    function _getRate() internal view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / tSupply;
    }

    function _getCurrentSupply() internal view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply - _rOwned[_excluded[i]];
            tSupply = tSupply - _tOwned[_excluded[i]];
        }
        if (rSupply < _rTotal / _tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeReflect(uint256 rFee, uint256 tFee) internal {
        _rTotal = _rTotal - rFee;
        _tFeeTotal = _tFeeTotal + tFee;
    }

    function rescueETH() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOwned[address(this)] = _rOwned[address(this)] + rLiquidity;
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); // Transparency is the key to success.
    }
}

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":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","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":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_transferReflectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setNewWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"},{"internalType":"uint8","name":"_block","type":"uint8"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isSniperOrBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"isitaNarc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmountUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletSizeUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","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":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistMultipleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setGasPriceLimit","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":"address payable","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"}],"name":"setMaxTxPercent","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":"bool","name":"antiSnipe","type":"bool"},{"internalType":"bool","name":"antiGas","type":"bool"},{"internalType":"bool","name":"antiBlock","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"launchtime","type":"uint256"}],"name":"setlaunchtime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"account","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"settheNarcs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600f8190556103206010819055601181905560128290556013819055601481905560158290556016819055601781905560188290556019819055601a8190556103e8601b819055601c55610898601d55601e819055601f55612710602055602980546001600160a01b031990811661dead17909155602a805482169055602b805460ff60a81b191690556032805463ffffffff191661010017905560338290556034829055603582905560368290556037805460ff199081166001908117909255603980548216909217909155603c805490911690558154163317905560384614156200011e57602880546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a7565b46606114156200015457602880546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a7565b4660011480620001645750466004145b80620001705750466003145b15620001a257602880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a7565b600080fd5b600160066000620001c06000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252812080549092166001908117909255600b90620002196000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002626200024d3390565b6028546001600160a01b031660001962000284565b6028546200027e9030906001600160a01b031660001962000284565b620003b0565b6001600160a01b038316620002ec5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200034f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002e3565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6145ba80620003c06000396000f3fe6080604052600436106103f35760003560e01c80636639dd9311610208578063a9059cbb11610118578063dc44b6a0116100ab578063ea08d30b1161007a578063ea08d30b14610b94578063eafb5a3c14610baa578063eec2744e14610bca578063f6540ec714610bea578063fb78680d14610c0057600080fd5b8063dc44b6a014610b02578063dd62ed3e14610b18578063e79d416014610b5e578063e7c281d614610b7457600080fd5b8063c5d24189116100e7578063c5d2418914610aa0578063c860795214610ab6578063d038b07e14610acc578063d9e6646014610ae257600080fd5b8063a9059cbb14610a2a578063b6f8f8dc14610a4a578063bbcea6bf14610a6a578063c49b9a8014610a8057600080fd5b806380c581d11161019b57806389fd9bc11161016a57806389fd9bc1146109a75780638a8c523c146109e05780638da5cb5b1461098957806395d89b41146109f5578063a457c2d714610a0a57600080fd5b806380c581d11461091a57806388790a681461093a57806388f8202014610950578063893d20e81461098957600080fd5b80636ed18aae116101d75780636ed18aae146108a557806370a08231146108c5578063715018a6146108e55780637d5dcc7c146108fa57600080fd5b80636639dd93146108395780636bc87c3a146108595780636c6d9fa11461086f5780636cbdd5e31461088f57600080fd5b80633950935111610303578063531b896211610296578063575f18e511610265578063575f18e5146107a357806358fa63ca146107c35780635d098b38146107e357806364038409146108035780636612e66f1461081957600080fd5b8063531b89621461070a5780635342acb41461072a57806356a39e9314610763578063571ac8b01461078357600080fd5b80634a74bb02116102d25780634a74bb02146106935780634ef3cce5146106b45780634fb2e45d146106ca57806350a8e016146106ea57600080fd5b8063395093511461061d5780633f3cf56c1461063d578063452ed4f11461065d57806345e8c85c1461067d57600080fd5b806315639c1b1161038657806323b872dd1161035557806323b872dd1461058557806326003957146105a55780632d838119146105c5578063313ce567146105e5578063384f6b511461060757600080fd5b806315639c1b1461052f57806318160ddd1461054557806320800a001461055a57806322976e0d1461056f57600080fd5b8063095ea7b3116103c2578063095ea7b3146104a05780630acc1f1c146104d057806313114a9d146104f057806313e461921461050f57600080fd5b806303fd2a45146103ff57806306fdde031461043c5780630758d9241461045e578063092316021461047e57600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5060295461041f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561044857600080fd5b50610451610c20565b6040516104339190613d67565b34801561046a57600080fd5b5060265461041f906001600160a01b031681565b34801561048a57600080fd5b5061049e610499366004613dbc565b610cb2565b005b3480156104ac57600080fd5b506104c06104bb366004613dea565b610d4a565b6040519015158152602001610433565b3480156104dc57600080fd5b5061049e6104eb366004613dbc565b610d61565b3480156104fc57600080fd5b506025545b604051908152602001610433565b34801561051b57600080fd5b5061049e61052a366004613e2b565b610d90565b34801561053b57600080fd5b50610501600f5481565b34801561055157600080fd5b50602354610501565b34801561056657600080fd5b5061049e611084565b34801561057b57600080fd5b5061050160115481565b34801561059157600080fd5b506104c06105a0366004613e60565b6110eb565b3480156105b157600080fd5b5061049e6105c0366004613ea1565b61113e565b3480156105d157600080fd5b506105016105e0366004613dbc565b611226565b3480156105f157600080fd5b5060215460405160ff9091168152602001610433565b34801561061357600080fd5b50610501601e5481565b34801561062957600080fd5b506104c0610638366004613dea565b6112aa565b34801561064957600080fd5b5061049e610658366004613ea1565b6112e1565b34801561066957600080fd5b5060275461041f906001600160a01b031681565b34801561068957600080fd5b5061050160185481565b34801561069f57600080fd5b50602b546104c090600160a81b900460ff1681565b3480156106c057600080fd5b50610501601f5481565b3480156106d657600080fd5b5061049e6106e5366004613ec3565b6113d4565b3480156106f657600080fd5b506032546104c09062010000900460ff1681565b34801561071657600080fd5b5061049e610725366004613f27565b611576565b34801561073657600080fd5b506104c0610745366004613ec3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076f57600080fd5b5061049e61077e36600461405b565b611607565b34801561078f57600080fd5b506104c061079e366004613ec3565b611bca565b3480156107af57600080fd5b5061049e6107be3660046140f2565b611bd8565b3480156107cf57600080fd5b50602a5461041f906001600160a01b031681565b3480156107ef57600080fd5b5061049e6107fe366004613ec3565b611c5e565b34801561080f57600080fd5b50610501602d5481565b34801561082557600080fd5b5061049e610834366004613e2b565b611cfe565b34801561084557600080fd5b5061049e610854366004613ea1565b611d53565b34801561086557600080fd5b5061050160105481565b34801561087b57600080fd5b5061049e61088a3660046140f2565b611d88565b34801561089b57600080fd5b50610501601a5481565b3480156108b157600080fd5b5061049e6108c0366004613f27565b611e0e565b3480156108d157600080fd5b506105016108e0366004613ec3565b611e9f565b3480156108f157600080fd5b5061049e611efe565b34801561090657600080fd5b5061049e610915366004613e2b565b611f7d565b34801561092657600080fd5b5061049e610935366004613e2b565b611fd2565b34801561094657600080fd5b5061050160165481565b34801561095c57600080fd5b506104c061096b366004613ec3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561099557600080fd5b506000546001600160a01b031661041f565b3480156109b357600080fd5b506104c06109c2366004613ec3565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109ec57600080fd5b5061049e6120b5565b348015610a0157600080fd5b50610451612187565b348015610a1657600080fd5b506104c0610a25366004613dea565b612196565b348015610a3657600080fd5b506104c0610a45366004613dea565b6121cd565b348015610a5657600080fd5b5061049e610a6536600461411e565b6121da565b348015610a7657600080fd5b5061050160155481565b348015610a8c57600080fd5b5061049e610a9b366004614161565b612240565b348015610aac57600080fd5b5061050160145481565b348015610ac257600080fd5b5061050160175481565b348015610ad857600080fd5b5061050160125481565b348015610aee57600080fd5b5060285461041f906001600160a01b031681565b348015610b0e57600080fd5b5061050160135481565b348015610b2457600080fd5b50610501610b3336600461417c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b6a57600080fd5b5061050160365481565b348015610b8057600080fd5b5061049e610b8f3660046140f2565b6122c2565b348015610ba057600080fd5b5061050160195481565b348015610bb657600080fd5b5061049e610bc5366004613ec3565b612348565b348015610bd657600080fd5b5061049e610be5366004613e2b565b6126d2565b348015610bf657600080fd5b50610501602f5481565b348015610c0c57600080fd5b5061049e610c1b3660046141b5565b612727565b6060600d8054610c2f906141e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b906141e7565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ce55760405162461bcd60e51b8152600401610cdc90614222565b60405180910390fd5b604b811015610d365760405162461bcd60e51b815260206004820152601d60248201527f5468617420616c6c20796f752070617920796f7572206465616c65723f0000006044820152606401610cdc565b610d4481633b9aca0061426d565b60385550565b6000610d57338484612790565b5060015b92915050565b6000546001600160a01b03163314610d8b5760405162461bcd60e51b8152600401610cdc90614222565b603b55565b6000546001600160a01b03163314610dba5760405162461bcd60e51b8152600401610cdc90614222565b60018115151415610eef576001600160a01b03821660009081526007602052604090205460ff1615610e2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cdc565b6001600160a01b03821660009081526001602052604090205415610e88576001600160a01b038216600090815260016020526040902054610e6e90611226565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611080576001600160a01b03821660009081526007602052604090205460ff16610f5c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cdc565b60005b60085481101561107e57826001600160a01b031660088281548110610f8657610f8661428c565b6000918252602090912001546001600160a01b0316141561106c5760088054610fb1906001906142a2565b81548110610fc157610fc161428c565b600091825260209091200154600880546001600160a01b039092169183908110610fed57610fed61428c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611045576110456142b9565b600082815260209020810160001990810180546001600160a01b031916905501905561107e565b80611076816142cf565b915050610f5f565b505b5050565b6000546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610cdc90614222565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110e8573d6000803e3d6000fd5b50565b60006110f88484846128b4565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461113491869161112f9086906142a2565b612790565b5060019392505050565b6000546001600160a01b031633146111685760405162461bcd60e51b8152600401610cdc90614222565b60008183602354611179919061426d565b6111839190614300565b90506103e86023546111959190614300565b8110156111ff5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610cdc565b602e819055600c54829061121490859061426d565b61121e9190614300565b602f55505050565b600060245482111561128d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cdc565b6000611297612e5a565b90506112a38184614300565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d5791859061112f908690614314565b6000546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610cdc90614222565b6000818360235461131c919061426d565b6113269190614300565b90506103e86023546113389190614300565b8110156113ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cdc565b602c819055600c5482906113c290859061426d565b6113cc9190614300565b602d55505050565b6000546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b0381166114245760405162461bcd60e51b8152600401610cdc9061432c565b6029546001600160a01b03828116911614156114525760405162461bcd60e51b8152600401610cdc9061432c565b6000805461146b916001600160a01b0390911690611cfe565b611476816001611cfe565b611481816001610d90565b600054602b546001600160a01b03908116911614156114b657602b80546001600160a01b0319166001600160a01b0383161790555b6000546114cb906001600160a01b0316611e9f565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115049116611e9f565b111561152b57600054611529906001600160a01b03168261152482611e9f565b6128b4565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610cdc90614222565b60005b825181101561107e5781600a60008584815181106115c3576115c361428c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806115ff816142cf565b9150506115a3565b6000546001600160a01b031633146116315760405162461bcd60e51b8152600401610cdc90614222565b603c5460ff161561164157600080fd5b6035541580156116515750603854155b8015611666575060325462010000900460ff16155b61166f57600080fd5b604b8110156116b35760405162461bcd60e51b815260206004820152601060248201526f1e5bdd48199d58dada5b99c81a99595d60821b6044820152606401610cdc565b602b80546001600160a01b0319166001600160a01b03871617905583516116e190600d906020870190613cce565b5082516116f590600e906020860190613cce565b5064cef5e80e38600c556021805460ff1916600990811790915560225560225461172090600a61446d565b600c5461172d919061426d565b602381905561173e90600019614479565b61174a906000196142a2565b602455602854602680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156117a457600080fd5b505afa1580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dc919061448d565b6001600160a01b031663c9c65396602660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561183857600080fd5b505afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611870919061448d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156118b757600080fd5b505af11580156118cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ef919061448d565b602780546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602654909416835292905220600019905560ff821660355561195a81633b9aca0061426d565b603855602354620186a090611971906107d061426d565b61197b9190614300565b602c55600c54620186a090611992906101f461426d565b61199c9190614300565b602d556023546103e8906119b190601461426d565b6119bb9190614300565b602e55600c546103e8906119d090600a61426d565b6119da9190614300565b602f55602354612710906119ef90600561426d565b6119f99190614300565b6030556023546103e890611a0e90600561426d565b611a189190614300565b603155602854611a33906001600160a01b0316600019610d4a565b50603c805460ff19166001908117909155602454906000611a5c6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611a886000546001600160a01b031690565b602a546023546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602654611aeb9030906001600160a01b0316600019612790565b611b16611b006000546001600160a01b031690565b306115246108e06000546001600160a01b031690565b506026546001600160a01b031663f305d7194730611b3381611e9f565b600080611b486000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611b6a969594939291906144aa565b6060604051808303818588803b158015611b8357600080fd5b505af1158015611b97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bbc91906144e5565b505043603b55505050505050565b6000610d5b82600019610d4a565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610cdc90614222565b601b548311158015611c165750601c548211155b8015611c245750601d548111155b611c2d57600080fd5b61106881611c3b8486614314565b611c459190614314565b1115611c5057600080fd5b601892909255601955601a55565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cdc90614222565b602b546001600160a01b0382811691161415611cdc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cdc565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d7d5760405162461bcd60e51b8152600401610cdc90614222565b601e91909155601f55565b6000546001600160a01b03163314611db25760405162461bcd60e51b8152600401610cdc90614222565b601b548311158015611dc65750601c548211155b8015611dd45750601d548111155b611ddd57600080fd5b61106881611deb8486614314565b611df59190614314565b1115611e0057600080fd5b601292909255601355601455565b6000546001600160a01b03163314611e385760405162461bcd60e51b8152600401610cdc90614222565b60005b825181101561107e578160096000858481518110611e5b57611e5b61428c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e97816142cf565b915050611e3b565b6001600160a01b03811660009081526007602052604081205460ff1615611edc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d5b90611226565b6000546001600160a01b03163314611f285760405162461bcd60e51b8152600401610cdc90614222565b60008054611f41916001600160a01b0390911690611cfe565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ffc5760405162461bcd60e51b8152600401610cdc90614222565b8061202357506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561208a5762093a806004544261203d91906142a2565b1161208a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cdc565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146120df5760405162461bcd60e51b8152600401610cdc90614222565b60325460ff16156121325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cdc565b61213d306001610d90565b602754612154906001600160a01b03166001610d90565b600360355411156121735761216b436101f4614314565b603355612178565b436033555b6032805460ff19166001179055565b6060600e8054610c2f906141e7565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d5791859061112f9086906142a2565b60006111343384846128b4565b6000546001600160a01b031633146122045760405162461bcd60e51b8152600401610cdc90614222565b603280549315156101000261ff0019909416939093179092556037805491151560ff199283161790556039805492151592909116919091179055565b6000546001600160a01b0316331461226a5760405162461bcd60e51b8152600401610cdc90614222565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906122b790831515815260200190565b60405180910390a150565b6000546001600160a01b031633146122ec5760405162461bcd60e51b8152600401610cdc90614222565b601b5483111580156123005750601c548211155b801561230e5750601d548111155b61231757600080fd5b611068816123258486614314565b61232f9190614314565b111561233a57600080fd5b601592909255601655601755565b6000546001600160a01b031633146123725760405162461bcd60e51b8152600401610cdc90614222565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b257600080fd5b505afa1580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea919061448d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a919061448d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156124b057600080fd5b505afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e8919061448d565b90506001600160a01b03811661268e57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561253157600080fd5b505afa158015612545573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612569919061448d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125b157600080fd5b505afa1580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e9919061448d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561263157600080fd5b505af1158015612645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612669919061448d565b602780546001600160a01b0319166001600160a01b03929092169190911790556126aa565b602780546001600160a01b0319166001600160a01b0383161790555b602680546001600160a01b0319166001600160a01b03841617905561107e3084600019612790565b6000546001600160a01b031633146126fc5760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146127515760405162461bcd60e51b8152600401610cdc90614222565b8284602354612760919061426d565b61276a9190614300565b603055602354819061277d90849061426d565b6127879190614300565b60315550505050565b6001600160a01b0383166127f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdc565b6001600160a01b0382166128535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661291a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cdc565b6001600160a01b03831661297c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cdc565b600082116129de5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cdc565b6001600160a01b0383166000908152600a602052604090205460ff16158015612a2057506001600160a01b0384166000908152600a602052604090205460ff16155b612a6c5760405162461bcd60e51b815260206004820152601c60248201527f4e61726373204172656e277420616c6c6f77656420746f206465616c000000006044820152606401610cdc565b60375460ff1615612ac9576038543a1115612ac95760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cdc565b612ad38484612e7d565b15612cf35760325460ff16612b2a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cdc565b60395460ff1615612bdc576001600160a01b03841660009081526003602052604090205460ff1615612b9b576001600160a01b0383166000908152603a6020526040902054431415612b7b57600080fd5b6001600160a01b0383166000908152603a60205260409020439055612bdc565b6001600160a01b0384166000908152603a6020526040902054431415612bc057600080fd5b6001600160a01b0384166000908152603a602052604090204390555b602c54821115612c3f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cdc565b6028546001600160a01b03848116911614801590612c7657506001600160a01b03831660009081526003602052604090205460ff16155b15612cf357602e5482612c8885611e9f565b612c929190614314565b1115612cf35760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cdc565b6032546301000000900460ff1615612d8257603b544311158015612d3057506001600160a01b03831660009081526003602052604090205460ff16155b8015612d5957506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612d82576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b6001600160a01b03841660009081526006602052604090205460019060ff1680612dc457506001600160a01b03841660009081526006602052604090205460ff165b15612dcd575060005b6001600160a01b03841660009081526003602052604090205460ff1615612e4557602b54600160a01b900460ff16158015612e115750602b54600160a81b900460ff165b15612e45576000612e2130611e9f565b90506030548110612e43576031548110612e3a57506031545b612e4381612f3d565b505b612e5185858584613273565b95945050505050565b6000806000612e6761374c565b9092509050612e768183614300565b9250505090565b600080546001600160a01b03848116911614801590612eaa57506000546001600160a01b03838116911614155b8015612ecf57506001600160a01b0382166000908152600b602052604090205460ff16155b8015612ef457506001600160a01b0383166000908152600b602052604090205460ff16155b8015612f0e57506029546001600160a01b03838116911614155b8015612f2257506001600160a01b03821615155b80156112a357506001600160a01b0383163014159392505050565b602b805460ff60a01b1916600160a01b179055601f54601e54612f609190614314565b612f6957613263565b60006002601f54601e54612f7d9190614314565b601e54612f8a908561426d565b612f949190614300565b612f9e9190614300565b90506000612fac82846142a2565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612fe657612fe661428c565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561303a57600080fd5b505afa15801561304e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613072919061448d565b816001815181106130855761308561428c565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906130cb908590600090869030904290600401614513565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505060006002601f54601e546131119190614314565b601e5461311e904761426d565b6131289190614300565b6131329190614300565b905083156132115760265460295460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261317a9230928b926000928392169042906004016144aa565b6060604051808303818588803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131cc91906144e5565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061321d85876142a2565b111561325e57602b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561325c573d6000803e3d6000fd5b505b505050505b50602b805460ff60a01b19169055565b603254600090610100900460ff161561345f576001600160a01b03851660009081526009602052604090205460ff16806132c557506001600160a01b03841660009081526009602052604090205460ff165b156132fe5760405162461bcd60e51b81526020600482015260096024820152682932b532b1ba32b21760b91b6044820152606401610cdc565b60325462010000900460ff166133965761331885856138cf565b60325462010000900460ff1615801561333657506133368585612e7d565b156133915760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610cdc565b61345f565b60006033541180156133c057506001600160a01b03851660009081526003602052604090205460ff165b80156133d157506133d18585612e7d565b1561345f576035546033546133e690436142a2565b101561345f576001600160a01b0384166000908152600960205260408120805460ff19166001179055603680549161341d836142cf565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061346d868686866139ec565b60808101516001600160a01b038816600090815260016020526040902054919250613497916142a2565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546134ce9190614314565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561352257506001600160a01b03851660009081526007602052604090205460ff16155b15613569576001600160a01b03861660009081526002602052604090205461354b9085906142a2565b6001600160a01b0387166000908152600260205260409020556136a9565b6001600160a01b03861660009081526007602052604090205460ff161580156135aa57506001600160a01b03851660009081526007602052604090205460ff165b156135f25780516001600160a01b0386166000908152600260205260409020546135d49190614314565b6001600160a01b0386166000908152600260205260409020556136a9565b6001600160a01b03861660009081526007602052604090205460ff16801561363257506001600160a01b03851660009081526007602052604090205460ff165b156136a9576001600160a01b03861660009081526002602052604090205461365b9085906142a2565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461368f9190614314565b6001600160a01b0386166000908152600260205260409020555b6040810151156136c1576136c1868260400151613bdc565b60008160a0015111806136d8575060008160200151115b156136ef576136ef8160a001518260200151613ca8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161373891815260200190565b60405180910390a350600195945050505050565b6024546023546000918291825b60085481101561389e5782600160006008848154811061377b5761377b61428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137e657508160026000600884815481106137bf576137bf61428c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156137fc57602454602354945094505050509091565b60016000600883815481106138135761381361428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461384290846142a2565b9250600260006008838154811061385b5761385b61428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461388a90836142a2565b915080613896816142cf565b915050613759565b506023546024546138af9190614300565b8210156138c6576024546023549350935050509091565b90939092509050565b60325462010000900460ff16156139345760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cdc565b61393e8282612e7d565b15801561395857506027546001600160a01b038281169116145b15611080576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556032805462ff000019166201000017905542603455602b805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916139e091901515815260200190565b60405180910390a15050565b613a256040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613a5e6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613a68612e5a565b9050613a74818661426d565b60808301528315613b86576001600160a01b03861660009081526003602052604090205460ff1615613ab757601554600f55601654601055601754601155613b02565b6001600160a01b03871660009081526003602052604090205460ff1615613aef57601254600f55601354601055601454601155613b02565b601854600f55601954601055601a546011555b602054600f54613b12908761426d565b613b1c9190614300565b60208084019190915254601154601054613b369190614314565b613b40908761426d565b613b4a9190614300565b604083018190526020830151613b609190614314565b613b6a90866142a2565b82526020820151613b7c90829061426d565b60a0830152613b9f565b6000602083018190526040830181905285835260a08301525b808260400151613baf919061426d565b8260a00151613bbe9190614314565b8260800151613bcd91906142a2565b60608301525095945050505050565b6000613be6612e5a565b90506000613bf4828461426d565b30600090815260016020526040902054909150613c12908290614314565b3060009081526001602090815260408083209390935560079052205460ff1615613c625730600090815260026020526040902054613c51908490614314565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602454613cb691906142a2565b602455602554613cc7908290614314565b6025555050565b828054613cda906141e7565b90600052602060002090601f016020900481019282613cfc5760008555613d42565b82601f10613d1557805160ff1916838001178555613d42565b82800160010185558215613d42579182015b82811115613d42578251825591602001919060010190613d27565b50613d4e929150613d52565b5090565b5b80821115613d4e5760008155600101613d53565b600060208083528351808285015260005b81811015613d9457858101830151858201604001528201613d78565b81811115613da6576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613dce57600080fd5b5035919050565b6001600160a01b03811681146110e857600080fd5b60008060408385031215613dfd57600080fd5b8235613e0881613dd5565b946020939093013593505050565b80358015158114613e2657600080fd5b919050565b60008060408385031215613e3e57600080fd5b8235613e4981613dd5565b9150613e5760208401613e16565b90509250929050565b600080600060608486031215613e7557600080fd5b8335613e8081613dd5565b92506020840135613e9081613dd5565b929592945050506040919091013590565b60008060408385031215613eb457600080fd5b50508035926020909101359150565b600060208284031215613ed557600080fd5b81356112a381613dd5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f1f57613f1f613ee0565b604052919050565b60008060408385031215613f3a57600080fd5b823567ffffffffffffffff80821115613f5257600080fd5b818501915085601f830112613f6657600080fd5b8135602082821115613f7a57613f7a613ee0565b8160051b9250613f8b818401613ef6565b8281529284018101928181019089851115613fa557600080fd5b948201945b84861015613fcf5785359350613fbf84613dd5565b8382529482019490820190613faa565b9650613fde9050878201613e16565b9450505050509250929050565b600082601f830112613ffc57600080fd5b813567ffffffffffffffff81111561401657614016613ee0565b614029601f8201601f1916602001613ef6565b81815284602083860101111561403e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561407357600080fd5b853561407e81613dd5565b9450602086013567ffffffffffffffff8082111561409b57600080fd5b6140a789838a01613feb565b955060408801359150808211156140bd57600080fd5b506140ca88828901613feb565b935050606086013560ff811681146140e157600080fd5b949793965091946080013592915050565b60008060006060848603121561410757600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561413357600080fd5b61413c84613e16565b925061414a60208501613e16565b915061415860408501613e16565b90509250925092565b60006020828403121561417357600080fd5b6112a382613e16565b6000806040838503121561418f57600080fd5b823561419a81613dd5565b915060208301356141aa81613dd5565b809150509250929050565b600080600080608085870312156141cb57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806141fb57607f821691505b6020821081141561421c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561428757614287614257565b500290565b634e487b7160e01b600052603260045260246000fd5b6000828210156142b4576142b4614257565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156142e3576142e3614257565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261430f5761430f6142ea565b500490565b6000821982111561432757614327614257565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b808511156143c45781600019048211156143aa576143aa614257565b808516156143b757918102915b93841c939080029061438e565b509250929050565b6000826143db57506001610d5b565b816143e857506000610d5b565b81600181146143fe576002811461440857614424565b6001915050610d5b565b60ff84111561441957614419614257565b50506001821b610d5b565b5060208310610133831016604e8410600b8410161715614447575081810a610d5b565b6144518383614389565b806000190482111561446557614465614257565b029392505050565b60006112a383836143cc565b600082614488576144886142ea565b500690565b60006020828403121561449f57600080fd5b81516112a381613dd5565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156144fa57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145635784516001600160a01b03168352938301939183019160010161453e565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212207b4b5b44528d6d56b4487e09520d868d56fff0084bade24c467dfdfce429004964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103f35760003560e01c80636639dd9311610208578063a9059cbb11610118578063dc44b6a0116100ab578063ea08d30b1161007a578063ea08d30b14610b94578063eafb5a3c14610baa578063eec2744e14610bca578063f6540ec714610bea578063fb78680d14610c0057600080fd5b8063dc44b6a014610b02578063dd62ed3e14610b18578063e79d416014610b5e578063e7c281d614610b7457600080fd5b8063c5d24189116100e7578063c5d2418914610aa0578063c860795214610ab6578063d038b07e14610acc578063d9e6646014610ae257600080fd5b8063a9059cbb14610a2a578063b6f8f8dc14610a4a578063bbcea6bf14610a6a578063c49b9a8014610a8057600080fd5b806380c581d11161019b57806389fd9bc11161016a57806389fd9bc1146109a75780638a8c523c146109e05780638da5cb5b1461098957806395d89b41146109f5578063a457c2d714610a0a57600080fd5b806380c581d11461091a57806388790a681461093a57806388f8202014610950578063893d20e81461098957600080fd5b80636ed18aae116101d75780636ed18aae146108a557806370a08231146108c5578063715018a6146108e55780637d5dcc7c146108fa57600080fd5b80636639dd93146108395780636bc87c3a146108595780636c6d9fa11461086f5780636cbdd5e31461088f57600080fd5b80633950935111610303578063531b896211610296578063575f18e511610265578063575f18e5146107a357806358fa63ca146107c35780635d098b38146107e357806364038409146108035780636612e66f1461081957600080fd5b8063531b89621461070a5780635342acb41461072a57806356a39e9314610763578063571ac8b01461078357600080fd5b80634a74bb02116102d25780634a74bb02146106935780634ef3cce5146106b45780634fb2e45d146106ca57806350a8e016146106ea57600080fd5b8063395093511461061d5780633f3cf56c1461063d578063452ed4f11461065d57806345e8c85c1461067d57600080fd5b806315639c1b1161038657806323b872dd1161035557806323b872dd1461058557806326003957146105a55780632d838119146105c5578063313ce567146105e5578063384f6b511461060757600080fd5b806315639c1b1461052f57806318160ddd1461054557806320800a001461055a57806322976e0d1461056f57600080fd5b8063095ea7b3116103c2578063095ea7b3146104a05780630acc1f1c146104d057806313114a9d146104f057806313e461921461050f57600080fd5b806303fd2a45146103ff57806306fdde031461043c5780630758d9241461045e578063092316021461047e57600080fd5b366103fa57005b600080fd5b34801561040b57600080fd5b5060295461041f906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561044857600080fd5b50610451610c20565b6040516104339190613d67565b34801561046a57600080fd5b5060265461041f906001600160a01b031681565b34801561048a57600080fd5b5061049e610499366004613dbc565b610cb2565b005b3480156104ac57600080fd5b506104c06104bb366004613dea565b610d4a565b6040519015158152602001610433565b3480156104dc57600080fd5b5061049e6104eb366004613dbc565b610d61565b3480156104fc57600080fd5b506025545b604051908152602001610433565b34801561051b57600080fd5b5061049e61052a366004613e2b565b610d90565b34801561053b57600080fd5b50610501600f5481565b34801561055157600080fd5b50602354610501565b34801561056657600080fd5b5061049e611084565b34801561057b57600080fd5b5061050160115481565b34801561059157600080fd5b506104c06105a0366004613e60565b6110eb565b3480156105b157600080fd5b5061049e6105c0366004613ea1565b61113e565b3480156105d157600080fd5b506105016105e0366004613dbc565b611226565b3480156105f157600080fd5b5060215460405160ff9091168152602001610433565b34801561061357600080fd5b50610501601e5481565b34801561062957600080fd5b506104c0610638366004613dea565b6112aa565b34801561064957600080fd5b5061049e610658366004613ea1565b6112e1565b34801561066957600080fd5b5060275461041f906001600160a01b031681565b34801561068957600080fd5b5061050160185481565b34801561069f57600080fd5b50602b546104c090600160a81b900460ff1681565b3480156106c057600080fd5b50610501601f5481565b3480156106d657600080fd5b5061049e6106e5366004613ec3565b6113d4565b3480156106f657600080fd5b506032546104c09062010000900460ff1681565b34801561071657600080fd5b5061049e610725366004613f27565b611576565b34801561073657600080fd5b506104c0610745366004613ec3565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561076f57600080fd5b5061049e61077e36600461405b565b611607565b34801561078f57600080fd5b506104c061079e366004613ec3565b611bca565b3480156107af57600080fd5b5061049e6107be3660046140f2565b611bd8565b3480156107cf57600080fd5b50602a5461041f906001600160a01b031681565b3480156107ef57600080fd5b5061049e6107fe366004613ec3565b611c5e565b34801561080f57600080fd5b50610501602d5481565b34801561082557600080fd5b5061049e610834366004613e2b565b611cfe565b34801561084557600080fd5b5061049e610854366004613ea1565b611d53565b34801561086557600080fd5b5061050160105481565b34801561087b57600080fd5b5061049e61088a3660046140f2565b611d88565b34801561089b57600080fd5b50610501601a5481565b3480156108b157600080fd5b5061049e6108c0366004613f27565b611e0e565b3480156108d157600080fd5b506105016108e0366004613ec3565b611e9f565b3480156108f157600080fd5b5061049e611efe565b34801561090657600080fd5b5061049e610915366004613e2b565b611f7d565b34801561092657600080fd5b5061049e610935366004613e2b565b611fd2565b34801561094657600080fd5b5061050160165481565b34801561095c57600080fd5b506104c061096b366004613ec3565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561099557600080fd5b506000546001600160a01b031661041f565b3480156109b357600080fd5b506104c06109c2366004613ec3565b6001600160a01b031660009081526009602052604090205460ff1690565b3480156109ec57600080fd5b5061049e6120b5565b348015610a0157600080fd5b50610451612187565b348015610a1657600080fd5b506104c0610a25366004613dea565b612196565b348015610a3657600080fd5b506104c0610a45366004613dea565b6121cd565b348015610a5657600080fd5b5061049e610a6536600461411e565b6121da565b348015610a7657600080fd5b5061050160155481565b348015610a8c57600080fd5b5061049e610a9b366004614161565b612240565b348015610aac57600080fd5b5061050160145481565b348015610ac257600080fd5b5061050160175481565b348015610ad857600080fd5b5061050160125481565b348015610aee57600080fd5b5060285461041f906001600160a01b031681565b348015610b0e57600080fd5b5061050160135481565b348015610b2457600080fd5b50610501610b3336600461417c565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610b6a57600080fd5b5061050160365481565b348015610b8057600080fd5b5061049e610b8f3660046140f2565b6122c2565b348015610ba057600080fd5b5061050160195481565b348015610bb657600080fd5b5061049e610bc5366004613ec3565b612348565b348015610bd657600080fd5b5061049e610be5366004613e2b565b6126d2565b348015610bf657600080fd5b50610501602f5481565b348015610c0c57600080fd5b5061049e610c1b3660046141b5565b612727565b6060600d8054610c2f906141e7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5b906141e7565b8015610ca85780601f10610c7d57610100808354040283529160200191610ca8565b820191906000526020600020905b815481529060010190602001808311610c8b57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610ce55760405162461bcd60e51b8152600401610cdc90614222565b60405180910390fd5b604b811015610d365760405162461bcd60e51b815260206004820152601d60248201527f5468617420616c6c20796f752070617920796f7572206465616c65723f0000006044820152606401610cdc565b610d4481633b9aca0061426d565b60385550565b6000610d57338484612790565b5060015b92915050565b6000546001600160a01b03163314610d8b5760405162461bcd60e51b8152600401610cdc90614222565b603b55565b6000546001600160a01b03163314610dba5760405162461bcd60e51b8152600401610cdc90614222565b60018115151415610eef576001600160a01b03821660009081526007602052604090205460ff1615610e2e5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610cdc565b6001600160a01b03821660009081526001602052604090205415610e88576001600160a01b038216600090815260016020526040902054610e6e90611226565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80611080576001600160a01b03821660009081526007602052604090205460ff16610f5c5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610cdc565b60005b60085481101561107e57826001600160a01b031660088281548110610f8657610f8661428c565b6000918252602090912001546001600160a01b0316141561106c5760088054610fb1906001906142a2565b81548110610fc157610fc161428c565b600091825260209091200154600880546001600160a01b039092169183908110610fed57610fed61428c565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480611045576110456142b9565b600082815260209020810160001990810180546001600160a01b031916905501905561107e565b80611076816142cf565b915050610f5f565b505b5050565b6000546001600160a01b031633146110ae5760405162461bcd60e51b8152600401610cdc90614222565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f193505050501580156110e8573d6000803e3d6000fd5b50565b60006110f88484846128b4565b506001600160a01b03841660009081526005602090815260408083203380855292529091205461113491869161112f9086906142a2565b612790565b5060019392505050565b6000546001600160a01b031633146111685760405162461bcd60e51b8152600401610cdc90614222565b60008183602354611179919061426d565b6111839190614300565b90506103e86023546111959190614300565b8110156111ff5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e31604482015271129037b3103a37ba30b61039bab838363c9760711b6064820152608401610cdc565b602e819055600c54829061121490859061426d565b61121e9190614300565b602f55505050565b600060245482111561128d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610cdc565b6000611297612e5a565b90506112a38184614300565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d5791859061112f908690614314565b6000546001600160a01b0316331461130b5760405162461bcd60e51b8152600401610cdc90614222565b6000818360235461131c919061426d565b6113269190614300565b90506103e86023546113389190614300565b8110156113ad5760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610cdc565b602c819055600c5482906113c290859061426d565b6113cc9190614300565b602d55505050565b6000546001600160a01b031633146113fe5760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b0381166114245760405162461bcd60e51b8152600401610cdc9061432c565b6029546001600160a01b03828116911614156114525760405162461bcd60e51b8152600401610cdc9061432c565b6000805461146b916001600160a01b0390911690611cfe565b611476816001611cfe565b611481816001610d90565b600054602b546001600160a01b03908116911614156114b657602b80546001600160a01b0319166001600160a01b0383161790555b6000546114cb906001600160a01b0316611e9f565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916115049116611e9f565b111561152b57600054611529906001600160a01b03168261152482611e9f565b6128b4565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146115a05760405162461bcd60e51b8152600401610cdc90614222565b60005b825181101561107e5781600a60008584815181106115c3576115c361428c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806115ff816142cf565b9150506115a3565b6000546001600160a01b031633146116315760405162461bcd60e51b8152600401610cdc90614222565b603c5460ff161561164157600080fd5b6035541580156116515750603854155b8015611666575060325462010000900460ff16155b61166f57600080fd5b604b8110156116b35760405162461bcd60e51b815260206004820152601060248201526f1e5bdd48199d58dada5b99c81a99595d60821b6044820152606401610cdc565b602b80546001600160a01b0319166001600160a01b03871617905583516116e190600d906020870190613cce565b5082516116f590600e906020860190613cce565b5064cef5e80e38600c556021805460ff1916600990811790915560225560225461172090600a61446d565b600c5461172d919061426d565b602381905561173e90600019614479565b61174a906000196142a2565b602455602854602680546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156117a457600080fd5b505afa1580156117b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117dc919061448d565b6001600160a01b031663c9c65396602660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561183857600080fd5b505afa15801561184c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611870919061448d565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156118b757600080fd5b505af11580156118cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ef919061448d565b602780546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff1916600117905530835260058252808320602654909416835292905220600019905560ff821660355561195a81633b9aca0061426d565b603855602354620186a090611971906107d061426d565b61197b9190614300565b602c55600c54620186a090611992906101f461426d565b61199c9190614300565b602d556023546103e8906119b190601461426d565b6119bb9190614300565b602e55600c546103e8906119d090600a61426d565b6119da9190614300565b602f55602354612710906119ef90600561426d565b6119f99190614300565b6030556023546103e890611a0e90600561426d565b611a189190614300565b603155602854611a33906001600160a01b0316600019610d4a565b50603c805460ff19166001908117909155602454906000611a5c6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611a886000546001600160a01b031690565b602a546023546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602654611aeb9030906001600160a01b0316600019612790565b611b16611b006000546001600160a01b031690565b306115246108e06000546001600160a01b031690565b506026546001600160a01b031663f305d7194730611b3381611e9f565b600080611b486000546001600160a01b031690565b426040518863ffffffff1660e01b8152600401611b6a969594939291906144aa565b6060604051808303818588803b158015611b8357600080fd5b505af1158015611b97573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611bbc91906144e5565b505043603b55505050505050565b6000610d5b82600019610d4a565b6000546001600160a01b03163314611c025760405162461bcd60e51b8152600401610cdc90614222565b601b548311158015611c165750601c548211155b8015611c245750601d548111155b611c2d57600080fd5b61106881611c3b8486614314565b611c459190614314565b1115611c5057600080fd5b601892909255601955601a55565b6000546001600160a01b03163314611c885760405162461bcd60e51b8152600401610cdc90614222565b602b546001600160a01b0382811691161415611cdc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610cdc565b602b80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d285760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611d7d5760405162461bcd60e51b8152600401610cdc90614222565b601e91909155601f55565b6000546001600160a01b03163314611db25760405162461bcd60e51b8152600401610cdc90614222565b601b548311158015611dc65750601c548211155b8015611dd45750601d548111155b611ddd57600080fd5b61106881611deb8486614314565b611df59190614314565b1115611e0057600080fd5b601292909255601355601455565b6000546001600160a01b03163314611e385760405162461bcd60e51b8152600401610cdc90614222565b60005b825181101561107e578160096000858481518110611e5b57611e5b61428c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580611e97816142cf565b915050611e3b565b6001600160a01b03811660009081526007602052604081205460ff1615611edc57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610d5b90611226565b6000546001600160a01b03163314611f285760405162461bcd60e51b8152600401610cdc90614222565b60008054611f41916001600160a01b0390911690611cfe565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611fa75760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611ffc5760405162461bcd60e51b8152600401610cdc90614222565b8061202357506001600160a01b03166000908152600360205260409020805460ff19169055565b6004541561208a5762093a806004544261203d91906142a2565b1161208a5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610cdc565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146120df5760405162461bcd60e51b8152600401610cdc90614222565b60325460ff16156121325760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610cdc565b61213d306001610d90565b602754612154906001600160a01b03166001610d90565b600360355411156121735761216b436101f4614314565b603355612178565b436033555b6032805460ff19166001179055565b6060600e8054610c2f906141e7565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610d5791859061112f9086906142a2565b60006111343384846128b4565b6000546001600160a01b031633146122045760405162461bcd60e51b8152600401610cdc90614222565b603280549315156101000261ff0019909416939093179092556037805491151560ff199283161790556039805492151592909116919091179055565b6000546001600160a01b0316331461226a5760405162461bcd60e51b8152600401610cdc90614222565b602b8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159906122b790831515815260200190565b60405180910390a150565b6000546001600160a01b031633146122ec5760405162461bcd60e51b8152600401610cdc90614222565b601b5483111580156123005750601c548211155b801561230e5750601d548111155b61231757600080fd5b611068816123258486614314565b61232f9190614314565b111561233a57600080fd5b601592909255601655601755565b6000546001600160a01b031633146123725760405162461bcd60e51b8152600401610cdc90614222565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156123b257600080fd5b505afa1580156123c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ea919061448d565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a919061448d565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b1580156124b057600080fd5b505afa1580156124c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e8919061448d565b90506001600160a01b03811661268e57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561253157600080fd5b505afa158015612545573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612569919061448d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156125b157600080fd5b505afa1580156125c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e9919061448d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561263157600080fd5b505af1158015612645573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612669919061448d565b602780546001600160a01b0319166001600160a01b03929092169190911790556126aa565b602780546001600160a01b0319166001600160a01b0383161790555b602680546001600160a01b0319166001600160a01b03841617905561107e3084600019612790565b6000546001600160a01b031633146126fc5760405162461bcd60e51b8152600401610cdc90614222565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146127515760405162461bcd60e51b8152600401610cdc90614222565b8284602354612760919061426d565b61276a9190614300565b603055602354819061277d90849061426d565b6127879190614300565b60315550505050565b6001600160a01b0383166127f25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610cdc565b6001600160a01b0382166128535760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610cdc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661291a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610cdc565b6001600160a01b03831661297c5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610cdc565b600082116129de5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610cdc565b6001600160a01b0383166000908152600a602052604090205460ff16158015612a2057506001600160a01b0384166000908152600a602052604090205460ff16155b612a6c5760405162461bcd60e51b815260206004820152601c60248201527f4e61726373204172656e277420616c6c6f77656420746f206465616c000000006044820152606401610cdc565b60375460ff1615612ac9576038543a1115612ac95760405162461bcd60e51b815260206004820152601860248201527f4761732070726963652065786365656473206c696d69742e00000000000000006044820152606401610cdc565b612ad38484612e7d565b15612cf35760325460ff16612b2a5760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610cdc565b60395460ff1615612bdc576001600160a01b03841660009081526003602052604090205460ff1615612b9b576001600160a01b0383166000908152603a6020526040902054431415612b7b57600080fd5b6001600160a01b0383166000908152603a60205260409020439055612bdc565b6001600160a01b0384166000908152603a6020526040902054431415612bc057600080fd5b6001600160a01b0384166000908152603a602052604090204390555b602c54821115612c3f5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610cdc565b6028546001600160a01b03848116911614801590612c7657506001600160a01b03831660009081526003602052604090205460ff16155b15612cf357602e5482612c8885611e9f565b612c929190614314565b1115612cf35760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201526930b63632ba29b4bd329760b11b6064820152608401610cdc565b6032546301000000900460ff1615612d8257603b544311158015612d3057506001600160a01b03831660009081526003602052604090205460ff16155b8015612d5957506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b15612d82576001600160a01b0383166000908152600a60205260409020805460ff191660011790555b6001600160a01b03841660009081526006602052604090205460019060ff1680612dc457506001600160a01b03841660009081526006602052604090205460ff165b15612dcd575060005b6001600160a01b03841660009081526003602052604090205460ff1615612e4557602b54600160a01b900460ff16158015612e115750602b54600160a81b900460ff165b15612e45576000612e2130611e9f565b90506030548110612e43576031548110612e3a57506031545b612e4381612f3d565b505b612e5185858584613273565b95945050505050565b6000806000612e6761374c565b9092509050612e768183614300565b9250505090565b600080546001600160a01b03848116911614801590612eaa57506000546001600160a01b03838116911614155b8015612ecf57506001600160a01b0382166000908152600b602052604090205460ff16155b8015612ef457506001600160a01b0383166000908152600b602052604090205460ff16155b8015612f0e57506029546001600160a01b03838116911614155b8015612f2257506001600160a01b03821615155b80156112a357506001600160a01b0383163014159392505050565b602b805460ff60a01b1916600160a01b179055601f54601e54612f609190614314565b612f6957613263565b60006002601f54601e54612f7d9190614314565b601e54612f8a908561426d565b612f949190614300565b612f9e9190614300565b90506000612fac82846142a2565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612fe657612fe661428c565b6001600160a01b03928316602091820292909201810191909152602654604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561303a57600080fd5b505afa15801561304e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613072919061448d565b816001815181106130855761308561428c565b6001600160a01b03928316602091820292909201015260265460405163791ac94760e01b815291169063791ac947906130cb908590600090869030904290600401614513565b600060405180830381600087803b1580156130e557600080fd5b505af11580156130f9573d6000803e3d6000fd5b5050505060006002601f54601e546131119190614314565b601e5461311e904761426d565b6131289190614300565b6131329190614300565b905083156132115760265460295460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261317a9230928b926000928392169042906004016144aa565b6060604051808303818588803b15801561319357600080fd5b505af11580156131a7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131cc91906144e5565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b600061321d85876142a2565b111561325e57602b546040516001600160a01b03909116904780156108fc02916000818181858888f1935050505015801561325c573d6000803e3d6000fd5b505b505050505b50602b805460ff60a01b19169055565b603254600090610100900460ff161561345f576001600160a01b03851660009081526009602052604090205460ff16806132c557506001600160a01b03841660009081526009602052604090205460ff165b156132fe5760405162461bcd60e51b81526020600482015260096024820152682932b532b1ba32b21760b91b6044820152606401610cdc565b60325462010000900460ff166133965761331885856138cf565b60325462010000900460ff1615801561333657506133368585612e7d565b156133915760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610cdc565b61345f565b60006033541180156133c057506001600160a01b03851660009081526003602052604090205460ff165b80156133d157506133d18585612e7d565b1561345f576035546033546133e690436142a2565b101561345f576001600160a01b0384166000908152600960205260408120805460ff19166001179055603680549161341d836142cf565b90915550506040516001600160a01b03851681527f18e6e5ce5c121466e41a954e72765d1ea02b8e6919043b61f0dab08b4c6572e59060200160405180910390a15b600061346d868686866139ec565b60808101516001600160a01b038816600090815260016020526040902054919250613497916142a2565b6001600160a01b03808816600090815260016020526040808220939093556060840151918816815291909120546134ce9190614314565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff16801561352257506001600160a01b03851660009081526007602052604090205460ff16155b15613569576001600160a01b03861660009081526002602052604090205461354b9085906142a2565b6001600160a01b0387166000908152600260205260409020556136a9565b6001600160a01b03861660009081526007602052604090205460ff161580156135aa57506001600160a01b03851660009081526007602052604090205460ff165b156135f25780516001600160a01b0386166000908152600260205260409020546135d49190614314565b6001600160a01b0386166000908152600260205260409020556136a9565b6001600160a01b03861660009081526007602052604090205460ff16801561363257506001600160a01b03851660009081526007602052604090205460ff165b156136a9576001600160a01b03861660009081526002602052604090205461365b9085906142a2565b6001600160a01b038088166000908152600260205260408082209390935583519188168152919091205461368f9190614314565b6001600160a01b0386166000908152600260205260409020555b6040810151156136c1576136c1868260400151613bdc565b60008160a0015111806136d8575060008160200151115b156136ef576136ef8160a001518260200151613ca8565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161373891815260200190565b60405180910390a350600195945050505050565b6024546023546000918291825b60085481101561389e5782600160006008848154811061377b5761377b61428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806137e657508160026000600884815481106137bf576137bf61428c565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156137fc57602454602354945094505050509091565b60016000600883815481106138135761381361428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461384290846142a2565b9250600260006008838154811061385b5761385b61428c565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461388a90836142a2565b915080613896816142cf565b915050613759565b506023546024546138af9190614300565b8210156138c6576024546023549350935050509091565b90939092509050565b60325462010000900460ff16156139345760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201526232b21760e91b6064820152608401610cdc565b61393e8282612e7d565b15801561395857506027546001600160a01b038281169116145b15611080576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556032805462ff000019166201000017905542603455602b805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916139e091901515815260200190565b60405180910390a15050565b613a256040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b613a5e6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000613a68612e5a565b9050613a74818661426d565b60808301528315613b86576001600160a01b03861660009081526003602052604090205460ff1615613ab757601554600f55601654601055601754601155613b02565b6001600160a01b03871660009081526003602052604090205460ff1615613aef57601254600f55601354601055601454601155613b02565b601854600f55601954601055601a546011555b602054600f54613b12908761426d565b613b1c9190614300565b60208084019190915254601154601054613b369190614314565b613b40908761426d565b613b4a9190614300565b604083018190526020830151613b609190614314565b613b6a90866142a2565b82526020820151613b7c90829061426d565b60a0830152613b9f565b6000602083018190526040830181905285835260a08301525b808260400151613baf919061426d565b8260a00151613bbe9190614314565b8260800151613bcd91906142a2565b60608301525095945050505050565b6000613be6612e5a565b90506000613bf4828461426d565b30600090815260016020526040902054909150613c12908290614314565b3060009081526001602090815260408083209390935560079052205460ff1615613c625730600090815260026020526040902054613c51908490614314565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b81602454613cb691906142a2565b602455602554613cc7908290614314565b6025555050565b828054613cda906141e7565b90600052602060002090601f016020900481019282613cfc5760008555613d42565b82601f10613d1557805160ff1916838001178555613d42565b82800160010185558215613d42579182015b82811115613d42578251825591602001919060010190613d27565b50613d4e929150613d52565b5090565b5b80821115613d4e5760008155600101613d53565b600060208083528351808285015260005b81811015613d9457858101830151858201604001528201613d78565b81811115613da6576000604083870101525b50601f01601f1916929092016040019392505050565b600060208284031215613dce57600080fd5b5035919050565b6001600160a01b03811681146110e857600080fd5b60008060408385031215613dfd57600080fd5b8235613e0881613dd5565b946020939093013593505050565b80358015158114613e2657600080fd5b919050565b60008060408385031215613e3e57600080fd5b8235613e4981613dd5565b9150613e5760208401613e16565b90509250929050565b600080600060608486031215613e7557600080fd5b8335613e8081613dd5565b92506020840135613e9081613dd5565b929592945050506040919091013590565b60008060408385031215613eb457600080fd5b50508035926020909101359150565b600060208284031215613ed557600080fd5b81356112a381613dd5565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613f1f57613f1f613ee0565b604052919050565b60008060408385031215613f3a57600080fd5b823567ffffffffffffffff80821115613f5257600080fd5b818501915085601f830112613f6657600080fd5b8135602082821115613f7a57613f7a613ee0565b8160051b9250613f8b818401613ef6565b8281529284018101928181019089851115613fa557600080fd5b948201945b84861015613fcf5785359350613fbf84613dd5565b8382529482019490820190613faa565b9650613fde9050878201613e16565b9450505050509250929050565b600082601f830112613ffc57600080fd5b813567ffffffffffffffff81111561401657614016613ee0565b614029601f8201601f1916602001613ef6565b81815284602083860101111561403e57600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a0868803121561407357600080fd5b853561407e81613dd5565b9450602086013567ffffffffffffffff8082111561409b57600080fd5b6140a789838a01613feb565b955060408801359150808211156140bd57600080fd5b506140ca88828901613feb565b935050606086013560ff811681146140e157600080fd5b949793965091946080013592915050565b60008060006060848603121561410757600080fd5b505081359360208301359350604090920135919050565b60008060006060848603121561413357600080fd5b61413c84613e16565b925061414a60208501613e16565b915061415860408501613e16565b90509250925092565b60006020828403121561417357600080fd5b6112a382613e16565b6000806040838503121561418f57600080fd5b823561419a81613dd5565b915060208301356141aa81613dd5565b809150509250929050565b600080600080608085870312156141cb57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c908216806141fb57607f821691505b6020821081141561421c57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561428757614287614257565b500290565b634e487b7160e01b600052603260045260246000fd5b6000828210156142b4576142b4614257565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156142e3576142e3614257565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261430f5761430f6142ea565b500490565b6000821982111561432757614327614257565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b808511156143c45781600019048211156143aa576143aa614257565b808516156143b757918102915b93841c939080029061438e565b509250929050565b6000826143db57506001610d5b565b816143e857506000610d5b565b81600181146143fe576002811461440857614424565b6001915050610d5b565b60ff84111561441957614419614257565b50506001821b610d5b565b5060208310610133831016604e8410600b8410161715614447575081810a610d5b565b6144518383614389565b806000190482111561446557614465614257565b029392505050565b60006112a383836143cc565b600082614488576144886142ea565b500690565b60006020828403121561449f57600080fd5b81516112a381613dd5565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156144fa57600080fd5b8351925060208401519150604084015190509250925092565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156145635784516001600160a01b03168352938301939183019160010161453e565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212207b4b5b44528d6d56b4487e09520d868d56fff0084bade24c467dfdfce429004964736f6c63430008090033

Deployed Bytecode Sourcemap

8430:27631:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10472:64;;;;;;;;;;-1:-1:-1;10472:64:0;;;;-1:-1:-1;;;;;10472:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;10472:64:0;;;;;;;;17322:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10343:35::-;;;;;;;;;;-1:-1:-1;10343:35:0;;;;-1:-1:-1;;;;;10343:35:0;;;20753:167;;;;;;;;;;-1:-1:-1;20753:167:0;;;;;:::i;:::-;;:::i;:::-;;17998:161;;;;;;;;;;-1:-1:-1;17998:161:0;;;;;:::i;:::-;;:::i;:::-;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;17998:161:0;1699:187:1;18569:102:0;;;;;;;;;;-1:-1:-1;18569:102:0;;;;;:::i;:::-;;:::i;25603:87::-;;;;;;;;;;-1:-1:-1;25672:10:0;;25603:87;;;2037:25:1;;;2025:2;2010:18;25603:87:0;1891:177:1;24689:906:0;;;;;;;;;;-1:-1:-1;24689:906:0;;;;;:::i;:::-;;:::i;9256:30::-;;;;;;;;;;;;;;;;17075:83;;;;;;;;;;-1:-1:-1;17148:7:0;;17075:83;;35478:107;;;;;;;;;;;;;:::i;9334:34::-;;;;;;;;;;;;;;;;18295:266;;;;;;;;;;-1:-1:-1;18295:266:0;;;;;:::i;:::-;;:::i;23515:340::-;;;;;;;;;;-1:-1:-1;23515:340:0;;;;;:::i;:::-;;:::i;26030:250::-;;;;;;;;;;-1:-1:-1;26030:250:0;;;;;:::i;:::-;;:::i;17164:71::-;;;;;;;;;;-1:-1:-1;17223:9:0;;17164:71;;17223:9;;;;3414:36:1;;3402:2;3387:18;17164:71:0;3272:184:1;9997:36:0;;;;;;;;;;;;;;;;18679:215;;;;;;;;;;-1:-1:-1;18679:215:0;;;;;:::i;:::-;;:::i;23167:340::-;;;;;;;;;;-1:-1:-1;23167:340:0;;;;;:::i;:::-;;:::i;10385:21::-;;;;;;;;;;-1:-1:-1;10385:21:0;;;;-1:-1:-1;;;;;10385:21:0;;;9674:51;;;;;;;;;;;;;;;;10695:41;;;;;;;;;;-1:-1:-1;10695:41:0;;;;-1:-1:-1;;;10695:41:0;;;;;;10040:36;;;;;;;;;;;;;;;;15713:807;;;;;;;;;;-1:-1:-1;15713:807:0;;;;;:::i;:::-;;:::i;11047:36::-;;;;;;;;;;-1:-1:-1;11047:36:0;;;;;;;;;;;21441:197;;;;;;;;;;-1:-1:-1;21441:197:0;;;;;:::i;:::-;;:::i;20256:123::-;;;;;;;;;;-1:-1:-1;20256:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;20344:27:0;20320:4;20344:27;;;:18;:27;;;;;;;;;20256:123;13010:2063;;;;;;;;;;-1:-1:-1;13010:2063:0;;;;;:::i;:::-;;:::i;18167:120::-;;;;;;;;;;-1:-1:-1;18167:120:0;;;;;:::i;:::-;;:::i;22536:455::-;;;;;;;;;;-1:-1:-1;22536:455:0;;;;;:::i;:::-;;:::i;10543:64::-;;;;;;;;;;-1:-1:-1;10543:64:0;;;;-1:-1:-1;;;;;10543:64:0;;;24160:202;;;;;;;;;;-1:-1:-1;24160:202:0;;;;;:::i;:::-;;:::i;10784:28::-;;;;;;;;;;;;;;;;24549:132;;;;;;;;;;-1:-1:-1;24549:132:0;;;;;:::i;:::-;;:::i;22999:160::-;;;;;;;;;;-1:-1:-1;22999:160:0;;;;;:::i;:::-;;:::i;9293:34::-;;;;;;;;;;;;;;;;21646:435;;;;;;;;;;-1:-1:-1;21646:435:0;;;;;:::i;:::-;;:::i;9794:55::-;;;;;;;;;;;;;;;;21200:229;;;;;;;;;;-1:-1:-1;21200:229:0;;;;;:::i;:::-;;:::i;17617:198::-;;;;;;;;;;-1:-1:-1;17617:198:0;;;;;:::i;:::-;;:::i;16528:194::-;;;;;;;;;;;;;:::i;21077:115::-;;;;;;;;;;-1:-1:-1;21077:115:0;;;;;:::i;:::-;;:::i;19696:424::-;;;;;;;;;;-1:-1:-1;19696:424:0;;;;;:::i;:::-;;:::i;9578:38::-;;;;;;;;;;;;;;;;20128:120;;;;;;;;;;-1:-1:-1;20128:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;20220:20:0;20196:4;20220:20;;;:11;:20;;;;;;;;;20128:120;17399:71;;;;;;;;;;-1:-1:-1;17442:7:0;15691:6;-1:-1:-1;;;;;15691:6:0;17399:71;;20387:132;;;;;;;;;;-1:-1:-1;20387:132:0;;;;;:::i;:::-;-1:-1:-1;;;;;20480:31:0;20456:4;20480:31;;;:22;:31;;;;;;;;;20387:132;30628:397;;;;;;;;;;;;;:::i;17241:75::-;;;;;;;;;;;;;:::i;18902:225::-;;;;;;;;;;-1:-1:-1;18902:225:0;;;;;:::i;:::-;;:::i;17823:167::-;;;;;;;;;;-1:-1:-1;17823:167:0;;;;;:::i;:::-;;:::i;20527:218::-;;;;;;;;;;-1:-1:-1;20527:218:0;;;;;:::i;:::-;;:::i;9537:34::-;;;;;;;;;;;;;;;;24370:171;;;;;;;;;;-1:-1:-1;24370:171:0;;;;;:::i;:::-;;:::i;9481:47::-;;;;;;;;;;;;;;;;9623:38;;;;;;;;;;;;;;;;9377:43;;;;;;;;;;;;;;;;10434:29;;;;;;;;;;-1:-1:-1;10434:29:0;;;;-1:-1:-1;;;;;10434:29:0;;;9427:47;;;;;;;;;;;;;;;;17476:133;;;;;;;;;;-1:-1:-1;17476:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;17578:19:0;;;17560:7;17578:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;17476:133;11252:32;;;;;;;;;;;;;;;;22089:439;;;;;;;;;;-1:-1:-1;22089:439:0;;;;;:::i;:::-;;:::i;9732:55::-;;;;;;;;;;;;;;;;19135:553;;;;;;;;;;-1:-1:-1;19135:553:0;;;;;:::i;:::-;;:::i;20928:141::-;;;;;;;;;;-1:-1:-1;20928:141:0;;;;;:::i;:::-;;:::i;10858:30::-;;;;;;;;;;;;;;;;23863:289;;;;;;;;;;-1:-1:-1;23863:289:0;;;;;:::i;:::-;;:::i;17322:71::-;17361:13;17385:5;17378:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17322:71;:::o;20753:167::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;;;;;;;;;20837:2:::1;20830:3;:9;;20822:51;;;::::0;-1:-1:-1;;;20822:51:0;;9501:2:1;20822:51:0::1;::::0;::::1;9483:21:1::0;9540:2;9520:18;;;9513:30;9579:31;9559:18;;;9552:59;9628:18;;20822:51:0::1;9299:353:1::0;20822:51:0::1;20900:12;:3:::0;20906:6:::1;20900:12;:::i;:::-;20884:13;:28:::0;-1:-1:-1;20753:167:0:o;17998:161::-;18073:4;18090:39;416:10;18113:7;18122:6;18090:8;:39::i;:::-;-1:-1:-1;18147:4:0;17998:161;;;;;:::o;18569:102::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;18643:7:::1;:20:::0;18569:102::o;24689:906::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;24794:4:::1;24783:15:::0;::::1;;;24779:809;;;-1:-1:-1::0;;;;;24824:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24823:21;24815:62;;;::::0;-1:-1:-1;;;24815:62:0;;10164:2:1;24815:62:0::1;::::0;::::1;10146:21:1::0;10203:2;10183:18;;;10176:30;10242;10222:18;;;10215:58;10290:18;;24815:62:0::1;9962:352:1::0;24815:62:0::1;-1:-1:-1::0;;;;;24895:16:0;::::1;24914:1;24895:16:::0;;;:7:::1;:16;::::0;;;;;:20;24892:116:::1;;-1:-1:-1::0;;;;;24975:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24955:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24936:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24892:116:::1;-1:-1:-1::0;;;;;;25022:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;25022:27:0::1;25045:4;25022:27:::0;;::::1;::::0;;;25064:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;25064:23:0::1;::::0;;::::1;::::0;;24689:906::o;24779:809::-:1;25109:16:::0;25105:483:::1;;-1:-1:-1::0;;;;;25150:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;25142:61;;;::::0;-1:-1:-1;;;25142:61:0;;10521:2:1;25142:61:0::1;::::0;::::1;10503:21:1::0;10560:2;10540:18;;;10533:30;10599;10579:18;;;10572:58;10647:18;;25142:61:0::1;10319:352:1::0;25142:61:0::1;25223:9;25218:359;25242:9;:16:::0;25238:20;::::1;25218:359;;;25304:7;-1:-1:-1::0;;;;;25288:23:0::1;:9;25298:1;25288:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25288:12:0::1;:23;25284:278;;;25351:9;25361:16:::0;;:20:::1;::::0;25380:1:::1;::::0;25361:20:::1;:::i;:::-;25351:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;25336:9:::1;:12:::0;;-1:-1:-1;;;;;25351:31:0;;::::1;::::0;25346:1;;25336:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;25336:46:0::1;-1:-1:-1::0;;;;;25336:46:0;;::::1;;::::0;;25405:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;25448:11:::1;:20:::0;;;;:28;;-1:-1:-1;;25448:28:0::1;::::0;;25499:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25499:15:0;;;;;-1:-1:-1;;;;;;25499:15:0::1;::::0;;;;;25537:5:::1;;25284:278;25260:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25218:359;;;;25105:483;24689:906:::0;;:::o;35478:107::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;15664:7;15691:6;;35529:48:::1;::::0;-1:-1:-1;;;;;15691:6:0;;;;35555:21:::1;35529:48:::0;::::1;;;::::0;35555:21;;35529:48;15664:7;35529:48;35555:21;15691:6;35529:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;35478:107::o:0;18295:266::-;18393:4;18410:36;18420:6;18428:9;18439:6;18410:9;:36::i;:::-;-1:-1:-1;;;;;;18488:19:0;;;;;;:11;:19;;;;;;;;416:10;18488:33;;;;;;;;;18457:74;;18466:6;;18488:42;;18524:6;;18488:42;:::i;:::-;18457:8;:74::i;:::-;-1:-1:-1;18549:4:0;18295:266;;;;;:::o;23515:340::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;23605:13:::1;23643:7;23632;23622;;:17;;;;:::i;:::-;23621:29;;;;:::i;:::-;23605:45;;23689:4;23679:7;;:14;;;;:::i;:::-;23669:5;:25;;23661:88;;;::::0;-1:-1:-1;;;23661:88:0;;11669:2:1;23661:88:0::1;::::0;::::1;11651:21:1::0;11708:2;11688:18;;;11681:30;11747:34;11727:18;;;11720:62;-1:-1:-1;;;11798:18:1;;;11791:48;11856:19;;23661:88:0::1;11467:414:1::0;23661:88:0::1;23760:14;:22:::0;;;23812:14:::1;::::0;23840:7;;23812:24:::1;::::0;23829:7;;23812:24:::1;:::i;:::-;23811:36;;;;:::i;:::-;23793:15;:54:::0;-1:-1:-1;;;23515:340:0:o;26030:250::-;26096:7;26135;;26124;:18;;26116:73;;;;-1:-1:-1;;;26116:73:0;;12088:2:1;26116:73:0;;;12070:21:1;12127:2;12107:18;;;12100:30;12166:34;12146:18;;;12139:62;-1:-1:-1;;;12217:18:1;;;12210:40;12267:19;;26116:73:0;11886:406:1;26116:73:0;26200:19;26223:10;:8;:10::i;:::-;26200:33;-1:-1:-1;26251:21:0;26200:33;26251:7;:21;:::i;:::-;26244:28;26030:250;-1:-1:-1;;;26030:250:0:o;18679:215::-;416:10;18767:4;18816:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;18816:34:0;;;;;;;;;;18767:4;;18784:80;;18807:7;;18816:47;;18853:10;;18816:47;:::i;23167:340::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;23256:13:::1;23294:7;23283;23273;;:17;;;;:::i;:::-;23272:29;;;;:::i;:::-;23256:45;;23340:4;23330:7;;:14;;;;:::i;:::-;23320:5;:25;;23312:93;;;::::0;-1:-1:-1;;;23312:93:0;;12632:2:1;23312:93:0::1;::::0;::::1;12614:21:1::0;12671:2;12651:18;;;12644:30;12710:34;12690:18;;;12683:62;12781:25;12761:18;;;12754:53;12824:19;;23312:93:0::1;12430:419:1::0;23312:93:0::1;23416:12;:20:::0;;;23464:14:::1;::::0;23492:7;;23464:24:::1;::::0;23481:7;;23464:24:::1;:::i;:::-;23463:36;;;;:::i;:::-;23447:13;:52:::0;-1:-1:-1;;;23167:340:0:o;15713:807::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15794:22:0;::::1;15786:96;;;;-1:-1:-1::0;;;15786:96:0::1;;;;;;;:::i;:::-;15913:4;::::0;-1:-1:-1;;;;;15901:16:0;;::::1;15913:4:::0;::::1;15901:16;;15893:90;;;;-1:-1:-1::0;;;15893:90:0::1;;;;;;;:::i;:::-;16013:6;::::0;;15994:33:::1;::::0;-1:-1:-1;;;;;16013:6:0;;::::1;::::0;15994:18:::1;:33::i;:::-;16038:34;16057:8;16067:4;16038:18;:34::i;:::-;16083:37;16105:8;16115:4;16083:21;:37::i;:::-;16173:6;::::0;16145:16:::1;::::0;-1:-1:-1;;;;;16145:16:0;;::::1;16173:6:::0;::::1;16145:35;16141:90;;;16195:16;:36:::0;;-1:-1:-1;;;;;;16195:36:0::1;-1:-1:-1::0;;;;;16195:36:0;::::1;;::::0;;16141:90:::1;16294:6;::::0;16284:17:::1;::::0;-1:-1:-1;;;;;16294:6:0::1;16284:9;:17::i;:::-;16252:19;16264:6:::0;;-1:-1:-1;;;;;16264:6:0;;::::1;16252:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;16325:6;;16252:19;;16315:17:::1;::::0;16325:6:::1;16315:9;:17::i;:::-;:21;16312:99;;;16363:6;::::0;16353:46:::1;::::0;-1:-1:-1;;;;;16363:6:0::1;16371:8:::0;16381:17:::1;16363:6:::0;16381:9:::1;:17::i;:::-;16353:9;:46::i;:::-;;16312:99;16431:6;:17:::0;;-1:-1:-1;;;;;;16431:17:0::1;-1:-1:-1::0;;;;;16431:17:0;::::1;::::0;;::::1;::::0;;16464:38:::1;::::0;16431:17;;;;16464:38:::1;::::0;16431:6;16464:38:::1;15713:807:::0;:::o;21441:197::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;21539:6:::1;21534:97;21555:7;:14;21551:1;:18;21534:97;;;21612:7;21591:6;:18;21598:7;21606:1;21598:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21591:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21591:18:0;:28;;-1:-1:-1;;21591:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21571:3;::::1;::::0;::::1;:::i;:::-;;;;21534:97;;13010:2063:::0;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;13187:19:::1;::::0;::::1;;13186:20;13178:29;;;::::0;::::1;;13226:13;::::0;:18;:40;::::1;;;-1:-1:-1::0;13248:13:0::1;::::0;:18;13226:40:::1;:61;;;;-1:-1:-1::0;13271:16:0::1;::::0;;;::::1;;;13270:17;13226:61;13218:70;;;::::0;::::1;;13314:2;13307:3;:9;;13299:38;;;::::0;-1:-1:-1;;;13299:38:0;;13486:2:1;13299:38:0::1;::::0;::::1;13468:21:1::0;13525:2;13505:18;;;13498:30;-1:-1:-1;;;13544:18:1;;;13537:46;13600:18;;13299:38:0::1;13284:340:1::0;13299:38:0::1;13350:16;:40:::0;;-1:-1:-1;;;;;;13350:40:0::1;-1:-1:-1::0;;;;;13350:40:0;::::1;;::::0;;13403:18;;::::1;::::0;:5:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13432:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;13482:15:0::1;13465:14;:32:::0;13643:9:::1;:13:::0;;-1:-1:-1;;13643:13:0::1;13655:1;13643:13:::0;;::::1;::::0;;;13671:12:::1;:24:::0;13749:12:::1;::::0;13745:16:::1;::::0;:2:::1;:16;:::i;:::-;13727:14;;:35;;;;:::i;:::-;13717:7;:45:::0;;;13791:13:::1;::::0;-1:-1:-1;;13791:13:0::1;:::i;:::-;13784:21;::::0;-1:-1:-1;;13784:21:0::1;:::i;:::-;13773:7;:33:::0;13850:14:::1;::::0;13819:9:::1;:46:::0;;-1:-1:-1;;;;;;13819:46:0::1;-1:-1:-1::0;;;;;13850:14:0;;::::1;13819:46:::0;;::::1;::::0;;13903:19:::1;::::0;;-1:-1:-1;;;13903:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;13850:14;13903:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13885:49:0::1;;13935:9;;;;;;;;;-1:-1:-1::0;;;;;13935:9:0::1;-1:-1:-1::0;;;;;13935:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13885:82;::::0;-1:-1:-1;;;;;;13885:82:0::1;::::0;;;;;;-1:-1:-1;;;;;15606:15:1;;;13885:82:0::1;::::0;::::1;15588:34:1::0;13961:4:0::1;15638:18:1::0;;;15631:43;15523:18;;13885:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13876:6;:91:::0;;-1:-1:-1;;;;;;13876:91:0::1;-1:-1:-1::0;;;;;13876:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;13978:15:0;;;:7:::1;:15;::::0;;;;;;;:22;;-1:-1:-1;;13978:22:0::1;-1:-1:-1::0;13978:22:0::1;::::0;;14031:4:::1;14011:26:::0;;:11:::1;:26:::0;;;;;14046:9:::1;::::0;;;::::1;14011:46:::0;;;;;;-1:-1:-1;;14011:66:0;;13978:22:::1;14098::::0;::::1;:13;:22:::0;14147:12:::1;:3:::0;14153:6:::1;14147:12;:::i;:::-;14131:13;:28:::0;14186:7:::1;::::0;14204:6:::1;::::0;14186:14:::1;::::0;14196:4:::1;14186:14;:::i;:::-;14185:25;;;;:::i;:::-;14170:12;:40:::0;14238:14:::1;::::0;14262:6:::1;::::0;14238:20:::1;::::0;14255:3:::1;14238:20;:::i;:::-;14237:31;;;;:::i;:::-;14221:13;:47:::0;14297:7:::1;::::0;14313:4:::1;::::0;14297:12:::1;::::0;14307:2:::1;14297:12;:::i;:::-;14296:21;;;;:::i;:::-;14279:14;:38:::0;14347:14:::1;::::0;14370:4:::1;::::0;14347:19:::1;::::0;14364:2:::1;14347:19;:::i;:::-;14346:28;;;;:::i;:::-;14328:15;:46:::0;14402:7:::1;::::0;14417:5:::1;::::0;14402:11:::1;::::0;14412:1:::1;14402:11;:::i;:::-;14401:21;;;;:::i;:::-;14385:13;:37:::0;14447:7:::1;::::0;14462:4:::1;::::0;14447:11:::1;::::0;14457:1:::1;14447:11;:::i;:::-;14446:20;;;;:::i;:::-;14433:10;:33:::0;14487:14:::1;::::0;14479:42:::1;::::0;-1:-1:-1;;;;;14487:14:0::1;-1:-1:-1::0;;14479:7:0::1;:42::i;:::-;-1:-1:-1::0;14534:19:0::1;:26:::0;;-1:-1:-1;;14534:26:0::1;14556:4;14534:26:::0;;::::1;::::0;;;14590:7:::1;::::0;;14534:19:::1;14579:7;15664::::0;15691:6;-1:-1:-1;;;;;15691:6:0;;15626:79;14579:7:::1;-1:-1:-1::0;;;;;14571:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;14571:16:0;:26;14628:7:::1;15664::::0;15691:6;-1:-1:-1;;;;;15691:6:0;;15626:79;14628:7:::1;14622:4;::::0;14637:7:::1;::::0;14613:32:::1;::::0;2037:25:1;;;-1:-1:-1;;;;;14613:32:0;;::::1;::::0;14622:4;;::::1;::::0;14613:32:::1;::::0;2025:2:1;2010:18;14613:32:0::1;;;;;;;14690:9;::::0;14658:62:::1;::::0;14675:4:::1;::::0;-1:-1:-1;;;;;14690:9:0::1;-1:-1:-1::0;;14658:8:0::1;:62::i;:::-;14733:53;14743:7;15664::::0;15691:6;-1:-1:-1;;;;;15691:6:0;;15626:79;14743:7:::1;14760:4;14767:18;14777:7;15664::::0;15691:6;-1:-1:-1;;;;;15691:6:0;;15626:79;14733:53:::1;-1:-1:-1::0;14813:9:0::1;::::0;-1:-1:-1;;;;;14813:9:0::1;:25;14846:21;14891:4;14911:24;14891:4:::0;14911:9:::1;:24::i;:::-;14950:1;14967::::0;14984:7:::1;15664::::0;15691:6;-1:-1:-1;;;;;15691:6:0;;15626:79;14984:7:::1;15006:15;14813:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;15053:12:0::1;15043:7;:22:::0;-1:-1:-1;;;;;;13010:2063:0:o;18167:120::-;18220:4;18244:35;18252:7;-1:-1:-1;;18244:7:0;:35::i;22536:455::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;22666:13:::1;;22655:7;:24;;:73;;;;;22713:15;;22700:9;:28;;22655:73;:122;;;;;22762:15;;22749:9;:28;;22655:122;22647:149;;;::::0;::::1;;22850:4;22837:9:::0;22815:19:::1;22825:9:::0;22815:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22807:48;;;::::0;::::1;;22866:19;:29:::0;;;;22906:21:::1;:33:::0;22950:21:::1;:33:::0;22536:455::o;24160:202::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;24253:16:::1;::::0;-1:-1:-1;;;;;24253:29:0;;::::1;:16:::0;::::1;:29;;24245:61;;;::::0;-1:-1:-1;;;24245:61:0;;16810:2:1;24245:61:0::1;::::0;::::1;16792:21:1::0;16849:2;16829:18;;;16822:30;-1:-1:-1;;;16868:18:1;;;16861:49;16927:18;;24245:61:0::1;16608:343:1::0;24245:61:0::1;24317:16;:37:::0;;-1:-1:-1;;;;;;24317:37:0::1;-1:-1:-1::0;;;;;24317:37:0;;;::::1;::::0;;;::::1;::::0;;24160:202::o;24549:132::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24636:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:37;;-1:-1:-1;;24636:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24549:132::o;22999:160::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;23086:15:::1;:27:::0;;;;23124:15:::1;:27:::0;22999:160::o;21646:435::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;21771:13:::1;;21760:7;:24;;:73;;;;;21818:15;;21805:9;:28;;21760:73;:122;;;;;21867:15;;21854:9;:28;;21760:122;21752:149;;;::::0;::::1;;21955:4;21942:9:::0;21920:19:::1;21930:9:::0;21920:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;21912:48;;;::::0;::::1;;21971:14;:24:::0;;;;22006:16:::1;:28:::0;22045:16:::1;:28:::0;21646:435::o;21200:229::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;21314:6:::1;21309:113;21330:7;:14;21326:1;:18;21309:113;;;21403:7;21366:22;:34;21389:7;21397:1;21389:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;21366:34:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;21366:34:0;:44;;-1:-1:-1;;21366:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21346:3;::::1;::::0;::::1;:::i;:::-;;;;21309:113;;17617:198:::0;-1:-1:-1;;;;;17707:20:0;;17683:7;17707:20;;;:11;:20;;;;;;;;17703:49;;;-1:-1:-1;;;;;;17736:16:0;;;;;:7;:16;;;;;;;17617:198::o;17703:49::-;-1:-1:-1;;;;;17790:16:0;;;;;;:7;:16;;;;;;17770:37;;:19;:37::i;16528:194::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;16614:6:::1;::::0;;16595:33:::1;::::0;-1:-1:-1;;;;;16614:6:0;;::::1;::::0;16595:18:::1;:33::i;:::-;16656:1;16639:19:::0;;-1:-1:-1;;;;;;16639:19:0::1;::::0;;16674:40:::1;::::0;16656:1;;16674:40:::1;::::0;16656:1;;16674:40:::1;16528:194::o:0;21077:115::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21159:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:25;;-1:-1:-1;;21159:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21077:115::o;19696:424::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;19777:16;19773:340:::1;;-1:-1:-1::0;;;;;;19810:13:0::1;19826:5;19810:13:::0;;;:7:::1;:13;::::0;;;;:21;;-1:-1:-1;;19810:21:0::1;::::0;;24689:906::o;19773:340::-:1;19868:17;::::0;:22;19864:153:::1;;19957:7;19937:17;;19919:15;:35;;;;:::i;:::-;:45;19911:90;;;::::0;-1:-1:-1;;;19911:90:0;;17158:2:1;19911:90:0::1;::::0;::::1;17140:21:1::0;;;17177:18;;;17170:30;17236:34;17216:18;;;17209:62;17288:18;;19911:90:0::1;16956:356:1::0;19911:90:0::1;-1:-1:-1::0;;;;;20031:13:0;::::1;;::::0;;;:7:::1;:13;::::0;;;;:20;;-1:-1:-1;;20031:20:0::1;20047:4;20031:20;::::0;;20086:15:::1;20066:17;:35:::0;19696:424;;:::o;30628:397::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;30690:14:::1;::::0;::::1;;30689:15;30681:52;;;::::0;-1:-1:-1;;;30681:52:0;;17519:2:1;30681:52:0::1;::::0;::::1;17501:21:1::0;17558:2;17538:18;;;17531:30;17597:26;17577:18;;;17570:54;17641:18;;30681:52:0::1;17317:348:1::0;30681:52:0::1;30744:42;30774:4;30781;30744:21;:42::i;:::-;30819:6;::::0;30797:35:::1;::::0;-1:-1:-1;;;;;30819:6:0::1;::::0;30797:21:::1;:35::i;:::-;30863:1;30847:13;;:17;30843:143;;;30896:18;:12;30911:3;30896:18;:::i;:::-;30881:12;:33:::0;30843:143:::1;;;30962:12;30947;:27:::0;30843:143:::1;30996:14;:21:::0;;-1:-1:-1;;30996:21:0::1;31013:4;30996:21;::::0;;30628:397::o;17241:75::-;17282:13;17306:7;17299:14;;;;;:::i;18902:225::-;416:10;18995:4;19044:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19044:34:0;;;;;;;;;;18995:4;;19012:85;;19035:7;;19044:52;;19081:15;;19044:52;:::i;17823:167::-;17901:4;17918:42;416:10;17942:9;17953:6;17918:9;:42::i;20527:218::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;20636:16:::1;:28:::0;;;::::1;;;;-1:-1:-1::0;;20636:28:0;;::::1;::::0;;;::::1;::::0;;;20675:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;20675:24:0;;::::1;;::::0;;20710:15:::1;:27:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;20527:218::o;24370:171::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;24447:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;24447:32:0::1;-1:-1:-1::0;;;;24447:32:0;;::::1;;::::0;;24495:38:::1;::::0;::::1;::::0;::::1;::::0;24471:8;1864:14:1;1857:22;1839:41;;1827:2;1812:18;;1699:187;24495:38:0::1;;;;;;;;24370:171:::0;:::o;22089:439::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;22215:13:::1;;22204:7;:24;;:73;;;;;22262:15;;22249:9;:28;;22204:73;:122;;;;;22311:15;;22298:9;:28;;22204:122;22196:149;;;::::0;::::1;;22399:4;22386:9:::0;22364:19:::1;22374:9:::0;22364:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;22356:48;;;::::0;::::1;;22415:15;:25:::0;;;;22451:17:::1;:29:::0;22491:17:::1;:29:::0;22089:439::o;19135:553::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;19208:29:::1;19259:9;19208:61;;19280:16;19317:10;-1:-1:-1::0;;;;;19317:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19299:47:0::1;;19355:4;19362:10;-1:-1:-1::0;;;;;19362:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19299:81;::::0;-1:-1:-1;;;;;;19299:81:0::1;::::0;;;;;;-1:-1:-1;;;;;15606:15:1;;;19299:81:0::1;::::0;::::1;15588:34:1::0;15658:15;;15638:18;;;15631:43;15523:18;;19299:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19280:100:::0;-1:-1:-1;;;;;;19395:22:0;::::1;19391:207;;19461:10;-1:-1:-1::0;;;;;19461:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19443:50:0::1;;19502:4;19509:10;-1:-1:-1::0;;;;;19509:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19443:84;::::0;-1:-1:-1;;;;;;19443:84:0::1;::::0;;;;;;-1:-1:-1;;;;;15606:15:1;;;19443:84:0::1;::::0;::::1;15588:34:1::0;15658:15;;15638:18;;;15631:43;15523:18;;19443:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19434:6;:93:::0;;-1:-1:-1;;;;;;19434:93:0::1;-1:-1:-1::0;;;;;19434:93:0;;;::::1;::::0;;;::::1;::::0;;19391:207:::1;;;19569:6;:17:::0;;-1:-1:-1;;;;;;19569:17:0::1;-1:-1:-1::0;;;;;19569:17:0;::::1;;::::0;;19391:207:::1;19608:9;:22:::0;;-1:-1:-1;;;;;;19608:22:0::1;-1:-1:-1::0;;;;;19608:22:0;::::1;;::::0;;19641:39:::1;19658:4;19665:9:::0;-1:-1:-1;;19641:8:0::1;:39::i;20928:141::-:0;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21020:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:41;;-1:-1:-1;;21020:41:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20928:141::o;23863:289::-;12090:6;;-1:-1:-1;;;;;12090:6:0;416:10;12090:22;12082:67;;;;-1:-1:-1;;;12082:67:0;;;;;;;:::i;:::-;24063:16:::1;24043;24033:7;;:26;;;;:::i;:::-;24032:47;;;;:::i;:::-;24016:13;:63:::0;24104:7:::1;::::0;24131:13;;24104:23:::1;::::0;24114:13;;24104:23:::1;:::i;:::-;24103:41;;;;:::i;:::-;24090:10;:54:::0;-1:-1:-1;;;;23863:289:0:o;26292:342::-;-1:-1:-1;;;;;26387:20:0;;26379:69;;;;-1:-1:-1;;;26379:69:0;;17872:2:1;26379:69:0;;;17854:21:1;17911:2;17891:18;;;17884:30;17950:34;17930:18;;;17923:62;-1:-1:-1;;;18001:18:1;;;17994:34;18045:19;;26379:69:0;17670:400:1;26379:69:0;-1:-1:-1;;;;;26467:21:0;;26459:68;;;;-1:-1:-1;;;26459:68:0;;18277:2:1;26459:68:0;;;18259:21:1;18316:2;18296:18;;;18289:30;18355:34;18335:18;;;18328:62;-1:-1:-1;;;18406:18:1;;;18399:32;18448:19;;26459:68:0;18075:398:1;26459:68:0;-1:-1:-1;;;;;26540:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;26593:33;;2037:25:1;;;26593:33:0;;2010:18:1;26593:33:0;;;;;;;26292:342;;;:::o;26642:2237::-;26721:4;-1:-1:-1;;;;;26746:18:0;;26738:68;;;;-1:-1:-1;;;26738:68:0;;18680:2:1;26738:68:0;;;18662:21:1;18719:2;18699:18;;;18692:30;18758:34;18738:18;;;18731:62;-1:-1:-1;;;18809:18:1;;;18802:35;18854:19;;26738:68:0;18478:401:1;26738:68:0;-1:-1:-1;;;;;26825:16:0;;26817:64;;;;-1:-1:-1;;;26817:64:0;;19086:2:1;26817:64:0;;;19068:21:1;19125:2;19105:18;;;19098:30;19164:34;19144:18;;;19137:62;-1:-1:-1;;;19215:18:1;;;19208:33;19258:19;;26817:64:0;18884:399:1;26817:64:0;26909:1;26900:6;:10;26892:64;;;;-1:-1:-1;;;26892:64:0;;19490:2:1;26892:64:0;;;19472:21:1;19529:2;19509:18;;;19502:30;19568:34;19548:18;;;19541:62;-1:-1:-1;;;19619:18:1;;;19612:39;19668:19;;26892:64:0;19288:405:1;26892:64:0;-1:-1:-1;;;;;26976:10:0;;;;;;:6;:10;;;;;;;;26975:11;:28;;;;-1:-1:-1;;;;;;26991:12:0;;;;;;:6;:12;;;;;;;;26990:13;26975:28;26967:69;;;;-1:-1:-1;;;26967:69:0;;19900:2:1;26967:69:0;;;19882:21:1;19939:2;19919:18;;;19912:30;19978;19958:18;;;19951:58;20026:18;;26967:69:0;19698:352:1;26967:69:0;27051:14;;;;27047:112;;;27105:13;;27090:11;:28;;27082:65;;;;-1:-1:-1;;;27082:65:0;;20257:2:1;27082:65:0;;;20239:21:1;20296:2;20276:18;;;20269:30;20335:26;20315:18;;;20308:54;20379:18;;27082:65:0;20055:348:1;27082:65:0;27172:20;27183:4;27189:2;27172:10;:20::i;:::-;27169:776;;;27213:14;;;;27209:89;;27248:34;;-1:-1:-1;;;27248:34:0;;20610:2:1;27248:34:0;;;20592:21:1;20649:2;20629:18;;;20622:30;20688:26;20668:18;;;20661:54;20732:18;;27248:34:0;20408:348:1;27209:89:0;27316:15;;;;27312:347;;;-1:-1:-1;;;;;27356:13:0;;;;;;:7;:13;;;;;;;;27352:292;;;-1:-1:-1;;;;;27401:13:0;;;;;;:9;:13;;;;;;27418:12;27401:29;;27393:38;;;;;;-1:-1:-1;;;;;27454:13:0;;;;;;:9;:13;;;;;27470:12;27454:28;;27352:292;;;-1:-1:-1;;;;;27539:15:0;;;;;;:9;:15;;;;;;27558:12;27539:31;;27531:40;;;;;;-1:-1:-1;;;;;27594:15:0;;;;;;:9;:15;;;;;27612:12;27594:30;;27352:292;27691:12;;27681:6;:22;;27673:75;;;;-1:-1:-1;;;27673:75:0;;20963:2:1;27673:75:0;;;20945:21:1;21002:2;20982:18;;;20975:30;21041:34;21021:18;;;21014:62;-1:-1:-1;;;21092:18:1;;;21085:38;21140:19;;27673:75:0;20761:404:1;27673:75:0;27772:14;;-1:-1:-1;;;;;27766:20:0;;;27772:14;;27766:20;;;;:36;;-1:-1:-1;;;;;;27791:11:0;;;;;;:7;:11;;;;;;;;27790:12;27766:36;27763:171;;;27857:14;;27847:6;27831:13;27841:2;27831:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;27823:95;;;;-1:-1:-1;;;27823:95:0;;21372:2:1;27823:95:0;;;21354:21:1;21411:2;21391:18;;;21384:30;21450:34;21430:18;;;21423:62;-1:-1:-1;;;21501:18:1;;;21494:40;21551:19;;27823:95:0;21170:406:1;27823:95:0;27958:16;;;;;;;27955:249;;;28011:7;;27994:12;:25;;:59;;;;-1:-1:-1;;;;;;28042:11:0;;;;;;:7;:11;;;;;;;;28041:12;27994:59;:138;;;;-1:-1:-1;;;;;;28075:57:0;;28089:42;28075:57;;27994:138;27990:203;;;-1:-1:-1;;;;;28164:10:0;;;;;;:6;:10;;;;;:17;;-1:-1:-1;;28164:17:0;28177:4;28164:17;;;27990:203;-1:-1:-1;;;;;28247:24:0;;28214:12;28247:24;;;:18;:24;;;;;;28229:4;;28247:24;;;:50;;-1:-1:-1;;;;;;28275:22:0;;;;;;:18;:22;;;;;;;;28247:50;28244:96;;;-1:-1:-1;28323:5:0;28244:96;-1:-1:-1;;;;;28356:11:0;;;;;;:7;:11;;;;;;;;28352:457;;;28389:16;;-1:-1:-1;;;28389:16:0;;;;28388:17;:59;;;;-1:-1:-1;28426:21:0;;-1:-1:-1;;;28426:21:0;;;;28388:59;28384:408;;;28482:28;28513:24;28531:4;28513:9;:24::i;:::-;28482:55;;28584:13;;28560:20;:37;28556:221;;28649:10;;28625:20;:34;28622:77;;-1:-1:-1;28686:10:0;;28622:77;28721:36;28736:20;28721:14;:36::i;:::-;28463:329;28384:408;28827:44;28845:4;28851:2;28855:6;28863:7;28827:17;:44::i;:::-;28820:51;26642:2237;-1:-1:-1;;;;;26642:2237:0:o;34599:161::-;34641:7;34662:15;34679;34698:19;:17;:19::i;:::-;34661:56;;-1:-1:-1;34661:56:0;-1:-1:-1;34735:17:0;34661:56;;34735:17;:::i;:::-;34728:24;;;;34599:161;:::o;25698:324::-;25767:4;15691:6;;-1:-1:-1;;;;;25791:15:0;;;15691:6;;25791:15;;;;:45;;-1:-1:-1;15664:7:0;15691:6;-1:-1:-1;;;;;25823:13:0;;;15691:6;;25823:13;;25791:45;:84;;;;-1:-1:-1;;;;;;25854:21:0;;;;;;:17;:21;;;;;;;;25853:22;25791:84;:125;;;;-1:-1:-1;;;;;;25893:23:0;;;;;;:17;:23;;;;;;;;25892:24;25791:125;:152;;;;-1:-1:-1;25939:4:0;;-1:-1:-1;;;;;25933:10:0;;;25939:4;;25933:10;;25791:152;:185;;;;-1:-1:-1;;;;;;25960:16:0;;;;25791:185;:223;;;;-1:-1:-1;;;;;;25993:21:0;;26009:4;25993:21;;25784:230;25698:324;-1:-1:-1;;;25698:324:0:o;28887:1278::-;11964:16;:23;;-1:-1:-1;;;;11964:23:0;-1:-1:-1;;;11964:23:0;;;28995:15:::1;::::0;28977::::1;::::0;:33:::1;::::0;28995:15;28977:33:::1;:::i;:::-;28973:64;;29030:7;;28973:64;29047:17;29150:1;29130:15;;29112;;:33;;;;:::i;:::-;29092:15;::::0;29069:38:::1;::::0;:20;:38:::1;:::i;:::-;29068:78;;;;:::i;:::-;29067:84;;;;:::i;:::-;29047:104:::0;-1:-1:-1;29164:20:0::1;29187:32;29047:104:::0;29187:20;:32:::1;:::i;:::-;29256:16;::::0;;29270:1:::1;29256:16:::0;;;;;::::1;::::0;;29164:55;;-1:-1:-1;29232:21:0::1;::::0;29256:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;29256:16:0::1;29232:40;;29301:4;29283;29288:1;29283:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29283:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;29327:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;29327:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;29283:7;;29327:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29317:4;29322:1;29317:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29317:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;29356:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;29356:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;29431:12;;29356:9:::1;::::0;29474:4;;29501::::1;::::0;29521:15:::1;::::0;29356:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29562:24;29673:1;29653:15;;29635;;:33;;;;:::i;:::-;29615:15;::::0;29591:39:::1;::::0;:21:::1;:39;:::i;:::-;29590:79;;;;:::i;:::-;29589:85;;;;:::i;:::-;29562:112:::0;-1:-1:-1;29691:13:0;;29687:344:::1;;29721:9;::::0;29892:4:::1;::::0;29721:224:::1;::::0;-1:-1:-1;;;29721:224:0;;-1:-1:-1;;;;;29721:9:0;;::::1;::::0;:25:::1;::::0;29754:16;;29721:224:::1;::::0;29798:4:::1;::::0;29822:9;;29721::::1;::::0;;;29892:4:::1;::::0;29915:15:::1;::::0;29721:224:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;29965:54:0::1;::::0;;22768:25:1;;;22824:2;22809:18;;22802:34;;;22852:18;;;22845:34;;;29965:54:0::1;::::0;-1:-1:-1;22756:2:1;22741:18;29965:54:0::1;;;;;;;29687:344;30080:1;30045:32;30068:9:::0;30045:20;:32:::1;:::i;:::-;:36;30041:117;;;30098:16;::::0;:48:::1;::::0;-1:-1:-1;;;;;30098:16:0;;::::1;::::0;30124:21:::1;30098:48:::0;::::1;;;::::0;:16:::1;:48:::0;:16;:48;30124:21;30098:16;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30041:117;28962:1203;;;;11998:1;-1:-1:-1::0;12010:16:0;:24;;-1:-1:-1;;;;12010:24:0;;;28887:1278::o;31239:1880::-;31362:16;;31341:4;;31362:16;;;;;31358:851;;;-1:-1:-1;;;;;20480:31:0;;20456:4;20480:31;;;:22;:31;;;;;;;;31398:56;;;-1:-1:-1;;;;;;20480:31:0;;20456:4;20480:31;;;:22;:31;;;;;;;;31429:25;31394:116;;;31475:19;;-1:-1:-1;;;31475:19:0;;23092:2:1;31475:19:0;;;23074:21:1;23131:1;23111:18;;;23104:29;-1:-1:-1;;;23149:18:1;;;23142:39;23198:18;;31475:19:0;22890:332:1;31394:116:0;31531:16;;;;;;;31526:672;;31568:28;31587:4;31593:2;31568:18;:28::i;:::-;31620:16;;;;;;;31619:17;:41;;;;;31640:20;31651:4;31657:2;31640:10;:20::i;:::-;31615:137;;;31685:47;;-1:-1:-1;;;31685:47:0;;23429:2:1;31685:47:0;;;23411:21:1;23468:2;23448:18;;;23441:30;23507:34;23487:18;;;23480:62;-1:-1:-1;;;23558:18:1;;;23551:35;23603:19;;31685:47:0;23227:401:1;31615:137:0;31526:672;;;31811:1;31796:12;;:16;:55;;;;-1:-1:-1;;;;;;31838:13:0;;;;;;:7;:13;;;;;;;;31796:55;:101;;;;;31877:20;31888:4;31894:2;31877:10;:20::i;:::-;31792:391;;;31974:13;;31959:12;;31944:27;;:12;:27;:::i;:::-;:43;31940:224;;;-1:-1:-1;;;;;32016:26:0;;;;;;:22;:26;;;;;:33;;-1:-1:-1;;32016:33:0;32045:4;32016:33;;;32076:13;:16;;;;;;:::i;:::-;;;;-1:-1:-1;;32124:16:0;;-1:-1:-1;;;;;178:32:1;;160:51;;32124:16:0;;148:2:1;133:18;32124:16:0;;;;;;;31940:224;32221:25;32249:38;32260:4;32266:2;32270:7;32279;32249:10;:38::i;:::-;32332:14;;;;-1:-1:-1;;;;;32316:13:0;;;;;;:7;:13;;;;;;32221:66;;-1:-1:-1;32316:30:0;;;:::i;:::-;-1:-1:-1;;;;;32300:13:0;;;;;;;:7;:13;;;;;;:46;;;;32385:22;;;;32371:11;;;;;;;;;;:36;;32385:22;32371:36;:::i;:::-;-1:-1:-1;;;;;32357:11:0;;;;;;;:7;:11;;;;;;;;:50;;;;32424:17;;;;;:11;:17;;;;;;;:37;;;;-1:-1:-1;;;;;;32446:15:0;;;;;;:11;:15;;;;;;;;32445:16;32424:37;32420:416;;;-1:-1:-1;;;;;32494:13:0;;;;;;:7;:13;;;;;;:23;;32510:7;;32494:23;:::i;:::-;-1:-1:-1;;;;;32478:13:0;;;;;;:7;:13;;;;;:39;32420:416;;;-1:-1:-1;;;;;32540:17:0;;;;;;:11;:17;;;;;;;;32539:18;:37;;;;-1:-1:-1;;;;;;32561:15:0;;;;;;:11;:15;;;;;;;;32539:37;32535:301;;;32621:22;;-1:-1:-1;;;;;32607:11:0;;32621:22;32607:11;;;:7;:11;;;;;;:36;;32621:22;32607:36;:::i;:::-;-1:-1:-1;;;;;32593:11:0;;;;;;:7;:11;;;;;:50;32535:301;;;-1:-1:-1;;;;;32667:17:0;;;;;;:11;:17;;;;;;;;:36;;;;-1:-1:-1;;;;;;32688:15:0;;;;;;:11;:15;;;;;;;;32667:36;32663:173;;;-1:-1:-1;;;;;32736:13:0;;;;;;:7;:13;;;;;;:23;;32752:7;;32736:23;:::i;:::-;-1:-1:-1;;;;;32720:13:0;;;;;;;:7;:13;;;;;;:39;;;;32802:22;;32788:11;;;;;;;;;;:36;;32802:22;32788:36;:::i;:::-;-1:-1:-1;;;;;32774:11:0;;;;;;:7;:11;;;;;:50;32663:173;32852:17;;;;:21;32848:79;;32888:39;32903:4;32909:6;:17;;;32888:14;:39::i;:::-;32956:1;32942:6;:11;;;:15;:34;;;;32975:1;32961:6;:11;;;:15;32942:34;32938:91;;;32991:38;33004:6;:11;;;33017:6;:11;;;32991:12;:38::i;:::-;33062:2;-1:-1:-1;;;;;33047:42:0;33056:4;-1:-1:-1;;;;;33047:42:0;;33066:6;:22;;;33047:42;;;;2037:25:1;;2025:2;2010:18;;1891:177;33047:42:0;;;;;;;;-1:-1:-1;33107:4:0;;31239:1880;-1:-1:-1;;;;;31239:1880:0:o;34768:547::-;34866:7;;34902;;34819;;;;;34920:283;34944:9;:16;34940:20;;34920:283;;;35010:7;34986;:21;34994:9;35004:1;34994:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;34994:12:0;34986:21;;;;;;;;;;;;;:31;;:66;;;35045:7;35021;:21;35029:9;35039:1;35029:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35029:12:0;35021:21;;;;;;;;;;;;;:31;34986:66;34982:97;;;35062:7;;35071;;35054:25;;;;;;;34768:547;;:::o;34982:97::-;35114:7;:21;35122:9;35132:1;35122:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35122:12:0;35114:21;;;;;;;;;;;;;35104:31;;:7;:31;:::i;:::-;35094:41;;35170:7;:21;35178:9;35188:1;35178:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;35178:12:0;35170:21;;;;;;;;;;;;;35160:31;;:7;:31;:::i;:::-;35150:41;-1:-1:-1;34962:3:0;;;;:::i;:::-;;;;34920:283;;;;35237:7;;35227;;:17;;;;:::i;:::-;35217:7;:27;35213:58;;;35254:7;;35263;;35246:25;;;;;;34768:547;;:::o;35213:58::-;35290:7;;35299;;-1:-1:-1;34768:547:0;-1:-1:-1;34768:547:0:o;30181:439::-;30264:16;;;;;;;30263:17;30255:65;;;;-1:-1:-1;;;30255:65:0;;23835:2:1;30255:65:0;;;23817:21:1;23874:2;23854:18;;;23847:30;23913:34;23893:18;;;23886:62;-1:-1:-1;;;23964:18:1;;;23957:33;24007:19;;30255:65:0;23633:399:1;30255:65:0;30336:20;30347:4;30353:2;30336:10;:20::i;:::-;30335:21;:37;;;;-1:-1:-1;30366:6:0;;-1:-1:-1;;;;;30360:12:0;;;30366:6;;30360:12;30335:37;30331:282;;;-1:-1:-1;;;;;30389:23:0;;;;;;:17;:23;;;;;;;:30;;-1:-1:-1;;30389:30:0;30415:4;30389:30;;;;;;30434:16;:23;;-1:-1:-1;;30434:23:0;;;;;30487:15;30472:12;:30;30519:21;:28;;-1:-1:-1;;;;30519:28:0;-1:-1:-1;;;30519:28:0;;;30567:34;;;;;;1864:14:1;;1857:22;1839:41;;1827:2;1812:18;;1699:187;30567:34:0;;;;;;;;30181:439;;:::o;33127:1464::-;33222:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33222:18:0;33253:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33253:25:0;33289:19;33311:10;:8;:10::i;:::-;33289:32;-1:-1:-1;33351:21:0;33289:32;33351:7;:21;:::i;:::-;33334:14;;;:38;33385:1071;;;;-1:-1:-1;;;;;33416:11:0;;;;;;:7;:11;;;;;;;;33412:561;;;33462:15;;33448:11;:29;33512:17;;33496:13;:33;33564:17;;33548:13;:33;33412:561;;;-1:-1:-1;;;;;33607:13:0;;;;;;:7;:13;;;;;;;;33603:370;;;33655:14;;33641:11;:28;33704:16;;33688:13;:32;33755:16;;33739:13;:32;33603:370;;;33826:19;;33812:11;:33;33880:21;;33864:13;:37;33936:21;;33920:13;:37;33603:370;34029:16;;34014:11;;34004:21;;:7;:21;:::i;:::-;34003:42;;;;:::i;:::-;33989:11;;;;:56;;;;34126:16;34108:13;;34092;;:29;;34108:13;34092:29;:::i;:::-;34081:41;;:7;:41;:::i;:::-;34080:62;;;;:::i;:::-;34060:17;;;:82;;;34193:11;;;;:31;;34060:82;34193:31;:::i;:::-;34182:43;;:7;:43;:::i;:::-;34157:68;;34256:11;;;;:25;;34270:11;;34256:25;:::i;:::-;34242:11;;;:39;33385:1071;;;34328:1;34314:11;;;:15;;;34344:17;;;:21;;;34380:32;;;34429:11;;;:15;33385:1071;34546:11;34526:6;:17;;;:31;;;;:::i;:::-;34511:6;:11;;;:47;;;;:::i;:::-;34493:6;:14;;;:66;;;;:::i;:::-;34468:22;;;:91;-1:-1:-1;34468:22:0;33127:1464;-1:-1:-1;;;;;33127:1464:0:o;35597:461::-;35677:19;35700:10;:8;:10::i;:::-;35677:33;-1:-1:-1;35721:18:0;35742:24;35677:33;35742:10;:24;:::i;:::-;35818:4;35802:22;;;;:7;:22;;;;;;35721:45;;-1:-1:-1;35802:35:0;;35721:45;;35802:35;:::i;:::-;35793:4;35777:22;;;;:7;:22;;;;;;;;:60;;;;35851:11;:26;;;;;;35848:104;;;35933:4;35917:22;;;;:7;:22;;;;;;:35;;35942:10;;35917:35;:::i;:::-;35908:4;35892:22;;;;:7;:22;;;;;:60;35848:104;35968:43;;2037:25:1;;;35993:4:0;;-1:-1:-1;;;;;35968:43:0;;;;;2025:2:1;2010:18;35968:43:0;;;;;;;35666:392;;35597:461;;:::o;35327:143::-;35417:4;35407:7;;:14;;;;:::i;:::-;35397:7;:24;35445:10;;:17;;35458:4;;35445:17;:::i;:::-;35432:10;:30;-1:-1:-1;;35327:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:180::-;1117:6;1170:2;1158:9;1149:7;1145:23;1141:32;1138:52;;;1186:1;1183;1176:12;1138:52;-1:-1:-1;1209:23:1;;1058:180;-1:-1:-1;1058:180:1:o;1243:131::-;-1:-1:-1;;;;;1318:31:1;;1308:42;;1298:70;;1364:1;1361;1354:12;1379:315;1447:6;1455;1508:2;1496:9;1487:7;1483:23;1479:32;1476:52;;;1524:1;1521;1514:12;1476:52;1563:9;1550:23;1582:31;1607:5;1582:31;:::i;:::-;1632:5;1684:2;1669:18;;;;1656:32;;-1:-1:-1;;;1379:315:1:o;2073:160::-;2138:20;;2194:13;;2187:21;2177:32;;2167:60;;2223:1;2220;2213:12;2167:60;2073:160;;;:::o;2238:315::-;2303:6;2311;2364:2;2352:9;2343:7;2339:23;2335:32;2332:52;;;2380:1;2377;2370:12;2332:52;2419:9;2406:23;2438:31;2463:5;2438:31;:::i;:::-;2488:5;-1:-1:-1;2512:35:1;2543:2;2528:18;;2512:35;:::i;:::-;2502:45;;2238:315;;;;;:::o;2558:456::-;2635:6;2643;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2885:2:1;2870:18;;2857:32;2898:33;2857:32;2898:33;:::i;:::-;2558:456;;2950:7;;-1:-1:-1;;;3004:2:1;2989:18;;;;2976:32;;2558:456::o;3019:248::-;3087:6;3095;3148:2;3136:9;3127:7;3123:23;3119:32;3116:52;;;3164:1;3161;3154:12;3116:52;-1:-1:-1;;3187:23:1;;;3257:2;3242:18;;;3229:32;;-1:-1:-1;3019:248:1:o;3461:247::-;3520:6;3573:2;3561:9;3552:7;3548:23;3544:32;3541:52;;;3589:1;3586;3579:12;3541:52;3628:9;3615:23;3647:31;3672:5;3647:31;:::i;3713:127::-;3774:10;3769:3;3765:20;3762:1;3755:31;3805:4;3802:1;3795:15;3829:4;3826:1;3819:15;3845:275;3916:2;3910:9;3981:2;3962:13;;-1:-1:-1;;3958:27:1;3946:40;;4016:18;4001:34;;4037:22;;;3998:62;3995:88;;;4063:18;;:::i;:::-;4099:2;4092:22;3845:275;;-1:-1:-1;3845:275:1:o;4125:1091::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:52;;;4292:1;4289;4282:12;4244:52;4332:9;4319:23;4361:18;4402:2;4394:6;4391:14;4388:34;;;4418:1;4415;4408:12;4388:34;4456:6;4445:9;4441:22;4431:32;;4501:7;4494:4;4490:2;4486:13;4482:27;4472:55;;4523:1;4520;4513:12;4472:55;4559:2;4546:16;4581:4;4604:2;4600;4597:10;4594:36;;;4610:18;;:::i;:::-;4656:2;4653:1;4649:10;4639:20;;4679:28;4703:2;4699;4695:11;4679:28;:::i;:::-;4741:15;;;4811:11;;;4807:20;;;4772:12;;;;4839:19;;;4836:39;;;4871:1;4868;4861:12;4836:39;4895:11;;;;4915:217;4931:6;4926:3;4923:15;4915:217;;;5011:3;4998:17;4985:30;;5028:31;5053:5;5028:31;:::i;:::-;5072:18;;;4948:12;;;;5110;;;;4915:217;;;5151:5;-1:-1:-1;5175:35:1;;-1:-1:-1;5191:18:1;;;5175:35;:::i;:::-;5165:45;;;;;;4125:1091;;;;;:::o;5221:531::-;5264:5;5317:3;5310:4;5302:6;5298:17;5294:27;5284:55;;5335:1;5332;5325:12;5284:55;5371:6;5358:20;5397:18;5393:2;5390:26;5387:52;;;5419:18;;:::i;:::-;5463:55;5506:2;5487:13;;-1:-1:-1;;5483:27:1;5512:4;5479:38;5463:55;:::i;:::-;5543:2;5534:7;5527:19;5589:3;5582:4;5577:2;5569:6;5565:15;5561:26;5558:35;5555:55;;;5606:1;5603;5596:12;5555:55;5671:2;5664:4;5656:6;5652:17;5645:4;5636:7;5632:18;5619:55;5719:1;5694:16;;;5712:4;5690:27;5683:38;;;;5698:7;5221:531;-1:-1:-1;;;5221:531:1:o;5757:921::-;5878:6;5886;5894;5902;5910;5963:3;5951:9;5942:7;5938:23;5934:33;5931:53;;;5980:1;5977;5970:12;5931:53;6019:9;6006:23;6038:31;6063:5;6038:31;:::i;:::-;6088:5;-1:-1:-1;6144:2:1;6129:18;;6116:32;6167:18;6197:14;;;6194:34;;;6224:1;6221;6214:12;6194:34;6247:50;6289:7;6280:6;6269:9;6265:22;6247:50;:::i;:::-;6237:60;;6350:2;6339:9;6335:18;6322:32;6306:48;;6379:2;6369:8;6366:16;6363:36;;;6395:1;6392;6385:12;6363:36;;6418:52;6462:7;6451:8;6440:9;6436:24;6418:52;:::i;:::-;6408:62;;;6522:2;6511:9;6507:18;6494:32;6570:4;6561:7;6557:18;6548:7;6545:31;6535:59;;6590:1;6587;6580:12;6535:59;5757:921;;;;-1:-1:-1;5757:921:1;;6667:3;6652:19;6639:33;;5757:921;-1:-1:-1;;5757:921:1:o;6683:316::-;6760:6;6768;6776;6829:2;6817:9;6808:7;6804:23;6800:32;6797:52;;;6845:1;6842;6835:12;6797:52;-1:-1:-1;;6868:23:1;;;6938:2;6923:18;;6910:32;;-1:-1:-1;6989:2:1;6974:18;;;6961:32;;6683:316;-1:-1:-1;6683:316:1:o;7264:::-;7332:6;7340;7348;7401:2;7389:9;7380:7;7376:23;7372:32;7369:52;;;7417:1;7414;7407:12;7369:52;7440:26;7456:9;7440:26;:::i;:::-;7430:36;;7485:35;7516:2;7505:9;7501:18;7485:35;:::i;:::-;7475:45;;7539:35;7570:2;7559:9;7555:18;7539:35;:::i;:::-;7529:45;;7264:316;;;;;:::o;7585:180::-;7641:6;7694:2;7682:9;7673:7;7669:23;7665:32;7662:52;;;7710:1;7707;7700:12;7662:52;7733:26;7749:9;7733:26;:::i;7770:388::-;7838:6;7846;7899:2;7887:9;7878:7;7874:23;7870:32;7867:52;;;7915:1;7912;7905:12;7867:52;7954:9;7941:23;7973:31;7998:5;7973:31;:::i;:::-;8023:5;-1:-1:-1;8080:2:1;8065:18;;8052:32;8093:33;8052:32;8093:33;:::i;:::-;8145:7;8135:17;;;7770:388;;;;;:::o;8163:385::-;8249:6;8257;8265;8273;8326:3;8314:9;8305:7;8301:23;8297:33;8294:53;;;8343:1;8340;8333:12;8294:53;-1:-1:-1;;8366:23:1;;;8436:2;8421:18;;8408:32;;-1:-1:-1;8487:2:1;8472:18;;8459:32;;8538:2;8523:18;8510:32;;-1:-1:-1;8163:385:1;-1:-1:-1;8163:385:1:o;8553:380::-;8632:1;8628:12;;;;8675;;;8696:61;;8750:4;8742:6;8738:17;8728:27;;8696:61;8803:2;8795:6;8792:14;8772:18;8769:38;8766:161;;;8849:10;8844:3;8840:20;8837:1;8830:31;8884:4;8881:1;8874:15;8912:4;8909:1;8902:15;8766:161;;8553:380;;;:::o;8938:356::-;9140:2;9122:21;;;9159:18;;;9152:30;9218:34;9213:2;9198:18;;9191:62;9285:2;9270:18;;8938:356::o;9657:127::-;9718:10;9713:3;9709:20;9706:1;9699:31;9749:4;9746:1;9739:15;9773:4;9770:1;9763:15;9789:168;9829:7;9895:1;9891;9887:6;9883:14;9880:1;9877:21;9872:1;9865:9;9858:17;9854:45;9851:71;;;9902:18;;:::i;:::-;-1:-1:-1;9942:9:1;;9789:168::o;10676:127::-;10737:10;10732:3;10728:20;10725:1;10718:31;10768:4;10765:1;10758:15;10792:4;10789:1;10782:15;10808:125;10848:4;10876:1;10873;10870:8;10867:34;;;10881:18;;:::i;:::-;-1:-1:-1;10918:9:1;;10808:125::o;10938:127::-;10999:10;10994:3;10990:20;10987:1;10980:31;11030:4;11027:1;11020:15;11054:4;11051:1;11044:15;11070:135;11109:3;-1:-1:-1;;11130:17:1;;11127:43;;;11150:18;;:::i;:::-;-1:-1:-1;11197:1:1;11186:13;;11070:135::o;11210:127::-;11271:10;11266:3;11262:20;11259:1;11252:31;11302:4;11299:1;11292:15;11326:4;11323:1;11316:15;11342:120;11382:1;11408;11398:35;;11413:18;;:::i;:::-;-1:-1:-1;11447:9:1;;11342:120::o;12297:128::-;12337:3;12368:1;12364:6;12361:1;12358:13;12355:39;;;12374:18;;:::i;:::-;-1:-1:-1;12410:9:1;;12297:128::o;12854:425::-;13056:2;13038:21;;;13095:2;13075:18;;;13068:30;13134:34;13129:2;13114:18;;13107:62;13205:31;13200:2;13185:18;;13178:59;13269:3;13254:19;;12854:425::o;13629:422::-;13718:1;13761:5;13718:1;13775:270;13796:7;13786:8;13783:21;13775:270;;;13855:4;13851:1;13847:6;13843:17;13837:4;13834:27;13831:53;;;13864:18;;:::i;:::-;13914:7;13904:8;13900:22;13897:55;;;13934:16;;;;13897:55;14013:22;;;;13973:15;;;;13775:270;;;13779:3;13629:422;;;;;:::o;14056:806::-;14105:5;14135:8;14125:80;;-1:-1:-1;14176:1:1;14190:5;;14125:80;14224:4;14214:76;;-1:-1:-1;14261:1:1;14275:5;;14214:76;14306:4;14324:1;14319:59;;;;14392:1;14387:130;;;;14299:218;;14319:59;14349:1;14340:10;;14363:5;;;14387:130;14424:3;14414:8;14411:17;14408:43;;;14431:18;;:::i;:::-;-1:-1:-1;;14487:1:1;14473:16;;14502:5;;14299:218;;14601:2;14591:8;14588:16;14582:3;14576:4;14573:13;14569:36;14563:2;14553:8;14550:16;14545:2;14539:4;14536:12;14532:35;14529:77;14526:159;;;-1:-1:-1;14638:19:1;;;14670:5;;14526:159;14717:34;14742:8;14736:4;14717:34;:::i;:::-;14787:6;14783:1;14779:6;14775:19;14766:7;14763:32;14760:58;;;14798:18;;:::i;:::-;14836:20;;14056:806;-1:-1:-1;;;14056:806:1:o;14867:131::-;14927:5;14956:36;14983:8;14977:4;14956:36;:::i;15003:112::-;15035:1;15061;15051:35;;15066:18;;:::i;:::-;-1:-1:-1;15100:9:1;;15003:112::o;15120:251::-;15190:6;15243:2;15231:9;15222:7;15218:23;15214:32;15211:52;;;15259:1;15256;15249:12;15211:52;15291:9;15285:16;15310:31;15335:5;15310:31;:::i;15685:607::-;-1:-1:-1;;;;;16044:15:1;;;16026:34;;16091:2;16076:18;;16069:34;;;;16134:2;16119:18;;16112:34;;;;16177:2;16162:18;;16155:34;;;;16226:15;;;16220:3;16205:19;;16198:44;16006:3;16258:19;;16251:35;;;;15975:3;15960:19;;15685:607::o;16297:306::-;16385:6;16393;16401;16454:2;16442:9;16433:7;16429:23;16425:32;16422:52;;;16470:1;16467;16460:12;16422:52;16499:9;16493:16;16483:26;;16549:2;16538:9;16534:18;16528:25;16518:35;;16593:2;16582:9;16578:18;16572:25;16562:35;;16297:306;;;;;:::o;21581:980::-;21843:4;21891:3;21880:9;21876:19;21922:6;21911:9;21904:25;21948:2;21986:6;21981:2;21970:9;21966:18;21959:34;22029:3;22024:2;22013:9;22009:18;22002:31;22053:6;22088;22082:13;22119:6;22111;22104:22;22157:3;22146:9;22142:19;22135:26;;22196:2;22188:6;22184:15;22170:29;;22217:1;22227:195;22241:6;22238:1;22235:13;22227:195;;;22306:13;;-1:-1:-1;;;;;22302:39:1;22290:52;;22397:15;;;;22362:12;;;;22338:1;22256:9;22227:195;;;-1:-1:-1;;;;;;;22478:32:1;;;;22473:2;22458:18;;22451:60;-1:-1:-1;;;22542:3:1;22527:19;22520:35;22439:3;21581:980;-1:-1:-1;;;21581:980:1:o

Swarm Source

ipfs://7b4b5b44528d6d56b4487e09520d868d56fff0084bade24c467dfdfce4290049
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.