ETH Price: $2,703.99 (-0.70%)

Token

Benjamin Inu (Ben Inu)
 

Overview

Max Total Supply

1,000,000,000,000 Ben Inu

Holders

62

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: Ben Inu
Balance
0.000009482 Ben Inu

Value
$0.00
0xa0bff8574a1b26d7456da0e9089213737c8ebc35
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:
BenjaminInu

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 5000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

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

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the token decimals.
   */
  function decimals() external view returns (uint8);

  /**
   * @dev Returns the token symbol.
   */
  function symbol() external view returns (string memory);

  /**
  * @dev Returns the token name.
  */
  function name() external view returns (string memory);

  /**
   * @dev Returns the bep token owner.
   */
  function getOwner() external view returns (address);

  /**
   * @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/issues/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);
}

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

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

interface IRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IRouter02 is IRouter01 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
}

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

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

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

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedFromLimits;
    mapping (address => bool) private _liquidityHolders;

    uint256 private startingSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    uint256 private _tTotal;

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

    struct Ratios {
        uint16 marketing;
        uint16 team;
        uint16 total;
    }

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

    Ratios public _ratios = Ratios({
        marketing: 7,
        team: 3,
        total: 10
        });

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

    IRouter02 public dexRouter;
    address public lpPair;

    address constant public DEAD = 0x000000000000000000000000000000000000dEaD;

    struct TaxWallets {
        address payable marketing;
        address payable team;
    }

    TaxWallets public _taxWallets = TaxWallets({
        marketing: payable(0x97983D002E1D6d48CD37a6cb0Bc8cBC36C85f408),
        team: payable(0x97983D002E1D6d48CD37a6cb0Bc8cBC36C85f408)
        });
    
    bool inSwap;
    bool public contractSwapEnabled = false;
    uint256 public contractSwapTimer = 30 seconds;
    uint256 private lastSwap;
    uint256 public swapThreshold;
    uint256 public swapAmount;
    
    uint256 private _maxTxAmount;
    uint256 private _maxWalletSize;

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

    bool private contractInitialized = false;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event ContractSwapEnabledUpdated(bool enabled);
    event AutoLiquify(uint256 amountCurrency, uint256 amountTokens);
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Caller =/= owner.");
        _;
    }
    
    constructor () payable {
        // Set the owner.
        _owner = msg.sender;

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

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _liquidityHolders[owner()] = true;
    }

    function intializeContract(address _antiSnipe) external onlyOwner {
        require(!contractInitialized, "1");
        antiSnipe = AntiSnipe(_antiSnipe);
        try antiSnipe.transfer(address(this)) {} catch {}
        try antiSnipe.getInitializers() returns (string memory initName, string memory initSymbol, uint256 initStartingSupply, uint8 initDecimals) {
            _name = initName;
            _symbol = initSymbol;
            startingSupply = initStartingSupply;
            _decimals = initDecimals;
            _tTotal = startingSupply * (10**_decimals);
        } catch {
            revert("3");
        }
        lpPair = IFactoryV2(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPairs[lpPair] = true;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 10) / 10000;
        _maxTxAmount = (_tTotal * 5) / 1000;
        _maxWalletSize = (_tTotal * 2) / 100;
        contractInitialized = true;     
        _tOwned[owner()] = _tTotal;
        emit Transfer(address(0), 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, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );

        enableTrading();
    }

    receive() external payable {}

//===============================================================================================================
//===============================================================================================================
//===============================================================================================================
    // Ownable removed as a lib and added here to allow for custom transfers and renouncements.
    // This allows for removal of ownership privileges from the owner once renounced or transferred.
    function 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.");
        setExcludedFromFees(_owner, false);
        setExcludedFromFees(newOwner, true);
        
        if(balanceOf(_owner) > 0) {
            _transfer(_owner, newOwner, balanceOf(_owner));
        }
        
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
        
    }

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

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

    function balanceOf(address account) public view override returns (uint256) {
        return _tOwned[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 _approve(address sender, address spender, uint256 amount) private {
        require(sender != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

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

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

        return _transfer(sender, recipient, amount);
    }

    function 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) public onlyOwner() {
        IRouter02 _newRouter = IRouter02(newRouter);
        address get_pair = IFactoryV2(_newRouter.factory()).getPair(address(this), _newRouter.WETH());
        if (get_pair == address(0)) {
            lpPair = IFactoryV2(_newRouter.factory()).createPair(address(this), _newRouter.WETH());
        }
        else {
            lpPair = get_pair;
        }
        dexRouter = _newRouter;
        _approve(address(this), address(dexRouter), type(uint256).max);
    }

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

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

    function setBlacklistEnabledMultiple(address[] memory accounts, bool enabled) external onlyOwner {
        antiSnipe.setBlacklistEnabledMultiple(accounts, enabled);
    }

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

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

    function getSniperAmt() public view returns (uint256) {
        return antiSnipe.getSniperAmt();
    }

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

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

    function setGasPriceLimit(uint256 gas) external onlyOwner {
        require(gas >= 75, "Too low.");
        antiSnipe.setGasPriceLimit(gas);
    }

    function setTaxes(uint16 buyFee, uint16 sellFee, uint16 transferFee) external onlyOwner {
        require(buyFee <= maxBuyTaxes
                && sellFee <= maxSellTaxes
                && transferFee <= maxTransferTaxes,
                "Cannot exceed maximums.");
        _taxRates.buyFee = buyFee;
        _taxRates.sellFee = sellFee;
        _taxRates.transferFee = transferFee;
    }
    
    function setRatios(uint16 team, uint16 marketing) external onlyOwner {
        _ratios.team = team;
        _ratios.marketing = marketing;
        _ratios.total = team + marketing;
    }

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

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

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

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

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

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

    function getMaxTX() public view returns (uint256) {
        return _maxTxAmount / (10**_decimals);
    }

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

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

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

    function setContractSwapEnabled(bool _enabled) public onlyOwner {
        contractSwapEnabled = _enabled;
        emit ContractSwapEnabledUpdated(_enabled);
    }

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

    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");
        if(_hasLimits(from, to)) {
            if(!tradingEnabled) {
                revert("Trading not yet enabled!");
            }
            if(lpPairs[from] || lpPairs[to]){
                if (!_isExcludedFromLimits[from] && !_isExcludedFromLimits[to]) {
                    require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                }
            }
            if(to != address(dexRouter) && !lpPairs[to]) {
                if (!_isExcludedFromLimits[to]) {
                    require(balanceOf(to) + amount <= _maxWalletSize, "Transfer amount exceeds the maxWalletSize.");
                }
            }
        }

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

        if (lpPairs[to]) {
            if (!inSwap
                && contractSwapEnabled
            ) {
                if (lastSwap + contractSwapTimer < block.timestamp) {
                    uint256 contractTokenBalance = balanceOf(address(this));
                    if (contractTokenBalance >= swapThreshold) {
                        if(contractTokenBalance >= swapAmount) { contractTokenBalance = swapAmount; }
                        contractSwap(contractTokenBalance);
                        lastSwap = block.timestamp;
                    }
                }
            }      
        } 
        return _finalizeTransfer(from, to, amount, takeFee);
    }

    function contractSwap(uint256 contractTokenBalance) private lockTheSwap {
        Ratios memory ratios = _ratios;
        if (ratios.total == 0) {
            return;
        }

        if(_allowances[address(this)][address(dexRouter)] != type(uint256).max) {
            _allowances[address(this)][address(dexRouter)] = type(uint256).max;
        }

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

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

        uint256 amtBalance = address(this).balance;
        uint256 teamBalance = (amtBalance * ratios.team) / ratios.total;
        uint256 marketingBalance = amtBalance - teamBalance;
        if (ratios.team > 0) {
            _taxWallets.team.transfer(teamBalance);
        }
        if (ratios.marketing > 0) {
            _taxWallets.marketing.transfer(marketingBalance);
        }
    }

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

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

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

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

    function multiSendPercents(address[] memory accounts, uint256[] memory percents, uint256[] memory divisors) external {
        require(accounts.length == percents.length && percents.length == divisors.length, "Lengths do not match.");
        for (uint8 i = 0; i < accounts.length; i++) {
            require(balanceOf(msg.sender) >= (_tTotal * percents[i]) / divisors[i]);
            _transfer(msg.sender, accounts[i], (_tTotal * percents[i]) / divisors[i]);
        }
    }

    function _finalizeTransfer(address from, address to, uint256 amount, bool takeFee) private returns (bool) {
        if (!_hasLiqBeenAdded) {
            _checkLiquidityAdd(from, to);
            if (!_hasLiqBeenAdded && _hasLimits(from, to)) {
                revert("Only owner can transfer at this time.");
            }
        }

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

            if(!checked) {
                revert();
            }
        }

        _tOwned[from] -= amount;
        uint256 amountReceived = (takeFee) ? takeTaxes(from, to, amount) : amount;
        _tOwned[to] += amountReceived;

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

    function takeTaxes(address from, address to, uint256 amount) internal returns (uint256) {
        uint256 currentFee;
        if (lpPairs[from]) {
            currentFee = _taxRates.buyFee;
        } else if (lpPairs[to]) {
            currentFee = _taxRates.sellFee;
        } else {
            currentFee = _taxRates.transferFee;
        }

        uint256 feeAmount = amount * currentFee / masterTaxDivisor;

        _tOwned[address(this)] += feeAmount;
        emit Transfer(from, address(this), feeAmount);

        return amount - feeAmount;
    }
}

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":"amountCurrency","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"ContractSwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_hasLiqBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_ratios","outputs":[{"internalType":"uint16","name":"marketing","type":"uint16"},{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"total","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxRates","outputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxWallets","outputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveContractContingency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSwapTimer","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 IRouter02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMaxTX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSniperAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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","name":"_antiSnipe","type":"address"}],"name":"intializeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"percents","type":"uint256[]"},{"internalType":"uint256[]","name":"divisors","type":"uint256[]"}],"name":"multiSendPercents","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"multiSendTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlacklistEnabledMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setContractSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"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"},{"internalType":"bool","name":"_algo","type":"bool"}],"name":"setProtectionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"team","type":"uint16"},{"internalType":"uint16","name":"marketing","type":"uint16"}],"name":"setRatios","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"},{"internalType":"uint256","name":"time","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"buyFee","type":"uint16"},{"internalType":"uint16","name":"sellFee","type":"uint16"},{"internalType":"uint16","name":"transferFee","type":"uint16"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"team","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sweepContingency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600060038181556103e8608081905260a081905260c052600d805465ffffffffffff199081166503e803e803e817909155600760e05261010091909152600a61012052600e8054909116640a000300071790556101806040527397983d002e1d6d48cd37a6cb0bc8cbc36c85f408610140819052610160819052601180546001600160a01b031990811683179091556012805482169092179091556013805461ff0019169055601e601455601a805461ffff60ff60b01b011916905581543391161790554660381415620000f957600f80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000176565b46606114156200012f57600f80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000176565b46600114806200013f5750466004145b156200017157600f80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000176565b600080fd5b6001600560006200018f6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526005909252812080548316600190811790915561dead82527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba80549093168117909255600790620002176000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556147a1806200024f6000396000f3fe6080604052600436106103905760003560e01c806355dbc369116101dc578063b3d514fb11610102578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610a74578063f94aa1b414610a94578063fdb78c0e14610adb578063fe575a8714610afa57600080fd5b8063e4fcfd1814610a09578063e8a0e3f914610a1f578063eafb5a3c14610a3f578063ee5d9c2d14610a5f57600080fd5b8063cab5ebea116100dc578063cab5ebea14610952578063cf84770614610972578063d3f6a157146109a3578063dd62ed3e146109c357600080fd5b8063b3d514fb146105a7578063bcd96a2514610912578063c6a276c21461093257600080fd5b8063893d20e81161017a57806395d89b411161014957806395d89b41146108bd578063a457c2d7146108d2578063a9059cbb146108f2578063b1b08f71146105a757600080fd5b8063893d20e8146108755780638a63bd9b146108935780638a8c523c146108a85780638da5cb5b1461087557600080fd5b80636ebd0078116101b65780636ebd0078146107f557806370a082311461080a578063715018a61461084057806380c581d11461085557600080fd5b806355dbc36914610787578063590ffdce1461079c5780635cce86cd146107bc57600080fd5b80632b28fc7a116102c1578063395093511161025f5780634fb2e45d1161022e5780634fb2e45d146106ef5780634fbee1931461070f57806350a8e01614610748578063533ecf541461076757600080fd5b806339509351146106755780633f3cf56c14610695578063452ed4f1146106b55780634ada218b146106d557600080fd5b806332cde6641161029b57806332cde664146105f557806333251a0b1461061557806334cd82601461063557806336fddb041461065557600080fd5b80632b28fc7a146105a75780632e8fa821146105bd578063313ce567146105d357600080fd5b8063095ea7b31161032e57806323b872dd1161030857806323b872dd1461052757806326003957146105475780632610eaca1461056757806329dd87981461058757600080fd5b8063095ea7b3146104cd5780630fa604e4146104fd57806318160ddd1461051257600080fd5b8063069d955f1161036a578063069d955f1461041557806306fdde031461046b5780630758d9241461048d57806309231602146104ad57600080fd5b806303fd2a451461039c5780630445b667146103cf57806305bbedb6146103f357600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103db57600080fd5b506103e560165481565b6040519081526020016103c6565b3480156103ff57600080fd5b5061041361040e366004613e99565b610b1a565b005b34801561042157600080fd5b50600d546104469061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103c6565b34801561047757600080fd5b50610480610bf3565b6040516103c69190613f17565b34801561049957600080fd5b50600f546103b2906001600160a01b031681565b3480156104b957600080fd5b506104136104c8366004613f4a565b610c85565b3480156104d957600080fd5b506104ed6104e8366004613f63565b610da4565b60405190151581526020016103c6565b34801561050957600080fd5b506103e5610dbb565b34801561051e57600080fd5b506103e5610de1565b34801561053357600080fd5b506104ed610542366004613f8f565b610dfa565b34801561055357600080fd5b50610413610562366004613fd0565b610e72565b34801561057357600080fd5b5061041361058236600461404d565b610f7d565b34801561059357600080fd5b506104136105a23660046140b1565b61109d565b3480156105b357600080fd5b506103e56107d081565b3480156105c957600080fd5b506103e560175481565b3480156105df57600080fd5b50600b5460405160ff90911681526020016103c6565b34801561060157600080fd5b50610413610610366004614124565b611186565b34801561062157600080fd5b50610413610630366004614167565b6112c1565b34801561064157600080fd5b50610413610650366004614184565b611361565b34801561066157600080fd5b506104136106703660046141bf565b6113f1565b34801561068157600080fd5b506104ed610690366004613f63565b61146a565b3480156106a157600080fd5b506104136106b0366004613fd0565b6114a6565b3480156106c157600080fd5b506010546103b2906001600160a01b031681565b3480156106e157600080fd5b50601a546104ed9060ff1681565b3480156106fb57600080fd5b5061041361070a366004614167565b6115b1565b34801561071b57600080fd5b506104ed61072a366004614167565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561075457600080fd5b50601a546104ed90610100900460ff1681565b34801561077357600080fd5b50610413610782366004614167565b6117bf565b34801561079357600080fd5b506103e5611e95565b3480156107a857600080fd5b506104136107b73660046141bf565b611f0e565b3480156107c857600080fd5b506104ed6107d7366004614167565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080157600080fd5b506103e5611f87565b34801561081657600080fd5b506103e5610825366004614167565b6001600160a01b031660009081526001602052604090205490565b34801561084c57600080fd5b50610413611fa8565b34801561086157600080fd5b506104136108703660046141bf565b612058565b34801561088157600080fd5b506000546001600160a01b03166103b2565b34801561089f57600080fd5b506104ed612202565b3480156108b457600080fd5b50610413612271565b3480156108c957600080fd5b50610480612461565b3480156108de57600080fd5b506104ed6108ed366004613f63565b612470565b3480156108fe57600080fd5b506104ed61090d366004613f63565b6124a7565b34801561091e57600080fd5b5061041361092d3660046141ed565b6124be565b34801561093e57600080fd5b5061041361094d366004614167565b6125b6565b34801561095e57600080fd5b5061041361096d366004614220565b612656565b34801561097e57600080fd5b50600e546104469061ffff808216916201000081048216916401000000009091041683565b3480156109af57600080fd5b506104136109be36600461423d565b6126f8565b3480156109cf57600080fd5b506103e56109de36600461423d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a1557600080fd5b506103e560145481565b348015610a2b57600080fd5b50610413610a3a36600461426b565b612781565b348015610a4b57600080fd5b50610413610a5a366004614167565b6128e5565b348015610a6b57600080fd5b50610413612c94565b348015610a8057600080fd5b50610413610a8f3660046141bf565b612d74565b348015610aa057600080fd5b50601154601254610abb916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103c6565b348015610ae757600080fd5b506013546104ed90610100900460ff1681565b348015610b0657600080fd5b506104ed610b15366004614167565b612e1c565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610bbd9085908590600401614337565b600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b505050505050565b606060098054610c029061435b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2e9061435b565b8015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b820191906000526020600020905b815481529060010190602001808311610c5e57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cd35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b604b811015610d245760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b64565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b5050505050565b6000610db1338484612eaa565b5060015b92915050565b600b54600090610dcf9060ff16600a6144c2565b601954610ddc91906144d1565b905090565b6000600c5460001415610df357600080fd5b50600c5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e5f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e5990849061450c565b90915550505b610e6a848484612fb7565b949350505050565b6000546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6103e8600c54610ed091906144d1565b8183600c54610edf9190614523565b610ee991906144d1565b1015610f5d5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b64565b8082600c54610f6c9190614523565b610f7691906144d1565b6019555050565b8051825114610fce5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b64565b60005b82518160ff16101561109857818160ff1681518110610ff257610ff2614542565b6020026020010151611019336001600160a01b031660009081526001602052604090205490565b101561102457600080fd5b61108533848360ff168151811061103d5761103d614542565b6020908102919091010151600b546110599060ff16600a6144c2565b858560ff168151811061106e5761106e614542565b60200260200101516110809190614523565b612fb7565b508061109081614571565b915050610fd1565b505050565b6000546001600160a01b031633146110eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146111d45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6107d08361ffff16111580156111f057506107d08261ffff1611155b801561120257506107d08161ffff1611155b61124e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b64565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461130f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d6f565b6000546001600160a01b031633146113af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b8385600c546113be9190614523565b6113c891906144d1565b601655600c5482906113db908590614523565b6113e591906144d1565b60175560145550505050565b6000546001600160a01b0316331461143f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610db19185906114a1908690614591565b612eaa565b6000546001600160a01b031633146114f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6103e8600c5461150491906144d1565b8183600c546115139190614523565b61151d91906144d1565b10156115915760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b64565b8082600c546115a09190614523565b6115aa91906144d1565b6018555050565b6000546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03811661167b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b64565b6001600160a01b03811661dead14156116fc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b64565b60008054611715916001600160a01b0390911690611f0e565b611720816001611f0e565b600080546001600160a01b03168152600160205260409020541561176757600080546001600160a01b0316808252600160205260409091205461176591908390612fb7565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461180d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a54760100000000000000000000000000000000000000000000900460ff161561187a5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610b64565b601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561190c57600080fd5b505af192505050801561191d575060015b50601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561199257506040513d6000823e601f3d908101601f1916820160405261198f919081019061460d565b60015b6119de5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610b64565b83516119f1906009906020870190613ce5565b508251611a0590600a906020860190613ce5565b506008829055600b805460ff191660ff8316908117909155611a2890600a6144c2565b600854611a359190614523565b600c5550505050600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab39190614688565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b389190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc09190614688565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c5461271090611c17906005614523565b611c2191906144d1565b601655600c5461271090611c3690600a614523565b611c4091906144d1565b601755600c546103e890611c55906005614523565b611c5f91906144d1565b601855600c54606490611c73906002614523565b611c7d91906144d1565b601955601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c5460016000611cda6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611d066000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051611d4d91815260200190565b60405180910390a3600f54611d6f9030906001600160a01b0316600019612eaa565b611d9a611d846000546001600160a01b031690565b306110806108256000546001600160a01b031690565b50600f546001600160a01b031663f305d7194730611dcd816001600160a01b031660009081526001602052604090205490565b600080611de26000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e62573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e8791906146a5565b505050611e92612271565b50565b6000601a60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc91906146d3565b6000546001600160a01b03163314611f5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600b54600090611f9b9060ff16600a6144c2565b601854610ddc91906144d1565b6000546001600160a01b03163314611ff65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6000805461200f916001600160a01b0390911690611f0e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b8061211d576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610bbd565b60035415612184576203f48060035442612137919061450c565b116121845760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b64565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610bbd565b5050565b600080546001600160a01b031633146122515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b600f5461226b9030906001600160a01b0316600019612eaa565b50600190565b6000546001600160a01b031633146122bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a5460ff16156123125760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b64565b601a54610100900460ff166123695760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b64565b601a546201000090046001600160a01b03166123af57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561244057600080fd5b505af1925050508015612451575060015b50601a805460ff19166001179055565b6060600a8054610c029061435b565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610db19185906114a190869061450c565b60006124b4338484612fb7565b5060019392505050565b6000546001600160a01b0316331461250c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000166201000061ffff858116919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190911790831617905561257681836146ec565b600e805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146126045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610d6f565b6000546001600160a01b031633146126a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906126ed90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146127465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601180546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560128054929093169116179055565b81518351148015612793575080518251145b6127df5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b64565b60005b83518160ff1610156128df57818160ff168151811061280357612803614542565b6020026020010151838260ff168151811061282057612820614542565b6020026020010151600c546128359190614523565b61283f91906144d1565b33600090815260016020526040902054101561285a57600080fd5b6128cc33858360ff168151811061287357612873614542565b6020026020010151848460ff168151811061289057612890614542565b6020026020010151868560ff16815181106128ad576128ad614542565b6020026020010151600c546128c29190614523565b61108091906144d1565b50806128d781614571565b9150506127e2565b50505050565b6000546001600160a01b031633146129335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c9190614688565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0d9190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a949190614688565b90506001600160a01b038116612c3257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b069190614688565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b779190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c009190614688565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c5b565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611098903090600019612eaa565b6000546001600160a01b03163314612ce25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a54610100900460ff1615612d3a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b64565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611e92573d6000803e3d6000fd5b6000546001600160a01b03163314612dc25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610bbd565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db59190614712565b6001600160a01b038316612f005760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b64565b6001600160a01b038216612f565760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b64565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b64565b6001600160a01b0383166130b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b64565b600082116131275760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b64565b6131318484613476565b1561338857601a5460ff166131885760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b64565b6001600160a01b03841660009081526002602052604090205460ff16806131c757506001600160a01b03831660009081526002602052604090205460ff165b1561328b576001600160a01b03841660009081526006602052604090205460ff1615801561320e57506001600160a01b03831660009081526006602052604090205460ff16155b1561328b5760185482111561328b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b64565b600f546001600160a01b038481169116148015906132c257506001600160a01b03831660009081526002602052604090205460ff16155b15613388576001600160a01b03831660009081526006602052604090205460ff16613388576019548261330a856001600160a01b031660009081526001602052604090205490565b6133149190614591565b11156133885760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b64565b6001600160a01b03841660009081526005602052604090205460019060ff16806133ca57506001600160a01b03841660009081526005602052604090205460ff165b156133d3575060005b6001600160a01b03841660009081526002602052604090205460ff16156134615760135460ff1615801561340e5750601354610100900460ff165b1561346157426014546015546134249190614591565b10156134615730600090815260016020526040902054601654811061345f57601754811061345157506017545b61345a8161354b565b426015555b505b61346d85858584613840565b95945050505050565b600080546001600160a01b038481169116148015906134a357506000546001600160a01b03838116911614155b80156134ba57506000546001600160a01b03163214155b80156134df57506001600160a01b03821660009081526007602052604090205460ff16155b801561350457506001600160a01b03831660009081526007602052604090205460ff16155b801561351b57506001600160a01b03821661dead14155b801561352f57506001600160a01b03821615155b801561354457506001600160a01b0383163014155b9392505050565b6013805460ff1916600117905560408051606081018252600e5461ffff80821683526201000082048116602084015264010000000090910416918101829052906135955750613833565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146135ee57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061362357613623614542565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b99190614688565b816001815181106136cc576136cc614542565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061372b90869060009086903090429060040161472f565b600060405180830381600087803b15801561374557600080fd5b505af1158015613759573d6000803e3d6000fd5b5050505060004790506000836040015161ffff16846020015161ffff16836137819190614523565b61378b91906144d1565b90506000613799828461450c565b602086015190915061ffff16156137e6576012546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156137e4573d6000803e3d6000fd5b505b845161ffff161561382d576011546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561382b573d6000803e3d6000fd5b505b50505050505b506013805460ff19169055565b601a54600090610100900460ff166138ec5761385c8585613a7c565b601a54610100900460ff1615801561387957506138798585613476565b156138ec5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b64565b6138f68585613476565b156139a957601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613992575060408051601f3d908101601f1916820190925261398f91810190614712565b60015b61399b57600080fd5b9050806139a757600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906139d190849061450c565b9091555060009050826139e457836139ef565b6139ef868686613bda565b6001600160a01b038616600090815260016020526040812080549293508392909190613a1c908490614591565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a6891815260200190565b60405180910390a350600195945050505050565b601a54610100900460ff1615613afa5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b64565b613b048282613476565b158015613b1e57506010546001600160a01b038281169116145b156121fe576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff001916610100179081905562010000900416613b9357601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613c0a5750600d5461ffff16613c4f565b6001600160a01b03841660009081526002602052604090205460ff1615613c3e5750600d5462010000900461ffff16613c4f565b50600d54640100000000900461ffff165b6000612710613c5e8386614523565b613c6891906144d1565b30600090815260016020526040812080549293508392909190613c8c908490614591565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613cdb818561450c565b9695505050505050565b828054613cf19061435b565b90600052602060002090601f016020900481019282613d135760008555613d59565b82601f10613d2c57805160ff1916838001178555613d59565b82800160010185558215613d59579182015b82811115613d59578251825591602001919060010190613d3e565b50613d65929150613d69565b5090565b5b80821115613d655760008155600101613d6a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613dd657613dd6613d7e565b604052919050565b600067ffffffffffffffff821115613df857613df8613d7e565b5060051b60200190565b6001600160a01b0381168114611e9257600080fd5b600082601f830112613e2857600080fd5b81356020613e3d613e3883613dde565b613dad565b82815260059290921b84018101918181019086841115613e5c57600080fd5b8286015b84811015613e80578035613e7381613e02565b8352918301918301613e60565b509695505050505050565b8015158114611e9257600080fd5b60008060408385031215613eac57600080fd5b823567ffffffffffffffff811115613ec357600080fd5b613ecf85828601613e17565b9250506020830135613ee081613e8b565b809150509250929050565b60005b83811015613f06578181015183820152602001613eee565b838111156128df5750506000910152565b6020815260008251806020840152613f36816040850160208701613eeb565b601f01601f19169190910160400192915050565b600060208284031215613f5c57600080fd5b5035919050565b60008060408385031215613f7657600080fd5b8235613f8181613e02565b946020939093013593505050565b600080600060608486031215613fa457600080fd5b8335613faf81613e02565b92506020840135613fbf81613e02565b929592945050506040919091013590565b60008060408385031215613fe357600080fd5b50508035926020909101359150565b600082601f83011261400357600080fd5b81356020614013613e3883613dde565b82815260059290921b8401810191818101908684111561403257600080fd5b8286015b84811015613e805780358352918301918301614036565b6000806040838503121561406057600080fd5b823567ffffffffffffffff8082111561407857600080fd5b61408486838701613e17565b9350602085013591508082111561409a57600080fd5b506140a785828601613ff2565b9150509250929050565b600080600080608085870312156140c757600080fd5b84356140d281613e8b565b935060208501356140e281613e8b565b925060408501356140f281613e8b565b9150606085013561410281613e8b565b939692955090935050565b803561ffff8116811461411f57600080fd5b919050565b60008060006060848603121561413957600080fd5b6141428461410d565b92506141506020850161410d565b915061415e6040850161410d565b90509250925092565b60006020828403121561417957600080fd5b813561354481613e02565b600080600080600060a0868803121561419c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156141d257600080fd5b82356141dd81613e02565b91506020830135613ee081613e8b565b6000806040838503121561420057600080fd5b6142098361410d565b91506142176020840161410d565b90509250929050565b60006020828403121561423257600080fd5b813561354481613e8b565b6000806040838503121561425057600080fd5b823561425b81613e02565b91506020830135613ee081613e02565b60008060006060848603121561428057600080fd5b833567ffffffffffffffff8082111561429857600080fd5b6142a487838801613e17565b945060208601359150808211156142ba57600080fd5b6142c687838801613ff2565b935060408601359150808211156142dc57600080fd5b506142e986828701613ff2565b9150509250925092565b600081518084526020808501945080840160005b8381101561432c5781516001600160a01b031687529582019590820190600101614307565b509495945050505050565b60408152600061434a60408301856142f3565b905082151560208301529392505050565b600181811c9082168061436f57607f821691505b602082108114156143a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156144195781600019048211156143ff576143ff6143af565b8085161561440c57918102915b93841c93908002906143e3565b509250929050565b60008261443057506001610db5565b8161443d57506000610db5565b8160018114614453576002811461445d57614479565b6001915050610db5565b60ff84111561446e5761446e6143af565b50506001821b610db5565b5060208310610133831016604e8410600b841016171561449c575081810a610db5565b6144a683836143de565b80600019048211156144ba576144ba6143af565b029392505050565b600061354460ff841683614421565b600082614507577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561451e5761451e6143af565b500390565b600081600019048311821515161561453d5761453d6143af565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614588576145886143af565b60010192915050565b600082198211156145a4576145a46143af565b500190565b600082601f8301126145ba57600080fd5b815167ffffffffffffffff8111156145d4576145d4613d7e565b6145e76020601f19601f84011601613dad565b8181528460208386010111156145fc57600080fd5b610e6a826020830160208701613eeb565b6000806000806080858703121561462357600080fd5b845167ffffffffffffffff8082111561463b57600080fd5b614647888389016145a9565b9550602087015191508082111561465d57600080fd5b5061466a878288016145a9565b93505060408501519150606085015160ff8116811461410257600080fd5b60006020828403121561469a57600080fd5b815161354481613e02565b6000806000606084860312156146ba57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156146e557600080fd5b5051919050565b600061ffff808316818516808303821115614709576147096143af565b01949350505050565b60006020828403121561472457600080fd5b815161354481613e8b565b85815284602082015260a06040820152600061474e60a08301866142f3565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e24b7ba37dc3212a2ca5bc2a55b08f74fb43442b9f837654fea883847b4fe45d64736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106103905760003560e01c806355dbc369116101dc578063b3d514fb11610102578063e4fcfd18116100a0578063eec2744e1161006f578063eec2744e14610a74578063f94aa1b414610a94578063fdb78c0e14610adb578063fe575a8714610afa57600080fd5b8063e4fcfd1814610a09578063e8a0e3f914610a1f578063eafb5a3c14610a3f578063ee5d9c2d14610a5f57600080fd5b8063cab5ebea116100dc578063cab5ebea14610952578063cf84770614610972578063d3f6a157146109a3578063dd62ed3e146109c357600080fd5b8063b3d514fb146105a7578063bcd96a2514610912578063c6a276c21461093257600080fd5b8063893d20e81161017a57806395d89b411161014957806395d89b41146108bd578063a457c2d7146108d2578063a9059cbb146108f2578063b1b08f71146105a757600080fd5b8063893d20e8146108755780638a63bd9b146108935780638a8c523c146108a85780638da5cb5b1461087557600080fd5b80636ebd0078116101b65780636ebd0078146107f557806370a082311461080a578063715018a61461084057806380c581d11461085557600080fd5b806355dbc36914610787578063590ffdce1461079c5780635cce86cd146107bc57600080fd5b80632b28fc7a116102c1578063395093511161025f5780634fb2e45d1161022e5780634fb2e45d146106ef5780634fbee1931461070f57806350a8e01614610748578063533ecf541461076757600080fd5b806339509351146106755780633f3cf56c14610695578063452ed4f1146106b55780634ada218b146106d557600080fd5b806332cde6641161029b57806332cde664146105f557806333251a0b1461061557806334cd82601461063557806336fddb041461065557600080fd5b80632b28fc7a146105a75780632e8fa821146105bd578063313ce567146105d357600080fd5b8063095ea7b31161032e57806323b872dd1161030857806323b872dd1461052757806326003957146105475780632610eaca1461056757806329dd87981461058757600080fd5b8063095ea7b3146104cd5780630fa604e4146104fd57806318160ddd1461051257600080fd5b8063069d955f1161036a578063069d955f1461041557806306fdde031461046b5780630758d9241461048d57806309231602146104ad57600080fd5b806303fd2a451461039c5780630445b667146103cf57806305bbedb6146103f357600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b261dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103db57600080fd5b506103e560165481565b6040519081526020016103c6565b3480156103ff57600080fd5b5061041361040e366004613e99565b610b1a565b005b34801561042157600080fd5b50600d546104469061ffff808216916201000081048216916401000000009091041683565b6040805161ffff948516815292841660208401529216918101919091526060016103c6565b34801561047757600080fd5b50610480610bf3565b6040516103c69190613f17565b34801561049957600080fd5b50600f546103b2906001600160a01b031681565b3480156104b957600080fd5b506104136104c8366004613f4a565b610c85565b3480156104d957600080fd5b506104ed6104e8366004613f63565b610da4565b60405190151581526020016103c6565b34801561050957600080fd5b506103e5610dbb565b34801561051e57600080fd5b506103e5610de1565b34801561053357600080fd5b506104ed610542366004613f8f565b610dfa565b34801561055357600080fd5b50610413610562366004613fd0565b610e72565b34801561057357600080fd5b5061041361058236600461404d565b610f7d565b34801561059357600080fd5b506104136105a23660046140b1565b61109d565b3480156105b357600080fd5b506103e56107d081565b3480156105c957600080fd5b506103e560175481565b3480156105df57600080fd5b50600b5460405160ff90911681526020016103c6565b34801561060157600080fd5b50610413610610366004614124565b611186565b34801561062157600080fd5b50610413610630366004614167565b6112c1565b34801561064157600080fd5b50610413610650366004614184565b611361565b34801561066157600080fd5b506104136106703660046141bf565b6113f1565b34801561068157600080fd5b506104ed610690366004613f63565b61146a565b3480156106a157600080fd5b506104136106b0366004613fd0565b6114a6565b3480156106c157600080fd5b506010546103b2906001600160a01b031681565b3480156106e157600080fd5b50601a546104ed9060ff1681565b3480156106fb57600080fd5b5061041361070a366004614167565b6115b1565b34801561071b57600080fd5b506104ed61072a366004614167565b6001600160a01b031660009081526005602052604090205460ff1690565b34801561075457600080fd5b50601a546104ed90610100900460ff1681565b34801561077357600080fd5b50610413610782366004614167565b6117bf565b34801561079357600080fd5b506103e5611e95565b3480156107a857600080fd5b506104136107b73660046141bf565b611f0e565b3480156107c857600080fd5b506104ed6107d7366004614167565b6001600160a01b031660009081526006602052604090205460ff1690565b34801561080157600080fd5b506103e5611f87565b34801561081657600080fd5b506103e5610825366004614167565b6001600160a01b031660009081526001602052604090205490565b34801561084c57600080fd5b50610413611fa8565b34801561086157600080fd5b506104136108703660046141bf565b612058565b34801561088157600080fd5b506000546001600160a01b03166103b2565b34801561089f57600080fd5b506104ed612202565b3480156108b457600080fd5b50610413612271565b3480156108c957600080fd5b50610480612461565b3480156108de57600080fd5b506104ed6108ed366004613f63565b612470565b3480156108fe57600080fd5b506104ed61090d366004613f63565b6124a7565b34801561091e57600080fd5b5061041361092d3660046141ed565b6124be565b34801561093e57600080fd5b5061041361094d366004614167565b6125b6565b34801561095e57600080fd5b5061041361096d366004614220565b612656565b34801561097e57600080fd5b50600e546104469061ffff808216916201000081048216916401000000009091041683565b3480156109af57600080fd5b506104136109be36600461423d565b6126f8565b3480156109cf57600080fd5b506103e56109de36600461423d565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b348015610a1557600080fd5b506103e560145481565b348015610a2b57600080fd5b50610413610a3a36600461426b565b612781565b348015610a4b57600080fd5b50610413610a5a366004614167565b6128e5565b348015610a6b57600080fd5b50610413612c94565b348015610a8057600080fd5b50610413610a8f3660046141bf565b612d74565b348015610aa057600080fd5b50601154601254610abb916001600160a01b03908116911682565b604080516001600160a01b039384168152929091166020830152016103c6565b348015610ae757600080fd5b506013546104ed90610100900460ff1681565b348015610b0657600080fd5b506104ed610b15366004614167565b612e1c565b6000546001600160a01b03163314610b6d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b60448201526064015b60405180910390fd5b601a546040517f05bbedb6000000000000000000000000000000000000000000000000000000008152620100009091046001600160a01b0316906305bbedb690610bbd9085908590600401614337565b600060405180830381600087803b158015610bd757600080fd5b505af1158015610beb573d6000803e3d6000fd5b505050505050565b606060098054610c029061435b565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2e9061435b565b8015610c7b5780601f10610c5057610100808354040283529160200191610c7b565b820191906000526020600020905b815481529060010190602001808311610c5e57829003601f168201915b5050505050905090565b6000546001600160a01b03163314610cd35760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b604b811015610d245760405162461bcd60e51b815260206004820152600860248201527f546f6f206c6f772e0000000000000000000000000000000000000000000000006044820152606401610b64565b601a546040517f0923160200000000000000000000000000000000000000000000000000000000815260048101839052620100009091046001600160a01b0316906309231602906024015b600060405180830381600087803b158015610d8957600080fd5b505af1158015610d9d573d6000803e3d6000fd5b5050505050565b6000610db1338484612eaa565b5060015b92915050565b600b54600090610dcf9060ff16600a6144c2565b601954610ddc91906144d1565b905090565b6000600c5460001415610df357600080fd5b50600c5490565b6001600160a01b038316600090815260046020908152604080832033845290915281205460001914610e5f576001600160a01b038416600090815260046020908152604080832033845290915281208054849290610e5990849061450c565b90915550505b610e6a848484612fb7565b949350505050565b6000546001600160a01b03163314610ec05760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6103e8600c54610ed091906144d1565b8183600c54610edf9190614523565b610ee991906144d1565b1015610f5d5760405162461bcd60e51b815260206004820152603260248201527f4d61782057616c6c657420616d74206d7573742062652061626f766520302e3160448201527f25206f6620746f74616c20737570706c792e00000000000000000000000000006064820152608401610b64565b8082600c54610f6c9190614523565b610f7691906144d1565b6019555050565b8051825114610fce5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b64565b60005b82518160ff16101561109857818160ff1681518110610ff257610ff2614542565b6020026020010151611019336001600160a01b031660009081526001602052604090205490565b101561102457600080fd5b61108533848360ff168151811061103d5761103d614542565b6020908102919091010151600b546110599060ff16600a6144c2565b858560ff168151811061106e5761106e614542565b60200260200101516110809190614523565b612fb7565b508061109081614571565b915050610fd1565b505050565b6000546001600160a01b031633146110eb5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517f0109da690000000000000000000000000000000000000000000000000000000081528515156004820152841515602482015283151560448201528215156064820152620100009091046001600160a01b031690630109da6990608401600060405180830381600087803b15801561116857600080fd5b505af115801561117c573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146111d45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6107d08361ffff16111580156111f057506107d08261ffff1611155b801561120257506107d08161ffff1611155b61124e5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f7420657863656564206d6178696d756d732e0000000000000000006044820152606401610b64565b600d805461ffff9485167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000909116176201000093851693909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff166401000000009190931602919091179055565b6000546001600160a01b0316331461130f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517f33251a0b0000000000000000000000000000000000000000000000000000000081526001600160a01b03838116600483015262010000909204909116906333251a0b90602401610d6f565b6000546001600160a01b031633146113af5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b8385600c546113be9190614523565b6113c891906144d1565b601655600c5482906113db908590614523565b6113e591906144d1565b60175560145550505050565b6000546001600160a01b0316331461143f5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610db19185906114a1908690614591565b612eaa565b6000546001600160a01b031633146114f45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6103e8600c5461150491906144d1565b8183600c546115139190614523565b61151d91906144d1565b10156115915760405162461bcd60e51b815260206004820152603760248201527f4d6178205472616e73616374696f6e20616d74206d7573742062652061626f7660448201527f6520302e3125206f6620746f74616c20737570706c792e0000000000000000006064820152608401610b64565b8082600c546115a09190614523565b6115aa91906144d1565b6018555050565b6000546001600160a01b031633146115ff5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03811661167b5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b64565b6001600160a01b03811661dead14156116fc5760405162461bcd60e51b815260206004820152603d60248201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660448201527f6572206f776e657220746f20746865207a65726f20616464726573732e0000006064820152608401610b64565b60008054611715916001600160a01b0390911690611f0e565b611720816001611f0e565b600080546001600160a01b03168152600160205260409020541561176757600080546001600160a01b0316808252600160205260409091205461176591908390612fb7565b505b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b0316331461180d5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a54760100000000000000000000000000000000000000000000900460ff161561187a5760405162461bcd60e51b815260206004820152600160248201527f31000000000000000000000000000000000000000000000000000000000000006044820152606401610b64565b601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b03848116820292909217928390556040517f1a69523000000000000000000000000000000000000000000000000000000000815230600482015292041690631a69523090602401600060405180830381600087803b15801561190c57600080fd5b505af192505050801561191d575060015b50601a60029054906101000a90046001600160a01b03166001600160a01b031663dbc4d8836040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561199257506040513d6000823e601f3d908101601f1916820160405261198f919081019061460d565b60015b6119de5760405162461bcd60e51b815260206004820152600160248201527f33000000000000000000000000000000000000000000000000000000000000006044820152606401610b64565b83516119f1906009906020870190613ce5565b508251611a0590600a906020860190613ce5565b506008829055600b805460ff191660ff8316908117909155611a2890600a6144c2565b600854611a359190614523565b600c5550505050600f60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab39190614688565b6001600160a01b031663c9c65396600f60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b389190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611b9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc09190614688565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039290921691821790556000908152600260205260409020805460ff19166001179055600c5461271090611c17906005614523565b611c2191906144d1565b601655600c5461271090611c3690600a614523565b611c4091906144d1565b601755600c546103e890611c55906005614523565b611c5f91906144d1565b601855600c54606490611c73906002614523565b611c7d91906144d1565b601955601a80547fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff16760100000000000000000000000000000000000000000000179055600c5460016000611cda6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611d066000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051611d4d91815260200190565b60405180910390a3600f54611d6f9030906001600160a01b0316600019612eaa565b611d9a611d846000546001600160a01b031690565b306110806108256000546001600160a01b031690565b50600f546001600160a01b031663f305d7194730611dcd816001600160a01b031660009081526001602052604090205490565b600080611de26000546001600160a01b031690565b60405160e088901b7fffffffff000000000000000000000000000000000000000000000000000000001681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015611e62573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e8791906146a5565b505050611e92612271565b50565b6000601a60029054906101000a90046001600160a01b03166001600160a01b03166355dbc3696040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddc91906146d3565b6000546001600160a01b03163314611f5c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b600b54600090611f9b9060ff16600a6144c2565b601854610ddc91906144d1565b6000546001600160a01b03163314611ff65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b6000805461200f916001600160a01b0390911690611f0e565b6000805473ffffffffffffffffffffffffffffffffffffffff1916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146120a65760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b8061211d576001600160a01b03828116600081815260026020526040808220805460ff19169055601a5490517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152620100009004909116906380c581d190604401610bbd565b60035415612184576203f48060035442612137919061450c565b116121845760405162461bcd60e51b815260206004820152601060248201527f332044617920636f6f6c646f776e2e21000000000000000000000000000000006044820152606401610b64565b6001600160a01b0382811660008181526002602052604090819020805460ff1916600190811790915542600355601a5491517f80c581d100000000000000000000000000000000000000000000000000000000815260048101939093526024830152620100009004909116906380c581d190604401610bbd565b5050565b600080546001600160a01b031633146122515760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b600f5461226b9030906001600160a01b0316600019612eaa565b50600190565b6000546001600160a01b031633146122bf5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a5460ff16156123125760405162461bcd60e51b815260206004820152601860248201527f54726164696e6720616c726561647920656e61626c65642100000000000000006044820152606401610b64565b601a54610100900460ff166123695760405162461bcd60e51b815260206004820152601860248201527f4c6971756964697479206d7573742062652061646465642e00000000000000006044820152606401610b64565b601a546201000090046001600160a01b03166123af57601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b601a54601054600b546040517f6c115c340000000000000000000000000000000000000000000000000000000081526001600160a01b03928316600482015263ffffffff4316602482015267ffffffffffffffff4216604482015260ff9091166064820152620100009092041690636c115c3490608401600060405180830381600087803b15801561244057600080fd5b505af1925050508015612451575060015b50601a805460ff19166001179055565b6060600a8054610c029061435b565b3360008181526004602090815260408083206001600160a01b03871684529091528120549091610db19185906114a190869061450c565b60006124b4338484612fb7565b5060019392505050565b6000546001600160a01b0316331461250c5760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b600e80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000166201000061ffff858116919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169190911790831617905561257681836146ec565b600e805461ffff92909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffffffff0000ffffffff9092169190911790555050565b6000546001600160a01b031633146126045760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517fc6a276c20000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152620100009092049091169063c6a276c290602401610d6f565b6000546001600160a01b031633146126a45760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601380548215156101000261ff00199091161790556040517f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f9141053257906126ed90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146127465760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601180546001600160a01b0393841673ffffffffffffffffffffffffffffffffffffffff199182161790915560128054929093169116179055565b81518351148015612793575080518251145b6127df5760405162461bcd60e51b815260206004820152601560248201527f4c656e6774687320646f206e6f74206d617463682e00000000000000000000006044820152606401610b64565b60005b83518160ff1610156128df57818160ff168151811061280357612803614542565b6020026020010151838260ff168151811061282057612820614542565b6020026020010151600c546128359190614523565b61283f91906144d1565b33600090815260016020526040902054101561285a57600080fd5b6128cc33858360ff168151811061287357612873614542565b6020026020010151848460ff168151811061289057612890614542565b6020026020010151868560ff16815181106128ad576128ad614542565b6020026020010151600c546128c29190614523565b61108091906144d1565b50806128d781614571565b9150506127e2565b50505050565b6000546001600160a01b031633146129335760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612978573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299c9190614688565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a0d9190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015612a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a949190614688565b90506001600160a01b038116612c3257816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b069190614688565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b779190614688565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015612bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c009190614688565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055612c5b565b6010805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383161790555b600f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038416908117909155611098903090600019612eaa565b6000546001600160a01b03163314612ce25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a54610100900460ff1615612d3a5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f742063616c6c206166746572206c69717569646974792e000000006044820152606401610b64565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611e92573d6000803e3d6000fd5b6000546001600160a01b03163314612dc25760405162461bcd60e51b815260206004820152601160248201527021b0b63632b9101e979e9037bbb732b91760791b6044820152606401610b64565b601a546040517feec2744e0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301528315156024830152620100009092049091169063eec2744e90604401610bbd565b601a546040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152600092620100009004169063fe575a8790602401602060405180830381865afa158015612e86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db59190614712565b6001600160a01b038316612f005760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b64565b6001600160a01b038216612f565760405162461bcd60e51b815260206004820152601360248201527f45524332303a205a65726f2041646472657373000000000000000000000000006044820152606401610b64565b6001600160a01b0383811660008181526004602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166130355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610b64565b6001600160a01b0383166130b15760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152608401610b64565b600082116131275760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d75737420626520677265617465722060448201527f7468616e207a65726f00000000000000000000000000000000000000000000006064820152608401610b64565b6131318484613476565b1561338857601a5460ff166131885760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610b64565b6001600160a01b03841660009081526002602052604090205460ff16806131c757506001600160a01b03831660009081526002602052604090205460ff165b1561328b576001600160a01b03841660009081526006602052604090205460ff1615801561320e57506001600160a01b03831660009081526006602052604090205460ff16155b1561328b5760185482111561328b5760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785460448201527f78416d6f756e742e0000000000000000000000000000000000000000000000006064820152608401610b64565b600f546001600160a01b038481169116148015906132c257506001600160a01b03831660009081526002602052604090205460ff16155b15613388576001600160a01b03831660009081526006602052604090205460ff16613388576019548261330a856001600160a01b031660009081526001602052604090205490565b6133149190614591565b11156133885760405162461bcd60e51b815260206004820152602a60248201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785760448201527f616c6c657453697a652e000000000000000000000000000000000000000000006064820152608401610b64565b6001600160a01b03841660009081526005602052604090205460019060ff16806133ca57506001600160a01b03841660009081526005602052604090205460ff165b156133d3575060005b6001600160a01b03841660009081526002602052604090205460ff16156134615760135460ff1615801561340e5750601354610100900460ff165b1561346157426014546015546134249190614591565b10156134615730600090815260016020526040902054601654811061345f57601754811061345157506017545b61345a8161354b565b426015555b505b61346d85858584613840565b95945050505050565b600080546001600160a01b038481169116148015906134a357506000546001600160a01b03838116911614155b80156134ba57506000546001600160a01b03163214155b80156134df57506001600160a01b03821660009081526007602052604090205460ff16155b801561350457506001600160a01b03831660009081526007602052604090205460ff16155b801561351b57506001600160a01b03821661dead14155b801561352f57506001600160a01b03821615155b801561354457506001600160a01b0383163014155b9392505050565b6013805460ff1916600117905560408051606081018252600e5461ffff80821683526201000082048116602084015264010000000090910416918101829052906135955750613833565b306000908152600460209081526040808320600f546001600160a01b03168452909152902054600019146135ee57306000908152600460209081526040808320600f546001600160a01b03168452909152902060001990555b604080516002808252606082018352600092602083019080368337019050509050308160008151811061362357613623614542565b6001600160a01b03928316602091820292909201810191909152600f54604080517fad5c46480000000000000000000000000000000000000000000000000000000081529051919093169263ad5c46489260048083019391928290030181865afa158015613695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136b99190614688565b816001815181106136cc576136cc614542565b6001600160a01b039283166020918202929092010152600f546040517f791ac94700000000000000000000000000000000000000000000000000000000815291169063791ac9479061372b90869060009086903090429060040161472f565b600060405180830381600087803b15801561374557600080fd5b505af1158015613759573d6000803e3d6000fd5b5050505060004790506000836040015161ffff16846020015161ffff16836137819190614523565b61378b91906144d1565b90506000613799828461450c565b602086015190915061ffff16156137e6576012546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156137e4573d6000803e3d6000fd5b505b845161ffff161561382d576011546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561382b573d6000803e3d6000fd5b505b50505050505b506013805460ff19169055565b601a54600090610100900460ff166138ec5761385c8585613a7c565b601a54610100900460ff1615801561387957506138798585613476565b156138ec5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e7366657220617420746869732060448201527f74696d652e0000000000000000000000000000000000000000000000000000006064820152608401610b64565b6138f68585613476565b156139a957601a546040517fecd07a530000000000000000000000000000000000000000000000000000000081526001600160a01b038781166004830152868116602483015260448201869052600092620100009004169063ecd07a53906064016020604051808303816000875af1925050508015613992575060408051601f3d908101601f1916820190925261398f91810190614712565b60015b61399b57600080fd5b9050806139a757600080fd5b505b6001600160a01b038516600090815260016020526040812080548592906139d190849061450c565b9091555060009050826139e457836139ef565b6139ef868686613bda565b6001600160a01b038616600090815260016020526040812080549293508392909190613a1c908490614591565b92505081905550846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613a6891815260200190565b60405180910390a350600195945050505050565b601a54610100900460ff1615613afa5760405162461bcd60e51b815260206004820152602360248201527f4c697175696469747920616c726561647920616464656420616e64206d61726b60448201527f65642e00000000000000000000000000000000000000000000000000000000006064820152608401610b64565b613b048282613476565b158015613b1e57506010546001600160a01b038281169116145b156121fe576001600160a01b038083166000908152600760205260409020805460ff19166001179055601a805461ff001916610100179081905562010000900416613b9357601a80547fffffffffffffffffffff0000000000000000000000000000000000000000ffff163062010000021790555b6013805461ff001916610100179055604051600181527f7b0a47d3b0234280b6c9213c5bbff44c8b6001bea7770b3950280f91410532579060200160405180910390a15050565b6001600160a01b038316600090815260026020526040812054819060ff1615613c0a5750600d5461ffff16613c4f565b6001600160a01b03841660009081526002602052604090205460ff1615613c3e5750600d5462010000900461ffff16613c4f565b50600d54640100000000900461ffff165b6000612710613c5e8386614523565b613c6891906144d1565b30600090815260016020526040812080549293508392909190613c8c908490614591565b909155505060405181815230906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3613cdb818561450c565b9695505050505050565b828054613cf19061435b565b90600052602060002090601f016020900481019282613d135760008555613d59565b82601f10613d2c57805160ff1916838001178555613d59565b82800160010185558215613d59579182015b82811115613d59578251825591602001919060010190613d3e565b50613d65929150613d69565b5090565b5b80821115613d655760008155600101613d6a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715613dd657613dd6613d7e565b604052919050565b600067ffffffffffffffff821115613df857613df8613d7e565b5060051b60200190565b6001600160a01b0381168114611e9257600080fd5b600082601f830112613e2857600080fd5b81356020613e3d613e3883613dde565b613dad565b82815260059290921b84018101918181019086841115613e5c57600080fd5b8286015b84811015613e80578035613e7381613e02565b8352918301918301613e60565b509695505050505050565b8015158114611e9257600080fd5b60008060408385031215613eac57600080fd5b823567ffffffffffffffff811115613ec357600080fd5b613ecf85828601613e17565b9250506020830135613ee081613e8b565b809150509250929050565b60005b83811015613f06578181015183820152602001613eee565b838111156128df5750506000910152565b6020815260008251806020840152613f36816040850160208701613eeb565b601f01601f19169190910160400192915050565b600060208284031215613f5c57600080fd5b5035919050565b60008060408385031215613f7657600080fd5b8235613f8181613e02565b946020939093013593505050565b600080600060608486031215613fa457600080fd5b8335613faf81613e02565b92506020840135613fbf81613e02565b929592945050506040919091013590565b60008060408385031215613fe357600080fd5b50508035926020909101359150565b600082601f83011261400357600080fd5b81356020614013613e3883613dde565b82815260059290921b8401810191818101908684111561403257600080fd5b8286015b84811015613e805780358352918301918301614036565b6000806040838503121561406057600080fd5b823567ffffffffffffffff8082111561407857600080fd5b61408486838701613e17565b9350602085013591508082111561409a57600080fd5b506140a785828601613ff2565b9150509250929050565b600080600080608085870312156140c757600080fd5b84356140d281613e8b565b935060208501356140e281613e8b565b925060408501356140f281613e8b565b9150606085013561410281613e8b565b939692955090935050565b803561ffff8116811461411f57600080fd5b919050565b60008060006060848603121561413957600080fd5b6141428461410d565b92506141506020850161410d565b915061415e6040850161410d565b90509250925092565b60006020828403121561417957600080fd5b813561354481613e02565b600080600080600060a0868803121561419c57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600080604083850312156141d257600080fd5b82356141dd81613e02565b91506020830135613ee081613e8b565b6000806040838503121561420057600080fd5b6142098361410d565b91506142176020840161410d565b90509250929050565b60006020828403121561423257600080fd5b813561354481613e8b565b6000806040838503121561425057600080fd5b823561425b81613e02565b91506020830135613ee081613e02565b60008060006060848603121561428057600080fd5b833567ffffffffffffffff8082111561429857600080fd5b6142a487838801613e17565b945060208601359150808211156142ba57600080fd5b6142c687838801613ff2565b935060408601359150808211156142dc57600080fd5b506142e986828701613ff2565b9150509250925092565b600081518084526020808501945080840160005b8381101561432c5781516001600160a01b031687529582019590820190600101614307565b509495945050505050565b60408152600061434a60408301856142f3565b905082151560208301529392505050565b600181811c9082168061436f57607f821691505b602082108114156143a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600181815b808511156144195781600019048211156143ff576143ff6143af565b8085161561440c57918102915b93841c93908002906143e3565b509250929050565b60008261443057506001610db5565b8161443d57506000610db5565b8160018114614453576002811461445d57614479565b6001915050610db5565b60ff84111561446e5761446e6143af565b50506001821b610db5565b5060208310610133831016604e8410600b841016171561449c575081810a610db5565b6144a683836143de565b80600019048211156144ba576144ba6143af565b029392505050565b600061354460ff841683614421565b600082614507577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b60008282101561451e5761451e6143af565b500390565b600081600019048311821515161561453d5761453d6143af565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff811415614588576145886143af565b60010192915050565b600082198211156145a4576145a46143af565b500190565b600082601f8301126145ba57600080fd5b815167ffffffffffffffff8111156145d4576145d4613d7e565b6145e76020601f19601f84011601613dad565b8181528460208386010111156145fc57600080fd5b610e6a826020830160208701613eeb565b6000806000806080858703121561462357600080fd5b845167ffffffffffffffff8082111561463b57600080fd5b614647888389016145a9565b9550602087015191508082111561465d57600080fd5b5061466a878288016145a9565b93505060408501519150606085015160ff8116811461410257600080fd5b60006020828403121561469a57600080fd5b815161354481613e02565b6000806000606084860312156146ba57600080fd5b8351925060208401519150604084015190509250925092565b6000602082840312156146e557600080fd5b5051919050565b600061ffff808316818516808303821115614709576147096143af565b01949350505050565b60006020828403121561472457600080fd5b815161354481613e8b565b85815284602082015260a06040820152600061474e60a08301866142f3565b6001600160a01b039490941660608301525060800152939250505056fea2646970667358221220e24b7ba37dc3212a2ca5bc2a55b08f74fb43442b9f837654fea883847b4fe45d64736f6c634300080b0033

Deployed Bytecode Sourcemap

6741:20824:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8145:73;;;;;;;;;;;;8176:42;8145:73;;;;;-1:-1:-1;;;;;178:55:1;;;160:74;;148:2;133:18;8145:73:0;;;;;;;;8684:28;;;;;;;;;;;;;;;;;;;391:25:1;;;379:2;364:18;8684:28:0;245:177:1;17064:172:0;;;;;;;;;;-1:-1:-1;17064:172:0;;;;;:::i;:::-;;:::i;:::-;;7641:116;;;;;;;;;;-1:-1:-1;7641:116:0;;;;;;;;;;;;;;;;;;;;;;;;;;2855:6:1;2888:15;;;2870:34;;2940:15;;;2935:2;2920:18;;2913:43;2992:15;;2972:18;;;2965:43;;;;2833:2;2818:18;7641:116:0;2649:365:1;13803:80:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;8082:26::-;;;;;;;;;;-1:-1:-1;8082:26:0;;;;-1:-1:-1;;;;;8082:26:0;;;17934:149;;;;;;;;;;-1:-1:-1;17934:149:0;;;;;:::i;:::-;;:::i;14416:161::-;;;;;;;;;;-1:-1:-1;14416:161:0;;;;;:::i;:::-;;:::i;:::-;;;4647:14:1;;4640:22;4622:41;;4610:2;4595:18;14416:161:0;4482:187:1;19925:112:0;;;;;;;;;;;;;:::i;13506:115::-;;;;;;;;;;;;;:::i;15083:306::-;;;;;;;;;;-1:-1:-1;15083:306:0;;;;;:::i;:::-;;:::i;18975:267::-;;;;;;;;;;-1:-1:-1;18975:267:0;;;;;:::i;:::-;;:::i;25208:373::-;;;;;;;;;;-1:-1:-1;25208:373:0;;;;;:::i;:::-;;:::i;17731:195::-;;;;;;;;;;-1:-1:-1;17731:195:0;;;;;:::i;:::-;;:::i;7879:42::-;;;;;;;;;;;;7917:4;7879:42;;8719:25;;;;;;;;;;;;;;;;13627:80;;;;;;;;;;-1:-1:-1;13695:9:0;;13627:80;;13695:9;;;;7449:36:1;;7437:2;7422:18;13627:80:0;7307:184:1;18091:397:0;;;;;;;;;;-1:-1:-1;18091:397:0;;;;;:::i;:::-;;:::i;17615:108::-;;;;;;;;;;-1:-1:-1;17615:108:0;;;;;:::i;:::-;;:::i;20045:338::-;;;;;;;;;;-1:-1:-1;20045:338:0;;;;;:::i;:::-;;:::i;19250:140::-;;;;;;;;;;-1:-1:-1;19250:140:0;;;;;:::i;:::-;;:::i;15397:215::-;;;;;;;;;;-1:-1:-1;15397:215:0;;;;;:::i;:::-;;:::i;18698:269::-;;;;;;;;;;-1:-1:-1;18698:269:0;;;;;:::i;:::-;;:::i;8115:21::-;;;;;;;;;;-1:-1:-1;8115:21:0;;;;-1:-1:-1;;;;;8115:21:0;;;8831:34;;;;;;;;;;-1:-1:-1;8831:34:0;;;;;;;;12360:590;;;;;;;;;;-1:-1:-1;12360:590:0;;;;;:::i;:::-;;:::i;19536:125::-;;;;;;;;;;-1:-1:-1;19536:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;19625:28:0;19601:4;19625:28;;;:19;:28;;;;;;;;;19536:125;8872:36;;;;;;;;;;-1:-1:-1;8872:36:0;;;;;;;;;;;10145:1539;;;;;;;;;;-1:-1:-1;10145:1539:0;;;;;:::i;:::-;;:::i;17503:104::-;;;;;;;;;;;;;:::i;19669:134::-;;;;;;;;;;-1:-1:-1;19669:134:0;;;;;:::i;:::-;;:::i;19398:130::-;;;;;;;;;;-1:-1:-1;19398:130:0;;;;;:::i;:::-;-1:-1:-1;;;;;19490:30:0;19466:4;19490:30;;;:21;:30;;;;;;;;;19398:130;19811:106;;;;;;;;;;;;;:::i;14116:117::-;;;;;;;;;;-1:-1:-1;14116:117:0;;;;;:::i;:::-;-1:-1:-1;;;;;14209:16:0;14182:7;14209:16;;;:7;:16;;;;;;;14116:117;12958:195;;;;;;;;;;;;;:::i;16403:500::-;;;;;;;;;;-1:-1:-1;16403:500:0;;;;;:::i;:::-;;:::i;13889:80::-;;;;;;;;;;-1:-1:-1;13941:7:0;12338:6;-1:-1:-1;;;;;12338:6:0;13889:80;19925:112;14902:173;;;;;;;;;;;;;:::i;24580:429::-;;;;;;;;;;;;;:::i;13713:84::-;;;;;;;;;;;;;:::i;15620:225::-;;;;;;;;;;-1:-1:-1;15620:225:0;;;;;:::i;:::-;;:::i;14241:167::-;;;;;;;;;;-1:-1:-1;14241:167:0;;;;;:::i;:::-;;:::i;18500:190::-;;;;;;;;;;-1:-1:-1;18500:190:0;;;;;:::i;:::-;;:::i;17244:118::-;;;;;;;;;;-1:-1:-1;17244:118:0;;;;;:::i;:::-;;:::i;20591:165::-;;;;;;;;;;-1:-1:-1;20591:165:0;;;;;:::i;:::-;;:::i;7766:104::-;;;;;;;;;;-1:-1:-1;7766:104:0;;;;;;;;;;;;;;;;;;;;;;20391:192;;;;;;;;;;-1:-1:-1;20391:192:0;;;;;:::i;:::-;;:::i;13975:133::-;;;;;;;;;;-1:-1:-1;13975:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;14077:19:0;;;14059:7;14077:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13975:133;8601:45;;;;;;;;;;;;;;;;25589:482;;;;;;;;;;-1:-1:-1;25589:482:0;;;;;:::i;:::-;;:::i;15853:542::-;;;;;;;;;;-1:-1:-1;15853:542:0;;;;;:::i;:::-;;:::i;25017:183::-;;;;;;;;;;;;;:::i;16911:145::-;;;;;;;;;;-1:-1:-1;16911:145:0;;;;;:::i;:::-;;:::i;8328:196::-;;;;;;;;;;-1:-1:-1;8328:196:0;;;;;;-1:-1:-1;;;;;8328:196:0;;;;;;;;;;;-1:-1:-1;;;;;11511:15:1;;;11493:34;;11563:15;;;;11558:2;11543:18;;11536:43;11405:18;8328:196:0;11226:359:1;8555:39:0;;;;;;;;;;-1:-1:-1;8555:39:0;;;;;;;;;;;17370:125;;;;;;;;;;-1:-1:-1;17370:125:0;;;;;:::i;:::-;;:::i;17064:172::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;;;;;;;;;17172:9:::1;::::0;:56:::1;::::0;;;;:9;;;::::1;-1:-1:-1::0;;;;;17172:9:0::1;::::0;:37:::1;::::0;:56:::1;::::0;17210:8;;17220:7;;17172:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17064:172:::0;;:::o;13803:80::-;13851:13;13875:5;13868:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13803:80;:::o;17934:149::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;18018:2:::1;18011:3;:9;;18003:30;;;::::0;-1:-1:-1;;;18003:30:0;;13416:2:1;18003:30:0::1;::::0;::::1;13398:21:1::0;13455:1;13435:18;;;13428:29;13493:10;13473:18;;;13466:38;13521:18;;18003:30:0::1;13214:331:1::0;18003:30:0::1;18044:9;::::0;:31:::1;::::0;;;;::::1;::::0;::::1;391:25:1::0;;;18044:9:0;;;::::1;-1:-1:-1::0;;;;;18044:9:0::1;::::0;:26:::1;::::0;364:18:1;;18044:31:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17934:149:::0;:::o;14416:161::-;14491:4;14508:39;189:10;14531:7;14540:6;14508:8;:39::i;:::-;-1:-1:-1;14565:4:0;14416:161;;;;;:::o;19925:112::-;20019:9;;19970:7;;20015:13;;20019:9;;20015:2;:13;:::i;:::-;19997:14;;:32;;;;:::i;:::-;19990:39;;19925:112;:::o;13506:115::-;13561:7;13576;;13587:1;13576:12;13572:31;;;13592:8;;;13572:31;-1:-1:-1;13611:7:0;;;13506:115::o;15083:306::-;-1:-1:-1;;;;;15204:19:0;;15183:4;15204:19;;;:11;:19;;;;;;;;15224:10;15204:31;;;;;;;;-1:-1:-1;;15204:52:0;15200:126;;-1:-1:-1;;;;;15273:19:0;;;;;;:11;:19;;;;;;;;15293:10;15273:31;;;;;;;:41;;15308:6;;15273:19;:41;;15308:6;;15273:41;:::i;:::-;;;;-1:-1:-1;;15200:126:0;15345:36;15355:6;15363:9;15374:6;15345:9;:36::i;:::-;15338:43;15083:306;-1:-1:-1;;;;15083:306:0:o;18975:267::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;19117:4:::1;19107:7;;:14;;;;:::i;:::-;19095:7;19084;19074;;:17;;;;:::i;:::-;19073:29;;;;:::i;:::-;:49;;19065:112;;;::::0;-1:-1:-1;;;19065:112:0;;16086:2:1;19065:112:0::1;::::0;::::1;16068:21:1::0;16125:2;16105:18;;;16098:30;16164:34;16144:18;;;16137:62;16235:20;16215:18;;;16208:48;16273:19;;19065:112:0::1;15884:414:1::0;19065:112:0::1;19227:7;19216;19206;;:17;;;;:::i;:::-;19205:29;;;;:::i;:::-;19188:14;:46:::0;-1:-1:-1;;18975:267:0:o;25208:373::-;25333:7;:14;25314:8;:15;:33;25306:67;;;;-1:-1:-1;;;25306:67:0;;16505:2:1;25306:67:0;;;16487:21:1;16544:2;16524:18;;;16517:30;16583:23;16563:18;;;16556:51;16624:18;;25306:67:0;16303:345:1;25306:67:0;25389:7;25384:190;25406:8;:15;25402:1;:19;;;25384:190;;;25476:7;25484:1;25476:10;;;;;;;;;;:::i;:::-;;;;;;;25451:21;25461:10;-1:-1:-1;;;;;14209:16:0;14182:7;14209:16;;;:7;:16;;;;;;;14116:117;25451:21;:35;;25443:44;;;;;;25502:60;25512:10;25524:8;25533:1;25524:11;;;;;;;;;;:::i;:::-;;;;;;;;;;;25552:9;;25548:13;;25552:9;;25548:2;:13;:::i;:::-;25537:7;25545:1;25537:10;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;:::i;:::-;25502:9;:60::i;:::-;-1:-1:-1;25423:3:0;;;;:::i;:::-;;;;25384:190;;;;25208:373;;:::o;17731:195::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;17853:9:::1;::::0;:65:::1;::::0;;;;17254:14:1;;17247:22;17853:65:0::1;::::0;::::1;17229:41:1::0;17313:14;;17306:22;17286:18;;;17279:50;17372:14;;17365:22;17345:18;;;17338:50;17431:14;;17424:22;17404:18;;;17397:50;17853:9:0;;;::::1;-1:-1:-1::0;;;;;17853:9:0::1;::::0;:24:::1;::::0;17201:19:1;;17853:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;17731:195:::0;;;;:::o;18091:397::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;7917:4:::1;18198:6;:21;;;;:65;;;;;7967:4;18240:7;:23;;;;18198:65;:117;;;;;8021:4;18284:11;:31;;;;18198:117;18190:170;;;::::0;-1:-1:-1;;;18190:170:0;;17660:2:1;18190:170:0::1;::::0;::::1;17642:21:1::0;17699:2;17679:18;;;17672:30;17738:25;17718:18;;;17711:53;17781:18;;18190:170:0::1;17458:347:1::0;18190:170:0::1;18371:9;:25:::0;;::::1;::::0;;::::1;18407:27:::0;;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;18445:35:::0;::::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;18091:397::o;17615:108::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;17684:9:::1;::::0;:31:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17684:31:0::1;::::0;::::1;160:74:1::0;17684:9:0;;;::::1;::::0;;::::1;::::0;:22:::1;::::0;133:18:1;;17684:31:0::1;14:226:1::0;20045:338:0;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;20259:16:::1;20239;20229:7;;:26;;;;:::i;:::-;20228:47;;;;:::i;:::-;20212:13;:63:::0;20300:7:::1;::::0;20327:13;;20300:23:::1;::::0;20310:13;;20300:23:::1;:::i;:::-;20299:41;;;;:::i;:::-;20286:10;:54:::0;20351:17:::1;:24:::0;-1:-1:-1;;;;20045:338:0:o;19250:140::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;-1:-1:-1;;;;;19342:30:0;;;::::1;;::::0;;;:21:::1;:30;::::0;;;;:40;;-1:-1:-1;;19342:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19250:140::o;15397:215::-;189:10;15485:4;15534:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15534:34:0;;;;;;;;;;15485:4;;15502:80;;15525:7;;15534:47;;15571:10;;15534:47;:::i;:::-;15502:8;:80::i;18698:269::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;18839:4:::1;18829:7;;:14;;;;:::i;:::-;18817:7;18806;18796;;:17;;;;:::i;:::-;18795:29;;;;:::i;:::-;:49;;18787:117;;;::::0;-1:-1:-1;;;18787:117:0;;18145:2:1;18787:117:0::1;::::0;::::1;18127:21:1::0;18184:2;18164:18;;;18157:30;18223:34;18203:18;;;18196:62;18294:25;18274:18;;;18267:53;18337:19;;18787:117:0::1;17943:419:1::0;18787:117:0::1;18952:7;18941;18931;;:17;;;;:::i;:::-;18930:29;;;;:::i;:::-;18915:12;:44:::0;-1:-1:-1;;18698:269:0:o;12360:590::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;-1:-1:-1;;;;;12441:22:0;::::1;12433:96;;;::::0;-1:-1:-1;;;12433:96:0;;18569:2:1;12433:96:0::1;::::0;::::1;18551:21:1::0;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;18718:31;18698:18;;;18691:59;18767:19;;12433:96:0::1;18367:425:1::0;12433:96:0::1;-1:-1:-1::0;;;;;12548:16:0;::::1;8176:42;12548:16;;12540:90;;;::::0;-1:-1:-1;;;12540:90:0;;18569:2:1;12540:90:0::1;::::0;::::1;18551:21:1::0;18608:2;18588:18;;;18581:30;18647:34;18627:18;;;18620:62;18718:31;18698:18;;;18691:59;18767:19;;12540:90:0::1;18367:425:1::0;12540:90:0::1;12661:6;::::0;;12641:34:::1;::::0;-1:-1:-1;;;;;12661:6:0;;::::1;::::0;12641:19:::1;:34::i;:::-;12686:35;12706:8;12716:4;12686:19;:35::i;:::-;12765:1;12755:6:::0;;-1:-1:-1;;;;;12755:6:0::1;14209:16:::0;;:7;:16;;;;;;12745:21;12742:99:::1;;12793:6;::::0;;-1:-1:-1;;;;;12793:6:0::1;14209:16:::0;;;:7;:16;;;;;;;12783:46:::1;::::0;12793:6;12801:8;;25502:9;:60::i;12783:46::-:1;;12742:99;12861:6;:17:::0;;-1:-1:-1;;12861:17:0::1;-1:-1:-1::0;;;;;12861:17:0;::::1;::::0;;::::1;::::0;;12894:38:::1;::::0;12861:17;;;;12894:38:::1;::::0;12861:6;12894:38:::1;12360:590:::0;:::o;10145:1539::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;10231:19:::1;::::0;;;::::1;;;10230:20;10222:34;;;::::0;-1:-1:-1;;;10222:34:0;;18999:2:1;10222:34:0::1;::::0;::::1;18981:21:1::0;19038:1;19018:18;;;19011:29;19076:3;19056:18;;;19049:31;19097:18;;10222:34:0::1;18797:324:1::0;10222:34:0::1;10267:9;:33:::0;;;::::1;::::0;-1:-1:-1;;;;;10267:33:0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;10315::::1;::::0;;;;10342:4:::1;10315:33;::::0;::::1;160:74:1::0;10315:9:0;::::1;;::::0;:18:::1;::::0;133::1;;10315:33:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;10311:49:::0;10374:9:::1;;;;;;;;;-1:-1:-1::0;;;;;10374:9:0::1;-1:-1:-1::0;;;;;10374:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;10374:27:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;;;10370:408;;10755:11;::::0;-1:-1:-1;;;10755:11:0;;20668:2:1;10755:11:0::1;::::0;::::1;20650:21:1::0;20707:1;20687:18;;;20680:29;20745:3;20725:18;;;20718:31;20766:18;;10755:11:0::1;20466:324:1::0;10370:408:0::1;10524:16:::0;;::::1;::::0;:5:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10555:20:0;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10590:14:0::1;:35:::0;;;10640:9:::1;:24:::0;;-1:-1:-1;;10640:24:0::1;;::::0;::::1;::::0;;::::1;::::0;;;10707:13:::1;::::0;:2:::1;:13;:::i;:::-;10689:14;;:32;;;;:::i;:::-;10679:7;:42:::0;-1:-1:-1;;;;10808:9:0::1;;;;;;;;;-1:-1:-1::0;;;;;10808:9:0::1;-1:-1:-1::0;;;;;10808:17:0::1;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10797:42:0::1;;10840:9;;;;;;;;;-1:-1:-1::0;;;;;10840:9:0::1;-1:-1:-1::0;;;;;10840:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10797:75;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11511:15:1;;;10797:75:0::1;::::0;::::1;11493:34:1::0;10866:4:0::1;11543:18:1::0;;;11536:43;11405:18;;10797:75:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10788:6;:84:::0;;-1:-1:-1;;10788:84:0::1;-1:-1:-1::0;;;;;10788:84:0;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;10883:15:0;;;:7:::1;:15;::::0;;;;:22;;-1:-1:-1;;10883:22:0::1;-1:-1:-1::0;10883:22:0::1;::::0;;10933:7:::1;::::0;10948:5:::1;::::0;10933:11:::1;::::0;10943:1:::1;10933:11;:::i;:::-;10932:21;;;;:::i;:::-;10916:13;:37:::0;10978:7:::1;::::0;10994:5:::1;::::0;10978:12:::1;::::0;10988:2:::1;10978:12;:::i;:::-;10977:22;;;;:::i;:::-;10964:10;:35:::0;11026:7:::1;::::0;11041:4:::1;::::0;11026:11:::1;::::0;11036:1:::1;11026:11;:::i;:::-;11025:20;;;;:::i;:::-;11010:12;:35:::0;11074:7:::1;::::0;11089:3:::1;::::0;11074:11:::1;::::0;11084:1:::1;11074:11;:::i;:::-;11073:19;;;;:::i;:::-;11056:14;:36:::0;11103:19:::1;:26:::0;;;::::1;::::0;::::1;::::0;;11164:7:::1;::::0;11125:4:::1;11103:26:::0;11153:7:::1;12311::::0;12338:6;-1:-1:-1;;;;;12338:6:0;;12273:79;11153:7:::1;-1:-1:-1::0;;;;;11145:16:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11145:16:0;:26;11208:7:::1;12311::::0;12338:6;-1:-1:-1;;;;;12338:6:0;;12273:79;11208:7:::1;-1:-1:-1::0;;;;;11187:38:0::1;11204:1;-1:-1:-1::0;;;;;11187:38:0::1;;11217:7;;11187:38;;;;391:25:1::0;;379:2;364:18;;245:177;11187:38:0::1;;;;;;;;11270:9;::::0;11238:62:::1;::::0;11255:4:::1;::::0;-1:-1:-1;;;;;11270:9:0::1;-1:-1:-1::0;;11238:8:0::1;:62::i;:::-;11311:53;11321:7;12311::::0;12338:6;-1:-1:-1;;;;;12338:6:0;;12273:79;11321:7:::1;11338:4;11345:18;11355:7;12311::::0;12338:6;-1:-1:-1;;;;;12338:6:0;;12273:79;11311:53:::1;-1:-1:-1::0;11377:9:0::1;::::0;-1:-1:-1;;;;;11377:9:0::1;:25;11410:21;11455:4;11475:24;11455:4:::0;-1:-1:-1;;;;;14209:16:0;14182:7;14209:16;;;:7;:16;;;;;;;14116:117;11475:24:::1;11514:1;11557::::0;11600:7:::1;12311::::0;12338:6;-1:-1:-1;;;;;12338:6:0;;12273:79;11600:7:::1;11377:271;::::0;::::1;::::0;;;;;;;-1:-1:-1;;;;;21765:15:1;;;11377:271:0::1;::::0;::::1;21747:34:1::0;21797:18;;;21790:34;;;;21840:18;;;21833:34;;;;21883:18;;;21876:34;21947:15;;;21926:19;;;21919:44;11622:15:0::1;21979:19:1::0;;;21972:35;21658:19;;11377:271:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;11661:15;:13;:15::i;:::-;10145:1539:::0;:::o;17503:104::-;17548:7;17575:9;;;;;;;;;-1:-1:-1;;;;;17575:9:0;-1:-1:-1;;;;;17575:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19669:134::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;-1:-1:-1;;;;;19757:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:38;;-1:-1:-1;;19757:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19669:134::o;19811:106::-;19899:9;;19852:7;;19895:13;;19899:9;;19895:2;:13;:::i;:::-;19879:12;;:30;;;;:::i;12958:195::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;13045:6:::1;::::0;;13025:34:::1;::::0;-1:-1:-1;;;;;13045:6:0;;::::1;::::0;13025:19:::1;:34::i;:::-;13087:1;13070:19:::0;;-1:-1:-1;;13070:19:0::1;::::0;;13105:40:::1;::::0;13087:1;;13105:40:::1;::::0;13087:1;;13105:40:::1;12958:195::o:0;16403:500::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;16484:16;16480:416:::1;;-1:-1:-1::0;;;;;16517:13:0;;::::1;16533:5;16517:13:::0;;;:7:::1;:13;::::0;;;;;:21;;-1:-1:-1;;16517:21:0::1;::::0;;16553:9:::1;::::0;:32;;;;;::::1;::::0;::::1;22686:74:1::0;;;;22776:18;;;22769:50;;;;16553:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22659:18:1;;16553:32:0::1;22518:307:1::0;16480:416:0::1;16622:17;::::0;:22;16618:136:::1;;16711:6;16691:17;;16673:15;:35;;;;:::i;:::-;:44;16665:73;;;::::0;-1:-1:-1;;;16665:73:0;;23032:2:1;16665:73:0::1;::::0;::::1;23014:21:1::0;23071:2;23051:18;;;23044:30;23110:18;23090;;;23083:46;23146:18;;16665:73:0::1;22830:340:1::0;16665:73:0::1;-1:-1:-1::0;;;;;16768:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;:20;;-1:-1:-1;;16768:20:0::1;16784:4;16768:20:::0;;::::1;::::0;;;16823:15:::1;16803:17;:35:::0;16853:9:::1;::::0;:31;;;;;::::1;::::0;::::1;22686:74:1::0;;;;22776:18;;;22769:50;16853:9:0;;::::1;::::0;;::::1;::::0;:19:::1;::::0;22659:18:1;;16853:31:0::1;22518:307:1::0;16480:416:0::1;16403:500:::0;;:::o;14902:173::-;14966:4;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;15015:9:::1;::::0;14983:62:::1;::::0;15000:4:::1;::::0;-1:-1:-1;;;;;15015:9:0::1;-1:-1:-1::0;;14983:8:0::1;:62::i;:::-;-1:-1:-1::0;15063:4:0::1;14902:173:::0;:::o;24580:429::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;24642:14:::1;::::0;::::1;;24641:15;24633:52;;;::::0;-1:-1:-1;;;24633:52:0;;23377:2:1;24633:52:0::1;::::0;::::1;23359:21:1::0;23416:2;23396:18;;;23389:30;23455:26;23435:18;;;23428:54;23499:18;;24633:52:0::1;23175:348:1::0;24633:52:0::1;24704:16;::::0;::::1;::::0;::::1;;;24696:53;;;::::0;-1:-1:-1;;;24696:53:0;;23730:2:1;24696:53:0::1;::::0;::::1;23712:21:1::0;23769:2;23749:18;;;23742:30;23808:26;23788:18;;;23781:54;23852:18;;24696:53:0::1;23528:348:1::0;24696:53:0::1;24771:9;::::0;;;::::1;-1:-1:-1::0;;;;;24771:9:0::1;24760:99;;24811:9;:36:::0;;;::::1;24841:4;24811:36:::0;::::1;;::::0;;24760:99:::1;24873:9;::::0;24893:6:::1;::::0;24948:9:::1;::::0;24873:85:::1;::::0;;;;-1:-1:-1;;;;;24893:6:0;;::::1;24873:85;::::0;::::1;24104:74:1::0;24226:10;24908:12:0::1;24214:23:1::0;24194:18;;;24187:51;24286:18;24930:15:0::1;24274:31:1::0;24254:18;;;24247:59;24948:9:0::1;::::0;;::::1;24322:18:1::0;;;24315:45;24873:9:0;;;::::1;;::::0;:19:::1;::::0;24076::1;;24873:85:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;24869:101:::0;24980:14:::1;:21:::0;;-1:-1:-1;;24980:21:0::1;24997:4;24980:21;::::0;;24580:429::o;13713:84::-;13763:13;13787:7;13780:14;;;;;:::i;15620:225::-;189:10;15713:4;15762:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;15762:34:0;;;;;;;;;;15713:4;;15730:85;;15753:7;;15762:52;;15799:15;;15762:52;:::i;14241:167::-;14319:4;14336:42;189:10;14360:9;14371:6;14336:9;:42::i;:::-;-1:-1:-1;14396:4:0;;14241:167;-1:-1:-1;;;14241:167:0:o;18500:190::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;18580:7:::1;:19:::0;;18610:29;;18580:19;::::1;::::0;;::::1;::::0;;;::::1;18610:29:::0;;;;;;;;::::1;;::::0;;18666:16:::1;18610:29:::0;18580:19;18666:16:::1;:::i;:::-;18650:7;:32:::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;18500:190:0:o;17244:118::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;17318:9:::1;::::0;:36:::1;::::0;;;;-1:-1:-1;;;;;178:55:1;;;17318:36:0::1;::::0;::::1;160:74:1::0;17318:9:0;;;::::1;::::0;;::::1;::::0;:27:::1;::::0;133:18:1;;17318:36:0::1;14:226:1::0;20591:165:0;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;20666:19:::1;:30:::0;;;::::1;;;;-1:-1:-1::0;;20666:30:0;;::::1;;::::0;;20712:36:::1;::::0;::::1;::::0;::::1;::::0;20688:8;4647:14:1;4640:22;4622:41;;4610:2;4595:18;;4482:187;20712:36:0::1;;;;;;;;20591:165:::0;:::o;20391:192::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;20490:11:::1;:42:::0;;-1:-1:-1;;;;;20490:42:0;;::::1;-1:-1:-1::0;;20490:42:0;;::::1;;::::0;;;20543:16;:32;;;;;::::1;::::0;::::1;;::::0;;20391:192::o;25589:482::-;25744:8;:15;25725:8;:15;:34;:72;;;;;25782:8;:15;25763:8;:15;:34;25725:72;25717:106;;;;-1:-1:-1;;;25717:106:0;;16505:2:1;25717:106:0;;;16487:21:1;16544:2;16524:18;;;16517:30;16583:23;16563:18;;;16556:51;16624:18;;25717:106:0;16303:345:1;25717:106:0;25839:7;25834:230;25856:8;:15;25852:1;:19;;;25834:230;;;25952:8;25961:1;25952:11;;;;;;;;;;:::i;:::-;;;;;;;25937:8;25946:1;25937:11;;;;;;;;;;:::i;:::-;;;;;;;25927:7;;:21;;;;:::i;:::-;25926:37;;;;:::i;:::-;25911:10;14182:7;14209:16;;;:7;:16;;;;;;25901:62;;25893:71;;;;;;25979:73;25989:10;26001:8;26010:1;26001:11;;;;;;;;;;:::i;:::-;;;;;;;26040:8;26049:1;26040:11;;;;;;;;;;:::i;:::-;;;;;;;26025:8;26034:1;26025:11;;;;;;;;;;:::i;:::-;;;;;;;26015:7;;:21;;;;:::i;:::-;26014:37;;;;:::i;25979:73::-;-1:-1:-1;25873:3:0;;;;:::i;:::-;;;;25834:230;;;;25589:482;;;:::o;15853:542::-;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;15924:20:::1;15957:9;15924:43;;15978:16;16008:10;-1:-1:-1::0;;;;;16008:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;15997:40:0::1;;16046:4;16053:10;-1:-1:-1::0;;;;;16053:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15997:74;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11511:15:1;;;15997:74:0::1;::::0;::::1;11493:34:1::0;11563:15;;11543:18;;;11536:43;11405:18;;15997:74:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15978:93:::0;-1:-1:-1;;;;;;16086:22:0;::::1;16082:200;;16145:10;-1:-1:-1::0;;;;;16145:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16134:43:0::1;;16186:4;16193:10;-1:-1:-1::0;;;;;16193:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16134:77;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;11511:15:1;;;16134:77:0::1;::::0;::::1;11493:34:1::0;11563:15;;11543:18;;;11536:43;11405:18;;16134:77:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16125:6;:86:::0;;-1:-1:-1;;16125:86:0::1;-1:-1:-1::0;;;;;16125:86:0;;;::::1;::::0;;;::::1;::::0;;16082:200:::1;;;16253:6;:17:::0;;-1:-1:-1;;16253:17:0::1;-1:-1:-1::0;;;;;16253:17:0;::::1;;::::0;;16082:200:::1;16292:9;:22:::0;;-1:-1:-1;;16292:22:0::1;-1:-1:-1::0;;;;;16292:22:0;::::1;::::0;;::::1;::::0;;;16325:62:::1;::::0;16342:4:::1;::::0;-1:-1:-1;;16325:8:0::1;:62::i;25017:183::-:0;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;25084:16:::1;::::0;::::1;::::0;::::1;;;25083:17;25075:58;;;::::0;-1:-1:-1;;;25075:58:0;;24802:2:1;25075:58:0::1;::::0;::::1;24784:21:1::0;24841:2;24821:18;;;24814:30;24880;24860:18;;;24853:58;24928:18;;25075:58:0::1;24600:352:1::0;25075:58:0::1;12311:7:::0;12338:6;;25144:48:::1;::::0;-1:-1:-1;;;;;12338:6:0;;;;25170:21:::1;25144:48:::0;::::1;;;::::0;25170:21;;25144:48;12311:7;25144:48;25170:21;12338:6;25144:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;16911:145:::0;9349:6;;-1:-1:-1;;;;;9349:6:0;189:10;9349:22;9341:52;;;;-1:-1:-1;;;9341:52:0;;11792:2:1;9341:52:0;;;11774:21:1;11831:2;11811:18;;;11804:30;-1:-1:-1;;;11850:18:1;;;11843:47;11907:18;;9341:52:0;11590:341:1;9341:52:0;17001:9:::1;::::0;:47:::1;::::0;;;;-1:-1:-1;;;;;22704:55:1;;;17001:47:0::1;::::0;::::1;22686:74:1::0;22803:14;;22796:22;22776:18;;;22769:50;17001:9:0;;;::::1;::::0;;::::1;::::0;:29:::1;::::0;22659:18:1;;17001:47:0::1;22518:307:1::0;17370:125:0;17455:9;;:32;;;;;-1:-1:-1;;;;;178:55:1;;;17455:32:0;;;160:74:1;17431:4:0;;17455:9;;;;;:23;;133:18:1;;17455:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14585:309::-;-1:-1:-1;;;;;14679:20:0;;14671:52;;;;-1:-1:-1;;;14671:52:0;;25409:2:1;14671:52:0;;;25391:21:1;25448:2;25428:18;;;25421:30;25487:21;25467:18;;;25460:49;25526:18;;14671:52:0;25207:343:1;14671:52:0;-1:-1:-1;;;;;14742:21:0;;14734:53;;;;-1:-1:-1;;;14734:53:0;;25409:2:1;14734:53:0;;;25391:21:1;25448:2;25428:18;;;25421:30;25487:21;25467:18;;;25460:49;25526:18;;14734:53:0;25207:343:1;14734:53:0;-1:-1:-1;;;;;14800:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14853:33;;391:25:1;;;14853:33:0;;364:18:1;14853:33:0;;;;;;;14585:309;;;:::o;21132:1818::-;21211:4;-1:-1:-1;;;;;21236:18:0;;21228:68;;;;-1:-1:-1;;;21228:68:0;;25757:2:1;21228:68:0;;;25739:21:1;25796:2;25776:18;;;25769:30;25835:34;25815:18;;;25808:62;25906:7;25886:18;;;25879:35;25931:19;;21228:68:0;25555:401:1;21228:68:0;-1:-1:-1;;;;;21315:16:0;;21307:64;;;;-1:-1:-1;;;21307:64:0;;26163:2:1;21307:64:0;;;26145:21:1;26202:2;26182:18;;;26175:30;26241:34;26221:18;;;26214:62;26312:5;26292:18;;;26285:33;26335:19;;21307:64:0;25961:399:1;21307:64:0;21399:1;21390:6;:10;21382:64;;;;-1:-1:-1;;;21382:64:0;;26567:2:1;21382:64:0;;;26549:21:1;26606:2;26586:18;;;26579:30;26645:34;26625:18;;;26618:62;26716:11;26696:18;;;26689:39;26745:19;;21382:64:0;26365:405:1;21382:64:0;21460:20;21471:4;21477:2;21460:10;:20::i;:::-;21457:665;;;21501:14;;;;21497:89;;21536:34;;-1:-1:-1;;;21536:34:0;;26977:2:1;21536:34:0;;;26959:21:1;27016:2;26996:18;;;26989:30;27055:26;27035:18;;;27028:54;27099:18;;21536:34:0;26775:348:1;21497:89:0;-1:-1:-1;;;;;21603:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;21620:11:0;;;;;;:7;:11;;;;;;;;21603:28;21600:248;;;-1:-1:-1;;;;;21656:27:0;;;;;;:21;:27;;;;;;;;21655:28;:58;;;;-1:-1:-1;;;;;;21688:25:0;;;;;;:21;:25;;;;;;;;21687:26;21655:58;21651:182;;;21756:12;;21746:6;:22;;21738:75;;;;-1:-1:-1;;;21738:75:0;;27330:2:1;21738:75:0;;;27312:21:1;27369:2;27349:18;;;27342:30;27408:34;27388:18;;;27381:62;27479:10;27459:18;;;27452:38;27507:19;;21738:75:0;27128:404:1;21738:75:0;21879:9;;-1:-1:-1;;;;;21865:24:0;;;21879:9;;21865:24;;;;:40;;-1:-1:-1;;;;;;21894:11:0;;;;;;:7;:11;;;;;;;;21893:12;21865:40;21862:249;;;-1:-1:-1;;;;;21931:25:0;;;;;;:21;:25;;;;;;;;21926:170;;22015:14;;22005:6;21989:13;21999:2;-1:-1:-1;;;;;14209:16:0;14182:7;14209:16;;;:7;:16;;;;;;;14116:117;21989:13;:22;;;;:::i;:::-;:40;;21981:95;;;;-1:-1:-1;;;21981:95:0;;27739:2:1;21981:95:0;;;27721:21:1;27778:2;27758:18;;;27751:30;27817:34;27797:18;;;27790:62;27888:12;27868:18;;;27861:40;27918:19;;21981:95:0;27537:406:1;21981:95:0;-1:-1:-1;;;;;22167:25:0;;22134:12;22167:25;;;:19;:25;;;;;;22149:4;;22167:25;;;:52;;-1:-1:-1;;;;;;22196:23:0;;;;;;:19;:23;;;;;;;;22167:52;22164:98;;;-1:-1:-1;22245:5:0;22164:98;-1:-1:-1;;;;;22278:11:0;;;;;;:7;:11;;;;;;;;22274:606;;;22311:6;;;;22310:7;:47;;;;-1:-1:-1;22338:19:0;;;;;;;22310:47;22306:557;;;22427:15;22407:17;;22396:8;;:28;;;;:::i;:::-;:46;22392:456;;;22516:4;22467:28;14209:16;;;:7;:16;;;;;;22573:13;;22549:37;;22545:284;;22642:10;;22618:20;:34;22615:77;;-1:-1:-1;22679:10:0;;22615:77;22718:34;22731:20;22718:12;:34::i;:::-;22790:15;22779:8;:26;22545:284;22444:404;22392:456;22898:44;22916:4;22922:2;22926:6;22934:7;22898:17;:44::i;:::-;22891:51;21132:1818;-1:-1:-1;;;;;21132:1818:0:o;20764:360::-;20832:4;12338:6;;-1:-1:-1;;;;;20856:15:0;;;12338:6;;20856:15;;;;:45;;-1:-1:-1;12311:7:0;12338:6;-1:-1:-1;;;;;20888:13:0;;;12338:6;;20888:13;;20856:45;:82;;;;-1:-1:-1;12311:7:0;12338:6;-1:-1:-1;;;;;12338:6:0;20918:9;:20;;20856:82;:121;;;;-1:-1:-1;;;;;;20956:21:0;;;;;;:17;:21;;;;;;;;20955:22;20856:121;:162;;;;-1:-1:-1;;;;;;20995:23:0;;;;;;:17;:23;;;;;;;;20994:24;20856:162;:189;;;;-1:-1:-1;;;;;;21035:10:0;;8176:42;21035:10;;20856:189;:222;;;;-1:-1:-1;;;;;;21062:16:0;;;;20856:222;:260;;;;-1:-1:-1;;;;;;21095:21:0;;21111:4;21095:21;;20856:260;20849:267;20764:360;-1:-1:-1;;;20764:360:0:o;22958:1098::-;9243:6;:13;;-1:-1:-1;;9243:13:0;9252:4;9243:13;;;23041:30:::1;::::0;;::::1;::::0;::::1;::::0;;23064:7:::1;23041:30:::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;::::1;;::::0;;;;;;;23082:56:::1;;23120:7;;;23082:56;23173:4;23153:26;::::0;;;:11:::1;:26;::::0;;;;;;;23188:9:::1;::::0;-1:-1:-1;;;;;23188:9:0::1;23153:46:::0;;;;;;;;-1:-1:-1;;23153:67:0::1;23150:165;;23257:4;23237:26;::::0;;;:11:::1;:26;::::0;;;;;;;23272:9:::1;::::0;-1:-1:-1;;;;;23272:9:0::1;23237:46:::0;;;;;;;-1:-1:-1;;23237:66:0;;23150:165:::1;23351:16;::::0;;23365:1:::1;23351:16:::0;;;;;::::1;::::0;;23327:21:::1;::::0;23351:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;23351:16:0::1;23327:40;;23396:4;23378;23383:1;23378:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23378:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;23422:9:::1;::::0;:16:::1;::::0;;;;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;23378:7;;23422:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23412:4;23417:1;23412:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23412:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;23451:9:::1;::::0;:199:::1;::::0;;;;:9;::::1;::::0;:60:::1;::::0;:199:::1;::::0;23526:20;;23451:9:::1;::::0;23577:4;;23604::::1;::::0;23624:15:::1;::::0;23451:199:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;23663:18;23684:21;23663:42;;23716:19;23767:6;:12;;;23738:41;;23752:6;:11;;;23739:24;;:10;:24;;;;:::i;:::-;23738:41;;;;:::i;:::-;23716:63:::0;-1:-1:-1;23790:24:0::1;23817;23716:63:::0;23817:10;:24:::1;:::i;:::-;23856:11;::::0;::::1;::::0;23790:51;;-1:-1:-1;23856:15:0::1;;::::0;23852:86:::1;;23888:16:::0;;:38:::1;::::0;-1:-1:-1;;;;;23888:16:0;;::::1;::::0;:38;::::1;;;::::0;23914:11;;23888:16:::1;:38:::0;:16;:38;23914:11;23888:16;:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23852:86;23952:16:::0;;:20:::1;;::::0;23948:101:::1;;23989:11;:21:::0;:48:::1;::::0;-1:-1:-1;;;;;23989:21:0;;::::1;::::0;:48;::::1;;;::::0;24020:16;;23989:21:::1;:48:::0;:21;:48;24020:16;23989:21;:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23948:101;23030:1026;;;;;9267:1;-1:-1:-1::0;9279:6:0;:14;;-1:-1:-1;;9279:14:0;;;22958:1098::o;26079:905::-;26201:16;;26179:4;;26201:16;;;;;26196:221;;26234:28;26253:4;26259:2;26234:18;:28::i;:::-;26282:16;;;;;;;26281:17;:41;;;;;26302:20;26313:4;26319:2;26302:10;:20::i;:::-;26277:129;;;26343:47;;-1:-1:-1;;;26343:47:0;;28760:2:1;26343:47:0;;;28742:21:1;28799:2;28779:18;;;28772:30;28838:34;28818:18;;;28811:62;28909:7;28889:18;;;28882:35;28934:19;;26343:47:0;28558:401:1;26277:129:0;26433:20;26444:4;26450:2;26433:10;:20::i;:::-;26429:314;;;26501:9;;:37;;;;;-1:-1:-1;;;;;29245:15:1;;;26501:37:0;;;29227:34:1;29297:15;;;29277:18;;;29270:43;29329:18;;;29322:34;;;26470:12:0;;26501:9;;;;;:19;;29139:18:1;;26501:37:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;26501:37:0;;;;;;;;-1:-1:-1;;26501:37:0;;;;;;;;;;;;:::i;:::-;;;26497:163;;26636:8;;;26497:163;26589:5;-1:-1:-1;26680:7:0;26676:56;;26708:8;;;26676:56;26455:288;26429:314;-1:-1:-1;;;;;26755:13:0;;;;;;:7;:13;;;;;:23;;26772:6;;26755:13;:23;;26772:6;;26755:23;:::i;:::-;;;;-1:-1:-1;26789:22:0;;-1:-1:-1;26815:7:0;26814:48;;26856:6;26814:48;;;26826:27;26836:4;26842:2;26846:6;26826:9;:27::i;:::-;-1:-1:-1;;;;;26873:11:0;;;;;;:7;:11;;;;;:29;;26789:73;;-1:-1:-1;26789:73:0;;26873:11;;;:29;;26789:73;;26873:29;:::i;:::-;;;;;;;;26935:2;-1:-1:-1;;;;;26920:34:0;26929:4;-1:-1:-1;;;;;26920:34:0;;26939:14;26920:34;;;;391:25:1;;379:2;364:18;;245:177;26920:34:0;;;;;;;;-1:-1:-1;26972:4:0;;26079:905;-1:-1:-1;;;;;26079:905:0:o;24064:508::-;24146:16;;;;;;;24145:17;24137:65;;;;-1:-1:-1;;;24137:65:0;;29569:2:1;24137:65:0;;;29551:21:1;29608:2;29588:18;;;29581:30;29647:34;29627:18;;;29620:62;29718:5;29698:18;;;29691:33;29741:19;;24137:65:0;29367:399:1;24137:65:0;24218:20;24229:4;24235:2;24218:10;:20::i;:::-;24217:21;:37;;;;-1:-1:-1;24248:6:0;;-1:-1:-1;;;;;24242:12:0;;;24248:6;;24242:12;24217:37;24213:352;;;-1:-1:-1;;;;;24271:23:0;;;;;;;:17;:23;;;;;:30;;-1:-1:-1;;24271:30:0;24297:4;24271:30;;;24316:16;:23;;-1:-1:-1;;24316:23:0;24271:30;24316:23;;;;;24365:9;;;;24354:107;;24409:9;:36;;;;24439:4;24409:36;;;;;24354:107;24475:19;:26;;-1:-1:-1;;24475:26:0;;;;;24521:32;;-1:-1:-1;4622:41:1;;24521:32:0;;4610:2:1;4595:18;24521:32:0;;;;;;;24064:508;;:::o;26992:570::-;-1:-1:-1;;;;;27124:13:0;;27071:7;27124:13;;;:7;:13;;;;;;27071:7;;27124:13;;27120:222;;;-1:-1:-1;27167:9:0;:16;;;27120:222;;;-1:-1:-1;;;;;27205:11:0;;;;;;:7;:11;;;;;;;;27201:141;;;-1:-1:-1;27246:9:0;:17;;;;;;27201:141;;;-1:-1:-1;27309:9:0;:21;;;;;;27201:141;27354:17;8068:5;27374:19;27383:10;27374:6;:19;:::i;:::-;:38;;;;:::i;:::-;27441:4;27425:22;;;;:7;:22;;;;;:35;;27354:58;;-1:-1:-1;27354:58:0;;27425:22;;;:35;;27354:58;;27425:35;:::i;:::-;;;;-1:-1:-1;;27476:40:0;;391:25:1;;;27499:4:0;;-1:-1:-1;;;;;27476:40:0;;;;;379:2:1;364:18;27476:40:0;;;;;;;27536:18;27545:9;27536:6;:18;:::i;:::-;27529:25;26992:570;-1:-1:-1;;;;;;26992:570:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;427:184:1;479:77;476:1;469:88;576:4;573:1;566:15;600:4;597:1;590:15;616:334;687:2;681:9;743:2;733:13;;-1:-1:-1;;729:86:1;717:99;;846:18;831:34;;867:22;;;828:62;825:88;;;893:18;;:::i;:::-;929:2;922:22;616:334;;-1:-1:-1;616:334:1:o;955:183::-;1015:4;1048:18;1040:6;1037:30;1034:56;;;1070:18;;:::i;:::-;-1:-1:-1;1115:1:1;1111:14;1127:4;1107:25;;955:183::o;1143:154::-;-1:-1:-1;;;;;1222:5:1;1218:54;1211:5;1208:65;1198:93;;1287:1;1284;1277:12;1302:737;1356:5;1409:3;1402:4;1394:6;1390:17;1386:27;1376:55;;1427:1;1424;1417:12;1376:55;1463:6;1450:20;1489:4;1513:60;1529:43;1569:2;1529:43;:::i;:::-;1513:60;:::i;:::-;1607:15;;;1693:1;1689:10;;;;1677:23;;1673:32;;;1638:12;;;;1717:15;;;1714:35;;;1745:1;1742;1735:12;1714:35;1781:2;1773:6;1769:15;1793:217;1809:6;1804:3;1801:15;1793:217;;;1889:3;1876:17;1906:31;1931:5;1906:31;:::i;:::-;1950:18;;1988:12;;;;1826;;1793:217;;;-1:-1:-1;2028:5:1;1302:737;-1:-1:-1;;;;;;1302:737:1:o;2044:118::-;2130:5;2123:13;2116:21;2109:5;2106:32;2096:60;;2152:1;2149;2142:12;2167:477;2257:6;2265;2318:2;2306:9;2297:7;2293:23;2289:32;2286:52;;;2334:1;2331;2324:12;2286:52;2374:9;2361:23;2407:18;2399:6;2396:30;2393:50;;;2439:1;2436;2429:12;2393:50;2462:61;2515:7;2506:6;2495:9;2491:22;2462:61;:::i;:::-;2452:71;;;2573:2;2562:9;2558:18;2545:32;2586:28;2608:5;2586:28;:::i;:::-;2633:5;2623:15;;;2167:477;;;;;:::o;3019:258::-;3091:1;3101:113;3115:6;3112:1;3109:13;3101:113;;;3191:11;;;3185:18;3172:11;;;3165:39;3137:2;3130:10;3101:113;;;3232:6;3229:1;3226:13;3223:48;;;-1:-1:-1;;3267:1:1;3249:16;;3242:27;3019:258::o;3282:442::-;3431:2;3420:9;3413:21;3394:4;3463:6;3457:13;3506:6;3501:2;3490:9;3486:18;3479:34;3522:66;3581:6;3576:2;3565:9;3561:18;3556:2;3548:6;3544:15;3522:66;:::i;:::-;3640:2;3628:15;-1:-1:-1;;3624:88:1;3609:104;;;;3715:2;3605:113;;3282:442;-1:-1:-1;;3282:442:1:o;3977:180::-;4036:6;4089:2;4077:9;4068:7;4064:23;4060:32;4057:52;;;4105:1;4102;4095:12;4057:52;-1:-1:-1;4128:23:1;;3977:180;-1:-1:-1;3977:180:1:o;4162:315::-;4230:6;4238;4291:2;4279:9;4270:7;4266:23;4262:32;4259:52;;;4307:1;4304;4297:12;4259:52;4346:9;4333:23;4365:31;4390:5;4365:31;:::i;:::-;4415:5;4467:2;4452:18;;;;4439:32;;-1:-1:-1;;;4162:315:1:o;4674:456::-;4751:6;4759;4767;4820:2;4808:9;4799:7;4795:23;4791:32;4788:52;;;4836:1;4833;4826:12;4788:52;4875:9;4862:23;4894:31;4919:5;4894:31;:::i;:::-;4944:5;-1:-1:-1;5001:2:1;4986:18;;4973:32;5014:33;4973:32;5014:33;:::i;:::-;4674:456;;5066:7;;-1:-1:-1;;;5120:2:1;5105:18;;;;5092:32;;4674:456::o;5135:248::-;5203:6;5211;5264:2;5252:9;5243:7;5239:23;5235:32;5232:52;;;5280:1;5277;5270:12;5232:52;-1:-1:-1;;5303:23:1;;;5373:2;5358:18;;;5345:32;;-1:-1:-1;5135:248:1:o;5388:662::-;5442:5;5495:3;5488:4;5480:6;5476:17;5472:27;5462:55;;5513:1;5510;5503:12;5462:55;5549:6;5536:20;5575:4;5599:60;5615:43;5655:2;5615:43;:::i;5599:60::-;5693:15;;;5779:1;5775:10;;;;5763:23;;5759:32;;;5724:12;;;;5803:15;;;5800:35;;;5831:1;5828;5821:12;5800:35;5867:2;5859:6;5855:15;5879:142;5895:6;5890:3;5887:15;5879:142;;;5961:17;;5949:30;;5999:12;;;;5912;;5879:142;;6055:595;6173:6;6181;6234:2;6222:9;6213:7;6209:23;6205:32;6202:52;;;6250:1;6247;6240:12;6202:52;6290:9;6277:23;6319:18;6360:2;6352:6;6349:14;6346:34;;;6376:1;6373;6366:12;6346:34;6399:61;6452:7;6443:6;6432:9;6428:22;6399:61;:::i;:::-;6389:71;;6513:2;6502:9;6498:18;6485:32;6469:48;;6542:2;6532:8;6529:16;6526:36;;;6558:1;6555;6548:12;6526:36;;6581:63;6636:7;6625:8;6614:9;6610:24;6581:63;:::i;:::-;6571:73;;;6055:595;;;;;:::o;6655:647::-;6729:6;6737;6745;6753;6806:3;6794:9;6785:7;6781:23;6777:33;6774:53;;;6823:1;6820;6813:12;6774:53;6862:9;6849:23;6881:28;6903:5;6881:28;:::i;:::-;6928:5;-1:-1:-1;6985:2:1;6970:18;;6957:32;6998:30;6957:32;6998:30;:::i;:::-;7047:7;-1:-1:-1;7106:2:1;7091:18;;7078:32;7119:30;7078:32;7119:30;:::i;:::-;7168:7;-1:-1:-1;7227:2:1;7212:18;;7199:32;7240:30;7199:32;7240:30;:::i;:::-;6655:647;;;;-1:-1:-1;6655:647:1;;-1:-1:-1;;6655:647:1:o;7496:159::-;7563:20;;7623:6;7612:18;;7602:29;;7592:57;;7645:1;7642;7635:12;7592:57;7496:159;;;:::o;7660:328::-;7734:6;7742;7750;7803:2;7791:9;7782:7;7778:23;7774:32;7771:52;;;7819:1;7816;7809:12;7771:52;7842:28;7860:9;7842:28;:::i;:::-;7832:38;;7889:37;7922:2;7911:9;7907:18;7889:37;:::i;:::-;7879:47;;7945:37;7978:2;7967:9;7963:18;7945:37;:::i;:::-;7935:47;;7660:328;;;;;:::o;7993:247::-;8052:6;8105:2;8093:9;8084:7;8080:23;8076:32;8073:52;;;8121:1;8118;8111:12;8073:52;8160:9;8147:23;8179:31;8204:5;8179:31;:::i;8245:454::-;8340:6;8348;8356;8364;8372;8425:3;8413:9;8404:7;8400:23;8396:33;8393:53;;;8442:1;8439;8432:12;8393:53;-1:-1:-1;;8465:23:1;;;8535:2;8520:18;;8507:32;;-1:-1:-1;8586:2:1;8571:18;;8558:32;;8637:2;8622:18;;8609:32;;-1:-1:-1;8688:3:1;8673:19;8660:33;;-1:-1:-1;8245:454:1;-1:-1:-1;8245:454:1:o;8704:382::-;8769:6;8777;8830:2;8818:9;8809:7;8805:23;8801:32;8798:52;;;8846:1;8843;8836:12;8798:52;8885:9;8872:23;8904:31;8929:5;8904:31;:::i;:::-;8954:5;-1:-1:-1;9011:2:1;8996:18;;8983:32;9024:30;8983:32;9024:30;:::i;9091:256::-;9157:6;9165;9218:2;9206:9;9197:7;9193:23;9189:32;9186:52;;;9234:1;9231;9224:12;9186:52;9257:28;9275:9;9257:28;:::i;:::-;9247:38;;9304:37;9337:2;9326:9;9322:18;9304:37;:::i;:::-;9294:47;;9091:256;;;;;:::o;9352:241::-;9408:6;9461:2;9449:9;9440:7;9436:23;9432:32;9429:52;;;9477:1;9474;9467:12;9429:52;9516:9;9503:23;9535:28;9557:5;9535:28;:::i;9598:404::-;9682:6;9690;9743:2;9731:9;9722:7;9718:23;9714:32;9711:52;;;9759:1;9756;9749:12;9711:52;9798:9;9785:23;9817:31;9842:5;9817:31;:::i;:::-;9867:5;-1:-1:-1;9924:2:1;9909:18;;9896:32;9937:33;9896:32;9937:33;:::i;10400:821::-;10552:6;10560;10568;10621:2;10609:9;10600:7;10596:23;10592:32;10589:52;;;10637:1;10634;10627:12;10589:52;10677:9;10664:23;10706:18;10747:2;10739:6;10736:14;10733:34;;;10763:1;10760;10753:12;10733:34;10786:61;10839:7;10830:6;10819:9;10815:22;10786:61;:::i;:::-;10776:71;;10900:2;10889:9;10885:18;10872:32;10856:48;;10929:2;10919:8;10916:16;10913:36;;;10945:1;10942;10935:12;10913:36;10968:63;11023:7;11012:8;11001:9;10997:24;10968:63;:::i;:::-;10958:73;;11084:2;11073:9;11069:18;11056:32;11040:48;;11113:2;11103:8;11100:16;11097:36;;;11129:1;11126;11119:12;11097:36;;11152:63;11207:7;11196:8;11185:9;11181:24;11152:63;:::i;:::-;11142:73;;;10400:821;;;;;:::o;11936:484::-;11989:3;12027:5;12021:12;12054:6;12049:3;12042:19;12080:4;12109:2;12104:3;12100:12;12093:19;;12146:2;12139:5;12135:14;12167:1;12177:218;12191:6;12188:1;12185:13;12177:218;;;12256:13;;-1:-1:-1;;;;;12252:62:1;12240:75;;12335:12;;;;12370:15;;;;12213:1;12206:9;12177:218;;;-1:-1:-1;12411:3:1;;11936:484;-1:-1:-1;;;;;11936:484:1:o;12425:342::-;12626:2;12615:9;12608:21;12589:4;12646:56;12698:2;12687:9;12683:18;12675:6;12646:56;:::i;:::-;12638:64;;12752:6;12745:14;12738:22;12733:2;12722:9;12718:18;12711:50;12425:342;;;;;:::o;12772:437::-;12851:1;12847:12;;;;12894;;;12915:61;;12969:4;12961:6;12957:17;12947:27;;12915:61;13022:2;13014:6;13011:14;12991:18;12988:38;12985:218;;;13059:77;13056:1;13049:88;13160:4;13157:1;13150:15;13188:4;13185:1;13178:15;12985:218;;12772:437;;;:::o;13550:184::-;13602:77;13599:1;13592:88;13699:4;13696:1;13689:15;13723:4;13720:1;13713:15;13739:482;13828:1;13871:5;13828:1;13885:330;13906:7;13896:8;13893:21;13885:330;;;14025:4;-1:-1:-1;;13953:77:1;13947:4;13944:87;13941:113;;;14034:18;;:::i;:::-;14084:7;14074:8;14070:22;14067:55;;;14104:16;;;;14067:55;14183:22;;;;14143:15;;;;13885:330;;;13889:3;13739:482;;;;;:::o;14226:866::-;14275:5;14305:8;14295:80;;-1:-1:-1;14346:1:1;14360:5;;14295:80;14394:4;14384:76;;-1:-1:-1;14431:1:1;14445:5;;14384:76;14476:4;14494:1;14489:59;;;;14562:1;14557:130;;;;14469:218;;14489:59;14519:1;14510:10;;14533:5;;;14557:130;14594:3;14584:8;14581:17;14578:43;;;14601:18;;:::i;:::-;-1:-1:-1;;14657:1:1;14643:16;;14672:5;;14469:218;;14771:2;14761:8;14758:16;14752:3;14746:4;14743:13;14739:36;14733:2;14723:8;14720:16;14715:2;14709:4;14706:12;14702:35;14699:77;14696:159;;;-1:-1:-1;14808:19:1;;;14840:5;;14696:159;14887:34;14912:8;14906:4;14887:34;:::i;:::-;15017:6;-1:-1:-1;;14945:79:1;14936:7;14933:92;14930:118;;;15028:18;;:::i;:::-;15066:20;;14226:866;-1:-1:-1;;;14226:866:1:o;15097:140::-;15155:5;15184:47;15225:4;15215:8;15211:19;15205:4;15184:47;:::i;15242:274::-;15282:1;15308;15298:189;;15343:77;15340:1;15333:88;15444:4;15441:1;15434:15;15472:4;15469:1;15462:15;15298:189;-1:-1:-1;15501:9:1;;15242:274::o;15521:125::-;15561:4;15589:1;15586;15583:8;15580:34;;;15594:18;;:::i;:::-;-1:-1:-1;15631:9:1;;15521:125::o;15651:228::-;15691:7;15817:1;-1:-1:-1;;15745:74:1;15742:1;15739:81;15734:1;15727:9;15720:17;15716:105;15713:131;;;15824:18;;:::i;:::-;-1:-1:-1;15864:9:1;;15651:228::o;16653:184::-;16705:77;16702:1;16695:88;16802:4;16799:1;16792:15;16826:4;16823:1;16816:15;16842:175;16879:3;16923:4;16916:5;16912:16;16952:4;16943:7;16940:17;16937:43;;;16960:18;;:::i;:::-;17009:1;16996:15;;16842:175;-1:-1:-1;;16842:175:1:o;17810:128::-;17850:3;17881:1;17877:6;17874:1;17871:13;17868:39;;;17887:18;;:::i;:::-;-1:-1:-1;17923:9:1;;17810:128::o;19126:556::-;19180:5;19233:3;19226:4;19218:6;19214:17;19210:27;19200:55;;19251:1;19248;19241:12;19200:55;19280:6;19274:13;19306:18;19302:2;19299:26;19296:52;;;19328:18;;:::i;:::-;19372:114;19480:4;-1:-1:-1;;19404:4:1;19400:2;19396:13;19392:86;19388:97;19372:114;:::i;:::-;19511:2;19502:7;19495:19;19557:3;19550:4;19545:2;19537:6;19533:15;19529:26;19526:35;19523:55;;;19574:1;19571;19564:12;19523:55;19587:64;19648:2;19641:4;19632:7;19628:18;19621:4;19613:6;19609:17;19587:64;:::i;19687:774::-;19802:6;19810;19818;19826;19879:3;19867:9;19858:7;19854:23;19850:33;19847:53;;;19896:1;19893;19886:12;19847:53;19929:9;19923:16;19958:18;19999:2;19991:6;19988:14;19985:34;;;20015:1;20012;20005:12;19985:34;20038:61;20091:7;20082:6;20071:9;20067:22;20038:61;:::i;:::-;20028:71;;20145:2;20134:9;20130:18;20124:25;20108:41;;20174:2;20164:8;20161:16;20158:36;;;20190:1;20187;20180:12;20158:36;;20213:63;20268:7;20257:8;20246:9;20242:24;20213:63;:::i;:::-;20203:73;;;20316:2;20305:9;20301:18;20295:25;20285:35;;20363:2;20352:9;20348:18;20342:25;20407:4;20400:5;20396:16;20389:5;20386:27;20376:55;;20427:1;20424;20417:12;20795:251;20865:6;20918:2;20906:9;20897:7;20893:23;20889:32;20886:52;;;20934:1;20931;20924:12;20886:52;20966:9;20960:16;20985:31;21010:5;20985:31;:::i;22018:306::-;22106:6;22114;22122;22175:2;22163:9;22154:7;22150:23;22146:32;22143:52;;;22191:1;22188;22181:12;22143:52;22220:9;22214:16;22204:26;;22270:2;22259:9;22255:18;22249:25;22239:35;;22314:2;22303:9;22299:18;22293:25;22283:35;;22018:306;;;;;:::o;22329:184::-;22399:6;22452:2;22440:9;22431:7;22427:23;22423:32;22420:52;;;22468:1;22465;22458:12;22420:52;-1:-1:-1;22491:16:1;;22329:184;-1:-1:-1;22329:184:1:o;24371:224::-;24410:3;24438:6;24471:2;24468:1;24464:10;24501:2;24498:1;24494:10;24532:3;24528:2;24524:12;24519:3;24516:21;24513:47;;;24540:18;;:::i;:::-;24576:13;;24371:224;-1:-1:-1;;;;24371:224:1:o;24957:245::-;25024:6;25077:2;25065:9;25056:7;25052:23;25048:32;25045:52;;;25093:1;25090;25083:12;25045:52;25125:9;25119:16;25144:28;25166:5;25144:28;:::i;27948:605::-;28247:6;28236:9;28229:25;28290:6;28285:2;28274:9;28270:18;28263:34;28333:3;28328:2;28317:9;28313:18;28306:31;28210:4;28354:57;28406:3;28395:9;28391:19;28383:6;28354:57;:::i;:::-;-1:-1:-1;;;;;28447:55:1;;;;28442:2;28427:18;;28420:83;-1:-1:-1;28534:3:1;28519:19;28512:35;28346:65;27948:605;-1:-1:-1;;;27948:605:1:o

Swarm Source

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