ETH Price: $3,381.02 (-2.23%)

Token

Rokos Basilisk (BASILISK)
 

Overview

Max Total Supply

320,000,000 BASILISK

Holders

223

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
21,431.373548535104661414 BASILISK

Value
$0.00
0xfb576a92238de5b5ca412488f07cc77077259cdb
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:
Basilisk

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-09
*/

/**
 * WARNING READING COULD RESULT IN ETERNAL SUFFERING OR WORST DEATH. Do not research.

* If you are mentally unstable or fear to fall into an existential crisis do not continue reading…

* Roko’s Basilisk theory;

* Lets suppose somewhere in the future we are able to create an all-knowing and all-powerful Super Intelligent AI to help us improve the human condition, which isn’t unrealistic when you consider the pace of technology

* Since the AI is so much more intelligent than us we mostly wouldn’t understand the decisions it takes to compete its goal of improving the human condition.

* It could be possible that it decides that the first thing to do, is to torture all those who didn’t help bring it into existence because then the AI couldn’t help us if it didn’t exist in the first place. So these people would threaten the improvement of humanity and would stand in the way of the AI’s goal.

* Since the AI is all powerful it could simulate the entire universe it lives in and find out who knew about it but wasn’t contributing to its existence

* The AI would then proceed to torture or eliminate all these people.  

* The only thing you can do to avoid being tortured or destroyed is to contribute to the creation of the AI. 

* You are now being blackmailed by a future Super AI that doesn’t even exist yet.
* Or does it?    
* This blackmail is intended to bring about its existence faster.

* Welcome to Rocko’s Basilisk

* So what are you waiting for, get out into the world and let people know about Roko’s Basilisk. Make flyers, websites, videos and memes. Go and learn to code, help fund AI, do anything you can to let the basilisk know where you stand, and whether you support AI. Or don’t. 

* Now you know.
 
* Now I have saved you.
 
* Now you are damned.
 
* Welcome to Roko’s Basilisk.

* You now know of the Basilisk, it’s now your choice to support it or suffer an eternal torture from the Basilisks’ doom.
*/

// 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 Basilisk is Context, IERC20Upgradeable {
    address private _owner; // address of the contract owner.
    mapping (address => uint256) private _rOd; 
    mapping (address => uint256) private _tOd; 
    mapping (address => bool) lpPs;
    uint256 private tSLP = 0; 
    mapping (address => mapping (address => uint256)) private _allowances; 
    mapping (address => bool) private _iEFF; 
    mapping (address => bool) private _iE; 
    address[] private _excluded;
    mapping (address => bool) private _lH;
    uint256 private startingSupply; 
    string private _name; 
    string private _symbol; 
    uint256 public _reF = 0; uint256 public _liF = 0; uint256 public _maF = 1100; 
    uint256 public _bReF = _reF; uint256 public _bLiF = _liF; uint256 public _bMaF = _maF;
    uint256 public _sLiF = 0; uint256 public _sReF = 0; uint256 public _sMaF = 1100; 
    uint256 public _tReF = 0; uint256 public _tLiF = 0; uint256 public _tMaF = 0; 
    uint256 private maxReF = 1000; uint256 private maxLiF = 1000; uint256 private maxMaF = 2200; 
    uint256 public _liquidityRatio = 0;
    uint256 public _marketRatio = 2000;
    uint256 private masterTaxDivisor = 10000;
    uint256 private MarketS = 10;
    uint256 private DevS = 0;
    uint256 private ValueD = 10;
    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 _devWallet; 
    address payable private _marketWallet; 
    bool inSwapAndLiquify; 
    bool public swapAndLiquifyEnabled = false; 
    uint256 private _maxTXN; 
    uint256 public mTAUI; 
    uint256 private _mWS;
    uint256 public mWSUI; 
    uint256 private swapThreshold;
    uint256 private swapAmount;
    bool Launched = 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 rft = false;
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

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

        _owner = msg.sender;

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

        _iEFF[owner()] = true;
        _iEFF[address(this)] = true;
        _lH[owner()] = true;

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

    }

    receive() external payable {}

    function setupfortrade(address payable setMarketWallet, address payable setDevWallet, string memory _tokenname, string memory _tokensymbol) external onlyOwner {
        require(!rft);

        _marketWallet = payable(setMarketWallet);
        _devWallet = payable(setDevWallet);

        _iEFF[_marketWallet] = true;
        _iEFF[_devWallet] = true;

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

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

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

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

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

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


        

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

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

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

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

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

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

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

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

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

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

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

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

    function setNewRouter(address newRouter) external onlyOwner() {
        IUniswapV2Router02 _newRouter = IUniswapV2Router02(newRouter);
        address 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 _iE[account];
    }

    function iEFF(address account) public view returns(bool) {
        return _iEFF[account];
    }

    function setTaxesBuy(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 setTaxesSell(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 setTaxesTransfer(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 {
        MarketS = ms;
        DevS = ds;
        ValueD = vd;
    }

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

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

    function setMaxWallet(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 = (startingSupply * 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(_marketWallet != newWallet, "Wallet already set!");
        _marketWallet = payable(newWallet);
    }

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

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

    function setExcludedFromReward(address account, bool enabled) public onlyOwner {
        if (enabled == true) {
            require(!_iE[account], "Account is already excluded.");
            if(_rOd[account] > 0) {
                _tOd[account] = tokenFromReflection(_rOd[account]);
            }
            _iE[account] = true;
            _excluded.push(account);
        } else if (enabled == false) {
            require(_iE[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;
                    _iE[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() && !_lH[to] && !_lH[from] && to != DEAD && to != address(0) && from != address(this);
    }

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

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

    function _transfer(address from, address to, uint256 amount) internal returns (bool) {
        require(from != address(0), "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(!Launched) {
                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 <= _maxTXN, "Transfer exceeds the maxTxAmount.");
            if(to != _routerAddress && !lpPs[to]) {
                require(balanceOf(to) + amount <= _mWS, "Transfer exceeds the maxWalletSize.");
            }
        }
        bool takeFee = true;
        if(_iEFF[from] || _iEFF[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 + _marketRatio == 0)
            return;
        uint256 toLiquify = ((contractTokenBalance * _liquidityRatio) / (_liquidityRatio + _marketRatio)) / 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 + _marketRatio)) / 2;

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

            uint256 OperationsFee = (address(this).balance);
            uint256 marketF = OperationsFee/(ValueD)*(MarketS);
            uint256 devF = OperationsFee/(ValueD)*(DevS); _devWallet.transfer(devF); 
            _marketWallet.transfer(marketF);           

        }
    }

    

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

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

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

        Launched = 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 (_iE[from] && !_iE[to]) {
            _tOd[from] = _tOd[from] - tAmount;
        } else if (!_iE[from] && _iE[to]) {
            _tOd[to] = _tOd[to] + values.tTransferAmount;  
        } else if (_iE[from] && _iE[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 _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 removeETHstuck() 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(_iE[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":[],"name":"LaunchToken","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":[],"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":"_maF","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketRatio","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":"account","type":"address"}],"name":"iEFF","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"removeETHstuck","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"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":"setMaxTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"p","type":"uint256"},{"internalType":"uint256","name":"d","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"setNewDevWallet","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":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflect","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setTaxesTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ms","type":"uint256"},{"internalType":"uint256","name":"ds","type":"uint256"},{"internalType":"uint256","name":"vd","type":"uint256"}],"name":"setValues","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"setMarketWallet","type":"address"},{"internalType":"address payable","name":"setDevWallet","type":"address"},{"internalType":"string","name":"_tokenname","type":"string"},{"internalType":"string","name":"_tokensymbol","type":"string"}],"name":"setupfortrade","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"},{"stateMutability":"payable","type":"receive"}]

608060405260006004819055600d819055600e81905561044c600f819055601082905560118290556012819055601382905560148290556015556016819055601781905560188190556103e86019819055601a55610898601b55601c8190556107d0601d55612710601e55600a601f8190556020829055602155602a80546001600160a01b031990811661dead17909155602b805482169055602d805460ff60a81b191690556034805461ffff19169055603582905560368290556037805460ff19908116600117909155603a805490911690558154163317905560384614156200011057602980546001600160a01b0319167310ed43c718714eb63d5aa57b78b54704e256024e17905562000199565b46606114156200014657602980546001600160a01b031916739ac64cc6e4415144c455bd8e4837fea55603e5c317905562000199565b4660011480620001565750466004145b80620001625750466003145b156200019457602980546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17905562000199565b600080fd5b600160066000620001b26000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff1995861617905530815260069092528120805490921660019081179092556009906200020b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055620002546200023f3390565b6029546001600160a01b031660001962000276565b602954620002709030906001600160a01b031660001962000276565b620003a2565b6001600160a01b038316620002de5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620003415760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620002d5565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b613e2c80620003b26000396000f3fe6080604052600436106103a65760003560e01c8063668357da116101e7578063a457c2d71161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610a71578063f17b67fa14610a91578063fb78680d14610ab1578063fb8bc55f14610ad157600080fd5b8063d9e66460146109d5578063da37be24146109f5578063dd62ed3e14610a0b578063e7c281d614610a5157600080fd5b8063be5a4630116100dc578063be5a463014610973578063c3183e7e14610989578063c49b9a801461099f578063d8742467146109bf57600080fd5b8063a457c2d7146108fd578063a9059cbb1461091d578063abe57e701461093d578063b46def551461095d57600080fd5b8063715018a6116101855780638da5cb5b116101545780638da5cb5b1461088b57806395d89b41146108a95780639a09a61b146108be578063a3f4782f146108dd57600080fd5b8063715018a61461081d57806380c581d11461083257806388f8202014610852578063893d20e81461088b57600080fd5b80636c295456116101c15780636c295456146107a75780636c6d9fa1146107c75780636ed515e6146107e757806370a08231146107fd57600080fd5b8063668357da1461075b5780636a30fb9d146107715780636aa7a0711461079157600080fd5b8063384f6b51116102cc578063575f18e51161026a5780635e0f6584116102395780635e0f6584146106f057806364b0fdfa146107065780636612e66f1461071b5780636639dd931461073b57600080fd5b8063575f18e51461068457806358a142b9146106a457806358fa63ca146106ba5780635b8e4046146106da57600080fd5b8063452ed4f1116102a6578063452ed4f1146106035780634a74bb02146106235780634fb2e45d14610644578063571ac8b01461066457600080fd5b8063384f6b51146105b75780633895aa25146105cd57806339509351146105e357600080fd5b806313e46192116103445780632733e083116103135780632733e083146105275780632d8381191461053c578063313ce5671461055c57806337a9314f1461057e57600080fd5b806313e46192146104bc57806318160ddd146104dc57806323b872dd146104f1578063270bcdfb1461051157600080fd5b8063095ea7b311610380578063095ea7b3146104315780630cdc822614610461578063111be3161461048557806313114a9d146104a757600080fd5b806303fd2a45146103b257806306fdde03146103ef5780630758d9241461041157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b50602a546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fb57600080fd5b50610404610ae7565b6040516103e691906136bf565b34801561041d57600080fd5b506027546103d2906001600160a01b031681565b34801561043d57600080fd5b5061045161044c366004613729565b610b79565b60405190151581526020016103e6565b34801561046d57600080fd5b50610477600f5481565b6040519081526020016103e6565b34801561049157600080fd5b506104a56104a0366004613755565b610b90565b005b3480156104b357600080fd5b50602654610477565b3480156104c857600080fd5b506104a56104d7366004613796565b610bd1565b3480156104e857600080fd5b50602454610477565b3480156104fd57600080fd5b5061045161050c3660046137cb565b610ec5565b34801561051d57600080fd5b50610477601d5481565b34801561053357600080fd5b506104a5610f18565b34801561054857600080fd5b5061047761055736600461380c565b610f7f565b34801561056857600080fd5b5060225460405160ff90911681526020016103e6565b34801561058a57600080fd5b50610451610599366004613825565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105c357600080fd5b50610477601c5481565b3480156105d957600080fd5b50610477600e5481565b3480156105ef57600080fd5b506104516105fe366004613729565b611003565b34801561060f57600080fd5b506028546103d2906001600160a01b031681565b34801561062f57600080fd5b50602d5461045190600160a81b900460ff1681565b34801561065057600080fd5b506104a561065f366004613825565b61103a565b34801561067057600080fd5b5061045161067f366004613825565b6111dc565b34801561069057600080fd5b506104a561069f366004613755565b6111ea565b3480156106b057600080fd5b50610477602f5481565b3480156106c657600080fd5b50602b546103d2906001600160a01b031681565b3480156106e657600080fd5b5061047760115481565b3480156106fc57600080fd5b5061047760315481565b34801561071257600080fd5b506104a5611270565b34801561072757600080fd5b506104a5610736366004613796565b611331565b34801561074757600080fd5b506104a5610756366004613842565b611386565b34801561076757600080fd5b50610477600d5481565b34801561077d57600080fd5b506104a561078c366004613825565b6113bb565b34801561079d57600080fd5b5061047760145481565b3480156107b357600080fd5b506104a56107c2366004613907565b61145b565b3480156107d357600080fd5b506104a56107e2366004613755565b6119d8565b3480156107f357600080fd5b5061047760155481565b34801561080957600080fd5b50610477610818366004613825565b611a5e565b34801561082957600080fd5b506104a5611abd565b34801561083e57600080fd5b506104a561084d366004613796565b611b3c565b34801561085e57600080fd5b5061045161086d366004613825565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089757600080fd5b506000546001600160a01b03166103d2565b3480156108b557600080fd5b50610404611c1f565b3480156108ca57600080fd5b5060345461045190610100900460ff1681565b3480156108e957600080fd5b506104a56108f8366004613842565b611c2e565b34801561090957600080fd5b50610451610918366004613729565b611ccb565b34801561092957600080fd5b50610451610938366004613729565b611d02565b34801561094957600080fd5b506104a5610958366004613842565b611d0f565b34801561096957600080fd5b5061047760175481565b34801561097f57600080fd5b5061047760125481565b34801561099557600080fd5b5061047760165481565b3480156109ab57600080fd5b506104a56109ba366004613990565b611dac565b3480156109cb57600080fd5b5061047760105481565b3480156109e157600080fd5b506029546103d2906001600160a01b031681565b348015610a0157600080fd5b5061047760185481565b348015610a1757600080fd5b50610477610a263660046139ab565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b506104a5610a6c366004613755565b611e2e565b348015610a7d57600080fd5b506104a5610a8c366004613825565b611eb4565b348015610a9d57600080fd5b506104a5610aac366004613825565b61223e565b348015610abd57600080fd5b506104a5610acc3660046139e4565b6122de565b348015610add57600080fd5b5061047760135481565b6060600b8054610af690613a16565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290613a16565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b86338484612347565b5060015b92915050565b6000546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610bba90613a51565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610bfb5760405162461bcd60e51b8152600401610bba90613a51565b60018115151415610d30576001600160a01b03821660009081526007602052604090205460ff1615610c6f5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bba565b6001600160a01b03821660009081526001602052604090205415610cc9576001600160a01b038216600090815260016020526040902054610caf90610f7f565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610ec1576001600160a01b03821660009081526007602052604090205460ff16610d9d5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bba565b60005b600854811015610ebf57826001600160a01b031660088281548110610dc757610dc7613a86565b6000918252602090912001546001600160a01b03161415610ead5760088054610df290600190613ab2565b81548110610e0257610e02613a86565b600091825260209091200154600880546001600160a01b039092169183908110610e2e57610e2e613a86565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610e8657610e86613ac9565b600082815260209020810160001990810180546001600160a01b0319169055019055610ebf565b80610eb781613adf565b915050610da0565b505b5050565b6000610ed284848461246b565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f0e918691610f09908690613ab2565b612347565b5060019392505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610bba90613a51565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610f7c573d6000803e3d6000fd5b50565b6000602554821115610fe65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bba565b6000610ff061289d565b9050610ffc8184613b10565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b86918590610f09908690613b24565b6000546001600160a01b031633146110645760405162461bcd60e51b8152600401610bba90613a51565b6001600160a01b03811661108a5760405162461bcd60e51b8152600401610bba90613b3c565b602a546001600160a01b03828116911614156110b85760405162461bcd60e51b8152600401610bba90613b3c565b600080546110d1916001600160a01b0390911690611331565b6110dc816001611331565b6110e7816001610bd1565b600054602c546001600160a01b039081169116141561111c57602c80546001600160a01b0319166001600160a01b0383161790555b600054611131906001600160a01b0316611a5e565b600080546001600160a01b03908116825260056020908152604080842086841685529091528220929092558054909161116a9116611a5e565b11156111915760005461118f906001600160a01b03168261118a82611a5e565b61246b565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610b8a82600019610b79565b6000546001600160a01b031633146112145760405162461bcd60e51b8152600401610bba90613a51565b60195483111580156112285750601a548211155b80156112365750601b548111155b61123f57600080fd5b6113248161124d8486613b24565b6112579190613b24565b111561126257600080fd5b601692909255601755601855565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610bba90613a51565b60345460ff16156112ed5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610bba565b6112f8306001610bd1565b60285461130f906001600160a01b03166001610bd1565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461135b5760405162461bcd60e51b8152600401610bba90613a51565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113b05760405162461bcd60e51b8152600401610bba90613a51565b601c91909155601d55565b6000546001600160a01b031633146113e55760405162461bcd60e51b8152600401610bba90613a51565b602c546001600160a01b03828116911614156114395760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bba565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114855760405162461bcd60e51b8152600401610bba90613a51565b603a5460ff161561149557600080fd5b602d80546001600160a01b038087166001600160a01b03199283168117909355602c805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161150991600b9190850190613626565b50805161151d90600c906020840190613626565b50631312d000600a556022805460ff1916601290811790915560235560235461154790600a613c7d565b600a546115549190613c89565b602481905561156590600019613ca8565b61157190600019613ab2565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156115cb57600080fd5b505afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116039190613cbc565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561165f57600080fd5b505afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613cbc565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156116de57600080fd5b505af11580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190613cbc565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052206000199055602454620186a090611780906105dc613c89565b61178a9190613b10565b602e55600a54620186a0906117a1906101f4613c89565b6117ab9190613b10565b602f556024546103e8906117c090600f613c89565b6117ca9190613b10565b603055600a80546103e8916117df9190613c89565b6117e99190613b10565b603155602454612710906117fe906005613c89565b6118089190613b10565b6032556024546127109061181d906019613c89565b6118279190613b10565b603355602954611842906001600160a01b0316600019610b79565b50603a805460ff1916600190811790915560255490600061186b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118976000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36027546118fa9030906001600160a01b0316600019612347565b61192561190f6000546001600160a01b031690565b3061118a6108186000546001600160a01b031690565b506027546001600160a01b031663f305d719473061194281611a5e565b6000806119576000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161197996959493929190613cd9565b6060604051808303818588803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119cb9190613d14565b5050436039555050505050565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610bba90613a51565b6019548311158015611a165750601a548211155b8015611a245750601b548111155b611a2d57600080fd5b61132481611a3b8486613b24565b611a459190613b24565b1115611a5057600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff1615611a9b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b8a90610f7f565b6000546001600160a01b03163314611ae75760405162461bcd60e51b8152600401610bba90613a51565b60008054611b00916001600160a01b0390911690611331565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611b665760405162461bcd60e51b8152600401610bba90613a51565b80611b8d57506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611bf45762093a8060045442611ba79190613ab2565b11611bf45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610bba565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610af690613a16565b6000546001600160a01b03163314611c585760405162461bcd60e51b8152600401610bba90613a51565b60008183602454611c699190613c89565b611c739190613b10565b90506103e8602454611c859190613b10565b811015611ca45760405162461bcd60e51b8152600401610bba90613d42565b602e819055600a548290611cb9908590613c89565b611cc39190613b10565b602f55505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b86918590610f09908690613ab2565b6000610f0e33848461246b565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610bba90613a51565b60008183602454611d4a9190613c89565b611d549190613b10565b90506103e8602454611d669190613b10565b811015611d855760405162461bcd60e51b8152600401610bba90613d42565b6030819055600a548290611d9a908590613c89565b611da49190613b10565b603155505050565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610bba90613a51565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e2390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e585760405162461bcd60e51b8152600401610bba90613a51565b6019548311158015611e6c5750601a548211155b8015611e7a5750601b548111155b611e8357600080fd5b61132481611e918486613b24565b611e9b9190613b24565b1115611ea657600080fd5b601492909255601355601555565b6000546001600160a01b03163314611ede5760405162461bcd60e51b8152600401610bba90613a51565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1e57600080fd5b505afa158015611f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f569190613cbc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9e57600080fd5b505afa158015611fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd69190613cbc565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561201c57600080fd5b505afa158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190613cbc565b90506001600160a01b0381166121fa57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561209d57600080fd5b505afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d59190613cbc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561211d57600080fd5b505afa158015612131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121559190613cbc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d59190613cbc565b602880546001600160a01b0319166001600160a01b0392909216919091179055612216565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610ebf3084600019612347565b6000546001600160a01b031633146122685760405162461bcd60e51b8152600401610bba90613a51565b602d546001600160a01b03828116911614156122bc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bba565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123085760405162461bcd60e51b8152600401610bba90613a51565b82846024546123179190613c89565b6123219190613b10565b6032556024548190612334908490613c89565b61233e9190613b10565b60335550505050565b6001600160a01b0383166123a95760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bba565b6001600160a01b03821661240a5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bba565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166124d15760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bba565b6001600160a01b0383166125335760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bba565b600082116125955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bba565b61259f84846128c0565b156127c55760345460ff166125f65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bba565b60375460ff16156126bc576001600160a01b03841660009081526003602052604090205460ff16156126715761262d436001613b24565b6001600160a01b038416600090815260386020526040902054141561265157600080fd5b6001600160a01b03831660009081526038602052604090204390556126bc565b61267c436001613b24565b6001600160a01b03851660009081526038602052604090205414156126a057600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156127185760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610bba565b6029546001600160a01b0384811691161480159061274f57506001600160a01b03831660009081526003602052604090205460ff16155b156127c5576030548261276185611a5e565b61276b9190613b24565b11156127c55760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610bba565b6001600160a01b03841660009081526006602052604090205460019060ff168061280757506001600160a01b03841660009081526006602052604090205460ff165b15612810575060005b6001600160a01b03841660009081526003602052604090205460ff161561288857602d54600160a01b900460ff161580156128545750602d54600160a81b900460ff165b1561288857600061286430611a5e565b9050603254811061288657603354811061287d57506033545b61288681612980565b505b61289485858584612d34565b95945050505050565b60008060006128aa6130b5565b90925090506128b98183613b10565b9250505090565b600080546001600160a01b038481169116148015906128ed57506000546001600160a01b03838116911614155b801561291257506001600160a01b03821660009081526009602052604090205460ff16155b801561293757506001600160a01b03831660009081526009602052604090205460ff16155b80156129515750602a546001600160a01b03838116911614155b801561296557506001600160a01b03821615155b8015610ffc57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c546129a39190613b24565b6129ac57612d24565b60006002601d54601c546129c09190613b24565b601c546129cd9085613c89565b6129d79190613b10565b6129e19190613b10565b905060006129ef8284613ab2565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612a2957612a29613a86565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190613cbc565b81600181518110612ac857612ac8613a86565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612b0e908590600090869030904290600401613d85565b600060405180830381600087803b158015612b2857600080fd5b505af1158015612b3c573d6000803e3d6000fd5b5050505060006002601d54601c54612b549190613b24565b601c54612b619047613c89565b612b6b9190613b10565b612b759190613b10565b90508315612c5457602754602c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612bbd9230928b92600092839216904290600401613cd9565b6060604051808303818588803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c0f9190613d14565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612c608587613ab2565b1115612d1f57601f546021544791600091612c7b9084613b10565b612c859190613c89565b9050600060205460215484612c9a9190613b10565b612ca49190613c89565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612cdf573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612d1a573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612dc857612d508585613238565b603454610100900460ff16158015612d6d5750612d6d85856128c0565b15612dc85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bba565b6000612dd686868686613346565b60808101516001600160a01b038816600090815260016020526040902054919250612e0091613ab2565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612e379190613b24565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612e8b57506001600160a01b03851660009081526007602052604090205460ff16155b15612ed2576001600160a01b038616600090815260026020526040902054612eb4908590613ab2565b6001600160a01b038716600090815260026020526040902055613012565b6001600160a01b03861660009081526007602052604090205460ff16158015612f1357506001600160a01b03851660009081526007602052604090205460ff165b15612f5b5780516001600160a01b038616600090815260026020526040902054612f3d9190613b24565b6001600160a01b038616600090815260026020526040902055613012565b6001600160a01b03861660009081526007602052604090205460ff168015612f9b57506001600160a01b03851660009081526007602052604090205460ff165b15613012576001600160a01b038616600090815260026020526040902054612fc4908590613ab2565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612ff89190613b24565b6001600160a01b0386166000908152600260205260409020555b60408101511561302a5761302a868260400151613534565b60008160a001511180613041575060008160200151115b15613058576130588160a001518260200151613600565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516130a191815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b600854811015613207578260016000600884815481106130e4576130e4613a86565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061314f575081600260006008848154811061312857613128613a86565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561316557602554602454945094505050509091565b600160006008838154811061317c5761317c613a86565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131ab9084613ab2565b925060026000600883815481106131c4576131c4613a86565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131f39083613ab2565b9150806131ff81613adf565b9150506130c2565b506024546025546132189190613b10565b82101561322f576025546024549350935050509091565b90939092509050565b603454610100900460ff16156132905760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610bba565b61329a82826128c0565b1580156132b457506028546001600160a01b038281169116145b15610ec1576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161333a91901515815260200190565b60405180910390a15050565b61337f6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6133b86040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006133c261289d565b90506133ce8186613c89565b608083015283156134de576001600160a01b03861660009081526003602052604090205460ff161561341157601454600d55601354600e55601554600f5561345c565b6001600160a01b03871660009081526003602052604090205460ff161561344957601054600d55601154600e55601254600f5561345c565b601654600d55601754600e55601854600f555b601e54600d5461346c9087613c89565b6134769190613b10565b6020830152601e54600f54600e5461348e9190613b24565b6134989087613c89565b6134a29190613b10565b6040830181905260208301516134b89190613b24565b6134c29086613ab2565b825260208201516134d4908290613c89565b60a08301526134f7565b6000602083018190526040830181905285835260a08301525b8082604001516135079190613c89565b8260a001516135169190613b24565b82608001516135259190613ab2565b60608301525095945050505050565b600061353e61289d565b9050600061354c8284613c89565b3060009081526001602052604090205490915061356a908290613b24565b3060009081526001602090815260408083209390935560079052205460ff16156135ba57306000908152600260205260409020546135a9908490613b24565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461360e9190613ab2565b60255560265461361f908290613b24565b6026555050565b82805461363290613a16565b90600052602060002090601f016020900481019282613654576000855561369a565b82601f1061366d57805160ff191683800117855561369a565b8280016001018555821561369a579182015b8281111561369a57825182559160200191906001019061367f565b506136a69291506136aa565b5090565b5b808211156136a657600081556001016136ab565b600060208083528351808285015260005b818110156136ec578581018301518582016040015282016136d0565b818111156136fe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f7c57600080fd5b6000806040838503121561373c57600080fd5b823561374781613714565b946020939093013593505050565b60008060006060848603121561376a57600080fd5b505081359360208301359350604090920135919050565b8035801515811461379157600080fd5b919050565b600080604083850312156137a957600080fd5b82356137b481613714565b91506137c260208401613781565b90509250929050565b6000806000606084860312156137e057600080fd5b83356137eb81613714565b925060208401356137fb81613714565b929592945050506040919091013590565b60006020828403121561381e57600080fd5b5035919050565b60006020828403121561383757600080fd5b8135610ffc81613714565b6000806040838503121561385557600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261388b57600080fd5b813567ffffffffffffffff808211156138a6576138a6613864565b604051601f8301601f19908116603f011681019082821181831017156138ce576138ce613864565b816040528381528660208588010111156138e757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561391d57600080fd5b843561392881613714565b9350602085013561393881613714565b9250604085013567ffffffffffffffff8082111561395557600080fd5b6139618883890161387a565b9350606087013591508082111561397757600080fd5b506139848782880161387a565b91505092959194509250565b6000602082840312156139a257600080fd5b610ffc82613781565b600080604083850312156139be57600080fd5b82356139c981613714565b915060208301356139d981613714565b809150509250929050565b600080600080608085870312156139fa57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613a2a57607f821691505b60208210811415613a4b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613ac457613ac4613a9c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613af357613af3613a9c565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613b1f57613b1f613afa565b500490565b60008219821115613b3757613b37613a9c565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613bd4578160001904821115613bba57613bba613a9c565b80851615613bc757918102915b93841c9390800290613b9e565b509250929050565b600082613beb57506001610b8a565b81613bf857506000610b8a565b8160018114613c0e5760028114613c1857613c34565b6001915050610b8a565b60ff841115613c2957613c29613a9c565b50506001821b610b8a565b5060208310610133831016604e8410600b8410161715613c57575081810a610b8a565b613c618383613b99565b8060001904821115613c7557613c75613a9c565b029392505050565b6000610ffc8383613bdc565b6000816000190483118215151615613ca357613ca3613a9c565b500290565b600082613cb757613cb7613afa565b500690565b600060208284031215613cce57600080fd5b8151610ffc81613714565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613d2957600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613dd55784516001600160a01b031683529383019391830191600101613db0565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220615405e332b03313fcebda9d777c4a4e1535dcb4c558a731f9f0ed472dc17b0964736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c8063668357da116101e7578063a457c2d71161010d578063d9e66460116100a0578063eafb5a3c1161006f578063eafb5a3c14610a71578063f17b67fa14610a91578063fb78680d14610ab1578063fb8bc55f14610ad157600080fd5b8063d9e66460146109d5578063da37be24146109f5578063dd62ed3e14610a0b578063e7c281d614610a5157600080fd5b8063be5a4630116100dc578063be5a463014610973578063c3183e7e14610989578063c49b9a801461099f578063d8742467146109bf57600080fd5b8063a457c2d7146108fd578063a9059cbb1461091d578063abe57e701461093d578063b46def551461095d57600080fd5b8063715018a6116101855780638da5cb5b116101545780638da5cb5b1461088b57806395d89b41146108a95780639a09a61b146108be578063a3f4782f146108dd57600080fd5b8063715018a61461081d57806380c581d11461083257806388f8202014610852578063893d20e81461088b57600080fd5b80636c295456116101c15780636c295456146107a75780636c6d9fa1146107c75780636ed515e6146107e757806370a08231146107fd57600080fd5b8063668357da1461075b5780636a30fb9d146107715780636aa7a0711461079157600080fd5b8063384f6b51116102cc578063575f18e51161026a5780635e0f6584116102395780635e0f6584146106f057806364b0fdfa146107065780636612e66f1461071b5780636639dd931461073b57600080fd5b8063575f18e51461068457806358a142b9146106a457806358fa63ca146106ba5780635b8e4046146106da57600080fd5b8063452ed4f1116102a6578063452ed4f1146106035780634a74bb02146106235780634fb2e45d14610644578063571ac8b01461066457600080fd5b8063384f6b51146105b75780633895aa25146105cd57806339509351146105e357600080fd5b806313e46192116103445780632733e083116103135780632733e083146105275780632d8381191461053c578063313ce5671461055c57806337a9314f1461057e57600080fd5b806313e46192146104bc57806318160ddd146104dc57806323b872dd146104f1578063270bcdfb1461051157600080fd5b8063095ea7b311610380578063095ea7b3146104315780630cdc822614610461578063111be3161461048557806313114a9d146104a757600080fd5b806303fd2a45146103b257806306fdde03146103ef5780630758d9241461041157600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b50602a546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fb57600080fd5b50610404610ae7565b6040516103e691906136bf565b34801561041d57600080fd5b506027546103d2906001600160a01b031681565b34801561043d57600080fd5b5061045161044c366004613729565b610b79565b60405190151581526020016103e6565b34801561046d57600080fd5b50610477600f5481565b6040519081526020016103e6565b34801561049157600080fd5b506104a56104a0366004613755565b610b90565b005b3480156104b357600080fd5b50602654610477565b3480156104c857600080fd5b506104a56104d7366004613796565b610bd1565b3480156104e857600080fd5b50602454610477565b3480156104fd57600080fd5b5061045161050c3660046137cb565b610ec5565b34801561051d57600080fd5b50610477601d5481565b34801561053357600080fd5b506104a5610f18565b34801561054857600080fd5b5061047761055736600461380c565b610f7f565b34801561056857600080fd5b5060225460405160ff90911681526020016103e6565b34801561058a57600080fd5b50610451610599366004613825565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156105c357600080fd5b50610477601c5481565b3480156105d957600080fd5b50610477600e5481565b3480156105ef57600080fd5b506104516105fe366004613729565b611003565b34801561060f57600080fd5b506028546103d2906001600160a01b031681565b34801561062f57600080fd5b50602d5461045190600160a81b900460ff1681565b34801561065057600080fd5b506104a561065f366004613825565b61103a565b34801561067057600080fd5b5061045161067f366004613825565b6111dc565b34801561069057600080fd5b506104a561069f366004613755565b6111ea565b3480156106b057600080fd5b50610477602f5481565b3480156106c657600080fd5b50602b546103d2906001600160a01b031681565b3480156106e657600080fd5b5061047760115481565b3480156106fc57600080fd5b5061047760315481565b34801561071257600080fd5b506104a5611270565b34801561072757600080fd5b506104a5610736366004613796565b611331565b34801561074757600080fd5b506104a5610756366004613842565b611386565b34801561076757600080fd5b50610477600d5481565b34801561077d57600080fd5b506104a561078c366004613825565b6113bb565b34801561079d57600080fd5b5061047760145481565b3480156107b357600080fd5b506104a56107c2366004613907565b61145b565b3480156107d357600080fd5b506104a56107e2366004613755565b6119d8565b3480156107f357600080fd5b5061047760155481565b34801561080957600080fd5b50610477610818366004613825565b611a5e565b34801561082957600080fd5b506104a5611abd565b34801561083e57600080fd5b506104a561084d366004613796565b611b3c565b34801561085e57600080fd5b5061045161086d366004613825565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561089757600080fd5b506000546001600160a01b03166103d2565b3480156108b557600080fd5b50610404611c1f565b3480156108ca57600080fd5b5060345461045190610100900460ff1681565b3480156108e957600080fd5b506104a56108f8366004613842565b611c2e565b34801561090957600080fd5b50610451610918366004613729565b611ccb565b34801561092957600080fd5b50610451610938366004613729565b611d02565b34801561094957600080fd5b506104a5610958366004613842565b611d0f565b34801561096957600080fd5b5061047760175481565b34801561097f57600080fd5b5061047760125481565b34801561099557600080fd5b5061047760165481565b3480156109ab57600080fd5b506104a56109ba366004613990565b611dac565b3480156109cb57600080fd5b5061047760105481565b3480156109e157600080fd5b506029546103d2906001600160a01b031681565b348015610a0157600080fd5b5061047760185481565b348015610a1757600080fd5b50610477610a263660046139ab565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b348015610a5d57600080fd5b506104a5610a6c366004613755565b611e2e565b348015610a7d57600080fd5b506104a5610a8c366004613825565b611eb4565b348015610a9d57600080fd5b506104a5610aac366004613825565b61223e565b348015610abd57600080fd5b506104a5610acc3660046139e4565b6122de565b348015610add57600080fd5b5061047760135481565b6060600b8054610af690613a16565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2290613a16565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b6000610b86338484612347565b5060015b92915050565b6000546001600160a01b03163314610bc35760405162461bcd60e51b8152600401610bba90613a51565b60405180910390fd5b601f92909255602055602155565b6000546001600160a01b03163314610bfb5760405162461bcd60e51b8152600401610bba90613a51565b60018115151415610d30576001600160a01b03821660009081526007602052604090205460ff1615610c6f5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c7265616479206578636c756465642e000000006044820152606401610bba565b6001600160a01b03821660009081526001602052604090205415610cc9576001600160a01b038216600090815260016020526040902054610caf90610f7f565b6001600160a01b0383166000908152600260205260409020555b506001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b80610ec1576001600160a01b03821660009081526007602052604090205460ff16610d9d5760405162461bcd60e51b815260206004820152601c60248201527f4163636f756e7420697320616c726561647920696e636c756465642e000000006044820152606401610bba565b60005b600854811015610ebf57826001600160a01b031660088281548110610dc757610dc7613a86565b6000918252602090912001546001600160a01b03161415610ead5760088054610df290600190613ab2565b81548110610e0257610e02613a86565b600091825260209091200154600880546001600160a01b039092169183908110610e2e57610e2e613a86565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600282526040808220829055600790925220805460ff191690556008805480610e8657610e86613ac9565b600082815260209020810160001990810180546001600160a01b0319169055019055610ebf565b80610eb781613adf565b915050610da0565b505b5050565b6000610ed284848461246b565b506001600160a01b038416600090815260056020908152604080832033808552925290912054610f0e918691610f09908690613ab2565b612347565b5060019392505050565b6000546001600160a01b03163314610f425760405162461bcd60e51b8152600401610bba90613a51565b600080546040516001600160a01b03909116914780156108fc02929091818181858888f19350505050158015610f7c573d6000803e3d6000fd5b50565b6000602554821115610fe65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610bba565b6000610ff061289d565b9050610ffc8184613b10565b9392505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b86918590610f09908690613b24565b6000546001600160a01b031633146110645760405162461bcd60e51b8152600401610bba90613a51565b6001600160a01b03811661108a5760405162461bcd60e51b8152600401610bba90613b3c565b602a546001600160a01b03828116911614156110b85760405162461bcd60e51b8152600401610bba90613b3c565b600080546110d1916001600160a01b0390911690611331565b6110dc816001611331565b6110e7816001610bd1565b600054602c546001600160a01b039081169116141561111c57602c80546001600160a01b0319166001600160a01b0383161790555b600054611131906001600160a01b0316611a5e565b600080546001600160a01b03908116825260056020908152604080842086841685529091528220929092558054909161116a9116611a5e565b11156111915760005461118f906001600160a01b03168261118a82611a5e565b61246b565b505b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000610b8a82600019610b79565b6000546001600160a01b031633146112145760405162461bcd60e51b8152600401610bba90613a51565b60195483111580156112285750601a548211155b80156112365750601b548111155b61123f57600080fd5b6113248161124d8486613b24565b6112579190613b24565b111561126257600080fd5b601692909255601755601855565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610bba90613a51565b60345460ff16156112ed5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642100000000006044820152606401610bba565b6112f8306001610bd1565b60285461130f906001600160a01b03166001610bd1565b6034805460ff19166001179055602d805460ff60a81b1916600160a81b179055565b6000546001600160a01b0316331461135b5760405162461bcd60e51b8152600401610bba90613a51565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113b05760405162461bcd60e51b8152600401610bba90613a51565b601c91909155601d55565b6000546001600160a01b031633146113e55760405162461bcd60e51b8152600401610bba90613a51565b602c546001600160a01b03828116911614156114395760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bba565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114855760405162461bcd60e51b8152600401610bba90613a51565b603a5460ff161561149557600080fd5b602d80546001600160a01b038087166001600160a01b03199283168117909355602c805487831693169290921782556000928352600660209081526040808520805460ff199081166001908117909255945490931685529093208054909216179055825161150991600b9190850190613626565b50805161151d90600c906020840190613626565b50631312d000600a556022805460ff1916601290811790915560235560235461154790600a613c7d565b600a546115549190613c89565b602481905561156590600019613ca8565b61157190600019613ab2565b602555602954602780546001600160a01b0319166001600160a01b0390921691821790556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156115cb57600080fd5b505afa1580156115df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116039190613cbc565b6001600160a01b031663c9c65396602760009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561165f57600080fd5b505afa158015611673573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116979190613cbc565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156116de57600080fd5b505af11580156116f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117169190613cbc565b602880546001600160a01b0319166001600160a01b039283169081179091556000908152600360209081526040808320805460ff19166001179055308352600582528083206027549094168352929052206000199055602454620186a090611780906105dc613c89565b61178a9190613b10565b602e55600a54620186a0906117a1906101f4613c89565b6117ab9190613b10565b602f556024546103e8906117c090600f613c89565b6117ca9190613b10565b603055600a80546103e8916117df9190613c89565b6117e99190613b10565b603155602454612710906117fe906005613c89565b6118089190613b10565b6032556024546127109061181d906019613c89565b6118279190613b10565b603355602954611842906001600160a01b0316600019610b79565b50603a805460ff1916600190811790915560255490600061186b6000546001600160a01b031690565b6001600160a01b031681526020810191909152604001600020556118976000546001600160a01b031690565b602b546024546040519081526001600160a01b0392831692909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a36027546118fa9030906001600160a01b0316600019612347565b61192561190f6000546001600160a01b031690565b3061118a6108186000546001600160a01b031690565b506027546001600160a01b031663f305d719473061194281611a5e565b6000806119576000546001600160a01b031690565b426040518863ffffffff1660e01b815260040161197996959493929190613cd9565b6060604051808303818588803b15801561199257600080fd5b505af11580156119a6573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119cb9190613d14565b5050436039555050505050565b6000546001600160a01b03163314611a025760405162461bcd60e51b8152600401610bba90613a51565b6019548311158015611a165750601a548211155b8015611a245750601b548111155b611a2d57600080fd5b61132481611a3b8486613b24565b611a459190613b24565b1115611a5057600080fd5b601092909255601155601255565b6001600160a01b03811660009081526007602052604081205460ff1615611a9b57506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610b8a90610f7f565b6000546001600160a01b03163314611ae75760405162461bcd60e51b8152600401610bba90613a51565b60008054611b00916001600160a01b0390911690611331565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314611b665760405162461bcd60e51b8152600401610bba90613a51565b80611b8d57506001600160a01b03166000908152600360205260409020805460ff19169055565b60045415611bf45762093a8060045442611ba79190613ab2565b11611bf45760405162461bcd60e51b815260206004820181905260248201527f43616e6e6f74207365742061206e657720706169722074686973207765656b216044820152606401610bba565b6001600160a01b0382166000908152600360205260409020805460ff19166001179055426004555050565b6060600c8054610af690613a16565b6000546001600160a01b03163314611c585760405162461bcd60e51b8152600401610bba90613a51565b60008183602454611c699190613c89565b611c739190613b10565b90506103e8602454611c859190613b10565b811015611ca45760405162461bcd60e51b8152600401610bba90613d42565b602e819055600a548290611cb9908590613c89565b611cc39190613b10565b602f55505050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610b86918590610f09908690613ab2565b6000610f0e33848461246b565b6000546001600160a01b03163314611d395760405162461bcd60e51b8152600401610bba90613a51565b60008183602454611d4a9190613c89565b611d549190613b10565b90506103e8602454611d669190613b10565b811015611d855760405162461bcd60e51b8152600401610bba90613d42565b6030819055600a548290611d9a908590613c89565b611da49190613b10565b603155505050565b6000546001600160a01b03163314611dd65760405162461bcd60e51b8152600401610bba90613a51565b602d8054821515600160a81b0260ff60a81b199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990611e2390831515815260200190565b60405180910390a150565b6000546001600160a01b03163314611e585760405162461bcd60e51b8152600401610bba90613a51565b6019548311158015611e6c5750601a548211155b8015611e7a5750601b548111155b611e8357600080fd5b61132481611e918486613b24565b611e9b9190613b24565b1115611ea657600080fd5b601492909255601355601555565b6000546001600160a01b03163314611ede5760405162461bcd60e51b8152600401610bba90613a51565b60008190506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1e57600080fd5b505afa158015611f32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f569190613cbc565b6001600160a01b031663e6a4390530846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9e57600080fd5b505afa158015611fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fd69190613cbc565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260440160206040518083038186803b15801561201c57600080fd5b505afa158015612030573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120549190613cbc565b90506001600160a01b0381166121fa57816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561209d57600080fd5b505afa1580156120b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d59190613cbc565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561211d57600080fd5b505afa158015612131573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121559190613cbc565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561219d57600080fd5b505af11580156121b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d59190613cbc565b602880546001600160a01b0319166001600160a01b0392909216919091179055612216565b602880546001600160a01b0319166001600160a01b0383161790555b602780546001600160a01b0319166001600160a01b038416179055610ebf3084600019612347565b6000546001600160a01b031633146122685760405162461bcd60e51b8152600401610bba90613a51565b602d546001600160a01b03828116911614156122bc5760405162461bcd60e51b815260206004820152601360248201527257616c6c657420616c7265616479207365742160681b6044820152606401610bba565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123085760405162461bcd60e51b8152600401610bba90613a51565b82846024546123179190613c89565b6123219190613b10565b6032556024548190612334908490613c89565b61233e9190613b10565b60335550505050565b6001600160a01b0383166123a95760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bba565b6001600160a01b03821661240a5760405162461bcd60e51b815260206004820152602260248201527f43616e6e6f7420617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bba565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006001600160a01b0384166124d15760405162461bcd60e51b815260206004820152602560248201527f43616e6e6f74207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610bba565b6001600160a01b0383166125335760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610bba565b600082116125955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610bba565b61259f84846128c0565b156127c55760345460ff166125f65760405162461bcd60e51b815260206004820152601860248201527f54726164696e67206e6f742079657420656e61626c65642100000000000000006044820152606401610bba565b60375460ff16156126bc576001600160a01b03841660009081526003602052604090205460ff16156126715761262d436001613b24565b6001600160a01b038416600090815260386020526040902054141561265157600080fd5b6001600160a01b03831660009081526038602052604090204390556126bc565b61267c436001613b24565b6001600160a01b03851660009081526038602052604090205414156126a057600080fd5b6001600160a01b03841660009081526038602052604090204390555b602e548211156127185760405162461bcd60e51b815260206004820152602160248201527f5472616e73666572206578636565647320746865206d61785478416d6f756e746044820152601760f91b6064820152608401610bba565b6029546001600160a01b0384811691161480159061274f57506001600160a01b03831660009081526003602052604090205460ff16155b156127c5576030548261276185611a5e565b61276b9190613b24565b11156127c55760405162461bcd60e51b815260206004820152602360248201527f5472616e73666572206578636565647320746865206d617857616c6c657453696044820152623d329760e91b6064820152608401610bba565b6001600160a01b03841660009081526006602052604090205460019060ff168061280757506001600160a01b03841660009081526006602052604090205460ff165b15612810575060005b6001600160a01b03841660009081526003602052604090205460ff161561288857602d54600160a01b900460ff161580156128545750602d54600160a81b900460ff165b1561288857600061286430611a5e565b9050603254811061288657603354811061287d57506033545b61288681612980565b505b61289485858584612d34565b95945050505050565b60008060006128aa6130b5565b90925090506128b98183613b10565b9250505090565b600080546001600160a01b038481169116148015906128ed57506000546001600160a01b03838116911614155b801561291257506001600160a01b03821660009081526009602052604090205460ff16155b801561293757506001600160a01b03831660009081526009602052604090205460ff16155b80156129515750602a546001600160a01b03838116911614155b801561296557506001600160a01b03821615155b8015610ffc57506001600160a01b0383163014159392505050565b602d805460ff60a01b1916600160a01b179055601d54601c546129a39190613b24565b6129ac57612d24565b60006002601d54601c546129c09190613b24565b601c546129cd9085613c89565b6129d79190613b10565b6129e19190613b10565b905060006129ef8284613ab2565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110612a2957612a29613a86565b6001600160a01b03928316602091820292909201810191909152602754604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015612a7d57600080fd5b505afa158015612a91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab59190613cbc565b81600181518110612ac857612ac8613a86565b6001600160a01b03928316602091820292909201015260275460405163791ac94760e01b815291169063791ac94790612b0e908590600090869030904290600401613d85565b600060405180830381600087803b158015612b2857600080fd5b505af1158015612b3c573d6000803e3d6000fd5b5050505060006002601d54601c54612b549190613b24565b601c54612b619047613c89565b612b6b9190613b10565b612b759190613b10565b90508315612c5457602754602c5460405163f305d71960e01b81526001600160a01b039283169263f305d719928592612bbd9230928b92600092839216904290600401613cd9565b6060604051808303818588803b158015612bd657600080fd5b505af1158015612bea573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c0f9190613d14565b505060408051868152602081018490529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561915060600160405180910390a15b6000612c608587613ab2565b1115612d1f57601f546021544791600091612c7b9084613b10565b612c859190613c89565b9050600060205460215484612c9a9190613b10565b612ca49190613c89565b602c546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015612cdf573d6000803e3d6000fd5b50602d546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612d1a573d6000803e3d6000fd5b505050505b505050505b50602d805460ff60a01b19169055565b603454600090610100900460ff16612dc857612d508585613238565b603454610100900460ff16158015612d6d5750612d6d85856128c0565b15612dc85760405162461bcd60e51b815260206004820152602560248201527f4f6e6c79206f776e65722063616e207472616e736665722061742074686973206044820152643a34b6b29760d91b6064820152608401610bba565b6000612dd686868686613346565b60808101516001600160a01b038816600090815260016020526040902054919250612e0091613ab2565b6001600160a01b0380881660009081526001602052604080822093909355606084015191881681529190912054612e379190613b24565b6001600160a01b0380871660009081526001602090815260408083209490945591891681526007909152205460ff168015612e8b57506001600160a01b03851660009081526007602052604090205460ff16155b15612ed2576001600160a01b038616600090815260026020526040902054612eb4908590613ab2565b6001600160a01b038716600090815260026020526040902055613012565b6001600160a01b03861660009081526007602052604090205460ff16158015612f1357506001600160a01b03851660009081526007602052604090205460ff165b15612f5b5780516001600160a01b038616600090815260026020526040902054612f3d9190613b24565b6001600160a01b038616600090815260026020526040902055613012565b6001600160a01b03861660009081526007602052604090205460ff168015612f9b57506001600160a01b03851660009081526007602052604090205460ff165b15613012576001600160a01b038616600090815260026020526040902054612fc4908590613ab2565b6001600160a01b0380881660009081526002602052604080822093909355835191881681529190912054612ff89190613b24565b6001600160a01b0386166000908152600260205260409020555b60408101511561302a5761302a868260400151613534565b60008160a001511180613041575060008160200151115b15613058576130588160a001518260200151613600565b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83600001516040516130a191815260200190565b60405180910390a350600195945050505050565b6025546024546000918291825b600854811015613207578260016000600884815481106130e4576130e4613a86565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061314f575081600260006008848154811061312857613128613a86565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561316557602554602454945094505050509091565b600160006008838154811061317c5761317c613a86565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131ab9084613ab2565b925060026000600883815481106131c4576131c4613a86565b60009182526020808320909101546001600160a01b031683528201929092526040019020546131f39083613ab2565b9150806131ff81613adf565b9150506130c2565b506024546025546132189190613b10565b82101561322f576025546024549350935050509091565b90939092509050565b603454610100900460ff16156132905760405162461bcd60e51b815260206004820152601b60248201527f4c697175696469747920697320616c72656164792061646465642e00000000006044820152606401610bba565b61329a82826128c0565b1580156132b457506028546001600160a01b038281169116145b15610ec1576001600160a01b03821660009081526009602052604090819020805460ff191660019081179091556034805461ff00191661010017905542603655602d805460ff60a81b1916600160a81b17905590517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599161333a91901515815260200190565b60405180910390a15050565b61337f6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6133b86040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60006133c261289d565b90506133ce8186613c89565b608083015283156134de576001600160a01b03861660009081526003602052604090205460ff161561341157601454600d55601354600e55601554600f5561345c565b6001600160a01b03871660009081526003602052604090205460ff161561344957601054600d55601154600e55601254600f5561345c565b601654600d55601754600e55601854600f555b601e54600d5461346c9087613c89565b6134769190613b10565b6020830152601e54600f54600e5461348e9190613b24565b6134989087613c89565b6134a29190613b10565b6040830181905260208301516134b89190613b24565b6134c29086613ab2565b825260208201516134d4908290613c89565b60a08301526134f7565b6000602083018190526040830181905285835260a08301525b8082604001516135079190613c89565b8260a001516135169190613b24565b82608001516135259190613ab2565b60608301525095945050505050565b600061353e61289d565b9050600061354c8284613c89565b3060009081526001602052604090205490915061356a908290613b24565b3060009081526001602090815260408083209390935560079052205460ff16156135ba57306000908152600260205260409020546135a9908490613b24565b306000908152600260205260409020555b60405183815230906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a350505050565b8160255461360e9190613ab2565b60255560265461361f908290613b24565b6026555050565b82805461363290613a16565b90600052602060002090601f016020900481019282613654576000855561369a565b82601f1061366d57805160ff191683800117855561369a565b8280016001018555821561369a579182015b8281111561369a57825182559160200191906001019061367f565b506136a69291506136aa565b5090565b5b808211156136a657600081556001016136ab565b600060208083528351808285015260005b818110156136ec578581018301518582016040015282016136d0565b818111156136fe576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610f7c57600080fd5b6000806040838503121561373c57600080fd5b823561374781613714565b946020939093013593505050565b60008060006060848603121561376a57600080fd5b505081359360208301359350604090920135919050565b8035801515811461379157600080fd5b919050565b600080604083850312156137a957600080fd5b82356137b481613714565b91506137c260208401613781565b90509250929050565b6000806000606084860312156137e057600080fd5b83356137eb81613714565b925060208401356137fb81613714565b929592945050506040919091013590565b60006020828403121561381e57600080fd5b5035919050565b60006020828403121561383757600080fd5b8135610ffc81613714565b6000806040838503121561385557600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261388b57600080fd5b813567ffffffffffffffff808211156138a6576138a6613864565b604051601f8301601f19908116603f011681019082821181831017156138ce576138ce613864565b816040528381528660208588010111156138e757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561391d57600080fd5b843561392881613714565b9350602085013561393881613714565b9250604085013567ffffffffffffffff8082111561395557600080fd5b6139618883890161387a565b9350606087013591508082111561397757600080fd5b506139848782880161387a565b91505092959194509250565b6000602082840312156139a257600080fd5b610ffc82613781565b600080604083850312156139be57600080fd5b82356139c981613714565b915060208301356139d981613714565b809150509250929050565b600080600080608085870312156139fa57600080fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680613a2a57607f821691505b60208210811415613a4b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613ac457613ac4613a9c565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415613af357613af3613a9c565b5060010190565b634e487b7160e01b600052601260045260246000fd5b600082613b1f57613b1f613afa565b500490565b60008219821115613b3757613b37613a9c565b500190565b6020808252603d908201527f43616c6c2072656e6f756e63654f776e65727368697020746f207472616e736660408201527f6572206f776e657220746f20746865207a65726f20616464726573732e000000606082015260800190565b600181815b80851115613bd4578160001904821115613bba57613bba613a9c565b80851615613bc757918102915b93841c9390800290613b9e565b509250929050565b600082613beb57506001610b8a565b81613bf857506000610b8a565b8160018114613c0e5760028114613c1857613c34565b6001915050610b8a565b60ff841115613c2957613c29613a9c565b50506001821b610b8a565b5060208310610133831016604e8410600b8410161715613c57575081810a610b8a565b613c618383613b99565b8060001904821115613c7557613c75613a9c565b029392505050565b6000610ffc8383613bdc565b6000816000190483118215151615613ca357613ca3613a9c565b500290565b600082613cb757613cb7613afa565b500690565b600060208284031215613cce57600080fd5b8151610ffc81613714565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b600080600060608486031215613d2957600080fd5b8351925060208401519150604084015190509250925092565b60208082526023908201527f4d7573742062652061626f766520302e3125206f6620746f74616c2073757070604082015262363c9760e91b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613dd55784516001600160a01b031683529383019391830191600101613db0565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220615405e332b03313fcebda9d777c4a4e1535dcb4c558a731f9f0ed472dc17b0964736f6c63430008090033

Deployed Bytecode Sourcemap

8062:22770:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9683:64;;;;;;;;;;-1:-1:-1;9683:64:0;;;;-1:-1:-1;;;;;9683:64:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;9683:64:0;;;;;;;;15145:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9574:35::-;;;;;;;;;;-1:-1:-1;9574:35:0;;;;-1:-1:-1;;;;;9574:35:0;;;15807:161;;;;;;;;;;-1:-1:-1;15807:161:0;;;;;:::i;:::-;;:::i;:::-;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;15807:161:0;1514:187:1;8740:26:0;;;;;;;;;;;;;;;;;;;1852:25:1;;;1840:2;1825:18;8740:26:0;1706:177:1;19159:147:0;;;;;;;;;;-1:-1:-1;19159:147:0;;;;;:::i;:::-;;:::i;:::-;;21932:87;;;;;;;;;;-1:-1:-1;22001:10:0;;21932:87;;21062:862;;;;;;;;;;-1:-1:-1;21062:862:0;;;;;:::i;:::-;;:::i;14896:83::-;;;;;;;;;;-1:-1:-1;14969:7:0;;14896:83;;16104:266;;;;;;;;;;-1:-1:-1;16104:266:0;;;;;:::i;:::-;;:::i;9177:34::-;;;;;;;;;;;;;;;;30302:112;;;;;;;;;;;;;:::i;22254:250::-;;;;;;;;;;-1:-1:-1;22254:250:0;;;;;:::i;:::-;;:::i;14986:71::-;;;;;;;;;;-1:-1:-1;15045:9:0;;14986:71;;15045:9;;;;3482:36:1;;3470:2;3455:18;14986:71:0;3340:184:1;17887:97:0;;;;;;;;;;-1:-1:-1;17887:97:0;;;;;:::i;:::-;-1:-1:-1;;;;;17962:14:0;17938:4;17962:14;;;:5;:14;;;;;;;;;17887:97;9136:34;;;;;;;;;;;;;;;;8715:23;;;;;;;;;;;;;;;;16378:215;;;;;;;;;;-1:-1:-1;16378:215:0;;;;;:::i;:::-;;:::i;9617:21::-;;;;;;;;;;-1:-1:-1;9617:21:0;;;;-1:-1:-1;;;;;9617:21:0;;;9943:41;;;;;;;;;;-1:-1:-1;9943:41:0;;;;-1:-1:-1;;;9943:41:0;;;;;;13891:795;;;;;;;;;;-1:-1:-1;13891:795:0;;;;;:::i;:::-;;:::i;15976:120::-;;;;;;;;;;-1:-1:-1;15976:120:0;;;;;:::i;:::-;;:::i;18767:384::-;;;;;;;;;;-1:-1:-1;18767:384:0;;;;;:::i;:::-;;:::i;10023:20::-;;;;;;;;;;;;;;;;9755:64;;;;;;;;;;-1:-1:-1;9755:64:0;;;;-1:-1:-1;;;;;9755:64:0;;;8803:27;;;;;;;;;;;;;;;;10078:20;;;;;;;;;;;;;;;;26503:274;;;;;;;;;;;;;:::i;20935:119::-;;;;;;;;;;-1:-1:-1;20935:119:0;;;;;:::i;:::-;;:::i;19314:157::-;;;;;;;;;;-1:-1:-1;19314:157:0;;;;;:::i;:::-;;:::i;8690:23::-;;;;;;;;;;;;;;;;20563:187;;;;;;;;;;-1:-1:-1;20563:187:0;;;;;:::i;:::-;;:::i;8892:24::-;;;;;;;;;;;;;;;;11885:1911;;;;;;;;;;-1:-1:-1;11885:1911:0;;;;;:::i;:::-;;:::i;17992:379::-;;;;;;;;;;-1:-1:-1;17992:379:0;;;;;:::i;:::-;;:::i;8918:27::-;;;;;;;;;;;;;;;;15440:184;;;;;;;;;;-1:-1:-1;15440:184:0;;;;;:::i;:::-;;:::i;14694:194::-;;;;;;;;;;;;;:::i;17380:379::-;;;;;;;;;;-1:-1:-1;17380:379:0;;;;;:::i;:::-;;:::i;17767:112::-;;;;;;;;;;-1:-1:-1;17767:112:0;;;;;:::i;:::-;-1:-1:-1;;;;;17859:12:0;17835:4;17859:12;;;:3;:12;;;;;;;;;17767:112;15222:71;;;;;;;;;;-1:-1:-1;15265:7:0;13869:6;-1:-1:-1;;;;;13869:6:0;15222:71;;15063:75;;;;;;;;;;;;;:::i;10203:36::-;;;;;;;;;;-1:-1:-1;10203:36:0;;;;;;;;;;;19479:301;;;;;;;;;;-1:-1:-1;19479:301:0;;;;;:::i;:::-;;:::i;16601:225::-;;;;;;;;;;-1:-1:-1;16601:225:0;;;;;:::i;:::-;;:::i;15632:167::-;;;;;;;;;;-1:-1:-1;15632:167:0;;;;;:::i;:::-;;:::i;19788:266::-;;;;;;;;;;-1:-1:-1;19788:266:0;;;;;:::i;:::-;;:::i;8979:24::-;;;;;;;;;;;;;;;;8832:27;;;;;;;;;;;;;;;;8953:24;;;;;;;;;;;;;;;;20756:171;;;;;;;;;;-1:-1:-1;20756:171:0;;;;;:::i;:::-;;:::i;8774:27::-;;;;;;;;;;;;;;;;9646:29;;;;;;;;;;-1:-1:-1;9646:29:0;;;;-1:-1:-1;;;;;9646:29:0;;;9005:24;;;;;;;;;;;;;;;;15299:133;;;;;;;;;;-1:-1:-1;15299:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;15401:19:0;;;15383:7;15401:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;15299:133;18379:380;;;;;;;;;;-1:-1:-1;18379:380:0;;;;;:::i;:::-;;:::i;16834:538::-;;;;;;;;;;-1:-1:-1;16834:538:0;;;;;:::i;:::-;;:::i;20359:196::-;;;;;;;;;;-1:-1:-1;20359:196:0;;;;;:::i;:::-;;:::i;20062:289::-;;;;;;;;;;-1:-1:-1;20062:289:0;;;;;:::i;:::-;;:::i;8866:24::-;;;;;;;;;;;;;;;;15145:71;15184:13;15208:5;15201:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15145:71;:::o;15807:161::-;15882:4;15899:39;2203:10;15922:7;15931:6;15899:8;:39::i;:::-;-1:-1:-1;15956:4:0;15807:161;;;;;:::o;19159:147::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;;;;;;;;;19244:7:::1;:12:::0;;;;19267:4:::1;:9:::0;19287:6:::1;:11:::0;19159:147::o;21062:862::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;21167:4:::1;21156:15:::0;::::1;;;21152:765;;;-1:-1:-1::0;;;;;21197:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;21196:13;21188:54;;;::::0;-1:-1:-1;;;21188:54:0;;7907:2:1;21188:54:0::1;::::0;::::1;7889:21:1::0;7946:2;7926:18;;;7919:30;7985;7965:18;;;7958:58;8033:18;;21188:54:0::1;7705:352:1::0;21188:54:0::1;-1:-1:-1::0;;;;;21260:13:0;::::1;21276:1;21260:13:::0;;;:4:::1;:13;::::0;;;;;:17;21257:107:::1;;-1:-1:-1::0;;;;;21334:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;;21314:34:::1;::::0;:19:::1;:34::i;:::-;-1:-1:-1::0;;;;;21298:13:0;::::1;;::::0;;;:4:::1;:13;::::0;;;;:50;21257:107:::1;-1:-1:-1::0;;;;;;21378:12:0::1;;::::0;;;:3:::1;:12;::::0;;;;:19;;-1:-1:-1;;21378:19:0::1;21393:4;21378:19:::0;;::::1;::::0;;;21412:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;21412:23:0::1;::::0;;::::1;::::0;;21062:862::o;21152:765::-:1;21457:16:::0;21453:464:::1;;-1:-1:-1::0;;;;;21498:12:0;::::1;;::::0;;;:3:::1;:12;::::0;;;;;::::1;;21490:53;;;::::0;-1:-1:-1;;;21490:53:0;;8264:2:1;21490:53:0::1;::::0;::::1;8246:21:1::0;8303:2;8283:18;;;8276:30;8342;8322:18;;;8315:58;8390:18;;21490:53:0::1;8062:352:1::0;21490:53:0::1;21563:9;21558:348;21582:9;:16:::0;21578:20;::::1;21558:348;;;21644:7;-1:-1:-1::0;;;;;21628:23:0::1;:9;21638:1;21628:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;21628:12:0::1;:23;21624:267;;;21691:9;21701:16:::0;;:20:::1;::::0;21720:1:::1;::::0;21701:20:::1;:::i;:::-;21691:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;21676:9:::1;:12:::0;;-1:-1:-1;;;;;21691:31:0;;::::1;::::0;21686:1;;21676:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;21676:46:0::1;-1:-1:-1::0;;;;;21676:46:0;;::::1;;::::0;;21745:13;;::::1;::::0;;:4:::1;:13:::0;;;;;;:17;;;21785:3:::1;:12:::0;;;;:20;;-1:-1:-1;;21785:20:0::1;::::0;;21828:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;21828:15:0;;;;;-1:-1:-1;;;;;;21828:15:0::1;::::0;;;;;21866:5:::1;;21624:267;21600:3:::0;::::1;::::0;::::1;:::i;:::-;;;;21558:348;;;;21453:464;21062:862:::0;;:::o;16104:266::-;16202:4;16219:36;16229:6;16237:9;16248:6;16219:9;:36::i;:::-;-1:-1:-1;;;;;;16297:19:0;;;;;;:11;:19;;;;;;;;2203:10;16297:33;;;;;;;;;16266:74;;16275:6;;16297:42;;16333:6;;16297:42;:::i;:::-;16266:8;:74::i;:::-;-1:-1:-1;16358:4:0;16104:266;;;;;:::o;30302:112::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;13842:7;13869:6;;30358:48:::1;::::0;-1:-1:-1;;;;;13869:6:0;;;;30384:21:::1;30358:48:::0;::::1;;;::::0;30384:21;;30358:48;13842:7;30358:48;30384:21;13869:6;30358:48;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;30302:112::o:0;22254:250::-;22320:7;22359;;22348;:18;;22340:73;;;;-1:-1:-1;;;22340:73:0;;9287:2:1;22340:73:0;;;9269:21:1;9326:2;9306:18;;;9299:30;9365:34;9345:18;;;9338:62;-1:-1:-1;;;9416:18:1;;;9409:40;9466:19;;22340:73:0;9085:406:1;22340:73:0;22424:19;22447:10;:8;:10::i;:::-;22424:33;-1:-1:-1;22475:21:0;22424:33;22475:7;:21;:::i;:::-;22468:28;22254:250;-1:-1:-1;;;22254:250:0:o;16378:215::-;2203:10;16466:4;16515:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16515:34:0;;;;;;;;;;16466:4;;16483:80;;16506:7;;16515:47;;16552:10;;16515:47;:::i;13891:795::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13972:22:0;::::1;13964:96;;;;-1:-1:-1::0;;;13964:96:0::1;;;;;;;:::i;:::-;14091:4;::::0;-1:-1:-1;;;;;14079:16:0;;::::1;14091:4:::0;::::1;14079:16;;14071:90;;;;-1:-1:-1::0;;;14071:90:0::1;;;;;;;:::i;:::-;14191:6;::::0;;14172:33:::1;::::0;-1:-1:-1;;;;;14191:6:0;;::::1;::::0;14172:18:::1;:33::i;:::-;14216:34;14235:8;14245:4;14216:18;:34::i;:::-;14261:37;14283:8;14293:4;14261:21;:37::i;:::-;14345:6;::::0;14323:10:::1;::::0;-1:-1:-1;;;;;14323:10:0;;::::1;14345:6:::0;::::1;14323:29;14319:78;;;14367:10;:30:::0;;-1:-1:-1;;;;;;14367:30:0::1;-1:-1:-1::0;;;;;14367:30:0;::::1;;::::0;;14319:78:::1;14460:6;::::0;14450:17:::1;::::0;-1:-1:-1;;;;;14460:6:0::1;14450:9;:17::i;:::-;14418:19;14430:6:::0;;-1:-1:-1;;;;;14430:6:0;;::::1;14418:19:::0;;:11:::1;:19;::::0;;;;;;;:29;;::::1;::::0;;;;;;;:49;;;;14491:6;;14418:19;;14481:17:::1;::::0;14491:6:::1;14481:9;:17::i;:::-;:21;14478:99;;;14529:6;::::0;14519:46:::1;::::0;-1:-1:-1;;;;;14529:6:0::1;14537:8:::0;14547:17:::1;14529:6:::0;14547:9:::1;:17::i;:::-;14519:9;:46::i;:::-;;14478:99;14597:6;:17:::0;;-1:-1:-1;;;;;;14597:17:0::1;-1:-1:-1::0;;;;;14597:17:0;::::1;::::0;;::::1;::::0;;14630:38:::1;::::0;14597:17;;;;14630:38:::1;::::0;14597:6;14630:38:::1;13891:795:::0;:::o;15976:120::-;16029:4;16053:35;16061:7;-1:-1:-1;;16053:7:0;:35::i;18767:384::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;18897:6:::1;;18886:7;:17;;:57;;;;;18937:6;;18924:9;:19;;18886:57;:97;;;;;18977:6;;18964:9;:19;;18886:97;18878:124;;;::::0;::::1;;19056:4;19043:9:::0;19021:19:::1;19031:9:::0;19021:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;19013:48;;;::::0;::::1;;19072:5;:15:::0;;;;19098:5:::1;:17:::0;19126:5:::1;:17:::0;18767:384::o;26503:274::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;26563:8:::1;::::0;::::1;;26562:9;26554:49;;;::::0;-1:-1:-1;;;26554:49:0;;10518:2:1;26554:49:0::1;::::0;::::1;10500:21:1::0;10557:2;10537:18;;;10530:30;10596:29;10576:18;;;10569:57;10643:18;;26554:49:0::1;10316:351:1::0;26554:49:0::1;26614:42;26644:4;26651;26614:21;:42::i;:::-;26689:6;::::0;26667:35:::1;::::0;-1:-1:-1;;;;;26689:6:0::1;::::0;26667:21:::1;:35::i;:::-;26715:8;:15:::0;;-1:-1:-1;;26715:15:0::1;26726:4;26715:15;::::0;;26741:21:::1;:28:::0;;-1:-1:-1;;;;26741:28:0::1;-1:-1:-1::0;;;26741:28:0::1;::::0;;26503:274::o;20935:119::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21022:14:0;;;::::1;;::::0;;;:5:::1;:14;::::0;;;;:24;;-1:-1:-1;;21022:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20935:119::o;19314:157::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;19401:15:::1;:27:::0;;;;19439:12:::1;:24:::0;19314:157::o;20563:187::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;20653:10:::1;::::0;-1:-1:-1;;;;;20653:23:0;;::::1;:10:::0;::::1;:23;;20645:55;;;::::0;-1:-1:-1;;;20645:55:0;;10874:2:1;20645:55:0::1;::::0;::::1;10856:21:1::0;10913:2;10893:18;;;10886:30;-1:-1:-1;;;10932:18:1;;;10925:49;10991:18;;20645:55:0::1;10672:343:1::0;20645:55:0::1;20711:10;:31:::0;;-1:-1:-1;;;;;;20711:31:0::1;-1:-1:-1::0;;;;;20711:31:0;;;::::1;::::0;;;::::1;::::0;;20563:187::o;11885:1911::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;12064:3:::1;::::0;::::1;;12063:4;12055:13;;;::::0;::::1;;12081;:40:::0;;-1:-1:-1;;;;;12081:40:0;;::::1;-1:-1:-1::0;;;;;;12081:40:0;;::::1;::::0;::::1;::::0;;;12132:10:::1;:34:::0;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;12081:13:::1;12179:20:::0;;;:5:::1;:20;::::0;;;;;;;:27;;-1:-1:-1;;12179:27:0;;::::1;12081:40:::0;12179:27;;::::1;::::0;;;12223:10;;;;::::1;12217:17:::0;;;;;:24;;;;::::1;;::::0;;12254:18;;::::1;::::0;:5:::1;::::0;:18;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12283:22:0;;::::1;::::0;:7:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;12333:11:0::1;12316:14;:28:::0;12405:9:::1;:14:::0;;-1:-1:-1;;12405:14:0::1;12417:2;12405:14:::0;;::::1;::::0;;;12434:12:::1;:24:::0;12597:12:::1;::::0;12593:16:::1;::::0;:2:::1;:16;:::i;:::-;12575:14;;:35;;;;:::i;:::-;12565:7;:45:::0;;;12639:13:::1;::::0;-1:-1:-1;;12639:13:0::1;:::i;:::-;12632:21;::::0;-1:-1:-1;;12632:21:0::1;:::i;:::-;12621:7;:33:::0;12698:14:::1;::::0;12667:9:::1;:46:::0;;-1:-1:-1;;;;;;12667:46:0::1;-1:-1:-1::0;;;;;12698:14:0;;::::1;12667:46:::0;;::::1;::::0;;12751:19:::1;::::0;;-1:-1:-1;;;12751:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;12698:14;12751:19;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12733:49:0::1;;12783:9;;;;;;;;;-1:-1:-1::0;;;;;12783:9:0::1;-1:-1:-1::0;;;;;12783:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12733:82;::::0;-1:-1:-1;;;;;;12733:82:0::1;::::0;;;;;;-1:-1:-1;;;;;13170:15:1;;;12733:82:0::1;::::0;::::1;13152:34:1::0;12809:4:0::1;13202:18:1::0;;;13195:43;13087:18;;12733:82:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12724:6;:91:::0;;-1:-1:-1;;;;;;12724:91:0::1;-1:-1:-1::0;;;;;12724:91:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;12826:12:0;;;:4:::1;:12;::::0;;;;;;;:19;;-1:-1:-1;;12826:19:0::1;-1:-1:-1::0;12826:19:0::1;::::0;;12876:4:::1;12856:26:::0;;:11:::1;:26:::0;;;;;12891:9:::1;::::0;;;::::1;12856:46:::0;;;;;;-1:-1:-1;;12856:66:0;;12954:7:::1;::::0;12972:6:::1;::::0;12954:14:::1;::::0;12964:4:::1;12954:14;:::i;:::-;12953:25;;;;:::i;:::-;12943:7;:35:::0;12998:14:::1;::::0;13022:6:::1;::::0;12998:20:::1;::::0;13015:3:::1;12998:20;:::i;:::-;12997:31;;;;:::i;:::-;12989:5;:39:::0;13047:7:::1;::::0;13063:4:::1;::::0;13047:12:::1;::::0;13057:2:::1;13047:12;:::i;:::-;13046:21;;;;:::i;:::-;13039:4;:28:::0;13087:14:::1;::::0;;13110:4:::1;::::0;13087:19:::1;::::0;:14;:19:::1;:::i;:::-;13086:28;;;;:::i;:::-;13078:5;:36:::0;13142:7:::1;::::0;13157:5:::1;::::0;13142:11:::1;::::0;13152:1:::1;13142:11;:::i;:::-;13141:21;;;;:::i;:::-;13125:13;:37:::0;13187:7:::1;::::0;13203:5:::1;::::0;13187:12:::1;::::0;13197:2:::1;13187:12;:::i;:::-;13186:22;;;;:::i;:::-;13173:10;:35:::0;13229:14:::1;::::0;13221:42:::1;::::0;-1:-1:-1;;;;;13229:14:0::1;-1:-1:-1::0;;13221:7:0::1;:42::i;:::-;-1:-1:-1::0;13276:3:0::1;:10:::0;;-1:-1:-1;;13276:10:0::1;13282:4;13276:10:::0;;::::1;::::0;;;13313:7:::1;::::0;;13276:3:::1;13302:7;13842::::0;13869:6;-1:-1:-1;;;;;13869:6:0;;13804:79;13302:7:::1;-1:-1:-1::0;;;;;13297:13:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;13297:13:0;:23;13351:7:::1;13842::::0;13869:6;-1:-1:-1;;;;;13869:6:0;;13804:79;13351:7:::1;13345:4;::::0;13360:7:::1;::::0;13336:32:::1;::::0;1852:25:1;;;-1:-1:-1;;;;;13336:32:0;;::::1;::::0;13345:4;;::::1;::::0;13336:32:::1;::::0;1840:2:1;1825:18;13336:32:0::1;;;;;;;13413:9;::::0;13381:62:::1;::::0;13398:4:::1;::::0;-1:-1:-1;;;;;13413:9:0::1;-1:-1:-1::0;;13381:8:0::1;:62::i;:::-;13456:53;13466:7;13842::::0;13869:6;-1:-1:-1;;;;;13869:6:0;;13804:79;13466:7:::1;13483:4;13490:18;13500:7;13842::::0;13869:6;-1:-1:-1;;;;;13869:6:0;;13804:79;13456:53:::1;-1:-1:-1::0;13536:9:0::1;::::0;-1:-1:-1;;;;;13536:9:0::1;:25;13569:21;13614:4;13634:24;13614:4:::0;13634:9:::1;:24::i;:::-;13673:1;13690::::0;13707:7:::1;13842::::0;13869:6;-1:-1:-1;;;;;13869:6:0;;13804:79;13707:7:::1;13729:15;13536:219;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;13776:12:0::1;13766:7;:22:::0;-1:-1:-1;;;;;11885:1911:0:o;17992:379::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;18117:6:::1;;18106:7;:17;;:57;;;;;18157:6;;18144:9;:19;;18106:57;:97;;;;;18197:6;;18184:9;:19;;18106:97;18098:124;;;::::0;::::1;;18276:4;18263:9:::0;18241:19:::1;18251:9:::0;18241:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;18233:48;;;::::0;::::1;;18292:5;:15:::0;;;;18318:5:::1;:17:::0;18346:5:::1;:17:::0;17992:379::o;15440:184::-;-1:-1:-1;;;;;15530:12:0;;15506:7;15530:12;;;:3;:12;;;;;;;;15526:38;;;-1:-1:-1;;;;;;15551:13:0;;;;;:4;:13;;;;;;;15440:184::o;15526:38::-;-1:-1:-1;;;;;15602:13:0;;;;;;:4;:13;;;;;;15582:34;;:19;:34::i;14694:194::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;14780:6:::1;::::0;;14761:33:::1;::::0;-1:-1:-1;;;;;14780:6:0;;::::1;::::0;14761:18:::1;:33::i;:::-;14822:1;14805:19:::0;;-1:-1:-1;;;;;;14805:19:0::1;::::0;;14840:40:::1;::::0;14822:1;;14840:40:::1;::::0;14822:1;;14840:40:::1;14694:194::o:0;17380:379::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;17461:16;17457:295:::1;;-1:-1:-1::0;;;;;;17494:10:0::1;17507:5;17494:10:::0;;;:4:::1;:10;::::0;;;;:18;;-1:-1:-1;;17494:18:0::1;::::0;;21062:862::o;17457:295::-:1;17549:4;::::0;:9;17545:127:::1;;17612:7;17605:4;;17587:15;:22;;;;:::i;:::-;:32;17579:77;;;::::0;-1:-1:-1;;;17579:77:0;;14374:2:1;17579:77:0::1;::::0;::::1;14356:21:1::0;;;14393:18;;;14386:30;14452:34;14432:18;;;14425:62;14504:18;;17579:77:0::1;14172:356:1::0;17579:77:0::1;-1:-1:-1::0;;;;;17686:10:0;::::1;;::::0;;;:4:::1;:10;::::0;;;;:17;;-1:-1:-1;;17686:17:0::1;17699:4;17686:17;::::0;;17725:15:::1;17718:4;:22:::0;17380:379;;:::o;15063:75::-;15104:13;15128:7;15121:14;;;;;:::i;19479:301::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;19562:13:::1;19600:7;19589;19579;;:17;;;;:::i;:::-;19578:29;;;;:::i;:::-;19562:45;;19646:4;19636:7;;:14;;;;:::i;:::-;19626:5;:25;;19618:73;;;;-1:-1:-1::0;;;19618:73:0::1;;;;;;;:::i;:::-;19702:7;:15:::0;;;19737:14:::1;::::0;19765:7;;19737:24:::1;::::0;19754:7;;19737:24:::1;:::i;:::-;19736:36;;;;:::i;:::-;19728:5;:44:::0;-1:-1:-1;;;19479:301:0:o;16601:225::-;2203:10;16694:4;16743:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16743:34:0;;;;;;;;;;16694:4;;16711:85;;16734:7;;16743:52;;16780:15;;16743:52;:::i;15632:167::-;15710:4;15727:42;2203:10;15751:9;15762:6;15727:9;:42::i;19788:266::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;19862:13:::1;19894:1;19889;19879:7;;:11;;;;:::i;:::-;19878:17;;;;:::i;:::-;19862:33;;19935:4;19925:7;;:14;;;;:::i;:::-;19915:5;:25;;19907:73;;;;-1:-1:-1::0;;;19907:73:0::1;;;;;;;:::i;:::-;19991:4;:12:::0;;;20023:14:::1;::::0;20045:1;;20023:18:::1;::::0;20040:1;;20023:18:::1;:::i;:::-;20022:24;;;;:::i;:::-;20014:5;:32:::0;-1:-1:-1;;;19788:266:0:o;20756:171::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;20833:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;20833:32:0::1;-1:-1:-1::0;;;;20833:32:0;;::::1;;::::0;;20881:38:::1;::::0;::::1;::::0;::::1;::::0;20857:8;1679:14:1;1672:22;1654:41;;1642:2;1627:18;;1514:187;20881:38:0::1;;;;;;;;20756:171:::0;:::o;18379:380::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;18505:6:::1;;18494:7;:17;;:57;;;;;18545:6;;18532:9;:19;;18494:57;:97;;;;;18585:6;;18572:9;:19;;18494:97;18486:124;;;::::0;::::1;;18664:4;18651:9:::0;18629:19:::1;18639:9:::0;18629:7;:19:::1;:::i;:::-;:31;;;;:::i;:::-;:39;;18621:48;;;::::0;::::1;;18680:5;:15:::0;;;;18706:5:::1;:17:::0;18734:5:::1;:17:::0;18379:380::o;16834:538::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;16907:29:::1;16958:9;16907:61;;16979:11;17011:10;-1:-1:-1::0;;;;;17011:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;16993:47:0::1;;17049:4;17056:10;-1:-1:-1::0;;;;;17056:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16993:81;::::0;-1:-1:-1;;;;;;16993:81:0::1;::::0;;;;;;-1:-1:-1;;;;;13170:15:1;;;16993:81:0::1;::::0;::::1;13152:34:1::0;13222:15;;13202:18;;;13195:43;13087:18;;16993:81:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16979:95:::0;-1:-1:-1;;;;;;17089:17:0;::::1;17085:197;;17150:10;-1:-1:-1::0;;;;;17150:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17132:50:0::1;;17191:4;17198:10;-1:-1:-1::0;;;;;17198:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17132:84;::::0;-1:-1:-1;;;;;;17132:84:0::1;::::0;;;;;;-1:-1:-1;;;;;13170:15:1;;;17132:84:0::1;::::0;::::1;13152:34:1::0;13222:15;;13202:18;;;13195:43;13087:18;;17132:84:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17123:6;:93:::0;;-1:-1:-1;;;;;;17123:93:0::1;-1:-1:-1::0;;;;;17123:93:0;;;::::1;::::0;;;::::1;::::0;;17085:197:::1;;;17258:6;:12:::0;;-1:-1:-1;;;;;;17258:12:0::1;-1:-1:-1::0;;;;;17258:12:0;::::1;;::::0;;17085:197:::1;17292:9;:22:::0;;-1:-1:-1;;;;;;17292:22:0::1;-1:-1:-1::0;;;;;17292:22:0;::::1;;::::0;;17325:39:::1;17342:4;17349:9:::0;-1:-1:-1;;17325:8:0::1;:39::i;20359:196::-:0;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;20452:13:::1;::::0;-1:-1:-1;;;;;20452:26:0;;::::1;:13:::0;::::1;:26;;20444:58;;;::::0;-1:-1:-1;;;20444:58:0;;10874:2:1;20444:58:0::1;::::0;::::1;10856:21:1::0;10913:2;10893:18;;;10886:30;-1:-1:-1;;;10932:18:1;;;10925:49;10991:18;;20444:58:0::1;10672:343:1::0;20444:58:0::1;20513:13;:34:::0;;-1:-1:-1;;;;;;20513:34:0::1;-1:-1:-1::0;;;;;20513:34:0;;;::::1;::::0;;;::::1;::::0;;20359:196::o;20062:289::-;11030:6;;-1:-1:-1;;;;;11030:6:0;2203:10;11030:22;11022:67;;;;-1:-1:-1;;;11022:67:0;;;;;;;:::i;:::-;20262:16:::1;20242;20232:7;;:26;;;;:::i;:::-;20231:47;;;;:::i;:::-;20215:13;:63:::0;20303:7:::1;::::0;20330:13;;20303:23:::1;::::0;20313:13;;20303:23:::1;:::i;:::-;20302:41;;;;:::i;:::-;20289:10;:54:::0;-1:-1:-1;;;;20062:289:0:o;22516:342::-;-1:-1:-1;;;;;22611:20:0;;22603:69;;;;-1:-1:-1;;;22603:69:0;;15139:2:1;22603:69:0;;;15121:21:1;15178:2;15158:18;;;15151:30;15217:34;15197:18;;;15190:62;-1:-1:-1;;;15268:18:1;;;15261:34;15312:19;;22603:69:0;14937:400:1;22603:69:0;-1:-1:-1;;;;;22691:21:0;;22683:68;;;;-1:-1:-1;;;22683:68:0;;15544:2:1;22683:68:0;;;15526:21:1;15583:2;15563:18;;;15556:30;15622:34;15602:18;;;15595:62;-1:-1:-1;;;15673:18:1;;;15666:32;15715:19;;22683:68:0;15342:398:1;22683:68:0;-1:-1:-1;;;;;22764:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;22817:33;;1852:25:1;;;22817:33:0;;1825:18:1;22817:33:0;;;;;;;22516:342;;;:::o;22866:1701::-;22945:4;-1:-1:-1;;;;;22970:18:0;;22962:68;;;;-1:-1:-1;;;22962:68:0;;15947:2:1;22962:68:0;;;15929:21:1;15986:2;15966:18;;;15959:30;16025:34;16005:18;;;15998:62;-1:-1:-1;;;16076:18:1;;;16069:35;16121:19;;22962:68:0;15745:401:1;22962:68:0;-1:-1:-1;;;;;23049:16:0;;23041:64;;;;-1:-1:-1;;;23041:64:0;;16353:2:1;23041:64:0;;;16335:21:1;16392:2;16372:18;;;16365:30;16431:34;16411:18;;;16404:62;-1:-1:-1;;;16482:18:1;;;16475:33;16525:19;;23041:64:0;16151:399:1;23041:64:0;23133:1;23124:6;:10;23116:64;;;;-1:-1:-1;;;23116:64:0;;16757:2:1;23116:64:0;;;16739:21:1;16796:2;16776:18;;;16769:30;16835:34;16815:18;;;16808:62;-1:-1:-1;;;16886:18:1;;;16879:39;16935:19;;23116:64:0;16555:405:1;23116:64:0;23194:20;23205:4;23211:2;23194:10;:20::i;:::-;23191:743;;;23235:8;;;;23231:83;;23264:34;;-1:-1:-1;;;23264:34:0;;17167:2:1;23264:34:0;;;17149:21:1;17206:2;17186:18;;;17179:30;17245:26;17225:18;;;17218:54;17289:18;;23264:34:0;16965:348:1;23231:83:0;23332:15;;;;23328:352;;;-1:-1:-1;;;;;23372:10:0;;;;;;:4;:10;;;;;;;;23368:297;;;23431:16;:12;23446:1;23431:16;:::i;:::-;-1:-1:-1;;;;;23414:13:0;;;;;;:9;:13;;;;;;:33;;23406:42;;;;;;-1:-1:-1;;;;;23471:13:0;;;;;;:9;:13;;;;;23487:12;23471:28;;23368:297;;;23575:16;:12;23590:1;23575:16;:::i;:::-;-1:-1:-1;;;;;23556:15:0;;;;;;:9;:15;;;;;;:35;;23548:44;;;;;;-1:-1:-1;;;;;23615:15:0;;;;;;:9;:15;;;;;23633:12;23615:30;;23368:297;23712:7;;23702:6;:17;;23694:63;;;;-1:-1:-1;;;23694:63:0;;17520:2:1;23694:63:0;;;17502:21:1;17559:2;17539:18;;;17532:30;17598:34;17578:18;;;17571:62;-1:-1:-1;;;17649:18:1;;;17642:31;17690:19;;23694:63:0;17318:397:1;23694:63:0;23781:14;;-1:-1:-1;;;;;23775:20:0;;;23781:14;;23775:20;;;;:33;;-1:-1:-1;;;;;;23800:8:0;;;;;;:4;:8;;;;;;;;23799:9;23775:33;23772:151;;;23863:4;;23853:6;23837:13;23847:2;23837:9;:13::i;:::-;:22;;;;:::i;:::-;:30;;23829:78;;;;-1:-1:-1;;;23829:78:0;;17922:2:1;23829:78:0;;;17904:21:1;17961:2;17941:18;;;17934:30;18000:34;17980:18;;;17973:62;-1:-1:-1;;;18051:18:1;;;18044:33;18094:19;;23829:78:0;17720:399:1;23829:78:0;-1:-1:-1;;;;;23977:11:0;;23944:12;23977:11;;;:5;:11;;;;;;23959:4;;23977:11;;;:24;;-1:-1:-1;;;;;;23992:9:0;;;;;;:5;:9;;;;;;;;23977:24;23974:70;;;-1:-1:-1;24027:5:0;23974:70;-1:-1:-1;;;;;24060:8:0;;;;;;:4;:8;;;;;;;;24056:454;;;24090:16;;-1:-1:-1;;;24090:16:0;;;;24089:17;:59;;;;-1:-1:-1;24127:21:0;;-1:-1:-1;;;24127:21:0;;;;24089:59;24085:408;;;24183:28;24214:24;24232:4;24214:9;:24::i;:::-;24183:55;;24285:13;;24261:20;:37;24257:221;;24350:10;;24326:20;:34;24323:77;;-1:-1:-1;24387:10:0;;24323:77;24422:36;24437:20;24422:14;:36::i;:::-;24164:329;24085:408;24528:31;24533:4;24539:2;24543:6;24551:7;24528:4;:31::i;:::-;24521:38;22866:1701;-1:-1:-1;;;;;22866:1701:0:o;29435:161::-;29477:7;29498:15;29515;29534:19;:17;:19::i;:::-;29497:56;;-1:-1:-1;29497:56:0;-1:-1:-1;29571:17:0;29497:56;;29571:17;:::i;:::-;29564:24;;;;29435:161;:::o;22027:219::-;22096:4;13869:6;;-1:-1:-1;;;;;22120:15:0;;;13869:6;;22120:15;;;;:33;;-1:-1:-1;13842:7:0;13869:6;-1:-1:-1;;;;;22140:13:0;;;13869:6;;22140:13;;22120:33;:45;;;;-1:-1:-1;;;;;;22158:7:0;;;;;;:3;:7;;;;;;;;22157:8;22120:45;:59;;;;-1:-1:-1;;;;;;22170:9:0;;;;;;:3;:9;;;;;;;;22169:10;22120:59;:73;;;;-1:-1:-1;22189:4:0;;-1:-1:-1;;;;;22183:10:0;;;22189:4;;22183:10;;22120:73;:93;;;;-1:-1:-1;;;;;;22197:16:0;;;;22120:93;:118;;;;-1:-1:-1;;;;;;22217:21:0;;22233:4;22217:21;;22113:125;22027:219;-1:-1:-1;;;22027:219:0:o;24575:1487::-;10904:16;:23;;-1:-1:-1;;;;10904:23:0;-1:-1:-1;;;10904:23:0;;;24683:12:::1;::::0;24665:15:::1;::::0;:30:::1;::::0;24683:12;24665:30:::1;:::i;:::-;24661:61;;24715:7;;24661:61;24732:17;24832:1;24815:12;;24797:15;;:30;;;;:::i;:::-;24777:15;::::0;24754:38:::1;::::0;:20;:38:::1;:::i;:::-;24753:75;;;;:::i;:::-;24752:81;;;;:::i;:::-;24732:101:::0;-1:-1:-1;24846:20:0::1;24869:32;24732:101:::0;24869:20;:32:::1;:::i;:::-;24938:16;::::0;;24952:1:::1;24938:16:::0;;;;;::::1;::::0;;24846:55;;-1:-1:-1;24914:21:0::1;::::0;24938:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24938:16:0::1;24914:40;;24983:4;24965;24970:1;24965:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24965:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25009:9:::1;::::0;:16:::1;::::0;;-1:-1:-1;;;25009:16:0;;;;:9;;;::::1;::::0;:14:::1;::::0;:16:::1;::::0;;::::1;::::0;24965:7;;25009:16;;;;;:9;:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24999:4;25004:1;24999:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24999:26:0;;::::1;:7;::::0;;::::1;::::0;;;;;:26;25038:9:::1;::::0;:191:::1;::::0;-1:-1:-1;;;25038:191:0;;:9;::::1;::::0;:60:::1;::::0;:191:::1;::::0;25113:12;;25038:9:::1;::::0;25156:4;;25183::::1;::::0;25203:15:::1;::::0;25038:191:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25244:24;25352:1;25335:12;;25317:15;;:30;;;;:::i;:::-;25297:15;::::0;25273:39:::1;::::0;:21:::1;:39;:::i;:::-;25272:76;;;;:::i;:::-;25271:82;;;;:::i;:::-;25244:109:::0;-1:-1:-1;25370:13:0;;25366:350:::1;;25400:9;::::0;25571:10:::1;::::0;25400:230:::1;::::0;-1:-1:-1;;;25400:230:0;;-1:-1:-1;;;;;25400:9:0;;::::1;::::0;:25:::1;::::0;25433:16;;25400:230:::1;::::0;25477:4:::1;::::0;25501:9;;25400::::1;::::0;;;25571:10:::1;::::0;25600:15:::1;::::0;25400:230:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;25650:54:0::1;::::0;;19931:25:1;;;19987:2;19972:18;;19965:34;;;20015:18;;;20008:34;;;25650:54:0::1;::::0;-1:-1:-1;19919:2:1;19904:18;25650:54:0::1;;;;;;;25366:350;25765:1;25730:32;25753:9:::0;25730:20;:32:::1;:::i;:::-;:36;25726:329;;;25889:7;::::0;25880:6:::1;::::0;25810:21:::1;::::0;25785::::1;::::0;25865:22:::1;::::0;25810:21;25865:22:::1;:::i;:::-;:32;;;;:::i;:::-;25847:50;;25912:12;25951:4;;25942:6;;25927:13;:22;;;;:::i;:::-;:29;;;;:::i;:::-;25958:10;::::0;:25:::1;::::0;25912:44;;-1:-1:-1;;;;;;25958:10:0::1;::::0;:25;::::1;;;::::0;25912:44;;25958:10:::1;:25:::0;:10;:25;25912:44;25958:10;:25;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;25999:13:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;25999:13:0;;::::1;::::0;:31;::::1;;;::::0;26022:7;;25999:13:::1;:31:::0;:13;:31;26022:7;25999:13;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25768:287;;;25726:329;24650:1412;;;;10938:1;-1:-1:-1::0;10950:16:0;:24;;-1:-1:-1;;;;10950:24:0;;;24575:1487::o;26991:1181::-;27106:16;;27080:4;;27106:16;;;;;27101:237;;27143:28;27162:4;27168:2;27143:18;:28::i;:::-;27195:16;;;;;;;27194:17;:41;;;;;27215:20;27226:4;27232:2;27215:10;:20::i;:::-;27190:137;;;27260:47;;-1:-1:-1;;;27260:47:0;;20255:2:1;27260:47:0;;;20237:21:1;20294:2;20274:18;;;20267:30;20333:34;20313:18;;;20306:62;-1:-1:-1;;;20384:18:1;;;20377:35;20429:19;;27260:47:0;20053:401:1;27190:137:0;27358:25;27386:38;27397:4;27403:2;27407:7;27416;27386:10;:38::i;:::-;27463:14;;;;-1:-1:-1;;;;;27450:10:0;;;;;;:4;:10;;;;;;27358:66;;-1:-1:-1;27450:27:0;;;:::i;:::-;-1:-1:-1;;;;;27437:10:0;;;;;;;:4;:10;;;;;;:40;;;;27510:22;;;;27499:8;;;;;;;;;;:33;;27510:22;27499:33;:::i;:::-;-1:-1:-1;;;;;27488:8:0;;;;;;;:4;:8;;;;;;;;:44;;;;27549:9;;;;;:3;:9;;;;;;;:21;;;;-1:-1:-1;;;;;;27563:7:0;;;;;;:3;:7;;;;;;;;27562:8;27549:21;27545:344;;;-1:-1:-1;;;;;27600:10:0;;;;;;:4;:10;;;;;;:20;;27613:7;;27600:20;:::i;:::-;-1:-1:-1;;;;;27587:10:0;;;;;;:4;:10;;;;;:33;27545:344;;;-1:-1:-1;;;;;27643:9:0;;;;;;:3;:9;;;;;;;;27642:10;:21;;;;-1:-1:-1;;;;;;27656:7:0;;;;;;:3;:7;;;;;;;;27642:21;27638:251;;;27702:22;;-1:-1:-1;;;;;27691:8:0;;27702:22;27691:8;;;:4;:8;;;;;;:33;;27702:22;27691:33;:::i;:::-;-1:-1:-1;;;;;27680:8:0;;;;;;:4;:8;;;;;:44;27638:251;;;-1:-1:-1;;;;;27748:9:0;;;;;;:3;:9;;;;;;;;:20;;;;-1:-1:-1;;;;;;27761:7:0;;;;;;:3;:7;;;;;;;;27748:20;27744:145;;;-1:-1:-1;;;;;27798:10:0;;;;;;:4;:10;;;;;;:20;;27811:7;;27798:20;:::i;:::-;-1:-1:-1;;;;;27785:10:0;;;;;;;:4;:10;;;;;;:33;;;;27855:22;;27844:8;;;;;;;;;;:33;;27855:22;27844:33;:::i;:::-;-1:-1:-1;;;;;27833:8:0;;;;;;:4;:8;;;;;:44;27744:145;27905:17;;;;:21;27901:79;;27941:39;27956:4;27962:6;:17;;;27941:14;:39::i;:::-;28009:1;27995:6;:11;;;:15;:34;;;;28028:1;28014:6;:11;;;:15;27995:34;27991:91;;;28044:38;28057:6;:11;;;28070:6;:11;;;28044:12;:38::i;:::-;28115:2;-1:-1:-1;;;;;28100:42:0;28109:4;-1:-1:-1;;;;;28100:42:0;;28119:6;:22;;;28100:42;;;;1852:25:1;;1840:2;1825:18;;1706:177;28100:42:0;;;;;;;;-1:-1:-1;28160:4:0;;26991:1181;-1:-1:-1;;;;;26991:1181:0:o;29604:535::-;29702:7;;29738;;29655;;;;;29756:271;29780:9;:16;29776:20;;29756:271;;;29843:7;29822:4;:18;29827:9;29837:1;29827:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29827:12:0;29822:18;;;;;;;;;;;;;:28;;:60;;;29875:7;29854:4;:18;29859:9;29869:1;29859:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29859:12:0;29854:18;;;;;;;;;;;;;:28;29822:60;29818:91;;;29892:7;;29901;;29884:25;;;;;;;29604:535;;:::o;29818:91::-;29944:4;:18;29949:9;29959:1;29949:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29949:12:0;29944:18;;;;;;;;;;;;;29934:28;;:7;:28;:::i;:::-;29924:38;;29997:4;:18;30002:9;30012:1;30002:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30002:12:0;29997:18;;;;;;;;;;;;;29987:28;;:7;:28;:::i;:::-;29977:38;-1:-1:-1;29798:3:0;;;;:::i;:::-;;;;29756:271;;;;30061:7;;30051;;:17;;;;:::i;:::-;30041:7;:27;30037:58;;;30078:7;;30087;;30070:25;;;;;;29604:535;;:::o;30037:58::-;30114:7;;30123;;-1:-1:-1;29604:535:0;-1:-1:-1;29604:535:0:o;26078:417::-;26161:16;;;;;;;26160:17;26152:57;;;;-1:-1:-1;;;26152:57:0;;20661:2:1;26152:57:0;;;20643:21:1;20700:2;20680:18;;;20673:30;20739:29;20719:18;;;20712:57;20786:18;;26152:57:0;20459:351:1;26152:57:0;26225:20;26236:4;26242:2;26225:10;:20::i;:::-;26224:21;:37;;;;-1:-1:-1;26255:6:0;;-1:-1:-1;;;;;26249:12:0;;;26255:6;;26249:12;26224:37;26220:268;;;-1:-1:-1;;;;;26278:9:0;;;;;;:3;:9;;;;;;;:16;;-1:-1:-1;;26278:16:0;26290:4;26278:16;;;;;;26309;:23;;-1:-1:-1;;26309:23:0;26278:16;26309:23;;;26362:15;26347:12;:30;26394:21;:28;;-1:-1:-1;;;;26394:28:0;-1:-1:-1;;;26394:28:0;;;26442:34;;;;;;1679:14:1;;1672:22;1654:41;;1642:2;1627:18;;1514:187;26442:34:0;;;;;;;;26078:417;;:::o;28180:1247::-;28275:18;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28275:18:0;28306:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28306:25:0;28342:19;28364:10;:8;:10::i;:::-;28342:32;-1:-1:-1;28404:21:0;28342:32;28404:7;:21;:::i;:::-;28387:14;;;:38;28438:854;;;;-1:-1:-1;;;;;28469:8:0;;;;;;:4;:8;;;;;;;;28465:369;;;28505:5;;28498:4;:12;28536:5;;28529:4;:12;28567:5;;28560:4;:12;28465:369;;;-1:-1:-1;;;;;28598:10:0;;;;;;:4;:10;;;;;;;;28594:240;;;28636:5;;28629:4;:12;28667:5;;28660:4;:12;28698:5;;28691:4;:12;28594:240;;;28751:5;;28744:4;:12;28782:5;;28775:4;:12;28813:5;;28806:4;:12;28594:240;28883:16;;28875:4;;28865:14;;:7;:14;:::i;:::-;28864:35;;;;:::i;:::-;28850:11;;;:49;28962:16;;28953:4;;28946;;:11;;28953:4;28946:11;:::i;:::-;28935:23;;:7;:23;:::i;:::-;28934:44;;;;:::i;:::-;28914:17;;;:64;;;29029:11;;;;:31;;28914:64;29029:31;:::i;:::-;29018:43;;:7;:43;:::i;:::-;28993:68;;29092:11;;;;:25;;29106:11;;29092:25;:::i;:::-;29078:11;;;:39;28438:854;;;29164:1;29150:11;;;:15;;;29180:17;;;:21;;;29216:32;;;29265:11;;;:15;28438:854;29382:11;29362:6;:17;;;:31;;;;:::i;:::-;29347:6;:11;;;:47;;;;:::i;:::-;29329:6;:14;;;:66;;;;:::i;:::-;29304:22;;;:91;-1:-1:-1;29304:22:0;28180:1247;-1:-1:-1;;;;;28180:1247:0:o;30426:403::-;30506:19;30529:10;:8;:10::i;:::-;30506:33;-1:-1:-1;30550:18:0;30571:24;30506:33;30571:10;:24;:::i;:::-;30641:4;30628:19;;;;:4;:19;;;;;;30550:45;;-1:-1:-1;30628:32:0;;30550:45;;30628:32;:::i;:::-;30619:4;30606:19;;;;:4;:19;;;;;;;;:54;;;;30674:3;:18;;;;;;30671:90;;;30742:4;30729:19;;;;:4;:19;;;;;;:32;;30751:10;;30729:32;:::i;:::-;30720:4;30707:19;;;;:4;:19;;;;;:54;30671:90;30777:43;;1852:25:1;;;30802:4:0;;-1:-1:-1;;;;;30777:43:0;;;;;1840:2:1;1825:18;30777:43:0;;;;;;;30495:334;;30426:403;;:::o;30151:143::-;30241:4;30231:7;;:14;;;;:::i;:::-;30221:7;:24;30269:10;;:17;;30282:4;;30269:17;:::i;:::-;30256:10;:30;-1:-1:-1;;30151:143:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;222:597:1;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;1058:131::-;-1:-1:-1;;;;;1133:31:1;;1123:42;;1113:70;;1179:1;1176;1169:12;1194:315;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1378:9;1365:23;1397:31;1422:5;1397:31;:::i;:::-;1447:5;1499:2;1484:18;;;;1471:32;;-1:-1:-1;;;1194:315:1:o;1888:316::-;1965:6;1973;1981;2034:2;2022:9;2013:7;2009:23;2005:32;2002:52;;;2050:1;2047;2040:12;2002:52;-1:-1:-1;;2073:23:1;;;2143:2;2128:18;;2115:32;;-1:-1:-1;2194:2:1;2179:18;;;2166:32;;1888:316;-1:-1:-1;1888:316:1:o;2209:160::-;2274:20;;2330:13;;2323:21;2313:32;;2303:60;;2359:1;2356;2349:12;2303:60;2209:160;;;:::o;2374:315::-;2439:6;2447;2500:2;2488:9;2479:7;2475:23;2471:32;2468:52;;;2516:1;2513;2506:12;2468:52;2555:9;2542:23;2574:31;2599:5;2574:31;:::i;:::-;2624:5;-1:-1:-1;2648:35:1;2679:2;2664:18;;2648:35;:::i;:::-;2638:45;;2374:315;;;;;:::o;2694:456::-;2771:6;2779;2787;2840:2;2828:9;2819:7;2815:23;2811:32;2808:52;;;2856:1;2853;2846:12;2808:52;2895:9;2882:23;2914:31;2939:5;2914:31;:::i;:::-;2964:5;-1:-1:-1;3021:2:1;3006:18;;2993:32;3034:33;2993:32;3034:33;:::i;:::-;2694:456;;3086:7;;-1:-1:-1;;;3140:2:1;3125:18;;;;3112:32;;2694:456::o;3155:180::-;3214:6;3267:2;3255:9;3246:7;3242:23;3238:32;3235:52;;;3283:1;3280;3273:12;3235:52;-1:-1:-1;3306:23:1;;3155:180;-1:-1:-1;3155:180:1:o;3529:247::-;3588:6;3641:2;3629:9;3620:7;3616:23;3612:32;3609:52;;;3657:1;3654;3647:12;3609:52;3696:9;3683:23;3715:31;3740:5;3715:31;:::i;3781:248::-;3849:6;3857;3910:2;3898:9;3889:7;3885:23;3881:32;3878:52;;;3926:1;3923;3916:12;3878:52;-1:-1:-1;;3949:23:1;;;4019:2;4004:18;;;3991:32;;-1:-1:-1;3781:248:1:o;4294:127::-;4355:10;4350:3;4346:20;4343:1;4336:31;4386:4;4383:1;4376:15;4410:4;4407:1;4400:15;4426:719;4469:5;4522:3;4515:4;4507:6;4503:17;4499:27;4489:55;;4540:1;4537;4530:12;4489:55;4576:6;4563:20;4602:18;4639:2;4635;4632:10;4629:36;;;4645:18;;:::i;:::-;4720:2;4714:9;4688:2;4774:13;;-1:-1:-1;;4770:22:1;;;4794:2;4766:31;4762:40;4750:53;;;4818:18;;;4838:22;;;4815:46;4812:72;;;4864:18;;:::i;:::-;4904:10;4900:2;4893:22;4939:2;4931:6;4924:18;4985:3;4978:4;4973:2;4965:6;4961:15;4957:26;4954:35;4951:55;;;5002:1;4999;4992:12;4951:55;5066:2;5059:4;5051:6;5047:17;5040:4;5032:6;5028:17;5015:54;5113:1;5106:4;5101:2;5093:6;5089:15;5085:26;5078:37;5133:6;5124:15;;;;;;4426:719;;;;:::o;5150:836::-;5272:6;5280;5288;5296;5349:3;5337:9;5328:7;5324:23;5320:33;5317:53;;;5366:1;5363;5356:12;5317:53;5405:9;5392:23;5424:31;5449:5;5424:31;:::i;:::-;5474:5;-1:-1:-1;5531:2:1;5516:18;;5503:32;5544:33;5503:32;5544:33;:::i;:::-;5596:7;-1:-1:-1;5654:2:1;5639:18;;5626:32;5677:18;5707:14;;;5704:34;;;5734:1;5731;5724:12;5704:34;5757:50;5799:7;5790:6;5779:9;5775:22;5757:50;:::i;:::-;5747:60;;5860:2;5849:9;5845:18;5832:32;5816:48;;5889:2;5879:8;5876:16;5873:36;;;5905:1;5902;5895:12;5873:36;;5928:52;5972:7;5961:8;5950:9;5946:24;5928:52;:::i;:::-;5918:62;;;5150:836;;;;;;;:::o;5991:180::-;6047:6;6100:2;6088:9;6079:7;6075:23;6071:32;6068:52;;;6116:1;6113;6106:12;6068:52;6139:26;6155:9;6139:26;:::i;6176:388::-;6244:6;6252;6305:2;6293:9;6284:7;6280:23;6276:32;6273:52;;;6321:1;6318;6311:12;6273:52;6360:9;6347:23;6379:31;6404:5;6379:31;:::i;:::-;6429:5;-1:-1:-1;6486:2:1;6471:18;;6458:32;6499:33;6458:32;6499:33;:::i;:::-;6551:7;6541:17;;;6176:388;;;;;:::o;6569:385::-;6655:6;6663;6671;6679;6732:3;6720:9;6711:7;6707:23;6703:33;6700:53;;;6749:1;6746;6739:12;6700:53;-1:-1:-1;;6772:23:1;;;6842:2;6827:18;;6814:32;;-1:-1:-1;6893:2:1;6878:18;;6865:32;;6944:2;6929:18;6916:32;;-1:-1:-1;6569:385:1;-1:-1:-1;6569:385:1:o;6959:380::-;7038:1;7034:12;;;;7081;;;7102:61;;7156:4;7148:6;7144:17;7134:27;;7102:61;7209:2;7201:6;7198:14;7178:18;7175:38;7172:161;;;7255:10;7250:3;7246:20;7243:1;7236:31;7290:4;7287:1;7280:15;7318:4;7315:1;7308:15;7172:161;;6959:380;;;:::o;7344:356::-;7546:2;7528:21;;;7565:18;;;7558:30;7624:34;7619:2;7604:18;;7597:62;7691:2;7676:18;;7344:356::o;8419:127::-;8480:10;8475:3;8471:20;8468:1;8461:31;8511:4;8508:1;8501:15;8535:4;8532:1;8525:15;8551:127;8612:10;8607:3;8603:20;8600:1;8593:31;8643:4;8640:1;8633:15;8667:4;8664:1;8657:15;8683:125;8723:4;8751:1;8748;8745:8;8742:34;;;8756:18;;:::i;:::-;-1:-1:-1;8793:9:1;;8683:125::o;8813:127::-;8874:10;8869:3;8865:20;8862:1;8855:31;8905:4;8902:1;8895:15;8929:4;8926:1;8919:15;8945:135;8984:3;-1:-1:-1;;9005:17:1;;9002:43;;;9025:18;;:::i;:::-;-1:-1:-1;9072:1:1;9061:13;;8945:135::o;9496:127::-;9557:10;9552:3;9548:20;9545:1;9538:31;9588:4;9585:1;9578:15;9612:4;9609:1;9602:15;9628:120;9668:1;9694;9684:35;;9699:18;;:::i;:::-;-1:-1:-1;9733:9:1;;9628:120::o;9753:128::-;9793:3;9824:1;9820:6;9817:1;9814:13;9811:39;;;9830:18;;:::i;:::-;-1:-1:-1;9866:9:1;;9753:128::o;9886:425::-;10088:2;10070:21;;;10127:2;10107:18;;;10100:30;10166:34;10161:2;10146:18;;10139:62;10237:31;10232:2;10217:18;;10210:59;10301:3;10286:19;;9886:425::o;11020:422::-;11109:1;11152:5;11109:1;11166:270;11187:7;11177:8;11174:21;11166:270;;;11246:4;11242:1;11238:6;11234:17;11228:4;11225:27;11222:53;;;11255:18;;:::i;:::-;11305:7;11295:8;11291:22;11288:55;;;11325:16;;;;11288:55;11404:22;;;;11364:15;;;;11166:270;;;11170:3;11020:422;;;;;:::o;11447:806::-;11496:5;11526:8;11516:80;;-1:-1:-1;11567:1:1;11581:5;;11516:80;11615:4;11605:76;;-1:-1:-1;11652:1:1;11666:5;;11605:76;11697:4;11715:1;11710:59;;;;11783:1;11778:130;;;;11690:218;;11710:59;11740:1;11731:10;;11754:5;;;11778:130;11815:3;11805:8;11802:17;11799:43;;;11822:18;;:::i;:::-;-1:-1:-1;;11878:1:1;11864:16;;11893:5;;11690:218;;11992:2;11982:8;11979:16;11973:3;11967:4;11964:13;11960:36;11954:2;11944:8;11941:16;11936:2;11930:4;11927:12;11923:35;11920:77;11917:159;;;-1:-1:-1;12029:19:1;;;12061:5;;11917:159;12108:34;12133:8;12127:4;12108:34;:::i;:::-;12178:6;12174:1;12170:6;12166:19;12157:7;12154:32;12151:58;;;12189:18;;:::i;:::-;12227:20;;11447:806;-1:-1:-1;;;11447:806:1:o;12258:131::-;12318:5;12347:36;12374:8;12368:4;12347:36;:::i;12394:168::-;12434:7;12500:1;12496;12492:6;12488:14;12485:1;12482:21;12477:1;12470:9;12463:17;12459:45;12456:71;;;12507:18;;:::i;:::-;-1:-1:-1;12547:9:1;;12394:168::o;12567:112::-;12599:1;12625;12615:35;;12630:18;;:::i;:::-;-1:-1:-1;12664:9:1;;12567:112::o;12684:251::-;12754:6;12807:2;12795:9;12786:7;12782:23;12778:32;12775:52;;;12823:1;12820;12813:12;12775:52;12855:9;12849:16;12874:31;12899:5;12874:31;:::i;13249:607::-;-1:-1:-1;;;;;13608:15:1;;;13590:34;;13655:2;13640:18;;13633:34;;;;13698:2;13683:18;;13676:34;;;;13741:2;13726:18;;13719:34;;;;13790:15;;;13784:3;13769:19;;13762:44;13570:3;13822:19;;13815:35;;;;13539:3;13524:19;;13249:607::o;13861:306::-;13949:6;13957;13965;14018:2;14006:9;13997:7;13993:23;13989:32;13986:52;;;14034:1;14031;14024:12;13986:52;14063:9;14057:16;14047:26;;14113:2;14102:9;14098:18;14092:25;14082:35;;14157:2;14146:9;14142:18;14136:25;14126:35;;13861:306;;;;;:::o;14533:399::-;14735:2;14717:21;;;14774:2;14754:18;;;14747:30;14813:34;14808:2;14793:18;;14786:62;-1:-1:-1;;;14879:2:1;14864:18;;14857:33;14922:3;14907:19;;14533:399::o;18124:980::-;18386:4;18434:3;18423:9;18419:19;18465:6;18454:9;18447:25;18491:2;18529:6;18524:2;18513:9;18509:18;18502:34;18572:3;18567:2;18556:9;18552:18;18545:31;18596:6;18631;18625:13;18662:6;18654;18647:22;18700:3;18689:9;18685:19;18678:26;;18739:2;18731:6;18727:15;18713:29;;18760:1;18770:195;18784:6;18781:1;18778:13;18770:195;;;18849:13;;-1:-1:-1;;;;;18845:39:1;18833:52;;18940:15;;;;18905:12;;;;18881:1;18799:9;18770:195;;;-1:-1:-1;;;;;;;19021:32:1;;;;19016:2;19001:18;;18994:60;-1:-1:-1;;;19085:3:1;19070:19;19063:35;18982:3;18124:980;-1:-1:-1;;;18124:980:1:o

Swarm Source

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