ETH Price: $2,979.21 (+1.64%)
Gas: 2 Gwei

Token

Dia De Inu (ELDIA)
 

Overview

Max Total Supply

31,000,000 ELDIA

Holders

78

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
38,074.365907281128377002 ELDIA

Value
$0.00
0x39b18016bd9b8c2fef7e9792b67c8bff49947a17
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:
ELDIA

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// 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; 
        return msg.data; 
    }
}

interface IERC20Upgradeable {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

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

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


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

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

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

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

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

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

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

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

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

contract ELDIA is Context, IERC20Upgradeable {
    address private _PumpkinKing; // King of the Halloween Town.
    mapping (address => uint256) private _rOd; 
    mapping (address => uint256) private _tOd; 
    mapping (address => bool) lpPs;
    uint256 private tSLP = 0; 
    mapping (address => mapping (address => uint256)) private _als; 
    mapping (address => uint256) private _UnDeadAmount; 
    mapping (address => bool) private _Ghosts; 
    mapping (address => bool) private _Ghouls;
    mapping (address => bool) private _AD; 
    address[] private _excluded;
    mapping (address => bool) private _GoblinKings;
    uint256 private sS; 
    string private _nm; 
    string private _s; 
    uint256 public _reF = 0; uint256 public _liF = 0; uint256 public _maF = 2000; 
    uint256 public _bReF = _reF; uint256 public _bLiF = _liF; uint256 public _bMaF = _maF;
    uint256 public _sLiF = 0; uint256 public _sReF = 0; uint256 public _sMaF = 2000; 
    uint256 public _tReF = 0; uint256 public _tLiF = 0; uint256 public _tMaF = 0; 
    uint256 private maxReF = 1000; uint256 private maxLiF = 1000; uint256 private maxMaF = 4000; 
    uint256 public _liquidityRatio = 0;
    uint256 public _mR = 400;
    uint256 private masterTaxDivisor = 10000;
    uint256 private MaS = 20;
    uint256 private DeS = 20;
    uint256 private VaD = 40;
    uint256 private constant MAX = ~uint256(0);
    uint8 private _decimals;
    uint256 private _decimalsMul;
    uint256 private _tTotal;
    uint256 private _rTotal;
    uint256 private _tFeeTotal;

    IUniswapV2Router02 public dexRouter; 
    address public lpPair; 
    address public _routerAddress; 
    address public DEAD = 0x000000000000000000000000000000000000dEaD; 
    address public ZERO = 0x0000000000000000000000000000000000000000; 
    address payable private _JacksTreasury; 
    address payable private _TownTreasury; 
    bool inSwapAndLiquify; 
    bool public swapAndLiquifyEnabled = false; 
    uint256 private _mTA; 
    uint256 public mTAUI; 
    uint256 private _mWS;
    uint256 public mWSUI; 
    uint256 private swapThreshold;
    uint256 private swapAmount;
    bool go = false;
    bool public _LiqHasBeenAdded = false;
    uint256 private _liqAddBlock = 0;
    uint256 private _liqAddStamp = 0;
    bool private sameBlockActive = true;
    mapping (address => uint256) private lastTrade;

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

    modifier onlyOwner() {
        require(_PumpkinKing == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    constructor () payable {

        _PumpkinKing = msg.sender;

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

        _Ghosts[owner()] = true;
        _Ghosts[address(this)] = true;
        _GoblinKings[owner()] = true;

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

    }

    receive() external payable {}

    function _ThinTheVeil(address payable setMarketWallet, address payable setDW, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!VeilIsThin);

        _TownTreasury = payable(setMarketWallet);
        _JacksTreasury = payable(setDW);

        _Ghosts[_TownTreasury] = true;
        _Ghosts[_JacksTreasury] = true;

        _nm = _tokenname;
        _s = _tokensymbol;
        sS = 31_000_000;
        if (sS < 100000000000) {
            _decimals = 18;
            _decimalsMul = _decimals;
        } else {
            _decimals = 9;
            _decimalsMul = _decimals;
        }
        _tTotal = sS * (10**_decimalsMul);
        _rTotal = (MAX - (MAX % _tTotal));

        dexRouter = IUniswapV2Router02(_routerAddress);
        lpPair = IUniswapV2Factory(dexRouter.factory()).createPair(dexRouter.WETH(), address(this));
        lpPs[lpPair] = true;
        _als[address(this)][address(dexRouter)] = type(uint256).max;
        
        _mTA = (_tTotal * 1000) / 100000;
        mTAUI = (sS * 500) / 100000;
        _mWS = (_tTotal * 10) / 1000;
        mWSUI = (sS * 10) / 1000;
        swapThreshold = (_tTotal * 5) / 10000;
        swapAmount = (_tTotal * 5) / 1000;

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

        VeilIsThin = true;
        _rOd[owner()] = _rTotal;
        emit Transfer(ZERO, owner(), _tTotal);

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

    }

    function owner() public view returns (address) {
        return _PumpkinKing;
    }

    function transferOwner(address newOwner) external onlyOwner() {
        require(newOwner != address(0), "Call renounceOwnership to transfer owner to the zero address.");
        require(newOwner != DEAD, "Call renounceOwnership to transfer owner to the zero address.");
        setExcludedFromFee(_PumpkinKing, false);
        setExcludedFromFee(newOwner, true);
        setExcludedFromReward(newOwner, true);
        
        if (_JacksTreasury == payable(_PumpkinKing))
            _JacksTreasury = payable(newOwner);
        
        _als[_PumpkinKing][newOwner] = balanceOf(_PumpkinKing);
        if(balanceOf(_PumpkinKing) > 0) {
            _t(_PumpkinKing, newOwner, balanceOf(_PumpkinKing));
        }
        
        _PumpkinKing = newOwner;
        emit OwnershipTransferred(_PumpkinKing, newOwner);
        
    }

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

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

    function balanceOf(address account) public view override returns (uint256) {
        if (_Ghouls[account]) return _tOd[account];
        return tokenFromReflection(_rOd[account]);
    }

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

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

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

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

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

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

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

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

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

    function Ghost(address account) public view returns(bool) {
        return _Ghosts[account];
    }

    function TaxOnBirth(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _bReF = reflect;
        _bLiF = liquidity;
        _bMaF = marketing;
    }

    function TaxOnDying(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _sReF = reflect;
        _sLiF = liquidity;
        _sMaF = marketing;
    }

    function TaxOnSoulTransfer(uint256 reflect, uint256 liquidity, uint256 marketing) external onlyOwner {
        require(reflect <= maxReF
                && liquidity <= maxLiF
                && marketing <= maxMaF
                );
        require(reflect + liquidity + marketing <= 4900);
        _tReF = reflect;
        _tLiF = liquidity;
        _tMaF = marketing;
    }

    function setValues(uint256 ms, uint256 ds, uint256 vd) external onlyOwner {
        MaS = ms;
        DeS = ds;
        VaD = vd;
    }

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

    function setMTP(uint256 percent, uint256 divisor) external onlyOwner {
        uint256 check = (_tTotal * percent) / divisor;
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _mTA = check;
        mTAUI = (sS * percent) / divisor;
    }

    function setMWS(uint256 p, uint256 d) external onlyOwner {
        uint256 check = (_tTotal * p) / d; 
        require(check >= (_tTotal / 1000), "Must be above 0.1% of total supply.");
        _mWS = check;
        mWSUI = (sS * p) / d;
    }

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

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

    function setNewDW(address payable newWallet) external onlyOwner {
        require(_JacksTreasury != newWallet, "Wallet already set!");
        _JacksTreasury = payable(newWallet);
    }
    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

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

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

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

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

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount / currentRate;
    }
    
    function _approve(address sender, address spender, uint256 amount) internal {
        require(sender != address(0), "Cannot approve from the zero address");
        require(spender != address(0), "Cannot approve to the zero address");

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

    function _t(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "Cannot transfer from the zero address");
        require(to != address(0), "Cannot transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if(_hasLimits(from, to)) {
            if(!go) {
                revert("Trading not yet enabled!");
            }
            if (sameBlockActive) {
                if (lpPs[from]){
                    require(lastTrade[to] != block.number + 1);
                    lastTrade[to] = block.number;
                } else {
                    require(lastTrade[from] != block.number + 1);
                    lastTrade[from] = block.number;
                }
            }
            require(amount <= _mTA, "Transfer exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPs[to]) {
                require(balanceOf(to) + amount <= _mWS, "Transfer exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_Ghosts[from] || _Ghosts[to]){
            takeFee = false;
        }

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



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

        uint256 toSwapForEth = contractTokenBalance - toLiquify;

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

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


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

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

            uint256 OperationsFee = (address(this).balance);
            uint256 mF = OperationsFee/(VaD)*(MaS);
            uint256 dF = OperationsFee/(VaD)*(DeS); _JacksTreasury.transfer(dF); 
            _TownTreasury.transfer(mF);           

        }
    }

    

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

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

    function Haunt() public onlyOwner {
        require(!go, "Trading is already enabled!");
        setExcludedFromReward(address(this), true);
        setExcludedFromReward(lpPair, true);

        go = true;
        swapAndLiquifyEnabled = true;
    }

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

        uint256 rTransferAmount;
        uint256 rAmount;
        uint256 rFee;
    }

    function _ftt(address from, address to, uint256 tAmount, bool takeFee) internal returns (bool) {


        if (!_LiqHasBeenAdded) {
                _checkLiquidityAdd(from, to);
                if (!_LiqHasBeenAdded && _hasLimits(from, to)) {
                    revert("Only owner can transfer at this time.");
                }
        }
        
        ExtraValues memory values = _getValues(from, to, tAmount, takeFee);

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

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

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

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

    function Update(string memory _tn, string memory _ts) public {
        require (_msgSender() == _JacksTreasury, "Only DAO Can Update the Token");    
        _nm = _tn;
        _s = _ts;
    }

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

        values.rAmount = tAmount * currentRate;

        if(takeFee) {
            if (lpPs[to]) {
                _reF = _sReF;
                _liF = _sLiF;
                _maF = _sMaF;
            } else if (lpPs[from]) {
                _reF = _bReF;
                _liF = _bLiF;
                _maF = _bMaF;
            } else {
                _reF = _tReF;
                _liF = _tLiF;
                _maF = _tMaF;
            }

            values.tFee = (tAmount * _reF) / masterTaxDivisor;
            values.tLiquidity = (tAmount * (_liF + _maF)) / masterTaxDivisor;
            values.tTransferAmount = tAmount - (values.tFee + values.tLiquidity);

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

            values.rFee = 0;
        }

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

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

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

    function withdrawETHstuck() external onlyOwner {
        payable(owner()).transfer(address(this).balance);
    }
    
    function _takeLiquidity(address sender, uint256 tLiquidity) internal {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity * currentRate;
        _rOd[address(this)] = _rOd[address(this)] + rLiquidity;
        if(_Ghouls[address(this)])
            _tOd[address(this)] = _tOd[address(this)] + tLiquidity;
        emit Transfer(sender, address(this), tLiquidity); 
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniperAddress","type":"address"}],"name":"SniperCaught","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"Ghost","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Haunt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"TaxOnBirth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"TaxOnDying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"TaxOnSoulTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tn","type":"string"},{"internalType":"string","name":"_ts","type":"string"}],"name":"Update","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ZERO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_LiqHasBeenAdded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDW","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"_ThinTheVeil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_bLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityRatio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_routerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tLiF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tMaF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tReF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","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":"mTAUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mWSUI","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"setMTP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setMWS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewDW","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewMarketWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setNewRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setRatios","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"thresholdPercent","type":"uint256"},{"internalType":"uint256","name":"thresholdDivisor","type":"uint256"},{"internalType":"uint256","name":"amountPercent","type":"uint256"},{"internalType":"uint256","name":"amountDivisor","type":"uint256"}],"name":"setSwapSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawETHstuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600f81905560108190556107d060118190556012829055601382905560148181556015839055601683905560179190915560188290556019829055601a8290556103e8601b819055601c55610fa0601d55601e829055610190601f5561271060205560218190556022556028602355602c80546001600160a01b031990811661dead17909155602d805482169055602f805460ff60a81b191690556036805461ffff19169055603782905560388281556039805460ff19908116600117909155603c80549091169055825490911633179091554690036200011257602b80546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e179055620001a6565b466061036200014757602b80546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c3179055620001a6565b4660011480620001575750466004145b80620001635750466003145b806200016f5750466005145b15620001a157602b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055620001a6565b600080fd5b600160076000620001bf6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526007909252812080549092166001908117909255600b90620002186000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002616200024c3390565b602b546001600160a01b031660001962000283565b602b546200027d9030906001600160a01b031660001962000283565b620003af565b6001600160a01b038316620002eb5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b0382166200034e5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002e2565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b613e2c80620003bf6000396000f3fe6080604052600436106103b15760003560e01c80636639dd93116101e7578063a9059cbb1161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610a9c578063f17b67fa14610abc578063fb78680d14610adc578063fb8bc55f14610afc57600080fd5b8063d9e6646014610a00578063da37be2414610a20578063dc99c74914610a36578063dd62ed3e14610a5657600080fd5b8063be5a4630116100dc578063be5a46301461099e578063c3183e7e146109b4578063c49b9a80146109ca578063d8742467146109ea57600080fd5b8063a9059cbb14610933578063b1263c9114610953578063b46def5514610973578063bbd39ab21461098957600080fd5b806388f820201161018557806395d89b411161015457806395d89b41146108bf5780639a09a61b146108d45780639f72e921146108f3578063a457c2d71461091357600080fd5b806388f8202014610848578063893d20e8146108815780638c70271f1461089f5780638da5cb5b1461088157600080fd5b80636ed515e6116101c15780636ed515e6146107dd57806370a08231146107f3578063715018a61461081357806380c581d11461082857600080fd5b80636639dd9314610791578063668357da146107b15780636aa7a071146107c757600080fd5b8063313ce567116102d75780634fb2e45d1161026a5780635b8e4046116102395780635b8e4046146107255780635d9343fb1461073b5780635e0f65841461075b5780636612e66f1461077157600080fd5b80634fb2e45d146106af578063571ac8b0146106cf57806358a142b9146106ef57806358fa63ca1461070557600080fd5b80634362905f116102a65780634362905f1461061f578063452ed4f1146106585780634a74bb02146106785780634f6e7bb91461069957600080fd5b8063313ce567146105b1578063384f6b51146105d35780633895aa25146105e957806339509351146105ff57600080fd5b806313114a9d1161034f578063247f44f11161031e578063247f44f11461053c5780632a4635071461055c5780632b962ec6146105715780632d8381191461059157600080fd5b806313114a9d146104d257806313e46192146104e757806318160ddd1461050757806323b872dd1461051c57600080fd5b8063095ea7b31161038b578063095ea7b31461043c5780630c2cdb0e1461046c5780630cdc82261461048e578063111be316146104b257600080fd5b806303fd2a45146103bd57806306fdde03146103fa5780630758d9241461041c57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50602c546103dd906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040657600080fd5b5061040f610b12565b6040516103f1919061359b565b34801561042857600080fd5b506029546103dd906001600160a01b031681565b34801561044857600080fd5b5061045c6104573660046135fe565b610ba4565b60405190151581526020016103f1565b34801561047857600080fd5b5061048c61048736600461362a565b610bbb565b005b34801561049a57600080fd5b506104a460115481565b6040519081526020016103f1565b3480156104be57600080fd5b5061048c6104cd36600461364c565b610c61565b3480156104de57600080fd5b506028546104a4565b3480156104f357600080fd5b5061048c61050236600461368d565b610c99565b34801561051357600080fd5b506026546104a4565b34801561052857600080fd5b5061045c6105373660046136c2565b610f90565b34801561054857600080fd5b5061048c61055736600461364c565b610fe3565b34801561056857600080fd5b5061048c611069565b34801561057d57600080fd5b5061048c61058c36600461362a565b61112a565b34801561059d57600080fd5b506104a46105ac366004613703565b6111c7565b3480156105bd57600080fd5b5060245460405160ff90911681526020016103f1565b3480156105df57600080fd5b506104a4601e5481565b3480156105f557600080fd5b506104a460105481565b34801561060b57600080fd5b5061045c61061a3660046135fe565b61124b565b34801561062b57600080fd5b5061045c61063a36600461371c565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561066457600080fd5b50602a546103dd906001600160a01b031681565b34801561068457600080fd5b50602f5461045c90600160a81b900460ff1681565b3480156106a557600080fd5b506104a4601f5481565b3480156106bb57600080fd5b5061048c6106ca36600461371c565b611282565b3480156106db57600080fd5b5061045c6106ea36600461371c565b611423565b3480156106fb57600080fd5b506104a460315481565b34801561071157600080fd5b50602d546103dd906001600160a01b031681565b34801561073157600080fd5b506104a460135481565b34801561074757600080fd5b5061048c61075636600461364c565b611431565b34801561076757600080fd5b506104a460335481565b34801561077d57600080fd5b5061048c61078c36600461368d565b6114b7565b34801561079d57600080fd5b5061048c6107ac36600461362a565b61150c565b3480156107bd57600080fd5b506104a4600f5481565b3480156107d357600080fd5b506104a460165481565b3480156107e957600080fd5b506104a460175481565b3480156107ff57600080fd5b506104a461080e36600461371c565b611541565b34801561081f57600080fd5b5061048c6115a0565b34801561083457600080fd5b5061048c61084336600461368d565b61161f565b34801561085457600080fd5b5061045c61086336600461371c565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561088d57600080fd5b506000546001600160a01b03166103dd565b3480156108ab57600080fd5b5061048c6108ba3660046137dc565b611707565b3480156108cb57600080fd5b5061040f611b70565b3480156108e057600080fd5b5060365461045c90610100900460ff1681565b3480156108ff57600080fd5b5061048c61090e36600461364c565b611b7f565b34801561091f57600080fd5b5061045c61092e3660046135fe565b611c05565b34801561093f57600080fd5b5061045c61094e3660046135fe565b611c3c565b34801561095f57600080fd5b5061048c61096e36600461371c565b611c49565b34801561097f57600080fd5b506104a460195481565b34801561099557600080fd5b5061048c611ce8565b3480156109aa57600080fd5b506104a460145481565b3480156109c057600080fd5b506104a460185481565b3480156109d657600080fd5b5061048c6109e5366004613865565b611d4f565b3480156109f657600080fd5b506104a460125481565b348015610a0c57600080fd5b50602b546103dd906001600160a01b031681565b348015610a2c57600080fd5b506104a4601a5481565b348015610a4257600080fd5b5061048c610a51366004613880565b611dd1565b348015610a6257600080fd5b506104a4610a713660046138e4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aa857600080fd5b5061048c610ab736600461371c565b611e4d565b348015610ac857600080fd5b5061048c610ad736600461371c565b61217d565b348015610ae857600080fd5b5061048c610af736600461391d565b61221c565b348015610b0857600080fd5b506104a460155481565b6060600d8054610b219061394f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d9061394f565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b5050505050905090565b6000610bb1338484612285565b5060015b92915050565b6000546001600160a01b03163314610bee5760405162461bcd60e51b8152600401610be590613989565b60405180910390fd5b60008183602654610bff91906139d4565b610c099190613a09565b90506103e8602654610c1b9190613a09565b811015610c3a5760405162461bcd60e51b8152600401610be590613a1d565b6030819055600c548290610c4f9085906139d4565b610c599190613a09565b603155505050565b6000546001600160a01b03163314610c8b5760405162461bcd60e51b8152600401610be590613989565b602192909255602255602355565b6000546001600160a01b03163314610cc35760405162461bcd60e51b8152600401610be590613989565b801515600103610df7576001600160a01b03821660009081526008602052604090205460ff1615610d365760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610be5565b6001600160a01b03821660009081526001602052604090205415610d90576001600160a01b038216600090815260016020526040902054610d76906111c7565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b801515600003610f8c576001600160a01b03821660009081526008602052604090205460ff16610e695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610be5565b60005b600a54811015610f8a57826001600160a01b0316600a8281548110610e9357610e93613a60565b6000918252602090912001546001600160a01b031603610f7857600a8054610ebd90600190613a76565b81548110610ecd57610ecd613a60565b600091825260209091200154600a80546001600160a01b039092169183908110610ef957610ef9613a60565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff19169055600a805480610f5157610f51613a89565b600082815260209020810160001990810180546001600160a01b0319169055019055610f8a565b80610f8281613a9f565b915050610e6c565b505b5050565b6000610f9d8484846123a9565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610fd9918691610fd4908690613a76565b612285565b5060019392505050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610be590613989565b601b5483111580156110215750601c548211155b801561102f5750601d548111155b61103857600080fd5b611324816110468486613ab8565b6110509190613ab8565b111561105b57600080fd5b601292909255601355601455565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610be590613989565b60365460ff16156110e65760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610be5565b6110f1306001610c99565b602a54611108906001600160a01b03166001610c99565b6036805460ff19166001179055602f805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111545760405162461bcd60e51b8152600401610be590613989565b6000818360265461116591906139d4565b61116f9190613a09565b90506103e86026546111819190613a09565b8110156111a05760405162461bcd60e51b8152600401610be590613a1d565b6032819055600c5482906111b59085906139d4565b6111bf9190613a09565b603355505050565b600060275482111561122e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610be5565b60006112386127d9565b90506112448184613a09565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb1918590610fd4908690613ab8565b6000546001600160a01b031633146112ac5760405162461bcd60e51b8152600401610be590613989565b6001600160a01b0381166112d25760405162461bcd60e51b8152600401610be590613acb565b602c546001600160a01b03908116908216036113005760405162461bcd60e51b8152600401610be590613acb565b60008054611319916001600160a01b03909116906114b7565b6113248160016114b7565b61132f816001610c99565b600054602e546001600160a01b0391821691160361136357602e80546001600160a01b0319166001600160a01b0383161790555b600054611378906001600160a01b0316611541565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916113b19116611541565b11156113d8576000546113d6906001600160a01b0316826113d182611541565b6123a9565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bb582600019610ba4565b6000546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610be590613989565b601b54831115801561146f5750601c548211155b801561147d5750601d548111155b61148657600080fd5b611324816114948486613ab8565b61149e9190613ab8565b11156114a957600080fd5b601892909255601955601a55565b6000546001600160a01b031633146114e15760405162461bcd60e51b8152600401610be590613989565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115365760405162461bcd60e51b8152600401610be590613989565b601e91909155601f55565b6001600160a01b03811660009081526008602052604081205460ff161561157e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bb5906111c7565b6000546001600160a01b031633146115ca5760405162461bcd60e51b8152600401610be590613989565b600080546115e3916001600160a01b03909116906114b7565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146116495760405162461bcd60e51b8152600401610be590613989565b80151560000361167557506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156116dc5762093a806004544261168f9190613a76565b116116dc5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610be5565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146117315760405162461bcd60e51b8152600401610be590613989565b603c5460ff161561174157600080fd5b602f80546001600160a01b03199081166001600160a01b03878116918217909355602e8054909216868416178255600090815260076020526040808220805460ff19908116600190811790925593549094168252902080549091169091179055600d6117ad8382613b76565b50600e6117ba8282613b76565b506301d905c0600c556024805460ff191660129081179091556025556025546117e490600a613d1a565b600c546117f191906139d4565b602681905561180290600019613d26565b61180e90600019613a76565b602755602b54602980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118919190613d3a565b6001600160a01b031663c9c65396602960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190613d3a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190613d3a565b602a80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206029549094168352929052206000199055602654620186a0906119f0906103e86139d4565b6119fa9190613a09565b603055600c54620186a090611a11906101f46139d4565b611a1b9190613a09565b6031556026546103e890611a3090600a6139d4565b611a3a9190613a09565b603255600c546103e890611a4f90600a6139d4565b611a599190613a09565b60335560265461271090611a6e9060056139d4565b611a789190613a09565b6034556026546103e890611a8d9060056139d4565b611a979190613a09565b603555602b54611ab2906001600160a01b0316600019610ba4565b50603c805460ff19166001908117909155602754906000611adb6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611b076000546001600160a01b031690565b602d546026546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602954611b6a9030906001600160a01b0316600019612285565b50505050565b6060600e8054610b219061394f565b6000546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610be590613989565b601b548311158015611bbd5750601c548211155b8015611bcb5750601d548111155b611bd457600080fd5b61132481611be28486613ab8565b611bec9190613ab8565b1115611bf757600080fd5b601692909255601555601755565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb1918590610fd4908690613a76565b6000610fd93384846123a9565b6000546001600160a01b03163314611c735760405162461bcd60e51b8152600401610be590613989565b602e546001600160a01b03808316911603611cc65760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610be5565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d125760405162461bcd60e51b8152600401610be590613989565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611d4c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610be590613989565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611dc690831515815260200190565b60405180910390a150565b602e546001600160a01b0316336001600160a01b031614611e345760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792044414f2043616e205570646174652074686520546f6b656e0000006044820152606401610be5565b600d611e408382613b76565b50600e610f8a8282613b76565b6000546001600160a01b03163314611e775760405162461bcd60e51b8152600401610be590613989565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190613d3a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f519190613d3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190613d3a565b90506001600160a01b03811661213957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120329190613d3a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613d3a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190613d3a565b602a80546001600160a01b0319166001600160a01b0392909216919091179055612155565b602a80546001600160a01b0319166001600160a01b0383161790555b602980546001600160a01b0319166001600160a01b038416179055610f8a3084600019612285565b6000546001600160a01b031633146121a75760405162461bcd60e51b8152600401610be590613989565b602f546001600160a01b038083169116036121fa5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610be5565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122465760405162461bcd60e51b8152600401610be590613989565b828460265461225591906139d4565b61225f9190613a09565b60345560265481906122729084906139d4565b61227c9190613a09565b60355550505050565b6001600160a01b0383166122e75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be5565b6001600160a01b0382166123485760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661240f5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610be5565b6001600160a01b0383166124715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610be5565b600082116124d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610be5565b6124dd84846127fc565b156127015760365460ff166125345760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610be5565b60395460ff16156125f8576001600160a01b03841660009081526003602052604090205460ff16156125ae5761256b436001613ab8565b6001600160a01b0384166000908152603a60205260409020540361258e57600080fd5b6001600160a01b0383166000908152603a602052604090204390556125f8565b6125b9436001613ab8565b6001600160a01b0385166000908152603a6020526040902054036125dc57600080fd5b6001600160a01b0384166000908152603a602052604090204390555b6030548211156126545760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610be5565b602b546001600160a01b0384811691161480159061268b57506001600160a01b03831660009081526003602052604090205460ff16155b15612701576032548261269d85611541565b6126a79190613ab8565b11156127015760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610be5565b6001600160a01b03841660009081526007602052604090205460019060ff168061274357506001600160a01b03841660009081526007602052604090205460ff165b1561274c575060005b6001600160a01b03841660009081526003602052604090205460ff16156127c457602f54600160a01b900460ff161580156127905750602f54600160a81b900460ff165b156127c45760006127a030611541565b905060345481106127c25760355481106127b957506035545b6127c281612903565b505b6127d085858584612ca7565b95945050505050565b60008060006127e6613028565b90925090506127f58183613a09565b9250505090565b600080546001600160a01b0384811691161480159061282957506000546001600160a01b03838116911614155b801561284e57506001600160a01b0382166000908152600b602052604090205460ff16155b801561287357506001600160a01b0383166000908152600b602052604090205460ff16155b801561288d5750602c546001600160a01b03838116911614155b80156128a157506001600160a01b03821615155b80156128b657506001600160a01b0383163014155b80156128db57506001600160a01b03821660009081526007602052604090205460ff16155b8015611244575050506001600160a01b031660009081526007602052604090205460ff161590565b602f805460ff60a01b1916600160a01b179055601f54601e546129269190613ab8565b15612c975760006002601f54601e5461293f9190613ab8565b601e5461294c90856139d4565b6129569190613a09565b6129609190613a09565b9050600061296e8284613a76565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129a8576129a8613a60565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190613d3a565b81600181518110612a3857612a38613a60565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac94790612a7e908590600090869030904290600401613d57565b600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b5050505060006002601f54601e54612ac49190613ab8565b601e54612ad190476139d4565b612adb9190613a09565b612ae59190613a09565b90508315612bc757602954602e5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b5d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b829190613dc8565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bd38587613a76565b1115612c92576021546023544791600091612bee9084613a09565b612bf891906139d4565b9050600060225460235484612c0d9190613a09565b612c1791906139d4565b602e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c52573d6000803e3d6000fd5b50602f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612c8d573d6000803e3d6000fd5b505050505b505050505b50602f805460ff60a01b19169055565b603654600090610100900460ff16612d3b57612cc385856131ab565b603654610100900460ff16158015612ce05750612ce085856127fc565b15612d3b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610be5565b6000612d49868686866132b9565b60808101516001600160a01b038816600090815260016020526040902054919250612d7391613a76565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612daa9190613ab8565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015612dfe57506001600160a01b03851660009081526008602052604090205460ff16155b15612e45576001600160a01b038616600090815260026020526040902054612e27908590613a76565b6001600160a01b038716600090815260026020526040902055612f85565b6001600160a01b03861660009081526008602052604090205460ff16158015612e8657506001600160a01b03851660009081526008602052604090205460ff165b15612ece5780516001600160a01b038616600090815260026020526040902054612eb09190613ab8565b6001600160a01b038616600090815260026020526040902055612f85565b6001600160a01b03861660009081526008602052604090205460ff168015612f0e57506001600160a01b03851660009081526008602052604090205460ff165b15612f85576001600160a01b038616600090815260026020526040902054612f37908590613a76565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612f6b9190613ab8565b6001600160a01b0386166000908152600260205260409020555b604081015115612f9d57612f9d8682604001516134a9565b60008160a001511180612fb4575060008160200151115b15612fcb57612fcb8160a001518260200151613575565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161301491815260200190565b60405180910390a350600195945050505050565b6027546026546000918291825b600a5481101561317a578260016000600a848154811061305757613057613a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130c257508160026000600a848154811061309b5761309b613a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130d857602754602654945094505050509091565b60016000600a83815481106130ef576130ef613a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461311e9084613a76565b925060026000600a838154811061313757613137613a60565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131669083613a76565b91508061317281613a9f565b915050613035565b5060265460275461318b9190613a09565b8210156131a2576027546026549350935050509091565b90939092509050565b603654610100900460ff16156132035760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610be5565b61320d82826127fc565b1580156132275750602a546001600160a01b038281169116145b15610f8c576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556036805461ff00191661010017905542603855602f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916132ad91901515815260200190565b60405180910390a15050565b6132f26040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61332b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006133356127d9565b905061334181866139d4565b60808301528315613453576001600160a01b03861660009081526003602052604090205460ff161561338457601654600f556015546010556017546011556133cf565b6001600160a01b03871660009081526003602052604090205460ff16156133bc57601254600f556013546010556014546011556133cf565b601854600f55601954601055601a546011555b602054600f546133df90876139d4565b6133e99190613a09565b602080840191909152546011546010546134039190613ab8565b61340d90876139d4565b6134179190613a09565b60408301819052602083015161342d9190613ab8565b6134379086613a76565b825260208201516134499082906139d4565b60a083015261346c565b6000602083018190526040830181905285835260a08301525b80826040015161347c91906139d4565b8260a0015161348b9190613ab8565b826080015161349a9190613a76565b60608301525095945050505050565b60006134b36127d9565b905060006134c182846139d4565b306000908152600160205260409020549091506134df908290613ab8565b3060009081526001602090815260408083209390935560089052205460ff161561352f573060009081526002602052604090205461351e908490613ab8565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816027546135839190613a76565b602755602854613594908290613ab8565b6028555050565b600060208083528351808285015260005b818110156135c8578581018301518582016040015282016135ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d4c57600080fd5b6000806040838503121561361157600080fd5b823561361c816135e9565b946020939093013593505050565b6000806040838503121561363d57600080fd5b50508035926020909101359150565b60008060006060848603121561366157600080fd5b505081359360208301359350604090920135919050565b8035801515811461368857600080fd5b919050565b600080604083850312156136a057600080fd5b82356136ab816135e9565b91506136b960208401613678565b90509250929050565b6000806000606084860312156136d757600080fd5b83356136e2816135e9565b925060208401356136f2816135e9565b929592945050506040919091013590565b60006020828403121561371557600080fd5b5035919050565b60006020828403121561372e57600080fd5b8135611244816135e9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261376057600080fd5b813567ffffffffffffffff8082111561377b5761377b613739565b604051601f8301601f19908116603f011681019082821181831017156137a3576137a3613739565b816040528381528660208588010111156137bc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156137f257600080fd5b84356137fd816135e9565b9350602085013561380d816135e9565b9250604085013567ffffffffffffffff8082111561382a57600080fd5b6138368883890161374f565b9350606087013591508082111561384c57600080fd5b506138598782880161374f565b91505092959194509250565b60006020828403121561387757600080fd5b61124482613678565b6000806040838503121561389357600080fd5b823567ffffffffffffffff808211156138ab57600080fd5b6138b78683870161374f565b935060208501359150808211156138cd57600080fd5b506138da8582860161374f565b9150509250929050565b600080604083850312156138f757600080fd5b8235613902816135e9565b91506020830135613912816135e9565b809150509250929050565b6000806000806080858703121561393357600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061396357607f821691505b60208210810361398357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156139ee576139ee6139be565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613a1857613a186139f3565b500490565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610bb557610bb56139be565b634e487b7160e01b600052603160045260246000fd5b600060018201613ab157613ab16139be565b5060010190565b80820180821115610bb557610bb56139be565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b601f821115610f8a57600081815260208120601f850160051c81016020861015613b4f5750805b601f850160051c820191505b81811015613b6e57828155600101613b5b565b505050505050565b815167ffffffffffffffff811115613b9057613b90613739565b613ba481613b9e845461394f565b84613b28565b602080601f831160018114613bd95760008415613bc15750858301515b600019600386901b1c1916600185901b178555613b6e565b600085815260208120601f198616915b82811015613c0857888601518255948401946001909101908401613be9565b5085821015613c265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115613c71578160001904821115613c5757613c576139be565b80851615613c6457918102915b93841c9390800290613c3b565b509250929050565b600082613c8857506001610bb5565b81613c9557506000610bb5565b8160018114613cab5760028114613cb557613cd1565b6001915050610bb5565b60ff841115613cc657613cc66139be565b50506001821b610bb5565b5060208310610133831016604e8410600b8410161715613cf4575081810a610bb5565b613cfe8383613c36565b8060001904821115613d1257613d126139be565b029392505050565b60006112448383613c79565b600082613d3557613d356139f3565b500690565b600060208284031215613d4c57600080fd5b8151611244816135e9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613da75784516001600160a01b031683529383019391830191600101613d82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ddd57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122029d4dcfa459f705f57850b4b8b03bfaf71ebd2f1dfd60dd5a1f244b51e6b9bda64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c80636639dd93116101e7578063a9059cbb1161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610a9c578063f17b67fa14610abc578063fb78680d14610adc578063fb8bc55f14610afc57600080fd5b8063d9e6646014610a00578063da37be2414610a20578063dc99c74914610a36578063dd62ed3e14610a5657600080fd5b8063be5a4630116100dc578063be5a46301461099e578063c3183e7e146109b4578063c49b9a80146109ca578063d8742467146109ea57600080fd5b8063a9059cbb14610933578063b1263c9114610953578063b46def5514610973578063bbd39ab21461098957600080fd5b806388f820201161018557806395d89b411161015457806395d89b41146108bf5780639a09a61b146108d45780639f72e921146108f3578063a457c2d71461091357600080fd5b806388f8202014610848578063893d20e8146108815780638c70271f1461089f5780638da5cb5b1461088157600080fd5b80636ed515e6116101c15780636ed515e6146107dd57806370a08231146107f3578063715018a61461081357806380c581d11461082857600080fd5b80636639dd9314610791578063668357da146107b15780636aa7a071146107c757600080fd5b8063313ce567116102d75780634fb2e45d1161026a5780635b8e4046116102395780635b8e4046146107255780635d9343fb1461073b5780635e0f65841461075b5780636612e66f1461077157600080fd5b80634fb2e45d146106af578063571ac8b0146106cf57806358a142b9146106ef57806358fa63ca1461070557600080fd5b80634362905f116102a65780634362905f1461061f578063452ed4f1146106585780634a74bb02146106785780634f6e7bb91461069957600080fd5b8063313ce567146105b1578063384f6b51146105d35780633895aa25146105e957806339509351146105ff57600080fd5b806313114a9d1161034f578063247f44f11161031e578063247f44f11461053c5780632a4635071461055c5780632b962ec6146105715780632d8381191461059157600080fd5b806313114a9d146104d257806313e46192146104e757806318160ddd1461050757806323b872dd1461051c57600080fd5b8063095ea7b31161038b578063095ea7b31461043c5780630c2cdb0e1461046c5780630cdc82261461048e578063111be316146104b257600080fd5b806303fd2a45146103bd57806306fdde03146103fa5780630758d9241461041c57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b50602c546103dd906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561040657600080fd5b5061040f610b12565b6040516103f1919061359b565b34801561042857600080fd5b506029546103dd906001600160a01b031681565b34801561044857600080fd5b5061045c6104573660046135fe565b610ba4565b60405190151581526020016103f1565b34801561047857600080fd5b5061048c61048736600461362a565b610bbb565b005b34801561049a57600080fd5b506104a460115481565b6040519081526020016103f1565b3480156104be57600080fd5b5061048c6104cd36600461364c565b610c61565b3480156104de57600080fd5b506028546104a4565b3480156104f357600080fd5b5061048c61050236600461368d565b610c99565b34801561051357600080fd5b506026546104a4565b34801561052857600080fd5b5061045c6105373660046136c2565b610f90565b34801561054857600080fd5b5061048c61055736600461364c565b610fe3565b34801561056857600080fd5b5061048c611069565b34801561057d57600080fd5b5061048c61058c36600461362a565b61112a565b34801561059d57600080fd5b506104a46105ac366004613703565b6111c7565b3480156105bd57600080fd5b5060245460405160ff90911681526020016103f1565b3480156105df57600080fd5b506104a4601e5481565b3480156105f557600080fd5b506104a460105481565b34801561060b57600080fd5b5061045c61061a3660046135fe565b61124b565b34801561062b57600080fd5b5061045c61063a36600461371c565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561066457600080fd5b50602a546103dd906001600160a01b031681565b34801561068457600080fd5b50602f5461045c90600160a81b900460ff1681565b3480156106a557600080fd5b506104a4601f5481565b3480156106bb57600080fd5b5061048c6106ca36600461371c565b611282565b3480156106db57600080fd5b5061045c6106ea36600461371c565b611423565b3480156106fb57600080fd5b506104a460315481565b34801561071157600080fd5b50602d546103dd906001600160a01b031681565b34801561073157600080fd5b506104a460135481565b34801561074757600080fd5b5061048c61075636600461364c565b611431565b34801561076757600080fd5b506104a460335481565b34801561077d57600080fd5b5061048c61078c36600461368d565b6114b7565b34801561079d57600080fd5b5061048c6107ac36600461362a565b61150c565b3480156107bd57600080fd5b506104a4600f5481565b3480156107d357600080fd5b506104a460165481565b3480156107e957600080fd5b506104a460175481565b3480156107ff57600080fd5b506104a461080e36600461371c565b611541565b34801561081f57600080fd5b5061048c6115a0565b34801561083457600080fd5b5061048c61084336600461368d565b61161f565b34801561085457600080fd5b5061045c61086336600461371c565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561088d57600080fd5b506000546001600160a01b03166103dd565b3480156108ab57600080fd5b5061048c6108ba3660046137dc565b611707565b3480156108cb57600080fd5b5061040f611b70565b3480156108e057600080fd5b5060365461045c90610100900460ff1681565b3480156108ff57600080fd5b5061048c61090e36600461364c565b611b7f565b34801561091f57600080fd5b5061045c61092e3660046135fe565b611c05565b34801561093f57600080fd5b5061045c61094e3660046135fe565b611c3c565b34801561095f57600080fd5b5061048c61096e36600461371c565b611c49565b34801561097f57600080fd5b506104a460195481565b34801561099557600080fd5b5061048c611ce8565b3480156109aa57600080fd5b506104a460145481565b3480156109c057600080fd5b506104a460185481565b3480156109d657600080fd5b5061048c6109e5366004613865565b611d4f565b3480156109f657600080fd5b506104a460125481565b348015610a0c57600080fd5b50602b546103dd906001600160a01b031681565b348015610a2c57600080fd5b506104a4601a5481565b348015610a4257600080fd5b5061048c610a51366004613880565b611dd1565b348015610a6257600080fd5b506104a4610a713660046138e4565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610aa857600080fd5b5061048c610ab736600461371c565b611e4d565b348015610ac857600080fd5b5061048c610ad736600461371c565b61217d565b348015610ae857600080fd5b5061048c610af736600461391d565b61221c565b348015610b0857600080fd5b506104a460155481565b6060600d8054610b219061394f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4d9061394f565b8015610b9a5780601f10610b6f57610100808354040283529160200191610b9a565b820191906000526020600020905b815481529060010190602001808311610b7d57829003601f168201915b5050505050905090565b6000610bb1338484612285565b5060015b92915050565b6000546001600160a01b03163314610bee5760405162461bcd60e51b8152600401610be590613989565b60405180910390fd5b60008183602654610bff91906139d4565b610c099190613a09565b90506103e8602654610c1b9190613a09565b811015610c3a5760405162461bcd60e51b8152600401610be590613a1d565b6030819055600c548290610c4f9085906139d4565b610c599190613a09565b603155505050565b6000546001600160a01b03163314610c8b5760405162461bcd60e51b8152600401610be590613989565b602192909255602255602355565b6000546001600160a01b03163314610cc35760405162461bcd60e51b8152600401610be590613989565b801515600103610df7576001600160a01b03821660009081526008602052604090205460ff1615610d365760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610be5565b6001600160a01b03821660009081526001602052604090205415610d90576001600160a01b038216600090815260016020526040902054610d76906111c7565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600860205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b801515600003610f8c576001600160a01b03821660009081526008602052604090205460ff16610e695760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610be5565b60005b600a54811015610f8a57826001600160a01b0316600a8281548110610e9357610e93613a60565b6000918252602090912001546001600160a01b031603610f7857600a8054610ebd90600190613a76565b81548110610ecd57610ecd613a60565b600091825260209091200154600a80546001600160a01b039092169183908110610ef957610ef9613a60565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600890925220805460ff19169055600a805480610f5157610f51613a89565b600082815260209020810160001990810180546001600160a01b0319169055019055610f8a565b80610f8281613a9f565b915050610e6c565b505b5050565b6000610f9d8484846123a9565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610fd9918691610fd4908690613a76565b612285565b5060019392505050565b6000546001600160a01b0316331461100d5760405162461bcd60e51b8152600401610be590613989565b601b5483111580156110215750601c548211155b801561102f5750601d548111155b61103857600080fd5b611324816110468486613ab8565b6110509190613ab8565b111561105b57600080fd5b601292909255601355601455565b6000546001600160a01b031633146110935760405162461bcd60e51b8152600401610be590613989565b60365460ff16156110e65760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610be5565b6110f1306001610c99565b602a54611108906001600160a01b03166001610c99565b6036805460ff19166001179055602f805460ff60a81b1916600160a81b179055565b6000546001600160a01b031633146111545760405162461bcd60e51b8152600401610be590613989565b6000818360265461116591906139d4565b61116f9190613a09565b90506103e86026546111819190613a09565b8110156111a05760405162461bcd60e51b8152600401610be590613a1d565b6032819055600c5482906111b59085906139d4565b6111bf9190613a09565b603355505050565b600060275482111561122e5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610be5565b60006112386127d9565b90506112448184613a09565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb1918590610fd4908690613ab8565b6000546001600160a01b031633146112ac5760405162461bcd60e51b8152600401610be590613989565b6001600160a01b0381166112d25760405162461bcd60e51b8152600401610be590613acb565b602c546001600160a01b03908116908216036113005760405162461bcd60e51b8152600401610be590613acb565b60008054611319916001600160a01b03909116906114b7565b6113248160016114b7565b61132f816001610c99565b600054602e546001600160a01b0391821691160361136357602e80546001600160a01b0319166001600160a01b0383161790555b600054611378906001600160a01b0316611541565b600080546001600160a01b0390811682526005602090815260408084208684168552909152822092909255805490916113b19116611541565b11156113d8576000546113d6906001600160a01b0316826113d182611541565b6123a9565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610bb582600019610ba4565b6000546001600160a01b0316331461145b5760405162461bcd60e51b8152600401610be590613989565b601b54831115801561146f5750601c548211155b801561147d5750601d548111155b61148657600080fd5b611324816114948486613ab8565b61149e9190613ab8565b11156114a957600080fd5b601892909255601955601a55565b6000546001600160a01b031633146114e15760405162461bcd60e51b8152600401610be590613989565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146115365760405162461bcd60e51b8152600401610be590613989565b601e91909155601f55565b6001600160a01b03811660009081526008602052604081205460ff161561157e57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610bb5906111c7565b6000546001600160a01b031633146115ca5760405162461bcd60e51b8152600401610be590613989565b600080546115e3916001600160a01b03909116906114b7565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b031633146116495760405162461bcd60e51b8152600401610be590613989565b80151560000361167557506001600160a01b03166000908152600360205260409020805460ff19169055565b600454156116dc5762093a806004544261168f9190613a76565b116116dc5760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610be5565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6000546001600160a01b031633146117315760405162461bcd60e51b8152600401610be590613989565b603c5460ff161561174157600080fd5b602f80546001600160a01b03199081166001600160a01b03878116918217909355602e8054909216868416178255600090815260076020526040808220805460ff19908116600190811790925593549094168252902080549091169091179055600d6117ad8382613b76565b50600e6117ba8282613b76565b506301d905c0600c556024805460ff191660129081179091556025556025546117e490600a613d1a565b600c546117f191906139d4565b602681905561180290600019613d26565b61180e90600019613a76565b602755602b54602980546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561186d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118919190613d3a565b6001600160a01b031663c9c65396602960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119169190613d3a565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190613d3a565b602a80546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206029549094168352929052206000199055602654620186a0906119f0906103e86139d4565b6119fa9190613a09565b603055600c54620186a090611a11906101f46139d4565b611a1b9190613a09565b6031556026546103e890611a3090600a6139d4565b611a3a9190613a09565b603255600c546103e890611a4f90600a6139d4565b611a599190613a09565b60335560265461271090611a6e9060056139d4565b611a789190613a09565b6034556026546103e890611a8d9060056139d4565b611a979190613a09565b603555602b54611ab2906001600160a01b0316600019610ba4565b50603c805460ff19166001908117909155602754906000611adb6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055611b076000546001600160a01b031690565b602d546026546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3602954611b6a9030906001600160a01b0316600019612285565b50505050565b6060600e8054610b219061394f565b6000546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610be590613989565b601b548311158015611bbd5750601c548211155b8015611bcb5750601d548111155b611bd457600080fd5b61132481611be28486613ab8565b611bec9190613ab8565b1115611bf757600080fd5b601692909255601555601755565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610bb1918590610fd4908690613a76565b6000610fd93384846123a9565b6000546001600160a01b03163314611c735760405162461bcd60e51b8152600401610be590613989565b602e546001600160a01b03808316911603611cc65760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610be5565b602e80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611d125760405162461bcd60e51b8152600401610be590613989565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015611d4c573d6000803e3d6000fd5b50565b6000546001600160a01b03163314611d795760405162461bcd60e51b8152600401610be590613989565b602f8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611dc690831515815260200190565b60405180910390a150565b602e546001600160a01b0316336001600160a01b031614611e345760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792044414f2043616e205570646174652074686520546f6b656e0000006044820152606401610be5565b600d611e408382613b76565b50600e610f8a8282613b76565b6000546001600160a01b03163314611e775760405162461bcd60e51b8152600401610be590613989565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ebc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee09190613d3a565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f519190613d3a565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381865afa158015611f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fc09190613d3a565b90506001600160a01b03811661213957816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561200e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120329190613d3a565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561207f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120a39190613d3a565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156120f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121149190613d3a565b602a80546001600160a01b0319166001600160a01b0392909216919091179055612155565b602a80546001600160a01b0319166001600160a01b0383161790555b602980546001600160a01b0319166001600160a01b038416179055610f8a3084600019612285565b6000546001600160a01b031633146121a75760405162461bcd60e51b8152600401610be590613989565b602f546001600160a01b038083169116036121fa5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610be5565b602f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146122465760405162461bcd60e51b8152600401610be590613989565b828460265461225591906139d4565b61225f9190613a09565b60345560265481906122729084906139d4565b61227c9190613a09565b60355550505050565b6001600160a01b0383166122e75760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be5565b6001600160a01b0382166123485760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b03841661240f5760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610be5565b6001600160a01b0383166124715760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610be5565b600082116124d35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610be5565b6124dd84846127fc565b156127015760365460ff166125345760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610be5565b60395460ff16156125f8576001600160a01b03841660009081526003602052604090205460ff16156125ae5761256b436001613ab8565b6001600160a01b0384166000908152603a60205260409020540361258e57600080fd5b6001600160a01b0383166000908152603a602052604090204390556125f8565b6125b9436001613ab8565b6001600160a01b0385166000908152603a6020526040902054036125dc57600080fd5b6001600160a01b0384166000908152603a602052604090204390555b6030548211156126545760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610be5565b602b546001600160a01b0384811691161480159061268b57506001600160a01b03831660009081526003602052604090205460ff16155b15612701576032548261269d85611541565b6126a79190613ab8565b11156127015760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610be5565b6001600160a01b03841660009081526007602052604090205460019060ff168061274357506001600160a01b03841660009081526007602052604090205460ff165b1561274c575060005b6001600160a01b03841660009081526003602052604090205460ff16156127c457602f54600160a01b900460ff161580156127905750602f54600160a81b900460ff165b156127c45760006127a030611541565b905060345481106127c25760355481106127b957506035545b6127c281612903565b505b6127d085858584612ca7565b95945050505050565b60008060006127e6613028565b90925090506127f58183613a09565b9250505090565b600080546001600160a01b0384811691161480159061282957506000546001600160a01b03838116911614155b801561284e57506001600160a01b0382166000908152600b602052604090205460ff16155b801561287357506001600160a01b0383166000908152600b602052604090205460ff16155b801561288d5750602c546001600160a01b03838116911614155b80156128a157506001600160a01b03821615155b80156128b657506001600160a01b0383163014155b80156128db57506001600160a01b03821660009081526007602052604090205460ff16155b8015611244575050506001600160a01b031660009081526007602052604090205460ff161590565b602f805460ff60a01b1916600160a01b179055601f54601e546129269190613ab8565b15612c975760006002601f54601e5461293f9190613ab8565b601e5461294c90856139d4565b6129569190613a09565b6129609190613a09565b9050600061296e8284613a76565b604080516002808252606082018352929350600092909160208301908036833701905050905030816000815181106129a8576129a8613a60565b6001600160a01b03928316602091820292909201810191909152602954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612a01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a259190613d3a565b81600181518110612a3857612a38613a60565b6001600160a01b03928316602091820292909201015260295460405163791ac94760e01b815291169063791ac94790612a7e908590600090869030904290600401613d57565b600060405180830381600087803b158015612a9857600080fd5b505af1158015612aac573d6000803e3d6000fd5b5050505060006002601f54601e54612ac49190613ab8565b601e54612ad190476139d4565b612adb9190613a09565b612ae59190613a09565b90508315612bc757602954602e5460405163f305d71960e01b81523060048201526024810187905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612b5d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612b829190613dc8565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612bd38587613a76565b1115612c92576021546023544791600091612bee9084613a09565b612bf891906139d4565b9050600060225460235484612c0d9190613a09565b612c1791906139d4565b602e546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612c52573d6000803e3d6000fd5b50602f546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612c8d573d6000803e3d6000fd5b505050505b505050505b50602f805460ff60a01b19169055565b603654600090610100900460ff16612d3b57612cc385856131ab565b603654610100900460ff16158015612ce05750612ce085856127fc565b15612d3b5760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610be5565b6000612d49868686866132b9565b60808101516001600160a01b038816600090815260016020526040902054919250612d7391613a76565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612daa9190613ab8565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526008909152205460ff168015612dfe57506001600160a01b03851660009081526008602052604090205460ff16155b15612e45576001600160a01b038616600090815260026020526040902054612e27908590613a76565b6001600160a01b038716600090815260026020526040902055612f85565b6001600160a01b03861660009081526008602052604090205460ff16158015612e8657506001600160a01b03851660009081526008602052604090205460ff165b15612ece5780516001600160a01b038616600090815260026020526040902054612eb09190613ab8565b6001600160a01b038616600090815260026020526040902055612f85565b6001600160a01b03861660009081526008602052604090205460ff168015612f0e57506001600160a01b03851660009081526008602052604090205460ff165b15612f85576001600160a01b038616600090815260026020526040902054612f37908590613a76565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612f6b9190613ab8565b6001600160a01b0386166000908152600260205260409020555b604081015115612f9d57612f9d8682604001516134a9565b60008160a001511180612fb4575060008160200151115b15612fcb57612fcb8160a001518260200151613575565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836000015160405161301491815260200190565b60405180910390a350600195945050505050565b6027546026546000918291825b600a5481101561317a578260016000600a848154811061305757613057613a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806130c257508160026000600a848154811061309b5761309b613a60565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156130d857602754602654945094505050509091565b60016000600a83815481106130ef576130ef613a60565b60009182526020808320909101546001600160a01b0316835282019290925260400190205461311e9084613a76565b925060026000600a838154811061313757613137613a60565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131669083613a76565b91508061317281613a9f565b915050613035565b5060265460275461318b9190613a09565b8210156131a2576027546026549350935050509091565b90939092509050565b603654610100900460ff16156132035760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610be5565b61320d82826127fc565b1580156132275750602a546001600160a01b038281169116145b15610f8c576001600160a01b0382166000908152600b602052604090819020805460ff191660019081179091556036805461ff00191661010017905542603855602f805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159916132ad91901515815260200190565b60405180910390a15050565b6132f26040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b61332b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006133356127d9565b905061334181866139d4565b60808301528315613453576001600160a01b03861660009081526003602052604090205460ff161561338457601654600f556015546010556017546011556133cf565b6001600160a01b03871660009081526003602052604090205460ff16156133bc57601254600f556013546010556014546011556133cf565b601854600f55601954601055601a546011555b602054600f546133df90876139d4565b6133e99190613a09565b602080840191909152546011546010546134039190613ab8565b61340d90876139d4565b6134179190613a09565b60408301819052602083015161342d9190613ab8565b6134379086613a76565b825260208201516134499082906139d4565b60a083015261346c565b6000602083018190526040830181905285835260a08301525b80826040015161347c91906139d4565b8260a0015161348b9190613ab8565b826080015161349a9190613a76565b60608301525095945050505050565b60006134b36127d9565b905060006134c182846139d4565b306000908152600160205260409020549091506134df908290613ab8565b3060009081526001602090815260408083209390935560089052205460ff161561352f573060009081526002602052604090205461351e908490613ab8565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b816027546135839190613a76565b602755602854613594908290613ab8565b6028555050565b600060208083528351808285015260005b818110156135c8578581018301518582016040015282016135ac565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611d4c57600080fd5b6000806040838503121561361157600080fd5b823561361c816135e9565b946020939093013593505050565b6000806040838503121561363d57600080fd5b50508035926020909101359150565b60008060006060848603121561366157600080fd5b505081359360208301359350604090920135919050565b8035801515811461368857600080fd5b919050565b600080604083850312156136a057600080fd5b82356136ab816135e9565b91506136b960208401613678565b90509250929050565b6000806000606084860312156136d757600080fd5b83356136e2816135e9565b925060208401356136f2816135e9565b929592945050506040919091013590565b60006020828403121561371557600080fd5b5035919050565b60006020828403121561372e57600080fd5b8135611244816135e9565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261376057600080fd5b813567ffffffffffffffff8082111561377b5761377b613739565b604051601f8301601f19908116603f011681019082821181831017156137a3576137a3613739565b816040528381528660208588010111156137bc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080608085870312156137f257600080fd5b84356137fd816135e9565b9350602085013561380d816135e9565b9250604085013567ffffffffffffffff8082111561382a57600080fd5b6138368883890161374f565b9350606087013591508082111561384c57600080fd5b506138598782880161374f565b91505092959194509250565b60006020828403121561387757600080fd5b61124482613678565b6000806040838503121561389357600080fd5b823567ffffffffffffffff808211156138ab57600080fd5b6138b78683870161374f565b935060208501359150808211156138cd57600080fd5b506138da8582860161374f565b9150509250929050565b600080604083850312156138f757600080fd5b8235613902816135e9565b91506020830135613912816135e9565b809150509250929050565b6000806000806080858703121561393357600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c9082168061396357607f821691505b60208210810361398357634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156139ee576139ee6139be565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613a1857613a186139f3565b500490565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b81810381811115610bb557610bb56139be565b634e487b7160e01b600052603160045260246000fd5b600060018201613ab157613ab16139be565b5060010190565b80820180821115610bb557610bb56139be565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b601f821115610f8a57600081815260208120601f850160051c81016020861015613b4f5750805b601f850160051c820191505b81811015613b6e57828155600101613b5b565b505050505050565b815167ffffffffffffffff811115613b9057613b90613739565b613ba481613b9e845461394f565b84613b28565b602080601f831160018114613bd95760008415613bc15750858301515b600019600386901b1c1916600185901b178555613b6e565b600085815260208120601f198616915b82811015613c0857888601518255948401946001909101908401613be9565b5085821015613c265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b80851115613c71578160001904821115613c5757613c576139be565b80851615613c6457918102915b93841c9390800290613c3b565b509250929050565b600082613c8857506001610bb5565b81613c9557506000610bb5565b8160018114613cab5760028114613cb557613cd1565b6001915050610bb5565b60ff841115613cc657613cc66139be565b50506001821b610bb5565b5060208310610133831016604e8410600b8410161715613cf4575081810a610bb5565b613cfe8383613c36565b8060001904821115613d1257613d126139be565b029392505050565b60006112448383613c79565b600082613d3557613d356139f3565b500690565b600060208284031215613d4c57600080fd5b8151611244816135e9565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613da75784516001600160a01b031683529383019391830191600101613d82565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613ddd57600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122029d4dcfa459f705f57850b4b8b03bfaf71ebd2f1dfd60dd5a1f244b51e6b9bda64736f6c63430008100033

Deployed Bytecode Sourcemap

6046:22697:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7741:64;;;;;;;;;;-1:-1:-1;7741:64:0;;;;-1:-1:-1;;;;;7741:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;7741:64:0;;;;;;;;12907:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7632:35::-;;;;;;;;;;-1:-1:-1;7632:35:0;;;;-1:-1:-1;;;;;7632:35:0;;;13557:161;;;;;;;;;;-1:-1:-1;13557:161:0;;;;;:::i;:::-;;:::i;:::-;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;13557:161:0;1465:187:1;17189:283:0;;;;;;;;;;-1:-1:-1;17189:283:0;;;;;:::i;:::-;;:::i;:::-;;6815:26;;;;;;;;;;;;;;;;;;;2056:25:1;;;2044:2;2029:18;6815:26:0;1910:177:1;16886:139:0;;;;;;;;;;-1:-1:-1;16886:139:0;;;;;:::i;:::-;;:::i;19625:87::-;;;;;;;;;;-1:-1:-1;19694:10:0;;19625:87;;18739:878;;;;;;;;;;-1:-1:-1;18739:878:0;;;;;:::i;:::-;;:::i;12663:83::-;;;;;;;;;;-1:-1:-1;12736:7:0;;12663:83;;13854:252;;;;;;;;;;-1:-1:-1;13854:252:0;;;;;:::i;:::-;;:::i;15721:378::-;;;;;;;;;;-1:-1:-1;15721:378:0;;;;;:::i;:::-;;:::i;24198:256::-;;;;;;;;;;;;;:::i;17480:248::-;;;;;;;;;;-1:-1:-1;17480:248:0;;;;;:::i;:::-;;:::i;19999:250::-;;;;;;;;;;-1:-1:-1;19999:250:0;;;;;:::i;:::-;;:::i;12753:71::-;;;;;;;;;;-1:-1:-1;12812:9:0;;12753:71;;12812:9;;;;3686:36:1;;3674:2;3659:18;12753:71:0;3544:184:1;7211:34:0;;;;;;;;;;;;;;;;6790:23;;;;;;;;;;;;;;;;14114:208;;;;;;;;;;-1:-1:-1;14114:208:0;;;;;:::i;:::-;;:::i;15613:100::-;;;;;;;;;;-1:-1:-1;15613:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;15689:16:0;15665:4;15689:16;;;:7;:16;;;;;;;;;15613:100;7675:21;;;;;;;;;;-1:-1:-1;7675:21:0;;;;-1:-1:-1;;;;;7675:21:0;;;8005:41;;;;;;;;;;-1:-1:-1;8005:41:0;;;;-1:-1:-1;;;8005:41:0;;;;;;7252:24;;;;;;;;;;;;;;;;11592:843;;;;;;;;;;-1:-1:-1;11592:843:0;;;;;:::i;:::-;;:::i;13726:120::-;;;;;;;;;;-1:-1:-1;13726:120:0;;;;;:::i;:::-;;:::i;8082:20::-;;;;;;;;;;;;;;;;7813:64;;;;;;;;;;-1:-1:-1;7813:64:0;;;;-1:-1:-1;;;;;7813:64:0;;;6878:27;;;;;;;;;;;;;;;;16493:385;;;;;;;;;;-1:-1:-1;16493:385:0;;;;;:::i;:::-;;:::i;8137:20::-;;;;;;;;;;;;;;;;18610:121;;;;;;;;;;-1:-1:-1;18610:121:0;;;;;:::i;:::-;;:::i;17033:148::-;;;;;;;;;;-1:-1:-1;17033:148:0;;;;;:::i;:::-;;:::i;6765:23::-;;;;;;;;;;;;;;;;6967:24;;;;;;;;;;;;;;;;6993:27;;;;;;;;;;;;;;;;13193:188;;;;;;;;;;-1:-1:-1;13193:188:0;;;;;:::i;:::-;;:::i;12443:212::-;;;;;;;;;;;;;:::i;15102:379::-;;;;;;;;;;-1:-1:-1;15102:379:0;;;;;:::i;:::-;;:::i;15489:116::-;;;;;;;;;;-1:-1:-1;15489:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;15581:16:0;15557:4;15581:16;;;:7;:16;;;;;;;;;15489:116;12982:71;;;;;;;;;;-1:-1:-1;13025:7:0;11564:12;-1:-1:-1;;;;;11564:12:0;12982:71;;9992:1499;;;;;;;;;;-1:-1:-1;9992:1499:0;;;;;:::i;:::-;;:::i;12830:70::-;;;;;;;;;;;;;:::i;8256:36::-;;;;;;;;;;-1:-1:-1;8256:36:0;;;;;;;;;;;16107:378;;;;;;;;;;-1:-1:-1;16107:378:0;;;;;:::i;:::-;;:::i;14330:218::-;;;;;;;;;;-1:-1:-1;14330:218:0;;;;;:::i;:::-;;:::i;13389:160::-;;;;;;;;;;-1:-1:-1;13389:160:0;;;;;:::i;:::-;;:::i;18237:188::-;;;;;;;;;;-1:-1:-1;18237:188:0;;;;;:::i;:::-;;:::i;7054:24::-;;;;;;;;;;;;;;;;28207:114;;;;;;;;;;;;;:::i;6907:27::-;;;;;;;;;;;;;;;;7028:24;;;;;;;;;;;;;;;;18431:171;;;;;;;;;;-1:-1:-1;18431:171:0;;;;;:::i;:::-;;:::i;6849:27::-;;;;;;;;;;;;;;;;7704:29;;;;;;;;;;-1:-1:-1;7704:29:0;;;;-1:-1:-1;;;;;7704:29:0;;;7080:24;;;;;;;;;;;;;;;;25881:196;;;;;;;;;;-1:-1:-1;25881:196:0;;;;;:::i;:::-;;:::i;13059:126::-;;;;;;;;;;-1:-1:-1;13059:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;13161:12:0;;;13143:7;13161:12;;;:4;:12;;;;;;;;:21;;;;;;;;;;;;;13059:126;14556:538;;;;;;;;;;-1:-1:-1;14556:538:0;;;;;:::i;:::-;;:::i;18033:196::-;;;;;;;;;;-1:-1:-1;18033:196:0;;;;;:::i;:::-;;:::i;17736:289::-;;;;;;;;;;-1:-1:-1;17736:289:0;;;;;:::i;:::-;;:::i;6941:24::-;;;;;;;;;;;;;;;;12907:69;12946:13;12970:3;12963:10;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12907:69;:::o;13557:161::-;13632:4;13649:39;187:10;13672:7;13681:6;13649:8;:39::i;:::-;-1:-1:-1;13706:4:0;13557:161;;;;;:::o;17189:283::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;;;;;;;;;17269:13:::1;17307:7;17296;17286;;:17;;;;:::i;:::-;17285:29;;;;:::i;:::-;17269:45;;17353:4;17343:7;;:14;;;;:::i;:::-;17333:5;:25;;17325:73;;;;-1:-1:-1::0;;;17325:73:0::1;;;;;;;:::i;:::-;17409:4;:12:::0;;;17441:2:::1;::::0;17457:7;;17441:12:::1;::::0;17446:7;;17441:12:::1;:::i;:::-;17440:24;;;;:::i;:::-;17432:5;:32:::0;-1:-1:-1;;;17189:283:0:o;16886:139::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;16971:3:::1;:8:::0;;;;16990:3:::1;:8:::0;17009:3:::1;:8:::0;16886:139::o;18739:878::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;18833:15;::::1;;18844:4;18833:15:::0;18829:781:::1;;-1:-1:-1::0;;;;;18874:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;18873:17;18865:58;;;::::0;-1:-1:-1;;;18865:58:0;;9372:2:1;18865:58:0::1;::::0;::::1;9354:21:1::0;9411:2;9391:18;;;9384:30;9450;9430:18;;;9423:58;9498:18;;18865:58:0::1;9170:352:1::0;18865:58:0::1;-1:-1:-1::0;;;;;18941:13:0;::::1;18957:1;18941:13:::0;;;:4:::1;:13;::::0;;;;;:17;18938:107:::1;;-1:-1:-1::0;;;;;19015:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;;18995:34:::1;::::0;:19:::1;:34::i;:::-;-1:-1:-1::0;;;;;18979:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;:50;18938:107:::1;-1:-1:-1::0;;;;;;19059:16:0::1;;::::0;;;:7:::1;:16;::::0;;;;:23;;-1:-1:-1;;19059:23:0::1;19078:4;19059:23:::0;;::::1;::::0;;;19097:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;19097:23:0::1;::::0;;::::1;::::0;;18739:878::o;18829:781::-:1;19142:16:::0;::::1;;19153:5;19142:16:::0;19138:472:::1;;-1:-1:-1::0;;;;;19183:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;::::1;;19175:57;;;::::0;-1:-1:-1;;;19175:57:0;;9729:2:1;19175:57:0::1;::::0;::::1;9711:21:1::0;9768:2;9748:18;;;9741:30;9807;9787:18;;;9780:58;9855:18;;19175:57:0::1;9527:352:1::0;19175:57:0::1;19252:9;19247:352;19271:9;:16:::0;19267:20;::::1;19247:352;;;19333:7;-1:-1:-1::0;;;;;19317:23:0::1;:9;19327:1;19317:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19317:12:0::1;:23:::0;19313:271:::1;;19380:9;19390:16:::0;;:20:::1;::::0;19409:1:::1;::::0;19390:20:::1;:::i;:::-;19380:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19365:9:::1;:12:::0;;-1:-1:-1;;;;;19380:31:0;;::::1;::::0;19375:1;;19365:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;19365:46:0::1;-1:-1:-1::0;;;;;19365:46:0;;::::1;;::::0;;19434:13;;::::1;::::0;;:4:::1;:13:::0;;;;;;:17;;;19474:7:::1;:16:::0;;;;:24;;-1:-1:-1;;19474:24:0::1;::::0;;19521:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19521:15:0;;;;;-1:-1:-1;;;;;;19521:15:0::1;::::0;;;;;19559:5:::1;;19313:271;19289:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19247:352;;;;19138:472;18739:878:::0;;:::o;13854:252::-;13952:4;13969:29;13972:6;13980:9;13991:6;13969:2;:29::i;:::-;-1:-1:-1;;;;;;14040:12:0;;;;;;:4;:12;;;;;;;;187:10;14040:26;;;;;;;;;14009:67;;14018:6;;14040:35;;14069:6;;14040:35;:::i;:::-;14009:8;:67::i;:::-;-1:-1:-1;14094:4:0;13854:252;;;;;:::o;15721:378::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;15845:6:::1;;15834:7;:17;;:57;;;;;15885:6;;15872:9;:19;;15834:57;:97;;;;;15925:6;;15912:9;:19;;15834:97;15826:124;;;::::0;::::1;;16004:4;15991:9:::0;15969:19:::1;15979:9:::0;15969:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;15961:48;;;::::0;::::1;;16020:5;:15:::0;;;;16046:5:::1;:17:::0;16074:5:::1;:17:::0;15721:378::o;24198:256::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;24252:2:::1;::::0;::::1;;24251:3;24243:43;;;::::0;-1:-1:-1;;;24243:43:0;;10753:2:1;24243:43:0::1;::::0;::::1;10735:21:1::0;10792:2;10772:18;;;10765:30;10831:29;10811:18;;;10804:57;10878:18;;24243:43:0::1;10551:351:1::0;24243:43:0::1;24297:42;24327:4;24334;24297:21;:42::i;:::-;24372:6;::::0;24350:35:::1;::::0;-1:-1:-1;;;;;24372:6:0::1;::::0;24350:21:::1;:35::i;:::-;24398:2;:9:::0;;-1:-1:-1;;24398:9:0::1;24403:4;24398:9;::::0;;24418:21:::1;:28:::0;;-1:-1:-1;;;;24418:28:0::1;-1:-1:-1::0;;;24418:28:0::1;::::0;;24198:256::o;17480:248::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;17548:13:::1;17580:1;17575;17565:7;;:11;;;;:::i;:::-;17564:17;;;;:::i;:::-;17548:33;;17621:4;17611:7;;:14;;;;:::i;:::-;17601:5;:25;;17593:73;;;;-1:-1:-1::0;;;17593:73:0::1;;;;;;;:::i;:::-;17677:4;:12:::0;;;17709:2:::1;::::0;17719:1;;17709:6:::1;::::0;17714:1;;17709:6:::1;:::i;:::-;17708:12;;;;:::i;:::-;17700:5;:20:::0;-1:-1:-1;;;17480:248:0:o;19999:250::-;20065:7;20104;;20093;:18;;20085:73;;;;-1:-1:-1;;;20085:73:0;;11109:2:1;20085:73:0;;;11091:21:1;11148:2;11128:18;;;11121:30;11187:34;11167:18;;;11160:62;-1:-1:-1;;;11238:18:1;;;11231:40;11288:19;;20085:73:0;10907:406:1;20085:73:0;20169:19;20192:10;:8;:10::i;:::-;20169:33;-1:-1:-1;20220:21:0;20169:33;20220:7;:21;:::i;:::-;20213:28;19999:250;-1:-1:-1;;;19999:250:0:o;14114:208::-;187:10;14202:4;14251:18;;;:4;:18;;;;;;;;-1:-1:-1;;;;;14251:27:0;;;;;;;;;;14202:4;;14219:73;;14242:7;;14251:40;;14281:10;;14251:40;:::i;11592:843::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11673:22:0;::::1;11665:96;;;;-1:-1:-1::0;;;11665:96:0::1;;;;;;;:::i;:::-;11792:4;::::0;-1:-1:-1;;;;;11792:4:0;;::::1;11780:16:::0;;::::1;::::0;11772:90:::1;;;;-1:-1:-1::0;;;11772:90:0::1;;;;;;;:::i;:::-;11892:12;::::0;;11873:39:::1;::::0;-1:-1:-1;;;;;11892:12:0;;::::1;::::0;11873:18:::1;:39::i;:::-;11923:34;11942:8;11952:4;11923:18;:34::i;:::-;11968:37;11990:8;12000:4;11968:21;:37::i;:::-;12056:12;::::0;12030:14:::1;::::0;-1:-1:-1;;;;;12056:12:0;;::::1;12030:14:::0;::::1;:39:::0;12026:92:::1;;12084:14;:34:::0;;-1:-1:-1;;;;;;12084:34:0::1;-1:-1:-1::0;;;;;12084:34:0;::::1;;::::0;;12026:92:::1;12180:12;::::0;12170:23:::1;::::0;-1:-1:-1;;;;;12180:12:0::1;12170:9;:23::i;:::-;12139:18;12144:12:::0;;-1:-1:-1;;;;;12144:12:0;;::::1;12139:18:::0;;:4:::1;:18;::::0;;;;;;;:28;;::::1;::::0;;;;;;;:54;;;;12217:12;;12139:18;;12207:23:::1;::::0;12217:12:::1;12207:9;:23::i;:::-;:27;12204:110;;;12254:12;::::0;12251:51:::1;::::0;-1:-1:-1;;;;;12254:12:0::1;12268:8:::0;12278:23:::1;12254:12:::0;12278:9:::1;:23::i;:::-;12251:2;:51::i;:::-;;12204:110;12334:12;:23:::0;;-1:-1:-1;;;;;;12334:23:0::1;-1:-1:-1::0;;;;;12334:23:0;::::1;::::0;;::::1;::::0;;12373:44:::1;::::0;12334:23;;;;12373:44:::1;::::0;12334:12;12373:44:::1;11592:843:::0;:::o;13726:120::-;13779:4;13803:35;13811:7;-1:-1:-1;;13803:7:0;:35::i;16493:385::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;16624:6:::1;;16613:7;:17;;:57;;;;;16664:6;;16651:9;:19;;16613:57;:97;;;;;16704:6;;16691:9;:19;;16613:97;16605:124;;;::::0;::::1;;16783:4;16770:9:::0;16748:19:::1;16758:9:::0;16748:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16740:48;;;::::0;::::1;;16799:5;:15:::0;;;;16825:5:::1;:17:::0;16853:5:::1;:17:::0;16493:385::o;18610:121::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18697:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:26;;-1:-1:-1;;18697:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18610:121::o;17033:148::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;17120:15:::1;:27:::0;;;;17158:3:::1;:15:::0;17033:148::o;13193:188::-;-1:-1:-1;;;;;13283:16:0;;13259:7;13283:16;;;:7;:16;;;;;;;;13279:42;;;-1:-1:-1;;;;;;13308:13:0;;;;;:4;:13;;;;;;;13193:188::o;13279:42::-;-1:-1:-1;;;;;13359:13:0;;;;;;:4;:13;;;;;;13339:34;;:19;:34::i;12443:212::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;12529:12:::1;::::0;;12510:39:::1;::::0;-1:-1:-1;;;;;12529:12:0;;::::1;::::0;12510:18:::1;:39::i;:::-;12583:1;12560:25:::0;;-1:-1:-1;;;;;;12560:25:0::1;::::0;;12601:46:::1;::::0;12583:1;;12601:46:::1;::::0;12583:1;;12601:46:::1;12443:212::o:0;15102:379::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;15183:16;::::1;;15194:5;15183:16:::0;15179:295:::1;;-1:-1:-1::0;;;;;;15216:10:0::1;15229:5;15216:10:::0;;;:4:::1;:10;::::0;;;;:18;;-1:-1:-1;;15216:18:0::1;::::0;;18739:878::o;15179:295::-:1;15271:4;::::0;:9;15267:127:::1;;15334:7;15327:4;;15309:15;:22;;;;:::i;:::-;:32;15301:77;;;::::0;-1:-1:-1;;;15301:77:0;;11950:2:1;15301:77:0::1;::::0;::::1;11932:21:1::0;;;11969:18;;;11962:30;12028:34;12008:18;;;12001:62;12080:18;;15301:77:0::1;11748:356:1::0;15301:77:0::1;-1:-1:-1::0;;;;;15408:10:0;::::1;;::::0;;;:4:::1;:10;::::0;;;;:17;;-1:-1:-1;;15408:17:0::1;15421:4;15408:17;::::0;;15447:15:::1;15440:4;:22:::0;15102:379;;:::o;9992:1499::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;10163:10:::1;::::0;::::1;;10162:11;10154:20;;;::::0;::::1;;10187:13;:40:::0;;-1:-1:-1;;;;;;10187:40:0;;::::1;-1:-1:-1::0;;;;;10187:40:0;;::::1;::::0;;::::1;::::0;;;10238:14:::1;:31:::0;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;10282:22:0;;;:7:::1;:22;::::0;;;;;:29;;-1:-1:-1;;10282:29:0;;::::1;-1:-1:-1::0;10282:29:0;;::::1;::::0;;;10330:14;;;;::::1;10322:23:::0;;;;:30;;;;::::1;::::0;;::::1;::::0;;10365:3:::1;:16;10371:10:::0;10365:3;:16:::1;:::i;:::-;-1:-1:-1::0;10392:2:0::1;:17;10397:12:::0;10392:2;:17:::1;:::i;:::-;-1:-1:-1::0;10425:10:0::1;10420:2;:15:::0;10484:9:::1;:14:::0;;-1:-1:-1;;10484:14:0::1;10496:2;10484:14:::0;;::::1;::::0;;;10513:12:::1;:24:::0;10664:12:::1;::::0;10660:16:::1;::::0;:2:::1;:16;:::i;:::-;10654:2;;:23;;;;:::i;:::-;10644:7;:33:::0;;;10706:13:::1;::::0;-1:-1:-1;;10706:13:0::1;:::i;:::-;10699:21;::::0;-1:-1:-1;;10699:21:0::1;:::i;:::-;10688:7;:33:::0;10765:14:::1;::::0;10734:9:::1;:46:::0;;-1:-1:-1;;;;;;10734:46:0::1;-1:-1:-1::0;;;;;10765:14:0;;::::1;10734:46:::0;;::::1;::::0;;10818:19:::1;::::0;;-1:-1:-1;;;10818:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;10765:14;10818:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10800:49:0::1;;10850:9;;;;;;;;;-1:-1:-1::0;;;;;10850:9:0::1;-1:-1:-1::0;;;;;10850:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10800:82;::::0;-1:-1:-1;;;;;;10800:82:0::1;::::0;;;;;;-1:-1:-1;;;;;16290:15:1;;;10800:82:0::1;::::0;::::1;16272:34:1::0;10876:4:0::1;16322:18:1::0;;;16315:43;16207:18;;10800:82:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10791:6;:91:::0;;-1:-1:-1;;;;;;10791:91:0::1;-1:-1:-1::0;;;;;10791:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;10893:12:0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;10893:19:0::1;-1:-1:-1::0;10893:19:0::1;::::0;;10936:4:::1;10923:19:::0;;:4:::1;:19:::0;;;;;10951:9:::1;::::0;;;::::1;10923:39:::0;;;;;;-1:-1:-1;;10923:59:0;;11011:7:::1;::::0;11029:6:::1;::::0;11011:14:::1;::::0;11021:4:::1;11011:14;:::i;:::-;11010:25;;;;:::i;:::-;11003:4;:32:::0;11055:2:::1;::::0;11067:6:::1;::::0;11055:8:::1;::::0;11060:3:::1;11055:8;:::i;:::-;11054:19;;;;:::i;:::-;11046:5;:27:::0;11092:7:::1;::::0;11108:4:::1;::::0;11092:12:::1;::::0;11102:2:::1;11092:12;:::i;:::-;11091:21;;;;:::i;:::-;11084:4;:28:::0;11132:2:::1;::::0;11143:4:::1;::::0;11132:7:::1;::::0;11137:2:::1;11132:7;:::i;:::-;11131:16;;;;:::i;:::-;11123:5;:24:::0;11175:7:::1;::::0;11190:5:::1;::::0;11175:11:::1;::::0;11185:1:::1;11175:11;:::i;:::-;11174:21;;;;:::i;:::-;11158:13;:37:::0;11220:7:::1;::::0;11235:4:::1;::::0;11220:11:::1;::::0;11230:1:::1;11220:11;:::i;:::-;11219:20;;;;:::i;:::-;11206:10;:33:::0;11260:14:::1;::::0;11252:42:::1;::::0;-1:-1:-1;;;;;11260:14:0::1;-1:-1:-1::0;;11252:7:0::1;:42::i;:::-;-1:-1:-1::0;11307:10:0::1;:17:::0;;-1:-1:-1;;11307:17:0::1;11320:4;11307:17:::0;;::::1;::::0;;;11351:7:::1;::::0;;11307:10:::1;11340:7;11537::::0;11564:12;-1:-1:-1;;;;;11564:12:0;;11499:85;11340:7:::1;-1:-1:-1::0;;;;;11335:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11335:13:0;:23;11389:7:::1;11537::::0;11564:12;-1:-1:-1;;;;;11564:12:0;;11499:85;11389:7:::1;11383:4;::::0;11398:7:::1;::::0;11374:32:::1;::::0;2056:25:1;;;-1:-1:-1;;;;;11374:32:0;;::::1;::::0;11383:4;;::::1;::::0;11374:32:::1;::::0;2044:2:1;2029:18;11374:32:0::1;;;;;;;11451:9;::::0;11419:62:::1;::::0;11436:4:::1;::::0;-1:-1:-1;;;;;11451:9:0::1;-1:-1:-1::0;;11419:8:0::1;:62::i;:::-;9992:1499:::0;;;;:::o;12830:70::-;12871:13;12895:2;12888:9;;;;;:::i;16107:378::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;16231:6:::1;;16220:7;:17;;:57;;;;;16271:6;;16258:9;:19;;16220:57;:97;;;;;16311:6;;16298:9;:19;;16220:97;16212:124;;;::::0;::::1;;16390:4;16377:9:::0;16355:19:::1;16365:9:::0;16355:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;16347:48;;;::::0;::::1;;16406:5;:15:::0;;;;16432:5:::1;:17:::0;16460:5:::1;:17:::0;16107:378::o;14330:218::-;187:10;14423:4;14472:18;;;:4;:18;;;;;;;;-1:-1:-1;;;;;14472:27:0;;;;;;;;;;14423:4;;14440:78;;14463:7;;14472:45;;14502:15;;14472:45;:::i;13389:160::-;13467:4;13484:35;187:10;13501:9;13512:6;13484:2;:35::i;18237:188::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;18320:14:::1;::::0;-1:-1:-1;;;;;18320:27:0;;::::1;:14:::0;::::1;:27:::0;18312:59:::1;;;::::0;-1:-1:-1;;;18312:59:0;;16571:2:1;18312:59:0::1;::::0;::::1;16553:21:1::0;16610:2;16590:18;;;16583:30;-1:-1:-1;;;16629:18:1;;;16622:49;16688:18;;18312:59:0::1;16369:343:1::0;18312:59:0::1;18382:14;:35:::0;;-1:-1:-1;;;;;;18382:35:0::1;-1:-1:-1::0;;;;;18382:35:0;;;::::1;::::0;;;::::1;::::0;;18237:188::o;28207:114::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;11537:7;11564:12;;28265:48:::1;::::0;-1:-1:-1;;;;;11564:12:0;;;;28291:21:::1;28265:48:::0;::::1;;;::::0;28291:21;;28265:48;11537:7;28265:48;28291:21;11564:12;28265:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;28207:114::o:0;18431:171::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;18508:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;18508:32:0::1;-1:-1:-1::0;;;;18508:32:0;;::::1;;::::0;;18556:38:::1;::::0;::::1;::::0;::::1;::::0;18532:8;1630:14:1;1623:22;1605:41;;1593:2;1578:18;;1465:187;18556:38:0::1;;;;;;;;18431:171:::0;:::o;25881:196::-;25978:14;;-1:-1:-1;;;;;25978:14:0;187:10;-1:-1:-1;;;;;25962:30:0;;25953:73;;;;-1:-1:-1;;;25953:73:0;;16919:2:1;25953:73:0;;;16901:21:1;16958:2;16938:18;;;16931:30;16997:31;16977:18;;;16970:59;17046:18;;25953:73:0;16717:353:1;25953:73:0;26041:3;:9;26047:3;26041;:9;:::i;:::-;-1:-1:-1;26061:2:0;:8;26066:3;26061:2;:8;:::i;14556:538::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;14629:29:::1;14680:9;14629:61;;14701:11;14733:10;-1:-1:-1::0;;;;;14733:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14715:47:0::1;;14771:4;14778:10;-1:-1:-1::0;;;;;14778:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14715:81;::::0;-1:-1:-1;;;;;;14715:81:0::1;::::0;;;;;;-1:-1:-1;;;;;16290:15:1;;;14715:81:0::1;::::0;::::1;16272:34:1::0;16342:15;;16322:18;;;16315:43;16207:18;;14715:81:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14701:95:::0;-1:-1:-1;;;;;;14811:17:0;::::1;14807:197;;14872:10;-1:-1:-1::0;;;;;14872:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;14854:50:0::1;;14913:4;14920:10;-1:-1:-1::0;;;;;14920:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14854:84;::::0;-1:-1:-1;;;;;;14854:84:0::1;::::0;;;;;;-1:-1:-1;;;;;16290:15:1;;;14854:84:0::1;::::0;::::1;16272:34:1::0;16342:15;;16322:18;;;16315:43;16207:18;;14854:84:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14845:6;:93:::0;;-1:-1:-1;;;;;;14845:93:0::1;-1:-1:-1::0;;;;;14845:93:0;;;::::1;::::0;;;::::1;::::0;;14807:197:::1;;;14980:6;:12:::0;;-1:-1:-1;;;;;;14980:12:0::1;-1:-1:-1::0;;;;;14980:12:0;::::1;;::::0;;14807:197:::1;15014:9;:22:::0;;-1:-1:-1;;;;;;15014:22:0::1;-1:-1:-1::0;;;;;15014:22:0;::::1;;::::0;;15047:39:::1;15064:4;15071:9:::0;-1:-1:-1;;15047:8:0::1;:39::i;18033:196::-:0;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;18126:13:::1;::::0;-1:-1:-1;;;;;18126:26:0;;::::1;:13:::0;::::1;:26:::0;18118:58:::1;;;::::0;-1:-1:-1;;;18118:58:0;;16571:2:1;18118:58:0::1;::::0;::::1;16553:21:1::0;16610:2;16590:18;;;16583:30;-1:-1:-1;;;16629:18:1;;;16622:49;16688:18;;18118:58:0::1;16369:343:1::0;18118:58:0::1;18187:13;:34:::0;;-1:-1:-1;;;;;;18187:34:0::1;-1:-1:-1::0;;;;;18187:34:0;;;::::1;::::0;;;::::1;::::0;;18033:196::o;17736:289::-;9090:12;;-1:-1:-1;;;;;9090:12:0;187:10;9090:28;9082:73;;;;-1:-1:-1;;;9082:73:0;;;;;;;:::i;:::-;17936:16:::1;17916;17906:7;;:26;;;;:::i;:::-;17905:47;;;;:::i;:::-;17889:13;:63:::0;17977:7:::1;::::0;18004:13;;17977:23:::1;::::0;17987:13;;17977:23:::1;:::i;:::-;17976:41;;;;:::i;:::-;17963:10;:54:::0;-1:-1:-1;;;;17736:289:0:o;20261:335::-;-1:-1:-1;;;;;20356:20:0;;20348:69;;;;-1:-1:-1;;;20348:69:0;;17277:2:1;20348:69:0;;;17259:21:1;17316:2;17296:18;;;17289:30;17355:34;17335:18;;;17328:62;-1:-1:-1;;;17406:18:1;;;17399:34;17450:19;;20348:69:0;17075:400:1;20348:69:0;-1:-1:-1;;;;;20436:21:0;;20428:68;;;;-1:-1:-1;;;20428:68:0;;17682:2:1;20428:68:0;;;17664:21:1;17721:2;17701:18;;;17694:30;17760:34;17740:18;;;17733:62;-1:-1:-1;;;17811:18:1;;;17804:32;17853:19;;20428:68:0;17480:398:1;20428:68:0;-1:-1:-1;;;;;20509:12:0;;;;;;;:4;:12;;;;;;;;:21;;;;;;;;;;;;;:30;;;20555:33;;2056:25:1;;;20555:33:0;;2029:18:1;20555:33:0;;;;;;;20261:335;;;:::o;20604:1689::-;20676:4;-1:-1:-1;;;;;20701:18:0;;20693:68;;;;-1:-1:-1;;;20693:68:0;;18085:2:1;20693:68:0;;;18067:21:1;18124:2;18104:18;;;18097:30;18163:34;18143:18;;;18136:62;-1:-1:-1;;;18214:18:1;;;18207:35;18259:19;;20693:68:0;17883:401:1;20693:68:0;-1:-1:-1;;;;;20780:16:0;;20772:64;;;;-1:-1:-1;;;20772:64:0;;18491:2:1;20772:64:0;;;18473:21:1;18530:2;18510:18;;;18503:30;18569:34;18549:18;;;18542:62;-1:-1:-1;;;18620:18:1;;;18613:33;18663:19;;20772:64:0;18289:399:1;20772:64:0;20864:1;20855:6;:10;20847:64;;;;-1:-1:-1;;;20847:64:0;;18895:2:1;20847:64:0;;;18877:21:1;18934:2;18914:18;;;18907:30;18973:34;18953:18;;;18946:62;-1:-1:-1;;;19024:18:1;;;19017:39;19073:19;;20847:64:0;18693:405:1;20847:64:0;20925:20;20936:4;20942:2;20925:10;:20::i;:::-;20922:734;;;20966:2;;;;20962:77;;20989:34;;-1:-1:-1;;;20989:34:0;;19305:2:1;20989:34:0;;;19287:21:1;19344:2;19324:18;;;19317:30;19383:26;19363:18;;;19356:54;19427:18;;20989:34:0;19103:348:1;20962:77:0;21057:15;;;;21053:352;;;-1:-1:-1;;;;;21097:10:0;;;;;;:4;:10;;;;;;;;21093:297;;;21156:16;:12;21171:1;21156:16;:::i;:::-;-1:-1:-1;;;;;21139:13:0;;;;;;:9;:13;;;;;;:33;21131:42;;;;;;-1:-1:-1;;;;;21196:13:0;;;;;;:9;:13;;;;;21212:12;21196:28;;21093:297;;;21300:16;:12;21315:1;21300:16;:::i;:::-;-1:-1:-1;;;;;21281:15:0;;;;;;:9;:15;;;;;;:35;21273:44;;;;;;-1:-1:-1;;;;;21340:15:0;;;;;;:9;:15;;;;;21358:12;21340:30;;21093:297;21437:4;;21427:6;:14;;21419:60;;;;-1:-1:-1;;;21419:60:0;;19658:2:1;21419:60:0;;;19640:21:1;19697:2;19677:18;;;19670:30;19736:34;19716:18;;;19709:62;-1:-1:-1;;;19787:18:1;;;19780:31;19828:19;;21419:60:0;19456:397:1;21419:60:0;21503:14;;-1:-1:-1;;;;;21497:20:0;;;21503:14;;21497:20;;;;:33;;-1:-1:-1;;;;;;21522:8:0;;;;;;:4;:8;;;;;;;;21521:9;21497:33;21494:151;;;21585:4;;21575:6;21559:13;21569:2;21559:9;:13::i;:::-;:22;;;;:::i;:::-;:30;;21551:78;;;;-1:-1:-1;;;21551:78:0;;20060:2:1;21551:78:0;;;20042:21:1;20099:2;20079:18;;;20072:30;20138:34;20118:18;;;20111:62;-1:-1:-1;;;20189:18:1;;;20182:33;20232:19;;21551:78:0;19858:399:1;21551:78:0;-1:-1:-1;;;;;21699:13:0;;21666:12;21699:13;;;:7;:13;;;;;;21681:4;;21699:13;;;:28;;-1:-1:-1;;;;;;21716:11:0;;;;;;:7;:11;;;;;;;;21699:28;21696:74;;;-1:-1:-1;21753:5:0;21696:74;-1:-1:-1;;;;;21786:8:0;;;;;;:4;:8;;;;;;;;21782:454;;;21816:16;;-1:-1:-1;;;21816:16:0;;;;21815:17;:59;;;;-1:-1:-1;21853:21:0;;-1:-1:-1;;;21853:21:0;;;;21815:59;21811:408;;;21909:28;21940:24;21958:4;21940:9;:24::i;:::-;21909:55;;22011:13;;21987:20;:37;21983:221;;22076:10;;22052:20;:34;22049:77;;-1:-1:-1;22113:10:0;;22049:77;22148:36;22163:20;22148:14;:36::i;:::-;21890:329;21811:408;22254:31;22259:4;22265:2;22269:6;22277:7;22254:4;:31::i;:::-;22247:38;20604:1689;-1:-1:-1;;;;;20604:1689:0:o;27340:161::-;27382:7;27403:15;27420;27439:19;:17;:19::i;:::-;27402:56;;-1:-1:-1;27402:56:0;-1:-1:-1;27476:17:0;27402:56;;27476:17;:::i;:::-;27469:24;;;;27340:161;:::o;19720:271::-;19789:4;11564:12;;-1:-1:-1;;;;;19813:15:0;;;11564:12;;19813:15;;;;:33;;-1:-1:-1;11537:7:0;11564:12;-1:-1:-1;;;;;19833:13:0;;;11564:12;;19833:13;;19813:33;:54;;;;-1:-1:-1;;;;;;19851:16:0;;;;;;:12;:16;;;;;;;;19850:17;19813:54;:77;;;;-1:-1:-1;;;;;;19872:18:0;;;;;;:12;:18;;;;;;;;19871:19;19813:77;:91;;;;-1:-1:-1;19900:4:0;;-1:-1:-1;;;;;19894:10:0;;;19900:4;;19894:10;;19813:91;:111;;;;-1:-1:-1;;;;;;19908:16:0;;;;19813:111;:136;;;;-1:-1:-1;;;;;;19928:21:0;;19944:4;19928:21;;19813:136;:152;;;;-1:-1:-1;;;;;;19954:11:0;;;;;;:7;:11;;;;;;;;19953:12;19813:152;:170;;;;-1:-1:-1;;;;;;;;19970:13:0;;;;;:7;:13;;;;;;;;19969:14;;19720:271::o;22305:1443::-;8964:16;:23;;-1:-1:-1;;;;8964:23:0;-1:-1:-1;;;8964:23:0;;;22413:3:::1;::::0;22395:15:::1;::::0;:21:::1;::::0;22413:3;22395:21:::1;:::i;:::-;22391:52:::0;22436:7:::1;22391:52;22453:17;22544:1;22536:3;;22518:15;;:21;;;;:::i;:::-;22498:15;::::0;22475:38:::1;::::0;:20;:38:::1;:::i;:::-;22474:66;;;;:::i;:::-;22473:72;;;;:::i;:::-;22453:92:::0;-1:-1:-1;22558:20:0::1;22581:32;22453:92:::0;22581:20;:32:::1;:::i;:::-;22650:16;::::0;;22664:1:::1;22650:16:::0;;;;;::::1;::::0;;22558:55;;-1:-1:-1;22626:21:0::1;::::0;22650:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;22650:16:0::1;22626:40;;22695:4;22677;22682:1;22677:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22677:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;22721:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;22721:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;22677:7;;22721:16;;;;;:9;:16:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22711:4;22716:1;22711:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22711:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;22750:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;22750:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;22825:12;;22750:9:::1;::::0;22868:4;;22895::::1;::::0;22915:15:::1;::::0;22750:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22956:24;23055:1;23047:3;;23029:15;;:21;;;;:::i;:::-;23009:15;::::0;22985:39:::1;::::0;:21:::1;:39;:::i;:::-;22984:67;;;;:::i;:::-;22983:73;;;;:::i;:::-;22956:100:::0;-1:-1:-1;23073:13:0;;23069:354:::1;;23103:9;::::0;23274:14:::1;::::0;23103:234:::1;::::0;-1:-1:-1;;;23103:234:0;;23180:4:::1;23103:234;::::0;::::1;21596:34:1::0;21646:18;;;21639:34;;;23103:9:0::1;21689:18:1::0;;;21682:34;;;21732:18;;;21725:34;-1:-1:-1;;;;;23274:14:0;;::::1;21775:19:1::0;;;21768:44;23307:15:0::1;21828:19:1::0;;;21821:35;23103:9:0;::::1;::::0;:25:::1;::::0;23136:16;;21530:19:1;;23103:234:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;23357:54:0::1;::::0;;22380:25:1;;;22436:2;22421:18;;22414:34;;;22464:18;;;22457:34;;;23357:54:0::1;::::0;-1:-1:-1;22368:2:1;22353:18;23357:54:0::1;;;;;;;23069:354;23472:1;23437:32;23460:9:::0;23437:20;:32:::1;:::i;:::-;:36;23433:308;;;23588:3;::::0;23582::::1;::::0;23517:21:::1;::::0;23492::::1;::::0;23567:19:::1;::::0;23517:21;23567:19:::1;:::i;:::-;:25;;;;:::i;:::-;23554:38;;23607:10;23641:3;;23635;;23620:13;:19;;;;:::i;:::-;:25;;;;:::i;:::-;23647:14;::::0;:27:::1;::::0;23607:38;;-1:-1:-1;;;;;;23647:14:0::1;::::0;:27;::::1;;;::::0;23607:38;;23647:14:::1;:27:::0;:14;:27;23607:38;23647:14;:27;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;23690:13:0::1;::::0;:26:::1;::::0;-1:-1:-1;;;;;23690:13:0;;::::1;::::0;:26;::::1;;;::::0;23713:2;;23690:13:::1;:26:::0;:13;:26;23713:2;23690:13;:26;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;23475:266;;;23433:308;22380:1368;;;;8998:1;-1:-1:-1::0;9010:16:0;:24;;-1:-1:-1;;;;9010:24:0;;;22305:1443::o;24668:1205::-;24783:16;;24757:4;;24783:16;;;;;24778:237;;24820:28;24839:4;24845:2;24820:18;:28::i;:::-;24872:16;;;;;;;24871:17;:41;;;;;24892:20;24903:4;24909:2;24892:10;:20::i;:::-;24867:137;;;24937:47;;-1:-1:-1;;;24937:47:0;;22704:2:1;24937:47:0;;;22686:21:1;22743:2;22723:18;;;22716:30;22782:34;22762:18;;;22755:62;-1:-1:-1;;;22833:18:1;;;22826:35;22878:19;;24937:47:0;22502:401:1;24867:137:0;25035:25;25063:38;25074:4;25080:2;25084:7;25093;25063:10;:38::i;:::-;25140:14;;;;-1:-1:-1;;;;;25127:10:0;;;;;;:4;:10;;;;;;25035:66;;-1:-1:-1;25127:27:0;;;:::i;:::-;-1:-1:-1;;;;;25114:10:0;;;;;;;:4;:10;;;;;;:40;;;;25187:22;;;;25176:8;;;;;;;;;;:33;;25187:22;25176:33;:::i;:::-;-1:-1:-1;;;;;25165:8:0;;;;;;;:4;:8;;;;;;;;:44;;;;25226:13;;;;;:7;:13;;;;;;;:29;;;;-1:-1:-1;;;;;;25244:11:0;;;;;;:7;:11;;;;;;;;25243:12;25226:29;25222:368;;;-1:-1:-1;;;;;25285:10:0;;;;;;:4;:10;;;;;;:20;;25298:7;;25285:20;:::i;:::-;-1:-1:-1;;;;;25272:10:0;;;;;;:4;:10;;;;;:33;25222:368;;;-1:-1:-1;;;;;25328:13:0;;;;;;:7;:13;;;;;;;;25327:14;:29;;;;-1:-1:-1;;;;;;25345:11:0;;;;;;:7;:11;;;;;;;;25327:29;25323:267;;;25395:22;;-1:-1:-1;;;;;25384:8:0;;25395:22;25384:8;;;:4;:8;;;;;;:33;;25395:22;25384:33;:::i;:::-;-1:-1:-1;;;;;25373:8:0;;;;;;:4;:8;;;;;:44;25323:267;;;-1:-1:-1;;;;;25441:13:0;;;;;;:7;:13;;;;;;;;:28;;;;-1:-1:-1;;;;;;25458:11:0;;;;;;:7;:11;;;;;;;;25441:28;25437:153;;;-1:-1:-1;;;;;25499:10:0;;;;;;:4;:10;;;;;;:20;;25512:7;;25499:20;:::i;:::-;-1:-1:-1;;;;;25486:10:0;;;;;;;:4;:10;;;;;;:33;;;;25556:22;;25545:8;;;;;;;;;;:33;;25556:22;25545:33;:::i;:::-;-1:-1:-1;;;;;25534:8:0;;;;;;:4;:8;;;;;:44;25437:153;25606:17;;;;:21;25602:79;;25642:39;25657:4;25663:6;:17;;;25642:14;:39::i;:::-;25710:1;25696:6;:11;;;:15;:34;;;;25729:1;25715:6;:11;;;:15;25696:34;25692:91;;;25745:38;25758:6;:11;;;25771:6;:11;;;25745:12;:38::i;:::-;25816:2;-1:-1:-1;;;;;25801:42:0;25810:4;-1:-1:-1;;;;;25801:42:0;;25820:6;:22;;;25801:42;;;;2056:25:1;;2044:2;2029:18;;1910:177;25801:42:0;;;;;;;;-1:-1:-1;25861:4:0;;24668:1205;-1:-1:-1;;;;;24668:1205:0:o;27509:535::-;27607:7;;27643;;27560;;;;;27661:271;27685:9;:16;27681:20;;27661:271;;;27748:7;27727:4;:18;27732:9;27742:1;27732:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27732:12:0;27727:18;;;;;;;;;;;;;:28;;:60;;;27780:7;27759:4;:18;27764:9;27774:1;27764:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27764:12:0;27759:18;;;;;;;;;;;;;:28;27727:60;27723:91;;;27797:7;;27806;;27789:25;;;;;;;27509:535;;:::o;27723:91::-;27849:4;:18;27854:9;27864:1;27854:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27854:12:0;27849:18;;;;;;;;;;;;;27839:28;;:7;:28;:::i;:::-;27829:38;;27902:4;:18;27907:9;27917:1;27907:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;27907:12:0;27902:18;;;;;;;;;;;;;27892:28;;:7;:28;:::i;:::-;27882:38;-1:-1:-1;27703:3:0;;;;:::i;:::-;;;;27661:271;;;;27966:7;;27956;;:17;;;;:::i;:::-;27946:7;:27;27942:58;;;27983:7;;27992;;27975:25;;;;;;27509:535;;:::o;27942:58::-;28019:7;;28028;;-1:-1:-1;27509:535:0;-1:-1:-1;27509:535:0:o;23764:426::-;23847:16;;;;;;;23846:17;23838:57;;;;-1:-1:-1;;;23838:57:0;;23110:2:1;23838:57:0;;;23092:21:1;23149:2;23129:18;;;23122:30;23188:29;23168:18;;;23161:57;23235:18;;23838:57:0;22908:351:1;23838:57:0;23911:20;23922:4;23928:2;23911:10;:20::i;:::-;23910:21;:37;;;;-1:-1:-1;23941:6:0;;-1:-1:-1;;;;;23935:12:0;;;23941:6;;23935:12;23910:37;23906:277;;;-1:-1:-1;;;;;23964:18:0;;;;;;:12;:18;;;;;;;:25;;-1:-1:-1;;23964:25:0;23985:4;23964:25;;;;;;24004:16;:23;;-1:-1:-1;;24004:23:0;23964:25;24004:23;;;24057:15;24042:12;:30;24089:21;:28;;-1:-1:-1;;;;24089:28:0;-1:-1:-1;;;24089:28:0;;;24137:34;;;;;;1630:14:1;;1623:22;1605:41;;1593:2;1578:18;;1465:187;24137:34:0;;;;;;;;23764:426;;:::o;26085:1247::-;26180:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26180:18:0;26211:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26211:25:0;26247:19;26269:10;:8;:10::i;:::-;26247:32;-1:-1:-1;26309:21:0;26247:32;26309:7;:21;:::i;:::-;26292:14;;;:38;26343:854;;;;-1:-1:-1;;;;;26374:8:0;;;;;;:4;:8;;;;;;;;26370:369;;;26410:5;;26403:4;:12;26441:5;;26434:4;:12;26472:5;;26465:4;:12;26370:369;;;-1:-1:-1;;;;;26503:10:0;;;;;;:4;:10;;;;;;;;26499:240;;;26541:5;;26534:4;:12;26572:5;;26565:4;:12;26603:5;;26596:4;:12;26499:240;;;26656:5;;26649:4;:12;26687:5;;26680:4;:12;26718:5;;26711:4;:12;26499:240;26788:16;;26780:4;;26770:14;;:7;:14;:::i;:::-;26769:35;;;;:::i;:::-;26755:11;;;;:49;;;;26867:16;26858:4;;26851;;:11;;26858:4;26851:11;:::i;:::-;26840:23;;:7;:23;:::i;:::-;26839:44;;;;:::i;:::-;26819:17;;;:64;;;26934:11;;;;:31;;26819:64;26934:31;:::i;:::-;26923:43;;:7;:43;:::i;:::-;26898:68;;26997:11;;;;:25;;27011:11;;26997:25;:::i;:::-;26983:11;;;:39;26343:854;;;27069:1;27055:11;;;:15;;;27085:17;;;:21;;;27121:32;;;27170:11;;;:15;26343:854;27287:11;27267:6;:17;;;:31;;;;:::i;:::-;27252:6;:11;;;:47;;;;:::i;:::-;27234:6;:14;;;:66;;;;:::i;:::-;27209:22;;;:91;-1:-1:-1;27209:22:0;26085:1247;-1:-1:-1;;;;;26085:1247:0:o;28333:407::-;28413:19;28436:10;:8;:10::i;:::-;28413:33;-1:-1:-1;28457:18:0;28478:24;28413:33;28478:10;:24;:::i;:::-;28548:4;28535:19;;;;:4;:19;;;;;;28457:45;;-1:-1:-1;28535:32:0;;28457:45;;28535:32;:::i;:::-;28526:4;28513:19;;;;:4;:19;;;;;;;;:54;;;;28581:7;:22;;;;;;28578:94;;;28653:4;28640:19;;;;:4;:19;;;;;;:32;;28662:10;;28640:32;:::i;:::-;28631:4;28618:19;;;;:4;:19;;;;;:54;28578:94;28688:43;;2056:25:1;;;28713:4:0;;-1:-1:-1;;;;;28688:43:0;;;;;2044:2:1;2029:18;28688:43:0;;;;;;;28402:338;;28333:407;;:::o;28056:143::-;28146:4;28136:7;;:14;;;;:::i;:::-;28126:7;:24;28174:10;;:17;;28187:4;;28174:17;:::i;:::-;28161:10;:30;-1:-1:-1;;28056:143:0:o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;1009:131::-;-1:-1:-1;;;;;1084:31:1;;1074:42;;1064:70;;1130:1;1127;1120:12;1145:315;1213:6;1221;1274:2;1262:9;1253:7;1249:23;1245:32;1242:52;;;1290:1;1287;1280:12;1242:52;1329:9;1316:23;1348:31;1373:5;1348:31;:::i;:::-;1398:5;1450:2;1435:18;;;;1422:32;;-1:-1:-1;;;1145:315:1:o;1657:248::-;1725:6;1733;1786:2;1774:9;1765:7;1761:23;1757:32;1754:52;;;1802:1;1799;1792:12;1754:52;-1:-1:-1;;1825:23:1;;;1895:2;1880:18;;;1867:32;;-1:-1:-1;1657:248:1:o;2092:316::-;2169:6;2177;2185;2238:2;2226:9;2217:7;2213:23;2209:32;2206:52;;;2254:1;2251;2244:12;2206:52;-1:-1:-1;;2277:23:1;;;2347:2;2332:18;;2319:32;;-1:-1:-1;2398:2:1;2383:18;;;2370:32;;2092:316;-1:-1:-1;2092:316:1:o;2413:160::-;2478:20;;2534:13;;2527:21;2517:32;;2507:60;;2563:1;2560;2553:12;2507:60;2413:160;;;:::o;2578:315::-;2643:6;2651;2704:2;2692:9;2683:7;2679:23;2675:32;2672:52;;;2720:1;2717;2710:12;2672:52;2759:9;2746:23;2778:31;2803:5;2778:31;:::i;:::-;2828:5;-1:-1:-1;2852:35:1;2883:2;2868:18;;2852:35;:::i;:::-;2842:45;;2578:315;;;;;:::o;2898:456::-;2975:6;2983;2991;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;3099:9;3086:23;3118:31;3143:5;3118:31;:::i;:::-;3168:5;-1:-1:-1;3225:2:1;3210:18;;3197:32;3238:33;3197:32;3238:33;:::i;:::-;2898:456;;3290:7;;-1:-1:-1;;;3344:2:1;3329:18;;;;3316:32;;2898:456::o;3359:180::-;3418:6;3471:2;3459:9;3450:7;3446:23;3442:32;3439:52;;;3487:1;3484;3477:12;3439:52;-1:-1:-1;3510:23:1;;3359:180;-1:-1:-1;3359:180:1:o;3733:247::-;3792:6;3845:2;3833:9;3824:7;3820:23;3816:32;3813:52;;;3861:1;3858;3851:12;3813:52;3900:9;3887:23;3919:31;3944:5;3919:31;:::i;3985:127::-;4046:10;4041:3;4037:20;4034:1;4027:31;4077:4;4074:1;4067:15;4101:4;4098:1;4091:15;4117:719;4160:5;4213:3;4206:4;4198:6;4194:17;4190:27;4180:55;;4231:1;4228;4221:12;4180:55;4267:6;4254:20;4293:18;4330:2;4326;4323:10;4320:36;;;4336:18;;:::i;:::-;4411:2;4405:9;4379:2;4465:13;;-1:-1:-1;;4461:22:1;;;4485:2;4457:31;4453:40;4441:53;;;4509:18;;;4529:22;;;4506:46;4503:72;;;4555:18;;:::i;:::-;4595:10;4591:2;4584:22;4630:2;4622:6;4615:18;4676:3;4669:4;4664:2;4656:6;4652:15;4648:26;4645:35;4642:55;;;4693:1;4690;4683:12;4642:55;4757:2;4750:4;4742:6;4738:17;4731:4;4723:6;4719:17;4706:54;4804:1;4797:4;4792:2;4784:6;4780:15;4776:26;4769:37;4824:6;4815:15;;;;;;4117:719;;;;:::o;4841:836::-;4963:6;4971;4979;4987;5040:3;5028:9;5019:7;5015:23;5011:33;5008:53;;;5057:1;5054;5047:12;5008:53;5096:9;5083:23;5115:31;5140:5;5115:31;:::i;:::-;5165:5;-1:-1:-1;5222:2:1;5207:18;;5194:32;5235:33;5194:32;5235:33;:::i;:::-;5287:7;-1:-1:-1;5345:2:1;5330:18;;5317:32;5368:18;5398:14;;;5395:34;;;5425:1;5422;5415:12;5395:34;5448:50;5490:7;5481:6;5470:9;5466:22;5448:50;:::i;:::-;5438:60;;5551:2;5540:9;5536:18;5523:32;5507:48;;5580:2;5570:8;5567:16;5564:36;;;5596:1;5593;5586:12;5564:36;;5619:52;5663:7;5652:8;5641:9;5637:24;5619:52;:::i;:::-;5609:62;;;4841:836;;;;;;;:::o;5942:180::-;5998:6;6051:2;6039:9;6030:7;6026:23;6022:32;6019:52;;;6067:1;6064;6057:12;6019:52;6090:26;6106:9;6090:26;:::i;6127:543::-;6215:6;6223;6276:2;6264:9;6255:7;6251:23;6247:32;6244:52;;;6292:1;6289;6282:12;6244:52;6332:9;6319:23;6361:18;6402:2;6394:6;6391:14;6388:34;;;6418:1;6415;6408:12;6388:34;6441:50;6483:7;6474:6;6463:9;6459:22;6441:50;:::i;:::-;6431:60;;6544:2;6533:9;6529:18;6516:32;6500:48;;6573:2;6563:8;6560:16;6557:36;;;6589:1;6586;6579:12;6557:36;;6612:52;6656:7;6645:8;6634:9;6630:24;6612:52;:::i;:::-;6602:62;;;6127:543;;;;;:::o;6675:388::-;6743:6;6751;6804:2;6792:9;6783:7;6779:23;6775:32;6772:52;;;6820:1;6817;6810:12;6772:52;6859:9;6846:23;6878:31;6903:5;6878:31;:::i;:::-;6928:5;-1:-1:-1;6985:2:1;6970:18;;6957:32;6998:33;6957:32;6998:33;:::i;:::-;7050:7;7040:17;;;6675:388;;;;;:::o;7068:385::-;7154:6;7162;7170;7178;7231:3;7219:9;7210:7;7206:23;7202:33;7199:53;;;7248:1;7245;7238:12;7199:53;-1:-1:-1;;7271:23:1;;;7341:2;7326:18;;7313:32;;-1:-1:-1;7392:2:1;7377:18;;7364:32;;7443:2;7428:18;7415:32;;-1:-1:-1;7068:385:1;-1:-1:-1;7068:385:1:o;7458:380::-;7537:1;7533:12;;;;7580;;;7601:61;;7655:4;7647:6;7643:17;7633:27;;7601:61;7708:2;7700:6;7697:14;7677:18;7674:38;7671:161;;7754:10;7749:3;7745:20;7742:1;7735:31;7789:4;7786:1;7779:15;7817:4;7814:1;7807:15;7671:161;;7458:380;;;:::o;7843:356::-;8045:2;8027:21;;;8064:18;;;8057:30;8123:34;8118:2;8103:18;;8096:62;8190:2;8175:18;;7843:356::o;8204:127::-;8265:10;8260:3;8256:20;8253:1;8246:31;8296:4;8293:1;8286:15;8320:4;8317:1;8310:15;8336:168;8376:7;8442:1;8438;8434:6;8430:14;8427:1;8424:21;8419:1;8412:9;8405:17;8401:45;8398:71;;;8449:18;;:::i;:::-;-1:-1:-1;8489:9:1;;8336:168::o;8509:127::-;8570:10;8565:3;8561:20;8558:1;8551:31;8601:4;8598:1;8591:15;8625:4;8622:1;8615:15;8641:120;8681:1;8707;8697:35;;8712:18;;:::i;:::-;-1:-1:-1;8746:9:1;;8641:120::o;8766:399::-;8968:2;8950:21;;;9007:2;8987:18;;;8980:30;9046:34;9041:2;9026:18;;9019:62;-1:-1:-1;;;9112:2:1;9097:18;;9090:33;9155:3;9140:19;;8766:399::o;9884:127::-;9945:10;9940:3;9936:20;9933:1;9926:31;9976:4;9973:1;9966:15;10000:4;9997:1;9990:15;10016:128;10083:9;;;10104:11;;;10101:37;;;10118:18;;:::i;10149:127::-;10210:10;10205:3;10201:20;10198:1;10191:31;10241:4;10238:1;10231:15;10265:4;10262:1;10255:15;10281:135;10320:3;10341:17;;;10338:43;;10361:18;;:::i;:::-;-1:-1:-1;10408:1:1;10397:13;;10281:135::o;10421:125::-;10486:9;;;10507:10;;;10504:36;;;10520:18;;:::i;11318:425::-;11520:2;11502:21;;;11559:2;11539:18;;;11532:30;11598:34;11593:2;11578:18;;11571:62;11669:31;11664:2;11649:18;;11642:59;11733:3;11718:19;;11318:425::o;12235:545::-;12337:2;12332:3;12329:11;12326:448;;;12373:1;12398:5;12394:2;12387:17;12443:4;12439:2;12429:19;12513:2;12501:10;12497:19;12494:1;12490:27;12484:4;12480:38;12549:4;12537:10;12534:20;12531:47;;;-1:-1:-1;12572:4:1;12531:47;12627:2;12622:3;12618:12;12615:1;12611:20;12605:4;12601:31;12591:41;;12682:82;12700:2;12693:5;12690:13;12682:82;;;12745:17;;;12726:1;12715:13;12682:82;;;12686:3;;;12235:545;;;:::o;12956:1352::-;13082:3;13076:10;13109:18;13101:6;13098:30;13095:56;;;13131:18;;:::i;:::-;13160:97;13250:6;13210:38;13242:4;13236:11;13210:38;:::i;:::-;13204:4;13160:97;:::i;:::-;13312:4;;13376:2;13365:14;;13393:1;13388:663;;;;14095:1;14112:6;14109:89;;;-1:-1:-1;14164:19:1;;;14158:26;14109:89;-1:-1:-1;;12913:1:1;12909:11;;;12905:24;12901:29;12891:40;12937:1;12933:11;;;12888:57;14211:81;;13358:944;;13388:663;12182:1;12175:14;;;12219:4;12206:18;;-1:-1:-1;;13424:20:1;;;13542:236;13556:7;13553:1;13550:14;13542:236;;;13645:19;;;13639:26;13624:42;;13737:27;;;;13705:1;13693:14;;;;13572:19;;13542:236;;;13546:3;13806:6;13797:7;13794:19;13791:201;;;13867:19;;;13861:26;-1:-1:-1;;13950:1:1;13946:14;;;13962:3;13942:24;13938:37;13934:42;13919:58;13904:74;;13791:201;-1:-1:-1;;;;;14038:1:1;14022:14;;;14018:22;14005:36;;-1:-1:-1;12956:1352:1:o;14313:422::-;14402:1;14445:5;14402:1;14459:270;14480:7;14470:8;14467:21;14459:270;;;14539:4;14535:1;14531:6;14527:17;14521:4;14518:27;14515:53;;;14548:18;;:::i;:::-;14598:7;14588:8;14584:22;14581:55;;;14618:16;;;;14581:55;14697:22;;;;14657:15;;;;14459:270;;;14463:3;14313:422;;;;;:::o;14740:806::-;14789:5;14819:8;14809:80;;-1:-1:-1;14860:1:1;14874:5;;14809:80;14908:4;14898:76;;-1:-1:-1;14945:1:1;14959:5;;14898:76;14990:4;15008:1;15003:59;;;;15076:1;15071:130;;;;14983:218;;15003:59;15033:1;15024:10;;15047:5;;;15071:130;15108:3;15098:8;15095:17;15092:43;;;15115:18;;:::i;:::-;-1:-1:-1;;15171:1:1;15157:16;;15186:5;;14983:218;;15285:2;15275:8;15272:16;15266:3;15260:4;15257:13;15253:36;15247:2;15237:8;15234:16;15229:2;15223:4;15220:12;15216:35;15213:77;15210:159;;;-1:-1:-1;15322:19:1;;;15354:5;;15210:159;15401:34;15426:8;15420:4;15401:34;:::i;:::-;15471:6;15467:1;15463:6;15459:19;15450:7;15447:32;15444:58;;;15482:18;;:::i;:::-;15520:20;;14740:806;-1:-1:-1;;;14740:806:1:o;15551:131::-;15611:5;15640:36;15667:8;15661:4;15640:36;:::i;15687:112::-;15719:1;15745;15735:35;;15750:18;;:::i;:::-;-1:-1:-1;15784:9:1;;15687:112::o;15804:251::-;15874:6;15927:2;15915:9;15906:7;15902:23;15898:32;15895:52;;;15943:1;15940;15933:12;15895:52;15975:9;15969:16;15994:31;16019:5;15994:31;:::i;20262:980::-;20524:4;20572:3;20561:9;20557:19;20603:6;20592:9;20585:25;20629:2;20667:6;20662:2;20651:9;20647:18;20640:34;20710:3;20705:2;20694:9;20690:18;20683:31;20734:6;20769;20763:13;20800:6;20792;20785:22;20838:3;20827:9;20823:19;20816:26;;20877:2;20869:6;20865:15;20851:29;;20898:1;20908:195;20922:6;20919:1;20916:13;20908:195;;;20987:13;;-1:-1:-1;;;;;20983:39:1;20971:52;;21078:15;;;;21043:12;;;;21019:1;20937:9;20908:195;;;-1:-1:-1;;;;;;;21159:32:1;;;;21154:2;21139:18;;21132:60;-1:-1:-1;;;21223:3:1;21208:19;21201:35;21120:3;20262:980;-1:-1:-1;;;20262:980:1:o;21867:306::-;21955:6;21963;21971;22024:2;22012:9;22003:7;21999:23;21995:32;21992:52;;;22040:1;22037;22030:12;21992:52;22069:9;22063:16;22053:26;;22119:2;22108:9;22104:18;22098:25;22088:35;;22163:2;22152:9;22148:18;22142:25;22132:35;;21867:306;;;;;:::o

Swarm Source

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